手把手教你迁移Oracle ASM文件 跨磁盘组操作指南
在管理Oracle数据库时,我们经常需要把ASM文件从一个磁盘组挪到另一个磁盘组。今天就给大家分享两种亲测有效的迁移方法,连系统表空间怎么操作都会讲到,建议先收藏再看!
迁移前的准备工作
首先记住两个重要知识点:
- 从Oracle 12c开始,官方推荐用SQL语句直接操作(文末会教)
- 传统方法主要依赖RMAN工具,毕竟ASM文件不能像普通文件那样直接操作
通用迁移步骤(6步搞定)
- 锁定目标文件
登录数据库执行:
1 | SELECT FILE_NAME FROM DBA_DATA_FILES; |
比如我们要移动这个文件:
+ASMDSK2/orcl/datafile/users.256.565313879
- 确认目标磁盘组
在ASM实例中查看:
1 | SELECT GROUP_NUMBER, NAME FROM V$ASM_DISKGROUP; |
假设我们要移到ASMDSK1这个组
- 让文件下线
1 | ALTER DATABASE DATAFILE '+ASMDSK2/.../users.256.565313879' OFFLINE; |
两种迁移方法任选
👉 方法一:DBMS_FILE_TRANSFER(适合小文件)
- 创建目录对象
1 | -- 在源和目标磁盘组创建目录 |
- 执行文件拷贝
1 | BEGIN |
👉 方法二:RMAN拷贝(推荐大文件)
1 | rman target system@orcl10 |
看到类似这样的输出就成功了:
1 | channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:03 |
后续收尾工作
- 更新文件路径
1 | ALTER DATABASE RENAME FILE '+ASMDSK2/...' TO '+ASMDSK1/...'; |
- 恢复并上线
1 | RECOVER DATAFILE '+ASMDSK1/...'; |
- 确认迁移结果
1 | SELECT FILE_NAME FROM DBA_DATA_FILES; |
系统表空间特殊处理
想动system/sysaux表空间?得这样操作:
1 | # 先备份到新磁盘组 |
12c版本专属福利
直接用SQL语句搞定:
1 | ALTER DATABASE MOVE DATAFILE '+dgroup_01/...' TO '+dgroup_02/...'; |
注意事项:
- 迁移时数据库需处于OPEN状态+归档模式
- 99%的ASM文件不用手动删,系统会自动清理
- 手动删除要用全路径,否则会报ORA-15177错误
如果操作过程中遇到问题,欢迎在评论区留言讨论~觉得有用记得点个赞哦!
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Chan Revival Sky!
评论