空間データ - sys.dm_db_objects_disabled_on_compatibility_level_change
適用対象: SQL Server Azure SQL Database Azure SQL Managed Instance
SQL Server の互換性レベルの変更の結果として無効になるインデックスと制約を一覧表示します。 式で空間 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 | 制約の OBJECT ID インデックスとヒープを含むテーブルの OBJECT ID |
minor_id | int | 制約の場合は NULL インデックスとヒープのIndex_id |
dependency | nvarchar(60) | 制約またはインデックスが無効になる原因となっている依存関係の説明。 アップグレード中に発生する警告にも、同じ値が使用されます。 例では以下について説明します。 組み込み関数の "space" システム UDT の場合は "geometry" システム UDT のメソッドの場合は "geography::Parse" |
全般的な解説
互換性レベルを変更すると、一部の組み込み関数を使用している保存される計算列が無効になります。 データベースをアップグレードすると、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
オンライン操作中にヒープを再構築しようとすると、エラーが発生します。
制約と外部キーのチェック
チェック制約と外部キーを無効にした場合、エラーは発生しません。 ただし、行が変更された場合、制約は適用されません。 これらのオブジェクトを再度有効にするには、アップグレード後に ALTER TABLE ... を呼び出して制約を確認します。CHECK CONSTRAINT。
永続化された計算列
1 つの列を無効にすることはできないので、クラスター化インデックスまたはヒープを無効にすると、テーブル全体が無効になります。
セキュリティ
アクセス許可
VIEW DATABASE STATE 権限が必要です。
SQL Server 2022 以降でのアクセス許可
データベースに対する VIEW DATABASE PERFORMANCE STATE アクセス許可が必要です。
例
次の例は、互換性レベルを 120 に変更することで影響を受けるオブジェクトを検索する sys.dm_db_objects_disabled_on_compatibility_level_change に対するクエリを示しています。
SELECT * FROM sys.dm_db_objects_disabled_on_compatibility_level_change(120);
GO