Oracle數據庫各種名字的區別
數據庫名(DB_NAME)、數據庫實例名(INSTANCE_NAME)、操作系統環境變量(ORACLE_SID)、數據庫服務名(SERVICE_NAME)、數據庫域名(DB_DOMAIN)以及全局數據庫名(GLOBAL_DB_NAME)是幾個使用Oracle數據庫容易混淆的概念。
INSTANCE_NAME一般和DB_NAME相同
INSTANCE_NAME=ORACLE_SID
SERVICE_NAMES=全局數據庫名=db_name+db_domain
- 數據庫名與實例名
1. 數據庫名(DB_NAME)
數據庫名是區分數據的內部標識(即是給Oracle數據庫內部使用的),因為其在數據庫多處保存,並且控制文件中保存是二進制的,所以很難改變其名字。在pfile和spfile中有db_name參數就是它,或者查v$database視圖
內部標記,在數據庫安裝、創建、創建控制文件、修改數據庫結構、使用數據庫備份與恢復時都使用數據庫名(註意這些時候不是用什麽sid。。。),如alter database時都是使用該數值
2. 實例名(Instance_name)
實例是計算機中oracle數據庫的一組進程和內存區域的集合,實例名用於和操作系統間聯系(對外連接使用),數據庫名與實例名之間的關系一般是一一對應關系,有一個數據庫名就有一個實例名,在8i、9i的並行服務器結構中,一個數據庫可以有多個實例(並行服務,一對多關系,一個數據庫對應多個實例,同一時間內用戶只一個實例相聯系,當某一實例出現故障,其它實例自動服務,以保證數據庫安全運行。)。要和一個數據庫服務器相連,必須知道其實例名,光知道數據庫名是沒用的。
INSTANCE_NAME與ORACLE_SID區別
都是指數據庫實例名,但ORACLE_SID是操作系統的環境變量設置,用於和操作系統交互,其取值必須與INSTANCE_NAME相同,也就是說,在操作系統中要想得到實例名,就必須使用ORACLE_SID。此參數與ORACLE_BASE、ORACLE_HOME等用法相同。在數據庫安裝之後,ORACLE_SID被用於定義數據庫參數文件的名稱。通過切換不同的ORACLE_SID來通過操作系統來啟動不同的實例(instance) 。而INSTANCE_NAME可在參數文件中查到,windows下需要到註冊表中定義修改相關參數即ORACLE_SID
- 數據庫域名與服務名
1. 數據庫域名
類似網絡域名的概念,一個數據庫名db_name在不同的域裏可以相同。在安裝時確定(全局數據庫名中填寫),定義規則也相似於網絡定義。參數文件中db_domain,沒有該項則全局數據庫名和數據庫名相同,該數據庫沒有使用域名。
全局數據庫名:=db_name+db_domain
2. 數據庫服務名
數據庫服務名(SERVICE_NAMES),這可不是你在客戶端配置的網絡服務的概念,這是數據庫本身的概念!
SERVICE_NAMES=全局數據庫名(GLOBAL_DB_NAME)=db_name+db_domain
在參數文件中service_names可以查到
在9i新提供的Net Services網絡服務中,推薦使用該種方式連接(Net8i也可配)域名可以容易修改(改參數重起實例可)。
Oracle的內存,從總體上講,可以分為兩大塊:共享部分(主要是SGA)和進程獨享部分(主要是PGA和UGA)。而這兩部分內存裏面,根據功能不同,還分為不同內存池(Pool)和內存區(Area)。
Oracle數據庫各種名字的區別