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?
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
Conteúdo relevante
- AWS OFICIALAtualizada há 2 anos
- AWS OFICIALAtualizada há 2 anos
- AWS OFICIALAtualizada há 2 anos
- AWS OFICIALAtualizada há 2 anos