关于SQL分布式数据远程传输问题

问题:

我在做SQL的远程数据传输时,用的是链接服务器+存储过程+分布式事务进行处理的,  
  但存在不稳定的问题.      
   
  两台机器使用Win2000Server平台+Sql7.0,用Modem拨号做远程连接.  
  具体做法如下,两台SQL的MSDTC服务必须启动,设两台机器分别为数据中心A端、客户端B  
  在A端设置连接服务器B,B端设置链接服务器A,为了保证数据传输的准确、安全、一至性,  
  使用了存储过程和分布式事务(DTS   TRAN),具体的事务处理过程如下  
  SET   XACT_ABORT   ON  
  BEGIN   DISTRIBUTED   TRAN  
  ----处理语句   从客户端取数据写入服务器端  
  Insert   Into   [tables]  
  SELECT   *   From   [Clinet].[dbo].[db].[tables]    
  ----处理语句.....  
  COMMIT   TRAN  
  SET   XACT_ABORT   OFF  
   
  在具体实施中发现,有时事务无法启动,提示说OLE提供者不支持分布式事务,但我查了相关  
  文档,文档中明确指出OLE   FOR   SQL   的提供者支持分布式事务。  
  最后发现,两台机器重启后,第一次事务正常,有一台重启后,再进行连接就会有导常,查了  
  相关的资料,好像有文章说到有“孤儿连接”的问题,说是计算机文件处理及网络发现客户端  
  已经断开,会做一些处理,保证下一次的连接,而SQL的连接由于连接速度慢,无法识别客户端  
  的断开,所以下次连接后事务无法正常启动.  

 

 

回答:

1、本地和远程都需要启动  
  DISTRIBUTED   TRANSACTION   COORDINATOR服务。 

 

对于存储过程,SQL     Server     使用最初创建存储过程时的     SET     ANSI_NULLS     设置值。无论随后何时执行存储过程,SET     ANSI_NULLS     的设置都还原为其最初使用的值并生效。当在存储过程内唤醒调用     SET     ANSI_NULLS     时,其设置不更改。      
     
  在执行分布式查询时应将     SET     ANSI_NULLS     设置为     ON。      
     
  在执行分布式查询时应将     ANSI_WARNINGS     设置为     ON。      
     
  企业管理中的ANSI_NULLS和ANSI_WARNINGS选项不对,但没有方法改动。在查询分析器可以设置ANSI_NULLS和ANSI_WARNINGS选项,而且默认值是对的。所以能在查询分析器创建此类存储过程,而不能在企业管理器创建此类存储过程。  
   
  就是:  
  create   proc   名  
  as  
  SET   ANSI_NULL_DFLT_ON   on   --注意  
  SET   ANSI_WARNINGS   on    
   
  select   *   from   open...

 

2、写个存储过程,使用微软的   openrowset()   or   openquery()   函数,别搞什么其他的冬冬,老老实实用基本的东西做就行了。这也是微软内部推荐的连接方式

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值