当前位置:  数据库>oracle

使用error stack诊断特定错误信息

    来源: 互联网  发布时间:2017-05-27

    本文导语: 在实际应用开发中,我们有很多精力倾注在调试程序和异常情况的排查上。使用设计逻辑和场景开发的代码,经常被生产数据一次次的“攻破”。快速的定位错误数据和报错语句是我们提高工作效率的关键。本篇介绍使用Oracle的...

在实际应用开发中,我们有很多精力倾注在调试程序和异常情况的排查上。使用设计逻辑和场景开发的代码,经常被生产数据一次次的“攻破”。快速的定位错误数据和报错语句是我们提高工作效率的关键。本篇介绍使用Oracle的event, 'error');" error stack方法来定位程序包中报错的SQL和取值。

1、场景展现

我们选择Oracle 11g来进行试验。

SQL> select * from v$version where rownum create table t (object_id number, object_name varchar2(100));

Table created

SQL> alter table t add constraint pk_t primary key (object_id);

Table altered

灌入一部分基础数据,作为原始值。

SQL> insert into t select object_id, object_name from dba_objects where wner='SCOTT';

20 rows inserted

SQL> commit;

Commit complete

为了进行实验,我们创建一个procedure程序段,从dba_objects中选取数据插入到数据表T中。程序定义如下:

SQL> create or replace procedure P_ERRORSTACK_TEST

2 is

3 type t_objs_list is table of dba_objects%rowtype index by binary_integer;

4 t_obj_infos t_objs_list;

5 begin

6  select *

7  bulk collect into t_obj_infos

8  from dba_objects;

9

10  if (t_obj_infos.count0) then

11      for i in t_obj_infos.first..t_obj_infos.last loop

12          insert into t

13          values (t_obj_infos(i).object_id, t_obj_infos(i).object_name);

14      end loop;

15  end if;

16 end P_ERRORSTACK_TEST;

17 /

Procedure created

注意三个细节:首先,我们是逐条进行数据的插入动作的,而不是insert into select方式。第二,我们在for循环里面插入数据,循环次数多,实际上不能逐条进行检查判断。第三,我们插入的是dba_objects所有的数据,必然一部分插入数据和原始数据表中存在主键冲突的情况。

实际执行中,报错。

SQL> exec P_ERRORSTACK_TEST;

begin P_ERRORSTACK_TEST; end;

ORA-00001:违反唯一约束条件(SCOTT.PK_T)

ORA-06512:在"SCOTT.P_ERRORSTACK_TEST", line 12

ORA-06512:在line 1

有过调试和测试经验的朋友们非常熟悉这样的情景。大批量数据测试的时候,存储过程作业包括成千上万相同或者不同的SQL,执行数据海量。执行半天之后,报错。类似的错误还有如长度(数字字符串)超过限制、将空值null插入到非空约束字段,违反外键约束等等。

这样的原因无非几种,一是程序的Bug,开发人员没有考虑到业务场景,一般出现在null值计算结果null上。其二是设计问题,业务人员和设计人员没有考虑到当前这样的异常场景。最后也是比较麻烦的,就是测试数据来源有问题,需要进行额外清理工作。

无论原因是上述哪种,有两件事情是必须做到,是哪句SQL报错,报错的数据参数值是什么。

当然,我们可以认为加入调试代码来输入执行过程,从而实现定位。我们更方便的是使用error stack的诊断事件方法来进行定位。

相关阅读:

SPFILE 错误导致数据库无法启动(ORA-01565)

ORA-01172、ORA-01151错误处理

ORA-00600 [2662]错误解决

ORA-01078 和 LRM-00109 报错解决方法

 

更多详情请继续阅读第2页的精彩内容:

 


    
 
 

