【发布时间】:2021-09-30 04:06:41
【问题描述】:
我正在通过SqlPackage.exe 将 DACPAC 部署到在 SQL Server 中具有大量事务复制的数据库服务器。 DACPAC 是作为 SQL Server 数据库项目的输出而构建的。当我尝试将 DACPAC 部署到启用了复制的数据库时,SqlPackage 执行返回错误,例如 Error SQL72035: [dbo].[SomeObject] is replicated and cannot be modified.
我找到了参数DoNotAlterReplicatedObjects,它不会在复制打开的情况下改变对象,并且会消除这些错误,这不是我想要做的。相反,我想更改所有对象,而不考虑复制作为部署的一部分。
我能想到的将 DACPAC 部署到这些复制数据库的唯一选择是:
- 在部署之前通过脚本删除复制,
- 通过 SqlPackage 部署 DACPAC,
- 部署后通过脚本重建复制。
不幸的是,数据库被大量复制,以至于上面的第 3 步需要 7 多个小时才能完成。所以这不是一个实际的解决方案。
有没有更好的方法来使用 SQL Server 数据库项目和 DACPAC 部署到具有大量复制的数据库?
我们将不胜感激。提前感谢您的建议。
【问题讨论】:
-
这里显而易见的答案是不使用复制的 SQL 数据库。我无法想象依靠自动更新脚本来处理如此重要以至于像这样复制的数据。看来你的欲望有冲突。
-
DACPAC 部署试图使 PRD 看起来像从其构建位置看的 DEV。您的 DEV 环境中没有启用复制功能吗?
-
我们在较低的环境中也启用了复制,我们发现在较低的环境中也会出现同样的错误。
-
这里有一些有希望的答案,但我无法弄清楚他们是否真的解决了它。 dba.stackexchange.com/questions/65568/…
-
一件事是要非常小心您正在更改的内容 - 不要重新排列列顺序,不要重命名很多对象等。如果您进行非常简单的更改,您不应该很多重建操作。在大多数情况下,添加/删除列和表不应该引起很多问题。您还可以检查生成的脚本,以了解在尝试部署之前会发生什么。
标签: sql-server database-migration sql-server-data-tools dacpac