CONTENTS Title Page Copyright Page Preface 1 Introduction to Distributed Transactions 1.1 Deciding When to Use Distributed Transactions 1.2 Understanding the Two-Phase Commit Protocol and Distributed Transactions 1.2.1 Terminating Distributed Transactions 1.2.2 Completing Unresolved Transactions 2 How Distributed Transactions Work 2.1 Starting Distributed Transactions 2.2 Completing Successful Distributed Transactions 2.2.1 Executing the Prepare Phase 2.2.2 Executing the Commit Phase 2.3 Understanding the Database Recovery Process 2.4 Completing Unresolved Transactions 3 Designing Databases and Applications for Distributed Transactions 3.1 Designing Databases for Distributed Transactions 3.1.1 Partitioning Databases by Business Function 3.1.2 Partitioning Databases Geographically 3.1.3 Replicating Data 3.1.4 Combining Database Design Strategies 3.2 Using Distributed Transactions in a VAXcluster Environment 3.3 Granting Privileges for Distributed Transactions 3.3.1 Avoiding Deadlock with Distributed Transactions 3.4 Controlling When Applications Attach to Databases 3.5 Controlling When SQL Applications Detach from Databases 4 Using SQL with Distributed Transactions 4.1 Using the Two-Phase Commit Protocol with SQL 4.2 Disabling the Two-Phase Commit Protocol 4.3 Using the Two-Phase Commit Protocol Implicitly 4.3.1 Handling Errors in Implicit Distributed Transactions 4.4 Using the Two-Phase Commit Protocol Explicitly 4.4.1 Handling Errors in Explicit Distributed Transactions 4.4.2 Using Context Structures with SQL Statements 4.4.3 Using Cursors with Distributed Transactions 4.4.4 Using SQL Module Language with Distributed Transactions 4.4.5 Using Precompiled SQL with Distributed Transactions 4.4.5.1 Declaring the Context Structure in Ada 4.5 Compiling, Linking, and Running the Sample Distributed Transaction Application 5 Using RDBPRE with Distributed Transactions 5.1 Using the Two-Phase Commit Protocol with RDBPRE 5.2 Using the Two-Phase Commit Protocol Implicitly 5.2.1 Using Existing Applications with Distributed Transactions 5.2.2 Writing New Applications That Implicitly Use the Two-Phase Commit Protocol 5.2.3 Handling Errors in Implicit Distributed Transactions 5.3 Using the Two-Phase Commit Protocol Explicitly 5.3.1 Handling Errors in Explicit Distributed Transactions 5.3.2 Writing Applications That Explicitly Use the Two-Phase Commit Protocol 6 Completing Unresolved Transactions 6.1 Using RMU Commands to Complete Unresolved Transactions 6.2 Completing Unresolved Transactions 6.3 Recovering Corrupted Databases and Completing Unresolved Transactions A Troubleshooting Distributed Transactions EXAMPLES 4-1 Trapping Errors in Implicit Distributed Transactions 4-2 Writing Host Language Programs That Use Distributed Transactions to Modify Databases 4-3 Writing SQL Modules That Use Distributed Transactions to Modify Databases 4-4 Declaring and Calling the DECdtm System Services in an SQL Precompiled FORTRAN Program 4-5 Using Context Structures in an SQL Precompiled FORTRAN Program 5-1 Using Existing RDBPRE Applications with Distributed Transactions 5-2 Writing New Applications That Use Distributed Transactions 5-3 Writing RDBPRE Applications That Explicitly Call DECdtm Services FIGURES 1-1 Executing the Two-Phase Commit Protocol 1-2 Participants in a Distributed Transaction 2-1 Starting a Distributed Transaction 2-2 Passing the Distributed Transaction Identifier (TID) 2-3 Initiating the Prepare Phase 2-4 Resource Managers Execute the Prepare Phase 2-5 Voting by Participants in a Distributed Transaction 2-6 Writing the Commit Record 2-7 Initiating the Commit Phase 2-8 Resource Managers Commit the Transaction 2-9 Acknowledging That the Transaction Has Been Committed 2-10 Unresolved Distributed Transaction 3-1 Communication Among Nodes in a Cluster When One Node Manages the Database Lock Tree 3-2 Communication Among Nodes in a Cluster When Each Node Manages One Database Lock Tree 3-3 Using DECdtm Services to Add Databases to Existing Transactions TABLES 1-1 Committing or Rolling Back Distributed Transactions A-1 Troubleshooting Distributed Transactions