今天遇到一个错误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. Unity 图形学 基础知识总结

    1. 渲染流水线     三大块:应用阶段,几何阶段,光栅化阶段                       渲染图元   顶点信息    GPU流水线     顶点数据=>     顶点着色器 ...

  2. akka设计模式系列(Actor模型)

    谈到Akka就必须介绍Actor并发模型,而谈到Actor就必须看一篇叫做<A Universal Modular Actor Formalism for Artificial Intellig ...

  3. android 中的Context(一)

    context的功能如此强大,它是activity的父类. public abstract class Context { ... public abstract Object getSystemSe ...

  4. ACM_ZHANGZHANG喜欢手表

    ZHANGZHANG喜欢手表 Time Limit: 2000/1000ms (Java/Others) Problem Description: ZHANGZHANG刚过生日,收到了好朋友NENGN ...

  5. day03_12/13/2016_bean属性的设置之构造器方式注入

  6. Python--10、线程

    线程 每个进程里都有一个控制线程,进程不是一个执行单位,线程是执行单位,进程是资源单位(资源隔离).进程下可以开多个线程,多线程共享进程内的资源.创建线程的速度比创建进程的速度快,因为创建线程不需要再 ...

  7. java攻城狮之路--复习xml&dom_pull编程续

    本章节我们要学习XML三种解析方式: 1.JAXP DOM 解析2.JAXP SAX 解析3.XML PULL 进行 STAX 解析 XML 技术主要企业应用1.存储和传输数据 2.作为框架的配置文件 ...

  8. ajax不执行success的问题

    有时候经常会遇到ajax请求后台,然后后台返回数据后,不触发ajax的success函数的问题,归根到底,这与ajax的参数设置dataType和后台的返回值的类型有关,现总结如下: 一.后台返回值的 ...

  9. Forum/viewthread.php代码备份

    <!--{eval $lzthread = DB::fetch_all("SELECT `tid`,`subject` FROM ".DB::table('forum_thr ...

  10. Mysql 在Linux下的安装

    1.获取mysql源码 wget http://dev.mysql.com/get/Downloads/MySQL-5.5/mysql-5.5.49.tar.gz 3.添加mysql用户和用户组,创建 ...