今天遇到一个错误ORA-01000: maximum open cursors exceeded。 客户想增加 DB 的open_cursor这个参数。 但是我看了下,她的程序要打开几千个cursor, 这样要把open_cursor设置成几千显然是不现实的。应该查一下为什么程序会打开几千个cursor。

首先,我用如下语句看了下是哪一个session open cursor最多。

select o.sid, osuser, machine, count(*) num_curs from v$open_cursor o, v$session s  where user_name = 'test' and o.sid=s.sid     group by o.sid, osuser, machine   order by   num_curs desc;

在获取了session 之后用下面的SQL看了下该session中open_cursor都是些什么语句。

select O.SADDR , o.sid, osuser, machine, o.SQL_ID, o.SQL_TEXT from v$open_cursor o, v$session s  where user_name = 'MPCIAPP' and o.sid=s.sid  and o.sid=308;
SID OSUSER MACHINE SQL_ID SQL_TEXT
---------- ------------ -------------------- --------------------------------------- ------------------------------------------------
293 payprod ct21upg drk0vwks4j3za SELECT * FROM PS_CITIMESHEET WHERE STAFFN=:B1
293 payprod ct21upg drk0vwks4j3za SELECT * FROM PS_CITIMESHEET WHERE STAFFN=:B1
293 payprod ct21upg drk0vwks4j3za SELECT * FROM PS_CITIMESHEET WHERE STAFFN=:B1
293 payprod ct21upg drk0vwks4j3za SELECT * FROM PS_CITIMESHEET WHERE STAFFN=:B1
293 payprod ct21upg drk0vwks4j3za SELECT * FROM PS_CITIMESHEET WHERE STAFFN=:B1
293 payprod ct21upg drk0vwks4j3za SELECT * FROM PS_CITIMESHEET WHERE STAFFN=:B1
293 payprod ct21upg drk0vwks4j3za SELECT * FROM PS_CITIMESHEET WHERE STAFFN=:B1
293 payprod ct21upg drk0vwks4j3za SELECT * FROM PS_CITIMESHEET WHERE STAFFN=:B1
293 payprod ct21upg drk0vwks4j3za SELECT * FROM PS_CITIMESHEET WHERE STAFFN=:B1
293 payprod ct21upg drk0vwks4j3za SELECT * FROM PS_CITIMESHEET WHERE STAFFN=:B1
293 payprod ct21upg drk0vwks4j3za SELECT * FROM PS_CITIMESHEET WHERE STAFFN=:B1
293 payprod ct21upg drk0vwks4j3za SELECT * FROM PS_CITIMESHEET WHERE STAFFN=:B1
293 payprod ct21upg drk0vwks4j3za SELECT * FROM PS_CITIMESHEET WHERE STAFFN=:B1

可以看到有很多

SELECT * FROM PS_CITIMESHEET WHERE STAFFN=:B1

这个语句。这是个绑定变量的语句,按理说不应该有这么多cursor,因为绑定变量应该是可以共享cursor的。所以我觉得既然没共享应该有很多child cursor才对,我决定去看看child_cursor。

select sql_id,sql_text,version_count from v$sqlarea where sql_text=

可是这个语句居然没有没有产生很多 child_cursor。 这就奇怪了,没有产生很多child, 在v$open_cursor中确又有那么多cursor,这是怎么回事呢? 只有一种可能,就是 java 代码在调用这个sql语句之后没有释放资源。 而客户坚持称java 代码释放资源了。 并且这个程序在新加坡的环境执行是好使的。

后来通过替换 ojdbc 解决了这个问题。 原来是本地的ojdbc版本不对。

总结

1. 注意ojdbc版本

2. 注意思路

