web-dev-qa-db-ja.com

SQL Azure V12 BACPACインポートエラー:「内部ターゲットプラットフォームタイプSqlAzureV12DatabaseSchemaProviderはスキーマファイルバージョン '3.3'をサポートしていません」

ほんの数日前まで、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)を使用していると思いますが、それでもこのエラーが発生します。

助けてください!

ありがとう

22
Stefano

修正:解決するには、最新のDacFxバージョンをインストールする 最新のSSMSプレビュー を使用します。これは、最新の機能、特にデータベーススコープの構成オプションの処理方法を理解しています。これをインストールすると、コマンドラインツールを使用する場合は、SSMS内にインポートするか、「C:\ Program Files(x86)\ Microsoft SQL Server\130\DAC\bin」の場所からSqlPackageを使用してインポートできます。

または、Azure DBで次のコマンドを実行して、MaxDop値をデフォルトに戻します。これは、これが1に変更されているように見えるためです。今後のエクスポートでは、2014クライアントツールで理解できるバックパックが生成されるはずです。新しいAzure機能がDBに追加されました。

ALTER DATABASE SCOPED CONFIGURATION SET MAXDOP = 0

根本的な原因/これが発生する理由:根本的な原因は、データベースに1つ以上のデータベーススコープ設定オプションの非デフォルト値があることです。これらはごく最近追加されたばかりなので、古いバージョンのツールはそれらをデプロイする方法を理解していないため、DacFxブロックです。これらは、その高いスキーマバージョンを持つ唯一のプロパティ/オブジェクトです。基本的に、「スキーマファイルバージョン '3.3をサポートしていません」などのエラーが表示された場合は常に、アップグレードする必要があります。考えられる原因の1つは、データベースがAzureV1-> AzureV12から移行され、MaxDopオプションがデフォルトの0から1に設定された場合です。

注:Azureを使用している場合は、最新のSSMSを使用し、組み込みの更新通知を介して最新の状態に保つことを強くお勧めします。これにより、このような問題の発生を回避できます。一般に、SQL Server 2014の表面積のみを使用する場合は、再インポート時に古いツールを使用できるはずですが、Azure SQL DBの最近の膨大な数の進歩により、このようなケースでは、新しいツールが頻繁に出現します。期待どおりに実行するために必要です。

参考までに、データベーススコープ構成オプションとそのデフォルト値を以下に示します。スキーマバージョンのエクスポート時にこれらのプロパティのいずれかが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" />
21
Kevin Cunnane

Kevin(ALTER DATABASE SCOPED CONFIGURATION SET MAXDOP = 0)によって与えられた単純な "Alter"ソリューションは、顧客ダウンの問題を抱えているすべての人の危機を解決するための迅速なソリューションのようです。最新のDACまたはSQL Server 2016のインストールについては気にしないでください。差し迫った問題を解決する必要はありません。さらに、プレビューステータス(ベータ)にあるものすべてを解決します。現在、本番環境に導入したいものはほとんどありません

これは明らかに、先週末にMSFTによる自動更新を保留するv11データベースが設定されている場合にのみ発生しました。私たちが自分でキャンセルしてアップグレードを適用したデータベースのアップグレードの場合、[並列処理の最大度数]フィールドが0に設定されていないようで、このエラーが発生しました。約300 dbがあり、これがパターンであることに気付きました

参考:この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(); 
2
SpicyMikey

AzureからローカルMSSQLLocalDBインスタンス(ローカルデバッグ用)にエクスポートをインポートしているときにも、同じ問題に直面していました。

Azure dbには触れたくなかったし、最新のプレビューをダウンロードしたくもなかった。

だから私がやったことは次のとおりでしたlocal db

  1. MAXDOPの値を1に設定して変更クエリを実行しました
    ALTER DATABASE SCOPED CONFIGURATION SET MAXDOP = 1

  2. 正常に実行されたbacpacをインポートしました。

  3. MAXDOPの値を0にリセットします
    ALTER DATABASE SCOPED CONFIGURATION SET MAXDOP = 0

同様のユースケースで誰かを助けることを願っています

0
Swapnil17