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

RDS SQL Server执行rds_restore_database报事务不支持错误如何解决

RDS SQL Server从S3还原BAK文件卡在CREATED状态0%进度问题

问题表现

  • 执行如下还原存储过程命令,客户端返回执行成功:
exec msdb.dbo.rds_restore_database @restore_db_name='my_db', @s3_arn_to_restore_from='arn:aws:s3:::backup.bak', @with_norecovery=0
  • 调用exec msdb.dbo.rds_task_status查询任务状态,任务长期停留在CREATED状态,完成百分比始终为0。
  • 查RDS控制台的ERROR.LOG,存在明确报错:

2022-06-23 15:30:35.80 spid68 不支持在事务内部执行RDS备份/还原存储过程,请在执行存储过程前结束事务。

  • 复现环境:SQL Workbench Build 128(内置Java 11.0.15)、mssql-jdbc-7.2.2.jre11驱动,执行过程中未手动编写开启事务的语句,仍触发该错误。

根本原因

报错和手动开启事务无关,是客户端连接的隐式事务配置导致的:
JDBC类客户端连接SQL Server时,只要连接的autoCommit(自动提交)属性为false,所有执行的SQL都会被自动包裹在隐式事务中,无需用户手动写BEGIN TRANSACTION。RDS SQL Server对原生备份还原存储过程做了限制,不允许在事务上下文中执行,检测到事务存在就会中断任务,对外表现就是任务卡在CREATED状态不推进。
你当前使用的工具组合默认会把新建连接的autoCommit设为false,且7.2.2版本的mssql-jdbc存在事务状态上报不准确的已知问题,即使手动修改自动提交配置,也可能因为之前执行的语句残留未提交的事务上下文,触发校验拦截。

解决步骤

按顺序操作即可解决:

  • 新建全新的数据库连接,不要复用之前执行过其他查询、DML语句的连接,避免残留未提交事务。
  • 打开SQL编辑器后,先执行以下两句命令,强制关闭隐式事务、提交所有残留事务:
SET IMPLICIT_TRANSACTIONS OFF;
COMMIT TRANSACTION;
  • 找到SQL Workbench中该连接的驱动属性配置,手动添加/修改autoCommit参数,将值设为true,保存配置后重建连接。
  • 如果以上操作后仍报错,直接将mssql-jdbc驱动升级到8.4及以上的稳定版本,替换旧的7.2.2版本驱动即可,旧版驱动的事务状态上报bug在高版本已经修复。

操作完成后重新执行还原命令,再查询任务状态,如果状态变为IN_PROGRESS、进度百分比开始上涨,说明还原任务已经正常启动。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 00:51:21