Oracle技术服务|系统集成|技术开发

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 2215|回复: 3

[分享] 生产环境下使用RMAN active duplicate创建standby步骤

[复制链接]

15

主题

0

好友

308

积分

版主

Rank: 7Rank: 7Rank: 7

发表于 2013-11-15 12:44:03 |显示全部楼层
本帖最后由 zhiduoduo 于 2013-11-15 15:25 编辑

DuplicateStandby DQSDW11G_DG from active DB

本过程为创建物理standby
主要配置信息
Primary
  1. Server   
  2.      X460
  3. Hostname
  4.     x460.coat.com
  5. OracleHome
  6.     /oracle/app/oracle/product/11.1.0/db_1
  7. DB Name
  8.    DQSDW11G
  9. DBUnique Name
  10.     DQSDW11G
复制代码
Standby
  1. Server   
  2.    tbidb1
  3. Hostname
  4.    tbidb1.coat.com
  5. OracleHome
  6.    /oracle/app/oracle/product/11.1.0.6/db_1
  7. DBName
  8.    DQSDW11G
  9. DBUnique Name
  10.    DQSDW11G_DG
复制代码
1 在 standby tbidb1服务器上检查Oracle Home在开开始搭建standby前,我们先检查主库与备库所在机器的Oracle Home,确保他们的版本满足要求;通过查看下面的文件,我们便可以知道当前Oracle Home的版本信息
  1. cat /oracle/app/oracle/product/11.1.0.6/db_1/oui/oraparam.ini|grep VERSION
  2. OUI_VERSION=11.1.0.6.0
  3. #You can customise error message shown for failure through CERTIFIED_VERSION_FAILURE_MESSAGE
  4. CERTIFIED_VERSION_WARN=TRUE
复制代码
2 调整主库相关配置为创建备库做准备(注意:使用active duplicate的过程中,当standby启动至nomount状态时,为了保证primary能够通过TNS连接上standby,我们需要在standby上配置静态监听,因此我们在下面配置一个静态Listener)
Primary (x460) 
编辑/oracle/app/product/10.2.0/db_1/network/admin/tnsnames.ora文件,将下面的内容添加进去(配置TNS连接符),
  1. DQSDW11G_DG =
  2.   (DESCRIPTION =
  3.     (ADDRESS_LIST =
  4.         (ADDRESS =
  5.           (COMMUNITY = tcpcom.coat.com)
  6.           (PROTOCOL = TCP)
  7.           (Host = tbidb1.coat.com)
  8.           (Port = 1526 )
  9.         )
  10.     )
  11.     (CONNECT_DATA = (SID = DQSDW11G_DG)
  12.     )
  13.   )   
复制代码
Standby (tbidb1)
在Oracle Home下配置新的静态listener; 编辑 /oracle/app/oracle/product/11.1.0.6/db_1/network/admin/listener.ora文件,添加如下内容
  1. LISTENER_DG =        <span style="background-color: rgb(255, 140, 0);"> -->静态监听</span>
  2. (DESCRIPTION_LIST =
  3.     (DESCRIPTION =
  4.       (ADDRESS = (PROTOCOL = TCP)(HOST = tbidb1.coat.com)(PORT = 1526)(IP = FIRST))
  5.     )
  6.   )


  7. SID_LIST_LISTENER_DG =
  8.   (SID_LIST =
  9.     (SID_DESC =
  10.       (ORACLE_HOME = /oracle/app/oracle/product/11.1.0.6/db_1)
  11.      (SID_NAME = DQSDW11G_DB1)
  12.     )

  13.     (SID_DESC =
  14.       (ORACLE_HOME = /oracle/app/oracle/product/11.1.0.6/db_1)
  15.      (SID_NAME = DQSDW11G_DG)
  16.     )
  17.     (SID_DESC=
  18.          (SID_NAME=QS_DEV_ETL_FIN)
  19.          (ORACLE_HOME=/oracle/app/oracle/product/11.1.0/db_1)
  20.          (PROGRAM=dg4odbc)
  21.     )
  22.     (SID_DESC =
  23.       (SID_NAME = PLSExtProc)
  24.       (ORACLE_HOME = /oracle/app/oracle/product/11.1.0.6/db_1)
  25.       (PROGRAM = extproc)
  26.     )
  27.   )
  28. #IFILE=/oracle/app/oracle/product/11.1.0/db_1/network/admin/listener_ifile.ora
复制代码
启动listener,
  1. lsnrctl start LISTENER_DG
  2. <font color="#ff0000">(注意: 设置正确的 $TNS_ADMIN环境变量)</font>            
