summaryrefslogtreecommitdiff
path: root/docs/programmer_reference/xa_faq.html
blob: 29026a0aa40874300a8e188cf1deed1662370082 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <title>XA: Frequently Asked Questions</title>
    <link rel="stylesheet" href="gettingStarted.css" type="text/css" />
    <meta name="generator" content="DocBook XSL Stylesheets V1.73.2" />
    <link rel="start" href="index.html" title="Berkeley DB Programmer's Reference Guide" />
    <link rel="up" href="xa.html" title="Chapter 13.  Distributed Transactions" />
    <link rel="prev" href="xa_xa_restrict.html" title="Restrictions on XA Transactions" />
    <link rel="next" href="apprec.html" title="Chapter 14.  Application Specific Logging and Recovery" />
  </head>
  <body>
    <div xmlns="" class="navheader">
      <div class="libver">
        <p>Library Version 12.1.6.1</p>
      </div>
      <table width="100%" summary="Navigation header">
        <tr>
          <th colspan="3" align="center">XA: Frequently Asked Questions</th>
        </tr>
        <tr>
          <td width="20%" align="left"><a accesskey="p" href="xa_xa_restrict.html">Prev</a> </td>
          <th width="60%" align="center">Chapter 13.  Distributed Transactions </th>
          <td width="20%" align="right"> <a accesskey="n" href="apprec.html">Next</a></td>
        </tr>
      </table>
      <hr />
    </div>
    <div class="sect1" lang="en" xml:lang="en">
      <div class="titlepage">
        <div>
          <div>
            <h2 class="title" style="clear: both"><a id="xa_faq"></a>XA: Frequently Asked Questions</h2>
          </div>
        </div>
      </div>
      <div class="orderedlist">
        <ol type="1">
          <li>
            <span class="bold">
              <strong>Is it possible to mix XA and non-XA
                transactions?</strong>
            </span>
            <p>
                Yes. It is also possible for XA and non-XA
                transactions to coexist in the same Berkeley DB
                environment. To do this, specify the same environment
                to the non-XA <a href="../api_reference/C/envopen.html" class="olink">DB_ENV-&gt;open()</a> calls as was specified in the
                Tuxedo configuration file.
            </p>
          </li>
          <li>
            <span class="bold">
              <strong>Does converting an application to
                run within XA change any of the already existing C/C++
                API calls it does?</strong>
            </span>
            <p>
                When converting an application to run under XA, the
                application's Berkeley DB calls are unchanged, with
                three exceptions:
            </p>
            <div class="orderedlist">
              <ol type="a">
                <li>
                    The application must specify the
                    <a href="../api_reference/C/dbcreate.html#dbcreate_DB_XA_CREATE" class="olink">DB_XA_CREATE</a> flag to the <a href="../api_reference/C/dbcreate.html" class="olink">db_create()</a>
                    function.
                </li>
                <li>
                    Unless the application is performing an
                    operation for a non-XA transaction, the
                    application should never explicitly call
                    <a href="../api_reference/C/txncommit.html" class="olink">DB_TXN-&gt;commit()</a>, <a href="../api_reference/C/txnabort.html" class="olink">DB_TXN-&gt;abort()</a>, and <a href="../api_reference/C/txnbegin.html" class="olink">DB_ENV-&gt;txn_begin()</a>, and those
                    calls should be replaced by calls into the Tuxedo
                    transaction manager.
                </li>
                <li>
                    Unless the application is performing an
                    operation for a non-XA transaction, the
                    application should specify a transaction argument
                    of NULL to Berkeley DB methods taking transaction
                    arguments (for example, <a href="../api_reference/C/dbput.html" class="olink">DB-&gt;put()</a> or
                    <a href="../api_reference/C/dbcursor.html" class="olink">DB-&gt;cursor()</a>).
                </li>
              </ol>
            </div>
            <p>
                Otherwise, the application should be
                unchanged.
            </p>
          </li>
          <li>
            <span class="bold">
              <strong>How does Berkeley DB recovery
                interact with recovery by the Tuxedo transaction
                manager?</strong>
            </span>
            <p>
                Recovery is completed in two steps. First, each
                resource manager should recover its environment(s).
                This can be done via a program that calls <a href="../api_reference/C/envopen.html" class="olink">DB_ENV-&gt;open()</a> or
                by calling the <a href="../api_reference/C/db_recover.html" class="olink">db_recover</a> utility. If using the
                <a href="../api_reference/C/db_recover.html" class="olink">db_recover</a> utility, then the 
                teoption should be specified so that
                the regions that are recovered persist after the
                utility exits. Any transactions that were prepared,
                but neither completed nor aborted, are restored to
                their prepared state so that they may be aborted or
                committed via the Tuxedo recovery mechanisms. After
                each resource manager has recovered, then Tuxedo
                recovery may begin. Tuxedo will interact with each
                resource manager via the __db_xa_recover function
                which returns the list of prepared, but not yet
                completed transactions. It should issue a commit or
                abort for each one, and only after having completed
                each transaction will normal processing resume.
            </p>
            <p>
                Finally, standard log file archival and catastrophic
                recovery procedures should occur independently of XA
                operation.
            </p>
          </li>
          <li>
            <span class="bold">
              <strong>Does Berkeley DB provide
                multi-threaded support for XA transactions?</strong>
            </span>
            <p> 
                Yes. For information on how to build multi-threaded
                servers for XA transactions, see <a class="ulink" href="http://download.oracle.com/docs/cd/E13161_01/tuxedo/docs10gr3/pgc/pgthr.html" target="_top">http://download.oracle.com/docs/cd/E13161_01/tuxedo/docs10gr3/pgc/pgthr.html</a>. 
                All databases used by servers should be opened
                with handles created with the <a href="../api_reference/C/dbcreate.html#dbcreate_DB_XA_CREATE" class="olink">DB_XA_CREATE</a> flag in
                the <a href="../api_reference/C/dbcreate.html" class="olink">db_create()</a> method and must be opened in the
                tpsvrinit routine. Note that the environment parameter
                of the <a href="../api_reference/C/dbcreate.html" class="olink">db_create()</a> method must be assigned NULL. For
                more information on the tpsvrinit routine, see <a class="ulink" href="http://download.oracle.com/docs/cd/E13161_01/tuxedo/docs10gr3/pgc/pgthr.html" target="_top">http://download.oracle.com/docs/cd/E13161_01/tuxedo/docs10gr3/pgc/pgthr.html</a>.
            </p>
          </li>
        </ol>
      </div>
    </div>
    <div class="navfooter">
      <hr />
      <table width="100%" summary="Navigation footer">
        <tr>
          <td width="40%" align="left"><a accesskey="p" href="xa_xa_restrict.html">Prev</a> </td>
          <td width="20%" align="center">
            <a accesskey="u" href="xa.html">Up</a>
          </td>
          <td width="40%" align="right"> <a accesskey="n" href="apprec.html">Next</a></td>
        </tr>
        <tr>
          <td width="40%" align="left" valign="top">Restrictions on XA Transactions </td>
          <td width="20%" align="center">
            <a accesskey="h" href="index.html">Home</a>
          </td>
          <td width="40%" align="right" valign="top"> Chapter 14.  Application Specific Logging and
        Recovery </td>
        </tr>
      </table>
    </div>
  </body>
</html>