Oracle数据库RMAN恢复之数据文件的恢复详解

除了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。

--数据库关闭状态下删除非系统表空间数据文件。   

1.     [oracle@localhost ~]$  rm $ORACLE_BASE/product/10.2.0/oradatabak/example01.dbf;    

扫描二维码关注公众号,回复: 91286 查看本文章

2.     SQL> select file#,error from v$recover_file;      

3.     FILE# ERROR    

4.     ---------- -----------------------------------------------------------------     

5.     5 FILE NOT FOUND    

6.     SQL> select file#,name from v$datafile where file#=5;    

7.     FILE# NAME    

8.     ---------- --------------------------------------------------------------------------------     

9.     5 /oracle/10g/oracle/product/10.2.0/oradatabak/example01.dbf    

10.  --恢复数据文件     

11.  RMAN> run {    

12.  startup force mount;    

13.  sql 'alter database datafile 5 offline';    

14.  sql 'alter database open';    

15.  restore datafile 5;    

16.  recover datafile 5;    

17.  sql 'alter database datafile 5 online';    

18.  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。

--数据库关闭状态下删除非系统表空间数据文件。   

1.     [oracle@localhost ~]$  rm $ORACLE_BASE/product/10.2.0/oradatabak/example01.dbf;    

2.      

3.     SQL> select file#,error from v$recover_file;      

4.      

5.     FILE# ERROR    

6.      

7.     ---------- -----------------------------------------------------------------     

8.      

9.     5 FILE NOT FOUND    

10.   

11.  SQL> select file#,name from v$datafile where file#=5;    

12.   

13.  FILE# NAME    

14.   

15.  ---------- --------------------------------------------------------------------------------     

16.   

17.  5 /oracle/10g/oracle/product/10.2.0/oradatabak/example01.dbf    

18.   

19.  --恢复数据文件     

20.   

21.  [oracle@localhost ~]$ rman target sys/oracle@oralife nocatalog    

22.   

23.  RMAN> run {    

24.   

25.  2> startup force mount;    

26.   

27.  3> sql 'alter database datafile 5 offline';    

28.   

29.  4> sql 'alter database open';    

30.   

31.  5> set newname for datafile 5 to '$ORACLE_BASE/product/10.2.0/oradata/oralife/example01.dbf';    

32.   

33.  6> restore datafile 5;    

34.   

35.  7> switch datafile 5;    

36.   

37.  8> recover datafile 5;    

38.   

39.  9> sql 'alter database datafile 5 online';    

40.   

41.  10> }    

42.   

43.  SQL> select file#,name from v$datafile where file#=5;    

44.   

45.  FILE# NAME    

46.   

47.  ---------- --------------------------------------------------------------------------------     

48.   

49.  5 /oracle/10g/oracle/product/10.2.0/oradata/oralife/example01.dbf    

50.   

51.  SQL> select file#,error from v$recover_file;      

52.   

53.  no rows selected  

猜你喜欢

转载自my.oschina.net/rootliu/blog/1647343