ORA-600错误分析(ora00921错误原因)
mhr18 2024-09-20 20:54 24 浏览 0 评论
作者简介:种英明,ORACLE数据库工程师,就职于北京海天起点南京分公司,拥有多年数据库开发,管理,维护经验,获有ORACLE OCP和MySQL OCP证书,擅长ORACLE安装升级,故障处理以及sql优化,了解SQL Server,Sybase等多种数据库技术。
一 概述
概念
ORA-600 错误是一般oracle程序异常的内部错误,它表明一个进程遇到了一个低级的、意外的情况。Ora-600错误发生的时候,后面的方括号内会有一个参数列表。格式:ORA 600 “internal error code, arguments: [%s], [%s],[%s], [%s], [%s]”。
第一个参数是内部消息号或字符串,这个参数和数据库版本号对找到Ora-600的根本原因和潜在影响至关重要。剩余的参数是用来提供进一步的信息。
第一个参数可以帮助缩小问题范围。可以认为是由Oracle的源代码很多地方引用的功能。ora-600trace文件里有更详细的调用堆栈信息,可以帮助我们找到一个解决方案。
目标
ORA-600 错误对数据库管理员来说并不陌生,总会遇到过那么几次。一旦遇到ORA-600错误不要简单的认为就是oracle软件 bug导致,其实这种错误,不仅种类很多而且有很多原因导致的,包括oracle bug,断电,内存错误,程序异常,讹传等,需要根据错误种类具体去分析。
本文通过一个ORA-600多种错误的故障案例,分析这种错误产生的原因,以及解决方法。为以后数据库管理人员提供一个借鉴和参考,避免走弯路。
环境
操作系统版本 | Redhat 5.x |
Oracle版本 | Oracle 11.2.0.3 |
主机IP | 10.1.1.40(非真实) |
ORACLE_SID | test(非真实) |
数据文件存放方式 | Veritas文件系统 |
归档模式 |
二 案例
1.ora-600 4194
描述:
ORA-00600 [4194] 错误一般是由于重做记录号和最大的回滚记录号不一致导致的,格式:”ORA-600 [4194] [a] [b]”。
第一个参数就是最大的回滚记录号,第二个参数重做记录号。
当然还有很多其他的原因导致ORA-00600 [4194] 错误,比如说smon执行事务恢复,回滚段冲突或者损坏,oracle bug等。
通过查看alert日志,部分内容如下:
Fri Apr0717:13:052017
Errors infile/oracle/app/diag/rdbms/test/test/trace/test_ora_16389.trc(incident=343469):
ORA-00603:ORACLE server session terminated by fatal error
ORA-00600:internal error code,arguments:[4194],[],[],[],[],[],[],[],[],[],[],[]
...
从alert日志来看4194后面的参数都是空的,不是两个记录号不一致的原因,如果需要进一步确定原因,需要查看对应的 trace文件:test_ora_16389.trc,trace部分内容如下:
DDE:Problem Key'ORA 600 [4194]'was flood controlled(0x6)(incident:343446)
ORA-00600:internal error code,arguments:[4194],[],[],[],[],[],[],[],[],[],[],[]
***ktuc_diag_dmp:dump of current change vector
ktudb big redo:cnt:1um:0x1f39d11d0uba:0x00c001d4.da21.04
***ktuc_diag_dmp:dump of block after image inhex
Dump of memory from0x00000001CF510000to0x00000001CF518000
1CF5100000000E20200C001D48855A6D704010000[..........U.....]
……………省略一部分…………………….
Dump of buffer cache at level4fortsn=2rdba=12583380
BH(0x1cffdbf48)file#: 3 rdba: 0x00c001d4 (3/468) class: 36 ba: 0x1cf510000
set:11pool:3bsz:32768bsi:0sflg:2pwc:0,0
dbwrid:0obj:-1objn:0tsn:2afn:3hint:f
hash:[0x1f9fa1260,0x1f9fa1260]lru:[0x1cffdc160,0x1cffdbf00]
obj-flags:object_ckpt_list
ckptq:[0x1cffe2568,0x1f8a32360]fileq:[0x1cffe2578,0x1f8a323c0]objq:[0x1ec8c8b78,0x1c8fd1a18]objaq:[0x1cffe2688,0x1c8fd3b68]
use:[NULL]wait:[NULL]
st:XCURRENT md:NULLfpin:'kcbwh2: kcbchg1'tch:1txn:0x1f50cd960
flags:buffer_dirty mod_started privateblock_written_once
change state:NOT_ACTIVE_YET
change count:1
LRBA:[0x6e34.192b.0]LSCN:[0x0.885ef500]HSCN:[0x0.885ef500]HSUB:[65535]
***ktuc_diag_dmp:dump of redo forrdba0x00c001d4
上面的trc文件里面也没有4194后面详细的参数信息,只有一些数据块后镜像的dump信息,没有其他重要信息。可以判断file#: 3(经过查询,是undo表空间的数据文件)有问题,而且trc文件的xid又比较多,几乎在各个回滚段都存在。
解决方法
由于不适合对单个回滚段进行offlink或者drop,而且数据库现在还可以正常打开,于是通过下面的方法重建undo表空间:
1.创建新的undo表空间
create undo tablespace undotbs2 datafile'/data/数据库名称/undotbs2.dbf'size30g
2.切换UNDO表空间为新的UNDO表空间
alter system set undo_tablespace=undotbs2;
3.删除原来的undo表空间
drop tablespace undotbs1 including contents;
2.ora-600 kdsgrp1
描述
ORA-00600 [kdsgrp1] 错误原因有很多,比如说并行的DML,索引坏块,数据坏块,CR读,Buffer cache数据块不一致。
由于数据库已经宕了多次,Buffer cache的数据不一致可以排除,暂时无法排除其他错误原因。
Alert日志部分内容如下:
UseADRCI orSupport Workbench topackagethe incident.
See Note411.1at My Oracle Support forerror andpackaging details.
Errors infile/oracle/app/diag/rdbms/test/test/trace/test_m004_14600.trc(incident=511761):
ORA-00600:internal error code,arguments:[kdsgrp1],[],[],[],[],[],[],[],[],[],[],[]
ORA-06512:at"SYS.PRVT_ADVISOR",line6082
ORA-06512:at line1
相关错误比较多,根据alert日志内容查找 kdsgrp1错误对应的trace文件,这个mmon进程的trace文件,几乎所有的错误都在这个trc文件:test_m004_14600.trc 部分内容如下:
*kdsgrp1-1:*************************************************
row0x0080079a.75continuation at
0x0080079a.75file# 2 block# 1946 slot 117 not found
KDSTABN_GET:0.....ntab:1
curSlot:117.....nrows:105
kdsgrp-dump CR block dba=0x0080079a
Block header dump:0x0080079a
Objectid on Block?Y
seg/obj:0x16b9csc:0x00.8861f1efitc:2flg:Etyp:1-DATA
brn:0bdba:0x800796ver:0x01opc:0
inc:0exflg:0
……………省略一部分……………………
*kdsgrp1-2:*************************************************
Incident511760created,dump file:/oracle/app/diag/rdbms/test/test/incident/incdir_511760/test_m004_14600_i511760.trc
ORA-00600:internal error code,arguments:[kdsgrp1],[],[],[],[],[],[],[],[],[],[],[]
在trc文件里,没有找到sql的信息,也没有坏块的问题。在test_m004_14600.trc文件最后一部分,又提供了两个incident 文件 :test_m004_14600_i511760.trc,test_m004_14600_i511761.trc ,这两个incident文件里没有其他的报错信息也没有kdsgrp1错误更详细的信息。但是可以根据file# 2 block# 1946 信息,可以判断所在的对象有问题,查询这个数据块上的对象:
file# 2 block# 1946 是属于SYS.WRI$_ADV_EXECUTIONS表,表空间是: SYSAUX,可以使用dbv工具检查这个数据文件,但是没有任何的错误信息。说明数据文件物理上没有损坏。可以基本上判断没有找到对应的数据行。
解决方法
对SYS.WRI$_ADV_EXECUTIONS表执行一致性检查:
Analyze table SYS.WRI$_ADV_EXECUTIONS validate structure online;
Analyze table SYS.WRI$_ADV_EXECUTIONS validate structure cascade online;
执行第一个语句没有问题,说明表结构没有问题。执行第二条语句,出现错误,生成trace文件:test_ora_8604.trc,文件部分内容如下:
kdgDump:tsn=1tabn=0
Current Row Piece:rdba=0x00800799slot=0
Head Row Piece:rdba=0x00800799slot=0
kdgDumpRedo:dump redo on table/index mismatch:
table block tsn=1rdba=0x00800799index objn=5821
head rowid0x00800799.0000
*************************************
*kdgDumpRedo:dump data block redo *
*************************************
通过上面的文件信息”table/index mismatch”,可以判断是数据不一致。于是重建索引。
select index_name from dba_indexestwheret.owner='SYS'ANDtable_name='WRI$_ADV_EXECUTIONS';
Alter index index_name rebuild online;
再次执行一致性检查,没有报错。
3.ora-600 13011
描述
ORA-00600 [13011] 错误一般是DML语句引起的,无法获取一个稳定的数据集,格式:”ORA-600 [13011] [a] [b] [c] [d] [e]”,数据库版本至少8.0.3,下面是mos上对这个参数说明:
Arg[a]Passcount
Arg[b]Data Objectnumber
Arg[c]Tablespace Decimal Relative DBA(RDBA)of block containing the row tobe updated
Arg[d]Row Slot number
Arg[e]Decimal RDBA of block being updated(Typically same as[c])
Arg[f]Code
之前的两个错误解决之后,过一段时间,用户反馈,这个数据库实例又宕了,查看alert日志,内容如下:
Errors infile/oracle/app/diag/rdbms/test/test/trace/test_smon_24580.trc(incident=535689):
ORA-00600:internal error code,arguments:[13011],[183830],[8409015],[6],[8409015],[17],[],[],[],[],[],[]
Incident details in:/oracle/app/diag/rdbms/test/test/incident/incdir_535689/test_smon_24580_i535689.trc
UseADRCI orSupport Workbench topackagethe incident.
……………省略一部分……………………
Tue Apr1119:36:282017
Errors infile/oracle/app/diag/rdbms/test/test/trace/test_smon_24580.trc(incident=547590):
ORA-00600:internal error code,arguments:[13013],[5001],[183830],[8409015],[6],[8409015],[17],[],[],[],[],[]
偶尔有ora-600 kdsgrp1 错误,查看trcce文件,还是报” file# 2 block# 2090 slot 64 not found “这种错误。另外多了ORA-00600: [13013]错误,根据13013后面的参数,数据库有问题的对象主要集中在8409015和183830上。
对应的trc文件:test_smon_24580.trc,基本上是一些数据块的dump的内容,没有”file# block#”之类信息或者其他重要信息。
由于出现错误的对象比较多,也为了防止后期还会出现同样的错误,所以对整个数据库sys对象进行检查。
解决方法
1.使用mos提供的hcheck4.sql脚本,可以从文档 ID 136697.1上面下载,这个脚本用于检查数据字典是否有错误,执行方法如下:
$sqlplus/assysdba
SQL>set serveroutput on size unlimited
SQL>spool outputfile
SQL>@hout.sql
SQL>@hcheck4.sql
SQL>spool off
查看生成的文件,数据字典没有问题
2.使用如下sql生成analyze.sql脚本,用于检查所有sys用户的表一致性。
Set verify off
Set space0
Set line120
Set heading off
Set feedback off
Set pages1000
Spool analyze.sql
Select'Analyze cluster "'||cluster_name||'" validate structure cascade;'
from dba_clusters
where owner='SYS'
union
Select'Analyze table "'||table_name||'" validate structure cascade;'
from dba_tables
where owner='SYS'andpartitioned='NO'and(iot_type='IOT'oriot_type isNULL)
union
Select'Analyze table "'||table_name||'" validate structure cascade into invalid_rows;'
from dba_tables
where owner='SYS'andpartitioned='YES';
spool off
执行上面生成的analyze.sql 脚本。
在执行结果里面找ORA-01499 table/index cross reference failure错误,也就是表和索引信息不一致的表的信息。大概有30多张表。
set pagesize999
select'Alter index '||index_name||' rebuild online;'from dba_indexestwheret.owner='SYS'ANDtable_name in(
30多张表
)
最后对这30多张表的索引进行重建。
Rebuild索引时,可能会出现WRH$_PGASTAT表里复合主键上重复数据导致rebuild失败,删除重复数据,然后再次rebuild这个表上的索引。
相关推荐
- 甲骨文签署多项大型云协议,其一未来可贡献超300亿美元年收入
-
IT之家7月1日消息,根据甲骨文Oracle当地时间6月30日向美国证券交易委员会(SEC)递交的FORM8-K文件,该企业在始于2025年6月1日的202...
- 甲骨文获TEMU巨额合同,后者大部分基础设施将迁移至Oracle云
-
IT之家6月23日消息,Oracle甲骨文创始人、董事长兼首席技术官LarryEllison(拉里埃里森)在本月早些时候的2025财年第四财季和全财年财报电话会议上表示,Oracle...
- Spring Boot 自定义数据源设置,这些坑你踩过吗?
-
你在使用SpringBoot进行后端开发的过程中,是不是也遇到过这样的问题:项目上线后,数据库连接总是不稳定,偶尔还会出现数据读取缓慢的情况,严重影响了用户体验。经过排查,发现很大一部分原因竟然...
- 一个开箱即用的代码生成器(一个开箱即用的代码生成器是什么)
-
今天给大家推荐一个好用的代码生成器,名为renren-generator,该项目附带前端页面,可以很方便的选择我们所需要生成代码的表。首先我们通过git工具克隆下来代码(地址见文末),导入idea。...
- 低代码建模平台-数据挖掘平台(低代码平台的实现方式)
-
现在来看一下数据连接。·这里是管理数据连接的空间,点击这里可以新增一个数据连接。·输入连接名称,然后输入url,是通过gdbc的方式去连接的数据库,目前是支持mysql、oracle以及国产数据库达梦...
- navicat 17.2.7连接oracle数据库提示加载oracle库失败
-
系统:macOS15.5navicat版本:navicatpremiumlite17.2.7连接oracle测试报错:加载oracle库失败【解决办法】:放达里面找到程序,显示简介里面勾选“使...
- 开源“Windows”ReactOS更新:支持全屏应用
-
IT之家6月17日消息,ReactOS团队昨日(6月16日)在X平台发布系列推文,公布了该系统的最新进展,包括升级Explorer组件,支持全屏应用,从Wine项目引入了...
- SSL 推出采用全模拟内置混音技术的模拟调音台Oracle
-
英国调音台传奇品牌SolidStateLogic宣布推出Oracle——一款采用全模拟内置混音技术的调音台,在紧凑的AWS尺寸机箱内集成了大型调音台的功能。该调音台提供24输入和...
- 47道网络工程师常见面试题,看看有没有你不会的!
-
你们好,我的网工朋友。网络工程师面试的时候,都会被问到什么?这个问题其实很泛,一般来说,你肯定要先看明白岗位需求写的是什么。基本上都是围绕公司需要的业务去问的。但不可否认的是,那些最基础的概念,多少也...
- 汉得信息:发布EBS系统安装启用JWS的高效解决方案
-
e公司讯,从汉得信息获悉,近日,微软官方宣布InternetExplorer桌面应用程序将于2022年6月15日正式停用。目前大部分客户都是使用IE浏览器打开EBS的Form界面,IE停用后,只能使...
- 36.9K star ! 推荐一个酷炫低代码开发平台!功能太强!
-
前言最近在逛github,看看能不能搜罗到一些对自己有帮助的开源软件。不经意间看到一个高star的java开源项目:jeecg-boot。进入在线演示版一看,感叹实在是太牛了!此开源项目不管是给来学习...
- Linux新手入门系列:Linux下jdk安装配置
-
本系列文章是把作者刚接触和学习Linux时候的实操记录分享出来,内容主要包括Linux入门的一些理论概念知识、Web程序、mysql数据库的简单安装部署,希望能够帮到一些初学者,少走一些弯路。注意:L...
- 手把手教你在嵌入式设备中使用SQLite3
-
摘要:数据库是用来存储和管理数据的专用软件,使得管理数据更加安全,方便和高效。数据库对数据的管理的基本单位是表(table),在嵌入式linux中有时候它也需要用到数据库,听起来好难,其实就是几个函数...
- JAVA语言基础(java语言基础知识)
-
一、计算机的基本概念什么是计算机?计算机(Computer)全称:电子计算机,俗称电脑。是一种能够按照程序运行、自动高速处理海量数据的现代化智能电子设备。由硬件和软件组成、没有安装过任何软件的计算机称...
- 再见 Navicat!一款开源的 Web 数据库管理工具!
-
大家好,我是Java陈序员。在日常的开发工作中,常常需要与各种数据库打交道。而为了提高工作效率,常常会使用一些可视化工具进行操作数据库。今天,给大家介绍一款开源的数据库管理工具,无需下载安装软件,基...
你 发表评论:
欢迎- 一周热门
- 最近发表
-
- 甲骨文签署多项大型云协议,其一未来可贡献超300亿美元年收入
- 甲骨文获TEMU巨额合同,后者大部分基础设施将迁移至Oracle云
- Spring Boot 自定义数据源设置,这些坑你踩过吗?
- 一个开箱即用的代码生成器(一个开箱即用的代码生成器是什么)
- 低代码建模平台-数据挖掘平台(低代码平台的实现方式)
- navicat 17.2.7连接oracle数据库提示加载oracle库失败
- 开源“Windows”ReactOS更新:支持全屏应用
- SSL 推出采用全模拟内置混音技术的模拟调音台Oracle
- 47道网络工程师常见面试题,看看有没有你不会的!
- 汉得信息:发布EBS系统安装启用JWS的高效解决方案
- 标签列表
-
- oracle位图索引 (74)
- oracle批量插入数据 (65)
- oracle事务隔离级别 (59)
- oracle 空为0 (51)
- oracle主从同步 (55)
- oracle 乐观锁 (51)
- redis 命令 (78)
- php redis (88)
- redis 存储 (66)
- redis 锁 (69)
- 启动 redis (66)
- redis 时间 (56)
- redis 删除 (67)
- redis内存 (57)
- redis并发 (52)
- redis 主从 (69)
- redis 订阅 (51)
- redis 登录 (54)
- redis 面试 (58)
- 阿里 redis (59)
- redis 搭建 (53)
- redis的缓存 (55)
- lua redis (58)
- redis 连接池 (61)
- redis 限流 (51)