Restauración de una instancia de RDS Custom for SQL Server a un momento dado - Amazon Relational Database Service

Restauración de una instancia de RDS Custom for SQL Server a un momento dado

Al crear una nueva instancia de base de datos puede restaurar una instancia de base de datos a un momento dado (PITR). Para admitir PITR, las instancias de base de datos deben tener una retención de copia de seguridad habilitada.

El último momento que se puede restaurar para una instancia de base de datos de RDS Custom for SQL Server depende de varios factores, pero normalmente se sitúa en los cinco minutos previos a la hora actual. Para ver el último momento que se puede restaurar para una instancia de base de datos, use el comando describe-db-instances de la AWS CLI y compruebe el valor que se devuelve en el campo LatestRestorableTime para la instancia de base de datos. Para consultar la hora restaurable más reciente para cada instancia de base de datos en la consola de Amazon RDS, elija Copias de seguridad automatizadas.

Puede restaurar a cualquier punto en el tiempo dentro del periodo de retención de copia de seguridad. Para consultar la hora restaurable más reciente para cada instancia de base de datos, elija Copias de seguridad automatizadas en la consola de Amazon RDS.

Para obtener información general sobre PITR, consulte Restauración de una instancia de base de datos a un momento especificado para Amazon RDS.

Consideraciones de PITR para RDS Custom for SQL Server

En RDS Custom for SQL Server, PITR difiere de las siguientes formas importantes de PITR en Amazon RDS:

  • PITR solo restaura las bases de datos de la instancia de base de datos. No restaura el sistema operativo ni los archivos de la unidad C:.

  • Para una instancia de base de datos de RDS Custom for SQL Server, una base de datos se respalda automáticamente y es elegible para PITR solo bajo las siguientes condiciones:

    • La base de datos está en línea.

    • El modelo de recuperación está configurado en FULL.

    • Se puede escribir.

    • Tiene sus archivos físicos en la unidad D:.

    • No se muestra en la tabla rds_pitr_blocked_databases. Para obtener más información, consulte Hacer que las bases de datos no sean elegibles para PITR.

  • Las bases de datos aptas para PITR se determinan según el orden de su ID de base de datos. RDS Custom for SQL Server permite hasta 5000 bases de datos por instancia de base de datos. Sin embargo, el número máximo de bases de datos restauradas mediante una operación PITR para una instancia de base de datos de RDS Custom for SQL Server depende del tipo de clase de instancia. Para obtener más información, consulte Número de bases de datos aptas para el PITR por tipo de clase de instancia.

    Otras bases de datos que no forman parte de PITR se pueden restaurar a partir de instantáneas de base de datos, incluidas las copias de seguridad de instantáneas automatizadas utilizadas para PITR.

  • Al agregar una nueva base de datos apta para PITR, cambiarle el nombre o restaurarla, se inicia una instantánea de la instancia de base de datos.

  • La cantidad máxima de bases de datos aptas para el PITR cambia cuando la instancia de base de datos se somete a una operación de cálculo a escala, según el tipo de clase de instancia de destino. Si la instancia se escala verticalmente, lo que permite que más bases de datos de la instancia sean aptas para la PITR, se toma una nueva instantánea.

  • Las bases de datos restauradas tienen el mismo nombre que en la instancia de base de datos de origen. No puede especificar un nombre diferente.

  • AWSRDSCustomSQLServerIamRolePolicy requiere acceso a otros servicios de AWS. Para obtener más información, consulte Agregar una política de acceso a AWSRDSCustomSQLServerInstanceRole.

  • Los cambios de zona horaria no son compatibles con RDS Custom for SQL Server. Si cambia el sistema operativo o la zona horaria de la instancia de base de datos, PITR (y otra automatización) no funciona.

Número de bases de datos aptas para el PITR por tipo de clase de instancia

En la siguiente tabla se muestra el número máximo de bases de datos aptas para PITR en función del tipo de clase de instancia.

