【发布时间】:2017-12-01 22:35:02
【问题描述】:
我们使用 SSDT DACPAC 部署升级数据库。开发人员在 VisualStudio 2015 中处理项目,并根据需要修改架构。
开发人员还会向项目中添加 Pre 和 Post 部署脚本。其中一些脚本可确保某些表中始终包含预期的数据。其他人在平台升级过程中添加、移动或变异数据。
我们需要改进在数据库部署期间生成的输出,以便在部署之后,我们有一个人类可读的列表,其中包含作为部署的一部分而更改的任何 data。
我目前正在考虑两种方法。但两者似乎都不理想。它们是:
1) 手动将日志记录添加到项目中的所有 Pre 和 Post 脚本。这当然是一种选择。但它并不理想,因为它使升级脚本复杂化,并且有时开发人员可能会遗漏或错误地完成。由于目标是检测作为部署的一部分发生的意外数据更改,因此这种不确定性确实令人沮丧。最好使用通用解决方案。
2) 这是我对通用解决方案的最佳尝试:作为部署过程的一部分,为数据库中的所有用户表启用 SQL 更改数据捕获。然后,在部署结束时,收集所有捕获的更改并禁用 CDC。我实际上有这个工作。但是对数据库中的所有表启用 CDC 的过程需要几分钟(我们的一个数据库有 775 个表,在所有表上启用 CDC 大约需要 3 分钟)。这种方法也只是感觉很……沉重?
我的问题是。鉴于部署运行任意 Pre 和 Post 部署脚本,是否有更好的方法来实现可靠地生成作为数据库部署的一部分更改的数据报告的目标?
如果似乎没有更好的方法,我将不胜感激关于选项 #2 的反馈。考虑到这一点我疯了吗?
【问题讨论】:
-
我也在从事 SSDT Datawarehouse 项目,我们使用 SVN 来跟踪更改并跟踪当前代码,您是否考虑将整个项目放到 svn 存储库中?
-
嗨,@cybernetic87 感谢您的关注。是的,我们将项目保存在 SVN 中。我在这里感兴趣的是报告在部署时由项目中的 pre 和 post 脚本更改的 data。
-
您能否与开发人员一起将 PRINT 语句添加到 pre/post 脚本中以解释他们在做什么?也许创建一个模板供他们使用/复制,其中包括每个脚本的开始/停止时间以及关于脚本正在做什么的一些快速说明?
标签: sql visual-studio-2015 sql-server-data-tools database-project