我很想知道其他人正在使用什么方法来跟踪对数据库所做的更改,包括表定义更改,新对象,包更改等。您是否将平面文件与外部版本控制系统一起使用?触发器?其他软件?
我很想知道其他人正在使用什么方法来跟踪对数据库所做的更改,包括表定义更改,新对象,包更改等。您是否将平面文件与外部版本控制系统一起使用?触发器?其他软件?
Answers:
在我工作过的站点上,必须对生产实例进行的任何更改都必须编写为将在SQL * Plus中运行的更改脚本。此外,必须从头重新创建所有架构对象所需的脚本是最新的。所有这些脚本都被检入变更控制,并从那里迁移。
您可以审核DDL更改或使用DDL触发器来选择更改,甚至可以使用diff软件来比较两个实例,但是这些方法是不加区别的;例如,通常,开发人员会在确定确切需要更改的内容之前,对模式进行许多更改并撤消(例如,小的测试更改,创建虚拟表以测试概念等)。
我已经思考并阅读了很多有关此主题的内容。这是配置控制和变更管理策略的广泛主题。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)
答案1和答案2之间的区别在于,在答案1中,您收集了整个数据库的DDL语句并将其存储。在答案2中,您需要存储更改的每个版本。
如果将一列放在表中,以后再决定将其删除。您的脚本将在答案2中显示此内容,而在答案1中,您只会看到最新版本。并且您需要比较V2和V1以查看差异。我个人更喜欢答案1,因为我可以轻松比较Start和V3,V1和V3。在答案2中,我需要查找所有更改。同样在回答中,源代码控制中的2个脚本往往是一个爆炸式的复杂脚本。很难找到信息。
答案3 如果3为真。请注意,在这种情况下,您没有约束6,即:您没有开发,测试,产品服务器。仅生产服务器。您可以使用DDL触发器记录所做的更改。这主要是用来阻止人们滥用其DDL赠款。如果发生任何问题,您可以找到负责任的人。为此,每个人都应使用其用户帐户进行连接,并且应用程序帐户不应具有任何DDL授予。由于每个开发人员都知道并可以使用应用程序帐户。
答案4 如果您有3和5。请注意,在这种情况下,您没有约束6,即:您没有开发,测试,产品服务器。仅生产服务器。而不是触发存储更改。您可以使用外部工具查找更改并将DDL脚本存储在源代码管理中。
如果这些工具能够记录谁进行了更改,那么它将很有用。请注意,在此解决方案中,您会松散间隔执行的额外DDL。
我们已经为11g数据库使用了Schema Version Control,但是11.2上的软件存在一些问题。如果不是因为我们仍在解决这些问题,那将是一个很好的产品。
我们曾经使用过Oracle SQL Designer,现在我已经将其替换为SQL Developer Data Modeler。http://www.oracle.com/technetwork/developer-tools/datamodeler/overview/index.html
很好,特别是。能够为列设置DOMAIN并节省创建常见列(mtime,ctime等)的大量时间。
我们使用oracle-ddl2svn工具集(我是作者)在SVN中自动存储oracle DDL模式。
我从未使用过它,但是http://blog.gitora.com/是另一种选择。