`

JAVA 连接 ORACLE RAC 字符串

阅读更多
做个笔记
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_RAC_上的压力测试

    - 输入数据库连接字符串和 SYS 密码。 - 输入数据文件和索引数据文件路径。 - 生成 OE 种子库。 #### 六、启动协调服务器 执行 `coordinator.bat` 来启动协调服务器。这一步是必不可少的,因为 SwingBench 需要...

    Oracle 11g RAC 基本概念

    TAF 可以配置为基于客户端的 TNS 连接字符串或服务器端的服务。当两者都存在时,默认使用服务器端的服务配置。例如,一个包含 TAF 的 TNS 连接字符串可能如下所示: ```plaintext NEWSDB= (DESCRIPTION= (ADDRESS=...

    可用于oracle19c的jdbc驱动

    - **连接字符串**:连接Oracle 19c数据库时,需要一个包含服务器地址、端口、服务名或SID的URL。例如:"jdbc:oracle:thin:@//hostname:port/service_name"。 - **认证信息**:驱动还需要数据库用户名和密码来建立...

    Oracle SOA 套件和 RAC 数据库事务一致性配置指南

    对于 RAC 环境,应使用服务名称而非实例名称来指定数据库连接字符串,这样可以提高故障切换的透明性。 - **XA 恢复**:为了确保 XA 事务的一致性和可靠性,必须配置 XA 恢复机制。XA 恢复允许在系统崩溃或出现其他...

    Oracle 19c RAC on Linux安装手册.zip

    在Java环境下,如果你的应用需要与Oracle 19c RAC交互,确保安装了JDBC驱动(如ojdbc8.jar),并在应用程序中配置正确的连接字符串和负载均衡策略。Oracle JDBC驱动支持连接池和RAC的负载均衡,使得应用能够透明地...

    rac weblogic(txt简写)

    在WebLogic环境中配置Oracle RAC数据库连接时,正确设置JDBC连接字符串和TNSNAMES.ORA文件是非常重要的。这些配置确保了WebLogic Server能够高效地与Oracle RAC数据库进行交互,并充分利用其提供的高级特性。

    四百道JAVA和ORACLE笔试面试题目

    1. **JAVA基础**:这是所有JAVA程序员必备的知识,包括但不限于数据类型、变量、运算符、流程控制语句(如if-else,switch,for,while)、数组、字符串、面向对象编程(类、对象、封装、继承、多态)、接口、异常...

    Oracle客户端精简版

    它包括TNS(Transparent Network Substrate)命名服务,用于解析数据库连接字符串,并提供TCP/IP、 Named Pipes等多种网络协议支持。 2. **SQL*Plus**:这是一个命令行工具,允许用户执行SQL查询、PL/SQL块以及管理...

    Oracle学习资料doc

    - JDBC与ODBC:了解Java和Oracle之间的接口,如何使用JDBC驱动连接和操作Oracle数据库。 - APEX(Application Express):学习Oracle的快速开发平台,如何构建Web应用程序。 这个"Oracle学习资料doc"压缩包提供了...

    AIX6.1两节点的ORACLE10.2.0.5RAC恢复到单机

    - `*.db_domain`: 保持为空字符串 - `*.db_file_multiblock_read_count`: 设置为16 - `*.db_name`: 设置为`'lygl'` - `*.dispatchers`: 设置为`'(PROTOCOL=TCP)(SERVICE=lyglXDB)'` - `*.job_queue_processes`:...

    oracle_11g_R2_RAC原理解读.docx

    - 示例 TNS 连接字符串: ```plaintext NEWSDB= (DESCRIPTION= (ADDRESS=(PROTOCOL=TCP)(HOST=rac1-vip)(PORT=1521)) (ADDRESS=(PROTOCOL=TCP)(HOST=rac2-vip)(PORT=1521)) (LOAD_BALANCE=yes) (CONNECT_...

    Oracle JDBC Driver

    Oracle JDBC Driver是Oracle公司提供的Java数据库连接(JDBC)驱动程序,用于在Java应用程序中与Oracle数据库进行交互。Oracle JDBC驱动分为多个版本,其中ojdbc5和ojdbc6是两个重要的版本,尤其针对Oracle数据库11g...

    oracle 11g 32位客户端(完整版)

    7. **连接管理**:通过Easy Connect字符串或使用连接管理器(如Oracle SQL Developer),用户可以方便地管理和连接多个数据库实例。 8. **安全性**:Oracle 11g客户端支持多种安全特性,包括身份验证、授权、加密...

    oracle jdbc

    **连接字符串:** - 规定了与Oracle数据库建立连接的所有必要信息,如URL、端口、服务名等。 - 示例:`jdbc:oracle:thin:@//localhost:1521/xe` **安全性:** - 使用用户名和密码进行身份验证。 - 支持SSL/TLS加密...

    oracle迁移达梦常见问题汇总

    本文主要结合之前一次oracle迁移达梦的项目,将碰到的问题以及一系列踩过的坑列举出来供大家参考,数据库版本是达梦7。(本文中涉及到的部分对象名已用sch1,tab1等方式替换) 1、整体情况 迁移过程中失败任务数低于5%...

    oracle相关文档

    2. 数据类型:Oracle支持多种数据类型,如CHAR、VARCHAR2(可变长度字符串)、NUMBER(数字)、DATE(日期和时间)、CLOB(大对象,如文本)、BLOB(二进制大对象)等。 3. 索引:用于提高查询性能,有B树索引、...

    oracle使用教程

    例如,`TO_CHAR`函数可以将日期或数字转换为字符串,`UPPER`和`LOWER`函数可以分别将文本转换为大写和小写。还有`SUBSTR`用于提取字符串的一部分,`INSTR`则用于查找子串的位置。掌握这些函数,可以极大地提高SQL...

    ruoyi-Oracle版本

    Oracle数据库支持多种数据类型,包括数值、字符串、日期、二进制以及自定义对象类型,还提供了丰富的SQL扩展和PL/SQL编程语言,使得开发者可以创建复杂的存储过程和触发器。 在"ruoyi-Oracle版本"中,我们可以期待...

    oracle9i精简客户端

    通过使用TNSNAMES.ORA配置文件,你可以定义和管理数据库服务的连接字符串。 2. **SQL*Plus**:这是一个命令行工具,用于执行SQL查询、PL/SQL块以及数据库管理任务。SQL*Plus是数据库管理员和开发人员常用的工具,...

Global site tag (gtag.js) - Google Analytics