sys.dm_db_objects_disabled_on_compatibility_level_change(Transact-SQL)
호환성 수준 변경의 결과로 비활성화되는 인덱스 및 제약 조건을 나열합니다.
식에서 공간 UDT를 사용하는 지속형 계산 열을 포함하는 인덱스 및 제약 조건은 호환성 수준을 업그레이드하거나 변경하면 비활성화됩니다. 이 동적 관리 함수를 사용하여 호환성 수준 변경의 결과를 확인할 수 있습니다.
구문
sys.dm_db_objects_disabled_on_compatibility_level_change ( compatibility_level )
인수
- compatibility_level
설정하려는 호환성 수준을 식별하는 int입니다.
반환된 테이블
열 이름 |
데이터 형식 |
설명 |
---|---|---|
클래스 |
int |
1 = 제약 조건 7 = 인덱스 및 힙 |
class_desc |
nvarchar(60) |
제약 조건의 경우 OBJECT 또는 COLUMN 인덱스 및 힙의 경우 INDEX |
major_id |
int |
제약 조건의 개체 ID 인덱스 및 힙을 포함하는 테이블의 개체 ID |
minor_id |
int |
제약 조건의 경우 NULL 인덱스 및 힙의 경우 Index_id |
dependency |
nvarchar(60) |
제약 조건 또는 인덱스의 비활성을 야기하는 종속성에 대한 설명입니다. 업그레이드 중 발생하는 경고에도 동일한 값이 사용됩니다. 이러한 데이터의 예는 다음과 같습니다.
|
일반적인 주의
호환성 수준을 변경하면 일부 내장 함수를 사용하는 지속형 계산 열이 비활성화됩니다. 또한 Geometry나 Geography 메서드를 사용하는 지속형 계산 열은 데이터베이스 업그레이드 시 비활성화됩니다.
지속형 계산 열을 비활성화하는 함수
지속형 계산 열의 식에서 다음 함수를 사용할 경우 호환성 수준을 80에서 90으로 변경하면 해당 열을 참조하는 인덱스 및 제약 조건이 비활성화됩니다.
- IsNumeric
지속형 계산 열의 식에서 다음 함수를 사용할 경우 호환성 수준을 100에서 110으로 변경하면 해당 열을 참조하는 인덱스 및 제약 조건이 비활성화됩니다.
Soundex
Geography:: GeomFromGML
Geography:: STGeomFromText
Geography:: STLineFromText
Geography:: STPolyFromText
Geography:: STMPointFromText
Geography:: STMLineFromText
Geography:: STMPolyFromText
Geography:: STGeomCollFromText
Geography:: STGeomFromWKB
Geography:: STLineFromWKB
Geography:: STPolyFromWKB
Geography:: STMPointFromWKB
Geography:: STMLineFromWKB
Geography:: STMPolyFromWKB
Geography:: STUnion
Geography:: STIntersection
Geography:: STDifference
Geography:: STSymDifference
Geography:: STBuffer
Geography:: BufferWithTolerance
Geography:: Parse
Geography:: Reduce
비활성화된 개체의 동작
인덱스
클러스터형 인덱스가 비활성화되거나 비클러스터형 인덱스가 강제로 비활성화되면 다음 오류가 발생합니다. "테이블 또는 뷰 '%.*ls'의 인덱스 '%.*ls'이(가) 비활성화되었으므로 쿼리 프로세서에서 계획을 생성할 수 없습니다." 이러한 개체를 다시 활성화하려면 업그레이드 후 ALTER INDEX ON … REBUILD를 호출하여 인덱스를 다시 작성하십시오.
힙
비활성화된 힙이 포함된 테이블을 사용하면 다음 오류가 발생합니다. 이러한 개체를 다시 활성화하려면 업그레이드 후 ALTER INDEX ALL ON … REBUILD를 호출하여 다시 작성하십시오.
// ErrorNumber: 8674
// ErrorSeverity: EX_USER
// ErrorFormat: The query processor is unable to produce a plan because the table or view '%.*ls' is disabled.
// ErrorCause: The table has a disabled heap.
// ErrorCorrectiveAction: Rebuild the disabled heap to enable it.
// ErrorInserts: table or view name
// ErrorOwner: mtintor
// ErrorFirstProduct: SQL11
온라인 작업 중 힙을 다시 작성하려고 하면 다음 오류가 발생합니다.
// ErrorNumber: TBD
// ErrorSeverity: EX_USER
// ErrorFormat: Cannot rebuild table '%.*ls' online because it is disabled.
// ErrorInserts: table name
// ErrorCause: Table cannot be rebuilt online if it is disabled.
// ErrorCorrectiveAction: Rebuild the disabled table offline.
// ErrorExecImpact: TRANSACTION_ABORT
// ErrorBlameComponent: User
// ErrorProbability: Low
// ErrorStateBefore: ONLINE
// ErrorStateAfter: ONLINE
// ErrorFirstProduct: SQL11
CHECK 제약 조건 및 외래 키
비활성화된 CHECK 제약 조건 및 외래 키는 오류를 일으키지 않습니다. 그러나 행이 수정될 때 제약 조건이 적용되지 않습니다. 이러한 개체를 다시 활성화하려면 업그레이드 후 ALTER TABLE … CHECK CONSTRAINT를 호출하여 제약 조건을 확인하십시오.
지속형 계산 열
단일 열은 비활성화할 수 없으므로 클러스터형 인덱스나 힙을 비활성화하여 전체 테이블이 비활성화됩니다.
보안
사용 권한
VIEW DATABASE STATE 권한이 필요합니다.
예
다음 예에서는 호환성 수준을 110으로 변경한 결과 영향을 받는 개체를 찾기 위해 sys.dm_db_objects_disabled_on_compatibility_level_change에 대해 실행한 쿼리를 보여 줍니다.
SELECT * FROM sys.dm_db_objects_disabled_on_compatibility_level_change(110);
GO