5

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

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

4

4 回答 4

5

免责声明:我为红门工作

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

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

我们目前不支持将您的静态/参考数据添加到源代码管理,但我们计划这样做。

于 2013-05-02T17:59:41.647 回答
3

我不确定我是真的在这里回答你的问题还是只是随意吐出一些东西:)

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

我没有使用 SQL Developer 的版本控制,主要是因为我们的部署与我们的 Jenkins CI 服务器集成在一起,所以它可能完全符合您的需求。

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

<database>
    |_____<schema>
    |         |____<DDL>
    |         |____<DML>
    |         |____<PLSQL>
    |         |____<Indexes>
    |         |____<Constraints>
    |____<schema>
    ...

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

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

Table           .tbl
Package Spec    .pks
Package Body    .pkb
Trigger         .trg
View            .vw
...

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

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

考虑到这一点,您可以找出您需要在这些文件中具有的结构。

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

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

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

于 2012-08-14T14:40:10.437 回答
1

我希望当您需要将更改从 Subversion 存储库传递到 Oracle 数据库时,我的命令行工具会很有用。请试一试:www.dbapply.com

它适用于 Windows 和 Linux。一般来说,我这样使用它:

dbapply --paths <本地 svn 存储库> <本地 SVN 存储库> ... --database <数据库连接字符串>

例子:

dbapply --paths /space/svn/oracle/scripts --database scott/tiger@localhost/orcl

DbApply 分析所有脚本,对它们进行排序(以避免依赖错误)并执行。

它还在数据库模式中创建了几个表来跟踪应用脚本的修订。每次运行 DbApply 时,它都会比较修订并仅应用更改的脚本。

此外,您所有来自 SVN 存储库的脚本都可以导出到批处理或 shell 命令文件中。此命令文件仅适用于 SQL*Plus,并且可以在未安装 DbApply 的服务器上执行。

最后,您可以指定 SQL 命令可以忽略的错误列表:

/* ignore_error(955) */ CREATE TABLE a (n NUMBER);

使用这种类型的注释,您可以为脚本添加“可重新运行性”。如果出现问题并且上面示例中的表已经存在,DbApply 将忽略“ORA-00955”错误并继续使用其他脚本。

该工具的先前版本在一家公司中运行了好几年。可能您也会发现它很有用。对于任何反馈,我们都表示感谢。

谢谢!

于 2013-03-06T15:49:02.117 回答
1

查看oracle-ddl2svn - 用于在 SVN 中自动存储 oracle DDL 模式的工具集。

于 2013-04-30T09:56:01.097 回答