Ir para o conteúdo

Como faço para resolver erros ao usar backup e restauração nativos para minha instância de banco de dados do Amazon RDS para SQL Server?

13 minuto de leitura
0

Quero resolver os erros que ocorrem ao fazer backup e restaurar minha instância de banco de dados do Amazon Relational Database Service (Amazon RDS) para Microsoft SQL Server.

Breve descrição

Para resolver erros que ocorrem ao usar o backup e restauração nativos na instância de banco de dados do Amazon RDS para SQL Server, faça o seguinte:

  • Aumente o espaço na instância de banco de dados.
  • Conceda permissões de acesso ao perfil do AWS Identity and Access Management (IAM) para a opção SQLSERVER_BACKUP_RESTORE.
  • Conceda permissões do AWS Key Management Service (AWS KMS) ao perfil do IAM para o grupo de opções.
  • Conceda permissões à política do IAM ou à política de bucket para backups entre contas.
  • Importe o certificado Transparent Data Encryption (TDE).
  • Especifique as letras corretas da unidade do Windows.
  • Defina o MAXTRANSFERSIZE do arquivo de backup como um valor maior do que o valor usado ao fazer a restauração.
  • Reduza o tamanho para transferir o arquivo de backup para o Amazon Simple Storage Service (Amazon S3).

Resolução

Observação: se você receber erros ao executar comandos da AWS Command Line Interface (AWS CLI), consulte Solução de problemas da AWS CLI. Além disso, verifique se você está usando a versão mais recente da AWS CLI.

Aumentar o espaço na instância de banco de dados

Pode faltar espaço na instância do banco de dados durante a restauração do backup de uma instância do Amazon Elastic Compute Cloud (Amazon EC2) ou on-premises. Nesses casos, o Amazon RDS interrompe a tarefa.

Exemplo de saída de log:

[2022-04-07 05:21:22.317] Aborted the task because of a task failure or a concurrent RESTORE_DB request.  
[2022-04-07 05:21:22.437] Task has been aborted  
[2022-04-07 05:21:22.440] There is not enough space on the disk to perform restore database operation.

Para resolver o problema, é possível aumentar o armazenamento disponível na instância do banco de dados. Outra opção é reduzir o tamanho do arquivo de log de transações na instância do banco de dados.

Aumentar o armazenamento disponível

Siga estas etapas:

  1. Execute a seguinte consulta na instância do EC2 ou on-premises para verificar o tamanho do arquivo de dados do banco de dados e do arquivo de log de transações:
    SELECT DB_NAME(database_id) AS DatabaseName,  
           Name AS Logical_Name,  
           Physical_Name,  
           (size*8)/1024/1024 AS SizeGB  
      FROM sys.master_files  
     WHERE DB_NAME(database_id) = 'DB_NAME'  
        GO  
           Database Size = (DB_Name size + DB_Name_Log size)
    Observação: substitua DB_NAME pelo nome do seu banco de dados.
  2. Compare o tamanho do banco de dados da instância do EC2 ou on-premises com o armazenamento disponível na instância do banco de dados.
  3. Aumente o armazenamento disponível na instância do banco de dados e, em seguida, faça a restauração.

Reduzir o tamanho do arquivo de log de transações

Siga estas etapas:

  1. Para reduzir o tamanho atual do arquivo de log de transações na instância do EC2 ou on-premises, execute o seguinte comando:
    DBCC SHRINKFILE (FileName, FileSizeMB)
    Observação: substitua FileName pelo nome do arquivo de dados ou de log de transações e FileSizeMB pelo tamanho do arquivo de destino em megabytes.
  2. Faça backup do banco de dados.

Conceder permissões de acesso ao perfil do IAM para a opção SQLSERVER_BACKUP_RESTORE

Se você não tiver permissões suficientes para o perfil do IAM associado à opção SQLSERVER_BACKUP_RESTORE, o Amazon RDS interromperá a tarefa.

Exemplo de saída de log:

[2020-12-15 08:56:22.143] Aborted the task because of a task failure or a concurrent RESTORE_DB request.  
[2020-12-15 08:56:22.213] Task has been aborted  
[2020-12-15 08:56:22.217] Access Denied

