Oracle-11g

sqlplus 怎麼知道ORACLE_SID 指向哪裡?

  • November 29, 2017

據我了解,SID辨識 Oracle 數據庫實例是唯一值。

我可以sqlplus通過更改ORACLE_SID環境變數來設置預設數據庫實例的使用。

但是sqlplus怎麼知道SID點在哪裡呢?

我以為 tnsnames.ora 讓 sqlplus 知道這些資訊,但似乎沒有提供那種資訊。(如果是這樣,sqlplus 什麼時候使用 tnsnames.ora?)

如果您在 SQL plus 中並且只想知道您連接到的實例或數據庫,您可以使用以下內容:

SELECT sys_context('USERENV','INSTANCE_NAME') FROM dual;
SELECT sys_context('USERENV','DB_NAME') FROM dual;

當您使用 SQLPlus 並進行遺贈連接時(例如,不通過偵聽器並且未在連接字元串中指定 SID/服務名稱或使用 TNS 別名),SQLPlus/Oracle 使用 ORACLE_SID 和 ORACLE_HOME 的組合來唯一標識它連接到的實例。

需要注意的重要一點:您可能在一台伺服器上執行多個實例,它們都共享相同的 OH,但它們將具有不同的 SID。或者,您可以從多個 Oracle Home 執行多個實例。一台機器上的兩個實例永遠不會共享相同的 SID 和 OH 組合。

請務必注意,此連接方法僅在您從執行 Oracle 數據庫/偵聽器的伺服器的命令行進行連接時才有效。

如果您從遠端伺服器連接(或者如果您需要連接到特定服務,則從同一伺服器連接 - 例如 12c 中的 PDB),您必須在連接字元串中指定 tnsnames 別名或主機名之一

$$ optional: port $$以及您要連接的服務名稱。 例如,:

sqlplus scott/tiger@hr

這假定客戶端上的 tnsnames.ora 設置了“hr”的別名。此 TNS 別名將包含主機名、埠和 SID/服務名稱。

sqlplus scott/tiger@hostname[:port]/servicename

這將連接到命令行上提供的主機名和 SID/服務名稱。ORACLE_SID、ORACLE_HOME 變數和 TNS 與此連接完全無關,不使用。

一個真實的例子:

sqlplus hr/hr@productiondatabase.company.com:1521/hrdb 

引用自:https://dba.stackexchange.com/questions/126434