oracle 10g中的幾個概念(sid/db_name/....)

qinwen740發表於2010-04-30

一、資料庫名
1.資料庫名的概念

     資料庫名(db_name)就是一個資料庫的標識,就像人的身份證號一樣。如果一臺機器上裝了多全資料庫,那麼每一個資料庫都有一個資料庫名。在資料庫安裝或建立完成之後,引數DB_NAME被寫入引數檔案之中。

資料庫名在$ORACLE_HOME/admin/db_name/pfile/init.ora檔案中

###########################################
# Database Identification
###########################################
db_domain=""
db_name=orcl
    在建立資料庫時就應考慮好資料庫名,並且在建立完資料庫之後,資料庫名不宜修改,即使要修改也會很麻煩。因為,資料庫名還被寫入控制檔案中,控制檔案是以 二進位制型式儲存的,使用者無法修改控制檔案的內容。假設使用者修改了引數檔案中的資料庫名,即修改DB_NAME的值。但是在Oracle啟動時,由於引數文 件中的DB_NAME與控制檔案中的資料庫名不一致,導致資料庫啟動失敗,將返回ORA-01103錯誤。

2.資料庫名的作用

     資料庫名是在安裝資料庫、建立新的資料庫、建立資料庫控制檔案、修改資料結構、備份與恢復資料庫時都需要使用到的。
     有很多Oracle安裝檔案目錄是與資料庫名相關的,如:
     winnt: F:\oracle\product\10.2.0\oradata\DB_NAME\...

     又如引數檔案pfile:
     winnt: F:\oracle\product\10.2.0\admin\DB_NAME\pfile\init.ora.54200885729

     如果控制檔案損壞或丟失,資料庫將不能載入,這時要重新建立控制檔案,方法是以nomount方式啟動例項,然後以create controlfile命令建立控制檔案,當然這個命令中也要指明DB_NAME。

3.修改資料庫名

  建議:應在建立資料庫時就確定好資料庫名,資料庫名不應作修改,因為修改資料庫名是一件比較複雜的事情。
  現在就來說明一下,如何在已建立資料之後,修改資料庫名。步驟如下:
(1)關閉資料庫。
(2)修改資料庫引數檔案中的DB_NAME引數的值為新的資料庫名。
(3)以NOMOUNT方式啟動例項,修建控制檔案(有關建立控制檔案的命令語法,請參考oracle文件)

4.查詢當前資料庫名

    方法一:  select name from v$database;
    方法二:show parameter db
    方法三:檢視引數檔案

二、資料庫例項名

1.資料庫例項名的概念(instance_name)
      先來解釋以下,例項是什麼東西。例項是訪問Oracle資料庫所需的一部分計算機記憶體和輔助處理後臺程式,是由程式和這些程式所使用的記憶體(SGA)所構成一個集合,它根本不需要一個與其相關聯的資料庫,沒有任何資料檔案也可以啟動例項。下面是Oralce的啟動過程:
   sqlplus / as sysdba
   sql>startup nomount #啟動了一個例項,現在SGA分配了,程式在執行,除資料庫所有的東西都啟動了
   sql>alter database mount #利用控制檔案(init.ora檔案中指定)定位重作檔案、資料檔案、臨時檔案
   sql>alter database open #資料庫可供任何人通過這個例項訪問。
    所以可以這麼理解:大家訪問Oracle都是訪問一個例項,但這個例項如果關聯了資料庫檔案,就是可以訪問的,如果沒有,就會得到例項不可用的錯誤。
    例項名指的是用於響應某個資料庫操作的資料庫管理系統的名稱。她同時也叫SID。例項名是由引數instance_name決定的。如果這個引數不被指定(即instance_name沒有被指定為任何值),那麼例項的名字由該使用者的環境變數ORACLE_SID(注意這裡是大寫)決定。在windows平臺下,則是登錄檔中oracle_sid值決定。

2.例項和資料庫   
    例項和資料庫之間的區別如下:
   (1) 例項是臨時的,它只在相關的程式和記憶體集合存在時存在;資料庫是永久的,只要檔案存在它就存在
   (2) 一個例項在其生存期內可安裝和開啟單個資料庫;資料庫可以被很多例項安裝和開啟,或者一個接一個的例項安裝和開啟,或者由多個例項同時安裝和開啟(RAC)
      順便提一下RAC,簡單來說RAC就是多個例項同時開啟一個資料庫檔案的系統,在結構上是多臺機器,每天機器執行一個例項,每個例項都開啟同一個資料庫 (這個是用磁碟共享技術實現的),這些例項之間需要同步快取記憶體,這樣保證多個例項是完全一致的,不會相互衝突乃至覆蓋。

      資料庫例項名(instance_name)用於對外部連線。在作業系統中要取得與資料庫的聯絡,必須使用資料庫例項名。例如,要去連線一個資料庫伺服器,就必須知道其資料庫例項名,只知道資料庫名是沒有用的。與資料庫名不同,在資料安裝或建立資料庫之後,例項名可以被修改。數 據庫名和例項名可以相同也可以不同。在一般情況下,資料庫名和例項名是一對一的關係,但如果在oracle並行伺服器架構(即oracle實時應用叢集) 中,資料庫名和例項名是一對多的關係(一個資料庫對應多個例項,同一時間內使用者只一個例項相聯絡,當某一例項出現故障,其它例項自動服務,以保證資料庫安 全執行) 。
