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

本文介绍在Oracle数据库中恢复被误删或损坏的数据文件的方法。包括将数据库启动至mount状态、脱机丢失的数据文件、恢复及联机数据文件等步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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  

转载于:https://my.oschina.net/rootliu/blog/1647343

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值