DB_NAME、DB_UNIQUE_NAME、SERVICE_NAME和INSTANCE_NAME等的區別

dbhelper發表於2017-10-26
【轉載】DB_NAME、DBID、DB_UNIQUE_NAME、SERVICE_NAME、SID、INSTANCE_NAME、GLOBAL_DATABASE_NAME

搭建DG時,突然想起oracle這些為數眾多的name,以下是概念整理,僅代表個人觀點

DB_NAME:

①是資料庫名,長度不能超過8個字元,記錄在datafile、redolog和control file中

②在DataGuard環境中DB_NAME相同而DB_UNIQUE_NAME不同

③在RAC環境中,各個節點的DB_NAME 都相同,但是INSTANCE_NAME不同

④DB_NAME還在動態註冊監聽的時候起作用,無論是否定義了SERVICE_NAME,PMON程式都會使用DB_NAME動態註冊監聽

 

DBID:

①DBID可以看做是DB_NAME在資料庫內部的表示,它是在資料庫建立的時候用DB_NAME結合演算法計算出來的

②它存在於datafile和control file中,用來表示資料檔案的歸屬,所以DBID是唯一的,對於不同的資料庫,DB_NAME可以是相同的,但是DBID一定是唯一的,例如在DataGuard中,主備庫的DB_NAME相同,但是DBID一定不同(看過一個很形象的例子,就是可以有同名的人,但是身份證號碼一定不同)

 

DB_UNIQUE_NAME:
①在DataGuard中,主備庫擁有相同的DB_NAME,為了區別,就必須有不同的DB_UNIQUE_NAME

②DB_UNIQUE_NAME在DG中會影響動態註冊的SERVICE_NAME,即如果採用的是動態註冊,則註冊的SERVICE_NAME為DB_UNIQUE_NAME,但是例項還是INSTANCE_NAME,即SID

 

INSTANCE_NAME:

①資料庫例項的名稱,INSTANCE_NAME預設值是SID,一般情況下和資料庫名稱(DB_NAME)相同,也可不同

②initSID.ora 和orapwSID 檔案要與INSTANCE_NAME保持一致

③INSTANCE_NAME會影響程式的名稱

 

SID:

①是作業系統中的環境變數,和ORACLE_HOME,ORACLE_BASE用法相同

②在作業系統中要想得到例項名,就必須使用ORACLE_SID。且ORACLE_SID必須與INSTANCE_NAME的值一致

 

SERVICE_NAME:

①資料庫和客戶端相連是使用的服務名

②在DataGuard中,如果採用動態註冊,建議在主備庫使用相同的service_names

③在DataGuard中,如果採用靜態註冊,建議在主備庫上的listener中輸入相同的服務名(service_name)

④如果採監聽採用了靜態註冊,那麼SERVICE_NAME就等於Listener.ora 檔案中的GLOBAL_DATABASE_NAME的值

 

GLOBAL_DATABASE_NAME:

①GLOBAL_DATABASE_NAME 是listener配置的對外網路連線名稱,可以是任意值

②在客戶端配置監聽的tnsnames.ora 檔案中的service_name 與這個GLOBAL_DBNAME 保持一致就可以了

③配置靜態監聽註冊時,需要輸入SID和GLOBAL_NAME

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8494287/viewspace-2146430/,如需轉載,請註明出處,否則將追究法律責任。

相關文章