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 コマンドがエラー・メッセージを生成することなく実行されるようにする必要があります。

コマンド構文

Read syntax diagramSkip visual syntax diagramdb2relocatedb -f  configFilename-gconfigFilename-ddatabaseName-r,replaceDefinition

コマンド・パラメーター

-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 を移動するには、
  1. ディレクトリー/dbpath/jsmithのファイルを/dbpath/prodinstに移動します。
  2. 以下の構成ファイルと 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
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を作成する以下のコマンドを使用します。

db2relocatedb -g relocate.cfg -d PRD
出力ファイル relocate.cfg の内容は、以下のようになります。

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
このデータベースを再配置し、データベース名を QAS に変更し、インスタンス db2qasを使用し、それに応じて自動ストレージ・パスを変更する場合は、以下のコマンドを使用できます。

db2relocatedb -g relocate.cfg -d PRD -r PRD=QAS,db2prd=db2qas
出力ファイル relocate.cfg の内容は、以下のようになります。

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 コマンドの完了を待機中のデータベースを再配置することはできません。

db2relocatedb コマンドを実行した後、 Db2 インスタンスをリサイクルして、変更を有効にする必要があります。 Db2 インスタンスをリサイクルするには、以下のステップを実行します。
  1. db2stop コマンドを発行します。
  2. db2start コマンドを発行します。

制約事項: パーティション・データベース環境では、同じ装置に常駐する複数のロジカル・パーティションの 1 つであるノードの全体を再配置することはできません。

ctrl_file_recov_path 構成パラメーターが構成されている場合、 db2relocatedb 操作の完了後に、データベースのアクティブ化が SQL1051N エラーで失敗することがあります。 これは、指定された ctrl_file_recov_path 内で既存の制御ファイル・コピーを検出できないためです (具体的には、パスのインスタンス所有者のサブディレクトリー、区画グローバル番号、またはメンバー固有の番号 (<PATH>/<instance_owner>/NODExxxx/SQLyyyyy/MEMBERzzzz/) が、再配置されたデータベースで異なる可能性があるためです)。 データベースをアクティブ化する前に、ctrl_file_recov_path新しいパス(制御ファイルのコピーが初期化される場所)を指定するか、すべて一緒に無効になっていることを確保してください。