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空間也釋放了。