Oracle 11gR2 RAC的JDBC连接串

今天tomcat启动时,连接oracle直接报错,出现ORA-12505的问题,最开始,我以为错误的原因是jdbc连接Oracle的连接串中的sid配置的不对,oracle不能解析连接串中的sid名字,所以拒绝了连接。在连接字串中写入正确的sid即可。

于是,查看数据库中当前的sid:

1
select INSTANCE_NAME from v$instance;

发现sid果然不同,然后将url的sid换成查出来的sid,果然连接上了。
但是我仔细一想,我用原来的sid通过navicat是可以连上oracle的,为什么jdbc会连接不上呢?
查资料得知,对于Oracle的JDBC连接,是支持EZ-Connect写法的,即jdbc:oracle:thin:@Server:1521/Database
但对于Oracle 11gR2 RAC系统,如果Server用了ScanName,Database用了数据库的ServiceName,并不能连接到数据库,而是报SID错误。
原因可能是此种写法,JDBC将Database解析为了数据库的SID。
经多方测试,可用如下写法实现11GR2的数据库连接的负载均衡,特此记录下:
jdbc:oracle:thin:@(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST = scan-name)(PORT = 1521))(CONNECT_DATA = (SERVER = DEDICATED)(SERVICE_NAME = DatabaseServiceName)))

o(╯□╰)o我只要一毛钱的鼓励~~