1. 程式人生 > >Oracle 12.1新特性:在線rename或relocate數據文件

Oracle 12.1新特性:在線rename或relocate數據文件

oracle 12 move datafile

在Oracle12.1之前的版本中要重命名數據文件或移動數據文件需要關閉數據庫或把表空間/數據文件置為offline狀態才可以,參考之前總結的Oracle修改數據文件名/移動數據文件。但到了12.1版本,可以直接在數據文件online狀態下把數據文件重命名或移動數據文件。

要實現這一功能需要使用ALTER DATABASE MOVE DATAFILE 語句,語法如下

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

下面在12.2版本測試這一功能

[email protected]>select * from v$version;

BANNER										     CON_ID
-------------------------------------------------------------------------------- ----------
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production		  0
PL/SQL Release 12.2.0.1.0 - Production							  0
CORE	12.2.0.1.0	Production								  0
TNS for Linux: Version 12.2.0.1.0 - Production						  0
NLSRTL Version 12.2.0.1.0 - Production							  0

1、創建測試表空間及數據文件:

[email protected]>create tablespace t_move datafile ‘/home/oracle/t_move.dbf‘ size 50m ;

Tablespace created.

[email protected]>col name for a50
[email protected]>select d.name,d.status from v$datafile d,v$tablespace t where t.ts#=d.ts# and t.name=‘T_MOVE‘;

NAME						   STATUS
-------------------------------------------------- -------
/home/oracle/t_move.dbf 			   ONLINE

現在數據文件‘/home/oracle/t_move.dbf‘為ONLINE狀態

2、執行重命名操作

[email protected]>alter database move datafile ‘/home/oracle/t_move.dbf‘ to ‘/home/oracle/t_move01.dbf‘;

Database altered.

[email protected]>select d.name,d.status from v$datafile d,v$tablespace t where t.ts#=d.ts# and t.name=‘T_MOVE‘;

NAME						   STATUS
-------------------------------------------------- -------
/home/oracle/t_move01.dbf			   ONLINE

[email protected]>!ls -l /home/oracle/t_move01.dbf
-rw-r----- 1 oracle oinstall 52436992 Jul 11 16:07 /home/oracle/t_move01.dbf

[email protected]>!ls -l /home/oracle/t_move.dbf
ls: cannot access /home/oracle/t_move.dbf: No such file or directory

可以看到文件名從t_move.dbf改為了t_move01.dbf,原文件已經不存在了。

3、執行移動目錄操作

[email protected]>alter database move datafile ‘/home/oracle/t_move01.dbf‘ to ‘/u01/app/oracle/oradata/ora12c/t_move01.dbf‘;

Database altered.

[email protected]>!ls -l /u01/app/oracle/oradata/ora12c/t_move01.dbf
-rw-r----- 1 oracle oinstall 52436992 Jul 11 16:10 /u01/app/oracle/oradata/ora12c/t_move01.dbf

[email protected]>!ls -l /home/oracle/t_move01.dbf
ls: cannot access /home/oracle/t_move01.dbf: No such file or directory

[email protected]>select d.name,d.status from v$datafile d,v$tablespace t where t.ts#=d.ts# and t.name=‘T_MOVE‘;

NAME						   STATUS
-------------------------------------------------- -------
/u01/app/oracle/oradata/ora12c/t_move01.dbf	   ONLINE

從上面的結果可以看到數據文件從‘/home/oracle‘目錄移動到了‘/u01/app/oracle/oradata/ora12c‘目錄下了。

4、copy數據文件到目標目錄,保留原文件

[email protected]>alter database move datafile  ‘/u01/app/oracle/oradata/ora12c/t_move01.dbf‘ to ‘/home/oracle/t_move01.dbf‘ keep;

Database altered.

[email protected]>select d.name,d.status from v$datafile d,v$tablespace t where t.ts#=d.ts# and t.name=‘T_MOVE‘;

NAME						   STATUS
-------------------------------------------------- -------
/home/oracle/t_move01.dbf			   ONLINE

[email protected]>!ls -l /home/oracle/t_move01.dbf
-rw-r----- 1 oracle oinstall 52436992 Jul 11 16:15 /home/oracle/t_move01.dbf

[email protected]>!ls -l /u01/app/oracle/oradata/ora12c/t_move01.dbf
-rw-r----- 1 oracle oinstall 52436992 Jul 11 16:15 /u01/app/oracle/oradata/ora12c/t_move01.dbf

從上面的結果可以看到數據文件改為了/home/oracle/t_move01.dbf,但原來的數據文件仍然被保留。

5、移動數據文件到ASM存儲

--文件系統到ASM
ALTER DATABASE MOVE DATAFILE ‘/u01/oracle/rbdb1/user1.dbf‘ 
  TO ‘+dgroup_01/data/orcl/datafile/user1.dbf‘;
--ASM到ASM
ALTER DATABASE MOVE DATAFILE ‘+dgroup_01/data/orcl/datafile/user1.dbf‘ 
  TO ‘+dgroup_02/data/orcl/datafile/user1.dbf‘;

參考:http://docs.oracle.com/database/121/ADMIN/dfiles.htm#ADMIN13837

Oracle 12.1新特性:在線rename或relocate數據文件