无备份数据文件的恢复
流程:
1. 新建表空间及表,向表里插入一条数据;
2. 关闭数据库;
3. 在操作系统删除新建表空间的数据文件;
4. 重新启动数据库,报错;
5. 手动将数据文件下线;
6. 打开数据库,先让数据正常对外工作;
7. recover datafile ..(前提是从数据文件诞生起日志文件都存在)
8. 手动将数据文件上线;
--新建测试环境
create tablespace test
datafile 'E:\APP\ADMINISTRATOR\ORADATA\ORCL\TEST01.DBF'
size 100m autoextend on next 10m maxsize unlimited
extent management local autoallocate
segment space management auto;
--新建测试表
create table t1
(
sid int not null primary key,
sname varchar2(10)
)
tablespace test;
--循环导入数据
declare
maxrecords constant int:=20000;
i int :=1;
begin
for i in 1..maxrecords loop
insert into t1 values(i,'ocpyang');
end loop;
dbms_output.put_line(' 成功录入数据! ');
commit;
end;
/
--2.模拟删除文件
shutdown immediate;
host del E:\APP\ADMINISTRATOR\ORADATA\ORCL\TEST01.DBF
SQL> startup
ORACLE 例程已经启动。
Total System Global Area 843456512 bytes
Fixed Size 2180424 bytes
Variable Size 629148344 bytes
Database Buffers 205520896 bytes
Redo Buffers 6606848 bytes
数据库装载完毕。
ORA-01157: 无法标识/锁定数据文件 5 - 请参阅 DBWR 跟踪文件
ORA-01110: 数据文件 5: 'E:\APP\ADMINISTRATOR\ORADATA\ORCL\TEST01.DBF'
alter database datafile 5 offline;
shutdown immediate;
startup;
SQL> select file#,status,name from v$datafile;
FILE# STATUS NAME
---------- ------- --------------------------------------------------
1 SYSTEM E:\APP\ADMINISTRATOR\ORADATA\ORCL\SYSTEM01.DBF
2 ONLINE E:\APP\ADMINISTRATOR\ORADATA\ORCL\SYSAUX01.DBF
3 ONLINE E:\APP\ADMINISTRATOR\ORADATA\ORCL\UNDOTBS01.DBF
4 ONLINE E:\APP\ADMINISTRATOR\ORADATA\ORCL\USERS01.DBF
5 OFFLINE E:\APP\ADMINISTRATOR\ORADATA\ORCL\TEST01.DBF
recover datafile 5;
ORA-00283: 恢复会话因错误而取消
ORA-01110: 数据文件 5: 'E:\APP\ADMINISTRATOR\ORADATA\ORCL\TEST01.DBF'
ORA-01157: 无法标识/锁定数据文件 5 - 请参阅 DBWR 跟踪文件
ORA-01110: 数据文件 5: 'E:\APP\ADMINISTRATOR\ORADATA\ORCL\TEST01.DBF'
--重构数据文件
alter database create datafile 'E:\APP\ADMINISTRATOR\ORADATA\ORCL\TEST01.DBF';
recover datafile 5;
完成介质恢复。
alter database datafile 5 online;
select count(*) from t1;