暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 使用流水线表函数对只读备用的查询突然失败,ORA-16000

ASKTOM 2021-05-19
1241

问题描述

在dataguard场景中,我们使用只读备用程序进行报告。

一个使用流水线表函数ptf的查询
select * from table(ptf(...)) 

自几个月以来,每天使用不同的参数成功调用几十次。

昨天,它突然重复地失败了,ORA-16000 “数据库打开,只供只读访问”。
sql-trace显示它试图发出一个
drop type "DP".SYS_PLSQL_6B4A54F6_DUMMY_1 force


因此,作为一种解决方法,我们对主 (也启用了跟踪) 执行了相同的查询,并且可以看到该类型已被删除 (并与其他一些类型一起再次重新创建)。

之后,查询也在待机状态下再次成功-昨天再次成功了几十次。

直到今天早上。
同样的ORA-16000,同样的解决方法。

为什么它突然表现得像那样 (运行几个月后没有任何问题)?
更重要的是:
如何解决这个问题?

提前谢谢!


专家解答

您是否可能使用此 (或其他) 包中定义的嵌套表/记录类型,而不是显式创建的类型对象?

create package
  type my_type is table of ....



通常会导致动态创建的类型来支持它。因此你对

-当它被创建时
-它叫什么名字
-当它被删除/标记为重新编译/等时

你不应该看到这个错误 (它很可能是一个错误),但我会显式创建一个类型并使用它-你不应该看到问题再次之后。
文章转载自ASKTOM,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论