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

简介:
在trace file中查找错误出现时的语句主要分两个步骤:首先找到错误发生时的执行语句,然后需要找到语句中绑定变量的值。
Step 1:Find 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 2:find 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字节,那么我们就不能通过这种方式得到绑定变量的值。




本文转自einyboy博客园博客,原文链接:http://www.cnblogs.com/einyboy/archive/2012/12/14/2817634.html,如需转载请自行联系原作者。

目录
相关文章
|
存储 Oracle 关系型数据库
Oracle中“ORA-00060: 等待资源时检测到死锁” 或存储过程编译卡死的一种解决方法
Oracle中“ORA-00060: 等待资源时检测到死锁” 或存储过程编译卡死的一种解决方法
757 0
|
SQL 安全 数据库
故障解决:SQL Server数据库附加失败,错误3415、错误5120
本文为大家分享了SQL Server数据库附加失败的具体解决方法,供大家参考,具体内容如下
故障解决:SQL Server数据库附加失败,错误3415、错误5120
|
SQL Oracle 关系型数据库
Python 技术篇-操作oracle数据库执行SQL语句报错,提示ORA-00911: 无效字符解决方法
Python 技术篇-操作oracle数据库执行SQL语句报错,提示ORA-00911: 无效字符解决方法
544 0
Python 技术篇-操作oracle数据库执行SQL语句报错,提示ORA-00911: 无效字符解决方法
|
SQL 存储 关系型数据库
跳过或替代执行异常的 SQL 语句
本文介绍了如何使用 DM 来处理异常的 SQL 语句。 目前,TiDB 并不完全兼容所有的 MySQL 语法(详见 TiDB 已支持的 DDL 语句)。当使用 DM 从 MySQL 同步数据到 TiDB 时,如果 TiDB 不支持对应的 SQL 语句,可能会造成错误并中断同步任务。在这种情况下,DM 提供以下两种方式来恢复同步: 使用 dmctl 来手动跳过 (skip) 该 SQL 语句对应的 binlog event。 使用 dmctl 来手动指定其他 SQL 语句来替代 (replace) 该 SQL 语句对应的 binlog event,并向下游执行。 如果提前预知将要同步 T
668 0