原文链接:http://www.ohsdba.cn/index.php?g=Home&m=Article&a=show&id=434
作者:Robin.Han
Oracle的高可用有很多种架构和技术,涉及到的知识点还有RAC、ADG、ONS、TAF、FAN、FCF、AC、TG、TAC等。下面我们从连接数据库的三要素(IP地址、端口、服务名)之一的服务名来看,如何正确的配置服务,才能从客户端或服务器端实现负载均衡和故障转移。这个是实现应用连续性的要素之一,在后面我们会用到这些知识。
Oracle高可用特性架构
Java Programming with Oracle Database 12c RAC and Active Data Guard该书册介绍了如果在RAC和DG环境中如何启用FAN、ONS、FCF、TG、AC等特性,对开发高可用的Java程序非常使用。下面让我们熟悉一下这些名词和架构
Universal Connection Pool (UCP)
Fast Application Notification (FAN)
Oracle Notification Service (ONS)
Fast Connection Failover (FCF)
Logical Transaction ID (LTXID)
Database Request(用于区分事务的边界)
Recoverable Errors(可恢复错误是由外部系统故障引起的错误,与正在执行的应用程序会话逻辑无关,比如因实例、节点、存储、网络,或任何其他相关组件引起的)。相反如果是由于应用程序逻辑引起的,比如主键冲突,那么就标识为不可恢复的事务
Mutable Functions(可变函数,比如SEQUENCE,SYSDATE,SYS_GUID等)
Transaction Guard (TG,设置COMMIT_OUTCOME为TRUE,将启用该特性)
Application Continuity (AC,设置FAILOVER_TYPE为TRANSACTION,将启用该特性)
Transaction Guard
Transaction Guard即事务卫士。对于事务来说,在异常情况下,比如最常见的宕机,由于应用程序无法感知事务的当前状态,很容易发生重复提交等情况,造成数据逻辑上的错误,事务卫士就是干这个事情的。Oracle 12c Transaction Guard是TAF的拓展,它涵盖了TAF的一些限制,比如使用OCI等。Transaction Guard为应用程序提供了一个通用协议或者说是工具,在发生计划内和计划外停机,或者有重复提交时用于“最多执行一次”,进而保持事务一致性,是通过逻辑事务ID(LTXID)来确定停机后数据库会话中打开的最后一个事务的结果。
Application Continuity
Application Continuity 即应用连续性 ,是 Oracle Real Application Clusters (RAC)、Oracle RAC One Node 和 Oracle Active Data Guard 选件的一个特性,事务中断后,通过恢复正在进行的数据库会话,对最终用户和应用程序屏蔽中断,使其不被最终用户和应用所觉察。这样,在应用看来中断只是一次稍有延迟的执行。 增强了使用 Oracle 数据库的系统和应用的容错性。
从Oracle database 12.1开始,开始支持基于Java thin的应用程序
从Oracle database 12.2.0.1开始,开始支持基于OCI和ODP.NET的应用程序
Transparent Application Continuity
从Oracle Database 18c开始,Transparent Application Continuity (TAC)透明地跟踪和记录会话和事务状态,以便在可恢复的中断之后恢复数据库会话。应用程序透明性和故障转移是通过使用状态跟踪信息来实现的,这些信息在应用程序发出用户调用时捕获并分类会话状态使用情况。
https://docs.oracle.com/en/database/oracle/oracle-database/19/racad/ensuring-application-continuity.html
12c之后业务不中断的体验
借助Application Continuity,可以屏蔽许多计划内和计划外的停机,而无需应用程序开发人员尝试恢复请求,从而改善了最终用户的体验。没有Application Continuity,几乎不可能以安全可靠的方式屏蔽应用程序的停机。
AC和TAC的区别
启用Transaction Guard
事务卫士是应用连续性的基础。要启用AC/TAC,必须要先启用事务防护
启用应用连续性
创建数据库服务、配置连接数据库服务的字符串,最后配置下应用程序,启用高可用基本上就搞定了
Connect Using Oracle Services
创建数据库服务,不要使用默认的数据库服务
Configure TNS/URL for High Availability
配置连接数据库服务的TNS或者URL
Use Fast Application Notification (FAN)
启用FAN,配置ONS,FCF等
Use recommended application practices that allow draining
配置应用程序,以支持AC或TAC
支持的应用程序
Reference
https://www.oracle.com/technetwork/database/options/clustering/transaction-guard-wp-5305738.pdf
https://docs.oracle.com/en/database/oracle/oracle-database/19/racad/ensuring-application-continuity.html
https://www.oracle.com/technetwork/cn/database/options/clustering/ac-overview-1967264-zhs.html
https://www.oracle.com/technetwork/cn/database/database-cloud/private/application-continuity-wp-12c-1966213-zhs.pdf
https://www.oracle.com/technetwork/database/options/clustering/ac-with-oracle-database-5303807.pdf
https://blogs.oracle.com/dev2dev/write-recovery-code-with-transaction-guard
https://www.oracle.com/technetwork/database/options/clustering/applicationcontinuity/learnmore/fastapplicationnotification12c-2538999.pdf
https://www.oracle.com/technetwork/database/application-development/12c-ha-concepts-2408080.pdf
http://docs.oracle.com/cd/E16655_01/appdev.121/e17663/oracle/jdbc/replay/ReplayableConnection.html
https://www.oracle.com/technetwork/database/options/clustering/applicationcontinuity/learnmore/ac-applicationguidelines-5440853.pdf
https://www.oracle.com/technetwork/database/application-development/12c-ha-concepts-2408080.pdf
最新评论
这个牛
放下欲望,男人从来不醉,充分且必要
勇气、责任、自信、创新,为天下先!
软件即数据,软件即服务,软件即管理,软件就是对人类各种社会活动的仿真和记录。软件很重要,但软件不可能凌驾于业务之上,尤其不可能高人一等。