引子:
本項目在老電腦上用的是oracle10g,換新電腦裝的是oracle11g,但運行項目本沒有什么關系,本來說創建個用戶,用PLSQL手工導入數據,再改幾下配置文件即可跑起來--但實際啟動中遇到以下異常導致eclipse不能啟動:
2016-01-25 11:34:39,694 DEBUG (com.mchange.v2.resourcepool.BasicResourcePool:1831) - An exception occurred while acquiring a poolable resource. Will retry.
java.sql.SQLException: Listener refused the connection with the following error:
ORA-12505, TNS:listener does not currently know of SID given in connect descriptor
at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:412)
at oracle.jdbc.driver.PhysicalConnection.<init>(PhysicalConnection.java:531)
at oracle.jdbc.driver.T4CConnection.<init>(T4CConnection.java:221)
at oracle.jdbc.driver.T4CDriverExtension.getConnection(T4CDriverExtension.java:32)
at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:503)
at com.mchange.v2.c3p0.DriverManagerDataSource.getConnection(DriverManagerDataSource.java:134)
at com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:182)
at com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:171)
at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool$1PooledConnectionResourcePoolManager.acquireResource(C3P0PooledConnectionPool.java:137)
at com.mchange.v2.resourcepool.BasicResourcePool.doAcquire(BasicResourcePool.java:1014)
at com.mchange.v2.resourcepool.BasicResourcePool.access$800(BasicResourcePool.java:32)
at com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask.run(BasicResourcePool.java:1810)
at com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread.run(ThreadPoolAsynchronousRunner.java:547)
Caused by: oracle.net.ns.NetException: Listener refused the connection with the following error:
ORA-12505, TNS:listener does not currently know of SID given in connect descriptor
at oracle.net.ns.NSProtocol.connect(NSProtocol.java:385)
at oracle.jdbc.driver.T4CConnection.connect(T4CConnection.java:1042)
at oracle.jdbc.driver.T4CConnection.logon(T4CConnection.java:301)
... 12 more
該異常屬於第一次遇到,而且詭異的是,我用cmd面板、PLSQL、sqldeveloper 這幾種方式連接都正常,唯獨能不能再eclipse上連接,然后百度一搜,有很多答案,但基本上都是一個--修改Oracle的 listener.ora 文件,如下面的博文:
http://blog.csdn.net/hxl122lcq/article/details/7542462
但用此方法解決失敗。用此方法的解決的所針對的版本的基本上都是10g的,我的是11g的,但應該不是這個原因引起解決失敗的。
現在已經解決了,這是我當前的 listener.ora 文件:
# listener.ora Network Configuration File: D:\oracle11g\product\11.2.0\dbhome_1\network\admin\listener.ora # Generated by Oracle configuration tools. SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (SID_NAME = CLRExtProc) (ORACLE_HOME = D:\oracle11g\product\11.2.0\dbhome_1) (PROGRAM = extproc) (ENVS = "EXTPROC_DLLS=ONLY:D:\oracle11g\product\11.2.0\dbhome_1\bin\oraclr11.dll") ) ) LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521)) (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521)) ) ) ADR_BASE_LISTENER = D:\oracle11g
上面是我現在的 listener.ora 文件,也是oracle11g默認的 listener.ora 文件,本來我已經用網上的方法把此文件修改成以下的配置:
# listener.ora Network Configuration File: D:\oracle11g\product\11.2.0\dbhome_1\network\admin\listener.ora # Generated by Oracle configuration tools. SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (SID_NAME = CLRExtProc) (ORACLE_HOME = D:\oracle11g\product\11.2.0\dbhome_1) (PROGRAM = extproc) (ENVS = "EXTPROC_DLLS=ONLY:D:\oracle11g\product\11.2.0\dbhome_1\bin\oraclr11.dll") ) (SID_DESC = (GLOBAL_DBNAME = ORCL) (ORACLE_HOME = D:\oracle11g\product\11.2.0\dbhome_1) (SID_NAME = ORCL) ) ) LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521)) (ADDRESS = (PROTOCOL = TCP)(HOST = 10.127.0.34)(PORT = 1521)) ) ) ADR_BASE_LISTENER = D:\oracle11g
注:紅色字體為新增內容。
可是是什么時候它又恢復了默認配置?--我不得而知(我在改后應該沒有進行恢復)。--不管它了,總之最重要的結論是:網上的這種解決方式並不能解決我的問題!那我是如何解決的呢?--其實我也不太清楚,應該是下面的某一節點、行為解決了此問題。下面是我的解決過程:
先貼出我的相關配置文件:
jdbc.properties (注:用的是c3p0)
#hibernate.connection.provider_class=com.jolbox.bonecp.BoneCPDataSource #hibernate.connection.provider_class=com.jolbox.bonecp.provider.BoneCPConnectionProvider # c3p0 hibernate.connection.provider_class=com.mchange.v2.c3p0.ComboPooledDataSource hibernate.connection.driver_class=oracle.jdbc.driver.OracleDriver #hibernate.connection.url=jdbc\:oracle\:thin\:@116.252.178.236\:1521\:orcl hibernate.connection.url=jdbc\:oracle\:thin\:@localhost\:1521\:orcl hibernate.connection.username=mynewdpi hibernate.connection.password=root bonecp.idleMaxAge=6 bonecp.idleConnectionTestPeriod=6 bonecp.partitionCount=3 bonecp.acquireIncrement=5 bonecp.maxConnectionsPerPartition=6 bonecp.minConnectionsPerPartition=2 bonecp.statementsCacheSize=5 bonecp.releaseHelperThreads=3 hibernate.dialect=org.hibernate.dialect.Oracle10gDialect hibernate.show_sql=true hibernate.cache.provider_class=org.hibernate.cache.EhCacheProvider hibernate.cache.use_query_cache=true
applicationContext.xml
<!--配置bonecp連接池 --> <bean id="dataSource" class="${hibernate.connection.provider_class}" > <property name="driverClass" value="${hibernate.connection.driver_class}" /> <property name="jdbcUrl" value="${hibernate.connection.url}" /> <property name="user" value="mynewdpi"/> <property name="password" value="root"/> </bean>
1.配置SID的環境變量
新建這個環境變量 值為orcl
