Wiederherstellung einer RDS Custom for SQL Server-Instanz auf einen bestimmten Zeitpunkt - Amazon Relational Database Service

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Wiederherstellung einer RDS Custom for SQL Server-Instanz auf einen bestimmten Zeitpunkt

Sie können eine DB-Instance zu einem bestimmten Zeitpunkt (PITR) wiederherstellen und so eine neue DB-Instance erstellen. Zur Unterstützung PITR muss für Ihre DB-Instances die Aufbewahrung von Backups aktiviert sein.

Die letzte wiederherstellbare Zeit für eine RDS Custom for SQL Server-DB-Instance hängt von mehreren Faktoren ab, liegt aber in der Regel innerhalb von 5 Minuten nach der aktuellen Uhrzeit. Um die letzte wiederherstellbare Zeit für eine DB-Instance zu ermitteln, verwenden Sie den AWS CLI describe-db-instancesBefehl und sehen Sie sich den Wert an, der im LatestRestorableTime Feld für die DB-Instance zurückgegeben wird. Um den letzten wiederherstellbaren Zeitpunkt für jede DB-Instance in der RDS Amazon-Konsole zu sehen, wählen Sie Automatisierte Backups.

Sie können die Backup auf jeden beliebigen Zeitpunkt innerhalb des Aufbewahrungszeitraums für Backups vornehmen. Um den frühesten wiederherstellbaren Zeitpunkt für jede DB-Instance zu sehen, wählen Sie in der RDS Amazon-Konsole Automatisierte Backups aus.

Allgemeine Informationen zu PITR finden Sie unter Wiederherstellung einer DB-Instance zu einem bestimmten Zeitpunkt für Amazon RDS.

PITRÜberlegungen zu RDS Custom for Server SQL

In RDS Custom for SQL Server PITR unterscheidet sich in folgenden wichtigen Punkten von PITR AmazonRDS:

  • PITRstellt nur die Datenbanken in der DB-Instance wieder her. Es stellt das Betriebssystem oder die Dateien auf dem Laufwerk C: nicht wieder her.

  • Bei einer RDS Custom for SQL Server-DB-Instance wird eine Datenbank automatisch gesichert und kommt PITR nur unter den folgenden Bedingungen in Frage:

    • Die Datenbank ist online.

    • Sein Wiederherstellungsmodell ist auf FULL gesetzt.

    • Es ist beschreibbar.

    • Es hat seine physischen Dateien auf dem Laufwerk D:.

    • Sie ist nicht in der rds_pitr_blocked_databases-Tabelle aufgeführt. Weitere Informationen finden Sie unter Datenbanken ungeeignet machen für PITR.

  • Welche Datenbanken in Frage kommen, hängt von der Reihenfolge ihrer Datenbank-ID ab. PITR RDSCustom for SQL Server ermöglicht bis zu 5.000 Datenbanken pro DB-Instance. Die maximale Anzahl von Datenbanken, die durch einen PITR Vorgang für eine RDS Custom for SQL Server-DB-Instance wiederhergestellt werden, hängt jedoch vom Instance-Klassentyp ab. Weitere Informationen finden Sie unter Anzahl der Datenbanken, für die PITR pro Instance-Klassentyp infrage kommen.

    Andere Datenbanken, die nicht Teil von sind, PITR können aus DB-Snapshots wiederhergestellt werden, einschließlich der automatisierten Snapshot-Backups, für PITR die sie verwendet werden.

  • Durch das Hinzufügen einer neuen Datenbank, das Umbenennen einer Datenbank oder das Wiederherstellen einer Datenbank, die dafür in Frage kommt, wird ein Snapshot der DB-Instance PITR initiiert.

  • Die maximale Anzahl von Datenbanken, die PITR geändert werden können, wenn die Datenbank-Instance einen Rechenvorgang mit Skalierung durchläuft, hängt vom Klassentyp der Zielinstanz ab. Wenn die Instanz hochskaliert wird, sodass mehr Datenbanken auf der Instance in Frage kommenPITR, wird ein neuer Snapshot erstellt.

  • Wiederhergestellte Datenbanken haben denselben Namen wie in der Quell-DB-Instance. Wenn Sie möchten, können Sie einen anderen Namen eingeben.

  • AWSRDSCustomSQLServerIamRolePolicyerfordert Zugriff auf andere AWS Dienste. Weitere Informationen finden Sie unter Fügen Sie eine Zugriffsrichtlinie hinzu zu AWSRDSCustomSQLServerInstanceRole.

  • Zeitzonenänderungen werden für RDS Custom for SQL Server nicht unterstützt. Wenn Sie die Zeitzone des Betriebssystems oder der DB-Instance ändern, funktioniert das PITR (und andere Automatisierungen) nicht.

