Melhores práticas e resolução de problemas do backup do SQL Server para URL do Microsoft Armazenamento de Blobs do Azure

Aplica-se a: SQL ServerAzure SQL Managed Instance

Este artigo inclui as melhores práticas e dicas de resolução de problemas para backup e restauração do SQL Server no Microsoft Armazenamento de Blobs do Azure.

Para mais informações sobre a utilização do Armazenamento de Blobs do Azure para operações de backup ou restauro no SQL Server, veja:

Gerenciar backups

A lista a seguir inclui recomendações gerais para gerenciar backups:

  • Use um nome de ficheiro único para cada backup para evitar sobrescrever acidentalmente os blobs.

  • Ao criar um contentor, defina o nível de acesso para privado para que apenas utilizadores ou contas que possam fornecer a informação de autenticação necessária possam ler ou escrever os blobs no contentor.

  • Para bases de dados SQL Server numa instância de SQL Server a correr numa Máquina Virtual Azure, use uma conta de armazenamento na mesma região da máquina virtual para evitar custos de transferência de dados entre regiões. O uso da mesma região também garante o desempenho ideal para operações de backup e restauração.

  • A atividade de backup com falha pode resultar em um arquivo de backup inválido. Identifica periodicamente backups falhados e apaga os ficheiros blob. Para mais informações, consulte Eliminar ficheiros de blob de backup com arrendamentos ativos.

  • Use a WITH COMPRESSION opção para minimizar custos de armazenamento e transações de armazenamento, e para reduzir o tempo de backup.

  • Defina os argumentos MAXTRANSFERSIZE e BLOCKSIZE com os valores descritos em cópia de segurança do SQL Server para URL no Armazenamento de Blobs do Azure.

  • Podes fazer backup para blocos com todas as redundâncias de armazenamento (por exemplo, LRS, ZRS, GRS, RA-GRS e RA-GZRS).

Lidar com arquivos grandes

A operação de backup do SQL Server utiliza múltiplos threads para otimizar a transferência de dados para o Armazenamento de Blobs do Azure. No entanto, o desempenho depende de fatores como a largura de banda do ISV e o tamanho da base de dados. Se planeia fazer backup de grandes bases de dados ou grupos de ficheiros a partir de uma base de dados SQL Server local, teste primeiro o rendimento. O Azure SLA para Armazenamento inclui tempos máximos de processamento para blobs a considerar.

Use a WITH COMPRESSION opção recomendada na secção Gerir Backups quando fizer cópias de segurança de ficheiros grandes.

Solucionar problemas de backup ou restauração a partir da URL

Use as dicas seguintes para resolver erros ao fazer backup ou restaurar a partir do Armazenamento de Blobs do Azure.

Para evitar erros causados por opções não suportadas ou por limitações, consulte as limitações e as opções suportadas para os comandos BACKUP e RESTORE em Cópia de segurança e restauro do SQL Server com o Armazenamento de Blobs do Azure.

Falha na inicialização

Backups paralelos para o mesmo blob fazem com que um dos backups falhe com um erro de inicialização falha.

O pedido não pôde ser realizado devido a um erro no dispositivo de E/S

Considere COMPRESSION, MAXTRANSFERSIZE, BLOCKSIZEe vários argumentos de URL ao fazer backup de bancos de dados grandes. Veja Fazer backup de um VLDB para Armazenamento de Blobs do Azure.

O erro:

Msg 3202, Level 16, State 1, Line 1
Write on "https://mystorage.blob.core.windows.net/mycontainer/TestDbBackupSetNumber2_0.bak" failed:
1117(The request could not be performed because of an I/O device error.)
Msg 3013, Level 16, State 1, Line 1
BACKUP DATABASE is terminating abnormally.

Um exemplo de resolução:

BACKUP DATABASE TestDb
TO URL = 'https://mystorage.blob.core.windows.net/mycontainer/TestDbBackupSetNumber2_0.bak',
   URL = 'https://mystorage.blob.core.windows.net/mycontainer/TestDbBackupSetNumber2_1.bak',
   URL = 'https://mystorage.blob.core.windows.net/mycontainer/TestDbBackupSetNumber2_2.bak'
WITH COMPRESSION,
     MAXTRANSFERSIZE = 4194304,
     BLOCKSIZE = 65536;

O Message Filemark no dispositivo não está alinhado

