Oracle DataGuard机制在容灾场景下应用

参考资料:html

Oracle技术网:https://www.oracle.com/technetwork/cn/tutorials/smiley-fsfo-088047-zhs.html数据库

DataGuard日志传输模式:http://blog.itpub.net/12679300/viewspace-1973194/缓存

DataGuard自动切换:http://blog.itpub.net/26736162/viewspace-1811944/安全

DataGuard传输模式:http://blog.itpub.net/12679300/viewspace-1973194/服务器

fast-start failover(FSFO):http://blog.itpub.net/28211342/viewspace-2138894/网络

TAF:https://blog.csdn.net/wll_1017/article/details/9469063session

TAF:http://blog.itpub.net/26736162/viewspace-1811944/oracle

 

===========================异步

Oracle RACtcp

===========================

Oracle Real Application Clusters (简称RAC)是屡获奖项的 Oracle Database Enterprise Edition 的一个选件。Oracle RAC采用共享缓存体系结构的数据库集群。一组Oracle RAC数据库服务器组成一个集群,他们之间经过高速内网互联,共享缓存。用户经过外部网络链接到数据库集群,当数据库服务器有单点故障时,上层用户不会受到任何影响。数据库集群共享下层的SAN存储。

Oracle Extended Distance Cluster是 Oracle RAC的一种部署模式,经过将集群中的服务器部署在物理分隔的位置。Oracle Extended Distance Cluster提供更胜于本地Oracle RAC的可用性。Oracle Extended Distance Cluster对距离、时延等都有较严格的要求,所以在现有的网络技术及存储技术的前提下,建议最远的距离不超过100km,两节点之间采用裸光纤。

Oracle异地RAC不适合于全量灾备恢复,只适合防范停电,空难,洪水等灾难性事故。更推荐的异地高可靠性方式是本地RAC + 异地DataGuard。

 

===========================

Oracle DataGuard

===========================

一、 DataGuard重作日志同步原理

主数据库的LGWR进程将重作数据写入到本身的ORL,同时DataGuard的LNS (Log Network Server)进程捕获日志写入器写入的重作数据,并以同步或异步方式将重作数据传输到备用数据库。

备用数据库Data Guard的RFS(Remote File Server)接收重作数据,而后将其写入一个名为备用重作日志(Standby Redo Log,SRL)文件的顺序文件中。备用数据库端的MRP(Managed Recovery Process)进程或者LSP进程在备用数据库上应用这些日志,进而同步数据。

DateGuard支持一主多备间经过重作日志方式同步。

 

DataGuard的重作日志传输是支持两种方式:

  • 同步重作传输 (SYNC)

  要求主数据库上的日志写入器等待 LNS 确认备用数据库已经接收重作数据并已将其写入备用重作日志,而后才能确认到客户端应用程序的提交。这确保了提交的全部事务都在磁盘上,并在备用位置受到保护;可是影响了主库的性能。

  1. 用户提交一个事务,事务在SGA 中建立一个重作记录。LGWR从日志缓冲区中读取重作记录,写入ORL,而后等待LNS 的确认。
  2. LNS 从日志缓冲区中读取相同的重作记录,经过Oracle Net 服务传给备用数据库。备用数据库上的RFS 接收重作数据,而后将其写入备用重作日志文件中。
  3. 当RFS 从磁盘接收到一个写完消息时,会将一个确认消息传回给主数据库上的LNS进程,LNS 接着通知LGWR 传输完成。LGWR 接着向用户发送提交确认信息。

  • 异步重作传输 (ASYNC)

  不要求主数据库上的日志写入器等待备用数据库确认重作已被写入磁盘。确认到客户端应用程序的提交与重作传输是异步进行的。

  

  异步传输方式会根据场景的不一样,调节读取日志的方式不一样:

 

  1. LNS的读取速度跟得上重作日志产生的速度,LNS进程从日志缓冲池中读取重作日志,而后经过Oracle Net服务传给备用数据库。
  2. 当LNS赶不上SGA重作日志的产生速度,在将重作数据传给备用数据库前就回收了日志缓冲区,LNS将自行转为从ORL读取和发送重作数据,当LNS遇上进度后,将自行转回到直接从日志缓冲区中读取/发送。
  3. 若是主数据库和备用数据库断开链接(网络故障或备用服务器故障),主数据库将继续处理事务并累积不能传输到备用数据库的重作数据积压并按文件归档,直到能创建新的网络链接为止(称为归档日志差别)。在这种状态下,DataGuard在主数据库上使用ARCH进程连续Ping备用数据库来肯定其状态。当还原与备用数据库的通讯后,ARCH进程会查询备用控制文件(经过其RFS进程),来肯定备用数据库从主数据库收到的最后一个完整日志文件。DataGuard肯定须要哪些日志文件来从新同步备用数据库,而后当即开始使用其余ARCH进程传输相应文件。

 

DataGuard支持配置三种数据保护模式,以实现成本、可用性、性能和数据保护的平衡:

保护模式

主数据库出现故障时的数据丢失风险

重作传输

最大保护

零数据丢失

  • Data Guard 确认事务数据安全保存到至少一台备用服务器的磁盘上以后,主数据库上的日志写入器进程才会确认到客户端应用程序的提交。因为重作传输的同步特性,最大保护模式可能影响主数据库的响应时间。
  • 若是没有任何一台备用数据库能返回重作已被接收并写入磁盘的确认,主数据库将停滞(并最终崩溃)。所以此种方式下,强烈建议至少配置两个备用数据库。