-ou-

[2022-07-16 16:08:22.067] Task execution has started.   
[2022-07-16 16:08:22.143] Aborted the task because of a task failure or an overlap with your preferred backup window for RDS automated backup.  
[2022-07-16 16:08:22.147] Task has been aborted  
[2022-07-16 16:08:22.150] Access Denied

Para solucionar o problema, siga estas etapas:

  1. Execute o comando a seguir para verificar se o bucket do S3 e o prefixo da pasta estão corretos na consulta de restauração:

    exec msdb.dbo.rds_restore_database  
          @restore_db_name='database_name',  
          @s3_arn_to_restore_from='arn:aws:s3:::bucket_name/file_name_and_extension';
  2. Adicione a seguinte declaração à política de permissões do IAM:

    {  
      "Version": "2012-10-17",  
      "Statement": [  
        {  
          "Effect": "Allow",  
          "Action": [  
            "s3:ListBucket",  
            "s3:GetBucketLocation"  
          ],  
          "Resource": "arn:aws:s3:::bucket_name"  
        },  
        {  
          "Effect": "Allow",  
          "Action": [  
            "s3:GetObjectAttributes",  
            "s3:GetObject",  
            "s3:PutObject",  
            "s3:ListMultipartUploadParts",  
            "s3:AbortMultipartUpload"  
          ],  
          "Resource": "arn:aws:s3:::bucket_name/*"  
        }  
      ]  
    }

    Observação: na política anterior, substitua arn:aws:s3:::bucket_name pelo nome do recurso da Amazon (ARN) do bucket do S3.

  3. Adicione a política ao perfil associado à opção SQLSERVER_BACKUP_RESTORE.

  4. Verifique se a opção SQLSERVER_BACKUP_RESTORE está no grupo de opções associado à instância do banco de dados. 

Para saber mais, consulte Como faço um backup nativo do meu banco de dados do SQL Server para o Amazon RDS e restauro a partir do Amazon S3?

Conceder permissões do AWS KMS ao perfil do IAM para o grupo de opções

O backup e a restauração nativos do RDS para SQL Server podem criptografar e descriptografar o arquivo de backup no lado do cliente. Se a política do perfil do IAM associado ao grupo de opções não tiver permissões para a chave KMS, o backup ou a restauração falharão.

Exemplo de saída de log:

 [2025-12-12 01:34:22.217] Aborted the task because of a task failure or an overlap with your preferred backup window for RDS automated backup.   
 [2025-12-12 01:34:22.223] Task has been aborted   
 [2025-12-12 01:34:22.230] User: arn:aws:sts::0123456789:assumed-role/<your_role_name>/RDS-SqlServerBackupRestore is not authorized to perform: kms:DescribeKey on resource: arn:aws:kms:ap-northeast-1:0123456789:key/<your_kms_key_id> because no identity-based policy allows the kms:DescribeKey action

Para resolver o problema, adicione a seguinte declaração à política do IAM associada ao grupo de opções.

{  
  "Version":"2012-10-17",                  
  "Statement": [  
    {  
      "Sid": "AllowAccessToKey",  
      "Effect": "Allow",  
      "Action": [  
        "kms:DescribeKey",  
        "kms:GenerateDataKey",  
        "kms:Encrypt",  
        "kms:Decrypt"  
      ],  
      "Resource": "arn:aws:kms:us-east-1:0123456789:key/key-id"  
    },  
    {  
      "Sid": "AllowAccessToS3",  
      "Effect": "Allow",  
      "Action": [  
        "s3:ListBucket",  
        "s3:GetBucketLocation"  
      ],  
      "Resource": "arn:aws:s3:::PUT-BUCKET-NAME"  
    },  
    {  
      "Sid": "GetS3Info",  
      "Effect": "Allow",  
      "Action": [  
        "s3:GetObjectAttributes",  
        "s3:GetObject",  
        "s3:PutObject",  
        "s3:ListMultipartUploadParts",  
        "s3:AbortMultipartUpload"  
      ],  
      "Resource": "arn:aws:s3:::PUT-BUCKET-NAME/*"  
    }  
  ]  
}

Conceder permissões à política do IAM ou à política de bucket para backups entre contas

Quando você restaura um backup de banco de dados de uma conta da AWS para outra diferente, o Amazon RDS pode interromper a tarefa por permissões insuficientes. Por exemplo, você armazena o backup em um bucket do S3 na conta A e o restaura em uma instância de banco de dados do Amazon RDS na conta B.

A política do perfil do IAM associado ao grupo de opções ou a política de bucket associada ao bucket do S3 não têm as permissões necessárias.

Exemplo de saída de log:

[2022-02-03 15:57:22.180] Aborted the task because of a task failure or a concurrent RESTORE_DB request.  
[2022-02-03 15:57:22.260] Task has been aborted  
[2022-02-03 15:57:22.263] Error making request with Error Code Forbidden and Http Status Code Forbidden. No further error information was returned by the service.

Para solucionar o problema, siga estas etapas:

  1. Adicione a seguinte declaração à política do IAM associada ao grupo de opções na conta B:

    {  
      "Version": "2012-10-17",  
      "Statement":  
        [  
          {  
            "Effect": "Allow",  
            "Action":  
              [  
                "s3:ListBucket",  
                "s3:GetBucketLocation"  
              ],  
            "Resource": "arn:aws:s3:::name_of_bucket_present_in_Account_A"  
          },  
          {  
            "Effect": "Allow",  
            "Action":  
              [  
                "s3:GetObject",  
                "s3:PutObject",  
                "s3:ListMultipartUploadParts",  
                "s3:AbortMultipartUpload"  
              ],  
            "Resource": "arn:aws:s3:::name_of_bucket_present_in_Account_A/*"  
          },  
          {  
            "Action": [  
              "kms:DescribeKey",  
              "kms:GenerateDataKey",  
              "kms:Decrypt",  
              "kms:Encrypt"  
              "kms:ReEncryptTo",  
              "kms:ReEncryptFrom"  
            ],  
            "Effect": "Allow",  
            "Resource": [  
              "arn:aws: PUT THE NAME OF THE KEY HERE",  
              "arn:aws:s3:::name_of_bucket_present_in_Account_A/*"  
            ]  
          }  
        ]  
    }
  2. Adicione a seguinte declaração à política de bucket associada ao bucket do S3 na conta A:

    {  
      "Version": "2012-10-17",  
      "Statement": [  
        {  
          "Sid": "Permission to cross account",  
          "Effect": "Allow",  
          "Principal": {  
            "AWS": [  
              "arn:aws:iam::AWS-ACCOUNT-ID-OF-RDS:role/service-role/PUT-ROLE-NAME"  
            ]  
          },  
          "Action": [  
            "s3:ListBucket",  
            "s3:GetBucketLocation"  
                 ],  
          "Resource": [  
            "arn:aws:s3:::PUT-BUCKET-NAME"  
          ]  
        },  
        {  
          "Sid": "Permission to cross account on object level",  
          "Effect": "Allow",  
          "Principal": {  
            "AWS": [  
              "arn:aws:iam::AWS-ACCOUNT-ID-OF-RDS:role/service-role/PUT-ROLE-NAME"  
            ]  
          },  
          "Action": [  
            "s3:GetObject",  
            "s3:PutObject",  
            "s3:ListMultipartUploadParts",  
            "s3:AbortMultipartUpload"  
          ],  
          "Resource": [  
            "arn:aws:s3:::PUT-BUCKET-NAME/*"  
          ]  
        }  
      ]  
    }

Para saber mais, consulte Importing and exporting SQL Server databases using native backup and restore (Importar e exportar bancos de dados do SQL Server usando backup e restauração nativos) e Bucket owner granting cross-account permission to objects it does not own (Proprietário do bucket concede permissão entre contas a objetos que não possui).

Importar o certificado TDE

Quando você restaura o backup de um banco de dados, mas não importa o certificado TDE para o servidor de destino, a tarefa é interrompida. Por exemplo, você tenta restaurar um banco de dados com TDE de uma instância do EC2 ou on-premises para uma instância de banco de dados do RDS para SQL Server.

