增量备份体积异常大,主因是长事务未提交致rman误判块变更或块跟踪未生效;需查v$transaction与v$block_change_tracking确认,并排除归档积压干扰。
增量备份体积异常大,先查 v$transaction 里有没有长事务
增量备份变大,不一定是数据量真涨了,很可能是未提交的长事务让 rman 误判“大量块被修改”。rman 增量扫描时依赖块头 scn 和 itl(interested transaction list)信息,若事务长时间未提交,相关数据块的 itl 会持续标记为“active”,即使没改内容,rman 也会把整块当作变更块纳入备份。
实操建议:
- 运行
SELECT addr, start_time, used_ublk, used_urec FROM V$TRANSACTION ORDER BY start_time;——重点关注used_ublk> 1000 或start_time超过 30 分钟的记录 - 结合
V$SESSION关联查源头:SELECT s.sid, s.serial#, s.username, s.program, t.start_time FROM V$SESSION s JOIN V$TRANSACTION t ON s.saddr = t.ses_addr; - 确认是业务异常卡住后,可协调应用回滚;若无法联系,用
ALTER SYSTEM KILL SESSION 'sid,serial#';强制终止(注意:可能引发 ORA-00600,需评估)
BACKUP INCREMENTAL LEVEL 1 仍扫全文件?检查块跟踪是否真生效
即使启用了块更改跟踪(BCT),若 BCT 文件损坏、权限不足或写入路径 I/O 拥塞,RMAN 会静默退回到全块扫描模式——此时备份体积和耗时都会陡增,且不会报错。
实操建议:
- 查状态必须用
SELECT filename, status, bytes FROM V$BLOCK_CHANGE_TRACKING;,不能只信STATUS字段为 ENABLED;要确认BYTES> 0 且FILENAME可被 Oracle 进程读写(如ls -l /u01/oradata/orcl/bct.f+ps -ef | grep ora_看属主) - BCT 文件不能放在
DB_RECOVERY_FILE_DEST或归档路径下,否则日志归档争用会导致位图更新延迟,表现为增量备份中重复包含旧变更块 - 启用后首次
LEVEL 1备份仍慢是正常的,但第二次起应明显下降;若持续无改善,用RMAN> VALIDATE BACKUPSET <backup_set_key> CHECK LOGICAL;</backup_set_key>验证是否真在用 BCT
归档日志暴增间接拉高增量备份体积
RMAN 增量备份本身不备份归档日志,但若配置了 BACKUP INCREMENTAL LEVEL 1 PLUS ARCHIVELOG,而归档目录里堆积了大量未删除的旧归档(尤其 NOARCHIVELOG 模式误切、FRA 空间不足导致归档滞留),RMAN 在 PLUS ARCHIVELOG 流程中会扫描整个归档目录并尝试备份所有可识别归档——这会让整体备份集膨胀,且掩盖真正的增量数据大小。
实操建议:
- 单独验证增量主体大小:改用
BACKUP INCREMENTAL LEVEL 1 DATABASE(不含归档),对比输出中input bytes和output bytes是否仍异常高 - 查归档积压:
SELECT name, first_time, blocks FROM V$ARCHIVED_LOG WHERE DELETED = 'NO' AND FIRST_TIME - 清理前确认备库已接收:用
SELECT THREAD#, LOW_SEQUENCE#, HIGH_SEQUENCE# FROM V$ARCHIVE_GAP;确保无 GAP,再执行DELETE NOPROMPT ARCHIVELOG UNTIL TIME 'SYSDATE-2';
NOLOGGING 操作后没做 BACKUP INCREMENTAL FROM SCN,导致后续增量反复重扫
对 NOLOGGING 对象(如直接路径插入的分区、CREATE TABLE AS SELECT 表)执行 DML 后,这些块变更不记重做,但会更新块头 SCN。RMAN 增量基于 SCN 比较,若父备份(如上次 LEVEL 0)发生在 NOLOGGING 操作之前,则后续所有 LEVEL 1 都会把这批块当作“新变更”重复备份——体积稳居高位,且无法靠 BCT 规避。
实操建议:
- 查近期 NOLOGGING 操作:
SELECT owner, segment_name, tablespace_name, logging FROM DBA_TABLES WHERE logging = 'NO';+ 结合V$SQL查含/*+ APPEND */的语句 - 补救方案不是重做 LEVEL 0,而是用
BACKUP INCREMENTAL LEVEL 1 FROM SCN <scn_value> DATABASE;</scn_value>,其中<scn_value></scn_value>设为 NOLOGGING 操作完成后的 SCN(可用SELECT CURRENT_SCN FROM V$DATABASE;获取) - 长期策略:对关键表禁用 NOLOGGING,或每次 NOLOGGING 操作后立即执行一次
BACKUP INCREMENTAL LEVEL 1 FROM SCN作为新基线
真正影响增量备份体积的,往往不是数据增长本身,而是事务状态、BCT 实际工作状态、归档管理疏漏,以及 NOLOGGING 操作带来的 SCN 断层——这些点不逐个排除,调并行、换压缩算法都只是隔靴搔痒。