SYNC

最高可用性(maximum availability mode)

零数据丢失 — 假设出现故障以前主数据库提交事务时的同步通讯没有中断

  • Data Guard 确认事务数据安全保存到至少一台备用服务器的磁盘上以后,主数据库上的日志写入器进程才会确认到客户端应用程序的提交。因为重作传输的同步特性,最大保护模式可能影响主数据库的响应时间。
  • 若是没有任何一台备用数据库能返回重作已被接收并写入磁盘的确认,主数据库处理将继续进行。当再次创建链接时,Data Guard 将自动从新同步备用数据库和主数据库。

SYNC

最高性能(maximum performance mode)

最小数据丢失 — 只有几秒,具体取决于网络带宽

  • 在这种模式下,当主数据库处理事务时,重作数据经过ASYNC 重作传输异步传输到备用数据库。主数据库上的日志写入器不用等待备用数据库确认便可确认到客户端应用程序的提交。
  • 在正常操做中,可能丢失的数据量只限于在主数据库和备用数据库之间传输的数据量 — 这个量由处理主数据库生成的重作数据量的网络容量决定。若是有足够的带宽,可能丢失的总数据量很是小或为零。

ASYNC

 

二、 DataGuard实现自动切换

Oracle DataGuard支持使用快速启动故障切换FSFO(fast-start failover)特性来自动将故障数据库Failover到远程容灾节点,数据库RTO与FastStartFailoverLagLimit参数有关,可小于30秒。

当Primary数据库故障后,FSFO会自动地快速把原Standby数据库切换为为Primary数据库操做。FSFO的触发条件:

  • 当数据库以正常模式(shutdown immediate/normal/transactional)关闭Primaty数据库时,系统不会触发FSFO。
  • 使用非正常方式shutdown abort关闭Primaty数据库时,会触发FSFO。

FSFO只支持DataGuard配置在最高可用性(maximum availability mode)、最高性能(maximum performance mode)模式下:

  • 最高可用性模式下,在切换时能够保证无数据丢失(切换以前主数据库提交事务时的同步通讯没有中断)。
  • 在maximum performance mode下面,会有数据丢失,丢失多少数据由FastStartFailoverLagLimit这个参数来配置。

 

三、 TAF实现数据库切换后客户端无缝链接

TAF(Transparent Application Failover),透明应用程序故障转移,当客户端和Oracle数据库创建链接后,正在执行某个应用,此时客户端链接的某个实例忽然宕机,那么客户端的链接就会被转移到其余健康实例上去。对于客户端的TAF,若是执行的是update、insert等事物语句,那么就会回退,若是是select语句,那么会转移到新的实例继续执行,这个过程不须要用户的的介入,是透明的。

TAF配置参考(http://blog.itpub.net/26736162/viewspace-1811944/):

1) 在主库上配置一个TAF的Service

  此Service在数据库出现故障时会发送通知给客户端,容许查询语句在故障转移发生后继续运行。

2) 创建一个存储过程,调度TAF的Service,确保Service只在主库运行

 

3) 建立一个触发器,确保让数据库在启动和角色转换时运行此存储过程

  重启数据库、或当数据库切换后,执行存储过程,触发主库启动TAF的Service。

 

4) 在主库手工启动TAF的Service(或重启数据库,重启数据会触发 触发器->存储过程->TAF的Service)

  执行成功后,能够看到TAF的Service

 

5) 在备库查询,确保备库已经存在触发器和存储过程

 6) 客户端配置

样例1:

dg_taf =

    (DESCRIPTION =

        (ADDRESS = (PROTOCOL = tcp)(HOST = 192.168.59.130)(PORT = 1521))

        (ADDRESS = (PROTOCOL = tcp)(HOST = 192.168.59.131)(PORT = 1521))

            (LOAD_BALANCE = yes)

                (CONNECT_DATA =

                    (SERVER = DEDICATED)

                    (SERVICE_NAME = dg_taf_lhr.lhr.com)

                (FAILOVER_MODE =

                    (TYPE = session)

                    (METHOD = basic)

                    (RETRIES = 180)

                    (DELAY = 5)

               )

        )

)

样例2:(73/74是主站点主库的RAC、75/76是备站点备库的RAC)

iccc =

    (DESCRIPTION_LIST=(LOAD_BALANCE=off) (FAILOVER=on)

        (DESCRIPTION= (CONNECT_TIMEOUT=5)(TRANSPORT_CONNECT_TIMEOUT=3)(RETRY_COUNT=3)

            (ADDRESS_LIST= (LOAD_BALANCE=on)

                (ADDRESS=(PROTOCOL=TCP)(HOST=10.10.11.73)(PORT=1526))

                (ADDRESS=(PROTOCOL=TCP)(HOST=10.10.11.74)(PORT=1526))

            )

            (CONNECT_DATA=(SERVICE_NAME=service_ora))

        )

        (DESCRIPTION= (CONNECT_TIMEOUT=5)(TRANSPORT_CONNECT_TIMEOUT=3)(RETRY_COUNT=3)

            (ADDRESS_LIST= (LOAD_BALANCE=on)

                (ADDRESS=(PROTOCOL=TCP)(HOST=10.10.11.75)(PORT=1526))

                (ADDRESS=(PROTOCOL=TCP)(HOST=10.10.11.76)(PORT=1526))

            )

            (CONNECT_DATA=(SERVICE_NAME=service_ora))

        )

)

相关文章
相关标签/搜索