热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

ORA00704ORA00604ORA01555处理过程

10GRAC,CRS被意外删除,数据库被crash了。通过将RAC更改为单机直

下面的案例来至于一位兄弟的环境,10G RAC,CRS被意外删除,数据库被crash了。通过将RAC更改为单机直接启动,报下面的错误

Errors in file /oracle/10.2/admin/gzora/udump/gzora_ora_8355.trc:
ORA-00704: bootstrap process failure
ORA-00704: bootstrap process failure
ORA-00604: error occurred at recursive SQL level 1
ORA-01555: snapshot too old: rollback segment number 3 with name "_SYSSMU3$" too small
Error 704 happened during db open, shutting down database
USER: terminating instance due to error 704
Instance terminated by USER, pid = 8355
ORA-1092 signalled during: alter database open…


专家解答


1,配置10046、errorstack

oradebug setmypid
oradebug event 10046 trace name context forever,level 12;
oradebug event 1555 trace name errorstack level 2;
recover database using backup controlfile until cancel;
alter database open resetlogs;

查看报错的详细信息

1.1 查看block信息

d:\>grep -E "^Block he|^0x0" gzora_ora_8897.trc
Block header dump:  0x0040006a
0x01   0x0000.046.00000029  0x00400011.0037.1d  –U-    1  fsc 0x0000.02a1d124
这里发现ITL 01的状态是U,并且锁定1行的记录
查看块的dump信息,以0x0040006a就可以搜索到
BH (0x160f96ad8) file#: 1 rdba: 0x0040006a (1/106) class: 1 ba: 0x1603d8000
  set: 10 blksize: 8192 bsi: 0 set-flg: 2 pwbcnt: 0
  dbwrid: 0 obj: 15 objn: 15 tsn: 0 afn: 1
  hash: [187c9e220,187c9e220] lru: [160f96c68,1868cb9f8]
  ckptq: [NULL] fileq: [NULL] objq: [183facdb0,183facdb0]
  st: XCURRENT md: NULL tch: 1
  flags:
  LRBA: [0x0.0.0] HSCN: [0xffff.ffffffff] HSUB: [65535]
  buffer tsn: 0 rdba: 0x0040006a (1/106)
  scn: 0x0000.02a1d124 seq: 0x01 flg: 0x06 tail: 0xd1240601
  frmt: 0x02 chkval: 0x21bd type: 0x06=trans data
 
Block header dump:  0x0040006a
 Object id on Block? Y
 seg/obj: 0xf  csc: 0x00.2a1d123  itc: 1  flg: O  typ: 1 – DATA
     fsl: 0  fnx: 0x0 ver: 0x01
 
 Itl           Xid                  Uba         Flag  Lck        Scn/Fsc
0x01   0x0000.046.00000029  0x00400011.0037.1d  –U-    1  fsc 0x0000.02a1d124
这里可以看到块的对象,csc,块号等信息
下面查看一下锁定行的记录
tab 0, row 10, @0x143d
tl: 60 fb: –H-FL– lb: 0x1  cc: 17
col  0: [ 2]  c1 0b
col  1: [10]  5f 53 59 53 53 4d 55 31 30 24
col  2: [ 2]  c1 02
col  3: [ 2]  c1 03
col  4: [ 3]  c2 02 36
col  5: [ 5]  c4 2d 10 5d 19
col  6: [ 1]  80
col  7: [ 4]  c3 03 09 0c
col  8: [ 4]  c3 02 1a 04
col  9: [ 1]  80
col 10: [ 2]  c1 04
col 11: [ 2]  c1 02
col 12: *NULL*
col 13: *NULL*
col 14: *NULL*
col 15: *NULL*
col 16: [ 2]  c1 02
tab 0, row 11, @0x1831

1.2 查看SQL与会话信息

查看当前的信息信息,以CURRENT SESSION搜索
===================================================
CURRENT SESSION’S INSTANTIATION STATE
————————————-
current session=0x1888972b8
KGI STATE DUMP for session=0x1888972b8
KGI STATE DUMP DONE for session=0x1888972b8
******************** Session Cursor Dump **********************
Current cursor: 5, pgadep: 1
Open cursors(pls, sys, hwm, max): 5(0, 4, 64, 300)
 NULL 0 SYNTAX 0 PARSE 3 BOUND 1 FETCH 1 ROW 0
Cached frame pages(total, free):
 4k(4, 2), 8k(0, 0), 16k(0, 0), 32k(0, 0)
  pgactx: 0x185fffd20 ctxcbk: (nil) ctxqbc: (nil) ctxrws: 0x185ffd940