Tipo de clase de instancia Número máximo de bases de datos aptas para PITR
db.*.large 100
db.*.xlarge a db.*.2xlarge 150
db.*.4xlarge a db.*.8xlarge 300
db.*.12xlarge a db.*.16xlarge 600
db.*.24xlarge, db.*32xlarge 1 000

* Representa los diferentes tipos de clase de instancia.

El número máximo de bases de datos aptas para PITR en una instancia de base de datos depende del tipo de clase de instancia. El número oscila entre 100 en los más pequeños y 1000 en los tipos de clase de instancia más grandes compatibles con RDS Custom for SQL Server. Las bases de datos de sistema de servidor SQL (master, model, msdb, tempdb) no se incluyen en este límite. Cuando una instancia de base de datos se escala o desescala verticalmente, según el tipo de clase de instancia de destino, RDS Custom actualizará automáticamente el número de bases de datos aptas para PITR. RDS Custom for SQL Server enviará RDS-EVENT-0352 cuando cambie el número máximo de bases de datos aptas para PITR en una instancia de base de datos. Para obtener más información, consulte Eventos de versiones del motor personalizadas.

nota

La compatibilidad con PITR para más de 100 bases de datos solo está disponible en las instancias de base de datos creadas después del 26 de agosto de 2023. Para las instancias creadas antes del 26 de agosto de 2023, la cantidad máxima de bases de datos aptas para PITR es de 100, independientemente de la clase de instancia. Para habilitar la compatibilidad con PITR en más de 100 bases de datos en instancias de bases de datos creadas antes del 26 de agosto de 2023, puede realizar la siguiente acción:

  • Actualizar la versión del motor de base de datos a la 15.00.4322.2.v1 o posterior

Durante una operación de PITR, RDS Custom restaurará todas las bases de datos que formaban parte del PITR en la instancia de base de datos de origen en el momento de la restauración. Una vez que la instancia de base de datos de destino haya completado las operaciones de restauración, si la retención de copias de seguridad está habilitada, la instancia de base de datos empezará a realizar copias de seguridad en función del número máximo de bases de datos aptas para PITR en la instancia de base de datos de destino.

Por ejemplo, si su instancia de base de datos se ejecuta en una db.*.xlarge que tenga 200 bases de datos:

  1. RDS Custom for SQL Server seleccionará las primeras 150 bases de datos, ordenadas por su ID de base de datos, para la copia de seguridad de PITR.

  2. Modifique la instancia para escalarla verticalmente hasta db.*.4xlarge.

  3. Una vez completada la operación de computación de escalado, RDS Custom for SQL Server seleccionará las primeras 300 bases de datos, ordenadas por su ID de base de datos, para la copia de seguridad de PITR. Cada una de las 200 bases de datos que cumpla los requisitos del PITR ahora podrá optar al PITR.

  4. Ahora puede modificar la instancia para reducirla verticalmente a db.*.xlarge.

  5. Una vez completada la operación de computación de escalado, RDS Custom for SQL Server seleccionará de nuevo las primeras 150 bases de datos, ordenadas por su ID de base de datos, para la copia de seguridad de PITR.

Hacer que las bases de datos no sean elegibles para PITR

Puede optar por excluir las bases de datos individuales del PITR. Para esto, ponga sus valores de database_id en una tabla de rds_pitr_blocked_databases. Utilice el siguiente script SQL para crear la tabla.

Para crear la tabla rds_pitr_blocked_databases
  • Ejecute el siguiente script de SQL.

    create table msdb..rds_pitr_blocked_databases ( database_id INT NOT NULL, database_name SYSNAME NOT NULL, db_entry_updated_date datetime NOT NULL DEFAULT GETDATE(), db_entry_updated_by SYSNAME NOT NULL DEFAULT CURRENT_USER, PRIMARY KEY (database_id) );

Para obtener la lista de bases de datos elegibles y no elegibles, consulte el archivo RI.End en el directorio RDSCustomForSQLServer/Instances/DB_instance_resource_ID/TransactionLogMetadata del bucket de Amazon S3 do-not-delete-rds-custom-$ACCOUNT_ID-$REGION-unique_identifier. Para obtener más información acerca del archivo RI.End, consulte Registros de transacciones en Amazon S3.

También puede determinar la lista de bases de datos aptas para PITR mediante el siguiente script SQL. Establezca la variable @limit en el número máximo de bases de datos aptas para PITR para la clase de instancia. Para obtener más información, consulte Número de bases de datos aptas para el PITR por tipo de clase de instancia.

Para determinar la lista de bases de datos aptas para PITR en una clase de instancia de base de datos
  • Ejecute el siguiente script de SQL.

    DECLARE @Limit INT; SET @Limit = (insert-database-instance-limit-here); USE msdb; IF (EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'dbo' AND TABLE_NAME = 'rds_pitr_blocked_databases')) WITH TABLE0 AS ( SELECT hdrs.database_id as DatabaseId, sdb.name as DatabaseName, 'ALWAYS_ON_NOT_WRITABLE_REPLICA' as Reason, NULL as DatabaseNameOnPitrTable FROM sys.dm_hadr_database_replica_states hdrs INNER JOIN sys.databases sdb ON sdb.database_id = hdrs.database_id WHERE (hdrs.is_local = 1 AND hdrs.is_primary_replica = 0) OR (sys.fn_hadr_is_primary_replica (sdb.name) = 1 AND DATABASEPROPERTYEX (sdb.name, 'Updateability') = 'READ_ONLY') ), TABLE1 as ( SELECT dbs.database_id as DatabaseId, sysdbs.name as DatabaseName, 'OPTOUT' as Reason, CASE WHEN dbs.database_name = sysdbs.name THEN NULL ELSE dbs.database_name END AS DatabaseNameOnPitrTable FROM msdb.dbo.rds_pitr_blocked_databases dbs INNER JOIN sys.databases sysdbs ON dbs.database_id = sysdbs.database_id WHERE sysdbs.database_id > 4 ), TABLE2 as ( SELECT db.name AS DatabaseName, db.create_date AS CreateDate, db.state_desc AS DatabaseState, db.database_id AS DatabaseId, rs.database_guid AS DatabaseGuid, rs.last_log_backup_lsn AS LastLogBackupLSN, rs.recovery_fork_guid RecoveryForkGuid, rs.first_recovery_fork_guid AS FirstRecoveryForkGuid, db.recovery_model_desc AS RecoveryModel, db.is_auto_close_on AS IsAutoClose, db.is_read_only as IsReadOnly, NEWID() as FileName, CASE WHEN(db.state_desc = 'ONLINE' AND db.recovery_model_desc != 'SIMPLE' AND((db.is_auto_close_on = 0 and db.collation_name IS NOT NULL) OR db.is_auto_close_on = 1)) AND db.is_read_only != 1 AND db.user_access = 0 AND db.source_database_id IS NULL AND db.is_in_standby != 1 THEN 1 ELSE 0 END AS IsPartOfSnapshot, CASE WHEN db.source_database_id IS NULL THEN 0 ELSE 1 END AS IsDatabaseSnapshot FROM sys.databases db INNER JOIN sys.database_recovery_status rs ON db.database_id = rs.database_id WHERE DB_NAME(db.database_id) NOT IN('tempdb') AND db.database_id NOT IN (SELECT DISTINCT DatabaseId FROM TABLE1) AND db.database_id NOT IN (SELECT DISTINCT DatabaseId FROM TABLE0) ), TABLE3 as( Select @Limit+count(DatabaseName) as TotalNumberOfDatabases from TABLE2 where TABLE2.IsPartOfSnapshot=1 and DatabaseName in ('master','model','msdb') ) SELECT TOP(SELECT TotalNumberOfDatabases from TABLE3) DatabaseName,CreateDate,DatabaseState,DatabaseId from TABLE2 where TABLE2.IsPartOfSnapshot=1 ORDER BY TABLE2.DatabaseID ASC ELSE WITH TABLE0 AS ( SELECT hdrs.database_id as DatabaseId, sdb.name as DatabaseName, 'ALWAYS_ON_NOT_WRITABLE_REPLICA' as Reason, NULL as DatabaseNameOnPitrTable FROM sys.dm_hadr_database_replica_states hdrs INNER JOIN sys.databases sdb ON sdb.database_id = hdrs.database_id WHERE (hdrs.is_local = 1 AND hdrs.is_primary_replica = 0) OR (sys.fn_hadr_is_primary_replica (sdb.name) = 1 AND DATABASEPROPERTYEX (sdb.name, 'Updateability') = 'READ_ONLY') ), TABLE1 as ( SELECT db.name AS DatabaseName, db.create_date AS CreateDate, db.state_desc AS DatabaseState, db.database_id AS DatabaseId, rs.database_guid AS DatabaseGuid, rs.last_log_backup_lsn AS LastLogBackupLSN, rs.recovery_fork_guid RecoveryForkGuid, rs.first_recovery_fork_guid AS FirstRecoveryForkGuid, db.recovery_model_desc AS RecoveryModel, db.is_auto_close_on AS IsAutoClose, db.is_read_only as IsReadOnly, NEWID() as FileName, CASE WHEN(db.state_desc = 'ONLINE' AND db.recovery_model_desc != 'SIMPLE' AND((db.is_auto_close_on = 0 and db.collation_name IS NOT NULL) OR db.is_auto_close_on = 1)) AND db.is_read_only != 1 AND db.user_access = 0 AND db.source_database_id IS NULL AND db.is_in_standby != 1 THEN 1 ELSE 0 END AS IsPartOfSnapshot, CASE WHEN db.source_database_id IS NULL THEN 0 ELSE 1 END AS IsDatabaseSnapshot FROM sys.databases db INNER JOIN sys.database_recovery_status rs ON db.database_id = rs.database_id WHERE DB_NAME(db.database_id) NOT IN('tempdb') AND db.database_id NOT IN (SELECT DISTINCT DatabaseId FROM TABLE0) ), TABLE2 as( SELECT @Limit+count(DatabaseName) as TotalNumberOfDatabases from TABLE1 where TABLE1.IsPartOfSnapshot=1 and DatabaseName in ('master','model','msdb') ) select top(select TotalNumberOfDatabases from TABLE2) DatabaseName,CreateDate,DatabaseState,DatabaseId from TABLE1 where TABLE1.IsPartOfSnapshot=1 ORDER BY TABLE1.DatabaseID ASC
