172 DBMS_TRANSACTION

DBMS_TRANSACTIONパッケージは、ストアド・プロシージャからSQLトランザクション文へのアクセスを提供します。

参照:

Oracle Database SQL言語リファレンス

この章のトピックは、次のとおりです:

172.1 DBMS_TRANSACTIONのセキュリティ・モデル

このパッケージは、パッケージ所有者SYSではなく、コール・ユーザーの権限で実行されます。

172.2 DBMS_TRANSACTIONサブプログラムの要約

この表は、DBMS_TRANSACTIONサブプログラムを示し、簡単に説明しています。

表172-1 DBMS_TRANSACTIONパッケージのサブプログラム

サブプログラム 説明

ADVISE_COMMITプロシージャ

次のSQL文と同じです。

ALTER SESSION ADVISE COMMIT

ADVISE_NOTHINGプロシージャ

次のSQL文と同じです。

ALTER SESSION ADVISE NOTHING

ADVISE_ROLLBACKプロシージャ

次のSQL文と同じです。

ALTER SESSION ADVISE ROLLBACK

COMMITプロシージャ

次のSQL文と同じです。

COMMIT

COMMIT_COMMENTプロシージャ

次のSQL文と同じです。

COMMIT COMMENT <text>

<a href="DBMS_TRANSACTION.html#GUID-37D50D22-C01D-42DB-8A7F-7DF0C677B092" title='This procedure is equivalent to the SQL statement: COMMIT FORCE <text>, COMMIT_FORCEプロシージャ

次のSQL文と同じです。

COMMIT FORCE <text>, <number>"

LOCAL_TRANSACTION_IDファンクション

現行のトランザクションのローカルな(インスタンスに対する)一意の識別子を戻します。

PURGE_LOST_DB_ENTRYプロシージャ

リカバリが完了する前に、リモート・データベースが破損したか、再作成された場合に、不完全なトランザクションをローカル・サイトから削除できます。

PURGE_MIXEDプロシージャ

特定の混合出力トランザクションの情報を削除します。

READ_ONLYプロシージャ

次のSQL文と同じです。

SET TRANSACTION READ ONLY

READ_WRITEプロシージャ

次のSQL文と同じです。

SET TRANSACTION READ WRITE

ROLLBACKプロシージャ

次のSQL文と同じです。

ROLLBACK

ROLLBACK_FORCEプロシージャ

次のSQL文と同じです。

ROLLBACK FORCE <text>

ROLLBACK_SAVEPOINTプロシージャ

次のSQL文と同じです。

ROLLBACK TO SAVEPOINT <savepoint_name>

SAVEPOINTプロシージャ

次のSQL文と同じです。

SAVEPOINT <savepoint_name>

STEP_IDファンクション

トランザクションのDML操作を順序付ける、ローカルな(ローカル・トランザクションに対して)一意の正の整数を戻します。

USE_ROLLBACK_SEGMENTプロシージャ

次のSQL文と同じです。

SET TRANSACTION USE ROLLBACK SEGMENT <rb_seg_name>

172.2.1 ADVISE_COMMITプロシージャ

このプロシージャは、SQL文ALTER SESSION ADVISE COMMITと同じです。

構文

DBMS_TRANSACTION.ADVISE_COMMIT;

172.2.2 ADVISE_NOTHINGプロシージャ

このプロシージャは、SQL文ALTER SESSION ADVISE NOTHINGと同じです。

構文

DBMS_TRANSACTION.ADVISE_NOTHING;

172.2.3 ADVISE_ROLLBACKプロシージャ

このプロシージャは、SQL文ALTER SESSION ADVISE ROLLBACKと同じです。

構文

DBMS_TRANSACTION.ADVISE_ROLLBACK;

172.2.4 COMMITプロシージャ

このプロシージャは、SQL文COMMITと同じです。

このプロシージャは、組み込むとより完全となり、PL/SQLの一部としてすでに実装されている機能です。

構文

DBMS_TRANSACTION.COMMIT;

172.2.5 COMMIT_COMMENTプロシージャ

