如何使用Oracle数据库自动化源代码控制

Emu*_*Emu 4 sql plsql oracle11g oracle12c

我在一个具有数百个架构和多个开发人员的Oracle实例中工作。我们有一个开发实例,开发人员可以在测试或生产之前集成他们的工作。

我们希望在此集成开发数据库中具有对所有DDL运行的源代码控制。当前,这是通过产品Red Gate完成的,在对数据库进行更改后,我们会手动运行该产品。Redgate查找架构中的内容与上次检查到源代码管理中的内容之间的更改,并制作一个差异脚本,并将其放入源代码控制中。

但是,问题当然是运行regdate可能要花费一些时间,人们很少或很少运行它就可以进行很小的更改。同样,redgate一次只能查看一个模式,并且对所有模式手动运行以确保它们是最新的非常耗时。但是,如果不能依赖源代码,则它的用处就会减少。

似乎理想的是拥有一些可以定期(甚至每天一次)或在运行DDL时触发的软件,从所有模式中更新源代码控制(最好是github,因为其他团队使用了此代码)。

我似乎看不到任何可以简单地用于执行此操作的现有软件。

这样做有问题吗?(无需处理多个开发人员在同一天覆盖彼此的工作,因为我们将其覆盖在单独的流程中)有人在这样做吗?有人可以推荐一种方法吗?

小智 5

我们借助PL / SQL函数,python脚本和shell脚本来执行此操作:

  • PL / SQL函数可以生成整个模式的DDL并将其作为CLOB返回
  • python脚本连接到数据库,获取DDL并将其存储在文件中
  • Shell脚本运行源代码管理以添加修改(我们在这里使用Bazaar)。

您可以在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
Run Code Online (Sandbox Code Playgroud)

此Shell脚本配置为每天从cron运行。