N 多年前安装的 oracle 数据库,巡检的时候发现磁盘满了,检查发现是数据文件占用了很大的空间,当前存放数据文件的磁盘不能再进行扩容,于是准备把业务数据文件迁移到其他磁盘分区。
迁移数据文件主要有两种方法:
- alter database rename file ··· to ···
- alter tablespace ··· rename datafile ··· to ···
这两种方法都可以迁移数据文件,但是操作上有些不同,主要体现在以下方面:
方法1:数据库必须处于mount状态,该方法适用于所有的数据文件,包括 system 数据文件;- 方法2:与方法1不同,此时数据库必须处于open状态,且该方法只适用于非 system 表空间的数据文件。
接下来以迁移TS01表空间的数据为例,分别使用两种不同的方法进行操作:
一、使用alter database rename file ··· to ···
首先,查看当前数据文件路径:
在新的磁盘分区上创建新的数据文件存放路径,并授予相应的用户权限:
关闭数据库,并拷贝文件:
将数据库启动到mount状态,并对数据文件进行重命名操作:
打开数据库,并查看数据文件的状态,结果显示,表空间TS01的数据文件已经在新的路径下了:
查询表空间中表的数据,用于验证数据的完整性:
结果显示数据完好没有丢失,接下来可以在系统中删掉原来的文件从而释放存储空间:
二、使用alter tablespace ··· rename datafile ··· to ···
还是以TS01表空的数据为例,再把数据迁移回原来的路径。
首先在EMP表中插入一条新的数据:
将TS01表空间offline:
将表空间的数据文件拷贝回原来的位置(这里省略了目标位置的用户权限设置):
使用alter tablespace命令rename datafile到目标位置:
将目标表空间进行online操作,并检查数据文件路径:
验证表空间的数据,查询表数据没有异常:
最后在系统中删掉原来的文件从而释放存储空间: