Labels

admin (1) aix (1) alert (1) always-on (2) Architecture (1) aws (3) Azure (1) backup (3) BI-DWH (10) Binary (3) Boolean (1) C# (1) cache (1) casting (3) cdc (1) certificate (1) checks (1) cloud (3) cluster (1) cmd (7) collation (1) columns (1) compilation (1) configurations (7) Connection-String (2) connections (6) constraint (6) copypaste (2) cpu (2) csv (3) CTE (1) data-types (1) datetime (23) db (547) DB2 (1) deadlock (2) Denali (7) device (6) dotNet (5) dynamicSQL (11) email (5) encoding (1) encryption (4) errors (124) excel (1) ExecutionPlan (10) extended events (1) files (7) FIPS (1) foreign key (1) fragmentation (1) functions (1) GCP (2) gMSA (2) google (2) HADR (1) hashing (3) in-memory (1) index (3) indexedViews (2) insert (3) install (10) IO (1) isql (6) javascript (1) jobs (11) join (2) LDAP (2) LinkedServers (8) Linux (15) log (6) login (1) maintenance (3) mariadb (1) memory (4) merge (3) monitoring (4) MSA (2) mssql (444) mssql2005 (5) mssql2008R2 (20) mssql2012 (2) mysql (36) MySQL Shell (5) network (1) NoSQL (1) null (2) numeric (9) object-oriented (1) offline (1) openssl (1) Operating System (4) oracle (7) ORDBMS (1) ordering (2) Outer Apply (1) Outlook (1) page (1) parameters (2) partition (1) password (1) Performance (103) permissions (10) pivot (3) PLE (1) port (4) PostgreSQL (14) profiler (1) RDS (3) read (1) Replication (12) restore (4) root (1) RPO (1) RTO (1) SAP ASE (48) SAP RS (20) SCC (4) scema (1) script (8) security (10) segment (1) server (1) service broker (2) services (4) settings (75) SQL (74) SSAS (1) SSIS (19) SSL (8) SSMS (4) SSRS (6) storage (1) String (35) sybase (57) telnet (2) tempdb (1) Theory (2) tips (120) tools (3) training (1) transaction (6) trigger (2) Tuple (2) TVP (1) unix (8) users (3) vb.net (4) versioning (1) windows (14) xml (10) XSD (1) zip (1)

DISTRIBUTED TRANSACTION - errors and fixes

Open DISTRIBUTED TRANSACTION between servers

OLE DB provider "SQLNCLI11" for linked server "" returned message "Cannot start more transactions on this session."

The Microsoft Distributed Transaction Coordinator (MS DTC) has cancelled the distributed transaction.

The Microsoft Distributed Transaction Coordinator (MS DTC) has cancelled the distributed transaction

Try to do:
DISTRIBUTED TRANSACTION in try-catch block.

Error message:
The Microsoft Distributed Transaction Coordinator (MS DTC) has cancelled the distributed transaction.

Solution:
remove the try-catch block and see the exact error. then fix it - it probably some 'standard' SQL error.

but - if you want/need to see the errors:
run dynamic sql from the linked server to the current one:

OLE DB provider "SQLNCLI11" for linked server "" returned message "Cannot start more transactions on this session."

Try to do:
DISTRIBUTED TRANSACTION

Error message:
OLE DB provider "SQLNCLI11" for linked server "" returned message "Cannot start more transactions on this session."

Solution:
In order to enable the distributed transactions set:
SET XACT_ABORT ON;

Run dynamic sql from the linked server to the current one

SET XACT_ABORT ON; -- In order to enable the distributed transactions

BEGIN DISTRIBUTED TRANSACTION

DECLARE @SQL nvarchar(max)

BEGIN TRY
       set @SQL = 'REVERT; EXECUTE AS LOGIN = ''SA''
              EXECUTE(''
       UPDATE / INSERT / .....
       FROM [LinkedServerDataBaseName].[LinkedServerSchemaName].[LinkedServerTableName] b
       JOIN [MyServerNameAsLinkedServerName].[DataBaseName].[SchemaName].[TableName] ns  ON b.BRN_ID = ns.BRN_ID
       WHERE .......
              '') AT [LinkedServerName]';
       exec sp_executesql @SQL

       COMMIT TRANSACTION
END TRY

BEGIN CATCH

       -- ROLLBACK TRANSACTION
       -- do something....
END CATCH

SET XACT_ABORT OFF;


LinkedServerDataBaseName - database name in the linked server
MyServerNameAsLinkedServerName - my server has to be declared as linked server in the other server, this is it's linked server name there.
LinkedServerName - the linked server name in my server

TRANSACTION between servers - DISTRIBUTED TRANSACTION

SET XACT_ABORT ON; -- In order to enable the distributed transactions
BEGIN DISTRIBUTED TRANSACTION

-- do something

ROLLBACK/COMMIT TRANSACTION
SET XACT_ABORT OFF;