Redo Log 是 Oracle 恢復機制核心,DBA 必須熟練掌握日誌組狀態查詢、強制切換、歸檔模式確認、組/成員增刪與檔案移動操作。本文彙整 10 大常用管理指令。
SELECT group#, sequence#, bytes/1024/1024 AS size_mb, members, archived, status, first_change#, first_time
FROM v$log;
STATUS:CURRENT (正在寫入)、ACTIVE (需歸檔)、INACTIVE (可覆寫)、UNUSED (新建未用)。
SELECT group#, member, type, status, is_recovery_dest_file
FROM v$logfile
ORDER BY group#;
ALTER SYSTEM SWITCH LOGFILE;
SELECT sequence#, first_time, next_time, blocks, block_size
FROM v$log_history
ORDER BY first_time DESC;
SELECT dbid, name, created, log_mode FROM v$database;
-- LOG_MODE: ARCHIVELOG / NOARCHIVELOG
SELECT recid, stamp, thread#, sequence#, name, completion_time, creator
FROM v$archived_log
ORDER BY completion_time DESC;
-- 新增 Group 3,兩個成員,各 100MB
ALTER DATABASE ADD LOGFILE GROUP 3
('/u01/oradata/ORCL/redo03a.log', '/u02/oradata/ORCL/redo03b.log') SIZE 100M;
-- 刪除 Group 3 (需為 INACTIVE/UNUSED 狀態)
ALTER DATABASE DROP LOGFILE GROUP 3;
-- 為 Group 1 新增鏡像成員
ALTER DATABASE ADD LOGFILE MEMBER '/u03/oradata/ORCL/redo01c.log' TO GROUP 1;
-- 移除特定成員 (Group 至少保留 1 個成員)
ALTER DATABASE DROP LOGFILE MEMBER '/u03/oradata/ORCL/redo01c.log';
-- 1. OS 層 mv /cp 檔案至新路徑
-- 2. 資料庫層重命名
ALTER DATABASE RENAME FILE '/u01/oradata/ORCL/redo01a.log' TO '/u03/oradata/ORCL/redo01a.log';
-- 僅當無法用 DROP LOGFILE GROUP/MEMBER 時使用 (如成員遺失導致無法正常刪除)
ALTER DATABASE CLEAR LOGFILE '/u01/oradata/ORCL/redo01a.log';
-- 若該組為 CURRENT/ACTIVE 且未歸檔,需加 UNARCHIVED 關鍵字 (會導致不可恢復)
ALTER DATABASE CLEAR UNARCHIVED LOGFILE '/u01/oradata/ORCL/redo01a.log';