Oracle:将现有数据库放到版本控制中

Igo*_*nko 5 svn oracle version-control oracle-sqldeveloper

我有现有的oracle数据库.我想把它放在源代码控制下(Subversion).我知道的唯一解决方案 - 创建'DROP/CREATE/INSERT'文本脚本并将它们存储到SVN.

可能有更好的方法来管理架构和数据?我正在使用Oracle SQL Developer,我已经看到了迁移/存储库管理功能.我应该使用它们吗?以及如何使用它们?

Mic*_*des 5

免责声明:我在Red Gate工作

Oracle的Source Control可以将您现有的模式链接到Subversion(仅限Windows):http: //www.red-gate.com/source-control-for-oracle/

这允许您签入CREATE文件的基线,以及向前移动的任何更改.它还允许您将源控件中的更改应用于模式,将更改作为ALTER语句处理,从而在修改表时保留数据.这也允许您为每个开发人员创建一个沙盒环境(如果您在团队中工作)的私有/专用模式.

我们目前不支持将静态/参考数据添加到源代码控制,但我们计划.


Joh*_*n D 3

我不确定我是否真的在这里回答你的问题或者只是随意吐槽:)

首先,我想说,首先我强烈反对将数据放入源代码控制中 - 您的数据库是您维护数据的地方。我使用 SCM 来跟踪对象更改,并使用数据库中的归档策略来跟踪数据更改。

我没有使用 SQL Developer 的版本控制,主要是因为我们的部署与 Jenkins CI 服务器集成,所以也许它已经完全满足了您的需要。

组织代码需要一个基本结构,我认为这应该尽可能接近您的实际数据库。

<database>
    |_____<schema>
    |         |____<DDL>
    |         |____<DML>
    |         |____<PLSQL>
    |         |____<Indexes>
    |         |____<Constraints>
    |____<schema>
    ...
Run Code Online (Sandbox Code Playgroud)

上面模拟了 Oracle 中的命名空间边界。PLSQL 和 DDL 对象确实共享相同的命名空间,但由于 PLSQL 具有业务逻辑,我将它们分开。

我使用 OBJECTNAME.TYPEEXTENSION 的命名模式托管这些文件夹中的所有对象,并使用(或多或少)标准化的文件扩展名:

Table           .tbl
Package Spec    .pks
Package Body    .pkb
Trigger         .trg
View            .vw
...
Run Code Online (Sandbox Code Playgroud)

我找到的这些脚本的内容取决于您的部署工具和对象类型。

  • 您能否在文件对象之间创建依赖关系或者知道要运行什么?
  • 它可以处理可重运行性吗?或者您是否需要将其构建到您的脚本中?
  • 该工具可以回滚到以前的版本吗?

考虑到这一点,您可以弄清楚这些文件中需要的结构。

我们的工具目前无法处理可重运行性,即我们没有 CREATE 或 REPLACE 对象,或者用户定义对象之间存在紧密耦合的依赖关系。

对于这些,我们必须编写一个 PLSQL 块来检查系统表,例如,是否添加了索引,如果添加了,它会抛出一个异常,该工具会捕获该异常,并知道要丢弃该异常并继续执行下一个脚本。

我只希望在持续集成期间应用数据库中的增量,因此我们不使用 DROP/CREATE/INSERT 脚本。这使我们能够独立跟踪每个更改,并通过回滚逻辑恢复到特定的构建。