空間データ - sys.dm_db_objects_disabled_on_compatibility_level_change
適用対象:SQL ServerAzure SQL DatabaseAzure SQL Managed Instance
SQL Serverで互換性レベルを変更した結果として無効になるインデックスと制約を一覧表示します。 式で空間 UDT を使用する永続化された計算列を含むインデックスと制約は、互換性レベルのアップグレードまたは変更後に無効になります。 この動的管理機能を使用して、互換性レベルの変更の影響を判断します。
構文
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
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示