Erfassung von Datenänderungen für die laufende Replikation vom SQL Server - AWS Database Migration 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.

Erfassung von Datenänderungen für die laufende Replikation vom SQL Server

In diesem Thema wird beschrieben, wie die CDC Replikation auf einer SQL Serverquelle eingerichtet wird.

Erfassung von Datenänderungen für selbstverwaltete SQL Server vor Ort oder bei Amazon EC2

Um Änderungen aus einer Microsoft SQL Server-Quelldatenbank zu erfassen, stellen Sie sicher, dass die Datenbank für vollständige Backups konfiguriert ist. Konfigurieren Sie die Datenbank entweder im vollständigen Wiederherstellungsmodus oder im massenprotokollierten Modus.

AWS DMS Verwendet für eine selbstverwaltete SQL Serverquelle Folgendes:

MS-Replication

Zum Erfassen von Änderungen für Tabellen mit Primärschlüsseln. Sie können dies automatisch konfigurieren, indem Sie dem AWS DMS Endpunktbenutzer auf der SQL Quellserverinstanz Sysadmin-Rechte gewähren. Oder Sie können die Schritte in diesem Abschnitt befolgen, um die Quelle vorzubereiten und einen Benutzer zu verwenden, der keine Sysadmin-Rechte für den Endpunkt hat. AWS DMS

MS- CDC

Zum Erfassen von Änderungen für Tabellen ohne Primärschlüssel. Aktivieren Sie MS- CDC auf Datenbankebene und für alle Tabellen einzeln.

Wenn Sie eine SQL Serverdatenbank für die laufende Replikation (CDC) einrichten, können Sie einen der folgenden Schritte ausführen:

  • Einrichten der fortlaufenden Replikation mit der Sysadmin-Rolle.

  • Einrichten der fortlaufenden Replikation ohne Verwendung der Sysadmin-Rolle.

Einrichtung einer laufenden Replikation auf einem selbstverwalteten Server SQL

Dieser Abschnitt enthält Informationen zum Einrichten der laufenden Replikation auf einem selbstverwalteten SQL Server mit oder ohne Verwendung der Sysadmin-Rolle.

Einrichtung einer laufenden Replikation auf einem selbstverwalteten SQL Server: Verwenden der Rolle Sysadmin

AWS DMS Bei der laufenden Replikation für SQL Server wird die systemeigene SQL Serverreplikation für Tabellen mit Primärschlüsseln und Change Data Capture (CDC) für Tabellen ohne Primärschlüssel verwendet.

Bevor Sie die laufende Replikation einrichten, informieren Sie sich unter Voraussetzungen für die Verwendung der laufenden Replikation (CDC) von einer SQL Serverquelle.

Bei Tabellen mit Primärschlüsseln AWS DMS kann im Allgemeinen die erforderlichen Artefakte auf der Quelle konfiguriert werden. Stellen Sie jedoch bei SQL Serverquellinstanzen, die selbst verwaltet werden, sicher, dass Sie die SQL Serververteilung zuerst manuell konfigurieren. Danach können AWS DMS Quellbenutzer mit Sysadmin-Rechten automatisch die Publikation für Tabellen mit Primärschlüsseln erstellen.

Um zu überprüfen, ob die Verteilung bereits konfiguriert wurde, führen Sie den folgenden Befehl aus.

sp_get_distributor

Ist das Ergebnis für die Spaltenverteilung NULL, ist die Verteilung nicht konfiguriert. Sie können die Verteilung anhand des folgenden Verfahrens einrichten.

So richten Sie die Verteilung ein
  1. Stellen Sie mit dem Tool SQL Server Management Studio (SSMS) eine Connect zu Ihrer SQL Server-Quelldatenbank her.

  2. Öffnen Sie das Kontextmenü (rechte Maustaste) für den Ordner Replikation und wählen Sie die Option Verteilung konfigurieren. Der Assistent zum Konfigurieren der Verteilung wird angezeigt.

  3. Befolgen Sie die Anweisungen im Assistenten, um die Standardwerte einzugeben und die Verteilung zu erstellen.

So konfigurieren Sie CDC:

AWS DMS Version 3.4.7 und höher kann MS CDC für Ihre Datenbank und alle Ihre Tabellen automatisch einrichten, wenn Sie kein schreibgeschütztes Replikat verwenden. Um diese Funktion zu verwenden, setzen Sie den Wert auf true. SetUpMsCdcForTables ECA Informationen zu finden ECAs Sie unterEndpunkteinstellungen.

Führen Sie für AWS DMS Versionen vor 3.4.7 oder für ein schreibgeschütztes Replikat als Quelle die folgenden Schritte aus:

  1. Für Tabellen ohne Primärschlüssel richten Sie MS- CDC für die Datenbank ein. Verwenden Sie dazu ein Konto, dem die Sysadmin-Rolle zugewiesen ist, und führen Sie den folgenden Befehl aus.

    use [DBname] EXEC sys.sp_cdc_enable_db
  2. Als Nächstes richten Sie MS- CDC für jede der Quelltabellen ein. Führen Sie für jede Tabelle mit eindeutigen Schlüsseln, aber ohne Primärschlüssel die folgende Abfrage aus, um MS- einzurichtenCDC.

    exec sys.sp_cdc_enable_table @source_schema = N'schema_name', @source_name = N'table_name', @index_name = N'unique_index_name', @role_name = NULL, @supports_net_changes = 1 GO
  3. Führen Sie für jede Tabelle ohne Primärschlüssel oder ohne eindeutige Schlüssel die folgende Abfrage aus, um MS- einzurichtenCDC.

    exec sys.sp_cdc_enable_table @source_schema = N'schema_name', @source_name = N'table_name', @role_name = NULL GO

Weitere Informationen zur Einrichtung von MS- CDC für bestimmte Tabellen finden Sie in der SQLServerdokumentation.

Einrichtung einer laufenden Replikation auf einem eigenständigen SQL Server: Ohne Sysadmin-Rolle

In diesem Abschnitt wird beschrieben, wie Sie die fortlaufende Replikation für eine eigenständige SQL Server-Datenbankquelle einrichten, für die das Benutzerkonto keine Sysadmin-Rechte benötigt.

Anmerkung

