fhzh0 2009-12-23
在通过JDBC连接RAC的时候,我由于各种原因会出现以下问题。
问题一:通过JDBC连接如果使用ip连接方式
例:
jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS_LIST=
(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.36.6)(PORT=1521))
(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.36.7)(PORT=1521)))
(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=gfront)))
Host={ip地址的方式}在是无法连接到RAC设备的。
会抛出一个NLException异常(NL异常是指你的jdbcurl配置不正确才会出现的异常。)
问题二:在配置过程中如果不了解jdbc连接方式的会省去jdbc:oracle:thin:@url前面的当然这只是我在操作中的疏忽。且"Host="后面赋值必须为主机的名称。ip地址是无法连接的。
正确的RAC配置如下:
jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS_LIST=
(ADDRESS=(PROTOCOL=TCP)(HOST=vip1)(PORT=1521))
(ADDRESS=(PROTOCOL=TCP)(HOST=vip2)(PORT=1521)))
(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=gfront)))
下面是一段Demo代码:
RAC配置环境相关信息
192.168.36.6vip1
192.168.36.7vip2
数据库的端口号为:1521
实例名:gfront1和gfront2
数据库的端口号为:1521
用户:system
密码:111111
packagecom.rac.jdbc.url;
importjava.sql.Connection;
importjava.sql.DriverManager;
importjava.sql.SQLException;
importjava.util.Properties;
publicclassRacUrl{
publicstaticvoidmain(String[]args)throwsSQLException,ClassNotFoundException{
StringconnStr="jdbc:oracle:thin:@(DESCRIPTION="
+"(ADDRESS_LIST="
+"(ADDRESS=(PROTOCOL=TCP)(HOST=vip1)(PORT=1521))"
+"(ADDRESS=(PROTOCOL=TCP)(HOST=vip2)(PORT=1521))"
+")"+"(CONNECT_DATA="+"(SERVER=DEDICATED)"
+"(SERVICE_NAME=gfront)"+")"+")";
intisDBA=1;
Stringjdbc="oracle.jdbc.driver.OracleDriver";
Class.forName(jdbc);
Connectionconn=null;
if(isDBA==1){
Propertiesprops=newProperties();
props.put("user","system");
props.put("password","111111");
props.put("internal_logon","sysdba");
conn=DriverManager.getConnection(connStr,props);
System.out.println(conn==null?"失败":"成功");
}else{
conn=DriverManager.getConnection(connStr,"system","111111");
System.out.println(conn==null?"失败":"成功");
}
}
}