|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
把例子全部敲进去试验,完成一遍以后就会有心得了,因为你会发现为啥我的程序和书上的一模一样就是结果不正确。新手学习的时候必须承认,不容易,因为我也是过来人,你会发现原来有那么多常用的语句,函数都要记。oracle 如需转载,请注明出处!(刁馋在此先谢过了……)
Oracle TAF的设置装备摆设
TAF为Transparent Application FailOver的缩写,普通使用TAF都是在OPS/RAC情况中。从8i入手下手有的这一功效,目标和设法都是很好的,但今朝使用还很无限,本文将针对TAF相干成绩作个具体切磋。
本文的测试情况是Tru64 V5.1+ Oracle9.2.0.1 RAC。
1、相干参数的申明
说假话oracle关于收集的几个设置装备摆设参数真的是太乱了,良多人都弄不清究竟是怎样回事,罕见的毛病为:
"ORA-12514 :TNS:listener could not resolve SERVICE_NAME given in connect descriptor" 和
"ORA-12154 :TNS: Could not resolve service name"
本色都是一样的,要处理如许的成绩需求咱们弄情几个参数:
initsid.ora中的几个参数:
DB_NAME --- database name,即建数据库时所供应的称号。
GLOBAL_NAMES --- True/false,设定是不是利用数据库域名。
DB_DOMAIN --- 数据库域名,假如GLOBAL_NAMES=True则请求供应这个参数。
SERVICE_NAMES --- service names list,办事称号,可以有多个。
INSTANCE_NAME --- instance name,和SERVICE_NAMES一样从817入手下手撑持,即从817入手下手可以将数据库、实例和办事称号分隔。默许instance_name的值为instance的SID,即情况变量ORACLE_SID所对应的值。在817之前没有instance_name参数时,分歧的instance是以SID来辨别的。依照oracle817今后的文档注释:SID是为了区分统一主机上各instance的同享内存,并非instance的独一区分标示,而instance_name则是区分各个instance的。
情况变量:
ORACLE_SID --- 在817之前没有instance_name参数时,分歧的instance是以SID来辨别的(具体申明见下面的initsid.ora参数注释)。
listener.ora中的几个参数:
GLOBAL_DBNAME --- 全局数据库称号,在散布式情况中独一肯定分歧的数据库。它的值为initsid.ora中DB_NAME和DB_DOMAIN的组合,即GLOBAL_DBNAME=DB_NAME.DB_DOMAIN,个中DB_DOMAIN假如没有设此处也就不需求了。这个参数在散布式情况中建议明白指定。
SERVICE_NAME --- 办事称号,取initsid.ora中service_names list至一便可。
SID_NAME --- 对应情况变量ORACLE_SID的值。
INSTANCE_NAME ---对应初始化参数instance_name。
tnsnames.ora中的几个参数:
service_name --- 办事称号,取initsid.ora中service_names list至一便可。
sid_name --- 可以简写成:sid,对应ORACLE_SID,也能够是初始化参数instance_name,当等于instance_name且instance_name不等于ORACLE_SID时,oracle会主动注册一个监听历程,此用以辨别分歧的instance。
instance_name --- 从817入手下手有了这个新的参数可使用,对应初始化参数instance_name。
如许一来,参数就很庞杂了,不外咱们实践利用其实不会用固然十月复杂越好了。
2、相干参数设置
上面我将举例申明相干参数的设置:
1、情况变量:ORACLE_SID=rac1/2
2、initsid.ora:
db_name=ora92
service_names = ora92
instance_name=rac1/2
global_names=false
db_domain=""
3、listener.ora:
SID_LIST_RAC1 =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = ora92)
(ORACLE_HOME = /oracle/oracle9/app/oracle/product/9.2.0)
(SERVICE_NAME=ora92)(SID_NAME = rac1)
)
)
SID_LIST_RAC2 =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = ora92)
(ORACLE_HOME = /oracle/oracle9/app/oracle/product/9.2.0)
(SERVICE_NAME=ora92)(SID_NAME = rac2)
)
)
RAC1 =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.1.3.1)(PORT = 1522))
)
)
)
RAC2 =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.1.3.2)(PORT = 1522))
)
)
)
3、TAF的设置
其实TAF设置很复杂,在tnsnames.ora中添加failover=on便可,有两种分歧的设置办法:
1、公用一个tns name体例:==================================================
myrac =
(description=
(load_balance=on)
(failover=on)
(address= (protocol=tcp)(host=10.1.3.1)(port=1522))
(address= (protocol=tcp)(host=10.1.3.2)(port=1522))
(connect_data= (service_name=ora92)
(failover_mode=(type=select)(method=basic)(retries=20)(delay=20))
)
)
==========================================================================
2、指明instance backup体例:===============================================
rac1 =
(description=
(load_balance=on)
(failover=on)
(address= (protocol=tcp)(host=10.1.3.1)(port=1522))
(connect_data= (service_name=ora92)
(failover_mode=(type=select)(method=basic)
(backup=rac2)(retries=20)(delay=20))
)
)
rac2 =
(description=
(load_balance=on)
(failover=on)
(address= (protocol=tcp)(host=10.1.3.2)(port=1522))
(connect_data= (service_name=ora92)
(failover_mode=(type=select)(method=basic)
(backup=rac1)(retries=20)(delay=20))
)
)
==========================================================================
4、TAF测试办法
普通可以将以后毗连的instance down上去,client端将不会断开,并主动切换到backup节点上。相反也会主动切换回来。
固然也有人提出用post_transaction的体例来测试TAF,其实如许有时是得不到预期了局的,缘由在于Oracle毗连到一个instance上后,尔后它会优先测验考试对该instance的毗连,当你disconnect后,client端一有新的恳求就会主动测验考试对比来毗连的instance停止毗连,假如不胜利才会测验考试对backup instance停止毗连。
另外要叮嘱各位的是,抵御诱惑,ASP/PHP/JSP/.NET的对比也许会让你无所适从,你也许学了一半PHP,又开始打C#的主意,或者有人说JAVA很强,这个时候的你绝对不能动摇,哪怕你真想学。 |
|