Nachdem Sie die Schritte in diesem Abschnitt ausgeführt haben, hat der DMS Benutzer, der kein Systemadministrator ist, die folgenden Rechte:

  • Lesen der Änderungen aus der Protokolldatei für Online-Transaktionen

  • Festplattenzugriff zum Lesen von Änderungen aus Transaktionsprotokoll-Backup-Dateien

  • Fügen Sie die Publikation hinzu oder ändern Sie sie, die verwendet DMS

  • Hinzufügen von Artikeln zu der Publikation

  1. Richten Sie Microsoft SQL Server für die Replikation ein, wie unter beschriebenErfassung von Datenänderungen für die laufende Replikation vom SQL Server.

  2. Aktivieren Sie MS REPLICATION - in der Quelldatenbank. Dies kann entweder manuell oder durch einmaliges Ausführen der Aufgabe als Sysadmin-Benutzer erfolgen.

  3. Erstellen Sie das awsdms-Schema in der Quelldatenbank mit dem folgenden Skript:

    use master go create schema awsdms go -- Create the table valued function [awsdms].[split_partition_list] on the Master database, as follows: USE [master] GO set ansi_nulls on go set quoted_identifier on go if (object_id('[awsdms].[split_partition_list]','TF')) is not null drop function [awsdms].[split_partition_list]; go create function [awsdms].[split_partition_list] ( @plist varchar(8000), —A delimited list of partitions @dlm nvarchar(1) —Delimiting character ) returns @partitionsTable table —Table holding the BIGINT values of the string fragments ( pid bigint primary key ) as begin declare @partition_id bigint; declare @dlm_pos integer; declare @dlm_len integer; set @dlm_len = len(@dlm); while (charindex(@dlm,@plist)>0) begin set @dlm_pos = charindex(@dlm,@plist); set @partition_id = cast( ltrim(rtrim(substring(@plist,1,@dlm_pos-1))) as bigint); insert into @partitionsTable (pid) values (@partition_id) set @plist = substring(@plist,@dlm_pos+@dlm_len,len(@plist)); end set @partition_id = cast (ltrim(rtrim(@plist)) as bigint); insert into @partitionsTable (pid) values ( @partition_id ); return end GO
  4. Erstellen Sie die [awsdms].[rtm_dump_dblog]-Prozedur in der Master-Datenbank mit dem folgenden Skript:

    use [MASTER] go if (object_id('[awsdms].[rtm_dump_dblog]','P')) is not null drop procedure [awsdms].[rtm_dump_dblog]; go set ansi_nulls on go set quoted_identifier on GO CREATE procedure [awsdms].[rtm_dump_dblog] ( @start_lsn varchar(32), @seqno integer, @filename varchar(260), @partition_list varchar(8000), — A comma delimited list: P1,P2,... Pn @programmed_filtering integer, @minPartition bigint, @maxPartition bigint ) as begin declare @start_lsn_cmp varchar(32); — Stands against the GT comparator SET NOCOUNT ON — – Disable "rows affected display" set @start_lsn_cmp = @start_lsn; if (@start_lsn_cmp) is null set @start_lsn_cmp = '00000000:00000000:0000'; if (@partition_list is null) begin RAISERROR ('Null partition list waspassed',16,1); return end if (@start_lsn) is not null set @start_lsn = '0x'+@start_lsn; if (@programmed_filtering=0) SELECT [Current LSN], [operation], [Context], [Transaction ID], [Transaction Name], [Begin Time], [End Time], [Flag Bits], [PartitionID], [Page ID], [Slot ID], [RowLog Contents 0], [Log Record], [RowLog Contents 1] FROM fn_dump_dblog ( @start_lsn, NULL, N'DISK', @seqno, @filename, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default) where [Current LSN] collate SQL_Latin1_General_CP1_CI_AS > @start_lsn_cmp collate SQL_Latin1_General_CP1_CI_AS and ( ( [operation] in ('LOP_BEGIN_XACT','LOP_COMMIT_XACT','LOP_ABORT_XACT') ) or ( [operation] in ('LOP_INSERT_ROWS','LOP_DELETE_ROWS','LOP_MODIFY_ROW') and ( ( [context] in ('LCX_HEAP','LCX_CLUSTERED','LCX_MARK_AS_GHOST') ) or ([context] = 'LCX_TEXT_MIX' and (datalength([RowLog Contents 0]) in (0,1)))) and [PartitionID] in ( select * from master.awsdms.split_partition_list (@partition_list,',')) ) or ([operation] = 'LOP_HOBT_DDL') ) else SELECT [Current LSN], [operation], [Context], [Transaction ID], [Transaction Name], [Begin Time], [End Time], [Flag Bits], [PartitionID], [Page ID], [Slot ID], [RowLog Contents 0], [Log Record], [RowLog Contents 1] — After Image FROM fn_dump_dblog ( @start_lsn, NULL, N'DISK', @seqno, @filename, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default) where [Current LSN] collate SQL_Latin1_General_CP1_CI_AS > @start_lsn_cmp collate SQL_Latin1_General_CP1_CI_AS and ( ( [operation] in ('LOP_BEGIN_XACT','LOP_COMMIT_XACT','LOP_ABORT_XACT') ) or ( [operation] in ('LOP_INSERT_ROWS','LOP_DELETE_ROWS','LOP_MODIFY_ROW') and ( ( [context] in ('LCX_HEAP','LCX_CLUSTERED','LCX_MARK_AS_GHOST') ) or ([context] = 'LCX_TEXT_MIX' and (datalength([RowLog Contents 0]) in (0,1)))) and ([PartitionID] is not null) and ([PartitionID] >= @minPartition and [PartitionID]<=@maxPartition) ) or ([operation] = 'LOP_HOBT_DDL') ) SET NOCOUNT OFF — Re-enable "rows affected display" end GO
  5. Erstellen Sie das Zertifikat in der Master-Datenbank mit dem folgenden Skript:

    Use [master] Go CREATE CERTIFICATE [awsdms_rtm_dump_dblog_cert] ENCRYPTION BY PASSWORD = N'@5trongpassword' WITH SUBJECT = N'Certificate for FN_DUMP_DBLOG Permissions';
  6. Erstellen Sie die Anmeldung von dem Zertifikat mit dem folgenden Skript:

    Use [master] Go CREATE LOGIN awsdms_rtm_dump_dblog_login FROM CERTIFICATE [awsdms_rtm_dump_dblog_cert];
  7. Fügen Sie die Anmeldung mithilfe des folgenden Skripts zur Sysadmin-Serverrolle hinzu:

    ALTER SERVER ROLE [sysadmin] ADD MEMBER [awsdms_rtm_dump_dblog_login];
  8. Fügen Sie die Signatur zu [Master]. [awsdms]. [rtm_dump_dblog] unter Verwendung des Zertifikats mit dem folgenden Skript hinzu:

    Use [master] GO ADD SIGNATURE TO [master].[awsdms].[rtm_dump_dblog] BY CERTIFICATE [awsdms_rtm_dump_dblog_cert] WITH PASSWORD = '@5trongpassword';
    Anmerkung

    Wenn Sie die gespeicherte Prozedur neu erstellen, müssen Sie die Signatur erneut hinzufügen.

  9. Erstellen Sie [awsdms].[rtm_position_1st_timestamp] in der Master-Datenbank mithilfe des folgenden Skripts:

    use [master] if object_id('[awsdms].[rtm_position_1st_timestamp]','P') is not null DROP PROCEDURE [awsdms].[rtm_position_1st_timestamp]; go create procedure [awsdms].[rtm_position_1st_timestamp] ( @dbname sysname, -- Database name @seqno integer, -- Backup set sequence/position number within file @filename varchar(260), -- The backup filename @1stTimeStamp varchar(40) -- The timestamp to position by ) as begin SET NOCOUNT ON -- Disable "rows affected display" declare @firstMatching table ( cLsn varchar(32), bTim datetime ) declare @sql nvarchar(4000) declare @nl char(2) declare @tb char(2) declare @fnameVar nvarchar(254) = 'NULL' set @nl = char(10); -- New line set @tb = char(9) -- Tab separator if (@filename is not null) set @fnameVar = ''''+@filename +'''' set @sql='use ['+@dbname+'];'+@nl+ 'select top 1 [Current LSN],[Begin Time]'+@nl+ 'FROM fn_dump_dblog (NULL, NULL, NULL, '+ cast(@seqno as varchar(10))+','+ @fnameVar+','+@nl+ @tb+'default, default, default, default, default, default, default,'+@nl+ @tb+'default, default, default, default, default, default, default,'+@nl+ @tb+'default, default, default, default, default, default, default,'+@nl+ @tb+'default, default, default, default, default, default, default,'+@nl+ @tb+'default, default, default, default, default, default, default,'+@nl+ @tb+'default, default, default, default, default, default, default,'+@nl+ @tb+'default, default, default, default, default, default, default,'+@nl+ @tb+'default, default, default, default, default, default, default,'+@nl+ @tb+'default, default, default, default, default, default, default)'+@nl+ 'where operation=''LOP_BEGIN_XACT''' +@nl+ 'and [Begin Time]>= cast('+''''+@1stTimeStamp+''''+' as datetime)'+@nl --print @sql delete from @firstMatching insert into @firstMatching exec sp_executesql @sql -- Get them all select top 1 cLsn as [matching LSN],convert(varchar,bTim,121) as [matching Timestamp] from @firstMatching; SET NOCOUNT OFF -- Re-enable "rows affected display" end GO
  10. Erstellen Sie das Zertifikat in der Master-Datenbank mit dem folgenden Skript:

    Use [master] Go CREATE CERTIFICATE [awsdms_rtm_position_1st_timestamp_cert] ENCRYPTION BY PASSWORD = '@5trongpassword' WITH SUBJECT = N'Certificate for FN_POSITION_1st_TIMESTAMP Permissions';
  11. Erstellen Sie die Anmeldung von dem Zertifikat mit dem folgenden Skript:

    Use [master] Go CREATE LOGIN awsdms_rtm_position_1st_timestamp_login FROM CERTIFICATE [awsdms_rtm_position_1st_timestamp_cert];
  12. Fügen Sie die Anmeldedaten mithilfe des folgenden Skripts zur sysadmin-Rolle hinzu:

    ALTER SERVER ROLE [sysadmin] ADD MEMBER [awsdms_rtm_position_1st_timestamp_login];
  13. Fügen Sie die Signatur zu [master].[awsdms].[rtm_position_1st_timestamp] unter Verwendung des Zertifikats mit dem folgenden Skript hinzu:

    Use [master] GO ADD SIGNATURE TO [master].[awsdms].[rtm_position_1st_timestamp] BY CERTIFICATE [awsdms_rtm_position_1st_timestamp_cert] WITH PASSWORD = '@5trongpassword';
  14. Gewähren Sie dem DMS Benutzer mithilfe des folgenden Skripts Ausführungszugriff auf die neue gespeicherte Prozedur:

    use master go GRANT execute on [awsdms].[rtm_position_1st_timestamp] to dms_user;
  15. Erstellen Sie in jeder der folgenden Datenbanken einen Benutzer mit den folgenden Berechtigungen und Rollen:

    Anmerkung

    Sie sollten das Benutzerkonto dmsnosysadmin mit demselben Konto für jedes Replikat erstellen. SID Die folgende SQL Abfrage kann dabei helfen, den dmsnosysadmin-Kontowert für jedes Replikat zu überprüfen. SID Weitere Informationen zum Erstellen eines Benutzers finden Sie unter CREATEUSER(Transact-SQL) in der SQLMicrosoft-Serverdokumentation. Weitere Informationen zum Erstellen von SQL Benutzerkonten für die SQL Azure-Datenbank finden Sie unter Aktive Georeplikation.

    use master go grant select on sys.fn_dblog to [DMS_user] grant view any definition to [DMS_user] grant view server state to [DMS_user]—(should be granted to the login). grant execute on sp_repldone to [DMS_user] grant execute on sp_replincrementlsn to [DMS_user] grant execute on sp_addpublication to [DMS_user] grant execute on sp_addarticle to [DMS_user] grant execute on sp_articlefilter to [DMS_user] grant select on [awsdms].[split_partition_list] to [DMS_user] grant execute on [awsdms].[rtm_dump_dblog] to [DMS_user]
    use MSDB go grant select on msdb.dbo.backupset to [DMS_user] grant select on msdb.dbo.backupmediafamily to [DMS_user] grant select on msdb.dbo.backupfile to [DMS_user]

    Führen Sie den folgenden Befehl für die Quelldatenbank aus:

    EXEC sp_addrolemember N'db_owner', N'DMS_user' use Source_DB go
  16. Fügen Sie abschließend dem Endpunkt des SQL Quellservers ein zusätzliches Verbindungsattribut (ECA) hinzu:

    enableNonSysadminWrapper=true;

Einrichtung einer laufenden Replikation auf einem SQL Server in einer Availability Group-Umgebung: Ohne Sysadmin-Rolle

In diesem Abschnitt wird beschrieben, wie Sie die fortlaufende Replikation für eine SQL Server-Datenbankquelle in einer Availability Group-Umgebung einrichten, für die das Benutzerkonto keine Sysadmin-Rechte benötigt.

Anmerkung

Nachdem Sie die Schritte in diesem Abschnitt ausgeführt haben, hat der DMS Benutzer, der kein Systemadministrator ist, die folgenden Rechte:

  • Lesen der Änderungen aus der Protokolldatei für Online-Transaktionen

  • Festplattenzugriff zum Lesen von Änderungen aus Transaktionsprotokoll-Backup-Dateien

  • Fügen Sie die Publikation hinzu oder ändern Sie sie, die verwendet DMS

  • Hinzufügen von Artikeln zu der Publikation

So richten Sie die fortlaufende Replikation in einer Availability-Group-Umgebung ein, ohne den Sysadmin-Benutzer zu verwenden
  1. Richten Sie Microsoft SQL Server für die Replikation ein, wie unter beschriebenErfassung von Datenänderungen für die laufende Replikation vom SQL Server.

  2. Aktivieren Sie MS REPLICATION - in der Quelldatenbank. Dies kann entweder manuell oder durch einmaliges Ausführen der Aufgabe als Sysadmin-Benutzer erfolgen.

    Anmerkung

    Sie sollten den REPLICATION MS-Verteiler entweder lokal oder so konfigurieren, dass Benutzer, die keine Systemadministratoren sind, über den zugehörigen Verbindungsserver darauf zugreifen können.

  3. Wenn die Option Nur sp_repldone innerhalb eines einzelnen Task-Endpunkts verwenden aktiviert ist, beenden Sie den MS-Log Reader-Job. REPLICATION

  4. Führen Sie auf jedem Replikat die folgenden Schritte aus:

    1. Erstellen Sie das [awsdms][awsdms]-Schema in der Master-Datenbank:

      CREATE SCHEMA [awsdms]
    2. Erstellen Sie die [awsdms].[split_partition_list]-Tabellenwertfunktion in der Master-Datenbank:

      USE [master] GO SET ansi_nulls on GO SET quoted_identifier on GO IF (object_id('[awsdms].[split_partition_list]','TF')) is not null DROP FUNCTION [awsdms].[split_partition_list]; GO CREATE FUNCTION [awsdms].[split_partition_list] ( @plist varchar(8000), --A delimited list of partitions @dlm nvarchar(1) --Delimiting character ) RETURNS @partitionsTable table --Table holding the BIGINT values of the string fragments ( pid bigint primary key ) AS BEGIN DECLARE @partition_id bigint; DECLARE @dlm_pos integer; DECLARE @dlm_len integer; SET @dlm_len = len(@dlm); WHILE (charindex(@dlm,@plist)>0) BEGIN SET @dlm_pos = charindex(@dlm,@plist); SET @partition_id = cast( ltrim(rtrim(substring(@plist,1,@dlm_pos-1))) as bigint); INSERT into @partitionsTable (pid) values (@partition_id) SET @plist = substring(@plist,@dlm_pos+@dlm_len,len(@plist)); END SET @partition_id = cast (ltrim(rtrim(@plist)) as bigint); INSERT into @partitionsTable (pid) values ( @partition_id ); RETURN END GO
    3. Erstellen Sie die [awsdms].[rtm_dump_dblog]-Prozedur in der Master-Datenbank:

      USE [MASTER] GO IF (object_id('[awsdms].[rtm_dump_dblog]','P')) is not null DROP PROCEDURE [awsdms].[rtm_dump_dblog]; GO SET ansi_nulls on GO SET quoted_identifier on GO CREATE PROCEDURE [awsdms].[rtm_dump_dblog] ( @start_lsn varchar(32), @seqno integer, @filename varchar(260), @partition_list varchar(8000), -- A comma delimited list: P1,P2,... Pn @programmed_filtering integer, @minPartition bigint, @maxPartition bigint ) AS BEGIN DECLARE @start_lsn_cmp varchar(32); -- Stands against the GT comparator SET NOCOUNT ON -- Disable "rows affected display" SET @start_lsn_cmp = @start_lsn; IF (@start_lsn_cmp) is null SET @start_lsn_cmp = '00000000:00000000:0000'; IF (@partition_list is null) BEGIN RAISERROR ('Null partition list was passed',16,1); return --set @partition_list = '0,'; -- A dummy which is never matched END IF (@start_lsn) is not null SET @start_lsn = '0x'+@start_lsn; IF (@programmed_filtering=0) SELECT [Current LSN], [operation], [Context], [Transaction ID], [Transaction Name], [Begin Time], [End Time], [Flag Bits], [PartitionID], [Page ID], [Slot ID], [RowLog Contents 0], [Log Record], [RowLog Contents 1] -- After Image FROM fn_dump_dblog ( @start_lsn, NULL, N'DISK', @seqno, @filename, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default) WHERE [Current LSN] collate SQL_Latin1_General_CP1_CI_AS > @start_lsn_cmp collate SQL_Latin1_General_CP1_CI_AS -- This aims for implementing FN_DBLOG based on GT comparator. AND ( ( [operation] in ('LOP_BEGIN_XACT','LOP_COMMIT_XACT','LOP_ABORT_XACT') ) OR ( [operation] in ('LOP_INSERT_ROWS','LOP_DELETE_ROWS','LOP_MODIFY_ROW') AND ( ( [context] in ('LCX_HEAP','LCX_CLUSTERED','LCX_MARK_AS_GHOST') ) or ([context] = 'LCX_TEXT_MIX') ) AND [PartitionID] in ( select * from master.awsdms.split_partition_list (@partition_list,',')) ) OR ([operation] = 'LOP_HOBT_DDL') ) ELSE SELECT [Current LSN], [operation], [Context], [Transaction ID], [Transaction Name], [Begin Time], [End Time], [Flag Bits], [PartitionID], [Page ID], [Slot ID], [RowLog Contents 0], [Log Record], [RowLog Contents 1] -- After Image FROM fn_dump_dblog ( @start_lsn, NULL, N'DISK', @seqno, @filename, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default, default) WHERE [Current LSN] collate SQL_Latin1_General_CP1_CI_AS > @start_lsn_cmp collate SQL_Latin1_General_CP1_CI_AS -- This aims for implementing FN_DBLOG based on GT comparator. AND ( ( [operation] in ('LOP_BEGIN_XACT','LOP_COMMIT_XACT','LOP_ABORT_XACT') ) OR ( [operation] in ('LOP_INSERT_ROWS','LOP_DELETE_ROWS','LOP_MODIFY_ROW') AND ( ( [context] in ('LCX_HEAP','LCX_CLUSTERED','LCX_MARK_AS_GHOST') ) or ([context] = 'LCX_TEXT_MIX') ) AND ([PartitionID] is not null) and ([PartitionID] >= @minPartition and [PartitionID]<=@maxPartition) ) OR ([operation] = 'LOP_HOBT_DDL') ) SET NOCOUNT OFF -- Re-enable "rows affected display" END GO
    4. Erstellen Sie ein Zertifikat in der Master-Datenbank:

      USE [master] GO CREATE CERTIFICATE [awsdms_rtm_dump_dblog_cert] ENCRYPTION BY PASSWORD = N'@hardpassword1' WITH SUBJECT = N'Certificate for FN_DUMP_DBLOG Permissions'
    5. Erstellen Sie eine Anmeldung aus dem Zertifikat:

      USE [master] GO CREATE LOGIN awsdms_rtm_dump_dblog_login FROM CERTIFICATE [awsdms_rtm_dump_dblog_cert];
    6. Fügen Sie den Anmeldenamen zur Sysadmin-Serverrolle hinzu:

      ALTER SERVER ROLE [sysadmin] ADD MEMBER [awsdms_rtm_dump_dblog_login];
    7. Fügen Sie die Signatur zur Prozedur [master].[awsdms].[rtm_dump_dblog] unter Verwendung des Zertifikats hinzu:

      USE [master] GO ADD SIGNATURE TO [master].[awsdms].[rtm_dump_dblog] BY CERTIFICATE [awsdms_rtm_dump_dblog_cert] WITH PASSWORD = '@hardpassword1';
      Anmerkung

      Wenn Sie die gespeicherte Prozedur neu erstellen, müssen Sie die Signatur erneut hinzufügen.

    8. Erstellen Sie die [awsdms].[rtm_position_1st_timestamp]-Prozedur in der Master-Datenbank:

      USE [master] IF object_id('[awsdms].[rtm_position_1st_timestamp]','P') is not null DROP PROCEDURE [awsdms].[rtm_position_1st_timestamp]; GO CREATE PROCEDURE [awsdms].[rtm_position_1st_timestamp] ( @dbname sysname, -- Database name @seqno integer, -- Backup set sequence/position number within file @filename varchar(260), -- The backup filename @1stTimeStamp varchar(40) -- The timestamp to position by ) AS BEGIN SET NOCOUNT ON -- Disable "rows affected display" DECLARE @firstMatching table ( cLsn varchar(32), bTim datetime ) DECLARE @sql nvarchar(4000) DECLARE @nl char(2) DECLARE @tb char(2) DECLARE @fnameVar sysname = 'NULL' SET @nl = char(10); -- New line SET @tb = char(9) -- Tab separator IF (@filename is not null) SET @fnameVar = ''''+@filename +'''' SET @filename = ''''+@filename +'''' SET @sql='use ['+@dbname+'];'+@nl+ 'SELECT TOP 1 [Current LSN],[Begin Time]'+@nl+ 'FROM fn_dump_dblog (NULL, NULL, NULL, '+ cast(@seqno as varchar(10))+','+ @filename +','+@nl+ @tb+'default, default, default, default, default, default, default,'+@nl+ @tb+'default, default, default, default, default, default, default,'+@nl+ @tb+'default, default, default, default, default, default, default,'+@nl+ @tb+'default, default, default, default, default, default, default,'+@nl+ @tb+'default, default, default, default, default, default, default,'+@nl+ @tb+'default, default, default, default, default, default, default,'+@nl+ @tb+'default, default, default, default, default, default, default,'+@nl+ @tb+'default, default, default, default, default, default, default,'+@nl+ @tb+'default, default, default, default, default, default, default)'+@nl+ 'WHERE operation=''LOP_BEGIN_XACT''' +@nl+ 'AND [Begin Time]>= cast('+''''+@1stTimeStamp+''''+' as datetime)'+@nl --print @sql DELETE FROM @firstMatching INSERT INTO @firstMatching exec sp_executesql @sql -- Get them all SELECT TOP 1 cLsn as [matching LSN],convert(varchar,bTim,121) AS[matching Timestamp] FROM @firstMatching; SET NOCOUNT OFF -- Re-enable "rows affected display" END GO
    9. Erstellen Sie ein Zertifikat in der Master-Datenbank:

      USE [master] GO CREATE CERTIFICATE [awsdms_rtm_position_1st_timestamp_cert] ENCRYPTION BY PASSWORD = N'@hardpassword1' WITH SUBJECT = N'Certificate for FN_POSITION_1st_TIMESTAMP Permissions';
    10. Erstellen Sie eine Anmeldung aus dem Zertifikat:

      USE [master] GO CREATE LOGIN awsdms_rtm_position_1st_timestamp_login FROM CERTIFICATE [awsdms_rtm_position_1st_timestamp_cert];
    11. Fügen Sie den Anmeldenamen zur Sysadmin-Serverrolle hinzu:

      ALTER SERVER ROLE [sysadmin] ADD MEMBER [awsdms_rtm_position_1st_timestamp_login];
    12. Fügen Sie der [master].[awsdms].[rtm_position_1st_timestamp]-Prozedur mithilfe des Zertifikats die Signatur hinzu:

      USE [master] GO ADD SIGNATURE TO [master].[awsdms].[rtm_position_1st_timestamp] BY CERTIFICATE [awsdms_rtm_position_1st_timestamp_cert] WITH PASSWORD = '@hardpassword1';
      Anmerkung

      Wenn Sie die gespeicherte Prozedur neu erstellen, müssen Sie die Signatur erneut hinzufügen.

    13. Erstellen Sie in jeder der folgenden Datenbanken einen Benutzer mit den folgenden Berechtigungen/Rollen:

      Anmerkung

      Sie sollten das Benutzerkonto dmsnosysadmin mit demselben Konto für jedes Replikat erstellen. SID Die folgende SQL Abfrage kann dabei helfen, den dmsnosysadmin-Kontowert für jedes Replikat zu überprüfen. SID Weitere Informationen zum Erstellen eines Benutzers finden Sie unter CREATEUSER(Transact-SQL) in der SQLMicrosoft-Serverdokumentation. Weitere Informationen zum Erstellen von SQL Benutzerkonten für die SQL Azure-Datenbank finden Sie unter Aktive Georeplikation.

      SELECT @@servername servername, name, sid, create_date, modify_date FROM sys.server_principals WHERE name = 'dmsnosysadmin';
    14. Erteilen Sie für jedes Replikat Berechtigungen für die Master-Datenbank:

      USE master GO GRANT select on sys.fn_dblog to dmsnosysadmin; GRANT view any definition to dmsnosysadmin; GRANT view server state to dmsnosysadmin -- (should be granted to the login). GRANT execute on sp_repldone to dmsnosysadmin; GRANT execute on sp_replincrementlsn to dmsnosysadmin; GRANT execute on sp_addpublication to dmsnosysadmin; GRANT execute on sp_addarticle to dmsnosysadmin; GRANT execute on sp_articlefilter to dmsnosysadmin; GRANT select on [awsdms].[split_partition_list] to dmsnosysadmin; GRANT execute on [awsdms].[rtm_dump_dblog] to dmsnosysadmin; GRANT execute on [awsdms].[rtm_position_1st_timestamp] to dmsnosysadmin;
    15. Erteilen Sie für jedes Replikat Berechtigungen für die msdb-Datenbank:

      USE msdb GO GRANT select on msdb.dbo.backupset to dmsnosysadmin GRANT select on msdb.dbo.backupmediafamily to dmsnosysadmin GRANT select on msdb.dbo.backupfile to dmsnosysadmin
    16. Fügen Sie die db_owner-Rolle zu dmsnosysadmin in der Quelldatenbank hinzu. Da die Datenbank synchronisiert ist, können Sie die Rolle nur dem primären Replikat hinzufügen.

      use <source DB> GO EXEC sp_addrolemember N'db_owner', N'dmsnosysadmin'

