DG搭建文档


  1. DG搭建
  2. 192.168.6.113    orcl
  3. 192.168.6.113    orcls

  4. 本文搭建过程中参考https://blog.csdn.net/shiyu1157758655/article/details/55253132
  5. 一、主库
  6. 1归档模式
  7. SQL> archive log list
  8. Database log mode     Archive Mode
  9. Automatic archival     Enabled
  10. Archive destination     USE_DB_RECOVERY_FILE_DEST
  11. Oldest online log sequence 1
  12. Next log sequence to archive 2
  13. Current log sequence     2
  14. 2强制日志
  15. SQL> alter database force logging;
  16. Database altered.
  17. SQL> select force_logging from v$database;
  18. FOR
  19. ---
  20. YES

  21. 3添加standby日志
  22. standby logfile的数量和大小均要与redo logfile相同
  23. SQL> select thread#,group#,members,bytes/1024/1024 from v$log;

  24.    THREAD# GROUP#     MEMBERS BYTES/1024/1024
  25. ---------- ---------- ---------- ---------------
  26.      1     1     1     50
  27.      1     2     1     50
  28.      1     3     1     50
  29. SQL> col MEMBER for a25
  30. SQL> select * from v$logfile;
  31.     GROUP# STATUS TYPE MEMBER         IS_
  32. ---------- ------- ------- ------------------------- ---
  33.      3     ONLINE /oradata/orcl/redo03.log NO
  34.      2     ONLINE /oradata/orcl/redo02.log NO
  35.      1     ONLINE /oradata/orcl/redo01.log NO
  36. 从图中可以看到我们主库有三组大小为50M的redo logfile,故我们也需要创建同样数量和大小的standby logfile:
  37. SQL> alter database add standby logfile group 11 ('/oradata/orcl/stb01.log')size 50m;
  38. Database altered.
  39. SQL> alter database add standby logfile group 12('/oradata/orcl/stb02.log')size 50m;
  40. Database altered.
  41. SQL> alter database add standby logfile group 13('/oradata/orcl/stb03.log')size 50m;
  42. Database altered.
  43. SQL> select group#,THREAD#,SEQUENCE#,ARCHIVED,STATUS from v$standby_log;

  44.     GROUP# THREAD# SEQUENCE# ARC STATUS
  45. ---------- ---------- ---------- --- ----------
  46.     11     0     0 YES UNASSIGNED
  47.     12     0     0 YES UNASSIGNED
  48.     13     0     0 YES UNASSIGNED
  49. 4设置数据库口令文件的使用模式
  50. 查看remote_login_passwordfile的值是否EXCLUSIVE
  51. SQL> show parameter remote_login_passwordfile
  52. NAME                 TYPE     VALUE
  53. ------------------------------------ ----------- ------------------------------
  54. remote_login_passwordfile     string     EXCLUSIVE
  55. 如果不是,执行以下命令进行设置,并且重启数据库,使其生效:
  56. SQL>alter system set remote_login_passwordfile=EXCLUSIVE scope=spfile;
  57. SQL>shutdown immediate;
  58. SQL>startup;

  59. 5参数(文件)设置

  60. SQL> show parameter db_unique_name;
  61. DG的搭建需要修改许多数据库的参数,并且部分参数主备库之间有点区别,需要在配置过程细心一点。
  62. NAME                 TYPE     VALUE
  63. ------------------------------------ ----------- ------------------------------
  64. db_unique_name             string     orcl
  65. SQL> alter system set log_archive_config='dg_config=(orcl,orcls)' scope=spfile;
  66. System altered.
  67. --其中dg_config填写的是主备库的db_unique_name。
  68. 修改归档文件位置
  69. SQL> show parameter db_recovery_file_dest
  70. NAME                 TYPE     VALUE
  71. ------------------------------------ ----------- ------------------------------
  72. db_recovery_file_dest         string     /u01/app/oracle/fast_recovery_
  73.                          area
  74. db_recovery_file_dest_size     big integer 4182M
  75. 设置本地归档位置,参数涉及切换
  76. alter system set log_archive_dest_1='LOCATION=/oradata/arch/archivelog valid_for=(all_logfiles,all_roles) db_unique_name=orcl' scope=spfile;
  77. alter system set log_archive_dest_2='SERVICE=orcls ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=orcls' scope=spfile;
  78. 启用设置的日志路径
  79. SQL>alter system set log_archive_dest_state_1=enable scope=spfile;
  80. SQL>alter system set log_archive_dest_state_2=enable scope=spfile;
  81. 设置归档日志进程的最大数量(视实际情况调整):
  82. SQL>alter system set log_archive_max_processes=30 scope=both;

  83. 设置standby库从哪个数据库获取归档日志(只对standby库有效,在主库上设置是为了在故障切换后,主库可以成为备库使用):
  84. SQL>alter system set fal_server=orcls scope=both;

  85. 设置文件管理模式,此项设置为自动,不然在主库创建数据文件后,备库不会自动创建:
  86. SQL>alter system set standby_file_management=auto scope=spfile;

  87. 启用OMF功能:
  88. SQL> alter system set db_create_file_dest='/oradata/orcl' scope=spfile;

  89. --如果主备库文件的存放路径不同,还需要设置以下两个参数(需要重启数据库生效):
  90. SQL> alter system set db_file_name_convert='/data/oradata/orcls/datafile','/data/oradata/orcl/datafile','/data/oradata/orcls/tempfile','/data/oradata/orcl/tempfile' scope=spfile;
  91. SQL> alter system set log_file_name_convert='/data/oradata/orcls/redo','/data/oradata/orcl/redo' scope=spfile;
  92. 这步路径的先后顺序在主备库上的设置是不一样的,大家要注意!

  93. 二、备库参数设置
  94. 完成了以上步骤后,通过以下命令生成一个pfile文件给备库使用:
  95. SQL> create pfile='/u01/app/oracle/product/11.2.0/db_1/dbs/initorcl.ora' from spfile;
  96. File created.
  97. 打开生成的文件,修改部分参数,具体如下:
  98. --修改后

  99. *.audit_file_dest='/u01/app/oracle/admin/orcls/adump'
  100. *.audit_trail='db'
  101. *.compatible='11.2.0.4.0'
  102. *.control_files='/oradata/orcls/control01.ctl','/u01/app/oracle/fast_recovery_area/orcls/control02.ctl'
  103. *.db_block_size=8192
  104. *.db_create_file_dest='/oradata/orcls'
  105. *.db_domain=''
  106. *.db_name='orcl'
  107. *.db_unique_name='ocrls'
  108. *.db_recovery_file_dest_size=4385144832
  109. *.db_recovery_file_dest=''
  110. *.diagnostic_dest='/u01/app/oracle'
  111. *.dispatchers='(PROTOCOL=TCP) (SERVICE=orclsXDB)'
  112. *.log_archive_config='dg_config=(orcl,orcls)'
  113. *.log_archive_dest=''
  114. *.log_archive_dest_1='LOCATION=/oradata/arch/archivelog valid_for=(all_logfiles,all_roles) db_unique_name=orcls'
  115. *.log_archive_dest_2='SERVICE=orcl ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=orcl'
  116. *.log_archive_dest_state_1='ENABLE'
  117. *.log_archive_dest_state_2='ENABLE'
  118. *.log_archive_format='%t_%s_%r.arch'
  119. *.memory_target=780140544
  120. *.open_cursors=300
  121. *.processes=150
  122. *.remote_login_passwordfile='EXCLUSIVE'
  123. *.standby_file_management='AUTO'
  124. *.undo_tablespace='UNDOTBS1'

  125. c)密码文件配置
  126. 密码文件是创建DG不可缺少的一部分,主库的密码文件一般在$ORACLE_HOME/dbs,命名格式是:orapw+db_unique_name
  127. 如果不存在此文件,我们可以通过以下命令生成一个:
  128. #su - oracle
  129. $cd $ORACLE_HOME/dbs
  130. $orapwdfile=orapwocrl password=oracle

  131. 我们将密码文件和刚才修改好的pfile一起拷贝到备库的$ORACLE_HOME/dbs目录下,并重命名密码文件的名字:
  132. 备库上修改密码文件名和参数文件

  133. 5.listener.ora与tnsnames.ora配置
  134. 这两个文件均在$ORACLE_HOME/network/admin目录下,如果没有,可以自行创建一下

  135. a)备库配置

  136. listener.ora内容如下:

  137. LISTENER=
  138.   (DESCRIPTION_LIST =
  139.     (DESCRIPTION =
  140.       (ADDRESS = (PROTOCOL = TCP)(HOST =node2)(PORT = 1521))
  141.       (ADDRESS = (PROTOCOL = IPC)(KEY =EXTPROC1521))
  142.     )
  143.   )

  144. SID_LIST_LISTENER=
  145.   (SID_LIST =
  146.     (SID_DESC =
  147.       (GLOBAL_DBNAME = orcls)
  148.       (ORACLE_HOME =/u01/app/oracle/product/11.2.0/db_1)
  149.       (SID_NAME = orcls)
  150.     )
  151.    )

  152. tnsnames.ora内容如下:

  153. orcl =
  154.   (DESCRIPTION =
  155.     (ADDRESS_LIST =
  156.       (ADDRESS = (PROTOCOL= TCP)(HOST = node1)(PORT = 1521))
  157.     )
  158.     (CONNECT_DATA =
  159.       (SERVER = DEDICATED)
  160.       (SERVICE_NAME =orcl)
  161.     )
  162.   )

  163. orcls =
  164.   (DESCRIPTION =
  165.     (ADDRESS_LIST =
  166.       (ADDRESS = (PROTOCOL= TCP)(HOST = node2)(PORT = 1521))
  167.     )
  168.     (CONNECT_DATA =
  169.       (SERVER = DEDICATED)
  170.       (SERVICE_NAME =orcls)
  171.     )
  172.   )

  173. 重启一下监听:

  174. $lsnrctl stop
  175. $lsnrctl start

  176. b)主库配置
  177. listener.ora内容如下:

  178. LISTENER=
  179.   (DESCRIPTION_LIST =
  180.     (DESCRIPTION =
  181.       (ADDRESS = (PROTOCOL = TCP)(HOST =node2)(PORT = 1521))
  182.       (ADDRESS = (PROTOCOL = IPC)(KEY =EXTPROC1521))
  183.     )
  184.   )

  185. SID_LIST_LISTENER=
  186.   (SID_LIST =
  187.     (SID_DESC =
  188.       (GLOBAL_DBNAME = ocrls)
  189.       (ORACLE_HOME =/u01/app/oracle/product/12.1.0/db_1)
  190.       (SID_NAME = ocrls)
  191.     )
  192.    )


  193. tnsnames.ora内容如下:
  194. orcl =
  195.   (DESCRIPTION =
  196.     (ADDRESS_LIST =
  197.       (ADDRESS = (PROTOCOL= TCP)(HOST = node1)(PORT = 1521))
  198.     )
  199.     (CONNECT_DATA =
  200.       (SERVER = DEDICATED)
  201.       (SERVICE_NAME =orcl)
  202.     )
  203.   )

  204. orcls =
  205.   (DESCRIPTION =
  206.     (ADDRESS_LIST =
  207.       (ADDRESS = (PROTOCOL= TCP)(HOST = node2)(PORT = 1521))
  208.     )
  209.     (CONNECT_DATA =
  210.       (SERVER = DEDICATED)
  211.       (SERVICE_NAME =orcls)
  212.     )
  213.   )

  214. 执行以下命令重启监听,使配置生效:
  215. $lsnrctl stop
  216. $lsnrctl start
  217. 做完以上配置后,在主备库上执行以下命令,确保两个主机之间网络相通:
  218. $tnsping orcls
  219. $tnsping orcls


  220. 6.目录创建
  221. 参数和网络配置好后,我们需要为备库dump文件创建相应的目录(对照主库$ORACLE_BASE/admin):
  222. [oracle@node2 ~]$ echo $ORACLE_BASE
  223. /u01/app/oracle
  224. [oracle@node2 ~]$ mkdir -p $ORACLE_BASE/admin/orcls/adump
  225. [oracle@node2 ~]$ mkdir -p $ORACLE_BASE/admin/orcls/dpdump


  226. 为数据库文件创建目录(就是之前db_file_name_convert和log_file_name_convert的目录)--/oradata
  227. ocrls:/data/oradata/orls@standby>mkdir -p/data/oradata/ocrls/redo/
  228. ocrls:/data/oradata/ocrls@standby>mkdir -p/data/oradata/ocrls/datafile/
  229. ocrls:/data/oradata/ocrls@standby>mkdir -p /data/oradata/ocrls/control/

  230. 7.RMAN复制创建standby库
  231. 准备工作都完成了,那我们可以开始standby库的创建了。
  232. 注:以下操作在备库完成

  233. a)文件复制
  234. 先,我们使用之前修改的pfile把备库启动到nomount状态,生成spfile:
  235. $echo $ORACLE_SID (确认SID是否我们设置的)
  236. SQL> startup nomount pfile='/u01/app/oracle/product/11.2.0/db_1/dbs/initorcls.ora';
  237. ORACLE instance started.
  238. Total System Global Area 776646656 bytes
  239. Fixed Size         2257272 bytes
  240. Variable Size         507514504 bytes
  241. Database Buffers     264241152 bytes
  242. Redo Buffers         2633728 bytes
  243. SQL> create spfile from pfile;
  244. File created.

  245. SQL> shutdown immediate;
  246. ORA-01507: database not mounted
  247. ORACLE instance shut down.
  248. SQL>exit
  249. 从spfile启动
  250. SQL>STARTUP NOMOUNT
  251. SQL> show parameter db_unique_name;
  252. NAME                 TYPE     VALUE
  253. ------------------------------------ ----------- ------------------------------
  254. db_unique_name             string     orcls

  255. SQL> show parameter name;
  256. NAME                 TYPE     VALUE
  257. ------------------------------------ ----------- ------------------------------
  258. cell_offloadgroup_name         string
  259. db_file_name_convert         string
  260. db_name              string     orcl
  261. db_unique_name             string     orcls
  262. global_names             boolean     FALSE
  263. instance_name             string     orcls
  264. lock_name_space          string
  265. log_file_name_convert         string
  266. processor_group_name         string
  267. service_names             string     orcls
  268. SQL>

  269. 复制数据文件,在备库上操作
  270. [oracle@node2 dbs]$ rman target sys/oracle@orcl auxiliary sys/oracle@orcls
  271. Recovery Manager: Release 11.2.0.4.0 - Production on Fri Jun 15 00:33:22 2018
  272. Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved.
  273. connected to target database: ORCL (DBID=1506854844)
  274. connected to auxiliary database: ORCL (not mounted)
  275. RMAN>

  276. 确认我们已经连接上主库和备库后,执行以下命令:
  277. 如果在RMAN恢复时不指定 nofilenamecheck 参数
  278. 则在数据文件相同文件名恢复时会出现RMAN-05501错误
  279. RMAN> duplicate target database for standby from active database nofilenamecheck;
  280. 命令执行完后,可以看到主库在开始复制文件到备库中

  281. 复制完成后,打开数据库开启实时同步:

  282. SQL>ALTER DATABASE ARCHIVELOG;
  283. SQL>ALTER DATABASE OPEN;
  284. SQL>ARCHIVE LOG LIST
  285. SQL> alter database recover managed standby database using current logfile disconnect from session;

  286. 查看数据库状态
  287. 登陆到主库
  288. $sqlplus / as sysdba
  289. SQL> select database_role from v$database;
  290. DATABASE_ROLE
  291. ----------------
  292. PRIMARY


  293. 登录到备库:
  294. $sqlplus / as sysdba
  295. SQL> select database_role from v$database;
  296. DATABASE_ROLE
  297. ----------------
  298. PHYSICAL STANDBY


  299. 检查归档日志是否能正常传输(日志的序号必须是一样的):
  300. 主库
  301. SQL> select SEQUENCE#, FIRST_TIME, NEXT_TIME, APPLIED, ARCHIVED from V$ARCHIVED_LOG;

  302.  SEQUENCE# FIRST_TIM NEXT_TIME APPLIED     ARC
  303. ---------- --------- --------- --------- ---
  304.      2 17-JUN-18 18-JUN-18 NO     YES
  305.      3 18-JUN-18 18-JUN-18 NO     YES
  306.      4 18-JUN-18 18-JUN-18 NO     YES
  307.      5 18-JUN-18 18-JUN-18 NO     YES
  308.      6 18-JUN-18 19-JUN-18 NO     YES
  309.      7 19-JUN-18 19-JUN-18 NO     YES
  310.      8 19-JUN-18 19-JUN-18 NO     YES
  311.      9 19-JUN-18 19-JUN-18 NO     YES
  312.     10 19-JUN-18 19-JUN-18 NO     YES
  313.     11 19-JUN-18 19-JUN-18 NO     YES
  314.     11 19-JUN-18 19-JUN-18 YES     YES

  315.  SEQUENCE# FIRST_TIM NEXT_TIME APPLIED     ARC
  316. ---------- --------- --------- --------- ---
  317.     12 19-JUN-18 19-JUN-18 NO     YES
  318.     12 19-JUN-18 19-JUN-18 NO     YES

  319. 13 rows selected.

  320. 备库
  321. SQL> select SEQUENCE#, FIRST_TIME, NEXT_TIME, APPLIED, ARCHIVED from V$ARCHIVED_LOG;

  322.  SEQUENCE# FIRST_TIM NEXT_TIME APPLIED     ARC
  323. ---------- --------- --------- --------- ---
  324.     11 19-JUN-18 19-JUN-18 YES     YES
  325.     12 19-JUN-18 19-JUN-18 IN-MEMORY YES

  326. b)切换日志测试
  327. 主库
  328. SQL> alter system switch logfile;

  329. System altered.

  330. SQL> select SEQUENCE#, FIRST_TIME, NEXT_TIME, APPLIED, ARCHIVED from V$ARCHIVED_LOG;

  331.  SEQUENCE# FIRST_TIM NEXT_TIME APPLIED     ARC
  332. ---------- --------- --------- --------- ---
  333.      2 17-JUN-18 18-JUN-18 NO     YES
  334.      3 18-JUN-18 18-JUN-18 NO     YES
  335.      4 18-JUN-18 18-JUN-18 NO     YES
  336.      5 18-JUN-18 18-JUN-18 NO     YES
  337.      6 18-JUN-18 19-JUN-18 NO     YES
  338.      7 19-JUN-18 19-JUN-18 NO     YES
  339.      8 19-JUN-18 19-JUN-18 NO     YES
  340.      9 19-JUN-18 19-JUN-18 NO     YES
  341.     10 19-JUN-18 19-JUN-18 NO     YES
  342.     11 19-JUN-18 19-JUN-18 NO     YES
  343.     11 19-JUN-18 19-JUN-18 YES     YES

  344.  SEQUENCE# FIRST_TIM NEXT_TIME APPLIED     ARC
  345. ---------- --------- --------- --------- ---
  346.     12 19-JUN-18 19-JUN-18 NO     YES
  347.     12 19-JUN-18 19-JUN-18 NO     YES
  348.     13 19-JUN-18 19-JUN-18 NO     YES
  349.     13 19-JUN-18 19-JUN-18 NO     YES

  350. 15 rows selected.

  351. 备库
  352. SQL> select SEQUENCE#, FIRST_TIME, NEXT_TIME, APPLIED, ARCHIVED from V$ARCHIVED_LOG;

  353.  SEQUENCE# FIRST_TIM NEXT_TIME APPLIED     ARC
  354. ---------- --------- --------- --------- ---
  355.     11 19-JUN-18 19-JUN-18 YES     YES
  356.     12 19-JUN-18 19-JUN-18 IN-MEMORY YES

  357. SQL> select SEQUENCE#, FIRST_TIME, NEXT_TIME, APPLIED, ARCHIVED from V$ARCHIVED_LOG;

  358.  SEQUENCE# FIRST_TIM NEXT_TIME APPLIED     ARC
  359. ---------- --------- --------- --------- ---
  360.     11 19-JUN-18 19-JUN-18 YES     YES
  361.     12 19-JUN-18 19-JUN-18 YES     YES
  362.     13 19-JUN-18 19-JUN-18 IN-MEMORY YES

  363. SQL> select max(sequence#)from v$archived_log;

  364. SQL> select max(sequence#)from v$archived_log;

  365. MAX(SEQUENCE#)
  366. --------------
  367.      13


请使用浏览器的分享功能分享到微信等