Редактировать: Обновлено, чтобы заявить, что он не висит, просто требуется ВОЗРАСТ!Dacpac Обновление базы данных Времена немного глупые
Я пытаюсь обновить существующую базу данных SQL-сервера, используя dacpac.
Я могу создать новую базу данных SQL-сервера с приведенным ниже примером за 30 секунд. Проблема, с которой я сталкиваюсь, заключается в том, что использование одного и того же dacpac, повторение процедуры (так что обновление существующей базы данных, а не создание заново) занимает 20 минут.
Возможно, если разница во времени, что ожидать? Используя комплексный подход Redgate SqlCompare, я нахожу время незаменимым.
Третий параметр метода развертывания: UpgradeExisting, который я устанавливаю в true - это все, что мне нужно сделать, или я что-то не хватает?
void Deploy(string TargetConnectionString, string TargetDatabaseName, string pathToSourceDACPAC)
{
DacServices dacServices = new DacServices(TargetConnectionString);
//Set up message and progress handlers
dacServices.Message += new EventHandler<DacMessageEventArgs>(dbServices_Message);
dacServices.ProgressChanged += new EventHandler<DacProgressEventArgs>(dbServices_ProgressChanged);
//Load the DACPAC
DacPackage dacpac = DacPackage.Load(pathToSourceDACPAC);
//Set Deployment Options
DacDeployOptions dacOptions = new DacDeployOptions();
dacOptions.AllowIncompatiblePlatform = true;
//Deploy the dacpac
dacServices.Deploy(dacpac, TargetDatabaseName, true, dacOptions);
}
//Event handlers...
void dbServices_Message(object sender, DacMessageEventArgs e)
{
OutputThis("DAC Message", e.Message.ToString());
}
void dbServices_ProgressChanged(object sender, DacProgressEventArgs e)
{
OutputThis(e.Status.ToString(), e.Message.ToString());
}
NB программа исчезает в эфир на линии dacServices.Deploy ..
Что произойдет, если вы попытаетесь просто сгенерировать скрипт из самого SSDT? Требуется ли какое-то время для создания/публикации? Является ли это действием сборки или действием публикации, которое занимает много времени? У вас много ссылок на БД? Если да, считаете ли вы, что вы удаляете ненужные объекты? Сколько объектов у вас в целевом БД/проекте? Время будет увеличиваться по мере добавления большего количества объектов, потому что вы их сравниваете. Вы также можете попробовать использовать SQLPackage.exe для изменения изменений и/или генерации сценария, чтобы увидеть, как это работает. Не конечная цель, но может помочь устранить неполадки –
Hi @PeterSchott. Внутри SSDT для создания скрипта требуется около 10 секунд, аналогично, если я создаю скрипт через sqlpackage.exe. Однако, если я использую развертывание через dacpac или создаю скрипт diff через API, используя строку GenerateDeployScript (а не .Deploy в оригинал Q) требуется в области 20 минут. База данных относительно небольшая (200 таблиц, 200 просмотров, 150 функций, 700 sp ..) ... ничего смешного, & db цели в настоящее время пуст. Цифры при запуске на локальном компьютере, так что сеть тоже не проблема. –
Процесс завершения сценария через sqlpackage и развертывание обновлений через sqlcmd составляет около 20, поэтому я, вероятно, в конечном итоге сделаю это ... Я просто хотел бы понять разницу во времени. –