必须用BACKUP AS COPY而非CONVERT,因CONVERT仅支持非ASM↔ASM转换,不支持ASM磁盘组间迁移;而BACKUP AS COPY通过物理复制+控制文件注册实现+DATA→+DG2等同构迁移,自动适配ASM命名规则。
可以直接用 rman backup as copy 迁移表空间到另一个asm磁盘组,但必须离线目标表空间,且数据库需处于归档模式。
为什么必须用 BACKUP AS COPY 而不是 CONVERT
因为 CONVERT 只能处理非ASM → ASM 或 ASM → 文件系统,不能跨ASM磁盘组转换;而 BACKUP AS COPY 本质是物理复制+控制文件注册,天然支持 +DATA → +DG2 这类同构迁移。实际执行时,RMAN会自动解析源路径、生成符合ASM命名规则的目标文件名(如 +DG2/tasm/datafile/xff.256.754899605),无需手动指定完整ASM路径。
RMAN BACKUP AS COPY 迁移表空间的完整步骤
以将表空间 XF F 从 +DATA 迁至 +DG2 为例:
- 确认表空间状态:
SELECT tablespace_name, status FROM dba_tablespaces WHERE tablespace_name = 'XFF';—— 必须为ONLINE才能继续 - 在 SQL*Plus 中离线表空间:
ALTER TABLESPACE xff OFFLINE; - 进入 RMAN(已连接目标库):
RMAN TARGET / - 执行复制:
BACKUP AS COPY TABLESPACE xff FORMAT '+DG2';—— 注意这里FORMAT后只写磁盘组名,不带斜杠或文件名 - 切换指向新位置:
SWITCH TABLESPACE xff TO COPY;—— 此步更新控制文件,让数据字典指向新拷贝 - 在线表空间:
SQL 'ALTER TABLESPACE xff ONLINE';
容易踩的坑和关键检查点
常见报错和应对方式:
-
ORA-01157: cannot identify/lock data file:说明某节点仍尝试访问旧路径文件。检查所有RAC节点是否都执行了OFFLINE和SWITCH;确认v$datafile中该文件路径已在所有节点统一为+DG2/... -
RMAN-06023: no backup or copy of datafile found to switch:SWITCH前未成功完成BACKUP AS COPY,或复制中途失败但未报错。执行LIST COPY OF TABLESPACE xff;确认拷贝存在且状态为AVAILABLE - 迁移后查询变慢或报
ORA-01110:未清空旧文件就删掉,导致某些后台进程(如DBWR)仍持有句柄。应先确认v$recover_file为空,再用ASMCMD rm +DATA/.../xff01.dbf安全删除源文件 - UNDO 表空间迁移要格外小心:必须在所有RAC节点分别
OFFLINE对应的 UNDO 数据文件,且SWITCH后立即做RECOVER TABLESPACE undotbs1;,否则实例可能无法启动
真正耗时的是 BACKUP AS COPY 的物理拷贝阶段,尤其对大表空间(如 >100GB)。过程中无法取消,也不能中断 —— 若中止,残留的 copy 会被标记为 EXPIRED,需手动 CROSSCHECK COPY; DELETE EXPIRED COPY; 清理。迁移前务必确认 +DG2 有足够可用空间(asmcmd lsdg +DG2 查看 Usable_file_MB),别只看总容量。


















