ORA-12505, TNS:listener does not currently know of SID given in connect descriptor


引子:

本項目在老電腦上用的是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的環境變量

在環境變量里面的系統變量新建ORACLE_SID
新建這個環境變量  值為orcl 
 
注:至此啟動項目,異常依舊。
 
2.拿一個oracle小項目做實驗進行連接。
這是我下載一個簡單的用戶登錄、管理的小項目下載地址: http://download.csdn.net/download/zxl07370330/3469358 
把它放到eclipse上,創建用戶,一個用戶及一條數據,登錄成功!
 
至此再啟動項目,連接成功!
 
小結:很多時候,我們在網上找答案,一般來說,搜索最多的答案成功幾率是最大的--但事實不總是這樣。有時候,憑直覺和經驗你會知道某個答案是比較靠譜的,雖然它並不是頭條。有時候你的問題並不屬於那些回答最多的答案,那么你的答案是什么--還得說靠自己的動手實踐。本篇博客看下來應該是一件很簡單的事情,但大多時間都是按照網上說的那條搞來搞去也沒搞出來-- 總之最后的答案是與 listener.ora 文件無關,但要說是與SID的環境變量的設置有關--但我設置完重啟eclipse也不行啊,為什么先連個小項目后成功,再連大項目也成功呢?我不得而知,現在只能在最后給自己的一個推測:
本來按照網上的做法修改listener.ora 文件是不成功的,再增加SID環境變量也不成功,后來在連接小項目時應該是把listener.ora 文件恢復成了默認配置,再加上SID的環境變量的設置,因此成功了。

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM