LOG_ARCHIVE_DEST_n参数的作用是设置主库归档日志路径以及重做日志传输。在Dataguard中参数配置比较复杂。
在DG配置的示例如下:
主库
LOG_ARCHIVE_DEST_1='LOCATION=/archivelog/chicago VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=chicago'
LOG_ARCHIVE_DEST_2='SERVICE=boston LGWR SYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=boston'
备库:
LOG_ARCHIVE_DEST_1='LOCATION=/archivelog/boston VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=boston'
LOG_ARCHIVE_DEST_2='SERVICE=chicago LGWR SYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=chicago'
下面简要说明常见参数配置说明
1、日志路径
有两种归档路径,本地路径 (Location)、和远程路径 (Service)
每个目的地必须指定location或者service属性,用来指定redo传输服务输出redo数据到本地磁盘目录或者远程数据库目的地。
SERIVCE: 用于指定备用数据库的TNSNAMES描述符,Oralce 会将重做日志传送到这个TNSNAMES指定的备库。
例如
LOG_ARCHIVE_DEST_1='LOCATION=/archivelog/chicago'
LOG_ARCHIVE_DEST_2='SERVICE=boston'
说明:
log_archive_dest_1 -- log_archive_dest_10目的地能包括location属性或者service属性
log_archive_dest_11 -- log_archive_dest_31目的地只能包括service属性。
2、日常传输
(1)ARCH
(2)LGWR
作用:日志传输服务使用ARCH还是LGWR,默认的是ARCH,我个人倾向设置为LGWR
3、SYNC和ASYNC参数
传输控制:指定使用同步sync传输或者异步async传输模式。
log_archive_dest_11—log_archive_dest_31不支持sync属性。
sync属性表明通过事务生成的redo数据在事务提交之前必须被每个启用的目的地接收,
async属性表明通过事务生成的redo数据在事务提交之前不需要被目的地接收,如果没有指定,默认值是async
4、VALID_FOR:
定义何时使用(角色相关)LOG_ARCHIVE_DEST_n参数以及应该在哪类重做日志文件上运行。
参数格式:
VALID_FOR=(redo_log_type,database_role)
可用日志文件类型:online_logfile,standby_logfile, all_logfiles
可用的角色类型:primary_role, standby_role, all_roles
说明如下:
(1)redo_log_type关键字表明该目的地产生归档的redo日志类型
online_logfile:目的地只归档联机redo日志
standby_logfile:目的地只归档standbyredo日志
all_logfiles:目的地既归档联机redo日志,也归档standby redo日志
(2)database_role表明该目的地产生归档的数据库角色
primary_role:只有数据库是主,该目的地才会产生归档
standby_role:只有数据库是备,该目的地才会产生归档
all_role:当数据库不论是主还是备,该目的地都会产生归档
5、DB_UNIQUE_NAME
标示唯一的路径
如果使用了次参数通常也设置LOG_ARCHIVE_CONFIG=DG_CONFIG()两者要匹配,还必须和参数文件里一致。
使用此参数主要是为了明确主库和备库使用那个路径
6、AFFIRM和NOAFFIRM
AFFIRM表示只有当日志写入Standby重做日志后才算日志传输成功,NOAFFIRM则没有这个要求;
作用:控制日志传输服务是异步还是同步写日志数据到磁盘
AFFIRM:在日志写进程进行之前,所以的归档日志和备库日志必须同步写完
NOFFIRM:在主库的日志写进程不等所有磁盘IO完成
如果没有明确指定,当sync属性被指定时,默认是AFFIRM,当async属性被指定,默认是NOAFFIRM
使用AFFIRM时,可以确保以下三点:
1 能确保数据没有丢失在主库失败后
2 可以在本地或远程使用
3 影响主库的性能
LGWR和AFFIRM:日志写进程同步写REDO DATA到磁盘,在DISK写完前,事务不能结束。在归档完成之前,主库的在线日志可能不可用
ARCH和AFFIRM: ARCn进程同步写REDO DATA到磁盘,归档操作可能发生时间比较长,主库的在线日志在完成归档前可能不可用。
ASYNC和AFFIRM: 性能不受影响。
7、NET_TIMEOUT网络超时设置
NET_TIMEOUT指定LGWR进程等待LNS进程的最大时间数,单位为秒(缺省30)。如果超出该值,则主库放弃备库,继续执行主库上的事务。
指定LGWR后台进程等待Redo传输目的地确认收到Redo数据的秒数,如果确认没有在NET_TIMEOUT秒内收到,一个错误被记录,同时到该目的地的Redo传输会话被中断。
默认值为30秒,值的范围1到1200。
指定该参数必须指定SYNC属性。
通过在主数据库查询V$ARCHIVE_DEST.NET_TIMEOUT字段查看该属性的值。
虽然允许NET_TIMEOUT的最小值为1秒,Oracle推荐最小值在8到10秒,防止瞬时网络错误的情况下断开与Standby数据库的连接。
例如:
LOG_ARCHIVE_DEST_2='SERVICE=stby1 SYNC NET_TIMEOUT=10'
LOG_ARCHIVE_DEST_STATE_2=ENABLE
8、DELAY
这个属性并不是像大多数想象的那样延迟重做数据的传输,它只是用来指示备库目标的日志应用进程在DELAY属性设置的时间(秒)后应用重做数据。
For a physical standby database:
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE NODELAY;
For a logical standby database:
SQL> ALTER DATABASE START LOGICAL STANDBY APPLY NODELAY;
例子:
LOG_ARCHIVE_DEST_1=’LOCATION=/archivelog/orcl/’
LOG_ARCHIVE_DEST_STATE_1=ENABLE
LOG_ARCHIVE_DEST_2=’SERVICE=stborcl1 LGWR SYNC AFFIRM’
LOG_ARCHIVE_DEST_STATE_2=ENABLE
LOG_ARCHIVE_DEST_3=’SERVICE=stborcl2 DELAY=120′
LOG_ARCHIVE_DEST_STATE_3=ENABLE
9、COMPRESSION属性
COMPRESSION属性用于设置是否在将REDO数据传输到REDO传输目的地之前进行压缩。
Redo传输压缩是Oracle Advanced Compression组件的一个特性,必须购买该选件的license之后才能使用该特性。
COMPRESSION=ENABLE或者DISABLE,默认值是DISABLE。
通过查询V$ARCHIVE_DEST.COMPRESSION字段可以判断是否启用了压缩。
例如:
LOG_ARCHIVE_DEST_3='SERVICE=denver SYNC COMPRESSION=ENABLE'
LOG_ARCHIVE_DEST_STATE_3=ENABLE
10、ALTERNATE
作用:当原归档目的地失败后,可以使用后补的
但是如果REOPEN参数的值不为0的话,ALTERNATE将不可用。
如果MAX FAILURE值不为0,当执行了指定的失败重试次数后,ALTERNATE将备启用,因此,ALTERNATE将不和REPOPEN冲突(REOPEN不为0)
总结:
综上所述,dataguard中LOG_ARCHIVE_DEST_n配置如下:
最大保护模式模式是保证零数据丢失,LOG_ARCHIVE_DEST_n配置为LGWR SYNC AFFIRM
最大可用性模式是零数据丢失,LOG_ARCHIVE_DEST_n配置为LGWR SYNC AFFIRM
最大性能模式是保证最小数据丢失 - 通常为几秒 LGWR ASYNC 或 ARCH 可没有但推荐有 AFFIRM 或 NOAFFIRM
AFFIRM:表示主数据库上的REDO LOG只有被写入到从数据库的standby log才算有效。