Azure - копирование существующей базы данных SQL на другой сервер с использованием Transact-SQL и SSMS - PullRequest
0 голосов
/ 08 декабря 2018

У меня есть две подписки в Azure, для простоты аргументации, давайте назовем их subscription1 и subscription2.

У меня есть база данных SQL размером 30 ГБ для подписки 1, и я хочу переместить ее в подписку2.

Один из способов - создать резервную копию базы данных (используя опцию экспорта на портале Azure), переместить файл bacpac в подписку 2, используя, например, проводник хранилища, и импортировать таким образом файл bacpac на конечный сервер по подписке2.Однако процесс резервного копирования и восстановления занимает много времени, когда размер базы данных слишком велик.

Итак, я пришел к использованию подхода Transact-SQL, как описано в этой статье

Используя SSMS , я использую следующую команду в главной базе данных конечного сервера (server2), чтобы скопировать базу данных с исходного сервера (server1 в подписке1) на целевой сервер (server2 в подписке 2)

CREATE DATABASE Database2 AS COPY OF server1.Database1;

Оба сервера имеют одинаковые учетные данные для входа, поэтому этот процесс работает, как указано в статье выше, и Я проверил его для очень маленькой базы данных (для целей тестирования)

У меня вопрос, когда я буду копировать свою базу данных размером 30 ГБ, как упоминалось выше, с использованием подхода Transact SQL, будет ли она использовать пропускную способность моего Интернета или пропускную способность лазурных центров обработки данных ?,так же, как когда мы используем опцию копирования с портала

1 Ответ

0 голосов
/ 08 декабря 2018

Команда T-SQL, на которую вы ссылаетесь, не будет проходить через ваш компьютер.Он переходит с сервера 1 на сервер 2. Это концептуально эквивалентно выполнению команды T-SQL на портале Azure.

Пройдя еще на один уровень, портал и команда T-SQL DDL в SQL Azure направляются через REST API уровня управления в регионе.Вы можете увидеть документацию по этому вопросу здесь:

https://docs.microsoft.com/en-us/rest/api/sql/databases/createorupdate

Затем плоскость управления запустит фоновую операцию для создания непрерывной копии вашей текущей базы данных в новую копию навторой сервер.Когда это будет сделано, он прервет операцию непрерывного копирования, и у вас будет вторая база данных, готовая для использования.

Еще на один уровень глубже - логика выполнения всего этого заполнения более или менее идентична требуемой логикевнутренне для SQL Azure, чтобы создать новую копию вашей базы данных.В премиальных / больших размерах резервирования у вас будет N копий локально каждой базы данных для обеспечения высокой доступности и производительности, и, если один узел реплики выйдет из строя (аппаратный сбой и т. Д.), Системе внутренне потребуется создать новую непрерывную копиюостальные реплики, чтобы восстановить нужное количество резервных копий для вашей базы данных.

Еще одна деталь - в отличие от традиционных команд SQL Server, она асинхронная.Итак, после отправки команды все остальное происходит в фоновом режиме.Таким образом, как упоминает @ Nick.McDermaid, вы можете отключить локальный компьютер после запуска команды и проверить его позже, не беспокоясь о том, что транзакция отменена и откатана.Единственная дополнительная проблема заключается в том, что вам необходимо проверить выполнение команды, которая может занять некоторое время в зависимости от размера базы данных, размера резервирования, которое вы используете (которое определяет IOPS) и т. Д.

...