rman恢复-数据文件与表空间的恢复

数据文件恢复
open状态下恢复关闭后意外丢失的数据文件
除了 system表空间的数据文件(mount)之外, 其它数据文件可以在open(mount也可以)状态下恢复。open状态下恢复数据文件可以减少数据库停用的时间,所以应该在open状态下恢复这些数据文件。
示例一 数据文件被误删除
数据库关闭状态下删除非系统表空间数据文件。
启动数据库到mount状态。
脱机丢失的数据文件,alter database datafile n offline。
打开数据库,alter database open。
转储数据文件,restore datafile n。
使用recover datafile n 应用归档日志。

联机数据文件,alter database datafile n online。

[sql]  view plain copy
  1. --数据库关闭状态下删除非系统表空间数据文件。  
  2. [oracle@localhost ~]$  rm $ORACLE_BASE/product/10.2.0/oradatabak/example01.dbf;  
  3.   
  4. SQL> select file#,error from v$recover_file;    
  5.   
  6.      FILE# ERROR  
  7. ---------- -----------------------------------------------------------------  
  8.          5 FILE NOT FOUND  
  9.   
  10. SQL> select file#,name from v$datafile where file#=5;  
  11.   
  12.      FILE# NAME  
  13. ---------- --------------------------------------------------------------------------------  
  14.          5 /oracle/10g/oracle/product/10.2.0/oradatabak/example01.dbf  
  15.   
  16. --恢复数据文件  
  17. RMAN> run {  
  18.  startup force mount;  
  19.  sql 'alter database datafile 5 offline';  
  20.  sql 'alter database open';  
  21.  restore datafile 5;  
  22.  recover datafile 5;  
  23.  sql 'alter database datafile 5 online';  
  24. 8> }  
示例二 数据文件所在磁盘出现损坏
数据库关闭状态下删除非系统表空间数据文件。
启动数据库到mount状态。
脱机丢失的数据文件,alter database datafile n offline。
打开数据库,alter database open。
在restore database之前,执行set newname为数据文件指定新的位置。
在restore database之后,执行switch datafile改变控制文件中数据文件位置和名称。
之后通过执行recover database应用归档日志。
联机数据文件,alter database datafile n online。
[sql]  view plain copy
  1. --数据库关闭状态下删除非系统表空间数据文件。  
  2. [oracle@localhost ~]$  rm $ORACLE_BASE/product/10.2.0/oradatabak/example01.dbf;  
  3.   
  4. SQL> select file#,error from v$recover_file;    
  5.   
  6.      FILE# ERROR  
  7. ---------- -----------------------------------------------------------------  
  8.          5 FILE NOT FOUND  
  9.   
  10. SQL> select file#,name from v$datafile where file#=5;  
  11.   
  12.      FILE# NAME  
  13. ---------- --------------------------------------------------------------------------------  
  14.          5 /oracle/10g/oracle/product/10.2.0/oradatabak/example01.dbf  
  15.   
  16. --恢复数据文件  
  17. [oracle@localhost ~]$ rman target sys/oracle@oralife nocatalog  
  18. RMAN> run {  
  19. 2> startup force mount;  
  20. 3> sql 'alter database datafile 5 offline';  
  21. 4> sql 'alter database open';  
  22. 5> set newname for datafile 5 to '$ORACLE_BASE/product/10.2.0/oradata/oralife/example01.dbf';  
  23. 6> restore datafile 5;  
  24. 7> switch datafile 5;  
  25. 8> recover datafile 5;  
  26. 9> sql 'alter database datafile 5 online';  
  27. 10> }  
  28.   
  29. SQL> select file#,name from v$datafile where file#=5;  
  30.   
  31.      FILE# NAME  
  32. ---------- --------------------------------------------------------------------------------  
  33.          5 /oracle/10g/oracle/product/10.2.0/oradata/oralife/example01.dbf  
  34.   
  35. SQL> select file#,error from v$recover_file;    
  36.   
  37. no rows selected  