Exemplo de saída de log:

[2022-06-15 11:55:22.280] Cannot find server certificate with thumbprint '########'.  
[2022-06-15 11:55:22.280] RESTORE FILELIST is terminating abnormally.  
[2022-06-15 11:55:22.300] Aborted the task because of a task failure or a concurrent RESTORE_DB request.  
[2022-06-15 11:55:22.333] Task has been aborted  
[2022-06-15 11:55:22.337] Empty restore file list result retrieved.

Para resolver o problema, importe o certificado TDE para o servidor de destino. 

Para evitar esse problema, use uma das seguintes soluções alternativas.

Você faz backup do banco de dados de uma instância on-premises ou do EC2, mas o RDS para SQL Server de destino está em várias Zonas de Disponibilidade

Siga estas etapas:

  1. Crie um backup do banco de dados do EC2 ou on-premises com o TDE ativado.

  2. Restaure o backup como um novo banco de dados no servidor on-premises.

  3. Execute o comando a seguir para desativar a criptografia no novo banco de dados:

    USE master;  
    GO  
    ALTER DATABASE Databasename SET ENCRYPTION OFF;  
    GO

    Observação: substitua Databasename pelo nome do seu banco de dados.

  4. Execute o seguinte comando para remover a chave de criptografia de banco de dados (DEK) no novo banco de dados:

    USE Databasename;  
    GO  
    DROP DATABASE ENCRYPTION KEY;  
    GO

    Observação: substitua Databasename pelo nome do seu banco de dados.

  5. Faça um backup nativo do SQL Server e, em seguida, restaure o backup na instância de banco de dados.

  6. Ative o TDE para a nova instância de banco de dados.

Você faz backup da instância do banco de dados em uma instância de banco de dados do RDS para SQL Server criptografada com o TDE

Siga estas etapas:

  1. Use um snapshot de banco de dados da instância do RDS para SQL Server a fim de restaurar em uma nova instância de banco de dados.
    Observação: se você alterar a edição da instância do banco de dados, consulte as Microsoft SQL Server considerations (Considerações sobre o Microsoft SQL Server).
  2. Desative o TDE para a nova instância de banco de dados.
  3. Faça um backup nativo do SQL e, em seguida, restaure o backup na instância de banco de dados.
  4. Ative o TDE para a nova instância de banco de dados.

Especificar as letras corretas da unidade do Windows

O RDS para SQL Server pode restaurar um banco de dados em volumes de armazenamento adicionais. Quando você especifica uma letra de unidade do Windows incorreta para um volume de armazenamento, a operação de restauração falha.

Exemplo de consulta e mensagem de erro:

-- Native restore query  
EXEC msdb.dbo.rds_restore_database      
    @restore_db_name='my_database',  
    @s3_arn_to_restore_from='arn:aws:s3:::<your_bucket_name>/my_database.bak',  
    @data_file_volume='Y:', -- incorrect drive letter.  
    @log_file_volume='Z:';  -- incorrect drive letter.  
-- Error message  
Message 50000、Level 16、State 1、Procedure msdb.dbo.rds_restore_database、Line 122  
Volume for data files is unavailable. Choose from available volumes.

Para resolver o problema, verifique as letras da unidade do Windows. Siga estas etapas:

  1. Liste os volumes de armazenamento adicionais anexados à instância de banco de dados com o comando describe-db-instances:

    aws rds describe-db-instances \  
      --db-instance-identifier your-db-instance-id \  
      --query 'DBInstances[].AdditionalStorageVolumes[].VolumeName' \  
      --output text

    Observação: substitua your-db-instance-id pelo identificador da instância de banco de dados.
    Observação: se não conseguir obter o nome do volume, você precisará atualizar a AWS CLI para a versão mais recente.

    Para saber mais sobre volumes de armazenamento, consulte Considerations for using additional storage volumes with RDS for SQL Server (Considerações sobre o uso de volumes de armazenamento adicionais no RDS para SQL Server).

  2. Corrija a consulta para especificar as letras corretas da unidade do Windows para @data_file_volume e @log_file_volume.

