Oracle备份与恢复:冷备份恢复

    模拟数据库数据文件丢失的情况下,通过丢失之前的数据文件物理备份做恢复;

说明:数据文件丢失前一刻的所有归档日志都存在。

环境:oracle10g +rhel5

 

1.关闭数据库,copy system01.dbf、user01.dbf 到同目录的bak目录下备份

   注意:这一步要注意一个细节

   cp -p  system01.dbf  bak

     ------一定要带-p参数,这样文件的属性就一同拷贝过去了。否则该文件的owner 是root,你后面恢复时,因为owner 原因,oracle不认。

 

2.为了能观察整个备份恢复的效果,创建一个表

  startup

  create table t(id int ,scn number)tablespace users;

  插入数据

   insert into t values(1,dbms_flashback.get_system_change_number);

   insert into t values(2,dbms_flashback.get_system_change_number);

   insert into t values(3,dbms_flashback.get_system_change_number);

   commit;

   alter system switch logfile;

   insert into t values(4,dbms_flashback.get_system_change_number);

   insert into t values(5,dbms_flashback.get_system_change_number);

   commit;

   alter system switch logfile;

 

3.关闭数据库  ,删除 system01.dbf、user01.dbf文件。

 

4.启动数据库

Oracle备份与恢复:冷备份恢复_第1张图片

 如图提示system01.dbf 不能打开,因为已经删除。

 

5. 从bak中恢复system01.dbf,再次open数据库

Oracle备份与恢复:冷备份恢复_第2张图片

  这次系统会提示你要media recovery,即从归档日志中恢复数据; enter即可。

  

  如果从scn角度来看,你未恢复dbf之前,你可以通过

   select file#,checkpoint_change# from v$datafile_header来查看数据文件scn的变化情况。

  即此时,checkpoint_change#=0的。你recover后,,checkpoint_change#会恢复到最近的scn。

 数据库正常启动的前提是:系统scn、数据文件头scn、控制文件scn 都必须一致。

 

6.再次open数据库

Oracle备份与恢复:冷备份恢复_第3张图片

 

会提示user01.dbf 不存在,如上操作,从归档日志中恢复insert的数据。再次open数据库,正常启动了。

查看一下表数据是否丢失,恩,都恢复回来了。

 

这时你再次查看scn,就都一样的了。

Oracle备份与恢复:冷备份恢复_第4张图片

 

  至此,冷备份恢复完成。

 

 

你可能感兴趣的:(oracle)