سلام به همه دوستان


از اوراکل 12.1 یک ویژگی خوبی که ما میتونیم استفاده کنیم استفاده از duplicate rman pdb هست یعنی میتونیم یک PDB رو در دیتابیس دیگه به راحتی بالا بیاوریم مثلا برای برنامه نویس ها و یا محیط تست خیلی به کار میاد

خب من در اینجا دو سرور دارم با دو دیتابیس CDB  به نام های atmdb و cdb18c و بر روی سرور اول من میخواهم atmpdb رو به سرور cdb18c انقال بدم

CDB$ROOT@ATMDB> show pdbs

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         3 ATMPDB                         READ WRITE NO
         4 PDB2                           MOUNTED
PDB های سمت مقصد رو هم چک میکنیم 
SQL> show pdbs

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
SQL>
ما برای اتصال دو سرور که بر روی دو host جدا هستن دو تا TNS درست می کنیم

CDB18C =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 10.0.1.20)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = cdb18c)
    )
  )

ATMDB =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 10.0.1.10)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = atmdb)
    )
  )
[oracle@test18c admin]$  tnsping  ATMDB

TNS Ping Utility for Linux: Version 18.0.0.0.0 - Production on 31-MAR-2019 11:27:42

Copyright (c) 1997, 2018, Oracle.  All rights reserved.

Used parameter files:


Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = test18c)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = atmdb)))
OK (0 msec)
[oracle@test18c admin]$ tnsping  CDB18C

TNS Ping Utility for Linux: Version 18.0.0.0.0 - Production on 31-MAR-2019 11:27:53

Copyright (c) 1997, 2018, Oracle.  All rights reserved.

Used parameter files:


Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 10.0.1.20)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = cdb18c)))
OK (0 msec)

خب حالا عملیات duplicate رو شروع میکنیم
ابتدا باید پارامتر  REMOTE_RECOVERY_FILE_DEST را در دیتابیس مقصد تنظیم کنیم علت این کار هم بخاطر این که در مدت زمان duplicate دیتابیس archivelog  های تولد شده خودش رو به اینجا بفرسته برای sync شدن در مدت زمان ایحاد duplicate
SQL> alter system set remote_recovery_file_dest='+FRA' scope=both;

System altered.


[oracle@test18c trace]$ rman target sys@ATMDB auxiliary sys@CDB18C

Recovery Manager: Release 18.0.0.0.0 - Production on Sun Mar 31 14:08:00 2019
Version 18.3.0.0.0

Copyright (c) 1982, 2018, Oracle and/or its affiliates.  All rights reserved.

target database Password:
connected to target database: ATMDB (DBID=609790210)
auxiliary database Password:
connected to auxiliary database: CDB18C (DBID=327724007)

RMAN> DUPLICATE PLUGGABLE DATABASE ATMPDB as DEVATMPDB TO CDB18C DB_FILE_NAME_CONVERT('+DATA/ATMDB/','+DATA/CDB18C/') FROM ACTIVE DATABASE;

Starting Duplicate PDB at 31-MAR-19
using target database control file instead of recovery catalog
allocated channel: ORA_AUX_DISK_1
channel ORA_AUX_DISK_1: SID=257 device type=DISK
current log archived

contents of Memory Script:
{
   set newname for datafile  9 to
 "+DATA";
   set newname for datafile  10 to
 "+DATA";
   set newname for datafile  11 to
 "+DATA";
   set newname for datafile  12 to
 "+DATA";
   set newname for datafile  38 to
 "+DATA";
   restore
   from  nonsparse   clone foreign pluggable database
    "ATMPDB"
   from service  'ATMDB'   ;
}
executing Memory Script

executing command: SET NEWNAME

executing command: SET NEWNAME

executing command: SET NEWNAME

executing command: SET NEWNAME

executing command: SET NEWNAME

Starting restore at 31-MAR-19
using channel ORA_AUX_DISK_1

