Oracle移动或重命名数据文件

数据文件查询

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拷贝

1.关闭数据库,利用OS拷贝,该方法适用于任何类型的文件,步骤如下所示:

1、SHUTDOWN IMMEDIATE关闭数据库
2、在OS下拷贝数据文件到新的地点
3、STARTUP MOUNT启动数据库到MOUNT状态下
4、ALTER DATABASE RENAME FILE '老文件' TO '新文件';
5、ALTER DATABASE OPEN;打开数据库

2.其实利用OS拷贝也可以联机操作,不关闭数据库,但是只针对可以OFFLINE的数据文件,步骤如下所示

1、alter database datafile '/home/oracle/ocplhr1_test.dbf' offline;
2、recover datafile '/home/oracle/ocplhr1_test.dbf' ;
3、! cp  /home/oracle/ocplhr1_test.dbf  /u01/app/oracle/oradata/OCPLHR1/ocplhr1_test01.dbf
4、ALTER DATABASE RENAME FILE '/home/oracle/ocplhr1_test.dbf' TO '/u01/app/oracle/oradata/OCPLHR1/ocplhr1_test01.dbf';
5、alter database datafile '/u01/app/oracle/oradata/OCPLHR1/ocplhr1_test01.dbf' online;

方法2:利用RMAN联机操作

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";

示例:

 SYS@LHR11G> col name format a60
 SYS@LHR11G> set pagesize 9999
 SYS@LHR11G> select ts#,file#,name,status from v$datafile d where d.status!='ONLINE' ;
 
        TS#      FILE# NAME                                                         STATUS
 ---------- ---------- ------------------------------------------------------------ --------------
          0          1 /u01/app/oracle/oradata/LHR11G/system01.dbf                  SYSTEM
          4          4 /u01/app/oracle/oradata/LHR11G/users01.dbf                   RECOVER

 RMAN> sql "alter database datafile 4 offline";
 
 sql statement: alter database datafile 4 offline
 
 RMAN> recover datafile 4;
 
 Starting recover at 2022-11-14 16:06:56
 using channel ORA_DISK_1
 
 starting media recovery
 media recovery complete, elapsed time: 00:00:00
 
 Finished recover at 2022-11-14 16:06:56
 
 RMAN> run {
 2>  copy datafile '/u01/app/oracle/oradata/LHR11G/users01.dbf' to '/u01/app/oracle/oradata/LHR11G/users01_test.dbf';
 3>  switch datafile '/u01/app/oracle/oradata/LHR11G/users01.dbf' to datafilecopy '/u01/app/oracle/oradata/LHR11G/users01_test.dbf';
 4>  }
 
 Starting backup at 2022-11-14 16:09:24
 using channel ORA_DISK_1
 channel ORA_DISK_1: starting datafile copy
 input datafile file number=00004 name=/u01/app/oracle/oradata/LHR11G/users01.dbf
 output file name=/u01/app/oracle/oradata/LHR11G/users01_test.dbf tag=TAG20221114T160924 RECID=2 STAMP=1120752565
 channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:01
 Finished backup at 2022-11-14 16:09:25
 
 datafile 4 switched to datafile copy
 input datafile copy RECID=2 STAMP=1120752565 file name=/u01/app/oracle/oradata/LHR11G/users01_test.dbf
 
 RMAN>  sql "alter database datafile 4 online";
 
 sql statement: alter database datafile 4 online
 
 
 SYS@LHR11G> select ts#,file#,name,status from v$datafile d  ;
 
        TS#      FILE# NAME                                                         STATUS
 ---------- ---------- ------------------------------------------------------------ --------------
          0          1 /u01/app/oracle/oradata/LHR11G/system01.dbf                  SYSTEM
          1          2 /u01/app/oracle/oradata/LHR11G/sysaux01.dbf                  ONLINE
          2          3 /u01/app/oracle/oradata/LHR11G/undotbs01.dbf                 ONLINE
          4          4 /u01/app/oracle/oradata/LHR11G/users01_test.dbf              OFFLINE
          6          5 /u01/app/oracle/oradata/LHR11G/example01.dbf                 ONLINE
 
 SYS@LHR11G> exit
 Disconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
 With the Partitioning, OLAP, Data Mining and Real Application Testing options
 [oracle@test ~]$ ll /u01/app/oracle/oradata/LHR11G/
 total 2601172
 -rw-r----- 1 oracle oinstall   9846784 Nov 14 16:09 control01.ctl
 -rw-r----- 1 oracle oinstall 363077632 Nov 14 13:41 example01.dbf
 -rw-r----- 1 oracle oinstall  52429312 Nov 14 16:09 redo01.log
 -rw-r----- 1 oracle oinstall  52429312 Nov 14 06:06 redo02.log
 -rw-r----- 1 oracle oinstall  52429312 Nov 14 13:36 redo03.log
 -rw-r----- 1 oracle oinstall 859840512 Nov 14 16:09 sysaux01.dbf
 -rw-r----- 1 oracle oinstall 817897472 Nov 14 16:09 system01.dbf
 -rw-r----- 1 oracle oinstall  54534144 Nov 14 12:18 temp01.dbf
 -rw-r----- 1 oracle oinstall 382738432 Nov 14 16:09 undotbs01.dbf
 -rw-r----- 1 oracle oinstall   9183232 Nov 14 16:06 users01.dbf
 -rw-r----- 1 oracle oinstall   9183232 Nov 14 16:09 users01_test.dbf

