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

 



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


この記事は最終更新日から3年以上が経過しています。

概要

アプリケーションから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'

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

No comments

Powered by Blogger.