用户管理的备份中数据文件没有备份损坏情况下的恢复测试。这种情况下要求数据库必须运行在归档模式下,并且所有的归档日志文件及重做日志文件都存在。
首先新建一个数据文件模拟数据文件丢失的情况:
ALTER TABLESPACE USERS
ADD DATAFILE'D:\ORACLE\PRODUCT\10.2.0\ORADATA\COLIN\users02.dbf' SIZE 5120K REUSE AUTOEXTEND ON NEXT 1280K MAXSIZE 32767M;
SQL> alter table colin.emp
2 allocate extent(size 100k datafile 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\COLIN\USERS02.DBF');
表已更改。
SQL> shutdown immediate
数据库已经关闭。
已经卸载数据库。
ORACLE例程已经关闭。
利用操作系统命令
删除新建的数据文件D:\ORACLE\PRODUCT\10.2.0\ORADATA\COLIN\users02.dbf
这里我们就模拟了数据文件损坏/丢失的情况
我们再启动数据库,结果报错
SQL> startup
ORACLE例程已经启动。
Total System Global Area167772160 bytes
Fixed Size1247900 bytes
Variable Size83887460 bytes
Database Buffers79691776 bytes
Redo Buffers2945024 bytes
数据库装载完毕。
ORA-01157:无法标识/锁定数据文件6 -请参阅DBWR跟踪文件
ORA-01110:数据文件6: 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\COLIN\USERS02.DBF'
查询动态视图查看需要恢复的文件
SQL> select * from v$recover_file;
FILE# ONLINEONLINE_
---------- ------- -------
ERRORCHANGE#
----------------------------------------------------------------- ----------
TIME
--------------
6 ONLINEONLINE
FILE NOT FOUND0
SQL> select * from v$recovery_log;
未选定行
这里相应的日志文件还没有生成。
下面我们开始恢复损坏/丢失的数据文件:
1)离线丢失的数据文件:
SQL> alter database datafile 6 offline;
数据库已更改。
2)重新打开数据库:
SQL> alter database open;
数据库已更改。
--这时数据库已打开,不要影响到其他的正常使用(其他无丢失损坏的文件)
3)重新创建损坏/丢失的数据文件:
SQL> alter database create datafile 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\COLIN\USERS02.DBF' as 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\COLIN\USERS02.DBF';
数据库已更改。
4)恢复损坏/丢失的数据文件:(这里要用到相应的归档日志文件及重做日志文件)
SQL> recover datafile 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\COLIN\USERS02.DBF';
完成介质恢复。
5)最后再把相应的数据文件联机,就Ok了~
SQL> alter database datafile 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\COLIN\USERS02.DBF' online;
数据库已更改。