项目中遇到的ORA error 及解决办法 ---ora-07445

 

目的

本文档主要介绍ora-07445错误相关内容,并给出了对这个错误的进一步诊断建议,文档主要基于unix系统编写,但原理通用。

文档适用范围

主要为DBA处理系统的ora-07445错误时使用。

0ra-07445错误的定义

当oracle服务器进程从操作系统收到一个致命的错误信息时会抛出ora-07445错误,这个错误可以被oracle后台进程或者用户进程激发。当错误被抛出时,系统会首先写一个错误日志到alert.log文件中,然后会写跟踪文件到user_dump_dest或background_dump_dest中;最后会将主存信息转储到core_dump_dest中。

操作系统有很多的非法操作设计,一个经常会碰到的情况就是,当一个进程访问一个非法地址(比如系统预留地址)时致命错误将会产生。

Ora-07445错误是一个非常普通的错误,可能在oracle的任何代码中产生,该错误代码更详细的描述需要进一步跟踪其跟踪文件。

Ora-07445的表现方式

在不同的平台上,ora-07445可能出现的情况有所不同,两种比较经常出现的方式如下所示:

实例1

ORA-07445: exception encountered: core dump [run_some_SQL()+268] [SIGBUS] [Invalid address alignment] [] [] []

实例2
ORA-07445: exception encountered: core dump [10] [2122262800] [261978112] [] [] []

实例1说明:

l         错误发生在函数run_some_sql()中

l         进程收到的信号是SIGBUS

l         一些其他相关信息。

实例2给定的信息相对较少

l         没有给出导致错误的函数名称

l         进程收到的信息是signal 10

l         一些在本次错误中无用的信息

错误发生时需要搜集哪些信息

1,  alert.log文件,这个文件至少可以查出ora-07445错误发生前后的其他相关错误,确认init.ora文件信息也包含在里边。

2,  自实例上次启动以来所有的ora-07445和ora-00600错误及其跟踪文件。

 

Trace file文件中信息的相关说明

    *** 2002-05-08 23:35:18.224     <---timestamp
*** SESSION ID:(194.14075) 2002-05-08 23:35:18.202
Exception signal: 10 (SIGBUS), code: 1 (Invalid address alignment), addr: 0x41e7, PC: kjrfnd()+44
*** 2002-05-08 23:35:19.404
ksedmp: internal or fatal error
ORA-07445: exception encountered: core dump [kjrfnd()+44] [SIGBUS] [Invalid
address alignment] [16871] [] []     <----the errror
Current SQL statement for this session:   <---the current SQL statement
DELETE FROM MY_TABLE WHERE COL1 < :b1
----- PL/SQL Call Stack -----
  object      line  object
  handle    number  name
e560c680        35  anonymous block
e560c680       290  anonymous block
----- Call Stack Trace -----           <----Stack trace starts here
calling              call      entry                argument values in hex
location            type   point                 (? means dubious value)
-------------------- -------- -------------------- ----------------------------
ksedmp()+168           CALL             ksedst()+0            540 ? 0 ? FFBE4F98 ?
                                                                                          FFBE4A3C ? FFBE4A20 ? 0 ?
ssexhd()+380            CALL             ksedmp()+0           3 ? 0 ? 1 ? FFBE56B8 ? 1 ?
                                                                                          6 ?
sigacthandler()+40   PTR_CALL   00000000              A ? FFBE5F10 ? 19FE000 ?
                                                                                          19FE000 ? 0 ? 0 ?
kjrfnd()+44                  PTR_CALL 00000000               A ? FFBE5F10 ? FFBE5C58 ?
kjrref()+176                 CALL             kjrfnd()+0            4177 ? F6A7F020 ? 0 ? 41DF ?
kjuocl()+732                CALL             kjrref()+0             FFBE63AC ? 19FA400 ?
kjusuc()+1260            CALL             kjuocl()+0            FFBE6218 ? EB5FB9A8 ?
                                                                                          EB5FB9A8 ? 5 ? 5 ? 0 ?