Anzahl der Datenbanken, für die PITR pro Instance-Klassentyp infrage kommen

Die folgende Tabelle zeigt die maximale Anzahl von Datenbanken, für die PITR je nach Instance-Klassentyp in Frage kommt.

Typ der Instance-Klasse Maximale Anzahl PITR geeigneter Datenbanken
db.*.large 100
db.*.xlarge zu db.*.2xlarge 150
db.*.4xlarge zu db.*.8xlarge 300
db.*.12xlarge nach db.*.16xlarge 600
db.*.24xlarge, db.*32xlarge 1000

*Stellt verschiedene Instanzklassentypen dar.

Die maximale Anzahl von Datenbanken, für die PITR eine DB-Instance in Frage kommt, hängt vom Instance-Klassentyp ab. Die Anzahl reicht von 100 bei den kleinsten Instance-Klassentypen bis zu 1000 bei den größten Instance-Klassentypen, die von RDS Custom for SQL Server unterstützt werden. SQLServersystemdatenbanken (master, model, msdb, tempdb) sind in diesem Limit nicht enthalten. Wenn eine DB-Instance je nach Typ der Zielinstanzklasse nach oben oder unten skaliert wird, aktualisiert RDS Custom automatisch die Anzahl der Datenbanken, für PITR die sie in Frage kommen. RDSCustom for SQL Server sendet, RDS-EVENT-0352 wenn sich die maximale Anzahl der Datenbanken, die für eine DB-Instance in Frage kommen, PITR ändert. Weitere Informationen finden Sie unter Benutzerdefinierte Engine-Versionsereignisse.

Anmerkung

PITRUnterstützung für mehr als 100 Datenbanken ist nur für DB-Instances verfügbar, die nach dem 26. August 2023 erstellt wurden. Für Instances, die vor dem 26. August 2023 erstellt wurden, PITR liegt die maximale Anzahl von Datenbanken, für die infrage kommt, unabhängig von der Instance-Klasse bei 100. Um die PITR Unterstützung für mehr als 100 Datenbanken auf DB-Instances zu aktivieren, die vor dem 26. August 2023 erstellt wurden, können Sie die folgende Aktion ausführen:

  • Aktualisieren Sie die DB-Engine-Version auf 15.00.4322.2.v1 oder höher

Während eines PITR Vorgangs stellt RDS Custom alle Datenbanken wieder her, die zum Zeitpunkt der Wiederherstellung Teil einer Quell-DB-Instance PITR waren. Sobald die Ziel-DB-Instance die Wiederherstellungsvorgänge abgeschlossen hat und die Aufbewahrung von Backups aktiviert ist, beginnt die DB-Instance mit der Sicherung auf der Grundlage der maximalen Anzahl von Datenbanken, für PITR die die Ziel-DB-Instance in Frage kommt.

Wenn Ihre DB-Instance beispielsweise auf einer mit db.*.xlarge 200 Datenbanken läuft:

  1. RDSCustom for SQL Server wählt die ersten 150 Datenbanken, sortiert nach ihrer Datenbank-ID, für die PITR Sicherung aus.

  2. Sie ändern die Instanz so, dass sie auf db.*.4xlarge skaliert wird.

  3. Sobald der Rechenvorgang für die Skalierung abgeschlossen ist, wählt RDS Custom for SQL Server die ersten 300 Datenbanken, sortiert nach ihrer Datenbank-ID, für die Sicherung aus. PITR Jede der 200 Datenbanken, die die PITR Anforderungsbedingungen erfüllen, kommt nun in FragePITR.

  4. Sie ändern jetzt die Instanz, sodass sie wieder auf db.*.xlarge herunterskaliert wird.

  5. Sobald der Rechenvorgang zur Skalierung abgeschlossen ist, wählt RDS Custom for SQL Server erneut die ersten 150 Datenbanken, sortiert nach ihrer Datenbank-ID, für die Sicherung aus. PITR

Datenbanken ungeeignet machen für PITR

Sie können wählen, ob einzelne Datenbanken von PITR ausgeschlossen werden sollen. Um dies zu tun, legen Sie ihre database_id-Werte in eine rds_pitr_blocked_databases-Tabelle. Verwenden Sie das folgende SQL Skript, um die Tabelle zu erstellen.

So erstellen Sie die Tabelle „rds_pitr_blocked_databases“
  • Führen Sie das folgende SQL Skript aus.

    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) );

Eine Liste der berechtigten und nicht berechtigten Datenbanken finden Sie in der RI.End-Datei im RDSCustomForSQLServer/Instances/DB_instance_resource_ID/TransactionLogMetadata-Verzeichnis im Amazon S3-Bucket do-not-delete-rds-custom-$ACCOUNT_ID-$REGION-unique_identifier. Weitere Informationen zur Datei RI.End finden Sie unter Transaktionsprotokolle in Amazon S3.

Sie können auch die Liste der Datenbanken ermitteln, die für die PITR Verwendung des folgenden SQL Skripts in Frage kommen. Setzen Sie die @limit Variable auf die maximale Anzahl von Datenbanken, die PITR für die Instance-Klasse in Frage kommen. Weitere Informationen finden Sie unter Anzahl der Datenbanken, für die PITR pro Instance-Klassentyp infrage kommen.

Um die Liste der geeigneten Datenbanken für PITR eine DB-Instance-Klasse zu ermitteln
  • Führen Sie das folgende SQL Skript aus.

    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
Anmerkung

Die Datenbanken, bei denen es sich nur um symbolische Links handelt, sind ebenfalls von Datenbanken ausgeschlossen, die für PITR Operationen in Frage kommen. Die obige Abfrage filtert nicht nach diesen Kriterien.

Transaktionsprotokolle in Amazon S3

Die Aufbewahrungsfrist für Backups bestimmt, ob Transaktionsprotokolle für RDS Custom for SQL Server-DB-Instances automatisch extrahiert und auf Amazon S3 hochgeladen werden. Ein Wert ungleich Null bedeutet, dass automatische Backups erstellt werden und dass der RDS Custom Agent die Transaktionsprotokolle alle 5 Minuten auf S3 hochlädt.

Transaktionsprotokolldateien auf S3 werden im Ruhezustand mit dem AWS KMS key die Sie angegeben haben, als Sie Ihre DB-Instance erstellt haben. Weitere Informationen finden Sie unter Schutz von Daten durch serverseitige Verschlüsselung im Amazon Simple Storage Service User Guide.

Die Transaktionsprotokolle für jede Datenbank werden in einen S3-Bucket namens do-not-delete-rds-custom-$ACCOUNT_ID-$REGION-unique_identifier hochgeladen. Das RDSCustomForSQLServer/Instances/DB_instance_resource_ID-Verzeichnis im S3-Bucket enthält zwei Unterverzeichnisse:

  • TransactionLogs — Enthält die Transaktionsprotokolle für jede Datenbank und ihre jeweiligen Metadaten.

    Der Name der Transaktionslog-Datei folgt dem Muster yyyyMMddHHmm.database_id.timestamp, Beispiel:

    202110202230.11.1634769287

    Derselbe Dateiname mit dem Suffix _metadata enthält Informationen über das Transaktionslog wie Log-Sequenznummern, Datenbankname und RdsChunkCount. RdsChunkCountbestimmt, wie viele physische Dateien eine einzelne Transaktionslogdatei darstellen. Möglicherweise sehen Sie Dateien mit Suffixen _0001, _0002 und so weiter, was die physischen Teile einer Transaktionslogdatei bedeutet. Wenn Sie eine Chunked Transaktionslogdatei verwenden möchten, müssen Sie die Chunks nach dem Herunterladen zusammenführen.

    Betrachten Sie ein Szenario, in dem Sie folgende Dateien haben:

    • 202110202230.11.1634769287

    • 202110202230.11.1634769287_0001

    • 202110202230.11.1634769287_0002

    • 202110202230.11.1634769287_metadata

    Das RdsChunkCount ist 3. Die Reihenfolge zum Zusammenführen der Dateien ist die folgende: 202110202230.11.1634769287, 202110202230.11.1634769287_0001, 202110202230.11.1634769287_0002.

  • TransactionLogMetadata — Enthält Metadateninformationen über jede Iteration der Transaktionslog-Extraktion.

    Die RI.End enthält Informationen für alle Datenbanken, deren Transaktionsprotokolle extrahiert wurden, und für alle Datenbanken, die vorhanden sind, aber ihre Transaktionsprotokolle nicht extrahiert wurden. Der RI.End-Dateiname folgt dem Muster yyyyMMddHHmm.RI.End.timestamp, Beispiel:

    202110202230.RI.End.1634769281

