2

我们正在运行 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) 中捕获所有未读更改。但是,有时由于截断,活动 TLOG 可能不包含所有未读更改。发生这种情况时,AWS DMS 会访问备份日志以捕获丢失的更改。为了最大限度地减少访问备份日志的需要,AWS DMS 使用以下方法之一防止截断:

  1. 在数据库中启动事务:这是默认方法。使用此方法时,AWS DMS 通过模仿数据库中的事务来防止 TLOG 截断。只要此类事务处于打开状态,事务启动后出现的更改就不会被截断。如果您需要在数据库中启用 Microsoft 复制,则必须选择此方法。

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

默认值:RELY_ON_SQL_SERVER_REPLICATION_AGENT

有效值:{EXCLUSIVE_AUTOMATIC_TRUNCATION, RELY_ON_SQL_SERVER_REPLICATION_AGENT}

示例:safeguardPolicy= RELY_ON_SQL_SERVER_REPLICATION_AGENT

只读备份

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

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

示例:readBackupOnly=Y

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

4

1 回答 1

2

I experienced same problem.

Run:

EXEC sp_replcounters

As the document says, add parameter

safeguardPolicy : EXCLUSIVE_AUTOMATIC_TRUNCATION 

and run log reader or create a new job and add the following commands and run job at specific intervals. The log file will not take up any space since old records will be marked as exported.

EXEC sp_replshowcmds

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

And again run sp_replcounter

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

于 2018-06-12T08:36:14.907 回答