SQL Server : 서버를 모든 점검 제약 조건을 확인하는 방법은 무엇입니까?
문제
엔터프라이즈 관리자가 생성 한 일부 스크립트* (또는 중요하지 않음)이 확인 제약 조건을 생성 한 것 같습니다. Nocheck과 함께.
이제 누군가가 테이블을 수정하면 SQL Server가 실패한 점검 제약을 통해 걸려 넘어지고 있습니다, 그리고 던지기 오류.
SQL이 모든 수표 제약 조건을 통해 확인하고 확인할 수 있습니까?
달리기:
sp_msforeachtable 'ALTER TABLE ? CHECK CONSTRAINT all'
이전에 비활성화 된 확인 제약 조건 만 활성화하면 실제로 확인하지 않습니다.
각주
* SQL Server 2000
해결책
All_constraints를 통한 DBCC CheckConstraints 실제로 당신의 제약을 신뢰하지 않을 것입니다. 제약 조건을 위반하는 행을보고합니다. 실제로 모든 제약을 신뢰할 수 있도록 다음을 수행 할 수 있습니다.
DBCC CHECKCONSTRAINTS WITH ALL_CONSTRAINTS --This reports any data that violates constraints.
--This reports all constraints that are not trusted
SELECT OBJECT_NAME(parent_object_id) AS table_name, name, is_disabled
FROM sys.check_constraints
WHERE is_not_trusted = 1
UNION ALL
SELECT OBJECT_NAME(parent_object_id) AS table_name, name, is_disabled
FROM sys.foreign_keys
WHERE is_not_trusted = 1
ORDER BY table_name
SQL Server 2000에서는 다음과 같은 신뢰할 수없는 제약 조건을 찾을 수 있습니다.
--Reports all constraints that are not trusted (SQL 2000)
SELECT name, type, status,
(status & 2048) AS IsTrusted,
(status & 256) AS IsEnabled,
OBJECTPROPERTY(id,'CnstIsNotTrusted') as is_not_trusted,
OBJECTPROPERTY(id,'CnstIsDisabled') as is_disabled
FROM sysobjects
WHERE type IN ('C', 'F') --C=Constraint, F=Foreign Key
AND OBJECTPROPERTY(id,'CnstIsNotTrusted') <> 0
AND OBJECTPROPERTY(id,'CnstIsDisabled') = 0
그런 다음 제약 조건을 다시 확인합니다 수표로:
--This makes all constraints trusted
-- but first anything reported by DBCC CHECKCONSTRAINTS WITH ALL_CONSTRAINTS must be fixed.
exec sp_msforeachtable 'ALTER TABLE ? WITH CHECK CHECK CONSTRAINT all'
메모: 마지막 진술에서 WITH CHECK CHECK
오타가 아닙니다. "확인"은 모든 테이블 데이터를 확인하여 위반이 없는지 확인하고 제약 조건을 신뢰할 수 있으며, 수표는 제약 조건이 활성화되어 있는지 확인합니다.
또한보십시오:http://sqlblog.com/blogs/tibor_karaszi/archive/2008/01/12/non-trusted-constraints.aspx
다른 팁
제약 조건이 활성화되어 있는지 여부에 관계없이 현재 데이터베이스의 모든 테이블에 대한 모든 제약 조건을 확인합니다.
DBCC CHECKCONSTRAINTS WITH ALL_CONSTRAINTS
활성화 된 제약 조건 만 확인하려면 다음과 같습니다.
DBCC CHECKCONSTRAINTS