Quais são os problemas comuns que podem ocorrer ao usar backup e restauração nativos no RDS para SQL Server?

10 minuto de leitura
0

Estou executando um backup ou restauração nativo para minha instância do Amazon Relational Database Service (Amazon RDS) para Microsoft SQL Server. Quais são os erros comuns que eu posso encontrar durante esse processo?

Resolução

Ao usar a opção de backup e restauração nativos do RDS for SQL Server, você pode encontrar erros de validação. Esses erros são exibidos imediatamente e a tarefa não é criada. A seguir estão os erros comuns e as correções sugeridas:

Erro: Aborted the task because of a task failure or a concurrent RESTORE_DB request

Este erro ocorre se você tiver problemas relacionados ao espaço na instância de banco de dados ao restaurar o backup do Amazon Elastic Compute Cloud (Amazon EC2) ou on-premises:

[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 esse erro, faça o seguinte:

Opção 1:

1.    Execute o comando a seguir na instância de origem (EC2 ou no on-premises). Esse comando verifica o tamanho do banco de dados, incluindo o arquivo de dados e o arquivo Tlog. No exemplo a seguir, substitua [DB_NAME] pelo nome do seu banco de dados.

SELECT DB_NAME(database_id) AS DatabaseName,
Name AS Logical_Name,
Physical_Name, (size*8)/1024/1024 SizeGB
FROM sys.master_files
WHERE DB_NAME(database_id) = '[DB_NAME]'
GO
Database Size = (DB_Name size + DB_Name_Log size)

2.    Compare o tamanho do banco de dados das instâncias de origem com o armazenamento disponível na instância de banco de dados. Aumente o armazenamento disponível adequadamente e depois restaure o banco de dados.

Opção 2:

Reduza o arquivo de log do banco de dados atual no SQL Server de origem para limpar o espaço não utilizado e, em seguida, execute o backup do banco de dados.

Use o comando a seguir para reduzir o arquivo de log.

DBCC SHRINKFILE (LogFileName, Desired Size in MB)

Erro: Aborted the task because of a task failure or a concurrent RESTORE_DB request

O erro a seguir ocorre quando você tem problemas de permissão relacionados à função ou política do AWS Identity and Access Management (IAM) associada à opção SQLSERVER_BACKUP_RESTORE:

[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

Para resolver esse erro, faça o seguinte:

1.    Verifique a consulta de restauração para garantir que o bucket do S3 e o prefixo da pasta estejam corretos:

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.    Verifique se a política do IAM inclui os seguintes atributos:

{
  "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: substitua arn:aws:s3:::bucket_name pelo ARN do seu bucket do S3.

3.    Verifique se a política está associada corretamente à função dada na opção SQLSERVER_BACKUP_RESTORE.

4.    Verifique se a opção SQLSERVER_BACKUP_RESTORE é o grupo de opções associado à instância de banco de dados:

ARN do bucket S3
Prefixo da pasta S3 (opcional)

Para obter mais informações, consulte Como faço backups nativos de uma instância de banco de dados Amazon RDS que está executando o SQL Server?

Erro: Aborted the task because of a task failure or a concurrent RESTORE_DB request

Este erro é comumente associado à restauração de banco de dados entre contas.

Exemplo:

  • A conta A tem um bucket S3 onde o backup é armazenado.
  • A conta B tem uma instância de banco de dados do RDS em que a restauração precisa ser feita.

O erro ocorre quando você tem problemas relacionados à permissão em um perfil ou uma política do IAM associada à opção. Ou há um problema de permissões com a política de bucket associada ao bucket do S3 na conta cruzada.

[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 resolver esse erro, faça o seguinte:

1.    Verifique se a política do IAM na Conta B (a conta em que a instância de banco de dados que você restaurará está localizada) inclui os seguintes atributos:

{
  "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.    Verifique se a política de bucket associada ao bucket do S3 na Conta A inclui os seguintes atributos:

{
  "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"   /*---- Change Details here
        ]
      },
      "Action": [
        "s3:ListBucket",
        "s3:GetBucketLocation"
             ],
      "Resource": [
        "arn:aws:s3:::PUT-BUCKET-NAME"   /*---- Change Details here
      ]
    },
    {
      "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"   /*---- Change Details here
        ]
      },
      "Action": [
        "s3:GetObject",
        "s3:PutObject",
        "s3:ListMultipartUploadParts",
        "s3:AbortMultipartUpload"
      ],
      "Resource": [
        "arn:aws:s3::: PUT-BUCKET-NAME/*"  /*---- Change Details here
      ]
    }
  ]
}

Para mais informações, consulte os links a seguir:

Erro: Cannot find server certificate with thumbprint 'XXXXXX'

Este erro ocorre quando você tenta restaurar um banco de dados com Transparent Data Encryption (TDE) do EC2 ou on-premises para o RDS for SQL Server:

[2022-06-1511:55:22.280] Cannot find server certificate with thumbprint 'XXXXXXX'.
[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.

Este erro indica uma tentativa de restaurar um backup de um banco de dados criptografado usando o TDE em uma instância SQL diferente do servidor de original. O certificado TDE do servidor original deve ser importado para o servidor de destino. Para obter mais informações sobre a importação de certificados de servidor e as respectivas limitações, consulte Suporte para criptografia de dados transparente no SQL Server.

Para resolver esse erro além de importar certificados, faça o seguinte:

Há duas soluções alternativas disponíveis para evitar esse erro.

Opção 1: o backup do banco de dados é proveniente de on-premises ou de uma instância do EC2, mas o SQL Server do RDS de destino está no MultiAZ

1.    Crie um backup do banco de dados de origem com o TDE ativado.

2.    Restaure o backup como novo banco de dados em seu servidor on-premises.

3.    Desative o TDE no banco de dados recém-criado. Use os seguintes comandos para desativar o TDE:

Execute o comando a seguir para desativar a criptografia no banco de dados. No comando a seguir, substitua Databasename pelo nome correto para seu banco de dados.

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

Execute o comando a seguir para eliminar a DEK usada para criptografia. No comando a seguir, substitua Databasename pelo nome correto para seu banco de dados.

USE [Databasename];
GO
DROP DATABASE ENCRYPTION KEY;
GO

4.    Crie um backup nativo do SQL Server e restaure esse novo backup na instância RDS desejada. Para obter mais informações, consulte Como faço backups nativos de uma instância de banco de dados Amazon RDS que está executando o SQL Server?

5.    Como ativar novamente o TDE no novo banco de dados do RDS.

Opção 2: o banco de dados é originário de um banco de dados RDS para SQL Server criptografado com TDE

1.    Use um snapshot da instância de origem para restaurar o banco de dados em uma nova instância.

2.    Como desativar o TDE no banco de dados criado a partir do snapshot.

3.    Como criar um backup nativo do SQL e restaurar esse novo backup na instância do RDS desejada.

4.    Como ativar novamente o TDE no novo banco de dados do RDS.

Erros comuns observados no backup nativo no RDS para SQL Server

Erro: Aborted the task because of a task failure or an overlap with your preferred backup window for RDS automated backup

O erro a seguir ocorre quando você tem problemas de permissão relacionados ao perfil ou à política do IAM associada à opção SQLSERVER_BACKUP_RESTORE.

[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 esse problema, faça o seguinte:

1.    Verifique a consulta de restauração para garantir que o bucket do S3 e o prefixo da pasta estejam corretos:

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.    Verifique se a política do IAM inclui os seguintes atributos:

{
  "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: substitua arn:aws:s3:::bucket_name pelo ARN do seu bucket do S3.

3.    Verifique se a política está associada corretamente à função mostrada na opção SQLSERVER_BACKUP_RESTORE.

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

ARN do bucket S3
Prefixo da pasta S3 (opcional)

Para obter mais informações, consulte Como faço backups nativos de uma instância de banco de dados Amazon RDS que está executando o SQL Server?

Erro: Write on "XXX" failed, Unable to write chunks to S3, S3 write stream upload failed

Esse é um problema conhecido com o RDS para SQL Server. Às vezes, o tamanho do banco de dados é estimado incorretamente e faz com que o procedimento de backup falhe com o seguinte erro.

[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 "XXXX" 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

A solução alternativa para esse erro é ativar a compactação do backup do banco de dados. Isso compacta o backup, facilitando o recebimento do arquivo pelo S3.

Execute o seguinte comando para ativar a compactação de backup:

exec rdsadmin..rds_set_configuration 'S3 backup compression', 'true';