在我们的生产环境中,我们有一个存储过程(在sql 2005服务器中),它将数据从远程存储过程(存储在远程sql 2008中)导入到本地表中。
代码是这样的:
insert <<local table name>> (fund, strat, clr, [id], position, unsettledPosition)
exec <<remote stored proc name>> 'aapl us' , '2013-05-13'
我收到此错误:
无法在分布式事务中使用SAVE TRANSACTION。
和
当前事务无法提交,也无法支持写入日志文件的操作。回滚交易。
我已经配置了本地和远程DTC,允许通过网络进行DTC访问,允许远程客户端选项,还允许入站和远程DTC。出站通信,最后启用XA事务,但没有任何成功。
直到昨天,远程服务器是一个旧的SQL 2005,我的代码运行良好,然后我想我错过了新服务器2008中的一些配置设置。
请有人帮帮我吗?
答案 0 :(得分:5)
在MSDTC开启的情况下,可以轻松复制此错误:
BEGIN DISTRIBUTED TRANSACTION;
...
SAVE TRANSACTION abc;
根据this link,在SQL 7中删除了在分布式事务中使用SAVEPOINT的能力, 即SQL 2008(R2)中没有重大变化。
您以前可能不是在分布式事务下运行,但现在可能是以前,远程proc可能位于同一服务器上的不同数据库上,因此不需要DTC事务。
所以不幸的是,您似乎需要删除边界ACID事务,或者更改远程服务器上的SPROC,以便它不使用SAVEPOINT。
<强>更新强> 根据下面的评论,似乎已经在OP的较新的SQL 2008服务器上设置了REMOTE_PROC_TRANSACTIONS选项,该服务器自动开始跨远程存储的proc调用的分布式事务。