首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> Oracle 資料庫 >> Oracle 教學

Oracle 資料庫物理結構深度解析:控制檔、資料檔、重做日誌與 SCN 機制

     編輯:Oracle 教學

Oracle 資料庫物理結構深度解析:控制檔、資料檔、重做日誌與 SCN 機制

身為 DBA,必須精通資料庫物理儲存架構。Oracle 資料庫由三類核心檔案組成:**控制檔、資料檔、重做日誌檔**。合理規劃檔案位置、大小與擴展屬性,關係到資料庫效能與可恢復性。


一、三大核心物理檔案

1. 控制檔

  • 記錄資料庫物理結構元資料:資料庫名稱、資料檔/日誌檔名稱與路徑、建立時間、檢查點資訊、RMAN 備份資訊等。
  • 資料庫啟動時必須讀取控制檔以掛載資料庫;結構變更 (新增資料檔、日誌切換) 會自動更新控制檔。
  • 關鍵性:遺失控制檔將導致資料庫無法掛載,恢復極度困難。生產環境**必須多路徑多工** (Multiplexing),建議至少 3 份置於不同磁碟。

2. 資料檔

  • 實際儲存使用者資料 (表、索引等) 的物理容器。
  • 讀取資料時載入記憶體緩衝區 (Buffer Cache);修改後的「髒資料」由 DBWn 進程批次寫回磁碟,減少 I/O 提升效能。
  • 屬於某一表空間,一個表空間可包含多個資料檔,但一個資料檔僅屬於一個表空間。

3. 重做日誌檔

  • 循環寫入架構,由 2 個以上日誌組 組成,每組可多工 (多成員) 防單點故障。
  • 記錄所有資料變更 (Insert/Update/Delete/DDL),作為崩潰恢復與介質恢復的核心依據。
  • LGWR 進程負責將 Redo 記錄從記憶體寫入線上重做日誌;日誌組寫滿觸發 Log Switch,切換至下一組。
  • 歸檔模式 (ARCHIVELOG):啟用後,已寫滿的日誌組需由 ARCn 進程歸檔後才能被覆寫,確保時間點恢復 (PITR) 與 Data Guard 同步能力。

二、重做日誌管理核心機制

日誌組狀態與 LGWR 行為

情境LGWR 行為
組中至少一成員可寫正常寫入可用成員,忽略不可用成員
下一組需歸檔才能用暫停資料庫操作,等待歸檔完成
下一組所有成員不可用 (介質損壞)報錯關閉實例,需介質恢復
所有組所有成員同時不可用報錯關閉實例,需介質恢復

關鍵參數

  • MAXLOGFILES:資料庫最大日誌組數 (CREATE DATABASE 指定)
  • MAXLOGMEMBERS:每組最大成員數 (CREATE DATABASE 指定)

三、歸檔日誌與歸檔模式

  • 歸檔日誌 = 線上重做日誌組成員的備份副本,含唯一序列號。
  • 啟用歸檔模式步驟:SHUTDOWN IMMEDIATE → 備份 → 設定 LOG_ARCHIVE_DEST_n → STARTUP MOUNT → ALTER DATABASE ARCHIVELOG → ALTER DATABASE OPEN。
  • 自動歸檔 (LOG_ARCHIVE_START=TRUE / 11g+ 預設啟用) 由 ARCn 進程非同步處理,建議設定多個歸檔目的地 (LOG_ARCHIVE_DEST_1..10) 並啟用 LOG_ARCHIVE_MAX_PROCESSES 多進程並行。
  • 歸檔日誌用途:資料庫恢復、Standby 同步、LogMiner 歷史分析。

四、SCN (System Change Number) 核心機制

SCN 是單調遞增的內部時鐘,標識資料庫變更的邏輯先後順序,是恢復、備份、一致性讀取的基石。

