205 DBMS_TRANSACTION
DBMS_TRANSACTIONパッケージは、ストアド・プロシージャからSQLトランザクション文へのアクセスを提供します。
参照:
Oracle Database SQL言語リファレンス
205.2 DBMS_TRANSACTIONサブプログラムの要約
この表は、DBMS_TRANSACTION
サブプログラムを示し、簡単に説明しています。
表205-1 DBMS_TRANSACTIONパッケージ・サブプログラム
サブプログラム | 説明 |
---|---|
次のSQL文と同じです。
|
|
次のSQL文と同じです。
|
|
次のSQL文と同じです。
|
|
次のSQL文と同じです。
|
|
次のSQL文と同じです。
|
|
次のSQL文と同じです。
|
|
現行のトランザクションのローカルな(インスタンスに対する)一意の識別子を戻します。 |
|
GET_TRANSACTION_IDファンクション |
セッション内のセッションレス・トランザクションまたはXAトランザクションのトランザクション識別子を返します |
GET_TRANSACTION_TIMEOUTファンクション |
セッション内のXAトランザクション・ブランチまたはセッションレス・トランザクションのタイムアウトを秒単位で返します |
GET_TRANSACTION_TYPEファンクション |
セッションでアクティブなトランザクションのタイプを返します |
リカバリが完了する前に、リモート・データベースが破損したか、再作成された場合に、不完全なトランザクションをローカル・サイトから削除できます。 |
|
特定の混合出力トランザクションの情報を削除します。 |
|
次のSQL文と同じです。
|
|
次のSQL文と同じです。
|
|
次のSQL文と同じです。
|
|
次のSQL文と同じです。
|
|
次のSQL文と同じです。
|
|
次のSQL文と同じです。
|
|
START_TRANSACTIONファンクション |
ローカル(バニラ)トランザクションまたはセッションレス・トランザクションを開始します |
トランザクションのDML操作を順序付ける、ローカルな(ローカル・トランザクションに対して)一意の正の整数を戻します。 |
|
SUSPEND_TRANSACTIONプロシージャ |
セッション内でアクティブなセッションレス・トランザクションを一時停止します |
次のSQL文と同じです。
|
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プロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
このコミットに関連するコメント。 |
205.2.6 COMMIT_FORCEプロシージャ
このプロシージャは、SQL文COMMIT FORCE <text>, <number>"
と同じです。
構文
DBMS_TRANSACTION.COMMIT_FORCE ( xid VARCHAR2, scn VARCHAR2 DEFAULT NULL);
パラメータ
表205-3 COMMIT_FORCEプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
ローカルまたはグローバルなトランザクションID。 |
|
システム変更番号。 |
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_LOCAL
、TRANSACTION_TYPE_SESSIONLESS
、TRANSACTION_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ファンクションのパラメータ
パラメータ | 説明 |
---|---|
|
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プロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
|
使用上のノート
警告:
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アクション |
---|---|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ノート:
重要な再構成が発生して自動リカバリではトランザクションを解決できない場合のみ使用します。 例としては、リモート・データベース全体が破損し、ソフトウェアでの再構成によって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プロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
|
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プロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
ローカルまたはグローバルなトランザクションID。 |
205.2.17 ROLLBACK_SAVEPOINTプロシージャ
このプロシージャは、SQL文ROLLBACK TO SAVEPOINT <savepoint_name>
と同じです。
このプロシージャは、組み込むとより完全となり、PL/SQLの一部としてすでに実装されている機能です。
構文
DBMS_TRANSACTION.ROLLBACK_SAVEPOINT ( savept VARCHAR2);
パラメータ
表205-9 ROLLBACK_SAVEPOINTプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
セーブポイントの識別子。 |
205.2.18 SAVEPOINTプロシージャ
このプロシージャは、SQL文SAVEPOINT <savepoint_name>
と同じです。
このプロシージャは、組み込むとより完全となり、PL/SQLの一部としてすでに実装されている機能です。
構文
DBMS_TRANSACTION.SAVEPOINT ( savept VARCHAR2);
パラメータ
表205-10 SAVEPOINTプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
セーブポイントの識別子。 |
205.2.19 START_TRANSACTIONファンクション
このファンクションは、transaction_type
がTRANSACTION_TYPE_LOCAL
とTRANSACTION_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
ファンクションのパラメータの説明を示します。
ノート:
パラメータのxid
、timeout
およびflag
は、TRANSACTION_TYPE
がTRANSACTION_TYPE_SESSIONLESS
の場合にのみ適用されます。
表205-11 START_TRANSACTIONファンクションのパラメータ
パラメータ | 説明 |
---|---|
|
新しく開始または再開したセッションレス・トランザクションのGTRID。 最大サイズが64バイトのRAWバイト配列を指定できます。 |
|
ローカル・トランザクションを開始するには、 |
timeout |
インスタンス内で、セッション・レス・トランザクションを関連付けることができるのは、一度に1つのセッションのみです。 したがって、セッション・レス・トランザクションが同じインスタンス上の別のセッションに関連付けられている場合、そのトランザクションは再開できません。 この状況が発生した場合、再開タイムアウト値は、このセッションがトランザクションを一時停止するまでの待機時間(秒)を指定し、トランザクションを再開できるようにします。 待機がタイムアウトする前に他のセッションがトランザクションを一時停止しない場合、ORA-25351エラーが発生します。 再開タイムアウト値が0の場合、エラーはただちに発生します。 |
flag |
このフラグは、新規トランザクションを開始する場合の |
205.2.20 STEP_IDファンクション
このファンクションは、トランザクションのDML操作を順序付ける、ローカルな(ローカル・トランザクションに対して)一意の正の整数を戻します。
構文
DBMS_TRANSACTION.STEP_ID RETURN NUMBER;
205.2.21 SUSPEND_TRANSACTIONプロシージャ
このプロシージャは、セッション内でアクティブなセッションレス・トランザクションを一時停止します。
アクティブ・トランザクションがセッションレス・トランザクションでない場合は、ORA-26202
エラーが発生します。 セッション内でアクティブなトランザクションがない場合、トランザクションの一時停止操作は操作不可になります。
構文
DBMS_TRANSACTION.SUSPEND_TRANSACTION