【问题标题】:How can I deploy new version PL/SQL package in Oracle DB server under high load?如何在高负载下在 Oracle DB 服务器中部署新版本的 PL/SQL 包?
【发布时间】:2012-05-19 01:38:10
【问题描述】:

有一个基于 Oracle DB Server 的高负载 24/7 系统。
许多客户端应用程序都使用包pkg1。
是否有可能(Oracle 实施或最佳实践)即时安装新版本的软件包 pkg1?
我的意思是没有出现“资源繁忙”错误并丢失当前会话等?

【问题讨论】:

    标签: oracle deployment plsql package


    【解决方案1】:

    如果您使用的是 Oracle 11,请查看 Edition-Based Redefinition。

    【讨论】:

    • 此功能仅在 11gR2 中可用。
    • +1 - 我不熟悉的有趣功能。感谢您的参考。
    【解决方案2】:

    部署新版本的数据库包,即使在生产中,也不是问题,如果你记得一些规则的话:

    • 如果某些会话当前正在使用更新的包主体,您将无法部署它。为此,您将需要基于版本的重新定义,但根据我的经验,这不应该过于频繁,而可能是您的应用程序的设计缺陷。此外,即使是 EBR 也需要启动新会话,afaik。
    • 部署包头会影响其他部分,但通常 99% 的包更新都在正文中。
    • 为避免丢失会话信息,创建没有任何包会话数据的包:没有包体代码,没有包变量,既不在标头或正文中,也没有常量(是的,没错,没有 CONSTANT 定义,它们创建状态出于某种奇怪的原因),没有表功能。解决这些限制的最简单的解决方法是拥有一个单独的“状态”包,其中包含所有这些功能和尽可能少的业务逻辑。

    考虑到这一点,您可以创建包体,即使在生产中也可以更新而不会造成任何伤害。如果确实使用了包,重新编译将等待包上的锁定,在最坏的情况下可能会超时,您需要重试。

    同样,如果所有这些都没有帮助,重新设计可能是必要且有帮助的。

    【讨论】:

      【解决方案3】:

      只要您的包不保持状态(没有全局变量)并且系统可以在包上锁定一毫秒(操作将在 1500(?)秒后超时),您就可以部署 PL/SQL 包在实时系统上。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-11-12
        • 1970-01-01
        • 2010-11-20
        • 1970-01-01
        • 2021-07-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多