开发者社区> 问答> 正文

重新运行数据库开发脚本

在当前的数据库开发环境中,我们已经自动构建了流程,可以从svn create database脚本中检查所有sql代码,并将其应用于各种development / qa数据库。

这一切都很好,并且比我们过去做的要好得多,但是重新运行脚本存在问题。显然,对于某些脚本(例如更改过程)而言,这不是问题,因为您可以反复运行它们而不会不利地影响系统。现在添加元数据和运行语句(例​​如创建/更改表语句),我们添加代码以检查对象是否存在,如果存在,则不要运行它们。

我们的问题是,我们实际上只获得了运行脚本的机会,因为一旦脚本运行完毕,对象就在环境中,系统将不再运行脚本。如果部署后需要更改某些内容,我们将很难运行更新脚本,使更新脚本无法运行,并希望一切都以正确的顺序排列,并且所有PK都在环境之间排成一行(我们应该说数据库是,“特殊”)。

缺少删除数据库并从头开始流程(最新的最新版本),还有没有人对此有更完善的解决方案?

展开
收起
心有灵_夕 2019-12-26 21:53:31 1005 0
1 条回答
写回答
取消 提交回答
  • 我们进行了“删除并重新创建模式”路由。我们的JUnit测试包中有一些类,这些类对脚本进行参数化以在架构中为执行代码的开发人员创建所有对象。这使所有开发人员可以共享一个测试数据库,并且每个人都可以同时创建/测试/删除其测试表而不会发生冲突。

    运行需要很长时间吗?是。首先,我们为此使用了设置方法,这意味着对于每个测试,都将删除/创建表,而这花费了太长时间。然后,我们创建了一个TestSuite,可以在对该类进行所有测试之前运行一次,然后在完成所有类测试后对其进行清理。这仍然意味着,当我们运行“ AllTests”类时,数据库安装程序运行了很多次,该类包含所有程序包中的所有测试。我如何解决的是在OracleTestSuite代码中添加一个信号灯,因此当第一个测试要求设置数据库时,它将这样做,但是任何后续调用都只会增加一个计数器。在调用每个tearDown()方法时,计数器将使计数器递减直到计数器达到0,并且OracleTestSuite代码将丢弃所有内容。剩下的一个问题是测试是否假定数据库为空。让数据库测试知道它们运行的​​顺序可能很方便,因为它们可以减少数据库设置的重复,因此可以利用数据库的状态。

    我们使用ObjectMothers的概念来解决类似的问题,创建用于测试目的的复杂域对象。模拟对象可能是一个更好的答案,但当时我们还没有听说过。在所有这些时间之后,我建议创建测试助手方法,该方法可以为典型方案创建标准化的数据集。另外,这将有助于从数据角度记录重要的极端情况。

    2019-12-26 21:53:53
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
2022 DTCC-阿里云一站式数据库上云最佳实践 立即下载
云时代的数据库技术趋势 立即下载
超大型金融机构国产数据库全面迁移成功实践 立即下载