如何在没有实际部署的情况下测试 DACPAC 是不是可以部署
Posted
技术标签:
【中文标题】如何在没有实际部署的情况下测试 DACPAC 是不是可以部署【英文标题】:How to test if DACPAC can be deployed without actual deployment如何在没有实际部署的情况下测试 DACPAC 是否可以部署 【发布时间】:2018-01-17 08:34:24 【问题描述】:是否可以在不部署的情况下针对数据库测试 DACPAC?如果没有发现错误,带有 Action=Deploy 的 sqlpackage.exe 将部署它,并且 Action=Report 只会生成包含更改列表的报告,但部署仍然可能失败。
【问题讨论】:
在没有实际执行脚本的情况下,很难预测(特定版本的)SQL Server 会做什么(针对特定时间点的特定配置);即使 DACPAC 部署实施了类似的措施,也没有理由对结果抱有太大的信心。 This answer 讨论了一些处理潜在故障的选项,但是一旦您确定它应该工作,就无法替代实际运行脚本。 如果您的 DACPAC 使用版本控制,那么检查您是否确实从版本 X 升级到 X+1 以验证脚本是否正常工作就足够了(忽略正在进行的事务、锁定等运行时问题.) 当然,这假设没有人进行临时更改,但您可以通过验证部署版本 X(当前版本)的报告是否表明不会导致任何操作来检查这些(在某种程度上)。 感谢@JeroenMostert 【参考方案1】:Documentation 说:
SqlPackage.exe 发布操作增量更新目标数据库的架构以匹配源数据库的结构。
因此,操作的成功取决于要更新的数据库的当前状态。例如,DAC包定义了下表:
table MyTable (
X int not null
);
而当前表的定义是
table MyTable (
X int null
);
如果X
列不包含null
s,则部署成功,否则部署失败。因此,有几种方法可以在发布到生产之前检查部署。
-
使用
Script
action 创建一个脚本,用于更新目标架构以匹配源架构。之后,您可以分析脚本以找出实际部署过程中可能出现的故障。
使用测试环境。您还可以使用备份或BACPAC 文件复制生产数据库并将其用作部署目标。
【讨论】:
以上是关于如何在没有实际部署的情况下测试 DACPAC 是不是可以部署的主要内容,如果未能解决你的问题,请参考以下文章
部署 DacPac 时如何在 SqlPackage.exe 中使用多个 SQLCMD 变量?