Einrichtung einer laufenden Replikation auf einer SQL Cloud-Server-DB-Instance

In diesem Abschnitt wird beschrieben, wie Sie eine in CDC der Cloud gehostete SQL Server-Datenbank-Instance einrichten. Eine in der Cloud gehostete SQL Serverinstanz ist eine Instanz, die auf Amazon RDS for SQL Server, einer Azure SQL Managed Instance oder einer anderen verwalteten SQL Cloud-Server-Instanz ausgeführt wird. Informationen zu den Einschränkungen der laufenden Replikation für jeden Datenbanktyp finden Sie unter Einschränkungen bei der Verwendung von SQL Server als Quelle für AWS DMS.

Bevor Sie die laufende Replikation einrichten, informieren Sie sich unter Voraussetzungen für die Verwendung der laufenden Replikation (CDC) von einer SQL Serverquelle.

Im Gegensatz zu selbstverwalteten Microsoft SQL Server-Quellen unterstützt Amazon RDS for SQL Server keine MS-Replikation. Daher AWS DMS muss MS- CDC für Tabellen mit oder ohne Primärschlüssel verwendet werden.

Amazon gewährt RDS keine Sysadmin-Rechte für die Einrichtung von Replikationsartefakten, die für laufende Änderungen in einer SQL Quell-Server-Instance AWS DMS verwendet werden. Stellen Sie sicher, dass MS- CDC für die RDS Amazon-Instance aktiviert ist (mit Masterbenutzerrechten), wie im folgenden Verfahren beschrieben.