ksipget()+832             CALL             kjusuc()+0           19FA400 ? FFBE63AC ? 0 ?
                                                                                           E2A2ED40 ? 19FA400 ? 8 ?
ksqcmi()+3356            CALL             ksipget()+0          10020 ? FFBE6648 ? EE15430C ?
                                                                                           0 ? 0 ? 0 ?
ksqgtl()+944               CALL              ksqcmi()+0          FFBE65A8 ? 1 ? EDEB4C90 ?
                                                                                           EE1542D4 ? 1 ? 0 ?
<... lots of stuff deleted here ...>
sou2o()+20                  CALL             opidrv()+0           3C ? FFBEF784 ? 19F8000 ?
                                                                                            2F6C6F67 ? 0 ? 0 ?
main()+160                   CALL             sou2o()+0            FFBEFA80 ? 3C ? 4 ?
                                                                                            FFBEFA70 ? 1746CF4 ?
                                                                                            1A06318 ?
_start()+220                 CALL             main()+0               0 ? FFBEFC2C ? 1A1D478 ?
                                                                                           19F8000 ? 0 ? 0 ?
                                                            <----Stack trace ends here
----- Argument/Register Address Dump -----

重现错误

如果客户可以随意的重现ora-07445错误,那么诊断并解决问题的时间将会被缩短。重现错误的第一步当然是找出造成错误的current sql。

文档Note 154170.1中主要描述了怎么查找当前错误的执行语句。但我们需要注意的是,当前问题可能是由于前面几个相关的其他语句执行时的上下文环境决定是否能出问题,所以有可能找到当前语句但无法重现问题。

在找到系统出错时执行的语句后我们需要确认下面的问题:

l         是不是只有在当前参数时系统才会报错

l         是否在每天的固定时间点出错

l         出错跟哪些系统操作有主要关联,比如数据库的备份或者其他高消耗操作

l         是在特定的应用程序和用户下出错还是所有的程序和用户都出错

l         第一次报错是什么时间,当时对系统做了什么改变

l         系统出错时有没有伴随其他的错误产生

 

 

 

如何找出错误ora-07445发生时系统执行的语句

在trace file中查找错误出现时的语句主要分两个步骤:首先找到错误发生时的执行语句,然后需要找到语句中绑定变量的值。

Step 1Find the SQL

在跟踪文件中查找字符串“Current cursor”(一般在cursor dump段的起始部分),使用current cursor后面的数字定位出错时系统的执行语句。

如果找到的这个数字为0说明没有dump出有效的执行语句。

如果找到的这个数字n不为0,接着往下查找,定位到字符串“cursor n”其中n为刚找到的数字。从10.2版本后,你可能需要定位到字符串“cursor #n”,这里cursor name后面跟随的语句就是我们需要的sql。

另外我们也可以通过查找字符串“Current SQL statement for this session”来定位我们需要查找的sql语句,通常情况下,这个语句出现在trace file文件的开始部分。

如果定位到的sql语句中引用了变量(:a1…)那么我们需要通过下面步骤2找出绑定的变量值。

Step 2find values of the bind variables

如果定位得到的sql语句中出现了绑定变量,那么我们将会在cursor name后面发现”bind *”之类的字符串,其中×为0到n-1的值,n为sql语句中绑定变量的个数。

对每个绑定变量都有一系列的属性说明列表,下面简单描述列表后面的属性。

Dty : databype 1 varchar2 or nvarchar2

            2 number

            8 long

            11 rowid

            12 date

            23 raw

            24 long raw

            96 char

            112 clob or nclob

            113 blob

            114 bfile

Mxl: the maximum lenth

Scl: the scale(for number columns)

Pre: the precision(for number columns)

Value: 绑定变量的值

    通过解析上面的内容,你可以得到绑定变量的类型及其数据值,也有一些情况(非常少),你在bind *后面找不到values字节,那么我们就不能通过这种方式得到绑定变量的值。

Examples

In the following we will work through some examples of how to extract the SQL statement from trace files.

