![]() |
1
14
很多人试图做这种事情(diff模式)。我的意见是
现在我的工作方式是创建类似于RubyonRails迁移的迁移脚本。将您的DDL放入脚本中并运行它们在版本之间移动数据库。将版本的更改分组为单个文件或一组文件。然后有一个脚本将应用程序从版本X移动到版本Y。 有一件事我再也不做了(而且我以前一直这样做直到我学到更好),那就是在我的开发环境中使用任何GUI工具来创建数据库对象。从第一天开始编写DDL脚本-无论如何,您都需要它们来提升代码的测试、生产等能力。我见过这么多人使用gui创建所有的对象,到了发布的时候,有一个拼字游戏试图生成脚本来正确地创建/迁移模式,而这通常是没有测试过的,而且失败了! 每个人都有自己的偏好,如何做到这一点,但我已经看到很多年来做得很糟糕,这形成了我上述的观点。 |
![]() |
2
2
Oracle SQL Developer具有“数据库导出”功能。它可以生成一个包含所有DDL和数据的文件。 |
![]() |
3
2
我使用一个集成了Team Foundation Server的VCL插件的PL/SQL开发人员,但它只支持数据库对象,而不支持数据本身,而数据本身通常不受源代码控制的影响。 |
![]() |
4
1
它可能不像检测差异那么灵活,但是我们使用一个简单的Ant构建文件。在当前的cvs分支中,我们将把“base”数据库代码分解成表和触发器等的DDL。我们也会有delta文件夹,以同样的方式打开。从零开始,您可以运行“base”+“delta”并获取数据库的当前状态。当你开始生产的时候,你只需要运行“delta”构建就可以完成。如果您有一个巨大的模式,并且正在快速地更改它,那么这个模型就不能很好地工作。(注意:至少在数据库对象中,如表、索引等。对于包、过程、函数和触发器,它工作得很好。)下面是一个示例Ant任务:
|
![]() |
5
1
我认为这是一个,
寻求帮助的更好方法,
我不知道你想解决的问题是什么。有时候问题很明显,这个肯定不是。但是我可以告诉你,这个“解决方案”将变成它自己的维护噩梦。如果你认为开发数据库和使用它的应用程序是困难的。以人类可读的形式对整个数据库进行版本控制的想法简直是疯了。 |
![]() |
6
1
你试过了吗? Oracle's Workspace Manager 是吗?虽然我在生产数据库中没有使用过它的经验,但是我发现一些使用它的玩具实验是有前途的。 |
![]() |
7
1
不要尝试区分数据。只需编写一个触发器来存储更改数据时要获取的任何内容。 |
![]() |
8
1
虽然可能很贵,但像 TOAD for Oracle 对于解决这类问题很理想。 也就是说,我的首选解决方案是从所有DDL(包括存储过程定义)作为文本开始,在版本控制下进行管理,并编写将从源代码创建功能正常的数据库的脚本。如果有人想要修改这个模式,他们必须,必须,必须将这些更改提交到存储库,而不仅仅是直接修改数据库。没有例外!这样,如果您需要构建反映版本之间更新的脚本,则需要获取所有已提交的更改,然后添加您需要按摩任何现有数据以满足更改的任何DML(为现有行添加新列的默认值等),并将所有DDL(和预填充数据)作为文本,收集差异就像区分两个源树一样简单。 在我的上一个工作中,我使用了nant脚本来恢复测试数据库,根据数据库的版本运行所需的所有升级脚本,然后将最终结果转储到ddl和dml。对于一个空数据库(从头创建一个),我也会这样做,然后比较结果。如果这两个程序明显不同(转储程序不完美),我可以立即告诉您需要对更新/创建DDL和DML进行哪些更改。虽然我确实使用了像toad这样的数据库比较工具,但当我需要生成用于分析数据的通用脚本时,它们不如手工编写的SQL有用。(机器生成的代码可能非常脆弱。) |
![]() |
9
1
试试雷德盖特的 Source Control for Oracle . 我从来没有试过Oracle版本,但MSSQL版本真的很棒。 |