數據庫名,實例名,數據庫域名,全局數據庫名,服務名

一、數據庫名
什麼是數據庫名?

數據庫名就是一個數據庫的標識,就像人的身份證號一樣。他用參數DB_NAME表示,如果一臺機器上裝了多個數據庫,那麼每一個數據庫都有一個數據庫名。在數據庫安裝或創建完成之後,參數DB_NAME被寫入參數文件之中。

在創建數據庫的時候需要指定對應實例名(instance_name)(數據庫名和實例名可以相同也可以不同)。

同時數據庫名會在windows 服務中顯示在OracleServiceORCL最後的四個字符(orcl)。
格式如下:
DB_NAME=myorcl
...
在創建數據庫時就應考慮好數據庫名,並且在創建完數據庫之後,數據庫名不宜修改,即使要修改也會很麻煩。因爲,數據庫名還被寫入控制文件中,控制文件是以二進制型式存儲的,用戶無法修改控制文件的內容。假設用戶修改了參數文件中的數據庫名,即修改DB_NAME的值。但是在Oracle啓動時,由於參數文件中的DB_NAME與控制文件中的數據庫名不一致,導致數據庫啓動失敗,將返回ORA-01103錯誤。

數據庫名的作用
數據庫名是在安裝數據庫、創建新的數據庫、創建數據庫控制文件、修改數據結構、備份與恢復數據庫時都需要使用到的。
有很多Oracle安裝文件目錄是與數據庫名相關的,如:
winnt: d:/oracle/product/10.1.0/oradata/DB_NAME/...
Unix: /home/app/oracle/product/10.1.0/oradata/DB_NAME/...
pfile:
winnt: d:/oracle/product/10.1.0/admin/DB_NAME/pfile/ini.ora
Unix: /home/app/oracle/product/10.1.0/admin/DB_NAME/pfile/init$ORACLE_SID.ora
跟蹤文件目錄:
winnt: /home/app/oracle/product/10.1.0/admin/DB_NAME/bdump/...
另外,在創建數據時,careate database命令中的數據庫名也要與參數文件中DB_NAME參數的值一致,否則將產生錯誤。
同樣,修改數據庫結構的語句alter database, 當然也要指出要修改的數據庫的名稱。
如果控制文件損壞或丟失,數據庫將不能加載,這時要重新創建控制文件,方法是以nomount方式啓動實例,然後以create controlfile命令創建控制文件,當然這個命令中也是指指DB_NAME。
還有在備份或恢復數據庫時,都需要用到數據庫名。
總之,數據庫名很重要,要準確理解它的作用。

查詢當前數據名
方法一:select name from v$database;
方法二:show parameter db
方法三:查看參數文件。

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

二、數據庫實例名(instance_name)
什麼是數據庫實例名?
數據庫實例名是用於和操作系統進行聯繫的標識,就是說數據庫和操作系統之間的交互用的是數據庫實例名。實例名也被寫入參數文件中,該參數爲instance_name,在winnt平臺中,實例名同時也被寫入註冊表。
數據庫名和實例名可以相同也可以不同。
在一般情況下,數據庫名和實例名是一對一的關係,但如果在oracle並行服務器架構(即oracle實時應用集羣)中,數據庫名和實例名是一對多的關係。

 

instance由一個內存區域(SAG)和一組後臺進程組成,其作用是對數據庫進行管理、提高性能, 名字爲SID_NAME,一個instance管理一個數據庫(OPS除外)。

 

數據庫名與實例名之間的關係。
數據庫名與實例名之間的關係一般是一一對應關係,有一個數據庫名就有一個實例名,如果在一個服務器中創建兩個數據庫,則有兩個數據庫名,兩個數據庫實例名,用兩個標識確定一個數據庫,用戶和實例相連接。
但在8i、9i的並行服務器結構中,數據庫與實例之間不存在一一對應關係,而是一對多關係,(一個數據庫對應多個實例,同一時間內用戶只一個實例相聯繫,當某一實例出現故障,其它實例自動服務,以保證數據庫安全運行。)

查詢當前數據庫實例名
方法一:select instance_name from v$instance;
方法二:show parameter instance
方法三:在參數文件中查詢。

