【问题描述】
启动应用的过程中,出现如下提示,说明应用无法连接到数据库。
er refused the connection with the followin
g error:
ORA-12505, TNS:listener does not currently know of SID given in connect descriptor
The Connection descriptor used by the client was:
rac1:1521:racdb
)
【处理过程】
由于数据库是RAC环境,因此怀疑是应用jdbc的配置不适用于RAC环境。
hibernate.dialect=org.hibernate.dialect.OracleDialect
iam.jdbc.database=oracle
iam.jdbc.driverClassName:oracle.jdbc.driver.OracleDriver
iam.jdbc.url:jdbc:oracle:thin:@192.168.1.111:1521:username
iam.jdbc.username:username
iam.jdbc.password:password
上面的写法不适用于RAC环境,因此要修改为下面的写法:
hibernate.dialect=org.hibernate.dialect.OracleDialect
iam.jdbc.database=oracle
iam.jdbc.driverClassName:oracle.jdbc.driver.OracleDriver
iam.jdbc.url:jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=rac1)(PORT=1521))(LOAD_BALANCE=YES)(FAILOVER=YES)(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=racdb)))
iam.jdbc.username:username
iam.jdbc.password:password
【参考】
If you have Java application and use JDBC to connect to Oracle database, typically you use the following format to connect:
jdbc:oracle:thin:@<HOST>:<PORT>:<SID>
However, this would not work if you have Oracle RAC database. Following is the correct JDBC connection string for connecting to a RAC database
For 11gR1:
jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=vipaddress_node1)(PORT=1521)) (ADDRESS=(PROTOCOL=TCP)(HOST=vipaddress_node2)(PORT=1521)) (LOAD_BALANCE=no)(FAILOVER=yes))(CONNECT_DATA=(SERVICE_NAME=SID.WORLD)))
For 11gR2:
jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=scan-address)(PORT=1521))(LOAD_BALANCE=YES)(FAILOVER=YES)(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=SID.WORLD)))
Speak Your Mind