DOC HOME SITE MAP MAN PAGES GNU INFO SEARCH PRINT BOOK
 

(mysql.info) xa

Info Catalog (mysql.info) set-transaction (mysql.info) transactional-commands
 
 13.4.7 XA Transactions
 ----------------------
 

Menu

 
* xa-statements                XA Transaction SQL Syntax
* xa-states                    XA Transaction States
 
 MySQL 5.0.3 and up provides server-side support for XA transactions.
 Currently, this support is available for the `InnoDB' storage engine.
 The MySQL XA implementation is based on the X/Open CAE document
 `Distributed Transaction Processing: The XA Specification'. This
 document is published by The Open Group and available at
 `http://www.opengroup.org/public/pubs/catalog/c193.htm'.  Limitations
 of the current XA implementation are described in 
 xa-restrictions.
 
 On the client side, there are no special requirements. The XA interface
 to a MySQL server consists of SQL statements that begin with the `XA'
 keyword. MySQL client programs must be able to send SQL statements and
 to understand the semantics of the XA statement interface. They do not
 need be linked against a recent client library. Older client libraries
 also will work.
 
 Currently, among the MySQL Connectors, MySQL Connector/J 5.0.0 supports
 XA directly (by means of a class interface that handles the XA SQL
 statement interface for you).
 
 XA supports distributed transactions; that is, the ability to allow
 multiple separate transactional resources to participate in a global
 transaction. Transactional resources often are RDBMSs but may be other
 kinds of resources.
 
 A global transaction involves several actions that are transactional in
 themselves, but that all must either complete successfully as a group,
 or all be rolled back as a group. In essence, this extends ACID
 properties `up a level' so that multiple ACID transactions can be
 executed in concert as components of a global operation that also has
 ACID properties.  (However, for a distributed transaction, you must use
 the `SERIALIZABLE' isolation level to achieve ACID properties. It is
 enough to use `REPEATABLE READ' for a non-distributed transaction, but
 not for a distributed transaction.)
 
 Some examples of distributed transactions:
 
    * An application may act as an integration tool that combines a
      messaging service with an RDBMS. The application makes sure that
      transactions dealing with message sending, retrieval, and
      processing that also involve a transactional database all happen
      in a global transaction. You can think of this as `transactional
      email.'
 
    * An application performs actions that involve different database
      servers, such as a MySQL server and an Oracle server (or multiple
      MySQL servers), where actions that involve multiple servers must
      happen as part of a global transaction, rather than as separate
      transactions local to each server.
 
    * A bank keeps account information in an RDBMS and distributes and
      receives money via automated teller machines (ATMs). It is
      necessary to ensure that ATM actions are correctly reflected in
      the accounts, but this cannot be done with the RDBMS alone. A
      global transaction manager integrates the ATM and database
      resources to ensure overall consistency of financial transactions.
 
 Applications that use global transactions involve one or more Resource
 Managers and a Transaction Manager:
 
    * A Resource Manager (RM) provides access to transactional
      resources. A database server is one kind of resource manager. It
      must be possible to either commit or roll back transactions
      managed by the RM.
 
    * A Transaction Manager (TM) coordinates the transactions that are
      part of a global transaction. It communicates with the RMs that
      handle each of these transactions. The individual transactions
      within a global transaction are `branches' of the global
      transaction. Global transactions and their branches are identified
      by a naming scheme described later.
 
 The MySQL implementation of XA MySQL enables a MySQL server to act as a
 Resource Manager that handles XA transactions within a global
 transaction. A client program that connects to the MySQL server acts as
 the Transaction Manager.
 
 To carry out a global transaction, it is necessary to know which
 components are involved, and bring each component to a point when it
 can be committed or rolled back. Depending on what each component
 reports about its ability to succeed, they must all commit or roll back
 as an atomic group. That is, either all components must commit, or all
 components musts roll back. To manage a global transaction, it is
 necessary to take into account that any component or the connecting
 network might fail.
 
 The process for executing a global transaction uses two-phase commit
 (2PC). This takes place after the actions performed by the branches of
 the global transaction have been executed.
 
   1. In the first phase, all branches are prepared. That is, they are
      told by the TM to get ready to commit. Typically, this means each
      RM that manages a branch records the actions for the branch in
      stable storage. The branches indicate whether they are able to do
      this, and these results are used for the second phase.
 
   2. In the second phase, the TM tells the RMs whether to commit or
      roll back. If all branches indicated when they were prepared that
      they will be able to commit, all branches are told to commit. If
      any branch indicated when it was prepared that it will not be able
      to commit, all branches are told to roll back.
 
 In some cases, a global transaction might use one-phase commit (1PC).
 For example, when a Transaction Manager finds that a global transaction
 consists of only one transactional resource (that is, a single branch),
 that resource can be told to prepare and commit at the same time.
 
Info Catalog (mysql.info) set-transaction (mysql.info) transactional-commands
automatically generated byinfo2html