Práticas recomentadas e solução de problemas de backup do SQL Server em URL para o Armazenamento de Blobs do Microsoft Azure

Aplica-se a: SQL Server Instância Gerenciada de SQL do Azure

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

Para obter mais informações sobre como usar o Armazenamento de Blobs do Azure para operações de backup ou restauração do SQL Server, confira:

Gerenciar backups

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

  • O nome de arquivo exclusivo para cada backup é recomendável para evitar a substituição acidental dos blobs.

  • Ao criar um contêiner, você deve definir o nível de acesso para privado, de forma que apenas os usuários ou as contas que podem fornecer as informações sobre autenticação necessárias possam ler ou gravar os blobs no contêiner.

  • Para bancos de dados SQL Server em uma instância do SQL Server em execução em uma máquina virtual do Windows Azure, use uma conta de armazenamento na mesma região que a máquina virtual para evitar custos com transferência de dados entre regiões. O uso da mesma região também assegura 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. Recomendamos a identificação periódica de backup com falha e exclusão dos arquivos de blob. Para obter mais informações, consulte Deleting Backup Blob Files with Active Leases.

  • O uso da opção WITH COMPRESSION durante o backup pode minimizar os custos com armazenamento e transações de armazenamento. Ele também pode diminuir o tempo necessário para concluir o processo de backup.

  • Defina os argumentos MAXTRANSFERSIZE e BLOCKSIZE como recomendado em Backup do SQL Server em URL.

  • O SQL Server é independente do tipo de redundância de armazenamento usado. O backup em blobs de página e blobs de bloco é compatível com todas as redundâncias de armazenamento (LRS\ZRS\GRS\RA-GRS\RA-GZRS\etc.).

Manipular arquivos grandes

A operação de backup do SQL Server usa vários threads a fim de otimizar a transferência de dados para o Armazenamento de Blobs do Azure. No entanto, o desempenho depende de vários fatores, como largura de banda do ISV e tamanho do banco de dados. Se você pretende fazer backup de bancos de dados ou grupos de arquivos grandes em um banco de dados do SQL Server no local, você deve testar a taxa de transferência primeiro. O SLA para armazenamento do Azure tem tempos de processamento máximos para blobs que você pode levar em consideração.

O uso da opção WITH COMPRESSION, como recomendado na seção Gerenciar backups, é importante ao fazer backup de arquivos grandes.

Solucionar problemas de backup ou restauração de URL

Veja algumas maneiras rápidas de solucionar erros ao fazer backup ou restauração do Armazenamento de Blobs do Azure.

Para evitar erros devido às opções ou às limitações sem suporte, examine a lista de limitações e as informações de suporte aos comandos BACKUP e RESTORE no artigo Backup e restauração do SQL Server com o Armazenamento de Blobs do Microsoft Azure.

Falha de inicialização

Os backups paralelos no mesmo Blob ocasionam a falha de um dos backups com o erro Falha na inicialização .

  • No SQL Server 2016 (13.x) e versões posteriores, o blob de blocos é preferido para Backup em URL.

  • Se estiver usando blobs de páginas com BACKUP TO URL, poderá usar o Sinalizador de rastreamento 3051 para ativar o registro em um log de erros específico com o seguinte formato em: BackupToUrl-\<instname>-\<dbname>-action-\<PID>.log, em que \<action> é uma das seguintes opções:

    • DB
    • FILELISTONLY
    • LABELONLY
    • HEADERONLY
    • VERIFYONLY

Você também pode encontrar informações analisando o Log de Eventos do Windows nos logs de aplicativo com o nome SQLBackupToUrl.

Não foi possível executar a solicitação devido a um erro de dispositivo de E/S.

Considere COMPRESSION, MAXTRANSFERSIZE, BLOCKSIZE e vários argumentos de URL ao fazer backup de bancos de dados grandes. Confira Fazer backup de um VLDB para o 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;

A marca de arquivo da mensagem no dispositivo não está alinhada.

Ao fazer a restauração em um backup compactado, você 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.
Reissue the Restore statement with the same block size used to create the backupset: '65536' looks like a possible value.

Para corrigir esse erro, emita novamente a instrução RESTORE com BLOCKSIZE = 65536 especificada.

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: Failed backup activity can result in blobs with active leases.

Se houver uma nova tentativa de uso de uma instrução de backup, a operação de backup pode falhar com um erro semelhante à seguinte saída:

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 for feita uma nova tentativa de uso de uma instrução de restauração em um arquivo de blob de backup que tenha uma concessão ativa, a operação de restauração falhará com um erro semelhante a:

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

Quando esse erro ocorre, os arquivos de blob precisam ser excluídos. Para obter mais informações sobre esse cenário e como corrigir o problema, confira Deleting Backup Blob Files with Active Leases.

