〖Task(任务)〗
把数据文件PRODUCT2从E:\ORACLE102\DATDAT\WM\移动到E:\ORACLE102\SECOND\。
〖Cause(原理) 〗
在ORACLE中,允许移动数据文件,允许把一个数据文件从一个物理位置移动到另外一个物理位置。移动数据文件包括两个部分,其一是把数据文件物理上从一个位置移动到另外一个位置,其二是修改数据文件在控制文件中的信息,以反映数据文件的新位置。
〖Action(方法) 〗
u 方法一:数据库打开(OPEN)的情况下,执行下面的步骤:
Step01:查询数据文件的当前位置。
SQL> select file_name,tablespace_name from DBA_DATA_FILES;
FILE_NAME TABLESPACE_NAME
---------------------------------------------------------- ---------------------
E:\ORACLE102\DATDAT\WM\USERS01.DBF USERS
E:\ORACLE102\DATDAT\WM\SYSAUX01.DBF SYSAUX
E:\ORACLE102\DATDAT\WM\UNDOTBS01.DBF UNDOTBS1
E:\ORACLE102\DATDAT\WM\SYSTEM01.DBF SYSTEM
E:\ORACLE102\DATDAT\WM\PRODUCT1 PRODUCT
E:\ORACLE102\DATDAT\WM\BBC1.ORA TBSK2
E:\ORACLE102\DATDAT\WM\BBC2.ORA TBSK2
E:\ORACLE102\DATDAT\WM\PRODUCT2 PRODUCT
8 rows selected
数据文件PRODUCT2的当前位置是E:\ORACLE102\DATDAT\WM\,数据文件PRODUCT2属于表空间PRODUCT。
Step02:使数据文件PRODUCT2所属的表空间PRODUCT离线(offline)
SQL> ALTER TABLESPACE PRODUCT OFFLINENORMAL;
Tablespace altered
Step03:使用操作系统命令把数据文件PRODUCT2从E:\ORACLE102\DATDAT\WM\移动到
E:\ORACLE102\SECOND。
Step04:修改数据文件PRODUCT2在控制文件中的信息。
SQL> ALTER TABLESPACE PRODUCT
2 RENAME DATAFILE 'E:\ORACLE102\DATDAT\WM\PRODUCT2'
3 TO 'E:\ORACLE102\SECOND\PRODUCT2';
Tablespace altered
修改控制文件,把数据文件PRODUCT2的位置改成E:\ORACLE102\SECOND。
Step05:使表空间PRODUCT重新在线(ONLINE)。
SQL> ALTER TABLESPACE PRODUCT ONLINE;
Tablespace altered
Step06:再次查询数据文件的信息。
SQL> select file_name,tablespace_name from DBA_DATA_FILES;
FILE_NAME TABLESPACE_NAME
-----------------------------------------------------------------------
......
E:\ORACLE102\SECOND\PRODUCT2 PRODUCT
......
从输出可以看出,数据文件PRODUCT2的位置已经从E:\ORACLE102\DATDAT\WM\改成
E:\ORACLE102\SECOND。
Step07:立即备份数据库。
〖小贴士(Tip)〗
当数据库的物理结构发生变化时,一定要备份数据库。
u 方法二:在数据库关闭的情况,执行下面的步骤。
Step01:把数据库启动到MOUNT状态。
SQL> startup mount
ORACLE instance started.
Total System Global Area 289406976 bytes
Fixed Size 1248600 bytes
Variable Size 150995624 bytes
Database Buffers 134217728 bytes
Redo Buffers 2945024 bytes
Database mounted.
SQL>
Step02:查询数据文件的当前位置。
SQL> select name from v$datafile;
NAME
--------------------------------------------
E:\ORACLE102\DATDAT\WM\SYSTEM01.DBF
E:\ORACLE102\DATDAT\WM\UNDOTBS01.DBF
E:\ORACLE102\DATDAT\WM\SYSAUX01.DBF
E:\ORACLE102\DATDAT\WM\USERS01.DBF
E:\ORACLE102\DATDAT\WM\PRODUCT1
E:\ORACLE102\DATDAT\WM\BBC1.ORA
E:\ORACLE102\DATDAT\WM\BBC2.ORA
E:\ORACLE102\DATDAT\WM\PRODUCT2
8 rows selected.
Step03:使用操作系统命令把数据文件PRODUCT2从E:\ORACLE102\DATDAT\WM\移动到
E:\ORACLE102\SECOND。
Step04:修改控制文件。
SQL> ALTER DATABASE
2 RENAME FILE 'E:\ORACLE102\DATDAT\WM\PRODUCT2'
3 TO ' E:\ ORACLE102\SECOND\PRODUCT2 ';
Database altered.
修改控制文件,把数据文件PRODUCT2的位置从E:\ORACLE102\DATDAT\WM\改变成
E:\ORACLE102\SECOND。
Step05:查询字典视图,看看数据文件的修改是否正确。
SQL> select name from v$datafile;
NAME
---------------------------------------
E:\ORACLE102\DATDAT\WM\SYSTEM01.DBF
E:\ORACLE102\DATDAT\WM\UNDOTBS01.DBF
E:\ORACLE102\DATDAT\WM\SYSAUX01.DBF
E:\ORACLE102\DATDAT\WM\USERS01.DBF
E:\ORACLE102\DATDAT\WM\PRODUCT1
E:\ORACLE102\DATDAT\WM\BBC1.ORA
E:\ORACLE102\DATDAT\WM\BBC2.ORA
E:\ORACLE102\SECOND\PRODUCT2
8 rows selected.
从输出可以看出,数据文件PRODUCT2的位置已经被改变成E:\ORACLE102\SECOND。
Step06:打开数据库。
SQL> alter database open;
Database altered.
Step07:立即备份数据库。
〖小贴士(Tip)〗
数据库的物理结构发生变化的时,一定要备份数据库。