oracle - 故障排除 ora-29471

标签 oracle plsql oracle11g database-administration

某些 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/

相关文章:

java - SQL查询内连接返回多行

plsql - PL/SQL中的DateAdd函数

oracle - 从 oracle : Best practices 生成大型 xml 文件

oracle sql varray 包含一个元素

java - Oracle 日期到 Java 日期

sql - 如何在 SQL 中替换字符串中的字符?

php - 1 个 ID 可获取更多项目

ruby OCI8 初始化缓慢

Python tnsnames.ora 解析器

c# - 如何从 GridView 中删除时间戳