У меня есть две базы данных AzureSQL, назовем их «А» и «Б». В процессе развертывания я хочу скопировать схему + данные из A в B. Как это сделать с минимальным количеством кода? Есть ли для этого встроенная задача или команда PowerShell?
Я нашел https://docs.microsoft.com/en-us/azure/sql-database/sql-database-copy, но эта команда создает новую базу данных в качестве цели. Я не хочу этого, цель уже существует.
Кажется, здесь довольно много идей. google.com/…
@ 4c74356b41 Какой импорт/экспорт вы имеете в виду? Вариантов наверняка много?!
Вы хотите заменить содержимое B содержимым A или добавить содержимое A к B?
@SeanLange: Вы видели результаты? Я не смог найти подходящей информации с помощью Google.
используйте MSSQL Management Studio, есть варианты для сброса БД в другую (схема + данные)
@AlbertoMorillo: замените содержимое.
@Cid: не нашел ничего подходящего для баз данных Azure SQL в SSMS. Также я хочу автоматизировать его для нашего процесса развертывания, поэтому SSMS не является решением.
Да, я сделал. Если вы просто уточните параметры поиска, включив в них используемую СУБД.
@SeanLange: Не могли бы вы быть так любезны и опубликовать ОДНУ ссылку, которая действительно описывает мою проблему копирования базы данных в существующую? Независимо от параметров я не нашел решения.
azure sql получил функцию импорта\экспорта bacpac, вы можете использовать ее
@ 4c74356b41 Я уже смотрел BACPAC. Он поддерживает экспорт, но импортирует только в новые базы данных. Я что-то упустил из виду?
Отчасти потому, что это непростая задача. Вам нужна схема и данные. Это означает, что вам нужно построить схему и выполнить все вставки в определенном порядке, чтобы избежать проблем с внешним ключом. Или вы можете создать таблицы, затем вставить данные, затем создать все ограничения и тому подобное. Здесь действительно нет ярлыка, потому что он довольно сложный.
Однако есть несколько довольно хороших сторонних приложений, которые могут делать такие вещи. Но это здесь не по теме. Однако именно так я бы решил задачу, с которой вы столкнулись.
Не проще ли просто сделать резервную копию текущей БД, создать файл BAK и восстановить его на SQL Server под другим именем БД?
Это создаст новую базу данных, а я не могу создавать новые базы данных по двум причинам: 1) это «уничтожает» весь мониторинг, который наш операционный отдел установил для существующей базы данных, и 2) это проблема производительности, потому что создание новой базы данных в Azure занимает несколько минут, а время простоя должно занимать всего несколько секунд.
Похоже, вам нужно просто засучить рукава и начать отбиваться. Это не так сложно, вам просто нужно вставлять вставки в правильном порядке, чтобы поддерживать RI. Я бы сначала создал все объекты и пропустил ограничения, затем использовал экспорт/импорт данных, чтобы скопировать все данные, и, наконец, создал ограничения. Единственная проблема в реальном времени здесь для целей разработки — это ожидание копирования данных. Все остальное уже можно прописать.


Ваш лучший вариант — удалить базу данных B.
DROP DATABASE [yourdatabaseB];
Затем создайте копию A как B.
CREATE DATABASE yourdatabaseB
AS COPY OF yourdatabaseA ( SERVICE_OBJECTIVE = 'P2' )
Хотя вы не хотите, это самый быстрый способ сделать это.
К сожалению, я не могу этого сделать. Это 1) уничтожает весь мониторинг нашего операционного отдела на B и 2) является проблемой производительности, потому что создание новой базы данных в Azure занимает несколько минут, а наше время простоя должно занимать всего несколько секунд.
Запустите этот queryselect * из sys.dm_db_resource_stats, и вы увидите, что это не влияет на производительность. Протестируйте его с неиспользуемой базой данных. Вы увидите 0% cpu, 0% data_io, 0% log_write.
Копирование базы данных является асинхронной операцией.
База данных B будет больше времени недоступна при любом другом методе из-за высокого использования ввода-вывода. Это может привести к регулированию на любом уровне, отличном от Premium.
Не доверяйте порталу на время любой операции. Всегда проверяйте столбец «[sys].[databases].[status_desc]». Я обнаружил, что во время процесса копирования значение всегда говорит «КОПИРОВАНИЕ».
Я не говорю о производительности ввода-вывода. Я говорю о том, как долго проходит операция. Копирование базы данных занимает около 2 минут, использование существующей базы данных и простое массовое копирование данных — вопрос доли секунды.
ДЕТАЛИ ... https://richardbriansmith.wordpress.com/2018/10/10/copy-tables-to-new-database/
Я бы попытался:
Вы не можете автоматизировать настройку мониторинга? Вероятно, вы можете скопировать, дождаться завершения копирования и затем переименовать базы данных. Переименование должно быть достаточно небольшим временем простоя?
почти уверен, что ваш единственный вариант - импорт\экспорт. ну вариант с копией самый лучший, очевидно же