實例名(Instance_name)與操作系統環境變量(ORACLE_SID)
雖然兩者都表示oracle實例,但兩者是有區別的。instance_name是oracle數據庫參數。而ORACLE_SID是操作系統的環境變量。ORACLD_SID用於與操作系統交互,也就是說,從操作系統的角度訪問實例名,必須通過ORACLE_SID。在winnt不臺,ORACLE_SID還需存在於註冊表中。
且ORACLE_SID必須與instance_name的值一致,否則,你將會收到一個錯誤,在unix平臺,是“ORACLE not available”,在winnt平臺,是“TNS:協議適配器錯誤”。

 

(ORACLE_SID)

 

    OS  <------------->ORACLE 數據庫<------(Instance_name(實例名))
上圖表示實例名instance_name、操作系統環境變量ORACLE_SID與數據庫及操作系統之間的關係,雖然這裏列出的兩個參數都是數據庫實例名,但instance_name參數是ORACLE數據庫的參數,此參數可以在參數文件中查詢到,而ORACLE_SID參數則是操作系統環境變量。
操作系統環境變量ORACLE_SID用於和操作系統交互。也就是說,在操作系統中要想得到實例名,就必須使用ORACLE_SID。此參數與ORACLE_BASE、ORACLE_HOME等用法相同。在數據庫安裝之後,ORACLE_SID被用於定義數據庫參數文件的名稱。如:
$ORACLE_BASE/admin/DB_NAME/pfile/init$ORACLE_SID.ora。
定義方法:
export ORACLE_SID=orcl

 

如果在同一服務器中創建了多個數據庫,則必然同時存在多個數據庫實例,這時可以重複上述定義過程,以選擇不同實例。

還可以用 [oracle@Datacent]$ . oraenv 來切換不同的ORACLE_SID,以此通過操作系統來啓動不同的實例(instance)

 

 

數據庫實例名與網絡連接
數據庫實例名除了與操作系統交互外,還用於網絡連接的oracle服務器標識。當你配置oracle主機連接串的時候,就需要指定實例名。當然8i以後版本的網絡組件要求使用的是服務名SERVICE_NAME。這個概念接下來說明 。

三、數據庫域名
什麼是數據庫域名?

在分佈工數據庫系統中,不同版本的數據庫服務器之間,不論運行的操作系統是unix或是windows,各服務器之間都可以通過數據庫鏈路進行遠程複製,數據庫域名主要用於oracle分佈式環境中的複製。舉例說明如:
全國交通運政系統的分佈式數據庫,其中:
福建節點: fj.jtyz
福建廈門節點: xm.fj.jtyz
江西: jx.jtyz
江西上饒:sr.jx.jtyz
這就是數據庫域名。
數據庫域名在存在於參數文件中,他的參數是db_domain.

查詢數據庫域名
方法一:select value from v$parameter where name = 'db_domain';
方法二:show parameter domain
方法三:在參數文件中查詢。

全局數據庫名
全局數據庫名=數據庫名+數據庫域名,如前述福建節點的全局數據庫名是:oradb.fj.jtyz

四、數據庫服務名
什麼是數據庫服務名?
從oracle9i版本開始,引入了一個新的參數,即數據庫服務名。參數名是SERVICE_NAME。
如果數據庫有域名,則數據庫服務名就是全局數據庫名;否則,數據庫服務名與數據庫名相同

查詢數據庫服務名
方法一:select value from v$parameter where name = 'service_name';
方法二:show parameter service_name
方法三:在參數文件中查詢。

數據庫服務名與網絡連接
從oracle8i開始的oracle網絡組件,數據庫與客戶端的連接主機串使用數據庫服務名。

而8i之前用的是ORACLE_SID,即數據庫實例名。


服務名就是OracleServiceORCL
ORACLE的數據庫是一組文件的集合,數據庫的名字爲DBNAME。

例子
如在ORACLE SERVER上安裝一個
數據庫其名爲    D1
INSTANCE_NAME:    INS1
SERVICE_NAME:      ABC, CCC.

用戶連接時:

CONNECT  user/password @ABC

CONNECT  user/password @CCC
都連接到D1數據庫上。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章