So aktivieren Sie MS- CDC für eine SQL Cloud-Server-DB-Instance
  1. Führen Sie eine der folgenden Abfragen auf Datenbankebene aus.

    Verwenden Sie diese Abfrage RDS für eine SQL Server-DB-Instance.

    exec msdb.dbo.rds_cdc_enable_db 'DB_name'

    Verwenden Sie für eine von Azure SQL verwaltete DB-Instance diese Abfrage.

    USE DB_name GO EXEC sys.sp_cdc_enable_db GO
  2. Führen Sie für jede Tabelle mit einem Primärschlüssel die folgende Abfrage aus, um MS- zu aktivierenCDC.

    exec sys.sp_cdc_enable_table @source_schema = N'schema_name', @source_name = N'table_name', @role_name = NULL, @supports_net_changes = 1 GO

    Führen Sie für jede Tabelle mit eindeutigen Schlüsseln, aber ohne Primärschlüssel die folgende Abfrage aus, um MS- zu aktivierenCDC.

    exec sys.sp_cdc_enable_table @source_schema = N'schema_name', @source_name = N'table_name', @index_name = N'unique_index_name', @role_name = NULL, @supports_net_changes = 1 GO

    Führen Sie für jede Tabelle ohne Primärschlüssel oder eindeutige Schlüssel die folgende Abfrage aus, um MS- zu aktivierenCDC.

    exec sys.sp_cdc_enable_table @source_schema = N'schema_name', @source_name = N'table_name', @role_name = NULL GO
  3. Legen Sie den Aufbewahrungszeitraum fest:

    • Stellen Sie RDS bei SQL Serverinstanzen, die mit DMS Version 3.5.3 und höher replizieren, sicher, dass die Aufbewahrungsdauer auf den Standardwert von 5 Sekunden festgelegt ist. Wenn Sie ein Upgrade durchführen oder von DMS 3.5.2 und niedriger auf DMS 3.5.3 und höher wechseln, ändern Sie den Wert für das Abfrageintervall, nachdem die Aufgaben auf der neuen oder aktualisierten Instanz ausgeführt wurden. Das folgende Skript legt die Aufbewahrungsdauer auf 5 Sekunden fest:

      use dbname EXEC sys.sp_cdc_change_job @job_type = 'capture' ,@pollinginterval = 5 exec sp_cdc_stop_job 'capture' exec sp_cdc_start_job 'capture'
    • Verwenden Sie für Azure SQL MI und RDS für SQL Serverinstanzen, die mit DMS Version 3.5.2 und niedriger replizieren, die folgenden Befehle:

      use dbname EXEC sys.sp_cdc_change_job @job_type = 'capture' ,@pollinginterval = 86399 exec sp_cdc_stop_job 'capture' exec sp_cdc_start_job 'capture'

      Der Parameter @pollinginterval wird in Sekunden gemessen, wobei der empfohlene Wert auf 86 399 festgelegt ist. Dies bedeutet, dass das Transaktionsprotokoll Änderungen 86 399 Sekunden (einen Tag) lang speichert, wenn @pollinginterval = 86399. Die Prozedur exec sp_cdc_start_job 'capture' initiiert die Einstellungen.

      Anmerkung

      Bei einigen Versionen von SQL Server pollinginterval wird der Wert auf den Standardwert von fünf Sekunden zurückgesetzt, wenn der Wert von auf mehr als 3599 Sekunden festgelegt ist. In diesem Fall werden T-Log-Einträge gelöscht, bevor AWS DMS sie gelesen werden können. Informationen dazu, welche SQL Serverversionen von diesem bekannten Problem betroffen sind, finden Sie in diesem Microsoft KB-Artikel.

      Wenn Sie Amazon RDS mit Multi-AZ verwenden, stellen Sie sicher, dass Sie auch Ihr Sekundärgerät so einstellen, dass es im Falle eines Failovers die richtigen Werte hat.

      exec rdsadmin..rds_set_configuration 'cdc_capture_pollinginterval' , <5 or 86399>
