重庆思庄Oracle、Redhat认证学习论坛

标题: 12c新特性之二:在线进行数据文件移动 [打印本页]

作者: 郑全    时间: 2017-4-1 17:51
标题: 12c新特性之二:在线进行数据文件移动
本帖最后由 郑全 于 2017-4-1 17:53 编辑

比如我们的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

SQL>


其他文件都在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>





会话二:
  另外开一个窗口:
  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

  SQL> r
    1* select employee_id,salary from emp where employee_id=100

  EMPLOYEE_ID     SALARY
  ----------- ----------
        100      26400

  SQL> commit;

  提交完成。

  SQL>

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










欢迎光临 重庆思庄Oracle、Redhat认证学习论坛 (http://bbs.cqsztech.com/) Powered by Discuz! X3.2