合 在Oracle中,如何移动或重命名数据文件?
简介
数据文件查询:
1 2 3 4 5 | col name format a60 set pagesize 9999 select ts#,file#,name,status from v$datafile d where d.status!='ONLINE' ; select * from v$tablespace; |
需要注意的是,对于SYSTEM、SYSAUX和UNDO表空间的数据文件的移动或重命名,强烈建议关闭数据库进行操作,否则可能会引起意外的错误,甚至宕机。
方法1:利用OS拷贝
关闭数据库,利用OS拷贝,该方法适用于任何类型的文件,步骤如下所示:
1 2 3 4 5 | A、SHUTDOWN IMMEDIATE关闭数据库 B、在OS下拷贝数据文件到新的地点 C、STARTUP MOUNT启动数据库到MOUNT状态下 D、ALTER DATABASE RENAME FILE '老文件' TO '新文件'; E、ALTER DATABASE OPEN;打开数据库 |
其实利用OS拷贝也可以联机操作,不关闭数据库,但是只针对可以OFFLINE的数据文件,步骤如下所示:
1 2 3 4 5 | ① alter database datafile '/home/oracle/ocplhr1_test.dbf' offline; ② recover datafile '/home/oracle/ocplhr1_test.dbf' ; ③ ! cp /home/oracle/ocplhr1_test.dbf /u01/app/oracle/oradata/OCPLHR1/ocplhr1_test01.dbf ④ ALTER DATABASE RENAME FILE '/home/oracle/ocplhr1_test.dbf' TO '/u01/app/oracle/oradata/OCPLHR1/ocplhr1_test01.dbf'; ⑤ alter database datafile '/u01/app/oracle/oradata/OCPLHR1/ocplhr1_test01.dbf' online; |
方法2:利用RMAN联机操作
1 2 3 4 5 6 7 8 9 10 11 | RMAN> sql "alter database datafile ''file name'' offline"; RMAN> recover datafile 文件号; RMAN> run { 2> copy datafile 'old file location' to 'new file location'; 3> switch datafile ' old file location' to datafilecopy ' new file location'; 4> } RMAN> sql "alter database datafile ''file name'' online"; -- 或者使用文件号 RMAN> sql "alter database datafile 4 online"; |
利用RMAN与利用OS拷贝的原理一样。在RMAN中,COPY命令是拷贝数据文件,相当于OS的cp命令,而SWITCH则相当于ALTER DATABASE RENAME用来更新控制文件。