标题:一个关于公布式事务的问题
只看楼主
hzhfss124
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2008-8-17
 问题点数:0 回复次数:5 
一个关于公布式事务的问题
症状:
执行代码insert into testtable(id) select '11'
然后触发器调用存储过程.往远程服务器加数据就出错.只要是触发器调用就会出错

错误信息:
服务器: 消息 7391,级别 16,状态 1,过程 testpro,行 7
该操作未能执行,因为 OLE DB 提供程序 'SQLOLEDB' 无法启动分布式事务。
[OLE/DB provider returned message: 新事务不能登记到指定的事务处理器中。 ]

数据库为:testtable
相关代码是:
CREATE TABLE [dbo].[testtable] (
    [id] [int] NULL
) ON [PRIMARY]
GO

CREATE TABLE [dbo].[testtable2] (
    [id] [char] (10) COLLATE Chinese_PRC_CI_AS NULL
) ON [PRIMARY]
GO

CREATE PROCEDURE testpro
@id Nvarchar(50)
AS
if not exists(Select * From msdb.dbo.Sysservers Where Isremote=1 and DataSource='192.168.0.106')
    exec sp_addlinkedserver '192.168.0.106','sql server'
exec sp_addlinkedsrvlogin '192.168.0.106',false,null,'sa'
insert into [192.168.0.106].testtable.dbo.testtable2 select * From testtable where id=@id
GO

CREATE TRIGGER testtri ON [dbo].[testtable]
FOR INSERT
AS
declare @i nvarchar(10)
select @i=id From inserted
exec testpro @i
GO


大家帮忙呀...弄好几天了
搜索更多相关主题的帖子: 式事务 服务器 公布 触发器 testpro 
2008-08-17 08:16
bb3852
Rank: 1
等 级:新手上路
帖 子:82
专家分:0
注 册:2008-4-21
得分:0 
数据类型都没有对应上
[id] [int]

[id] [char] (10)

http://hi.baidu.com/bb3852
数据库开发有兴趣的朋友们,里面有很多原创代码
qq:184882759
2008-08-18 09:05
hzhfss124
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2008-8-17
得分:0 
插入的是int的值.所以和这个是没有关系的...
2008-08-18 21:58
hzhfss124
Rank: 1
等 级:新手上路
帖 子:4
专家分:0
注 册:2008-8-17
得分:0 
再顶.在线等
2008-08-19 19:24
happynight
Rank: 8Rank: 8
等 级:贵宾
威 望:15
帖 子:807
专家分:760
注 册:2008-4-26
得分:0 
转个别人的帖子给你 希望有帮助:
----------------------------------------------------------------
http://expert.   
  回复人:   j9988(j9988)     
   
  一.A.不用事务,关用SELECT   语句.是否可以分布式查询?   
   
        B.LINKSERVER   在做分布式更新事务时不能对本机操作.(就是不能环回分布式事务)   
   
        C.DBCC   TRACEON   (3604,   7300)--用跟踪看更详细错误信息.   
        
        D.下载MS提供的DTCPing.exe   分装在两台机上,按README说明来运行它.看出错信息.   
  http://download.   
   
  二.两台机的MSDTC是否都打开了.   
   
  三.MSDTC设置是否正确.   
  1.打开命令提示,运行"net   stop   msdtc",然后运行"net   start   msdtc"。   
  2.转至"组件服务管理工具"。   
  3.浏览至"启动管理工具"。   
  4.选择"组件服务"。   
    a.展开"组件服务"树,然后展开"我的电脑"。   
    b.右键单击"我的电脑",然后选择"属性"。   
    C.在   MSDTC   选项卡中,确保选中了下列选项:   网络   DTC   访问   
  网络管理   
  网络事务   
          XA   事务   
    e.另外,"DTC   登录帐户"一定要设置为"NT   Authority\NetworkService"。   
  5.单击"确定"。这样将会提示您"MS   DTC   将会停止并重新启动。   
      所有的依赖服务将被停止。请按'是'继续"。单击"是"继续。   
  6.单击"确定"关闭"我的电脑"属性窗口。   
   
  四.   
  MSDTC依赖于RPC,RPC使用的端口是135,测试135端口是否打开.是否有防火墙?如果有先关了防火墙.   
  telnet   IP   135   
  如果是关闭的打开它.   
   
  五.   
  有的机由于各种原因),SQLOLEDB不能使用分布式事务,更改为"MSDASQL"   的ODBC方式联接.   
  使用RRAS而不是RAS.(控制面版--管理工具--远程服务管理器)   
  Check   whether   you   are   using   Remote   Access   Server   (RAS)   to   access   remote   servers.   If   so,   make   sure   that   you   have   implemented   Routing   RAS   (RRAS).   Linked   server   does   not   work   on   RAS   because   RAS   allows   only   one   way   communication.   
   
   
  七.检查你的两台服务器是否在同一个域中.   
  如果不在同一个域中,是否建立可信任联接.   
   
  八.如果是WIN2000,升级到SP4   
   
  九.升级MDAC到2.6以上,最好是2.8.   
   
  十.要安装SQL的最新补丁:   sp3a   
  '全部补丁的位置   
  http://www.   
   
  '应该安装的补丁sql   2000   sp3   
  http://download.
2008-08-20 08:34
happynight
Rank: 8Rank: 8
等 级:贵宾
威 望:15
帖 子:807
专家分:760
注 册:2008-4-26
得分:0 
另外你操作系统是什么
有人提出"win2003可以实现组件服务,但是win2000不行" 没测试过 你自己参考下吧
2008-08-20 08:35



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-228650-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.182800 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved