某些 session 会导致 ORA-29471,因为 dbms_sql 对于这些 session 无法操作。我们在应用程序中遇到了这个错误,因为记录很少。
如何解决这个问题? 我们如何才能识别特定 session 对 DBMS_SQL 没有访问权限?我们在 session 级别有任何属性/标志吗?
下面的链接提供了一种在本地重现此问题的方法。 Reproduce
最佳答案
错误发生在运行时。在事情发生之前你可能无法猜测它会发生。也许您的解决方案是使用单个 block 检查您要打开的游标 ID dbms_sql.is_open(c_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 - 故障排除 ora-29471,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49525407/