Igo*_*nko 5 svn oracle version-control oracle-sqldeveloper
我有现有的oracle数据库.我想把它放在源代码控制下(Subversion).我知道的唯一解决方案 - 创建'DROP/CREATE/INSERT'文本脚本并将它们存储到SVN.
可能有更好的方法来管理架构和数据?我正在使用Oracle SQL Developer,我已经看到了迁移/存储库管理功能.我应该使用它们吗?以及如何使用它们?
免责声明:我在Red Gate工作
Oracle的Source Control可以将您现有的模式链接到Subversion(仅限Windows):http: //www.red-gate.com/source-control-for-oracle/
这允许您签入CREATE文件的基线,以及向前移动的任何更改.它还允许您将源控件中的更改应用于模式,将更改作为ALTER语句处理,从而在修改表时保留数据.这也允许您为每个开发人员创建一个沙盒环境(如果您在团队中工作)的私有/专用模式.
我们目前不支持将静态/参考数据添加到源代码控制,但我们计划.
我不确定我是否真的在这里回答你的问题或者只是随意吐槽:)
首先,我想说,首先我强烈反对将数据放入源代码控制中 - 您的数据库是您维护数据的地方。我使用 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 脚本。这使我们能够独立跟踪每个更改,并通过回滚逻辑恢复到特定的构建。