oracle – 麻烦射击ora-29471

前端之家收集整理的这篇文章主要介绍了oracle – 麻烦射击ora-29471前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
某些会话导致ORA-29471,因为dbms_sql无法用于这些会话.我们在应用程序中遇到此错误的记录很少.

如何解决这个问题?
我们如何识别特定会话无法访问DBMS_sql?我们在会话级别有任何属性/标志吗?

下面的链接提供了一种在本地重现此问题的方法.
Reproduce

解决方法

错误发生在运行时.你可能无法猜测它会在它发生之前发生.也许您的解决方案是使用要打开dbms_sql.is_open(c_id)的游标ID进行单个块检查.

但如果这是你正在寻找的,这里是如何找到打开的游标列表:

select a.value,s.username,s.sid,s.serial#
  from v$sesstat a,v$statname b,v$session s
 where a.statistic# = b.statistic#  and s.sid=a.sid
   and b.name = 'opened cursors current'
;

您还可以访问v $open_cursor来计算它们:

SELECT *
  FROM v$open_cursor oc,v$session s
 WHERE oc.sid = s.sid
order by 3,2;

希望这可以帮助您调整一些东西来检查是否使用了预期的光标.

猜你在找的Oracle相关文章