RMAN通过backup tablespace users命令对单个USERS表空间进行单独备份,该命令语法为backup tablespace后接表空间名,支持多表空间逗号分隔,且自动包含SYSTEM等必需系统表空间以确保可恢复性。
如何用RMAN备份指定表空间?
可以,rman 支持只备份特定表空间,但必须确保这些表空间处于 read write 或 read only 状态(不能是 offline 或处于恢复中)。system 表空间无法被排除——哪怕你没显式指定它,只要备份任何用户表空间,rman 默认会连带备份 system、sysaux、undo(如果使用本地管理)等必需系统表空间。
RMAN命令怎么写?
直接在 RMAN 中执行 BACKUP TABLESPACE 命令即可,多个表空间名用逗号分隔,不加引号(除非含特殊字符或小写且未用双引号建表空间):
BACKUP TABLESPACE users, example;
注意以下几点:
- 表空间名大小写敏感:若创建时用了双引号如
"MyTablespace",备份时也必须写成"MyTablespace" - 不能用通配符(如
BACKUP TABLESPACE 'US%'会报错ORA-19563: datafile header validation failed) - 如果表空间包含只读数据文件,RMAN 自动跳过已备份过的只读部分(依赖
CONTROLFILE RECORD KEEP TIME和备份保留策略) - 推荐加上
FORMAT显式指定路径,避免默认路径不可写或空间不足:BACKUP TABLESPACE users FORMAT '/u01/backup/users_%U.bkp';
为什么备份后发现SYSTEM也被备份了?
这不是 bug,而是 RMAN 的设计行为。即使你只写 BACKUP TABLESPACE users,RMAN 仍会自动包含:
-
SYSTEM(必须,含数据字典) -
SYSAUX(Oracle 10g+ 必需) - 当前实例使用的
UNDO表空间(非临时表空间) - 如果启用了 Oracle Label Security 或其他组件,还可能包含对应表空间
这是为了保证备份可恢复——单独还原一个用户表空间而没有 SYSTEM 是无效的。若想真正“仅备份 users”,技术上不可行;能做的只是控制范围:不把无关的大表空间(如 DATA_ARCHIVE)加入命令。
增量备份时指定表空间要注意什么?
增量备份同样支持 BACKUP INCREMENTAL LEVEL 1 TABLESPACE ...,但有隐含前提:
- 必须已有对应表空间的 0 级备份(全量),否则报错
ORA-19602: cannot backup or copy active file in NOARCHIVELOG mode(尤其在非归档模式下) - 增量只对自上次 0 级以来发生变化的数据块生效,但如果某数据文件从未被 0 级备份过,RMAN 会自动降级为 0 级备份该文件
- 不要混用不同保留策略:比如对
users设 7 天保留,对example设 30 天,RMAN 不按表空间粒度清理,而是按备份集整体清理,容易误删
实际操作中,最常被忽略的是归档日志依赖——哪怕只备份一个表空间,恢复时仍需该时间窗口内的全部归档日志,否则 RECOVER TABLESPACE 会失败。











