圖解Oracle數據庫(二)

 
-------聲明:本文參考了Oracle官方文檔和互聯網的海量信息,並歸納總結而來。如有錯誤之處,還請各位不吝賜教。
 
Oracle數據庫的體系結構如圖所示:
clip_image002
       任何一個數據庫都是由數據文件組成的,數據文件中保存着數據庫裏的所有信息。

      在Oracle中可以從兩個角度來理解這個數據文件。一是物理結構,二是邏輯結構。
clip_image004
Oracle物理存儲結構
clip_image006
 
構成 Oracle 數據庫物理結構的文件有:
      控制文件:包含有關數據庫本身的數據(即物理數據庫的結構信息)。這些文件對數據庫而言至關重要。沒有這些文件,就無法打開用於訪問數據庫數據的數據文件。
     控制文件包括如下主要信息數據庫的名字,檢查點信息,數據庫創建的時間戳、所有的數據文件,聯機日誌文件,歸檔日誌文件信息備份信息等。有了這些信息,Oracle就知道那些文件是數據文件,現在的重做日誌文件是哪些,這些都是系統啓動和運行的基本條件,所以他是Oracle運行的根本。如果沒有控制文件系統是不可能啓動的。控制文件是非常重要的,一般採用多個鏡相複製來保護控制文件,或採用RAID來保護控制文件。控制文件的丟失,將使數據庫的恢復變的很複雜。
 
      數據文件:包含數據庫中的用戶數據或應用程序數據。其詳細信息記載在控制文件中。
 
可以通過如下方式查看數據文件
SQL> select name from v$datafile;
clip_image007
數據文件大致可以分爲以下幾類:
     i系統數據文件(system_01.dbf)
    存放系統表和數據字典,一般不放用戶的數據,但是用戶腳本,如過程,函數,包等卻是保存在數據字典中的。
數據字典:數據字典是一些系統表或視圖,他存放系統的信息,他包括數據庫版本,數據文件信息,表與索引等段信息,系統的運行狀態等各種和系統有關的信息和用戶腳本信息。數據庫管理員可以通過對數據字典的查詢,就可以瞭解到Oracle的運行狀態。
 
      ii 回滾段文件(rbs_01.dbf)
      如果數據庫進行對數據的修改,那麼就必須使用回滾段,回滾段是用來臨時存放修改前的數據(Before Image)。回滾段通常都放在一個單獨的表空間上(回滾表空間),避免表空間碎片化,這個表空間包含的數據文件就是回滾數據文件。
 
    ii臨時數據文件(temp_01.dbf)
     主要存放用戶的排序等臨時數據,與回滾段相似,臨時段也容易引起表空間碎片化,而且沒有辦法在一個永久表空間上開闢臨時段,所以就必須有一個臨時表空間,它所包含的數據文件就是臨時數據文件,主要用於不能在內存上進行的排序操作。我們必須爲用戶指定一個臨時表空間。
 
   iv用戶數據文件(/applsys_data_01.dbf ,applsys_indx_01.dbf)
     存放用戶數據,這裏列舉了兩類常見的用戶型數據,一般數據和索引數據,一般來說,如果條件許可的話,可以考慮放在不同的磁盤上。
 
      聯機重做日誌文件:可用來實現數據庫實例恢復。如果數據庫已崩潰但未丟失任何數據文件,那麼使用這些文件中的信息可以通過實例恢復數據庫。 用戶對數據庫進行的任何操作都會記錄在重做日誌文件。在瞭解重做日誌之前必須瞭解重做日誌的兩個概念,重做日誌組和重做日誌組成員(Member),一個數據庫中至少要有兩個日誌組文件,一組寫完後再寫另一組,即輪流寫。每個日誌組中至少有一個日誌成員,一個日誌組中的多個日誌成員是鏡相關係,有利於日誌文件的保護,因爲日誌文件的損壞,特別是當前聯機日誌的損壞,對數據庫的影響是巨大的。
       聯機日誌組的交換過程叫做切換,需要特別注意的是,日誌切換在一個優化效果不好的數據庫中會引起臨時的“掛起”。掛起大致有兩種情況:
      在歸檔情況下,需要歸檔的日誌來不及歸檔,而聯機日誌又需要被重新利用。
     檢查點事件還沒有完成(日誌切換引起檢查點),而聯機日誌需要被重新利用。
 
