Como posso solucionar problemas de T-Log cheio na fonte do RDS para o SQL Server quando a CDC da tarefa do AWS DMS está ativada?

6 minuto de leitura
0

Eu tenho uma tarefa do AWS Database Migration Service (AWS DMS) com captura de dados de alteração (CDC) ativada. Minha tarefa usa o Amazon Relational Database Service (Amazon RDS) para SQL Server como fonte. Vejo problemas de “SQL Server T-Log full” na tarefa do AWS DMS.

Breve descrição

Se você está usando o SQL Server como fonte para tarefas do AWS DMS, ative a captura de dados de alteração (CDC) da MS nas instâncias para replicar as alterações. Você pode usar o MS-CDC para o SQL Server do Amazon RDS, SQL Server on-premises e SQL Server em instâncias do Amazon Elastic Compute Cloud (Amazon EC2).

Depois de ativar a CDC, ela usa a função fn_dblog() para rastrear e ler alterações de DML contínuas no arquivo de log ativo. Para cada tabela de origem, a CDC cria uma tabela de alteração da CDC correspondente.

A CDC cria dois trabalhos para rastrear as alterações:

  • Trabalho de captura: verifica os T-logs e usa o procedimento de armazenamento sp_replcmds para capturar e registrar alterações na tabela de alterações correspondente.
  • Trabalho de limpeza: limpa o rastreamento de alterações de acordo com a política de retenção.

Execute o procedimento armazenado a seguir para visualizar o conjunto de valores para estas configurações:

EXEC sys.sp_cdc_help_jobs
  • Maxtrans: número máximo de transações a serem processadas em cada ciclo de verificação.
  • Maxscans: número máximo de ciclos de verificação a serem executados para extrair todas as linhas do log.
  • Pollinginterval: número de segundos entre os ciclos de verificação do log.

No Amazon RDS para SQL Server, os backups do log de transações são realizados a cada 5 minutos de acordo com o design. Durante o backup do log de transações, o SQL Server trunca a parte inativa do log de transações. Essa parte contém números de sequência de log (LSNs) que o AWS DMS não leu. Como resultado, o AWS DMS pode não localizar os LSNs necessários para replicar as alterações de dados desejadas.

Para evitar esse problema, o AWS DMS tem as opções awsdms_truncation_safeguard e pollingInterval.

awsdms_truncation_safeguard: o AWS DMS cria uma tabela chamada awsdms_truncation_safeguard no banco de dados de origem. Essa tabela evita o truncamento do log de transações imitando uma transação no banco de dados

Mas, se o AWS DMS atrasar a leitura dos logs por mais de 10 minutos, a tarefa falhará novamente. Para evitar esse problema, use o parâmetro pollingInterval. Para mais informações, consulteUsing a Microsoft SQL Server database as a source for AWS DMS (Usar um banco de dados do Microsoft SQL Server como fonte para o AWS DMS.

pollingInterval: o valor padrão é definido como 5 segundos para trabalhos de captura. Isso significa que pollingInterval é executado a cada 5 segundos, verifica o T-log para ler alterações e marca esses logs como replicados. Em seguida, ele trunca os logs.

A prática recomendada é definir um valor de pollingInterval >= 3599. Isso evita que os trabalhos de captura sejam executados com muita frequência. Os T-logs também são configurados para que não sejam truncados por um tempo especificado.

Um banco de dados altamente transacional pode resultar em um estado de T-Log cheio. Então, a tarefa falha com um erro semelhante ao seguinte:

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'

Solução

Observação: se ocorrerem erros ao executar comandos da AWS Command Line Interface (AWS CLI), verifique se você está usando a versão mais recente da AWS CLI.

Solucione e resolva problemas de T-Log cheio do SQL Server quando a CDC está ativada

Execute as etapas a seguir para solucionar e resolver problemas de T-Log cheio do SQL Server quando a CDC está ativada.

1.    Verifique o tamanho dos seus arquivos do log de transações:

DBCC SQLPERF(logspace)

2.    Se o log de transações estiver cheio, execute o seguinte comando para ver o conteúdo do log:

select name, log\_reuse\_wait\_desc from sys.databases where name = ' db\_name '
  • Replication: a replicação parou de funcionar ou não está lendo as transações ativas.
  • Active_transaction: há uma transação aberta.

Se houver uma transação ativa, verifique a lista de transações abertas:

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

Observação: quando o AWS DMS está no estado Em execução, não é possível reduzir o T-Log de um banco de dados com a CDC ativada. Em vez disso, interrompa a tarefa e aguarde o backup do log truncar os logs de transações. Em seguida, reduza o T-Log do banco de dados.

Reduza os arquivos do T-log e REINICIE a tarefa

Depois de limpar os logs, reduza os arquivos do T-log e reinicie a tarefa:

1.    Interrompa a tarefa.

2.    Verifique o status da CDC e, em seguida, desative a CDC.

Verifique o status da 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%';

Desative a CDC no nível do banco de dados:

exec msdb.dbo.rds_cdc_disable_db '<db_name>'

Encontre as tabelas que fazem parte da 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

Desative a CDC no nível da tabela:

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

3.    Verifique se a CDC está desativada:

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

4.    Depois de confirmar que a CDC está desativada, aguarde pelo menos 10 minutos e reduza seus T-logs:

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

5.    Confirme o tamanho dos logs:

DBCC SQLPERF(logspace)

6.    Ative a CDC novamente e reinicie a tarefa. A retomada da tarefa pode causar a perda de transações. O Amazon RDS para SQL Server não permite o acesso ao T-log arquivado.

Informações relacionadas

Pré-requisitos para usar a replicação contínua (CDC) de uma fonte do SQL Server

Configurações recomendadas ao usar o Amazon RDS para SQL Server como fonte para o AWS DMS

AWS OFICIAL
AWS OFICIALAtualizada há um ano