当前位置: 首页 > 科技观察

Boss要求数据零丢失,DataGuard的三种保护模式如何选择?

时间:2023-03-13 02:37:53 科技观察

公司现在越来越重视数据容灾,大量部署了DataGuard和OracleGoldenGate。核心系统的数据非常重要,大boss的要求很简单:数据零丢失。仔细权衡DataGuard的三种保护模式,在最大可用性和最大保护之间展开了激烈的讨论。下面我们从技术层面来看一下这两种保护模式的特点和区别。零数据丢失:同步传输SYNC(synchronoustransport)在DataGuard中也叫零数据丢失。因为需要等到事务恢复所需要的重做数据已经写入到备库(StandbyLogFile)的磁盘中,才能让LGWR识别commit操作成功。最高可用性:ALTERDATABASESETSTANDBYTOMAXIMIZEAVAILABILITY;这种模式最强调可用性,其次是零数据丢失保护。该模式使用SYNC(同步)方式传输重做数据,因此从备库接收到“重做数据已写入磁盘”确认消息所需的时间会影响主库的性能。但如果主数据库发生故障,数据通常会得到100%的保护。但是网络故障或者备库故障将无法向备库传输redo,而主库仍然可以继续接收新的东西。配置最高可用性时,最长等待时间由NET_TIMEOUT的值决定(默认30秒),超过后备目标将被放弃,允许主库继续处理,即使它仍然无法与主库通信备用数据库。当重新建立连接时,主库会强制进行一次日志切换,并关闭当前的重做日志,以防止重做传输在间隔重同步过程中进一步滞后。仅当主服务器在自动重新同步过程完成之前再次发生故障时,才有可能丢失数据。最高保护:ALTERDATABASESETSTANDBYTOMAXIMIZEPROTECTION;使用SYNC同步重做数据传输方式,直到收到配置中至少一个备库的确认报文(恢复事务所需的数据已经可靠地存储在磁盘上),主库才会确认提交。与最高可用不同,它不再考虑NET_TIMEOUT参数。如果主数据库未能从SYNC备用数据库接收到确认,则主数据库将停止并最终终止,从而防止出现不受保护的提交情况。最高性能:在ASYNC,异步传输模式下速度很快。LGWR进程不必等待来自LNS的确认消息。此方法不再考虑范围内。最大可用性vs最大保护最大可用性,顾名思义,以可用性为第一目标,安全性会自动降低可用性。它的致命弱点是在NET_TIMEOUT超时后,主库会继续处理事务,直到当前redo满,开始进入归档模式后,才会再次尝试连接备库。在此期间,主库和备库的数据不一致,发生灾难场景故障转移后数据会丢失。但是最大的保护,反对的声音也很高,就是担心网络问题或者备库问题不能及时反馈信息给主库的LGWR,导致主库挂断。解决办法:其实要满足老板的零数据丢失,可以使用最大保护模式。创建2个或3个主库最大保护模式的同城容灾备份。一个备份数据库在同一个机房??的不同柜子里,另外一个备份数据库在不同的机房(可能相隔几公里)。当主库发起事务提交动作时,LGWR进程将redologbuffer中的内容写入redolog文件,LNS进程将redologbuffer中的信息发送给备库。此时,只要处于最大保护模式的备库成功接收到数据并写入备日志文件,就会向主库的LGWR进程报告成功,主库继续处理交易。并非所有备用数据库都需要向其反馈。从某种角度看,这种方式更像是解决备库的“单点故障”。当然备库只有一个,使用最大保护模式还是有影响主库的可能。