参考资料: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的重作日志传输是支持两种方式:
要求主数据库上的日志写入器等待 LNS 确认备用数据库已经接收重作数据并已将其写入备用重作日志,而后才能确认到客户端应用程序的提交。这确保了提交的全部事务都在磁盘上,并在备用位置受到保护;可是影响了主库的性能。
不要求主数据库上的日志写入器等待备用数据库确认重作已被写入磁盘。确认到客户端应用程序的提交与重作传输是异步进行的。
异步传输方式会根据场景的不一样,调节读取日志的方式不一样:
DataGuard支持配置三种数据保护模式,以实现成本、可用性、性能和数据保护的平衡:
保护模式 |
主数据库出现故障时的数据丢失风险 |
重作传输 |
最大保护 |
零数据丢失
|
SYNC |
最高可用性(maximum availability mode) |
零数据丢失 — 假设出现故障以前主数据库提交事务时的同步通讯没有中断
|
SYNC |
最高性能(maximum performance mode) |
最小数据丢失 — 只有几秒,具体取决于网络带宽
|
ASYNC |
二、 DataGuard实现自动切换
Oracle DataGuard支持使用快速启动故障切换FSFO(fast-start failover)特性来自动将故障数据库Failover到远程容灾节点,数据库RTO与FastStartFailoverLagLimit参数有关,可小于30秒。
当Primary数据库故障后,FSFO会自动地快速把原Standby数据库切换为为Primary数据库操做。FSFO的触发条件:
FSFO只支持DataGuard配置在最高可用性(maximum availability mode)、最高性能(maximum performance mode)模式下:
三、 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))
)
)