Поделиться через


Копирование транзакционно согласованной копии базы данных в SQL Azure

Применимо к: База данных SQL Azure

База данных SQL Azure предоставляет несколько методов для создания копии существующей базы данных на том же логическом сервере Базы данных SQL Azure или другом логическом сервере. Вы можете скопировать базу данных с помощью портал Azure, PowerShell, Azure CLI или Transact-SQL.

Примечание.

Идентификатор Microsoft Entra ранее был известен как Azure Active Directory (Azure AD).

Обзор

Копия базы данных — это транзакционно согласованный моментальный снимок исходной базы данных в момент начала запроса на копирование. Для копирования можно выбрать один и тот же логический сервер или другой логический сервер. Кроме того, вы можете сохранить избыточность резервного копирования и размер вычислительных ресурсов исходной базы данных или использовать другой объем избыточности хранилища резервных копий и (или) вычислительных ресурсов на одном уровне служб. Кроме того, можно скопировать базу данных на уровне служб "Стандартный" или "Общего назначения" и базу данных уровня "Премиум" на уровень "Премиум" или "критически важный для бизнеса".

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

Примечание.

Портал Azure, PowerShell и Azure CLI не поддерживают копирование базы данных в другую подписку.

Копирование базы данных для баз данных с гипермасштабированием

Для баз данных на уровне служб Гипермасштабирования целевая база данных определяет, является ли копия быстрой копией или копией данных:

  • Быстрая копия: когда копирование выполняется в том же регионе, что и источник, копия создается из моментальных снимков больших двоичных объектов, эта копия является быстрой операцией независимо от размера базы данных.

  • Копирование размера данных: если целевая база данных находится в другом регионе, отличном от исходного или если избыточность хранилища резервных копий базы данных (локальная, зональная, гео) от целевой базы данных отличается от исходной базы данных, операция копирования — это операция копирования с размером данных. Время копирования не пропорционально размеру, так как большие двоичные объекты сервера страницы копируются параллельно.

Имена входа в копии базы данных

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

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

Независимо от целевого сервера все пользователи базы данных, разрешения и идентификаторы безопасности (SID) копируются в копию базы данных. Использование пользователей автономной базы данных для доступа к данным гарантирует, что скопированная база данных будет иметь те же учетные данные пользователя. Таким образом, после завершения копирования можно немедленно получить доступ к базе данных, используя те же учетные данные.

Если для доступа к данным и копирования базы данных на другой сервер используются имена для входа на уровне сервера, то доступ на основе имени для входа может не работать. Это может произойти, так как имена входа не существуют на целевом логическом сервере или из-за того, что эти пароли и идентификаторы безопасности (SID) отличаются. Дополнительную информацию об управлении именами входа при копировании базы данных на другой сервер см. в статье Настройка и управление безопасностью базы данных Azure SQL для геовосстановления или переключения на резервный ресурс. После успешного выполнения операции копирования на другой логический сервер и перед повторной сопоставлением других пользователей только имя входа, связанное с владельцем базы данных, или администратор сервера может войти в скопированную базу данных. Чтобы разрешить имена входа и установить доступ к данным после завершения операции копирования, смотрите Разрешение имен входа.

Копирование базы данных

Базу данных можно скопировать с помощью PowerShell, Azure CLI и Transact-SQL (T-SQL).

Чтобы скопировать базу данных с помощью портал Azure, откройте страницу базы данных, а затем нажмите кнопку "Копировать", чтобы открыть страницу "Создать База данных SQL- Копировать базу данных". Введите значения для целевого логического сервера, в который необходимо скопировать базу данных.

Снимок экрана: портал Azure с выделенным параметром копирования базы данных на странице обзора базы данных.

Копирование базы данных с помощью Transact-SQL

Войдите в базу данных master с помощью имени входа администратора сервера или имени входа, создавшего базу данных, которую вы хотите скопировать. Для успешного копирования базы данных имена входа, которые не являются администратором сервера, должны быть членами роли dbmanager . Дополнительные сведения о входах и подключении к логическому серверу см. в разделе "Авторизация доступа к базе данных".

Начните копирование исходной базы данных с инструкции CREATE DATABASE ... AS COPY OF . Инструкция T-SQL продолжит выполнение до тех пор, пока операция копирования базы данных не будет завершена.

В этом разделе приведены команды Transact-SQL для следующих операций:

Примечание.

Завершение инструкции T-SQL не завершает операцию копирования базы данных. Чтобы завершить операцию, удалите целевую базу данных.

Копирование на тот же логический сервер

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

Эта команда копирует Database1 в новую базу данных с именем Database2 на том же логическом сервере. Операция копирования может занять некоторое время в зависимости от размера базы данных.

-- Execute on the master database to start copying
CREATE DATABASE Database2 AS COPY OF Database1;

Копирование в эластичный пул

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

Эта команда копирует Database1 в новую базу данных с именем Database2 в эластичном пуле с именем pool1. Операция копирования может занять некоторое время в зависимости от размера базы данных.

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

