Copiar uma cópia transacionalmente consistente de um banco de dados no Banco de Dados SQL do Azure

Aplica-se a:Banco de Dados SQL do Azure

O Banco de Dados SQL do Azure fornece vários métodos para criar uma cópia de um banco de dados existente no mesmo servidor ou em um servidor diferente. Você pode copiar um banco de dados usando o portal do Azure, PowerShell, CLI do Azure ou Transact-SQL.

Nota

Microsoft Entra ID é o novo nome para o Azure Ative Directory (Azure AD). Estamos atualizando a documentação neste momento.

Descrição geral

Uma cópia de banco de dados é um instantâneo transacionalmente consistente do banco de dados de origem a partir de um ponto no tempo após o início da solicitação de cópia. Você pode selecionar o mesmo servidor ou um servidor diferente para a cópia. Além disso, você pode optar por manter a redundância de backup e o tamanho de computação do banco de dados de origem ou usar uma redundância de armazenamento de backup diferente e/ou tamanho de computação dentro da mesma camada de serviço. Depois que a cópia é concluída, ela se torna um banco de dados totalmente funcional e independente. Os inícios de sessão, os utilizadores e as permissões na base de dados copiada são geridos de forma independente da base de dados de origem. A cópia é criada usando a tecnologia de replicação geográfica. Após a conclusão da propagação da réplica, a ligação da georreplicação será encerrada automaticamente. Todos os requisitos para utilizar a georreplicação se aplicam à operação da cópia da base de dados. Consulte Visão geral da replicação geográfica ativa para obter detalhes.

Nota

O portal do Azure, o PowerShell e a CLI do Azure não oferecem suporte à cópia do banco de dados para uma assinatura diferente.

Cópia de banco de dados para o Azure SQL Hyperscale

Para o Azure SQL Hyperscale, o banco de dados de destino determina se a cópia é uma cópia rápida ou uma cópia de tamanho de dados.

  • Cópia rápida: quando a cópia é feita na mesma região da origem, a cópia é criada a partir dos instantâneos de blobs, essa cópia é uma operação rápida, independentemente do tamanho do banco de dados.

  • Tamanho da cópia de dados: quando o banco de dados de destino está em uma região diferente da origem ou se a redundância de armazenamento de backup do banco de dados (Local, Zonal, Geo) do destino difere do banco de dados de origem, a operação de cópia é uma operação de tamanho de dados. O tempo de cópia não é diretamente proporcional ao tamanho, pois os blobs do servidor de página são copiados em paralelo.

Logins na cópia do banco de dados

Quando você copia um banco de dados para o mesmo servidor, os mesmos logons podem ser usados em ambos os bancos de dados. A entidade de segurança usada para copiar o banco de dados torna-se o proprietário do banco de dados no novo banco de dados.

Quando copia uma base de dados para um servidor diferente, o principal de segurança que iniciou a operação de cópia no servidor de destino torna-se no proprietário da nova base de dados.

Independentemente do servidor de destino, todos os usuários do banco de dados, permissões e identificadores de segurança (SIDs) são copiados para a cópia do banco de dados. O uso de usuários de banco de dados contidos para acesso a dados garante que o banco de dados copiado tenha as mesmas credenciais de usuário, para que, após a conclusão da cópia, você possa acessá-lo imediatamente com as mesmas credenciais.

Se utilizar inícios de sessão ao nível do servidor para o acesso aos dados e copiar a base de dados para um servidor diferente, o acesso baseado no início de sessão poderá não funcionar. Isso pode acontecer porque os logins não existem no servidor de destino ou porque essas senhas e identificadores de segurança (SIDs) são diferentes. Para obter mais informações sobre como gerenciar logons quando você copia um banco de dados para um servidor diferente, consulte Como gerenciar a segurança do Banco de Dados SQL do Azure após a recuperação de desastres. Depois que a operação de cópia para um servidor diferente for bem-sucedida, e antes que outros usuários sejam remapped, somente o logon associado ao proprietário do banco de dados ou o administrador do servidor poderá efetuar login no banco de dados copiado. Para resolver logons e estabelecer acesso a dados após a conclusão da operação de cópia, consulte Resolver logons.