解決這種問題的常用手段是:
i.增加日誌組
ii.增大日誌文件成員大小
通過v$log可以查看日誌組,v$logfile可以查看具體的成員文件。
 
       內部文件包括:參數文件、口令文件、歸檔日誌文件(運行數據庫必須的)。
 
      參數文件:用於定義啓動實例時如何配置實例。在10g中,通常位於$ORACLE_HOME/admin//Pfile下,初始化文件記載了許多數據庫的啓動參數,如內存,控制文件,進程數等,在數據庫啓動的時候加載(Nomount時加載),初始化文件記錄了很多重要參數,對數據庫的性能影響很大。
 
    口令文件:允許用戶遠程連接到數據庫並執行管理任務。用於Oracle 的具有sysdba權限用戶的認證.
 
   歸檔日誌文件:包含實例生成的數據更改(重做)的實時歷史記錄。使用這些文件和數據庫備份可以恢復丟失的數據文件。也就是說,使用歸檔日誌可以恢復還原的數據文件。
 
       Oracle可以運行在兩種模式之中,歸檔模式和不歸檔模式。如果不用歸檔模式,當然,你就不會有歸檔日誌,但是,你的系統將不會是一個實用系統,特別是不能用於生產系統,因爲你可能會丟失數據。但是在歸檔模式中,爲了保存用戶的所有修改,在重做日誌文件切換後和被覆蓋之間系統將他們另外保存成一組連續的文件系列,該文件系列就是歸檔日誌文件。
 
      備份文件:用於恢復數據庫。當因介質故障或用戶錯誤而損壞或刪除了原始文件時,通常需要還原備份文件。
 
      跟蹤文件:每個服務器和後臺進程都可以對關聯的跟蹤文件執行寫操作。如果在進程中檢測到內部錯誤,進程就會將關於錯誤的信息轉儲到進程的跟蹤文件中。寫入到跟蹤文件中的某些信息專門供數據庫管理員使用,另一些信息則供 Oracle 支持服務部門使用。
 
   預警日誌文件:是特殊的跟蹤文件,又稱爲預警日誌。數據庫預警日誌是按時間順序列出的消息日誌和錯誤日誌。Oracle 建議您查看這些文件。
 
Oracle邏輯存儲結構
clip_image009
一個表空間中包括一個或多個數據文件。
一個數據文件僅屬於一個表空間。
表空間和數據文件
一個數據庫可劃分爲多個邏輯存儲單元,這些單元稱爲表空間,表空間可用於對相關邏輯
結構進行分組。每個數據庫按邏輯都分爲一個或多個表空間。可以爲每個表空間顯式創建
一個或多個數據文件,這樣可在表空間中按物理方式存儲所有邏輯結構的數據。
 
1、 表空間(tablespace)
表空間是數據庫中的基本邏輯結構,一系列數據文件的集合。一個表空間可以包含多個數據文件,但是一個數據文件只能屬於一個表空間。安裝完Oracle10g後,會自動創建一些基本表空間。
 
EXAMPLE 實例表空間,存放例子數據庫的方案對象信息及其培訓資料。
 
AYAAUX 輔助表空間,用於減少系統表空間的負荷,提高系統的作業效率,是Oracle 10g新增加的表空間。
 
SYSTEM 系統表空間,存放關於表空間的名稱、控制文件、數據文件等管理信息,是Oracle數據庫中最重要的表空間。它屬於SYS、SYSTEM方案,僅被SYS和SYSTEM或其他具有足夠權限的用戶使用。即使是SYS和SYSTEM用戶也不能刪除或者重命名SYSTEM表空間。
 
