创建的版本化对象无效

时间:2017-07-07 08:15:17

标签: oracle plsql oracle12c

我有一个问题,我认为是ORA-04043问题的延伸。 每当使用'CREATE OR REPLACE ..'选项部署数据库包,然后授予模式执行这些包时,SYS_PLSQL_ * TYPE对象将在无效的grantee模式中创建。

有问题的软件包包含流水线函数和refcursor输出函数。

我想知道 -

  • 如果这是一个已知问题
  • 为什么这些对象是在获得授权的模式中创建的
  • 为什么要在被授权者模式中创建对象INVALID?

我正在使用Oracle Database 12c企业版12.1.0.2.0 - 64位。

感谢。

1 个答案:

答案 0 :(得分:0)

正如此处与DBA讨论的那样,这是Oracle的问题,将在12cR2中修复。

这里是对面临此问题的任何人的描述-我们已经通过管道传输或游标返回的包向最终用户公开数据。 Oracle在存在这些功能的模式中为这些功能在内部创建一个名为“ SYS_PLSQL_ *”的“ TYPE”类型对象。

当使用者从使用者模式调用此类函数时,将在其模式中创建相似的对象,这些对象引用原始(我们)模式中的对象。如果发生任何代码更改,则会在原始架构中删除此临时对象,并创建一个性质相似的新对象。

但是,在使用者模式中,将引用新的临时对象创建一个新的临时对象,但是保留了旧的对象。由于其引用已删除,因此该对象无效。有时还可能导致死锁。

解决方案:找一个DBA或一个知道模式密码的人来删除这些对象!