Testing a distributed transaction

Last update: 4 August 2017

How to test a distributed transaction within Fabasoft Folio

Summary

This article is a description how to test distributed transactions in a Fabasoft Folio environment with more than one COO-Service.

Please note: A hotfix for Fabasoft Folio (and subordinated Fabasoft eGov-Suite and eCRM-Suite) is available to improve MS-DTC usage of Fabasoft Folio. Fabasoft urgently recommends to install this hotfix. See details for this hotfix .

Information

Microsoft Distributed Transaction Coordinator (MSDTC) is used to control transactions spanning to more than one COO-Service in an SQL Server environment (Microsoft Windows). MSDTC is a Microsoft Windows service and needs to be available on all servers involved to the distributed transaction (SQL Server, Fabasoft Backendservers, Webservers,...)

Fabasoft Distributed Transaction Manager (DTM) is used to control transactions spanning to more than one COO-Service in an Oracle or PostgreSQL environment (Microsoft Windows and Linux). Fabasoft DTM is implemented in the COO-Service binary. No 3rd party or operating system services are used.

Distributed transactions ensure the consistency of transactions across the borders of a database/tablespace.

Solution

To test distributed transactions it is necessary to insert/update multiple objects in one (distributed) transaction. A distributed transaction is only initialized, if database changes span to at least two COO-Services (databases/tablespaces). As opposed to this, multiple changes in one database/tablespace do not perform a distributed transaction, but a normal transaction.

This example explains how to create two objects in different databases/tablespaces, so a distributed transaction is used.

Summary: This guide shows interesting perfmon counters, and how to perform a distributed transaction by creating two objects using different COO-Services.

1. Run Perfmon (MSDTC only)

  • On the backend server, open perfmon.exe (Windows Performance Monitor)
  • Add following counters:
    • Distributed Transaction Coordinator / Active Transactions : Shows the currently open distributed transactions
    • Distributed Transaction Coordinator / Commited Transactions : Shows the number of commited transactions since MSDTC startup
    • Distributed Transaction Coordinator / Aborted Transactions : Shows the number of aborted transactions since MSDTC startup

2. Find object classes with different object placements

  • Create an Administration Tool
  • Search for Object class , restrict the search to Placement / COO-Stores for new objects is any value . This will find all object classes that have a dedicated object placement to COO-Stores. Keep in mind, that this placement is also valid for derived object classes.
  • Please note: Different COO-Stores may use the same COO-Service, therefore check which COO-Store is assigned to which COO-Service. This can be done by opening the properties of the COO-Store objects.
  • Select two object classes that definitely use different COO-Services.

3. Create a distributed transaction

  • Create another Administration Tool . Open the new Administration Tool object by the context menu Properties (do not double-click the object).
  • In the Properties window in the object list, create a new object with the + symbol. Use one of the object classes figured out above. If applicable, finish the constructor form by pressing Next
  • Again, with the + symbol create a second object using the second object class.
  • After this, you have two new objects in the object list of the Administration Tool . Press the Next or Apply button. This will perform a distributed transaction including the COO-Services of the two object classes.
  • The Perfmon Counter Commited Transactions should have increased by 1.
  • If no error occurs, the distributed transaction was correctly commited.

4. Repeat the test for COO-Services on different backendservers (e.g. cluster environment)

To ensure that MSDTC is working also in a distributed environment (cluster), retry the above test with COO-Services on different backendservers.

Applies to

  • Fabasoft Folio on Microsoft Windows and Microsoft SQL-Server (all versions)
  • Fabasoft eGov-Suite on Microsoft Windows and Microsoft SQL-Server(all versions)
  • Fabasoft eCRM-Suite on Microsoft Windows and Microsoft SQL-Server (all versions)