open cursor too much error
今天遇到一个错误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的更多相关文章
- [mongoDB]PyMongo Cursor Not Found Error
Python跑一个aggregate脚本,报错:pymongo.errors.CursorNotFound: Cursor not found, cursor id: 35411720832 搜了下原 ...
- 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 ...
- MongoDB学习(2)—Node.js与MongoDB的基本连接示例
前提 已经安装了node.js和MongoDB,本文使用的node.js是v0.12.0,MongoDB是3.0.0. 初始化数据 启动MongoDB服务,在test数据库中插入一条实例数据: db. ...
- 转载 C#中敏捷开发规范
转载原地址 http://www.cnblogs.com/weixing/archive/2012/03/05/2380492.html 1.命名规则和风格 Naming Conventions an ...
- 五子棋——C++
最近在学C++,这个是照葫芦画瓢的五子棋C++版- - 依赖SDL_PingGe_1.3,很多实用的函数,类我都封装成DLL了调用起来真是舒服啊.. 不过一方面要对DLL做测试,一方面要开发,一个人还 ...
- Python安装MySQLdb并连接MySQL数据库
当然了,前提是你已经安装了Python和MySQL.我的Python是2.6版本的. Python2.6的“Set”有点兼容性问题,自己照着改一下: http://sourceforge.net/fo ...
- Python学习笔记10-Python MysqlHelper ,MySql 辅助类
自己写了一个MySql辅助类,有需要的拿走: #--encoding:utf-8-- # import MySQLdb class MySQLHelper: myVersion=0.1 def __i ...
- Python封装的访问MySQL数据库的类及DEMO
# Filename:mysql_class.py # Author:Rain.Zen; Date: 2014-04-15 import MySQLdb class MyDb: '''初始化[类似于构 ...
- Node.js与MongoDB的基本连接示例
Node.js与MongoDB的基本连接示例 前提 已经安装了node.js和MongoDB,本文使用的node.js是v0.12.0,MongoDB是3.0.0. 初始化数据 启动MongoDB服务 ...
随机推荐
- Unity 图形学 基础知识总结
1. 渲染流水线 三大块:应用阶段,几何阶段,光栅化阶段 渲染图元 顶点信息 GPU流水线 顶点数据=> 顶点着色器 ...
- akka设计模式系列(Actor模型)
谈到Akka就必须介绍Actor并发模型,而谈到Actor就必须看一篇叫做<A Universal Modular Actor Formalism for Artificial Intellig ...
- android 中的Context(一)
context的功能如此强大,它是activity的父类. public abstract class Context { ... public abstract Object getSystemSe ...
- ACM_ZHANGZHANG喜欢手表
ZHANGZHANG喜欢手表 Time Limit: 2000/1000ms (Java/Others) Problem Description: ZHANGZHANG刚过生日,收到了好朋友NENGN ...
- day03_12/13/2016_bean属性的设置之构造器方式注入
- Python--10、线程
线程 每个进程里都有一个控制线程,进程不是一个执行单位,线程是执行单位,进程是资源单位(资源隔离).进程下可以开多个线程,多线程共享进程内的资源.创建线程的速度比创建进程的速度快,因为创建线程不需要再 ...
- java攻城狮之路--复习xml&dom_pull编程续
本章节我们要学习XML三种解析方式: 1.JAXP DOM 解析2.JAXP SAX 解析3.XML PULL 进行 STAX 解析 XML 技术主要企业应用1.存储和传输数据 2.作为框架的配置文件 ...
- ajax不执行success的问题
有时候经常会遇到ajax请求后台,然后后台返回数据后,不触发ajax的success函数的问题,归根到底,这与ajax的参数设置dataType和后台的返回值的类型有关,现总结如下: 一.后台返回值的 ...
- Forum/viewthread.php代码备份
<!--{eval $lzthread = DB::fetch_all("SELECT `tid`,`subject` FROM ".DB::table('forum_thr ...
- Mysql 在Linux下的安装
1.获取mysql源码 wget http://dev.mysql.com/get/Downloads/MySQL-5.5/mysql-5.5.49.tar.gz 3.添加mysql用户和用户组,创建 ...