标签: distributed-transactions

为什么事务以分布式(DTCXact)方式运行?

我实际上是在尝试分析和解决一些经常发生的死锁,这些死锁都至少包括一个名为“DTCXact”的事务,这让我问。

我对生产服务器重复运行以下查询:

SELECT  DTAT.transaction_id ,
    DTAT.[name] ,
    DTAT.transaction_begin_time ,
    CASE DTAT.transaction_type
      WHEN 1 THEN 'Read/write'
      WHEN 2 THEN 'Read-only'
      WHEN 3 THEN 'System'
      WHEN 4 THEN 'Distributed'
    END AS transaction_type ,
    CASE DTAT.transaction_state
      WHEN 0 THEN 'Not fully initialized'
      WHEN 1 THEN 'Initialized, not started'
      WHEN 2 THEN 'Active'
      WHEN 3 THEN 'Ended' -- only applies to read-only transactions
      WHEN 4 THEN 'Commit initiated'-- distributed transactions only
      WHEN 5 THEN 'Prepared, awaiting resolution'
      WHEN 6 THEN 'Committed'
      WHEN 7 THEN …
Run Code Online (Sandbox Code Playgroud)

sql-server sql-server-2008-r2 transaction msdtc distributed-transactions

4
推荐指数
1
解决办法
1892
查看次数

如何记录 MS SQL 服务器上的分布式事务中的查询?

我正在考虑将数据库从自托管集群迁移到 Microsoft Azure SQL。我知道涉及到一些分布式事务,Azure SQL 不支持这些事务。

有没有一种方法可以记录所有分布式事务及其查询,以便我可以检查客户端应用程序并消除对分布式事务的要求?

sql-server azure-sql-database distributed-transactions

4
推荐指数
1
解决办法
1187
查看次数

消息 7391,SQL Server 上的分布式事务 (DTC)

这可能与 DBA 相关或与开发人员相关,老实说我不知道​​。

我有两个数据库服务器:

A: SQL Server 2005 (Trigger that uses DBMail on Server B)
B: SQL Server 2008 R2 (DBMail configured)
Run Code Online (Sandbox Code Playgroud)

我在服务器 A 中有一个表,其中电子邮件通知排队,我创建了一个“插入后”触发器来sp_send_dbmail使用服务器 B执行,就像这样......

A: SQL Server 2005 (Trigger that uses DBMail on Server B)
B: SQL Server 2008 R2 (DBMail configured)
Run Code Online (Sandbox Code Playgroud)

这就是我需要帮助的奇怪之处,请注意,这似乎是一个记录非常差(或严重缺乏)的功能。

现在我可以使用一些示例数据执行最后一条语句,一切正常。但是当我尝试像这样插入表格时......

USE SampleDB
ALTER TRIGGER [dbo].[mail_inserted] 
   ON [dbo].[tblEmailQueue]
   AFTER INSERT
AS 
BEGIN
    declare @MailTo nvarchar(max), @MailSubject nvarchar(max), @MailBody nvarchar(max)
    -- Initialize vars
    select @MailTo=MailTo from inserted
    select @MailSubject=MailSubject from inserted
    select @MailBody=MailBody from …
Run Code Online (Sandbox Code Playgroud)

trigger sql-server linked-server msdtc distributed-transactions

3
推荐指数
1
解决办法
7501
查看次数

查询在哪个服务器上执行?

给定两个 Microsoft SQL 服务器:

假设ServerA有一个名为“View1”的视图: SELECT * FROM ServerB.database.dbo.Table1 WHERE Column1 IN (1,2,3)

和一个存储过程“sp_Foo”: SELECT * FROM View1 WHERE Column1=1

当我执行时EXEC sp_Foo,哪个查询在哪个服务器上执行?都是在ServerB上执行的吗?都在 ServerA 上?还是在ServerB上执行的视图查询和在ServerA上执行的SP查询?

execution-plan sql-server-2012 distributed-transactions

2
推荐指数
1
解决办法
146
查看次数