天天看點

DB_NAME、DB_UNIQUE_NAME、SERVICE_NAME和INSTANCE_NAME等的差別

【轉載】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