nota

Las bases de datos que son únicamente enlaces simbólicos también se excluyen de las bases de datos aptas para las operaciones de PITR. La consulta anterior no filtra en función de este criterio.

Registros de transacciones en Amazon S3

El periodo de retención de copia de seguridad determina si los registros de transacciones para las instancias de base de datos de RDS Custom for SQL Server se extraen y cargan automáticamente en Amazon S3. Un valor distinto de cero significa que se crean copias de seguridad automáticas y que el agente personalizado de RDS carga los registros de transacciones en S3 cada 5 minutos.

Los archivos de registro de transacciones en S3 se cifran en reposo mediante el AWS KMS key que proporcionó cuando creó su instancia de base de datos. Para obtener más información, consulte Protección de los datos con el cifrado del servidor en la Guía del usuario de Amazon Simple Storage Service.

Los registros de transacciones de cada base de datos se cargan en un bucket de S3 denominado do-not-delete-rds-custom-$ACCOUNT_ID-$REGION-unique_identifier. El directorio RDSCustomForSQLServer/Instances/DB_instance_resource_ID del bucket de S3 contiene dos subdirectorios:

  • TransactionLogs – Contiene los registros de transacciones de cada base de datos y sus respectivos metadatos.

    El nombre del archivo de registro de transacciones sigue el patrón yyyyMMddHHmm.database_id.timestamp, por ejemplo:

    202110202230.11.1634769287

    El mismo nombre de archivo con el sufijo _metadata contiene información sobre el registro de transacciones, como números de secuencia de registros, nombre de base de datos y RdsChunkCount. RdsChunkCount determina cuántos archivos físicos representan un único archivo de registro de transacciones. Es posible que veas archivos con sufijos _0001, _0002, etc., lo que significa los fragmentos físicos de un archivo de registro de transacciones. Si quieres utilizar un archivo de registro de transacciones fragmentado, asegúrate de fusionar los fragmentos después de descargarlos.

    Considere un escenario en el que tenga los siguientes archivos:

    • 202110202230.11.1634769287

    • 202110202230.11.1634769287_0001

    • 202110202230.11.1634769287_0002

    • 202110202230.11.1634769287_metadata

    El valor de RdsChunkCount es 3. El orden de fusión de los archivos es el siguiente: 202110202230.11.1634769287, 202110202230.11.1634769287_0001 y 202110202230.11.1634769287_0002.

  • TransactionLogMetadata – Contiene información de metadatos sobre cada iteración de la extracción del registro de transacciones.

    El archivo RI.End contiene información de todas las bases de datos de las que se extrajeron los registros de transacciones y de todas las bases de datos que existen, pero no se extrajeron los registros de transacciones. El nombre de archivo RI.End sigue el patrón yyyyMMddHHmm.RI.End.timestamp, por ejemplo:

    202110202230.RI.End.1634769281

