ORA-01000:超出打开游标的最大数问题的分析和解决
(2019-06-29 11:55:15)
标签:
open_cursorsora-01000游标spfilescope |
分类: 数据库 |
1. 异常日志
show parameter open_cursors;
show parameter session_cached_cursors;
LPAD(VALUE, 5) VALUE,
DECODE(VALUE, 0, ' n/a',
TO_CHAR(100 * USED / VALUE, '990') || '%') USAGE
FROM (SELECT
MAX(S.VALUE) USED
FROM V$STATNAME N, V$SESSTAT S
WHERE
N.NAME = 'session cursor cache count'
AND S.STATISTIC# =
N.STATISTIC#),
(SELECT VALUE FROM
V$PARAMETER WHERE NAME = 'session_cached_cursors')
UNION ALL
SELECT 'open_cursors',
LPAD(VALUE,
5),
TO_CHAR(100
* USED / VALUE, '990') || '%'
FROM (SELECT
MAX(SUM(S.VALUE)) USED
FROM V$STATNAME N, V$SESSTAT S
WHERE N.NAME IN
('opened cursors current', 'session cursor cache
count')
AND S.STATISTIC# =
N.STATISTIC#
GROUP BY S.SID),
(SELECT
VALUE FROM V$PARAMETER WHERE NAME = 'open_cursors');
alter system set open_cursors=1000
scope=both;--
alter system set session_cached_cursors=100
scope=spfile;
scope=both
scope=spfile
Oracle spfile就是动态参数文件,里面设置了Oracle
的各种参数。所谓的动态,就是说你可以在不关闭数据库的情况下,更改数据库参数,记录在spfile里面。更改参数的时候,有3种scope选项,scope就是范围。
scope=spfile
仅仅更改spfile里面的记载,不更改内存,也就是不立即生效,而是等下次数据库启动生效,有一些参数只允许用这种方法更改。
scope=memory
仅仅更改内存,不改spfile。也就是下次启动就失效了
scope=both
内存和spfile都更改,不指定scope参数,等同于scope=both。
程序日志出现异常信息:java.sql.SQLException: ORA-00604: 递归 SQL 级别 1
出现错误
ORA-01000: 超出打开游标的最大数
ORA-00604: 递归 SQL 级别 1 出现错误
ORA-01000: 超出打开游标的最大数
2. 查看参数open_cursors和session_cached_cursor
3. 查看是否需要调整参数
--查看最大使用数量
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;
--查看使用率
SELECT 'session_cached_cursors' PARAMETER,
session_cached_cursors使用率100%时可调大,open_cursors使用率接近100%可调大
4. 调整参数
5. 关于scope