【问题标题】:Existing state of package discarded - Oracle包丢弃的现有状态 - Oracle
【发布时间】:2011-06-23 13:04:45
【问题描述】:

我正在使用 Oracle,并且我修改了一些触发器和一个包的代码。 当我运行修改代码的脚本文件并尝试对表进行更新(触发触发器)时,我正在丢弃包的现有状态

我收到一堆错误

ORA-04068:
ORA-04061:
ORA-04065:
ORA-06512:--Trigger error -- line 50
ORA-04088:

此错误仅在第一次发生。任何避免这种情况的输入将不胜感激。谢谢!

【问题讨论】:

标签: oracle


【解决方案1】:

serially_reusable 只对常量包变量有意义。

只有一种方法可以避免此错误并保持性能(reset_package 确实不是一个好的选择)。避免在您的 PL/SQL 包中使用任何包级变量。您的 Oracle 的服务器内存不是存储状态的正确位置。

如果某些东西确实没有改变,计算成本很高,并且函数的返回值可以反复重用而无需重新计算,那么 DETERMINISTIC 在这方面会有所帮助

示例:不要这样做: varchar2(100) 缓存结果;

function foo return varchar2 is
begin
  if cached_result is null then
     cached_result:= ... --expensive calc here
  end if; 
 return cached_result;
end foo;

改为这样做

function foo return varchar2 DETERMINISTIC is
begin
  result:=... --expensive calc here
  return result;
end foo;

Deterministic 告诉 Oracle,对于给定的输入,结果不会改变,因此它可以缓存结果并避免调用函数。

如果这不是您的用例,并且您需要跨会话共享变量,请使用表并查询它。如果您的表以任何频率使用,它最终会在缓冲区缓存内存中,因此您可以获得所需的内存存储,而不会出现会话变量的问题

【讨论】:

【解决方案2】:

您的脚本很可能会缓存过时的代码。所以,从 Michael Pakhanstovs 链接你可以运行

DBMS_SESSION.RESET_PACKAGE 

在脚本的开头或使用

PRAGMA SERIALLY_REUSABLE; 

在你的脚本中。

但请注意两者的含义:

http://download.oracle.com/docs/cd/B13789_01/appdev.101/b10807/13_elems046.htm

http://download.oracle.com/docs/cd/B19306_01/appdev.102/b14258/d_sessio.htm#i1010767

http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:2298325131459

在 DBMS_SESSION.RESET_PACKAGE 上询问汤姆:

dbms_session.reset_package,而 MUCH 比登录和退出更快,有 一些性能影响(不是 快到明显不这样做!)。 那,它会撕毁整个 会话状态,例如:任何打开的游标 你有(准备好的陈述)作为 好吧。

在 PRAGMA SERIALLY_REUSABLE 上询问汤姆:

它基本上是说'如果你使用 包,你不保存状态 那个包裹,想避免 具有包的持久性 在你的会话中——更少的内存——使用 这'

【讨论】:

    【解决方案3】:

    我遇到了同样的问题。

    我的情况是我为一个包编写了一个动态创建脚本,然后在下一个脚本行中调用包中的过程。我想你也有同样的情况。

    我检测到的问题是包生成的时间戳与过程调用的时间戳相同。如今,随着越来越快的服务器......它发生了。

    所以在生成脚本中,我在包创建行之后引入了dbms_lock.wait(2)

    这解决了问题!

    【讨论】:

      猜你喜欢
      • 2014-11-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-30
      • 1970-01-01
      • 2014-12-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多