ITPub博客

首页 > 应用开发 > IT综合 > open_cursor数量

open_cursor数量

原创 IT综合 作者:foreverlee 时间:2005-01-10 18:28:03 0 删除 编辑

一个案例

[@more@]
首先登陆到DB.
cmd sqlplus xx/xx@xxxx
 
SQL*Plus: Release 9.2.0.1.0 - Production on 星期一 1月 10 16:25:45 2005
 
Copyright (c) 1982, 2002, Oracle Corporation.  All rights reserved.
 

连接到:
Oracle Database 10g Enterprise Edition Release 10.1.0.3.0 - Production
With the Partitioning, OLAP and Data Mining options
察看应用中一个session可以打开的cursor数量
 
SQL> show parameter open_cursor
 
NAME                                 TYPE
------------------------------------ ----------------------
VALUE
------------------------------
open_cursors                         integer
300
 
 
运行脚本
脚本会以交互形式完成.

SQL> @?/open_cursor.sql
 
       SID   COUNT(*)
---------- ----------
       296        224
       305         73
       294         31
       320         28
       315         21
       314         19
       317         18
       302         14
       303         13
       318         13
       288         12
 
       SID   COUNT(*)
---------- ----------
       312         12
       289         10
       290         10
       311          9
       293          8
       309          8
       295          8
       321          6
       280          5
       281          2
       324          2
 
       SID   COUNT(*)
---------- ----------
       307          2
       306          2
       301          2
       299          2
       291          2
       283          2
       285          2
       298          2
       286          2
       287          1
       325          1
 
       SID   COUNT(*)
---------- ----------
       308          1
       300          1
       297          1
 
已选择36行。
 
这里我发现session ID为296的session已经打开了224个cursor。我觉得有问题。
所以输入session ID 296进行进一步观察
找到这个session最后一次执行的sql语句的hash_value
根据hash_value找到有可能有问题的sql语句.
 
输入 sid 的值:  296
原值    1: select sid,SQL_HASH_VALUE,PREV_HASH_VALUE from v$session where sid=&s
id
新值    1: select sid,SQL_HASH_VALUE,PREV_HASH_VALUE from v$session where sid=29
6
 
       SID SQL_HASH_VALUE PREV_HASH_VALUE
---------- -------------- ---------------
       296     1819321687      1819321687
 
输入 hash_value 的值:  1819321687
原值    1: select sql_text from v$sqltext where hash_value=&hash_value order by
piece
新值    1: select sql_text from v$sqltext where hash_value=1819321687 order by p
iece
 
SQL_TEXT
--------------------------------------------------------------------------------
 
select * from APPINFO where APPID= :1
 
我感觉这应可能有问题.
 
 
系统一级确认:
 ps -ef | grep ora
。。。
oracle   16438     1  0 Jan07 ?        00:15:46 oracleorcl (LOCAL=NO)
oracle   16462     1  0 Jan07 ?        00:04:50 oracleorcl (LOCAL=NO)
oracle   16481     1  0 Jan07 ?        00:06:22 oracleorcl (LOCAL=NO)
oracle   16483     1  0 Jan07 ?        00:01:42 oracleorcl (LOCAL=NO)
。。。
我发现16438这个session执行了00:15:46
SQL> @D:lyprocessgetUserMsgbyPid.sql
输入 spid 的值:  16438
原值    5: select addr from v$process where spid = &spid
新值    5: select addr from v$process where spid = 16438
 
       SID    SERIAL# USERNAME   MACHINE              LOGON      STATUS
---------- ---------- ---------- -------------------- ---------- ----------
       296       6032 MOSP_INIT  mospapp2.lingtu.net  2005-01-07 INACTIVE
                                                       19:53:37
发现SID正好是296.
 
 
that's enough.

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/76065/viewspace-786669/,如需转载,请注明出处,否则将追究法律责任。

下一篇: sqlloader
请登录后发表评论 登录
全部评论

注册时间:2008-11-26

  • 博文量
    72
  • 访问量
    1356282