open cursor too much error的更多相关文章

  1. [mongoDB]PyMongo Cursor Not Found Error

    Python跑一个aggregate脚本,报错:pymongo.errors.CursorNotFound: Cursor not found, cursor id: 35411720832 搜了下原 ...

  2. http://www.mysqltutorial.org/python-mysql-query/

    This tutorial shows you how to query data from a MySQL database in Python by using MySQL Connector/P ...

  3. MongoDB学习(2)—Node.js与MongoDB的基本连接示例

    前提 已经安装了node.js和MongoDB,本文使用的node.js是v0.12.0,MongoDB是3.0.0. 初始化数据 启动MongoDB服务,在test数据库中插入一条实例数据: db. ...

  4. 转载 C#中敏捷开发规范

    转载原地址 http://www.cnblogs.com/weixing/archive/2012/03/05/2380492.html 1.命名规则和风格 Naming Conventions an ...

  5. 五子棋——C++

    最近在学C++,这个是照葫芦画瓢的五子棋C++版- - 依赖SDL_PingGe_1.3,很多实用的函数,类我都封装成DLL了调用起来真是舒服啊.. 不过一方面要对DLL做测试,一方面要开发,一个人还 ...

  6. Python安装MySQLdb并连接MySQL数据库

    当然了,前提是你已经安装了Python和MySQL.我的Python是2.6版本的. Python2.6的“Set”有点兼容性问题,自己照着改一下: http://sourceforge.net/fo ...

  7. Python学习笔记10-Python MysqlHelper ,MySql 辅助类

    自己写了一个MySql辅助类,有需要的拿走: #--encoding:utf-8-- # import MySQLdb class MySQLHelper: myVersion=0.1 def __i ...

  8. Python封装的访问MySQL数据库的类及DEMO

    # Filename:mysql_class.py # Author:Rain.Zen; Date: 2014-04-15 import MySQLdb class MyDb: '''初始化[类似于构 ...

  9. Node.js与MongoDB的基本连接示例

    Node.js与MongoDB的基本连接示例 前提 已经安装了node.js和MongoDB,本文使用的node.js是v0.12.0,MongoDB是3.0.0. 初始化数据 启动MongoDB服务 ...

随机推荐

  1. $P3931 SAC E一道难题 Tree$

    problem #include <bits/stdc++.h> #define rep(i,j,n) for(register int i=j;i<=n;i++) #define ...

  2. $P5269 欧稳欧再次学车$

    \(problem\) 哇 看各位巨佬都来发\(T1\)的题解 我也来发一篇.(别的题目不会别瞎bb) 题目大意就是 \(T\) 秒 能走多少路程 第一行六个整数 \(T,N,L,R,X,K\) 接下 ...

  3. 上传Android代码到gerrit服务器

    1. 配置default.xml default.xml是跟Android代码配套的,可参考google Android源码下的default.xml(.repo/manifests/default. ...

  4. 自定义View(9)使用Renderscript 渲染特效。

    1.渲染脚本官网 https://developer.android.com/guide/topics/renderscript/compute 2.高斯模糊 ScriptIntrinsicBlur ...

  5. Flume OG 与 Flume NG 的对比

    Flume OG 与 Flume NG 的对比 1.Flume OG Flume OG:Flume original generation 即Flume 0.9.x版本,它由agent.collect ...

  6. Java 中 父类变量访问子类方法 需要使用 类型转换 (instenceof)关键字 /类型判断/

    通过数组元素访问方法的时候只能访问在 Animal中定义的方法,对 于 Tiger类和  Fish中定义的方法时却不能调用,例如语句  animal[2].swim();就是不正确的.当 需要访问这些 ...

  7. Laravel5.1学习笔记17 数据库3 数据迁移

    介绍 建立迁移文件 迁移文件结构 执行迁移 回滚迁移 填写迁移文件  创建表 重命名/ 删除表 创建字段 修改字段 删除字段 建立索引 删除索引 外键约束 #介绍 Migrations are lik ...

  8. 阿里云虚拟主机针对恶意频繁攻击式访问造成CPU爆满的解决方法

    最近网站CPU经常爆满,到阿里云提交了工单,工程师给我的处理意见:   您好,虚拟主机CPU占用比较高通常这种情况有两种可能:   一是网站应用程序代码逻辑较复杂,或业务架构效率比较低,在请求了某个网 ...

  9. (转)Vue 爬坑之路(三)—— 使用 vue-router 跳转页面

    使用 Vue.js 做项目的时候,一个页面是由多个组件构成的,所以在跳转页面的时候,并不适合用传统的 href,于是 vue-router 应运而生. 官方文档: https://router.vue ...

  10. html5——css选择器

    复习 div>p: 子代 div+p:div后面相邻的第一个p div~p: div后面所有的兄弟p 属性选择器 标志:[]:区别于id选择器:#,区别于类名选择器:. 特殊符号:^:开头    ...