Um die Aufbewahrungsfrist beizubehalten, wenn eine AWS DMS Replikationsaufgabe für mehr als eine Stunde angehalten wird
Anmerkung

Die folgenden Schritte sind RDS für eine SQL Serverquellenreplikation mit DMS Version 3.5.3 und höher nicht erforderlich.

  1. Halten Sie den Auftrag, der die Transaktionsprotokolle kürzt, mit dem folgenden Befehl an.

    exec sp_cdc_stop_job 'capture'
  2. Suchen Sie Ihre Aufgabe auf der AWS DMS Konsole und setzen Sie sie fort.

  3. Wählen Sie die Registerkarte Überwachung und überprüfen Sie die Metrik CDCLatencySource.

  4. Wenn die Metrik CDCLatencySource gleich 0 (Null) ist und diesen Wert beibehält, starten Sie den Auftrag, der die Transaktionsprotokolle kürzt, mit dem folgenden Befehl neu.

    exec sp_cdc_start_job 'capture'

Denken Sie daran, den Job zu starten, der SQL Server-Transaktionsprotokolle kürzt. Andernfalls könnte der Speicher auf Ihrer SQL Serverinstanz voll werden.

Empfohlene Einstellungen bei der Verwendung von RDS for SQL Server als Quelle für AWS DMS

