④内部公开请勿外传ORACLE服务器TAF配置说明书目录ORACLE服务器端TAF的配置说明书.1一、说明..1二、服务端配置方法..1三、客户端的配置方法..4四、手动模拟转移测试验证..5五、故障转移验证验证..7手工关闭某个实例.7自身故障.8六、注意事项..9一、说明TAF(TRANSPORTAPPLICATIONFAILOVER,简称透明应用故障转移)是在优化系统架构的同时,提高系统的可用性。对比在客户端,在服务器端配置TAF,可以简化TAF的使用方法。本文介绍在ORACLERAC服务器端/客户端上TAF的配置方法、及测试验证、及注意事项。二、服务端配置方法环境说明:ORACLE11204,RAC双节点,1.查看数据库上已配置的服务(名)。[oracle@tlmbdb1]/home/oracle$srvctlconfigservice-dtlmborclServicename:srv10ServiceisenabledServerpool:tlmborcl_srv10Cardinality:1Disconnect:falseServicerole:PRIMARYManagementpolicy:AUTOMATICDTPtransaction:false1/10④内部公开请勿外传AQHAnotifications:falseFailovertype:SELECTFailovermethod:NONETAFfailoverretries:0TAFfailoverdelay:0ConnectionLoadBalancingGoal:LONGRuntimeLoadBalancingGoal:NONETAFpolicyspecification:BASICEdition:Preferredinstances:tlmborcl1Availableinstances:tlmborcl2Servicename:srv20ServiceisenabledServerpool:tlmborcl_srv20Cardinality:1Disconnect:falseServicerole:PRIMARYManagementpolicy:AUTOMATICDTPtransaction:falseAQHAnotifications:falseFailovertype:SELECTFailovermethod:NONETAFfailoverretries:0TAFfailoverdelay:0ConnectionLoadBalancingGoal:LONGRuntimeLoadBalancingGoal:NONETAFpolicyspecification:BASICEdition:Preferredinstances:tlmborcl2Availableinstances:tlmborcl1说明: tlmbdb1,节点1的服务器名称,节点2名称为tlmbdb2。 –dtlmborcl,目标数据库服务名称,用于登录数据库。配置后,当使用该服务名登录数据库时,不论登录到哪个实例(节点),都是登录到该数据库(一个节点上可以存在多个数据库)。 节点1的实例名为tlmborcl1,节点2的实例名为tlmborcl2。2/10④内部公开请勿外传 srv10,srv20,服务名(文章中提及的服务和服务名,本质都是一个意思。服务是指功能,服务名是指该功能的表现名称)。2.删除原来的服务,重新配置。2.1停止原服务。[oracle@tlmbdb1]/home/oracle$srvctlstopservice-dtlmborcl-ssrv10[oracle@tlmbdb1]/home/oracle$srvctlstopservice-dtlmborcl-ssrv202.2删除原服务。[oracle@tlmbdb1]/home/oracle$srvctlremoveservice-dtlmborcl-ssrv10[oracle@tlmbdb1]/home/oracle$srvctlremoveservice-dtlmborcl-ssrv202.3重新配置服务,这里用回原来的名称。[oracle@tlmbdb1]/home/oracle$srvctladdservice-dtlmborcl-ssrv10-rtlmborcl1-atlmborcl2-Pbasic-eselect[oracle@tlmbdb1]/home/oracle$srvctladdservice-dtlmborcl-ssrv20-rtlmborcl2-atlmborcl1-Pbasic-eselect说明:-d指明是哪个数据库的服务-s服务名-r首选实例-a备选实例-P故障转移类型-e允许的故障转移操作2.4查看服务状态。[oracle@tlmbdb1]/home/oracle$srvctlstatusservice-dtlmborclServicesrv10isnotrunning.Servicesrv20isnotrunning.说明:创建服务后,服务的状态为关闭。必须得启动服务才能使用。2.5启动服务。[oracle@tlmbdb1]/home/oracle$srvctlstartservice-dtlmborclServicesrv10isrunningoninstance(s)tlmborcl1Servicesrv20isrunningoninstance(s)tlmborcl2[oracle@tlmbdb1]/home/oracle$说明:服务在哪个实例上running,使用该服务名登录时,将登录到该实例。3.连接测试3/10④内部公开请勿外传当使用srv10服务名时,将连接/登录到实例1(tlmborcl1)。若被重新转移/重新分配到实例2时,将连接/登录到实例2(tlmborcl2)。使用srv20时同理。[oracle@tlmbdb1]/home/oracle$sqlpluscloudzs/cloudzs@srv10SQL*Plus:Release11.2.0.4.0ProductiononWedJul1816:34:032018Copyright(c)1982,2013,Oracle.Allrightsreserved.Connectedto:OracleDatabase11gEnterpriseEditionRelease11.2.0.4.0-64bitProductionWiththePartitioning,RealApplicationClusters,AutomaticStorageManagement,OLAP,DataMiningandRealApplicationTestingoptionsCLOUDZS@srv10>selectinstance_namefromv$instance;INSTANCE_NAME--------------------------------tlmborcl1Elapsed:00:00:00.00CLOUDZS@srv10>connectcloudzs/cloudzs@srv20Connected.CLOUDZS@srv20>selectinstance_namefromv$instance;INSTANCE_NAME--------------------------------tlmborcl2Elapsed:00:00:00.02三、客户端的配置方法修改oracle下的tnsnames.ora文件,增加实例名称配置。4/10④内部公开请勿外传说明:椭圆标记的srv10,是上述命令srvctladdservice–dtlmborcl–ssrv10里指定的名称。方框标记的SRV10,是连接串的名称,可以任意命名。四、手动模拟转移测试验证把服务名srv10的首实例,从tlmborcl1转到tlmborcl2。[oracle@tlmbdb1]/home/oracle$srvctlrelocateservice-dtlmborcl-ssrv10-itlmborcl1-ttlmborcl2说明:relocate转移/重新分配-i服务原先的首实例-t服务新的首实例1.查看转移后服务名所在实例[oracle@tlmbdb1]/home/oracle$srvctlstatusservice-dtlmborclServicesrv10isrunningoninstance(s)tlmborcl2Servicesrv20isrunningoninstance(s)tlmborcl22.手动转移服务名的首实例,只是临时性的操作,不会改变配置中最初的首实例[oracle@tlmbdb1]/home/oracle$srvctlconfigservice-dtlmborcl-ssrv10Servicename:srv10ServiceisenabledServerpool:tlmborcl_srv10Cardinality:15/10④内部公开请勿外传Disconnect:falseServicerole:PRIMARYManagementpolicy:AUTOMATICDTPtransaction:falseAQHAnotifications:falseFailovertype:SELECTFailovermethod:NONETAFfailoverretries:0TAFfailoverdelay:0ConnectionLoadBalancingGoal:LONGRuntimeLoadBalancingGoal:NONETAFpolicyspecification:BASICEdition:Preferredinstances:tlmborcl1Availableinstances:tlmborcl2[oracle@tlmbdb1]/home/oracle$3.测试手动转移服务首实例后的效果[oracle@tlmbdb1]/home/oracle$sqlpluscloudzs/cloudzs@srv10SQL*Plus:Release11.2.0.4.0ProductiononWedJul1816:40:522018Copyright(c)1982,2013,Oracle.Allrightsreserved.Connectedto:OracleDatabase11gEnterpriseEditionRelease11.2.0.4.0-64bitProductionWiththePartitioning,RealApplicationClusters,AutomaticStorageManagement,OLAP,DataMiningandRealApplicationTestingoptionsCLOUDZS@srv10>selectinstance_namefromv$instance;INSTANCE_NAME--------------------------------tlmborcl2Elapsed:00:00:00.004.当关闭/重启该服务后,查看服务名的首实例,依然是原来配置的值[oracle@tlmbdb1]/home/oracle$srvctlstopservice-dtlmborcl-ssrv10[oracle@tlmbdb1]/home/oracle$srvctlstartservice-dtlmborcl-ssrv10[oracle@tlmbdb1]/home/oracle$srvctlstatusservice-dtlmborclServicesrv10isrunningoninstance(s)tlmborcl1Servicesrv20isrunningoninstance(s)tlmborcl2[oracle@tlmbdb1]/home/oracle$6/10④内部公开请勿外传五、故障转移验证验证手工关闭某个实例1.使用服务名srv20,登录到实例2;2.关闭实例2;3.查看进程所在的实例,发现进程已被中断。并且,服务Ssrv20也被关闭。7/10④内部公开请勿外传通过shutdown方式关闭的实例,如果采用服务名的方式,系统不会自动转移,需要手工重新启动后,才能正常使用。自身故障1.使用kill-9命令,杀掉数据库的关键进程smon,模拟数据库实例故障;8/10④内部公开请勿外传2.查看测试进程的实例,发现从原来的实例2,自动跳转到实例1。说明当实例自身发生故障时,可以自动转移;3.查看实例2之前被杀掉的关键进程smon,系统自动恢复。说明由于实例自己故障导致的关闭,会自动跳转到其他节点的实例,并且自动恢复相关进程。六、注意事项在Oracle11.2.0.4,12.1.0.2版本中,当人为手动关闭数据库(shutdownimmediate/abort)时,使用taf方式登录数据库的进程,不会自动跳转到其他节点的实例,重新启动后才能连接。在12.2.0.1版本,即便是手工关闭数据库,使用taf方式登录数据库的进程,也会自动跳转9/10④内部公开请勿外传到其他节点的实例。七、利用集群特性的部署方案在RAC的两个节点$ORACLE_HOME/network/admin目录下的tnsname.ora文件增加:SRV1=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=cloud-scan)(PORT=1521))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=SRV1)))SRV2=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=cloud-scan)(PORT=1521))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=SRV2)))数据库注册地址:地址:scanip;Oracle实例名:srv10查询库注册地址:地址:scanip;Oracle实例名:srv20说明:SRV10,SRV20为安装RAC后,两个节点的服务名称10/10