Erro 50 do sistema operacional: a solicitação não é compatível

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

  • A conta de armazenamento especificada não é Uso Geral V1/V2.
  • O token SAS tinha um símbolo ? no início do token quando a credencial foi criada. Se sim, remova-o.
  • A conexão atual não consegue se conectar à conta de armazenamento da máquina atual usando o Gerenciador de Armazenamento ou o SSMS (SQL Server Management Studio).
  • A política atribuída ao token SAS expirou. Crie uma política usando o Gerenciador de Armazenamento do Azure e crie um token SAS usando a política ou altere a credencial e tente fazer backup novamente.
  • O certificado raiz está ausente no repositório de Certificação Raiz Confiável. Para obter mais informações, confira Autoridades de Certificação Raiz do Azure".

Erros de autenticação

WITH CREDENTIAL é uma opção nova e obrigatória para fazer backup ou restauração no Armazenamento de Blobs do Azure.

As falhas relacionadas à credencial podem ser as seguintes: The credential specified in the **BACKUP** or **RESTORE** command does not exist.

Para evitar esse problema, inclua instruções T-SQL para criar a credencial caso não exista nenhuma na instrução de backup. Este é um exemplo que você pode usar:

IF NOT EXISTS (
   SELECT *
   FROM sys.credentials
   WHERE credential_identity = 'mycredential'
)
CREATE CREDENTIAL [<credential name>]
   WITH IDENTITY = 'mystorageaccount',
      SECRET = '<storage access key>';

A credencial existe, mas o login usado para executar o comando de backup não tem permissões para acessar as credenciais. Use uma conta na função db_backupoperator com permissões Alterar qualquer credencial.

Verifique o nome da conta de armazenamento e os valores de chave. As informações armazenadas na credencial devem corresponder aos valores de propriedade da conta de armazenamento do Azure que você está usando nas operações de backup e restauração.

Erros 400 (solicitação inválida)

Usando o SQL Server 2012 (11.x), você pode encontrar um erro ao executar um backup semelhante à seguinte saída:

Backup to URL received an exception from the remote endpoint. Exception Message:
The remote server returned an error: (400) Bad Request.

Isso é causado pela versão de TLS com suporte da conta de armazenamento do Azure. Altere a versão de TLS com suporte ou use a solução alternativa listada em KB4017023.

Erros de proxy

Se você usa servidores proxy para acessar a Internet, talvez veja os seguintes problemas:

Conexão limitada por servidores proxy

Os servidores proxy podem ter configurações que limitam o número de conexões por minuto. O processo de Backup para URL é multi-threaded e, portanto, pode ir além desse limite. Se isso acontecer, o servidor proxy elimina a conexão. Para resolver esse problema, altere as configurações de proxy para que o SQL Server não use o proxy. A seguir estão alguns exemplos dos tipos ou mensagens de erro que você pode ver no log 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.

Se estiver usando blobs de páginas e ativar o log detalhado usando o Sinalizador de rastreamento 3051, você também poderá ver a seguinte mensagem nos logs: HTTP status code 502, HTTP Status Message Proxy Error (The number of HTTP requests per minute exceeded the configured limit. Contact your ISA Server administrator.)

Configurações de proxy padrão não selecionadas

Às vezes, as configurações padrão não são selecionadas, causando erros de autenticação de proxy, como:

A nonrecoverable I/O error occurred on file "https://storageaccount.blob.core.windows.net/container/BackupAzurefile.bak:" Backup to URL received an exception from the remote endpoint. Exception Message: The remote server returned an error: (407)* **Proxy Authentication Required.

Para resolver esse problema, crie um arquivo de configuração que permite que o processo de Backup para URL use as configurações de proxy padrão usando as seguintes etapas:

  1. Crie um arquivo de configuração chamado BackuptoURL.exe.config com o seguinte conteúdo XML:

    <?xml version ="1.0"?>
    <configuration>
        <system.net>
            <defaultProxy enabled="true" useDefaultCredentials="true">
                <proxy usesystemdefault="true" />
            </defaultProxy>
        </system.net>
    </configuration>
    
  2. Coloque o arquivo de configuração na pasta Binn da instância do SQL Server. Por exemplo, se o SQL Server estiver instalado na unidade C do computador, coloque o arquivo de configuração em C:\Program Files\Microsoft SQL Server\MSSQL13.\<InstanceName>\MSSQL\Binn.

  3. BackuptoURL.exe não é chamado ao usar chaves SAS, mas é acionado ao usar uma chave de acesso. Certifique-se de usar chaves de acesso ou você pode receber o seguinte erro:

    Erro 50 do sistema operacional(Não há suporte para a solicitação.)

Erros e soluções comuns

