2014-09-21 312 views
1

英語不是我的母語,請理解使用Oracle SQLDeveloper時,SID和服務名稱有什麼不同?

當我嘗試登錄像通過的SQLDeveloper系統/密碼SYSDBA到Oracle(Linux版)(窗口)

它失敗時,通過服務名稱,並返回ORA-0131:權限不足

但SID?成功通過

有什麼分歧?以及如何連接服務名稱?

+0

不知道你在問什麼。請顯示您嘗試執行的命令等。 – OldProgrammer 2014-09-21 13:19:02

+0

我的Oracle數據庫版本是什麼? – 2014-09-21 15:15:13

+0

默認情況下,sysdba角色未被授予「系統」帳戶。當你指定'SID'(客戶端和服務器在同一臺計算機上)並連接成'sysdba'時,你將使用OS認證 - 只要操作系統用戶在DBA組中,oracle用戶名和密碼就會被忽略。當你使用'service name'並連接成'sysdba'時,密碼文件將被使用,如果'sysdba'角色沒有被授予該用戶(用戶不在密碼文件中),你會得到'ORA- 0131'錯誤。 – 2014-09-21 15:21:00

回答

3

托馬斯凱特beatifully解釋的區別:

服務名稱是更靈活的比SID會。

數據庫可以使用一個或多個服務名稱向偵聽器動態註冊。實際上,多個數據庫可以使用相同的服務名稱向偵聽器註冊(請考慮一個集羣環境,其中您有多個實例,所有實例都是同一個數據庫)。

另一方面,數據庫具有單個SID。一個單一的SID轉到單個數據庫。這是一種純粹的1:1關係。

服務是多對多的關係。

服務名稱與動態註冊一起使用 - 數據在啓動後與監聽器註冊。一旦這樣做,你可以連接。

隨着SID - 這更像是告訴聽衆:「我希望你能連接到這個特定的數據庫,我所知道的‘地址’,在這裏你走」

與服務 - 你問聽衆讓您可以聯繫可以爲您的請求提供服務的數據庫,即使用該服務註冊的數據庫。

這裏的更多信息,https://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:1508737000346067364

類似的問題被問在堆棧中斷6年前,How SID is different from Service name in Oracle tnsnames.ora

在您的測試環境,玩弄tnsnames.oralistener.ora。 AFAIK,從12c開始,Oracle只使用service_name,因爲它靈活並且有許多關係。如果我發現它不正確,我將從文檔中進行交叉驗證。

+0

感謝@Glenn的編輯。事實上,這是***許多對一般***的關係。但是,作爲一個結論,我特別針對OP的案例說了一對多。 – 2014-09-21 15:48:32

+0

哇謝謝@Lalit庫馬爾B但我不使用tnsnames.ora和listener.ora我沒有安裝Oracle客戶端 – Vert 2014-09-22 17:51:17

+0

關於'tnsnames.ora'和'listener.ora',這取決於您是否連接到數據庫本地或通過網絡。 – 2014-09-22 17:54:14

相關問題