必须。用户管理热备必须执行ALTER TABLESPACE…BEGIN BACKUP,否则拷贝时文件头SCN与控制文件不一致,恢复时报ORA-01139或启动失败;它冻结文件头SCN并强制归档所有块变更,是不可省略的强制步骤。
Oracle 用户管理热备必须用 BEGIN BACKUP 吗?
必须。不执行 alter tablespace … begin backup 就直接拷贝数据文件,恢复时大概率报 ora-01139: resetlogs operation is not allowed 或启动失败——因为控制文件里记录的检查点 scn 和文件头不一致,oracle 无法判断哪些块在备份中被修改过。
这是用户管理热备(user-managed hot backup)的强制前提,不是可选项。它本质是让 Oracle 把表空间标记为“正在备份中”,从而暂停对数据文件头的 SCN 更新,并启用日志归档保护所有块变更。
-
BEGIN BACKUP后,对应数据文件头的fuzzy标志置为 YES,checkpoint_change#冻结 - 归档日志从此刻起必须完整保留,直到
END BACKUP完成 - 不能对处于
BEGIN BACKUP状态的表空间做DROP、RESIZE、ADD DATAFILE
执行 BEGIN BACKUP 后忘了 END BACKUP 怎么办?
会卡住后续备份、影响归档空间、甚至拖慢 DML(尤其高并发更新小表空间时)。更严重的是:实例重启后该表空间自动退出备份模式,但文件头 SCN 仍冻结,导致下次 RMAN 或手工恢复时校验失败。
查法:SELECT tablespace_name, status FROM dba_tablespaces WHERE status = 'BACKUP';;或者查 v$backup 视图中 status = 'ACTIVE' 的记录。
- 补救:立刻执行
ALTER TABLESPACE … END BACKUP,哪怕文件已拷贝完 - 如果实例已重启过,先用
RECOVER TABLESPACE … UNTIL CANCEL手动前滚,再END BACKUP - 别依赖 “反正我只读了下文件”,Oracle 不认这个逻辑,只认控制文件和文件头的一致性
BEGIN BACKUP 对性能和归档有什么实际影响?
影响真实存在,但通常可控。主要开销来自两方面:一是每个脏块被写入时,必须确保其前镜像(before image)已记入归档日志;二是数据文件头不再更新 SCN,导致某些内部检查变慢。
- OLTP 系统中,单个表空间执行
BEGIN BACKUP一般增加 5%~10% 的 log file sync 等待 - 归档量可能突增,尤其该表空间正经历大量 UPDATE/DELETE —— 因为所有被改的块都要生成完整归档记录(不是增量)
- 不要在业务高峰对
SYSTEM、UNDO或大索引表空间做热备;TEMP表空间根本不用备 - 确认
archive_lag_target设置合理(比如 1800),避免归档积压触发ARCHIVE LOG STOP
为什么 cp 拷贝完不能直接关库停归档?
因为热备有效性不取决于“文件是否拷完”,而取决于“从 BEGIN BACKUP 到 END BACKUP 之间产生的所有归档日志是否完整可用”。少一个归档,恢复时就可能卡在 ORA-00308: cannot open archived log。
- 拷贝只是物理动作,Oracle 完全不知情;真正起作用的是那两条 SQL 和中间产生的归档流
- 建议用
ls -l核对源目标文件大小 +cksum校验,再查v$log_history确认归档序列连续 - 生产环境务必把
END BACKUP放进拷贝命令之后的 shell 脚本里,加set -e防止跳过
最常被忽略的点:以为“文件复制完成=备份完成”,其实备份窗口的终点是 END BACKUP 成功返回,且对应归档已落盘。中间任何一环断掉,这套热备就不可用。










