Oracle數據庫名、實例名、服務名之間的區別與聯繫

  • 數據庫名與SID如下圖所示,在沒有數據庫域名時,全局數據庫名與數據庫名爲同一個值
    在這裏插入圖片描述
  • 查詢數據庫名稱SQL:
SELECT NAME FROM V$DATABASE;
  • 查詢數據庫當前實例名:
 SELECT INSTANCE_NAME FROM V$INSTANCE;

數據庫名
數據庫名是存儲在控制文件中的名稱,它代表的是數據庫,也就是數據庫包含的所有的物理文件的總稱。

服務名
SERVICE_NAME指的是listener中的全局數據庫名:這個名字是由listener.ora中GLOBAL_DBNAME參數決定的。SERVICE_NAME是Oracle8i新引進的,8i之前一個數據庫只能有一個實例。8i之後一個數據庫可以對應多個實例,例如RAC。爲了充分利用所有實例,並且令客戶端連接配置簡單,ORACLE提出了SERVICE_NAME的概念。該參數直接對應數據庫,而不是某個實例。

實例名
用於響應某個數據庫操作的數據庫管理系統的名稱。實例名是由初始化參數文件的參數instance_name決定的。如果這個參數不被指定(即instance_name沒有被指定爲任何值),那麼實例的名字由該用戶的環境變量ORACLE_SID(注意這裏是大寫)決定。一個數據庫可以有多個實例,例如RAC,實例名(SID)用於標識數據庫內的每一個實例的名稱

在這裏插入圖片描述
通俗地講,SID是對內的,是實例級別的一個名字,用來內部之間稱呼用。SERVICE_NAME是對外的,是數據庫級別的一個名字,用來告訴外面的人!

  • JDBC連接數據庫的三種方式:
格式一:jdbc:oracle:thin:@//<host>:<port>/<service_name>
通過SERVICE_NAME連接Oracle數據庫,適合於單實例和多實例數據庫
格式二:jdbc:oracle:thin:@<host>:<port>:<SID> 
通過實例名連接數據庫,RAC環境下實例名不唯一,不能充分利用數據庫資源
格式三:jdbc:oracle:thin:@<TNSNAME> 
通過本地配置的TNSNAME

以上三種方式常用一和三!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章