关于分布式事务,大虾来!

asdfqwer1234asdf 2006-05-11 05:37:14
小弟准备作一个在2个服务器上的数据自动备份的存储过程(用JOB实现)。在不用MSDTS时,可以完成备份,可是使用了MSDTS之后,就开始报错,到底是怎么回事呀?(这两个服务器上的MSDTS已经启动。)
/******************没有使用MSDTS时,一切正常。SQL语句是:*********************/
SET @sqlStr = 'INSERT INTO UpLog_Temp
SELECT a.* FROM OPENROWSET(''SQLOLEDB'', ''192.168.50.101''; ''sa''; ''sa'',
''SELECT top 2 * FROM neospac_new.dbo.uplog
where YEAR(CreateTime)='+ CAST(YEAR(GETDATE()) AS varchar(4))+
' AND MONTH(CreateTime)='+CAST(MONTH(GETDATE()) AS varchar(4))+ '
AND DAY(CreateTime)=' +CAST(DAY(GETDATE()) AS varchar(4))+''') AS a'
EXECUTE(@sqlStr)
/******************使用MSDTS后,开始报错。SQL语句是:************************/
EXEC sp_addlinkedserver 'HYTEST', '','SQLOLEDB','neospac'
exec sp_addlinkedsrvlogin 'HYTEST','false',null,'sa','sa'
SET REMOTE_PROC_TRANSACTIONS ON
BEGIN DISTRIBUTED TRANSACTION
SET @sqlStr = 'INSERT INTO DownLog_Temp
SELECT top 2 * FROM HYTEST.neospac_new.dbo.downlog
where YEAR(CreateTime)='+ CAST(YEAR(GETDATE()) AS varchar(4))+
' AND MONTH(CreateTime)='+CAST(MONTH(GETDATE()) AS varchar(4))+ '
AND DAY(CreateTime)=' +CAST(DAY(GETDATE()) AS varchar(4))
EXECUTE(@sqlStr)
COMMIT TRANSACTION
...全文
514 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
yuanzhihua520 2006-08-14
  • 打赏
  • 举报
回复
解决方案
要解决此问题,请按照下列步骤操作: 1. 单击“开始”,指向“所有程序”,指向“管理工具”,然后单击“组件服务”。
2. 在组件服务向导中,展开“组件服务”,然后双击“计算机”。
3. 右键单击“我的电脑”,然后单击“属性”。
4. 单击“MSDTC”选项卡,然后单击“安全性配置”。
5. 在“安全配置”对话框中,单击以选中“网络 DTC 访问”复选框。
6. 在“网络 DTC 访问”下,单击“网络事务”。
7. 确保“DTC 登录帐户”设置为“NT Authority\NetworkService”。
8. 单击“确定”。
9. 在消息框中,单击“是”。
10. 在“DTC 控制台消息”对话框中,单击“确定”。
11. 在“系统属性”对话框中,单击“确定”。
12. 重新启动计算机,让这些更改生效。

注意:在某些情况下,您必须在启动 SQL Server 服务之前启动 DTC 服务,以便让链接服务器的分布式查询正常工作
yuanzhihua520 2006-08-14
  • 打赏
  • 举报
回复
up
asdfqwer1234asdf 2006-05-15
  • 打赏
  • 举报
回复
我试过,怎么还是不行,按照微软网址上说的,错误原因是网络配置的问题.按照说的配置做还是不行,镇真郁闷,我的系统是2000server和2003.
不过还是药谢谢你,我了解的更多了
txs_zj 2006-05-12
  • 打赏
  • 举报
回复
EXEC sp_addlinkedserver 'HYTEST', '','SQLOLEDB','neospac' 执行一次就可以了,不用每次都执行,你去了试试行不行
asdfqwer1234asdf 2006-05-12
  • 打赏
  • 举报
回复
服务器: 消息 15028,级别 16,状态 1,过程 sp_addlinkedserver,行 79
服务器 'HYTEST' 已存在。
服务器: 消息 7391,级别 16,状态 1,行 1
该操作未能执行,因为 OLE DB 提供程序 'SQLOLEDB' 无法启动分布式事务。
[OLE/DB provider returned message: 新事务不能登记到指定的事务处理器中。 ]
asdfqwer1234asdf 2006-05-12
  • 打赏
  • 举报
回复
谢谢,我现在就看看
txs_zj 2006-05-12
  • 打赏
  • 举报
回复
不知道你的系统是不是2003,如果是的话,可以参考一下这个
http://support.microsoft.com/default.aspx?scid=kb;zh-cn;329332
txs_zj 2006-05-12
  • 打赏
  • 举报
回复
你看看这个人写的这样行吗?跟你第一个错误是一样的
http://blog.csdn.net/gatr/archive/2005/07/08/417587.aspx
asdfqwer1234asdf 2006-05-12
  • 打赏
  • 举报
回复
我现在再用DTCPing试,从A到B出现:
Problem:fail to invoke remote RPC method
Error(status=1753): at dtcping.cpp (Line:265)

RPC pinging failure
Description:1753-终结点映射器中没有更多的终结点可用。
Invalid partner CID while constructing binding handle

从B到A就一切正常
asdfqwer1234asdf 2006-05-12
  • 打赏
  • 举报
回复
我试过了,还是不行,会出现7391号错误。具体是:
服务器: 消息 7391,级别 16,状态 1,行 1
该操作未能执行,因为 OLE DB 提供程序 'SQLOLEDB' 无法启动分布式事务。
[OLE/DB provider returned message: 新事务不能登记到指定的事务处理器中。 ]

我用DTCPing试过,报错,而且过一会再PING错误的提示都不一样,晕

22,294

社区成员

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

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