RMAN DUPLICATE TARGET DATABASE FOR STANDBY(Active Dataguard) FROM ACTIVE DATABASE (Oracle 11g)

本文详细介绍了数据库双活方案的配置流程,包括监听器的添加、TNS名称的设置、日志组的添加、参数的修改以及数据库实例的启动等关键步骤,确保了数据库在不同服务器间的高效同步与灾备能力。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

实验环境:

Primary数据库服务器:utf11g

Primary Database:utf11g

Standby数据库服务器:zhs11g

Standby Database:utf11dg

Primary and Standby OS Platform:rhel 5.6 x86-64

步骤如下:


1、添加Primary数据库的Listener
PRIMARY =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.220)(PORT = 1522))
    )
  )

ADR_BASE_DGTDB = /soft/oracle
#Static Listener
SID_LIST_PRIMARY =
  (SID_LIST =
    (SID_DESC =
      (ORACLE_HOME = /soft/oracle/product/11.2.0/db_1)
      (SID_NAME = utf11g)
    )
  )

2、添加Standby数据库的Listener
STANDBY =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.221)(PORT = 1522))
    )
  )

ADR_BASE_DGTDB = /soft/oracle
#Static Listener
SID_LIST_STANDBY =
  (SID_LIST =
    (SID_DESC =
      (ORACLE_HOME = /soft/oracle/product/11.2.0/db_1)
      (SID_NAME = utf11g)
    )
  )

3、给Primary和Standby都添加如下TNS名称
PRIMARY =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.220)(PORT = 1522))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = utf11g)
    )
  )

STANDBY =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.221)(PORT = 1522))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = utf11g)
      (UR = A)
    )
  )

4、分别在Primary和Standby服务器上启动上面步骤添加的监听
lsnrctl start primary
lsnrctl start standby

5、为主库添加Standby日志组
alter database add standby logfile '/soft/oracle/oradata/utf11g/stb.redo01.log' size 128M;
alter database add standby logfile '/soft/oracle/oradata/utf11g/stb.redo02.log' size 128M;
alter database add standby logfile '/soft/oracle/oradata/utf11g/stb.redo03.log' size 128M;
alter database add standby logfile '/soft/oracle/oradata/utf11g/stb.redo04.log' size 128M;

6、修改主库的一下参数
alter system set LOG_ARCHIVE_CONFIG='DG_CONFIG=(utf11g,utf11dg)';
alter system set standby_file_management='AUTO';
alter system set log_archive_dest_1='location=/backup/arclog';
alter system set log_archive_dest_2='service=standby lgwr sync affirm valid_for=(online_logfiles,primary_role) db_unique_name=utf11dg net_timeout=30 reopen=40 max_failure=3';
alter system set LOG_ARCHIVE_DEST_STATE_1=ENABLE;
alter system set LOG_ARCHIVE_DEST_STATE_2=ENABLE;
alter system set FAL_SERVER='standby';
alter system set FAL_CLIENT='primary';
shutdown immediate
startup

7、检查Primary数据库是否已开启归档模式以及激活强制日志,否则使用以下命令修改之
alter database force logging;
shutdown immediate
--archivelog
startup mount
alter database archivelog;
alter database open;

8、创建一个pfile用于Standby数据库,并copy到Standby数据库服务器上
create pfile='?/dbs/$ORACLE_SID.ora' from spfile;
scp $ORACLE_HOME/dbs/$ORACLE_SID.ora zhs11g:$ORACLE_HOME/dbs/init$ORACLE_SID.ora

9、可以直接使用Primary数据库上的密码文件,也可以重新创建
scp $ORACLE_HOME/dbs/orapw$ORACLE_SID zhs11g:$ORACLE_HOME/dbs
使用如下命令创建:
cd $ORACLE_HOME/dbs
orapwd file=orapw$ORACLE_SID password=oracle

10、在Standby服务器上创建必须的目录结构
export ORACLE_SID=utf11g
export ORACLE_UNQNAME=utf11dg
mkdir -p $ORACLE_BASE/admin
mkdir -p $ORACLE_BASE/admin/$ORACLE_SID
mkdir -p $ORACLE_BASE/admin/$ORACLE_SID/adump
mkdir -p $ORACLE_BASE/admin/$ORACLE_SID/scripts
mkdir -p $ORACLE_BASE/admin/$ORACLE_SID/pfile
mkdir -p $ORACLE_BASE/admin/$ORACLE_SID/dpdump

mkdir -p $ORACLE_BASE/oradata
mkdir -p $ORACLE_BASE/oradata/$ORACLE_SID

