¿Cuáles son los problemas más comunes que pueden producirse cuando se utilizan la copia de seguridad y la restauración nativas en RDS para SQL Server?

11 minutos de lectura
0

Estoy haciendo una copia de seguridad o restauración nativa de mi instancia de Amazon Relational Database Service (Amazon RDS) para Microsoft SQL Server. ¿Cuáles son los errores más frecuentes que puedo encontrarme durante este proceso?

Resolución

Al usar la opción nativa de copia de seguridad y restauración de RDS para SQL Server, es posible que se produzcan errores de validación. Estos errores se muestran de manera inmediata y no se crea ninguna tarea. A continuación, se indican los errores más comunes y las soluciones que sugerimos:

Error: Se canceló la tarea debido a un error que presenta o a una solicitud simultánea de RESTORE_DB.

Este error se produce si tiene problemas relacionados con el espacio en la instancia de base de datos mientras restaura una copia de seguridad desde Amazon Elastic Compute Cloud (Amazon EC2) o de forma local:

[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 este error, haga lo siguiente:

Opción 1:

1.    Ejecute el siguiente comando en la instancia de origen (EC2 o local). Mediante este comando, se verifica el tamaño de la base de datos, incluidos el archivo de datos y el archivo Tlog. En el siguiente ejemplo, reemplace [DB_NAME] por el nombre de su base de datos.

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 el tamaño de la base de datos de las instancias de origen con el almacenamiento disponible en la instancia de la base de datos. Aumente el almacenamiento disponible según se necesite y, a continuación, restaure la base de datos.

Opción 2:

Reduzca el tamaño del archivo de registro de base de datos actual en el servidor SQL Server de origen para liberar el espacio que no se esté utilizando y, luego, haga la copia de seguridad.

Use el siguiente comando para reducir el tamaño del archivo de registro.

DBCC SHRINKFILE (LogFileName, Desired Size in MB)

Error: Se canceló la tarea debido a un error que presenta o a una solicitud simultánea de RESTORE_DB.

El siguiente error se produce cuando tiene problemas de permisos relacionados con el rol o la política de AWS Identity and Access Management (IAM) relacionados con la opción 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 este error, haga lo siguiente:

1.    Verifique la consulta de restauración para asegurarse de que el bucket de S3 y el prefijo de la carpeta sean los correctos:

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 que la política de IAM incluye los siguientes 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/*"
    }
  ]
}

Nota: Sustituya arn:aws:s3: ::bucket_name por el ARN de su bucket de S3.

3.    Compruebe que la política esté correctamente asociada al rol que se le ha asignado en la opción SQLSERVER_BACKUP_RESTORE.

4.    Compruebe que la opción SQLSERVER_BACKUP_RESTORE es el grupo de opciones asociado a la instancia de la base de datos:

ARN del bucket de S3
Prefijo de la carpeta S3 (opcional)

Si desea obtener más información, consulte ¿Cómo realizo copias de seguridad nativas de una instancia de base de datos de Amazon RDS que ejecuta SQL Server?

Error: Se canceló la tarea debido a un error que presenta o a una solicitud simultánea de RESTORE_DB.

Este error suele estar relacionado con la restauración de bases de datos entre cuentas.

Ejemplo:

  • La cuenta A tiene un bucket de S3 donde se almacena la copia de seguridad.
  • La cuenta B tiene una instancia de base de datos de RDS en la que se debe llevar a cabo la restauración.

El error se produce cuando tiene problemas relacionados con los permisos en un rol o política de IAM que estén asociados con la opción, o bien hay un problema de permisos con la política del bucket asociada al bucket S3 en la cuenta 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 este error, haga lo siguiente:

1.    Compruebe que la política de IAM de la cuenta B (donde se encuentra la instancia de base de datos en la que va a llevar a cabo la restauración) incluye los siguientes 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.    Compruebe que la política de bucket asociada al bucket de S3 de la cuenta A incluye los siguientes 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 obtener más información, consulte estos recursos:

Error: No se puede encontrar el certificado del servidor con la huella digital 'XXXXXX'.

Este error se produce cuando intenta restaurar una base de datos con un cifrado de datos transparente (TDE) desde EC2 o de forma local a RDS para 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 error indica que se ha producido un intento de restaurar una copia de seguridad de una base de datos cifrada mediante TDE en una instancia de SQL distinta de su servidor de origen. Se debe importar el certificado TDE del servidor de origen al servidor de destino. Si desea obtener más información sobre la importación de certificados de servidor y las limitaciones que posee, consulte Compatibilidad con el cifrado de datos transparente en SQL Server.

Para resolver este error, además de importar los certificados, haga lo siguiente:

Existen dos soluciones disponibles para evitar este error.

Opción 1: La copia de seguridad de la base de datos proviene de una instancia local o de EC2, pero el SQL Server de RSDS de destino está en una MultiAZ

1.    Cree una copia de seguridad de la base de datos de origen con TDE activado.

2.    Restaure la copia de seguridad como una nueva base de datos en su servidor local.

3.    Desactive el TDE en la base de datos recién creada. Utilice los siguientes comandos para desactivar el TDE:

Ejecute el siguiente comando para desactivar el cifrado en la base de datos. En el siguiente comando, sustituya Databasename por el nombre correcto de la base de datos.

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

Ejecute el siguiente comando para eliminar el DEK que se utiliza para el cifrado. En el siguiente comando, sustituya Databasename por el nombre correcto de la base de datos.

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

4.    Cree una copia de seguridad nativa de SQL Server y restaure esta nueva copia de seguridad en la instancia de RDS donde desea hacerlo. Si desea obtener más información, consulte ¿Cómo realizo copias de seguridad nativas de una instancia de base de datos de Amazon RDS que ejecuta SQL Server?

5.    Vuelva a activar el TDE en la nueva base de datos de RDS.

Opción 2: La base de datos proviene de una base de datos de RDS para SQL Server cifrada con TDE

1.    Utilice una instantánea de la instancia de origen para restaurar la base de datos en una instancia nueva.

2.    Desactive el TDE en la base de datos creada a partir de la instantánea.

3.    Cree una copia de seguridad de SQL nativa y restaure esta nueva copia de seguridad en la instancia de RDS donde desea hacerlo.

4.    Vuelva a activar el TDE en la nueva base de datos de RDS.

Errores comunes que se observan en la copia de seguridad nativa en RDS para SQL Server

Error: Se canceló la tarea debido a un error que presenta o a una superposición con la ventana temporal preferida que ha indicado para realizar la copia de seguridad automática de RDS

El siguiente error se produce cuando tiene problemas de permisos relacionados con el rol o la política de IAM que están asociados con la opción 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 resolver este problema, lleve a cabo las siguientes acciones:

1.    Verifique la consulta de restauración para asegurarse de que el bucket de S3 y el prefijo de la carpeta sean los correctos:

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 que la política de IAM incluye los siguientes 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/*"
    }
  ]
}

Nota: Sustituya arn:aws:s3: ::bucket_name por el ARN de su bucket de S3.

3.    Compruebe que la política esté correctamente asociada al rol que se muestra en la opción SQLSERVER_BACKUP_RESTORE.

4.    Compruebe que la opción SQLSERVER_BACKUP_RESTORE está en el grupo de opciones asociado a la instancia de base de datos.

ARN del bucket de S3
Prefijo de la carpeta S3 (opcional)

Si desea obtener más información, consulte ¿Cómo realizo copias de seguridad nativas de una instancia de base de datos de Amazon RDS que ejecuta SQL Server?

Error: No se pudo escribir en “XXX”. No se pudieron escribir fragmentos en S3; error durante la carga de la transmisión de escritura de S3

Se trata de un problema conocido de RDS para SQL Server. En algunas ocasiones, el tamaño de la base de datos no se estima correctamente, lo que provoca que el procedimiento de copia de seguridad falle con el siguiente error.

[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

La solución alternativa para evitar este error consiste en activar la compresión de la copia de seguridad de la base de datos. De este modo, se comprime la copia de seguridad y facilita que S3 reciba el archivo.

Ejecute el siguiente comando para activar la compresión de copias de seguridad:

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