Oracle数据文件(.dbf)迁移
生产环境Oracle数据库安装在机械硬盘中,当并发量大时,Oarcle进行大量磁盘I/O操作,由于机械硬盘I/O速度有限,导致大量SQL堵塞,变为慢SQL系统极度卡顿。
经过问题排查,SQL语句都已优化查询依然很慢,猜测可能时磁盘I/O太大触及机械硬盘的瓶颈了,服务器中还有一个固态硬盘空间,将Oracle的数据文件迁移到固态硬盘中,磁盘I/O速度应该会大幅度提升从而解决慢SQL导致系统卡顿问题。
总体流程
下面按照步骤进行操作即可:
1、停止业务系统访问
自行将应用关闭,挂载维护页面,避免数据库离线后导致访问出错
。
2、查询表空间数据文件位置
-- 将TEST替换为自己的表空间
select tablespace_name,file_name,online_status from dba_data_files where tablespace_name='TEST';
3、将表空间下线
-- 将TEST替换为自己的表空间
alter tablespace TEST offline;
4、迁移文件位置
Windows需要手动移动.DPF文件到新目录(注意要备份)
Linux可以使用命令移动
5、修改表空间数据文件位置
-- 将TEST替换为自己的表空间
alter tablespace TEST rename datafile 'D:\TEST.DBF' to 'E:\TEST.DBF';
-- 查看表空间数据文件位置,确认没有错误
select tablespace_name,file_name,online_status from dba_data_files where tablespace_name='TEST';
6、上线表空间
-- 将表空间上线
alter tablespace TEST online;
如果执行上线操作时出现错误:
ORA-01113: 文件 9 需要介质恢复
ORA-01110: 数据文件 9: 'E:\TEST.DBF'
按照网上查到的资料使用recover datafile
命令恢复,发现无效。实际移动.dbf文件时,不要使用复制粘贴,直接使用移动即可,重新操作后实测解决问题。
-- 查看表空间是否上线成功
select tablespace_name,file_name,online_status from dba_data_files where tablespace_name='TEST';
至此Oracle的数据文件迁移已经完成,可以通过可视化工具或SqlPlus进行连接测试是否可以正常访问。
再次开放业务系统访问,等并发量上来时再检查磁盘I/O,依然很高,但是已经不存在慢SQL和系统卡顿的问题了。