rman备份跳过表空间有三种方式:skip tablespace(10g+,按名跳过)、exclude tablespace(12c+,语义化排除)和skip readonly(自动跳过所有只读表空间)。

RMAN 备份时跳过指定表空间,核心就两条路:用 SKIP TABLESPACE 或 EXCLUDE TABLESPACE,选哪个取决于 Oracle 版本和语义意图。
SKIP TABLESPACE 适用于所有支持版本(10g+),但不跳过只读表空间
这个命令是真正“跳过”——RMAN 在扫描数据库结构时直接忽略列出的表空间,不读取、不备份、也不报错。它适合排除非关键业务表空间,比如测试用的 EXAMPLE 或临时业务库 TEST_DATA。
-
SKIP TABLESPACE不检查表空间状态,哪怕它是READ ONLY,只要名字匹配就跳过 - 语法必须写全括号,且表空间名之间用英文逗号分隔,末尾不能有逗号:
SKIP TABLESPACE(EXAMPLE, USERS) - 如果误拼表空间名(如写成
USER而不是USERS),RMAN 不报错,但也不会跳过——它静默忽略无效名称 - 执行后不会在备份集中生成对应数据文件条目,
LIST BACKUP OF DATABASE的输出里也看不到这些表空间的文件记录
EXCLUDE TABLESPACE 仅 Oracle 12c+ 可用,语义更明确
EXCLUDE TABLESPACE 是语义更强的“排除”,它会把指定表空间从备份目标中移除,同时保留对其他对象(如控制文件、归档日志)的完整处理。它比 SKIP 更接近 DBA 的直觉:我要的就是“不备这个”。
- 仅限 Oracle 12.1 及以上版本,11g 及更早版本执行会报错:
RMAN-00571: RMAN-00569: Error while parsing command: EXCLUDE TABLESPACE not supported - 它和
SKIP一样不校验表空间是否存在,但行为一致:不存在的表空间名被忽略,不报错也不影响备份 - 和
SKIP不同的是,EXCLUDE会参与 RMAN 的备份优化逻辑判断,比如已备份过的文件若属于被 exclude 的表空间,不会触发重复跳过逻辑 - 不能混用:
SKIP TABLESPACE和EXCLUDE TABLESPACE不能出现在同一条BACKUP命令中,否则报错:RMAN-00571: RMAN-00569: Error while parsing command: conflicting options
想跳过只读表空间?别用 SKIP/EXCLUDE,用 SKIP READONLY
这是最常被忽略的点:如果你的目标是跳过所有只读表空间(比如历史归档库或报表库),SKIP TABLESPACE 和 EXCLUDE TABLESPACE 都不适用——它们需要你手动列名,而只读表空间可能随时新增。正确做法是启用自动跳过:
- 在
BACKUP命令末尾加SKIP READONLY,例如:BACKUP DATABASE PLUS ARCHIVELOG SKIP READONLY - 该选项无需提前配置,也不依赖 Oracle 版本(10g+ 全支持),RMAN 会在运行时自动识别并跳过所有
STATUS = 'READ ONLY'的表空间 - 注意:它只作用于表空间级别,不会跳过只读的数据文件(如果某数据文件所属表空间是读写态,即使文件本身只读,也不会跳过)
- 与
SKIP TABLESPACE同时使用时,SKIP READONLY优先级更低——即先按名字跳过,再检查剩余表空间是否只读
数据文件级排除只能靠 BACKUP DATAFILE 手动指定
RMAN 没有类似 SKIP DATAFILE 5 的语法。如果真要跳过某个具体数据文件(比如损坏后尚未清理的孤立文件),唯一可靠方式是放弃 BACKUP DATABASE,改用显式列举:
- 查出要跳过的文件编号:
SELECT file#, name FROM v$datafile WHERE tablespace_name = 'TEMP'; - 然后用
BACKUP DATAFILE明确列出其余所有文件:BACKUP DATAFILE 1,2,3,4,6,7 FORMAT '/bkp/%d_%s.bk'; - 遗漏文件编号会导致备份失败,RMAN 不会自动补全;多写一个不存在的编号则报错:
RMAN-03002: failure of backup command at ... ORA-01157: cannot identify/lock data file - 这种方式无法和
PLUS ARCHIVELOG直接组合,需拆成两步:BACKUP DATAFILE ...+BACKUP ARCHIVELOG ALL
真正容易踩坑的地方不是语法记不住,而是混淆 SKIP 和 EXCLUDE 的版本边界,以及误以为 SKIP TABLESPACE 能自动处理只读状态——它不能。实际运维中,建议把只读表空间统一用 SKIP READONLY,业务表空间用 SKIP TABLESPACE,升级到 12c+ 后再逐步迁移到 EXCLUDE TABLESPACE 以获得更清晰的语义表达。











