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

У меня есть две подписки на 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 ответ

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

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

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

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

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

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

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