rman backup as copy 迁移必须在 mount 状态执行,非归档模式需 resetlogs 打开且无法回退至迁移前 scn;控制文件和 redo 日志须手动重定位,否则启动报 ora-01157 或 ora-01110。
能直接做,但必须停库或至少 mount 状态,且不能跳过控制文件重定位和 redo 重命名这两步——跳了就 ora-01157 或 ora-01110。
RMAN COPY + SWITCH 是核心路径
Oracle 11g 不支持 cp 或 dd 直接拷贝数据文件到 ASM(ASM 文件不暴露为 OS 文件),唯一合法方式是 RMAN 的 BACKUP AS COPY 或 COPY 命令。它会在 ASM 中生成新副本,并记录在控制文件中。
-
COPY DATAFILE n TO '+DG1'适用于单个数据文件迁移(如 RAC 中某节点误建在本地) -
BACKUP AS COPY DATABASE FORMAT '+DG1'适合整库迁移,但要求 ASM 有足够空间容纳全量副本 - 执行前必须确保数据库处于
MOUNT状态(不能OPEN),否则会报ORA-19563: datafile header validation failed - 复制完成后必须立刻执行
SWITCH DATAFILE n TO COPY,否则控制文件仍指向旧路径
控制文件和 redo 日志不能靠 SWITCH 自动处理
控制文件和联机日志不参与 SWITCH DATABASE TO COPY,必须手动重建或重命名,否则启动时必然失败。
- 控制文件:先用
CREATE PFILE FROM SPFILE导出,修改control_files参数为 ASM 路径(如'+DG1/PROD/controlfile/current.256.12345'),再用该 pfile 启动到NOMOUNT,用RESTORE CONTROLFILE FROM ...恢复(若已有备份)或从现有控制文件复制(cp /u01/.../control01.ctl +DG1/...需通过 ASMCMD) - redo 日志:必须用
ALTER DATABASE RENAME FILE '/old/redo01.log' TO '+DG1',一条一条执行;RAC 环境下所有节点的v$logfile路径必须统一指向 ASM,否则另一节点启动时报ORA-01157 - 临时文件和 undo 表空间同理,需
ALTER DATABASE TEMPFILE ... DROP再ADD TEMPFILE到 ASM
容易被忽略的三个硬性前提
没检查这三项,RMAN 迁移中途就会卡死或启动失败。
- ASM 实例必须已启动,且磁盘组
DISKGROUP处于MOUNTED状态(查SELECT name, state FROM v$asm_diskgroup) - 数据库必须已关闭并确认无活动连接(
SELECT * FROM v$session WHERE type != 'BACKGROUND'应为空),否则STARTUP MOUNT可能 hang 住 - 归档模式影响恢复步骤:非归档模式下
RECOVER DATAFILE会报错,此时应确保复制前无未提交事务,或改用BACKUP AS COPY+SWITCH+RECOVER DATABASE(需归档可用)
迁移后验证必须查 v$ views,不能只看 ls
ASM 路径在 OS 层不可见,ls +DG1 无效,只能通过数据库视图确认实际位置。
- 查数据文件:
SELECT file#, name FROM v$datafile—— 所有路径必须以+开头 - 查控制文件:
SELECT name FROM v$controlfile - 查 redo:
SELECT member FROM v$logfile - 查 temp:
SELECT name FROM v$tempfile - 特别注意:如果某文件仍显示文件系统路径,说明对应
SWITCH或RENAME没执行,或执行后没ALTER DATABASE OPEN RESETLOGS











