在主库中,使用LNS进程从sga中的重做缓冲区获取相应的重做数据,然后通过网络服务传输到备用库。备用库通过RFS进程接收重做数据并将其存储在备用日志文件中,然后应用(sql apply或redo apply)数据。
何为同步传输模式呢?
顾名思义,同步就是实时确认。见下图:
当用户在主库中提交数据时,重做信息将被记录在sga的重做缓冲区中。提交时,lgwr会将重做数据写入重做数据文件。此时,lns进程将重做数据从主库的重做缓冲区实时传输到备用库,备用库将使用rfs接收数据,并将数据传递到备用日志文件中,然后应用重做数据(sql apply)。申请完成后,rfs将信息返回给主库进程,通知重做条目已在备用库中申请,lgwr收到lns的确认消息,从而提示成功提交。
在最高可用性下,如果主库没有收到备用应用的确认消息,它会继续通过net_timeout值的超时来完成这个操作,那么lns进程将不再获取sga中的重做数据,只会在下一次日志切换发生时主动尝试获取lns数据。如果在此期间没有完成与备用库的通信,当超过net_timeout参数时,它将继续停止,主机事务将继续完成,但是当存在最大保护模式时,它必须等待。
何为异步传输模式呢?
异步传输模式意味着主库会在不等待重做申请确认消息的情况下完成提交(见下图),但增加了数据丢失的风险。
如果主库和备库因某种原因,导致lns进程无法传送数据到备库又会发生什么呢?
在这种情况下,它被称为传输延迟。
当数据库以最高可用性运行时,当主库无法与备用库通信时,主库仍然可以完成事务提交,lgwr仍然可以写入在线重做日志。在无法通信期间,主库可能会生成大量归档日志。为了备用库和主库能够通信并再次应用重做日志,Oracle将自动处理间隔操作。具体来说,主库的arch进程保持ping备用库。在与备用库通信之后,arch进程通过备用库的rfs进程获取备用控制文件中最后应用的归档日志信息,并通过arch进程将丢失的归档日志传输到备用库进行应用。当重做日志在主库中切换时,lns进程将再次与备用库中的rfs进程通信,继续完成重做条目的传输,arch传输的归档日志将在后台应用。在备份库和主库的重做条目同步后,Arch的任务立即完成。