我实际上是在尝试分析和解决一些经常发生的死锁,这些死锁都至少包括一个名为“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
我正在考虑将数据库从自托管集群迁移到 Microsoft Azure SQL。我知道涉及到一些分布式事务,Azure SQL 不支持这些事务。
有没有一种方法可以记录所有分布式事务及其查询,以便我可以检查客户端应用程序并消除对分布式事务的要求?
这可能与 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
给定两个 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查询?