1.数据文件恢复原理:
由于数据的修改会体现在联机重做日志中 所以数据可以通过重做日志恢复到数据文件中 所以如果是归档模式下 可以全部数据恢复 如果是非归档模式下 只能恢复到当前重做日志
中存在的数据
2.模拟数据文件损坏
添加一个表空间和临时表空间 并且创建一个用户 指定该表空间和默认表空间
create tablespace mydata datafile 'C:appjiaozioradataorclmydata.dbf' s
ize 100m autoextend on next 10M;
表空间已创建。
SQL> create temporary tablespace mytemp tempfile 'C:appjiaozioradataorclmyt
mp.dbf' size 100m autoextend on next 10m;
表空间已创建。
SQL> create user my identified by my default tablespace mydata temporary tablesp
ace mytemp;
SQL> grant dba to my;
用户已创建。
登录my 创建表 插入数据
conn my/my
create table u(id number,name varchar2(20));
insert into u values(1,'zs');
insert into u values(2,'ls');
insert into u values(3,'ww');
commit;
将数据库关闭
shutdown immediate
将数据文件mydata.dbf删除
此时启动数据库会出现异常
SQL> startup
ORACLE 例程已经启动。
Total System Global Area 1071333376 bytes
Fixed Size 1375792 bytes
Variable Size 671089104 bytes
Database Buffers 394264576 bytes
Redo Buffers 4603904 bytes
数据库装载完毕。
ORA-01157: 无法标识/锁定数据文件 6 - 请参阅 DBWR 跟踪文件
ORA-01110: 数据文件 6: 'C:APPJIAOZIORADATAORCLMYDATA.DBF'
3.恢复数据文件
通过启动抛出异常 可以看出数据文件编号6(mydata.dbf)文件出现了异常 可以通过select * from v$recover_file; 查询需要恢复文件编号
此时 因为数据文件已经被删除 所以需要重建该文件
SQL> alter database create datafile 'C:APPJIAOZIORADATAORCLMYDATA.DBF'
数据库已更改。
开始恢复数据文件
SQL> recover datafile 6; --或者 recover datafile ‘C:APPJIAOZIORADATAORCLMYDATA.DBF’
完成介质恢复。
SQL> alter database open
数据库已更改。
测试是否成功恢复
SQL> conn my/my;
已连接。
SQL> select * from u;
ID NAME
---------- --------------------
1 zs
2 ls
3 ww
4 zl
4.恢复损坏临时表空间
临时表空间如果被删除 默认启动会自动重建
如果临时表空间 出现问题可以新建一个临时表空间
alter database default temporary tablespace 临时表空间名称