记录日常工作关于系统运维,虚拟化云计算,数据库,网络安全等各方面问题。

oracle 数据文件丢换恢复方法,


先测试第一种,数据库是归档模式下。

新建TEST表空间,并建一个test,dbf 数据文件。

并导入了大量信息。

先作好一个

rman> backup database    /*完整备份。

然后再向表中导入一些数据,

最好多次切换重任日志文件,并生归档日志。

数据库关闭状态下删除非系统表空间TEST的数据文件,


SQL> startup open;
ORACLE 例程已经启动。

Total System Global Area  872685568 bytes
Fixed Size                  2258200 bytes
Variable Size             553650920 bytes
Database Buffers          310378496 bytes
Redo Buffers                6397952 bytes
数据库装载完毕。
ORA-01157: 无法标识/锁定数据文件 9 - 请参阅 DBWR 跟踪文件
ORA-01110: 数据文件 9: '/data/app/oracle/oradata/hextrack/test01.dbf'


会的以上错误。

 SQL> select file#,error from v$recover_file;
               FILE#          ERROR
---------- ------------------
                  9               FILE NOT FOUND


SQL> select file#,name from v$datafile where file#=9;
     FILE# NAME
---------- --------------------------------------------------------------------------------
         9 /data/app/oracle/oradata/hextrack/test01.dbf



下面使用rman 恢复数据文件:


  1. RMAN> connect target /
  2. RMAN> run {  
  3.  startup force mount;  
  4.  sql 'alter database datafile 9 offline';  
  5.  sql 'alter database open';  
  6.  restore datafile 9;  
  7.  recover datafile 9;  
  8.  sql 'alter database datafile 9 online';  
  9. 8> } 

执行命令后,rman 会自动恢复数据文件,完成后,检查数据都正常。


当然也有可能是数据文件所在的硬盘有问题,

这时就要数据文件指定新的位置,改变控制文件中数据文件位置和名称

在restore database之前,执行set newname为数据文件指定新的位置。
在restore database之后,执行switch datafile改变控制文件中数据文件位置和名称。

  1. RMAN> run {  
  2. 2> startup force mount;  
  3. 3> sql 'alter database datafile 9 offline';  
  4. 4> sql 'alter database open';  
  5. 5> set newname for datafile 9 to '/data/app/oracle/oradata/hextrack/test01.dbf';  
  6. 6> restore datafile 9;  
  7. 7> switch datafile 9;  
  8. 8> recover datafile 9;  
  9. 9> sql 'alter database datafile 9 online';  
  10. 10> } 


检查数据,都正常。


如果数据文件没有作备份,一样可以恢复。

SQL> startup mount;

SQL> alter database datafile '/data/app/oracle/oradata/hextrack/test01.dbf' OFFLINE;

SQL> alter database create datafile '/data/app/oracle/oradata/hextrack/test01.dbf' as '/data/app/oracle/oradata/hextrack/test01.dbf';

SQL>  recover datafile 9;

SQL> alter database open;

SQL> alter database datafile 9 online;

检查数据,都正常。


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




转载请标明出处【Oracle 归档模式下rman恢复数据文件与表空间的恢复 】。

《www.micoder.cc》 虚拟化云计算,系统运维,安全技术服务.

网站已经关闭评论