【发布时间】:2016-12-21 12:42:05
【问题描述】:
我正在进行一个 DevOps 项目,该项目使用各种 DevOps 工具自动部署不同代码堆栈和数据库的应用程序。我正在寻求有关自动化 MS SQL DB 部署和后续更新的建议。
目前的方法是使用 Terraform 或 Cloudify 通过 VM 蓝图构建 DB VM。我目前有一个配置了 MSSQLServer 的 VM,并且可以针对它编写 sql 文件以实例化我的数据库。但是,一旦我开始编写原始数据的脚本,就大小而言,我经常会耗尽内存。我知道,我可以手动增加属性中的内存等,或者在 CLI 中使用 sql 文件。我也知道 DTS 或 BCP 之类的东西,但我想我正在寻找的是关于通过 DevOps 管道自动部署 MS SQL DB 的最佳方法的建议。目的是使用 jenkins 并通过 power-shell 部署脚本。
最初的想法是强制 DB 所有者提供 bak/mdf 文件,并编写后续更新脚本。但我真的很感谢关于商业最佳方法的委员会,特别是如果你已经大规模地这样做了,例如。数以千计的应用程序。
如果它有助于我的管道的性质,我采用的方法需要同时适用于小型数据库的 100MB 和更大的数据库 - 例如高达 1-2TB。
【问题讨论】:
-
使用数据库项目并构建 DACPAC,这就是他们的设计目的。对于少量数据,您可以使用包含数据的 BACPAC。对于海量数据,
BACKUP/RESTORE绝对是您最快的选择(实际上,您多久部署一次 2 TB 数据库?!)但是如果您重视一致性而不是性能,那么下一个合乎逻辑的方法是bcp将所有数据转换为原生格式,并在部署 DACPAC 后将bcp重新输入。在任何情况下,当涉及到需要数据迁移的升级时,不要指望免费的午餐——这总是需要一些仔细的脚本编写。
标签: sql-server database jenkins devops