欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  数据库

Oracle RAC客户端连接不稳定的解决方法

程序员文章站 2024-02-15 12:00:29
...

欢迎进入Oracle社区论坛,与200万技术人员互动交流 >>进入 Oracle RAC安装完毕后,监听、tnsname.ora按照Oracle默认配置好后,在服务器端用sqlplus连接没有问题,但是用客户端连接,会出现有时候连不上的错误,解决方法: 1、修改监听文件,增加SID_LIST_LIS

欢迎进入Oracle社区论坛,与200万技术人员互动交流 >>进入

  Oracle RAC安装完毕后,监听、tnsname.ora按照Oracle默认配置好后,在服务器端用sqlplus连接没有问题,但是用客户端连接,会出现有时候连不上的错误,解决方法:

  1、修改监听文件,增加SID_LIST_LISTENER,两台机器都要修改,修改完毕后如下:

  LISTENER_ORCL1 =

  (DESCRIPTION_LIST =

  (DESCRIPTION =

  (ADDRESS_LIST =

  (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.1)(PORT = 1521))

  )

  )

  )

  SID_LIST_LISTENER_ORCL1 =

  (SID_LIST =

  (SID_DESC =

  (ORACLE_HOME = /u01/app/oracle/product/11.1.0)

  (SID_NAME = ora1)

  )

  )

  2、修改tnsname.ora,两台机器都要修改,例如第一台机器:

  用Oracle的netca配置的时候,只配置了一个监听LISTENERS_ORCL,手工增加另外两个监听。

  LISTENER_ORCL2 =

  (ADDRESS_LIST =

  (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.2)(PORT = 1521))

  )

  LISTENER_ORCL1 =

  (ADDRESS_LIST =

  (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.1)(PORT = 1521))

  )

  LISTENERS_ORCL =

  (ADDRESS_LIST =

  (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.2)(PORT = 1521))

  (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.1)(PORT = 1521))

  )

  ORCL1 =

  (DESCRIPTION =

  (ADDRESS_LIST =

  (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.1)(PORT = 1521))

  )

  (CONNECT_DATA =

  (SERVICE_NAME = ORCL)

  )

  )

  ORCL2 =

  (DESCRIPTION =

  (ADDRESS_LIST =

  (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.2)(PORT = 1521))

  )

  (CONNECT_DATA =

  (SERVICE_NAME = ORCL)

  )

  )

  ORCL =

  (DESCRIPTION =

  (ADDRESS_LIST =

  (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.1)(PORT = 1521))

  (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.2)(PORT = 1521))

  (LOAD_BALANCE = yes)

  )

  (CONNECT_DATA =

  (SERVER = DEDICATED)

  (SERVICE_NAME = ORCL)

  )

  )

  3、修改pfile,将两个本地监听设置上。

  可以先导出一份spfile,修改完毕后再导入pfile。增加以下三行:

  *.local_listener='LISTENER_ORCL'

  ora1.local_listener='LISTENER_ORCL1'

  ora2.local_listener='LISTENER_ORCL2'

  另外,在启动oralce时,出现ora-32006的错误,数据库倒是起来能用。到网上搜索一通,说是oracle10g以后将*.log_archive_start=TRUE 这个参数去掉了,把这行从spfile中删除了,再启动没有报错。是否真的不需要这个参数,还需要再确认。

  4、oracle驱动

  经测试发现,在oracle RAC环境下,如果down掉一个实例,应用出现以下错误:

  Io 异常: Software caused connection abort: socket write error

  org.apache.cocoon.ProcessingException: error on execute servlet:login: javax.servlet.ServletException: error on execute servlet:login

  cause: java.sql.SQLException: Io 异常: Software caused connection abort: socket write error

  经反复测试,确定原因是oracle的驱动ojdbc14.jar没有放到WEB-INF/lib下的原因。此启动在公共lib下,必须COPY到当前工程下,才能实现fail-over的自动切换.

[1] [2]

Oracle RAC客户端连接不稳定的解决方法