資料變更與 SCN 流程

  1. 事務開始,從資料檔讀取資料塊至 Buffer Cache。
  2. 修改記憶體資料塊 → 產生 Redo 記錄寫入 Redo Log Buffer。
  3. Commit 時,LGWR 將 Redo Buffer + **當前 SCN** 寫入線上重做日誌 (強制寫入確保持久化)。
  4. DBWn 延後將髒資料塊寫入資料檔 (Checkpoint 觸發時)。
  5. Checkpoint (CKPT) 事件發生時,更新控制檔與資料檔標頭的多項 SCN 值。

四大關鍵 SCN 儲存位置

SCN 類型儲存位置查詢視圖用途
系統檢查點 SCN控制檔V$DATABASE.CHECKPOINT_CHANGE#資料庫級恢復基準點
資料檔檢查點 SCN控制檔V$DATAFILE.CHECKPOINT_CHANGE#單一資料檔恢復基準
啟動 SCN (Start SCN)資料檔標頭V$DATAFILE_HEADER.CHECKPOINT_CHANGE#啟動時與控制檔比對,判斷是否需恢復
結束 SCN (Stop SCN)控制檔V$DATAFILE.LAST_CHANGE#正常關閉時更新,NULL 表示一致性關閉

正常關閉 vs 異常關閉

  • 正常關閉 (SHUTDOWN NORMAL/IMMEDIATE):觸發 Checkpoint,四大 SCN 同步更新為最新值,資料檔標頭啟動 SCN = 控制檔檢查點 SCN,結束 SCN = NULL。啟動時無需恢復。
  • 異常關閉 (SHUTDOWN ABORT/當機):SCN 不一致,啟動時 SMON 自動執行執行個體恢復,透過重做日誌將提交事務重做、未提交事務回滾。

查詢當前 SCN

SELECT DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER FROM DUAL;

五、實戰應用場景速查 (節選)

場景關鍵 SQL / 命令
查看控制檔資訊SELECT * FROM V$CONTROLFILE;
建立控制檔備份ALTER DATABASE BACKUP CONTROLFILE TO '/path/control.bak';
控制檔損壞恢復 (目錄可存取)SHUTDOWN → OS 複製備份檔 → STARTUP
控制檔損壞恢復 (目錄不可存取)SHUTDOWN → 複製至新目錄 → 修改 CONTROL_FILES 參數 → STARTUP
查看資料檔資訊SELECT NAME, STATUS, BYTES FROM V$DATAFILE;
新增資料檔至表空間ALTER TABLESPACE users ADD DATAFILE '/path/users02.dbf' SIZE 100M AUTOEXTEND ON;
資料檔離線/上線ALTER DATABASE DATAFILE '/path/file.dbf' OFFLINE/ONLINE;
查看重做日誌組/成員SELECT GROUP#, STATUS, MEMBER FROM V$LOGFILE;
新增重做日誌組ALTER DATABASE ADD LOGFILE GROUP 4 ('/log/redo4a.log','/log/redo4b.log') SIZE 100M;
切換歸檔模式ALTER DATABASE ARCHIVELOG / NOARCHIVELOG; (需 MOUNT 狀態)
手動歸檔ALTER SYSTEM ARCHIVE LOG ALL;
查看歸檔目的地狀態SELECT DEST_NAME, STATUS, DESTINATION FROM V$ARCHIVE_DEST;
查看臨時檔資訊SELECT NAME, STATUS, BYTES FROM V$TEMPFILE;
查看 Alert Log 路徑SELECT VALUE FROM V$PARAMETER WHERE NAME='background_dump_dest';

總結

掌握物理結構是 DBA 進階的基石。重點記住:

  1. 控制檔多工異地備份,是災難恢復的生命線。
  2. 重做日誌組多工 + 歸檔模式 + 多歸檔目的地,構建零資料損失防線。
  3. SCN 串聯記憶體、日誌、資料檔、控制檔,理解 Checkpoint 機制即理解恢復原理。
  4. 善用 V$ 動態視圖監控物理結構健康度,建立自動化巡檢腳本。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved