ある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
コメント