ORACLE中各類NAME的簡介

skuary發表於2011-04-19

ORACLE有很多NAME,初學者是比較容易搞起來。這裡我簡單介紹下,有興趣的同學可以深入下。(當初我也搞了很長時間才弄明白,時間一長感念又有點糊了)

DATBASE GLOBAL NAME

DATBASE GLOBAL NAME 可以簡單的理解為 db_name+domain_name(如果沒有domain_name則database global name等同於db_name) DB NAME 資料庫名 DOMAIN NAME 域名。(這裡的域是ORACLE自定義的域可以與NETWORK上的域相同也可以不同。)

為什麼要有database global name? 主要是為了在分散式環境中更好的管理具有相同DB_NAME的資料庫,以方便維護,減少差錯。(名字可以自定義,系統不會硬性約束的) 比如9C 上海有個PASS9 DB 北京也有個PASS9 DB DB的NAME都叫 MEMDB。為了能夠區分這兩個DB就引進了GLOBAL DB 如果上海的domain_name=sh.the9.com ,db_name=memdb 北京的domain_name=bj.the9.com , db_name=memdb

 上海的database global name 就是 memdb. sh.the9.com 
北京的database global name 就是 memdb. bj.the9.com

database global name 只是個名字定義,預設的情況是等於db_name+點+domain_name。但你也可以定義,在相同Q的domain中也可以定義相同的幾個database global name。。 database global name的定義會影響到 db_link的命名(在global_names引數為'true'的情況下)

db_unique_name

DATBASE UNIQUE NAME

昨天我說的是db_unique_name 即在一定的服務叢集中定義DB的唯一名字。 如在dataguard環境中可能一臺主機有5臺備機。這6臺伺服器具有相同的DB_NAME,DOMAIN_NAME,GLOBAL_NAME。為了管理方便,需要設定一個能夠唯一區別他們的名字。於是db_unique_name就誕生了。

下面簡單介紹下ORACLE其他幾個NAME

INSTANCE NAME

INSTANCE NAME

INSTANCE NAME 例項名稱 預設情況等於SID

SERVICE NAME

SERVICE NAME

SERVICE NAME 面向CLIENT的服務名稱 預設情況等於DATABASE GLOBAL NAME

  在8i以後(含8i),client連線server是通過service name。

下面是client的TNSNAME.ORA中的一段(與SQL SERVER的網路配置一樣, 只不過SQL SERVER的配置是寫在登錄檔中,而ORACLE是寫在TNSNAME.ORA檔案中)


TESDB=

 (DESCRIPTION =
 (ADDRESS_LIST =
   (ADDRESS = (PROTOCOL = TCP)(HOST = 172.18.198.131)(PORT = 1521))
 )
 (CONNECT_DATA =
   (SERVICE_NAME = TESDB)
 )
)

可以看出從客戶端連線DB SERVER需要 3個要素 主機地址,埠號,服務號 (連線的方法是 SQLPLUS 使用者名稱@TESDB) 大多數DB都是這樣的。 當然 SERVICE_NAME可以自定義。比如 你可以把SERVICE_NAME改成 TEST .但在SERVER改完後,需要在CLIENT中的TNSNAME.ORA做相應的修改。否則可能造成客戶端無法連線。

再貼一段TNSNAME.ORA,與上面不同的是,客戶端連線的是RAC環境。 大家都知道RAC是多個INSTANCE 作用於同一個DB.也就是說INSTANCE_NAME有多個,而DB_NAME,DATABAS GLOBAL NAME SERVICE_NAME是一個。


DSRAC1 =

 (DESCRIPTION =
 (ADDRESS = (PROTOCOL = TCP)(HOST = dsrac1-vip)(PORT = 1521))
 (CONNECT_DATA =
   (SERVER = DEDICATED)
   (SERVICE_NAME = dsrac)
   (INSTANCE_NAME = dsrac1)
 )
)

這裡可以看出 當連線 DSRAC1 時(sqlplus sys@ DSRAC1)我連線的INSTANCE 是dsrac1. 這就是 INSTANCE_NAME 的主要作用之一。

ORACLE SID

SID DB的 SYSTEM ID. 這個 SYSTEM ID 主要是和OS相關的。當你定義好SID後 會在主機上建立很多以SID命名的程式 如 ora_psp0_tesdb ora_mman_tesdb ora_dbw0_tesdb ora_lgwr_tesdb ora_ckpt_tesdb ora_smon_tesdb ora_reco_tesdb

因此SID在一臺主機上只能是唯一的。 很多時候我們處理的DB是相對比較簡單的環境,主要是單機(非RAC,非DG,非分散式),在這種情況下預設的名字都是同一的即DB_NAME=INSTANCE_NAME=SERVICE_NAME=GLOBAL_NAME=SID

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

相關文章