WinXP SP2 jdbc连oracle总是报错,但是通过pl/sql可以

抛错如下:
java.sql.SQLException: Io 异常 : Connection refused(DESCRIPTION=(ERR=12518)(VSNNUM=150999297)(ERROR_STACK=(ERROR=(CODE=12518)(EMFI=4))(ERROR=(CODE=12560)(EMFI=4))))
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:134)
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:179)
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:333)
at oracle.jdbc.driver.OracleConnection.<init>(OracleConnection.java:404)
at oracle.jdbc.driver.OracleDriver.getConnectionInstance(OracleDriver.java:468)
at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:314)
at java.sql.DriverManager.getConnection(Unknown Source)

解决方案如下:
在listener.ora加入DIRECT_HANDOFF_TTC_LISTENER = OFF
注意是在listener定义之外,与之并行的。请参见http://lists.suse.com/archive/suse-oracle/2004-Oct/0148.html。
这里说一下,希望对遇到相似问题的难兄难弟有点助益:
至于其原因,就是因为Port的handoff问题(It is always in Changing),这好像与WinXP SP2 Sysytem的工作机制有点冲突,如果查看listener.ora,会发现在每次JDBC连接后记录
(CONNECT_DATA=(SID=foxnicco)(CID=(PROGRAM=)(HOST=__jdbc__)(USER=oracle))) * (ADDRESS=(PROTOCOL=tcp)(HOST=127.0.0.1)(PORT=1975)) * establish * foxnicco * 0
这个(PORT=1975)是每次变化的,大概就是被handoff的吧。
如果还是不能解决,请参见
http://blogs.msdn.com/vsdata/archive/2004/12/17/323719.aspx
http://www.webservertalk.com/archive149-2004-10-426834.html
http://www.itpub.net/2058,1.html

猜你喜欢

转载自chunguangtang.iteye.com/blog/1703911