Ao restaurar a partir de um backup compactado, você pode ver o seguinte erro:

SqlException 3284 occurred. Severity: 16 State: 5
Message Filemark on device 'https://mystorage.blob.core.windows.net/mycontainer/TestDbBackupSetNumber2_0.bak' is not aligned.
Re-issue the Restore statement with the same blocksize used to create the backupset: '65536' looks like a possible value.

Para resolver este erro, reemita a RESTORE instrução com BLOCKSIZE = 65536.

A atividade de backup com falha pode resultar em blobs com concessões ativas

Erro durante o backup devido a blobs que têm concessão ativa neles: Failed backup activity can result in blobs with active leases.

Se tentar novamente uma instrução de backup, a operação de backup pode falhar com um erro semelhante ao seguinte resultado:

Backup to URL received an exception from the remote endpoint. Exception Message:
The remote server returned an error: (412) There is currently a lease on the blob and no lease ID was specified in the request.

Se tentar executar uma instrução de restauro num ficheiro blob de backup que tenha um arrendamento ativo, a operação de restauro falha com um erro semelhante à seguinte mensagem:

Exception Message: The remote server returned an error: (409) Conflict.

Quando este erro ocorrer, apague os ficheiros blob. Para mais informações sobre este cenário e como corrigir este problema, consulte Eliminar ficheiros de blob de backup com arrendamentos ativos.

Erro do sistema operativo 50: O pedido não é suportado

Ao fazer backup de um banco de dados, você pode ver Operating system error 50(The request is not supported.) de erro pelos seguintes motivos:

  • A conta de armazenamento especificada não é V1/V2 de uso geral.
  • O token de assinatura de acesso partilhado (SAS) tem um ? símbolo no início. Se sim, remove o símbolo.
  • Não podes ligar-te à conta de armazenamento a partir da máquina atual usando o Explorador de Armazenamento ou o SQL Server Management Studio (SSMS).
  • A política atribuída ao token SAS expirou. Crie uma nova política usando o Explorador de Armazenamento do Azure, e crie um novo token SAS usando a política ou altere a credencial e tente fazer backup novamente.
  • O certificado raiz está em falta na loja de Certificados Raiz Fidedignos. Para mais informações, consulte Azure Root Certificate Authorities.

Erros de autenticação

Fazer backup ou restaurar a partir do Armazenamento de Blobs do Azure requer uma credencial que armazene a informação de autenticação. O SQL Server 2016 (13.x) e versões posteriores utilizam um token de assinatura de acesso partilhado (SAS), e o Mecanismo de Banco de Dados do SQL Server associa automaticamente a credencial ao URL do contentor.

Falhas relacionadas com credenciais podem produzir as seguintes mensagens de erro:

Número do erro Message
3288 Credential name <mycredential> does not exist or user does not have permission to access it.
3289 A Backup device of type URL was specified without a Credential, Backup/Restore operation cannot proceed.

Para evitar este problema, crie a credencial caso não exista. Por exemplo:

IF NOT EXISTS (SELECT *
    FROM sys.credentials
    WHERE name = 'https://<mystorageaccountname>.blob.core.windows.net/<mycontainername>')