IMPORTANT: Replacing bind variables with literals can result in the optimizer choosing a different query path and thus the problem may not reproduce!

Example 1:

You should now be able to find the datatype of the bind variable (including length, scale, and precision if applicable) and the value.

The cursor dump starts with:

******************** Cursor Dump ************************
Current cursor: 2, pgadep: 1
Cursor Dump:
----------------------------------------

so we are looking for cursor 2:

---------------------------------------- 
Cursor 2 (20139ad0): CURFETCH curiob: 2013bca4
curflg: 7 curpar: 20139ab0
curusr: 0 curses 587a250c 
cursor name: select text from view$ where rowid=:1
child pin: 50a5b650, child lock: 50a5a628,
parent lock: 50a5a844 
xscflg: 20141466, parent handle: 4f348490, xscfl2: 400
nxt: 2.0x0000006c nxt: 1.0x000001d8
Cursor
frame allocation dump: 
frm: -------- Comment -------- Size Seg Off
bhp size: 52/560
bind 0: dty=11 mxl=16(16) mal=00
scl=00 pre=00 oacflg=18 oacfl2=1 size=16 
offset=0
bfp=2013e9f4 bln=16 avl=16 flg=05
value=0000138C.0046.0004

The current SQL is:

select text from view$ where rowid=:1 

and the bind variable translates into:

:1 ~ bind 0 - ROWID (dty=11), value = 0000138C.0046.0004 

so we can eg. reconstruct the original SQL statement as:

SQL> variable a1 varchar2(20)
SQL> exec :a1 := '0000138C.0046.0004';
SQL> select text from view$ where rowid=:a1;

Note that we construct the statement using a SQL*Plus bind variable in order to prevent the optimizer from choosing a different plan (not that it would make any difference for this particular example).

Example 2:
The cursor dump starts with:

******************** Cursor Dump ************************ 
Current cursor: 11, pgadep: 1
Cursor Dump:
----------------------------------------

ie. we should look for cursor 11:

---------------------------------------- 
Cursor 11 (202cb9f0): CURBOUND curiob: 202f8b04
curflg: dd curpar:
0 curusr: 0 curses 30047c7c 
cursor name: SELECT LOCKID FROM DBMS_LOCK_ALLOCATED WHERE NAME =
:b1 FOR UPDATE
child pin:
0, child lock: 300dc9b4, parent lock: 301730b8 
xscflg: 1151421, parent handle: 3025b4dc
bind 0: dty=1 mxl=32(00) mal=00 scl=00 pre=00 oacflg=01
No bind buffers allocated
----------------------------------------

The current SQL statement is then:

SELECT LOCKID FROM DBMS_LOCK_ALLOCATED WHERE NAME = :b1 FOR UPDATE 

The bind variable :b1 is of type VARCHAR2(32) (dty=1, mxl=32), but no value has been assigned to it at the time of the dump ("No bind buffers allocated").


Example 3:

******************** Cursor Dump ************************ 
Current cursor: 2, pgadep: 0
Cursor Dump:
----------------------------------------

...
----------------------------------------
Cursor 2 (20140444): CURNULL curiob: 0
curflg: 44 curpar: 0 curusr: 0 curses 701dc94c
----------------------------------------

In this case there is no SQL being executed at the time of the dump.

Example 4:

******************** Cursor Dump ************************ 
Current cursor: 1, pgadep: 0
pgactx: ccf361c0
ctxcbk: 0 ctxqbc: 0 ctxrws: 0 
Cursor Dump:
----------------------------------------
Cursor 1 (400d9478): CURBOUND curiob:
400e43d8 
curflg: 4c curpar: 0 curusr: 0 curses d5348f80
cursor name: BEGIN myparser.convert('/tmp','workflow000_2.log',2);
END; 
child pin: d14a4d70, child lock: d1589968, parent lock: d14c64a0
xscflg: 100064, parent handle: d083f1c0, xscfl2: 4040408

nxt: 1.0x000000a8
Cursor frame allocation dump:
frm: -------- Comment -------- Size Seg Off

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/266942.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

