システム時間とは、現在または過去に行内にあった情報がデータベースに把握されている期間のことです。システム時間を含む表で行が追加、変更、削除されると自動的に記録して、データベースの実態を反映します。
- system-timeの期間の開始境界は、データベースが行を認識するようになった時刻です。これは、各行がテーブルに追加された時刻を記録します。
- system-timeの期間の終了境界は、既存の行にある情報がいつ変更されたか、または行がいつテーブルから削除されたかを反映します。現在有効な情報を含む行には、終了境界値が無期限のsystem-timeの期間があり、通常これはシステム タイムスタンプの最大値(9999-12-31 23:59:59.999999+00:00)として表わされます。
派生system-timeの期間列の開始および終了境界値であるコンポーネントTIMESTAMP列の値を設定または変更することはできません。Vantageは、system-timeテーブルが作成されてシステムのバージョン情報が設定されると、これらの値を自動的に保守します。(この文書では、すべてのsystem-timeテーブルが、システムのバージョン情報を付けるように作成されていることを仮定しています。これは、テンポラル テーブルの動作に必要です。)
- 行が明示的にsystem-timeテーブルから削除された場合、行はテーブルに残りますが、system-time終了境界の値にはタイムスタンプが設定され、削除の時刻が反映されます。
- system-timeテーブルで行が変更された場合、元の値を持つ元の行は論理的に削除されますが、物理行はテーブルに残ります。元の行のsystem-timeの期間の終了境界の値にはタイムスタンプが設定され、変更の時刻が反映されます。新規または変更された値を持つ行のコピーは自動的にテーブルに挿入され、そのsystem-time開始境界には変更時刻のタイムスタンプが設定されます。
システム タイムスタンプの最大値よりも小さい終了境界を持つsystem-timeテーブル行は「クローズ」と見なされ、データベース内で変更できなくなります。これらの行はテーブルに残り、テーブルの行に対して何が行なわれたかの内部履歴を提供します。system-timeテーブルの過去の状態は、すべて再現できます。クローズ行はほとんどのDML変更で使用できません。テーブル定義を変更すると直ちにすべてのクローズ行が物理的にテーブルから永久に削除されることにより、テーブルから物理的に削除することができるのみです。
変更の履歴を自動的に追跡記録してデータベース内に維持する必要がある場合、システムのバージョンが設定されているsystem-time表を使用します。例えば、system-time表は、ある種の法令順守に使用することができます。
system-timeテーブルの詳細については、ANSI System-Timeテーブルの操作を参照してください。
システムのバージョン設定
system-time表をテンポラル表と見なし、system-timeテンポラル表の自動タイムスタンプ機能および追跡機能の動作特性を含めるには、表定義でシステムのバージョン設定を持つように指定しておく必要があります。表にテンポラル機能を与えるのがシステムのバージョン情報です。特に注意書きがない限り、本ドキュメントでは説明の都合上、「system-time」テーブルという場合、暗黙的に「システム バージョンが設定されているsystem-time」テーブルを表わしていると仮定します。