このプロシージャは、SQL文COMMIT COMMENT <text>と同じです。

構文

DBMS_TRANSACTION.COMMIT_COMMENT (
   cmnt VARCHAR2);

パラメータ

表172-2 COMMIT_COMMENTプロシージャのパラメータ

パラメータ 説明

cmnt

このコミットに関連するコメント。

172.2.6 COMMIT_FORCEプロシージャ

このプロシージャは、SQL文COMMIT FORCE <text>, <number>"と同じです。

構文

DBMS_TRANSACTION.COMMIT_FORCE (
   xid VARCHAR2, 
   scn VARCHAR2 DEFAULT NULL);

パラメータ

表172-3 COMMIT_FORCEプロシージャのパラメータ

パラメータ 説明

xid

ローカルまたはグローバルなトランザクションID。

scn

システム変更番号。

172.2.7 LOCAL_TRANSACTION_IDファンクション

このファンクションは、現行のトランザクションのローカルな(インスタンスに対する)一意の識別子を戻します。現行のトランザクションがない場合は、NULLを戻します。

構文

DBMS_TRANSACTION.LOCAL_TRANSACTION_ID (
   create_transaction BOOLEAN := FALSE)
  RETURN VARCHAR2;

パラメータ

表172-4 LOCAL_TRANSACTION_IDファンクションのパラメータ

パラメータ 説明

create_transaction

TRUEに設定すると、トランザクションが現在アクティブでない場合は、トランザクションを開始します。

172.2.8 PURGE_LOST_DB_ENTRYプロシージャ

プロシージャPURGE_LOST_DB_ENTRYは、ローカル・サイトからのデータベース・リカバリを制御するエントリをパージします。

コミット処理中に障害が発生すると、自動リカバリ機能によって、そのトランザクションに関連しているすべてのサイトでの結果が一貫して解決されます。ただし、リカバリの完了前にリモート・データベースが破損または再作成されると、DBA_2PC_PENDING内のリカバリを制御するために使用するエントリとそれに関連する表が削除されずに、リカバリ処理が定期的に再試行されます。プロシージャPURGE_LOST_DB_ENTRYでは、このようなトランザクションをローカル・サイトから削除できます。

構文

DBMS_TRANSACTION.PURGE_LOST_DB_ENTRY (
   xid VARCHAR2);

パラメータ

表172-5 PURGE_LOST_DB_ENTRYプロシージャのパラメータ

パラメータ 説明

xid

DBA_2PC_PENDING表にあるLOCAL_TRAN_ID列の値に設定する必要があります。

使用上のノート

警告:

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に必要とされるアクションを示します。

表172-6 PURGE_LOST_DB_ENTRYプロシージャの状態

列の状態 グローバル・トランザクションの状態 ローカル・トランザクションの状態 通常のDBAアクション 代替のDBAアクション

Collecting

Rolled back

Rolled back

None

PURGE_LOST_DB_ENTRY(ノート1参照)

Committed

Committed

Committed

None

PURGE_LOST_DB_ENTRY(ノート1参照)

Prepared

Unknown

Prepared

None

FORCE COMMITまたはROLLBACK

Forced commit

Unknown

Committed

None

PURGE_LOST_DB_ENTRY(ノート1参照)

Forced rollback

Unknown

Rolled back

None

PURGE_LOST_DB_ENTRY(ノート1参照)

Forced commit (mixed)

Mixed

Committed

(ノート2を参照)

Forced rollback (mixed)

Mixed

Rolled back

(ノート2を参照)

ノート:

重要な再構成が発生して自動リカバリではトランザクションを解決できない場合のみ使用します。例としては、リモート・データベース全体が破損し、ソフトウェアでの再構成によって2フェーズ・コミット機能を失う結果になった場合やTPモニターのような外部トランザクション・コーディネータからの情報を失った場合などがあります。

ノート:

不整合を取り除くために調査したり手動で作業を行い、プロシージャPURGE_MIXEDを使用します。

172.2.9 PURGE_MIXEDプロシージャ

