数据库高手请进,该操作未能执行,因为 OLE DB 提供程序 'SQLOLEDB' 无法启动分布式事务。

zhouhaoIT2005 2011-04-26 01:50:48
ALTER PROCEDURE GETPSS AS
BEGIN
BEGIN TRAN
SELECT * FROM OPENROWSET('SQLOLEDB','192.168.0.88';'SA';'','SELECT * FROM CCCCONFIG')
COMMIT
END

EXEC GETPSS

代码如上:

单独在查询分析器里执行
SELECT * FROM OPENROWSET('SQLOLEDB','192.168.0.88';'SA';'','SELECT * FROM CCCCONFIG')
是,没有错的

但是直接执行EXEC GETPSS 时
则报错如下:
服务器: 消息 7391,级别 16,状态 1,过程 GETPSS,行 4
该操作未能执行,因为 OLE DB 提供程序 'SQLOLEDB' 无法启动分布式事务。
[OLE/DB provider returned message: 新事务不能登记到指定的事务处理器中。 ]
OLE DB 错误跟踪[OLE/DB Provider 'SQLOLEDB' ITransactionJoin::JoinTransaction returned 0x8004d00a]。


网上的解决方案 如下链接
http://www.cnblogs.com/chnking/archive/2007/04/04/699891.html 所提到的解决方案 都实验过了,测试不通过
实在是没办法了,请大侠们看看有没有别的办法解决,是不是向这种跨服务器的操作 是不支持事务的?

...全文
129 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhouhaoIT2005 2011-04-29
  • 打赏
  • 举报
回复
pt1314917 2011-04-26
  • 打赏
  • 举报
回复
对不同服务器上的数据表进行操作,要使用分布式事务。需要配置MSDTC
--小F-- 2011-04-26
  • 打赏
  • 举报
回复
加上下面两句,否则会提示新事务不能登记到指定事务处理器
set xact_abort on
begin distributed tran
zhouhaoIT2005 2011-04-26
  • 打赏
  • 举报
回复
5楼
上面的代码只是我举的一个例子,实际的运作远比这个过程复杂,我写的过程是要进行数据转储的,就是将A服务器上的数据经过处理转到B服务器上

3楼
将事务去掉,是可以的,但是我将无法进行错误回滚等操作


这个问题,我也看了很多贴,有的说成功过,希望能有人解决这个疑问。。。。十分期待!
SQL77 2011-04-26
  • 打赏
  • 举报
回复
ALTER PROCEDURE GETPSS AS
BEGIN
BEGIN TRAN
SELECT * FROM OPENROWSET('SQLOLEDB','192.168.0.88';'SA';'','SELECT * FROM CCCCONFIG')
COMMIT
END


楼主这样的语句没必要加事务吧
AcHerat 2011-04-26
  • 打赏
  • 举报
回复
好像在哪看过说是不支持的,具体没有测过,楼主把事务去了不就知道了。
  • 打赏
  • 举报
回复


不懂 帮顶 . 帮顶是一种美德 ~.

快溜 2011-04-26
  • 打赏
  • 举报
回复
据我了解,用事务貌似没有成功的。期待有人解决问题。

22,209

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