Oracle Database 12c:重命名与移动数据文件(move datafile)
在Oracle Database 12c中,可以在数据文件联机时重命名或移动它们,但在12c之前,这种操作是不允许的,必须先使数据文件脱机才能执行移动或重命名等维护操作。
实现数据文件的移动或重命名是通过以下命令实现的:
alter database move datafile
该命令为Oracle Database 12c中新增的指令。
比起之前的移动操作,它在很大程度上简化了有关数据文件的维护操作。
以下代码日志为在我的本地环境中的数据文件维护过程,以说明具体的运用方法。
重命名数据文件:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 |
[oracle@ora12c - allah:~]$ sqlplus / as sysdba SQL*Plus: Release 12.1.0.2.0 Production on Fri Nov 7 17:22:38 2014 Copyright (c) 1982, 2014, Oracle. All rights reserved. Connected to: Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production With the Partitioning, OLAP, Advanced Analytics and Real Application Testing options SQL> col file_name for a55 SQL> set pagesize 300 SQL> set linesize 300 SQL> SQL> select file_name,file_id,online_status from dba_data_files; FILE_NAME FILE_ID ONLINE_ ------------------------------------------------------- ---------- ------- /ora_data/allah/system01.dbf 1 SYSTEM /ora_data/allah/sysaux01.dbf 3 ONLINE /ora_data/allah/undotbs01.dbf 4 ONLINE /ora_data/allah/users01.dbf 6 ONLINE /ora_data/ALLAH/datafile/o1_mf_allah_b5jmqm12_.dbf 5 ONLINE /ora_data/ALLAH/datafile/o1_mf_adamhuan_b5jqs1c4_.dbf 2 ONLINE /ora_data/ALLAH/datafile/o1_mf_irons_b5p0x1ks_.dbf 7 ONLINE 7 rows selected. SQL> !ls -l /ora_data/allah/ total 2235920 -rw-r----- 1 oracle oinstall 10043392 Nov 7 17:23 control01.ctl -rw-r----- 1 oracle oinstall 52429312 Nov 7 01:01 redo01.log -rw-r----- 1 oracle oinstall 52429312 Nov 7 17:21 redo02.log -rw-r----- 1 oracle oinstall 52429312 Nov 6 22:24 redo03.log -rw-r----- 1 oracle oinstall 775954432 Nov 7 17:21 sysaux01.dbf -rw-r----- 1 oracle oinstall 838868992 Nov 7 17:21 system01.dbf -rw-r----- 1 oracle oinstall 206577664 Nov 7 17:06 temp01.dbf -rw-r----- 1 oracle oinstall 141565952 Nov 7 17:21 undotbs01.dbf -rw-r----- 1 oracle oinstall 209723392 Nov 7 01:06 users01.dbf SQL> SQL> alter database move datafile '/ora_data/allah/users01.dbf' to '/ora_data/allah/users_tablespace01.dbf'; Database altered. SQL> select file_name,file_id,online_status from dba_data_files; FILE_NAME FILE_ID ONLINE_ ------------------------------------------------------- ---------- ------- /ora_data/allah/system01.dbf 1 SYSTEM /ora_data/allah/sysaux01.dbf 3 ONLINE /ora_data/allah/undotbs01.dbf 4 ONLINE /ora_data/allah/users_tablespace01.dbf 6 ONLINE /ora_data/ALLAH/datafile/o1_mf_allah_b5jmqm12_.dbf 5 ONLINE /ora_data/ALLAH/datafile/o1_mf_adamhuan_b5jqs1c4_.dbf 2 ONLINE /ora_data/ALLAH/datafile/o1_mf_irons_b5p0x1ks_.dbf 7 ONLINE 7 rows selected. SQL> !ls -l /ora_data/allah/ | grep --color users -rw-r----- 1 oracle oinstall 209723392 Nov 7 17:25 users_tablespace01.dbf SQL> |
移动数据文件:
文件系统中创建新的路径。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
[root@ora12c ~]# ls -l / | grep --color ora drwxrwxrwx 8 oracle oinstall 4096 Nov 3 19:58 ora_data drwxr-xr-x 3 oracle oinstall 4096 Oct 15 20:52 u01 [root@ora12c ~]# [root@ora12c ~]# mkdir /ora_data01 [root@ora12c ~]# chown -R oracle.oinstall /ora_data01/ [root@ora12c ~]# [root@ora12c ~]# ls -l / | grep --color ora drwxrwxrwx 8 oracle oinstall 4096 Nov 3 19:58 ora_data drwxr-xr-x 2 oracle oinstall 4096 Nov 7 17:27 ora_data01 drwxr-xr-x 3 oracle oinstall 4096 Oct 15 20:52 u01 [root@ora12c ~]# [root@ora12c ~]# su - oracle [oracle@ora12c - allah:~]$ cd /ora_data01/ [oracle@ora12c - allah:/ora_data01]$ ls [oracle@ora12c - allah:/ora_data01]$ mkdir allah [oracle@ora12c - allah:/ora_data01]$ ll total 4 drwxr-xr-x 2 oracle oinstall 4096 Nov 7 17:28 allah [oracle@ora12c - allah:/ora_data01]$ cd allah/ [oracle@ora12c - allah:/ora_data01/allah]$ pwd /ora_data01/allah [oracle@ora12c - allah:/ora_data01/allah]$ |
SQL*Plus中移动:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
SQL> select file_name,file_id,online_status from dba_data_files; FILE_NAME FILE_ID ONLINE_ ------------------------------------------------------- ---------- ------- /ora_data/allah/system01.dbf 1 SYSTEM /ora_data/allah/sysaux01.dbf 3 ONLINE /ora_data/allah/undotbs01.dbf 4 ONLINE /ora_data/allah/users_tablespace01.dbf 6 ONLINE /ora_data/ALLAH/datafile/o1_mf_allah_b5jmqm12_.dbf 5 ONLINE /ora_data/ALLAH/datafile/o1_mf_adamhuan_b5jqs1c4_.dbf 2 ONLINE /ora_data/ALLAH/datafile/o1_mf_irons_b5p0x1ks_.dbf 7 ONLINE 7 rows selected. SQL> !ls -l /ora_data/allah/ | grep --color users -rw-r----- 1 oracle oinstall 209723392 Nov 7 17:25 users_tablespace01.dbf SQL> !ls -l /ora_data01/allah/ total 0 SQL> SQL> alter database move datafile 6 to '/ora_data01/allah/users_tablespace01.dbf' keep; Database altered. SQL> select file_name,file_id,online_status from dba_data_files; FILE_NAME FILE_ID ONLINE_ ------------------------------------------------------- ---------- ------- /ora_data/allah/system01.dbf 1 SYSTEM /ora_data/allah/sysaux01.dbf 3 ONLINE /ora_data/allah/undotbs01.dbf 4 ONLINE /ora_data01/allah/users_tablespace01.dbf 6 ONLINE /ora_data/ALLAH/datafile/o1_mf_allah_b5jmqm12_.dbf 5 ONLINE /ora_data/ALLAH/datafile/o1_mf_adamhuan_b5jqs1c4_.dbf 2 ONLINE /ora_data/ALLAH/datafile/o1_mf_irons_b5p0x1ks_.dbf 7 ONLINE 7 rows selected. SQL> SQL> !ls -l /ora_data/allah/ | grep --color users -rw-r----- 1 oracle oinstall 209723392 Nov 7 17:31 users_tablespace01.dbf SQL> !ls -l /ora_data01/allah/ total 205012 -rw-r----- 1 oracle oinstall 209723392 Nov 7 17:31 users_tablespace01.dbf SQL> |
如上所示:
关于“alter database move datafile”的语法如下:
alter database move datafile 源文件 to 目标文件 <参数>;
其中源文件可以通过数据文件的FILE_NAME,也可以指定数据文件的FILE_ID。
但对于目标文件,由于数据库中没有记录,所以不存在FILE_ID,故目标文件的指定只可能是目标地址的绝对路径(包含数据文件名)。
而关于参数,你有两个选择:KEEP或REUSE。
KEEP,移动数据文件的时候,可以保留原始文件。
REUSE,如果目标路径存在相同的文件,覆盖已有文件。
注意,如果某个数据文件正在被数据库使用,则Oracle不允许覆盖。
——————————————————————
Ending。