表スペースのバージョン

Db2 は、 ALTER TABLE ステートメントを使用して 1 つ以上の特定のスキーマ変更をコミットするたびに、表スペース・バージョンを作成します。

バージョン管理は、常に表スペース・レベルで行われます。 表のバージョンは、対応する表スペースのバージョンと一致します。 例えば、DEFINE YES を指定して定義された 1 つの表スペースに 2 つの表があるとします。 表は TABLE1 および TABLE2 という名前です。 両方の表とその表スペースのバージョンは 0 (ゼロ) です。 TABLE1 が変更された場合、 TABLE1 のバージョンは SYSTABLES.VERSION = 1 となり、テーブルスペースのバージョンは SYSTABLESPACE.CURRENT_VERSION = 1 となります。 その時点で、TABLE2 のバージョンは SYSTABLES.VERSION = 0 のままです。 その後、TABLE1 に対する変更がコミットされ、TABLE2 が変更されると、TABLE2 のバージョンは SYSTABLES.VERSION = 2 になり、表スペース・バージョン SYSTABLESPACE.CURRENT_VERSION = 2 と一致します。 TABLE2 のバージョンは、0~2の範囲で飛んでいます。なぜなら、 SYSTABLESPACE.CURRENT_VERSION = 1 はすでに TABLE1 によって使用されていたからです。

変更の開始同じテーブルスペースにテーブル TABLE3 を作成すると、 TABLE3 の定義が完了した時点で、 TABLE3 のバージョンは、現在のテーブルスペースのバージョンに一致するように、 SYSTABLESPACE.CURRENT_VERSION = 2 になります。変更の終わり

以下のスキーマ変更により、Db2 が表スペースのバージョンを作成する可能性があります。
  • 文字 (CHAR データ・タイプ) またはグラフィック (GRAPHIC データ・タイプ) の列の長さを格納する
  • 文字データ・タイプ (CHAR、VARCHAR) の列のタイプを変更する
  • グラフィック・データ・タイプ (GRAPHIC、VARGRAPHIC) の列のタイプを変更する
  • 数値データ・タイプ内の列のタイプを変更する (SMALLINT、INTEGER、FLOAT、実数、FLOAT8、DOUBLE、DECIMAL、BIGINT)。
  • 表に列を追加する
  • 変更の開始可変文字(VARCHARデータ型)または可変グラフィック(VARGRAPHICデータ型)カラムの長さを延長する変更の終わり
  • 変更の開始LOBカラムの最大長を変更する変更の終わり
  • LOB 列のインライン長を変更する
  • TIMESTAMP 列の精度を拡張する
汎用プログラミングインターフェース情報の開始。一般に、同じ作業単位で複数のスキーマ変更を行う場合、Db2 は表スペースのバージョンを 1 つだけ作成します。 別々の作業単位内でこれらの同じスキーマ変更を行った場合は、各変更ごとに新しい表スペース・バージョンが作成されます。 例えば、次の例における最初の 3 つの ALTER TABLE ステートメントは、すべて同じ表スペース・バージョンに関連しています。 1 番目の COMMIT ステートメントの有効範囲には、3 つのスキーマ変更のすべてが含まれます。 最後の ALTER TABLE ステートメントは、その次の表スペース・バージョンに関連しています。 2 番目の COMMIT ステートメントの有効範囲には、単一のスキーマ変更が含まれます。
ALTER TABLE ACCOUNTS ALTER COLUMN NAME    SET DATA TYPE VARCHAR(40);
ALTER TABLE ACCOUNTS ALTER COLUMN ADDRESS SET DATA TYPE VARCHAR(60);
ALTER TABLE ACCOUNTS ALTER COLUMN BALANCE SET DATA TYPE DECIMAL(15,2);
COMMIT;

ALTER TABLE ACCOUNTS ALTER COLUMN ACCTID  SET DATA TYPE INTEGER;
COMMIT;

汎用プログラミングインターフェース情報の終了。

Db2 が新しい表スペースのバージョンを作成しない場合

Db2 は、以下の状況では表スペースのバージョンを作成しません。

  • 以下のシチュエーションで表に列を追加する場合。
    • DEFINE NO を指定して表スペースを作成しました。現行バージョンは 0 で、データが表に追加される前に列を追加します。 変更をコミットし、別の列を追加しても、バージョンは 0 のままです。
    • DEFINE YES を指定して表スペースを作成しました。 列を追加または列を変更し、変更をコミットし、表に何もデータを追加しなかった後、 さらに列を追加します。
    • 非 パーティション化表スペースとその表スペースに含まれる表は、バージョン 0 フォーマットではありません。 現在コミットされているバージョン・フォーマットのデータはありません。 列を表に追加します。
  • 列の現在のデータ・タイプおよび長さと同じデータ・タイプおよび長さを指定したために、実際には列の定義が変更されない場合。
  • LOB 列の最大長を変更しており、表にバージョン番号がまだ設定されていない場合。