PITRWiederherstellung mit dem AWS Management ConsoleAWS CLI, dem oder dem. RDS API

Sie können eine RDS benutzerdefinierte SQL Server-DB-Instance mit dem AWS Management Console, dem oder dem auf einen AWS CLI bestimmten Zeitpunkt zurücksetzen RDSAPI.

So stellen Sie eine RDS benutzerdefinierte DB-Instance auf einen bestimmten Zeitpunkt wieder her
  1. Melden Sie sich bei der an AWS Management Console und öffnen Sie die RDS Amazon-Konsole unter https://console.aws.amazon.com/rds/.

  2. Wählen Sie im Navigationsbereich Automated backups (Automatisierte Backups) aus.

  3. Wählen Sie die RDS benutzerdefinierte DB-Instance aus, die Sie wiederherstellen möchten.

  4. Wählen Sie unter Aktionen die Option Restore to point in time (Zu einem bestimmten Zeitpunkt wiederherstellen) aus.

    Anschließend wird das Fenster Restore to point in time (Zu einem bestimmten Zeitpunkt wiederherstellen) angezeigt.

  5. Wählen Sie Späteste Wiederherstellungszeit, um auf den spätesten möglichen Zeitpunkt wiederherzustellen oder wählen Sie Benutzerdefiniert, um eine Zeit auszuwählen.

    Geben Sie bei der Auswahl von Custom das Datum und die Uhrzeit ein, zu der Sie den Instance-Cluster wiederherstellen möchten.

    Die Zeiten werden in Ihrer lokalen Zeitzone angezeigt, was durch einen Offset von der koordinierten Weltzeit (UTC) gekennzeichnet ist. Zum Beispiel ist UTC -5 Eastern Standard Time/Central Daylight Time.

  6. Geben Sie als DB-Instance-ID den Namen der wiederhergestellten RDS benutzerdefinierten DB-Ziel-Instance ein. Der Name muss eindeutig sein.

  7. Wählen Sie bei Bedarf andere Optionen aus, z. B. DB-Instance-Class.

  8. Wählen Sie Restore to point in time (Zu einem bestimmten Zeitpunkt wiederherstellen) aus.

Sie stellen eine DB-Instance zu einem bestimmten Zeitpunkt wieder her, indem Sie den point-in-time AWS CLI Befehl restore-db-instance-to- verwenden, um eine neue RDS benutzerdefinierte DB-Instance zu erstellen.

Verwenden Sie eine der folgenden Optionen, um die Sicherung anzugeben, von der wiederhergestellt werden soll:

  • --source-db-instance-identifier mysourcedbinstance

  • --source-dbi-resource-id dbinstanceresourceID

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

Die Option custom-iam-instance-profile ist erforderlich.

Der folgende Befehl stellt my-custom-db-instance auf eine neue DB-Instance namens my-restored-custom-db-instance wieder her, und zwar zum angegebenen Zeitpunkt.

Wählen Sie in der &Snowconsole; Ihren Auftrag aus der Tabelle. Linux, macOS, oder 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

Wählen Sie in der &Snowconsole; Ihren Auftrag aus der Tabelle. 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