os:winXP
Oracle:9.2.0.1.0
sid:xianhe
一:预备工作
把数据库改为归档模式
SQL startup mount
ORACLE 例程已经启动。
Total System Global Area126950220 bytes
Fixed Size 453452 bytes
Variable Size 109051904 bytes
Database Buffers 16777216 bytes
Redo Buffers 667648 bytes
数据库装载完毕。
SQL alter database archivelog;
数据库已更改。
SQL alter database open;
数据库已更改。
SQL
设置成自动归档
SQL alter system set log_archive_start = true scope=spfile;
系统已更改。
确定数据库在归档模式下并是自动存档的
SQL archive log list
数据库日志模式存档模式
自动存档 启用
存档终点D:oracleora92RDBMS
最早的概要日志序列 2
下一个存档日志序列 4
当前日志序列 4
SQL
干净的关闭数据库,做一个完全的冷备份。
二:开始实验
实验1:描述如下。
数据库系统数据文件和回退段遭破坏的情况下的恢复。此时数据库的状态是关闭的。
先启动数据库,用scott用户建立test表,并插入两条数据。
SQL create table scott.test
2(id int);
表已创建。
SQL insert into scott.test values(1);
已创建 1 行。
SQL insert into scott.test values(2);
已创建 1 行。
SQL commit;
提交完成。
假设数据库遭意外被迫关闭,并且系统数据文件丢失。
SQL shutdown abort
ORACLE 例程已经关闭。
把oracle服务停掉,删除SYSTEM01.dbf和UNDOTBS01.DBF文件
启动服务
启动数据库, 提示如下错误
SQL startup
ORACLE 例程已经启动。
Total System Global Area126950220 bytes
Fixed Size 453452 bytes
Variable Size 109051904 bytes
Database Buffers 16777216 bytes
Redo Buffers 667648 bytes
数据库装载完毕。
ORA-01157: 无法标识/锁定数据文件 1 - 请参阅 DBWR 跟踪文件
ORA-01110: 数据文件 1: 'D:ORACLEORADATAXINAHESYSTEM01.DBF'
把备份的SYSTEM01.dbf文件还原回去
然后recover database 或 recover datafile 'D:ORACLEORADATAXINAHESYSTEM01.DBF'
SQL recover datafile 'D:ORACLEORADATAXINAHESYSTEM01.DBF';
完成介质恢复。
打开数据库有提示
SQL alter database open;
alter database open
*
ERROR 位于第 1 行:
ORA-01157: 无法标识/锁定数据文件 2 - 请参阅 DBWR 跟踪文件
ORA-01110: 数据文件 2: 'D:ORACLEORADATAXINAHEUNDOTBS01.DBF'
把备份的UNDOTBS01.DBF文件还原回去,执行recover database 或 recover datafile 'D:ORACLEORADATAXINAHEUNDOTBS01.DBF'
SQL recover datafile 'D:ORACLEORADATAXINAHEUNDOTBS01.DBF';
完成介质恢复。
然后就可以打开数据库,查看scott用户的test表。
SQL alter database open;
数据库已更改。
SQL select * from scott.test;
ID
----------
1
2
SQL
完成。
实验2:描述如下
数据库是打开的,这是损坏的文件是用户的数据文件而不是system和undo文件。
用scott用户在users表空间建立test1表
SQL create table scott.test1(id int)
2tablespace users;
表已创建。
插入两条数据
SQL insert into scott.test1 values(1);
已创建 1 行。
SQL insert into scott.test1 values(2);
已创建 1 行。
SQL commit;
提交完成。
当前日志归档
SQL alter system archive log current;
系统已更改。
现在破坏users表空间,使其离线,然后删除users01.dbf
SQL alter tablespace users offline;
表空间已更改。
SQL alter tablespace users online;
alter tablespace users online
*
ERROR 位于第 1 行:
ORA-01157: 无法标识/锁定数据文件 9 - 请参阅 DBWR 跟踪文件
ORA-01110: 数据文件 9: 'D:ORACLEORADATAXINAHEUSERS01.DBF'
此时出现错误,users表空间不能在线了。这时把备份的users01.DBF还原回去。
然后
SQL recover tablespace users;
ORA-00279: 更改 292331 (在 03/18/2005 16:36:05 生成) 对于线程 1 是必需的
ORA-00289: 建议: D:ORACLEORA92RDBMSARC00004.001
ORA-00280: 更改 292331 对于线程 1 是按序列 # 4 进行的
指定日志: {<RET=suggested filename AUTO CANCEL}
auto
ORA-00279: 更改 292907 (在 03/18/2005 16:45:43 生成) 对于线程 1 是必需的
ORA-00289: 建议: D:ORACLEORA92RDBMSARC00005.001
ORA-00280: 更改 292907 对于线程 1 是按序列 # 5 进行的
ORA-00278: 此恢复不再需要日志文件 'D:ORACLEORA92RDBMSARC00004.001'
已应用的日志。
完成介质恢复。
SQL alter tablespace users online;
表空间已更改。
SQL select * from scott.test1;
ID
----------
1
2
完成。
实验3:描述如下
数据文件没有备份(不能使system和undo文件)的恢复。
创建表空间testspace
SQL create tablespace testspace
2datafile 'd:oracleoradataxinahetestspace.dbf' size 10m;
表空间已创建。
SQL create table scott.test3(id int)
2tablespace testspace;
表已创建。
SQL commit;
提交完成。
SQL alter system switch logfile;
系统已更改。
SQL insert into scott.test3 values(1);
已创建 1 行。
SQL commit;
提交完成。
SQL alter tablespace testspace offline;
表空间已更改。
SQL select * from scott.test3;
select * from scott.test3
*
ERROR 位于第 1 行:
ORA-00376: 此时无法读取文件 11
ORA-01110: 数据文件 11: 'D:ORACLEORADATAXINAHETESTSPACE.DBF'
由于没有备份数据文件,我重新创建一个
SQL alter database create datafile
2'D:ORACLEORADATAXINAHETESTSPACE.DBF';
数据库已更改。
SQL recover tablespace testspace;
完成介质恢复。
SQL alter tablespace testspace online;
表空间已更改。
SQL select * from scott.test3;
ID
----------
1
完成。