Oracle的dbf文件迁移

时间:2024-03-10 08:40:27

1.背景说明

在Oracle数据库中插入了1.5亿条数据,
并且创建了主键索引,
又插入了1.5亿条数据到另外一张表,
导致数据库表空间暴涨到28G,
由于根目录下只有50G的空间,
数据库文件所在磁盘空间不够,
已经撑爆,完全无法写入任何新的文件,
所以需要将数据库dbf迁移到有空间的磁盘。

2.登录Oracle的system用户

sqlplus / as sysdba
system/123456

3 .关闭数据库

shutdown immediate;

有可能无法关闭,报错说system用户没有权限,
实际上是有权限的,只是因为磁盘没有空间,
无法写日志导致无法进行操作,
可以备份或者删除掉一些无用的文件,
空出一点空间。

4.以mount形式加载数据库

startup mount;

启动的时候可能也会报错说initorcl.ora文件找不到,
请参考另外一篇文章。

5.找到需要迁移的dbf文件路径

例如:/data/oracle/oradata/orcl/users01.dbf,
执行如下查询语句可以看到所有dbf文件:

select tablespace_name, file_id,file_name, round(bytes/(1024*1024),0) total_space from dba_data_files order by tablespace_name;

6.修改dbf文件路径

alter database rename file \'/data/oracle/oradata/orcl/users01.dbf\' to \'/home/oracle/oradata/orcl/users01.dbf\';

注:此处路径根据实际情况进行更改,
并且需要提前将/data/oracle/oradata/orcl/users01.dbf文件
复制到新的目录下。

7.恢复介质

recover datafile \'/home/oracle/oradata/orcl/users01.dbf\';

如果不做这一步会报ora-01113,ora-01110错误。

8.打开数据库

alter database open;

9.删除原路径下文件

rm  /data/oracle/oradata/orcl/users01.dbf

删除后,该文件占用的空间就能释放出来,
基本上Oracle服务就能够正常使用了。