針對 Oracle DBA 日常運維高頻操作,彙整 Redo Log 管理、Checkpoint 控制、LogMiner 分析三大場景的標準指令,附參數說明與注意事項,方便臨時速查與自動化腳本撰寫。
ALTER SYSTEM SWITCH LOGFILE;
觸發 Log Switch,將當前 Online Redo Log Group 切換至下一組,常用於觸發歸檔或測試備份腳本。
ALTER SYSTEM CHECKPOINT;
將 Dirty Buffer 強制寫入資料檔,縮短執行個體恢復時間;亦可配合 FAST_START_MTTR_TARGET 自動調節。
ALTER DATABASE ADD LOGFILE [GROUP 4]
('/disk3/log4a.rdo', '/disk4/log4b.rdo') SIZE 1M;
ALTER DATABASE ADD LOGFILE MEMBER
'/disk3/log1b.rdo' TO GROUP 1,
'/disk4/log2b.rdo' TO GROUP 2;
ALTER DATABASE RENAME FILE
'c:/Oracle/oradata/oradb/redo01.log'
TO 'c:/Oracle/oradata/redo01.log';
前提:資料庫需處於 MOUNT 狀態,且檔案已在 OS 層面移動/重命名完成。
ALTER DATABASE DROP LOGFILE GROUP 3;
至少保留 2 個 Group;被刪除 Group 必須為 INACTIVE 或 UNUSED 狀態。
ALTER DATABASE DROP LOGFILE MEMBER 'c:/Oracle/oradata/redo01.log';
Group 內至少保留 1 個 Member。
ALTER DATABASE CLEAR [UNARCHIVED] LOGFILE 'c:/Oracle/log2a.rdo';
UNARCHIVED:未歸檔也強制清除,會導致該段 Redo 不可用於媒體恢復,需立即做完整備份。適用於審計、異常 SQL 追蹤、誤操作回溯。
UTL_FILE_DIR = '/u01/app/oracle/admin/oradb/log'EXEC DBMS_LOGMNR_D.BUILD('oradb.ora', 'c:\Oracle\oradb\log');EXEC DBMS_LOGMNR.ADD_LOGFILE('c:\Oracle\oradata\oradb\redo01.log', DBMS_LOGMNR.NEW);EXEC DBMS_LOGMNR.ADD_LOGFILE('c:\Oracle\oradata\oradb\redo02.log', DBMS_LOGMNR.ADDFILE);EXEC DBMS_LOGMNR.START_LOGMNR(DICTFILENAME => 'c:\Oracle\oradb\log\oradb.ora');SELECT * FROM V$LOGMNR_CONTENTS;V$LOGMNR_DICTIONARY、V$LOGMNR_PARAMETERS、V$LOGMNR_LOGS 取得完整上下文。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 狀態下執行,視具體指令而定。DBMS_LOGMNR.START_LOGMNR(OPTIONS => DBMS_LOGMNR.DICT_FROM_ONLINE_CATALOG) 直接使用線上資料字典(10g+)。CLEAR UNARCHIVED LOGFILE 前,務必通過變更管理流程並完成事後完整備份。將上述指令整合至自動化腳本(Shell/Python/Ansible),可大幅降低人為操作風險,並建立可審計的運維紀錄。