修复:要解决此问题,请使用安装最新 DacFx 版本的最新 SSMS 预览。这了解如何处理最新功能,尤其是数据库范围配置选项。安装后,如果您更喜欢命令行工具,您可以在 SSMS 中导入或使用“C:\Program Files (x86)\Microsoft SQL Server\130\DAC\bin”位置的 SqlPackage。
或者,在 Azure DB 上执行以下命令将 MaxDop 值设置回默认值,因为问题似乎已更改为 1。未来的导出现在应该生成 2014 客户端工具可以理解的 bacpacs,假设没有其他新的 Azure 功能已添加到数据库中。
ALTER DATABASE SCOPED CONFIGURATION SET MAXDOP = 0
根本原因/为什么会发生这种情况:根本原因是您的数据库具有 1 个或多个 Database Scoped Configuration 选项的非默认值。由于这些只是最近才添加的,旧版本的工具不了解如何部署它们,因此 DacFx 块。这些是唯一具有如此高架构版本的属性/对象。基本上,任何时候您看到诸如“不支持架构文件版本'3.3'”之类的错误时,都意味着您需要升级。一个可能的原因是,如果数据库是从 AzureV1 -> AzureV12 迁移的,这会将 MaxDop 选项从其默认值 0 设置为 1。
注意:如果您使用 Azure,强烈建议您使用最新的 SSMS 并通过内置更新通知使其保持最新状态。它将确保您避免遇到此类问题。通常,如果您只使用 SQL Server 2014 外围区域,则在重新导入时应该能够使用旧工具,但是随着 Azure SQL DB 案例的大量最新进展,在新工具的情况下会越来越频繁地出现需要才能按预期执行。
作为参考,我在下面包含了 Database Scoped Configuration 选项及其默认值。如果在导出架构版本时这些属性中的任何一个在 DB 上不是默认的,则会发生碰撞,以便旧工具不会损坏。
<!-- Database Scoped Configurations-->
<Property Name="MaxDop" Type="System.Int32" DefaultValue="0" />
<Property Name="MaxDopForSecondary" Type="System.Int32?" DefaultValue="null"/>
<Property Name="LegacyCardinalityEstimation" Type="System.Boolean" DefaultValue="false" />
<Property Name="LegacyCardinalityEstimationForSecondary" Type="System.Boolean?" DefaultValue="null" />
<Property Name="ParameterSniffing" Type="System.Boolean" DefaultValue="true" />
<Property Name="ParameterSniffingForSecondary" Type="System.Boolean?" DefaultValue="null" />
<Property Name="QueryOptimizerHotfixes" Type="System.Boolean" DefaultValue="false" />
<Property Name="QueryOptimizerHotfixesForSecondary" Type="System.Boolean?" DefaultValue="null" />