跟我一起學Oracle 11g【4】----Oracle的體系結構


前言

這個章節主要想說的是Oracle的體系結構,這個也是理論強些。還有一些比較理論的知識點(比如表空間啊),就暫時先不寫了,下一章節開始進入Oracle的操作階段,比如表的查詢啊、插入以及重點是和SQL 2005的一些區別和Oracle中特有的命令。

希望大家繼續捧場。

 Oracle體系結構分類

我們應該知道的是在Oracle數據庫的體系結構包括以下四種結構:

那下面我比較粗略的說以下結構包括什么!~

一。物理存儲結構

顧名思義,Oracle數據庫在物理是由存儲在磁盤中的操作系統文件所組成的,能被我們看見的文件。Oracle 數據庫在物理上主要有3種類型的文件組成,分別是數據文件(*.dbf)、控制文件(*.ctl)、日志文件(*.log)

數據文件(Data File):指存儲數據庫數據的文件,也就是我們平時新建的數據庫。比如表中的記錄、索引都存儲在數據文件中。我們需要注意的時候,用戶在讀取數據的時候,如果用戶讀取的數據不在緩沖區(就像我們操作系統也有一個緩存,在計算機中 為了提高系統的性能,把一些常用的數據放在內存中),那么就從數據庫中讀取出來,放到內存中去。存儲數據的時候,也是先把數據保存到緩沖區中,然后再后台進程DBWn講數據寫入到數據文件中。

我們可以通過dba_data_files數據字典(數據字典就是存儲一些系統數據)數據文件的狀態。有一些字段解釋一下:

Blocks:數據文件所占用的數據塊數

autoextensible:數據文件是否允許擴展

tablespace_name:數據文件對應的表空間名

控制文件(Control File):是一個二進制文件,用來描述數據庫的物理結構。主要存放着數據庫中的數據文件和日志文件信息。如果在使用Oracle過程中,損壞了控制文件,那么數據庫將無法正常工作。

Oracle一般會默認創建3個包含相同信息的控制文件,目的是為了當其中一個受損時,可以調用其他控制文件來繼續工作。

日志文件(Log file):是記錄數據庫中所修改信息的文件,保證數據庫安全,也可以實現數據的備份與恢復。

如果status位current表名系統正在使用該字段對應的日志文件。如果是inactive,則沒有使用。

當一個日志文件組的空間被占用完了之后,Oracle系統會自動轉換到另一個日志文件組。不過,也可以使用alter system swithch logfile 進行手動切換

其他文件

當然,除了上面的之外 還有其他的一些文件。

參數文件:記錄Oracle數據庫的基本信息,比如數據庫名和控制文件所在的路徑等。

備份文件:可以借助備份文件對受損文件進行備份

歸檔重做日志文件:對寫滿的日志文件進行復制並保存

警告、跟蹤日志文件:如果一個進程發現了一個內部錯誤時,可以將關於錯誤的信息存儲到它的跟蹤文件中。

二。邏輯存儲結構

Oracle數據庫的表空間從邏輯存儲結構上來說,包括表空間、段、區和數據快。他們之間的關系是多個數據庫組成一個區,多個區組成一個段,多個段組成一個表空間,多個表空間組成數據庫,所以圖如下:

①表空間:Oralce中,最大的邏輯存儲結構是表空間(tablespace)。表空間和物理上的數據文件相對應。具體 下面詳解。

②段(Segment)是一組盤區,這組盤區組成了被Oracle視為一個單位的數據庫對象,比如表或索引。因此,段是數據庫終端用戶將處理的最小單位。

分為5中段:

數據段:存儲表中數據。

索引段:存儲表中所有索引。

臨時段:存儲臨時數據。

LOB段:用於存儲表中的大型數據對象。

回退段:用於存儲用戶數據被修改之前的值。

③區:Oracle中,區是磁盤空間分配的最小單位。

段的增大是通過增加區的個數來實現的,在個數並非是沒有限制的。創建段的時候,可以使用Min_extents和Max_extents來定義區的個數。

④塊(Block)是用來管理存儲空間的最基本單位,也是最小的邏輯存儲單位。

在創建Oracle數據庫時,初始化參數DB_BLOCK_SIZE用來指定一個數據庫的大小。數據庫創建之后,無法修改數據庫的大小。比如:

數據塊的結構如下:

塊頭部:數據庫中的一搬性信息,比如數據庫的物理地址。

表目錄:存儲表的信息。

行目錄:存儲數據庫中有效的行信息。

空閑空間:還沒有使用的存儲空間。

行空間:存儲表或索引的數據。

三。內存結構

當用戶發出一條SQL命令時,服務器進程會對這條SQL語句進行語法分析並執行它,然后將用戶所需要的數據從磁盤的數據文件中讀取出來,存放在系統全局區中的數據緩沖區中。如果用戶進程對緩沖區中的數據進行了修改,則修改后的數據將由數據庫寫入進程DBWn希爾磁盤數據文件中。

按照系統對內存的使用方法不同,Oracle數據庫的內存分為以下幾部分:

①系統全局區(SGA)

是Oracle位系統分配的一組可共享的一組共享的內存結構,可以保護一個數據實例的數據或控制信息。系統全局區按照作用的不同可以分為:

  • 數據緩沖區

       用於存儲從磁盤數據文件中讀取的數據,供所有用戶共享。

  • 日志緩沖區

    用於存儲數據庫的修改操作信息。

     

  • 共享池

        共享池用來保存最近執行的SQL語句、PL/SQL程序的數據字典信息,它是對SQL語句和PL/SQL程序進行語法分析、編譯和執行的內存區域。

        共享池的大小由shared_pool_size 確定。

②程序全局區(Program Global Area,PGA)

是包含單個用戶或服務器數據和控制信息的內存區域,它在用戶進程連接到Oracle數據庫並創建一個會話是,由Oracle自動分配。

③排序區(Sort Area)

是Oracle系統為排序操作所產生的臨時數據提供的內存空間。

④大池(Large Pool)

提供一個大的緩沖區供數據庫的備份與恢復操作使用。

四。實例進程結構

① DBWn(DataBase Write,數據庫寫入)進程是賦值管理數據緩沖區的后台進程,用於將緩沖區中的數據寫入到數據文件。

②LGWR(Log Write,日志寫入)進程是負責管理日志緩沖區的一個后天進程,用於將日志緩沖區中的日志數據寫入磁盤的日志文件。

③CKPT(Check Point)進程保存所有修改過的數據緩沖區中的數據都被寫入磁盤數據文件中。

默認情況是1800秒。

④SMON(System Monitor)進程:用於在實例啟動時執行實例恢復,並負責清理不在使用的臨時段。

⑤PMON(Process Monitor)進程:用於在用戶進程出現故障時執行恢復操作。

⑥ARCn(Archive Process,歸檔):將寫滿日志文件復制到歸檔日志文件中。

⑦RECO (Recovery)進程:用在分布式數據庫系統中,用於自動解決在分布式數據庫中出現的事物故障。

⑧LCKn(Lock)進程:存在於並行服務器系統中,用於實現多個實例間的封鎖。

⑨Dnnn(Dispatchers)進程:存在於多線程服務器體系結構中,用於將用戶進程連接到服務器進程中。

五。數據字典

在我的這篇和前篇文章用到了很多數據字典(是oracle數據庫用來存貯數據庫結構信息的地方)。這個很有用,網上資料也很多!~~

Oracle的數據字典-----Brad Miller

我也提供了一份下載word文檔,不過是英文的但是都很簡單 能理解。。。猛擊下載Oracle數據字典

 

OK,這個就先到這里把。下回見。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM