空間データ - sys.dm_db_objects_disabled_on_compatibility_level_change

適用対象:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance

SQL Serverで互換性レベルを変更した結果として無効になるインデックスと制約を一覧表示します。 式で空間 UDT を使用する永続化された計算列を含むインデックスと制約は、互換性レベルのアップグレードまたは変更後に無効になります。 この動的管理機能を使用して、互換性レベルの変更の影響を判断します。

Transact-SQL 構文表記規則

構文

sys.dm_db_objects_disabled_on_compatibility_level_change ( compatibility_level )   

引数

compatibility_level
設定する予定の互換性レベルを識別する int

返されるテーブル

列名 データ型 説明
class int 1 = 制約

7 = インデックスとヒープ
class_desc nvarchar(60) 制約の場合は OBJECT または COLUMN

インデックスとヒープの INDEX
major_id int 制約の OBJECT ID

インデックスとヒープを含むテーブルのオブジェクト ID
minor_id int 制約の場合は NULL

インデックスおよびヒープの場合は Index_id
依存 関係 nvarchar(60) 制約またはインデックスを無効にする原因となっている依存関係の説明。 アップグレード中に発生する警告でも、同じ値が使用されます。 具体的には次のものがあります。

組み込みの "スペース"

システム 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  

オンライン操作中にヒープを再構築しようとすると、エラーが発生します。

CHECK 制約と外部キー

check 制約と外部キーを無効にした場合、エラーは発生しません。 ただし、行が変更された場合、制約は適用されません。 これらのオブジェクトを再度有効にするには、 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