123
返回列表 发新帖
楼主: legendofsh

redo文件损坏导致实例无法OPEN

[复制链接]
论坛徽章:
0
21#
 楼主| 发表于 2008-4-2 13:04 | 只看该作者
感谢楼上几位老师的指点,现在问题虽然仍未能解决完,但是毕竟前进了一大步,ORACLE对我来说很陌生,所以出现问题之后病急乱投医,仗着有imp导出的数据备份,在小型机上一通乱改,才导致了如此严重问题。

使用道具 举报

回复
论坛徽章:
33
ITPUB元老
日期:2009-03-11 15:35:03咸鸭蛋
日期:2011-11-06 22:20:25紫蛋头
日期:2011-12-27 22:15:052012新春纪念徽章
日期:2012-01-04 11:49:542014年新春福章
日期:2014-02-18 16:41:11马上有车
日期:2014-02-18 16:41:11红宝石
日期:2014-06-03 13:13:19
22#
发表于 2008-4-2 13:25 | 只看该作者
alert文件呢?贴出来看看

使用道具 举报

回复
招聘 : Java研发
论坛徽章:
9
授权会员
日期:2005-12-23 16:28:18会员2007贡献徽章
日期:2007-09-26 18:42:10ITPUB新首页上线纪念徽章
日期:2007-10-20 08:38:44铁扇公主
日期:2007-10-26 16:08:47生肖徽章2007版:鸡
日期:2008-01-02 17:35:532009新春纪念徽章
日期:2009-01-04 14:52:282009日食纪念
日期:2009-07-22 09:30:00祖国60周年纪念徽章
日期:2009-10-09 08:28:00ITPUB十周年纪念徽章
日期:2011-11-01 16:20:28
23#
发表于 2008-4-2 14:01 | 只看该作者
当前日志损坏的案例
设置两个隐含参数:
_ALLOW_RESETLOGS_CORRUPTION = TRUE
_CORRUPTED_ROLLBACK_SEGMENTS=(_SYSSMU1$, _SYSSMU2$, _SYSSMU3$, _SYSSMU4$, _SYSSMU5$, _SYSSMU6$, _SYSSMU7$, _SYSSMU8$, _SYSSMU9$, _SYSSMU10$)
因为redo损坏的时候,undo数据也大都不一致了。

使用隐含参数启动数据库:
SQL> create pfile=''''/home/oracle/pfile.tmp'''' from spfile;

File created.

SQL>
SQL> shutdown immediate;
ORA-01109: database not open


Database dismounted.
ORACLE instance shut down.
SQL>


[oracle@ts01 oracle]$ tail pfile.tmp
*.sort_area_size=524288
*.star_transformation_enabled=''''FALSE''''
*.timed_statistics=TRUE
*.undo_management=''''AUTO''''
*.undo_retention=10800
*.undo_tablespace=''''UNDOTBS2''''
*.user_dump_dest=''''/oracle/admin/TSMISC02/udump''''

_ALLOW_RESETLOGS_CORRUPTION = TRUE

[oracle@ts01 oracle]$

这个参数的解释:
SQL> select KSPPDESC from X$KSPPI where ksppinm=''''_allow_resetlogs_corruption'''';

KSPPDESC
----------------------------------------------------------------
allow resetlogs even if it will cause corruption

SQL>





[oracle@ts01 oracle]$ sqlplus ''''/ as sysdba''''

SQL*Plus: Release 9.2.0.4.0 - Production on Mon Nov 21 15:57:21 2005

Copyright (c) 1982, 2002, Oracle Corporation.  All rights reserved.

Connected to an idle instance.

SQL> startup mount pfile=pfile.tmp
ORACLE instance started.

Total System Global Area  236000356 bytes
Fixed Size                   451684 bytes
Variable Size             201326592 bytes
Database Buffers           33554432 bytes
Redo Buffers                 667648 bytes
Database mounted.
SQL>
SQL> alter database open resetlogs;
alter database open resetlogs
*
ERROR at line 1:
ORA-01139: RESETLOGS option only valid after an incomplete database recovery


