Component Integration Services makes every effort to manage user transactions for pre-12.x servers reliably. However, the different access methods incorporated into the server allow varying degrees of support for this capability. The general logic described below is employed by server classes direct_connect (access_server), sql_server (when the server involved is release 10.0 or later), and sds if the Specialty Data Store supports transaction management.
The method for managing transactions involving remote servers uses a two-phase commit protocol. Adaptive Server 11.5 implements a strategy that ensures transaction integrity for most scenarios. However, there is still a chance that a distributed unit of work will be left in an undetermined state. Even though two-phase commit protocol is used, no recovery process is included.
The general logic for managing a user transaction is as follows:
Component Integration Services prefaces work to a remote server with a begin transaction notification. When the transaction is ready to be committed, Component Integration Services sends a prepare transaction notification to each remote server that has been part of the transaction. The purpose of prepare transaction is to “ping” the remote server to determine that the connection is still viable. If a prepare transaction request fails, all remote servers are told to roll back the current transaction. If all prepare transaction requests are successful, the server sends a commit transaction request to each remote server involved with the transaction.
Any command preceded by begin transaction can begin a transaction. Other commands are sent to a remote server to be executed as a single, remote unit of work.