You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AWS DMS(源SQL、目标DynamoDB)无法截断事务日志求助

解决AWS DMS导致SQL Server事务日志无法截断的问题

首先得给你拆解下你看到的这个事务:awsdms_truncation_safeguard是AWS DMS自动创建的锁表,作用是防止SQL Server在DMS还没读完事务日志时就提前截断日志。这个事务一直没提交,说明DMS的日志读取进程大概率卡住了,或是和SQL Server的连接出了异常,导致锁表的更新事务没法正常收尾。

下面是一步步的实操解决方法:

1. 先排查DMS任务本身的状态和日志

  • 登录AWS控制台找到你的DMS任务,先看任务状态:如果是Running with warnings或者Failed,那肯定是任务本身有错误,先优先解决任务的异常提示。
  • 打开任务的CloudWatch日志,搜索truncation_safeguard或transaction关键词,看看有没有连接超时、权限不足、SQL Server端阻塞这类报错,这些往往是问题根源。

2. 检查SQL Server端的会话状态

在SQL Server里运行以下查询,定位到卡住的事务对应的会话:

SELECT 
    s.session_id,
    t.transaction_id,
    t.name AS transaction_name,
    s.status,
    s.login_name,
    s.host_name,
    blocking_session_id
FROM sys.dm_tran_active_transactions t
JOIN sys.dm_exec_sessions s ON t.transaction_id = s.transaction_id
WHERE t.name = 'WVGLQ7HFWFWJCCPK4RQVRQGDVE'; -- 替换成你实际看到的事务名
  • 如果blocking_session_id不为0,说明这个会话被其他SQL会话阻塞了,先解决阻塞问题(比如终止阻塞的会话)。
  • 如果会话状态是sleeping但事务一直未提交,基本是DMS的客户端进程没正常响应。

3. 重启DMS任务(最常用的修复方案)

如果排查后任务状态正常但日志一直卡着,试试暂停再重启DMS任务:

  • 暂停任务时,DMS会尝试完成当前事务并记录检查点;
  • 重启后,DMS会重新建立和SQL Server的连接,自动完成之前未提交的safeguard事务,之后SQL Server就能正常截断日志了。
  • 注意:如果是CDC增量同步模式,重启不会丢失数据,DMS会从上次记录的检查点继续同步;如果是全量+增量模式,重启后会先验证全量数据一致性,再继续增量同步。

4. 验证SQL Server的权限和日志策略

  • 确认DMS使用的SQL Server账号权限足够:需要VIEW SERVER STATE、ALTER ANY DATABASE权限,以及对awsdms_truncation_safeguard表的读写权限(这个表是DMS自动创建的,一般权限没问题,但如果手动修改过表权限就会出问题)。
  • 检查SQL Server的恢复模式和日志备份策略:如果是完整恢复模式,必须定期做事务日志备份,否则就算DMS完成了safeguard事务,日志文件也会一直增长(SQL Server需要保留日志到最近一次备份)。

5. 极端情况:手动终止SQL会话(谨慎操作)

如果以上方法都没用,且确认这个会话已经卡死,可以在SQL Server里手动终止:

KILL <session_id>; -- 替换成你之前查询到的session_id
  • 终止后,DMS任务会因为连接中断报错,需要重启任务;
  • 重启后DMS会重新创建safeguard表的事务并正常提交,之后日志就能正常截断了;
  • 这个操作有风险,可能导致短暂的数据同步延迟,之后一定要验证数据一致性。

内容的提问来源于stack exchange,提问作者Haroon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 10:10:53