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

適用対象: SQL Server 2016 (13.x) 以降 Azure SQL DatabaseAzure 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 (Transact-SQL)」を参照してください。

次のステップ