Oracle之結構

*一炁化三清*發表於2024-07-25

Oracle結構

在結構上,Oracle 伺服器(Oracle Server)由例項(Instance)和資料庫(Database)兩大部分構成。

  • 例項:例項是一組記憶體結構 和 Oracle 後臺程序的集合; (qq程式啟動後成為一個程序,並佔用記憶體,記憶體和程序組成例項)
  • 資料庫:資料庫在物理上由多個作業系統檔案組成,其中主要包括資料檔案、控制檔案和重做日誌檔案。(qq的聊天記錄只能在qq程式啟動後才能檢視,實際是一組特定結構的資料)

Oracle 伺服器 = 例項 + 資料庫。

1、資料庫啟動
Oracle資料庫例項的啟動過程分為3個步驟,分別是啟動例項、載入資料庫、開啟資料庫。使用者可以根據實際情況的需要,以不同的模式啟動資料庫。

啟動資料庫所使用的命令格式如下:

STARTUP [nomount|mount|open|force] [restrict] [pfile=filename]
  • OPEN:啟動例項,裝載並開啟資料庫,為預設選項。
  • MOUNT:啟動例項並裝載資料庫,但不開啟資料庫。
  • NOMOUNT:啟動例項,但不裝載資料庫。
  • PFILE=:指定用於啟動例項的非預設初始化引數檔名。
  • FORCE:強制終止例項,並重新啟動資料庫。
  • RESTRICT:啟動後只允許具有 RESTRICTED SESSION 許可權的使用者訪問資料庫。
  • RECOVER:在資料庫啟動時,進行介質恢復。
shutdown ---> nomount
	分配記憶體:根據引數檔案/u01/app/oracle/product/11.2.0/db_1/dbs/spfileorcl.ora
	啟動程序
nomount ---> mount
	讀取控制檔案
mount ---> open
	讀取日誌檔案,資料檔案

2、修改資料庫(ALTER)
要使資料庫由 NOMOUNT 進入 MOUNT 階段或由 MOUNT 進入 OPEN 階段,需要使用 ALTER DATABASE 命令:

ALTER DATABASE { MOUNT | OPEN }

3、資料庫關閉方式
Oracle 資料庫共有 4 種關閉方式,根據不同的情況,管理員可採用不同的方式關閉資料庫。

  • NORMAL:正常關閉方式。
  • TRANSACTIONAL:事務關閉方式。
  • IMMEDIATE:立即關閉方式。
  • ABORT:強制終止關閉方式。

NORMAL、TRANSACTIONAL、IMMEDIATE 三種關閉方式,屬於一致性資料庫(或稱乾淨資料庫)關閉。特點是無需進行資料庫恢復。
ABORT 關閉方式,屬於非一致性資料庫(或稱髒資料庫)關閉。使用 ABORT關閉、或資料庫發生例項故障(比如斷電)、或使用 STARTUP FORCE 強制重新啟動資料庫,都需要進行例項恢復。

ABORT 關閉方式,屬於非一致性資料庫(或稱髒資料庫)關閉。使用 ABORT 關閉、或資料庫發生例項故障(比如斷電)、或使用 STARTUP FORCE 強制重新啟動資料庫,都需要進行例項恢復。關閉和啟動過程如圖所示:

Oracle記憶體結構

記憶體結構描述的是 Oracle 資料庫對記憶體的使用構成。Oracle 記憶體結構被總稱為 SGA (System Global Area)。
主要包括資料庫高速緩衝區(Database Buffer Cache)、重做日誌緩衝區(Redo Log Buffer)和共享池(Shared Pool)三個部分。

1、資料庫高速緩衝區(Database Buffer Cache)
在 Oracle 中無論是讀取還是修改資料,都是由伺服器程序在資料庫高速緩衝區中完成的。
資料庫高速緩衝區的作用就是用來快取最近從資料庫中讀出的資料塊,並可供其他客戶程序共享。使用者程序檢視資料時,首先檢查需要的資訊是否在緩衝區內,如果在緩衝區中,就可以直接訪問,否則訪問物理檔案並讀取資料塊到資料庫緩衝區。我們知道記憶體的讀寫速度要比物理裝置的讀寫速度快很多,這樣就可以大大提高 Oracle 資料庫的效能。

1.1、資料庫高速緩衝區的子緩衝區
根據緩衝資料塊的狀態,Oracle將資料高速緩衝區可劃分成:

  • 髒緩衝區(Dirty Buffer):
    當資料庫發生 DML(Insert、Update、Delete)操作時,會對緩衝區內容進行修改,這樣緩衝區的內容就會和相對應的資料檔案不一致,這時,緩衝區標識為“髒緩衝區”
  • 自由緩衝區(Free Buffer):
    當“髒緩衝區”的內容被寫入資料檔案後,因為該緩衝區與相應資料檔案部分內容一致,所以將這些緩衝區稱為“自由緩衝區”
    當執行 SELECT 語句時,會將對應資料檔案部分資料讀取到資料快取記憶體的相應緩衝區,因為緩衝區與資料塊內容完全一致,所以這些緩衝區也被稱為“自由緩衝區”
  • 忙緩衝區(Pinned Buffer):
    '忙緩衝區”是指伺服器程序正在訪問的緩衝區。

每個資料庫的資料庫高速緩衝區大小有限,所以一般不會把磁碟上的所有資料都可以存放在緩衝區中。
為了防止資料庫高速緩衝區空間不夠用,Oracle 會將髒緩衝區中的資料寫入對應的資料檔案中,以騰出空間給新的資料,
如果緩衝區不髒,即為“自由緩衝區”,它可以直接被讀入新的資料塊。)隨後訪問被寫入磁碟導致額外的快取記憶體未命中的資料。
“髒列表”的作用就是記錄髒緩衝區的情況。如果某些緩衝區中的資料塊被修改,就會加入該列表,只有髒列表中的緩衝區資料塊需要寫回資料庫檔案,一旦寫回資料庫檔案,緩衝區就會從髒列表中清除。

2、資料庫高速緩衝區&重做日誌緩衝區

資料庫高速緩衝區域的內容是寫入資料檔案中。
重做日誌緩衝區域的內容是寫入日誌檔案中。
先寫重做日誌快取區域的內容載寫資料庫高速緩衝區域的內容。

相關文章