22

直到几天前,我还能够使用 SQL Server 2014 SP1 CU6 (12.0.4449.0) 从 Azure 将 V12 BACPAC 导入我的本地服务器。

但是现在,当我尝试导入 BACPAC 时,我的 SQL Server Management Studio 2014 说:

“内部错误。内部目标平台类型 SqlAzureV12DatabaseSchemaProvider 不支持架构文件版本 '3.3'。(文件:D:\MyDB.bacpac)(Microsoft.Data.Tools.Schema.Sql)”

我想我拥有最新的 SQL Server 2014 SP1 版本,其中包含所有最新更新(内部版本 12.0.4449.0),但我仍然收到此错误。

请帮忙!

谢谢

4

3 回答 3

21

修复:要解决此问题,请使用安装最新 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" />
于 2016-04-21T01:03:26.440 回答
2

Kevin 给出的简单“Alter”解决方案(ALTER DATABASE SCOPED CONFIGURATION SET MAXDOP = 0)似乎是解决任何有客户问题的人的危机的快速解决方案。不要介意安装最新的 DAC 或 SQL Server 2016,没有必要解决当前的问题,加上所有处于预览状态(测试版)的问题。您现在几乎不想将其引入生产环境

如果我们在上周末设置了一个由 MSFT 自动更新的 v11 数据库,这显然只会发生在我们身上。对于我们取消并自行应用升级的那些数据库升级,Max Degree Of Parallelism 字段似乎没有设置为 0,并且发生了此错误。我们有大约 300 分贝,并注意到这是模式

仅供参考:您可以使用此 SQL 查询检查该问题值

    SELECT [dbscm].[value]                         AS [MaxDop],
    [dbscm].[value_for_secondary]           AS [MaxDopForSecondary],
    [dbscl].[value]                         AS [LegacyCardinalityEstimation],
    [dbscl].[value_for_secondary]           AS    
    [LegacyCardinalityEstimationForSecondary],
    [dbscp].[value]                         AS [ParameterSniffing],
    [dbscp].[value_for_secondary]           AS 
    [ParameterSniffingForSecondary],
    [dbscq].[value]                         AS [QueryOptimizerHotfixes],
    [dbscq].[value_for_secondary]           AS 
    [QueryOptimizerHotfixesForSecondary]  
    FROM [sys].[databases] [db] WITH (NOLOCK)
    LEFT JOIN [sys].[database_scoped_configurations] AS [dbscm] WITH
    (NOLOCK) ON [dbscm].[name] = N'MAXDOP'
    LEFT JOIN [sys].[database_scoped_configurations] AS [dbscl] WITH  
    (NOLOCK) ON [dbscl].[name] = N'LEGACY_CARDINALITY_ESTIMATION'
    LEFT JOIN [sys].[database_scoped_configurations] AS [dbscp] WITH
    (NOLOCK) ON [dbscp].[name] = N'PARAMETER_SNIFFING'
    LEFT JOIN [sys].[database_scoped_configurations] AS [dbscq] WITH 
    (NOLOCK) ON [dbscq].[name] = N'QUERY_OPTIMIZER_HOTFIXES'
    WHERE [db].[name] = DB_NAME(); 
于 2016-04-21T20:30:57.120 回答
0

当我将导出从 azure 导入到本地 MSSQLLocalDB 实例(用于本地调试)时,我遇到了同样的问题。

我不想接触 azure db,也不想下载最新的预览版。

所以我所做的在我的本地数据库上如下:

  1. 执行了更改查询,将值设置为MAXDOP1
    ALTER DATABASE SCOPED CONFIGURATION SET MAXDOP = 1

  2. 导入 bacpac,运行成功。

  3. 将 的值MAXDOP设为 0
    ALTER DATABASE SCOPED CONFIGURATION SET MAXDOP = 0

希望它可以帮助类似用例的人

于 2017-08-22T14:12:50.610 回答