复制代码
配置连接主库的TNS, 编辑/oracle/app/oracle/product/11.1.0.6/db_1/network/admin/tnsnames.ora并添加下面的内容,
  1. DQSDW11G_DG =
  2.   (DESCRIPTION =
  3.     (ADDRESS_LIST =
  4.         (ADDRESS =
  5.           (COMMUNITY = tcpcom.coat.com)
  6.           (PROTOCOL = TCP)
  7.           (Host = tbidb1.coat.com)
  8.           (Port = 1526 )
  9.         )
  10.     )
  11.     (CONNECT_DATA = (SID = DQSDW11G_DG)
  12.     )
  13.   )   
复制代码
测试TNS的连通性确保相互之前能够tnsping.

2.3 配置主库的初始化参数下面步骤添加了dataguard所需要的额外参数,
检查当前主库所使用的参数文件类型
  1. SQL> show parameter pfile
  2. NAME           TYPE    VALUE
  3. ------------------------------------ ----------- ------------
  4. spfile        string      +DATA/dqsdw11g/spfiledqsdw11g.ora
  5. Create pfile from spfile

  6. 创建pfile方便编辑
  7. SQL> create pfile from spfile;
复制代码
为了当前主库以后switch over成备库,添加以下参数方便切换后备库的使用,
  1. SQL>alter system set fal_server='DQSDW11G_DG';
  2. SQL>alter system set fal_client='DQSDW11G';
  3. SQL>alter system set log_archive_config='DG_CONFIG=(DQSDW11G,DQSDW11G_DG)';
  4. SQL>alter system set log_archive_dest_2=’ SERVICE=DQSDW11G_DG ARCH VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=DQSDW11G_DG’;
  5. SQL>alter system set STANDBY_FILE_MANAGEMENT=’AUTO’;
  6. #下面的参数暂时设置成defer,因为备库尚未创建;等备库创建后,再修改成enable
  7. SQL>alter system set log_archive_dest_state_2=’defer’;
复制代码
2.4 确保主库运行在archivelog模式下
  1. 在主库上检查归档模式,
  2. SQL> archive log list
  3. Database log mode        Archive Mode
  4. Automatic archival             Enabled
  5. Archive destination            +RECOVERY
  6. Oldest online log sequence     14702
  7. Next log sequence to archive   14705
  8. Current log sequence           14705
复制代码
从上面信息看出,主库已经运行在archivelog模式下了;如果不是archivelog模式,可以通过下面步骤切换成archivelog模式
  1. SQL> SHUTDOWN IMMEDIATE;
  2. SQL> STARTUP MOUNT;
  3. SQL> ALTER DATABASE ARCHIVELOG;
  4. SQL> ALTER DATABASE OPEN;
复制代码
3在备库上做准备3.1在standby上准备初始化参数文件
执行以下步骤创建参数文件
Step 1  将主库的密码文件复制到备库机器
从主库复制orapwDQSDW11G 至备库的 $ORACLE_HOME/dbs目录

Step 2  将主库的初始化参数文件复制到备库机器
从主库复制initDQSDW11G.ora至备库的 $ORACLE_HOME/dbs目录

Step 3 配置备库初始化参数文件 编辑参数文件,以下是initDQSDW11G.ora参数文件内容
  1. *._disable_interface_checking=TRUE
  2. *.aq_tm_processes=2
  3. *.audit_file_dest='/oracle/app/oracle/admin/DQSDW11G/adump'
  4. *.audit_trail='none'
  5. *.compatible='11.1.0.0.0'
  6. *.control_files='+DATA/DQSDW11G_DG/controlfile/contorl01.ctl','+RECOVERY/DQSDW11G_DG/controlfile/contorl01.ctl'
  7. (note: we must specify the control file which ends with *.ctl since the OMF is enabled on ASM, or we will get errors)
  8. *.db_block_size=8192
  9. *.db_create_file_dest='+DATA'
  10. *.db_create_online_log_dest_1='+RECOVERY'
  11. *.db_create_online_log_dest_2='+DATA'
  12. *.db_domain='coat.com'
  13. *.db_name='DQSDW11G'
  14. *.instance_name='DQSDW11G'
  15. *.db_unique_name='DQSDW11G_DG'
  16. *.db_recovery_file_dest_size=2147483648
  17. *.db_recovery_file_dest='+RECOVERY'
  18. *.diagnostic_dest='/oracle/app/oracle'
  19. *.dispatchers='(PROTOCOL=TCP) (SERVICE=DQSDW11GXDB)'
  20. *.large_pool_size=0
  21. *.log_archive_dest_1='LOCATION=+RECOVERY'
  22. *.memory_max_target=10737418240
  23. *.memory_target=10737418240
  24. *.open_cursors=300
  25. *.open_links=200
  26. *.processes=750
  27. *.remote_login_passwordfile='EXCLUSIVE'
  28. *.sessions=775
  29. *.shared_pool_size=0
  30. *.star_transformation_enabled='TRUE'
  31. *.undo_tablespace='UNDOTBS1'
  32. #standby
  33. *.fal_server='DQSDW11G'
  34. *.fal_client='DQSDW11G_DG'
  35. *.log_archive_config='DG_CONFIG=(DQSDW11G,DQSDW11G_DG)'
  36. *.STANDBY_FILE_MANAGEMENT=’AUTO’
