rman迁移asm数据库到文件系统需分步完成物理拷贝与控制文件路径更新:先用convert或copy命令拷贝数据文件,再执行alter database rename file更新控制文件路径,否则启动报ora-01157;同时须同步迁移控制文件、redo日志、临时文件及undo文件,并确保权限、路径和数据库状态正确。

RMAN 迁移 ASM 数据库到文件系统,不是“一键切换”,而是分步完成物理拷贝 + 控制文件路径更新。直接执行 convert datafile 或 copy datafile 就能拿到文件,但若跳过后续 alter database rename file,数据库启动会报错 ORA-01157 / ORA-01110 —— 因为控制文件里还记着旧的 ASM 路径。
用 RMAN convert datafile 拷贝单个数据文件(不改控制文件)
这是最轻量、最安全的“只拷贝不注册”方式,适合临时提取、分析或备份准备。
-
convert datafile本质是做块级拷贝+字节序转换(跨平台时必需),即使同平台也支持 ASM ↔ 文件系统双向拷贝 - 目标路径必须是 Oracle 用户有写权限的本地目录,且所在文件系统剩余空间 ≥ 源文件大小
- 命令中
format参数指定输出路径和文件名,不能省略;ASM 路径必须带完整别名(如+DATA/orcl/datafile/users.296.939434861) - 执行后不会修改控制文件,也不会影响在线数据库;拷贝出的文件可直接用
strings查看头部,或用dbv校验
示例:
RMAN> convert datafile '+DATA/orcl/datafile/users.296.939434861' format '/u01/app/oracle/oradata/orcl/users01.dbf';
用 RMAN copy datafile + alter database rename file(正式迁移)
这才是生产环境“迁出 ASM”的标准流程,要求数据库处于 MOUNT 状态,停机窗口可控。
- 先
shutdown immediate→startup mount,避免数据写入导致不一致 -
copy datafile比convert更快(不校验字节序),但仅限同平台;路径写法与convert一致,to后跟绝对路径 - 拷贝完成后必须执行
alter database rename file,一条一条更新控制文件中的路径记录;漏一条,open就失败 - 注意:
rename file的源路径必须和控制文件里一模一样(含 ASM 别名、斜杠、大小写),建议从select name from v$datafile;复制
示例:
RMAN> copy datafile '+DATA/orcl/datafile/system.293.939434861' to '/u01/app/oracle/oradata/orcl/system01.dbf'; SQL> alter database rename file '+DATA/orcl/datafile/system.293.939434861' to '/u01/app/oracle/oradata/orcl/system01.dbf';
控制文件、redo、临时文件也要同步迁移
只动数据文件,数据库照样起不来——控制文件、redo 日志、临时表空间文件都还在 ASM 里。
- 控制文件:用
ASMCMD cp或rman backup current controlfile+restore到文件系统,再修改control_files参数并重启 - redo 日志:不能直接
cp,必须alter database add logfile新建到文件系统,再drop logfile删除旧的(确保已归档且非当前日志) - 临时文件:
alter tablespace temp add tempfile新建,再drop tempfile删除旧的;注意temp表空间可能有多个 tempfile - UNDO 表空间的数据文件也需同样处理,否则
open时报 ORA-01187
容易踩的坑:权限、路径、状态三连错
90% 的失败不是命令写错,而是环境没对齐。
- Oracle 用户对目标目录没有
write权限,或umask导致生成文件不可读,RMAN报 ORA-19505 / ORA-27040 - ASM 路径抄错一个字符(比如把
.293写成.294),copy或convert直接报 ORA-17502 - 忘了在
mount状态下操作,或open前漏掉某条rename file,数据库卡在OPENING状态,查alert.log才发现 ORA-01157 - Oracle 11g 及更早版本,密码文件必须保留在文件系统,不能放在 ASM;迁移后要确认
$ORACLE_HOME/dbs/orapw$ORACLE_SID存在且有效
真正麻烦的从来不是命令本身,而是拷贝完之后那一串必须手动对齐的路径和状态。每一步做完,立刻验证:v$datafile 里是否全是新路径,ls -l 是否文件存在且大小匹配,startup open 是否真能成功。











