Oracle® Database Administrator's Guide 11g Release 1 (11.1) Part Number B28310-01 |
|
|
View PDF |
You can force the failure of a distributed transaction for the following reasons:
To observe RECO automatically resolving the local portion of the transaction
To practice manually resolving in-doubt distributed transactions and observing the results
This section describes the features available and the steps necessary to perform such operations.
You can include comments in the COMMENT
parameter of the COMMIT
statement. To intentionally induce a failure during the two-phase commit phases of a distributed transaction, include the following comment in the COMMENT
parameter:
COMMIT COMMENT 'ORA-2PC-CRASH-TEST-n';
where n is one of the following integers:
n | Effect |
---|---|
1 | Crash commit point after collect |
2 | Crash non-commit-point site after collect |
3 | Crash before prepare (non-commit-point site) |
4 | Crash after prepare (non-commit-point site) |
5 | Crash commit point site before commit |
6 | Crash commit point site after commit |
7 | Crash non-commit-point site before commit |
8 | Crash non-commit-point site after commit |
9 | Crash commit point site before forget |
10 | Crash non-commit-point site before forget |
For example, the following statement returns the following messages if the local commit point strength is greater than the remote commit point strength and both nodes are updated:
COMMIT COMMENT 'ORA-2PC-CRASH-TEST-7'; ORA-02054: transaction 1.93.29 in-doubt ORA-02059: ORA_CRASH_TERST_7 in commit comment
At this point, the in-doubt distributed transaction appears in the DBA_2PC_PENDING
view. If enabled, RECO automatically resolves the transaction.
The RECO background process of an Oracle Database instance automatically resolves failures involving distributed transactions. At exponentially growing time intervals, the RECO background process of a node attempts to recover the local portion of an in-doubt distributed transaction.
RECO can use an existing connection or establish a new connection to other nodes involved in the failed transaction. When a connection is established, RECO automatically resolves all in-doubt transactions. Rows corresponding to any resolved in-doubt transactions are automatically removed from the pending transaction table of each database.
You can enable and disable RECO using the ALTER SYSTEM
statement with the ENABLE
/DISABLE DISTRIBUTED RECOVERY
options. For example, you can temporarily disable RECO to force the failure of a two-phase commit and manually resolve the in-doubt transaction.
The following statement disables RECO:
ALTER SYSTEM DISABLE DISTRIBUTED RECOVERY;
Alternatively, the following statement enables RECO so that in-doubt transactions are automatically resolved:
ALTER SYSTEM ENABLE DISTRIBUTED RECOVERY;
Note:
Single-process instances (for example, a PC running MS-DOS) have no separate background processes, and therefore no RECO process. Therefore, when a single-process instance that participates in a distributed system is started, you must manually enable distributed recovery using the preceding statement.