oracle 不等于某类,Oracle如何查询不等于某数值

前言今天在使用Oracle查询“不等于”的时候&#xff0c;发现得到的数据与期望中的不一样&#xff0c;进一步查找资料才有发现。1、Oracle的不等于在Oracle中&#xff0c;"<>"、"!"、"^"都是表示“不等于”&#xff0c;都可以拿来使用。但是…

ASP.NET学习笔记

1.Asp.Net中几种相似的标记符号: < %...%>< %#... %>< % %>< % %>解释及用法 < %#... %>: 是在绑定控件DataBind()要领 执行时被执行&#xff0c;用于数据绑定 如: < %# Container.DataItem("tit") %> < % %>: 在程序执行…

2017级面向对象程序设计——团队作业1

这是一股来自青青草原的神秘力量 团队信息 团队名称 青青草原战队队伍成员 阮君曦 031702116(队长)史恩泽 031702122蓝飞鹏 031702112张凌昕 031702105林鑫 031702138团队合照人物属性 阮君曦&#xff08;懒羊羊&#xff09; 风格&#xff1a; 一旦进入学习状态便一发不可收拾。…

oracle使用sql文件创建表,使用SQL*Loader创建外部表之一

使用SQL*Loader创建外部表&#xff1a;---创建目录对象并授权给Scott用户&#xff1a;SQL> create or replace directory loader_home as /home/oracle/dirhome;Directory created.--授权&#xff1a;SQL> grant read,write on directory loader_home to scott;Grant suc…

添加错误debug信息

http://hi.baidu.com/wei_1123/item/4218b2f704976cd66225d2d8 常常程式一長&#xff0c;哪邊就不小心多release了一次這時候編譯器就只會告訴你&#xff1a;BAD_ACCESS&#xff0c;然後程式就死了剛開始會google到去Argument加個NSZombieEnabled YES會多吐一點東西讓你把bug除…

雅礼集训 2017 Day1

T1&#xff1a;loj 6029 市场 题目大意&#xff1a; 维护一个数据结构支持区间加 区间除法 区间求最小值 区间求和 思路&#xff1a; 用线段树维护区间加 区间求最小值 区间和 对于区间除法 注意到除数d很大而加法的w很小 尝试将区间除法变成区间减法 可以转化成减法的情况就是…

oracle linux6 u盘安装,Oracle Enterprise Linux/Redhat Linux 6.0 U盘安装方法

多灾多难的Fedora 15安装史&#xff1a;第一天方法1 使用UltraISO直接将ISO写入硬盘映像。。结果无法启动方法2 使用liveusb-creatorFedora 15 64位 Live CD 光标永远停留在左上角。无法引导。。方法3 syslinux &#xff0c;然后自己写个菜单 加载 linux askmethod 结果提示需…

多行文本框

2019独角兽企业重金招聘Python工程师标准>>> #-*- coding: UTF-8 -*- import wxclass TextFrame(wx.Frame):def __init__(self):wx.Frame.__init__(self,None,-1,u多行文本框,size(250,150))panelwx.Panel(self,-1)multiTextwx.TextCtrl(panel,-1,"Python is a…

免oracle客户端下载,Oracle免安装客户端

我们要连接oracle经常需要安装庞大的oracle客户端&#xff0c;很占用硬盘空间&#xff0c;所以我们通过下面的设置就可以在不安装客户端的情况下连接到oracle。首先需要下载Oracle Client Package(免安装包)从http://www.oracle.com/technology/software/tech/oci/instantclien…

tar命令详解

tar [-cxt zjvfpPN] 文件 目录 -c &#xff1a;建立一个压缩文件的参数指令(create 的意思)&#xff1b; -x &#xff1a;解开一个压缩文件的参数指令&#xff01; -t &#xff1a;查看 tarfile 里面的文件&#xff01; 在参数的下达中&#xff0c; c/x/t 仅能存在一个&a…

网站如何接入第三方登录,微信登录和QQ登录:注册认证篇