TEMP 臨時表空間,存放臨時表和臨時數據,用於排序。每個數據都應該有一個臨時表空間,以便在創建用戶時將其分配給用戶,例如排序操作的臨時空間,他的空間會在下次系統啓動的時候全部被釋放。
UNDOTBS1 重做表空間,存放數據庫的有關重做的相關信息和數據。
USERS 用戶表空間,存放永久性用戶對象和私有信息,因此也被稱爲數據表空間。
 
在上述的表空間中,比較重要的是SYSTEM和SYSAUX表空間。
每個 Oracle 數據庫都包含 SYSTEM表空間和SYSAUX 表空間。這兩個表空間是在創建數據庫時創建的。系統默認設置是創建小文件表空間。也可以創建大文件表空間,這樣可通過 Oracle 數據庫管理超大文件(數據庫最大爲8 EB)。表空間的狀態可以是聯機的(可訪問)也可以是脫機的(不可訪問)。打開數據庫時SYSTEM表空間始終處於聯機狀態。這個表空間可存儲支持數據庫核心功能的表,如數據字典表。
查看數據數據字典的SQL
select * from dict
clip_image010
查看內部系統表的SQL
select * from v$fixed_view_definition
clip_image012
SYSAUX表空間是 SYSTEM 表空間的輔助表空間。SYSAUX表空間可存儲許多數據庫組件,要使所有數據庫組件正常運行,該表空間必須處於聯機狀態。
2、 段(Segment)
段是對象在數據庫中佔用的空間,雖然段和數據庫對象是一一對應的,但段是從數據庫存儲的角度來看的。一個段只能屬於一個表空間,當然一個表空間可以有多個段。
表空間和數據文件是物理存儲上的一對多的關係,表空間和段是邏輯存儲上的一對多的關係,段不直接和數據文件發生關係。一個段可以屬於多個數據文件,關於段可以指定擴展到哪個數據文件上面。
段基本可以分爲以下四種
 
數據段(Data Segment) :每個非集羣、非索引的組織表都有一個數據段。該表的所有數據都存儲在表數據段的區中。對於分區表,每個分區都有一個 數據段。每個集羣都有一個數據段。集羣中每個表的數據都存儲在集羣的數據段中。
 
索引段(Index Segment) :每個索引都有一個索引段,用於存儲索引的所有數據。對於已分區索引,每個分區都有一個索引段。
回滾段(Rollback Segment) :數據庫管理員會創建一個 UNDO 表空間,用於臨時存儲還原信息。還原段中的信息用於生成一致讀取信息,在數據庫恢復過程中,還可用於回退用戶的未提交事務。
臨時段(Temporary Segment) :當SQL 語句需要一個臨時工作區來完成執行時,Oracle 數據庫會創建臨時段。執行完語句後,臨時段的區會返回到實例,以供將來使用。請爲每個用戶指定一個默認臨時表空間,或指定一個在數據庫級別使用的默認臨時表空間。
3、區間(Extent)
關於Extent的翻譯有多種解釋,有的譯作擴展,有的譯作盤區,我這裏通常譯爲區間。在一個段中可以存在多個區間,區間是爲數據一次性預留的一個較大的存儲空間,直到那個區間被用滿,數據庫會繼續申請一個新的預留存儲空間,即新的區間,一直到段的最大區間數(Max Extent)或沒有可用的磁盤空間可以申請。 在ORACLE8i以上版本,理論上一個段可以無窮個區間,但是多個區間對ORACLE卻是有性能影響的,ORACLE建議把數據分佈在儘量少的區間上,以減少ORACLE的管理與磁頭的移動。
4、Oracle數據塊(Block)
ORACLE最基本的存儲單位,他是OS數據塊的整數倍。ORACLE的操作都是以塊爲基本單位,一個區間可以包含多個塊(如果區間大小不是塊大小的整數倍,ORACLE實際也擴展到塊的整數倍)。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章