首页 数据库 mysql教程 错误 ORA-01000: maximum open cursors exceeded Exception

错误 ORA-01000: maximum open cursors exceeded Exception

Jun 07, 2016 pm 05:34 PM

ORA-01000是开发中常见的异常。这个异常表示程序中打开的游标数目gt; 数据库中设定的可以打开的最大游标数。

ORA-01000是开发中常见的异常。这个异常表示程序中打开的游标数目> 数据库中设定的可以打开的最大游标数。
 
这个异常通常由2个原因导致
 
1. 数据库中设置的maximum open cursors太小
 
2. 在 Java JDBC程序中通常是代码中打开的ResultSet 或 PreparedStatment 没有被关闭。 
 
什么是游标
 
游标就是看成是指向结果集的指针。可以把它看成一种资源,或者一种数据结构。 
 
 
查看系统中允许的最大游标数和 历史上打开的最大游标数
 
select max(a.value) as highest_open_cur, p.value as max_open_cur
from v$sesstat a, v$statname b, v$parameter p
where a.statistic# = b.statistic# and b.name = 'opened cursors current'  and p.name= 'open_cursors'
group by p.value;
 

HIGHEST_OPEN_CUR      MAX_OPEN_CUR
 
----------------      ------------
 
69                    300
 
 
从结果可以看出,,系统允许的最大游标数是300,  历史上最大打开游标数是30, 可以得出结论300 够用了。如果两个数字很接近或相等,那么就要修改最大允许游标数了。 
 
查看时谁在适用游标


select sum(a.value) total_cur, avg(a.value) avg_cur,
 
max(a.value) max_cur, s.username, s.machine
 
from v$sesstat a, v$statname b, v$session s
 
where a.statistic# = b.statistic# and s.sid=a.sid
 
and b.name = 'opened cursors current'
 
group by s.username, s.machine order by 1 desc
 
 
 

TOTAL_CUR  AVG_CUR    MAX_CUR    USERNAME    MACHINE
 
---------  -------    -------    --------    -------
 
114        14.25      69          A          KUL-0121
 
76          8.44        48          B          KUL-0121
 
29          1.38        18                      KUL-0121
 26          8.67        13          C          xxx\KUL-012 
 
 
 
既然我们已经可以从系统中知道游标的适用情况,那么下面就要fix 这个异常。
 
1. 通过设置OPEN_CURSORS, MAX_VALUE增加最大游标数

ALTER SYSTEM SET OPEN_CURSORS = MAX_VALUE SID='*' SCOPE=BOTH; 
 
 
2. 通常这个异常是由Java程序未关闭ResultSet 或者 PreparedStatment 造成的。正确的适用方法, 总是把close()放在finally中,这样不管有没有发生其他异常,都会关闭ResultSet 和 PreparedStatement. 


Statement stmt = conn.createStatement();
 
try {
 
    ResultSet rs = stmt.executeQuery( "SELECT FULL_NAME FROM EMP" );
 
    try {
 
        while ( rs.next() ) {
 
            System.out.println( "Name: " + rs.getString("FULL_NAME") );
 
        }
 
    } finally {
 
        try { rs.close(); } catch (Exception ignore) { }
 
    }
 
} finally {
 
    try { stmt.close(); } catch (Exception ignore) { }
 
}

相关阅读:

关于ORA-01000: maximum open cursors exceeded" 问题分析总结

关于Oracle游标的问题(ORA-01000: maximum open cursors exceeded) 

Oracle ORA-01000:maximum open cursors exceeded 

ORA-01000: maximum open cursors exceeded 

linux

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门文章

仓库:如何复兴队友
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.能量晶体解释及其做什么(黄色晶体)
1 周前 By 尊渡假赌尊渡假赌尊渡假赌

热门文章

仓库:如何复兴队友
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒险:如何获得巨型种子
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.能量晶体解释及其做什么(黄色晶体)
1 周前 By 尊渡假赌尊渡假赌尊渡假赌

热门文章标签

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

减少在Docker中使用MySQL内存的使用 减少在Docker中使用MySQL内存的使用 Mar 04, 2025 pm 03:52 PM

减少在Docker中使用MySQL内存的使用

如何使用Alter Table语句在MySQL中更改表? 如何使用Alter Table语句在MySQL中更改表? Mar 19, 2025 pm 03:51 PM

如何使用Alter Table语句在MySQL中更改表?

mysql无法打开共享库怎么解决 mysql无法打开共享库怎么解决 Mar 04, 2025 pm 04:01 PM

mysql无法打开共享库怎么解决

什么是 SQLite?全面概述 什么是 SQLite?全面概述 Mar 04, 2025 pm 03:55 PM

什么是 SQLite?全面概述

在 Linux 中运行 MySQl(有/没有带有 phpmyadmin 的 podman 容器) 在 Linux 中运行 MySQl(有/没有带有 phpmyadmin 的 podman 容器) Mar 04, 2025 pm 03:54 PM

在 Linux 中运行 MySQl(有/没有带有 phpmyadmin 的 podman 容器)

在MacOS上运行多个MySQL版本:逐步指南 在MacOS上运行多个MySQL版本:逐步指南 Mar 04, 2025 pm 03:49 PM

在MacOS上运行多个MySQL版本:逐步指南

如何保护MySQL免受常见漏洞(SQL注入,蛮力攻击)? 如何保护MySQL免受常见漏洞(SQL注入,蛮力攻击)? Mar 18, 2025 pm 12:00 PM

如何保护MySQL免受常见漏洞(SQL注入,蛮力攻击)?

如何为MySQL连接配置SSL/TLS加密? 如何为MySQL连接配置SSL/TLS加密? Mar 18, 2025 pm 12:01 PM

如何为MySQL连接配置SSL/TLS加密?

See all articles