如何在没有实际部署的情况下测试 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 列不包含nulls,则部署成功,否则部署失败。因此,有几种方法可以在发布到生产之前检查部署。

    使用Script action 创建一个脚本,用于更新目标架构以匹配源架构。之后,您可以分析脚本以找出实际部署过程中可能出现的故障。 使用测试环境。您还可以使用备份或BACPAC 文件复制生产数据库并将其用作部署目标。

【讨论】:

以上是关于如何在没有实际部署的情况下测试 DACPAC 是不是可以部署的主要内容,如果未能解决你的问题,请参考以下文章

部署 DacPac 时如何在 SqlPackage.exe 中使用多个 SQLCMD 变量?

如何从 Azure DevOps DACPAC 部署中获取漂移报告?

如何将 DACPAC 部署到事务复制数据库

使用 c# 提高 dacpac 部署的性能

数据库项目 - 输出 dacpac

如何在 DACPAC 部署中仅部署一组选定的存储过程?