4

我们有大量(2000 多个)脚本用于部署数据库代码。有谁知道是否有一种工具可用于创建符合正确依赖顺序的单个部署脚本?

我知道这可以使用 Redgate 的 SQL 比较来完成,但是如果你有 SQL Server,那就太好了。从 Schema Compare for Oracle 工具的有限信息来看,它似乎没有此功能。

4

4 回答 4

3

我将按照以下顺序进行(大致基于使用 EXPDP 提取对象的顺序):

  • 代名词
  • TYPE(表列可能取决于用户定义的类型)
  • DB_LINK
  • 顺序
  • 表-表
  • 表授权
  • 表索引
  • TABLE-CONSTRAINT(您可能希望由现有索引强制执行 PK 约束)
  • 表格评论
  • 包裹
  • 功能
  • 程序
  • 看法
  • 表参考约束
  • 表触发器
  • 表索引(功能)
  • 物化视图
  • 物化视图日志
  • 工作
于 2011-05-05T03:06:49.573 回答
2

我会创建一个脚本以正确的顺序启动您的脚本,具体取决于它们的实现方式。

  • 表/序列
  • 视图/类型
    • (通常带有force选项,因此如果存在生成顺序问题或对“代码”类型或其他视图和类型的依赖性,则会创建它们)
  • 包/过程/函数/触发器
    • (如果这些是根据依赖顺序创建的,它们仍然会创建,但无效)
  • 外键约束

完成重新编译无效对象后,启动 rdbms/admin/utlrp 以重新编译无效对象。

于 2011-05-05T01:50:17.120 回答
1

我不确定我是否完全理解您的问题,但您可能想尝试以下方法:

  1. 运行当前脚本以创建数据库
  2. 创建一个空白架构
  3. 使用 Red Gate 的 Schema Compare 将您的数据库与空白模式进行比较
  4. 保存脚本(应该按依赖顺序)
于 2011-05-05T10:38:55.960 回答
0

以下是为不同类型的数据库对象运行安装脚本的顺序的一般准则:

Package specifications

Tables (with constraints and indexes) in proper order

Sequences (because they are most often used by triggers)

Triggers

Synonyms

Views (because they may reference functions, procedures, or synonyms)

Package bodies

Data (optionally disabling all constraints before loading the data and re-enabling them afterwards)

首先列出包规范,因为它们将始终有效并且其他对象可能会引用它们。包主体应该是最后创建的对象类型,因为它们可能会引用其他对象类型。由于依赖性问题,我们鼓励您将函数和过程放入包中。

于 2013-10-16T14:05:22.103 回答