SQL> select status from v$instance;

STATUS
------------
MOUNTED

SQL> alter database open;
alter database open
*
ERROR at line 1:
ORA-00316: log 1 of thread 1, type 0 in header is not log file
ORA-00312: online log 1 thread 1: ''''/oracle/oradata/TSMISC02/redo01.log''''


SQL>


SQL> recover database using backup controlfile until cancel;
ORA-00279: change 658443 generated at 11/15/2005 08:52:17 needed for thread 1
ORA-00289: suggestion : /oracle/oradata/TSMISC02/archive/1_62.dbf
ORA-00280: change 658443 for thread 1 is in sequence #62


Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
cancel
ORA-01547: warning: RECOVER succeeded but OPEN RESETLOGS would get error below
ORA-01194: file 1 needs more recovery to be consistent
ORA-01110: data file 1: ''''/oracle/oradata/TSMISC02/system01.dbf''''


ORA-01112: media recovery not started


SQL> alter database open resetlogs;
。。。
很长时间,就好像hang住了
。。。
有过了一会:
SQL> alter database open resetlogs;

alter database open resetlogs
*
ERROR at line 1:
ORA-03113: end-of-file on communication channel


SQL>
SQL> select status from v$instance;
select status from v$instance
*
ERROR at line 1:
ORA-03114: not connected to ORACLE


SQL> conn / as sysdba
Connected to an idle instance.
SQL>




检查日志,发现:
[oracle@ts01 bdump]$ tail alert_TSMISC02.log
Errors in file /oracle/admin/TSMISC02/udump/tsmisc02_ora_10762.trc:
ORA-00600: internal error code, arguments: [2662], [0], [658448], [0], [664313], [12582921], [], []
Mon Nov 21 16:11:44 2005
Errors in file /oracle/admin/TSMISC02/udump/tsmisc02_ora_10762.trc:
ORA-00600: internal error code, arguments: [2662], [0], [658448], [0], [664313], [12582921], [], []
Mon Nov 21 16:11:44 2005
Error 600 happened during db open, shutting down database
USER: terminating instance due to error 600
Instance terminated by USER, pid = 10762
ORA-1092 signalled during: alter database open resetlogs...
[oracle@ts01 bdump]$


设置event adjust_scn:
alter session set events ''''10015 trace name adjust_scn level 1'''';

SQL> conn / as sysdba
Connected to an idle instance.
SQL> startup mount pfile=pfile.tmp                                 
ORACLE instance started.

Total System Global Area  236000356 bytes
Fixed Size                   451684 bytes
Variable Size             201326592 bytes
Database Buffers           33554432 bytes
Redo Buffers                 667648 bytes
Database mounted.
SQL>
SQL> alter session set events ''''10015 trace name adjust_scn level 1'''';

Session altered.

SQL>
SQL> recover database using backup controlfile until cancel;
ORA-00279: change 658445 generated at 11/21/2005 16:11:43 needed for thread 1
ORA-00289: suggestion : /oracle/oradata/TSMISC02/archive/1_1.dbf
ORA-00280: change 658445 for thread 1 is in sequence #1


Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
cancel
ORA-01547: warning: RECOVER succeeded but OPEN RESETLOGS would get error below
ORA-01194: file 1 needs more recovery to be consistent
ORA-01110: data file 1: ''''/oracle/oradata/TSMISC02/system01.dbf''''


ORA-01112: media recovery not started


SQL> alter database open resetlogs;
alter database open resetlogs
*
ERROR at line 1:
ORA-01092: ORACLE instance terminated. Disconnection forced