このプロシージャは、特定の混合出力トランザクションの情報を削除します。

インダウト・トランザクションにコミットまたはロールバックを強制実行すると(自動リカバリで結果を解決するのではなく)、トランザクションでは、コミットするサイトとロールバックするサイトが混在する結果が得られる可能性があります。このような矛盾はOracleで自動的には解決できません。ただし、Oracleは、MIXED列を値'yes'に設定して、DBA_2PC_PENDINGにあるエントリにフラグ付けを行います。

Oracleでは、混合出力トランザクションの情報が自動的に削除されることはありません。混合トランザクションの結果として発生したすべての不整合が解決されたことを、アプリケーションまたはDBAで確認した後、このプロシージャを使用して、指定した混合出力トランザクションの情報を削除できます。

構文

DBMS_TRANSACTION.PURGE_MIXED (
   xid VARCHAR2);

パラメータ

表172-7 PURGE_MIXEDプロシージャのパラメータ

パラメータ 説明

xid

DBA_2PC_PENDING表にあるLOCAL_TRAN_ID列の値に設定する必要があります。

172.2.10 READ_ONLYプロシージャ

このプロシージャは、SQL文SET TRANSACTION READ ONLYと同じです。

構文

DBMS_TRANSACTION.READ_ONLY;

172.2.11 READ_WRITEプロシージャ

このプロシージャは、次のSQL文と同じです。

SET TRANSACTION READ WRITE

構文

DBMS_TRANSACTION.READ_WRITE;

172.2.12 ROLLBACKプロシージャ

このプロシージャは、SQL文ROLLBACKと同じです。

このプロシージャは、組み込むとより完全となり、PL/SQLの一部としてすでに実装されている機能です。

構文

DBMS_TRANSACTION.ROLLBACK;

172.2.13 ROLLBACK_FORCEプロシージャ

このプロシージャは、SQL文ROLLBACK FORCE <text>と同じです。

構文

DBMS_TRANSACTION.ROLLBACK_FORCE (
   xid VARCHAR2);

パラメータ

表172-8 ROLLBACK_FORCEプロシージャのパラメータ

パラメータ 説明

xid

ローカルまたはグローバルなトランザクションID。

172.2.14 ROLLBACK_SAVEPOINTプロシージャ

このプロシージャは、SQL文ROLLBACK TO SAVEPOINT <savepoint_name>と同じです。

このプロシージャは、組み込むとより完全となり、PL/SQLの一部としてすでに実装されている機能です。

構文

DBMS_TRANSACTION.ROLLBACK_SAVEPOINT (
   savept VARCHAR2);

パラメータ

表172-9 ROLLBACK_SAVEPOINTプロシージャのパラメータ

パラメータ 説明

savept

セーブポイントの識別子。

172.2.15 SAVEPOINTプロシージャ

このプロシージャは、SQL文SAVEPOINT <savepoint_name>と同じです。

このプロシージャは、組み込むとより完全となり、PL/SQLの一部としてすでに実装されている機能です。

構文

DBMS_TRANSACTION.SAVEPOINT (
   savept VARCHAR2);

パラメータ

表172-10 SAVEPOINTプロシージャのパラメータ

パラメータ 説明

savept

セーブポイントの識別子。

172.2.16 STEP_IDファンクション

このファンクションは、トランザクションのDML操作を順序付ける、ローカルな(ローカル・トランザクションに対して)一意の正の整数を戻します。

構文

DBMS_TRANSACTION.STEP_ID 
   RETURN NUMBER;

172.2.17 USE_ROLLBACK_SEGMENTプロシージャ

このプロシージャは、SQL文SET TRANSACTION USE ROLLBACK SEGMENT <rb_seg_name>と同じです。

構文

DBMS_TRANSACTION.USE_ROLLBACK_SEGMENT (
   rb_name VARCHAR2);

パラメータ

表172-11 USE_ROLLBACK_SEGMENTプロシージャのパラメータ

パラメータ 説明

rb_name

使用するロールバック・セグメントの名前。