3.查詢當前資料庫例項名

方法一:select instance_name from v$instance;
方法二:show parameter instance

三、ORACLE_SID

    在實際中,對於資料庫例項的標識有時使用例項名,有時使用ORACLE_SID,它們有什麼區別呢?

(ORACLE_SID)
OS

    上圖表示例項名instance_name、ORACLE_SID與資料庫及作業系統之間的關係,雖然這裡列出的兩個引數都是資料庫例項名,但 instance_name引數是ORACLE資料庫的引數,此引數可以在引數檔案中查詢到;而ORACLE_SID引數則是作業系統環境變數,與 ORACLE_BASE、ORACLE_HOME等用法相同,用於和作業系統互動。也就是說,在作業系統中要想得到例項名,就必須使用ORACLE_SID。且ORACLE_SID必須與instance_name的值一致,否則,你將會收到一個錯誤,在winnt平臺,是“TNS:協議介面卡錯誤”。

四、資料庫域名與全域性資料庫名

 1.概念與聯絡  

     使用資料庫名(da_name)對一個資料庫進行唯一標識,這種表示對於單個資料庫是足夠的,但是隨著由多個資料庫構成的分散式資料庫的普及,這種命令數 據庫的方法給資料庫的管理造成一定的負擔,因為各個資料庫的名字可能一樣,造成管理上的混亂。為了解決這種情況,引入了db_domain引數,這樣在數 據庫的標識是由db_name和db_domain兩個引數共同決定的,避免了因為資料庫重名而造成管理上的混亂。這類似於互連網上的機器名的管理。我們 將db_name和db_domain兩個引數用‘.’連線起來,表示一個資料庫,並將該資料庫的名稱稱為global_name,即它擴充套件了 db_name。db_name引數只能由字母、數字、’_’、’#’、’$’組成,而且最多8個字元。

     資料庫域名(db_domain):定義一個資料庫所在的域,該域的命名同網際網路的’域’沒有任何關係,只是資料庫管理員為了更好的管理分散式資料庫而根據實際情況決定的。當然為了管理方便,可以將其等於網際網路的域。

    全域性資料庫名(global_name):對一個資料庫(Oracle database)的唯一標識,oracle建議用此種方法標識資料庫。該值是在建立資料庫時決定的,預設值為db_name. db_domain。在以後對引數檔案中db_name與db_domain引數的任何修改不影響global_name的值,如果要修改 Global_name,只能用alter database rename global_name to 命令進行修改,然後修改相應引數。

2.查詢資料庫域名

       方法一:select value from v$parameter where name = 'db_domain';
       方法二:show parameter domain
       方法三:在引數檔案中查詢

3.例子

全國交通GIS系統的分散式資料庫,其中:
吉林節點: jl.jtgis
吉林長春節點: cc.jl.jtgis
河北節點: hb.jtgis
河北石家莊節點:sjz.hb.jtgis
這些就是資料庫域名,資料庫域名在存在於引數檔案中,她的引數是db_domain.
全域性資料庫名=資料庫名+資料庫域名,如前述福建節點的全域性資料庫名是:orcl.jl.jtgis

五、資料庫服務名    
      該引數是oracle8i新引進的。在8i以前,我們用SID來表示資料庫的一個例項,但是在Oracle的並行環境中,一個資料庫對應多個例項,這樣就需要多網路服務名,設定繁瑣。為了方便並行環境中的設定,引進了service_name引數。該引數對應一個資料庫,而不是一個例項,而且該引數有許多其它的好處。
    該引數的預設值為db_name.db_domain,即等於global_name.如果資料庫有域名,則資料庫服務名就是全域性資料庫名;否則,資料庫 服務名與資料庫名相同。一個資料庫可以對應多個service_name,以便實現更靈活的配置。該引數與SID沒有直接關係,即 service_name 不必與SID一樣。
      從Oracle8i開始的oracle網路元件,資料庫與客戶端連線的主機字串使用的是資料庫服務名。之前用的是SID,即資料庫例項名。

查詢資料庫服務名
     方法一:select value from v$parameter where name = 'service_name';
     方法二:show parameter service_name

六、網路服務名

      網路服務名(net_service_name),又可以稱為資料庫別名(database alias)。是客戶端程式訪問資料庫時所需要,遮蔽了客戶端如何連線到伺服器端的細節,實現了資料庫的位置透明的特性。網路服務名被記錄在 tnsnames.ora檔案中。

可以通過netmgr來新建網路服務名。

  網路服務名是從客戶端的角度出發,當客戶端連線遠端資料庫或其他服務時,可以指定網路服務名。因此需要使用一個或多個命名方法將此Net服務名解析為連線資料庫或其他服務的連線描述符,看下面:

  [本地]——將儲存在本地客戶機的tnsnames.ora檔案中的網路服務名解析為連線描述符。
  [Oracle Names]——由Oracle名字伺服器提供為網路上的每個Oracle Net服務提供解析方法
  [主機名]——通過TCP/IP環境中的主機別名連線到Oracle資料庫服務
  [Sun NIS]/[DCE CDS]——專用系統用的,在Windows 2000系統環境下不適用

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

相關文章