-- Execute on the master database to start copying
CREATE DATABASE Database2
AS COPY OF Database1
(SERVICE_OBJECTIVE = ELASTIC_POOL( name = pool1 ));

Копирование на другой логический сервер

Подключитесь к базе данных master целевого логического сервера, в котором должна быть создана новая база данных. Используйте имя входа с тем же именем и паролем, что и владелец базы данных-источника на исходном логическом сервере. Имя входа на целевом логическом сервере также должно быть членом роли dbmanager или учетной записью администратора сервера.

Эта команда копирует Database1 на server1 в новую базу данных с именем Database2 на server2. Операция копирования может занять некоторое время в зависимости от размера базы данных.

-- Execute on the master database of the target logical server (server2) to start copying from Server1 to Server2
CREATE DATABASE Database2 AS COPY OF server1.Database1;

Внимание

Оба брандмауэра логического сервера должны быть настроены для разрешения входящего подключения из IP-адреса клиента, выдавшего команду T-SQL CREATE DATABASE ... AS COPY OF. Чтобы определить исходный IP-адрес текущего подключения, выполните следующую команду: SELECT client_net_address FROM sys.dm_exec_connections WHERE session_id = @@SPID;

Примечание.

Копирование базы данных с помощью T-SQL не поддерживается при подключении к конечному логическому серверу через частную конечную точку . Если частная конечная точка настроена, но доступ к общедоступной сети разрешен, копия базы данных поддерживается при подключении к конечному логическому серверу с общедоступного IP-адреса с помощью проверки подлинности SQL. После завершения операции копирования в общем доступе может быть отказано.

Аналогичным образом следующая команда копирует Database1 на server1 в новую базу данных с именем Database2 в эластичном пуле с именем pool2на server2.

-- Execute on the master database of the target logical server (server2) to start copying from Server1 to Server2
CREATE DATABASE Database2 AS COPY OF server1.Database1 (SERVICE_OBJECTIVE = ELASTIC_POOL( name = pool2 ) );

Копирование в другую подписку

Вы можете использовать шаги, указанные в разделе Копирование базы данных SQL на другой логический сервер, чтобы перенести базу данных на логический сервер в другой подписке с помощью T-SQL. Используйте имя входа с таким же именем и паролем, как у владельца базы данных-источника. Кроме того, имя входа должно быть членом роли dbmanager или администратора сервера на исходных и целевых логических серверах.

Совет

При копировании баз данных в одном клиенте Идентификатора Microsoft Entra авторизация на исходных и конечных логических серверах упрощается при запуске команды копирования с использованием имени входа проверки подлинности с достаточным доступом на обоих логических серверах. Минимальный необходимый уровень доступа — членство в роли dbmanager в базе данных master на обоих логических серверах. Например, можно использовать учетную запись Microsoft Entra ID, которая является членом группы, назначенной администратором сервера для обоих логических серверов.

В следующих сценариях имя входа, которое нужно скопировать, — loginname.

Сначала подключитесь к базе данных master исходного логического сервера. Создайте имя входа и пользователя в базе данных master исходного логического сервера Базы данных SQL Azure.

--Step# 1
--Create login and user in the master database of the source server.

CREATE LOGIN loginname WITH PASSWORD = 'xxxxxxxxx'
GO
CREATE USER [loginname] FOR LOGIN [loginname] WITH DEFAULT_SCHEMA=[dbo];
GO
ALTER ROLE dbmanager ADD MEMBER loginname;
GO

Подключитесь к исходной пользовательской базе данных. Затем в исходной пользовательской базе данных создайте пользователя в исходной базе данных и добавьте его в роль базы данных dbowner в базе данных.

--Step# 2
--Create the user in the source database and grant dbowner permission to the database.

CREATE USER [loginname] FOR LOGIN [loginname] WITH DEFAULT_SCHEMA=[dbo];
GO
ALTER ROLE db_owner ADD MEMBER loginname;
GO

Затем найдите идентификатор безопасности пользователя loginname из базы данных master исходного логического сервера.

--Step# 3
--Capture the SID of the user "loginname" from master database

SELECT [sid] FROM sysusers WHERE [name] = 'loginname';

Запустите следующий скрипт в базе данных master нового или целевого логического сервера. Сначала создайте имя входа и пользователя в базе данных master целевого логического сервера и добавьте его в роль сервера dbmanager. Укажите <strong password>и замените <SID of loginname login on source server> идентификатором безопасности с исходного логического сервера.

--Step# 4
--Connect to Destination server.
--Create login and user in the master database, same as of the source server.

CREATE LOGIN loginname WITH PASSWORD = '<strong password>', SID = <SID of loginname login on source server>;
GO
CREATE USER [loginname] FOR LOGIN [loginname] WITH DEFAULT_SCHEMA=[dbo];
GO
ALTER ROLE dbmanager ADD MEMBER loginname;
GO

В базе данных master целевого логического сервера создайте новую базу данных. Замените new_database_name нужным именем. Замените source_server_name и source_database_name именами источника.

--Step# 5
--Execute the copy of database script from the destination logical server using the credentials created

CREATE DATABASE new_database_name
AS COPY OF source_server_name.source_database_name;

