12c 在线进行数据文件移动

比如我们的users表空间对应的数据文件和其他数据文件 不在一个位置,觉得维护起来不方便,

如下:

SQL> select name from v$datafile;

NAME

-------------------------------------------------------

D:\ORACLE\ORADATA\ORCL\SYSTEM01.DBF

D:\ORACLE\ORADATA\ORCL\SYSAUX01.DBF

D:\ORACLE\ORADATA\ORCL\UNDOTBS01.DBF

D:\ORACLE\USERS01.DBF

其他文件都在D:\ORACLE\ORADATA\ORCL\,而users数据文件在d:\oracle\,我们想移动该数据文件,12c以前版本,我们在移动之前,必须把这个数据文件必须offline,然后拷贝到目标位置,之后,在修改数据库字典信息,最后,让数据文件在线.如果是windows,还可能出现原始文件无法移动的问题,现在在12c里面,我们只需要一条命令即可以搞定:

会话一:

SQL> conn hr/hr

已连接。

SQL> create table emp tablespace users as select * from employees;

表已创建。

SQL> COL SEGMENT_Name for a30

SQL> select segment_name,tablespace_name from user_segments where segment_name='EMP'

SEGMENT_NAME TABLESPACE_NAME

------------------------------ ------------------------------

EMP USERS

SQL> update emp set salary=salary*1.10 where employee_id=100;

已更新 1 行。

会话二:

另外开一个窗口:

SQL> alter database move datafile 'D:\ORACLE\USERS01.DBF' to 'D:\ORACLE\ORADATA\ORCL\USERS01.DBF';

数据库已更改。

SQL> 在看文件,已经移动了,如果看操作系统上,文件也已经移动到新的位置.

SQL> select name from v$datafile;

NAME

-----------------------------------------------------

D:\ORACLE\ORADATA\ORCL\SYSTEM01.DBF

D:\ORACLE\ORADATA\ORCL\SYSAUX01.DBF

D:\ORACLE\ORADATA\ORCL\UNDOTBS01.DBF

D:\ORACLE\ORADATA\ORCL\USERS01.DBF

再回到会话一:

SQL> select employee_id,salary from emp where employee_id=100;

EMPLOYEE_ID SALARY

----------- ----------

100 26400

1* select employee_id,salary from emp where employee_id=100

EMPLOYEE_ID SALARY

----------- ----------

100 26400

SQL> commit;

提交完成。

我们看到,会话一并没有提交事务,可以看出移动数据文件确实是在线作的,不需要在移动数据文件之前,需要把数据文件离线,然后在在线.

  • 发表于:
  • 原文链接:https://kuaibao.qq.com/s/20180622A142BQ00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券