使用arch进程传递最大问题在于:primary database 只有在发生归档时才会发送日志到standby database。如果primary database 异常
data guard services
以下的三部分组成data guard的日志数据传输、日志数据应用以及改变数据库角色:
a)、日志传输服务(redo transport services)
b)、日志应用服务
c)、角色转换
1、redo transport services(日志传输服务)
控制生产数据库自动将redo data发送至一个或多个归档地址
1.1、使用arch进程
用arch模式传输不写standby redo logs,直接保存成归档文件存放于standby端。
说明:
逻辑standby接收后将其转换成sql语句,在standby数据库上执行sql语句实现同步,这种方式叫sql apply。
物理standby接收完primary数据库生成的redo数据后,以介质恢复的方式实现同步,这种方式也叫redo apply。
缺点:使用arch进程传递日志有一个问题,即只有primary database归档以后才会传送日志到 standby database。这就导致,如果primary database异常宕机,联机日志中的redo内容就会发生丢失,所以要避免这种数据丢失,我们则要使用lgwr,而使用lgwr又分为sync(同步)和async(异步两种方式)。primary database 缺省使用arch进程。
使用arch进程传递最大问题在于:primary database 只有在发生归档时才会发送日志到standby database。如果primary database 异常宕机,联机日志中的redo 内容就会丢失,因此使用arch 进程无法避免数据丢失的问题,要想避免数据丢失,就必须使用lgwr,而使用lgwr 又分sync(同步)和async(异步)两种方式。
1.2使用lgwr 进程的sync 方式
1)primary database 产生的redo 日志要同时写道日志文件和网络。也就是说lgwr进程把日志写到本地日志文件的同时还要发送给本地的lnsn进程(network server process),再由lnsn(lgwr network server process)进程把日志通过网络发送给远程的目的地,每个远程目的地对应一个lns进程,,多个lns进程能够并行工作。
2)lgwr 必须等待写入本地日志文件操作和通过lnsn进程的网络传送都成功,primary database 上的事务才能提交,这也是sync的含义所在。
3)standby database的rfs进程把接收到的日志写入到standby redo log日志中。
4)primary database的日志切换也会触发standby database 上的日志切换,即standby database 对standby redo log的归档,然后触发standby database 的mrp或者lsp 进程恢复归档日志。
因为primary database 的redo 是实时传递的,于是standby database 端可以使用两种恢复方法:
实时恢复(real-time apply):只要rfs把日志写入standby redo log 就会立即进行恢复;
归档恢复:在完成对standby redo log 归档才触发恢复。
primary database默认使用arch进程,如果使用lgwr进程必须明确指定。使用lgwr sync方式时,可以同时使用net_timeout参数,这个参数单位是秒,代表如果多长时间内网络发送没有响应,lgwr 进程会抛出错误。示例如下:
alter system set log_archive_dest_2 = 'service=db_phystdby lgwr sync valid_for=(online_logfiles,primary_role) db_unique_name=phystdby net_timeout=30' scope=both;
相关参考:
oracle data guard 重要配置参数
基于同一主机配置 oracle 11g data guard
探索oracle之11g dataguard
oracle data guard (rac+dg) 归档删除策略及脚本
oracle data guard 的角色转换
oracle data guard的日志fal gap问题
oracle 11g data guard error 16143 heartbeat failed to connect to standby 处理方法
