DBMS_TRANSACTIONパッケージは、ストアド・プロシージャからSQLトランザクション文へのアクセスを提供します。
関連項目: 『Oracle Database SQL言語リファレンス』 |
この章では、次の項目について説明します。
セキュリティ・モデル
表168-1 DBMS_TRANSACTIONパッケージのサブプログラム
サブプログラム | 説明 |
---|---|
|
次のSQL文と同じです。
|
|
次のSQL文と同じです。
|
|
次のSQL文と同じです。
|
|
次のSQL文と同じです。
|
|
次のSQL文と同じです。
|
|
次のSQL文と同じです。
|
|
現行のトランザクションのローカルな(インスタンスに対する)一意の識別子を戻します。 |
|
リカバリが完了する前に、リモート・データベースが破損したか、再作成された場合に、不完全なトランザクションをローカル・サイトから削除できます。 |
|
特定の混合出力トランザクションの情報を削除します。 |
|
次のSQL文と同じです。
|
|
次のSQL文と同じです。
|
|
次のSQL文と同じです。
|
|
次のSQL文と同じです。
|
|
次のSQL文と同じです。
|
|
次のSQL文と同じです。
|
|
トランザクションのDML操作を順序付ける、ローカルな(ローカル・トランザクションに対して)一意の正の整数を戻します。 |
|
次のSQL文と同じです。
|
このファンクションは、現行のトランザクションのローカルな(インスタンスに対する)一意の識別子を戻します。現行のトランザクションがない場合は、NULLを戻します。
コミット処理中に障害が発生すると、自動リカバリ機能によって、そのトランザクションに関連しているすべてのサイトでの結果が一貫して解決されます。ただし、リカバリの完了前にリモート・データベースが破損または再作成されると、DBA_2PC_PENDING
内のリカバリを制御するために使用するエントリとそれに関連する表が削除されずに、リカバリ処理が定期的に再試行されます。プロシージャPURGE_LOST_DB_ENTRY
では、このようなトランザクションをローカル・サイトから削除できます。
使用上の注意
警告: PURGE_LOST_DB_ENTRYは、他のデータベースが失われたり、再作成された場合にのみ使用してください。他の目的で使用すると、他のデータベースをリカバリ不能にしたり一貫性のない状態にする可能性があります。 |
自動リカバリの実行前に、トランザクションは、DBA_2PC_PENDING
をCollecting、CommittedまたはPreparedの状態で表示できます。DBAがCOMMIT_FORCEまたはROLLBACK_FORCEを使用して、インダウト・トランザクションに特定の結果を強制した場合は、Forced commitまたはForced rollbackの状態も表示できます。自動リカバリは通常、このような状態のエントリを削除します。唯一の例外は、トランザクション内の他のサイトとの間で整合性がとられていない状態の強制トランザクションがリカバリ処理で見つかった場合で、この場合、エントリは表内に残り、MIXED
列の値が'yes'になります。
ただし、状態によっては、自動リカバリの実行が不可能な場合があります。たとえば、リモート・データベースが完全に破損した場合です。たとえ再作成しても、新規のデータベースIDを取得するため、リカバリ処理では元のデータベースと同じとは認識できません(起こり得るエラーは、ORA-02062
です)。このような場合、DBAはプロシージャPURGE_LOST_DB_ENTRY
を使用して、Prepared以外の状態にあるエントリをクリーンアップできます。これらのエントリはデータベース・リソースを保持していないため、DBAは特に急いでこれらのエントリを解決する必要はありません。
次の表は、トランザクションについての様々な状態の内容およびDBAに必要とされるアクションを示します。
表168-6 PURGE_LOST_DB_ENTRYプロシージャの状態
列の状態 | グローバル・トランザクションの状態 | ローカル・トランザクションの状態 | 通常のDBAアクション | 代替のDBAアクション |
---|---|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
注意1: 重要な再構成が発生して自動リカバリではトランザクションを解決できない場合のみ使用します。例としては、リモート・データベース全体が破損し、ソフトウェアでの再構成によって2フェーズ・コミット機能を失う結果になった場合やTPモニターのような外部トランザクション・コーディネータからの情報を失った場合などがあります。 |
注意2: 不整合を取り除くために調査したり手動で作業を行い、プロシージャPURGE_MIXED を使用します。 |
インダウト・トランザクションにコミットまたはロールバックを強制実行すると(自動リカバリで結果を解決するのではなく)、トランザクションでは、コミットするサイトとロールバックするサイトが混在する結果が得られる可能性があります。このような矛盾はOracleで自動的に解決できませんが、Oracleは、MIXED
列を値'yes'に設定して、DBA_2PC_PENDING
にあるエントリにフラグ付けを行います。
Oracleでは、混合出力トランザクションの情報が自動的に削除されることはありません。混合トランザクションの結果として発生したすべての不整合が解決されたことを、アプリケーションまたはDBAで確認した後、このプロシージャを使用して、指定した混合出力トランザクションの情報を削除できます。
このプロシージャは、次のSQL文と同じです。
ROLLBACK TO SAVEPOINT <savepoint_name>
このプロシージャは、組み込むとより完全となり、PL/SQLの一部としてすでに実装されている機能です。
このプロシージャは、次のSQL文と同じです。
SAVEPOINT <savepoint_name>
このプロシージャは、組み込むとより完全となり、PL/SQLの一部としてすでに実装されている機能です。