由于数据库原始安装的原因造成数据库或整个操作系统的不安全或者由于磁盘空间变化再或者由于业务变化造成的I/O性能需要调整等等原因需要数据库管理员进行数据库文件位置的调整.下面通过一个WINDOWS平台的ORACLE数据文件移动为例子讨论一下数据库文件移动的方法,请大家指正.
一.移动数据文件
移动数据文件笔者目前使用的有2种办法,权作抛砖引玉.
方法一、以数据文件为单位移动
1.查看数据文件路径
SQL> select name from v$datafile;
NAME
---------------------------------------------
---------------------------------------------
E:/ORACLE/ORADATA/SLUMGABAK/SYSTEM01.DBF
E:/ORACLE/ORADATA/SLUMGABAK/UNDOTBS01.DBF
E:/ORACLE/ORADATA/SLUMGA/CWMLITE01.DBF
E:/ORACLE/ORADATA/SLUMGA/DRSYS01.DBF
E:/ORACLE/ORADATA/SLUMGA/EXAMPLE01.DBF
E:/ORACLE/ORADATA/SLUMGA/INDX01.DBF
E:/ORACLE/ORADATA/SLUMGA/ODM01.DBF
E:/ORACLE/ORADATA/SLUMGA/TOOLS01.DBF
E:/ORACLE/ORADATA/SLUMGA/USERS01.DBF
E:/ORACLE/ORADATA/SLUMGA/XDB01.DBF
E:/ORACLE/ORADATA/SLUMGABAK/UNDOTBS01.DBF
E:/ORACLE/ORADATA/SLUMGA/CWMLITE01.DBF
E:/ORACLE/ORADATA/SLUMGA/DRSYS01.DBF
E:/ORACLE/ORADATA/SLUMGA/EXAMPLE01.DBF
E:/ORACLE/ORADATA/SLUMGA/INDX01.DBF
E:/ORACLE/ORADATA/SLUMGA/ODM01.DBF
E:/ORACLE/ORADATA/SLUMGA/TOOLS01.DBF
E:/ORACLE/ORADATA/SLUMGA/USERS01.DBF
E:/ORACLE/ORADATA/SLUMGA/XDB01.DBF
2.关闭数据库
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
Database closed.
Database dismounted.
ORACLE instance shut down.
3.MOUNT到数据库
SQL> startup mount
ORACLE instance started.
ORACLE instance started.
Total System Global Area 135338868 bytes
Fixed Size 453492 bytes
Variable Size 109051904 bytes
Database Buffers 25165824 bytes
Redo Buffers 667648 bytes
Database mounted.
Fixed Size 453492 bytes
Variable Size 109051904 bytes
Database Buffers 25165824 bytes
Redo Buffers 667648 bytes
Database mounted.
4.把要移动的数据文件剪切到目标目录,这里的要移动SYSTEM数据文件从'E:/oracle/oradata/slumgabak'到'E:/oracle/oradata/slumga'
4.alter database方法移动数据文件
SQL> alter database rename file 'E:/ORACLE/ORADATA/SLUMGABAK/SYSTEM01.DBF' to 'E
:/ORACLE/ORADATA/SLUMGA/SYSTEM01.DBF';
:/ORACLE/ORADATA/SLUMGA/SYSTEM01.DBF';
Database altered.
5.移动其他数据文件同上.但是我们要注意的是TEMP数据文件.在我们上边列出数据文件的命令里没有包含这个文件.而且我们在
SQL> alter database rename file 'E:/ORACLE/ORADATA/SLUMGA/temp01.DBF' to 'E:/ORA
CLE/ORADATA/SLUMGAbak/temp01.DBF';
alter database rename file 'E:/ORACLE/ORADATA/SLUMGA/temp01.DBF' to 'E:/ORACLE/O
RADATA/SLUMGAbak/temp01.DBF'
*
ERROR at line 1:
ORA-01511: error in renaming log/data files
ORA-01516: nonexistent log file, datafile, or tempfile
"E:/ORACLE/ORADATA/SLUMGA/temp01.DBF"
CLE/ORADATA/SLUMGAbak/temp01.DBF';
alter database rename file 'E:/ORACLE/ORADATA/SLUMGA/temp01.DBF' to 'E:/ORACLE/O
RADATA/SLUMGAbak/temp01.DBF'
*
ERROR at line 1:
ORA-01511: error in renaming log/data files
ORA-01516: nonexistent log file, datafile, or tempfile
"E:/ORACLE/ORADATA/SLUMGA/temp01.DBF"
SQL> alter database rename tempfile 'E:/oracle/oradata/slumga/temp01.dbf' to 'E:
/oracle/oradata/slumgabak/temp01.dbf';
alter database rename tempfile 'E:/oracle/oradata/slumga/temp01.dbf' to 'E:/orac
le/oradata/slumgabak/temp01.dbf'
*
ERROR at line 1:
ORA-02231: missing or invalid option to ALTER DATABASE
/oracle/oradata/slumgabak/temp01.dbf';
alter database rename tempfile 'E:/oracle/oradata/slumga/temp01.dbf' to 'E:/orac
le/oradata/slumgabak/temp01.dbf'
*
ERROR at line 1:
ORA-02231: missing or invalid option to ALTER DATABASE
是不可行的.具体关于TEMP数据文件我们会在下边讨论.
6.移动完以后启动数据库
SQL> alter database open;
SQL> select name,status from v$datafile;
方法二、以表空间为单位进行移动
1.把相应表空间offline
SQL> alter tablespace example offline;
Tablespace altered.
2.操作系统级把数据文件移动到目标目录
3.在ORACLE数据库中把该表空间的所有数据文件改名
SQL> alter tablespace example rename datafile 'E:/ORACLE/ORADATA/SLUMGABAK/examp
le01.DBF' to 'E:/ORACLE/ORADATA/SLUMGA/example01.DBF';
le01.DBF' to 'E:/ORACLE/ORADATA/SLUMGA/example01.DBF';
Tablespace altered.
4.把表空间ONLINE
SQL> alter tablespace example online;
Tablespace altered.
5.此方法对系统表空间system、undo表空间和temp表空间无法使用。
SQL> alter tablespace UNDOTBS1 offline;
alter tablespace UNDOTBS1 offline
*
ERROR at line 1:
ORA-30042: Cannot offline the undo tablespace
alter tablespace UNDOTBS1 offline
*
ERROR at line 1:
ORA-30042: Cannot offline the undo tablespace
SQL> alter tablespace system offline;
alter tablespace system offline
*
ERROR at line 1:
ORA-01541: system tablespace cannot be brought offline; shut down if necessary
SQL> alter tablespace temp offline;
alter tablespace temp offline
*
ERROR at line 1:
ORA-03217: invalid option for alter of TEMPORARY TABLESPACE
如要修改temp表空间的位置,可以选择重新建立一个新的temp表空间,然后把新的表空间设置成默认的临时表空间,然后把老的DROP掉。详细语句
SQL> create temporary tablespace temp2 tempfile 'e:/oracle/tem2.dbf' size 20M reuse
autoextend on next 50m maxsize unlimited;
关闭数据库。mount到数据库。
SQL> alter database default temporary tablespace temp2;
打开数据库
二、移动控制文件
1.用SPFILE启动的数据库
SQL> alter system set control_files='E:/oracle/oradata/slumgabak/CONTROL01.CTL',
'E:/oracle/oradata/slumgabak/CONTROL02.CTL','E:/oracle/oradata/slumgabak/CONTROL
03.CTL' scope=spfile;
'E:/oracle/oradata/slumgabak/CONTROL02.CTL','E:/oracle/oradata/slumgabak/CONTROL
03.CTL' scope=spfile;
System altered.
重启数据库。
SQL> create pfile from spfile;
File created.
2.用pfile启动的数据库
修改E:/oracle/ora92/database/init<SID>.ora 文件,修改参数CONTROL_FILES的值。重新启动数据库。如果有SPFIL重建SPFILE
SQL> create spfile from pfile;
三、移动联机重作日志文件。
1.停止数据库
2.把日志文件移动到新的目标目录
3.mount到数据库,修改日志文件的名字
SQL> alter database rename file 'E:/oracle/oradata/slumga/REDO01.LOG' to 'E:/ora
cle/oradata/slumgabak/REDO01.LOG';
cle/oradata/slumgabak/REDO01.LOG';
Database altered.
SQL> alter database rename file 'E:/oracle/oradata/slumga/REDO02.LOG' to 'E:/ora
cle/oradata/slumgabak/REDO02.LOG';
cle/oradata/slumgabak/REDO02.LOG';
Database altered.
SQL> alter database rename file 'E:/oracle/oradata/slumga/REDO03.LOG' to 'E:/ora
cle/oradata/slumgabak/REDO03.LOG';
cle/oradata/slumgabak/REDO03.LOG';
Database altered.
4.OPEN数据库
SQL> alter database open;
修改完成!