機械翻訳について

205 DBMS_TRANSACTION

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

参照:

Oracle Database SQL言語リファレンス

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

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

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

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

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

表205-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>

COMMIT_FORCEプロシージャ

次のSQL文と同じです。

COMMIT FORCE <text>, <number>"

LOCAL_TRANSACTION_IDファンクション

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

GET_TRANSACTION_IDファンクション

セッション内のセッションレス・トランザクションまたはXAトランザクションのトランザクション識別子を返します

GET_TRANSACTION_TIMEOUTファンクション

セッション内のXAトランザクション・ブランチまたはセッションレス・トランザクションのタイムアウトを秒単位で返します

GET_TRANSACTION_TYPEファンクション

セッションでアクティブなトランザクションのタイプを返します

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>

START_TRANSACTIONファンクション

ローカル(バニラ)トランザクションまたはセッションレス・トランザクションを開始します

STEP_IDファンクション

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

SUSPEND_TRANSACTIONプロシージャ

セッション内でアクティブなセッションレス・トランザクションを一時停止します

USE_ROLLBACK_SEGMENTプロシージャ

次のSQL文と同じです。

SET TRANSACTION USE ROLLBACK SEGMENT <rb_seg_name>

205.2.1 ADVISE_COMMITプロシージャ

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

構文

DBMS_TRANSACTION.ADVISE_COMMIT;

205.2.2 ADVISE_NOTHINGプロシージャ

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

構文

DBMS_TRANSACTION.ADVISE_NOTHING;

205.2.3 ADVISE_ROLLBACKプロシージャ

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

構文

DBMS_TRANSACTION.ADVISE_ROLLBACK;

205.2.4 COMMITプロシージャ

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

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

構文

DBMS_TRANSACTION.COMMIT;

205.2.5 COMMIT_COMMENTプロシージャ

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

構文

DBMS_TRANSACTION.COMMIT_COMMENT (
   cmnt VARCHAR2);

パラメータ

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

パラメータ 説明

cmnt

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

205.2.6 COMMIT_FORCEプロシージャ

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

構文

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

パラメータ

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

パラメータ 説明

xid

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

scn

システム変更番号。

205.2.7 GET_TRANSACTION_IDファンクション

このファンクションは、セッション内のトランザクション識別子を返します。

このファンクションは、セッション内のアクティブなXAトランザクションまたはセッションレス・トランザクションのトランザクション識別子の16進表現(varchar2形式)を返します。 これらのタイプのセッション内でアクティブなトランザクションがない場合、NULLが返されます。

XAトランザクションの場合、このファンクションはドットで区切られたフォーマットIDとGTRIDの16進表現(<format id>.<GTRID>)を返します。

セッションレス・トランザクションの場合、この関数はGTRIDの16進表現を返します。 GET_TRANSACTION_TYPEをコールすると、トランザクションのタイプがXAかセッションレスかがわかります。

構文

GET_TRANSACTION_ID 
   RETURN VARCHAR2;

205.2.8 GET_TRANSACTION_TIMEOUTファンクション

このファンクションは、セッション内のXAトランザクション・ブランチまたはセッションレス・トランザクションのタイムアウトを秒単位で返します。

ローカル・トランザクションがセッション内でアクティブな場合、このファンクションはUB4MAXVALを返します。

セッション内でアクティブなトランザクションがない場合、このファンクションはNULLを返します。

構文

GET_TRANSACTION_TIMEOUT 
   RETURN NUMBER;

205.2.9 GET_TRANSACTION_TYPEファンクション

このファンクションは、セッションでアクティブなトランザクションのタイプを返します。

返されるトランザクションのタイプは、TRANSACTION_TYPE_LOCALTRANSACTION_TYPE_SESSIONLESSTRANSACTION_TYPE_XAまたはNULL (セッション内でアクティブなトランザクションがない場合)のいずれかです。

構文

GET_TRANSACTION_TYPE 
   RETURN PLS_INTEGER;

205.2.10 LOCAL_TRANSACTION_IDファンクション

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

構文

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

パラメータ

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

パラメータ 説明

create_transaction

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

205.2.11 PURGE_LOST_DB_ENTRYプロシージャ

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

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

構文

DBMS_TRANSACTION.PURGE_LOST_DB_ENTRY (
   xid VARCHAR2);

パラメータ

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

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

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

Collecting

Rolled back

Rolled back

None

PURGE_LOST_DB_ENTRY (See Note 1)

Committed

Committed

Committed

None

PURGE_LOST_DB_ENTRY (See Note 1)

Prepared

Unknown

Prepared

None

FORCE COMMIT or ROLLBACK

Forced commit

Unknown

Committed

None

PURGE_LOST_DB_ENTRY (See Note 1)

Forced rollback

Unknown

Rolled back

None

PURGE_LOST_DB_ENTRY (See Note 1)

Forced commit (mixed)

Mixed

Committed

(See Note 2)

Forced rollback (mixed)

Mixed

Rolled back

(See Note 2)

ノート:

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

ノート:

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

205.2.12 PURGE_MIXEDプロシージャ

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

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

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

