ORA-12505 錯誤解決

lnwxzyp發表於2010-09-13
    在Fedora下安裝了Oracle 10gR2,安裝完成之後,使用netca建立了監聽,建立的時候沒有使用預設的LISTENER和1521埠,而是使用了LISTENER_DELL和1522埠,終端下顯示完成,然後在$ORACLE_HOME/network/admin/tnsnames.ora下增加一個tns別名。
DELL =
  (DESCRIPTION =
    (ADDRESS_LIST = 
      (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1522))
    )
    (CONNECT_DATA = 
      (SERVER = DEDICATED)
      (SID = dell)
    )
  )
加好之後,如下登入
sqlplus /nolog
connect scott/tiger@dell
登入之後就報錯了,ORA-12505,按說監聽方面的錯誤還是很好解決的,結果檢查了監聽也是正常啟動的,但就是無法按照@DELL來登入,將tnsnames.ora裡面SID = dell 改成 SERVER_NAME = dell  還是一直報錯ORA-12505, TNS:listener does not currently know of SID given in connect descriptor。 
      然後發現$ORACLE_HOME/network/admin/目錄下沒有sqlnet.ora檔案,執行netca,設定命名方法,執行之後sqlnet.ora檔案有了,內容如下: 
more sqlnet.oraNAMES.DIRECTORY_PATH= (TNSNAMES)
再次嘗試登入,發現還是同樣的錯誤。於是突然想到Oracle肯定一直是以LISTENER這個並未啟動的監聽來來Oracle提供監聽資訊,而我並沒有使用預設監聽名稱所以造成這個錯誤,於是給監聽檔案listener.ora新增SID資訊。
LISTENER_DELL =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = avon)(PORT = 1522))
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))
    )
  )

SID_LIST_LISTENER_DELL =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = PLSExtProc)
      (ORACLE_HOME = /u01/app/oracle/product/10.2.0/db_1)
      (PROGRAM = extproc)
    )
  )
新增SID資訊 (見藍色加粗字型)
 SID_LIST_LISTENER_DELL =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = PLSExtProc)
      (ORACLE_HOME = /u01/app/oracle/product/10.2.0/db_1)
      (PROGRAM = extproc)
    )
    (SID_DESC =
      (GLOBAL_DBNAME = dell)
      (ORACLE_HOME = /u01/app/oracle/product/10.2.0/db_1)
      (SID_NAME = dell)
    )
  )

加好之後儲存退出 :wq
進行測試,還是報錯,發現tnsnames.ora 裡面我設定的是SERVER_NAME,於是給改成SID = dell 再次測試
sqlplus /nolog
SQL> conn scott/tiger@dell
Connected.
OK,一切正常。
 
後記:在windows下也進行了同樣的嘗試,發現如果不使用LISTENER作為預設監聽名稱 埠不為1521的話,也會導致這個錯誤,而解決方法和上面一致。 不過並沒有嘗試名稱為LISTENER但是埠不為1521的情況。


C:\Windows\system32>lsnrctl
LSNRCTL for 32-bit Windows: Version 10.2.0.3.0 - Production on 13-9月 -2010 23:2
6:34
Copyright (c) 1991, 2006, Oracle.  All rights reserved.
歡迎來到LSNRCTL, 請鍵入"help"以獲得資訊。
LSNRCTL> status
正在連線到 (ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521))
TNS-12541: TNS: 無監聽程式
 TNS-12560: TNS: 協議介面卡錯誤
  TNS-00511: 無監聽程式
   32-bit Windows Error: 61: Unknown error
LSNRCTL> set current_listener LISTENER_DEMO
目前的監聽程式為 LISTENER_DEMO
LSNRCTL> status
正在連線到 (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=scott-PC)(PORT=1522)))
LISTENER 的 STATUS
------------------------
別名                      LISTENER_DEMO
版本                      TNSLSNR for 32-bit Windows: Version 10.2.0.3.0 - Produ
ction
啟動日期                  13-9月 -2010 23:17:13
正常執行時間              0 天 0 小時 9 分 41 秒
跟蹤級別                  off
安全性                    ON: Local OS Authentication
SNMP                      OFF
監聽程式引數檔案          D:\oracle\product\10.2.0\db_1\network\admin\listener.o
ra
監聽程式日誌檔案          D:\oracle\product\10.2.0\db_1\network\log\listener_dem
o.log
監聽端點概要...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=scott-PC)(PORT=1522)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=\\.\pipe\EXTPROC0ipc)))
服務摘要..
服務 "PLSExtProc" 包含 1 個例程。
  例程 "PLSExtProc", 狀態 UNKNOWN, 包含此服務的 1 個處理程式...
命令執行成功
以上為出現ORA-12505錯誤時,監聽的狀態,
以下為修改正常,監聽重啟後的狀態
LSNRCTL> set current_listener LISTENER_DEMO
目前的監聽程式為 LISTENER_DEMO
LSNRCTL> stop
正在連線到 (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=scott-PC)(PORT=1522)))
命令執行成功
LSNRCTL> start
啟動tnslsnr: 請稍候...
TNSLSNR for 32-bit Windows: Version 10.2.0.3.0 - Production
系統引數檔案為D:\oracle\product\10.2.0\db_1\network\admin\listener.ora
寫入D:\oracle\product\10.2.0\db_1\network\log\listener_demo.log的日誌資訊
監聽: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=scott-PC)(PORT=1522)))
監聽: (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=\\.\pipe\EXTPROC0ipc)))
正在連線到 (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=scott-PC)(PORT=1522)))
LISTENER 的 STATUS
------------------------
別名                      LISTENER_DEMO
版本                      TNSLSNR for 32-bit Windows: Version 10.2.0.3.0 - Produ
ction
啟動日期                  13-9月 -2010 23:35:14
正常執行時間              0 天 0 小時 0 分 6 秒
跟蹤級別                  off
安全性                    ON: Local OS Authentication
SNMP                      OFF
監聽程式引數檔案          D:\oracle\product\10.2.0\db_1\network\admin\listener.o
ra
監聽程式日誌檔案          D:\oracle\product\10.2.0\db_1\network\log\listener_dem
o.log
監聽端點概要...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=scott-PC)(PORT=1522)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=\\.\pipe\EXTPROC0ipc)))
服務摘要..
服務 "PLSExtProc" 包含 1 個例程。
  例程 "PLSExtProc", 狀態 UNKNOWN, 包含此服務的 1 個處理程式...
服務 "demo" 包含 1 個例程。
  例程 "demo", 狀態 UNKNOWN, 包含此服務的 1 個處理程式...
命令執行成功

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12216142/viewspace-673732/,如需轉載,請註明出處,否則將追究法律責任。

相關文章