Für AWS DMS 3.5.3 und höher

Anmerkung

Die erste Version der Funktion RDS zur Sicherung von SQL Serverprotokollen ist standardmäßig für Endpoints aktiviert, die Sie nach der Veröffentlichung von DMS Version 3.5.3 erstellt oder geändert haben. Um diese Funktion für bestehende Endpoints zu verwenden, ändern Sie den Endpunkt, ohne Änderungen vorzunehmen.

AWS DMS Version 3.5.3 bietet Unterstützung für das Lesen aus Protokollsicherungen. DMSstützt sich hauptsächlich auf das Lesen aus den aktiven Transaktionsprotokollen, um Ereignisse zu replizieren. Wenn eine Transaktion gesichert wurde, bevor sie aus dem aktiven Protokoll gelesen werden DMS kann, greift die Task bei Bedarf auf die RDS Backups zu und liest aus den nachfolgenden Backup-Logs, bis sie das aktive Transaktionslog erreicht. Um sicherzustellen, dass diese DMS Person Zugriff auf Protokollsicherungen hat, legen Sie die Aufbewahrungsfrist für RDS automatische Backups auf mindestens einen Tag fest. Informationen zur Einstellung des Aufbewahrungszeitraums für automatische Backup finden Sie unter Aufbewahrungszeitraum für Backups im RDSAmazon-Benutzerhandbuch.

