【问题标题】:Deployment of plsql packages in oracleoracle中plsql包的部署
【发布时间】:2015-07-14 14:43:33
【问题描述】:

我希望了解部署大量 plsql 包的可能方法,因为依赖项似乎是一个很大的问题。 正如它现在工作的那样,如果由于缺少依赖关系而无法在上一次部署中部署包,则会在多次迭代中重新部署包。 我希望听到解决问题的不同方法,如果你碰巧有问题让我更清楚,我会更新我的问题。

在 SO 上以这种方式搜索指南是否可以?

【问题讨论】:

  • 什么是大数?如果你有“很多”包,那么你必须在代码库中有一些其他的“结构”——纪律,比如:这 25 个包属于子系统 FOO,这 13 个包属于子系统 BAR,不是吗?也许您对子系统也有不同的架构?一个包是否允许使用任何其他包?您是否实现了单独的公共和私有包 API?还需要哪些其他数据库对象(表、对象类型、序列、视图)?
  • 您在版本控制系统中有源代码吗?
  • @user272735 是的,覆盖所有测试级别的几个分支,还有数千个包,数十个模式,包使用其他包,因为有共同的东西,以及在 oracle 中可以想象的所有对象,包括你提到的那些
  • 你超出了我的规模,所以我的做法对你没有帮助。我非常能够从版本控制系统收集已更改脚本(PL/SQL 代码、更改表语句等)的列表到每个生产部署的文本文件,并半自动(sqlplus)执行这些脚本,而不会出现任何依赖性问题。
  • 您能简要解释一下您是如何通过源代码控制解决依赖问题的吗?我们使用 svn。

标签: oracle deployment plsql packages


【解决方案1】:

我建议先按正确的顺序安装所有规格。 然后安装所有主体。 所有依赖项都需要在主安装脚本中预定义一次。

更新: 你还能做什么:

1) 将所有包规格加载到主列表中(我假设所有规格和主体都单独存储。如果没有,则需要完成)

2) 循环主列表中的所有规范。

3) 尝试编译它。如果失败则添加到失败列表中。

4) 当到达主列表的末尾时,将其中的所有项目替换为失败列表中的项目。

5) 转到第 2 步。

同时您可以保存第一次运行的结果,第二次运行可以根据之前调用的结果排序项目。这将最大限度地减少迭代次数。

主体可以按任何顺序安装...

但是,您需要记住对视图和视图的依赖关系 - 规范可能依赖于视图(view_name%TYPE、游标等),而视图依赖于包规范(可以调用包函数)。这不是一个小问题...请您解释一下目前是如何解决的?

【讨论】:

  • 感谢您的回复。观察到了这种方法,但是有数千个包,并且它们经常由于正在进行的重构而改变,因此维护主脚本需要太多的时间/精力。
  • 这是糟糕设计的结果——您需要为日志记录、动态 sql 执行、表管理、错误处理和其他实用程序分离核心包。下一层是低级业务逻辑。然后是高级业务逻辑 - 来自 Oracle 外部、其他应用程序等的调用的包装器。您可以自动定义一次,然后只需维护它。即使对于数千个包,您也不会在每个版本中更改所有包的依赖项。
  • 一天之内发生了很多事情,因为它的 100 多个人致力于从重新命名到重写、重组等等。这里的很多内容都可以改进,这个问题是改进它的一部分。不能在一夜之间完成,最后期限就是最后期限。
  • 是的,同意。我的评论与建议的方法一起出现。让我更新我的答案...
  • 这就是它现在的基本工作方式,尝试 deplay 并循环直到它完成,但是一些规范使用强制方法来部署而不考虑它的依赖关系,然后根据这个使所有对象无效.并且下一次部署迭代不会重新部署这些包,因为它们已成功部署并从列表中删除。
【解决方案2】:

我自己只是安装所有程序代码(以任何顺序),然​​后(重新)编译所有无效对象。

有几种方法可以重新编译所有无效对象:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-11-06
    • 2010-11-20
    • 1970-01-01
    • 1970-01-01
    • 2021-03-02
    • 2017-12-11
    • 2010-12-25
    • 2010-10-27
    相关资源
    最近更新 更多