Come posso risolvere i problemi completi di T-Log sulla mia sorgente RDS per SQL Server quando CDC è attivo per la mia attività AWS DMS?

5 minuti di lettura
0

Ho un'attività di AWS Database Migration Service (AWS DMS) con l'acquisizione dei dati di modifica (CDC) attivata. La mia attività utilizza Amazon Relational Database Service (Amazon RDS) per SQL Server come origine. Riscontro problemi relativi al problema "SQL Server T-Log completo" nella mia attività AWS DMS.

Breve descrizione

Se utilizzi SQL Server come origine per le attività di AWS DMS, attiva MS change data capture (CDC) sulle tue istanze per replicare le modifiche. Puoi usare MS-CDC per Amazon RDS SQL Server, SQL Server locale e SQL Server su istanze Amazon Elastic Compute Cloud (Amazon EC2).

Dopo aver attivato CDC, utilizza la funzione fn_dblog() per tracciare e leggere le modifiche DML in corso dal file di registro attivo. Per ogni tabella sorgente, CDC crea una tabella delle modifiche CDC corrispondente.

CDC crea due posti di lavoro per tenere traccia delle modifiche:

  • Capture job - analizza i T-log e quindi utilizza la procedura di archiviazione sp_replcmds per acquisire e registrare le modifiche nella tabella delle modifiche corrispondente.
  • Lavori di pulizia - pulisce il tracciamento delle modifiche in base alla politica di conservazione.

Esegui la procedura memorizzata seguente per visualizzare il set di valori per queste impostazioni:

EXEC sys.sp_cdc_help_jobs
  • Maxtrans - il numero massimo di transazioni da elaborare in ogni ciclo di scansione.
  • Maxscans - il numero massimo di cicli di scansione da eseguire per estrarre tutte le righe dal registro.
  • Intervallo di polling - il numero di secondi tra i cicli di scansione del registro.

Su Amazon RDS per SQL Server, i backup dei log delle transazioni vengono eseguiti ogni 5 minuti in base alla progettazione. Durante il backup del registro delle transazioni, SQL Server tronca la parte inattiva del registro delle transazioni. Questa parte contiene Log Sequence Numbers (LSN) che AWS DMS non ha letto. Di conseguenza, AWS DMS potrebbe non individuare gli LSN necessari per replicare le modifiche ai dati desiderate.

Per evitare questo problema, AWS DMS dispone delle opzioni awsdms_truncation_safeguard e PollingInterval.

awsdms_truncation_safeguard: AWS DMS crea una tabella chiamata awsdms_truncation_safeguard nel database di origine. Questa tabella impedisce il troncamento del registro delle transazioni imitando una transazione nel database

Tuttavia, se AWS DMS ritarda la lettura dei log per più di 10 minuti, l'operazione fallisce nuovamente. Per evitare questo problema, utilizza il parametro PollingInterval. Per ulteriori informazioni, consulta Utilizzo di un database Microsoft SQL Server come fonte per AWS DMS.

pollingInterval: Il valore predefinito è impostato su 5 secondi per i processi di acquisizione. Ciò significa che pollingInterval viene eseguito ogni 5 secondi, analizza il T-log per leggere le modifiche e quindi contrassegna questi log come replicati. Quindi, tronca i registri.

È consigliabile impostare il valore PollingInterval su >=3599. In questo modo si evita che i processi di acquisizione vengano eseguiti troppo frequentemente. Configura inoltre i T-log in modo che non vengano troncati per un determinato periodo di tempo.

Un database altamente transazionale può comportare uno stato completo di T-Log. L'operazione fallisce quindi con un errore simile al seguente:

E: RetCode: SQL_ERROR SqlState: 42000 NativeError: 9002 Message: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]The transaction
log for database 'yourdatabase' is full due to 'REPLICATION'

Risoluzione

Nota: Se ricevi errori durante l'esecuzione dei comandi AWS Command Line Interface (AWS CLI), assicurati di utilizzare la versione più recente dell'interfaccia a riga di comando di AWS.

Risolvi e risolvi tutti i problemi relativi a SQL Server T-Log quando CDC è attivato

Completa i seguenti passaggi per risolvere e risolvere i problemi completi di SQL Server T-Log quando CDC è acceso.

1.    Controlla la dimensione dei file di registro delle transazioni:

DBCC SQLPERF(logspace)

2.    Se il registro delle transazioni è completo, esegui il seguente comando per visualizzare il contenuto del registro:

select name, log\_reuse\_wait\_desc from sys.databases where name = ' db\_name '
  • Replica: La replica ha smesso di funzionare o non legge le transazioni attive.
  • Active_transaction: C'è una transazione aperta.

Se c'è una transazione attiva, controlla l'elenco delle transazioni aperte:

select \* from sys.sysprocesses where open\_tran=1

Nota: Quando AWS DMS è in stato Esecuzione, non puoi ridurre il T-Log di un database con CDC attivato. Invece, interrompi l'attività e attendi che il backup del registro tronchi i registri delle transazioni. Quindi, riduci il T-Log del database.

Riduci i file T-log e RIAVVIA l'operazione

Dopo aver ripulito i registri, riduci i file T-log e riavvia l'attività:

1.    Interrompi l'operazione.

2.    Controlla lo stato del CDC, quindi disattiva il CDC.

Controlla lo stato del CDC:

select b.name,a.run\_date,a.run\_status from msdb.dbo.sysjobhistory as a
join msdb.dbo.sysjobs as b on a.job\_id=b.job\_id
where b.name like '%cdc%capture%';

Disattiva CDC a livello di database:

exec msdb.dbo.rds_cdc_disable_db '<db_name>'

Trova le tabelle che fanno parte di CDC:

USE db\_name
GO
SELECT s.name AS Schema\_Name, tb.name AS Table\_Name
, tb.object\_id, tb.type, tb.type\_desc, tb.is\_tracked\_by\_cdc
FROM sys.tables tb
INNER JOIN sys.schemas s on s.schema\_id = tb.schema\_id
WHERE tb.is\_tracked\_by\_cdc = 1

Disattiva il CDC a livello di tabella:

use <db_name>
EXEC sys.sp_cdc_disable_table
@source_schema = N'<schema>',
@source_name = N'<table>',
@capture_instance = N'<schema_table>'

3.    Verifica che il CDC sia spento:

select is_cdc_enabled, * from sys.databases where name = 'dbname' Value 1- enabled and 0 -Disabled

4.    Dopo aver confermato che il CDS è spento, attendi almeno 10 minuti, quindi riduci i T-log:

use <dbname>
SELECT file_id, name
FROM sys.database_files;
GO
USE <dbname>
GO
DBCC SHRINKFILE (N'dbname_log' , 0, TRUNCATEONLY)
GO

5.    Conferma la dimensione dei registri:

DBCC SQLPERF(logspace)

6.    Attiva nuovamente CDC, quindi riavvia l'attività. La ripresa dell'attività potrebbe causare la mancanza di transazioni. Amazon RDS per SQL Server non supporta l'accesso al T-log archiviato.

Informazioni correlate

Prerequisiti per l'utilizzo della replica continua (CDC) da un'origine SQL Server

Impostazioni consigliate quando si utilizza Amazon RDS per SQL Server come fonte per AWS DMS

AWS UFFICIALE
AWS UFFICIALEAggiornata un anno fa