程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle教程 >> ora-12514tns監聽程序無法識別連接描述符中請求的服務

ora-12514tns監聽程序無法識別連接描述符中請求的服務

編輯:Oracle教程

ora-12514tns監聽程序無法識別連接描述符中請求的服務


今天,遠程連接linux服務器時遇到這樣一個錯誤,tnsnames.ora 和 listener.ora文件配置都沒有錯誤 但是就是連接不上 tnsping 也是正常的 但用plsql連接的時候總是報錯 ora-12514 tns 監聽程序無法識別連接描述符中請求的服務,因為連接本地數據庫時沒有問題的 所以監聽程序應該沒問題,接下來就查看tnsnames.ora 發現還是這裡出了問題,其實報錯報的已經說的很明確了 無法識別連接描述符中請求的服務 說明SID 和 服務名 是不一樣的 我把 SERVICE_NAME 改成了SID 然後重啟了監聽程序 連接成功

以下是連接失敗時候的tnsnames.ora文件

yanzhao_orcl =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 220.194.59.37)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)

修改後的tnsnames.ora文件

yanzhao_orcl =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 220.194.59.37)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SID= orcl)
)
)

tnsping的截圖

\

寫到這裡 就去網上查了一下 SID和server_name 的關系

在oracle中SID必須等於instance_name(實例名) 這裡可以簡單的記作 SID就是實例名

1. SID是實例名,實例名指的是用於響應某個數據庫操作的數據庫管理系統的名稱。實例名是由初始化參數文件的參數instance_name決定的。如果這個參數不被指定(即instance_name沒有被指定為任何值),那麼實例的名字由該用戶的環境變量ORACLE_SID(注意這裡是大寫)決定。在windows平台下,則是注冊表中oracle_sid值決定。

2. SERVICE_NAME指的是listener中的全局數據庫名:這個名字是由listener.ora中GLOBAL_DBNAME參數決定的。這個名字代表的是客戶端連接到數據庫時,tnsnames.ora中SERVICE_NAME參數所對應的值。

 

3. 連接字符串 配置tnsname.ora時,可以用SID,也可以用SERVICE_NAME. 注意這兩個值不一定相同,具體要看數據庫服務器中的配置。 問題就出在第三點這裡,如果SID和服務名一樣 當然連接也不會出錯,但如果不一樣,就是報ora-12514 這個具體還要看服務器的配置信息。

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