web-dev-qa-db-fra.com

Erreur d'importation SQL Azure V12 BACPAC: "Le type de plateforme cible interne SqlAzureV12DatabaseSchemaProvider ne prend pas en charge la version de fichier de schéma '3.3'"

Il y a quelques jours à peine, j'étais capable d'importer un BACPAC V12 à partir d'Azure sur mon serveur local avec SQL Server 2014 SP1 CU6 (12.0.4449.0).

Mais maintenant, lorsque j'essaie d'importer BACPAC, mon SQL Server Management Studio 2014 dit: 

"Erreur interne. Le type de plate-forme cible interne SqlAzureV12DatabaseSchemaProvider ne prend pas en charge la version de fichier de schéma '3.3'. (Fichier: D:\MyDB.bacpac) (Microsoft.Data.Tools.Schema.Sql)"

Je pense avoir la dernière version de SQL Server 2014 SP1 avec toutes les dernières mises à jour (version 12.0.4449.0), mais j'ai toujours cette erreur.

S'il vous plaît aider!

Merci

21
Stefano

Fix: Pour résoudre, utilisez le dernière version de SSMS Preview qui installe la version la plus récente de DacFx. Cela comprend comment traiter les dernières fonctionnalités, notamment les options de configuration de portée de base de données. Une fois que cela est installé, vous pouvez importer à l'intérieur de SSMS ou utiliser SqlPackage à partir de l'emplacement «C:\Program Files (x86)\Microsoft SQL Server\130\DAC\bin» si vous préférez les outils de ligne de commande.

Vous pouvez également exécuter la commande suivante sur la base de données Azure pour redéfinir la valeur MaxDop sur la valeur par défaut, car il semble que le problème soit passé à 1. Les futures exportations devraient maintenant générer des bacpacs pouvant être compris par les outils client 2014, en supposant qu'aucun autre de nouvelles fonctionnalités Azure ont été ajoutées à la base de données.

ALTER DATABASE SCOPED CONFIGURATION SET MAXDOP = 0

Cause racine/Pourquoi est-ce que cela se produit: La cause première est que votre base de données a des valeurs non définies par défaut pour une ou plusieurs options de configuration de la base de données ciblée. Comme ils n'ont été ajoutés que très récemment, les anciennes versions des outils ne comprenaient pas comment les déployer et donc les blocs DacFx. Ce sont les seuls propriétés/objets avec cette version de schéma élevée. En gros, chaque fois que vous voyez une erreur du type «ne prend pas en charge la version de fichier de schéma '3.3'», cela signifie que vous devez effectuer une mise à niveau. Une cause possible est si la base de données a été migrée depuis AzureV1 -> AzureV12, ce qui définit l'option MaxDop sur 1 par rapport à 0 par défaut. 

Notes: Il est vivement recommandé d'utiliser la dernière version de SSMS et de la maintenir à jour via les notifications de mise à jour intégrées si vous utilisez Azure. cela vous évitera de vous heurter à des problèmes comme celui-ci. En règle générale, si vous utilisez uniquement la surface SQL Server 2014, vous devriez pouvoir utiliser des outils plus anciens lors de la réimportation, mais avec le grand nombre d'avancées récentes dans les cas Azure SQL DB comme celui-ci, les nouveaux outils apparaîtront de plus en plus souvent. sont nécessaires pour fonctionner comme prévu. 

Pour référence, j’inclue les options de configuration de la base de données ciblées et leurs valeurs par défaut ci-dessous. Si l'une de ces propriétés n'est pas définie par défaut sur la base de données lors de l'exportation, la version du schéma est repoussée afin que les anciens outils ne soient pas endommagés.

<!-- 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

La solution simple "Alter" proposée par Kevin (ALTER DATABASE SETUP DE CONFIGURATION MAXDOP = 0) semble être la solution rapide pour résoudre la crise pour quiconque ayant des problèmes de baisse de clientèle. Qu'à cela ne tienne, d'installer la dernière version du DAC ou de SQL Server 2016, il n'est pas nécessaire de résoudre le problème immédiat, mais également tout ce qui est dans l'état de prévisualisation (bêta). Peu de chose que vous souhaitiez introduire dans un environnement de production en ce moment

Cela ne nous est apparemment arrivé que si nous avions une base de données v11 en attente de mise à jour automatique par MSFT définie pour le week-end dernier. Pour les mises à niveau de base de données que nous avons annulées et appliquées nous-mêmes, le champ Max Degré de parallélisme ne semble pas avoir été défini sur 0 et cette erreur s'est produite. Nous avons environ 300 db et avons remarqué cela comme motif

FYI: Vous pouvez vérifier la valeur de ce problème avec cette requête 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

Je rencontrais le même problème lors de l'importation d'une exportation d'Azure vers mon instance MSSQLLocalDB locale (pour le débogage local). 

Je ne voulais pas toucher à la base de données Azure et je ne voulais pas télécharger le dernier aperçu. 

Donc, ce que j'ai fait était comme suit Sur mon db local

  1. Exécuté la requête de modification définissant la valeur de MAXDOP à 1 
    ALTER DATABASE SCOPED CONFIGURATION SET MAXDOP = 1

  2. Importé le bacpac, qui a fonctionné avec succès.

  3. Reste la valeur de MAXDOP à 0
    ALTER DATABASE SCOPED CONFIGURATION SET MAXDOP = 0

J'espère que cela aidera quelqu'un dans un cas d'utilisation similaire

0
Swapnil17