Lei*_*fel 32 oracle oracle-11g-r2 version-control
我很想知道其他人使用哪些方法来跟踪对数据库所做的更改,包括表定义更改、新对象、包更改等。您是否使用带有外部版本控制系统的平面文件?触发器?其他软件?
小智 22
在我工作过的站点中,需要对生产实例进行的任何更改都必须编写为将在 SQL*Plus 中运行的更改脚本;此外,从头开始重新创建所有模式对象所需的脚本必须保持最新。所有这些脚本都被签入变更控制,并从那里迁移。
您可以审计 DDL 更改或使用 DDL 触发器来获取更改,甚至可以使用 diff 软件来比较两个实例,但这些方法是不加区分的;通常,在确定需要更改的内容之前,开发人员会对模式进行一些更改(例如,很少的测试更改、创建虚拟表来测试概念等)。
Ati*_*gur 10
我已经考虑并阅读了很多关于这个主题的内容。这是配置控制和变更管理策略的广泛主题。CMMI 在这个主题中有一个域。即使在获得 CMMI 3-5 认证的公司中,他们有时也不会对其数据库进行版本控制。
回答此问题时应牢记以下限制条件。
答案 1
如果有 6 个,这种方法效果很好。您将 DDL 语句(也是代码)放在源代码管理中并对其进行维护。没有人会在没有适当考虑的情况下更改测试和生产服务器。
缺点是如果您出于任何原因对生产或测试服务器进行任何更改、快速错误修复、主键更改等。您还需要将该更改滚动到开发服务器。由于实际上开发服务器是您的基本事实。不是其他方式。
这是一种非常面向开发人员的方法。但是当你第一次开发一个新模块时,它工作得很好。
答案 2 - 如果 1 和 6 为真:
答案 1 的类似方法是维护一个开发服务器。每个人使用它都会改变它。比到时候更新。您使用数据库比较工具。将这些作为脚本获取,将其置于源代码控制之下。
- Red Gate Schema Compare supports Oracle
- Embercadero has similar tool
- https://github.com/carbonfive/db-migration
- http://www.sumsoftsolutions.com/svco/ (I have not used this product but I believe it belongs to this category.)
- Rails Active Migration (http://www.oracle.com/technetwork/articles/kern-rails-migrations-100756.html)
Run Code Online (Sandbox Code Playgroud)
答案 1 和答案 2 之间的区别在于,在答案 1 中,您收集整个数据库的 DDL 语句并存储它们。在答案 2 中,您需要存储每个版本的更改。
如果您将一列放入表中,然后决定将其删除。您的脚本将在 answer2 中显示这一点,而在 answer1 中您只会看到最后一个版本。您需要比较 V2 和 V1 以查看差异。我个人更喜欢答案 1,因为我可以轻松比较 Start 和 V3、V1 和 V3。在 answer2 中,我需要查找所有更改。同样在源代码控制中的答案 2 脚本中,它往往是一个大爆炸的复杂脚本。很难找到信息。
答案 3 如果 3 为真。请注意,在这种情况下,您没有约束 6 ,即:您没有开发、测试、产品服务器。只有生产服务器。您可以使用 DDL 触发器来记录已完成的更改。这主要用于阻止人们滥用他们的 DDL 授权。如果出现任何问题,您可以找负责人。为此,每个人都应该连接到他们的用户帐户,并且应用程序帐户不应有任何 DDL 授权。由于每个开发人员都知道应用程序帐户并且可以使用它。
答案 4 如果您有 3 和 5。请注意,在这种情况下,您没有约束 6,即:您没有开发、测试、产品服务器。只有生产服务器。而不是触发器来存储更改。您使用外部工具查找更改并将 DDL 脚本存储在源代码管理中。
如果这些工具能够记录谁进行了更改,那将会很有用。请注意,在此解决方案中,您会丢失按时间间隔完成的额外 DDL。
| 归档时间: |
|
| 查看次数: |
35900 次 |
| 最近记录: |