5-8万年薪顶级嵌入式,京沪深就业地 浅谈并行编程中的任务分解模式
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  MS-SQL Server >  疑难问题

SQLOLEDB无法启动分布式事务,请问在触发器中如何向远程数据库写值?在线等待50分!

楼主wweight(东风破)2004-06-08 12:29:04 在 MS-SQL Server / 疑难问题 提问

我在本地数据库建一触发器,如何向远程数据库写值?      
  我用如下代码不行:insert     opendatasource('SQLOLEDB','Data     Source=211.162.2.100;     User     ID=test;     Password=test').UserInfo.dbo.Job             select     *     from     inserted     提示新事务不能登记到指定事务处理器,OLEDB提供程序SQLOLEDB无法启动分布式事务.用sp_addlinkedserver在查询分析器中都是可行的,在局域网内两台SQL服务器之间也是可以的,但就是不能向外网写值。请高手帮忙,谢谢!!! 问题点数:50、回复次数:16Top

1 楼zjcxc(邹建)回复于 2004-06-08 12:56:17 得分 15

http://expert.csdn.net/Expert/topic/2835/2835706.xml?temp=.1959955  
  回复人:   j9988(j9988)    
   
  一.A.不用事务,关用SELECT   语句.是否可以分布式查询?  
   
        B.LINKSERVER   在做分布式更新事务时不能对本机操作.(就是不能环回分布式事务)  
   
        C.DBCC   TRACEON   (3604,   7300)--用跟踪看更详细错误信息.  
       
        D.下载MS提供的DTCPing.exe   分装在两台机上,按README说明来运行它.看出错信息.  
  http://download.microsoft.com/download/complus/msdtc/1.7/nt45/en-us/DTCPing.exe  
   
  二.两台机的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.microsoft.com/downloads/details.aspx?displaylang=zh-cn&FamilyID=9032f608-160a-4537-a2b6-4cb265b80766  
   
  '应该安装的补丁sql   2000   sp3  
  http://download.microsoft.com/download/d/d/e/dde427eb-0296-4eac-a47c-d11a66b03816/chs_sql2ksp3.exe  
  Top

2 楼wweight(东风破)回复于 2004-06-08 14:56:49 得分 0

你好,zjcxc久闻大名!我机器的SP4和SQL   SP3早就打过了,MDAC我刚才也更新为2.8了,现在我的网络布局为如下:机器A192.168.0.10,机器B192.168.0.20,机器C211.162.2.100;我在A机器上建一触发器用insert   opendatasource方法可以写值到B机器,但在A上向外网的C机器上触发时就出现“新事务不能登记到指定事务处理器,OLEDB提供程序SQLOLEDB无法启动分布式事务”,我搞了一天了都没有搞定这个问题,很头痛。还有我在存储过程中向远程写值时出现“错误7405:异类查询要求为连接设置ANSI_NULLS和ANSI_WARNINGS选项,这将确保一致的查询语义,请启用这些选项”,我在数据库把这两项都选上了,还是出现这个提示,为什么?请教!!!Top

3 楼wweight(东风破)回复于 2004-06-08 15:42:53 得分 0

我用Dtcping.exe   ping本机时提示如下:RPC   test   is   successful   Partner's   CID:A5A4810B-B024-4CAB-B8AC-9054AB8E2405   JYWEBSERVER   Initiating   DTC   Binding   Test....Test   Guid:D5449A8C-9BEF-4F11-A48A-9764084DF462   Trying   Bind   to   JYWEBSERVER    
  应该是成功提示,但ping远程就提示找不到服务器.我的组件服务里没有“网络   DTC   访问、网络管理、网络事务、DTC登录账户”设置项,为什么?不同域的可信任联接具体指什么?我telnet   到本机和远程135好像都没有什么反应,头痛!这个问题急死我了...  
  Top

4 楼wweight(东风破)回复于 2004-06-08 17:07:11 得分 0

我在不停的刷新页面,希望能找到希望!Top

5 楼CSDNM(决定不当CSDN经理了)回复于 2004-06-11 10:15:41 得分 5

建议找j9988  
   
  先自己检查是否防火墙的问题,你现在远程RPC还不能连通  
  Top

6 楼wweight(东风破)回复于 2004-06-11 13:02:04 得分 0

防火墙是没有的。存储过程中能不能实现呢?请教!Top

