ORA-01000 のオープン・カーソルエラーが出た時

第一弾としては、使用アプリのカーソル使い方見直し。

…なのですが、暫定対応策として美貌的に残す事にする。

#現在使用されているopen_cursorsの値
show paramter OPEN_CURSORS;
 →又は初期化ファイルのopen_cursorsを参照

#カーソルオープン数
select sid, user_name, count(1)
from v$open_cursor
group by sid, user_name order by 3;

#カーソルオープン数
#V$OPEN_CURSORはクローズ済もカウントする可能性があるらしい
select s.value, n.name
from v$sesstat s, v$statname n
where s.statistic# = n.statistic#
and n.name = ‘opened cursors current’
and s.sid = &sid;

# V$OPEN_CURSORとPIDを紐付け
select oc.sid, s.process, count(oc.sid)
from v$open_cursor oc, v$session s
where oc.sid = s.sid
group by oc.sid, oc.user_name, s.process
order by 3;

# SQLカーソルオープン確認
# ※これはWebから拾ってきたヤツ。転載元不明…。
select oc.sid, oc.user_name, st.sql_text, oc.num_cursors
from v$sql st
inner join (
select sid, user_name, address, hash_value, count(*) num_cursors
from v$open_cursor
group by sid, user_name, address, hash_value
having count(*) > 1
) oc
on oc.address = st.address
and oc.hash_value = st.hash_value
order by oc.num_cursors;

## 参考ページ
http://www.shift-the-oracle.com/view/dynamic-performance-view/session-process.html

コメント

タイトルとURLをコピーしました