Eine DMS Aufgabe, die auf Protokollsicherungen zugreift, nutzt Speicherplatz auf der RDS Instance. Beachten Sie, dass die Aufgabe nur auf die für die Replikation benötigten Protokollsicherungen zugreift. Amazon RDS entfernt diese heruntergeladenen Backups in ein paar Stunden. Diese Entfernung hat keine Auswirkungen auf die in Amazon S3 gespeicherten RDS Amazon-Backups oder die RDS RESTORE DATABASE Amazon-Funktionalität. Es ist ratsam, zusätzlichen Speicherplatz auf Ihrer RDS SQL Serverquelle zuzuweisen, wenn Sie beabsichtigen, mithilfe von zu replizieren. DMS Eine Möglichkeit, den Speicherbedarf abzuschätzen, besteht darin, das Backup zu ermitteln, von dem aus die Replikation gestartet oder fortgesetzt DMS werden soll, und mithilfe der Metadatenfunktion die Dateigrößen aller nachfolgenden Backups zu addieren. RDS tlog backup Weitere Informationen zu dieser tlog backup Funktion finden Sie unter Verfügbare Transaktionsprotokoll-Backups auflisten im RDSAmazon-Benutzerhandbuch.

Alternativ können Sie die automatische Speicherskalierung aktivieren und/oder die Speicherskalierung basierend auf der CloudWatch FreeStorageSpace Metrik für Ihre Amazon-Instance auslösen. RDS

Wir empfehlen dringend, nicht an einem Punkt zu weit hinten in den Transaktionsprotokoll-Backups zu beginnen oder fortzufahren, da dies dazu führen könnte, dass der Speicherplatz auf Ihrer SQL Server-Instance voll wird. In solchen Fällen ist es ratsam, einen vollen Ladevorgang zu starten. Das Replizieren aus dem Transaktionslog-Backup ist langsamer als das Lesen aus den aktiven Transaktionslogs. Weitere Informationen finden Sie unter Verarbeitung der Sicherung des Transaktionsprotokolls für den Server RDS SQL.

