Клонирование содержимого базы данных в существующую базу данных

У меня есть две базы данных AzureSQL, назовем их «А» и «Б». В процессе развертывания я хочу скопировать схему + данные из A в B. Как это сделать с минимальным количеством кода? Есть ли для этого встроенная задача или команда PowerShell?

Я нашел https://docs.microsoft.com/en-us/azure/sql-database/sql-database-copy, но эта команда создает новую базу данных в качестве цели. Я не хочу этого, цель уже существует.

почти уверен, что ваш единственный вариант - импорт\экспорт. ну вариант с копией самый лучший, очевидно же

4c74356b41 18.02.2019 15:36

Кажется, здесь довольно много идей. google.com/…

Sean Lange 18.02.2019 15:37

@ 4c74356b41 Какой импорт/экспорт вы имеете в виду? Вариантов наверняка много?!

D.R. 18.02.2019 15:37

Вы хотите заменить содержимое B содержимым A или добавить содержимое A к B?

Alberto Morillo 18.02.2019 15:38

@SeanLange: Вы видели результаты? Я не смог найти подходящей информации с помощью Google.

D.R. 18.02.2019 15:38

используйте MSSQL Management Studio, есть варианты для сброса БД в другую (схема + данные)

Cid 18.02.2019 15:38

@AlbertoMorillo: замените содержимое.

D.R. 18.02.2019 15:38

@Cid: не нашел ничего подходящего для баз данных Azure SQL в SSMS. Также я хочу автоматизировать его для нашего процесса развертывания, поэтому SSMS не является решением.

D.R. 18.02.2019 15:39

Да, я сделал. Если вы просто уточните параметры поиска, включив в них используемую СУБД.

Sean Lange 18.02.2019 15:40

@SeanLange: Не могли бы вы быть так любезны и опубликовать ОДНУ ссылку, которая действительно описывает мою проблему копирования базы данных в существующую? Независимо от параметров я не нашел решения.

D.R. 18.02.2019 15:41

azure sql получил функцию импорта\экспорта bacpac, вы можете использовать ее

4c74356b41 18.02.2019 15:41

@ 4c74356b41 Я уже смотрел BACPAC. Он поддерживает экспорт, но импортирует только в новые базы данных. Я что-то упустил из виду?

D.R. 18.02.2019 15:44

Отчасти потому, что это непростая задача. Вам нужна схема и данные. Это означает, что вам нужно построить схему и выполнить все вставки в определенном порядке, чтобы избежать проблем с внешним ключом. Или вы можете создать таблицы, затем вставить данные, затем создать все ограничения и тому подобное. Здесь действительно нет ярлыка, потому что он довольно сложный.

Sean Lange 18.02.2019 15:46

Однако есть несколько довольно хороших сторонних приложений, которые могут делать такие вещи. Но это здесь не по теме. Однако именно так я бы решил задачу, с которой вы столкнулись.

Sean Lange 18.02.2019 15:48

Не проще ли просто сделать резервную копию текущей БД, создать файл BAK и восстановить его на SQL Server под другим именем БД?

jimmy8ball 18.02.2019 15:49

Это создаст новую базу данных, а я не могу создавать новые базы данных по двум причинам: 1) это «уничтожает» весь мониторинг, который наш операционный отдел установил для существующей базы данных, и 2) это проблема производительности, потому что создание новой базы данных в Azure занимает несколько минут, а время простоя должно занимать всего несколько секунд.

D.R. 18.02.2019 15:58

Похоже, вам нужно просто засучить рукава и начать отбиваться. Это не так сложно, вам просто нужно вставлять вставки в правильном порядке, чтобы поддерживать RI. Я бы сначала создал все объекты и пропустил ограничения, затем использовал экспорт/импорт данных, чтобы скопировать все данные, и, наконец, создал ограничения. Единственная проблема в реальном времени здесь для целей разработки — это ожидание копирования данных. Все остальное уже можно прописать.

Sean Lange 18.02.2019 16:03
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
17
71
4

Ответы 4

Ваш лучший вариант — удалить базу данных B.

DROP DATABASE [yourdatabaseB];

Затем создайте копию A как B.

CREATE DATABASE yourdatabaseB  
    AS COPY OF yourdatabaseA ( SERVICE_OBJECTIVE = 'P2' ) 

Хотя вы не хотите, это самый быстрый способ сделать это.

К сожалению, я не могу этого сделать. Это 1) уничтожает весь мониторинг нашего операционного отдела на B и 2) является проблемой производительности, потому что создание новой базы данных в Azure занимает несколько минут, а наше время простоя должно занимать всего несколько секунд.

D.R. 18.02.2019 15:57

Запустите этот queryselect * из sys.dm_db_resource_stats, и вы увидите, что это не влияет на производительность. Протестируйте его с неиспользуемой базой данных. Вы увидите 0% cpu, 0% data_io, 0% log_write.

Alberto Morillo 18.02.2019 16:32

Копирование базы данных является асинхронной операцией.

Alberto Morillo 18.02.2019 16:33

База данных B будет больше времени недоступна при любом другом методе из-за высокого использования ввода-вывода. Это может привести к регулированию на любом уровне, отличном от Premium.

Alberto Morillo 18.02.2019 16:35

Не доверяйте порталу на время любой операции. Всегда проверяйте столбец «[sys].[databases].[status_desc]». Я обнаружил, что во время процесса копирования значение всегда говорит «КОПИРОВАНИЕ».

Alberto Morillo 18.02.2019 16:39

Я не говорю о производительности ввода-вывода. Я говорю о том, как долго проходит операция. Копирование базы данных занимает около 2 минут, использование существующей базы данных и простое массовое копирование данных — вопрос доли секунды.

D.R. 18.02.2019 17:24
  1. Скрипт операторов CREATE для каждой таблицы
  2. Отключить все внешние ключи
  3. Заполните все таблицы с помощью мастера служб SSIS.
  4. Повторно включить внешние ключи

ДЕТАЛИ ... https://richardbriansmith.wordpress.com/2018/10/10/copy-tables-to-new-database/

Я бы попытался:

  1. Восстановить базу данных A в C
  2. Удалить базу данных B
  3. Переименовать C в B

Вы не можете автоматизировать настройку мониторинга? Вероятно, вы можете скопировать, дождаться завершения копирования и затем переименовать базы данных. Переименование должно быть достаточно небольшим временем простоя?

Другие вопросы по теме