复制代码
3.2 在备库机器上创建必要的目录执行类似下面的命令创建目录
  1. mkdir –p /oracle/app/oracle/admin/DQSDW11G/adump'
复制代码
3.3 设置standby机器的环境变量
  1. export ORACLE_HOME=/oracle/app/oracle/product/11.1.0.6/db_1
  2. export PATH=$ORACLE_HOME/bin:$PATH
  3. export ORACLE_SID=DQSDW11G
  4. export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$PATH
  5. export TNS_ADMIN=/oracle/app/oracle/product/11.1.0.6/db_1/network/admin
复制代码
3.4 RMAN duplicate standby from active primary database在备库上运行以下RMAN脚本启动duplicate,
  1. connect target sys/[email protected]
  2. connect auxiliary sys/[email protected]_DG
  3. run
  4. {
  5. allocate channel c1 type disk;
  6. allocate channel c2 type disk;
  7. allocate auxiliary channel c3 type disk;
  8. allocate auxiliary channel c4 type disk;
  9. DUPLICATE TARGET DATABASE
  10.   FOR STANDBY
  11.   FROM ACTIVE DATABASE
  12.   DORECOVER
  13.   SPFILE
  14.     SET DB_UNIQUE_NAME "DQSDW11G"
复制代码
当上述脚本执行完毕,standby机器上将创建好控制文件与数据文件。

3.5 让Oracle创建online log在standby database
Step 1 启动MRP进程以便Oracle在ASM的 DQSDW11G目录下创建online log
(注意是online redo log不是standby redo log,我们未启用实时传输redolog,因此不需要standby redo log)
  1. SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE  DISCONNECT FROM SESSION;
复制代码
Step 2 检查redo log是否在正确的位置创建成功 (我们比较关注位置,需要在db_unique_name所属的目录下创建)

3.6 修改db_unique_name and enable DG
Step 1 修改db_unique_name参数,设置成DQSDW11G_DG
  1. SQL>alter system set db_unique_name=’DQSDW11G_DG’ scope=spfile;
复制代码
Step 2 重启standby数据库

3.7 将Listener修改成默认的Listener(1521端口)
因为之前我们为了active duplicate创建了静态监听,现在我们需要使用默认的listener;修改listener.ora文件以便默认的1521端口监听到standby数据库,
Step 1 停止我们之前创建的LISTNER_DG (port 1526)
  1. lsnrctl stop LISTENER_DG
复制代码
Step 2 在standby上修改默认的listener配置
编辑/oracle/app/product/10.2.0/db_1/network/admin/listener.ora文件,增加下面颜色部分内容
  1. SID_LIST_LISTENER_TMETA =
  2.   (SID_LIST =
  3.     (SID_DESC =
  4.       (ORACLE_HOME = /oracle/app/oracle/product/11.2.0/db_1)
  5.      (SID_NAME = TMETA1)
  6.     )
  7.   (SID_DESC =
  8.       (ORACLE_HOME = /oracle/app/oracle/product/11.1.0.6/db_1)
  9.      (SID_NAME = SQSDW11G)
  10.     )

  11. <span style="background-color: rgb(244, 164, 96);">   (SID_DESC =
  12.       (ORACLE_HOME = /oracle/app/oracle/product/11.1.0.6/db_1)
  13.      (SID_NAME = DQSDW11G)
  14.     )</span>

  15.     (SID_DESC =
  16.       (SID_NAME = PLSExtProc)
  17.       (ORACLE_HOME = /oracle/app/oracle/product/11.2.0/db_1)
  18.       (PROGRAM = extproc)
  19.     )
  20.   )
复制代码
Step 3 在主库与备库上修改tnsnams.ora
编辑/oracle/app/product/10.2.0/db_1/network/admin/tnsnames.ora文件,调整内容如下
  1. DQSDW11G_DG =
  2.   (DESCRIPTION =
  3.     (ADDRESS = (PROTOCOL = TCP)(HOST = tbidb1.coat.com)(PORT = 1521))
  4.     (CONNECT_DATA =
  5.       (SERVER = DEDICATED)
  6.       (SERVICE_NAME = DQSDW11G.coat.com)
  7.     )
  8.   )
复制代码
Step 4 调整默认listener后,测试TNS连接性,确保在主库与备库上相互可以连通
3.8  在主库上修改参数 log_archive_dest_2启用传输因为之前该参数设置成了defer,现在备库创建完毕后我们需要启用它
  1. SQL>alter system set log_archive_dest_state_2=’ENABLE’;
复制代码
3.9  在备库上启用MRP进程使用下面命令开启MRP进程
  1. SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE  DISCONNECT FROM SESSION;
复制代码
4 验证dataguard配置1. 在standby上,查询V$ARCHIVED_LOG观察archive log情况,如下
  1. SQL> SELECT SEQUENCE#, FIRST_TIME, NEXT_TIME
  2. FROM V$ARCHIVED_LOG ORDER BY SEQUENCE#;
复制代码
2. 在主库上,提交下面命令强制归档
  1. SQL> ALTER SYSTEM ARCHIVE LOG CURRENT;
复制代码
3. 在备库上再次查询V$ARCHIVED_LOG 观察日志变化



Datagurd常用查询脚本
1. 备库上查询主要进程工作状态
  1. set linesize 500
  2. col thread# for 9999999
  3. select process,pid,client_process,thread#,sequence#,block#,active_agents,status,known_agents from v$managed_standby
复制代码
2. 主库上查询日志传输情况
  1. set linesize 500
  2. col dest_name for a30
  3. col database_mode for a20
  4. col recover_mode for a20
  5. select dest_id,dest_name,status,type,database_mode,recovery_mode from v$archive_dest_status
复制代码
3. 主库上检查日志归档信息
  1. SQL> SELECT THREAD# "Thread",SEQUENCE# "Last Sequence Generated"
  2. FROM V$ARCHIVED_LOG
  3. WHERE (THREAD#,FIRST_TIME ) IN (SELECT THREAD#,MAX(FIRST_TIME) FROM V$ARCHIVED_LOG GROUP BY THREAD#)
  4. ORDER BY 1;

  5. Thread     Last Sequence Generated
  6. ---------- -----------------------
  7. 1          19
  8. 2          13
  9. 3          11
复制代码
4. 备库上检查日志同步信息
  1. SELECT ARCH.THREAD# "Thread", ARCH.SEQUENCE# "Last Sequence Received", APPL.SEQUENCE# "Last Sequence Applied", (ARCH.SEQUENCE# - APPL.SEQUENCE#) "Difference"
  2. FROM
  3. (SELECT THREAD# ,SEQUENCE# FROM V$ARCHIVED_LOG WHERE (THREAD#,FIRST_TIME ) IN (SELECT THREAD#,MAX(FIRST_TIME) FROM V$ARCHIVED_LOG GROUP BY THREAD#)) ARCH,
  4. (SELECT THREAD# ,SEQUENCE# FROM V$LOG_HISTORY WHERE (THREAD#,FIRST_TIME ) IN (SELECT THREAD#,MAX(FIRST_TIME) FROM V$LOG_HISTORY GROUP BY THREAD#)) APPL
  5. WHERE
  6. ARCH.THREAD# = APPL.THREAD#
  7. ORDER BY 1;

  8. Thread     Last Sequence Received Last Sequence Applied Difference
  9. ---------- ---------------------- --------------------- ----------
  10. 1          19                     19                    0
  11. 2          13                     13                    0
  12. 3          11                     11                    0
复制代码
通过3,4我们基本可以诊断dataguard主,备库是否同步。




回复

使用道具 举报

3

主题

0

好友

53

积分

注册会员

Rank: 2

发表于 2013-11-15 15:19:11 |显示全部楼层
抢个沙发
回复

使用道具 举报

7

主题

1

好友

159

积分

注册会员

Rank: 2

发表于 2013-11-16 19:58:08 |显示全部楼层
恩,受教的。原来都是rman恢复到备库在应用日志做的,这个更方便呀!
回复

使用道具 举报

29

主题

0

好友

462

积分

版主

Rank: 7Rank: 7Rank: 7

发表于 2014-2-8 15:03:23 |显示全部楼层
非常详细,顶顶顶!!!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

QQ|手机版|DB Support 技术联盟 ( 粤ICP备13057501号-1 )

GMT+8, 2018-1-22 19:57 , Processed in 0.203811 second(s), 20 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部