RMANのDuplicateコマンドで既存CDBにPDBを複製

RMANのDuplicateはCDB全体を複製する以外に、CDB内の特定のPDBを既存の別CDBに複製することもできる。複製先は既存のCDBなので、通常のDuplicateのように補助インスタンスを新たに作成する必要はない。

以下のような構成で試してみる。

  • 既存のCDBのSIDは「cdb19」、複製するPDBは「cdb19p2」
  • 複製先のCDBは別筐体上の同じSID「cdb19」で、同じ名前のPDBを作成する
  • データファイルの格納先は複製元と同じとする

複製元データベースでの作業

複製元のデータベースはアーカイブログモードになっている必要がある。

また、複製したいPDBは事前にOPENしておく。

SQL> alter pluggable database cdb19p2 open;

複製先データベースでの作業

複製元につなげるためのクライアント設定を行う

tnsnames.ora に複製元のデータベース(CDB)に接続するための設定を追加する。

ここでは、接続識別子(ネットサービス名)を「SRC」としている。

SRC =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = oradbs.dn.home)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = cdb19)
    )
  )

remote_recovery_file_dest パラメータの設定

複製実行中にアーカイブログファイルが格納されるディレクトリの指定が必要。

適当なディレクトリを作成しておき、そこをパラメータで指定しておく。

$ mkdir ~/rrfd
SQL> alter system set remote_recovery_file_dest='/home/oracle/rrfd';

複製を実行する

RMANを起動する。この時、targetは複製元、auxiliary は複製先の既存のCDBのSYSユーザを指定。

$ rman target sys/oracle@SRC auxiliary sys/oracle

あとは以下のようにDuplicateコマンドを実行する。

RMAN> duplicate pluggable database cdb19p2 as cdb19p2 to cdb19 from active database nofilenamecheck;
RMAN> duplicate pluggable database cdb19p2 as cdb19p2 to cdb19 from active database nofilenamecheck;

Duplicate PDBを2023-03-11 23:40:45で開始しています
リカバリ・カタログのかわりにターゲット・データベース制御ファイルを使用しています
チャネル: ORA_AUX_DISK_1が割り当てられました
チャネルORA_AUX_DISK_1: SID=278 デバイス・タイプ=DISK
現在のログがアーカイブされました。
RMAN-05159: Oracle Managed File (OMF)の場所にOnline logsを複製しています
RMAN-05158: 警告: 補助(datafile)ファイル名/u01/app/oracle/oradata/CDB19/cdb19p2/system01.dbfは、ターゲット・データベースによって使用されているファイルと競合しています
RMAN-05158: 警告: 補助(datafile)ファイル名/u01/app/oracle/oradata/CDB19/cdb19p2/sysaux01.dbfは、ターゲット・データベースによって使用されているファイルと競合しています
RMAN-05158: 警告: 補助(datafile)ファイル名/u01/app/oracle/oradata/CDB19/cdb19p2/undotbs01.dbfは、ターゲット・データベースに
よって使用されているファイルと競合しています
現在のログがアーカイブされました。

メモリー・スクリプトの内容:
{
   set newname for datafile  133 to 
 "/u01/app/oracle/oradata/CDB19/cdb19p2/system01.dbf";
   set newname for datafile  134 to 
 "/u01/app/oracle/oradata/CDB19/cdb19p2/sysaux01.dbf";
   set newname for datafile  135 to 
 "/u01/app/oracle/oradata/CDB19/cdb19p2/undotbs01.dbf";
   restore
   from  nonsparse   clone foreign pluggable database
    "CDB19P2" 
   from service  'SRC'   ;
}
メモリー・スクリプトを実行しています

実行コマンド: SET NEWNAME

実行コマンド: SET NEWNAME

実行コマンド: SET NEWNAME

restoreを2023-03-11 23:40:49で開始しています
チャネルORA_AUX_DISK_1の使用

