PDB再接続時の COPY / MOVE / NOCOPY と FILE_NAME_CONVERT を完全理解

CDB/PDB(マルチテナント)

ディレクトリ構成の実例・文字列変換の柔軟性まで徹底解説!

Oracle Multitenant 環境において、UNPLUG した PDB を再接続(Plug-in)する際、COPY / MOVE / NOCOPY の指定と FILE_NAME_CONVERT の使い方は成功可否を左右する非常に重要なポイントです。

この記事では以下を詳細に解説します:

  • 各オプションの役割と使い分け
  • FILE_NAME_CONVERT の書き方と変換の柔軟性(部分パス指定も含む)
  • 実環境に基づくディレクトリ構成例
  • 実行コマンドと図解で理解するファイルの動き

💰 【PR】Oracleエンジニアの市場価値、調べてみませんか?

Oracleのスキルは需要が高く、特定の資格や経験を持っていると年収が大幅にアップするケースがあります。まずはIT専門のエージェントで非公開求人をチェックしてみませんか?


1. COPY / MOVE / NOCOPY とは?

PDBを再接続するとき、Oracleにデータファイルをどう扱わせるかを指定します。

オプション動作内容主な用途
COPYデータファイルを新パスへコピーする通常の移行、安全な再接続が必要なとき
MOVEデータファイルを新パスへ移動(元を削除)同一ホスト間で完全に移行するとき
NOCOPYデータファイルをそのままの場所で再利用(物理操作なし)再利用目的・構成が一致する場合のみ推奨

✅ 一般的には COPY を使うのが安全です。NOCOPY は慎重に。


2. FILE_NAME_CONVERT とは?

PDB再接続時に、データファイルの旧パスを新パスへ自動的に変換するための句です。

書式:

FILE_NAME_CONVERT = ('旧パス', '新パス')
  • Oracleは UNPLUG 時に保存されたファイルのパスを見て、その文字列を FILE_NAME_CONVERT に従って置き換えます
  • ディレクトリ全体を指定しても、一部の文字列だけでも可

3. 実環境でのディレクトリ構成例

■ 移行元CDB(OLDCDB)

  • ORACLE_BASE: /u01/app/oracle
  • データファイル格納先: /u01/app/oracle/oradata/OLDCDB/pdb01/
/u01/app/oracle/oradata/OLDCDB/pdb01/system01.dbf
/u01/app/oracle/oradata/OLDCDB/pdb01/sysaux01.dbf

■ 移行先CDB(NEWCDB)

  • ORACLE_BASE: /u02/app/oracle
  • データファイル格納先: /u02/app/oracle/oradata/NEWCDB/pdb01/

4. FILE_NAME_CONVERT の柔軟性:部分的な指定も可能!

以下のように、ファイルパス全体を指定する必要はなく、文字列の一部だけの変換も可能です。

✅ 例1:フルパス指定(典型的)

FILE_NAME_CONVERT = (
'/u01/app/oracle/oradata/OLDCDB/pdb01/',
'/u02/app/oracle/oradata/NEWCDB/pdb01/'
)

✅ 例2:一部だけを変換(簡略版)

FILE_NAME_CONVERT = (
'/OLDCDB/',
'/NEWCDB/'
)

この場合、Oracleはパスの中に含まれる /OLDCDB/ を見つけて /NEWCDB/ に置換します。
変換対象の文字列が唯一であることが前提です。

💰 【PR】Oracleエンジニアの市場価値、調べてみませんか?

Oracleのスキルは需要が高く、特定の資格や経験を持っていると年収が大幅にアップするケースがあります。まずはIT専門のエージェントで非公開求人をチェックしてみませんか?


5. 再接続の実行例

XML形式(COPY指定・部分パス変換)

CREATE PLUGGABLE DATABASE pdb01
USING '/tmp/pdb01.xml'
COPY
FILE_NAME_CONVERT = (
'/OLDCDB/',
'/NEWCDB/'
);

Oracleは .xml に記録されたファイルパス中の /OLDCDB/ を探し、それを /NEWCDB/ に置換してデータファイルをコピーします。


.pdb形式(MOVE指定・フルパス変換)

CREATE PLUGGABLE DATABASE pdb01
USING '/tmp/pdb01.pdb'
MOVE
FILE_NAME_CONVERT = (
'/u01/app/oracle/oradata/OLDCDB/',
'/u02/app/oracle/oradata/NEWCDB/'
);

.pdb アーカイブ内のパス情報に基づいてファイルが展開・移動されます。


NOCOPY(FILE_NAME_CONVERT 使用不可)

CREATE PLUGGABLE DATABASE pdb01
USING '/tmp/pdb01.xml'
NOCOPY;

FILE_NAME_CONVERT は指定できません
XMLに記録されたパスと実ファイルのパスが完全一致している必要があります。


6. 図解:各オプションのファイル操作イメージ

[COPY]
元: /u01/.../OLDCDB/pdb01/system01.dbf
↓ コピー
新: /u02/.../NEWCDB/pdb01/system01.dbf

[MOVE]
元: /u01/.../OLDCDB/pdb01/system01.dbf
↓ 移動(元削除)
新: /u02/.../NEWCDB/pdb01/system01.dbf

[NOCOPY]
元: /u01/.../OLDCDB/pdb01/system01.dbf
↓ そのまま使用(実ファイル移動なし)

7. まとめ:再接続成功のための選択ガイド

項目COPYMOVENOCOPY
データファイルを複製✅(削除あり)
FILE_NAME_CONVERT 使用可
パス変換の柔軟性◎ 一部パスでもOK◎ 同様× 指定不可
適用シーン一般移行同一ホスト既存ファイル活用・試験用途

8. 補足:.pdbアーカイブでも同様に適用される

  • .pdb ファイルを使った再接続でも、COPY/MOVE/NOCOPY の指定は必須です。
  • アーカイブ内部の構成情報(metadata.xml)をもとに、FILE_NAME_CONVERT が適用されます。

終わりに

再接続を成功させるためには、「ファイルの所在とOracleの認識しているパスを一致させること」が最重要です。
そのために、COPY / MOVE / NOCOPY の選択と、FILE_NAME_CONVERT の使い方を正しく理解しておきましょう。

[参考]
Oracle Database 新しいCDBへのPDBの抜き差しおよび アップグレード 19c

💰 【PR】Oracleエンジニアの市場価値、調べてみませんか?

Oracleのスキルは需要が高く、特定の資格や経験を持っていると年収が大幅にアップするケースがあります。まずはIT専門のエージェントで非公開求人をチェックしてみませんか?

コメント

タイトルとURLをコピーしました