表スペースのバージョン
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 になります。
- 文字 (CHAR データ・タイプ) またはグラフィック (GRAPHIC データ・タイプ) の列の長さを格納する
- 文字データ・タイプ (CHAR、VARCHAR) の列のタイプを変更する
- グラフィック・データ・タイプ (GRAPHIC、VARGRAPHIC) の列のタイプを変更する
- 数値データ・タイプ内の列のタイプを変更する (SMALLINT、INTEGER、FLOAT、実数、FLOAT8、DOUBLE、DECIMAL、BIGINT)。
- 表に列を追加する
可変文字(VARCHARデータ型)または可変グラフィック(VARGRAPHICデータ型)カラムの長さを延長する
LOBカラムの最大長を変更する
- LOB 列のインライン長を変更する
- TIMESTAMP 列の精度を拡張する
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 列の最大長を変更しており、表にバージョン番号がまだ設定されていない場合。