方法3:利用ALTER TABLESPACE操作

1、OFFLINE相应的表空间:ALTER TABLESPACE TS_LHRDATA OFFLINE;
2、用操作系统命令重命名或者移动数据文件
3、用ALTER TABLESPACE命令来重命名数据库中的文件:ALTER TABLESPACE TS_LHRDATA RENAME DATAFILE '/u01/lhrdb/data01.dbf' TO '/u02/lhrdb/data01_new.dbf';
4、ONLINE表空间:ALTER TABLESPACE TS_LHRDATA ONLINE;

方法4:12c新特性

不同于以往的版本,在Oracle数据库12c R1版本中对数据文件的迁移或重命名不再需要太多繁琐的步骤。

在12c R1中,可以使用ALTER DATABASE MOVE DATAFILE 这样的SQL语句对数据文件进行在线重命名和移动。

而当此数据文件正在传输时,终端用户可以执行查询,DML以及DDL方面的任务。

另外,数据文件可以在存储设备间迁移,如从非ASM迁移至ASM,反之亦然。
重命名数据文件:

SQL> ALTER DATABASE MOVE DATAFILE '/u00/data/users01.dbf' TO '/u00/data/users_01.dbf';

从非ASM迁移数据文件至ASM

SQL> ALTER DATABASE MOVE DATAFILE '/u00/data/users_01.dbf' TO '+DG_DATA';

将数据文件从一个ASM磁盘群组迁移至另一个ASM磁盘群组:

SQL> ALTER DATABASE MOVE DATAFILE '+DG_DATA/DBNAME/DATAFILE/users_01.dbf ' TO '+DG_DATA_02';

在数据文件已存在于新路径的情况下,以相同的命名将其覆盖:

SQL> ALTER DATABASE MOVE DATAFILE '/u00/data/users_01.dbf' TO '/u00/data_new/users_01.dbf' REUSE;

复制文件到一个新路径,同时在原路径下保留其拷贝:

SQL> ALTER DATABASE MOVE DATAFILE '/u00/data/users_01.dbf' TO '/u00/data_new/users_01.dbf' KEEP;

需要注意的是,在12c中,移动数据文件必须进入到相关的容器中才可以,否则会报错“ORA-01516: nonexistent log file, data file, or temporary file "12" in the current container”

总结:

1、若是12c,则可以在线直接操作

2、若是11g,请严格按照步骤来操作,在offline后记得执行recover操作

3、最最重要的一点:在移动数据文件之前,一定记得先查看目的地是否有重名的数据文件,否则会导致数据文件物理覆盖,造成不可恢复的损失!!!! 已碰到网友出现过此类情况!!!

 

posted @ 2023-06-13 19:00  江曹  阅读(856)  评论(0编辑  收藏  举报