AWS DMS 无法截断 SQL 事务日志

AWS DMS unable to truncate SQL transaction log

我们正在 运行ning AWS DMS,SQL 作为源,DynamoDB 作为目标。

我们很难运行整理事务日志,我们看到每个 AWS DMS 有 2 SQL 个任务,如下所示:

begin transaction [WVGLQ7HFWFWJCCPK4RQVRQGDVE]; update [dbo].[awsdms_truncation_safeguard] set [latchLocker] = GETDATE() where [latchTaskName]='[WVGLQ7HFWFWJCCPK4RQVRQGDVE]' and [latchMachineGUID]='660a2d00-681b-46fd-89c3-3abdcfc8df18' and [LatchKey]='A'

知道如何让 AWS DMS 完成我们可以 运行 分类日志的事务

AWS 文档说:https://docs.aws.amazon.com/dms/latest/userguide/CHAP_Source.SQLServer.html

名称描述 保障政策

为了获得最佳性能,AWS DMS 尝试从活动事务日志 (TLOG) 中捕获所有未读的更改。但是,有时由于 t运行cation,活动 TLOG 可能不包含所有未读更改。发生这种情况时,AWS DMS 会访问备份日志以捕获丢失的更改。为了最大限度地减少访问备份日志的需要,AWS DMS 使用以下方法之一阻止 t运行cation:

  1. 在数据库中启动事务:这是默认方法。使用此方法时,AWS DMS 通过模拟数据库中的事务来防止 TLOG t运行cation。只要这样的事务处于打开状态,事务开始后出现的更改就不会受到影响运行。如果您需要在数据库中启用 Microsoft Replication,则必须选择此方法。

  2. 在单个任务中独占使用sp_repldone:使用此方法时,AWS DMS 读取更改,然后使用sp_repldone 将TLOG 事务标记为准备就绪运行阳离子。虽然此方法不涉及任何事务活动,但只能在 Microsoft Replication 未 运行ning 时使用。此外,使用此方法时,在任何给定时间只有一个 AWS DMS 任务可以访问数据库。因此,如果您需要针对同一数据库 运行 并行 AWS DMS 任务,请使用默认方法。

默认值:RELY_ON_SQL_SERVER_REPLICATION_AGENT

有效值:{EXCLUSIVE_AUTOMATIC_TRUNCATION、RELY_ON_SQL_SERVER_REPLICATION_AGENT}

示例:保障政策= RELY_ON_SQL_SERVER_REPLICATION_AGENT

只读备份

当此参数设置为 Y 时,AWS DMS 仅从事务日志备份中读取更改,而不会在正在进行的复制期间从活动事务日志文件中读取。将此参数设置为 Y 可以为正在进行的复制添加一些源延迟,但它可以让您在满载和正在进行的复制任务期间控制活动事务日志文件的增长。

有效值:N 或 Y。默认值为 N。

示例:readBackupOnly=Y

我们正在使用 SQL 复制,因为我们的表带有主键,是否有解决方法。还有什么我们需要配置的吗

我遇到了同样的问题。

运行:

EXEC sp_replcounters

如文档所说,添加参数

safeguardPolicy : EXCLUSIVE_AUTOMATIC_TRUNCATION 

和 运行 记录 reader 或创建一个新作业并以特定间隔添加以下命令和 运行 作业。日志文件不会占用任何空间 space,因为旧记录将被标记为已导出。

EXEC sp_replshowcmds

EXEC sp_repldone @xactid = NULL, @xact_segno = NULL, @numtrans = 0, @time = 0, @reset = 1

又是运行sp_replcounter

检查这个:https://docs.microsoft.com/en-us/sql/relational-databases/system-stored-procedures/sp-repldone-transact-sql?view=sql-server-2017