最近客户上了一套oracle 11g rac,版本11.2.0.4,操作系统使用rhel 6.4 ,今天测试了一下failover功能。由于没有DNS服务器,使用VIP进行客户端failover,tnsnames.ora配置如下:


ORCL =

(DESCRIPTION =

(ADDRESS_LIST =

(LOAD_BALANCE = yes)

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

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

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

)

(CONNECT_DATA =

(SERVICE_NAME = orcl)

(FAILOVER = on)

(TYPE = select)

(METHOD = basic)

(RETRIES = 180)

(DELAY = 5)

)

)

PL/SQL测试过程,针对LOAD_BALANCE可以反复连接,select instance_name from v$instance; 可以验证,会连接到不同的实例。测试结果是1,2,1,2这样连的。


针对failover=on ,TYPE = select 验证也成功,PL/SQL连上select instance_name from v$instance;如果当前是实例一,shutdown实例一,重新select会返回实例二,测试通过。(sqldeveloper一直测试不通过,无论使用TNS方式连接还是JDBC,都不行,不知道为什么)。


本以为大功告成,结果tomcat是以JDBC方式进行连接的,将以上参数配置在连接池后,发现无法实现failover,只能手动重启tomcat才会连存活的实例。Google了一下,按如下方式解决:



proxool自动重新获取连接

我是oracle数据库 加 tomcat。

出现网络或者数据库故障而无法连接到数据库,在恢复正常以后,由于连接是在连接池中持久保存的,会出现连接仍然不可用的情况,这时连接池里的连接实际上都是坏连接,怎么让连接池可以自动重连清除这些坏连接呢?

网上给出的方法是加上

true

我是整合了spring的,把这个参数加上后

class="org.logicalcobwebs.proxool.ProxoolDataSource">

${jdbc.driverClassName}


${jdbc.url}


${jdbc.username}


${jdbc.password}


cims_pool


true







5



100


10


1800000

连接数据库就报另外一个错

Created a new connection but it failed its test

补充: [ Scheduler Warning ] Scheduler Init Servlet failed!
Scheduler Excption: org.springframework.transaction.CannotCreateTransactionExce
ption: Could not open Hibernate Session for transaction; nested exception is org
.hibernate.exception.GenericJDBCException: Cannot open connection
补充:

自己解决了:取消这句话的注释



开启
select sysdate from dual
就可以failover了。