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

Oracle 核心運維指令大全:Redo Log、Checkpoint、LogMiner 實戰速查

     編輯:Oracle 資料庫基礎

針對 Oracle DBA 日常運維高頻操作,彙整 Redo Log 管理、Checkpoint 控制、LogMiner 分析三大場景的標準指令,附參數說明與注意事項,方便臨時速查與自動化腳本撰寫。

一、Redo Log 管理

1. 強制切換日誌檔

ALTER SYSTEM SWITCH LOGFILE;

觸發 Log Switch,將當前 Online Redo Log Group 切換至下一組,常用於觸發歸檔或測試備份腳本。

2. 強制 Checkpoint

ALTER SYSTEM CHECKPOINT;

將 Dirty Buffer 強制寫入資料檔,縮短執行個體恢復時間;亦可配合 FAST_START_MTTR_TARGET 自動調節。

3. 新增 Online Redo Log Group

ALTER DATABASE ADD LOGFILE [GROUP 4]
  ('/disk3/log4a.rdo', '/disk4/log4b.rdo') SIZE 1M;
  • 建議每 Group 多路徑多工(Multiplexing),放置於不同磁碟/控制器。
  • Group 編號若省略,Oracle 自動分配。

4. 為既有 Group 新增 Member(多工)

ALTER DATABASE ADD LOGFILE MEMBER
  '/disk3/log1b.rdo' TO GROUP 1,
  '/disk4/log2b.rdo' TO GROUP 2;

5. 重命名 Online Redo Log 檔

ALTER DATABASE RENAME FILE
  'c:/Oracle/oradata/oradb/redo01.log'
  TO 'c:/Oracle/oradata/redo01.log';

前提:資料庫需處於 MOUNT 狀態,且檔案已在 OS 層面移動/重命名完成。

6. 刪除 Log Group

ALTER DATABASE DROP LOGFILE GROUP 3;

至少保留 2 個 Group;被刪除 Group 必須為 INACTIVE 或 UNUSED 狀態。

7. 刪除 Log Member

ALTER DATABASE DROP LOGFILE MEMBER 'c:/Oracle/oradata/redo01.log';

Group 內至少保留 1 個 Member。

8. 清除 Online Redo Log(慎用)

ALTER DATABASE CLEAR [UNARCHIVED] LOGFILE 'c:/Oracle/log2a.rdo';
  • UNARCHIVED:未歸檔也強制清除,會導致該段 Redo 不可用於媒體恢復,需立即做完整備份。
  • 僅適用於損壞或遺失的 Log 檔。

二、LogMiner 分析 Redo Log 實戰步驟

適用於審計、異常 SQL 追蹤、誤操作回溯。

  1. 設定目錄權限(init.ora / spfile)
    UTL_FILE_DIR = '/u01/app/oracle/admin/oradb/log'
  2. 建立字典檔
    EXEC DBMS_LOGMNR_D.BUILD('oradb.ora', 'c:\Oracle\oradb\log');
  3. 加入第一個 Log 檔(NEW 選項)
    EXEC DBMS_LOGMNR.ADD_LOGFILE('c:\Oracle\oradata\oradb\redo01.log', DBMS_LOGMNR.NEW);
  4. 加入後續 Log 檔(ADDFILE 選項)
    EXEC DBMS_LOGMNR.ADD_LOGFILE('c:\Oracle\oradata\oradb\redo02.log', DBMS_LOGMNR.ADDFILE);
  5. 啟動 LogMiner
    EXEC DBMS_LOGMNR.START_LOGMNR(DICTFILENAME => 'c:\Oracle\oradb\log\oradb.ora');
  6. 查詢分析結果
    SELECT * FROM V$LOGMNR_CONTENTS;
    亦可聯結 V$LOGMNR_DICTIONARY、V$LOGMNR_PARAMETERS、V$LOGMNR_LOGS 取得完整上下文。
  7. 結束會話
    EXEC DBMS_LOGMNR.END_LOGMNR;

常用過濾範例

-- 只看特定使用者的 DML
SELECT sql_redo, sql_undo, timestamp, username
FROM   v$logmnr_contents
WHERE  username = 'SCOTT'
AND    operation IN ('INSERT','UPDATE','DELETE');

-- 找出 TRUNCATE TABLE
SELECT * FROM v$logmnr_contents WHERE operation = 'DDL' AND sql_redo LIKE '%TRUNCATE%';

三、運維小撇步

  • 所有 ALTER DATABASE ... LOGFILE 操作建議在 MOUNT 或 OPEN 狀態下執行,視具體指令而定。
  • LogMiner 字典檔建議定期重建(結構變更後必須重建),或改用 DBMS_LOGMNR.START_LOGMNR(OPTIONS => DBMS_LOGMNR.DICT_FROM_ONLINE_CATALOG) 直接使用線上資料字典(10g+)。
  • 生產環境執行 CLEAR UNARCHIVED LOGFILE 前,務必通過變更管理流程並完成事後完整備份。

將上述指令整合至自動化腳本(Shell/Python/Ansible),可大幅降低人為操作風險,並建立可審計的運維紀錄。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved