数据文件在无备份的情况下恢复
如果控制文件,联机重做日志文件都没有损坏,而只是数据文件损坏,并且没有备份哟,但是归档日志必须存在,则可以完全恢复。
启动实验
create tablespace test2
datafile 'D:\oracle\product\10.2.0\oradata\TEST\test2.dbf' size 50m;
create user muwei identified by muwei default tablespace test2;
grant dba to muwei;
conn muwei/muwei
create table muwei(id number, name varchar2(20));
begin
for i in 1..100 loop
insert into muwei values(i,'小牟');
end loop;
end;
/
commit;
现在我没有对该数据文件进行任何形式的备份,现在我关闭数据库,模拟删掉的数据文件
alter system flush buffer_cache; --清掉buffer cache中的数据
shutdown immediate;
然后我去把test2.dbf这个数据文件给它删了,我手动删哈,我直接点。
startup;
ORA-01157: 无法标识/锁定数据文件 8 - 请参阅 DBWR 跟踪文件
ORA-01110: 数据文件 8: 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\TEST\TEST2.DBF'
现在演示如何恢复没有备份的数据文件
alter database datafile 8 offline;
alter database create datafile 'D:\oracle\product\10.2.0\oradata\TEST\test2.dbf'; --这儿特别注意哈,需要重新创建表
空间
alter database datafile 8 online;
recover datafile 8;
完成介质恢复。
alter database open;
conn muwei/muwei;
select count(*) from muwei;
COUNT(*)
---------
100
大功告成
显然这儿没有备份的介质恢复的过程就是将归档日志或者当前重做日志中的数据应用到数据文件中去,切记成功恢复的关键是启动了
数据库的归档模式,并且自该表空间创建后,所有插入的数据被重做日志或者归档日志保护,最终通过recover指令完全恢复。。