IBM Support

[Db2] db2move によるデータベースの移行方法

Question & Answer


Question

バージョンアップやハードウェアの更新などで、既存のデータベースを新しいシステムに移行する必要があります。しかし、バックアップの互換性がないので db2move コマンドを使います。 db2move コマンドを利用した、具体的な移行手順を教えてください。

Cause

バージョンアップやハードウェアまたは OS の移行などで、既存のデータベースを新しいシステムに移行する場合、通常はデータベースのバックアップを採取して、新システムにリストアします。

しかし、以下のような要件がある場合、バックアップを利用した移行は行えないため、db2move を利用してデータベース内のデータを移動する必要があります。

Answer

移行元データベースでの作業と移行先システムでの作業は以下の通りです。
db2move はデータの移動のみを実行するため、データベースの作成やオブジェクトの定義は別途行う必要があります。

移行元での作業

  1. DBADM 権限のユーザーで移行元システムにログインします。
  2. コマンドラインから以下のコマンドを実行します。
    db2look -d <source_db_name> -f -m -l -a -e -x -o db2look.txt
    db2look -d <source_db_name> -l -o storage.txt
    db2move <source_db_name> export
    注1: データを含め、すべてのファイルはカレント・ディレクトリーに出力されます。
    このため、適切な書き込み許可があることと、十分な空き容量があることを確認してください。
    出力されるデータのサイズは各表のサイズに準じます。各表のサイズを計測する方法は以下の Technote を参照してください。ただし出力サイズ計測の場合 INDEX_OBJECT_P_SIZE は含めません。
    [Db2] データベースに含まれる各表のサイズを一覧する方法
    なお、カラム・オーガナイズ表はかなり圧縮されている可能性があるため、出力ファイルのサイズは表サイズの数倍から数十倍に増加する可能性があります。

    注2: データはコマンド実行環境の文字コードに変換されます。不要なコード変換を避けるため、DB2CODEPAGE 環境変数の設定も検討してください。
    詳細は以下の Technote を参照してください。
    [Db2] IMPORT/EXPORT における文字化けおよび文字の切り捨ての回避方法

    注3: db2look.txt と storage.txt の -l オプションの重複は期待されています。
    バッファープールと表スペースを確実に作成することと、storage.txt を失っても定義情報を失わないことの両立を意図しています。

    注4: これまでの運用でオブジェクト定義を管理者ユーザーが行い、必要な特権を管理者ユーザーが付与している場合 db2look の -x オプションが適切です。これに対し、オブジェクト定義をアプリケーション・ユーザーなどが行い、オブジェクト作成者に与えられた特権を利用している場合 db2look の -xd オプションを使用する必要があります。
 

移行先での作業

  1. インスタンス・オーナーとして移行先システムにログインします。
  2. データベースを作成します。
    コードページや照合順序は後で変更できないので注意してください。
    db2 create database <target_db_name> on <path> using codeset UTF-8 territory JP collate using SYSTEM
    注1: 移行元で db2look -createdb オプションを使用して create database コマンドを生成できます。ただし、すべてのオプションをサポートしているわけではありません。
    注2: 照合順序は create database コマンド実行時のロケールによって変化する可能性があります。
    コード・セットと照合の組み合わせ
  3. db2move の出力ファイルと storage.txt、db2look.txt を移行先システムにコピーします。
    以下の作業はコピーしたファイルがカレント・ディレクトリーであることを前提にしています。
  4. 任意のエディタで storage.txt と db2look.txt を編集します。
    バッファープールのサイズや、表スペースのパスなどの定義を変更できます。
    移行元と移行先の文字コードが異なる場合は、表の列長を変更する必要があります。
  5. バッファープールと表スペースを作成します。
    db2 -tvf storage.txt
  6. 表や索引などその他のデータベース・オブジェクトを作成します。
    db2 -tvf db2look.txt
  7. データを挿入します。
    db2move <target_db_name> load
    注:db2look は SYSTOOLS スキーマの表を移行しません。SYSTOOLS スキーマの表は製品によって管理されており移行の必要はありません。db2move export は SYSTOOLS スキーマの表データも EXPORT するため、db2move load で SQL3304N が返る結果は予期されており無視可能です。

運用上の考慮点
 
  • 参照整合などの制約が存在する場合
    表間に参照整合などの制約が定義されている場合、一時的に制約を無効にしないとデータを挿入できません。
    このような場合は、上記のステップ 7 を以下のように変更してください。
    1. 指定したユーザー・スキーマのすべての表で参照整合のチェックを停止します。
      db2 connect to <target_db_name>
      db2 -x "select 'set integrity for <schema_name>.'||trim(tabname)||' off;' from syscat.tables where tabschema='<schema_name>' and type='T'" > check_off.sql
      db2 -tvf check_off.sql
    2. データを挿入します。
      db2move <target_db_name> load
    3. 無効にした制約を再有効化します。
      db2 -x "select 'set integrity for <schema_name>.'||trim(tabname)||' immediate checked;' from syscat.tables where tabschema=<schema_name>' and type='T'" > check_on.sql
      db2 -tvf check_on.sql
      注: すべてのチェック・ペンディングを解除するには、check_on.sql を複数回実行する必要があります。
      なお、チェック・ペンディング状態の表は、以下の SQL で一覧できます。
      db2 "select tabschema, tabname from syscat.tables where status='C'"
  • 生成列が存在する場合
    コマンド・リファレンスに記述されているように、db2move は GENERATED ALWAYS ID 列をサポートしていません。
    GENERATED ALWAYS ID 列を含む表をインポートまたはロードする場合は、以下の Technote を参照してください。
    The utility 'db2move' with LOAD or IMPORT options may reject table rows with SQL3550W

    SYS_START などの生成列を持つシステム期間テンポラル表へデータをロードするには、以下の Technote を参照してください。
    [Db2] How to load data into system-period temporal tables.
     

関連情報
[Db2] パスポート・アドバンテージによく寄せられる質問
db2move - データベース移動ツール・コマンド
CREATE DATABASE コマンド

お問合せ先
技術的な内容に関して、パスポート・アドバンテージの契約のもと Db2 テクニカル・サポートへお問い合わせください。
Db2 テクニカル・サポート

[{"Business Unit":{"code":"BU058","label":"IBM Infrastructure w\/TPS"},"Product":{"code":"SSEPGG","label":"Db2 for Linux, UNIX and Windows"},"ARM Category":[{"code":"a8m500000008PlEAAU","label":"Data Movement-\u003Edb2move"}],"ARM Case Number":"","Platform":[{"code":"PF002","label":"AIX"},{"code":"PF010","label":"HP-UX"},{"code":"PF016","label":"Linux"},{"code":"PF027","label":"Solaris"},{"code":"PF033","label":"Windows"}],"Version":"All Version(s)","Line of Business":{"code":"LOB10","label":"Data and AI"}}]

Document Information

Modified date:
10 October 2023

UID

swg22011157