7 楼j9988(j9988)回复于 2004-06-12 18:30:06 得分 5

分布式事务是双向相互的:  
  1.运行DTCPing是双机运行:在A机按START,C机按Ping。然后倒过来试。  
  你现在主要是C机,C机的MSDTC正常服务??  
   
  2.telnet   C机 135不行,跟对方机MSDTC没开或没设好有很大关系。  
   
  仔细检查C机。Top

8 楼j9988(j9988)回复于 2004-06-12 18:36:44 得分 5

1.“我的组件服务里没有“网络   DTC   访问、网络管理、网络事务、DTC登录账户”设置项”  
  --这是windows2003设置。win2000你网上查查。你A机跟B机事务正常。说明设置正确。  
   重点检查C机的设置。  
   
  首先得保证telnet   C机 135 能通。不通就没话说了,肯定是C机设置不行。Top

9 楼ljh13448874(亚马逊)回复于 2004-06-13 12:00:33 得分 5

试试这个办法:  
   
  用记事本方式打开   C:\WINNT\system32\drivers\etc文件夹里面的hosts  
  在文件末尾加入新的行:  
  211.162.2.100       服务器名称  
  Top

10 楼wweight(东风破)回复于 2004-06-14 10:49:44 得分 0

我如果把C机的放在A,B的局域网内,没有问题。还是与外网有关,晕!Top

11 楼ljqstone(ljqstone)回复于 2004-07-31 18:08:41 得分 5

最近我也碰到类似的问题:  
  我在查询分析器中执行sp_addlinkedserver,再在查询分析器中调用远程存储过程,执行成功!  
  但是在触发器[注:该触发器是表的Insert触发器]中执行远程存储过程时,  
  就出现如下错误信息:  
  [OLE/DB   provider   returned   message:新事务不能登记到指定的事务处理器中。]  
  [该操作未能执行,因为OLE   DB提供程序‘SOL   OLEDB’无法启动分布式事务。]  
  是不是在触发器中就不能调用远程存储过程????  
  是不是涉及到事务,就不能调用远程过程???Top

12 楼ljqstone(ljqstone)回复于 2004-07-31 18:36:13 得分 5

我如果把C机的放在A,B的局域网内,没有问题。还是与外网有关,晕!  
   
  如果真的是这样,那怎么办呢???Top

13 楼ljqstone(ljqstone)回复于 2004-07-31 18:36:36 得分 5

wweight(东风破)   (   )   “我如果把C机的放在A,B的局域网内,没有问题。还是与外网有关,晕!”  
   
  如果真的是这样,那怎么办呢???  
  Top

14 楼wweight(东风破)回复于 2004-08-03 09:49:05 得分 0

TO     ljqstone(ljqstone):  
    这个问题我还没有搞定,近期一直忙于别的事情,也就没有研究了。我暂时用作业实现的Top

15 楼wweight(东风破)回复于 2004-09-02 10:34:28 得分 0

这个问题到现在还没有搞定,我只好先结了!希望大家以后继续探讨:)Top

16 楼andzen(阿风)回复于 2004-09-04 22:54:39 得分 0

远程服务器和链接服务器的写(INSERT   UPDATEA)操作好像在触发器里面都用不了,存储过程里面和查询分析器里面都可以,所以要用另外的方法,但是如果需要实时同步,好像没有好的别的办法,不需要实时的数据可以用其他方法如:JOB定时传输数据+   跨服务器的分布式视图解,方法挺简单的;Top

相关问题

  • 分布式数据库
  • 分布式数据库详解(高分)
  • 连接分布式数据库问题
  • 求助。。。。分布式数据库
  • 求助。。。。分布式数据库
  • 数据库分布式的问题?
  • 当数据库批量增加时,触发器不执行?
  • 限定数据库记录个数的触发器
  • 触发器可以跨数据库起作用吗?
  • Oracle数据库触发器的问题,请进

关键词

  • win2000
  • 分布式
  • 远程
  • 分析器
  • 存储过程
  • 数据库
  • 组件
  • 服务器
  • 查询
  • 防火墙

得分解答快速导航

  • 帖主:wweight
  • zjcxc
  • CSDNM
  • j9988
  • j9988
  • ljh13448874
  • ljqstone
  • ljqstone
  • ljqstone

相关链接

  • SQL Server类图书

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
x 提问