ITPub博客

首页 > 数据库 > Oracle > 使用rman恢复数据文件至新路径

使用rman恢复数据文件至新路径

原创 Oracle 作者:拾翠暮忘归 时间:2014-06-11 20:00:17 0 删除 编辑

说明:归档模式下,数据库打开状态,使用rman恢复数据文件(非系统文件)至新位置,数据库版本11.2.0.1.0------之前做个全备份

当前的数据文件:
SQL>  select FILE_ID,FILE_NAME,TABLESPACE_NAME from  dba_data_files order by FILE_ID; 

   FILE_ID FILE_NAME                                  TABLESPACE_NAME
---------- ---------------------------------------- ------------------------------
         1 /u01/oradata/frank/system01.dbf            SYSTEM
         2 /u01/oradata/frank/sysaux01.dbf             SYSAUX
         3 /u01/oradata/frank/undotbs01.dbf         UNDOTBS1
         4 /u01/oradata/frank/users01.dbf               USERS                                                                 ----当前路径

在表空间users下创建一个用户frank,然后创建一张表,并插入数据,如下:

SQL> conn frank/frank
Connected.
SQL> create table test (a int);
Table created.
SQL> insert into test values(1);
1 row created.
SQL> commit;
Commit complete.
SQL> select * from test;

         A
----------
         1

现在使用rm命令删除数据文件4 '/u01/oradata/frank/users01.dbf',准备将其恢复至新的位置:'/u01/oradata/users01.dbf';
[oracle@frank frank]$ rm users01.dbf 
[oracle@frank frank]$ ll
total 1518264
-rw-r----- 1 oracle oinstall   9748480 Jun 11 14:39 control01.ctl
-rw-r----- 1 oracle oinstall  52429312 Jun 11 13:57 redo01.log
-rw-r----- 1 oracle oinstall  52429312 Jun 11 13:57 redo02.log
-rw-r----- 1 oracle oinstall  52429312 Jun 11 14:39 redo03.log
-rw-r----- 1 oracle oinstall 566239232 Jun 11 14:38 sysaux01.dbf
-rw-r----- 1 oracle oinstall 713039872 Jun 11 14:38 system01.dbf
-rw-r----- 1 oracle oinstall  20979712 Jun 11 11:24 temp01.dbf
-rw-r----- 1 oracle oinstall  99622912 Jun 11 14:38 undotbs01.dbf

此时进行一次检查点切换,使oracle尽快发现数据文件丢失:
SQL> alter system checkpoint; (注意版本问题,这里手动切换检查点,可能会导致实例crash)

System altered.
SQL> select * from v$recover_file;

     FILE# ONLINE  ONLINE_ ERROR                   CHANGE# TIME
---------- ------- ------- -------------------- ---------- ------------------
         4 OFFLINE OFFLINE FILE NOT FOUND                0

此时去查询test表中的数据,确实会报错的:
SQL> select * from test;
select * from test
*
ERROR at line 1:
ORA-00376: file 4 cannot be read at this time
ORA-01110: data file 4: '/u01/oradata/frank/users01.dbf'

使用rman来进行恢复:
基本思路:此时数据库是打开状态,可以进行数据文件级别的恢复,因此要先将异常的数据文件置于offline,使用set newname命令指定新的位置,restore完成数据文件复制之后,用switch datafile命令 来使控制文件中信息保持一致,最后进行recover。

run {
sql 'alter database datafile 4 offline';                                                 
set newname for datafile 4 to '/u01/oradata/users01.dbf';
restore datafile 4;
switch datafile 4;
recover datafile 4;
sql 'alter database datafile 4 online';
}

rman恢复运行过程,如无报错,以下内容可跳过
sql statement: alter database datafile 4 offline

executing command: SET NEWNAME

Starting restore at 11-JUN-14
using channel ORA_DISK_1

channel ORA_DISK_1: starting datafile backup set restore
channel ORA_DISK_1: specifying datafile(s) to restore from backup set
channel ORA_DISK_1: restoring datafile 00004 to /u01/oradata/users01.dbf
channel ORA_DISK_1: reading from backup piece /u01/flash_recovery_area/FRANK/backupset/2014_06_11/o1_mf_nnndf_TAG20140611T112557_9shm2646_.bkp
channel ORA_DISK_1: piece handle=/u01/flash_recovery_area/FRANK/backupset/2014_06_11/o1_mf_nnndf_TAG20140611T112557_9shm2646_.bkp tag=TAG20140611T112557
channel ORA_DISK_1: restored backup piece 1
channel ORA_DISK_1: restore complete, elapsed time: 00:00:01
Finished restore at 11-JUN-14

datafile 4 switched to datafile copy
input datafile copy RECID=2 STAMP=849971894 file name=/u01/oradata/users01.dbf

Starting recover at 11-JUN-14
using channel ORA_DISK_1

starting media recovery
media recovery complete, elapsed time: 00:00:00

Finished recover at 11-JUN-14

sql statement: alter database datafile 4 online
---------------------------------------------------------------------------------------------------------------
此时再去查询:
SQL> select FILE_ID,FILE_NAME,TABLESPACE_NAME from  dba_data_files order by FILE_ID;

   FILE_ID FILE_NAME                                TABLESPACE_NAME
---------- ---------------------------------------- ------------------------------
         1 /u01/oradata/frank/system01.dbf          SYSTEM
         2 /u01/oradata/frank/sysaux01.dbf          SYSAUX
         3 /u01/oradata/frank/undotbs01.dbf         UNDOTBS1
         4 /u01/oradata/users01.dbf                 USERS

路径确实改到新的位置了,再去查询表test中的数据:

SQL> /

         A
----------
         1
数据也在,恢复完成。


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/29602308/viewspace-1180820/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2014-04-11

  • 博文量
    24
  • 访问量
    91785