您可能感兴趣的文章:

  • 自动化收集SQLSERVER诊断信息的工具选择及使用介绍
  • 诊断SQLSERVER问题常用的日志概述及使用
  • 使用Runtime.exec("calc.exe")时,编译 出现错误,看不懂这个错误,怎么回事?
  • asp.net错误捕获(错误处理)page_error事件使用方法
  • ubuntu 10.10出现极其诡异的情况,使用gcc编译没任何反应,可以继续输入,但是不提示任何错误;使用make编译效果一样;
  • linux下使用易飞ERP系统出现“报表数据库连接错误!!”是怎么回事
  • 用popen,不能使用fseek了?Segmentation fault错误
  • sybase 的C 接口dbrpcparam 使用错误。。。
  • 我的网卡正确的加载和使用了。但是有错误!请指教
  • 在配置了DNS并启动服务后,使用host命令察看主机,为什么会出现SERVFAIL的错误?
  • 使用iceblood的qmail安装包为什么有如下错误提示
  • **紧急求助:使用xmanager连接linux出现得错误*****
  • 使用SSH登录另一台主机时,提示如下错误?!
  • mini2440中使用函数atan2得到错误结果
  • 使用Virtual PC安装Red Hat Linux 9.0时显卡识别错误,如何改回来?
  • 在Solaris下,使用xalan对XML转换时,出现错误,怎么办?同样程序在Windows可正常运行。
  • vim中使用ctags时总是报E426错误。。
  • 使用arm-linux-gcc编译,出现compilation of header file requested错误
  • C++使用OCCI连Oracle10g的错误
  • 关于resin和iis整合后,在使用asp程序时提示500内部服务器错误
  • busybox中的gzip运行过程中出现page fault错误,并指出出错的指针,但是怎么使用gdb调试,找到指针对应的语句?
  • 使用2.6.25内核request_firmware函数加载firmware失败,错误-2(ENOENT)
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 使用tomcat出现的问题(socket write error),请教大家
  • mssql @@ERROR 使用
  • 在学习linux 0.11中,使用mount命令,但是总显示error 2
  • 怎样解决"Cannot set Socket Options for Trasnmit Socket" error 当使用setsockopt() 在solaris 5.8
  • 普通用户,使用CP命令提示: cp:unable to create file ......... Permission denied(error 13)
  • 使用net-snmp的mib2c出现ERROR,求助!!!
  • 在linux下安装oracle时,使用sysctl检查系统参数时出现许多error信息,不知道怎么回事,望高手指点!
  • [跪求大牛]有人使用cc时遇到过这种问题吗?internal error 5176
  • C++ I/O 成员 tellg():使用输入流读取流指针
  • 在测试memset函数的执行效率时,分为使用Cash和不使用Cash辆种方式,该如何控制是否使用缓存?
  • C++ I/O 成员 tellp():使用输出流读取流指针
  • 求ibm6000的中文使用手册 !从来没用过服务器,现在急需使用它,不知如何使用! 急!!!!!
  • Python不使用print而直接输出二进制字符串
  • 请问:在使用oracle数据库作开发时,是使用pro*c作开发好些,还是使用库函数如oci等好一些啊?或者它们有什么区别或者优缺点啊?
  • Office 2010 Module模式下使用VBA Addressof
  • 急求结果!!假设一个有两个元素的信号量集S,表示了一个磁带驱动器系统,其中进程1使用磁带机A,进程2同时使用磁带机A和B,进程3使用磁带机B。
  • windows下tinyxml.dll下载安装使用(c++解析XML库)
  • c#中SAPI使用总结——SpVoice的使用方法
  • 技术文章 iis7站长之家
  • 使用了QWidget的程序,如何使用后台程序启动它?
  • sharepoint 2010 使用STSNavigate函数实现文件下载举例
  • 共享内存一般是怎么使用的,是同消息队列配合使用么
  • 使用libpcap读取tcpdump抓取的文件并解析c代码实例
  • Jsp可否使用带有GUI的JavaBean,如何使用?
  • c/c++预处理命令预#,##使用介绍
  • asp程序使用的access在Linux下如何使用!
  • 在div中使用css让文字底部对齐的方法
  • 新装的Linux使用root用户不能使用FTP?
  • Python namedtuple(命名元组)使用实例
  • LINUX下使用Eclipse,如何使用交叉编译器?


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,