PDBのプラグ時にORA-01276が発生する原因

あるCDBからPDBをアンプラグし、別のCDBにプラグしようとしたときにORA-01276が発生することがある。

SQL> create pluggable database cdb19sp1 using '/home/oracle/unplugged/cdb19p1.pdb'
  2  file_name_convert=('/home/oracle/unplugged','/u01/app/oracle/oradata/CDB19S/cdb19sp1');
create pluggable database cdb19sp1 using '/home/oracle/unplugged/cdb19p1.pdb'
*
行1でエラーが発生しました。:
ORA-01276:
ファイル/u01/app/oracle/oradata/CDB19S/cdb19sp1/o1_mf_system_kzmys91m_.dbfは追加
できません。ファイルにOracle Managed Filesのファイル名があります。

OMFのファイル云々というメッセージがあるので、file_name_convert を指定せずに実行してみてもNG。

SQL> create pluggable database cdb19sp1 using '/home/oracle/unplugged/cdb19p1.pdb';
create pluggable database cdb19sp1 using '/home/oracle/unplugged/cdb19p1.pdb'
                                                                            *
行1でエラーが発生しました。:
ORA-65018: FILE_NAME_CONVERTまたはNOCOPYを指定する必要があります

試しにNOCOPYを指定してみてもやはりNG。

SQL> create pluggable database cdb19sp1 using '/home/oracle/unplugged/cdb19p1.pdb' nocopy;
create pluggable database cdb19sp1 using '/home/oracle/unplugged/cdb19p1.pdb' nocopy
                                                                              *
行1でエラーが発生しました。:
ORA-65314:
アーカイブ・ファイルを使用してPDBをプラグインする際にNOCOPYを使用できません

原因

アンプラグした元のCDBでdb_create_file_destが設定されていたことが原因と思われる。

SQL> show parameter db_create_file

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
db_create_file_dest                  string      /u01/app/oracle/oradata

実際、アーカイブベースの方法でアンプラグした.pdbファイルの中身を見ると、以下のようにデータファイルがOMF形式で出力されていることがわかる。

[oracle@oradbs unplugged]$ unzip -Z cdb19p1.pdb
Archive:  cdb19p1.pdb
Zip file size: 225147293 bytes, number of entries: 4
-rw----     0.0 fat 387973120 b- defN 23-Feb-25 21:12 o1_mf_system_kzmys91m_.dbf
-rw----     0.0 fat 450887680 b- defN 23-Feb-25 21:13 o1_mf_sysaux_kzmys91n_.dbf
-rw----     0.0 fat 125829120 b- defN 23-Feb-25 21:13 o1_mf_undotbs1_kzmys91n_.dbf
-rw----     0.0 fat     6987 b- defN 23-Feb-25 21:13 /home/oracle/unplugged/cdb19p1.xml
4 files, 964696907 bytes uncompressed, 225146659 bytes compressed:  76.7%

そのため、プラグ先のCDBでもOMFを有効にすればプラグできるようになる。

SQL> alter system set db_create_file_dest='/u01/app/oracle/oradata';

システムが変更されました。

SQL> create pluggable database cdb19sp1 using '/home/oracle/unplugged/cdb19p1.pdb';

プラガブル・データベースが作成されました。

ただ、このやり方だとデータファイルの格納先ディレクトリがOracle指定の妙な場所になってしまうのが難点。

SQL> select name from v$datafile;

NAME
--------------------------------------------------------------------------------------------------------------
/u01/app/oracle/oradata/CDB19S/E907F08B9F3D55A4E0531564A8C022F8/datafile/o1_mf_system_kzn2myox_.dbf
/u01/app/oracle/oradata/CDB19S/E907F08B9F3D55A4E0531564A8C022F8/datafile/o1_mf_sysaux_kzn2myp1_.dbf
/u01/app/oracle/oradata/CDB19S/E907F08B9F3D55A4E0531564A8C022F8/datafile/o1_mf_undotbs1_kzn2myp1_.dbf

コメント