Definir o MAXTRANSFERSIZE do arquivo de backup como um valor maior do que o usado ao fazer a restauração

O erro de MAXTRANSFERSIZE ocorre quando o backup contém grupos de arquivos FILESTREAM ou OLTP na memória, e você usou um MAXTRANSFERSIZE incorreto durante a restauração.

Observação: o RDS para SQL Server não é compatível com o recurso FILESTREAM.

Se você especificar o MAXTRANSFERSIZE explicitamente, poderá encontrar um erro: "RESTORE requires MAXTRANSFERSIZE=<required_size> but <your_specified_size> was specified."

Exemplo de consulta e saída de log:

-- query  
EXEC msdb.dbo.rds_restore_database      
    @restore_db_name='my_database',  
    @s3_arn_to_restore_from='arn:aws:s3:::<your_bucket_name>/my_database.bak',  
    @max_transfer_size=65536 -- specified MAXTRANSFERSIZE explicitly  

-- error message  
 [2025-12-11 07:26:22.320] Task execution has started.   
 [2025-12-11 07:26:22.520] RESTORE requires MAXTRANSFERSIZE=4194304 but 65536 was specified.  RESTORE DATABASE is terminating abnormally.

Para resolver o problema, não especifique MAXTRANSFERSIZE:

EXEC msdb.dbo.rds_restore_database      
    @restore_db_name='my_database',  
    @s3_arn_to_restore_from='arn:aws:s3:::<your_bucket_name>/my_database.bak'  

Ou especifique um valor igual ou maior que o tamanho indicado na mensagem de erro:

EXEC msdb.dbo.rds_restore_database      
    @restore_db_name='my_database',  
    @s3_arn_to_restore_from='arn:aws:s3:::<your_bucket_name>/my_database.bak',  
    @max_transfer_size=4194304

Reduzir o tamanho do arquivo de backup para transferi-lo ao Amazon S3

Esse problema ocorre quando você move um objeto maior do que o tamanho máximo para uma operação de várias partes do Amazon S3. O Amazon S3 divide o objeto maior em várias partes que excedem o número máximo de partes permitido para cada upload.

Exemplo de saída de log:

[2022-04-21 16:45:04.597] reviews_consumer/reviews_consumer_PostUpdate_042122.bak: Completed processing 100% of S3 chunks.  
[2022-04-21 16:47:05.427] Write on "####" failed: 995(The I/O operation has been aborted because of either a thread exit or an application request.) A nonrecoverable I/O error occurred on file "XXXX:" 995(The I/O operation has been aborted because of either a thread exit or an application request.). BACKUP DATABASE is terminating abnormally.  
[2022-04-21 16:47:22.033] Unable to write chunks to S3 as S3 processing has been aborted.  
[2022-04-21 16:47:22.040] reviews_consumer/reviews_consumer_PostUpdate_042122.bak: Aborting S3 upload, waiting for S3 workers to clean up and exit  
[2022-04-21 16:47:22.053] Aborted the task because of a task failure or an overlap with your preferred backup window for RDS automated backup.  
[2022-04-21 16:47:22.060] reviews_consumer/reviews_consumer_PostUpdate_042122.bak: Aborting S3 upload, waiting for S3 workers to clean up and exit  
[2022-04-21 16:47:22.067] S3 write stream upload failed. Encountered an error while uploading an S3 chunk: Part number must be an integer between 1 and 10000, inclusive S3 write stream upload failed. Encountered an error while uploading an S3 chunk: Part number must be an integer between 1 and 10000, inclusive S3 write stream upload failed. Encountered an error while uploading an S3 chunk: Part number must be an integer between 1 and 10000, inclusive S3 write stream upload failed. Encountered an error while uploading an S3 chunk: Part number must be an integer between 1 and 10000, inclusive

Para resolver o problema, ative a compactação de backup do banco de dados a fim de reduzir o tamanho do backup, de modo que o Amazon S3 possa receber o arquivo.

Para ativar a compactação de backup, execute o seguinte comando:

exec rdsadmin..rds_set_configuration 'S3 backup compression', 'true';
Sem comentários