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

  • 相关阅读:
    iOS开发_当一个控件被添加到父控件中会调用
    iOS_判断应用在前台还是后台
    iOS开发_ SDWebImage先下载图片保存起来,需要时再调用
    WARNING ITMS90901: "Missing fullscreen support for the latest iPad mini display.
    iOS开发_显示带HTML标签的富文本
    iOS开发_WKWebView隐藏滚动条
    iOS_获取应用当前定位授权状态
    iOS开发_判断字符串是否为空的处理
    UIAlertController和UIActivityViewController在ipad中的兼容性问题
    npm run serve报错提示js堆内存不足
  • 原文地址:https://www.cnblogs.com/liping13599168/p/654835.html
Copyright © 2011-2022 走看看