Извлечение DACPAC из основной базы данных

Я работаю над переносом существующей базы данных Azure V12 в проект SSDT, чтобы мы могли начать использовать систему управления версиями и конвейеры непрерывной интеграции.

Проблема, с которой я борюсь, заключается в том, что в некоторых частях кода есть ссылка на «sys.fn_get_audit_file», и это дает ошибку «неразрешенная ссылка». Я не хочу, чтобы какие-либо ошибки игнорировались при создании проекта, поэтому я пытался решить эту проблему правильно. Добавление ссылки на базу данных в master не решает проблему, и кажется, что файл master.dacpac, поставляемый с SSDT, не содержит определения (в model.xml) этой sys-функции. Я проверил все версии файлов master.dacpac, доступные в папках VS, и даже попробовал предварительный просмотр VS 2019, чтобы узнать, будет ли с ним поставляться более новая версия master.dacpac.

Покопавшись в сети, я понял, что у других людей были похожие проблемы с отсутствующими объектами в master.dacpac, и предложенное решение состояло в том, чтобы отредактировать model.xml, переупаковать и исправить контрольную сумму. Я бы предпочел не идти по этому пути, поэтому я попытался использовать SqlPackage для извлечения DACPAC из главной базы данных в Azure, но в извлеченной модели почти нет определений объектов.

Какие-либо предложения?


person Serital    schedule 04.03.2019    source источник
comment
Посмотрите, подходит ли вам этот обходной путь: 1) удалите основную ссылку (при необходимости), 2) измените целевую платформу на SQL Server vNext, 3) добавьте основную ссылку системной базы данных 4) измените целевую платформу обратно на Azure SQL Databse V12.   -  person Dan Guzman    schedule 04.03.2019
comment
Это на самом деле почти решило проблему, поскольку версия vNext, похоже, имеет новые объекты в своем model.xml, но приводила к тому, что каждая ссылка на sys в проекте выдавала ошибку, даже если решение скомпилировалось независимо от новых ошибок. На главной ссылке есть предупреждающий знак, и связанные с ним ошибки игнорируются во время локальной сборки. Но сборка по-прежнему не удалась при выполнении в Azure DevOps (VSTS). Я не на 100% уверен, что это связано, но происходит сбой из-за ошибки загрузки master.dacpac, хотя файл есть.   -  person Serital    schedule 05.03.2019
comment
Даже если бы Azure DevOps работал, список (игнорируемых) ошибок был бы проблемой для разработчиков, поскольку всем им нужно было бы знать, как игнорировать основные ошибки и выяснять, какие ошибки действительно имеют значение, когда они выполняют работу.   -  person Serital    schedule 05.03.2019


Ответы (1)


Кто-то должен поднять его вместе с командой Microsoft — я знаю, что они следят за этим здесь, так что, может быть, кто-то может помочь?

В то же время похоже, что fn_get_audit_file поддерживается на Azure, во всяком случае, согласно документации.

Я создал пару dacpac, которые вы можете использовать, есть старая лазурная версия:

https://the.agilesql.club/assets/dacpacs/azure/master.dacpac

и версия v12:

https://the.agilesql.club/assets/dacpacs/azurev12/master.dacpac

Что я сделал, так это взял существующий dacpac azure master с моей машины (по сравнению с 2017) и добавил элемент sys.fn_get_audit_sql из не-лазурной версии.

Для этого я использую 7zip для извлечения файла model.xml, затем редактирую файл xml и копирую файл model.xml обратно в dacpac.

Это приводит к модели с неправильной контрольной суммой, поэтому у меня есть небольшое приложение, которое переписывает origin.xml с правильной контрольной суммой, я размещу это приложение на github, если кто-то захочет, но это версия этого:

https://github.com/GoEddie/Dacpac-References/tree/master/src/GOEddie.Dacpac.References

См. https://github.com/GoEddie/Dacpac-References/blob/master/src/GOEddie.Dacpac.References/ModelChecksumWriter.cs

Когда у меня были файлы master.dacpac, я скопировал их обратно в VS 2017:

C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\Common7\IDE\Extensions\Microsoft\SQLDB\Extensions\SqlServer\AzureV12 C:\Program Files (x86)\Microsoft Visual Studio\2017\Commnuity\Common7 \IDE\Extensions\Microsoft\SQLDB\Extensions\SqlServer\AzureV12 C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\IDE\Extensions\Microsoft\SQLDB\Extensions\SqlServer\AzureV12

(зависит от издания)

Это позволяет мне использовать fn_get_audit_sql внутри проекта azure/azurev12:

введите здесь описание изображения

Надеюсь, поможет!

ed

person Ed Elliott    schedule 05.03.2019
comment
Спасибо, Эд. Это решение, которого я пытался избежать, поскольку мне, возможно, придется изменять этот master.dacpac каждый раз, когда ссылаются на новый объект sys, но я думаю, что на данный момент альтернативы нет. - person Serital; 07.03.2019