- 浏览: 5098581 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
silence19841230:
先拿走看看
SpringBoot2.0开发WebSocket应用完整示例 -
wallimn:
masuweng 写道发下源码下载地址吧!三个相关文件打了个包 ...
SpringBoot2.0开发WebSocket应用完整示例 -
masuweng:
发下源码下载地址吧!
SpringBoot2.0开发WebSocket应用完整示例 -
masuweng:
SpringBoot2.0开发WebSocket应用完整示例 -
wallimn:
水淼火 写道你好,我使用以后,图标不显示,应该怎么引用呢,谢谢 ...
前端框架iviewui使用示例之菜单+多Tab页布局
做个笔记
jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=vip1)(PORT=1521))(ADDRESS=(PROTOCOL=TCP)(HOST=vip2)(PORT=1521))(LOAD_BALANCE=yes)(FAILOVER=on))(CONNECT_DATA=(SERVICE_NAME=gs)))
String URL=
"jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS_LIST=" +
"(ADDRESS=(PROTOCOL=TCP)(HOST=ip1)(PORT=1521))" +
"(ADDRESS=(PROTOCOL=TCP)(HOST=ip2)(PORT=1521))" +
"(LOAD_BALANCE=yes)(FAILOVER=on))" +
"(CONNECT_DATA=(SERVICE_NAME=orcl)))" ;
oltp =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.2.131)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.2.132)(PORT = 1521))
#(LOAD_BALANCE = yes)
(CONNECT_DATA =
(SERVICE_NAME = oltp)
)
)
这是客户端的tns?
注释掉LOAD_BANANCE就表明你使用的是server端的banlance?
google 结果:
http://www.easyora.net/blog/rac_10g_study_catalog_4.html
RAC为应用提供了高性能和高可用的服务,对用户来讲,核心的功能便是failover与load banance.
(1)Failover
在10gR2版本里,Failover的实现方式有两种,一种是TAF(Transparent Application Failover), 一种是FCF(Fast Connection Failover).
TAF以及实现:
TAF是net层透明故障转移,是一种被动的故障转移方式, 依赖于VIP.可以通过客户端和服务器端配置taf的策略.
<1> client端taf配置
以下是一个简单的具有taf功能的tnsnames.ora 内容
demo =
(DESCRIPTION =
(FAILOVER=ON)
(ADDRESS=(PROTOCOL=TCP)(HOST=10.194.129.145)(PORT=1521))
(ADDRESS=(PROTOCOL=TCP)(HOST=10.194.129.146)(PORT=1521))
(CONNECT_DATA =
(SERVICE_NAME = demo)
(SERVER=DEDICATED)
(FAILOVER_MODE=(TYPE=SELECT)
(METHOD=BASIC)
(RETRIES=50)
(DELAY=5)
)
)
)
控制TAF策略的参数说明:
参数
描述
FAILOVER
Failover控制开关(on/off),如果为off,不提供故障切换功能,但连接时会对address列表进行依次尝试,直到找到可用为止
TYPE
两种类型:session /select
Session: 提供session级别的故障切换。
Select:提供select级别的故障切换,切换过程对查询语句透明,但事物类处理需要回滚操作
METHOD
两种类型:basic/preconnect
Basic:client同时只连接一个节点,故障切换时跳转到另外节点
Preconnect:需要与backup同时使用,client同时连接到主节点和backup节点
BACKUP
采用Preconnect模式的备用连接配置
RETRIES
故障切换时重试次数
DELAY
故障切换时重试间隔时间
<2> Server端TAF配置
10gR2提供Server端的TAF配置,需要调用dbms_service包来在实例上进行修改。
SQL> exec dbms_service.modify_service(service_name => ‘DEMO’,failover_method => ‘BASIC’,failover_type => ‘SELECT’,failover_retries => 180,failover_delay => 5);
客户端连接字符串修改成如下即可:
demo =
(DESCRIPTION =
(ADDRESS=(PROTOCOL=TCP)(HOST=10.194.129.145)(PORT=1521))
(ADDRESS=(PROTOCOL=TCP)(HOST=10.194.129.146)(PORT=1521))
(CONNECT_DATA =
(SERVICE_NAME = demo)
(SERVER=DEDICATED)
)
)
FCF及实现
FCF是10g引进的一种新的failover机制,它依靠各节点的ons进程,通过广播FAN事件来获得各节点的运行情况,是一种前摄性的判断,支持JDBC/OCI/ODP.NET
(1).ons配置
onsctl工具配置各节点的local /remote节点以及端口.配置文件路径ORACLE_HOME/opmn/ons.config.
使用 onsctl debug 跟踪ons进程是否正常运行。
(2).配置连接池(以jdbc为例)
需要连接池支持Implicit Connection Cache,设置FastConnectionFailoverEnabled=true.
将ojdbc14.jar / ons.jar等加入CLASSPATH.具体代码可以参见联机文档或metalink相关文档.
==另外一篇文章==
Failover的连接配置
有两种连接方式可以实现数据库连接的failover
1. TAF(Transparent Application Failover)
让我们看一下官方文档。TAF让Oracle Net将一个失效的连接从故障点转移到另一个监听上,用户能使用这个新的连接来继续未完成的工作,这是一个client端的功能。
TAF可以配置为使用client端的(Transparent Network Substrate)TNS连接字符串来连接,或者使用server端的服务。如果两种方式同时使用,则使用server端的服务配置。
TAF可以工作在两种模式下:session failover和select failover。前者在failover时会重建失败的连接,后者则能够继续进程中未完成的查询(如果failover前一个session正在从一个游标中获取数据,则新的session将在相同的snapshot下重新运行select语句,并返回余下的行)。如果failover时,session执行了DML操作且未提交,则failover后,若不执行rollback回滚而执行新的操作,将会收到一条错误信息ORA-25402: transaction must roll back
TAF在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: 每次连接数据库时,都会在备用实例上也产生一个连接,以实现更快的切换
RETRIES failover后,尝试连接的次数。如果指定了DELAY参数,则RETRIES默认为5次。若注册了callback,则该参数将被忽略
TYPE OCI默认提供了3种类型:session: 若用户连接丢失,将在备用节点上重新创建;select: 除了重建连接外,将继续从打开的游标中获取数据,如果采用这种方式,普通select操作也将在客户端产生开销;none: 默认值,也可显示指定来禁用failover功能
2. FCF(Fast Connect Failover)
oracle11g提供了FCF方式连接数据库,它支持JDBC Thin和JDBC OCI驱动;与连接缓存(implicit connection cache)协同工作提供更高的连接性能和高可用;可以在应用代码中设置,无需另外配置
需要的条件:启用了隐含连接缓存,FCF需要与JDBC的连接缓存机制共同工作,为应用管理连接以确保高可用;应用使用服务名而非服务标识符来连接数据库;JDBC运行的节点上配置并启用了Oracle Notification Service (ONS);JDBC例程运行的java虚拟机必须包含oracle.ons.oraclehome并指向ORACLE_HOME
例子:
配置ONS
ods.setONSConfiguration("nodes=racnode1.example.com:4200,racnode2.example.com:4200");
启用FCF
// declare datasource
ods.setUrl(
"jdbc:oracle:oci:@(DESCRIPTION=
(ADDRESS=(PROTOCOL=TCP)(HOST=cluster_alias)
(PORT=1521))
(CONNECT_DATA=(SERVICE_NAME=service_name)))");
ods.setUser("scott");
ods.setConnectionCachingEnabled(true);
ods.setFastConnectionFailoverEnabled(true):
ctx.bind("myDS",ods);
ds=(OracleDataSource) ctx.lookup("MyDS");
try {
ds.getConnection(); // transparently creates and accesses cache
catch (SQLException SE {
}
}
看糊涂了?上面的java代码包含一个异常处理。工作过程如下:
1. 一个实例宕掉了,在缓存中留下一些过期连接
2. RAC产生一个事件,并将其发送给包含JDBC的java虚拟机
3. JVM中的后台线程找出所有受到该RAC事件影响的所有连接,通过sql异常(ORA-17008)通知它们关闭连接,并回滚事务
4. 连接接收到sql异常并重新执行失败的操作
FCF与TAF相比有如下不同:
1. FCF支持应用级别的连接重试,由应用来决定failover时如何处理,是重新执行,还是抛出异常;TAF只能在OCI/NET的层面进行重新连接
2. FCF与连接缓存很好地结合起来,让连接缓存管理器来管理缓存,失败的连接在缓存中会自动失效。而TAF在网络层面做预连接,当一个连接失效,连接缓存不能检测到
3. FCF基于Oracle RAC事件,可以快速为活跃/闲置的连接检测到故障
4. FCF通过实例的UP事件实现负载均衡,分配到在线的RAC实例中
oracle建议不要在一个应用中同时使用TAF和FCF
jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=vip1)(PORT=1521))(ADDRESS=(PROTOCOL=TCP)(HOST=vip2)(PORT=1521))(LOAD_BALANCE=yes)(FAILOVER=on))(CONNECT_DATA=(SERVICE_NAME=gs)))
String URL=
"jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS_LIST=" +
"(ADDRESS=(PROTOCOL=TCP)(HOST=ip1)(PORT=1521))" +
"(ADDRESS=(PROTOCOL=TCP)(HOST=ip2)(PORT=1521))" +
"(LOAD_BALANCE=yes)(FAILOVER=on))" +
"(CONNECT_DATA=(SERVICE_NAME=orcl)))" ;
oltp =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.2.131)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.2.132)(PORT = 1521))
#(LOAD_BALANCE = yes)
(CONNECT_DATA =
(SERVICE_NAME = oltp)
)
)
这是客户端的tns?
注释掉LOAD_BANANCE就表明你使用的是server端的banlance?
google 结果:
http://www.easyora.net/blog/rac_10g_study_catalog_4.html
RAC为应用提供了高性能和高可用的服务,对用户来讲,核心的功能便是failover与load banance.
(1)Failover
在10gR2版本里,Failover的实现方式有两种,一种是TAF(Transparent Application Failover), 一种是FCF(Fast Connection Failover).
TAF以及实现:
TAF是net层透明故障转移,是一种被动的故障转移方式, 依赖于VIP.可以通过客户端和服务器端配置taf的策略.
<1> client端taf配置
以下是一个简单的具有taf功能的tnsnames.ora 内容
demo =
(DESCRIPTION =
(FAILOVER=ON)
(ADDRESS=(PROTOCOL=TCP)(HOST=10.194.129.145)(PORT=1521))
(ADDRESS=(PROTOCOL=TCP)(HOST=10.194.129.146)(PORT=1521))
(CONNECT_DATA =
(SERVICE_NAME = demo)
(SERVER=DEDICATED)
(FAILOVER_MODE=(TYPE=SELECT)
(METHOD=BASIC)
(RETRIES=50)
(DELAY=5)
)
)
)
控制TAF策略的参数说明:
参数
描述
FAILOVER
Failover控制开关(on/off),如果为off,不提供故障切换功能,但连接时会对address列表进行依次尝试,直到找到可用为止
TYPE
两种类型:session /select
Session: 提供session级别的故障切换。
Select:提供select级别的故障切换,切换过程对查询语句透明,但事物类处理需要回滚操作
METHOD
两种类型:basic/preconnect
Basic:client同时只连接一个节点,故障切换时跳转到另外节点
Preconnect:需要与backup同时使用,client同时连接到主节点和backup节点
BACKUP
采用Preconnect模式的备用连接配置
RETRIES
故障切换时重试次数
DELAY
故障切换时重试间隔时间
<2> Server端TAF配置
10gR2提供Server端的TAF配置,需要调用dbms_service包来在实例上进行修改。
SQL> exec dbms_service.modify_service(service_name => ‘DEMO’,failover_method => ‘BASIC’,failover_type => ‘SELECT’,failover_retries => 180,failover_delay => 5);
客户端连接字符串修改成如下即可:
demo =
(DESCRIPTION =
(ADDRESS=(PROTOCOL=TCP)(HOST=10.194.129.145)(PORT=1521))
(ADDRESS=(PROTOCOL=TCP)(HOST=10.194.129.146)(PORT=1521))
(CONNECT_DATA =
(SERVICE_NAME = demo)
(SERVER=DEDICATED)
)
)
FCF及实现
FCF是10g引进的一种新的failover机制,它依靠各节点的ons进程,通过广播FAN事件来获得各节点的运行情况,是一种前摄性的判断,支持JDBC/OCI/ODP.NET
(1).ons配置
onsctl工具配置各节点的local /remote节点以及端口.配置文件路径ORACLE_HOME/opmn/ons.config.
使用 onsctl debug 跟踪ons进程是否正常运行。
(2).配置连接池(以jdbc为例)
需要连接池支持Implicit Connection Cache,设置FastConnectionFailoverEnabled=true.
将ojdbc14.jar / ons.jar等加入CLASSPATH.具体代码可以参见联机文档或metalink相关文档.
==另外一篇文章==
Failover的连接配置
有两种连接方式可以实现数据库连接的failover
1. TAF(Transparent Application Failover)
让我们看一下官方文档。TAF让Oracle Net将一个失效的连接从故障点转移到另一个监听上,用户能使用这个新的连接来继续未完成的工作,这是一个client端的功能。
TAF可以配置为使用client端的(Transparent Network Substrate)TNS连接字符串来连接,或者使用server端的服务。如果两种方式同时使用,则使用server端的服务配置。
TAF可以工作在两种模式下:session failover和select failover。前者在failover时会重建失败的连接,后者则能够继续进程中未完成的查询(如果failover前一个session正在从一个游标中获取数据,则新的session将在相同的snapshot下重新运行select语句,并返回余下的行)。如果failover时,session执行了DML操作且未提交,则failover后,若不执行rollback回滚而执行新的操作,将会收到一条错误信息ORA-25402: transaction must roll back
TAF在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: 每次连接数据库时,都会在备用实例上也产生一个连接,以实现更快的切换
RETRIES failover后,尝试连接的次数。如果指定了DELAY参数,则RETRIES默认为5次。若注册了callback,则该参数将被忽略
TYPE OCI默认提供了3种类型:session: 若用户连接丢失,将在备用节点上重新创建;select: 除了重建连接外,将继续从打开的游标中获取数据,如果采用这种方式,普通select操作也将在客户端产生开销;none: 默认值,也可显示指定来禁用failover功能
2. FCF(Fast Connect Failover)
oracle11g提供了FCF方式连接数据库,它支持JDBC Thin和JDBC OCI驱动;与连接缓存(implicit connection cache)协同工作提供更高的连接性能和高可用;可以在应用代码中设置,无需另外配置
需要的条件:启用了隐含连接缓存,FCF需要与JDBC的连接缓存机制共同工作,为应用管理连接以确保高可用;应用使用服务名而非服务标识符来连接数据库;JDBC运行的节点上配置并启用了Oracle Notification Service (ONS);JDBC例程运行的java虚拟机必须包含oracle.ons.oraclehome并指向ORACLE_HOME
例子:
配置ONS
ods.setONSConfiguration("nodes=racnode1.example.com:4200,racnode2.example.com:4200");
启用FCF
// declare datasource
ods.setUrl(
"jdbc:oracle:oci:@(DESCRIPTION=
(ADDRESS=(PROTOCOL=TCP)(HOST=cluster_alias)
(PORT=1521))
(CONNECT_DATA=(SERVICE_NAME=service_name)))");
ods.setUser("scott");
ods.setConnectionCachingEnabled(true);
ods.setFastConnectionFailoverEnabled(true):
ctx.bind("myDS",ods);
ds=(OracleDataSource) ctx.lookup("MyDS");
try {
ds.getConnection(); // transparently creates and accesses cache
catch (SQLException SE {
}
}
看糊涂了?上面的java代码包含一个异常处理。工作过程如下:
1. 一个实例宕掉了,在缓存中留下一些过期连接
2. RAC产生一个事件,并将其发送给包含JDBC的java虚拟机
3. JVM中的后台线程找出所有受到该RAC事件影响的所有连接,通过sql异常(ORA-17008)通知它们关闭连接,并回滚事务
4. 连接接收到sql异常并重新执行失败的操作
FCF与TAF相比有如下不同:
1. FCF支持应用级别的连接重试,由应用来决定failover时如何处理,是重新执行,还是抛出异常;TAF只能在OCI/NET的层面进行重新连接
2. FCF与连接缓存很好地结合起来,让连接缓存管理器来管理缓存,失败的连接在缓存中会自动失效。而TAF在网络层面做预连接,当一个连接失效,连接缓存不能检测到
3. FCF基于Oracle RAC事件,可以快速为活跃/闲置的连接检测到故障
4. FCF通过实例的UP事件实现负载均衡,分配到在线的RAC实例中
oracle建议不要在一个应用中同时使用TAF和FCF
发表评论
-
Oracle数据库相关系统突然提示“SQLException:违反协议”
2024-02-19 15:50 330SQLException:违反协议这个异常可能由很多的 ... -
CentOS在Docker中安装Oracle
2024-02-06 12:13 4431.拉取Oracle镜像,并检 ... -
Windows Server安装oracle数据库一直停在82%
2023-02-04 12:01 404网上有个说法:服务器超过一定数量的CPU后,将不能正常安装 ... -
ORA-04030错误处理
2023-02-04 11:52 2173【错误描述】 错误信息如下: ORA-04030:在尝 ... -
ORA-04030错误处理
2023-02-04 11:45 403【错误描述】 错误信息如下: ORA-04030:在尝 ... -
gradle编译错误:Could not find method compile() for arguments
2020-09-19 10:50 18181编译(IDEA+Gradle)一个别人的工程,出现一个 ... -
netty心跳检查之UDP篇
2019-09-15 08:50 2106部分UDP通信场景中,需要客户端定期发送心跳信息,以获取终 ... -
解决tomcat部署两个SpringBoot应用提示InstanceAlreadyExistsException
2019-06-30 11:49 3165两个SpringBoot应用部署在一个Tomcat中,单独 ... -
Eclipse配置MyBatis代码自动化功能
2019-06-29 10:16 16401.安装插件 Eclipse中,Help->Ecli ... -
Linux安装MySQL数据库
2019-06-10 22:27 16101.进入安装包所在目录,解压: tar zxvf mysql- ... -
vue.js中使用qrcode生成二维码
2019-05-20 00:00 7558一、安装包 npm install qrcodejs2 --s ... -
确定MySQL在Linux系统中配置文件的位置
2019-04-14 19:30 26171.通过which mysql命令来查看mysql的安装位置。 ... -
mysql set names 命令和 mysql 字符编码问题
2019-04-12 00:34 1004转自:https://www.cnblogs.com/digd ... -
MySQL插入数据报错: Incorrect string value: '\xFD\xDE'
2019-03-31 23:19 1170我MySQL数据库用的uft-8字符集,插入数据一直很正常 ... -
vue自定义组件并双向绑定属性
2019-03-08 22:46 3204做了两个子组件,原理基本一样,一个是使用原生的select ... -
vue-router简单示例
2019-03-05 00:32 1085写个基本完整、稍有借鉴意义的示例,防止自己忘记。 &l ... -
“联通充值系统繁忙”轻松应对
2019-02-06 11:03 3898大过年的,联通充个值一直报“充值系统繁忙”。昨天晚上试了几 ... -
electron.js数据库应用---导航菜单(element-ui+mysql)
2019-02-05 21:33 2292一、环境搭建 略, ... -
electron.js数据库应用---入门(mysql+element-ui)
2019-01-27 23:19 7301我的机器:Windows10,64 ... -
SpringMVC 在controller层中注入成员变量request,是否线程安全
2018-12-17 21:17 2688@RestController public class ...
相关推荐
修改oracle数据库的字符集方法(RAC),适用RAC
Linux 常用命令 oracle rac 中文手册 官网翻译 oracle rac
这个文档详细的记录了重启Oracle rac的每一个步骤,重启的方法很多,这个可能不是最适合你的,但这个是有效的,这个文档是我给外行看的
NULL 博文链接:https://shikonglaike.iteye.com/blog/543538
oracle rac 不停机调整时间.txt
资源名称:深入理解Oracle RAC 12c内容简介:《深入理解Oracle RAC 12c》介绍了Oracle RAC 12c技术的方方面面,涵盖了与RAC技术相关的集群件知识、数据库知识、存储知识、网络知识,并在基于RAC的应用软件设计、优化...
此文档是Oracle 11g rac安装完成后的IOPS、负载均衡、TAF等的测试,内容详尽。
oracle rac安装个人笔记oracle rac安装个人笔记oracle rac安装个人笔记oracle rac安装个人笔记oracle rac安装个人笔记oracle rac安装个人笔记oracle rac安装个人笔记oracle rac安装个人笔记oracle rac安装个人笔记...
ArcSDE在hp-ux Oracle RAC上远程安装的实现
Oracle RAC Cache Fusion介绍.pdf
Centos7安装部署Oracle RAC 11G说明文档,Oracle 11g R2安装,RAC环境搭建
Oracle RAC增加ASM盘,创建表空间
yum源配置 Oracle RAC部署环境
和其他数据库系统类似,Oracle字符串连接使用“||”进行字符串拼接,其使用方式和MSSQLServer中的加号“+”一样。 比如执行下面的SQL语句: 代码如下:SELECT ‘工号为’||FNumber||’的员工姓名为’||FName FROM T_...
深入理解Oracle RAC 12c,数据库的知识,有需要的可以看一下
原创实战Oracle RAC rman恢复
Oracle RAC Failover 详解
Oracle RAC on VMware vSAN参考架构,Oracle RAC on VMware vSAN参考架构