zoukankan      html  css  js  c++  java
  • 关于Wind2003下MSDTC对DTS运行的影响

    首先,介绍一下偶的DTS包大致结构:大包由5个任务包和一些SQL任务组成,在包的设计过程中,应用到了Windows 的MSDTC服务,控制包中的分布式事物。SQLServer环境:SQLServer2000企业版+SP3

    运行期一:Window2000Server(服务器)-Window2000Profassional(客户端)。比较顺利,处理好DTS包的链接事务处理后就可以正常运行,关于DTS包事务的设计,偶在这就不详细介绍了

    运行期二:Window2003Server(服务器)-Window2000Profassional(客户端),Window2003Server刚刚安装的新系统。问题极多,主要是Windows2003下MSDTC服务的网络互访问题。即便MSDTC服务已经启动,但还是提示“不支持联接分布式事务或在试图联接时失败,新事务不能登记到指定的事务处理器中”等等错误。

    运行期二分析及处理:Win2003Server新安装时,由于Win2003Server安全机制问题,很多服务是禁用的,集体的可以参考SCW(系统安全配置)的策略设置,系统的MSDTC网络访问被禁用,因此,必须设置一下MSDTC网络访问。步骤如下:

    1. 单击“开始”,指向“所有程序”,指向“管理工具”,然后单击“组件服务”。
    2. 在组件服务向导中,展开“组件服务”,然后双击“计算机”。
    3. 右键单击“我的电脑”,然后单击“属性”。
    4. 单击“MSDTC”选项卡,然后单击“安全性配置”。
    5. 在“安全配置”对话框中,单击以选中“网络 DTC 访问”复选框。
    6. 在“网络 DTC 访问”下,单击“网络事务”。
    7. 确保“DTC 登录帐户”设置为“NT Authority\NetworkService”。
    8. 单击“确定”。
    9. 在消息框中,单击“是”。
    10. 在“DTC 控制台消息”对话框中,单击“确定”。
    11. 在“系统属性”对话框中,单击“确定”。
    12. 重新启动计算机,让这些更改生效。

        上面这段步骤是很多人推荐的,也是微软对于“分布式事务不能登记到事务处理器中”错误的解释及处理。很好,按上面步骤处理完之后,DTS包运行正常。

    运行期三:上面基础上运行一段时间,Window2003Server系统自动更新(这就是原因所在,偶找了一晚上才发现的),DTS包依然出现错误,提示“不支持联接分布式事务或在试图联接时失败。新事务不能登记到指定的事务处理器中”

           这就奇怪了,在网上查了很多文章,发觉推荐的都是上面的步骤,当初是解决了,但为何现在又突然间不行了呢?DTS包并为改动,偶换了一台服务器,也是Window2003Server,发觉链接服务器正常,DTS包运行正常。这基本上可以确定是系统环境的关系,但对于原机器,为何前后区别这么大呢?问了一下机器管理员,原来当天刚刚更新了一下系统补丁,当然我怀疑过机器中病毒,但发觉并没有病毒,所以,查找目标锁定在系统补丁更新这个改变上。

          后来,在一篇文章中发现,有人建议的Win2003下MSDTC网络访问设置有点区别,就是在上述步骤的前后各加一步,即
    <1>注册表,HKEY_LOCAL_MACHINE\Software\Microsoft\MSDTC 增加DWORD的键TurnoffRpcSecurity=1
        ……
    <14>删除第一步骤的TurnoffRpcSecurity
    但是,文章的作者后面加了这么一句,也就是操作注册表的这两步不用执行也可以。

         虽然上述文章作者说了不操作注册表也可以,但是,据我现在的系统运行状况,前后的变化,以及机器环境的差异性,偶决定对比一下两台服务器的注册表的区别HKEY_LOCAL_MACHINE\Software\Microsoft\MSDTC结果如下:

        正常的服务器:
             AllowonlySecureRpcCalls=0
             TurnoffRpcSecurity=1

        异常的服务器:
            AllowonlySecureRpcCalls=1
            TurnoffRpcSecurity=0

         将异常服务器按照正常服务器的设置改动了,然后重启MSDTC服务,发觉正常了,但改回原状,重器服务,更出现一样的错误提示,嗯,基本上可以确定就是这样问题了。分析一下,很明显,这跟系统的RPC调用的安全机制有关系,而且,我尝试了之更改TurnoffRpcSecurity或是AllowonlySecureRpcCalls的值,也就是其他三个组合,都是不行。

         到了这步,才舒了口气,系统更新了个RPC漏洞补丁,导致MSDCTC服务的远程RPC调用策略设置改变了,所以才导致这些莫名其妙的错误。至此,问题解决!

        同时,MSDTC服务的网络访问策略对Win2003与Win2000之间链接服务器互访,我相信也会有相应的影响

    原文出处:http://blog.csdn.net/lovcal/archive/2005/12/13/550965.aspx

  • 相关阅读:
    how to pass a Javabean to server In Model2 architecture.
    What is the Web Appliation Archive, abbreviation is "WAR"
    Understaning Javascript OO
    Genetic Fraud
    poj 3211 Washing Clothes
    poj 2385 Apple Catching
    Magic Star
    关于memset的用法几点
    c++ 函数
    zoj 2972 Hurdles of 110m
  • 原文地址:https://www.cnblogs.com/liping13599168/p/654835.html
Copyright © 2011-2022 走看看