11gR2利用active rman duplicate,源端归档模式下不停机复制一套新环境。
以testa复制到testb为例,具体步骤如下:
1.源端库TESTA打开归档模式
SYS@testa> archive log list;
Database log mode No Archive Mode
Automatic archival Disabled
Archive destination USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence 71587
Current log sequence 71589
SYS@testa> alter system set db_recovery_file_dest_size=10G scope=spfile;
System altered.
SYS@testa> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup mount;
ORACLE instance started.
Total System Global Area 2071830528 bytes
Fixed Size 2160776 bytes
Variable Size 973080440 bytes
Database Buffers 1073741824 bytes
Redo Buffers 22847488 bytes
Database mounted.
SYS@testa> alter database archivelog;
Database altered.
SYS@testa> alter database open;
Database altered.
SYS@testa> select Log_mode from v$database;
LOG_MODE
------------
ARCHIVELOG
如果是刚打开归档模式,最好手工切换日志一下。
SYS@testa>alter system switch logfile;
2.在源端TESTA生成pfile文件,传至目标端TESTB。
SQL> create pfile='$HOME/testa/inittestb.ora' from spfile;
File created.
machine:testa > cd $HOME/testa
machine:testa > sed 's/testa/testb/g' inittesta.ora >inittestb.ora
向inittestb.ora中添加转换数据文件,redo文件路径的参数:
文件系统到文件系统:
*.db_file_name_convert=('/oracle/data01/oradata/testa/','/oracle/data01/oradata/testb/')
*.log_file_name_convert=('/oracle/data01/oradata/testa/','/oracle/data01/oradata/testb/')
ASM到ASM,只要加卷名,而且不加“/”,如下:
*.db_file_name_convert=('+DATA_TESTA_MDG','+DATA_TESTB_MDG')
*.log_file_name_convert=('+DATA_TESTA_MDG','+DATA_TESTB_MDG','+FRA_TESTA_MDG','+FRA_TESTB_MDG')
文件系统到ASM:
*.db_file_name_convert=('/oracle/data01/oradata/testa/','+DATA_TESTB_MDG')
*.log_file_name_convert=('/oracle/data01/oradata/testa/','+DATA_TESTB_MDG')
将initd1pacms.ora拷贝到目标端的$ORACLE_HOME/dbs下.
3.配置监听,tnsnames.ora,密码文件:
修改密码文件,源端和目标到都要执行:
$ORACLE_HOME/bin/orapwd file=$ORACLE_HOME/dbs/orapw$ORACLE_SID password=test1234 force=y
配置Tnsnames.ora文件,源端和目标到都要添加:
testb>echo "testa=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(Host=vip)(Port=1526))(CONNECT_DATA=(SID=testa)))" >>$ORACLE_HOME/network/admin/tnsnames.ora
testb>echo "testb=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(Host=vip)(Port=1526))(CONNECT_DATA=(SID=testb)))" >>$ORACLE_HOME/network/admin/tnsnames.ora
> tnsping testa
4.目标端TESTB编辑rman.sh脚本复制:
Rman.sh如下:
#!/bin/bash
#rman active duplicate###
rman << EOF
connect target sys/paic1234@testa
connect AUXILIARY sys/paic1234@testb
RUN
{
allocate auxiliary channel c1 device type disk;
allocate auxiliary channel c2 device type disk;
allocate auxiliary channel c3 device type disk;
allocate auxiliary channel c4 device type disk;
allocate channel d1 device type disk;
allocate channel d2 device type disk;
allocate channel d3 device type disk;
allocate channel d4 device type disk;
DUPLICATE TARGET DATABASE
TO testb
FROM ACTIVE DATABASE;
}
EOF
开始复制,复制时需要注意是否使用nofilenamecheck参数,如果两个实例相关数据目录结构完全相同,则需要指定,否则会报错。
DUPLICATE TARGET DATABASE TO testb FROM ACTIVE DATABASE nofilenamecheck;
后台发起:nohup sh ./rman.sh >duplicate.log 2>&1 &
附rman duplicate的日志如下:
报错总结:
如果处理时报错:
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of Duplicate Db command at 12/21/2016 09:49:50
RMAN-05501: aborting duplication of target database
RMAN-05541: no archived logs found in target database
出现这种错误很可能是你刚刚将主数据库切换为归档模式然后紧接着就利用RMAN的duplicate创建standby数据库导致的。原因就在于主数据库切换为归档模式之后还未发生过切换,手动在主数据库上切换一次就可以了
SYS>alter system switch logfile;
报这个错,可能是listener.ora文件配置的ORACLE_HOME路径不对
cnsz081129:testa > rman
Recovery Manager: Release 11.2.0.4.0 - Production on Wed Dec 28 15:58:31 2016
Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved.
RMAN> connect AUXILIARY sys/test1234@testb
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-04006: error from auxiliary database: ORA-01017: invalid username/password; logon denied