第三方登录平台接入 &#xff08;QQ\微信登录&#xff09; QQ登录接入 第一步成为QQ应用开发者&#xff0c;审核期限七天 一、所需材料 1、公司注册相关信息 2、营业执照扫描件 微信登录接入 第一步成为微信开发平台开发者&#xff0c;认证费用300元一年 一、所需材料 1、网站相…

Directx11教程(55) 建立球形和锥形物体

本教程中&#xff0c;我们新建2个model class&#xff0c;SphereModelClass以及CylinderModelClass,分别用来表示球形和锥形物体。 程序执行后的界面如下&#xff1a; 线框模式界面如下&#xff1a; 从线框模式可以看出&#xff0c;球形是由三个因素决定&#xff1a;半径、经度…

JAVA基础学习之路(十一)引用传递

引用传递&#xff1a; 不同栈内存可以指向同一块堆内存&#xff0c;不同栈内存可以对一块堆内存进行修改 范例一&#xff1a; class Message {private int num 10;public Message(int num) {this.num num;}public void setNum(int num) {this.num num;}public int getNum() …

oracle 压缩导出 导入,EXP直接导出压缩问津,IMP直接导入压缩文件的方法

在10G之前&#xff0c;甚至在10G的Oracle环境中&#xff0c;有很多数据量不大&#xff0c;重要性不太高的系统依然采用EXP/IMP逻辑导出备份方式&#xff0c;或者&#xff0c;作为辅助备份方式。通常情况下&#xff0c;我们都是这样操作的&#xff1a;1.exp导出2.gzip压缩3.gzip…

Confluence 6 针对你的数据库类型确定校验 SQL

不同的数据库通常要求不同的 SQL 校验查询。校验查询通常需要尽可能的简单&#xff0c;这个查询在链接从数据库连接池中取出的时候都会被执行一次。 针对不同的数据库类型&#xff0c;我们推荐先的校验查询 SQL&#xff1a; MySQLselect 1Microsoft SQL Serverselect 1Oraclese…

c#oracle数组超出,c# – ODP.net填充数据集时的Oracle Decimal Number精度问题.异常:算术运算导致溢出...

我在c#.net 2(Visual Studio 2005 SP1)中工作,尝试使用来自Oracle10g数据库的select * from table的结果填充数据集. .net框架,IDE和数据库不能在此客户端站点更改.我使用ODP.net提供商连接,dll版本是2.102.2.20当我运行fill命令时,我得到一个例外&#xff1a;算术运算导致溢出…

php常见数据类型转换与判断

2019独角兽企业重金招聘Python工程师标准>>> 强制类型转换问题&#xff1a; &#xff08;array&#xff09; false > array(0>) &#xff08;array&#xff09; true > array(0>1) &#xff08;array&#xff09; null >array( ) 进行类型转…

Maven deploy部署jar到远程私服仓库

一、配置私服账号密码 修改maven配置文件&#xff0c;在$MAVEN_HOME/conf/setting.xml中增加如下配置&#xff1a; 注意&#xff0c;这里配置的id为releases何snapshots&#xff0c;当然可以改为其他&#xff0c;先记得这里有过id的配置&#xff0c;后面有用 二、配置远程发布到…

sublime怎么编译php,让sublime编译php、js

一、PHP1、将PHP程序设置到环境变量中&#xff0c;以使在任意目录下都可执行php命令。关于这个&#xff0c;linux下和windows下分别又不同的方法&#xff0c;可以网上搜索到。2、创建PHP编译系统添加 PHP 的 build system&#xff0c;如图所示&#xff0c; Tools->Build Sys…

HDU-Yuna's confusion 树状数组 Or Multiset

比赛的时候竟然没有想到这题可以用树状数组过&#xff0c;由于数字的区间比较小&#xff0c;所以直接开设一个树状数组&#xff0c;定义sum(i) 表示小于i的数的总数。那么判定一个数是否有的条件就是计算sum(i1) sum(i) 便可以了&#xff0c;查找第K大的数&#xff0c;也就可以…