RMAN duplicate 方式 做个备库

本文介绍使用 RMAN duplicate 命令简化 Oracle DATAGUARD 备库搭建流程,涵盖从主库设置归档模式到备库启动恢复等关键步骤。

采用RMAN duplicate 方式做备库 可以说是ORACLE 公司对 以前做DATA GUARD 方式的 用户友好性的提升.

这样我们不用去 备份数据文件,然后网络传送, 再还原恢复操作了.

这里就一个简单的命令搞定一切

那就是 

duplicate target database for standby from active database nofilenamecheck;


0 前提是你已经搞定了 LISTENER.ORA TNS_NAME.ORA 和环境变量`/.bash_profile

   里面的名字关系.

1 设置主库归档模式和强制模式
SHUTDOWN IMMEDIATE;
STARTUP MOUNT;
ALTER DATABASE ARCHIVELOG;
ALTER DATABASE FORCE LOGGING;


 
2 修改主库参数
ALTER SYSTEM SET LOG_ARCHIVE_CONFIG='DG_CONFIG=(DBMAST,DBSALVE,DBSALVE2)' SCOPE=BOTH;
ALTER SYSTEM SET LOG_ARCHIVE_DEST_2='SERVICE=DBSALVE LGWR SYNC AFFIRM VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=DBSALVE' SCOPE=BOTH;
ALTER SYSTEM SET LOG_ARCHIVE_DEST_3='SERVICE=DBSALVE2 LGWR ASYNC AFFIRM VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=DBSALVE2' SCOPE=BOTH;
ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_2='DEFER' SCOPE=BOTH;
ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_3='DEFER' SCOPE=BOTH;
ALTER SYSTEM SET FAL_SERVER=DBSALVE SCOPE=BOTH;
ALTER SYSTEM SET FAL_CLIENT=DBMAST SCOPE=BOTH;
ALTER SYSTEM SET STANDBY_FILE_MANAGEMENT=AUTO SCOPE=BOTH;

2 创建备用库参数文件
create pfile='/home/oracle/initDBSALVE.ora' from spfile;
3 把监听,密码文件 TNSNAME.ORA 传到备库
3.5 重新创建密码方法: orapwd file=orapwdbt password=lotery1401 entries=10
   创建完了后要从主库复制过去,才能保持一致,并且备库要重启才能应用新的密码文件

4 备库操作
修改监听文件,改名密码文件,修改TNSNAME.ORA
创建相应的目录,审计目录,数据文件目录,日志目录
修改备用库参数文件
注意各个名字,除了DB_NAME 跟主库一样外.如果只是复制一个数据库,则全部都不一样.
日志文件转换,数据文件转换,目录要重新检查一遍.

*.audit_file_dest='/u01/app/software/oracle/admin/DBSALVE/adump'
*.audit_trail='db'
*.compatible='11.2.0.4.0'
*.control_files='/u04/DBSALVE/control01.ctl','/u02/fast_recovery_area/DBSALVE/control02.ctl'
*.db_block_size=8192
*.db_domain=''
*.db_name='DBMAST'
*.db_unique_name='DBSALVE'
*.service_names='DBSALVE'
*.db_file_name_convert='/u04/DBMAST','/u04/DBSALVE'
*.log_file_name_convert='/u01/online_log_flash/DBMAST','/u02/onlinelog/DBSALVE'
*.db_recovery_file_dest='/u02/fast_recovery_area'
*.db_recovery_file_dest_size=1073741824
*.diagnostic_dest='/u01/app/software/oracle'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=DBMASTXDB)'
*.fal_client='DBSALVE'
*.fal_server='DBMAST'
*.log_archive_config='DG_CONFIG=(DBMAST,DBSALVE,DBSALVE2)'
*.log_archive_dest_1='LOCATION=/u05/arch_backup'
*.log_archive_dest_2='SERVICE=DBMAST LGWR SYNC AFFIRM VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=DBMAST'
*.LOG_ARCHIVE_DEST_3='SERVICE=DBSALVE2 LGWR ASYNC AFFIRM VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=DBSALVE2'
*.log_archive_dest_state_2='DEFER'
*.log_archive_dest_state_3='DEFER'
*.log_archive_format='%t_%s_%r.archlog'
*.memory_target=445644800
*.nls_language='SIMPLIFIED CHINESE'
*.nls_territory='CHINA'
*.open_cursors=300
*.processes=150
*.remote_login_passwordfile='EXCLUSIVE'
*.standby_file_management='AUTO'
*.undo_tablespace='UNDOTBS1'

5  启动实列
ORACLE] sqlplus / as sysdba
startup nomount pfile=$ORACLE_HOME/dbs/initDBSALVE.ora;

6 开始复制
ORACLE] rman target sys/oracle@DBMAST auxiliary sys/oracle@DBSALVE

--该命令只是复制出一个一样的数据库
duplicate target database to DBSALVE from active database nofilenamecheck;
--这个是复制出一个备用库
duplicate target database for standby from active database nofilenamecheck;

--如果数据库很大的话
run
{
    allocate channel p1 type disk;
    allocate channel p2 type disk;
    allocate auxiliary channel a1 type disk;
    duplicate target database for standby from active database nofilenamecheck;
};

 注意 这里最好不用把参数放进这里面跑,如果参数不对要重跑一次,另外不要在RMAN这里

执行SQL语句和shutdown操作. 因为你不清楚目前连接的是什么数据库.


6.5 运行信息参考后面

6.6 执行完了后它会把备库启动在MOUNT下


7 备库添加日志
alter database add standby logfile group 4 '/u02/onlinelog/DBSALVE/standby_redo04.log' size 50m;
alter database add standby logfile group 5 '/u02/onlinelog/DBSALVE/standby_redo05.log' size 50m;
alter database add standby logfile group 6 '/u02/onlinelog/DBSALVE/standby_redo06.log' size 50m;
alter database add standby logfile group 7 '/u02/onlinelog/DBSALVE/standby_redo07.log' size 50m;

8主库添加日志
alter database add standby logfile group 4 '/u01/online_log_flash/DBMAST/standby_redo04.log' size 50m;
alter database add standby logfile group 5 '/u01/online_log_flash/DBMAST/standby_redo05.log' size 50m;
alter database add standby logfile group 6 '/u01/online_log_flash/DBMAST/standby_redo06.log' size 50m;
alter database add standby logfile group 7 '/u01/online_log_flash/DBMAST/standby_redo07.log' size 50m;

 


9 备库启动恢复模式
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT;

10 主库开始向备库传日志
alter system set log_archive_dest_state_2='enable' scope =both;

11 当主备库日志一致后 开启备库只读模式
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
ALTER DATABASE OPEN read only;
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT;


12
检查最大归档
SELECT THREAD#,MAX(SEQUENCE#) FROM V$ARCHIVED_LOG  GROUP BY THREAD#;
select thread#,applied,t.DELETED,t.ARCHIVED,max(sequence#) from v$archived_log t where applied='YES'group by thread#,applied,t.DELETED,t.ARCHIVED;

select thread#,applied,max(sequence#) from v$archived_log t where applied='YES'group by thread#,applied;

备库检查
查看数据库角色
col name format a10
SELECT NAME,OPEN_MODE,PROTECTION_MODE,DATABASE_ROLE,SWITCHOVER_STATUS,DB_UNIQUE_NAME FROM V$DATABASE;

 


仅供参考

cat tnsnames.ora 

orcl_pd =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.231)(PORT = 1521))
    (CONNECT_DATA =
      (SERVICE_NAME = orcl)
    )
  )


orcl_st =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.232)(PORT = 1521))
    (CONNECT_DATA =
      (SERVICE_NAME = orcl)
    )
  )


cat listener.ora

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (GLOBAL_DBNAME = orcl)
      (ORACLE_HOME = /u01/app/oracle/product/11.2.0/dbhome_1)
      (SID_NAME = orcl)  
    )
  )


LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.231)(PORT = 1521))
    )
  )


ADR_BASE_LISTENER = /u01/app/oracle



RMAN> connect auxiliary sys/pbs123@orcl_st;


connected to auxiliary database: ORCL (not mounted)


RMAN> duplicate target database for standby from active database nofilenamecheck;


Starting Duplicate Db at 2016-04-28 02:31:19
using target database control file instead of recovery catalog
allocated channel: ORA_AUX_DISK_1
channel ORA_AUX_DISK_1: SID=189 device type=DISK


contents of Memory Script:
{
   backup as copy reuse
   targetfile  '/u01/app/oracle/product/11.2.0/dbhome_1/dbs/orapworcl' auxiliary format 
 '/u01/app/oracle/product/11.2.0/dbhome_1/dbs/orapworcl'   ;
}
executing Memory Script


Starting backup at 2016-04-28 02:31:19
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=35 device type=DISK
Finished backup at 2016-04-28 02:31:21


contents of Memory Script:
{
   backup as copy current controlfile for standby auxiliary format  '/u01/app/oracle/oradata/orcl/control01.ctl';
   restore clone controlfile to  '/u01/app/oracle/flash_recovery_area/orcl/control02.ctl' from 
 '/u01/app/oracle/oradata/orcl/control01.ctl';
}
executing Memory Script


Starting backup at 2016-04-28 02:31:21
using channel ORA_DISK_1
channel ORA_DISK_1: starting datafile copy
copying standby control file
output file name=/u01/app/oracle/product/11.2.0/dbhome_1/dbs/snapcf_orcl.f tag=TAG20160428T023121 RECID=254 STAMP=910319481
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:03
Finished backup at 2016-04-28 02:31:24


Starting restore at 2016-04-28 02:31:24
using channel ORA_AUX_DISK_1


channel ORA_AUX_DISK_1: copied control file copy
Finished restore at 2016-04-28 02:31:25


contents of Memory Script:
{
   sql clone 'alter database mount standby database';
}
executing Memory Script


sql statement: alter database mount standby database


contents of Memory Script:
{
   set newname for tempfile  1 to 
 "/u01/app/oracle/oradata/orcl/temp01.dbf";
   switch clone tempfile all;
   set newname for datafile  1 to 
 "/u01/app/oracle/oradata/orcl/system01.dbf";
   set newname for datafile  2 to 
 "/u01/app/oracle/oradata/orcl/sysaux01.dbf";
   set newname for datafile  3 to 
 "/u01/app/oracle/oradata/orcl/undotbs01.dbf";
   set newname for datafile  4 to 
 "/u01/app/oracle/oradata/orcl/users01.dbf";
   set newname for datafile  5 to 
 "/u01/app/oracle/oradata/orcl/example01.dbf";
   set newname for datafile  6 to 
 "/u01/app/oracle/oradata/orcl/osscdata.dbf";
   set newname for datafile  7 to 
 "/u01/app/oracle/oradata/orcl/ccps.dbf";
   set newname for datafile  8 to 
 "/u01/app/oracle/oradata/orcl/ccps1.dbf";
   set newname for datafile  9 to 
 "/u01/app/oracle/oradata/orcl/CCPS1_INX.dbf";
   set newname for datafile  10 to 
 "/u01/app/oracle/oradata/orcl/CCPS_INX.dbf";
   backup as copy reuse
   datafile  1 auxiliary format 
 "/u01/app/oracle/oradata/orcl/system01.dbf"   datafile 
 2 auxiliary format 
 "/u01/app/oracle/oradata/orcl/sysaux01.dbf"   datafile 
 3 auxiliary format 
 "/u01/app/oracle/oradata/orcl/undotbs01.dbf"   datafile 
 4 auxiliary format 
 "/u01/app/oracle/oradata/orcl/users01.dbf"   datafile 
 5 auxiliary format 
 "/u01/app/oracle/oradata/orcl/example01.dbf"   datafile 
 6 auxiliary format 
 "/u01/app/oracle/oradata/orcl/osscdata.dbf"   datafile 
 7 auxiliary format 
 "/u01/app/oracle/oradata/orcl/ccps.dbf"   datafile 
 8 auxiliary format 
 "/u01/app/oracle/oradata/orcl/ccps1.dbf"   datafile 
 9 auxiliary format 
 "/u01/app/oracle/oradata/orcl/CCPS1_INX.dbf"   datafile 
 10 auxiliary format 
 "/u01/app/oracle/oradata/orcl/CCPS_INX.dbf"   ;
   sql 'alter system archive log current';
}
executing Memory Script


executing command: SET NEWNAME


renamed tempfile 1 to /u01/app/oracle/oradata/orcl/temp01.dbf 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


executing command: SET NEWNAME


executing command: SET NEWNAME


executing command: SET NEWNAME


executing command: SET NEWNAME


Starting backup at 2016-04-28 02:31:31
using channel ORA_DISK_1
channel ORA_DISK_1: starting datafile copy
input datafile file number=00008 name=/u01/app/oracle/oradata/orcl/ccps1.dbf
output file name=/u01/app/oracle/oradata/orcl/ccps1.dbf tag=TAG20160428T023131
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:02:06
channel ORA_DISK_1: starting datafile copy
input datafile file number=00002 name=/u01/app/oracle/oradata/orcl/sysaux01.dbf
output file name=/u01/app/oracle/oradata/orcl/sysaux01.dbf tag=TAG20160428T023131
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:01:15
channel ORA_DISK_1: starting datafile copy
input datafile file number=00001 name=/u01/app/oracle/oradata/orcl/system01.dbf
output file name=/u01/app/oracle/oradata/orcl/system01.dbf tag=TAG20160428T023131
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:01:05
channel ORA_DISK_1: starting datafile copy
input datafile file number=00009 name=/u01/app/oracle/oradata/orcl/CCPS1_INX.dbf
output file name=/u01/app/oracle/oradata/orcl/CCPS1_INX.dbf tag=TAG20160428T023131
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:45
channel ORA_DISK_1: starting datafile copy
input datafile file number=00003 name=/u01/app/oracle/oradata/orcl/undotbs01.dbf
output file name=/u01/app/oracle/oradata/orcl/undotbs01.dbf tag=TAG20160428T023131
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:35
channel ORA_DISK_1: starting datafile copy
input datafile file number=00005 name=/u01/app/oracle/oradata/orcl/example01.dbf
output file name=/u01/app/oracle/oradata/orcl/example01.dbf tag=TAG20160428T023131
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:15
channel ORA_DISK_1: starting datafile copy
input datafile file number=00006 name=/u01/app/oracle/oradata/orcl/osscdata.dbf
output file name=/u01/app/oracle/oradata/orcl/osscdata.dbf tag=TAG20160428T023131
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:15
channel ORA_DISK_1: starting datafile copy
input datafile file number=00007 name=/u01/app/oracle/oradata/orcl/ccps.dbf
output file name=/u01/app/oracle/oradata/orcl/ccps.dbf tag=TAG20160428T023131
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:15
channel ORA_DISK_1: starting datafile copy
input datafile file number=00010 name=/u01/app/oracle/oradata/orcl/CCPS_INX.dbf
output file name=/u01/app/oracle/oradata/orcl/CCPS_INX.dbf tag=TAG20160428T023131
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:15
channel ORA_DISK_1: starting datafile copy
input datafile file number=00004 name=/u01/app/oracle/oradata/orcl/users01.dbf
output file name=/u01/app/oracle/oradata/orcl/users01.dbf tag=TAG20160428T023131
channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:01
Finished backup at 2016-04-28 02:38:19


sql statement: alter system archive log current


contents of Memory Script:
{
   switch clone datafile all;
}
executing Memory Script


datafile 1 switched to datafile copy
input datafile copy RECID=254 STAMP=910319900 file name=/u01/app/oracle/oradata/orcl/system01.dbf
datafile 2 switched to datafile copy
input datafile copy RECID=255 STAMP=910319900 file name=/u01/app/oracle/oradata/orcl/sysaux01.dbf
datafile 3 switched to datafile copy
input datafile copy RECID=256 STAMP=910319900 file name=/u01/app/oracle/oradata/orcl/undotbs01.dbf
datafile 4 switched to datafile copy
input datafile copy RECID=257 STAMP=910319900 file name=/u01/app/oracle/oradata/orcl/users01.dbf
datafile 5 switched to datafile copy
input datafile copy RECID=258 STAMP=910319900 file name=/u01/app/oracle/oradata/orcl/example01.dbf
datafile 6 switched to datafile copy
input datafile copy RECID=259 STAMP=910319900 file name=/u01/app/oracle/oradata/orcl/osscdata.dbf
datafile 7 switched to datafile copy
input datafile copy RECID=260 STAMP=910319900 file name=/u01/app/oracle/oradata/orcl/ccps.dbf
datafile 8 switched to datafile copy
input datafile copy RECID=261 STAMP=910319900 file name=/u01/app/oracle/oradata/orcl/ccps1.dbf
datafile 9 switched to datafile copy
input datafile copy RECID=262 STAMP=910319900 file name=/u01/app/oracle/oradata/orcl/CCPS1_INX.dbf
datafile 10 switched to datafile copy
input datafile copy RECID=263 STAMP=910319900 file name=/u01/app/oracle/oradata/orcl/CCPS_INX.dbf
Finished Duplicate Db at 2016-04-28 02:38:25

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值