在DG的配置中,初始化参数LOG\_ARCHIVE\_DEST\_n用来指定redo log的存放位置,可以存放在本地,也可以指定redo transport的位置。其中VALID_FOR属性用来控制日志传输,其格式为:VALID\_FOR=(redo\_log\_type,database\_role)。没有写VALID\_FOR时,默认VALID\_FOR=(all\_logfiles,all\_roles)
VALID\_FOR属性由2部分组成:archive\_source(online\_logfile,standby\_logfile,all\_logfiles)和database\_role(primary\_role,standby\_role,all\_role).

  • online\_logfile: 表示归档联机重做日志
  • standby\_logfile:表示归档备用数据库的重做日志/接受来自主库的重做日志
  • all\_logfiles: online\_logfile && standby\_logfile
  • primary\_role: 仅当数据库角色为主库时候生效
  • standby\_role: 仅当数据库角色为备库时候生效
  • all\_role: 任意角色均生效

一般主备库的配置如下

LOG_ARCHIVE_DEST_1='LOCATION=/u01/app/oracle/arch VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=orcl'
LOG_ARCHIVE_DEST_2='SERVICE=orcls LGWR ASYNC NOAFFIRM VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=orcls'

主库就会使用位置1来进行归档(而且默认 VALID\_FOR=(ALL\_LOGFILES,ALL\_ROLES) DB\_UNIQUE\_NAME=主库的DB\_UNIQUE\_NAME),
使用位置2来进行归档(其实就是通过lgwr async传输到tns中别名为orcls,DB\_UNIQUE\_NAME=orcls的备库的/u01/app/oracle/arch)
备库只是被动的使用位置1来接受来自主库的归档日志,如alert中会出现的一句话Using STANDBY\_ARCHIVE\_DEST parameter default value as /u01/app/oracle/arch
位置2由于设置为PRIMARY\_ROLE而自己是standby则不会生效
一旦发生切换,原来的主库的位置2就不起作用了,原来的备库的位置2就起作用了
如果主备都把位置2设置为ALL\_LOGFILES,ALL\_ROLES,备库就会给主库传送归档日志,然后会发生什么事应该不用Eason说了吧

最后修改:2022 年 02 月 11 日
如果觉得我的文章对你有用,请随意赞赏