【问题标题】:Invalid versioned objects getting created创建了无效的版本化对象
【发布时间】:2017-07-07 08:15:17
【问题描述】:

我有一个问题,我认为它是 ORA-04043 问题的扩展。 每当使用“CREATE OR REPLACE ..”选项部署数据库包,然后授予模式以执行这些包时,就会在无效的被授权模式中创建 SYS_PLSQL_* TYPE 对象。

有问题的包确实包含流水线函数和引用输出函数。

我想知道-

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

我使用的是 Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit。

谢谢。

【问题讨论】:

  • 如果这是关于 invoker/definer rights,那么在 12.2.0.1 中,针对许多 Oracle 拥有的 pl/sql 过程/函数进行了一些修复。
  • 我不认为这与调用者/定义者的权利有关。但可能是相关的。谢谢

标签: oracle plsql oracle12c


【解决方案1】:

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

以下是针对遇到此问题的任何人的说明 - 我们已通过管道或光标返回包向最终用户公开数据。 Oracle 在内部为这些函数所在的模式中的这些函数创建了一个名为“SYS_PLSQL_*”的“TYPE”类型对象。

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

但是,在消费者模式中,创建一个新的临时对象引用新的临时对象,但旧对象仍然存在。由于它的引用被删除,这个对象变得无效。有时也可能导致死锁。

解决方案:让 DBA 或知道架构密码的人删除这些对象!

【讨论】:

    猜你喜欢
    • 2022-11-07
    • 2019-08-26
    • 1970-01-01
    • 2015-07-06
    • 2018-06-06
    • 1970-01-01
    • 1970-01-01
    • 2013-11-12
    • 1970-01-01
    相关资源
    最近更新 更多