SQL>
检查日志:
[oracle@ts01 bdump]$ tail alert_TSMISC02.log
Errors in file /oracle/admin/TSMISC02/udump/tsmisc02_ora_10762.trc:
ORA-00600: internal error code, arguments: [2662], [0], [658448], [0], [664313], [12582921], [], []
Mon Nov 21 16:11:44 2005
Errors in file /oracle/admin/TSMISC02/udump/tsmisc02_ora_10762.trc:
ORA-00600: internal error code, arguments: [2662], [0], [658448], [0], [664313], [12582921], [], []
Mon Nov 21 16:11:44 2005
Error 600 happened during db open, shutting down database
USER: terminating instance due to error 600
Instance terminated by USER, pid = 10762
ORA-1092 signalled during: alter database open resetlogs...

[oracle@ts01 bdump]$ tail alert_TSMISC02.log
Recovery of Online Redo Log: Thread 1 Group 1 Seq 1 Reading mem 0
  Mem# 0 errs 0: /oracle/oradata/TSMISC02/redo01.log
Mon Nov 21 16:21:41 2005
Errors in file /oracle/admin/TSMISC02/udump/tsmisc02_ora_10795.trc:
ORA-00607: Internal error occurred while making a change to a data block
ORA-00600: internal error code, arguments: [4194], [91], [69], [], [], [], [], []
Error 607 happened during db open, shutting down database
USER: terminating instance due to error 607
Instance terminated by USER, pid = 10795
ORA-1092 signalled during: alter database open resetlogs...
[oracle@ts01 bdump]$ tail -f alert_TSMISC02.log
Recovery of Online Redo Log: Thread 1 Group 1 Seq 1 Reading mem 0
  Mem# 0 errs 0: /oracle/oradata/TSMISC02/redo01.log
Mon Nov 21 16:21:41 2005
Errors in file /oracle/admin/TSMISC02/udump/tsmisc02_ora_10795.trc:
ORA-00607: Internal error occurred while making a change to a data block
ORA-00600: internal error code, arguments: [4194], [91], [69], [], [], [], [], []
Error 607 happened during db open, shutting down database
USER: terminating instance due to error 607
Instance terminated by USER, pid = 10795
ORA-1092 signalled during: alter database open resetlogs...

[oracle@ts01 bdump]$


设置隐含参数:
将undo改变成手工管理的,然后重启数据库,

SQL> show parameter undo

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
undo_management                      string      MANUAL
undo_retention                       integer     10800
undo_suppress_errors                 boolean     FALSE
undo_tablespace                      string      UNDOTBS2
SQL>

[oracle@ts01 oracle]$ tail pfile.tmp
*.undo_management=''''AUTO''''
*.undo_retention=10800
*.undo_tablespace=''''UNDOTBS2''''
*.user_dump_dest=''''/oracle/admin/TSMISC02/udump''''

*._ALLOW_RESETLOGS_CORRUPTION = TRUE
*.undo_management=''''manual''''

[oracle@ts01 oracle]$
[oracle@ts01 oracle]$ exit
exit
SQL> startup pfile=pfile.tmp
ORACLE instance started.

Total System Global Area  236000356 bytes
Fixed Size                   451684 bytes
Variable Size             201326592 bytes
Database Buffers           33554432 bytes
Redo Buffers                 667648 bytes
Database mounted.
Database opened.
SQL>
SQL> conn lunar/lunar
Connected.
SQL> select * from tab;

TNAME                          TABTYPE  CLUSTERID
------------------------------ ------- ----------
LUNARTEST                      TABLE

SQL>

总结:

将undo改变成手工管理的,
然后设置隐含参数 _ALLOW_RESETLOGS_CORRUPTION = TRUE 和 _corrupted_rollback_segments ,因为redo损坏的时候,undo数据也大都不一致
了。
2,open resetlogs之前,先使用recover database using backup controlfile until cancel;
如果此时又遇到600错误,就使用ADJUST_SCN事件来调整当前的SCN,如果SCN相差不多,可以通过多次重起数据库解决。如果scn相差比较多,

可以使用10015 event:
alter session set events ''''10015 trace name adjust_scn level 1'''';
如果SCN相差比较多,可以设置level 2,。。。level 10等 (level 1是每次打开时将将scn推进1百万)

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表