程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle教程 >> ORA-12154TNS無法解析指定的連接標識符

ORA-12154TNS無法解析指定的連接標識符

編輯:Oracle教程

又是這個百無聊賴的問題,雖然問題芝麻點大,卻讓我們好找啊!

很久沒有安裝oracle了,今天安裝11g的時候,用PLSQL Developer連接時,就出現了這個俗不可耐的問題:ORA-12154 TNS無法解析指定的連接標識符。我自認為安裝的時候已經很小心翼翼了,結果還是出了纰漏,於是乎,我抱著不解決問題誓不罷休的決心開始一步步排查問題,功夫不負有心人,最終得以解決。

下面我詳細給大家介紹解決問題的思路:

首先搞清楚問題的主體有兩個:oracle服務和PLSQL Developer。

一、先排查oracle服務這邊。

1、開啟服務和監聽

命令行輸入:lsnrctl start

或者界面操作 右鍵 我的電腦-->管理-->服務和應用程序-->服務,右鍵點擊OracleOraDb11g_home1TNSListener-->啟動類型-->自動(延遲啟動),這樣啟動的好處是只要在使用oracle服務監聽的時候才啟動,節約內存。當然,在啟動服務監聽後順便啟動服務。右鍵點擊 OracleServiceORCL 與上面同樣操作。

監聽啟動之後可以查看監聽詳細狀態。命令行輸入:lsnrctl status。

監聽和服務都啟動成功之後,再用PLSQL Developer連接試一下,如果可以,下面步驟可以省略,如果不行,請看下面第二步。

2、用sqlplus測試連接

命令行輸入:sqlplus/nolog

再輸入:conn 用戶名/密碼 @ 實例 as sysdba 。示例:conn sys/123456@orcl as sysdba 或者 conn system/123456@orcl as sysdba。

說明:用戶名和密碼是在安裝oracle將要結束時,有個口令管理的選項進入設置的,用戶名有很多,比如sys,system,scott,但是密碼要自己設置。

如果能連接上,則可繼續閱讀下文,如果連接不上,則可以就此止步,去研究oracle安裝哪裡出了問題。

為了檢測更加保險,我們還可以ping oracle服務。命令行輸入:tnsping localhost:1521/orcl。如果出現“OK”字樣,可表示ping 通。

試著PLSQL Developer繼續連接,如果還連接不上,則繼續下文。

仔細檢查D:\app\Administrator\product\11.2.0\dbhome_2\NETWORK\ADMIN 中tnsnames.ora文件內容有沒有錯誤,比如多了空格啊什麼的,特別是地址指向。不過一般在第一次使用的時候是不需要改動裡面的東西。這裡注意了,oracle 11g 安裝完之後,安裝目錄下會有兩個dbhome。dbhome_1和dbhome_2,兩個裡面都有tnsnames.ora。我們要檢查的是dbhome_2文件夾裡的tnsnames.ora。

二、PLSQL Developer

以上流程如果比較順利,基本可以排除oracle服務的問題。我們再把問題轉向PLSQL Developer。

1、打開PLSQL Developer,先不登錄,點擊取消,接著我們照樣進入了操作主界面,點擊菜單欄中 工具-->首選項-->連接,右邊選擇oracle客戶端,選中你安裝的,然後點擊應用,確定即可。

2、重新登錄,填上你剛剛ping oracle服務的用戶名、密碼和實例。再連接,如果還連接不上,把數據庫實例加上主機名和端口號。示例:localhost:1521/orcl,這中配置是和tnsnames.ora配置一一對應的。再連接試試,必須成功,再不成功,那就超出我個人能力范圍了,呵呵~

下面給出tnsnames.ora原汁原味的配置格式:

# tnsnames.ora Network Configuration File: d:\app\Administrator\product\11.2.0\dbhome_2\network\admin\tnsnames.ora
# Generated by Oracle configuration tools.

LISTENER_ORCL =
  (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))

ORACLR_CONNECTION_DATA =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
    )
    (CONNECT_DATA =
      (SID = CLRExtProc)
      (PRESENTATION = RO)
    )
  )

  ORCL =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = orcl)
    )
  )
說明:
1、如果是我們可以配置多個數據庫實例,orcl是其中之一。當然我們可以繼續添加其他不同的實例,方法是,在tnsnames.ora中添加諸如如下代碼:
ORCL2 =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = orcl)
    )
  )
這樣我們就在本地服務上多了一個orcl2的實例,我們可以試一試。
2、當然我們也可以配置遠程的oracle服務,原理一樣,只是修改host以及端口號,代碼如下:
  REMOTEORCL=
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.2.105)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = orcl)
    )
  )
這樣在登錄時候,填寫對應的實例、用戶名和密碼就搞定了。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved