search
LoginSignup
7

More than 5 years have passed since last update.

posted at

updated at

Oracleのセッションにおいてオープンしているカーソル数を調べる

概要

アプリケーションからOracle(というかDB全般)に接続する際に、使用後にきちんとクローズしてあげないと開いたままのカーソル数が蓄積されていってしまいます。
その後、設定上限に達すると、「ORA-01000: maximum open cursors exceeded」エラーが発生します。
対処方法は「きちんとクローズする」ことですが、「オープンしたカーソル数が増減しているかどうかを調べたい」という機会があったので、調べ方をメモしておきます。

使用環境

Oracle : 12.1c Standard One Edition
OS : CentOS 6.6

SQL

SID毎のオープンカーソル数の設定上限と、現在オープンしているカーソル数は、
以下のSQLによって取得できます。


-- 設定上限
select value from v$parameter where name ='open_cursors';

-- SIDごとの現在オープンしているカーソル数
select 
  sid, 
  statistic#, 
  value
from v$sesstat
where statistic# = 5 
  and sid in (select sid from v$session where username ='hoge')
;

SID

調査対象のアプリケーションのsid(Session ID)は、v$session表からusernameなどを使用して特定してください。

STATISTIC#, VALUE

V\$SESSTAT表は、ユーザー・セッションについての統計情報を示し、
V\$STATNAME表は、V\$SESSTAT表およびV\$SYSSTAT表で表示される統計情報のデコードされた統計名を示す、
のだそうです。(Oracleリファレンスより)

オープンしているカーソル数の定義は、V\$STATNAME表にて以下のように定義されています。

  • statistic# = 5
  • name = 'opened cursors current'

どなたかのお役に立てば幸いです。ではでは。

参考ページ

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
7