- 數據庫名與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
以上三種方式常用一和三!