【问题标题】:SQL Server, Remote Stored Procedure, and DTC TransactionsSQL Server、远程存储过程和 DTC 事务
【发布时间】:2010-09-12 01:36:00
【问题描述】:

我们的组织在大型机 Adabas 数据库中拥有大量基本数据。我们可以通过 ODBC 访问这些数据,并且从 C# 中使用 ODBC/Natural“存储过程”成功地查询/更新了它。

我们现在想做的是从 SQL Server 2005 存储过程中查询大型机表,将结果转储到表变量中,对其进行处理,然后将结果与本机 SQL 数据连接起来设置。

当我们只是选择它时,从 SQL 执行 Natural proc 可以正常工作;但是,当我们将结果插入到表变量中时,SQL 似乎正在启动一个分布式事务,而这反过来又似乎对我们的连接造成了严重破坏。

鉴于我们不执行更新,是否可以关闭此 DTC 升级行为?

关于正确设置 DTC 以与 DataDirect(以前的 Neon Systems)Shadow ODBC 驱动程序通信的任何提示?

【问题讨论】:

    标签: sql sql-server msdtc


    【解决方案1】:

    查看SET REMOTE_PROC_TRANSACTIONS OFF 应该禁用它。 或者sp_serveroption一般配置链接服务器,而不是批量配置。

    因为您是在 MS SQL 端编写的,所以您开始了一个事务。 默认情况下,它会升级是否需要。 即使表变量不参与事务。

    我之前遇到过类似的问题,根据 MS SQL 是否写入、存储过程和其他内容,MS SQL 端的行为会有所不同。我发现最可靠的方法是对我的 Sybase 链接服务器使用动态 SQL 调用...

    【讨论】:

    • 在 SQL Server 2008 上对我不起作用。(出现相同的“远程服务器不支持分布式事务”错误。)但是,更改“服务器选项”中的“远程 proc 事务提升”选项" 链接服务器的属性页有效。
    【解决方案2】:

    以下代码为链接服务器设置“启用分布式事务促进”:

    USE [master]
    GO
    EXEC master.dbo.sp_serveroption @server=N'REMOTE_SERVER', @optname=N'remote proc transaction promotion', @optvalue=N'false'
    GO
    

    这将允许您将链接服务器存储过程调用的结果插入到表变量中。

    【讨论】:

      【解决方案3】:

      我不确定 DTC,但 DTSX(集成服务)可能对移动数据有用。但是,如果您可以简单地查询数据,则可能需要考虑添加链接服务器以进行直接访问。然后,您可以编写一个简单的查询,根据从链接服务器的表中选择来填充您的表。

      【讨论】:

        【解决方案4】:

        确实如此。正如您可能猜到的那样,我们要调用的 Natural 过程会执行我们希望尽可能保持在该级别的查找和计算。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-11-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多