2010-01-27 52 views
2

在工作中,我们使用Oracle(ick)作为客户数据库(这是从以前的公司项目迁移而来的,因此数据库被设置为不幸)。 到目前为止,这并没有引起任何重大的麻烦(除了通常的Oracle和MSSQL的东西):我们正处于五个独立的开发人员为系统开发五个独立的增强功能,每个使用Perforce中的不同分支。对Oracle版本控制系统的建议

任何人都可以提出一个好方法来跟踪Oracle中的版本更改:主要是存储过程,但也可能(可能)更改表架构?

目前我们只是简单地将'创建或替换'脚本附加到FogBugz的情况下,但是有时候这会导致更改不被注意到,因为它很快会传播到头痛!

N.B.数据库本身不可能有多个副本,因为它太大了。

+3

幸运的是,您可以使用Oracle - 从MSSQL迈出! ;-) – 2010-01-27 11:35:01

+0

@Tony实际上:我非常喜欢MSSQL,使用C#配置更容易,由于所有格式匹配得很好,xsd文件与Oracle的数字格式相符,它总是假定它是十进制的,即使它是一个整数,这会导致大量的时间配置或大量的时间投射;) – 2010-01-27 11:46:39

回答

7

在我回答的Database source control with Oracle之前有一个非常类似的问题。

总结 - DDL和存储过程是代码,它应该像版本控制工具一样管理,就像Java,C#或其他。

+0

那么,这个帖子并没有在搜索中弹出:在这个网站上的搜索可以是非常临时的,看起来!那是我们正在考虑的一种选择,只是在我们将FB放入Perforce中的脚本中敲一下,但这意味着我们必须设置一些用于复制数据库的过程(即为表创建大量的脚本)和这可能需要一段时间(大量表格!) – 2010-01-27 12:35:38

+0

当我为Oracle应用程序设置流程时,最初的create table语句很痛苦。一个想法是在沙中划出一条线并生成一个单一的模式定义文件 - 然后向前移动具有“迁移”脚本来修改数据库。这样干净的安装将涉及运行架构定义,然后依次运行每个迁移。 – 2010-01-27 13:54:29

+1

可能是http://code.google.com/p/oracle-ddl2svn/将帮助 – popalka 2011-04-29 14:34:55

2

如何在脚本中检查SVN中的过程,使用FB案例编号标记每个检查以便可以直接在FB中看到更改?

这就是我们为我们的脚本所做的(主要是MSSQL),而不是FB,我们使用Jira。

4

你不会说你正在使用哪个版本的Oracle,我怀疑它不可能是最新的 。但是如果您使用的是11gR2,那么您应该阅读Editions功能。

基于版本的重定义允许我们在数据库内管理不同版本的PL/SQL对象。它不会取代正确的版本控制,但通过允许不同版本的模式在同一个实例中共存来补充它。这很酷。 Find out more

+0

不幸我们在11gR1,所以这不是一个选项,但它给了我一个令人信服的案例,为什么我们可能会升级一个天 :) – 2010-02-12 16:33:12

1

ACP said所示,如果您拥有最新版本的Oracle,版本功能可以很好地工作。

在任何情况下,other linked answer都会显示出路径 - 在版本控制中保留所有PL/SQL,并将所有DDL更改保留为补丁,并将其也输入到版本控制中。

一些可能会影响您的情况的实用性。

如果你有一个相对统一的数据库结构和快速变化的PL/SQL包,那么一个选项是有一个模式保存PL/SQL包的表和主分支,并为每个开发者分配一个单独的模式的PL/SQL包。主模式中的所有表都与每个开发人员的模式同义。

因此,您有多个针对单个数据存储运行的PL/SQL版本。随着开发人员分支到一起,这些检查到主分支并编译到主应用程序模式。

我发现在每个开发模式中都有更容易的pl/sql包,而不仅仅是当前正在开发的那些包,但是您可以使其工作。

显然你仍然需要至少 2数据库,所以你的生产环境是安全的所有这些shenanigans。

另一个选择,如果这不适用于你,是给每个开发人员自己的数据库来修补。你说这里的大小是一个禁忌因素,但是你可以使用数据泵中的功能来限制从主数据库传输到每个开发人员数据库的行数。

例如:

仅导出行的5%......

$ expdp sample=5 

仅导出特定表的5%......

$ expdp sample=mybigtable:5 

在这每个开发人员都可以使用相同的数据库结构,但您没有相同的存储问题。

希望这会有所帮助。