CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
山寨机中的战斗机! 程序优化工程师到底对IT界有没有贡献
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  MS-SQL Server >  应用实例

分布式事务问题

楼主lchen88(蓝天白云)2005-04-28 19:54:01 在 MS-SQL Server / 应用实例 提问

SET   QUOTED_IDENTIFIER   OFF    
  GO  
  SET   ANSI_NULLS   ON    
  GO  
   
   
   
   
   
  CREATE                                                             PROCEDURE   dbo.importData  
  @sname   varchar(30),  
  @username   varchar(30),  
  @password   varchar(30),  
  @tablename   varchar(200)  
  AS  
  DECLARE   @del_error   int,   @ins_error   int  
  declare   @ls_sql   varchar(1000)  
  declare   @Result_del   int,@Result_ins   int  
   
  set   @Result_del   =   0  
  set   @Result_ins   =   0  
  --declare   @ls_sql_remotedj   varchar(1000)  
  --declare   @ls_sql_middj   varchar(1000)  
  --declare   @ls_sql_exam  
  declare   @connString   varchar(200)  
   
   
   
   
  BEGIN   TRAN  
   
  delete   from   cx  
  SET   @del_error   =   @@error  
  if   @del_error   <>   0   SET   @Result_del   =   1  
   
  delete   from   exam  
  SET   @del_error   =   @@error  
  if   @del_error   <>   0   SET   @Result_del   =   1  
   
  delete   from   middj  
  SET   @del_error   =   @@error  
  if   @del_error   <>   0   SET   @Result_del   =   1  
   
   
  delete   from   dadjb  
  SET   @del_error   =   @@error  
  if   @del_error   <>   0   SET   @Result_del   =   1  
   
   
   
  set   @ls_sql   =   'insert   into   cx   SELECT   *   FROM   OPENROWSET('''+'SQLOLEDB'''+','''+@sname+''';'''+  
  @username+''';'''+@password+''','+'''SELECT   bh,xr,xm,JDCXLB,JDCXXL,JDCXDW   FROM   '+@tablename+'.dbo.r_recocx'')'  
  exec   (@ls_sql)  
  SET   @ins_error   =   @@error  
  if   @del_error   <>   0   SET   @Result_ins   =   1  
   
   
  set   @ls_sql   =   'insert   into   exam   SELECT   *   FROM   OPENROWSET('''+'SQLOLEDB'''+','''+@sname+''';'''+  
  @username+''';'''+@password+''','+'''SELECT   zd,bh,xm,yxq   FROM   '+@tablename+'.dbo.e_exam'')'  
  exec   (@ls_sql)  
  SET   @del_error   =   @@error  
  if   @del_error   <>   0   SET   @Result_ins   =   1  
   
   
  set   @ls_sql   =   'insert   into   middj   SELECT   *   FROM   OPENROWSET('''+'SQLOLEDB'''+','''+@sname+''';'''+  
  @username+''';'''+@password+''','+'''SELECT   bh,zzjg   FROM   '+@tablename+'.dbo.p_middj'')'  
  exec   (@ls_sql)  
  SET   @del_error   =   @@error  
  if   @del_error   <>   0   SET   @Result_ins   =   1  
   
   
   
  set   @ls_sql   =   'insert   into   dadjb   SELECT   *   FROM   OPENROWSET('''+'SQLOLEDB'''+','''+@sname+''';'''+  
  @username+''';'''+@password+''','+'''SELECT   rdn,bh,xm,xr,hm,rhxx,xxcs,cxfy,xx   FROM   '+@tablename+'.dbo.z_remotedj'')'  
  exec   (@ls_sql)  
  SET   @del_error   =   @@error  
  if   @del_error   <>   0   SET   @Result_ins   =   1  
   
   
  if   @Result_del   =   1   or   @Result_ins   =   1  
  begin  
  ROLLBACK   TRAN  
  end  
  else  
  begin  
  COMMIT   TRAN  
  end  
   
   
  GO  
  SET   QUOTED_IDENTIFIER   OFF    
  GO  
  SET   ANSI_NULLS   ON    
  GO  
   
  --如下是调用这个存储过程  
   
  DECLARE   @RC   int  
  DECLARE   @sname   varchar(30)  
  DECLARE   @username   varchar(30)  
  DECLARE   @password   varchar(30)  
  DECLARE   @tablename   varchar(30)  
  DECLARE   @connString   varchar(200)  
  DECLARE   @ls_sql   varchar(1000)  
   
  set   @sname='unitech02'  
  set   @username   =   'sa'  
  set   @password   =   ''  
  set   @tablename   =   'bllood_db'  
   
  EXEC   @RC   =   importData   @sname,   @username,   @password,@tablename  
  执行过程的时候,SQL   Server   提示如下信息  
   
  该操作未能执行,因为   OLE   DB   提供程序   'SQLOLEDB'   无法启动分布式事务。  
  [OLE/DB   provider   returned   message:   不能在指定的事务处理器中获得新事务。]  
   
  如何解决,分布式事务如何开启?? 问题点数:50、回复次数:2Top

1 楼fengfangfang()回复于 2005-04-29 09:43:58 得分 20

状态栏上的SQL   Server   管理器中打开有三项,其中一项就是分布式事务管理的,启动就行了。Top

2 楼netcoder(朱二)回复于 2005-04-29 16:29:51 得分 30

http://expert.csdn.net/Expert/topic/2835/2835706.xml?temp=.1959955  
  http://community.csdn.net/Expert/topic/2835/2835706.xml?temp=1.783389E-02  
   
   
  一.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  
   
  常见问题  
  INFO:   Configuring   Microsoft   Distributed   Transaction   Coordinator   (DTC)   to   Work   Through   a   Firewall  
  http://support.microsoft.com/default.aspx?scid=kb;en-us;250367Top

相关问题

  • 分布式事务问题
  • 分布式事务的问题
  • 分布式事务无法启动????
  • 请问:分布式事务问题
  • SQLOLEDB无法启动分布式事务?
  • 真的好难!异构数据库的分布式事务。
  • 高分求救:C#分布式事务处理的问题
  • 关于开发分布式事务的一些问题
  • 请问如果开展分布式事务?
  • 请教使用WebService如何实现分布式事务?

关键词

  • .net
  • 分布式
  • 组件
  • 管理
  • errorif
  • 事务
  • del
  • msdtc
  • sname
  • ls

得分解答快速导航

  • 帖主:lchen88
  • fengfangfang
  • netcoder

相关链接

  • SQL Server类图书

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo