テンポラル テーブルのシステム一貫性のチェック
適用対象: SQL Server 2016 (13.x) 以降 Azure SQL Database Azure SQL Managed Instance
テンポラル テーブルを使用する際、システムは、スキーマがテンポラルの要件に準拠しているか、またそのデータに一貫性がありそれが維持されるかを確認する、一貫性チェックをいくつか実行します。 さらに、テンポラル チェックは、DBCC CHECKCONSTRAINTS
ステートメントで使用できます。
システムの一貫性のチェック
SYSTEM_VERSIONING
を ON
に設定する前に、履歴テーブルと現行テーブルに対し、一連のチェックが実行されます。 これらのチェックは、スキーマ チェックおよびデータ チェックにグループ化されます (履歴テーブルが空でない場合)。 また、システムではランタイムの一貫性チェックも実行されます。
スキーマのチェック
テーブルをテンポラル テーブルにするように作成または変更する場合、システムでは次の要件が満たされていることを確認します。
現行テーブルと履歴テーブルの双方の列名と列数が同じです。
現行テーブルと履歴テーブルのそれぞれの列のデータ型が一致しています。
期間列が
NOT NULL
に設定されています。現行テーブルには主キーの制約がありますが、履歴テーブルには主キーの制約がありません。
履歴テーブルに、
IDENTITY
列が定義されていません。履歴テーブルにトリガーが定義されていません。
履歴テーブルに外部キーが定義されていません。
履歴テーブルにテーブルまたは列の制約が定義されていません。 ただし、履歴テーブルで既定の列値は許可されています。
履歴テーブルが、読み取り専用のファイル グループに保存されていません。
履歴テーブルに、変更の追跡や変更データ キャプチャの構成がありません。
データ整合性チェック
SYSTEM_VERSIONING
が ON
に設定される前、システムは任意のデータ操作言語 (DML) 操作の一環として、ValidTo >= ValidFrom
のチェックを実行します。
既存の履歴テーブルへのリンクを作成する場合は、データの整合性チェックを実行することもできます。 このデータの一貫性チェックでは、既存のレコードに重複がなく、個々の各レコードでテンポラルの要件が満たされたことが確認されます。 データを実行する一貫性チェックが、既定値です。 現行および履歴テーブルのデータが非同期の可能性がある場合はいつでも、データの一貫性チェックをする必要があります。たとえば、履歴データが入力された既存の履歴テーブルを組み込む場合などです。
警告
システム クロックを手動で変更すると、重複の状態 (つまり、レコードの終了時刻が開始時刻を上回っていること) を回避すためにランタイム データの一貫性チェックが失敗するため、システムで予期せず障害が発生します。
DBCC CHECKCONSTRAINTS を使用する
DBCC CHECKCONSTRAINTS
コマンドには、テンポラル データの一貫性チェックが含まれています。 詳細については、「DBCC CHECKCONSTRAINTS」を参照してください。