在oracle中,允许把一个数据文件从一个物理位置移动到另外一个物理位置。
查询数据文件当前的位置
SQL> set linesize 200
SQL> col FILE_NAME format a60
SQL> select file_name,tablespace_name from dba_data_files;
FILE_NAME TABLESPACE_NAME
------------------------------------------------------------ ------------------------------
/u01/app/oraData/orcl/users01.dbf USERS
/u01/app/oraData/orcl/undotbs01.dbf UNDOTBS1
/u01/app/oraData/orcl/sysaux01.dbf SYSAUX
/u01/app/oraData/orcl/system01.dbf SYSTEM
/u01/app/oraData/orcl/hbk_data.dbf HBK_DATA
/u01/app/oraData/orcl/CMS69_DATA.dbf CMS69_DATA
6 rows selected.
可以知道,HBK_DATA表空间存放的数据文件位置为/u01/app/oraData/orcl/hbk_data.dbf
把该数据文件离线
SQL> alter tablespace HBK_DATA offline normal;
Tablespace altered.
然后通过操作系统命令,把hbk_data.dbf文件移动到/u01/app/oraData/bak/目录下
SQL> ho mkdir /u01/app/oraData/bak
SQL> ho mv /u01/app/oraData/orcl/hbk_data.dbf /u01/app/oraData/bak/
SQL> ho ls /u01/app/oraData/bak
hbk_data.dbf
修改控制文件,把数据文件hbk_data.dbf改成/u01/app/oraData/bak
SQL> alter tablespace HBK_DATA rename datafile '/u01/app/oraData/orcl/hbk_data.dbf' to '/u01/app/oraData/bak/hbk_data.dbf';
Tablespace altered.
然后把该数据文件在线
SQL> alter tablespace HBK_DATA online;
Tablespace altered.
执行查询,可以看到数据文件已经移动成功。