Java Oracle与Subversion的集成

Java Oracle与Subversion的集成,java,database,svn,version-control,oracle11g,Java,Database,Svn,Version Control,Oracle11g,我与8名开发人员一起管理一个基于java、subversion和svn的基于web的项目。不幸的是,破坏数据库更改对项目来说是一个大问题。在我们的例子中,每个用户都可能更新表,而忘记将更改脚本放在svn中。因此,我们需要花费大量时间来查看和调试由于未更新的表或视图而引发的问题 所以,我想知道,oracle 11g是否有任何方法、工具或插件可以将所有数据库更改作为脚本保存在某个地方,例如svn上 编辑1:从整个数据库获取转储并不能解决我的问题,因为在真实环境中,我无法丢弃客户数据并返回到新的转储

我与8名开发人员一起管理一个基于java、subversion和svn的基于web的项目。不幸的是,破坏数据库更改对项目来说是一个大问题。在我们的例子中,每个用户都可能更新表,而忘记将更改脚本放在svn中。因此,我们需要花费大量时间来查看和调试由于未更新的表或视图而引发的问题

所以,我想知道,oracle 11g是否有任何方法、工具或插件可以将所有数据库更改作为脚本保存在某个地方,例如svn上


编辑1:从整个数据库获取转储并不能解决我的问题,因为在真实环境中,我无法丢弃客户数据并返回到新的转储

我想这正是你需要的。一个开源数据库变更管理系统。液化。
根据主题,比液化酶更便宜、更糟糕的解决方案可能是 post-commit钩子

  • expdp。。。DUMPFILE=file.dmp CONTENT=METADATA\u ONLY
    放入目录,目录是存储库中的WC或特殊位置
  • 提交这个文件.dmp

不存储更改脚本,只存储删除并重新创建所有对象的脚本。开发人员应该在本地实例上更改并运行这些脚本,运行自动单元测试,然后签入更改

从头开始重建比不断运行alter脚本要好得多。在每个人都可以轻松从头开始重建整个系统之前,您永远无法控制您的应用程序


(我假设您正在询问trunk上的开发,在trunk上您有很多小的更改。对于主要的升级,如从1.1版升级到1.2版,您仍然需要使用更改脚本来帮助保留数据。)

维护数据库更改有两个方面。正如您所提到的,一种是脚本形式的,可以应用于旧模式来升级它。然而,这是答案的一部分,因为对于开发人员来说,查看脚本、解析脚本以及找出最近的模式更改如何影响他们的工作是非常困难的

所以,除了更改脚本之外,我建议您也在文本文件中签入数据库元数据的可读版本。是一个这样的免费工具,专门为此目的而设计,并以不同的格式生成丰富的元数据信息。我发现,如果将自动签入架构元数据作为一个夜间过程,那么随着时间的推移,数据库元数据的更改将变得可跟踪。

请尝试此工具:

它既有用于从Subversion存储库手动部署脚本的GUI,也有用于持续集成的命令行界面

支持Subversion分支


可以在Windows和Linux上工作(您需要JRE 8)。

但我不需要转储文件。我需要更改脚本来将数据库从一个版本迁移到另一个版本。这就是我们现在正在做的事情。这真令人沮丧--(我说的正是将版本从1.1移到1.2。我如何确保我所有的更改脚本都存储在某个地方?我能保证存储的更改脚本可以将我的DB完全升级到1.2版?MerC Agha Sualeh!!!我只是想知道你的工具如何检测到列重命名?这真的是应该重命名的列吗?)删除并再次插入???列重命名造成问题,需要使用更改管理工具进行管理。“在我们的情况下,每个用户都可能更新表,而忘记将更改脚本放入svn。”这是你的问题。你只需要更好的变更管理程序。人们必须提交变更,这是系统工作的唯一方式。如果人们不提交变更,这是形势管理的问题,而不是你正在使用的工具。@Ben-和你一样,我不相信这是我的工具的问题。我有一个问题我认为这可以通过自动生成变更脚本来解决。因此,如果你有更好的解决方案,你可以告诉我。此外,你能为我们的案例提出一个更好的变更管理程序吗?我不很遗憾,这就是为什么我贴出了一条评论而不是一个答案。我同样依赖于你对其他人及其同事的支持提交他们的更改。唯一的区别是,人们确实在我工作的地方提交他们的更改,如果他们不提交,他们通常会被发现,因为他们造成的问题相当明显。我当前的问题,总是会有一个问题,就是垃圾提交消息:-)。