mkdir -p $ORACLE_BASE/flash_recovery_area/$ORACLE_SID

mkdir -p $ORACLE_BASE/diag/rdbms
mkdir -p $ORACLE_BASE/diag/rdbms/$ORACLE_UNQNAME
mkdir -p $ORACLE_BASE/diag/rdbms/$ORACLE_UNQNAME/$ORACLE_SID
mkdir -p $ORACLE_BASE/diag/rdbms/$ORACLE_UNQNAME/$ORACLE_SID/alert
mkdir -p $ORACLE_BASE/diag/rdbms/$ORACLE_UNQNAME/$ORACLE_SID/stage
mkdir -p $ORACLE_BASE/diag/rdbms/$ORACLE_UNQNAME/$ORACLE_SID/trace
mkdir -p $ORACLE_BASE/diag/rdbms/$ORACLE_UNQNAME/$ORACLE_SID/sweep
mkdir -p $ORACLE_BASE/diag/rdbms/$ORACLE_UNQNAME/$ORACLE_SID/incpkg
mkdir -p $ORACLE_BASE/diag/rdbms/$ORACLE_UNQNAME/$ORACLE_SID/ir
mkdir -p $ORACLE_BASE/diag/rdbms/$ORACLE_UNQNAME/$ORACLE_SID/cdump
mkdir -p $ORACLE_BASE/diag/rdbms/$ORACLE_UNQNAME/$ORACLE_SID/hm
mkdir -p $ORACLE_BASE/diag/rdbms/$ORACLE_UNQNAME/$ORACLE_SID/incident
mkdir -p $ORACLE_BASE/diag/rdbms/$ORACLE_UNQNAME/$ORACLE_SID/lck
mkdir -p $ORACLE_BASE/diag/rdbms/$ORACLE_UNQNAME/$ORACLE_SID/metadata


11、修改Standby上的pfile中的如下参数:
*.db_unique_name='utf11dg'
*.service_names='utf11g'
*.fal_server='primary'
*.fal_client='standby'
*.log_archive_dest_2='service=primary lgwr sync affirm valid_for=(online_logfiles,primary_role) db_unique_name=utf11g net_timeout=30 reopen=40 max_failure=3'
*.log_file_name_convert='/soft/oracle/oradata/utf11g','/soft/oracle/oradata/utf11dg'
*.db_file_name_convert='/soft/oracle/oradata/utf11g','/soft/oracle/oradata/utf11dg'

12、以上述pfile启动Standby实例至nomount状态
startup nomount pfile='?/dbs/init$ORACLE_SID.ora' force

注意此时不能使用spfile启动Standby实例,否则下面使用duplicate命令时会出现如下错误:

Error:
Starting Duplicate Db at 2013-06-13 14:41:47
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of Duplicate Db command at 06/13/2013 14:41:47
RMAN-05501: aborting duplication of target database
RMAN-05537: DUPLICATE without TARGET connection when auxiliary instance is started with spfile cannot use SPFILE clause


13、在Primary数据库服务器上使用rman登录primary数据库和auxiliary数据库
rman target sys/oracle@primary auxiliary sys/oracle@standby

14、在rman命令行中执行如下命令,开始duplicate数据库至Standby
DUPLICATE TARGET DATABASE
  FOR STANDBY
  FROM ACTIVE DATABASE
  DORECOVER
  SPFILE
    SET db_unique_name='utf11dg'
    SET FAL_CLIENT='standby'
    SET FAL_SERVER='primary'
    SET DB_FILE_NAME_CONVERT='/soft/oracle/oradata/utf11g','/soft/oracle/oradata/utf11g'
     SET LOG_FILE_NAME_CONVERT='/soft/oracle/oradata/utf11g','/soft/oracle/oradata/utf11g'
  NOFILENAMECHECK;

注意:

如果Standby数据库与Primary数据库库不在同一台机器上,并且Standby数据库的在线日志文件路径与目标库相同,则运行duplicate命令时必须指定 NOFILENAMECHECK 参数以避免冲突提示。原因是此处oracle不知道你要恢复的路径是在另一台机器上,它只关心要恢复到的路径会不会和Primary数据库的一样?会不会是要覆盖Primary数据库啊,为了避免这种情形,于是它就报错 。 所以一旦异机恢复,并且路径相同,那么必须通过指定NOFILENAMECHECK来避免oracle的自动识别。

15、现在可以在Standby数据库上Open了
alter database open;

16、在Standby上应用日志
alter database recover managed standby database cancel;
alter database recover managed standby database using current logfile disconnect from session;

17、现在开始可以执行一些检查操作了



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值