【问题标题】:System DMV's missing from SQL Server 2017 master.dacpac in SSDT 2015SSDT 2015 中的 SQL Server 2017 master.dacpac 中缺少系统 DMV
【发布时间】:2018-04-24 11:00:01
【问题描述】:

我已将 Ola Hallengren 出色的维护解决方案脚本整合到 DBA 工具数据库项目中。这是使用 SSDT 2015 和 SQL Server 2012 目标平台维护的。该项目包括对内置系统数据库 master 和 msdb 的引用。项目构建成功。

Ola 最近updated 他的脚本现在包含对新 SQL Server 2017 DMV 的引用,因此将更新的脚本合并到我的数据库项目中会为新 DMV 生成未解决的引用错误。

SQL71502: Procedure: [dbo].[DatabaseBackup] has an unresolved reference to object [sys].[dm_os_host_info]
SQL71502: Procedure: [dbo].[DatabaseBackup] has an unresolved reference to object [sys].[dm_db_log_stats]

虽然我没有在任何地方安装 SQL Server 2017,但我尝试将目标平台更新到 SQL Server 2017,然后删除并重新创建主数据库引用(即将 master.dacpac 更新到 SQL Server 2017 版本),但这并没有消除构建错误。

引用的dacpac的文件路径是:

C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\Extensions\Microsoft\SQLDB\Extensions\SqlServer\140\SqlSchemas\master.dacpac

当我检查 dacpac 时,新 DMV 的 [sys].[dm_os_host_info] 和 [sys].[dm_db_log_stats] 不在那里。

我昨天联系了 Slack,Peter Schott 向我推荐了一篇他写的关于如何更新 master.dacpac (link) 的优秀博文。理论是抓住丢失的DMV并将它们自己添加到master.dacpac。我必须启动一台测试机器并安装 SQL Server 2017 才能做到这一点,但它作为一种解决方法是可行的。

但是,这感觉像是我不应该做的事情。毕竟这些是master.dacpac中缺少的系统DMV,而不是我自己的代码添加到master数据库中。

所以,我想我的问题是:

  1. 这是我本地 SSDT 安装的问题,还是 SSDT 安装的 dacpac 中缺少系统 DMV 的一般问题?
  2. 如何在不自行破解的情况下获取更新(和签名)的 master.dacpac?

【问题讨论】:

  • 这是一个普遍问题。从 here 安装最新的 SSDT (15.6.0) 会给你一个 master.dacpac 和一个缺少这些 DMV 的 model.xml,此外还有一个建议日期 2016-10-16(这也是 SQL 的发布日期Server 2017 CTP1,尽管这并不一定意味着此后没有更新)。该页面建议forum 联系团队。
  • 感谢@JeroenMostert,我已经在 MSDN 论坛上提出了这个问题。

标签: sql-server sql-server-data-tools


【解决方案1】:

虽然我没有解决原始问题(master.dacpac 中缺少系统 DMV),但我确实对我最初提出的两个问题有答案。

是的,这是 SSDT 附带的 master.dacpac 的一般问题。不,似乎没有任何方法可以在不使用之前详述的解决方法自行破解的情况下获取更新的 master.dacpac。

我现在在UserVoice 上提出了一个项目,请求一种在 SSDT 中更新系统数据库 DACPACs 的方法。 如果有机会,请考虑为它投票。谢谢。

【讨论】:

    【解决方案2】:

    我为此做的是

    1. 添加额外的 SSDT 项目(例如“master_expanded”)
    2. 为缺少的引用编写一些虚拟项目(例如,具有以下列的虚拟表:select * from sys.dm_exec_describe_first_result_set('select * from [sys].[dm_os_host_info]', default, default);
    3. 添加 master_expanded 作为原始项目的数据库引用(“相同的数据库,相同的服务器”)——现在原始项目可以找到 sys.dm_os_host_info

    请注意,虚拟架构对象必须从实际部署中排除。我们使用模式比较文件 (scmp),因此我们只是排除了这些对象。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-31
      • 2016-07-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多