ヘッダーをスキップ

Oracle Rdb SQLリファレンス・マニュアル リリース7.2 E06178-01 |
| 目次 | 索引

戻る | 次へ |

# 2.9 コンテキスト構造体

分散トランザクションでは、データベースが異なるノードにある場合でも、複数のデータベースまたはデータベース・アタッチメントが1つのトランザクションにまとめてグループ化されます。分散トランザクションでのOracle Rdbの使用方法は、『Oracle Rdb7 Guide to Distributed Transactions』を参照してください。

2フェーズ・コミットのプロトコルでは、分散トランザクションの場合でも、トランザクションを永続化する前に必要な処理をすべて確実に完了するために、トランザクションに関与しているユーザーのアクティビティが調整されます。

2フェーズ・コミットのプロトコルは、DECdtmトランザクション・マネージャ・ソフトウェアがインストールされており、それがトランザクション内のすべてのノードで開始されている場合に使用できます。アプリケーションで分散トランザクションを開始する場合は、2フェーズ・コミットのプロトコルを使用します。

アプリケーションでコンテキスト構造体を宣言する場合、ほとんどの実行SQL文に関連付ける必要があります。これは、SQLモジュール言語またはプリコンパイルされたSQLのどちらを使用する場合にも該当しますが、コンテキスト構造体をSQL文に関連付ける方法は、使用するコンパイラによって異なります。

ただし、次のような実行可能文にはコンテキスト構造体を関連付けられません。

- トランザクションがすでに開始している場合は実行できない文

- トランザクションの有効範囲内で実行されず、どのトランザクション・コンテキストからも独立している文

- トランザクション・マネージャに対する明示的なコールによって開始されたトランザクションでは使用できない文

埋込みSQL文が分散トランザクションの一部であると指定するには、USING CONTEXT句を使用する必要があります。分散トランザクションでの埋込みSQLの使用の詳細は、第4.1節を参照してください。分散トランザクションのコンテキスト内でSQLによってプロシージャを実行するには、モジュール言語プロシージャでCONTEXT句を使用する必要があります。分散トランザクションでのSQLモジュール言語の使用の詳細は、第3.6節を参照してください。

コンテキスト構造体を渡す際には、次の制限が適用されます。

- すでに開始されているトランザクションでは次のSQL文を実行できないため、このSQL文にはコンテキスト構造体を渡すことができません。

  - ALTER DATABASE

  - CREATE DATABASE

  - DROP PATHNAME

  - DROP DATABASE

- 次のSQL文はトランザクションの有効範囲内で実行されず、どのトランザクション・コンテキストからも独立しているため、このSQLにはコンテキスト構造体を渡すことができません。

  - CONNECT

  - DESCRIBE

  - DISCONNECT

  - 拡張動的DECLARE CURSOR

  - RELEASE

  - SET CATALOG

  - SET CHARACTER LENGTH

  - SET CONNECT

  - SET DEFAULT CHARACTER SET

  - SET DEFAULT DATE FORMAT

  - SET DIALECT

  - SET IDENTIFIER CHARACTER SET

  - SET KEYWORD RULES

  - SET LITERAL CHARACTER SET

  - SET NAMES

  - SET NATIONAL CHARACTER SET

  - SET OPTIMIZATION LEVEL

  - SET QUOTING RULES

  - SET SCHEMA

  - SET VIEW UPDATE RULES

- 次のSQL文はトランザクション・マネージャに対する明示的なコールによって開始されているため、このSQL文にはコンテキスト構造体を渡すことができません。

  - COMMIT

  - ROLLBACK

  （DISCONNECT文は、前のカテゴリのみでなく、このカテゴリのものであるとみなされます。）

非実行SQL文にはコンテキスト構造体は関連付けられません。また、複数文プロシージャにSET TRANSACTION文、COMMIT文またはROLLBACK文が含まれている場合は、コンテキスト構造体はこのプロシージャに渡されません。