我在一个拥有数百个模式和多个开发人员的Oracle实例中工作。我们有一个开发实例,开发人员可以在测试或生产之前集成他们的工作。
我们希望在此集成开发数据库中运行所有DDL的源代码管理。目前,这是通过我们在对数据库进行更改后手动运行的产品Red Gate完成的。 Redgate查找模式中的内容与上次检查到源代码控制的内容之间的更改,并创建差异的脚本并将其置于源代码控制中。
然而,问题当然是运行regdate可能需要一些时间,人们不经常运行或根本不进行小的更改。此外,redgate一次只能查看一个模式,并且针对所有模式手动运行它以确保它们是最新的非常耗时。但是,如果不能依赖源代码控制代码,它就变得不那么有用......
似乎理想的是拥有一些可以定期(甚至每天一次)的软件,或者当由DDL运行时触发,更新源控件(最好是其他团队使用的github)模式。
我似乎无法看到任何可用于执行此操作的现有软件。
这样做有问题吗? (没有必要解决多个开发人员在同一天覆盖彼此工作的问题,因为我们在单独的流程中对此进行了覆盖)是否有人这样做?谁能推荐一种方法来做到这一点?
答案 0 :(得分:4)
我们在PL / SQL函数,python脚本和shell脚本的帮助下完成此任务:
您可以在PasteBin上看到脚本:
shell脚本:
python schema_exporter.py
d=$(date +%Y-%m-%d__%H_%M_%S)
bzr add
bzr st | grep -q -E 'added|modified' && commit -m "Database objects on $d"
exit 0
此shell脚本配置为每天从cron运行。
答案 1 :(得分:3)
对我而言,您的工作方式似乎是倒退的:开发人员以无序的方式对数据库运行DDL,然后您需要一个自动化工具来推断运行的更改(和DDL)。
如果您执行以下操作,则可以更好地控制该过程:
在此工作流程中,只能通过自动迁移脚本更改数据库,并且不允许任何人手动执行更改。这对你有用吗?
答案 2 :(得分:2)
(我为Redgate开发了Oracle工具) 实际上使用这些工具你已经可以考虑使用Schema Compare for Oracle了。
您可以在UI中或通过命令行比较多个模式 - 我认为您所追求的是自动执行命令行工具,该工具可以创建差异脚本,在源和目标之间进行同步(实时,快照或脚本)和生成报告。
您可以自动命令行同步到脚本文件夹,这是您的源代码检出,然后运行命令提交更改。
我认为这一切都很好:)
答案 3 :(得分:1)
在数据库版本控制空间中工作了5年(作为DBmaestro的产品管理总监)并且作为DBA工作了二十多年,我可以告诉你一个简单的事实,你不能对待数据库处理Java,C#或其他文件时的对象,并将更改保存在简单的DDL脚本中。
原因很多,我只列举一些:
还有更多,但我认为你得到了照片。
我发现作品如下:
我写的一篇文章发表于here,欢迎您阅读。