Beachten Sie, dass für den Zugriff auf die Protokollsicherungen zusätzliche Rechte erforderlich sind. Weitere Informationen finden Sie unter Richten Sie Berechtigungen für die laufende Replikation aus einer SQL Cloud-Serverdatenbank ein Stellen Sie sicher, dass Sie diese Rechte gewähren, bevor die Aufgabe mit der Replikation beginnt.

Für AWS DMS 3.5.2 und niedriger

Wenn Sie mit Amazon RDS for SQL Server als Quelle arbeiten, stützt sich der CDC MS-Capture-Job auf die Parameter maxscans undmaxtrans. Diese Parameter bestimmen die maximale Anzahl von Scans, die CDC MS-Capture im Transaktionsprotokoll durchführt, und die Anzahl der Transaktionen, die für jeden Scan verarbeitet werden.

Bei Datenbanken, bei denen die Anzahl der Transaktionen größer als maxtrans*maxscans ist, kann eine Erhöhung des Werts polling_interval zu einer Anhäufung von aktiven Transaktionsprotokoll-Datensätzen führen. Diese Anhäufung kann wiederum zu einer Vergrößerung des Transaktionsprotokolls führen.

Beachten Sie, dass AWS DMS dies nicht vom CDC MS-Capture-Job abhängt. Der CDC MS-Capture-Job markiert die Transaktionsprotokolleinträge als verarbeitet. Dadurch kann der Backup-Auftrag für das Transaktionsprotokoll die Einträge aus dem Transaktionsprotokoll entfernen.

Wir empfehlen Ihnen, die Größe des Transaktionsprotokolls und den Erfolg der CDC MS-Jobs zu überwachen. Wenn die CDC MS-Jobs fehlschlagen, könnte das Transaktionslog übermäßig anwachsen und zu AWS DMS Replikationsfehlern führen. Sie können CDC MS-Capture-Jobfehler mithilfe der sys.dm_cdc_errors dynamischen Verwaltungsansicht in der Quelldatenbank überwachen. Sie können die Größe des Transaktionsprotokolls mithilfe des Verwaltungsbefehls DBCC SQLPERF(LOGSPACE) überwachen.

Um dem Anstieg des Transaktionsprotokolls entgegenzuwirken, der durch MS- verursacht wird CDC
  1. Prüfen Sie, aus welcher Datenbank repliziert AWS DMS wird, und stellen Sie sicher, dass sie kontinuierlich zunimmt. Log Space Used %

    DBCC SQLPERF(LOGSPACE)
  2. Ermitteln Sie, wodurch der Backup-Vorgang des Transaktionsprotokolls blockiert wird.

    Select log_reuse_wait, log_reuse_wait_desc, name from sys.databases where name = db_name();

    Wenn der log_reuse_wait_desc Wert gleich istREPLICATION, wird die Aufbewahrung der Protokollsicherung durch die Latenz in MS- verursacht. CDC

  3. Erhöhen Sie die Anzahl der vom Erfassungsauftrag verarbeiteten Ereignisse, indem Sie die Parameterwerte maxtrans und maxscans erhöhen.

    EXEC sys.sp_cdc_change_job @job_type = 'capture' ,@maxtrans = 5000, @maxscans = 20 exec sp_cdc_stop_job 'capture' exec sp_cdc_start_job 'capture'

Um dieses Problem zu beheben, legen Sie die Werte von maxscans und maxtrans so fest, dass maxtrans*maxscans sie der durchschnittlichen Anzahl von Ereignissen entsprechen, die für Tabellen generiert werden, die für jeden Tag aus der Quelldatenbank AWS DMS repliziert werden.

Wenn Sie für diese Parameter einen höheren als den empfohlenen Wert festlegen, verarbeiten die Erfassungsaufträge alle Ereignisse in den Transaktionsprotokollen. Wenn Sie diese Parameter unter den empfohlenen Wert setzen, erhöht sich die CDC MS-Latenz und Ihr Transaktionslog wächst.

Die Ermittlung geeigneter Werte für maxscans und maxtrans kann schwierig sein, da Änderungen des Workloads zu einer unterschiedlichen Anzahl von Ereignissen führen. In diesem Fall empfehlen wir Ihnen, die Überwachung auf CDC MS-Latenz einzurichten. Weitere Informationen finden Sie in der SQL Serverdokumentation unter Überwachen des Prozesses. Konfigurieren Sie dann maxtrans und maxscans dynamisch auf Grundlage der Überwachungsergebnisse.

Wenn die AWS DMS Aufgabe nicht in der Lage ist, die Protokollsequenznummern (LSNs) zu finden, die für die Fortsetzung oder Fortsetzung der Aufgabe erforderlich sind, schlägt die Aufgabe möglicherweise fehl und erfordert ein vollständiges Neuladen.

Anmerkung

Wenn Sie Daten aus einer RDS for SQL Server-Quelle replizieren, können Fehler auftreten, wenn Sie versuchen, die Replikation nach einem Stop-Start-Ereignis der Amazon-Instance fortzusetzen. AWS DMS RDS Dies liegt daran, dass der SQL Server-Agent-Prozess den Capture-Job-Prozess neu startet, wenn er nach dem Stop-Start-Ereignis neu gestartet wird. Dadurch wird das MS-Polling-Intervall umgangen. CDC

Aus diesem Grund kann dies bei Datenbanken mit einem Transaktionsvolumen, das unter der Verarbeitung des CDC MS-Capture-Jobs liegt, dazu führen, dass Daten verarbeitet oder als repliziert markiert und gesichert werden, bevor sie an der Stelle fortgesetzt werden AWS DMS können, an der sie unterbrochen wurden. Dies führt zu dem folgenden Fehler:

[SOURCE_CAPTURE ]E: Failed to access LSN '0000dbd9:0006f9ad:0003' in the backup log sets since BACKUP/LOG-s are not available. [1020465] (sqlserver_endpoint_capture.c:764)

Legen Sie die Werte maxtrans und maxscans wie zuvor empfohlen fest, um dieses Problem zu beheben.