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空间也释放了。