テンポラル テーブルのシステム一貫性のチェック

適用対象: SQL Server 2016 (13.x) 以降 Azure SQL Database Azure SQL Managed Instance

テンポラル テーブルを使用する際、システムは、スキーマがテンポラルの要件に準拠しているか、またそのデータに一貫性がありそれが維持されるかを確認する、一貫性チェックをいくつか実行します。 さらに、テンポラル チェックは、DBCC CHECKCONSTRAINTS ステートメントで使用できます。

システムの一貫性のチェック

SYSTEM_VERSIONINGON に設定する前に、履歴テーブルと現行テーブルに対し、一連のチェックが実行されます。 これらのチェックは、スキーマ チェックおよびデータ チェックにグループ化されます (履歴テーブルが空でない場合)。 また、システムではランタイムの一貫性チェックも実行されます。

スキーマのチェック

テーブルをテンポラル テーブルにするように作成または変更する場合、システムでは次の要件が満たされていることを確認します。

  1. 現行テーブルと履歴テーブルの双方の列名と列数が同じです。

  2. 現行テーブルと履歴テーブルのそれぞれの列のデータ型が一致しています。

  3. 期間列が NOT NULL に設定されています。

  4. 現行テーブルには主キーの制約がありますが、履歴テーブルには主キーの制約がありません。

  5. 履歴テーブルに、 IDENTITY 列が定義されていません。

  6. 履歴テーブルにトリガーが定義されていません。

  7. 履歴テーブルに外部キーが定義されていません。

  8. 履歴テーブルにテーブルまたは列の制約が定義されていません。 ただし、履歴テーブルで既定の列値は許可されています。

  9. 履歴テーブルが、読み取り専用のファイル グループに保存されていません。

  10. 履歴テーブルに、変更の追跡や変更データ キャプチャの構成がありません。

データ整合性チェック

SYSTEM_VERSIONINGON に設定される前、システムは任意のデータ操作言語 (DML) 操作の一環として、ValidTo >= ValidFrom のチェックを実行します。

既存の履歴テーブルへのリンクを作成する場合は、データの整合性チェックを実行することもできます。 このデータの一貫性チェックでは、既存のレコードに重複がなく、個々の各レコードでテンポラルの要件が満たされたことが確認されます。 データを実行する一貫性チェックが、既定値です。 現行および履歴テーブルのデータが非同期の可能性がある場合はいつでも、データの一貫性チェックをする必要があります。たとえば、履歴データが入力された既存の履歴テーブルを組み込む場合などです。

警告

システム クロックを手動で変更すると、重複の状態 (つまり、レコードの終了時刻が開始時刻を上回っていること) を回避すためにランタイム データの一貫性チェックが失敗するため、システムで予期せず障害が発生します。

DBCC CHECKCONSTRAINTS を使用する

DBCC CHECKCONSTRAINTS コマンドには、テンポラル データの一貫性チェックが含まれています。 詳細については、「DBCC CHECKCONSTRAINTS」を参照してください。