| この記事の要点 |
|
結論: db2look -e で DDL を出力する
db2look -d DB名 -e -i ユーザ名 -w パスワード -o 出力ファイル名
このコマンドで、データベース内のテーブル定義が CREATE TABLE 文として出力ファイルに書き出されます。テーブルを指定する場合は、「-t」オプションの後にテーブル名を指定します(複数指定する場合はスペース区切り。最大数は 30 テーブル)。
# SALES スキーマの ORDERS と CUSTOMERS だけを出力する
db2look -d SAMPLEDB -e -z SALES -t ORDERS CUSTOMERS -o orders_ddl.sql
DB サーバー上でインスタンス所有者などのユーザーとしてログインしている場合は、-i と -w を省略してもローカル接続の権限で実行できます。パスワードをコマンドラインに書くとシェルの履歴に残るため、可能な限り省略する運用がおすすめです。
db2look とは
db2look は、Db2 for Linux, UNIX and Windows(LUW)に付属するコマンドで、データベースのカタログ情報を読み取って DDL(データ定義言語)や統計情報の更新文を生成します。主な用途は次のとおりです。
- 本番環境と同じテーブル構造を、開発・検証環境に再現する
- 別サーバーへの移行時に、スキーマ定義だけを先に作る
- 設計書と実際のテーブル定義に差がないかを確認する
- 変更作業の前に、現在の定義をバックアップとして残す
データ(行)は出力されません。データも移す場合は、EXPORT / IMPORT や LOAD、db2move などと組み合わせます。
主なオプション
| オプション | 意味 |
|---|---|
| -d DB名 | 対象のデータベース名(必須) |
| -e | DDL を抽出する(CREATE TABLE、索引、制約、ビューなど) |
| -z スキーマ名 | 対象スキーマを指定する |
| -t 表名1 表名2 ... | 対象テーブルを指定する(最大 30) |
| -tw パターン | テーブル名をパターンで指定する(% や _ のワイルドカード) |
| -o ファイル名 | 出力先ファイル。省略すると標準出力に出る |
| -i / -w | 接続ユーザー名 / パスワード |
| -x | GRANT 文(権限)も出力する |
| -l | 表スペース・バッファープール・パーティション・グループの DDL も出力する |
| -td 区切り文字 | 文の区切り文字を変更する(既定はセミコロン) |
| -m | 統計情報を再現する UPDATE 文を出力する(実行計画の再現用) |
使えるオプションは Db2 のバージョンによって増減があります。db2look -h で、使っている環境のヘルプを確認してください。
具体的な手順
- Db2 のコマンドを実行できる環境を開く(Linux / UNIX ではインスタンス所有者でログイン、Windows では「DB2 コマンド・ウィンドウ」を開く)
- 出力先ディレクトリに移動する
- 必要なオプションを付けて db2look を実行する
- 出力ファイルを開き、目的のテーブルの CREATE TABLE 文が含まれているか確認する
# スキーマ全体の DDL と権限を出力
db2look -d SAMPLEDB -e -z SALES -x -o sales_full.sql
# 名前が TMP_ で始まるテーブルだけ
db2look -d SAMPLEDB -e -z SALES -tw TMP_% -o tmp_tables.sql
# トリガーやプロシージャを含むので区切り文字を @ にする
db2look -d SAMPLEDB -e -z SALES -td @ -o sales_with_routines.sql
出力したDDLを別環境で実行する
出力ファイルの先頭には CONNECT TO 文が含まれます。別のデータベースに作成する場合は、接続先の名前を書き換えるか、その行を削除してから実行します。
db2 connect to DEVDB
db2 -tvf orders_ddl.sql
# -td @ で出力した場合は区切り文字を合わせる
db2 -td@ -vf sales_with_routines.sql
表スペース名やスキーマ名が移行先で異なる場合は、実行前に置換しておきます。依存関係(外部キーで参照される親テーブルなど)は db2look がある程度考慮した順序で出力しますが、一部のテーブルだけを抜き出した場合は、参照先のテーブルが存在せずにエラーになることがあります。
よくある落とし穴
- テーブル名の大文字小文字: Db2 は引用符なしで作ったテーブル名をカタログに大文字で保存する。
-t ordersではなく-t ORDERSと大文字で指定する - 何も出力されない: スキーマ名(-z)の指定漏れや誤り、接続ユーザーにカタログを参照する権限がないことが多い
- 30 テーブルを超える: -t に指定できるのは最大 30。それ以上はスキーマ単位(-z)か -tw のパターン指定、または複数回に分けて実行する
- 区切り文字の衝突: プロシージャやトリガーの本文にセミコロンが含まれるため、既定の区切り文字のままでは再実行時に文が途中で切れる。-td で別の文字にする
- Db2 for z/OS は別: db2look は LUW 向けのコマンド。z/OS では別のツールで DDL を生成する
確認方法
- 出力ファイル内で
CREATE TABLE "SALES"."ORDERS"のような文を検索し、列定義・主キー・索引が揃っているか確認する - 検証用のデータベースで出力ファイルを実行し、
db2 describe table SALES.ORDERSで元の環境と列定義が一致するか比較する - カタログビュー
SYSCAT.COLUMNSを両環境で検索し、列名・型・長さに差がないかを突き合わせる
関連
- SQL DDL (CREATE/ALTER/DROP) 完全ガイド
- ALTER TABLE カラム定義変更完全ガイド (MySQL/PG/Online DDL)
- Oracle表関連DDL|CREATE・ALTER・DROP・TRUNCATEの基本
- SQL ユーザー管理 DDL 完全ガイド | CREATE USER / GRANT / REVOKE と各 DB の差
子ページ
子ページはありません
同階層のページ
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript で base URL を取得する方法|window.location.origin
- 4 YouTube Data API v3 エラー一覧|403・400・404 の原因と対処
- 5 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 6 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 7 Spring Frameworkのアノテーション一覧
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- プロジェクトをTomcatプロジェクトとして認識させる方法 2026-10-07 22:32:50
- MySQLの1366 Incorrect string value|Laravelの文字コード・絵文字エラー 2026-10-07 21:54:03
- curlの証明書ホスト名不一致|旧エラー51・現行60の確認と対処 2026-10-07 21:54:03
- LaravelのMassAssignmentException|fillableの原因と安全な対処 2026-10-07 21:54:03
- Eclipse で Tomcat の起動ログがコンソールに出ない時の確認手順 2026-10-07 21:54:02
- MySQLにおける中央値(Median)の導き方(バージョン8未満) 2026-10-07 13:49:45
- getInputForward 2026-10-07 13:41:15
- JSONから配列に変換 2026-10-07 13:41:15
- ビューから値をモデルに格納しコントローラーで受け取る方法 2026-10-07 13:23:41
- Laravelのテーブル作成と定義変更|マイグレーション・up/down・注意点 2026-10-07 13:23:41
- NumPy 配列に要素を追加する方法 (append / concatenate) 2026-10-07 13:23:41
- MariaDB・MySQLで現在日時を取得する方法|NOW・タイムゾーン・保存型 2026-10-07 13:13:36
- 【django】テンプレートで定数を使用する方法 2026-10-07 13:10:15
- Spring BootにおけるApplication.propertiesの環境依存設定の分割方法 2026-10-07 12:09:35
- Not supported for DML operations【Springエラー】 2026-10-07 11:09:38