您的位置:首页 > 其它

归档模式下有备份数据文件损坏的完全恢复-1

2013-10-07 11:29 435 查看
归档模式下的完全恢复
如果控制文件,联机重做日志文件都没有损坏,而只是数据文件损坏,并且存在备份以及该备份以来所有的归档日志文件,就能够把

数据库完全恢复到发生介质损坏的时间点上。

启动实验
alter tablespace system begin backup;
host copy D:\oracle\product\10.2.0\oradata\TEST\TEST.DBF d:\TEST.DBF;
alter tablespace system end backup;

shutdown immediate
然后我鼠标右键删除TEST.DBF这个文件
startup
Total System Global Area 612368384 bytes
Fixed Size 1292036 bytes
Variable Size 411044092 bytes
Database Buffers 192937984 bytes
Redo Buffers 7094272 bytes
数据库装载完毕。
ORA-01157: 无法标识/锁定数据文件 7 - 请参阅 DBWR 跟踪文件
ORA-01110: 数据文件 7: 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST\TEST.DBF'

alter database datafile 7 offline;
然后现在把备份的复制过来,如果数据文件所在磁盘损坏可以复制到其他目录,需要使用alter database rename datafile修改控制

文件中对该损坏数据文件的记录
host copy d:\TEST.DBF D:\oracle\product\10.2.0\oradata\TEST\TEST.DBF ;
此时,我们已经完成了数据文件的restore任何,现在我们看看数据文件为什么需要恢复,继续检查SCN信息。
查看v$recover_file数据字典,哪些需要文件恢复
select * from v$recover_file;

FILE# ONLINE ONLINE_ ERROR CHANGE# TIME
------ ------- ------- ----------------------------------------------------------------- ---------- ----------
7 OFFLINE OFFLINE 1836213 06-10月-13

看到了撒,需要恢复的有哪些文件撒,然后我们在恢复撒
提示数据文件7需要恢复,error类型为空,SCN为1836213,是指数据文件头中的信息

select file#,checkpoint_change#,last_change# from v$datafile where file#=7;
FILE# CHECKPOINT_CHANGE# LAST_CHANGE#
------- ------------------ ------------
7 1838215 1838215
其中checkpoint_change#是控制文件中记录的数据文件SCN,而last_change#是数据文件离线时的数据文件SCN,显然数据文件头中的

记录的SCN和控制文件中记录的SCN不一致,需要恢复,现在我们把表空间设置为ONLINE

SQL> recover datafile 7;
完成介质恢复。

select count(*) from t
第 1 行出现错误:
ORA-00376: 此时无法读取文件 7
ORA-01110: 数据文件 7: 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST\TEST.DBF'
明明已经恢复了的嘛,为什么查询数据还会有错误嘛???
注意:此时不是提示数据文件不能锁定或者无法识别,说明我们已经restore了数据文件,其实这里的提示说明数据文件需要ONLINE,

因为我们打开数据库时将数据文件设置了OFFLINE了。

alter database datafile 7 online;

select * from v$recover_file;
未选定行
select file#,checkpoint_change#,last_change# from v$datafile where file#=7;
FILE# CHECKPOINT_CHANGE# LAST_CHANGE#
------ ------------------ ------------
7 1838529
select file#,checkpoint_change# from v$datafile_header where file#=7;
FILE# CHECKPOINT_CHANGE#
------ ------------------
7 1838529
现在我们再次查看,完全恢复了数据文件7,此时也提升了控制文件和数据文件中的SCN
大功告成
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