Restauración de PITR mediante la AWS Management Console, la AWS CLI, o la API de RDS.

Puede restaurar una instancia de base de datos de RDS Custom for SQL Server a un momento dado mediante la AWS Management Console, la AWS CLI o la API de RDS.

Para restaurar una instancia de base de datos de RDS Custom a un tiempo especificado
  1. Inicie sesión en la AWS Management Console y abra la consola de Amazon RDS en https://console.aws.amazon.com/rds/.

  2. En el panel de navegación, elija Copias de seguridad automáticas.

  3. Elija la instancia de base de datos personalizada de RDS que desea restaurar.

  4. Para Actions (Acciones), elija Restore to point in time (Restaurar a un momento dado).

    Aparecerá la ventana Restore to point in time (Restaurar a un momento dado).

  5. Elija Latest restorable time (Última hora de restauración) para restaurar a la última hora posible o elija Custom (Personalizar) para elegir una hora.

    Si elige Personalizar, ingrese la fecha y la hora a la que desea restaurar la instancia.

    Las horas se muestran en su zona horaria local, que se indica mediante una diferencia de la hora universal coordinada (UTC). Por ejemplo, UTC-5 es la hora estándar del Este/horario de verano central.

  6. Para el identificador de instancias de bases de datos, ingrese el nombre de la instancia de base de datos de RDS Custom restaurada de destino. El nombre debe ser único.

  7. Elija otras opciones según sea necesario, como la clase de instancia de base de datos.

  8. Elija Restore to point in time (Restaurar a un momento dado).

Puede restaurar una instancia de base de datos a un momento dado mediante el comando restore-db-instance-to-point-in-time AWS CLI para crear una nueva instancia de base de datos de RDS Custom.

Utilice una de las siguientes opciones para especificar la copia de seguridad desde la que restaurar:

  • --source-db-instance-identifier mysourcedbinstance

  • --source-dbi-resource-id dbinstanceresourceID

  • --source-db-instance-automated-backups-arn backupARN

La opción custom-iam-instance-profile es obligatoria.

En el siguiente ejemplo se restaura my-custom-db-instance a una nueva instancia de base de datos denominada my-restored-custom-db-instance, en la hora especificada.

Para Linux, macOS o:Unix

aws rds restore-db-instance-to-point-in-time \ --source-db-instance-identifier my-custom-db-instance\ --target-db-instance-identifier my-restored-custom-db-instance \ --custom-iam-instance-profile AWSRDSCustomInstanceProfileForRdsCustomInstance \ --restore-time 2022-10-14T23:45:00.000Z

En:Windows

aws rds restore-db-instance-to-point-in-time ^ --source-db-instance-identifier my-custom-db-instance ^ --target-db-instance-identifier my-restored-custom-db-instance ^ --custom-iam-instance-profile AWSRDSCustomInstanceProfileForRdsCustomInstance ^ --restore-time 2022-10-14T23:45:00.000Z