分布式事务 dtc 的使用

来源:互联网 发布:java并发编程 书 编辑:程序博客网 时间:2024/05/01 04:15
 利用分布式的函数
OpenDataSource
OpenQuery
OpenRowSet
处理分布式数据库,写程序比较简单,但配置DTC比较复杂,查了MSDN为证。

本人为了简单也写了相应的程序,发觉10个公司只有一个公司能得到数据。搜了MSDN,发觉原来有那么多人在配置DTC上碰到问题。
研究了文章如下

一.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

针对以上十点

本人认为:
1、环境是重要的。马上按部就班的
因为是win2000和sql server
做了  八.如果是WIN2000,升级到SP4  
        九.升级MDAC到2.6以上,最好是2.8.

        十.要安装SQL的最新补丁: sp3a  
两点。

发觉居然10公司,能处理的上升到9个。只有一个没通了。

2、工具是很重要的。
(1)怀疑是135端口,就用一个检查端口的工具去看,发觉端口没有问题。
(2)下了http://download.microsoft.com/download/complus/msdtc/1.7/nt45/en-us/DTCPing.exe
工具,测试,看了readme,说由三步,第一步验证名称,第二步验证rpc,第三步dtc,好,我居然发现名字验证都没通过,
总于发现tcp/ip的netbios被关掉了,咳 dtc 居然一定要名称。不用IP. I 服了 he了。

3、出现远地的计算机只能用IP地址访问不能进行名字访问,我碰到如下。
     (1)、路由的设置的问题,俩个路由是否确定无误(VPN能连通并不代表名字访问能成功,版本一致,允许芳临访问,无其他异常)。
     (2)、是否出现错误日志DCOM,出现此错误也将不能进行名字访问。
     (3)、相应tcp/ip的netbios是否打开。 
     (4)、很怪的一条:如果是建立VPN的,这本地的掩码必须是255.255.255.0,郁闷啊,如果是224,240的就是提示说不能启动分布式事务
    (5)、两个库如果是本地的用这几个函数是无效的。

原创粉丝点击