欢迎进入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客户端连接不稳定的解决方法-LMLPHP

09-10 05:44