RMAN 备份必须显式指定 SKIP OFFLINE 才能跳过离线数据文件,否则报错退出;该参数不持久、不适用于 ARCHIVELOG 和 COPY 模式,仅在 backup 命令中临时生效。
backup 命令加 SKIP OFFLINE 才真正跳过离线文件
很多人以为只要在 rman 里执行 configure exclude for tablespace 或改了归档模式,备份就会自动跳过离线数据文件——其实不会。skip offline 必须显式写在 backup 命令里,否则 rman 遇到 offline 状态的文件会直接报错退出,哪怕它属于已删除表空间或临时损坏的归档库。
常见错误现象:RMAN-03009: failure of backup command on ORA_DISK_1 channel 后跟 ORA-19566: exceeded limit of 0 corrupt blocks for file ... 或更直白的 ORA-01157: cannot identify/lock data file —— 这往往是因为文件 offline 且没加 SKIP OFFLINE。
-
BACKUP DATABASE SKIP OFFLINE是最常用写法,适用于整个库有部分文件 offline 的灾备场景 - 如果只想备份特定表空间,用
BACKUP TABLESPACE users SKIP OFFLINE,注意它只跳过该表空间内 offline 的文件,不波及其他 - 不能和
BACKUP ARCHIVELOG混用:SKIP OFFLINE对归档日志无效,归档日志只有ALL、LIKE、FROM TIME等过滤方式
offline 文件仍被计入 backupset 大小,但不实际读取
SKIP OFFLINE 不是“忽略存在”,而是“跳过打开与读取”。RMAN 在构建 backupset 前会扫描控制文件列出所有数据文件,offline 文件仍会计入 backupset 元信息(比如 LIST BACKUP 里能看到它),但实际备份时不触发 I/O,也不产生校验失败。
这点影响备份验证:用 RESTORE VALIDATE 测试时,若目标库含 offline 文件,必须同样带上 SKIP OFFLINE,否则验证会卡住或报错;否则你会误以为备份不可用,其实只是验证命令没对齐。
- 性能上几乎无开销——跳过动作发生在 catalog 阶段,不走磁盘读取路径
- 兼容性无问题,Oracle 10gR2 起就支持,但 9i 不识别该参数,会报
RMAN-00571: invalid argument - 注意:
SKIP INACCESSIBLE是另一回事,它跳过物理损坏或权限不足的文件,和 offline 状态无关
受损库恢复前,SKIP OFFLINE 不能替代文件修复
如果一个数据文件因磁盘故障变成 offline,加 SKIP OFFLINE 能让你把其余正常文件备份出来,但别指望靠这个完成完整恢复。restore 时,那些被 skip 的文件依然缺失,数据库无法 open,除非你后续手工 recover 或 replace 它们。
典型使用场景:主库某 LUN 故障导致一个表空间 offline,DBA 需快速拉出可用数据做迁移或诊断,此时 BACKUP DATABASE SKIP OFFLINE 是止损动作,不是修复动作。
- 备份后检查输出里是否有
skipping datafile ... because it is offline行,这是唯一确认生效的日志线索 - 不要在
BACKUP AS COPY中依赖它——copy 模式强制要求文件可访问,SKIP OFFLINE无效,会直接失败 - 如果文件是
OFFLINE DROP(比如删表空间未 clean),它可能已从控制文件移除,这时SKIP OFFLINE根本不起作用,也无需起作用
配置文件里不能设全局 SKIP OFFLINE
RMAN 的 CONFIGURE 命令列表里没有 SKIP OFFLINE 这个选项,它不是持久化设置,而是每次 backup 的临时行为。试图运行 CONFIGURE SKIP OFFLINE ON 会得到 RMAN-00571: invalid command。
这意味着:自动化脚本里每条 BACKUP 命令都得手动补上 SKIP OFFLINE,漏写一行就可能让整套备份流程中断。尤其在跨多个环境(测试/生产)复用脚本时,容易因为某套库多了一个 offline 文件而突然失败。
- 建议在备份脚本开头加注释说明:“此库存在 offline 数据文件,请勿删除 SKIP OFFLINE”
- 如果用 OEM 或云备份工具封装 RMAN,确认其界面或模板是否暴露该参数开关——很多 GUI 默认不启用,需进高级选项勾选
- 别用别名 alias 替代:定义
ALIAS bkup = 'BACKUP DATABASE SKIP OFFLINE'是合法的,但 RMAN 12c+ 版本中 alias 不支持带空格参数,实际会截断,不推荐










