如何通过S3中的事务日志更新从BAK文件创建的AWS RDS SQL Server数据库?
可行性及操作方法
可行,AWS RDS SQL Server支持基于完整备份的事务日志恢复,前提是初始BAK文件为完整数据库备份,且待应用的事务日志属于该完整备份之后的连续日志链,无中断。
操作步骤:
前置检查
- 确认初始BAK是完整备份,事务日志备份是该备份之后生成的连续序列,日志链未断裂。
- 解压S3中的事务日志压缩包,得到
.trn格式的日志备份文件。 - 确保RDS实例关联的IAM角色拥有S3读取权限(若直接从S3导入),或准备好同一VPC内的EC2实例用于中转文件。
上传日志文件
- 方式一:将
.trn文件上传至S3桶,配置RDS的IAM角色拥有该桶的s3:GetObject权限。 - 方式二:将文件上传至同VPC的EC2实例,通过SSMS连接RDS时,使用EC2共享目录作为文件路径。
- 方式一:将
应用事务日志
- 用SSMS或其他SQL客户端连接RDS实例。
- 确认数据库处于完整恢复模式(事务日志恢复必需):
若不是完整模式,执行修改:SELECT name, recovery_model_desc FROM sys.databases WHERE name = '你的数据库名';ALTER DATABASE 你的数据库名 SET RECOVERY FULL; - 按日志生成顺序依次应用,注意参数区分:
-- 应用非最后一个日志,保持数据库处于恢复中状态 RESTORE LOG 你的数据库名 FROM DISK = 's3://你的桶名/日志文件名1.trn' -- 或EC2本地路径 WITH NORECOVERY; -- 应用最后一个日志,恢复完成后数据库可用 RESTORE LOG 你的数据库名 FROM DISK = 's3://你的桶名/日志文件名N.trn' WITH RECOVERY;
验证结果
- 连接到目标数据库,查询关键表数据,确认事务日志中的更新已生效。
内容的提问来源于stack exchange,提问作者Tom Ron
相关产品推荐
相关产品推荐

