【问题标题】:Extracting a DACPAC from the master Database从主数据库中提取 DACPAC
【发布时间】:2019-03-04 12:01:18
【问题描述】:

我正在努力将现有的 Azure V12 数据库引入 SSDT 项目,以便我们可以开始使用源代码控制和 CI 管道。

我正在努力解决的问题是在某些代码中引用了“sys.fn_get_audit_file”,它给出了“未解决的引用”错误。我不希望在构建项目时忽略任何错误,因此一直在尝试正确解决此问题。将数据库引用添加到 master 并不能解决问题,而且 SSDT 附带的 master.dacpac 文件似乎没有该 sys 函数的定义(在 model.xml 中)。我检查了 VS 文件夹中所有可用的 master.dacpac 文件版本,甚至尝试了 VS 2019 预览版,看看是否会附带更新版本的 master.dacpac。

在网上四处搜索,我意识到其他人在 master.dacpac 中缺少对象时遇到了类似的问题,建议的解决方案是编辑 model.xml,重新打包并更正校验和。我宁愿不走这条路,所以我尝试使用 SqlPackage 从 Azure 中的主数据库中提取 DACPAC,但提取的模型中几乎没有对象定义。

有什么建议吗?

【问题讨论】:

  • 查看此解决方法是否适合您:1) 删除主引用(如果需要),2) 将目标平台更改为 SQL Server vNext,3) 添加系统数据库主引用 4) 将目标平台更改回Azure SQL 数据库 V12。
  • 这实际上几乎解决了问题,因为 vNext 版本似乎确实在其 model.xml 中有新对象,但导致项目中对“sys”的每个引用都给出错误,即使解决方案无论新错误如何编译。主参考上有一个警告标志,并且在本地构建期间会忽略与其相关的错误。但是在 Azure DevOps (VSTS) 中完成时构建仍然失败。我不是 100% 这是相关的,但即使文件在那里,它也会失败并出现“无法加载 master.dacpac”错误。
  • 即使 Azure DevOps 有效,(忽略的)错误列表对开发人员来说也是一个挑战,因为他们都需要知道忽略与主相关的错误,并找出哪些错误在它们发生时真正重要'正在工作。

标签: azure-sql-database sql-server-data-tools sqlpackage


【解决方案1】:

应该有人向微软的团队提出这个问题 - 我知道他们在这里监控,所以也许有人可以提供帮助??

与此同时,azure 似乎支持fn_get_audit_file,无论如何它都是根据文档。

我创建了几个 dacpac,欢迎使用,有旧的 azure 版本:

https://the.agilesql.club/assets/dacpacs/azure/master.dacpac

和 v12 版本:

https://the.agilesql.club/assets/dacpacs/azurev12/master.dacpac

我所做的是从我的机器(与 2017 年相比)中获取现有的 azure master dacpac,并从非 azure 版本中添加 sys.fn_get_audit_sql 元素。

为此,我使用 7zip 提取 model.xml,然后编辑 xml 文件并将 model.xml 文件复制回 dacpac。

这确实会导致模型的校验和错误,所以我有一个小应用程序,它使用正确的校验和重写 origin.xml,如果有人想要它,我会将这个应用程序放在 github 上,但它是这个:

https://github.com/GoEddie/Dacpac-References/tree/master/src/GOEddie.Dacpac.References

https://github.com/GoEddie/Dacpac-References/blob/master/src/GOEddie.Dacpac.References/ModelChecksumWriter.cs

当我拥有 master.dacpac's 时,我将它们复制回 VS 2017:

C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\Common7\IDE\Extensions\Microsoft\SQLDB\Extensions\SqlServer\AzureV12 C:\Program Files (x86)\Microsoft Visual Studio\2017\Commnuity\Common7\IDE\Extensions\Microsoft\SQLDB\Extensions\SqlServer\AzureV12 C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\IDE\Extensions\Microsoft\SQLDB\Extensions\SqlServer\AzureV12

(取决于版本)

这让我可以在 azure / azurev12 项目中使用 fn_get_audit_sql:

希望对你有帮助!

编辑

【讨论】:

  • 谢谢埃德。这是我试图避免的解决方案,因为每次引用新的 sys 对象时我可能都必须修改那个 master.dacpac,但我想现在没有替代方案。
猜你喜欢
  • 2022-11-02
  • 2015-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-26
相关资源
最近更新 更多