open状态下恢复打开后意外丢失的数据文件
除了system表空间的数据文件(mount)之外,其它数据文件可以在open(mount也可以)状态下恢复。open状态下恢复数据文件可以减少数据库停用的时间,所以应该在open状态下恢复这些数据文件。
示例一 数据文件被误删除
数据库open状态下删除非系统表空间数据文件。
脱机丢失的数据文件,alter database datafile n offline。
转储数据文件,restore datafile n。
使用recover datafile n 应用归档日志。
联机数据文件,alter database datafile n online。
示例二 数据文件所在磁盘出现损坏
数据库open状态下删除非系统表空间数据文件。
脱机丢失的数据文件,alter database datafile n offline。
在restore database之前,执行set newname为数据文件指定新的位置。
在restore database之后,执行switch datafile改变控制文件中数据文件位置和名称。
之后通过执行recover database应用归档日志。
联机数据文件,alter database datafile n online。

open状态下恢复未备份的数据文件
恢复方式与以上两种相同,因为数据文件没有备份,在转储数据文件时,会自动创建数据文件。

恢复非系统表空间
示例一 表空间的数据文件被误删除
open状态下删除表空间对应的所有数据文件。
在open状态下使用alter tablespace ... offline for recover 脱机表空间。
使用restore tablespace ...转储表空间所有的数据文件。
使用recover tablespace ...应用归档日志。
最后使用alter tablespace ... online使表空间联机。
[sql]  view plain copy
  1. --open状态下删除表空间对应的所有数据文件。  
  2. [oracle@localhost ~]$ rm /oracle/10g/oracle/product/10.2.0/oradatabak/users01.dbf;  
  3.   
  4. --恢复表空间  
  5. [oracle@localhost ~]$ rman target sys/oracle@oralife nocatalog   
  6. RMAN> run {  
  7. 2> sql 'alter tablespace users offline for recover';  
  8. 3> restore tablespace users;  
  9. 4> recover tablespace users;  
  10. 5> sql 'alter tablespace users online';  
  11. 6> }  
示例二 表空间的数据文件所在磁盘出现故障
open状态下删除表空间对应的所有数据文件。
在open状态下使用alter tablespace ... offline for recover 脱机表空间。
执行set newname为数据文件指定新的位置。
使用restore tablespace ...转储表空间所有的数据文件。
执行switch datafile改变控制文件中数据文件位置和名称。
使用recover tablespace ...应用归档日志。

最后使用alter tablespace ... online使表空间联机。

[sql]  view plain copy
  1. --open状态下删除表空间对应的所有数据文件。  
  2. [oracle@localhost ~]$ rm /oracle/10g/oracle/product/10.2.0/oradatabak/users01.dbf;  
  3.   
  4. SQL> select * from t_user;  
  5. select * from t_user  
  6.               *  
  7. ERROR at line 1:  
  8. ORA-00376: file 4 cannot be read at this time  
  9. ORA-01110: data file 4:  
  10. '/oracle/10g/oracle/product/10.2.0/oradatabak/users01.dbf'  
  11.   
  12.   
  13. SQL> select file#,error from v$recover_file;  
  14.   
  15.      FILE# ERROR  
  16. ---------- -----------------------------------------------------------------  
  17.          4 FILE NOT FOUND  
  18.   
  19. --恢复表空间  
  20. [oracle@localhost ~]$ rman target sys/oracle@oralife nocatalog  
  21. run {  
  22.  sql 'alter tablespace users offline for recover';  
  23.  set newname for datafile 4 to '$ORACLE_BASE/product/10.2.0/oradata/oralife/user01.dbf';  
  24.  restore tablespace users;  
  25.  switch datafile all;  
  26.  recover tablespace users;  
  27.  sql 'alter tablespace users online';  
  28.  }  
  29.   
  30. --已恢复  
  31. SQL> select * from t_user;  
  32.   
  33. TEXT  
  34. --------------------  
  35. java_  
  36.   
  37. SQL> select name from v$datafile where file# = 4;  
  38.   
  39. NAME  
  40. --------------------------------------------------------------------------------  
  41. /oracle/10g/oracle/product/10.2.0/oradata/oralife/user01.dbf  

数据块介质恢复
如果数据文件部分数据块出现损坏,可以使用blockrecover 命令恢复损坏数据块。
如:
RMAN> blockrecover device type disk 
2>datafile 5 block 2,7,88;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值