2016-04-20 13 views
19

Do niedawna byłem w stanie zaimportować V12 BACPAC z Azure na mój serwer lokalny z SQL Server 2014 SP1 CU6 (12.0.4449.0).Błąd importowania BACPAC SQL Azure V12: "Wewnętrzny typ platformy docelowej SqlAzureV12DatabaseSchemaProvider nie obsługuje wersji pliku" 3.3 ""

Ale teraz, gdy próbuję zaimportować BacPac, mój SQL Server Management Studio 2014 mówi:.

„Błąd wewnętrzny Wewnętrzny typ platformy docelowej SqlAzureV12DatabaseSchemaProvider nie obsługuje wersji pliku schema '3,3' (File.: D: \ MyDB.bacpac) (Microsoft.Data.Tools.Schema.Sql) "

Myślę, że mam najnowszą wersję programu SQL Server 2014 SP1 ze wszystkimi najnowszymi aktualizacjami (kompilacja 12.0.4449.0), ale nadal otrzymuję ten błąd.

Proszę pomóc!

Dzięki

+0

Przepraszam, ale trochę mylące. Mam rację, że masz na myśli, że byłeś w stanie zaimportować BACPAC pewnego dnia i nie byłeś w stanie zaimportować BACPAC z tą samą wersją SSMS innego dnia? Jesteś pewien, że nie było żadnych aktualizacji? –

+0

Dokładnie! Udało mi się zaimportować następujący plik: MyDB-2016-4-18-21-51.bacpac i dwa dni później MyDB-2016-4-20-10-18.bacpac dał mi błąd! I nie było żadnych aktualizacji. Dwa dni :) – Stefano

Odpowiedz

20

Fix: Aby rozwiązać, należy użyć latest SSMS Preview który instaluje najbardziej aktualnych wersji DacFx. Rozumie, jak przetwarzać najnowsze funkcje, w szczególności opcje konfiguracji z zakresu bazy danych. Po zainstalowaniu możesz importować pliki w SSMS lub SqlPackage z lokalizacji "C: \ Program Files (x86) \ Microsoft SQL Server \ 130 \ DAC \ bin", jeśli wolisz narzędzia wiersza poleceń.

Alternatywnie, wykonaj następujące polecenie na platformie Azure DB, aby ustawić wartość MaxDop z powrotem na domyślną, ponieważ wydaje się, że problem został zmieniony na 1. Przyszłe eksportowanie powinno teraz generować bacpaki, które mogą być zrozumiane przez narzędzia klienckie 2014 , zakładając, że żadne inne nowe funkcje Azure nie zostały dodane do DB.

ALTER DATABASE SCOPED CONFIGURATION SET MAXDOP = 0 

głównej przyczyna/dlaczego tak się dzieje: Przyczyną jest to, że baza danych nie mają domyślne wartości dla 1 lub więcej baz danych z lunetą opcji konfiguracyjnych. Ponieważ zostały one dodane dopiero niedawno, starsze wersje narzędzi nie wiedzą, jak je wdrożyć, a więc blokuje DacFx. Są to jedyne właściwości/obiekty o tej wysokiej wersji schematu. Zasadniczo za każdym razem, gdy widzisz błąd typu "nie obsługuje wersji pliku schematu" 3.3 ", oznacza to, że musisz dokonać aktualizacji. Jedną z możliwych przyczyn jest to, czy baza danych została przeniesione z AzureV1 -> AzureV12, który ustawia opcję MAXDOP do 1 z domyślnej 0.

Uwagi: To zdecydowanie zaleca się korzystanie z najnowszej SSMS i zachować go do data za pośrednictwem wbudowanych powiadomień o aktualizacji, jeśli pracujesz z Azure. Dzięki temu unikniesz problemów z takimi jak ten. Zasadniczo, jeśli korzystasz tylko z obszaru SQL Server 2014, powinieneś być w stanie używać starszych narzędzi podczas ponownego importu, ale z ogromną liczbą najnowszych osiągnięć w takich przypadkach, jak Azure SQL DB, będzie coraz częściej pojawiać się tam, gdzie nowe narzędzia są wymagane, aby wykonać zgodnie z oczekiwaniami.

W celach informacyjnych poniżej zamieszczam opcje konfiguracji zakresu bazy danych i ich domyślne wartości. Jeśli którakolwiek z tych właściwości nie jest domyślna w DB podczas eksportowania, wersja schematu zostaje podważona, aby stare narzędzia się nie zepsuły.

<!-- 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" /> 
+0

Działa, dzięki! – Stefano

+0

Dzięki, ale dlaczego opcje konfiguracji z zakresami bazy danych zmieniałyby się z jednego dnia na drugi? Mam taki sam problem na stronie klienta, gdzie kopie zapasowe do 18 kwietnia są dobre, ale od 19 kwietnia zaczęły się nie udać. W tym czasie nie wprowadziliśmy żadnych zmian w schemacie. – yowl00

+0

@ yowl00 - to dobre pytanie. Kontynuuję pracę z głównym zespołem produktów, który dodał tę opcję, aby sprawdzić, czy nic nie zmienia automatycznie ustawień. Dla odniesienia, problem dla innego klienta wydaje się, że MAXDOP jest ustawiony na 1 (domyślnie jest 0). Jedynym sposobem, aby to się stało teraz, jest aktualizacja DB z V11 -> V12, ponieważ była to wartość flagi w tej wersji. Dodam obejście odpowiedzi, jeśli nie chcesz aktualizować narzędzi klienta. –

2

Proste rozwiązanie „Alter” podane przez Kevin (ALTER DATABASE scoped konfiguracji ustalonej MAXDOP = 0) wydaje się być szybkie rozwiązanie, aby rozwiązać kryzys dla każdego, problemy klient-dół. Nie ma nic na temat instalowania najnowszego DAC lub SQL Server 2016, nie jest konieczne, aby rozwiązać natychmiastowy problem, PLUS wszystko, co jest w stanie podglądu (beta).Prawie nie wszystko, co chcesz teraz wprowadzić do środowiska produkcyjnego.

To najwyraźniej zdarzyło się tylko wtedy, gdy dysponowaliśmy bazą danych w wersji 11 oczekującej na aktualizację przez MSFT dla tego ostatniego weekendu. W przypadku aktualizacji baz danych, które anulowaliśmy i zastosowaliśmy aktualizację sami, pole Maksymalne równoległości nie wydaje się być ustawione na 0 i wystąpił ten błąd. Mamy około 300 DB i zauważył to jako wzór

FYI: Możesz sprawdzić tę wartość problem dotyczący tego zapytania 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(); 
0

byłem stoi ten sam problem, a ja importowania eksport z Azure moja lokalna instancja MSSQLLocalDB (do lokalnego debugowania).

Nie chciałem dotykać lazurowej bazy danych ani nie chciałem pobrać najnowszego podglądu.

Więc co zrobiłem było następująco Na moim lokalnym db:

  1. wykonał alter zapytanie ustawienie wartości dla MAXDOP do 1
    ALTER DATABASE SCOPED CONFIGURATION SET MAXDOP = 1

  2. przywoził BacPac, która prowadziła z powodzeniem.

  3. Reszta wartość MAXDOP do 0
    ALTER DATABASE SCOPED CONFIGURATION SET MAXDOP = 0

Nadzieja pomaga kogoś w podobnym przypadku użycia

Powiązane problemy