基于同一主机配置 Oracle 11g Data Guard

时间:2021-08-29 16:19:43
 Oracle Data Guard 为企业数据库提供了最有效和最全面的数据可用性、数据保护和灾难恢复解决方案。它集成管理、监视和自动化软件基础架构来创建和维护一个或多个同步备用数据库,从而保护数据不受故障、灾难、错误和损坏的影响。本文主要描述了在同一主机下如何配置Oracle Data Guard。

      

       有关DG的相关概念,可参考:Oracle Data Guard Concepts and Administration

       有关配置DG的参数描述,可参考:Oracle Data Guard 重要配置参数

1、创建DG的大致流程
    a、主库启用归档与强制日志模式
    b、主库配置redo传输服务(即相关参数配置)
    c、主库及备库配置监听
    d、为备库创建目录
    e、配置备库密码文件及参数文件
    f、复制数据文件,日志文件,备份控制文件到备库
    g、启动备库并校验结果

2、演示创建物理备库

[sql] view plaincopyprint?
  1. --演示环境 
  2. [oracle@linux3 ~]$ cat /etc/issue 
  3. Enterprise Linux Enterprise Linux Server release 5.5 (Carthage) 
  4. Kernel \r on an \m 
  5.  
  6. [oracle@linux3 ~]$ sqlplus -v 
  7.  
  8. SQL*Plus: Release 11.2.0.1.0 Production 
  9.  
  10. --主库:sybo3 
  11. --备库: sybo5 
  12. --配置物理standby,使用最佳性能模式 
  13.  
  14. a、主库前期准备 
  15. --查看主库的归档模式,如果为非归档模式应先切换到归档模式 
  16. --关于如何切换到归档模式可以参考:Oracle 归档日志 http://blog.csdn.net/robinson_0612/article/details/5784713 
  17. sys@SYBO3> select name,log_mode from v$database
  18.  
  19. NAME      LOG_MODE 
  20. --------- ------------ 
  21. SYBO3     ARCHIVELOG 
  22.  
  23. --为备库准备pfile文件  
  24. sys@SYBO3> create pfile=/u01/oracle/db_1/dbs/initsybo5.orafrom spfile; 
  25.  
  26. --使主库处于强制日志模式 
  27. sys@SYBO3> alter database force logging; 
  28.  
  29. sys@SYBO3> select database_rolefrom v$database
  30.  
  31. DATABASE_ROLE 
  32. ---------------- 
  33. PRIMARY 
  34.  
  35. --为主库添加standby redo log,简要描述一下standby redo log的作用 
  36. --实际上就是与主库接收到的重做日志相对应,也就是说备库调用RFS进程将从主库接收到的重做日志按顺序写入到standby logfile 
  37. --在主库创建standby logfile是便于发生角色转换后备用 
  38. --sandby redo log创建原则: 
  39. --a)、确保standby redo log的大小与主库online redo log的大小一致  
  40. --b)、如主库为单实例数据库:standby redo log组数=主库日志组总数+1 
  41. --c)、如果主库是RAC数据库:standby redo log组数=(每线程的日志组数+1)*最大线程数 
  42. --d)、不建议复用standby redo log,避免增加额外的I/O以及延缓重做传输 
  43.  
  44. sys@SYBO3> alter databaseadd standby logfile ('/u01/database/sybo3/redo/standby_redo01.log')size 50m; 
  45.  
  46. sys@SYBO3> alter databaseadd standby logfile ('/u01/database/sybo3/redo/standby_redo02.log')size 50m; 
  47.  
  48. sys@SYBO3> alter databaseadd standby logfile ('/u01/database/sybo3/redo/standby_redo03.log')size 50m; 
  49.  
  50. sys@SYBO3> alter databaseadd standby logfile ('/u01/database/sybo3/redo/standby_redo04.log')size 50m; 
  51.  
  52.  
  53. b、修改主库参数文件 
  54. --使用下面的命令修改主库参数(此时主库应当使用spfile启动参数) 
  55. [oracle@linux3 ~]$ more ch_sp_sybo3.sql  
  56. --Add below item when DB acts as primary role 
  57. alter system set db_unique_name='sybo3' scope=spfile; 
  58. alter system set log_archive_config='DG_CONFIG=(sybo3,sybo5)'
  59. alter system set log_archive_dest_1='LOCATION=/u01/database/sybo3/arch db_unique_name=sybo3 valid_for=(ALL_LOGFILES,ALL_ROLES)'
  60. alter system set log_archive_dest_2='SERVICE=sybo5 ASYNC db_unique_name=sybo5 valid_for=(ONLINE_LOGFILES,PRIMARY_ROLE)'
  61. alter system set log_archive_dest_state_1=enable; 
  62. alter system set log_archive_dest_state_2=enable; 
  63. alter system set log_archive_max_processes=4; 
  64. alter system set remote_login_passwordfile='EXCLUSIVE' scope=spfile; 
  65.  
  66. --Add below item when DB turn to standby role 
  67. alter system set db_file_name_convert='sybo5','sybo3' scope=spfile; 
  68. alter system set log_file_name_convert='sybo5','sybo3' scope=spfile; 
  69. alter system set standby_file_management='AUTO'
  70. alter system set fal_server='sybo5'
  71. alter system set fal_client='sybo3'
  72.  
  73. sys@SYBO3> @ch_sp_sybo3 
  74. sys@SYBO3> shutdown immediate; 
  75.  
  76.  
  77. c、配置主备库监听 
  78. --为主库和备库配置监听,整个DG的redo传输服务,都依赖于Oracle Net,因此需要为主备库配置监听 
  79. --配置方法多种多样,可用netmgr,netca,以及直接编辑listener.ora 与tnsnames.ora文件 
  80. --下面是配置之后的listener.ora 与tnsnames.ora文件内容 
  81. [oracle@linux3 ~]$ more /u01/oracle/db_1/network/admin/listener.ora  
  82. # listener.ora Network Configuration File: /u01/oracle/db_1/network/admin/listener.ora 
  83. # Generated by Oracle configuration tools. 
  84.  
  85. SID_LIST_LISTENER_SYBO5 = 
  86.   (SID_LIST = 
  87.     (SID_DESC = 
  88.       (GLOBAL_DBNAME = sybo5.orasrv.com) 
  89.       (ORACLE_HOME = /u01/oracle/db_1) 
  90.       (SID_NAME = sybo5) 
  91.     ) 
  92.   ) 
  93.  
  94. SID_LIST_LISTENER_SYBO3 = 
  95.   (SID_LIST = 
  96.     (SID_DESC = 
  97.       (GLOBAL_DBNAME = sybo3.orasrv.com) 
  98.       (ORACLE_HOME = /u01/oracle/db_1) 
  99.       (SID_NAME = sybo3) 
  100.     ) 
  101.   ) 
  102.  
  103. LISTENER_SYBO5 = 
  104.   (DESCRIPTION = 
  105.     (ADDRESS = (PROTOCOL = TCP)(HOST = linux3.orasrv.com)(PORT = 1532)) 
  106.   ) 
  107.  
  108. ADR_BASE_LISTENER_SYBO5 = /u01/oracle 
  109.  
  110. LISTENER_SYBO3 = 
  111.   (DESCRIPTION = 
  112.     (ADDRESS = (PROTOCOL = TCP)(HOST = linux3.orasrv.com)(PORT = 1531)) 
  113.   ) 
  114.  
  115. ADR_BASE_LISTENER_SYBO3 = /u01/oracle   
  116.  
  117. [oracle@linux3 ~]$ more /u01/oracle/db_1/network/admin/tnsnames.ora    
  118. # tnsnames.ora Network Configuration File: /u01/oracle/db_1/network/admin/tnsnames.ora 
  119. # Generated by Oracle configuration tools. 
  120.  
  121. SYBO5 = 
  122.   (DESCRIPTION = 
  123.     (ADDRESS_LIST = 
  124.       (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.7.25)(PORT = 1532)) 
  125.     ) 
  126.     (CONNECT_DATA = 
  127.       (SERVICE_NAME = SYBO5.ORASRV.COM) 
  128.     ) 
  129.   ) 
  130.  
  131. SYBO3 = 
  132.   (DESCRIPTION = 
  133.     (ADDRESS_LIST = 
  134.       (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.7.25)(PORT = 1531)) 
  135.     ) 
  136.     (CONNECT_DATA = 
  137.       (SERVICE_NAME = SYBO3.ORASRV.COM) 
  138.     ) 
  139.   ) 
  140.  
  141. --启动监听器并测试 
  142. [oracle@linux3 ~]$ lsnrctl start LISTENER_SYBO3 
  143. [oracle@linux3 ~]$ lsnrctl start LISTENER_SYBO5 
  144. [oracle@linux3 ~]$ tnsping sybo3 
  145. [oracle@linux3 ~]$ tnsping sybo5 
  146.  
  147.  
  148. d、为备库创建目录 
  149. --为备库创建相应的文件夹 
  150. [oracle@linux3 database]$ more sybo5.sh  
  151. #!/bin/sh 
  152.  
  153. mkdir -p /u01/database 
  154. mkdir -p /u01/database/sybo5/adump 
  155. mkdir -p /u01/database/sybo5/controlf 
  156. mkdir -p /u01/database/sybo5/fra 
  157. mkdir -p /u01/database/sybo5/oradata 
  158. mkdir -p /u01/database/sybo5/redo 
  159. mkdir -p /u01/database/sybo5/dpdump 
  160. mkdir -p /u01/database/sybo5/pfile 
  161. mkdir -p /u01/database/sybo5/arch 
  162. [oracle@linux3 database]$ ./sybo5.sh  
  163.  
  164.  
  165. e、配置备库密码文件及参数文件 
  166. --由于要求主库与备库sys使用相同的密码,在此处,我们直接复制了主库的密码文件到备库 
  167. [oracle@linux3 ~]$ cp $ORACLE_HOME/dbs/orapwsybo3 $ORACLE_HOME/dbs/orapwsybo5 
  168.  
  169. [oracle@linux3 ~]$ sed -i 's/sybo3/sybo5/g' $ORACLE_HOME/dbs/initsybo5.ora 
  170. ---注意db_name的设置还是使用原来的sybo3,即修改回db_name='sybo3',同一DG中应设置相同的db_name 
  171.  
  172. --下面是配置之后的备库参数文件,仅列出修改部分,如果原来pfile文件中有相同的条目,可以将其之前的注释或删除 
  173. [oracle@linux3 ~]$ tail -20 $ORACLE_HOME/dbs/initsybo5.ora 
  174. db_unique_name=sybo5 
  175. log_archive_config='DG_CONFIG=(sybo3,sybo5)' 
  176. log_archive_dest_1='LOCATION=/u01/database/sybo5/arch db_unique_name=sybo5 valid_for=(ALL_LOGFILES,ALL_ROLES)' 
  177. log_archive_dest_2='SERVICE=sybo3 ASYNC db_unique_name=sybo3 valid_for=(ONLINE_LOGFILES,PRIMARY_ROLE)'   
  178. log_archive_dest_state_1=enable 
  179. log_archive_dest_state_2=enable 
  180. db_file_name_convert='sybo3','sybo5' 
  181. log_file_name_convert='sybo3','sybo5' 
  182. standby_file_management='AUTO' 
  183. fal_server='sybo3' 
  184. fal_client='sybo5' 
  185. log_archive_max_processes=4 
  186. remote_login_passwordfile='EXCLUSIVE' 
  187.  
  188.  
  189. f、复制数据文件,日志文件,备份控制文件到备库 
  190. --对于从主库克隆standby有多种方法,而且Oracle 11g支持从ative database直接克隆数据库 
  191. --由于在同一主机,因此此次操作直接使用冷备方式将数据及日志文件复制到备库目录 
  192. [oracle@linux3 ~]$ cp /u01/database/sybo3/oradata/* /u01/database/sybo5/oradata/ 
  193. [oracle@linux3 ~]$ cp /u01/database/sybo3/redo/* /u01/database/sybo5/redo/        
  194.  
  195. --启动主库到mount状态 
  196. sys@SYBO3> startup mount; 
  197.  
  198. --为主库生成控制文件,注,对于配置standby,不能直接使用copy方式复制控制文件到备库 
  199. sys@SYBO3> alter database create standby controlfileas '/u01/database/sybo5/controlf/control01.ctl'
  200.  
  201. sys@SYBO3> ho cp /u01/database/sybo5/controlf/control01.ctl /u01/database/sybo5/controlf/control02.ctl     
  202.  
  203. --Author : Robinson Cheng 
  204. --Blog   : http://blog.csdn.net/robinson_0612 
  205.  
  206. --打开主库 
  207. sys@SYBO3> alter database open
  208.  
  209.  
  210. g、启动备库到mount状态并校验结果 
  211. [oracle@linux3 ~]$ export ORACLE_SID=sybo5 
  212. [oracle@linux3 ~]$ sqlplus / as sysdba 
  213. sys@SYBO5> startup mount pfile=/u01/oracle/db_1/dbs/initsybo5.ora   
  214.  
  215. --为备库生成spfile文件 
  216. sys@SYBO5> create spfile from pfile; 
  217.  
  218. sys@SYBO5> show parameter instance_name 
  219.  
  220. NAME                                 TYPE        VALUE 
  221. ------------------------------------ ----------- ------------------------------ 
  222. instance_name                        string      sybo5 
  223.  
  224. sys@SYBO5> select name,open_mode,database_role,protection_modefrom v$database
  225.  
  226. NAME      OPEN_MODE            DATABASE_ROLE    PROTECTION_MODE 
  227. --------- -------------------- ---------------- -------------------- 
  228. SYBO3     MOUNTED              PHYSICAL STANDBY MAXIMUM PERFORMANCE 
  229.  
  230. --在主库端进行日志切换 
  231. sys@SYBO3> ALTER SYSTEM SWITCH LOGFILE; 
  232.  
  233. sys@SYBO3> ALTER SYSTEM SWITCH LOGFILE; 
  234.  
  235. --在备库端启动redo apply 
  236. sys@SYBO5> alter database recover managed standbydatabase disconnect from session; 
  237.  
  238. --查看日志被apply的结果 
  239. sys@SYBO5> select sequence#, first_time, next_time,applied from v$archived_log orderby sequence#; 
  240.  
  241. SEQUENCE# FIRST_TIM NEXT_TIME APPLIED 
  242. ---------- --------- --------- --------- 
  243.        113 12-AUG-13 12-AUG-13 YES 
  244.        114 12-AUG-13 12-AUG-13 YES 
  245.        115 12-AUG-13 12-AUG-13 YES 
  246.        116 12-AUG-13 12-AUG-13 YES 
  247.        117 12-AUG-13 12-AUG-13 YES 
  248.          
  249. --查看主库端 
  250. sys@SYBO3> select * from
  251.   2  select sequence#, first_time, next_time,appliedfrom v$archived_log orderby sequence#desc
  252.   3  where rownum<5; 
  253.  
  254. SEQUENCE# FIRST_TIM NEXT_TIME APPLIED 
  255. ---------- --------- --------- --------- 
  256.        117 12-AUG-13 13-AUG-13 YES 
  257.        116 12-AUG-13 12-AUG-13 YES 
  258.        115 12-AUG-13 12-AUG-13 YES 
  259.        114 12-AUG-13 12-AUG-13 YES