構文

DBMS_TRANSACTION.PURGE_MIXED (
   xid VARCHAR2);

パラメータ

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

パラメータ 説明

xid

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

205.2.13 READ_ONLYプロシージャ

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

構文

DBMS_TRANSACTION.READ_ONLY;

205.2.14 READ_WRITEプロシージャ

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

SET TRANSACTION READ WRITE

構文

DBMS_TRANSACTION.READ_WRITE;

205.2.15 ROLLBACKプロシージャ

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

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

構文

DBMS_TRANSACTION.ROLLBACK;

205.2.16 ROLLBACK_FORCEプロシージャ

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

構文

DBMS_TRANSACTION.ROLLBACK_FORCE (
   xid VARCHAR2);

パラメータ

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

パラメータ 説明

xid

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

205.2.17 ROLLBACK_SAVEPOINTプロシージャ

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

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

構文

DBMS_TRANSACTION.ROLLBACK_SAVEPOINT (
   savept VARCHAR2);

パラメータ

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

パラメータ 説明

savept

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

205.2.18 SAVEPOINTプロシージャ

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

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

構文

DBMS_TRANSACTION.SAVEPOINT (
   savept VARCHAR2);

パラメータ

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

パラメータ 説明

savept

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

205.2.19 START_TRANSACTIONファンクション

このファンクションは、transaction_typeTRANSACTION_TYPE_LOCALTRANSACTION_TYPE_SESSIONLESSのどちらであるか応じて、ローカル(バニラ)トランザクションまたはセッションレス・トランザクションを開始します。

ローカル・トランザクションを開始する場合、このファンクションはDBMS_TRANSACTION.local_transaction_id()と同様にXID <usn>.<slot>.<wrap>を返します。 セッションレス・トランザクションを開始する場合、このファンクションは開始したトランザクションのGTRIDの16進表現を返します。

構文

DBMS_TRANSACTION.START_TRANSACTION(
   xid              in raw default null,
   transaction_type in pls_integer default TRANSACTION_TYPE_LOCAL,
   timeout          in pls_integer default 60,
   flag             in pls_integer default 0
) RETURN VARCHAR2;
次の表に、DBMS_TRANSACTION.START_TRANSACTIONファンクションのパラメータの説明を示します。

ノート:

パラメータのxidtimeoutおよびflagは、TRANSACTION_TYPETRANSACTION_TYPE_SESSIONLESSの場合にのみ適用されます。

表205-11 START_TRANSACTIONファンクションのパラメータ

パラメータ 説明

xid

新しく開始または再開したセッションレス・トランザクションのGTRID。 最大サイズが64バイトのRAWバイト配列を指定できます。 NULLの場合は、サーバーがGTRIDを生成します。

TRANSACTION_TYPE

ローカル・トランザクションを開始するには、TRANSACTION_TYPETRANSACTION_TYPE_LOCALとして追加し、セッション・レス・トランザクションを開始するには、TRANSACTION_TYPETRANSACTION_TYPE_SESSIONLESSとして追加します。

timeout

TRANSACTION_NEWフラグを使用する場合、timeoutはトランザクション・タイムアウト値を示し、正の数値である必要があります。 一時停止後にこのトランザクションを再開できる期間を秒単位で指定します。

TRANSACTION_RESUMEフラグが使用されている場合、timeoutは再開タイムアウト値(0または正の数)を示します。

インスタンス内で、セッション・レス・トランザクションを関連付けることができるのは、一度に1つのセッションのみです。 したがって、セッション・レス・トランザクションが同じインスタンス上の別のセッションに関連付けられている場合、そのトランザクションは再開できません。 この状況が発生した場合、再開タイムアウト値は、このセッションがトランザクションを一時停止するまでの待機時間(秒)を指定し、トランザクションを再開できるようにします。 待機がタイムアウトする前に他のセッションがトランザクションを一時停止しない場合、ORA-25351エラーが発生します。 再開タイムアウト値が0の場合、エラーはただちに発生します。

flag

このフラグは、新規トランザクションを開始する場合のTRANSACTION_NEWまたは一時停止されたトランザクションを再開する場合のTRANSACTION_RESUMEのいずれかになります。

205.2.20 STEP_IDファンクション

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

構文

DBMS_TRANSACTION.STEP_ID 
   RETURN NUMBER;

205.2.21 SUSPEND_TRANSACTIONプロシージャ

このプロシージャは、セッション内でアクティブなセッションレス・トランザクションを一時停止します。

アクティブ・トランザクションがセッションレス・トランザクションでない場合は、ORA-26202エラーが発生します。 セッション内でアクティブなトランザクションがない場合、トランザクションの一時停止操作は操作不可になります。

構文

DBMS_TRANSACTION.SUSPEND_TRANSACTION

205.2.22 USE_ROLLBACK_SEGMENTプロシージャ

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

構文

DBMS_TRANSACTION.USE_ROLLBACK_SEGMENT (
   rb_name VARCHAR2);

パラメータ

表205-12 USE_ROLLBACK_SEGMENTプロシージャのパラメータ

パラメータ 説明

rb_name

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