channel ORA_AUX_DISK_1: starting datafile backup set restore
channel ORA_AUX_DISK_1: using network backup set from service ATMDB
channel ORA_AUX_DISK_1: specifying datafile(s) to restore from backup set
channel ORA_AUX_DISK_1: restoring foreign file 9 to +DATA/CDB18C/81ADBC7C185B7319E0530A01000A3B17/DATAFILE/system.271.1004363869
channel ORA_AUX_DISK_1: restore complete, elapsed time: 00:00:03
channel ORA_AUX_DISK_1: starting datafile backup set restore
channel ORA_AUX_DISK_1: using network backup set from service ATMDB
channel ORA_AUX_DISK_1: specifying datafile(s) to restore from backup set
channel ORA_AUX_DISK_1: restoring foreign file 10 to +DATA/CDB18C/81ADBC7C185B7319E0530A01000A3B17/DATAFILE/sysaux.272.1004363873
channel ORA_AUX_DISK_1: restore complete, elapsed time: 00:00:04
channel ORA_AUX_DISK_1: starting datafile backup set restore
channel ORA_AUX_DISK_1: using network backup set from service ATMDB
channel ORA_AUX_DISK_1: specifying datafile(s) to restore from backup set
channel ORA_AUX_DISK_1: restoring foreign file 11 to +DATA/CDB18C/81ADBC7C185B7319E0530A01000A3B17/DATAFILE/undotbs1.273.1004363877
channel ORA_AUX_DISK_1: restore complete, elapsed time: 00:00:01
channel ORA_AUX_DISK_1: starting datafile backup set restore
channel ORA_AUX_DISK_1: using network backup set from service ATMDB
channel ORA_AUX_DISK_1: specifying datafile(s) to restore from backup set
channel ORA_AUX_DISK_1: restoring foreign file 12 to +DATA/CDB18C/81ADBC7C185B7319E0530A01000A3B17/DATAFILE/users.274.1004363877
channel ORA_AUX_DISK_1: restore complete, elapsed time: 00:00:01
channel ORA_AUX_DISK_1: starting datafile backup set restore
channel ORA_AUX_DISK_1: using network backup set from service ATMDB
channel ORA_AUX_DISK_1: specifying datafile(s) to restore from backup set
channel ORA_AUX_DISK_1: restoring foreign file 38 to +DATA/CDB18C/81ADBC7C185B7319E0530A01000A3B17/DATAFILE/fakari.275.1004363879
channel ORA_AUX_DISK_1: restore complete, elapsed time: 00:00:01
Finished restore at 31-MAR-19
current log archived

contents of Memory Script:
{
   set archivelog destination to  '+FRA';
   restore clone force from service  'ATMDB'
           foreign archivelog from scn  3700997;
}
executing Memory Script

executing command: SET ARCHIVELOG DESTINATION

Starting restore at 31-MAR-19
using channel ORA_AUX_DISK_1

channel ORA_AUX_DISK_1: starting archived log restore to user-specified destination
archived log destination=+FRA
channel ORA_AUX_DISK_1: using network backup set from service ATMDB
channel ORA_AUX_DISK_1: restoring archived log
archived log thread=1 sequence=38
channel ORA_AUX_DISK_1: restore complete, elapsed time: 00:00:01
channel ORA_AUX_DISK_1: starting archived log restore to user-specified destination
archived log destination=+FRA
channel ORA_AUX_DISK_1: using network backup set from service ATMDB
channel ORA_AUX_DISK_1: restoring archived log
archived log thread=1 sequence=39
channel ORA_AUX_DISK_1: restore complete, elapsed time: 00:00:01
Finished restore at 31-MAR-19

Performing import of metadata...
Finished Duplicate PDB at 31-MAR-19

کار ما تمام شد فقط چک چون حداولی در pdb  اصلی ساخته بودم رو چک میکنم 
SQL> show pdbs

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
SQL> show pdbs

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         3 DEVATMPDB                      READ WRITE NO
SQL> alter session set container=DEVATMPDB;

Session altered.

SQL> select * from usertest.tbl1;

        ID FNAME
---------- ----------
         1 ali
         1 ali
         1 ali
همانطور که مشاهده میکنیم DEVATMPDB به صورت read write در دسترس می باشد
موفق باشید