Ошибка импорта SQL Azure V12 BACPAC: "Внутренний тип целевой платформы SqlAzureV12DatabaseSchemaProvider не поддерживает версию файла схемы" 3.3 ""
Еще несколько дней назад мне удалось импортировать BACPAC V12 из Azure на мой локальный сервер с SQL Server 2014 SP1 CU6 (12.0.4449.0).
Но теперь, когда я пытаюсь импортировать 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), но все равно я получаю эту ошибку.
Пожалуйста помоги!
Спасибо
3 ответа
Исправление: для решения проблемы используйте последнюю версию SSMS Preview, которая устанавливает самую последнюю версию DacFx. Он понимает, как обрабатывать новейшие функции, в частности, параметры конфигурации базы данных. После того, как это будет установлено, вы можете Импортировать из SSMS или используя SqlPackage из папки "C:\Program Files (x86)\Microsoft SQL Server\130\DAC\bin", если вы предпочитаете инструменты командной строки.
В качестве альтернативы выполните следующую команду в базе данных Azure, чтобы установить значение MaxDop обратно по умолчанию, так как, по-видимому, проблема заключается в том, что это значение было изменено на 1. Теперь при будущем экспорте должны создаваться bacpac, которые могут быть поняты клиентскими инструментами 2014 года, при условии, что нет других новые функции Azure были добавлены в БД.
ALTER DATABASE SCOPED CONFIGURATION SET MAXDOP = 0
Основная причина / почему это происходит: Основная причина заключается в том, что ваша база данных имеет значения не по умолчанию для 1 или более параметров конфигурации базы данных. Поскольку они были добавлены совсем недавно, более старые версии инструментов не понимают, как их развертывать, и поэтому блоки DacFx. Это единственные свойства / объекты с такой высокой версией схемы. По сути, каждый раз, когда вы видите ошибку типа "не поддерживает версию файла схемы" 3.3 "", это означает, что вам необходимо выполнить обновление. Одна из возможных причин заключается в том, что база данных была перенесена из AzureV1 -> AzureV12, которая устанавливает для параметра MaxDop значение 1 по умолчанию, равное 0.
Примечания. Настоятельно рекомендуется использовать последнюю версию SSMS и обновлять ее с помощью встроенных уведомлений об обновлениях, если вы работаете с Azure. это поможет вам избежать подобных проблем. Как правило, если вы используете только поверхность SQL Server 2014, вы сможете использовать более старые инструменты при повторном импорте, но с огромным количеством недавних улучшений в таких случаях с базами данных SQL Azure, как это, все чаще и чаще будут появляться новые инструменты. необходимы для того, чтобы выполнить как ожидалось.
Для справки, я включаю параметры конфигурации базы данных и их значения по умолчанию ниже. Если какое-либо из этих свойств не является значением по умолчанию в БД, при экспорте версии схемы возникает проблема, так что старые инструменты не ломаются.
<!-- 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" />
Простое решение "Alter", предложенное Кевином (ALTER DATABASE SCOPED CONFIGURATION SET MAXDOP = 0), кажется быстрым решением для разрешения кризиса для всех, у кого есть проблемы с клиентами. Не берите в голову установку последнего DAC или SQL Server 2016, нет необходимости решать немедленную проблему, плюс все, что находится в состоянии предварительного просмотра (бета). Вряд ли что-то, что вы хотите внедрить в производственную среду прямо сейчас
Это, очевидно, произошло с нами только в том случае, если мы установили базу данных v11, ожидающую автоматического обновления MSFT, на эти последние выходные. Для этих обновлений базы данных мы отменили и применили обновление самостоятельно, поле 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();
Я столкнулся с той же проблемой, когда импортировал экспорт из лазури в мой локальный экземпляр MSSQLLocalDB (для локальной отладки).
Я не хотел трогать лазурную БД и не хотел загружать последнюю версию превью.
Итак, то, что я сделал, было следующим На моей локальной базе данных:
Выполнил запрос на изменение, установив значение для
MAXDOP
до 1ALTER DATABASE SCOPED CONFIGURATION SET MAXDOP = 1
Импортировал bacpac, который успешно работал.
Остальное значение
MAXDOP
до 0ALTER DATABASE SCOPED CONFIGURATION SET MAXDOP = 0
Надеюсь, это поможет кому-то в подобном случае использования