Copiar com o portal do Azure

Para copiar um banco de dados usando o portal do Azure, abra a página do seu banco de dados e escolha Copiar para abrir a página Criar Banco de Dados SQL - Copiar banco de dados. Preencha os valores para o servidor de destino para o qual deseja copiar o banco de dados.

Screenshot of Azure portal, showing Database copy option highlighted on the database overview page.

Copiar usando o PowerShell ou a CLI do Azure

Para copiar um banco de dados, use os exemplos a seguir.

Para PowerShell, use o cmdlet New-AzSqlDatabaseCopy .

Importante

O módulo PowerShell Azure Resource Manager (RM) ainda é suportado pelo Banco de Dados SQL do Azure, mas todo o desenvolvimento futuro é para o módulo Az.Sql. O módulo AzureRM continuará a receber correções de bugs até, pelo menos, dezembro de 2020. Os argumentos para os comandos no módulo Az e nos módulos AzureRm são substancialmente idênticos. Para obter mais informações sobre sua compatibilidade, consulte Apresentando o novo módulo Az do Azure PowerShell.

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

A cópia do banco de dados é uma operação assíncrona, mas o banco de dados de destino é criado imediatamente após a solicitação ser aceita. Se você precisar cancelar a operação de cópia enquanto ainda estiver em andamento, solte o banco de dados de destino usando o cmdlet Remove-AzSqlDatabase .

Para obter um exemplo completo de script do PowerShell, consulte Copiar um banco de dados para um novo servidor.

Copiar usando Transact-SQL

Faça login no master banco de dados com o login de administrador do servidor ou o login que criou o banco de dados que você deseja copiar. Para que a cópia do banco de dados seja bem-sucedida, os logons que não são o administrador do servidor devem ser membros da função dbmanager . Para obter mais informações sobre logons e conexão com o servidor, consulte Gerenciar logons.

Comece a copiar o banco de dados de origem com o CREATE DATABASE ... COMO CÓPIA DA DECLARAÇÃO . A instrução T-SQL continua em execução até que a operação de cópia do banco de dados seja concluída.

Nota

Encerrar a instrução T-SQL não encerra a operação de cópia do banco de dados. Para encerrar a operação, solte o banco de dados de destino.

Copiar para o mesmo servidor

Faça login no master banco de dados com o login de administrador do servidor ou o login que criou o banco de dados que você deseja copiar. Para que a cópia do banco de dados seja bem-sucedida, os logons que não são o administrador do servidor devem ser membros da função dbmanager .

Este comando copia Database1 para um novo banco de dados nomeado Database2 no mesmo servidor. Consoante o tamanho da base de dados, a conclusão da operação de cópia pode demorar algum tempo.

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

Copiar para um pool elástico

Faça login no master banco de dados com o login de administrador do servidor ou o login que criou o banco de dados que você deseja copiar. Para que a cópia do banco de dados seja bem-sucedida, os logons que não são o administrador do servidor devem ser membros da função dbmanager .

Este comando copia Database1 para um novo banco de dados nomeado Database2 em um pool elástico chamado pool1. Consoante o tamanho da base de dados, a conclusão da operação de cópia pode demorar algum tempo.

Database1 pode ser um banco de dados único ou em pool. A cópia entre pools de camadas diferentes é suportada, mas algumas cópias entre camadas falham. Por exemplo, você pode copiar um db padrão único ou elástico em um pool de uso geral, mas não pode copiar um db elástico padrão em um pool premium.

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

Copiar para um servidor diferente

Conecte-se ao master banco de dados do servidor de destino onde o novo banco de dados será criado. Use um logon que tenha o mesmo nome e senha que o proprietário do banco de dados de origem no servidor de origem. O login no servidor de destino também deve ser um membro da função dbmanager ou ser o login do administrador do servidor.