Problema Solução
Erro 3063: Falha ao gravar no dispositivo de blob de blocos de backup https://storageaccount/container/name.bak. O dispositivo atingiu o limite de blocos permitidos. Para corrigir esse problema, distribua o destino de backup em vários arquivos e use os seguintes parâmetros no comando de backup: COMPRESSION, MAXTRANSFERSIZE = 4194304, BLOCKSIZE = 65536.
Erro 3035: Falha no backup diferencial para um ou vários bancos de dados. Isso ocorrerá se você tiver configurado o serviço de Backup do Azure para fazer backup dos bancos de dados SQL ou de um instantâneo da VM (máquina virtual), o que não cria um backup somente cópia, causando falha nos backups sob demanda do plano de manutenção ou do trabalho do SQL Agent. Para corrigir isso, adicione essas chaves do Registro nas VMs que hospedam as instâncias do SQL Server na chave [HKEY_LOCAL_MACHINE\SOFTWARE\MICROSOFT\BCDRAGENT] e adicione "USEVSSCOPYBACKUP"="TRUE".
Erro 3201: falha no backup com – Erro 50 do sistema operacional (Não há suporte para a solicitação). Regenerar o token SAS (assinatura de acesso compartilhado) usando o Gerenciador de Armazenamento: você pode criar uma política usando o Gerenciador de Armazenamento do Azure e criar um token SAS com essa política no Gerenciador de Armazenamento do Azure. Recrie a credencial usando esse novo token SAS gerado do Armazenamento do Azure e tente fazer o backup novamente. Para obter mais informações, consulte Problemas conhecidos com BACKUP TO URL. Verifique se o NSG (grupo de segurança de rede) e/ou firewall permite a conexão de entrada e saída com as portas 1433 e 443.
Erro 3271: o backup falha devido ao TLS com o erro - O backup para a URL recebeu uma exceção do ponto de extremidade remoto. Isso pode ocorrer no SQL Server versions 2012, 2014 e 2016. O backup para uma URL de serviço do Armazenamento de Blobs do Microsoft Azure não é compatível com o TLS 1.2 e pode ser corrigido ao seguir as instruções no KB4017023.
Erro 3271: o backup para a URL recebeu uma exceção do ponto de extremidade remoto. Mensagem de exceção: O nome remoto não pôde ser resolvido. Você verá essa mensagem se uma credencial incorreta, um segredo ou uma chave SAS tiver sido usada para configurar o backup. Remova e crie a credencial novamente. Para o SQL 2012/2014, use a identidade da conta de armazenamento e a chave de acesso e para o SQL Server 2016 e versões posteriores, use o SAS.
Erro 18210: Exceção: O servidor remoto retornou um erro: (400) Solicitação Incorreta. Você pode alterar a versão mínima do TLS na conta de armazenamento para 1.0 (Conta de armazenamento>Configuração>Versão mínima do TLS) ou habilitar a criptografia forte, conforme documentado no KB4017023.
Mensagem de exceção: o servidor remoto retornou um erro: (412) há uma concessão no blob e nenhuma ID de concessão foi especificada na solicitação. Identifique os blobs no Gerenciador de Armazenamento do Azure com um tamanho de 1 TB, interrompa a concessão, exclua o blob e repita a operação de backup.
Erro: o servidor remoto retornou um erro: (403) Proibido. A recriação da conta de armazenamento, da credencial e do token SAS deve corrigir o problema.
O backup do banco de dados de 1 TB falha no SQL 2012/2014. Os backups de 1 TB são uma limitação conhecida nos blobs de páginas anteriores ao SQL Server 2016 (13.x). Use a compactação de backup adicionando a cláusula 'WITH COMPRESSION' à instrução de backup T-SQL ou atualize sua instância do SQL Server para o SQL Server 2016 (13.x) e versões posteriores.
Erro: o backup para a URL recebeu uma exceção do ponto de extremidade remoto. Mensagem de exceção: o servidor remoto retornou um erro: (416) o intervalo de páginas especificado é inválido. Você poderá ver isso se estiver no SQL Server 2012 (11.x) e SQL Server 2014 (12.x) e se o tamanho do backup aumentar para 1 TB. Distribua seus arquivos de backup e/ou use a compactação de backup para resolver.
Falha no backup ao usar um plano de manutenção. Há alguns bugs com o plano de manutenção. Tente usar o T-SQL para executar seu backup. Se o T-SQL funcionar, você poderá criar um trabalho do SQL Agent a ser executado para fazer backup dos seus bancos de dados.
Falha no backup devido aos limites de VM terem sido atingido. Se você estiver recebendo erros informando que o limite de IOPS/VM do disco foi atingido, os backups poderão ficar lentos ou falhar. Para monitorar os limites de IOPS/VM, use Métricas do Azure Monitor e redimensione a VM/disco, se necessário, para corrigir o problema.
O servidor remoto retornou um erro: (409) Conflito para SQL Server 2012/2014" Contas de armazenamento com namespace hierárquico são equipadas para blobs de blocos, e não para blobs de páginas. Contas de armazenamento sem esse recurso não devem ser usadas para BACKUP TO URL no SQL Server 2014 (12.x).