チャネルORA_AUX_DISK_1: データファイル・バックアップ・セットのリストアを開始しています
チャネルORA_AUX_DISK_1: サービスSRCのネットワーク・バックアップ・セットを使用しています
チャネルORA_AUX_DISK_1: バックアップ・セットからリストアするデータファイルを指定しています
チャネルORA_AUX_DISK_1: 外部ファイル133を/u01/app/oracle/oradata/CDB19/cdb19p2/system01.dbfにリストアしています
チャネルORA_AUX_DISK_1: リストアが完了しました。経過時間: 00:00:15
チャネルORA_AUX_DISK_1: データファイル・バックアップ・セットのリストアを開始しています
チャネルORA_AUX_DISK_1: サービスSRCのネットワーク・バックアップ・セットを使用しています
チャネルORA_AUX_DISK_1: バックアップ・セットからリストアするデータファイルを指定しています
チャネルORA_AUX_DISK_1: 外部ファイル134を/u01/app/oracle/oradata/CDB19/cdb19p2/sysaux01.dbfにリストアしています
チャネルORA_AUX_DISK_1: リストアが完了しました。経過時間: 00:00:07
チャネルORA_AUX_DISK_1: データファイル・バックアップ・セットのリストアを開始しています
チャネルORA_AUX_DISK_1: サービスSRCのネットワーク・バックアップ・セットを使用しています
チャネルORA_AUX_DISK_1: バックアップ・セットからリストアするデータファイルを指定しています
チャネルORA_AUX_DISK_1: 外部ファイル135を/u01/app/oracle/oradata/CDB19/cdb19p2/undotbs01.dbfにリストアしています
チャネルORA_AUX_DISK_1: リストアが完了しました。経過時間: 00:00:07
restoreを2023-03-11 23:41:18で終了しました

メモリー・スクリプトの内容:
{
   set archivelog destination to  '/home/oracle/rrfd';
   restore clone force from service  'SRC' 
           foreign archivelog from scn  7625712;
}
メモリー・スクリプトを実行しています

実行コマンド: SET ARCHIVELOG DESTINATION

restoreを2023-03-11 23:41:18で開始しています
チャネルORA_AUX_DISK_1の使用

チャネルORA_AUX_DISK_1: ユーザー指定の宛先へのアーカイブ・ログのリストアを開始しています
アーカイブ・ログの保存先=/home/oracle/rrfd
チャネルORA_AUX_DISK_1: サービスSRCのネットワーク・バックアップ・セットを使用しています
チャネルORA_AUX_DISK_1: アーカイブ・ログをリストアしています
アーカイブ・ログ・スレッド=1 順序=131
チャネルORA_AUX_DISK_1: リストアが完了しました。経過時間: 00:00:01
チャネルORA_AUX_DISK_1: ユーザー指定の宛先へのアーカイブ・ログのリストアを開始しています
アーカイブ・ログの保存先=/home/oracle/rrfd
チャネルORA_AUX_DISK_1: サービスSRCのネットワーク・バックアップ・セットを使用しています
チャネルORA_AUX_DISK_1: アーカイブ・ログをリストアしています
アーカイブ・ログ・スレッド=1 順序=132
チャネルORA_AUX_DISK_1: リストアが完了しました。経過時間: 00:00:01
チャネルORA_AUX_DISK_1: ユーザー指定の宛先へのアーカイブ・ログのリストアを開始しています
アーカイブ・ログの保存先=/home/oracle/rrfd
チャネルORA_AUX_DISK_1: サービスSRCのネットワーク・バックアップ・セットを使用しています
チャネルORA_AUX_DISK_1: アーカイブ・ログをリストアしています
アーカイブ・ログ・スレッド=1 順序=133
チャネルORA_AUX_DISK_1: リストアが完了しました。経過時間: 00:00:01
restoreを2023-03-11 23:41:22で終了しました

メタデータのインポートを実行しています...
Duplicate PDBを2023-03-11 23:41:25で終了しました

複製先にPDBが作成されていることが確認できれば完了。

SQL> show pdbs

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         3 CDB19P1                        READ WRITE NO
         4 CDB19P2                        READ WRITE NO
SQL> 

コメント