◀ 9.

Db2のカラム追加・削除・変更|ALTER TABLEと事前確認

▶

Db2の記事として修復しました。Db2 LUWのALTER TABLEによるカラム操作です。現行列と依存先を確認してから、追加・削除・型・既定値・名前の変更を分けて計画します。MySQLのMODIFY/CHANGEや他DBのオンライン変更手順を転用する記事ではありません。

Db2で対象と現在値を確認し、変更の前提と検証を分ける図

この記事の要点
  • DB2 でカラムを追加・削除・変更するコマンド集
  • 追加: ALTER TABLE t ADD COLUMN col SMALLINT NOT NULL DEFAULT 0
  • 削除: ALTER TABLE t DROP COLUMN col
  • 変更: ALTER TABLE t ALTER COLUMN col SET DATA TYPE ...(REORGの要否は操作内容・表の状態・版で確認)

 

カラムの追加

下は旧構文例です。TEST_TABLE/COL1は説明用の名前で、各節を順に実行するスクリプトではありません。NOT NULL/DEFAULTの既存データへの影響、表の組織化、権限、ロックとアプリの列指定を確認します。列追加だけなら常に無停止という保証はありません。

ALTER TABLE TEST_TABLE
    ADD COLUMN COL1
    SMALLINT NOT NULL DEFAULT 0

 

カラムの削除

DROP COLUMNは列とデータを失う変更です。依存するビュー・制約・索引・アプリ/バッチを先に調査し、復旧可能なバックアップと検証を用意します。逆向きのADD COLUMNだけでは消えた値は戻りません。制約を外して強行したり、本番へ試し打ちしたりしません。

ALTER TABLE TEST_TABLE
    DROP COLUMN COL1


    

カラムの変更(データ型の変更)

下のVARCHAR(4000)は元の例で、直前のSMALLINT列から一般にこの型へ変えられるという意味ではありません。現行型・変更先・値の分布/最大長・デフォルト・依存先を確認し、対象版が許可する型変換かを照合します。許容される変換でも切捨て等のデータ損失があり得るため、成功したことだけを値の同一性の保証にしません。

ALTER TABLE TEST_TABLE
      ALTER COLUMN COL1 
      SET DATA TYPE VARCHAR(4000)

 

カラムの変更(デフォルト値の変更)

下の文字列リテラル123は列型に代入可能かを確認します。DEFAULTは既定値を使う後続操作への指定で、既存行や明示NULLを一律に埋め直す更新ではありません。既存データを補完するUPDATEとは別に設計します。

ALTER TABLE TEST_TABLE
      ALTER COLUMN COL1
         SET DEFAULT '123'

 

カラムの変更(カラム名の変更)

COL1/COL2と対象スキーマを確認し、依存オブジェクト・SQL・ORM・CSV/外部連携の列名参照を調べます。DB内で名前変更が成功しても、アプリ側の契約が自動で更新されたとは限りません。

ALTER TABLE TEST_TABLE
    RENAME COLUMN COL1 TO COL2


    

変更前に現在のカラムを調べる

2個の?へカタログ上のスキーマ名・表名を順にバインドするSQL例です。?付きでCLPへ貼り付ける完成コマンドではありません。通常識別子と区切り識別子を分け、文字列条件を無条件に大文字へ変えません。LENGTHを常に文字数と扱わず型/単位も確認します。

SELECT TABSCHEMA, TABNAME, COLNO, COLNAME,
       TYPENAME, LENGTH, SCALE, NULLS
FROM SYSCAT.COLUMNS
WHERE TABSCHEMA = ?
  AND TABNAME = ?
ORDER BY COLNO;

REORG・依存先・適用後の確認

  1. ALTER前後の列定義・対象件数・代表値と境界値を控える。表定義とDDLの抽出も照合する。
  2. reorg pending等の表状態と対象操作の要件を確認する。REORGはデータ再編成の別作業で、時間/資源/アクセス制約がある。すべてのALTERに無条件に付け足さず、必要なら検証先で計画する。
  3. 適用とCOMMIT/ROLLBACK、バックアップ復旧、アプリ切替の順序を対象構成で確認する。SQLを逆にすれば必ず元データが戻ると考えない。
  4. 適用後の定義・値・制約・依存先とアプリの読み書きを検証する。今回の記事修復では実DBのALTER/REORG/権限変更は実行していない。

元の他DB向け記事にあったIncorrect column specifierとBLOB/TEXTのキー長エラーは他製品の症例として参照を保持し、Db2の診断手順へ転用しません。容量は表スペースの確認で別に調べます。

公式:列定義の変更 / 型変換とreorg pending / REORGの条件。

対象範囲と関連ページ

対象は主にDb2 LUWで、i/zOSや他製品へ無条件に転用しません。元のDb2版のコード・見出し・リンクを保持して訂正し、誤置換された版も履歴に保持しています。2026年10月に公式資料と照合しましたが、Db2実機での動作/権限/性能・全構成での変更成功を検証したものではありません。Db2親ページの子ページから選択してください。

子ページ

子ページはありません

同階層のページ
  1. DB接続コマンド
  2. データベース一覧の確認
  3. テーブル一覧の確認
  4. テーブル定義の確認
  5. DBの設定確認
  6. テーブルスペースの容量の確認および拡張
  7. データ型
  8. 複数カラムのUPDATE
  9. カラムの追加/削除/変更
  10. 自動番号付け (autoincrement) する方法
  11. インデックスの作成
  12. シーケンスおよびインクリメント(ID列)の違いと確認方法
  13. create table文の生成
  14. 特定スキーマの全テーブルの全カラム情報を取得する方法
  15. 【DB2】エラー一覧
  16. 【DB2】テーブル定義からCREATE TABLE文を生成する方法

最近更新/作成されたページ