首页 > 代码库 > 使用rman中的duplicate复制数据库
使用rman中的duplicate复制数据库
[oracle@hxl01 dbs]$orapwd file=orapworaclbak password=oracle entries=10 force=y
mkdir -p /u01/app/oracle/admin/oracl/bdump
mkdir -p /u01/app/oracle/admin/oracl/cdump
mkdir -p /u01/app/oracle/admin/oracl/dpdump
mkdir -p /u01/app/oracle/admin/oracl/pfile
mkdir -p /u01/app/oracle/admin/oracl/udump
mkdir -p /u01/app/oracle/oradata/oracl
mkdir -p /u01/app/oracle/flash_recovery_area
将在target上创建的pfile(initoracl.ora,具体创建步骤参考3.1)拷贝到Duplicate,修改参数(*.db_name=‘oraclbak‘),其他跟目标库保持一致,然后创建spfile.
Sql>create spfile from pfile=‘/u01/app/oracle/product/10.2.0/db_1/dbs/initoracl.ora‘;
Sql>startup nomount;
[oracle@hxl01 dbs]$netca
[oracle@hxl01 dbs]$netmgr
Sql>shutdown immediate;
Sql>startup mount;
Sql>alter database archivelog;
sql>alter system set log_archive_dest_1=‘LOCATION=/u01/app/oracle/duplicate‘ scope=both;
sql>alter database open;
Rman>run{
set maxcorrupt for datafile 5 to 20;
allocate channel dup type disk;
backup format ‘/u01/app/oracle/duplicate/df_t%t_s%s_p%p‘ database;
sql ‘alter system archive log current‘;
backup format ‘/u01/app/oracle/duplicate/al_t%t_s%s_p%p‘ archivelog all delete input;
release channel dup;
}
4.复制数据库
duplicate target database to oraclbak nofilenamecheck
logfile group 1 (‘/u01/app/oracle/oradata/oracl/redo1_1.log‘,‘/u01/app/oracle/oradata/oracl/redo1_2.log‘) size 512M,
group 2 (‘/u01/app/oracle/oradata/oracl/redo2_1.log‘,‘/u01/app/oracle/oradata/oracl/redo2_2.log‘) size 512M,
group 3 (‘/u01/app/oracle/oradata/oracl/redo3_1.log‘,‘/u01/app/oracle/oradata/oracl/redo3_2.log‘) size 512M;
}
using target database control file instead of recovery catalog
allocated channel: ORA_AUX_DISK_1
channel ORA_AUX_DISK_1: sid=156 devtype=DISK
contents of Memory Script:
{
set until scn 1556049;
set newname for datafile 1 to
"/u01/app/oracle/oradata/oracl/system01.dbf";
set newname for datafile 2 to
"/u01/app/oracle/oradata/oracl/undotbs01.dbf";
set newname for datafile 3 to
"/u01/app/oracle/oradata/oracl/sysaux01.dbf";
set newname for datafile 4 to
"/u01/app/oracle/oradata/oracl/users01.dbf";
set newname for datafile 5 to
"/u01/app/oracle/oradata/oracl/hxl01.dbf";
restore
check readonly
clone database
;
}
executing Memory Script
executing command: SET until clause
executing command: SET NEWNAME
executing command: SET NEWNAME
executing command: SET NEWNAME
executing command: SET NEWNAME
executing command: SET NEWNAME
Starting restore at 13-FEB-12
using channel ORA_AUX_DISK_1
channel ORA_AUX_DISK_1: starting datafile backupset restore
channel ORA_AUX_DISK_1: specifying datafile(s) to restore from backup set
restoring datafile 00001 to /u01/app/oracle/oradata/oracl/system01.dbf
restoring datafile 00002 to /u01/app/oracle/oradata/oracl/undotbs01.dbf
restoring datafile 00003 to /u01/app/oracle/oradata/oracl/sysaux01.dbf
restoring datafile 00004 to /u01/app/oracle/oradata/oracl/users01.dbf
restoring datafile 00005 to /u01/app/oracle/oradata/oracl/hxl01.dbf
channel ORA_AUX_DISK_1: reading from backup piece /u01/app/oracle/duplicate/df_t775114282_s89_p1
channel ORA_AUX_DISK_1: restored backup piece 1
piece handle=/u01/app/oracle/duplicate/df_t775114282_s89_p1 tag=TAG20120213T053120
channel ORA_AUX_DISK_1: restore complete, elapsed time: 00:00:47
Finished restore at 13-FEB-12
sql statement: CREATE CONTROLFILE REUSE SET DATABASE "ORACL" RESETLOGS ARCHIVELOG
MAXLOGFILES 16
MAXLOGMEMBERS 3
MAXDATAFILES 100
MAXINSTANCES 8
MAXLOGHISTORY 292
LOGFILE
GROUP 1 ( ‘/u01/app/oracle/oradata/oracl/redo1_1.log‘, ‘/u01/app/oracle/oradata/oracl/redo1_2.log‘ ) SIZE 512 M ,
GROUP 2 ( ‘/u01/app/oracle/oradata/oracl/redo2_1.log‘, ‘/u01/app/oracle/oradata/oracl/redo2_2.log‘ ) SIZE 512 M ,
GROUP 3 ( ‘/u01/app/oracle/oradata/oracl/redo3_1.log‘, ‘/u01/app/oracle/oradata/oracl/redo3_2.log‘ ) SIZE 512 M
DATAFILE
‘/u01/app/oracle/oradata/oracl/system01.dbf‘
CHARACTER SET AL32UTF8
contents of Memory Script:
{
switch clone datafile all;
}
executing Memory Script
released channel: ORA_AUX_DISK_1
datafile 2 switched to datafile copy
input datafile copy recid=1 stamp=775102986 filename=/u01/app/oracle/oradata/oracl/undotbs01.dbf
datafile 3 switched to datafile copy
input datafile copy recid=2 stamp=775102987 filename=/u01/app/oracle/oradata/oracl/sysaux01.dbf
datafile 4 switched to datafile copy
input datafile copy recid=3 stamp=775102987 filename=/u01/app/oracle/oradata/oracl/users01.dbf
datafile 5 switched to datafile copy
input datafile copy recid=4 stamp=775102987 filename=/u01/app/oracle/oradata/oracl/hxl01.dbf
contents of Memory Script:
{
set until scn 1556049;
recover
clone database
delete archivelog
;
}
executing Memory Script
executing command: SET until clause
Starting recover at 13-FEB-12
allocated channel: ORA_AUX_DISK_1
channel ORA_AUX_DISK_1: sid=156 devtype=DISK
starting media recovery
channel ORA_AUX_DISK_1: starting archive log restore to default destination
channel ORA_AUX_DISK_1: restoring archive log
archive log thread=1 sequence=47
channel ORA_AUX_DISK_1: restoring archive log
archive log thread=1 sequence=48
channel ORA_AUX_DISK_1: reading from backup piece /u01/app/oracle/duplicate/al_t775114352_s91_p1
channel ORA_AUX_DISK_1: restored backup piece 1
piece handle=/u01/app/oracle/duplicate/al_t775114352_s91_p1 tag=TAG20120213T053230
channel ORA_AUX_DISK_1: restore complete, elapsed time: 00:00:16
archive log filename=/u01/app/oracle/flash_recovery_area/ORACL/archivelog/2012_02_13/o1_mf_1_47_7mj0wydg_.arc thread=1 sequence=47
channel clone_default: deleting archive log(s)
archive log filename=/u01/app/oracle/flash_recovery_area/ORACL/archivelog/2012_02_13/o1_mf_1_47_7mj0wydg_.arc recid=2 stamp=775103016
archive log filename=/u01/app/oracle/flash_recovery_area/ORACL/archivelog/2012_02_13/o1_mf_1_48_7mj0x0qm_.arc thread=1 sequence=48
channel clone_default: deleting archive log(s)
archive log filename=/u01/app/oracle/flash_recovery_area/ORACL/archivelog/2012_02_13/o1_mf_1_48_7mj0x0qm_.arc recid=1 stamp=775103009
media recovery complete, elapsed time: 00:00:09
Finished recover at 13-FEB-12
contents of Memory Script:
{
shutdown clone;
startup clone nomount ;
}
executing Memory Script
database dismounted
Oracle instance shut down
connected to auxiliary database (not started)
Oracle instance started
Total System Global Area 524288000 bytes
Fixed Size 1220360 bytes
Variable Size 138412280 bytes
Database Buffers 381681664 bytes
Redo Buffers 2973696 bytes
sql statement: CREATE CONTROLFILE REUSE SET DATABASE "ORACL" RESETLOGS ARCHIVELOG
MAXLOGFILES 16
MAXLOGMEMBERS 3
MAXDATAFILES 100
MAXINSTANCES 8
MAXLOGHISTORY 292
LOGFILE
GROUP 1 ( ‘/u01/app/oracle/oradata/oracl/redo1_1.log‘, ‘/u01/app/oracle/oradata/oracl/redo1_2.log‘ ) SIZE 512 M ,
GROUP 2 ( ‘/u01/app/oracle/oradata/oracl/redo2_1.log‘, ‘/u01/app/oracle/oradata/oracl/redo2_2.log‘ ) SIZE 512 M ,
GROUP 3 ( ‘/u01/app/oracle/oradata/oracl/redo3_1.log‘, ‘/u01/app/oracle/oradata/oracl/redo3_2.log‘ ) SIZE 512 M
DATAFILE
‘/u01/app/oracle/oradata/oracl/system01.dbf‘
CHARACTER SET AL32UTF8
contents of Memory Script:
{
set newname for tempfile 1 to
"/u01/app/oracle/oradata/oracl/temp01.dbf";
switch clone tempfile all;
catalog clone datafilecopy "/u01/app/oracle/oradata/oracl/undotbs01.dbf";
catalog clone datafilecopy "/u01/app/oracle/oradata/oracl/sysaux01.dbf";
catalog clone datafilecopy "/u01/app/oracle/oradata/oracl/users01.dbf";
catalog clone datafilecopy "/u01/app/oracle/oradata/oracl/hxl01.dbf";
switch clone datafile all;
}
executing Memory Script
executing command: SET NEWNAME
renamed temporary file 1 to /u01/app/oracle/oradata/oracl/temp01.dbf in control file
cataloged datafile copy
datafile copy filename=/u01/app/oracle/oradata/oracl/undotbs01.dbf recid=1 stamp=775103080
cataloged datafile copy
datafile copy filename=/u01/app/oracle/oradata/oracl/sysaux01.dbf recid=2 stamp=775103081
cataloged datafile copy
datafile copy filename=/u01/app/oracle/oradata/oracl/users01.dbf recid=3 stamp=775103083
cataloged datafile copy
datafile copy filename=/u01/app/oracle/oradata/oracl/hxl01.dbf recid=4 stamp=775103084
datafile 2 switched to datafile copy
input datafile copy recid=1 stamp=775103080 filename=/u01/app/oracle/oradata/oracl/undotbs01.dbf
datafile 3 switched to datafile copy
input datafile copy recid=2 stamp=775103081 filename=/u01/app/oracle/oradata/oracl/sysaux01.dbf
datafile 4 switched to datafile copy
input datafile copy recid=3 stamp=775103083 filename=/u01/app/oracle/oradata/oracl/users01.dbf
datafile 5 switched to datafile copy
input datafile copy recid=4 stamp=775103084 filename=/u01/app/oracle/oradata/oracl/hxl01.dbf
contents of Memory Script:
{
Alter clone database open resetlogs;
}
executing Memory Script
database opened
Finished Duplicate Db at 13-FEB-12
数据库打开后使用sysdba登陆提示ORA-01031: insufficient privileges,找了半天原因是密码文件命名问题, 之前创建密码文件名为orapwdoraclbak,将其修改为orapworaclbak,问题解决,注意在linux下密码文件的命名格式为orapw+sid.
SQL> connect sys/oracle@dup_oracl as sysdba
ERROR:
ORA-01031: insufficient privileges
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of Duplicate Db command at 02/14/2012 01:01:41
RMAN-03015: error occurred in stored script Memory Script
RMAN-06053: unable to perform media recovery because of missing log
RMAN-06025: no backup of log thread 1 seq 53 lowscn 1597845 found to restore
SET until sequence 52;
duplicate target database to oraclbak nofilenamecheck
logfile group 1 (‘/u01/app/oracle/oradata/oracl/redo1_1.log‘,‘/u01/app/oracle/oradata/oracl/redo1_2.log‘) size 512M,
group 2 (‘/u01/app/oracle/oradata/oracl/redo2_1.log‘,‘/u01/app/oracle/oradata/oracl/redo2_2.log‘) size 512M,
group 3 (‘/u01/app/oracle/oradata/oracl/redo3_1.log‘,‘/u01/app/oracle/oradata/oracl/redo3_2.log‘) size 512M;
}
使用rman中的duplicate复制数据库