oracle 12c/19c 在线移动表空间数据文件(Online Datafile Move in Oracle Database 12/19c)

11g时是无法在线移动数据文件的,12c增强了移动数据文件的功能,不仅可以更改路径,还可以给数据文件改名。在Oracle 12c之前,移动数据文件一直是脱机任务。可以采用RMAN来最大程度地减少停机时间,但是您无法将其完全删除。Oracle 12c对该ALTER DATABASE命令进行了增强,以使数据文件可以联机移动.

基本语法

语法的文本描述如下所示:

ALTER DATABASE MOVE DATAFILE ( 'filename' | 'ASM_filename' | file_number )
 [ TO ( 'filename' | 'ASM_filename' ) ]
 [ REUSE ] [ KEEP ]

keep 保留原有数据文件 

reuse 重用数据文件

默认就是重用数据文件(不加keep或者reuse)

可以使用文件编号或名称指定源文件,而必须使用文件名指定目标文件。REUSE关键字表示,即使它已经存在,新的文件应该被创建。该KEEP关键字指示数据文件的原件应保留。

当源文件是OMF文件时,KEEP不能使用选项。如果目标文件是OMF文件,则TO可以省略子句,并且将使用该DB_CREATE_FILE_DEST位置的OMF名称创建该文件

ALTER DATABASE MOVE DATAFILE语法不适用于临时文件,且你还要有权限。

案例

背景:

由于/u01目录使用率过高,现在想把数据文件从 /u01移到 /oradata 目录下,oracle版本是19c (非pdb),linux 7.5环境。

 select file_name from dba_data_files;

 

如果是PDB容器,那么移动数据文件的时候,需要先切换到对应的pdb.

ALTER SESSION SET container=pdbXXX;

set lin 200 pages 200
col file_name for a100
select file_name,file_id from dba_data_files where tablespace_name='NB_TBS_YOBET';

虽然我的也是OMF文件系统,但是我没有设置db_create_file_dest

 默认是重用数据文件(即原数据文件不保留,生成指定的文件名的数据文件),下面案例是估计加数据文件路径或者是数据文件编号:

ALTER SESSION SET container=pdbXXX; --如果是PDB

ALTER DATABASE MOVE DATAFILE '/u01/app/oracle/oradata/ttfc/NB_TBS_YOBET01.dbf' to '/oradata/ttfc/NB_TBS_YOBET01.dbf';
ALTER DATABASE MOVE DATAFILE '/u01/app/oracle/oradata/ttfc/NB_TBS_YOBET02.dbf' to '/oradata/ttfc/NB_TBS_YOBET020.dbf';
ALTER DATABASE MOVE DATAFILE '/u01/app/oracle/oradata/ttfc/NB_TBS_YOBET03.dbf' to '/oradata/ttfc/NB_TBS_YOBET03.dbf';
ALTER DATABASE MOVE DATAFILE '/u01/app/oracle/oradata/ttfc/NB_TBS_YOBET04.dbf' to '/oradata/ttfc/NB_TBS_YOBET04.dbf';
ALTER DATABASE MOVE DATAFILE '/u01/app/oracle/oradata/ttfc/NB_TBS_YOBET05.dbf' to '/oradata/ttfc/NB_TBS_YOBET05.dbf';
ALTER DATABASE MOVE DATAFILE '/u01/app/oracle/oradata/ttfc/NB_TBS_YOBET06.dbf' to '/oradata/ttfc/NB_TBS_YOBET06.dbf';
ALTER DATABASE MOVE DATAFILE '/u01/app/oracle/oradata/ttfc/NB_TBS_YOBET07.dbf' to '/oradata/ttfc/NB_TBS_YOBET07.dbf';
ALTER DATABASE MOVE DATAFILE '/u01/app/oracle/oradata/ttfc/NB_TBS_YOBET08.dbf' to '/oradata/ttfc/NB_TBS_YOBET08.dbf';
ALTER DATABASE MOVE DATAFILE 17 to '/oradata/ttfc/NB_TBS_YOBET09.dbf';
ALTER DATABASE MOVE DATAFILE 18 to '/oradata/ttfc/NB_TBS_YOBET10.dbf';
ALTER DATABASE MOVE DATAFILE 22 to '/oradata/ttfc/NB_TBS_YOBET14.dbf';

 查看alert日志,在进行数据文件move的时候,会切换日志文件以及检查点,生成RBA scn

 数据文件全部移动到/oradata/ttfc/目录下了,/u01空间也释放了。

原文地址:https://www.cnblogs.com/hmwh/p/14453984.html