[ADMIN]oracle入門-oracle體系結構

chenyan995發表於2007-09-28

一個完整的oracle服務包括一個oracle instance和一個oracle database。前者主要包括記憶體結構和一些process,後者主要涉及一些儲存方面的結構。

oracle的記憶體結構主要包括SGA(共享記憶體區)和PGA(program global area)。SGA是在oracle instance起的時候就預分配好的,主要包括以下幾個部分:

shared pool:分別dictionary cache和library cache,前者主要存放資料字典的資訊,後者主要存放一些sql語句和他們的執行計劃等資訊。

database buffer cache:主要存放資料塊

log buffer:主要存放redo log entries

large pool:一般用於一些需要分配比較大記憶體的任務,如用於備份或恢復,或在共享伺服器模式下存放一部分使用者session的資訊。這是一個可選的區域。

java pool:好象是用於存放一些與java程式碼相關的內容,具體沒有研究過。

stream pool:用於oracle stream

在oracle 10g中,可以設定sga_target值,為sga分配一個總共的值,由系統自動調整各個部分的值。

oracle的process:

有user process和server process之分。user process為發起連線請求的程式,而server process負責與資料庫例項進行互動,為user process的請求服務。oracle的連線模式有專用伺服器(dedicated server)和共享伺服器(shared server)兩種模式。兩者的差別在於,前者一個server process只為一個user process服務,而後者一共server process服務多個user process。一般共享服務模式適用於那些資源較緊張的系統。在這種模式下,PGA中的部分內容被存放在SGA中,但總的記憶體使用量是減少的。在我接觸過的資料庫伺服器中,大多是採用專用伺服器模式。

後臺程式(background process)是在資料庫例項啟動時啟動的一系列後臺程式,主要用於資料庫的各種管理。比較重要的幾個後臺程式有:

SMON:用於在資料庫例項crash時執行恢復操作

PMON:用於在程式失敗時進行清理和資源釋放

DBWn:用於將database buffer cache中的髒塊寫入資料檔案中

LGWR:將log buffer中的redo entries寫入redo檔案

CKPT:用於在資料檔案頭和control檔案中記錄最近的檢查點(checkpoint)

ARCn:用於將redo檔案中的內容寫到archive檔案中

其中SMON程式是最重要的,當我們使用shutdown abort也無法關閉資料庫時,kill掉SMON程式後一般其他程式就也被kill掉了

資料庫儲存結構:

一個oracle database由以下三部分檔案組成:

control檔案:在資料庫例項mount資料庫時開啟control檔案。control檔案記錄的主要是資料庫的物理儲存結構,包括資料庫有哪些資料檔案、redo檔案等。

資料檔案:顧名思義存放的是資料庫中最關鍵的資料。

online redo檔案:redo檔案記錄的是資料庫的更新日誌。它主要用於例項的恢復。當資料庫例項crash時,記憶體中的資料全部丟失,資料庫重啟時,可以根據redo檔案將資料庫恢復到最近的一個檢查點,然後可以再根據回滾段中的內容回滾未提交的事務。

除此之外,還有一些檔案雖然不屬於oracle database的範疇,但對於維持資料庫的正常執行也至關重要。主要包括以下幾部分:

引數檔案:引數檔案用於在資料庫啟動時指定一些相關引數的值。引數檔案有pfile和spfile兩種。前者是文字檔案,可以用編輯器手工修改。後者是二進位制檔案。9i以後,推薦用spfile啟動資料庫,它支援動態修改資料庫引數,即在資料庫執行過程中,可以使用alter system命令同時修改記憶體和spfile中引數的值(僅限於動態引數,對於靜態引數,可用alter system ... scope=spfile命令修改spfile中的值,重啟後生效),在資料庫重啟後該引數修改仍然生效。而如果使用pfile啟動,對於動態引數的修改,首先必須使用alter system 命令在記憶體中修改,其次還需要手工編輯pfile檔案。比較麻煩。

密碼檔案:密碼檔案主要用於保證具有sysdba許可權的使用者可以遠端訪問資料庫,並對資料庫進行起停操作。

歸檔日誌檔案:歸檔日誌檔案其實是redo檔案的離線備份。redo檔案一般有幾組,在資料庫執行過程中是迴圈使用的,因此前面的組勢必會被後面的組覆蓋掉。如果開啟資料庫歸檔,資料庫就會將redo檔案中的記憶體儲存到離線的歸檔日誌檔案中。這樣,如果資料庫發生了介質損壞或檔案丟失,只要有備份以及其後所有的歸檔日誌檔案,就可以進行是資料庫恢復。

資料庫邏輯結構:

tablespace:每個資料庫在邏輯上被分為幾個表空間。每個表空間由一個或多個資料檔案組成。其中,system表空間主要用於存放資料字典資訊,相當關鍵。而sysaux表空間是oracle10g新增的表空間,它主要用於存放一些與oracle的元件相關的輔助資訊。

segment:資料庫的物件一般以segment的方式儲存在資料庫中,如一張表,一個索引,一張分割槽表的一個分割槽等等。

extent:一個segment由一個或多個extent組成。extent是給segment分配儲存的最小單位。一個extent一般由一些連續的block組成。

block:data block是資料庫讀寫的最小單位。一般選擇預設的8KB即可。對於主要用於批次的系統,可以選擇16KB的block size。資料庫的block size在建庫時決定,一旦決定就無法更改。

[@more@]

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

相關文章