BackupInUseException
TL;DR — 这张表上有一个相互冲突的备份控制平面操作仍在进行中:备份此刻正在被创建、删除或恢复。这些操作是串行化的——等进行中的那个完成(通过 DescribeBackup 检查 BackupStatus),然后重试你的操作。
含义
BackupInUseException: There is another ongoing conflicting backup control
plane operation on the table. The backup is either being created, deleted
or restored to a table.按需备份操作(CreateBackup、DeleteBackup、RestoreTableFromBackup)是控制平面调用,DynamoDB 会拒绝那些会与已在同一备份或表上运行的操作相冲突的调用。这是一个瞬时状态错误,而不是权限或数据问题。
为什么会发生
- 删除一个仍在创建中的备份——
CreateBackup尚未到达AVAILABLE。 - 在从某备份进行恢复时删除它——恢复操作会一直持有该备份,直到新表创建完成。
- 重叠的自动化——一个清理脚本和一个备份调度器互相竞争,或者一个重试循环对同一张表重复触发了
CreateBackup。 - 突发超过速率限制——
DeleteBackup每秒最多接受 10 次调用;在紧凑的循环中扫掉大量备份会同时触发冲突和限流。
如何修复
检查有什么正在进行中,然后等待:
aws dynamodb describe-backup --backup-arn arn:aws:dynamodb:...:table/orders/backup/01234... # BackupStatus: CREATING | AVAILABLE | DELETED一旦状态稳定就重试你的操作(对已完成的创建而言是
AVAILABLE;正在恢复的表会通过describe-table到达ACTIVE)。用退避重试而非直接硬失败——备份操作耗时从数秒到数分钟不等;在调用外套一个简单的等待并重试循环即可吸收这种串行化。
串行化你的自动化——每张表由一个所有者负责备份生命周期操作;把删除排在创建之后,而不是用一个可能重叠的 cron 同时运行两者。
控制批量删除的节奏——保持在每秒 10 次
DeleteBackup调用以下,并把这个异常当作放慢速度的信号来处理。
备份保护的是你最输不起的数据——在删除某张表的备份之前,先用 DynoTable 桌面应用浏览一下表里实际有什么,并用 DynamoDB 定价计算器估算恢复的读取流量。
相关错误
- BackupNotFoundException——ARN 根本解析不到任何备份。
- Table already exists——恢复到一个已被占用的名称。
- LimitExceededException——并发控制平面操作过多。
- 学习:Backups & point-in-time recovery
References
- DeleteBackup — Amazon DynamoDB API Reference
- RestoreTableFromBackup — Amazon DynamoDB API Reference
- DescribeBackup — Amazon DynamoDB API Reference
- Restoring a DynamoDB table from a backup — Amazon DynamoDB Developer Guide
最后核实于 2026-07-13,依据上方链接的 AWS 官方文档。