CREATE CREDENTIAL [https://<mystorageaccountname>.blob.core.windows.net/<mycontainername>]
    WITH IDENTITY = 'SHARED ACCESS SIGNATURE',
    SECRET = '<SAS_TOKEN>';

A credencial existe, mas o login que executa o comando de backup não tem permissões para aceder às credenciais. Utilize uma conta na função fixa de base de dados db_backupoperator com permissões de Alterar qualquer credencial.

A informação armazenada na credencial deve corresponder aos valores das propriedades da conta de armazenamento Azure que está a usar nas operações de backup e restauro.

Erros de proxy

Se utilizar Servidores Proxy para aceder à Internet, poderá ver os seguintes problemas:

Limitação de conexão por servidores proxy

Os servidores proxy podem ter definições que limitam o número de ligações por minuto. A cópia de segurança para URL é executada em múltiplas threads e pode ultrapassar este limite. Se este limite for ultrapassado, o servidor proxy fecha a ligação. Para resolver este problema, altera as definições do proxy para que o SQL Server não use o proxy. Os exemplos seguintes mostram mensagens de erro que pode ver no registo de erros:

Write on "https://storageaccount.blob.core.windows.net/container/BackupAzurefile.bak" failed: Backup to URL received an exception from the remote endpoint. Exception Message: Unable to read data from the transport connection: The connection was closed.
A nonrecoverable I/O error occurred on file "https://storageaccount.blob.core.windows.net/container/BackupAzurefile.bak:" Error could not be gathered from Remote Endpoint.

Msg 3013, Level 16, State 1, Line 2

BACKUP DATABASE is terminating abnormally.
BackupIoRequest::ReportIoError: write failure on backup device 'https://storageaccount.blob.core.windows.net/container/BackupAzurefile.bak'. Operating system error Backup to URL received an exception from the remote endpoint. Exception Message: Unable to read data from the transport connection: The connection was closed.

Erros e soluções comuns

Questão Solução
Erro 3063: Write to backup block blob device https://storageaccount/container/name.bak failed. Device has reached its limit of allowed blocks. Para resolver este problema em backups completos ou diferenciais, utilize a técnica de striping no seu destino de backup com vários ficheiros. Para todos os tipos de backup, use os seguintes parâmetros no comando backup: COMPRESSION, MAXTRANSFERSIZE = 4194304, BLOCKSIZE = 65536. Este erro também pode ocorrer se o backup atingir o tamanho máximo suportado. Por exemplo, em versões SQL Server 2022 (16.x) e anteriores, o tamanho máximo de backup é de 12,8 TB, calculado como 64 faixas × 50.000 blocos × 4 MBMAXTRANSFERSIZE.
Erro 3035: O backup diferencial falha para uma ou várias bases de dados. Este erro ocorre se tiver configurado o Azure Backup para efetuar cópias de segurança de bases de dados SQL ou de um snapshot de máquina virtual (VM), o que não cria uma cópia de segurança do tipo copy-only, fazendo com que as cópias de segurança a pedido do plano de manutenção ou da tarefa do Agente SQL falhem. Para resolver este problema, adicione estas chaves de registo às VMs que alojam instâncias do SQL Server na chave [HKEY_LOCAL_MACHINE\SOFTWARE\MICROSOFT\BCDRAGENT] do registo e adicione "USEVSSCOPYBACKUP"="TRUE".
Erro 3201: Cannot open backup device '<url>'. Operating system error 50(The request is not supported.) Regenerar o token SAS usando o Explorador de Armazenamento: No Explorador de Armazenamento do Azure, crie uma nova política e um novo token SAS a partir dessa política. Recrie a credencial usando o novo token SAS e tente o backup novamente. Para mais informações, consulte problemas conhecidos do BACKUP TO URL. Certifique-se de que o seu grupo de segurança de rede (NSG) ou firewall permite ligações de entrada e saída nas portas 1433 e 443.
Erro 3290: Backup to URL received an exception from the remote endpoint. Exception Message: The remote name could not be resolved. Você verá essa mensagem se uma credencial, segredo ou chave SAS incorreta tiver sido usada para configurar o backup. Abandona a credencial e recria-a. Para o SQL Server 2016 (13.x) e versões posteriores, use SAS.
Erro 3290: Backup to URL received an exception from the remote endpoint. Exception Message: The remote server returned an error: (400) Bad Request. Para resolver, altere a versão mínima de TLS da conta de armazenamento para 1.0 (Conta de Armazenamento>Configuração>Versão Mínima de TLS).
Mensagem de Exceção: The remote server returned an error: (412) There is currently a lease on the blob and no lease ID was specified in the request. No Explorador de Armazenamento do Azure, identifique os blobs de 1 TB, quebre o arrendamento, elimine o blob e tente novamente a operação de backup.
Erro: The remote server returned an error: (403) Forbidden. Recrie a conta de armazenamento, a credencial e o token SAS para resolver o problema.
O backup falhou ao utilizar o plano de manutenção. Os planos de manutenção podem falhar intermitentemente. Executa o backup equivalente diretamente com T-SQL. Se o backup T-SQL tiver sucesso, agende-o como um trabalho SQL Server Agent em vez de usar um plano de manutenção.
Backup falhou devido aos limites de VM atingidos. Se receberes erros de que o limite de IOPS/VM do disco foi atingido, os backups podem abrandar ou falhar. Para monitorizar os limites IOPS/VM, use Azure Monitor Métricas e redimensione a VM/disco, se necessário, para resolver o problema.