db2relocatedb - データベースの再配置コマンド
このコマンドは、ユーザー提供の構成ファイルで指定されたとおりに、データベースを名前変更したり、データベースやデータベースの一部 (コンテナー、ログ・ディレクトリーなど) を再配置します。 このツールは、 Db2® インスタンスおよびデータベース・サポート・ファイルに必要な変更を加えます。
ターゲット・データベースをオフラインにしてからでなければ、db2relocatedb コマンドを実行してターゲット・データベースの制御ファイルとメタデータを変更してはなりません。
db2relocatedb コマンドがデータベースのファイルおよび制御構造に加える変更は、ログに記録されないため、リカバリー不能です。 特に、保存されているログ・ファイルによってデータベースがリカバリー可能な場合、データベースに対するコマンドの実行後にフルバックアップを行うのは良い習慣です。
許可
なし
前提条件
データベースの自動ストレージを有効にした場合は、次のコマンドを発行して、各ストレージ・パス上のデータを新しい場所に移動する必要があります。
$ mv old_storage_path_N/inst_name/NODE0000/X/ old_storage_path_N/inst_name/NODE0000/Y
ここで、old_storage_path_N は以前のストレージ・パス名、inst_name はインスタンス名、X は以前のデータベース名、Y は新しいデータベース名を表します。このステップを実行して、db2relocatedb コマンドがエラー・メッセージを生成することなく実行されるようにする必要があります。
コマンド構文
コマンド・パラメーター
- -f configFilename
- データベースの再配置に必要な構成情報の入ったファイルの名前を指定します。 これは、相対ファイル名でも絶対ファイル名でも構いません。 構成ファイルのフォーマットは以下のとおりです。
説明:DB_NAME=oldName,newName DB_PATH=oldPath,newPath INSTANCE=oldInst,newInst NODENUM=nodeNumber LOG_DIR=oldDirPath,newDirPath CONT_PATH=oldContPath1,newContPath1 CONT_PATH=oldContPath2,newContPath2 ... STORAGE_PATH=oldStoragePath1,newStoragePath1 STORAGE_PATH=oldStoragePath2,newStoragePath2 ... FAILARCHIVE_PATH=newDirPath LOGARCHMETH1=newDirPath LOGARCHMETH2=newDirPath MIRRORLOG_PATH=newDirPath OVERFLOWLOG_PATH=newDirPath ...
- DB_NAME
- 再配置されるデータベースの名前を指定します。 データベース名を変更する場合は、古い名前と新規の名前の両方を指定する必要があります。 このフィールドは必須です。注: DB_NAME の変更は、リモート・ストレージ表スペースを使用するデータベースではサポートされません。
- DB_PATH
- 再配置されるデータベースの元のパスを指定します。 データベース・パスが変更される場合、 古いパスと新規のパスの両方を指定する必要があります。 このフィールドは必須です。
- INSTANCE
- データベースが存在する場所のインスタンスを指定します。 データベースが 新規のインスタンスに移動される場合、古いインスタンスと新規のインスタンスの 両方を指定する必要があります。 このフィールドは必須です。
- NODENUM
- 変更されるデータベース・ノードのノード番号を指定します。 デフォルトは 0 です。
- LOG_DIR
- ログ・パスのロケーション内の変更を指定します。 ログ・パスが変更される場合、古いパスと新しいパスの両方を指定する必要があります。 ログ・パスがデータベース・パスの 下にある場合、パスは自動的に更新されるので、この指定はオプションです。
- CONT_PATH
- 表スペース・コンテナーのロケーション内の変更を指定します。 古いコンテナー・パスと 新規のコンテナー・パスの両方を指定する必要があります。 複数のコンテナー・パスを変更する場合、複数の CONT_PATH 行を指定できます。 コンテナー・パスがデータベース・パスの 下にある場合、パスは自動的に更新されるので、この指定はオプションです。 同じ古いパスが共通の新規パスで置換される場所で、複数のコンテナーに変更を 行う場合、単一の CONT_PATH 項目が使用されます。 このような場合、古いパス、新規パスの両方にアスタリスク (*) を ワイルドカードとして使用できます。
- STORAGE_PATH
- データベースのいずれかのストレージ・パスの場所を変更することを指定します。 古いストレージ・パスと新しいストレージ・パスの両方を指定する必要があります。 複数のストレージ・パスを変更する場合、複数の STORAGE_PATH 行を指定できます。 このパラメーターを指定して、すべてのストレージ・グループ内の任意のストレージ・パスを変更することができます。 ただし、個々のストレージ・グループのストレージ・パスを変更するために、このパラメーターを指定することはできません。注:
- このパラメーターは、
AUTOMATIC STORAGE NO
節を使用して作成されたデータベースには適用されません。AUTOMATIC STORAGE NO
節を指定してデータベースを作成することはできますが、AUTOMATIC STORAGE
節は非推奨になっており、将来のリリースで削除される可能性があります。 - このパラメーターは、リモート・ストレージ別名をサポートしません。
- このパラメーターは、
- FAILARCHIVE_PATH
- データベース・マネージャーが 1 次アーカイブ・ロケーションにも 2 次アーカイブ・ロケーションにもログ・ファイルをアーカイブできない場合に、ログ・ファイルをアーカイブする新しいロケーションを指定します。 このフィールドは、再配置データベースに failarchpath 構成パラメーターが設定される場合にのみ指定してください。
- LOGARCHMETH1
- 新しい 1 次アーカイブ・ロケーションを指定します。 このフィールドは、再配置データベースに logarchmeth1 構成パラメーターが設定される場合にのみ指定してください。
- LOGARCHMETH2
- 新しい 2 次アーカイブ・ロケーションを指定します。 このフィールドは、再配置データベースに logarchmeth2 構成パラメーターが設定される場合にのみ指定してください。
- MIRRORLOG_PATH
- ミラー・ログ・パスの新しいロケーションを指定します。 ストリングがパス名を示す必要があり、これは相対パス名ではなく、絶対パス名でなければ なりません。 このフィールドは、再配置データベースに mirrorlogpath 構成パラメーターが設定される場合にのみ指定してください。
- OVERFLOWLOG_PATH
- ロールフォワード操作に必要なログ・ファイルの検索、アーカイブから取り出されたアクティブ・ログ・ファイルの保管、db2ReadLog API が必要とするログ・ファイルの検索と保管を行う新しいロケーションを指定します。 このフィールドは、再配置データベースに overflowlogpath 構成パラメーターが設定される場合にのみ指定してください。
ブランク行またはコメント文字 (#) で始まる行は無視されます。
- -g configFilename
- 構成ファイルを生成し、構成情報を含む当ファイルの名前を指定します。 これは、相対ファイル名でも絶対ファイル名でも構いません。 オプション -r を指定しない場合、出力は次のようになります。
DB_NAME=oldName,oldName DB_PATH=oldPath,oldPath INSTANCE=oldInst,oldInst NODENUM=nodeNumber LOG_DIR=oldDirPath,oldDirPath CONT_PATH=oldContPath1,oldContPath1 CONT_PATH=oldContPath2,oldContPath2 ... STORAGE_PATH=oldStoragePath1,oldStoragePath1 STORAGE_PATH=oldStoragePath2,oldStoragePath2 ... FAILARCHIVE_PATH=oldDirPath LOGARCHMETH1=oldDirPath LOGARCHMETH2=oldDirPath MIRRORLOG_PATH=oldDirPath OVERFLOWLOG_PATH=oldDirPath ...
- -d databaseName
- ファイルを生成するデータベース名を指定します。
- -r replaceDefinition
- このオプションを指定して、生成されたスクリプト内のストリングを置換します。 パラメーター replaceDefinition の形式は、regularExpression=replacement でなければなりません。 下記の例を参照してください。
例
- Example 1
- パス
/home/db2inst1
にあるインスタンス db2inst1 でデータベースTESTDB
の名前をPRODDB
に変更するには、以下の構成ファイルを作成します。DB_NAME=TESTDB,PRODDB DB_PATH=/home/db2inst1 INSTANCE=db2inst1 NODENUM=0
構成ファイルが作成されたら、すべての自動ストレージ・パスを、新規データベース名と一致するように変更する必要があります。
rename /home/db2inst1/db2inst1/TESTDB /home/db2inst1/db2inst1/PRODDB
構成ファイルをrelocate.cfg
として保存し、次のコマンドでデータベース・ファイルを変更します。db2relocatedb -f relocate.cfg
- Example 2
- パス
/dbpath
のインスタンス jsmith からインスタンス prodinst にデータベース DATAB1 を移動するには、- ディレクトリー
/dbpath/jsmith
のファイルを/dbpath/prodinst
に移動します。 - 以下の構成ファイルと db2relocatedb コマンドを使用して、
データベース・ファイルに変更を行います。
DB_NAME=DATAB1 DB_PATH=/dbpath INSTANCE=jsmith,prodinst NODENUM=0
- ディレクトリー
- Example 3
- データベース PRODDB は、パス
/databases/PRODDB
インスタンス inst1 にあります。 2 つの表スペース・コンテナーのロケーションを、以下のように変更する必要があります。- SMSコンテナー
/data/SMS1
を/DATA/NewSMS1
に移動する必要があります。 - DMS コンテナー
/data/DMS1
を/DATA/DMS1
に移動する必要があります。
物理ディレクトリーおよびファイルが、新規のロケーションに移動された後で、 新規のロケーションを認識するように、以下の構成ファイルと db2relocatedb コマンドを使用して、データベース・ファイルに変更を行います。DB_NAME=PRODDB DB_PATH=/databases/PRODDB INSTANCE=inst1 NODENUM=0 CONT_PATH=/data/SMS1,/DATA/NewSMS1 CONT_PATH=/data/DMS1,/DATA/DMS1
- SMSコンテナー
- Example 4
- データベース TESTDB がインスタンス db2inst1 にあり、パス
/databases/TESTDB
に作成されました。 表スペースは、 以下のコンテナーと共に作成されました。TS1 TS2_Cont0 TS2_Cont1 /databases/TESTDB/TS3_Cont0 /databases/TESTDB/TS4/Cont0 /Data/TS5_Cont0 /dev/rTS5_Cont1
TESTDB
を新規システムに移動します。 新規システムのインスタンスは newinst になり、 データベースのロケーションは/DB2
になります。データベースを移動する場合、
/databases/TESTDB/db2inst1
ディレクトリーのすべてのファイルを/DB2/newinst
ディレクトリーに移動しなければなりません。 これは、最初の 5 つのコンテナーが、この移動の一部として 再配置されることを意味します。 (最初の 3 つはデータベース・ディレクトリーに相対で、 次の 2 つはデータベース・パスに相対です。) これらのコンテナーがデータベース・ディレクトリー またはデータベース・パス内にあるため、構成ファイルにリストする必要はありません。 2 つの残りのコンテナーが新規システムで異なるロケーションに移動された場合は、 構成ファイルにリストする必要があります。物理ディレクトリーおよびファイルが新規のロケーションに移動された後で、 新規のロケーションを認識するように、以下の構成ファイルと db2relocatedb を使用して、データベース・ファイルに変更を行います。DB_NAME=TESTDB DB_PATH=/databases/TESTDB,/DB2 INSTANCE=db2inst1,newinst NODENUM=0 CONT_PATH=/Data/TS5_Cont0,/DB2/TESTDB/TS5_Cont0 CONT_PATH=/dev/rTS5_Cont1,/dev/rTESTDB_TS5_Cont1
- Example 5
データベース
TESTDB
には、データベース・パーティション・サーバー 10 および 20 に 2 つのデータベース・パーティションがあります。 このインスタンスは servinst で、データベース・パスは 両方のデータベース・パーティション・サーバーで/home/servinst
です。 データベースの名前は SERVDB に変更され、データベース・パスは両方のデータベース・パーティション・サーバーで/databases
に変更されます。 さらに、ログ・ディレクトリーはデータベース・パーティション・サーバー 20 で、/testdb_logdir
から/servdb_logdir
に変更されます。両方のデータベース・パーティションに変更が行われているため、構成ファイルは 各データベース・パーティションに作成され、db2relocatedb は対応する構成ファイルを使用する各データベース・パーティション・サーバーで 実行される必要があります。
データベース・パーティション・サーバー 10 では、以下の構成ファイルが使用されます。DB_NAME=TESTDB,SERVDB DB_PATH=/home/servinst,/databases INSTANCE=servinst NODENUM=10
データベース・パーティション・サーバー 20 では、以下の構成ファイルが使用されます。DB_NAME=TESTDB,SERVDB DB_PATH=/home/servinst,/databases INSTANCE=servinst NODENUM=20 LOG_DIR=/testdb_logdir,/servdb_logdir
- Example 6
- データベース
MAINDB
は、パス/home/maininst
上のインスタンスmaininst
に存在します。 4 つの表スペース・コンテナーのロケーションを、以下のように変更する必要があります。/maininst_files/allconts/C0 needs to be moved to /MAINDB/C0 /maininst_files/allconts/C1 needs to be moved to /MAINDB/C1 /maininst_files/allconts/C2 needs to be moved to /MAINDB/C2 /maininst_files/allconts/C3 needs to be moved to /MAINDB/C3
物理ディレクトリーおよびファイルが、新規のロケーションに移動された後で、 新規のロケーションを認識するように、以下の構成ファイルと db2relocatedb コマンドを使用して、データベース・ファイルに変更を行います。
すべてのコンテナに同様の変更が加えられています。 つまり、/maininst_files/allconts/
はワイルドカード文字を含む単一のエントリを使用できるように、/MAINDB/
に置き換えられています。DB_NAME=MAINDB DB_PATH=/home/maininst INSTANCE=maininst NODENUM=0 CONT_PATH=/maininst_files/allconts/*, /MAINDB/*
- Example 7
データベース
MULTIDB
は、パス/database/MULTIDB
上のインスタンスinst1
に存在します。 パーティション・ストレージ・パス '/home/olddbpath $N' を '/home/newdbpath $N'に変更する必要があります。区画化ストレージ・パスを正しく移動するには、パラメーター化ストレージ・パスを二重引用符で囲んでSTORAGE_PATH
フィールドに指定する必要があります。 物理ディレクトリーおよびファイルが、新規のロケーションに移動された後で、 新規のロケーションを認識するように、以下の構成ファイルと db2relocatedb コマンドを使用して、データベース・ファイルに変更を行います。DB_NAME=MULTIDB DB_PATH=/database/MULTIDB INSTANCE=inst1 NODENUM=0 STORAGE_PATH="/home/olddbpath $N" , "/home/newdbpath $N"
- Example 8
- データベース
PRD
は、データベース・パス/db2/PRD
、ストレージ・パス/db2/PRD/sapdata1
、および/db2/PRD/sapdata2
上のインスタンスdb2prd
に存在します。 変更されていないスクリプトを生成するには、出力ファイル relocate.cfgを作成する以下のコマンドを使用します。
出力ファイル relocate.cfg の内容は、以下のようになります。db2relocatedb -g relocate.cfg -d PRD
このデータベースを再配置し、データベース名を QAS に変更し、インスタンスDB_NAME=PRD,PRD DB_PATH=/db2/PRD,/db2/PRD INSTANCE=db2prd,db2prd NODENUM=0 STORAGE_PATH=/db2/PRD/sapdata1,/db2/PRD/sapdata1 STORAGE_PATH=/db2/PRD/sapdata2,/db2/PRD/sapdata2
db2qas
を使用し、それに応じて自動ストレージ・パスを変更する場合は、以下のコマンドを使用できます。
出力ファイル relocate.cfg の内容は、以下のようになります。db2relocatedb -g relocate.cfg -d PRD -r PRD=QAS,db2prd=db2qas
DB_NAME=PRD,QAS DB_PATH=/db2/PRD,/db2/QAS INSTANCE=db2prd,db2qas NODENUM=0 STORAGE_PATH=/db2/PRD/sapdata1,/db2/QAS/sapdata1 STORAGE_PATH=/db2/PRD/sapdata2,/db2/QAS/sapdata2
使用上の注意
- データベースが他のインスタンスに移動されている場合は、新規のインスタンスを作成します。 新規インスタンスは、現在データベースがあるインスタンスと同じリリース・レベルでなければなりません。
- 新しいインスタンスの所有者が現在のインスタンスの所有者でない場合は、新しいインスタンスの所有者へアクセス権を付与します。
- 新規インスタンスが常駐するシステムにコピーされるデータベースに属するファイルとデバイスをコピーします。 パス名は必要に応じて変更する必要があります。 ただし、データベースファイルの移動先のディレクトリにデータベースが既に存在する場合は、既存のsqldbdirファイルを誤って上書きして、既存のデータベースへの参照を削除する可能性があります。 そのような事態になった場合、 db2relocatedb ユーティリティーを使用することはできません。 その場合、db2relocatedb の代わりにリダイレクト・リストア操作を使用できます。
- インスタンス所有者に所有されるように、コピーされたファイル/デバイスの アクセス権を変更します。
複数のデータベースが存在するデータベースパスからデータベースを移動する場合は、そのデータベースパスのsqldbdirディレクトリをコピーする必要があり、移動しないでください。 このディレクトリーは、移動されないデータベースを Db2 が見つけるために、そのまま古い場所に置いておくことが必要です。 sqldbdir ディレクトリーを新しいロケーションにコピーした後、LIST DB DIRECTORY ON newPath
コマンドを実行すると、移動されなかったデータベースがリストされます。 これらの参照は削除できず、その名前を持つ新しいデータベースをこの同じパス上に作成することもできません。 ただし、その名前を持つデータベースを別のパスに作成することはできます。
ALTER TABLESPACE MANAGED BY AUTOMATIC STORAGE
ステートメントを使用して自動ストレージを使用するように変換された表スペースの既存のユーザー作成コンテナーを、 db2relocatedb コマンドを使用して移動することはできません。
インスタンスが変更されている場合、コマンドは新規のインスタンス所有者によって実行される必要があります。
パーティション・データベース環境では、変更が必要なすべてのデータベース・パーティションに対してこのツールを実行する必要があります。 データベース・パーティションごとにそれぞれ別個の構成ファイル (変更対象のデータベース・パーティションの NODENUM 値が含まれる) を用意する必要があります。 例えば、データベースの名前を変更する場合は、すべてのデータベース・パーティションが影響を受けることになり、各データベース・パーティションごとに別個の構成ファイルを用意して db2relocatedb コマンドを実行する必要があります。 単一データベース・パーティションに属するコンテナーを移動する場合は、そのデータベース・パーティションに対して一度だけ db2relocatedb コマンドを実行することが必要です。
db2relocatedb コマンドを使用して、ロードが進行中のデータベース、または LOAD RESTART または LOAD TERMINATE コマンドの完了を待機中のデータベースを再配置することはできません。
- db2stop コマンドを発行します。
- db2start コマンドを発行します。
制約事項: パーティション・データベース環境では、同じ装置に常駐する複数のロジカル・パーティションの 1 つであるノードの全体を再配置することはできません。
ctrl_file_recov_path 構成パラメーターが構成されている場合、 db2relocatedb 操作の完了後に、データベースのアクティブ化が SQL1051N エラーで失敗することがあります。 これは、指定された ctrl_file_recov_path 内で既存の制御ファイル・コピーを検出できないためです (具体的には、パスのインスタンス所有者のサブディレクトリー、区画グローバル番号、またはメンバー固有の番号 (<PATH>/<instance_owner>/NODExxxx/SQLyyyyy/MEMBERzzzz/) が、再配置されたデータベースで異なる可能性があるためです)。 データベースをアクティブ化する前に、ctrl_file_recov_path新しいパス(制御ファイルのコピーが初期化される場所)を指定するか、すべて一緒に無効になっていることを確保してください。