oracle學習帖子--網路摘抄

risingsunczl發表於2007-01-25

1、database和instance的區別
2、oracle中眾多的name

[@more@]
初學oracle的人,想必很容易混淆這兩個概念,其實在網路上搜尋一下,有很多解釋,較生動的是記事本的例子。這裡給出我的一個簡單理解:
一個表空間只能屬於一個資料庫
每個資料庫最少有一個控制檔案(建議3個,分別放在不同的磁碟上)
每個資料庫最少有一個表空間(SYSTEM表空間)
建立SYSTEM表空間的目的是儘量將目的相同的表存放在一起,以提高使用效率,只應存放資料字典

每個資料庫最少有兩個聯機日誌組,每組最少一個聯機日誌檔案

一個資料檔案只能屬於一個表空間
一個資料檔案一旦被加入到一個表空間中,就不能再從這個表空間中移走,也不能再加入到其他表空間中

建立新的表空間需要建立新的資料檔案

COMMIT後,資料不一定立即寫盤(資料檔案)

一個事務即使不被提交,也會被寫入到重做日誌中。

oracle server可以同時啟動多個資料庫

一套作業系統上可以安裝多個版本的ORACLE資料庫系統(UNIX可以,NT不可以)

一套ORACLE資料庫系統中可以有多個ORACLE資料庫及其相對應的例項
database:資料庫,一組相關的物理檔案,比如資料檔案、日誌檔案和控制檔案等等,是物理上實實在在存在的,即使關閉資料庫仍然存在。
instance:例項。記憶體和一些程式,比如SGA、後臺程式(windows系統是執行緒),當關閉資料庫後例項消失。
兩者是相輔相成的,經常在一起使用。我們以常見的資料庫啟動和關閉舉例如下:
1、啟動,先啟動例項,在mount資料庫,直至open資料庫
2、關閉,先close資料庫,在nomount資料庫,直至關閉例項
例項服務:以windows為例,就是一個windows服務,比如OracleService,它對應著一個程式,可以說這個服務是最基礎的,如果這個服務沒有啟動,何談啟動例項和資料庫;另外可以啟動多個例項服務,但是不能啟動多個例項(可以在一種特殊方式下實現)
備註:關於啟動和關閉具體細節詳見eygle所著作品《DBA入門、進階與診斷案例》
舉個例子,例項好比一座通往資料庫的橋樑,而資料庫就是一個島嶼。出入島嶼的交通流量都必須透過橋,如果橋關閉了,島嶼雖然仍然存在,但我們卻無法出入島嶼。對應到oracle術語來說,如果例項正在執行,那麼資料就可以出入資料庫。同時,資料庫的物流狀態也改變。如果例項掛起,雖然資料庫仍然確實存在,使用者卻無法對他進行訪問。此時的資料庫是靜態的,其資料不會改變。當例項重新服務時,資料庫中的資料則隨時做好準備,即可以對它進行訪問。---《oracle精髓》
---------------------------

oracle中眾多的name

1、db_name資料庫名
是區分資料的內部標識(即是給資料庫內部使用的),因為其在資料庫多處儲存,並且控制檔案中儲存是二進位制的,所以很難改變其名字,但是是可以修改的。在pfile中有db_name引數就是它。
作用:內部標記,在資料庫、建立、建立控制檔案、修改資料庫結構、使用資料庫備份與恢復時都使用資料庫名(注意此時不是sid)
DB_NAME必須是一個不超過8個字元的文字串.在資料庫建立過程中,db_name被記錄在資料檔案,日誌檔案和控制檔案中。如果資料庫例項啟動過程中引數檔案中的db_name和控制檔案中的資料庫名稱不一致,則資料庫不能啟動。
2、instance_name例項名
用於和作業系統間聯絡,一個資料庫可以有多個例項(並行服務)。要和一個資料庫伺服器相連,必須知道其例項名,光知道資料庫名是沒用的。在pfile中有instance_name引數,其實一般設定與資料庫名稱是相同的(不相同是自找麻煩),比較容易改變該引數
3、ORALCE_SID
同樣是指資料庫例項名,但ORACLE_SID是作業系統的環境變數設定,用於和作業系統互動,其取值必須與INSTANCE_NAME相同,而INSTANCE_NAME可在引數檔案中查到,ORALCE_SID則不在此引數檔案中
4、db_domain資料庫域名
類似網路域名的概念,(所以一個資料庫名db_name在不同的域裡可以相同)在安裝時確定(全域性資料庫名中填寫),定義規則也相似於網路定義。引數檔案中db_domain,如果沒有該項則全域性資料庫名和資料庫名相同,該資料庫沒有使用域名,域名可以修改
5、SERVICE_NAMES資料庫服務名
定義為=全域性資料庫名,引數檔案中service_names
6、全域性資料庫名
全域性資料庫名:= db_name+db_domain
7、Net service name:網路服務名
又可以稱為資料庫別名(database alias),是客戶端程式訪問資料庫時所需要,遮蔽了客戶端如何連線到伺服器端的細節,實現了資料庫的位置透明的特性。
小結:

一個例項可以mount並開啟任何資料庫,但是同一時間一個例項只能開啟一個資料庫。
一個資料庫可以被一個或多個例項所mount並開啟(在OPS/RAC環境下,一個資料庫可以被多個例項所開啟)。

另外的一個區別是,db_name通常限制在8個字元之內;instance_name最多應該支援21個字元。通常我們都是設定db_name和instance_name一致。需要注意的是如果db_name設定過長,則會被Oracle截斷為8個字元,而instance_name仍然會保留在21個字元之內,如果你的環境變數設定的instance_name=db_name,則啟動時就會出現問題,你需要重建pfile/spfile並且修改環境變數才能啟動例項,載入資料庫。

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

相關文章