Oracle Database 12c has new enhancements and additions in Recovery Manager (RMAN).
The RMAN tool continues to enhance and extend the reliability, efficiency, and availability of Oracle Database Backup and Recovery.
Below, I will mention couple of new features for the RMAN duplicate command, but also how to avoid issues that can happen on the creation of the temporary files.
FEATURES:
<INFO>Using BACKUPSET clause :
In previous releases, active duplicates were performed using implicit image copy backups, transferred directly to the destination server. From 12.1 it is also possible to perform active duplicates using backup sets by including the USING BACKUPSET clause.
Compared to the other method (image copy backups), the unused block compression associated with a backup set reduces the amount of the data pulled across the network.
<INFO>Using SECTION SIZE clause:
The section size clause takes into account the parallel degree and the size of the datafile that will be used.
In my case I have configured the parallel degree to 6:
RMAN> CONFIGURE DEVICE TYPE DISK PARALLELISM 6 BACKUP TYPE TO BACKUPSET; new RMAN configuration parameters: CONFIGURE DEVICE TYPE DISK PARALLELISM 6 BACKUP TYPE TO BACKUPSET; new RMAN configuration parameters are successfully stored Starting restore at 19-JUL-2018 14:11:06 using channel ORA_AUX_DISK_1 using channel ORA_AUX_DISK_2 using channel ORA_AUX_DISK_3 using channel ORA_AUX_DISK_4 using channel ORA_AUX_DISK_5 using channel ORA_AUX_DISK_6
channel ORA_AUX_DISK_3: using network backup set from service PROD2_SITE1 channel ORA_AUX_DISK_3: specifying datafile(s) to restore from backup set channel ORA_AUX_DISK_3: restoring datafile 00005 to /u02/oradata/PROD/data.dbf channel ORA_AUX_DISK_3: restoring section 2 of 7 ------ channel ORA_AUX_DISK_2: starting datafile backup set restore channel ORA_AUX_DISK_2: using network backup set from service PROD2_SITE1 channel ORA_AUX_DISK_2: specifying datafile(s) to restore from backup set channel ORA_AUX_DISK_2: restoring datafile 00005 to /u02/oradata/PROD/data.dbf channel ORA_AUX_DISK_2: restoring section 7 of 7
<INFO>The 2 clauses “USING BACKUPSET” and “SECTION SIZE” cannot be used without “ACTIVE DATABASE” and can be integrated successfully into the standby creation :
oracle@dbisrv01:/home/oracle/ [PROD2] rman target sys/password@PROD2_SITE1 auxiliary sys/password@PROD2_SITE2 Recovery Manager: Release 12.1.0.2.0 - Production on Sun Jul 22 13:17:14 2018 Copyright (c) 1982, 2014, Oracle and/or its affiliates. All rights reserved. connected to target database: PROD2 (DBID=1633730013) connected to auxiliary database: PROD2 (not mounted) RMAN> duplicate target database for standby from active database using backupset section size 500m nofilenamecheck;
Starting Duplicate Db at 22-JUL-2018 13:17:21 using target database control file instead of recovery catalog allocated channel: ORA_AUX_DISK_1 channel ORA_AUX_DISK_1: SID=249 device type=DISK allocated channel: ORA_AUX_DISK_2 channel ORA_AUX_DISK_2: SID=13 device type=DISK allocated channel: ORA_AUX_DISK_3 channel ORA_AUX_DISK_3: SID=250 device type=DISK allocated channel: ORA_AUX_DISK_4 channel ORA_AUX_DISK_4: SID=14 device type=DISK allocated channel: ORA_AUX_DISK_5 channel ORA_AUX_DISK_5: SID=251 device type=DISK allocated channel: ORA_AUX_DISK_6 channel ORA_AUX_DISK_6: SID=15 device type=DISK contents of Memory Script: { backup as copy reuse targetfile '/u01/app/oracle/product/12.1.0/dbhome_1/dbs/orapwPROD2' auxiliary format '/u01/app/oracle/product/12.1.0/dbhome_1/dbs/orapwPROD2' ; } executing Memory Script ---------------------------- executing Memory Script datafile 1 switched to datafile copy input datafile copy RECID=1 STAMP=982156757 file name=/u02/oradata/PROD2/system01.dbf datafile 3 switched to datafile copy input datafile copy RECID=2 STAMP=982156757 file name=/u02/oradata/PROD2/sysaux01.dbf datafile 4 switched to datafile copy input datafile copy RECID=3 STAMP=982156757 file name=/u02/oradata/PROD2/undotbs01.dbf datafile 5 switched to datafile copy input datafile copy RECID=4 STAMP=982156757 file name=/u02/oradata/PROD2/data.dbf datafile 6 switched to datafile copy input datafile copy RECID=5 STAMP=982156757 file name=/u02/oradata/PROD2/users01.dbf Finished Duplicate Db at 22-JUL-2018 13:19:21 RMAN> exit
<INFO>Check the status of the PRIMARY & STANDBY database
SQL> select name,db_unique_name,database_role from v$database; NAME DB_UNIQUE_NAME DATABASE_ROLE --------- ------------------------------ ---------------- PROD2 PROD2_SITE1 PRIMARY SQL> select name,db_unique_name,database_role from v$database; NAME DB_UNIQUE_NAME DATABASE_ROLE --------- ------------------------------ ---------------- PROD2 PROD2_SITE2 PHYSICAL STANDBY
ISSUES :
<WARN>Duplicating on 12cR1, creation of the temp files is not handled correctly.
Duplicating from active or from backup, using Oracle 12cR1, you can run into some issues with the temporary files.
oracle@dbisrv02:/u01/app/oracle/product/12.1.0/dbhome_1/dbs/ [PROD] rman target sys/pwd00@<TNS_NAME_TARGET> auxiliary sys/pwd00@<TNS_NAME_AUXILIARY> Recovery Manager: Release 12.1.0.2.0 - Production on Thu Jul 19 13:31:20 2018 Copyright (c) 1982, 2014, Oracle and/or its affiliates. All rights reserved. connected to target database: <TNS_NAME_TARGET> (DBID=xxxxxxxxxx) connected to auxiliary database: <TNS_NAME_AUXILIARY> (not mounted) duplicate target database to <TNS_NAME_AUXILIARY> from active database using backupset section size 500m; ---------------------------------------- contents of Memory Script: { Alter clone database open resetlogs; } executing Memory Script database opened Finished Duplicate Db at 19-JUL-2018 14:26:09
<INFO>Querying the v$tempfile will not reveal any error
SQL> select file#,name,status from v$tempfile; FILE# NAME STATUS ---------- ------------------------------ ------- 1 /u02/oradata/<AUXILIARY>/temp01.dbf ONLINE
<INFO>But querying the dba_temp_files, or run some transactions against your database that need usage of the temporary tablespace, you will got :
SQL> select * from dba_temp_files; select * from dba_temp_files * ERROR at line 1: ORA-01187: cannot read from file because it failed verification tests ORA-01110: data file 201: '/u02/oradata/<AUXILIARY>/temp01.dbf'
Solution1 : Drop and recreate your temporary tablespace(s) manually. Could be difficult if you have several of them, OR
Solution2 : Drop temp files from your <to_be_cloned_DB>, on the OS side, before launching the duplicate. For more details you can consult this note from MOS : 2250889.1
SQL> col TABLESPACE_NAME format a50; SQL> col file_name format a50; SQL> select file_name,TABLESPACE_NAME from dba_temp_files; FILE_NAME TABLESPACE_NAME -------------------------------------------------- -------------------------------------------------- /u02/oradata/<AUXILIARY>/temp01.dbf TEMP SQL>startup nomount; rm -rf /u02/oradata/<AUXILIARY>/temp01.dbf
oracle@dbisrv02:/u01/app/oracle/product/12.1.0/dbhome_1/dbs/ [PROD] rman target sys/pwd00@<TNS_NAME_TARGET> auxiliary sys/pwd00@<TNS_NAME_AUXILIARY> Recovery Manager: Release 12.1.0.2.0 - Production on Thu Jul 19 13:31:20 2018 Copyright (c) 1982, 2014, Oracle and/or its affiliates. All rights reserved. connected to target database: <TNS_NAME_TARGET> (DBID=xxxxxxxxxx) connected to auxiliary database: <TNS_NAME_AUXILIARY> (not mounted) duplicate target database to <TNS_NAME_AUXILIARY> from active database using backupset section size 500m;
At then end of the duplicate action, you should be able to use the database without any action performed against temp files :
SQL> select file#,name,status from v$tempfile; FILE# NAME STATUS ---------- ------------------------------ ------- 1 /u02/oradata/<AUXILIARY>/temp01.dbf ONLINE
Additionally, if you are running your auxiliary DB using the Oracle Grid Infra, you need to remove it from Grid during your actions and add again once you finished.
SQL> alter system set db_unique_name='PROD_SITE2' scope=spfile; alter system set db_unique_name='PROD_SITE2' scope=spfile * ERROR at line 1: ORA-32017: failure in updating SPFILE ORA-65500: could not modify DB_UNIQUE_NAME, resource exists --remove from GRID [grid@dbisrv02 ~]$ srvctl stop database -d PROD [grid@dbisrv02 ~]$ srvctl remove database -d PROD Remove the database PROD? (y/[n]) Y SQL> startup ORACLE instance started. Total System Global Area 788529152 bytes Fixed Size 2929352 bytes Variable Size 314576184 bytes Database Buffers 465567744 bytes Redo Buffers 5455872 bytes Database mounted. Database opened. SQL> alter system set db_unique_name='PROD_SITE2' scope=spfile; System altered.