AWS DMS(SQL Server→S3)持续报错“AlwaysOn备份数据不可用”求助
问题说明
使用AWS DMS 3.4.7从SQL Server迁移数据到S3时,全量迁移可正常完成,但持续复制任务运行数天后失败,报错如下:
Last Error AlwaysOn BACKUP-ed data is not available Task error
notification received from subtask 0, thread 0
[reptask/replicationtask.c:2883] [1020465] Error executing source
loop; Stream component failed at subtask 0, component
st_0_sqlbrewer-aw; Stream component 'st_0_sqlbrewer-aw' terminated
[reptask/replicationtask.c:2891] [1020465] Stop Reason FATAL_ERROR
Error Level FATAL
问题根源是DMS需要访问7天前的备份文件,但现有备份仅保留7天,以下是无需永久保留所有备份的解决办法:
可行方案
1. 重置CDC起始位置为当前时间
任务失败后重启时,放弃之前的CDC进度,指定从当前时间开始捕获变更:
- 停止故障任务
- 在任务配置中修改
CDC start position为Current time - 重启任务
此方法的代价是丢失故障发生到重启期间的变更数据,需手动补全该时段的增量数据。
2. 优化日志备份的可达性
确保DMS能实时获取最新的日志备份,避免因备份过期无法访问:
- 将SQL Server的日志备份直接存储到DMS可访问的位置(如S3、EC2挂载卷),而非本地存储
- 提高日志备份频率(比如从每日改为每小时),缩小备份覆盖的时间窗口,让DMS更快获取到新备份
3. 改用事务日志传送供DMS读取
若SQL Server使用AlwaysOn,配置事务日志传送至备用服务器,让DMS连接备用服务器进行CDC捕获。此方式下DMS直接读取事务日志,不再依赖备份文件,不受备份保留期限制。
4. 升级DMS至最新稳定版本
AWS DMS后续版本(如3.5.x及以上)可能优化了对SQL Server AlwaysOn备份的依赖逻辑,升级后可能解决备份过期导致的任务崩溃问题。升级前请先在测试环境验证兼容性。
5. 切换CDC日志读取模式
检查DMS的SQL Server端点配置,尝试将Log Read Mode改为Direct(需SQL Server版本和环境支持),让DMS直接读取事务日志,而非依赖备份文件。
内容的提问来源于stack exchange,提问作者Zack

