変更の始まり

監査列の作成

監査列が含まれている表で行の追加または変更が行われると、そのたびに監査列の値がデータベース・マネージャーによって生成されます。生成されるこれらの値は、行に対する SQL 変更とネイティブ変更の両方について保守されます。

行に対する変更について状況情報を保守するためにシステムが使用する値には、3 種類の値 (データ変更タイプ、特殊レジスター、組み込みグローバル変数) があります。 1 つの表内に複数の列を定義してこの情報をトラッキングできます。 これらの生成される式の列の 1 つとして定義される各列のデータ・タイプは、生成される項目の必要な定義に完全に一致していなければなりません。

  • データ変更操作を示す生成値を含むと定義された列は、I または U で更新されて、最終変更が挿入と更新のどちらだったのかを示します。 履歴表の場合は、行が削除されたことを示す値 D が生成されることがあります。
  • 特殊レジスターの生成値を含むと定義された列には、データ変更操作が発生したときの特殊レジスターの現行値が入れられます。
  • 組み込みグローバル変数の生成値を含むと定義された列には、データ変更操作が発生したときのグローバル変数の現行値が入れられます。

表を作成するときには、生成されるこれらの式のための列を定義できます。例えば、 EMPNO、NAME、WORKDEPT、および SALARY という名前の列を持つ表 EMPLOYEE を作成します。変更のタイプ、変更を行ったユーザー、変更を行ったアプリケーション、および変更の起点である修飾ジョブ名をトラッキングするため、監査列を定義します。

CREATE TABLE EMPLOYEE
   (EMPNO CHAR(6),
    NAME VARCHAR(50),
    WORKDEPT CHAR(3),
    SALARY DECIMAL(9,2),
    EMP_CHANGE_TYPE CHAR(1) GENERATED ALWAYS AS (DATA CHANGE OPERATION),
    EMP_CHANGE_USER VARCHAR(128) GENERATED ALWAYS AS (SESSION_USER),
    EMP_CHANGE_APPLNAME VARCHAR(255) GENERATED ALWAYS AS (CURRENT CLIENT_APPLNAME),
    EMP_CHANGE_JOBNAME VARCHAR(28) GENERATED ALWAYS AS (QSYS2.JOB_NAME))

生成される式の列を既存の表に追加するときに、 その列に IMPLICITLY HIDDEN 属性も定義すると、SQL を使用する既存アプリケーションの変更が必要になるのを防ぐことができます。隠し列は、 SELECT *、列リストのない INSERT、または、ROW を使用する UPDATE が列の暗黙リストを判別するときに除外されます。隠し列が包含されるのは、 その列が名前で明示的に指定される場合のみです。

これらの監査列は、システム期間テンポラル表を使用している場合に特に有用です。すべての履歴行は対応する履歴表に保持されるため、監査列は各変更の責任者などの情報を記録することによって履歴を補完します。

変更の終わり