The most fast way to build a physical standby database is to duplicate a standby database from an online primary database by 11g RMAN. In the last paragraph, we introduce the duplication.
- Individual data files. Before copying these data files into the standby database, you should shutdown the standby database.
- For file system. This is the easiest way to copy, just copy your data files to the correct destination. First, transport the data files from primary to standby, and then copy the data files to the correct destination.
- For raw devices. You can use "dd" command to input the data files.
- For ASM.
- RMAN Backupset. Since RMAN can overcome every type of storage, so there is no differences between steps:
- Copy the backup pieces from the primary server to either node of the standby RAC.
- Startup the standby database to mount state.
- Register backup pieces to the standby database.
- Confirm the newly registered backup pieces.
- Restore all data files.
- Duplicate a database by 11g RMAN This is the fastest way to build a physical standby database, if you are planning use this, you can skip the step (06/14), (07/14) and even (09/14).
- Login RMAN.
- Duplicate database for standby.
[oracle@primary01 ~]$ scp /tmp/datafiles/* standby01:/tmp/datafiles
[oracle@standby01 ~]$ cp /tmp/datafiles/* /u01/app/oracle/oradata/standb
This kind of database usually are standalone.
[root@standby01 ~]# dd if=/tmp/datafiles/system01.dbf of=/dev/rdisk04 bs=8k count=61441
[root@standby01 ~]# dd if=/tmp/datafiles/undotbs01.dbf of=/dev/rdisk05 bs=8k count=3201
...
Before above "dd", you should make sure the raw devices are clean, if not, try to format the raw devices before copying.
ASMCMD> cp /tmp/example01.dbf +data/compdb/datafile/EXAMPLE.264.761506243
...
Note: since "cp" command in database version 11.2.0.1.0 does not work very well, you should download the newest version or patch to make it functional.
[oracle@primary01 ~]$ scp /tmp/database_backups/* standby01:/tmp/database_backups
[oracle@standby01 ~]$ srvctl stop database -d compdb
[oracle@standby01 ~]$ srvctl start database -d compdb -o mount
...
[oracle@standby01 ~]$ rman target /
...
RMAN> catalog backuppiece '/tmp/database_backups/08npq6cs_1_1.bak';
using target database control file instead of recovery catalog
cataloged backup piece
backup piece handle=/tmp/database_backups/08npq6cs_1_1.bak RECID=1 STAMP=798886529
RMAN> catalog backuppiece '/tmp/database_backups/09npq6gu_1_1.bak';
cataloged backup piece
backup piece handle=/tmp/database_backups/09npq6gu_1_1.bak RECID=2 STAMP=798886547
RMAN> catalog backuppiece '/tmp/database_backups/0anpq6h8_1_1.bak';
cataloged backup piece
backup piece handle=/tmp/database_backups/0anpq6h8_1_1.bak RECID=3 STAMP=798886569
RMAN> catalog backuppiece '/tmp/database_backups/0bnpq6h9_1_1.bak';
cataloged backup piece
backup piece handle=/tmp/database_backups/0bnpq6h9_1_1.bak RECID=4 STAMP=798886601
RMAN> list backup;
List of Backup Sets
===================
BS Key Type LV Size Device Type Elapsed Time Completion Time
------- ---- -- ---------- ----------- ------------ ---------------
1 Full 1.17G DISK 00:00:00 08-NOV-12
BP Key: 1 Status: AVAILABLE Compressed: NO Tag: FOR_CREATING_STANDBY
Piece Name: /tmp/database_backups/08npq6cs_1_1.bak
Keep: BACKUP_LOGS Until: 11-NOV-12
List of Datafiles in backup set 1
File LV Type Ckp SCN Ckp Time Name
---- -- ---- ---------- --------- ----
1 Full 3471112 08-NOV-12 +DATA/compdb/datafile/system.268.795098881
2 Full 3471112 08-NOV-12 +DATA/compdb/datafile/sysaux.269.795098973
3 Full 3471112 08-NOV-12 +DATA/compdb/datafile/undotbs1.270.795099057
4 Full 3471112 08-NOV-12 +DATA/compdb/datafile/users.273.795099105
5 Full 3471112 08-NOV-12 +DATA/compdb/datafile/example.271.795099083
6 Full 3471112 08-NOV-12 +DATA/compdb/datafile/undotbs2.272.795099097
BS Key Type LV Size Device Type Elapsed Time Completion Time
------- ---- -- ---------- ----------- ------------ ---------------
2 Full 80.00K DISK 00:00:00 08-NOV-12
BP Key: 2 Status: AVAILABLE Compressed: NO Tag: FOR_CREATING_STANDBY
Piece Name: /tmp/database_backups/09npq6gu_1_1.bak
Keep: BACKUP_LOGS Until: 11-NOV-12
SPFILE Included: Modification time: 08-NOV-12
SPFILE db_unique_name: PRIMDB
BS Key Size Device Type Elapsed Time Completion Time
------- ---------- ----------- ------------ ---------------
3 184.50K DISK 00:00:00 08-NOV-12
BP Key: 3 Status: AVAILABLE Compressed: NO Tag: FOR_CREATING_STANDBY
Piece Name: /tmp/database_backups/0anpq6h8_1_1.bak
Keep: BACKUP_LOGS Until: 11-NOV-12
List of Archived Logs in backup set 3
Thrd Seq Low SCN Low Time Next SCN Next Time
---- ------- ---------- --------- ---------- ---------
1 61 3471091 08-NOV-12 3471406 08-NOV-12
2 59 3470837 08-NOV-12 3471096 08-NOV-12
2 60 3471096 08-NOV-12 3471411 08-NOV-12
BS Key Type LV Size Device Type Elapsed Time Completion Time
------- ---- -- ---------- ----------- ------------ ---------------
4 Full 18.61M DISK 00:00:00 08-NOV-12
BP Key: 4 Status: AVAILABLE Compressed: NO Tag: FOR_CREATING_STANDBY
Piece Name: /tmp/database_backups/0bnpq6h9_1_1.bak
Keep: BACKUP_LOGS Until: 11-NOV-12
Control File Included: Ckp SCN: 3471460 Ckp time: 08-NOV-12
RMAN> restore database;
Starting restore at 09-NOV-12
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=33 instance=standb1 device type=DISK
channel ORA_DISK_1: starting datafile backup set restore
channel ORA_DISK_1: specifying datafile(s) to restore from backup set
channel ORA_DISK_1: restoring datafile 00001 to +DATA/compdb/datafile/system.268.795098881
channel ORA_DISK_1: restoring datafile 00002 to +DATA/compdb/datafile/sysaux.269.795098973
channel ORA_DISK_1: restoring datafile 00003 to +DATA/compdb/datafile/undotbs1.270.795099057
channel ORA_DISK_1: restoring datafile 00004 to +DATA/compdb/datafile/users.273.795099105
channel ORA_DISK_1: restoring datafile 00005 to +DATA/compdb/datafile/example.271.795099083
channel ORA_DISK_1: restoring datafile 00006 to +DATA/compdb/datafile/undotbs2.272.795099097
channel ORA_DISK_1: reading from backup piece /tmp/database_backups/08npq6cs_1_1.bak
channel ORA_DISK_1: piece handle=/tmp/database_backups/08npq6cs_1_1.bak tag=FOR_CREATING_STANDBY
channel ORA_DISK_1: restored backup piece 1
channel ORA_DISK_1: restore complete, elapsed time: 00:06:07
Finished restore at 09-NOV-12
You can also add a tag clause for a more specific restore like this:
RMAN> restore database from tag 'FOR_CREATING_STANDBY';
Commnad "restore database" will not restore the controlfile and spfile, so don't worry about the primary controlfile and spfile.
Since the restored data files are image copies, they do not overwrite the original data files, they are renamed by 11g RMAN on the standby database, in this moment, the controlfile will have no idea about the new names, so you should switch all data files to the current copies under mount state after copy the standby controlfile and before creating spfile. We will describe the details in the step (10/14), but you can have the command right now.
RMAN> switch database to copy;
[oracle@standby01 dbs]$ rman target sys/password@primdb1 auxiliary sys/password@standb1 ...
RMAN> run
2> {
3> allocate channel c1 device type disk;
4> allocate auxiliary channel a1 device type DISK;
5> DUPLICATE TARGET DATABASE
6> FOR STANDBY FROM ACTIVE DATABASE
7> NOFILENAMECHECK;
8> }
using target database control file instead of recovery catalog
allocated channel: c1
channel c1: SID=31 instance=primdb1 device type=DISK
allocated channel: a1
channel a1: SID=24 device type=DISK
Starting Duplicate Db at 09-OCT-12
contents of Memory Script:
{
backup as copy reuse
targetfile '/u01/app/oracle/product/11.2.0/db_1/dbs/orapwprimdb1' auxiliary format
'/u01/app/oracle/product/11.2.0/db_1/dbs/orapwstandb1' ;
}
executing Memory Script
Starting backup at 09-OCT-12
Finished backup at 09-OCT-12
contents of Memory Script:
{
backup as copy current controlfile for standby auxiliary format '/u01/app/oracle/product/11.2.0/db_1/dbs/cntrlstandb1.dbf';
}
executing Memory Script
Starting backup at 09-OCT-12
channel c1: starting datafile copy
copying standby control file
output file name=/u01/app/oracle/product/11.2.0/db_1/dbs/snapcf_primdb1.f tag=TAG20120927T124740 RECID=3 STAMP=795098863
channel c1: datafile copy complete, elapsed time: 00:00:07
Finished backup at 09-OCT-12
contents of Memory Script:
{
sql clone 'alter database mount standby database';
}
executing Memory Script
sql statement: alter database mount standby database
RMAN-05529: WARNING: DB_FILE_NAME_CONVERT resulted in invalid ASM names; names changed to disk group only.
contents of Memory Script:
{
set newname for tempfile 1 to
"+data";
switch clone tempfile all;
set newname for datafile 1 to
"+data";
set newname for datafile 2 to
"+data";
set newname for datafile 3 to
"+data";
set newname for datafile 4 to
"+data";
set newname for datafile 5 to
"+data";
set newname for datafile 6 to
"+data";
backup as copy reuse
datafile 1 auxiliary format
"+data" datafile
2 auxiliary format
"+data" datafile
3 auxiliary format
"+data" datafile
4 auxiliary format
"+data" datafile
5 auxiliary format
"+data" datafile
6 auxiliary format
"+data" ;
}
executing Memory Script
executing command: SET NEWNAME
renamed tempfile 1 to +data in control file
executing command: SET NEWNAME
executing command: SET NEWNAME
executing command: SET NEWNAME
executing command: SET NEWNAME
executing command: SET NEWNAME
executing command: SET NEWNAME
Starting backup at 09-OCT-12
channel c1: starting datafile copy
input datafile file number=00001 name=+DATA/compdb/datafile/system.256.761506017
output file name=+DATA/compdb/datafile/system.268.795098881 tag=TAG20121109T204756
channel c1: datafile copy complete, elapsed time: 00:01:35
channel c1: starting datafile copy
input datafile file number=00002 name=+DATA/compdb/datafile/sysaux.257.761506023
output file name=+DATA/compdb/datafile/sysaux.269.795098973 tag=TAG20121109T204756
channel c1: datafile copy complete, elapsed time: 00:01:25
channel c1: starting datafile copy
input datafile file number=00003 name=+DATA/compdb/datafile/undotbs1.258.761506025
output file name=+DATA/compdb/datafile/undotbs1.270.795099057 tag=TAG20121109T204756
channel c1: datafile copy complete, elapsed time: 00:00:25
channel c1: starting datafile copy
input datafile file number=00005 name=+DATA/compdb/datafile/example.264.761506243
output file name=+DATA/compdb/datafile/example.271.795099083 tag=TAG20121109T204756
channel c1: datafile copy complete, elapsed time: 00:00:15
channel c1: starting datafile copy
input datafile file number=00006 name=+DATA/compdb/datafile/undotbs2.265.761506625
output file name=+DATA/compdb/datafile/undotbs2.272.795099097 tag=TAG20121109T204756
channel c1: datafile copy complete, elapsed time: 00:00:07
channel c1: starting datafile copy
input datafile file number=00004 name=+DATA/compdb/datafile/users.259.761506027
output file name=+DATA/compdb/datafile/users.273.795099105 tag=TAG20121109T204756
channel c1: datafile copy complete, elapsed time: 00:00:01
Finished backup at 09-OCT-12
contents of Memory Script:
{
switch clone datafile all;
}
executing Memory Script
datafile 1 switched to datafile copy
input datafile copy RECID=3 STAMP=795099106 file name=+DATA/compdb/datafile/system.268.795098881
datafile 2 switched to datafile copy
input datafile copy RECID=4 STAMP=795099106 file name=+DATA/compdb/datafile/sysaux.269.795098973
datafile 3 switched to datafile copy
input datafile copy RECID=5 STAMP=795099106 file name=+DATA/compdb/datafile/undotbs1.270.795099057
datafile 4 switched to datafile copy
input datafile copy RECID=6 STAMP=795099106 file name=+DATA/compdb/datafile/users.273.795099105
datafile 5 switched to datafile copy
input datafile copy RECID=7 STAMP=795099106 file name=+DATA/compdb/datafile/example.271.795099083
datafile 6 switched to datafile copy
input datafile copy RECID=8 STAMP=795099106 file name=+DATA/compdb/datafile/undotbs2.272.795099097
Finished Duplicate Db at 09-OCT-12
released channel: c1
released channel: a1
The duplication will copy the standby controlfile into the database, you don't need to copy the standby controlfile into the database, but sometimes don't, in such case, you must do the step (09/14) by yourself. Luckily, RMAN save a copy of the controlfile on the standby server during duplication, the file location is usually at '$ORACLE_HOME/dbs/cntrl.dbf'.