平台:windows xp
Oracle 817
非归档模式
时间:8月6日 周三下午3点后,至 7日 周四一天
实例1:ORCL的恢复:
打开数据库时提示信息,两个控制文件不一致(从外面看两个文件的大小和日期还是一样的),但实际显示的字节数不同。
首先,试图备份整个数据文件目录,但总不成功,显示检验和,或者循环冗余之类的错误。只好备份能备份的文件,继续下一步。
同事没有记住2个控制文件的字节差别,应该用大的那个去替代别的控制文件,貌似我用其中一个,可能是小的control02.ctl替代了其他2个控制文件,接下来又提示,说控制文件和数据文件不一致:控制文件比数据文件旧。控制文件是当天的,但数据文件有7月3号的(一个月前的),也有当天日期但比控制文件新的,3个联机日志文件都是7月3号的。查询网上,这类型情形只能重建控制文件。生成建立控制文件的脚本,装载数据库,备份控制文件,创建成功。
--创建控制文件的脚本(/***r database backup controlfile to ‘E:\trace\ctl.bak’;*/)
alter database backup controlfile to trace
Completed: alter database backup controlfile to trace
Wed Jul 30 17:00:48 2014
然后开始重建控制文件:
SQL>shutdown immediate;
SQL>STARTUP NOMOUNT;
SQL>CREATE CONTROLFILE REUSE DATABASE "ORCL" NORESETLOGS NOARCHIVELOG
MAXLOGFILES 16
MAXLOGMEMBERS 3
MAXDATAFILES 100
MAXINSTANCES 8
MAXLOGHISTORY 292
LOGFILE
GROUP 1 'E:\oracle\oradata\orcl\redo01.log' SIZE 50M BLOCKSIZE 512,
GROUP 2 'E:\oracle\oradata\orcl\redo02.log' SIZE 50M BLOCKSIZE 512,
GROUP 3 'E:\oracle\oradata\orcl\redo03.log' SIZE 50M BLOCKSIZE 512
-- STANDBY LOGFILE
DATAFILE
'E:\ORACLE\ORADATA\ORCL\SYSTEM01.DBF',
'E:\ORACLE\ORADATA\ORCL\RBS01.DBF',
'E:\ORACLE\ORADATA\ORCL\USERS01.DBF',
'E:\ORACLE\ORADATA\ORCL\TEMP01.DBF',
'E:\ORACLE\ORADATA\ORCL\TOOLS01.DBF',
'E:\ORACLE\ORADATA\ORCL\INDX01.DBF',
'E:\ORACLE\ORADATA\ORCL\DR01.DBF'
CHARACTER SET ZHS16GBK
;
Completed: CREATE CONTROLFILE REUSE DATABASE "ORCL" NORESETLO
Wed Jul 30 17:04:31 2014
SQL>alter database mount;
出现错误 ORA-1100 signalled during: alter database mount,无法装载数据库
尝试恢复数据库:Wed Jul 30 17:06:24 2014
SQL〉RECOVER DATABASE
Wed Jul 30 17:04:44 2014
ALTER DATABASE RECOVER database
Wed Jul 30 17:04:44 2014
Media Recovery Start
Media Recovery Log
Recovery of Online Redo Log: Thread 1 Group 2 Seq 7253 Reading mem 0
Mem# 0 errs 0: E:\ORACLE\ORADATA\ORCL\REDO02.LOG
Media Recovery failed with error 1115
ORA-283 signalled during: ALTER DATABASE RECOVER database ...
Wed Jul 30 17:06:24 2014
alter database mount
Wed Jul 30 17:06:24 2014
ORA-1100 signalled during: alter database mount
...
Wed Jul 30 17:06:31 2014
alter database open
ORA-1113 signalled during: alter database open
出现错误ORA-01110 ORA-0113,于是依次恢复出错的数据文件
SQL>recover datafile 'E:\ORACLE\ORADATA\ORCL\SYSTEM01.DBF';
完成介质恢复。
SQL>recover datafile 'E:\ORACLE\ORADATA\ORCL\RBS01.DBF';
第 1 行出现错误:
ORA-00283: 恢复会话因错误而取消
ORA-01115: 从文件 2读取块时出现 IO 错误 (块 # 31####)
ORA-01110: 数据文件 2: ' E:\ORACLE\ORADATA\ORCL\RBS01.DBF '
ORA-27069: skgfdisp: 尝试在文件范围外执行 I/O
OSD-04026: 传递的参数无效。 (OS 3145977)
ALERT文件显示:
ALTER DATABASE RECOVER datafile 'e:\oracle\oradata\orcl\rbs01.dbf'
Wed Jul 30 17:09:28 2014
Media Recovery Datafile: 'e:\oracle\oradata\orcl\rbs01.dbf'
Media Recovery Start
Media Recovery Log
Recovery of Online Redo Log: Thread 1 Group 2 Seq 7253 Reading mem 0
Mem# 0 errs 0: E:\ORACLE\ORADATA\ORCL\REDO02.LOG
Media Recovery failed with error 1115
ORA-283 signalled during: ALTER DATABASE RECOVER datafile 'e:\oracle\oradat...
Thu Jul 31 09:14:48 2014
继续恢复TEMP01.DBF 文件:
SQL>recover datafile 'E:\ORACLE\ORADATA\ORCL\TEMP01.DBF';
出错:
ALTER DATABASE RECOVER datafile 'E:\ORACLE\ORADATA\ORCL\TEMP01.DBF'
Thu Jul 31 09:15:13 2014
Media Recovery Datafile: 'E:\ORACLE\ORADATA\ORCL\TEMP01.DBF'
Media Recovery Start
Media Recovery Log
Recovery of Online Redo Log: Thread 1 Group 2 Seq 7253 Reading mem 0
Mem# 0 errs 0: E:\ORACLE\ORADATA\ORCL\REDO02.LOG
Media recovery buffers written to disk due to log corruption.媒介损坏
Some changes at scn 13114573485700 may be on disk
Media Recovery failed with error 355
ORA-283 signalled during: ALTER DATABASE RECOVER datafile 'E:\ORACLE\ORADAT...
Thu Jul 31 09:16:12 2014
SQL>recover datafile 'E:\ORACLE\ORADATA\ORCL\USERS01.DBF';
完成介质恢复。
SQL>recover datafile 'E:\ORACLE\ORADATA\ORCL\TEMP01.DBF';
SQL>recover datafile 'E:\ORACLE\ORADATA\ORCL\INDX01.DBF';
完成介质恢复。
SQL>recover datafile 'E:\ORACLE\ORADATA\ORCL\DR01.DBF';
完成介质恢复。
SQL>recover datafile 'E:\ORACLE\ORADATA\ORCL\TOOLS01.DBF';
发现恢复TOOLS01.DBF';提示也有坏块
ALTER DATABASE RECOVER datafile 'E:\ORACLE\ORADATA\ORCL\TOOLS01.DBF'
Thu Jul 31 09:16:12 2014
Media Recovery Datafile: 'E:\ORACLE\ORADATA\ORCL\TOOLS01.DBF'
Media Recovery Start
Media Recovery Log
Recovery of Online Redo Log: Thread 1 Group 2 Seq 7253 Reading mem 0
Mem# 0 errs 0: E:\ORACLE\ORADATA\ORCL\REDO02.LOG
Media recovery buffers written to disk due to log corruption.
Some changes at scn 13114573485700 may be on disk
Media Recovery failed with error 355
ORA-283 signalled during: ALTER DATABASE RECOVER datafile 'E:\ORACLE\ORADAT...
Thu Jul 31 09:16:37 2014
于是干脆摘除该文件:
SQL> alter database datafile 'E:\ORACLE\ORADATA\ORCL\TOOLS01.DBF' offline drop;
再次尝试打开数据库,使用和不用resetlogs选项:
SQL> alter database open resetlogs;
Thu Jul 31 09:31:12 2014
ORA-1139 signalled during: alter database open resetlogs
...
Thu Jul 31 09:31:24 2014
alter database open
Thu Jul 31 09:31:24 2014
ORA-1113 signalled during: alter database open
还是不行,于是接下来处理联机日志的问题,按照联机日志文件都丢掉处理:
SQL>Select * from v$logfile;
SQL>Select * from v$log; --2号日志为当前日志
SQL> select * from v$log;
GROUP# THREAD# SEQUENCE# BYTES MEMBERS ARC STATUS FIRST_CHANGE# FIRST_TIME
---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- ----------
1 1 0 1048576 1 YES UNUSED 0
2 1 1 1048576 1 NO CURRENT 1.3115E+13 31-7? -14
3 1 0 1048576 1 YES UNUSED 0
清除 1 和3号日志:
SQL> alter database clear unarchived logfile group 3;
数据库已更改。
SQL> alter database clear unarchived logfile group 1;
数据库已更改。
SQL> recover database until cancel;
ORA-00279: 更改 13114573465651 (在 07/03/2014 16:40:00 生成) 对于线程 1 是必需的
ORA-00289: 建议: E:\ORACLE\ORA81\RDBMS\ARC07253.001
ORA-00280: 更改 13114573465651 对于线程 1 是按序列 # 7253 进行的
指定日志: {=suggested | filename | AUTO | CANCEL}
此处输入:auto
ORA-00308: 无法打开存档日志 'E:\ORACLE\ORA81\RDBMS\ARC07253.001'
ORA-27041: 无法打开文件
OSD-04002: 无法打开文件
O/S-Error: (OS 2) 系统找不到指定的文件。
ORA-01547: 警告: RECOVER 成功但 OPEN RESETLOGS 将出现如下错误
ORA-01152: 文件 1 没有从完备的旧备份中恢复
ORA-01110: 数据文件 1: 'E:\ORACLE\ORADATA\ORCL\SYSTEM01.DBF'
SQL> recover database until cancel;
ORA-00279: 更改 13114573465651 (在 07/03/2014 16:40:00 生成) 对于线程 1 是必需的
ORA-00289: 建议: E:\ORACLE\ORA81\RDBMS\ARC07253.001
ORA-00280: 更改 13114573465651 对于线程 1 是按序列 # 7253 进行的
指定日志: {=suggested | filename | AUTO | CANCEL}
此处输入:cancel
ORA-01547: 警告: RECOVER 成功但 OPEN RESETLOGS 将出现如下错误
ORA-01152: 文件 1 没有从完备的旧备份中恢复
ORA-01110: 数据文件 1: 'E:\ORACLE\ORADATA\ORCL\SYSTEM01.DBF'
ORA-01112: 未启动媒体恢复
SQL> alter database open resetlogs;
alter database open resetlogs
*
ERROR 位于第 1 行:
ORA-01152: 文件 1 没有从完备的旧备份中恢复
ORA-01110: 数据文件 1: 'E:\ORACLE\ORADATA\ORCL\SYSTEM01.DBF'
SQL> shutdown immediate;
ORA-01109: 数据库未打开
已经卸载数据库。
ORACLE 例程已经关闭。
增加隐含参数到INIT.ORA文件中:
_allow_resetlogs_corrupton = true
_corrupted_rollback_segments = (rbs0,rbs1,rbs2,rbs3,rbs3,rbs4,rbs5,rbs6)
重启数据库:
SQL> startup mount;
ORACLE 例程已经启动。
Total System Global Area 237856796 bytes
Fixed Size 75804 bytes
Variable Size 80416768 bytes
Database Buffers 157286400 bytes
Redo Buffers 77824 bytes
数据库装载完毕。
SQL> alter database open;
alter database open
*
ERROR 位于第 1 行:
ORA-01589: ??????????? RESETLOGS ? NORESETLOGS ??
ORA-1589要打开数据库则必须使用 RESETLOGS 或 NORESETLOGS 选项
SQL> alter database open reserlogs;
alter database open reserlogs
*
ERROR 位于第 1 行:
ORA-02288: ??? OPEN ??
SQL> alter database open resetlogs;
alter database open resetlogs
*
ERROR 位于第 1 行:
ORA-00604: ?? SQL ? 1 ????
ORA-01555: ????: ???? ???? "" ??
SQL> shutdown immediate;
ORA-01109: ??????
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup mount;
ORACLE 例程已经启动。
Total System Global Area 237856796 bytes
Fixed Size 75804 bytes
Variable Size 80416768 bytes
Database Buffers 157286400 bytes
Redo Buffers 77824 bytes
数据库装载完毕。
SQL> alter database open resetlogs;
alter database open resetlogs
*
ERROR 位于第 1 行:
ORA-01139: RESETLOGS ???????????????
SQL> alter database open;
alter database open
*
ERROR 位于第 1 行:
ORA-00600: ??????????: [3668], [1], [2], [12057], [12057], [4], [], []
把ORCL服务重新启动几次,再次运行命令:
SQL> recover database;
完成介质恢复。
SQL> alter database open;
数据库已更改。
查看ALERT文件,终于打开数据库了:
Thu Jul 31 09:58:55 2014
RESETLOGS is being done without consistancy checks. This may result
in a corrupted database. The database should be recreated.
RESETLOGS after incomplete recovery UNTIL CHANGE 13114573465651
Thu Jul 31 09:58:56 2014
Thread 1 opened at log sequence 1
Current log# 2 seq# 1 mem# 0: E:\ORACLE\ORADATA\ORCL\REDO02.LOG
Successful open of redo thread 1.
Thu Jul 31 09:58:56 2014
SMON: enabling cache recovery
SMON: disabling cache recovery
Thu Jul 31 09:58:56 2014
ORA-604 signalled during: alter database open resetlogs
...
Thu Jul 31 10:01:00 2014
Shutting down instance (immediate)
SQL> conn test/test;
已连接。
SQL>
数据库能够打开后,赶紧备份数据,但是发现应用进去后,没有任何操作菜单显示出来,联系应用的人,跟踪下应用,并把相应的错误信息显示出来,才发现是TEMP无法使用回滚段的错误。
将上述两个隐含参数去掉,重新启动数据库,用DBA STUDIO,忘记TEMP表空间的数据文件是否脱机了。重建了一个类似的临时表空间TEMP2,摘除原有的TEMP 表空间。但是select * from v$tempfile;显示未选定行,在DBA STUDIO中可正常显示相应的数据文件。
我开始给TEMP 表空间新增了一个数据文件TEMP02.DBF,然后尝试去摘除原来的数据文件TEMP01。DBF,出错!
接着发现现有回滚段RBS0,RBS1,RBS2,RBS3,RBS4,RBS5,RBS6都是脱机状态,于是重建RBS10,RBS11,RBS12,RBS13,RBS14,RBS15,RBS16新的回滚段,按照系统原有的RBS0等回滚段的参数,512 512 4096:
CREATE ROLLBACK SEGMENT "RBS10"
TABLESPACE "RBS"
STORAGE ( INITIAL 512K NEXT 512K MAXEXTENTS 4096);
ALTER ROLLBACK SEGMENT "RBS10" ONLINE;
CREATE ROLLBACK SEGMENT "RBS11"
TABLESPACE "RBS"
STORAGE ( INITIAL 512K NEXT 512K MAXEXTENTS 4096);
ALTER ROLLBACK SEGMENT "RBS11" ONLINE;
CREATE ROLLBACK SEGMENT "RBS12"
TABLESPACE "RBS"
STORAGE ( INITIAL 512K NEXT 512K MAXEXTENTS 4096);
ALTER ROLLBACK SEGMENT "RBS12" ONLINE;
CREATE ROLLBACK SEGMENT "RBS13"
TABLESPACE "RBS"
STORAGE ( INITIAL 512K NEXT 512K MAXEXTENTS 4096);
ALTER ROLLBACK SEGMENT "RBS13" ONLINE;
CREATE ROLLBACK SEGMENT "RBS14"
TABLESPACE "RBS"
STORAGE ( INITIAL 512K NEXT 512K MAXEXTENTS 4096);
ALTER ROLLBACK SEGMENT "RBS14" ONLINE;
CREATE ROLLBACK SEGMENT "RBS15"
TABLESPACE "RBS"
STORAGE ( INITIAL 512K NEXT 512K MAXEXTENTS 4096);
ALTER ROLLBACK SEGMENT "RBS15" ONLINE;
CREATE ROLLBACK SEGMENT "RBS16"
TABLESPACE "RBS"
STORAGE ( INITIAL 512K NEXT 512K MAXEXTENTS 4096);
然后摘除RBS0,RBS1,RBS2,RBS3,RBS4,RBS5,RBS6等回滚段(已经是脱机状态),相应命令忘记了,我用的DBA STUTIO:
--ALTER ROLLBACK SEGMENT "RBS0" OFFLINE;
drop rollback segment "RBS0";
drop rollback segment "RBS1";
drop rollback segment "RBS2";
drop rollback segment "RBS3";
drop rollback segment "RBS4";
drop rollback segment "RBS5";
drop rollback segment "RBS6";
修改init.ora文件,将参数rollback_Segments=( RBS10,RBS11,RBS12,RBS13,RBS14,RBS15,RBS16),原来为rollback_Segments=( RBS0,RBS1,RBS2,RBS3,RBS4,RBS5,RBS6)
重新关闭数据库,打开数据库,O了。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/7177735/viewspace-1253657/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/7177735/viewspace-1253657/