RMAN不支持SKIP TABLESPACE语法,报ORA-19569;仅支持SKIP READONLY/OFFLINE/INACCESSIBLE三类状态标识;跳过表空间需用CONFIGURE EXCLUDE FOR TABLESPACE或BACKUP DATABASE EXCLUDE TABLESPACE。
rman 没有 skip tablespace 这个语法,直接写会报错 ora-19569 —— 别被网上标题党误导了。
为什么 RMAN 不支持 SKIP TABLESPACE
RMAN 的备份命令参数中,SKIP 后只接受 READONLY、OFFLINE、INACCESSIBLE 三类状态标识,不接受表空间名。所谓“跳过某表空间”,本质是两种不同机制:
-
CONFIGURE EXCLUDE FOR TABLESPACE:永久性配置,影响所有后续BACKUP DATABASE(全库备份) -
BACKUP DATABASE EXCLUDE TABLESPACE:一次性命令级排除,不改全局配置
两者都只在全库备份(BACKUP DATABASE)中生效;对 BACKUP TABLESPACE users 这类针对性备份无效。
CONFIGURE EXCLUDE FOR TABLESPACE 的实际行为和风险
该配置不是“跳过”,而是“彻底不纳入备份目标列表”。恢复时也不会还原这些表空间,且 RMAN 不校验其是否可重建。
- 不能排除
SYSTEM、SYSAUX、UNDO、TEMP表空间,否则BACKUP DATABASE直接失败 - 执行后,
LIST BACKUP OF DATABASE输出里完全看不到被 exclude 的表空间数据文件 - 若误 exclude 了业务关键表空间(如
APP_DATA),恢复后数据库能打开,但应用连不上对应对象 —— 错误常表现为ORA-00942: table or view does not exist - 清除配置用
CONFIGURE EXCLUDE FOR TABLESPACE users CLEAR,不是UNCHECK或REMOVE
BACKUP DATABASE EXCLUDE TABLESPACE 的使用边界
这是更可控的一次性方案,适合临时避让非核心表空间(比如历史归档表空间),但要注意语法细节:
- 多个表空间用英文逗号分隔,无空格:
EXCLUDE TABLESPACE hist_tbs,log_archive_tbs - 表空间名区分大小写,若创建时带双引号(如
"HIST_TBS"),此处也必须加引号 - 与
PLUS ARCHIVELOG连用时,归档日志仍会备份,但控制文件中记录的 DB 备份不包含 excluded 表空间的数据文件 - 无法和
SKIP READONLY混用 —— RMAN 会优先按 exclude 列表过滤,readonly 状态已无关紧要
示例:BACKUP DATABASE EXCLUDE TABLESPACE users FORMAT '/bkp/%U' PLUS ARCHIVELOG DELETE INPUT;
真正要“跳过”的只读表空间,该用 SKIP READONLY
如果你的目标是减少备份量且确认某些表空间长期只读(比如 HIST_RO),SKIP READONLY 才是正解:
- 它不依赖配置,每次备份显式声明即可:
BACKUP DATABASE SKIP READONLY - RMAN 在构建备份集前先扫描
DBA_TABLESPACES,自动过滤STATUS = 'READ ONLY'的条目 - 验证是否生效,别信日志里的 “skipping” 提示 —— 查
LIST BACKUPSET <BS_KEY>,确认输出中不含目标表空间名 - 注意:该命令对
EXCLUDE配置过的表空间不起作用,因为那些表空间根本不会出现在扫描范围内
最易忽略的一点:只读表空间必须在**上次备份之后、本次备份之前**保持只读状态,否则 RMAN 会因 SCN 不一致拒绝跳过。


