Совет

Копирование базы данных из подписки в другом клиенте Azure поддерживается только при использовании T-SQL и имени входа проверки подлинности SQL для входа на целевой логический сервер. Создание копии базы данных на логическом сервере в другом клиенте Azure не поддерживается с проверкой подлинности Microsoft Entra дляSQL Azure.

Мониторинг хода выполнения операции копирования

Следить за ходом процесса копирования можно путем запроса к представлениям sys.databases, sys.dm_database_copies и sys.dm_operation_status. Пока выполняется копирование, state_desc для новой базы данных задан sys.databasesстолбец COPYING представления.

  • Если копирование завершается ошибкой, state_desc для новой базы данных задан sys.databasesстолбец SUSPECT представления. Выполните инструкцию DROP для новой базы данных и повторите попытку позднее.
  • Если копирование выполнено успешно, state_desc для новой базы данных задан sys.databasesстолбец ONLINE представления. Это означает, что копирование завершено и новая база данных является обычной базой данных, которую можно изменять независимо от исходной.

Примечание.

Если вы решите отменить копирование во время его выполнения, выполните инструкцию DROP DATABASE в новой базе данных.

Внимание

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

Разрешения

Чтобы создать копию базы данных, необходимо иметь следующие роли:

  • владельца подписки или
  • Роль участника SQL Server или
  • Пользовательская роль на исходном логическом сервере со следующими разрешениями:
    • Microsoft.Sql/servers/databases/read
    • Microsoft.Sql/servers/databases/write и
  • Пользовательская роль на целевом логическом сервере со следующими разрешениями:
    • Microsoft.Sql/servers/read
    • Microsoft.Sql/servers/databases/read
    • Microsoft.Sql/servers/databases/write

Чтобы отменить копию базы данных, необходимо иметь следующие роли:

  • владельца подписки или
  • Роль участника SQL Server или
  • Пользовательская роль в целевой базе данных с следующим разрешением:
    • Microsoft.Sql/servers/databases/delete

Для управления копированием базы данных с помощью портал Azure также требуются следующие разрешения:

  • Microsoft.Resources/subscriptions/resources/read
  • Microsoft.Resources/deployments/read
  • Microsoft.Resources/deployments/write
  • Microsoft.Resources/deployments/operationstatuses/read

Если вы хотите просмотреть операции, выполняемые в развернутых группах ресурсов на портале, операции между несколькими поставщиками ресурсов, включая операции SQL, вам потребуются следующие дополнительные разрешения:

  • Microsoft.Resources/subscriptions/resourcegroups/deployments/operations/read
  • Microsoft.Resources/subscriptions/resourcegroups/deployments/operationstatuses/read

Разрешение имен для входа

После подключения новой базы данных к целевому логическому серверу используйте инструкцию ALTER USER, чтобы переназначить пользователей из новой базы данных для соответствия учетным записям на целевом логическом сервере. Сведения о разрешении потерянных пользователей см. в разделе Диагностика пользователей, утративших связь с учетной записью. См. также Настройка и управление безопасностью базы данных SQL Azure для геовосстановления или аварийного переключения.

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

См. статью Настройка и управление безопасностью базы данных SQL Azure для геовосстановления или отказоустойчивости, чтобы узнать об управлении пользователями и именами входа при копировании базы данных на другой логический сервер.

Ошибки копирования базы данных

При копировании базы данных в базе данных SQL Azure могут возникнуть следующие ошибки. Дополнительные сведения см. в статье Копирование транзакционно согласованной копии базы данных в базе данных SQL Azure.

Код ошибки Статус Description
40635 16 Клиент с IP-адресом "%.*ls" временно отключен.
40637 16 Возможность создания копии базы данных в настоящее время отключена.
40561 16 Не удалось скопировать базу данных. Исходная или целевая база данных не существует.
40562 16 Не удалось скопировать базу данных. Исходная база данных удалена.
40563 16 Не удалось скопировать базу данных. Целевая база данных удалена.
40564 16 Произошел сбой при копировании базы данных из-за внутренней ошибки. Удалите целевую базу данных и повторите попытку.
40565 16 Не удалось скопировать базу данных. Допускается не более одной одновременной операции копирования базы данных из одного источника. Удалите целевую базу данных и повторите попытку позднее.
40566 16 Произошел сбой при копировании базы данных из-за внутренней ошибки. Удалите целевую базу данных и повторите попытку.
40567 16 Произошел сбой при копировании базы данных из-за внутренней ошибки. Удалите целевую базу данных и повторите попытку.
40568 16 Не удалось скопировать базу данных. Исходная база данных стала недоступна. Удалите целевую базу данных и повторите попытку.
40569 16 Не удалось скопировать базу данных. Целевая база данных стала недоступна. Удалите целевую базу данных и повторите попытку.
40570 16 Произошел сбой при копировании базы данных из-за внутренней ошибки. Удалите целевую базу данных и повторите попытку позднее.
40571 16 Произошел сбой при копировании базы данных из-за внутренней ошибки. Удалите целевую базу данных и повторите попытку позднее.