透过现象看现象(SQL501N错误处理)
某日一直运行比较正常的报表系统,突然报存储过程执行失败,查看DB2 错误返回码为sql501n,查看此错误原因如下:
[db2inst1@limt ~]$ db2 ? sql501n
SQL0501N The cursor specified in a FETCH statement or CLOSE statement
is not open or a cursor variable in a cursor scalar function
reference is not open.
Explanation:
The program attempted to do one of:
* FETCH using a cursor at a time when the specified cursor was not
open.
* CLOSE a cursor at a time when the specified cursor was not open.
* Reference a cursor variable in an OPEN statement and the cursor
variable is not open.
* Reference a cursor scalar function, such as CURSOR_ROWCOUNT function,
and the cursor variable is not open.
通过上述描述可以看出程序在FETCH 或者CLOSE 游标的时候,游标没有打开。
随后导出存储过程源码查看,此存储过程特点如下:
1 存储过程结构比较清晰,代码比较简单,在存储过程中调用了另一个存储过程
2 在存储过程中打开了一个游标,并且在代码后面也CLOSE了游标,在FETCH阶段也没有提前CLOSE游标
3 在嵌套的存储过程中也打开了游标,并且合理的关闭了游标
4 在嵌套的存储过程中也没有COMMIT操作(任何一个commit操作会导致所有的游标被关闭)
从代码上看不出来问题,那么回到系统整体上来分析:
1 此存储过程每天执行一次,以前从来没失败过
2 目前也不是每天都失败,偶尔也有成功的时候
3 每次失败的时候,在重新执行一次必然成功
4 此数据库前几天刚从V9.5.0.5升级到V9.5.0.10(V9.5.0.5 在linux系统上有内存泄露,导致SWAP空间被耗尽)
从上面两方面分析可以基本确定两点:
1 应该不是代码问题,如果是游标使用不当,那么为什么第二次调用就会成功
2 应该是数据库版本升级导致的存储过程执行错误,在数据库升级之前从来没失败过
那么怎么解决这个问题,不可能回退到V9.5.0.5版本,初步分析可能是V9.5.0.10对游标使用发生了某些变化,
随后做了一下两个尝试:
1 重新rebind存储过程 db2 rebind xxxx,在做完此操作后,刚好遇到十一长假,竟然连续十几天没有报错,以为问题解决了,可是没过几天就
又开始报错了,看来问题没有解决;
2 然后就在网上百度,资料甚少,看来用DB2人还是太少了,点了几个链接后,看到一个类似讨论sql501n错误的帖子,大致提到在V9.7后,
DB2的游标规则做了改变,在游标OPEN阶段如果发生错误,是不会返回错误,在FETCH和CLOSE阶段会暴露错误,看到这里顿时感觉有
点思路,虽然目前V9.5.0.10而非V9.7,但是根据某些传闻,IBM的低版本软件的高FIX补丁相当于高版本,在回去分析这个存储过程,发现此
存储过程运行有以下:
1 如果失败的话,一般都是运行3分钟多失败,如果成功的话就不到三分钟,
2 如果失败的话,一般都是和另外一个存储过并行运行,如果成功的话都是在串行运行
3 此数据库的锁超时设置为3分钟
至此可以基本判定是锁超时导致的存储过程失败,于是在系统上部署了db2cos捕获锁超时,果然第二天捕获到了锁超时,并且与
存储过程的失败时间一致,之后的连续几天都捕获到了关于此存储过程的锁超时,在分析造成锁超时的表与上述的两个存储过程所涉
及的表一致,最后通过调整两个存储过程的执行关系,调整为串行执行后,在没有出现sql501n错误
透过现象看现象(SQL501N错误处理)的更多相关文章
- 通过本质看现象:关于Integer受内部初始化赋值范围限制而出现的有趣现象
左手代码,右手文章.——朱季谦 这是我的第一篇技术博客,作为一名技术小菜鸟,总体而言显得很拙见,但也算是成长路上的一个小脚印,希望能在以后的日子里,可以对JAVA技术有一个更加深入的思考与认识. 前几 ...
- 透过IL看C#:switch语句(转)
透过IL看C# switch语句(上) 摘要: switch语句是 C#中常用的跳转语句,可以根据一个参数的不同取值执行不同的代码.本文介绍了当向 switch语句中传入不同类型的参数时,编译器为其生 ...
- iOS: 学习笔记, 透过Boolean看Swift(译自: https://developer.apple.com/swift/blog/ Aug 5, 2014 Boolean)
透过Boolean看Swift 一个简单的Bool类型内部就包含了许多Swift主要功能, 如何构建一个简单类型是有趣的演示. 本文将创建一个与Bool类型在设计与实现上非常相似的新MyBool类型. ...
- 一道JS面试题所引发的"血案",透过现象寻本质,再从本质看现象
觉得本人写的不算很烂的话,可以登录关注一下我的GitHub博客,新手写东西写的不好之处,还望见谅,毕竟水平有限,写东西只为交流提高,一起学习,还望大神多加指点,指出纰漏,和提出宝贵的意见,博客会坚持写 ...
- 透过现象看webpack处理css文件中图片路径转换的具体过程
webpack是目前使用比较流行的一个前端模块打包器,前端的任何资源都被当成一个模块来处理,如图片.css文件等等.在基于webpack构建的前端项目中,一般都会配置有关css文件处理的规则,这其中也 ...
- 透过现象看本质:Java类动态加载和热替换
摘要:本文主要介绍类加载器.自定义类加载器及类的加载和卸载等内容,并举例介绍了Java类的热替换. 最近,遇到了两个和Java类的加载和卸载相关的问题: 1) 是一道关于Java的判断题:一个类被首次 ...
- GetX代码生成IDEA插件,超详细功能讲解(透过现象看本质)
前言 本文章不是写getx框架的使用,而且其代码生成IDEA插件的功能讲解 我之前写过俩篇很长很长的getx文章 一篇入门使用:Flutter GetX使用---简洁的魅力! 一篇原理深度剖析:Flu ...
- [转] 学习,思维三部曲:WHAT、HOW、WHY(通过现象看本质)
https://www.douban.com/note/284947308/?type=like 学习技术的三部曲:WHAT HOW WHY 我把学习归类为三个步骤:What.How.Why.经过我对 ...
- AutoPostBack通过现象看本质
在做人事档案管理系统时遇到一个功能需要实现前台数据(实时)与后台进行交互,解决这个问题首先想到的是应用控件的AutoPostBack属性.本以为这个问题就这样解决了(不用javascript.jque ...
随机推荐
- test1.A[【dfs简单题】
Test1.A Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^ 题目描述 sdut 2274:http://acm.sdut.edu.cn/ ...
- SQL高级查询之一
一,子查询 SELECT e.emp_id, e.fname, e.lname FROM (SELECT emp_id, fname, lname, start_date, title FROM em ...
- poj 1008:Maya Calendar(模拟题,玛雅日历转换)
Maya Calendar Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 64795 Accepted: 19978 D ...
- 使用PHPExcel导入Excel到MySql
.连接数据库的connection.php文件 <?php //修改下面代码来联接数据库 // mysql_connect打开一个到 MySQL 服务器的连接,如果成功则返回一个 MySQL 连 ...
- MapKit地图划线
只要用于获取用户位置都要取得用户授权 #import "ViewController.h" #import <MapKit/MapKit.h> @interface V ...
- 小甲鱼PE详解之IMAGE_NT_HEADERS结构定义即各个属性的作用(PE详解02)
PE Header 是PE相关结构NT映像头(IMAGE_NT_HEADER)的简称,里边包含着许多PE装载器用到的重要字段.下边小甲鱼将为大家详细讲解哈~ (视频教程:http://fishc.co ...
- 第一个vs2013控制台程序
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...
- 深入理解Loadrunner中的Browser Emulation
深入理解Loadrunner中的Browser Emulation 深入理解Loadrunner中的Browser Emulation 3E?']V'VgB5n*S0一:基本介绍51Testing软件 ...
- js-其他
- HTML5优点
1.标签的改变:<header>, <footer>, <dialog>, <aside>, <figure>, <section&g ...