最近在整理測試環境相關內容時,學員常常問道以下幾個名詞數據庫
數據庫名、實例名、數據庫域名、全局數據庫名、服務名 ,windows
這是幾個令不少初學者容易混淆的概念。相信不少初學者都與我同樣被標題上這些個概念搞得一頭霧水。本篇博客就讓咱們來把它們弄個明白。提早說一句,其實最後只須要理解便可,無需刻意的去背概念服務器
1、數據庫名網絡
什麼是數據庫名?數據結構
數據庫名就是一個數據庫的標識,就像人的×××號同樣。他用參數DB_NAME表示,若是一臺機器上裝了多全數據庫,那麼每個數據庫都有一個數據庫名。在數據庫安裝或建立完成以後,參數DB_NAME被寫入參數文件之中。格式以下:架構
DB_NAME=myorcloracle
...app
在建立數據庫時就應考慮好數據庫名,而且在建立完數據庫以後,數據庫名不宜修改,即便要修改也會很麻煩。由於,數據庫名還被寫入控制文件中,控制文件是以 二進制型式存儲的,用戶沒法修改控制文件的內容。假設用戶修改了參數文件中的數據庫名,即修改DB_NAME的值。可是在Oracle啓動時,因爲參數文 件中的DB_NAME與控制文件中的數據庫名不一致,致使數據庫啓動失敗,將返回ORA-01103錯誤。dom
數據庫名的做用分佈式
數據庫名是在安裝數據庫、建立新的數據庫、建立數據庫控制文件、修改數據結構、備份與恢復數據庫時都須要使用到的。
有不少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文檔)
2、數據庫實例名
什麼是數據庫實例名?
數據庫實例名是用於和操做系統進行聯繫的標識,就是說數據庫和操做系統之間的交互用的是數據庫實例名。實例名也被寫入參數文件中,該參數爲instance_name,在winnt平臺中,實例名同時也被寫入註冊表。
數據庫名和實例名能夠相同也能夠不一樣。
在通常狀況下,數據庫名和實例名是一對一的關係,但若是在oracle並行服務器架構(即oracle實時應用集羣)中,數據庫名和實例名是一對多的關係。這一點在第一篇中已有圖例說明。
查詢當前數據庫實例名
方法一:select instance_name from v$instance;
方法二:show parameter instance
方法三:在參數文件中查詢。
數據庫實例名與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服務器標識。當你配置oracle主機鏈接串的時候,就須要指定實例名。固然8i之後版本的網絡組件要求使用的是服務名SERVICE_NAME。這個概念接下來講明 。
3、數據庫域名
什麼是數據庫域名?
在分佈工數據庫系統中,不一樣版本的數據庫服務器之間,不論運行的操做系統是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
4、數據庫服務名
什麼是數據庫服務名?
從oracle9i版本開始,引入了一個新的參數,即數據庫服務名。參數名是SERVICE_NAME。
若是數據庫有域名,則數據庫服務名就是全局數據庫名;不然,數據庫服務名與數據庫名相同。
查詢數據庫服務名
方法一:select value from v$parameter where name = 'service_name';
方法二:show parameter service_name
方法三:在參數文件中查詢。
數據庫服務名與網絡鏈接
從oracle8i開如的oracle網絡組件,數據庫與客戶端的鏈接主機串使用數據庫服務名。以前用的是ORACLE_SID,即數據庫實例名
建立Oracle數據庫(以Oracle10g爲例)
有兩種建立數據庫的方式,一種是以命令行腳本方式,即手動方式建立;另外一種是利用Oracle提供的數據庫配置嚮導來建立。本篇主要介紹在Unix和Windows下以命令行腳本方式建立Oracle數據庫。
一個完整的數據庫系統,應包括一個物理結構、一個邏輯結構、一個內存結構和一個進程結構,若是要建立一個新的數據庫,則這些結構都必須完整的創建起來。
本文同步分享在 博客「51CTO_李曉鵬」(51CTO)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。