一、部分备份数据文件损坏(除了control file和online redo)
完全恢复
前提条件:
曾对系统文件作过BACKUP。且备份后的所有的AF必须存在。RECOVR 期间用户不能访问数据库。
恢复结果:出现故障时已提交的数据能被RECOVER,未提交的资料不能被RECOVER
1、系统表空间损坏(system tablesapce)
故障模拟:
作数据库完全热备,所有AF存在
SQL>archive log list
数据库日志模式 存档模式
自动存档 启用
存档终点 e:\Software\oracle9i\admin\oratest\archive2
最早的概要日志序列 17
下一个存档日志序列 19
当前日志序列 19
故障模拟
SQL>alter system checkpoint;
SQL>host copy c:\dd.txt E:\Software\oracle9i\oradata\oratest\SYSEM01.DBF
SQL> alter system checkpoint;
alter system checkpoint
*
ERROR 位于第 1 行:
ORA-03113: 通信通道的文件结束
SQL>connect / as sysdba
SQL> startup
ORACLE 例程已经启动。
Total System Global Area 135338868 bytes
Fixed Size 453492 bytes
Variable Size 109051904 bytes
Database Buffers 25165824 bytes
Redo Buffers 667648 bytes
数据库装载完毕。
ORA-01122: 数据库文件 1 验证失败
ORA-01110: 数据文件 1: 'E:\SOFTWARE\ORACLE9I\ORADATA\ORATEST\SYSTEM01.DBF'
ORA-01251: 文件号1的未知文件标题版本读取
SQL>shudown immediate;
SQL>host copy e:\backup\SYSTEM01.bak E:\Software\oracle9i\oradata\oratest\SYSTEM01.DBF
SQL> startup mount;
ORACLE 例程已经启动。
Total System Global Area 135338868 bytes
Fixed Size 453492 bytes
Variable Size 109051904 bytes
Database Buffers 25165824 bytes
Redo Buffers 667648 bytes
数据库装载完毕。
SQL> alter database open; //打开时提示需要介质恢复
alter database open
*
ERROR 位于第 1 行:
ORA-01113: 文件 1 需要介质恢复
ORA-01110: 数据文件 1: 'E:\SOFTWARE\ORACLE9I\ORADATA\ORATEST\SYSTEM01.DBF'
SQL> recover datafile 1;
ORA-00279: 更改 734610 (在 04/26/2005 08:50:12 生成) 对于线程 1 是必需的
ORA-00289: 建议: E:\SOFTWARE\ORACLE9I\ADMIN\ORATEST\ARCHIVE2\ORATEST_8_001.ARC
ORA-00280: 更改 734610 对于线程 1 是按序列 # 8 进行的
指定日志: {=suggested | filename | AUTO | CANCEL}
auto //指定为auto自动
ORA-00279: 更改 734775 (在 04/26/2005 08:51:09 生成) 对于线程 1 是必需的
ORA-00289: 建议: E:\SOFTWARE\ORACLE9I\ADMIN\ORATEST\ARCHIVE2\ORATEST_9_001.ARC
ORA-00280: 更改 734775 对于线程 1 是按序列 # 9 进行的
ORA-00278: 此恢复不再需要日志文件 'E:\SOFTWARE\ORACLE9I\ADMIN\ORATEST\ARCHIVE2\ORATEST_8_001.ARC'
ORA-00279: 更改 734787 (在 04/26/2005 08:51:14 生成) 对于线程 1 是必需的
ORA-00289: 建议: E:\SOFTWARE\ORACLE9I\ADMIN\ORATEST\ARCHIVE2\ORATEST_10_001.ARC
ORA-00280: 更改 734787 对于线程 1 是按序列 # 10 进行的
ORA-00278: 此恢复不再需要日志文件 'E:\SOFTWARE\ORACLE9I\ADMIN\ORATEST\ARCHIVE2\ORATEST_9_001.ARC'
ORA-00279: 更改 734874 (在 04/26/2005 08:51:35 生成) 对于线程 1 是必需的
ORA-00289: 建议: E:\SOFTWARE\ORACLE9I\ADMIN\ORATEST\ARCHIVE2\ORATEST_11_001.ARC
ORA-00280: 更改 734874 对于线程 1 是按序列 # 11 进行的
ORA-00278: 此恢复不再需要日志文件 'E:\SOFTWARE\ORACLE9I\ADMIN\ORATEST\ARCHIVE2\ORATEST_10_001.ARC'
ORA-00279: 更改 734884 (在 04/26/2005 08:51:40 生成) 对于线程 1 是必需的
ORA-00289: 建议: E:\SOFTWARE\ORACLE9I\ADMIN\ORATEST\ARCHIVE2\ORATEST_12_001.ARC
ORA-00280: 更改 734884 对于线程 1 是按序列 # 12 进行的
ORA-00278: 此恢复不再需要日志文件 'E:\SOFTWARE\ORACLE9I\ADMIN\ORATEST\ARCHIVE2\ORATEST_11_001.ARC'
ORA-00279: 更改 734894 (在 04/26/2005 08:51:46 生成) 对于线程 1 是必需的
ORA-00289: 建议: E:\SOFTWARE\ORACLE9I\ADMIN\ORATEST\ARCHIVE2\ORATEST_13_001.ARC
ORA-00280: 更改 734894 对于线程 1 是按序列 # 13 进行的
ORA-00278: 此恢复不再需要日志文件 'E:\SOFTWARE\ORACLE9I\ADMIN\ORATEST\ARCHIVE2\ORATEST_12_001.ARC'
ORA-00279: 更改 734897 (在 04/26/2005 08:51:47 生成) 对于线程 1 是必需的
ORA-00289: 建议: E:\SOFTWARE\ORACLE9I\ADMIN\ORATEST\ARCHIVE2\ORATEST_14_001.ARC
ORA-00280: 更改 734897 对于线程 1 是按序列 # 14 进行的
ORA-00278: 此恢复不再需要日志文件 'E:\SOFTWARE\ORACLE9I\ADMIN\ORATEST\ARCHIVE2\ORATEST_13_001.ARC'
ORA-00279: 更改 734905 (在 04/26/2005 08:51:53 生成) 对于线程 1 是必需的
ORA-00289: 建议: E:\SOFTWARE\ORACLE9I\ADMIN\ORATEST\ARCHIVE2\ORATEST_15_001.ARC
ORA-00280: 更改 734905 对于线程 1 是按序列 # 15 进行的
ORA-00278: 此恢复不再需要日志文件 'E:\SOFTWARE\ORACLE9I\ADMIN\ORATEST\ARCHIVE2\ORATEST_14_001.ARC'
ORA-00279: 更改 741087 (在 04/26/2005 09:32:00 生成) 对于线程 1 是必需的
ORA-00289: 建议: E:\SOFTWARE\ORACLE9I\ADMIN\ORATEST\ARCHIVE2\ORATEST_16_001.ARC
ORA-00280: 更改 741087 对于线程 1 是按序列 # 16 进行的
ORA-00278: 此恢复不再需要日志文件 'E:\SOFTWARE\ORACLE9I\ADMIN\ORATEST\ARCHIVE2\ORATEST_15_001.ARC'
已应用的日志。
完成介质恢复。
SQL> alter database open;
SQL> archive log list;
数据库日志模式 存档模式
自动存档 启用
存档终点 e:\Software\oracle9i\admin\oratest\archive2
最早的概要日志序列 18
下一个存档日志序列 20
当前日志序列 20
SQL>
2、undo表空间损坏
SQL> show parameter undo; //查看undo表空间
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
undo_management string AUTO
undo_retention integer 10800
undo_suppress_errors boolean FALSE
undo_tablespace string UNDOTBS1
SQL>
SQL> col file_name for a60;
SQL> col tablespace_name for a20;
SQL> select file_name,tablespace_name from dba_data_files;
FILE_NAME TABLESPACE_NAME
------------------------------------------------------------ --------------------
E:\SOFTWARE\ORACLE9I\ORADATA\ORATEST\SYSTEM01.DBF SYSTEM
E:\SOFTWARE\ORACLE9I\ORADATA\ORATEST\UNDOTBS01.DBF UNDOTBS1
E:\SOFTWARE\ORACLE9I\ORADATA\ORATEST\CWMLITE01.DBF CWMLITE
E:\SOFTWARE\ORACLE9I\ORADATA\ORATEST\DRSYS01.DBF DRSYS
E:\SOFTWARE\ORACLE9I\ORADATA\ORATEST\EXAMPLE01.DBF EXAMPLE
E:\SOFTWARE\ORACLE9I\ORADATA\ORATEST\INDX01.DBF INDX
E:\SOFTWARE\ORACLE9I\ORADATA\ORATEST\ODM01.DBF ODM
E:\SOFTWARE\ORACLE9I\ORADATA\ORATEST\TOOLS01.DBF TOOLS
E:\SOFTWARE\ORACLE9I\ORADATA\ORATEST\USERS01.DBF USERS
E:\SOFTWARE\ORACLE9I\ORADATA\ORATEST\XDB01.DBF XDB
E:\SOFTWARE\ORACLE9I\ORADATA\ORATEST\USERS02.DBF USERS
SQL>
故障模拟
SQL>host copy d:\backup\hotbackup.sql E:\Software\oracle9i\oradata\oratest\UNDOTBS01.DBF
SQL> shutdown immediate;
ORA-01122: 数据库文件 2 验证失败
ORA-01110: 数据文件 2: 'E:\SOFTWARE\ORACLE9I\ORADATA\ORATEST\UNDOTBS01.DBF'
ORA-01251: 文件号2的未知文件标题版本读取
SQL> shutdown abort;
ORACLE 例程已经关闭。
SQL>
SQL> startup
ORACLE 例程已经启动。
Total System Global Area 135338868 bytes
Fixed Size 453492 bytes
Variable Size 109051904 bytes
Database Buffers 25165824 bytes
Redo Buffers 667648 bytes
数据库装载完毕。
ORA-01122: 数据库文件 2 验证失败
ORA-01110: 数据文件 2: 'E:\SOFTWARE\ORACLE9I\ORADATA\ORATEST\UNDOTBS01.DBF'
ORA-01251: 文件号2的未知文件标题版本读取
SQL>shutdown abort
SQL>host copy e:\backup\UNDOTBS01.bak E:\SOFTWARE\ORACLE9I\ORADATA\ORATEST\UNDOTBS01.DBF //讲备份文件拷贝过去
SQL>startup mount
SQL> select * from v$recover_file; //查看需要恢复的文件的状态
FILE# ONLINE ONLINE_ ERROR CHANGE# TIME
---------- ------- ------- ----------------------------------------------------------------- ---------- ----------
2 ONLINE ONLINE WRONG FILE TYPE 0
也可以用alter database datafile 2 offline 将该文件离线
然后在恢复,但是恢复完成后用alter database datafile 2 online 使undo在线
SQL> recover datafile 2;
ORA-00279: 更改 734789 (在 04/26/2005 08:51:15 生成) 对于线程 1 是必需的
ORA-00289: 建议: E:\SOFTWARE\ORACLE9I\ADMIN\ORATEST\ARCHIVE2\ORATEST_10_001.ARC
ORA-00280: 更改 734789 对于线程 1 是按序列 # 10 进行的
指定日志: {=suggested | filename | AUTO | CANCEL}
auto
ORA-00279: 更改 734874 (在 04/26/2005 08:51:35 生成) 对于线程 1 是必需的
ORA-00289: 建议: E:\SOFTWARE\ORACLE9I\ADMIN\ORATEST\ARCHIVE2\ORATEST_11_001.ARC
ORA-00280: 更改 734874 对于线程 1 是按序列 # 11 进行的
ORA-00278: 此恢复不再需要日志文件 'E:\SOFTWARE\ORACLE9I\ADMIN\ORATEST\ARCHIVE2\ORATEST_10_001.ARC'
ORA-00279: 更改 734884 (在 04/26/2005 08:51:40 生成) 对于线程 1 是必需的
ORA-00289: 建议: E:\SOFTWARE\ORACLE9I\ADMIN\ORATEST\ARCHIVE2\ORATEST_12_001.ARC
ORA-00280: 更改 734884 对于线程 1 是按序列 # 12 进行的
ORA-00278: 此恢复不再需要日志文件 'E:\SOFTWARE\ORACLE9I\ADMIN\ORATEST\ARCHIVE2\ORATEST_11_001.ARC'
ORA-00279: 更改 734894 (在 04/26/2005 08:51:46 生成) 对于线程 1 是必需的
ORA-00289: 建议: E:\SOFTWARE\ORACLE9I\ADMIN\ORATEST\ARCHIVE2\ORATEST_13_001.ARC
ORA-00280: 更改 734894 对于线程 1 是按序列 # 13 进行的
ORA-00278: 此恢复不再需要日志文件 'E:\SOFTWARE\ORACLE9I\ADMIN\ORATEST\ARCHIVE2\ORATEST_12_001.ARC'
ORA-00279: 更改 734897 (在 04/26/2005 08:51:47 生成) 对于线程 1 是必需的
ORA-00289: 建议: E:\SOFTWARE\ORACLE9I\ADMIN\ORATEST\ARCHIVE2\ORATEST_14_001.ARC
ORA-00280: 更改 734897 对于线程 1 是按序列 # 14 进行的
ORA-00278: 此恢复不再需要日志文件 'E:\SOFTWARE\ORACLE9I\ADMIN\ORATEST\ARCHIVE2\ORATEST_13_001.ARC'
ORA-00279: 更改 734905 (在 04/26/2005 08:51:53 生成) 对于线程 1 是必需的
ORA-00289: 建议: E:\SOFTWARE\ORACLE9I\ADMIN\ORATEST\ARCHIVE2\ORATEST_15_001.ARC
ORA-00280: 更改 734905 对于线程 1 是按序列 # 15 进行的
ORA-00278: 此恢复不再需要日志文件 'E:\SOFTWARE\ORACLE9I\ADMIN\ORATEST\ARCHIVE2\ORATEST_14_001.ARC'
ORA-00279: 更改 741087 (在 04/26/2005 09:32:00 生成) 对于线程 1 是必需的
ORA-00289: 建议: E:\SOFTWARE\ORACLE9I\ADMIN\ORATEST\ARCHIVE2\ORATEST_16_001.ARC
ORA-00280: 更改 741087 对于线程 1 是按序列 # 16 进行的
ORA-00278: 此恢复不再需要日志文件 'E:\SOFTWARE\ORACLE9I\ADMIN\ORATEST\ARCHIVE2\ORATEST_15_001.ARC'
ORA-00279: 更改 741732 (在 04/26/2005 09:36:04 生成) 对于线程 1 是必需的
ORA-00289: 建议: E:\SOFTWARE\ORACLE9I\ADMIN\ORATEST\ARCHIVE2\ORATEST_17_001.ARC
ORA-00280: 更改 741732 对于线程 1 是按序列 # 17 进行的
ORA-00278: 此恢复不再需要日志文件 'E:\SOFTWARE\ORACLE9I\ADMIN\ORATEST\ARCHIVE2\ORATEST_16_001.ARC'
已应用的日志。
完成介质恢复。
SQL>
3、非系统(system) 表空间数据文件损坏
要求:DATAFILE备份后的所有AF必须存在。RECOVER期间充许用户正常使用未出故障的TABLESPACE。
结果:出故障时,属于故障数据文件且未提交的数据不能RECOVER。
当然可以停掉数据库恢复,恢复跟恢复系统表空间一样,这里只模拟用户正常使用的情况。
SQL> host copy d:\backup\aa.txt E:\Software\oracle9i\oradata\oratest\USERS01.DBF
已复制 1 个文件。
SQL> host copy d:\backup\aa.txt E:\Software\oracle9i\oradata\oratest\USERS02.DBF
已复制 1 个文件。
SQL> select * from test;
select * from test
*
ERROR 位于第 1 行:
ORA-01115: 从文件 11 读取块时出现 IO 错误 (块 # 12)
ORA-01110: 数据文件 11: 'E:\SOFTWARE\ORACLE9I\ORADATA\ORATEST\USERS02.DBF'
ORA-27091: skgfqio: 无法进行 I/O 操作
ORA-27070: skgfdisp: 异步读取/写入失败
OSD-04006: ReadFile() 失败, 无法读取文件
O/S-Error: (OS 38) 到达文件结尾。
SQL>
SQL>select d.file#,d.name,d.status,h.status from v$datafile d,v$datafile_header h where d.file#=h.file# //查看文件状态
FILE# NAME STATUS STATUS
--------- ---------------------------------------- ------- -------
1 E:\SOFTWARE\ORACLE9I\ORADATA\ORATEST\SYS SYSTEM ONLINE
TEM01.DBF
2 E:\SOFTWARE\ORACLE9I\ORADATA\ORATEST\UND ONLINE ONLINE
OTBS01.DBF
3 E:\SOFTWARE\ORACLE9I\ORADATA\ORATEST\CWM ONLINE ONLINE
LITE01.DBF
4 E:\SOFTWARE\ORACLE9I\ORADATA\ORATEST\DRS ONLINE ONLINE
YS01.DBF
FILE# NAME STATUS STATUS
--------- ---------------------------------------- ------- -------
5 E:\SOFTWARE\ORACLE9I\ORADATA\ORATEST\EXA ONLINE ONLINE
MPLE01.DBF
6 E:\SOFTWARE\ORACLE9I\ORADATA\ORATEST\IND ONLINE ONLINE
X01.DBF
7 E:\SOFTWARE\ORACLE9I\ORADATA\ORATEST\ODM ONLINE ONLINE
01.DBF
8 E:\SOFTWARE\ORACLE9I\ORADATA\ORATEST\TOO ONLINE ONLINE
FILE# NAME STATUS STATUS
--------- ---------------------------------------- ------- -------
LS01.DBF
9 E:\SOFTWARE\ORACLE9I\ORADATA\ORATEST\USE ONLINE ONLINE
RS01.DBF
10 E:\SOFTWARE\ORACLE9I\ORADATA\ORATEST\XDB ONLINE ONLINE
01.DBF
11 E:\SOFTWARE\ORACLE9I\ORADATA\ORATEST\USE ONLINE ONLINE
RS02.DBF
SQL> alter database datafile 9 offline ;
SQL> alter database datafile 11 offline ;
SQL> select d.file#,d.name,d.status,h.status from v$datafile d,v$datafile_header h where d.file#=h.file#
FILE# NAME STATUS STATUS
---------- ---------------------------------------- ------- -------
9 E:\SOFTWARE\ORACLE9I\ORADATA\ORATEST\USE RECOVER OFFLINE
RS01.DBF
10 E:\SOFTWARE\ORACLE9I\ORADATA\ORATEST\XDB ONLINE ONLINE
01.DBF
11 E:\SOFTWARE\ORACLE9I\ORADATA\ORATEST\USE RECOVER OFFLINE
RS02.DBF
SQL>host copy e:\backup\USERS01.bak E:\SOFTWARE\ORACLE9I\ORADATA\ORATEST\USERS01.DBF
SQL>host copy e:\backup\USERS02.bak E:\SOFTWARE\ORACLE9I\ORADATA\ORATEST\USERS02.DBF
SQL>recover datafile 9;
auto
...
已应用的日志。
完成介质恢复。
SQL>recover datafile 11;
auto
....
已应用的日志。
完成介质恢复。
SQL>alter database datafile 9 online;
SQL>alter database datafile 11 online;
SQL> select * from test;
A B
---------- -
1 1
1 1
2 2
SQL>
4、普通文件损坏,没有数据文件备份
要求:档建立后,所有的AF必须存在。且档不是SYSTEM的档。
这里的AF存在的意思是,从这个档建立之后的AF文件。
故障模拟:
SQL>create tablespace abc datafile 'E:\SOFTWARE\ORACLE9I\ORADATA\ORATEST\abc.dbf' size 5M ;
SQL>select d.file#,d.name,d.status,h.status from v$datafile d,v$datafile_header h where d.file#=h.file#;
FILE# NAME STATUS STATUS
-------- ---------------------------------------- ------- -------
12 E:\SOFTWARE\ORACLE9I\ORADATA\ORATEST\ABC ONLINE ONLINE
.DBF
SQL>archive log list
数据库日志模式 存档模式
自动存档 启用
存档终点 e:\Software\oracle9i\admin\oratest\archive2
最早的概要日志序列 21
下一个存档日志序列 23
当前日志序列 23
SQL> alter system switch logfile;
SQL> archive log list;
数据库日志模式 存档模式
自动存档 启用
存档终点 e:\Software\oracle9i\admin\oratest\archive2
最早的概要日志序列 22
下一个存档日志序列 24
当前日志序列 24
SQL> alter system switch logfile;
SQL> alter system switch logfile;
SQL> archive log list;
数据库日志模式 存档模式
自动存档 启用
存档终点 e:\Software\oracle9i\admin\oratest\archive2
最早的概要日志序列 24
下一个存档日志序列 26
当前日志序列 26
SQL> shutdown immediate
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> host del E:\SOFTWARE\ORACLE9I\ORADATA\ORATEST\ABC.DBF
SQL> startup
ORACLE 例程已经启动。
Total System Global Area 135338868 bytes
Fixed Size 453492 bytes
Variable Size 109051904 bytes
Database Buffers 25165824 bytes
Redo Buffers 667648 bytes
数据库装载完毕。
ORA-01157: 无法标识/锁定数据文件 12 - 请参阅 DBWR 跟踪文件
ORA-01110: 数据文件 12: 'E:\SOFTWARE\ORACLE9I\ORADATA\ORATEST\ABC.DBF'
SQL> select * from v$recover_file;
FILE# ONLINE ONLINE_ ERROR CHANGE# TIME
---------- ------- ------- ----------------------------------------------------------------- ---------- ----------
12 ONLINE ONLINE FILE NOT FOUND
0
SQL>alter database datafile 12 offline ;
SQL> select * from v$recover_file;
FILE# ONLINE ONLINE_ ERROR CHANGE# TIME
---------- ------- ------- ----------------------------------------------------------------- ---------- ----------
12 OFFLINE OFFLINE FILE NOT FOUND 0
SQL> alter database open;
SQL> create tablespace abc datafile 'E:\SOFTWARE\ORACLE9I\ORADATA\ORATEST\ABC.DBF' size 5M;//用这个命令创建表空间失败,控制文件中仍然记录该表空间
create tablespace abc datafile 'E:\SOFTWARE\ORACLE9I\ORADATA\ORATEST\ABC.DBF' size 5M
*
ERROR 位于第 1 行:
ORA-01543: 表空间 'ABC' 已经存在
SQL> alter database create datafile 'E:\SOFTWARE\ORACLE9I\ORADATA\ORATEST\ABC.DBF' as 'E:\SOFTWARE\ORACLE9I\ORADATA\ORATEST\ABC01.DBF';
SQL> alter database datafile 12 online;
alter database datafile 12 online
*
ERROR 位于第 1 行:
ORA-01113: 文件 12 需要介质恢复
ORA-01110: 数据文件 12: 'E:\SOFTWARE\ORACLE9I\ORADATA\ORATEST\ABC01.DBF'
SQL> recover datafile 12 ;
ORA-00279: 更改 880858 (在 04/26/2005 14:12:10 生成) 对于线程 1 是必需的
ORA-00289: 建议: E:\SOFTWARE\ORACLE9I\ADMIN\ORATEST\ARCHIVE2\ORATEST_23_001.ARC
ORA-00280: 更改 880858 对于线程 1 是按序列 # 23 进行的
指定日志: {=suggested | filename | AUTO | CANCEL}
auto
已应用的日志。
完成介质恢复。
SQL> select * from v$recover_file; //需要恢复的文件已经没有了
SQL> select d.file#,d.name,d.status,h.status from v$datafile d,v$datafile_header h where d.file#=h.file#;//name已经变为新的文件了,但是还是处于offline
FILE# NAME STATUS STATUS
---------- ---------------------------------------- ------- -------
12 E:\SOFTWARE\ORACLE9I\ORADATA\ORATEST\ABC OFFLINE OFFLINE
01.DBF
SQL>alter database datafile 12 online; //使文件online;
SQL> select d.file#,d.name,d.status,h.status from v$datafile d,v$datafile_header h where d.file#=h.file#;
FILE# NAME STATUS STATUS
---------- ---------------------------------------- ------- -------
12 E:\SOFTWARE\ORACLE9I\ORADATA\ORATEST\ABC ONLINE ONLINE
01.DBF
//恢复完成
SQL> create table x (n number, b char) tablespace abc;//在表空间上创建表成功
二、控制文件损坏
1、多个控制文件,一个损坏
故障模拟
SQL> select name from v$controlfile;
NAME
----------------------------------------
E:\SOFTWARE\ORACLE9I\ORADATA\ORATEST\CON
TROL01.CTL
E:\SOFTWARE\ORACLE9I\ORADATA\ORATEST\CON
TROL02.CTL
E:\SOFTWARE\ORACLE9I\ORADATA\ORATEST\CON
TROL03.CTL
SQL>host copy d:\backup\aa.txt E:\SOFTWARE\ORACLE9I\ORADATA\ORATEST\CONTROL01.CTL
执行操作出现错误
SQL> select name from v$tablespace;
select name from v$tablespace
*
ERROR 位于第 1 行:
ORA-12571: TNS: 包写入程序失败
SQL> conn / as sysdba
已连接到空闲例程。
SQL> startup
ORACLE 例程已经启动。
Total System Global Area 135338868 bytes
Fixed Size 453492 bytes
Variable Size 109051904 bytes
Database Buffers 25165824 bytes
Redo Buffers 667648 bytes
ORA-00227: ????????????: (? 1?# ? 1)
ORA-00202: ????: 'E:\SOFTWARE\ORACLE9I\ORADATA\ORATEST\CONTROL01.CTL'
SQL> startup
ORACLE 例程已经启动。
Total System Global Area 135338868 bytes
Fixed Size 453492 bytes
Variable Size 109051904 bytes
Database Buffers 25165824 bytes
Redo Buffers 667648 bytes
数据库装载完毕。
数据库已经打开。
解决方法是将该控制文件删除,拷贝另一个一个替换他
2、全部控制文件损坏
前提条件:是保留有所有数据备份或归档日值和alter database backup controlfile to trace文件备份
故障模拟
SQL> create table con (a number ,c char) tablespace abc;
表已创建。
SQL> insert into con values(2,2);
已创建 1 行。
SQL> insert into con values(3,2);
已创建 1 行。
SQL> commit;
提交完成。
SQL> archive log list
数据库日志模式 存档模式
自动存档 启用
存档终点 e:\Software\oracle9i\admin\oratest\archive2
最早的概要日志序列 41
下一个存档日志序列 43
当前日志序列 43
SQL>
SQL> alter system switch logfile;
系统已更改。
SQL> alter system switch logfile;
系统已更改。
SQL> alter system switch logfile;
系统已更改。
SQL> archive log list;
数据库日志模式 存档模式
自动存档 启用
存档终点 e:\Software\oracle9i\admin\oratest\archive2
最早的概要日志序列 44
下一个存档日志序列 46
当前日志序列 46
SQL>
SQL> host copy d:\backup\aa.txt E:\SOFTWARE\ORACLE9I\ORADATA\ORATEST\CONTROL01.CTL
已复制 1 个文件。
SQL> host copy d:\backup\aa.txt E:\SOFTWARE\ORACLE9I\ORADATA\ORATEST\CONTROL02.CTL
已复制 1 个文件。
SQL> host copy d:\backup\aa.txt E:\SOFTWARE\ORACLE9I\ORADATA\ORATEST\CONTROL03.CTL
已复制 1 个文件。
SQL> create table aaa (a number b char) tablespace user;
create table aaa (a number b char) tablespace user
*
ERROR 位于第 1 行:
ORA-01092: ORACLE 例程终止。强行断开连接
SQL> startup
ORACLE 例程已经启动。
Total System Global Area 135338868 bytes
Fixed Size 453492 bytes
Variable Size 109051904 bytes
Database Buffers 25165824 bytes
Redo Buffers 667648 bytes
ORA-00227: ????????????: (? 1?# ? 1)
ORA-00202: ????: 'E:\SOFTWARE\ORACLE9I\ORADATA\ORATEST\CONTROL01.CTL'
SQL> shutdown abort
ORACLE 例程已经关闭。
SQL> startup nomount //启动到nomount状态,这个状态不打开控制文件
ORACLE 例程已经启动。
Total System Global Area 135338868 bytes
Fixed Size 453492 bytes
Variable Size 109051904 bytes
Database Buffers 25165824 bytes
Redo Buffers 667648 bytes
SQL> CREATE CONTROLFILE REUSE DATABASE "ORATEST" NORESETLOGS ARCHIVELOG //选择NORESETLOGS,创建控制文件,前提是online redo完好
2 -- SET STANDBY TO MAXIMIZE PERFORMANCE
3 MAXLOGFILES 50
4 MAXLOGMEMBERS 5
5 MAXDATAFILES 100
6 MAXINSTANCES 1
7 MAXLOGHISTORY 226
8 LOGFILE
9 GROUP 1 'E:\SOFTWARE\ORACLE9I\ORADATA\ORATEST\REDO01.LOG' SIZE 100M,
10 GROUP 2 'E:\SOFTWARE\ORACLE9I\ORADATA\ORATEST\REDO02.LOG' SIZE 100M,
11 GROUP 3 'E:\SOFTWARE\ORACLE9I\ORADATA\ORATEST\REDO03.LOG' SIZE 100M
12 -- STANDBY LOGFILE
13 DATAFILE
14 'E:\SOFTWARE\ORACLE9I\ORADATA\ORATEST\SYSTEM01.DBF',
15 'E:\SOFTWARE\ORACLE9I\ORADATA\ORATEST\UNDOTBS01.DBF',
16 'E:\SOFTWARE\ORACLE9I\ORADATA\ORATEST\CWMLITE01.DBF',
17 'E:\SOFTWARE\ORACLE9I\ORADATA\ORATEST\DRSYS01.DBF',
18 'E:\SOFTWARE\ORACLE9I\ORADATA\ORATEST\EXAMPLE01.DBF',
19 'E:\SOFTWARE\ORACLE9I\ORADATA\ORATEST\INDX01.DBF',
20 'E:\SOFTWARE\ORACLE9I\ORADATA\ORATEST\ODM01.DBF',
21 'E:\SOFTWARE\ORACLE9I\ORADATA\ORATEST\TOOLS01.DBF',
22 'E:\SOFTWARE\ORACLE9I\ORADATA\ORATEST\USERS01.DBF',
23 'E:\SOFTWARE\ORACLE9I\ORADATA\ORATEST\XDB01.DBF',
24 'E:\SOFTWARE\ORACLE9I\ORADATA\ORATEST\USERS02.DBF',
25 'E:\SOFTWARE\ORACLE9I\ORADATA\ORATEST\ABC01.DBF'
26 CHARACTER SET ZHS16GBK
27 ;
控制文件已创建
SQL> shutdown abort
ORACLE 例程已经关闭。
SQL> conn / as sysdba
已连接到空闲例程。
SQL> startup
ORACLE 例程已经启动。
Total System Global Area 135338868 bytes
Fixed Size 453492 bytes
Variable Size 109051904 bytes
Database Buffers 25165824 bytes
Redo Buffers 667648 bytes
数据库装载完毕。
ORA-01113: 文件 1 需要介质恢复
ORA-01110: 数据文件 1: 'E:\SOFTWARE\ORACLE9I\ORADATA\ORATEST\SYSTEM01.DBF'
SQL> recover database;
完成介质恢复。
SQL> alter database open;
数据库已更改。
SQL>
SQL> alter database open;
数据库已更改。
SQL> select * from con;
A C
---------- -
1 1
2 2
3 2
已选择3行。
SQL>
还有一种情况是备份的是控制文件的二进制文件,online redo完好,并且保存了所有archive log
这时所有控制文件坏了需要将控制文件和数据文件全部restore,确保init文件设置与控制文件一致
然后利用recover database until cancel using backup controlfile;
alter database open resetlogs|noresetlogs 打开数据库
三、在线redo损坏
1、当前日志组损坏
前提是,数据库数据文件全备份和archive log全备份
故障模拟
SQL> insert into con1 values(11,1);
已创建 1 行。
SQL> select * from con1;
A B
---------- -
1 1
11 1
SQL> commit;
提交完成。
SQL> select * from v$log;
GROUP# THREAD# SEQUENCE# BYTES MEMBERS ARC STATUS FIRST_CHANGE# FIRST_TIME
---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- -------------------
1 1 13 104857600 1 YES INACTIVE 1673370 2005/04/30/14:48:36
2 1 14 104857600 1 NO CURRENT 1673377 2005/04/30/14:48:37
3 1 12 104857600 1 YES INACTIVE 1673360 2005/04/30/14:48:34
SQL> select * from v$logfile;
GROUP# STATUS TYPE MEMBER
---------- ------- ------- ----------------------------------------
3 ONLINE E:\SOFTWARE\ORACLE9I\ORADATA\ORATEST\RED
O03.LOG
2 ONLINE E:\SOFTWARE\ORACLE9I\ORADATA\ORATEST\RED
O02.LOG
1 ONLINE E:\SOFTWARE\ORACLE9I\ORADATA\ORATEST\RED
O01.LOG
SQL> host copy d:\backup\aa.txt E:\SOFTWARE\ORACLE9I\ORADATA\ORATEST\REDO02.LOG
已复制 1 个文件。
SQL> alter system switch logfile;
alter system switch logfile
*
ERROR 位于第 1 行:
ORA-03113: 通信通道的文件结束
SQL> conn / as sysdba
已连接到空闲例程。
SQL> startup
ORACLE 例程已经启动。
Total System Global Area 135338868 bytes
Fixed Size 453492 bytes
Variable Size 109051904 bytes
Database Buffers 25165824 bytes
Redo Buffers 667648 bytes
数据库装载完毕。
ORA-00316: 日志 2 (线程 1),标题中的类型 0 不是日志文件
ORA-00312: 联机日志 2 线程 1: 'E:\SOFTWARE\ORACLE9I\ORADATA\ORATEST\REDO02.LOG'
SQL> select * from v$log;
GROUP# THREAD# SEQUENCE# BYTES MEMBERS ARC STATUS FIRST_CHANGE# FIRST_TIME
---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- ----------
1 1 13 104857600 1 YES INACTIVE 1673370 30-4月 -05
2 1 14 104857600 1 NO INVALIDATED 1673377 30-4月 -05
3 1 0 104857600 1 YES UNUSED 0 30-4月 -05
将备份的数据文件restore
SQL> recover database until cancel;
ORA-00279: 更改 1672616 (在 04/30/2005 14:44:27 生成) 对于线程 1 是必需的
ORA-00289: 建议: E:\SOFTWARE\ORACLE9I\ADMIN\ORATEST\ARCHIVE2\ORATEST_1_001.ARC
ORA-00280: 更改 1672616 对于线程 1 是按序列 # 1 进行的
指定日志: {=suggested | filename | AUTO | CANCEL}
auto
ORA-00279: 更改 1672625 (在 04/30/2005 14:44:29 生成) 对于线程 1 是必需的
ORA-00289: 建议: E:\SOFTWARE\ORACLE9I\ADMIN\ORATEST\ARCHIVE2\ORATEST_2_001.ARC
ORA-00280: 更改 1672625 对于线程 1 是按序列 # 2 进行的
ORA-00278: 此恢复不再需要日志文件 'E:\SOFTWARE\ORACLE9I\ADMIN\ORATEST\ARCHIVE2\ORATEST_1_001.ARC'
ORA-00279: 更改 1672636 (在 04/30/2005 14:44:33 生成) 对于线程 1 是必需的
ORA-00289: 建议: E:\SOFTWARE\ORACLE9I\ADMIN\ORATEST\ARCHIVE2\ORATEST_3_001.ARC
ORA-00280: 更改 1672636 对于线程 1 是按序列 # 3 进行的
ORA-00278: 此恢复不再需要日志文件 'E:\SOFTWARE\ORACLE9I\ADMIN\ORATEST\ARCHIVE2\ORATEST_2_001.ARC'
ORA-00279: 更改 1672804 (在 04/30/2005 14:45:19 生成) 对于线程 1 是必需的
ORA-00289: 建议: E:\SOFTWARE\ORACLE9I\ADMIN\ORATEST\ARCHIVE2\ORATEST_4_001.ARC
ORA-00280: 更改 1672804 对于线程 1 是按序列 # 4 进行的
ORA-00278: 此恢复不再需要日志文件 'E:\SOFTWARE\ORACLE9I\ADMIN\ORATEST\ARCHIVE2\ORATEST_3_001.ARC'
ORA-00279: 更改 1672815 (在 04/30/2005 14:45:25 生成) 对于线程 1 是必需的
ORA-00289: 建议: E:\SOFTWARE\ORACLE9I\ADMIN\ORATEST\ARCHIVE2\ORATEST_5_001.ARC
ORA-00280: 更改 1672815 对于线程 1 是按序列 # 5 进行的
ORA-00278: 此恢复不再需要日志文件 'E:\SOFTWARE\ORACLE9I\ADMIN\ORATEST\ARCHIVE2\ORATEST_4_001.ARC'
ORA-00279: 更改 1672827 (在 04/30/2005 14:45:29 生成) 对于线程 1 是必需的
ORA-00289: 建议: E:\SOFTWARE\ORACLE9I\ADMIN\ORATEST\ARCHIVE2\ORATEST_6_001.ARC
ORA-00280: 更改 1672827 对于线程 1 是按序列 # 6 进行的
ORA-00278: 此恢复不再需要日志文件 'E:\SOFTWARE\ORACLE9I\ADMIN\ORATEST\ARCHIVE2\ORATEST_5_001.ARC'
ORA-00279: 更改 1673157 (在 04/30/2005 14:47:44 生成) 对于线程 1 是必需的
ORA-00289: 建议: E:\SOFTWARE\ORACLE9I\ADMIN\ORATEST\ARCHIVE2\ORATEST_7_001.ARC
ORA-00280: 更改 1673157 对于线程 1 是按序列 # 7 进行的
ORA-00278: 此恢复不再需要日志文件 'E:\SOFTWARE\ORACLE9I\ADMIN\ORATEST\ARCHIVE2\ORATEST_6_001.ARC'
ORA-00279: 更改 1673175 (在 04/30/2005 14:47:51 生成) 对于线程 1 是必需的
ORA-00289: 建议: E:\SOFTWARE\ORACLE9I\ADMIN\ORATEST\ARCHIVE2\ORATEST_8_001.ARC
ORA-00280: 更改 1673175 对于线程 1 是按序列 # 8 进行的
ORA-00278: 此恢复不再需要日志文件 'E:\SOFTWARE\ORACLE9I\ADMIN\ORATEST\ARCHIVE2\ORATEST_7_001.ARC'
ORA-00279: 更改 1673263 (在 04/30/2005 14:48:21 生成) 对于线程 1 是必需的
ORA-00289: 建议: E:\SOFTWARE\ORACLE9I\ADMIN\ORATEST\ARCHIVE2\ORATEST_9_001.ARC
ORA-00280: 更改 1673263 对于线程 1 是按序列 # 9 进行的
ORA-00278: 此恢复不再需要日志文件 'E:\SOFTWARE\ORACLE9I\ADMIN\ORATEST\ARCHIVE2\ORATEST_8_001.ARC'
ORA-00279: 更改 1673275 (在 04/30/2005 14:48:28 生成) 对于线程 1 是必需的
ORA-00289: 建议: E:\SOFTWARE\ORACLE9I\ADMIN\ORATEST\ARCHIVE2\ORATEST_10_001.ARC
ORA-00280: 更改 1673275 对于线程 1 是按序列 # 10 进行的
ORA-00278: 此恢复不再需要日志文件 'E:\SOFTWARE\ORACLE9I\ADMIN\ORATEST\ARCHIVE2\ORATEST_9_001.ARC'
ORA-00279: 更改 1673357 (在 04/30/2005 14:48:33 生成) 对于线程 1 是必需的
ORA-00289: 建议: E:\SOFTWARE\ORACLE9I\ADMIN\ORATEST\ARCHIVE2\ORATEST_11_001.ARC
ORA-00280: 更改 1673357 对于线程 1 是按序列 # 11 进行的
ORA-00278: 此恢复不再需要日志文件 'E:\SOFTWARE\ORACLE9I\ADMIN\ORATEST\ARCHIVE2\ORATEST_10_001.ARC'
ORA-00279: 更改 1673360 (在 04/30/2005 14:48:34 生成) 对于线程 1 是必需的
ORA-00289: 建议: E:\SOFTWARE\ORACLE9I\ADMIN\ORATEST\ARCHIVE2\ORATEST_12_001.ARC
ORA-00280: 更改 1673360 对于线程 1 是按序列 # 12 进行的
ORA-00278: 此恢复不再需要日志文件 'E:\SOFTWARE\ORACLE9I\ADMIN\ORATEST\ARCHIVE2\ORATEST_11_001.ARC'
ORA-00279: 更改 1673370 (在 04/30/2005 14:48:36 生成) 对于线程 1 是必需的
ORA-00289: 建议: E:\SOFTWARE\ORACLE9I\ADMIN\ORATEST\ARCHIVE2\ORATEST_13_001.ARC
ORA-00280: 更改 1673370 对于线程 1 是按序列 # 13 进行的
ORA-00278: 此恢复不再需要日志文件 'E:\SOFTWARE\ORACLE9I\ADMIN\ORATEST\ARCHIVE2\ORATEST_12_001.ARC'
ORA-00279: 更改 1673377 (在 04/30/2005 14:48:37 生成) 对于线程 1 是必需的
ORA-00289: 建议: E:\SOFTWARE\ORACLE9I\ADMIN\ORATEST\ARCHIVE2\ORATEST_14_001.ARC
ORA-00280: 更改 1673377 对于线程 1 是按序列 # 14 进行的
ORA-00278: 此恢复不再需要日志文件 'E:\SOFTWARE\ORACLE9I\ADMIN\ORATEST\ARCHIVE2\ORATEST_13_001.ARC'
ORA-00308: 无法打开存档日志 'E:\SOFTWARE\ORACLE9I\ADMIN\ORATEST\ARCHIVE2\ORATEST_14_001.ARC'
ORA-27041: 无法打开文件
OSD-04002: 无法打开文件
O/S-Error: (OS 2) 系统找不到指定的文件。
SQL> alter database open resetlogs;
数据库已更改。
SQL> select * from con1;
A B
---------- -
1 1
SQL> alter system switch logfile;
系统已更改。
SQL> select * from v$log;
GROUP# THREAD# SEQUENCE# BYTES MEMBERS ARC STATUS FIRST_CHANGE# FIRST_TIME
---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- ----------
1 1 2 104857600 1 NO CURRENT 1675246 30-4月 -05
2 1 1 104857600 1 YES ACTIVE 1673378 30-4月 -05
3 1 0 104857600 1 YES UNUSED 0
2、非活动的redo log 损坏恢复
故障模拟
SQL> select * from v$log;
GROUP# THREAD# SEQUENCE# BYTES MEMBERS ARC STATUS FIRST_CHANGE# FIRST_TIME
---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- ----------
1 1 2 104857600 1 YES INACTIVE 1675246 30-4月 -05
2 1 4 104857600 1 NO CURRENT 1675327 30-4月 -05
3 1 3 104857600 1 YES INACTIVE 1675322 30-4月 -05
SQL> host del E:\SOFTWARE\ORACLE9I\ORADATA\ORATEST\REDO03.LOG
SQL> shutdown immediate
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup
ORACLE 例程已经启动。
Total System Global Area 135338868 bytes
Fixed Size 453492 bytes
Variable Size 109051904 bytes
Database Buffers 25165824 bytes
Redo Buffers 667648 bytes
数据库装载完毕。
ORA-00313: 无法打开日志组 3 (线程 1) 的成员
ORA-00312: 联机日志 3 线程 1: 'E:\SOFTWARE\ORACLE9I\ORADATA\ORATEST\REDO03.LOG'
SQL> select * from v$log;
GROUP# THREAD# SEQUENCE# BYTES MEMBERS ARC STATUS FIRST_CHANGE# FIRST_TIME
---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- ----------
1 1 2 104857600 1 YES INACTIVE 1675246 30-4月 -05
2 1 4 104857600 1 NO CURRENT 1675327 30-4月 -05
3 1 3 104857600 1 YES INACTIVE 1675322 30-4月 -05
SQL> alter database clear logfile group 3;
数据库已更改。
SQL> alter database open;
数据库已更改。
SQL> select * from v$log;
GROUP# THREAD# SEQUENCE# BYTES MEMBERS ARC STATUS FIRST_CHANGE# FIRST_TIME
---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- ----------
1 1 2 104857600 1 YES INACTIVE 1675246 30-4月 -05
2 1 4 104857600 1 NO CURRENT 1675327 30-4月 -05
3 1 0 104857600 1 YES UNUSED 1675322 30-4月 -05
SQL>
四、控制文件和Redo损坏
1、全部的控制文件和全部redolog损坏
故障模拟
SQL> select * from con1;
A B
---------- -
1 1
SQL> insert into con1 values(2,1);
已创建 1 行。
SQL> insert into con1 values(3,1);
已创建 1 行。
SQL> insert into con1 values(4,1);
已创建 1 行。
SQL> commit;
提交完成。
SQL> select * from con1;
A B
---------- -
1 1
2 1
3 1
4 1
SQL> select * from v$log;
GROUP# THREAD# SEQUENCE# BYTES MEMBERS ARC STATUS FIRST_CHANGE# FIRST_TIME
---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- -------------------
1 1 30 104857600 1 NO CURRENT 3426067 2005/05/08/10:25:31
2 1 28 104857600 1 YES INACTIVE 3426049 2005/05/08/10:25:24
3 1 29 104857600 1 YES INACTIVE 3426061 2005/05/08/10:25:30
SQL> host copy d:\backup\aa.txt E:\Software\oracle9i\oradata\oratest\CONTROL01.CTL
已复制 1 个文件。
SQL> host copy d:\backup\aa.txt E:\Software\oracle9i\oradata\oratest\CONTROL02.CTL
已复制 1 个文件。
SQL> host copy d:\backup\aa.txt E:\Software\oracle9i\oradata\oratest\CONTROL03.CTL
SQL> host copy d:\backup\aa.txt E:\Software\oracle9i\oradata\oratest\REDO01.LOG
已复制 1 个文件。
SQL> host copy d:\backup\aa.txt E:\Software\oracle9i\oradata\oratest\REDO02.LOG
已复制 1 个文件。
SQL> select * from v$log;
select * from v$log
*
ERROR 位于第 1 行:
ORA-12571: TNS: 包写入程序失败
SQL> conn / as sysdba
已连接到空闲例程。
SQL> startup
ORACLE 例程已经启动。
Total System Global Area 135338868 bytes
Fixed Size 453492 bytes
Variable Size 109051904 bytes
Database Buffers 25165824 bytes
Redo Buffers 667648 bytes
ORA-00227: ????????????: (? 1?# ? 1)
ORA-00202: ????: 'E:\SOFTWARE\ORACLE9I\ORADATA\ORATEST\CONTROL01.CTL'
shutdown abrot
strat nomount
利用trace备份的control文件创建控制文件,由于当前的redolog损坏所以选择RESETLOGS方式
CREATE CONTROLFILE REUSE DATABASE "ORATEST" RESETLOGS ARCHIVELOG
-- SET STANDBY TO MAXIMIZE PERFORMANCE
MAXLOGFILES 50
MAXLOGMEMBERS 5
MAXDATAFILES 100
MAXINSTANCES 1
MAXLOGHISTORY 226
LOGFILE
GROUP 1 'E:\SOFTWARE\ORACLE9I\ORADATA\ORATEST\REDO01.LOG' SIZE 100M,
GROUP 2 'E:\SOFTWARE\ORACLE9I\ORADATA\ORATEST\REDO02.LOG' SIZE 100M,
GROUP 3 'E:\SOFTWARE\ORACLE9I\ORADATA\ORATEST\REDO03.LOG' SIZE 100M
-- STANDBY LOGFILE
DATAFILE
'E:\SOFTWARE\ORACLE9I\ORADATA\ORATEST\SYSTEM01.DBF',
'E:\SOFTWARE\ORACLE9I\ORADATA\ORATEST\UNDOTBS01.DBF',
'E:\SOFTWARE\ORACLE9I\ORADATA\ORATEST\CWMLITE01.DBF',
'E:\SOFTWARE\ORACLE9I\ORADATA\ORATEST\DRSYS01.DBF',
'E:\SOFTWARE\ORACLE9I\ORADATA\ORATEST\EXAMPLE01.DBF',
'E:\SOFTWARE\ORACLE9I\ORADATA\ORATEST\INDX01.DBF',
'E:\SOFTWARE\ORACLE9I\ORADATA\ORATEST\ODM01.DBF',
'E:\SOFTWARE\ORACLE9I\ORADATA\ORATEST\TOOLS01.DBF',
'E:\SOFTWARE\ORACLE9I\ORADATA\ORATEST\USERS01.DBF',
'E:\SOFTWARE\ORACLE9I\ORADATA\ORATEST\XDB01.DBF',
'E:\SOFTWARE\ORACLE9I\ORADATA\ORATEST\USERS02.DBF',
'E:\SOFTWARE\ORACLE9I\ORADATA\ORATEST\ABC01.DBF'
CHARACTER SET ZHS16GBK
;
SQL>
SQL> recover database until cancel;
ORA-00283: ??????????
ORA-01610: ?? BACKUP CONTROLFILE ??????????
SQL> recover database;
ORA-00283: ??????????
RA-01610: ?? BACKUP CONTROLFILE ??????????
SQL> shutdown abort
ORACLE 例程已经关闭。
SQL> conn / as sysdba
已连接到空闲例程。
SQL> startup mount;
ORACLE 例程已经启动。
Total System Global Area 135338868 bytes
Fixed Size 453492 bytes
Variable Size 109051904 bytes
Database Buffers 25165824 bytes
Redo Buffers 667648 bytes
数据库装载完毕。
SQL> recover database ;
ORA-00283: 恢复会话因错误而取消
RA-01610: 使用 BACKUP CONTROLFILE 选项的恢复必须已完成
restore所有备份得数据文件。
SQL> recover database using backup controlfile;
ORA-00279: 更改 3425439 (在 05/08/2005 10:21:57 生成) 对于线程 1 是必需的
ORA-00289: 建议: E:\SOFTWARE\ORACLE9I\ADMIN\ORATEST\ARCHIVE2\ORATEST_22_001.ARC
ORA-00280: 更改 3425439 对于线程 1 是按序列 # 22 进行的
指定日志: {=suggested | filename | AUTO | CANCEL}
auto
ORA-00279: 更改 3425841 (在 05/08/2005 10:24:18 生成) 对于线程 1 是必需的
ORA-00289: 建议: E:\SOFTWARE\ORACLE9I\ADMIN\ORATEST\ARCHIVE2\ORATEST_23_001.ARC
ORA-00280: 更改 3425841 对于线程 1 是按序列 # 23 进行的
ORA-00278: 此恢复不再需要日志文件 'E:\SOFTWARE\ORACLE9I\ADMIN\ORATEST\ARCHIVE2\ORATEST_22_001.ARC'
ORA-00279: 更改 3425851 (在 05/08/2005 10:24:23 生成) 对于线程 1 是必需的
ORA-00289: 建议: E:\SOFTWARE\ORACLE9I\ADMIN\ORATEST\ARCHIVE2\ORATEST_24_001.ARC
ORA-00280: 更改 3425851 对于线程 1 是按序列 # 24 进行的
ORA-00278: 此恢复不再需要日志文件 'E:\SOFTWARE\ORACLE9I\ADMIN\ORATEST\ARCHIVE2\ORATEST_23_001.ARC'
ORA-00279: 更改 3425948 (在 05/08/2005 10:25:13 生成) 对于线程 1 是必需的
ORA-00289: 建议: E:\SOFTWARE\ORACLE9I\ADMIN\ORATEST\ARCHIVE2\ORATEST_25_001.ARC
ORA-00280: 更改 3425948 对于线程 1 是按序列 # 25 进行的
ORA-00278: 此恢复不再需要日志文件 'E:\SOFTWARE\ORACLE9I\ADMIN\ORATEST\ARCHIVE2\ORATEST_24_001.ARC'
ORA-00279: 更改 3426034 (在 05/08/2005 10:25:18 生成) 对于线程 1 是必需的
ORA-00289: 建议: E:\SOFTWARE\ORACLE9I\ADMIN\ORATEST\ARCHIVE2\ORATEST_26_001.ARC
ORA-00280: 更改 3426034 对于线程 1 是按序列 # 26 进行的
ORA-00278: 此恢复不再需要日志文件 'E:\SOFTWARE\ORACLE9I\ADMIN\ORATEST\ARCHIVE2\ORATEST_25_001.ARC'
ORA-00279: 更改 3426046 (在 05/08/2005 10:25:23 生成) 对于线程 1 是必需的
ORA-00289: 建议: E:\SOFTWARE\ORACLE9I\ADMIN\ORATEST\ARCHIVE2\ORATEST_27_001.ARC
ORA-00280: 更改 3426046 对于线程 1 是按序列 # 27 进行的
ORA-00278: 此恢复不再需要日志文件 'E:\SOFTWARE\ORACLE9I\ADMIN\ORATEST\ARCHIVE2\ORATEST_26_001.ARC'
ORA-00279: 更改 3426049 (在 05/08/2005 10:25:24 生成) 对于线程 1 是必需的
ORA-00289: 建议: E:\SOFTWARE\ORACLE9I\ADMIN\ORATEST\ARCHIVE2\ORATEST_28_001.ARC
ORA-00280: 更改 3426049 对于线程 1 是按序列 # 28 进行的
ORA-00278: 此恢复不再需要日志文件 'E:\SOFTWARE\ORACLE9I\ADMIN\ORATEST\ARCHIVE2\ORATEST_27_001.ARC'
ORA-00279: 更改 3426061 (在 05/08/2005 10:25:30 生成) 对于线程 1 是必需的
ORA-00289: 建议: E:\SOFTWARE\ORACLE9I\ADMIN\ORATEST\ARCHIVE2\ORATEST_29_001.ARC
ORA-00280: 更改 3426061 对于线程 1 是按序列 # 29 进行的
ORA-00278: 此恢复不再需要日志文件 'E:\SOFTWARE\ORACLE9I\ADMIN\ORATEST\ARCHIVE2\ORATEST_28_001.ARC'
ORA-00279: 更改 3426067 (在 05/08/2005 10:25:31 生成) 对于线程 1 是必需的
ORA-00289: 建议: E:\SOFTWARE\ORACLE9I\ADMIN\ORATEST\ARCHIVE2\ORATEST_30_001.ARC
ORA-00280: 更改 3426067 对于线程 1 是按序列 # 30 进行的
ORA-00278: 此恢复不再需要日志文件 'E:\SOFTWARE\ORACLE9I\ADMIN\ORATEST\ARCHIVE2\ORATEST_29_001.ARC'
ORA-00308: 无法打开存档日志 'E:\SOFTWARE\ORACLE9I\ADMIN\ORATEST\ARCHIVE2\ORATEST_30_001.ARC'
ORA-27041: 无法打开文件
OSD-04002: 无法打开文件
O/S-Error: (OS 2) 系统找不到指定的文件。
SQL> alter database open resetlogs;
alter database open resetlogs
*
ERROR 位于第 1 行:
ORA-01113: 文件 1 需要介质恢复
ORA-01110: 数据文件 1: 'E:\SOFTWARE\ORACLE9I\ORADATA\ORATEST\SYSTEM01.DBF'
修改参数文件加入_allow_resetlogs_corruption=true 强制恢复
SQL> alter database open resetlogs;
数据库打开
修改参数文件去掉_allow_resetlogs_corruption=true
2、一个数据文件损坏和一个日值文件损坏
故障模拟
SQL> host copy d:\backup\aa.txt E:\Software\oracle9i\oradata\orc\CONTROL01.CTL
已复制 1 个文件
SQL> host copy d:\backup\aa.txt E:\Software\oracle9i\oradata\orc\REDO01.LOG
已复制 1 个文件。
SQL> select * from v$log;
select * from v$log
*
ERROR 位于第 1 行:
ORA-12571: TNS: 包写入程序失败
SQL> conn / as sysdba
已连接到空闲例程。
SQL> startup
ORACLE 例程已经启动。
Total System Global Area 135338868 bytes
Fixed Size 453492 bytes
Variable Size 109051904 bytes
Database Buffers 25165824 bytes
Redo Buffers 667648 bytes
ORA-00227: ????????????: (? 1?# ? 1)
ORA-00202: ????: 'E:\SOFTWARE\ORACLE9I\ORADATA\ORC\CONTROL01.CTL'
SQL> shutdown abort
ORACLE 例程已经关闭。
SQL>
拷贝正常的替换损坏的
SQL> startup
oRACLE 例程已经启动。
Total System Global Area 135338868 bytes
Fixed Size 453492 bytes
Variable Size 109051904 bytes
Database Buffers 25165824 bytes
Redo Buffers 667648 bytes
数据库装载完毕。
ORA-00313: 无法打开日志组 1 (线程 1) 的成员
ORA-00312: 联机日志 1 线程 1: 'E:\SOFTWARE\ORACLE9I\ORADATA\ORC\REDO01.LOG'
SQL> select * from v$log;
GROUP# THREAD# SEQUENCE# BYTES MEMBERS ARC STATUS
---------- ---------- ---------- ---------- ---------- --- ----------------
FIRST_CHANGE# FIRST_TIME
------------- ----------
1 1 2 104857600 1 YES INACTIVE
476608 11-5月 -05
2 1 3 104857600 1 YES INACTIVE
752579 13-5月 -05
3 1 4 104857600 1 NO INVALIDATED
812309 13-5月 -05
SQL>
查看为非当前日值 (如果是当前redo损坏那么那着当前损坏的情况恢复)
SQL> alter database clear group 1;
alter database clear group 1
*
ERROR 位于第 1 行:
ORA-01900: 需要 LOGFILE 关键字
SQL> alter database clear logfile group 1;
数据库已更改。
SQL> recover database;
ORA-00283: 恢复会话因错误而取消
ORA-00264: 不要求恢复
SQL> alter database open ;
数据库已更改。
SQL>
四、全部文件都损坏
故障模拟:所有归档日值存在
先在线热备
SQL> create table con1 (a number,b char) tablespace users;
表已创建。
SQL> alter system switch logfile;
系统已更改。
SQL> alter system switch logfile;
系统已更改。
SQL> alter system switch logfile;
系统已更改。
SQL> insert into con1(1,1);
insert into con1(1,1)
SQL> shutdown immediate
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL>
删除所有文件
SQL> startup
ORACLE 例程已经启动。
Total System Global Area 135338868 bytes
Fixed Size 453492 bytes
Variable Size 109051904 bytes
Database Buffers 25165824 bytes
Redo Buffers 667648 bytes
ORA-00205: ?????????????????????
SQL> exit
SQL> shutdown abort
ORACLE 例程已经关闭。
恢复热备的数据文件
SQL> startup nomount
ORACLE 例程已经启动。
Total System Global Area 135338868 bytes
Fixed Size 453492 bytes
Variable Size 109051904 bytes
Database Buffers 25165824 bytes
Redo Buffers 667648 bytes
留用备份的trace文件中的语句创建控制文件
SQL> CREATE CONTROLFILE REUSE DATABASE "ORC" RESETLOGS ARCHIVELOG
2 -- SET STANDBY TO MAXIMIZE PERFORMANCE
3 MAXLOGFILES 50
4 MAXLOGMEMBERS 5
5 MAXDATAFILES 100
6 MAXINSTANCES 1
7 MAXLOGHISTORY 226
8 LOGFILE
9 GROUP 1 'E:\SOFTWARE\ORACLE9I\ORADATA\ORC\REDO01.LOG' SIZE
10 GROUP 2 'E:\SOFTWARE\ORACLE9I\ORADATA\ORC\REDO02.LOG' SIZE
11 GROUP 3 'E:\SOFTWARE\ORACLE9I\ORADATA\ORC\REDO03.LOG' SIZE
12 -- STANDBY LOGFILE
13 DATAFILE
14 'E:\SOFTWARE\ORACLE9I\ORADATA\ORC\SYSTEM01.DBF',
15 'E:\SOFTWARE\ORACLE9I\ORADATA\ORC\UNDOTBS01.DBF',
16 'E:\SOFTWARE\ORACLE9I\ORADATA\ORC\CWMLITE01.DBF',
17 'E:\SOFTWARE\ORACLE9I\ORADATA\ORC\DRSYS01.DBF',
18 'E:\SOFTWARE\ORACLE9I\ORADATA\ORC\EXAMPLE01.DBF',
19 'E:\SOFTWARE\ORACLE9I\ORADATA\ORC\INDX01.DBF',
20 'E:\SOFTWARE\ORACLE9I\ORADATA\ORC\ODM01.DBF',
21 'E:\SOFTWARE\ORACLE9I\ORADATA\ORC\TOOLS01.DBF',
22 'E:\SOFTWARE\ORACLE9I\ORADATA\ORC\USERS01.DBF',
23 'E:\SOFTWARE\ORACLE9I\ORADATA\ORC\XDB01.DBF',
24 'E:\SOFTWARE\ORACLE9I\ORADATA\ORC\USERS02.DBF',
25 'E:\SOFTWARE\ORACLE9I\ORADATA\ORC\ABC01.DBF'
26 CHARACTER SET ZHS16GBK
27 ;
控制文件已创建
SQL> shutdown abort
ORACLE 例程已经关闭。
SQL> startup
ORACLE 例程已经启动。
Total System Global Area 135338868 bytes
Fixed Size 453492 bytes
Variable Size 109051904 bytes
Database Buffers 25165824 bytes
Redo Buffers 667648 bytes
数据库装载完毕。
ORA-01589: 要打开数据库则必须使用 RESETLOGS 或 NORESETLOGS 选项
设置初始化参数文件_allow_resetlogs_corruption=true
SQL> recover database using backup controlfile;
ORA-00279: 更改 842741 (在 05/13/2005 09:51:58 生成) 对于线程 1 是必需的
ORA-00289: 建议: E:\SOFTWARE\ORACLE9I\ADMIN\ORC\ARCHIVE2\ORC_5_1.ARC
ORA-00280: 更改 842741 对于线程 1 是按序列 # 5 进行的
指定日志: {=suggested | filename | AUTO | CANCEL}
auto
SQL> alter database open resetlogs;
数据库已更改。
SQL> select name from v$datafile;
NAME
------------------------------------------------
E:\SOFTWARE\ORACLE9I\ORADATA\ORC\SYSTEM01.DBF
E:\SOFTWARE\ORACLE9I\ORADATA\ORC\UNDOTBS01.DBF
E:\SOFTWARE\ORACLE9I\ORADATA\ORC\CWMLITE01.DBF
E:\SOFTWARE\ORACLE9I\ORADATA\ORC\DRSYS01.DBF
E:\SOFTWARE\ORACLE9I\ORADATA\ORC\EXAMPLE01.DBF
E:\SOFTWARE\ORACLE9I\ORADATA\ORC\INDX01.DBF
E:\SOFTWARE\ORACLE9I\ORADATA\ORC\ODM01.DBF
E:\SOFTWARE\ORACLE9I\ORADATA\ORC\TOOLS01.DBF
E:\SOFTWARE\ORACLE9I\ORADATA\ORC\USERS01.DBF
E:\SOFTWARE\ORACLE9I\ORADATA\ORC\XDB01.DBF
E:\SOFTWARE\ORACLE9I\ORADATA\ORC\USERS02.DBF
NAME
------------------------------------------------
E:\SOFTWARE\ORACLE9I\ORADATA\ORC\ABC01.DBF
已选择12行。
SQL> select * from con1;
A B
---------- -
1 1
SQL>
由于热备不备份临时表空间,所以可以删除临时表空间,再重建一个
SQL> select tablespace_name,status from dba_tablespaces where tablespace_name='TEMP';
TABLESPACE_NAME STATUS
------------------------------ ---------
TEMP ONLINE
SQL> create temporary tablespace temp1 tempfile 'E:\SOFTWARE\ORACLE9I\ORADATA\ORC\TEMP01.DBF' size 5M;
表空间已创建。
SQL> alter database default temporary tablespace temp1;
数据库已更改。
SQL> drop tablespace temp;
表空间已丢弃。
SQL>