Explain plan:
 
 
Dumping stream from 0 to 78
———————————-
 
0000: 143 216 224 255 133   1   0   0   0 143 119   1   0  38  40   0   0   3   1   2    ……….w..&(…..
0020:  18   3   2  14   0   0   0  54   7   3   5  12   8 106 108 109 224 152 228 164    …….6…..jlm….
0040: 107 111   3  52   3   3   2   3   1   2   4  34   0   0 143 120 229 255 133   1    ko.4……."…x….
0060:   0   0   0 134 119   2  23  13   0   0   3   1   5  36   3   2   1 142            ….w……..$….
 
============
Plan Table
============
———————————————–+———————————–+
| Id  | Operation                    | Name    | Rows  | Bytes | Cost  | Time      |
———————————————–+———————————–+
| 0   | SELECT STATEMENT             |         |       |       |       |           |
| 1   |  TABLE ACCESS BY INDEX ROWID | OBJ$    |       |       |       |           |
| 2   |   INDEX UNIQUE SCAN          | I_OBJ1  |       |       |       |           |
———————————————–+———————————–+
 
Content of other_xml column
===========================
  db_version     : 10.2.0.4
  parse_schema   : SYS
  plan_hash      : 3317232865
  Outline Data:
  /*+
    BEGIN_OUTLINE_DATA
      IGNORE_OPTIM_EMBEDDED_HINTS
      OPTIMIZER_FEATURES_ENABLE(‘10.2.0.4’)
      RBO_OUTLINE
      OUTLINE_LEAF(@"SEL$1")
      INDEX_RS_ASC(@"SEL$1" "OBJ$"@"SEL$1" ("OBJ$"."OBJ#"))
    END_OUTLINE_DATA
  */

以PARSING IN CURSOR #5来搜索

以Cursor#5来搜索

—————————————-
Cursor#5(0x2aaaac891988) state=FETCH curiob=0x2aaaac8a8408
 curflg=7 fl2=0 par=0x2aaaac8917e8 ses=0x1888972b8
 sqltxt(0x186f42730)=select ctime, mtime, stime from obj$ where obj# = :1这里可以看到SQL的内容
  hash=fa0bd3f60d6ee4f2495f9af8199b75b9
  parent=0x186f42378 maxchild=01 plk=0x183f7a478 ppn=n
cursor instantiation=0x2aaaac8a8408 used=1411388199
 child#0(0x186f41800) pcs=0x186f41f88
  clk=0x183f7ae88 ci=0x186f41448 pn=0x1823bd088 ctx=0x185fffd20
 kgsccflg=0 llk[0x2aaaac8a8410,0x2aaaac8a8410] idx=0
 xscflg=e01414f6 fl2=45000401 fl3=4022210c fl4=100
 Bind bytecodes
  Opcode = 1   Unoptimized
  Offsi = 48, Offsi = 0
kkscoacd
 Bind#0
  oacdty=02 mxl=22(22) mxlc=00 mal=00 scl=00 pre=00
  oacflg=08 fl2=0001 frm=00 csi=00 siz=24 off=0
  kxsbbbfp=2aaaac8a7fc0  bln=22  avl=02  flg=05
  value=20这里可以看到绑定变量的值
 Frames pfr 0x2aaaac8a8388 siz=2920 efr 0x2aaaac8a80a8 siz=2720
 Cursor frame dump
  enxt: 4.0×00000010  enxt: 3.0x000000c0  enxt: 2.0×00000020  enxt: 1.0x000009c0
  pnxt: 2.0×00000008  pnxt: 1.0x000000c0
 kxscphp  0x2aaaac89a1a8 siz=1992 inu=1160 nps=1112
 kxscdfhp 0x2aaaac8a0808 siz=984 inu=88 nps=0
 kxscbhp  0x2aaaac8a0628 siz=984 inu=168 nps=48
 kxscwhp  0x2aaaac8a0718 siz=4056 inu=360 nps=0

其实到这里我们还没有用到10046的数据,下面再看看10046的trace文件

=====================
PARSING IN CURSOR #5 len=52 dep=1 uid=0 oct=3 lid=0 tim=1378308789118580 hv=429618617 ad=’86f42730′
select ctime, mtime, stime from obj$ where obj# = :1
END OF STMT
PARSE #5:c=0,e=282,p=0,cr=0,cu=0,mis=1,r=0,dep=1,og=4,tim=1378308789118577
BINDS #5:
kkscoacd
 Bind#0
  oacdty=02 mxl=22(22) mxlc=00 mal=00 scl=00 pre=00
  oacflg=08 fl2=0001 frm=00 csi=00 siz=24 off=0
  kxsbbbfp=2aaaac8a7fc0  bln=22  avl=02  flg=05
  value=20
EXEC #5:c=999,e=477,p=0,cr=0,cu=0,mis=1,r=0,dep=1,og=4,tim=1378308789119125
WAIT #5: nam=’db file sequential read’ ela= 1826 file#=1 block#=218 blocks=1 obj#=-1 tim=1378308789121036
WAIT #5: nam=’db file sequential read’ ela= 3930 file#=1 block#=219 blocks=1 obj#=-1 tim=1378308789125031
WAIT #5: nam=’db file sequential read’ ela= 4146 file#=1 block#=122 blocks=1 obj#=-1 tim=1378308789129225
=====================
PARSING IN CURSOR #6 len=142 dep=2 uid=0 oct=3 lid=0 tim=1378308789129622 hv=361892850 ad=’85ffc6d8′
select /*+ rule */ name,file#,block#,status$,user#,undosqn,xactsqn,scnbas,scnwrp,DECODE(inst#,0,NULL,inst#),ts#,spare1 from undo$ where us#=:1
END OF STMT
PARSE #6:c=1000,e=339,p=0,cr=0,cu=0,mis=1,r=0,dep=2,og=3,tim=1378308789129620
BINDS #6:
kkscoacd
 Bind#0
  oacdty=02 mxl=22(22) mxlc=00 mal=00 scl=00 pre=00
  oacflg=08 fl2=0001 frm=00 csi=00 siz=24 off=0
  kxsbbbfp=2aaaacb2dbd0  bln=22  avl=02  flg=05
  value=8
EXEC #6:c=0,e=505,p=0,cr=0,cu=0,mis=1,r=0,dep=2,og=3,tim=1378308789130223
WAIT #6: nam=’db file sequential read’ ela= 3262 file#=1 block#=202 blocks=1 obj#=-1 tim=1378308789133526
WAIT #6: nam=’db file sequential read’ ela= 1110 file#=1 block#=106 blocks=1 obj#=-1 tim=1378308789134677
FETCH #6:c=0,e=4472,p=2,cr=2,cu=0,mis=0,r=1,dep=2,og=3,tim=1378308789134719
STAT #6 id=1 cnt=1 pid=0 pos=1 obj=15 op=’TABLE ACCESS BY INDEX ROWID UNDO$ (cr=2 pr=2 pw=0 time=4466 us)’
STAT #6 id=2 cnt=1 pid=1 pos=1 obj=34 op=’INDEX UNIQUE SCAN I_UNDO1 (cr=1 pr=1 pw=0 time=3304 us)’
WAIT #5: nam=’db file sequential read’ ela= 2661 file#=2 block#=1152 blocks=1 obj#=-1 tim=1378308789137472
这里可以看到在出故障的SQL下面还有很多SQL语法正常执行了,所以10046最后一条语句并不是报错的SQL语句

2 故障原因

通过上面的trace信息,大概知道原因,在访问obj$表的时,需要访问undo$表,undo$表中发现一条itl为U,在做延迟块清处过程中,在UNDO段中没有找到此ITL的信息,触发ORA-01555的报错。

3,故障处理

SQL> select checkpoint_change# from v$datafile_header;
 
CHECKPOINT_CHANGE#
——————
    44279281
    44279281
    44279281
    44279281
    44279281
SQL> recover database using backup controlfile until cancel;
ORA-00279: change 44279281 generated at 09/22/2014 20:27:54 needed for thread 1
ORA-00289: suggestion : +ORADATA
ORA-00280: change 44279281 for thread 1 is in sequence #1
 
 
Specify log: {=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: ‘+ORADATA/gzora/datafile/system.258.757644911’
 
 
ORA-01112: media recovery not started
 
这里手动增加SCN的值就可以。
SQL> oradebug setmypid
Statement processed.
SQL> oradebug dumpvar sga kcsgscn_
kcslf kcsgscn_ [0600122B0, 0600122E0) = 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 60011F90 00000000
SQL> select to_char(54279281,’xxxxxxxxxxxxxxxx’) from dual;
 
TO_CHAR(54279281,
—————–
    33c3c71
 
SQL> oradebug poke 0x0600122B0 4 0x33c3c71;
BEFORE: [0600122B0, 0600122B4) = 00000000
AFTER: [0600122B0, 0600122B4) = 033C3C71
SQL> alter database open resetlogs;
 
Database altered.
 
 
SQL> create undo tablespace undotbs2 datafile ‘+oradata’ size 10g;
 
Tablespace created.
 
切换到新的UNDO表空间

远程的工作完成,剩下的一些收尾的工作由现成工程师完成。


推荐阅读
  • Docker 环境下 MySQL 双主同步配置指南
    本文介绍了如何在 Docker 环境中配置 MySQL 的双主同步,包括目录结构的创建、配置文件的编写、容器的创建与设置以及最终的验证步骤。 ... [详细]
  • 一个建表一个执行crud操作建表代码importandroid.content.Context;importandroid.database.sqlite.SQLiteDat ... [详细]
  • 在 CentOS 7 环境中使用 MySQL 5.6 镜像启动数据库时遇到权限问题,本文将详细探讨并提供解决方案。 ... [详细]
  • 如果应用程序经常播放密集、急促而又短暂的音效(如游戏音效)那么使用MediaPlayer显得有些不太适合了。因为MediaPlayer存在如下缺点:1)延时时间较长,且资源占用率高 ... [详细]
  • DAO(Data Access Object)模式是一种用于抽象和封装所有对数据库或其他持久化机制访问的方法,它通过提供一个统一的接口来隐藏底层数据访问的复杂性。 ... [详细]
  • 在Linux系统中避免安装MySQL的简易指南
    在Linux系统中避免安装MySQL的简易指南 ... [详细]
  • 在使用 Cacti 进行监控时,发现已运行的转码机未产生流量,导致 Cacti 监控界面显示该转码机处于宕机状态。进一步检查 Cacti 日志,发现数据库中存在 SQL 查询失败的问题,错误代码为 145。此问题可能是由于数据库表损坏或索引失效所致,建议对相关表进行修复操作以恢复监控功能。 ... [详细]
  • 基于Net Core 3.0与Web API的前后端分离开发:Vue.js在前端的应用
    本文介绍了如何使用Net Core 3.0和Web API进行前后端分离开发,并重点探讨了Vue.js在前端的应用。后端采用MySQL数据库和EF Core框架进行数据操作,开发环境为Windows 10和Visual Studio 2019,MySQL服务器版本为8.0.16。文章详细描述了API项目的创建过程、启动步骤以及必要的插件安装,为开发者提供了一套完整的开发指南。 ... [详细]
  • SQLite数据库CRUD操作实例分析与应用
    本文通过分析和实例演示了SQLite数据库中的CRUD(创建、读取、更新和删除)操作,详细介绍了如何在Java环境中使用Person实体类进行数据库操作。文章首先阐述了SQLite数据库的基本概念及其在移动应用开发中的重要性,然后通过具体的代码示例,逐步展示了如何实现对Person实体类的增删改查功能。此外,还讨论了常见错误及其解决方法,为开发者提供了实用的参考和指导。 ... [详细]
  • 揭秘腾讯云CynosDB计算层设计优化背后的不为人知的故事与技术细节
    揭秘腾讯云CynosDB计算层设计优化背后的不为人知的故事与技术细节 ... [详细]
  • 如何使用R语言高效连接并操作MySQL数据库
    如何使用R语言高效连接并操作MySQL数据库 ... [详细]
  • 本文详细介绍了MySQL数据库服务器(mysqld)和客户端(mysql)的区别,并提供了多种启动和关闭MySQL服务器的方法。通过这些方法,您可以更好地管理和维护MySQL数据库。 ... [详细]
  • 本文介绍如何使用 Python 的 DOM 和 SAX 方法解析 XML 文件,并通过示例展示了如何动态创建数据库表和处理大量数据的实时插入。 ... [详细]
  • 使用种子数据在Asp.NET Core 3.0 Web API迁移过程中写入数据库的详细步骤
    本文详细阐述了如何在Asp.NET Core 3.0 Web API的迁移过程中利用种子数据将信息写入数据库的具体步骤。对于开发人员而言,掌握这一技术能够显著提高数据初始化的效率和准确性。文章不仅提供了详细的代码示例,还深入解析了每个步骤背后的原理,帮助读者更好地理解和应用这一方法。 ... [详细]
  • 在Linux环境下进行C++代码调试是开发过程中不可或缺的一环。本文将详细介绍如何利用GDB等调试工具,结合实际案例,帮助初学者掌握高效的调试技巧,提升编程能力。内容涵盖环境配置、断点设置、变量查看及内存分析等方面,旨在为读者提供全面的调试指南。 ... [详细]
author-avatar
KING逊咖
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有