概要
アプリケーションから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'
どなたかのお役に立てば幸いです。ではでは。