今天在做项目的时候,用到了跨服务器导入数据 方法二

本文探讨了在SQL Server中使用openrowset和opendatasource进行分布式查询时遇到的问题,特别是当尝试执行分布式事务时出现的错误。文中列举了一系列可能的解决方案,并通过实际案例验证这些方案的有效性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

openrowset

select *  from openrowset('MSDASQL','DRIVER={SQL Server};SERVER=192.168.1.29;UID=sa;PWD=123-456', Northwind.dbo.Categories)

 当然可以在 192.168.1.29 后面加上端口号,方法为

'服务器地址,端口'

加外还有一个方法:

OPENDATASOURCE

SELECT *
FROM OPENDATASOURCE(
 
'SQLOLEDB',
 
'Data Source=192.168.1.29;User ID=sa;Password=123-456'
 ).Northwind.dbo.Categories


在调试的时候,请将上面的 192.168.1.29,换成你的服务器名,sa 换成你登陆服务器的用户名,123-456换成你登陆
时的密码,在sql2000里面,是自己带这个数据库的 Northwind.dbo.Categories

 

另外在储存过程中使用的时候,发发生错误码:
该操作未能执行,因为 OLE DB 提供程序 'MSDASQL' 无法启动分布式事务。

在网上找了相应办法,但是还是没有解决,如果哪位遇到了一样的问题,有好的解决方法,望留下宝贵的笔墨!

网上的方法:

 

一.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   AuthorityNetworkService"。   
  
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   
    
    
  但是,我的情况是两台win2003+sql2005的服务器,在事务中使用链接服务器,也是提示:“
'SQLOLEDB'   无法启动分布式事务”   
    
  按照上述解决方案做:   
    
  一.不使用事务用select分布式查询,没有问题   
        使用事务用select分布式查询,也没有问题   
        使用事务用insert往链接服务器中插入记录,就出现“
'SQLOLEDB'   无法启动分布式事务”错误。   
    
  二.两台机的MSDTC是否都打开了.   --错误依然   
  三.两台MSDTC都按照上述说明就行设置了。--错误依然   
  四.两台服务器都启动着RPC服务,135端口也都开着。--错误依然   
  五.把连接服务器改成MSDASQL方式的连接。--错误依然   
  七.两台服务器不在同一个域,在msdtc的安全设置中都设置了“不需要进行验证”。--错误依然   
    
  后面的几项,因为我是win2003+sql2005,系统够更新的。   
    
  最后,--错误还是依然。   


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lanlandechong

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值