Este comando copia Database1 em server1 para um novo banco de dados chamado Database2 em server2. Consoante o tamanho da base de dados, a conclusão da operação de cópia pode demorar algum tempo.

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

Importante

Os firewalls de ambos os servidores devem ser configurados para permitir a conexão de entrada a partir do IP do cliente que emite o T-SQL CREATE DATABASE ... COMO CÓPIA DO COMANDO . Para determinar o endereço IP de origem da conexão atual, execute SELECT client_net_address FROM sys.dm_exec_connections WHERE session_id = @@SPID;

Nota

Não há suporte para cópia de banco de dados usando T-SQL ao se conectar ao servidor de destino por meio de um ponto de extremidade privado. Se um ponto de extremidade privado estiver configurado, mas o acesso à rede pública for permitido, a cópia do banco de dados será suportada quando conectada ao servidor de destino a partir de um endereço IP público usando autenticação SQL. Quando a operação de cópia for concluída, o acesso público poderá ser negado.

Da mesma forma, o comando abaixo copia Database1 no server1 para um novo banco de dados nomeado Database2 dentro de um pool elástico chamado pool2, no server2.

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

Copiar para uma subscrição diferente

Você pode usar as etapas na seção Copiar um Banco de Dados SQL para um servidor diferente para copiar seu banco de dados para um servidor em uma assinatura diferente usando T-SQL. Certifique-se de usar um login que tenha o mesmo nome e senha que o proprietário do banco de dados de origem. Além disso, o login deve ser um membro da função dbmanager ou um administrador de servidor, nos servidores de origem e de destino.

Gorjeta

Ao copiar bancos de dados no mesmo locatário do Microsoft Entra ID, a autorização nos servidores de origem e de destino é simplificada se você iniciar o comando copy usando um logon de autenticação com acesso suficiente em ambos os servidores. O nível mínimo necessário de acesso é a associação à função dbmanager no banco de dados em master ambos os servidores. Por exemplo, você pode usar um logon do Microsoft Entra ID que seja membro de um grupo designado como administrador do servidor em ambos os servidores.

--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

--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

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

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

--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 = 'xxxxxxxxx', 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

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

CREATE DATABASE new_database_name
AS COPY OF source_server_name.source_database_name;

Gorjeta

A cópia de banco de dados usando T-SQL dá suporte à cópia de um banco de dados de uma assinatura em um locatário diferente do Azure. Isso só é suportado ao usar um logon de autenticação SQL para fazer login no servidor de destino. Não há suporte para a criação de uma cópia de banco de dados em um servidor lógico em um locatário diferente do Azure quando a autenticação do Microsoft Entra está ativa (habilitada) no servidor lógico de origem ou de destino.

Monitorar o progresso da operação de cópia

Monitore o processo de cópia consultando as exibições sys.databases, sys.dm_database_copies e sys.dm_operation_status . Enquanto a cópia estiver em andamento, a state_desc coluna do modo de exibição do sys.databases novo banco de dados será definida como COPYING.

  • Se a cópia falhar, a state_desc coluna do modo de exibição do novo banco de sys.databases dados será definida como SUSPECT. Execute a instrução DROP no novo banco de dados e tente novamente mais tarde.
  • Se a cópia for bem-sucedida, a state_desc coluna do modo de exibição do sys.databases novo banco de dados será definida como ONLINE. A cópia está concluída e o novo banco de dados é um banco de dados regular que pode ser alterado independentemente do banco de dados de origem.

Nota

Se você decidir cancelar a cópia enquanto ela estiver em andamento, execute a instrução DROP DATABASE no novo banco de dados.

Importante

Se você precisar criar uma cópia com um objetivo de serviço substancialmente menor do que o de origem, o banco de dados de destino pode não ter recursos suficientes para concluir o processo de propagação e pode fazer com que a operação de cópia falhe. Nesse cenário, use uma solicitação de restauração geográfica para criar uma cópia em um servidor diferente e/ou em uma região diferente. Para obter mais informações, consulte Recuperar um Banco de Dados SQL do Azure usando backups de banco de dados.

Funções e permissões do RBAC do Azure para gerenciar a cópia do banco de dados

Para criar uma cópia de banco de dados, você precisa estar nas seguintes funções:

  • Proprietário da subscrição ou
  • Função de Colaborador do SQL Server ou
  • Função personalizada no servidor de origem com as seguintes permissões:
    • Microsoft.Sql/servidores/bancos de dados/leitura
    • Microsoft.Sql/servers/databases/write e
  • Função personalizada no servidor de destino com as seguintes permissões:
    • Microsoft.Sql/servers/read
    • Microsoft.Sql/servidores/bancos de dados/leitura
    • Microsoft.Sql/servidores/bancos de dados/gravação

Para cancelar uma cópia de banco de dados, você precisa estar nas seguintes funções:

  • Proprietário da subscrição ou
  • Função de Colaborador do SQL Server ou
  • Função personalizada no banco de dados de destino com a seguinte permissão:
    • Microsoft.Sql/servidores/bancos de dados/excluir

Para gerenciar a cópia do banco de dados usando o portal do Azure, você também precisa das seguintes permissões:

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

Se você quiser ver as operações em implantações no grupo de recursos no portal, operações em vários provedores de recursos, incluindo operações SQL, você precisa destas permissões adicionais:

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

Resolver logins

Depois que o novo banco de dados estiver online no servidor de destino, use a instrução ALTER USER para remapear os usuários do novo banco de dados para logons no servidor de destino. Para resolver usuários órfãos, consulte Solucionar problemas de usuários órfãos. Consulte também Como gerenciar a segurança do Banco de Dados SQL do Azure após a recuperação de desastres.

Todos os usuários no novo banco de dados mantêm as permissões que tinham no banco de dados de origem. O usuário que iniciou a cópia do banco de dados torna-se o proprietário do banco de dados do novo banco de dados. Depois que a cópia for bem-sucedida e antes que outros usuários sejam remapped, somente o proprietário do banco de dados poderá entrar no novo banco de dados.

Para saber mais sobre como gerenciar usuários e logons quando você copia um banco de dados para um servidor diferente, consulte Como gerenciar a segurança do Banco de Dados SQL do Azure após a recuperação de desastres.

Erros de cópia do banco de dados

Os seguintes erros podem ser encontrados ao copiar um banco de dados no Banco de Dados SQL do Azure. Para mais informações, consulte Copiar uma Base de Dados SQL do Azure.

Código de erro Gravidade Description
40635 16 Cliente com endereço IP '%.*ls' está temporariamente desativado.
40637 16 Criar cópia de banco de dados está desabilitado no momento.
40561 16 A cópia da base de dados falhou. O banco de dados de origem ou de destino não existe.
40562 16 A cópia da base de dados falhou. A base de dados de origem foi removida.
40563 16 A cópia da base de dados falhou. A base de dados de destino foi removida.
40564 16 A cópia da base de dados falhou devido a um erro interno. Solte o banco de dados de destino e tente novamente.
40565 16 A cópia da base de dados falhou. Não é permitida mais do que uma cópia de base de dados simultânea da mesma origem. Solte o banco de dados de destino e tente novamente mais tarde.
40566 16 A cópia da base de dados falhou devido a um erro interno. Solte o banco de dados de destino e tente novamente.
40567 16 A cópia da base de dados falhou devido a um erro interno. Solte o banco de dados de destino e tente novamente.
40568 16 A cópia da base de dados falhou. A base de dados de origem ficou indisponível. Solte o banco de dados de destino e tente novamente.
40569 16 A cópia da base de dados falhou. A base de dados de destino ficou indisponível. Solte o banco de dados de destino e tente novamente.
40570 16 A cópia da base de dados falhou devido a um erro interno. Solte o banco de dados de destino e tente novamente mais tarde.
40571 16 A cópia da base de dados falhou devido a um erro interno. Solte o banco de dados de destino e tente novamente mais tarde.