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


Копирование транзакционно согласованной копии базы данных в 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 для геовосстановления или переключения на резервный ресурс. После успешного выполнения операции копирования на другой логический сервер и перед повторной сопоставлением других пользователей только имя входа, связанное с владельцем базы данных, или администратор сервера может войти в скопированную базу данных. Чтобы разрешить имена входа и установить доступ к данным после завершения операции копирования, смотрите Разрешение имен входа.

Копирование с помощью портала Azure

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

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

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

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

Для PowerShell используйте командлет New-AzSqlDatabaseCopy.

Внимание

Модуль PowerShell Azure Resource Manager по-прежнему поддерживается базой данных SQL Azure, но вся будущая разработка сосредоточена на модуле Az.Sql. Исправления ошибок для модуля AzureRM будут продолжать выпускаться как минимум до декабря 2020 г. Аргументы команд в модулях Az и AzureRm практически идентичны. Дополнительные сведения о совместимости см. в статье Знакомство с новым модулем Az для Azure PowerShell.

New-AzSqlDatabaseCopy -ResourceGroupName "<resourceGroup>" -ServerName $sourceserver -DatabaseName "<databaseName>" `
    -CopyResourceGroupName "myResourceGroup" -CopyServerName $targetserver -CopyDatabaseName "CopyOfMySampleDatabase"

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

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

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

Следить за ходом процесса копирования можно путем запроса к представлениям 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 Произошел сбой при копировании базы данных из-за внутренней ошибки. Удалите целевую базу данных и повторите попытку позднее.