oracle11gRAC的一些基本概念(一)总的来说,oracle11gr2RAC提供了以下功能:1.高可用:shared-everything模式保证了单节点的故障不会停止服务,集群中的其他节点将快速接管2.可扩展性:多节点分担负载,可以提供远超单机数据库能提供的处理能力。且增删节点可以在线完成,不需要停机3.易用性:多个数据库可以加入到一个集群中4.低成本:RAC可以部署在标准硬件上,硬件上节省的成本抵消了购买license的成本Oracle11gr2还提供了一个叫RACOneNode的新功能。Oracle发现一些RAC的部署纯粹只是为了高可用,而虚拟化越来越多的被用户所使用,并成为了一个新的趋势。OracleOneNode建立在以下基础之上:OracleClusterware、OracleASM、Oracledatabase。我们再来看一眼RAC的结构图相比较单机数据库,RAC需要一个共享存储;一个私有网络来进行集群内部通讯;一个公有网络来连接应用和客户端;配置虚拟IP来提高节点故障时的连接速度,当一个节点出现故障,它的虚拟ip立即指向其他节点的ip上(若不配置vip,当一个节点发生故障时,新的连接将会发生等待,直到与该节点ip的通讯出现timeout)。Failover的连接配置有两种连接方式可以实现数据库连接的failover1.TAF(TransparentApplicationFailover)让我们看一下官方文档。TAF让OracleNet将一个失效的连接从故障点转移到另一个监听上,用户能使用这个新的连接来继续未完成的工作,这是一个client端的功能。TAF可以配置为使用client端的(TransparentNetworkSubstrate)TNS连接字符串来连接,或者使用server端的服务。如果两种方式同时使用,则使用server端的服务配置。TAF可以工作在两种模式下:sessionfailover和selectfailover。前者在failover时会重建失败的连接,后者则能够继续进程中未完成的查询(如果failover前一个session正在从一个游标中获取数据,则新的session将在相同的snapshot下重新运行select语句,并返回余下的行)。如果failover时,session执行了DML操作且未提交,则failover后,若不执行rollback回滚而执行新的操作,将会收到一条错误信息ORA-25402:transactionmustrollbackTAF在dataguard中使用,可以自动进行failover一个典型的使用了TAF的TNS连接串如下:NEWSDB=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=rac1-vip)(PORT=1521))(ADDRESS=(PROTOCOL=TCP)(HOST=rac2-vip)(PORT=1521))(LOAD_BALANCE=yes)(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=dyora)(FAILOVER_MODE=(TYPE=SELECT)(METHOD=BASIC)(RETRIES=180)(DELAY=5))))failover_mode参数介绍failover_mode参数说明BACKUP备用连接的网络服务名。若使用了preconnect的连接方法,则需要指定这个参数DELAY连接重试的时间间隔(秒)。如果指定了RETRIES参数,若不指定该参数,默认为1秒。若注册了callback,该参数将被忽略METHOD设置failover方法。basic:failover时才尝试连接备用实例的监听;preconnect:每次连接数据库时,都会在备用实例上也产生一个连接,以实现更快的切换RETRIESfailover后,尝试连接的次数。如果指定了DELAY参数,则RETRIES默认为5次。若注册了callback,则该参数将被忽略TYPEOCI默认提供了3种类型:session:若用户连接丢失,将在备用节点上重新创建;select:除了重建连接外,将继续从打开的游标中获取数据,如果采用这种方式,普通select操作也将在客户端产生开销;none:默认值,也可显示指定来禁用failover功能2.FCF(FastConnectFailover)oracle11g提供了FCF方式连接数据库,它支持JDBCThin和JDBCOCI驱动;与连接缓存(implicitconnectioncache)协同工作提供更高的连接性能和高可用;可以在应用代码中设置,无需另外配置需要的条件:启用了隐含连接缓存,FCF需要与JDBC的连接缓存机制共同工作,为应用管理连接以确保高可用;应用使用服务名而非服务标识符来连接数据库;JDBC运行的节点上配置并启用了OracleNotificationService(ONS);JDBC例程运行的java虚拟机必须包含oracle.ons.oraclehome并指向ORACLE_HOME例子:配置ONSods.setONSConfiguration("nodes=racnode1.example.com:4200,racnode2.example.com:4200");启用FCF//declaredatasourceods.set...