使用它的重新创建视图后,Oracle过程崩溃



碰巧的是,Procedure1有时会崩溃,在我重新创建正在使用它的视图或使用Procedure1的Recompile Procedure2之后。

我重新编译后,没有对Procedure1进行更改(已被切碎)都可以正常工作。

.NET Web应用程序(MVC 3,Framework 4.5。,EF 4.0,ODAC 11.2.0,IIS 7.5应用程序池)使用5000个用户使用此过程。

我的问题是为什么会发生这种情况以及如何对抗?

感谢您的答案。

这没什么可担心的。

SQL开发人员中的红色" X"仅表示Oracle已将过程标记为"无效"。没有什么"崩溃"。无效的过程可能意味着两件事之一:

(1)最后一次编译了该过程时,有一个编译错误 - 这是您必须解决的问题(例如,通过纠正语法)。

(2)过程取决于(例如,视图)已更改 - 需要重新编译该过程。

在您的情况下(2)是最有可能的原因。好消息是,甲骨文将自动重新编译第一次运行时,您无需做任何事情。

但是,如果您想确定,只需右键单击该过程,然后选择"编译"。

或在SQL窗口中运行以下命令:

ALTER PROCEDURE myprocname COMPILE;

我发现杰弗里·肯普(Jeffrey Kemp)的答案是:" Oracle会在第一次运行时自动重新编译该过程,因此您无需做任何事情。"

是一般的。我说Generaly是因为它会编译Oracle过程是否从Oracle调用(例如其他过程或SQL语句)。但是,在我的情况下,从.NET应用程序调用了程序,在这种情况下,如果某些程序依赖的某些内容已更改,则不会自动重新编译Oracle过程。将过程放入包裹中解决了问题,因为Oracle中的软件包即使更改了依赖对象也不会更改状态。

其他解决方案也是将init.ora参数remote_dependencies_mode从值时间戳将其更改为值签名。(未尝试),但是如果将参数添加到过程中,并首次从.NET应用程序拨打它,那么您就会获得过程无效...因此它具有缺陷。

最新更新