-- 以 SYSDBA 身份连接 -- 查看归档日志总量和最近生成速率 SELECTCOUNT(*) AS total_logs, ROUND(SUM(blocks * block_size) /1024/1024/1024, 2) AS total_gb, MIN(first_time) AS earliest, MAX(first_time) AS latest FROM v$archived_log WHERE deleted ='NO';
-- 查看最近 24 小时每小时归档量 SELECT TRUNC(first_time, 'HH') AShour, COUNT(*) AS log_count, ROUND(SUM(blocks * block_size) /1024/1024, 2) AS size_mb FROM v$archived_log WHERE first_time > SYSDATE -1 AND deleted ='NO' GROUPBY TRUNC(first_time, 'HH') ORDERBYhourDESC;
-- 查看 FRA 使用率 SELECT name, ROUND(space_limit /1024/1024/1024, 2) AS limit_gb, ROUND(space_used /1024/1024/1024, 2) AS used_gb, ROUND((space_used / space_limit) *100, 2) AS pct_used FROM v$recovery_file_dest;
Step 2:RMAN 清理过期归档和已备份归档
1 2 3 4
# 连接 RMAN rman target /
# 执行以下清理命令
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
-- 删除所有已备份的归档日志 DELETE ARCHIVELOG ALL BACKED UP 1 TIMES TO DEVICE TYPE DISK;
-- 删除 24 小时前的归档日志(根据实际情况调整时间) DELETE NOPROMPT ARCHIVELOG ALL COMPLETED BEFORE 'SYSDATE-1';
-- 删除 2 天前且已备份的归档日志 DELETE NOPROMPT ARCHIVELOG ALL COMPLETED BEFORE 'SYSDATE-2' BACKED UP 1 TIMES TO DEVICE TYPE DISK;
-- 如使用 FRA,可临时增大 FRA 大小 ALTERSYSTEMSET db_recovery_file_dest_size=200G SCOPE=BOTH;
3.2 根因定位
应急处置完成后,需要定位根因以防止问题复发。
查找大量 DML 的 SQL:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
-- 查找产生 Redo 最多的 SQL(需要 AWR 或 ASH 数据) SELECT sql_id, sql_text, executions, buffer_gets, disk_reads, ROUND(elapsed_time /1000000, 2) AS elapsed_sec FROM v$sql WHERE parsing_schema_name NOTIN ('SYS', 'SYSTEM') ORDERBY buffer_gets DESC FETCHFIRST20ROWSONLY;
-- 查看当前活跃会话中产生 Redo 最多的会话 SELECT s.sid, s.serial#, s.username, s.program, t.used_ublk AS undo_blocks, t.used_urec AS undo_records FROM v$session s JOIN v$transaction t ON s.taddr = t.addr ORDERBY t.used_ublk DESC;
检查 DG 传输状态:
1 2 3 4 5 6 7 8 9 10 11 12 13
-- 查看归档目标状态 SELECT dest_id, dest_name, status, error, archived_seq#, applied_seq# FROM v$archive_dest_status WHERE status !='INACTIVE';
-- 查看归档 Gap SELECT*FROM v$archive_gap;
-- 查看备库应用延迟 SELECT name, value FROM v$dataguard_stats WHERE name IN ('transport lag', 'apply lag');
检查 RMAN 备份状态:
1 2 3 4 5 6 7 8 9 10 11 12
-- 查看归档日志备份状态 SELECT sequence#, first_time, next_time, backup_count, deleted FROM v$archived_log WHERE backup_count =0 AND deleted ='NO' AND first_time < SYSDATE -1 ORDERBY sequence# FETCHFIRST20ROWSONLY;
3.3 长期解决方案
RMAN 保留策略配置:
1 2 3 4 5 6 7 8 9 10 11 12
-- 设置基于恢复窗口的保留策略(保留 7 天可恢复能力) CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 7 DAYS;
-- 或基于冗余度的保留策略 CONFIGURE RETENTION POLICY TO REDUNDANCY 2;
-- 配置归档日志删除策略 -- 在 RMAN 备份归档后自动删除 CONFIGURE ARCHIVELOG DELETION POLICY TO BACKED UP 1 TIMES TO DISK;
-- DG 环境:归档传输到所有备库后可删除 CONFIGURE ARCHIVELOG DELETION POLICY TO APPLIED ON ALL STANDBY;