java.sql.SQLException: Io : NL Exception was generated錯誤解決(jdbc資料來源問題)
錯誤資訊:
-------------in sendHeartBeats
-------------in sendHeartBeats
2014-03-24 17:37:51,456 ERROR (com.ylkj.drmt.importer.IndicatorDimensionCompostionImporter:226) - T_JJ_YYJC_JJAQJMjava.sql.SQLException: Io : NL Exception was generated
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112)
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:146)
at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:255)
at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:387)
at oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:420)
at oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:165)
at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:35)
at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:801)
at java.sql.DriverManager.getConnection(DriverManager.java:525)
at java.sql.DriverManager.getConnection(DriverManager.java:171)
at com.ylkj.drmt.dataquality.detaildata.service.impl.JoinCheckServiceImpl.getStatNum(JoinCheckServiceImpl.java:64)
at com.ylkj.drmt.dataquality.detaildata.service.impl.JoinCheckServiceImpl.addJoinValidate(JoinCheckServiceImpl.java:203)
at com.ylkj.drmt.dataquality.detaildata.service.impl.JoinCheckServiceImpl$$FastClassByCGLIB$$cbd107bc.invoke(<generated>)
at net.sf.cglib.proxy.MethodProxy.invoke(MethodProxy.java:149)
at org.springframework.aop.framework.Cglib2AopProxy$CglibMethodInvocation.invokeJoinpoint(Cglib2AopProxy.java:700)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:149)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:106)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:89)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
at org.springframework.aop.framework.Cglib2AopProxy$DynamicAdvisedInterceptor.intercept(Cglib2AopProxy.java:635)
at com.ylkj.drmt.dataquality.detaildata.service.impl.JoinCheckServiceImpl$$EnhancerByCGLIB$$f685b5ea.addJoinValidate(<generated>)
at com.ylkj.drmt.dataquality.detaildata.validate.engine.IdvalidateEngine.joinValidate(IdvalidateEngine.java:112)
at com.ylkj.drmt.dataquality.detaildata.validate.engine.DvalidateEngine$1.processor(DvalidateEngine.java:80)
at com.ylkj.drmt.dataquality.detaildata.validate.engine.IdvalidateEngine.run(IdvalidateEngine.java:126)
at java.lang.Thread.run(Thread.java:595)
-------------in sendHeartBeats
-------------in sendHeartBeats
分析解決:
RAC的配置如下:
node1:ip地址192.168.60.132,例項名:rac1,主機名:rac1
node2:ip地址192.168.60.144,例項名:rac2,主機名:rac2
RAC服務名為oratest
我的應用伺服器為apache+weblogic
配置過程如下
1、搜尋了一下,發現提供的連線RAC方法很多,拷貝瞭如下的jdbcURL:
jdbc:oracle:thin:@(description=(address_list= (address=(host=192.168.60.132) (protocol=tcp)(port=1521))(address=(host=192.168.60.144)(protocol=tcp) (port=1521)) (load_balance=yes)(failover=yes))(connect_data=(service_name= oratest)))
但是weblogic報出如下錯誤:
Io 異常: NL Exception was generated;
2、又從網上google、baidu一番,雖然找到n方法,但就是連不上,總是提示這個錯誤;
3、無奈之中,開啟資料庫tnsname.ora,發現其中的配置如下:
oratest=
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = rac1)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = rac2)(PORT = 1521))
(LOAD_BALANCE = yes)
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = oratest)
)
)
於是將jdbcUR修改成:
jdbc:oracle:thin:@(description=(address_list= (address=(host=rac1) (protocol=tcp)(port=1521))(address=(host=rac2)(protocol=tcp) (port=1521)) (load_balance=yes)(failover=yes))(connect_data=(service_name= oratest)))
測試一下,結果竟然成功了;
初步認為是:資料庫服務採用主機名,而在jdbcURL中採用ip地址的方式就會出現NL Exception的問題;
建議:對於連線RAC有問題的情況,最好使用tnsnames.ora中連線字串進行連線;
不知道大家有沒有遇到這樣的問題?