只能用 backup as copy,因 convert 不支持 asm 磁盘组间迁移;backup as copy 可物理复制并自动注册控制文件,rman 自动解析路径、生成合规 asm 文件名,且要求数据库处于归档模式。
必须用 backup as copy,不能用 convert —— 后者根本不支持 asm 磁盘组之间迁移。
为什么只能用 BACKUP AS COPY?
CONVERT 只能处理非ASM ↔ ASM 或 ASM ↔ 文件系统,跨磁盘组(比如从 +DATA 到 +DG2)直接报错;BACKUP AS COPY 是物理复制 + 控制文件注册,RMAN 自动解析源路径、生成合规 ASM 文件名(如 +DG2/tasm/datafile/xff.256.754899605),无需手动拼路径。
- 执行
CONVERT会提示ORA-19657: cannot convert datafile或RMAN-06136: CONVERSION NOT SUPPORTED FOR ASM TO ASM -
FORMAT '+DG2'后不加斜杠、不指定文件名 —— RMAN 会自动命名,硬写全路径反而失败 - 数据库必须处于归档模式,否则
BACKUP AS COPY直接拒绝执行
表空间级迁移的实操步骤
以把表空间 XFF 从 +DATA 迁到 +DG2 为例,全程在 SQL*Plus 和 RMAN 间切换:
- 确认状态:
SELECT tablespace_name, status FROM dba_tablespaces WHERE tablespace_name = 'XFF';—— 必须是ONLINE - 离线表空间:
ALTER TABLESPACE xff OFFLINE; - RMAN 中执行:
BACKUP AS COPY TABLESPACE xff FORMAT '+DG2'; - 切换控制文件指向:
SWITCH TABLESPACE xff TO COPY; - 上线:
SQL 'ALTER TABLESPACE xff ONLINE';
注意:SWITCH TABLESPACE 是关键一步,它更新控制文件和数据字典;漏掉这步,查询仍走旧路径,后续删源文件会触发 ORA-01110。
UNDO 和 SYSTEM/SYSAUX 表空间要单独处理
它们不能像普通表空间那样简单 OFFLINE → SWITCH:
-
UNDOTBS1:必须在所有 RAC 节点分别执行ALTER DATABASE DATAFILE <file_id> OFFLINE</file_id>,SWITCH后立刻RECOVER TABLESPACE undotbs1;,否则实例可能无法重启 -
SYSTEM/SYSAUX:需数据库STARTUP MOUNT状态下操作 —— 先SHUTDOWN IMMEDIATE,再STARTUP MOUNT,然后BACKUP AS COPY+SWITCH TABLESPACE+RECOVER DATABASE+ALTER DATABASE OPEN - 临时表空间(
TEMP)不用迁移文件,直接ALTER TABLESPACE temp ADD TEMPFILE '+DG2/' SIZE 32000M,再删旧TEMPFILE
迁移后清理和验证
别急着删旧文件 —— 先确认没残留依赖:
- 查
v$recover_file是否为空,非空说明还有未应用的归档日志 - 查
v$datafile,确认新路径已生效,旧路径不再出现 - 用
ASMCMD rm +DATA/tasm/xff01.dbf删除源文件 —— 不能用 OS 命令删 ASM 文件 - 大表空间(>100GB)迁移耗时长,
BACKUP AS COPY过程不可中断;中止后残留副本状态为EXPIRED,需手动CROSSCHECK COPY+DELETE EXPIRED
真正容易被忽略的是 RAC 多节点一致性:一个节点执行了 OFFLINE,其他节点没同步,SWITCH 后就会报 ORA-01157 —— 所有节点都得跑一遍离线和切换。











