oracle9i real application clusters...oracle9i real application...

258
Oracle9i Real Application Clusters クラスタ・インタフェース詳細 リリース 19.0.12001 12 部品番号 : J04648-01

Upload: others

Post on 19-Jul-2020

5 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

Oracle9i Real Application Clusters

クラスタ・インタフェース詳細

リリース 1(9.0.1)

2001 年 12 月

部品番号 : J04648-01

Page 2: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

Oracle9i Real Application Clusters クラスタ・インタフェース詳細 , リリース 1(9.0.1)

部品番号 : J04648-01

原本名:Oracle9i Real Application Clusters Cluster Interface Specification, Release 1 (9.0.1) for Windows NT and Windows 2000

原本部品番号:A90482-01

原本著者:Ahmed Abbas, Christopher Allison

原本協力者:Mark Bauer, Surojit Chatterjee, Janis Greenberg, Michael Salinas, Helen Slattery,Alok K Srivastava

Copyright © 1999, 2001, Oracle Corporation. All rights reserved.

Printed in Japan.

制限付権利の説明

プログラム(ソフトウェアおよびドキュメントを含む)の使用、複製または開示は、オラクル社との契約に記された制約条件に従うものとします。著作権、特許権およびその他の知的財産権に関する法律により保護されています。

当プログラムのリバース・エンジニアリング等は禁止されております。

このドキュメントの情報は、予告なしに変更されることがあります。オラクル社は本ドキュメントの無謬性を保証しません。

* オラクル社とは、Oracle Corporation(米国オラクル)または日本オラクル株式会社(日本オラクル)を指します。

危険な用途への使用について

オラクル社製品は、原子力、航空産業、大量輸送、医療あるいはその他の危険が伴うアプリケーションを用途として開発されておりません。オラクル社製品を上述のようなアプリケーションに使用することについての安全確保は、顧客各位の責任と費用により行ってください。万一かかる用途での使用によりクレームや損害が発生いたしましても、日本オラクル株式会社と開発元である Oracle Corporation(米国オラクル)およびその関連会社は一切責任を負いかねます。 当プログラムを米国国防総省の米国政府機関に提供する際には、『Restricted Rights』と共に提供してください。この場合次の Notice が適用されます。

Restricted Rights Notice

Programs delivered subject to the DOD FAR Supplement are "commercial computer software" and use, duplication, and disclosure of the Programs, including documentation, shall be subject to the licensing restrictions set forth in the applicable Oracle license agreement. Otherwise, Programs delivered subject to the Federal Acquisition Regulations are "restricted computer software" and use, duplication, and disclosure of the Programs shall be subject to the restrictions in FAR 52.227-19, Commercial Computer Software - Restricted Rights (June, 1987). Oracle Corporation, 500 Oracle Parkway, Redwood City, CA 94065.

このドキュメントに記載されているその他の会社名および製品名は、あくまでその製品および会社を識別する目的にのみ使用されており、それぞれの所有者の商標または登録商標です。

Page 3: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

目次目次目次目次

はじめにはじめにはじめにはじめに .......................................................................................................................................................................... vii

対象読者 ................................................................................................................................................................... viii

このマニュアルの構成 ........................................................................................................................................... viii関連資料 ..................................................................................................................................................................... ix表記規則 ...................................................................................................................................................................... x特別な注意事項 ........................................................................................................................................................ xv

移植 ............................................................................................................................................................................ xv

Oracle Cluster ソフトウェアの新機能ソフトウェアの新機能ソフトウェアの新機能ソフトウェアの新機能 .................................................................................................. xvii

Real Application Clusters リリース 1(9.0.1)の機能 ................................................................................... xviiiOracle Cluster Setup Wizard ....................................................................................................................... xviii

I/O モジュールの廃止 .................................................................................................................................. xviii

1 Real Application Clusters for Windows の概要の概要の概要の概要

バックグラウンドバックグラウンドバックグラウンドバックグラウンド ................................................................................................................................................... 1-2Real Application Clusters の機能の機能の機能の機能 ....................................................................................................................... 1-2Real Application Clusters for Windows ........................................................................................................... 1-2

2 OSD モジュールモジュールモジュールモジュール

移植に関する注意事項移植に関する注意事項移植に関する注意事項移植に関する注意事項 ........................................................................................................................................... 2-2OSD の概要の概要の概要の概要 ............................................................................................................................................................. 2-2OSD モジュールモジュールモジュールモジュール ..................................................................................................................................................... 2-4

Cluster Manager ............................................................................................................................................. 2-4

ノードの監視 ........................................................................................................................................... 2-5プロセス・グループの管理 ................................................................................................................... 2-5

i

Page 4: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

I/O の制限 ............................................................................................................................................... 2-6プロセス間通信(ノード間) ......................................................................................................................... 2-6

起動 ................................................................................................................................................................... 2-6

OSD モジュールの詳細モジュールの詳細モジュールの詳細モジュールの詳細 ......................................................................................................................................... 2-6OSD モジュール・ルーチンモジュール・ルーチンモジュール・ルーチンモジュール・ルーチン ................................................................................................................................. 2-7OSD モジュールの実装モジュールの実装モジュールの実装モジュールの実装 ....................................................................................................................................... 2-10

DLL の実行コンテキスト ............................................................................................................................ 2-11

OSD の一般規則 ........................................................................................................................................... 2-11

DLL とレジストリのロード ........................................................................................................................ 2-12

インストーラの作成 ..................................................................................................................................... 2-13

I/O フェンス・ドライバのインストール ................................................................................................. 2-13

DLL のルーチンへのバインド .................................................................................................................... 2-14

OSD のバージョン・ネゴシエーション ................................................................................................... 2-14

バイナリ互換性バイナリ互換性バイナリ互換性バイナリ互換性 ..................................................................................................................................................... 2-15

3 Cluster(グループ・メンバーシップ)(グループ・メンバーシップ)(グループ・メンバーシップ)(グループ・メンバーシップ)Manager OSDCM の概要の概要の概要の概要 ............................................................................................................................................................... 3-2

Oracle9i のリファレンスの実装のリファレンスの実装のリファレンスの実装のリファレンスの実装 .......................................................................................................................... 3-2プロセス・グループプロセス・グループプロセス・グループプロセス・グループ ............................................................................................................................................... 3-3グループ・メンバー情報グループ・メンバー情報グループ・メンバー情報グループ・メンバー情報 ....................................................................................................................................... 3-4

スレーブ・メンバースレーブ・メンバースレーブ・メンバースレーブ・メンバー ............................................................................................................................................... 3-4プロセスの監視プロセスの監視プロセスの監視プロセスの監視 ....................................................................................................................................................... 3-5ノードの監視ノードの監視ノードの監視ノードの監視 ........................................................................................................................................................... 3-5グループ・イベントの通知グループ・イベントの通知グループ・イベントの通知グループ・イベントの通知 ................................................................................................................................... 3-6

非パーティション化の要件非パーティション化の要件非パーティション化の要件非パーティション化の要件 ................................................................................................................................... 3-6静的ノード情報の問合せ静的ノード情報の問合せ静的ノード情報の問合せ静的ノード情報の問合せ ....................................................................................................................................... 3-6プロセス・グループ情報の問合せプロセス・グループ情報の問合せプロセス・グループ情報の問合せプロセス・グループ情報の問合せ ....................................................................................................................... 3-7

セキュリティセキュリティセキュリティセキュリティ ........................................................................................................................................................... 3-7I/O の制限の制限の制限の制限 ................................................................................................................................................................ 3-7CM クライアントの計画クライアントの計画クライアントの計画クライアントの計画 ....................................................................................................................................... 3-8

4 プロセス間通信プロセス間通信プロセス間通信プロセス間通信 OSDIPC の概要の概要の概要の概要 ............................................................................................................................................................... 4-2IPC の設計ポイントの設計ポイントの設計ポイントの設計ポイント ............................................................................................................................................... 4-2

高速 Point-to-Point メッセージ送信 ............................................................................................................ 4-3

メモリー・マップ転送 ................................................................................................................................... 4-4

ii

Page 5: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

メモリー割当て ............................................................................................................................................... 4-4

ユーザー・バッファ ....................................................................................................................................... 4-4

論理接続モデル ............................................................................................................................................... 4-5

エラー・モデル ............................................................................................................................................... 4-5

オプションの機能 ........................................................................................................................................... 4-6

レイヤリング ................................................................................................................................................... 4-6

IPC クライアント ........................................................................................................................................... 4-6

グローバル・キャッシュ・サービス(GCS)およびグローバル・エンキュー・サービス(GES) ..................................................................................................................................... 4-7Oracle パラレル実行機能 ...................................................................................................................... 4-7

リファレンス IPC の実装 .............................................................................................................................. 4-7

IPC の要件の要件の要件の要件 ............................................................................................................................................................... 4-7信頼性 ............................................................................................................................................................... 4-8

メッセージの境界 ........................................................................................................................................... 4-8

メッセージの順序 ........................................................................................................................................... 4-8

メッセージの公正 ........................................................................................................................................... 4-9

メッセージの位置合せ ................................................................................................................................... 4-9

プロセス・クリーンアップ ........................................................................................................................... 4-9

割込みコール ................................................................................................................................................... 4-9

IPC のデータ構造体のデータ構造体のデータ構造体のデータ構造体 ............................................................................................................................................. 4-10IPC ルーチンの説明ルーチンの説明ルーチンの説明ルーチンの説明 ............................................................................................................................................. 4-11

5 起動起動起動起動 OSDOracle Real Application Clusters の起動の概要の起動の概要の起動の概要の起動の概要 .............................................................................................. 5-2

ブートストラップ処理 ................................................................................................................................... 5-2

インスタンス起動 ........................................................................................................................................... 5-2

起動起動起動起動 OSD の詳細の詳細の詳細の詳細 .................................................................................................................................................... 5-3起動モジュール・ルーチンのコール順 ....................................................................................................... 5-3

Oracle Real Application Clusters の起動の制御 ........................................................................................ 5-4

START のデータ構造体のデータ構造体のデータ構造体のデータ構造体 ........................................................................................................................................ 5-4START のルーチンの説明のルーチンの説明のルーチンの説明のルーチンの説明 .................................................................................................................................... 5-4

iii

Page 6: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

6 汎用汎用汎用汎用 OSD のデータ構造体のデータ構造体のデータ構造体のデータ構造体

OSDERROR ........................................................................................................................................................... 6-2OSDSTATUS ......................................................................................................................................................... 6-3ORAERR ................................................................................................................................................................. 6-4

7 CM のデータ構造体およびルーチンの定義のデータ構造体およびルーチンの定義のデータ構造体およびルーチンの定義のデータ構造体およびルーチンの定義

CM のデータ構造体のデータ構造体のデータ構造体のデータ構造体 ............................................................................................................................................... 7-2CM のデータ構造体のデータ構造体のデータ構造体のデータ構造体 - 実装定義の構造体実装定義の構造体実装定義の構造体実装定義の構造体 ......................................................................................................... 7-21CM のルーチンのルーチンのルーチンのルーチン - 汎用汎用汎用汎用 OSD コールコールコールコール .................................................................................................................. 7-24

CM のルーチンのルーチンのルーチンのルーチン - コンテキストの作成コンテキストの作成コンテキストの作成コンテキストの作成 / 破棄破棄破棄破棄 .................................................................................................. 7-30CM のルーチンのルーチンのルーチンのルーチン - クラスタ情報コールクラスタ情報コールクラスタ情報コールクラスタ情報コール ............................................................................................................. 7-36CM のルーチンのルーチンのルーチンのルーチン - グループ情報関数グループ情報関数グループ情報関数グループ情報関数 .................................................................................................................. 7-42CM のルーチンのルーチンのルーチンのルーチン - プライマリ・メンバーシップ関数プライマリ・メンバーシップ関数プライマリ・メンバーシップ関数プライマリ・メンバーシップ関数 ..................................................................................... 7-46

CM のルーチンのルーチンのルーチンのルーチン - スレーブ・メンバー関数スレーブ・メンバー関数スレーブ・メンバー関数スレーブ・メンバー関数 ..................................................................................................... 7-56

8 IPC のデータ構造体およびルーチンの定義のデータ構造体およびルーチンの定義のデータ構造体およびルーチンの定義のデータ構造体およびルーチンの定義

IPC のデータ構造体のデータ構造体のデータ構造体のデータ構造体 - Oracle 定義の構造体定義の構造体定義の構造体定義の構造体 ....................................................................................................... 8-2

IPC のデータ構造体のデータ構造体のデータ構造体のデータ構造体 - 実装定義の構造体実装定義の構造体実装定義の構造体実装定義の構造体 ......................................................................................................... 8-23IPC のルーチンのルーチンのルーチンのルーチン - 汎用汎用汎用汎用 OSD コールコールコールコール .................................................................................................................. 8-36IPC のルーチンのルーチンのルーチンのルーチン - コンテキストの作成コンテキストの作成コンテキストの作成コンテキストの作成 / 破棄破棄破棄破棄 .................................................................................................. 8-42

IPC のルーチンのルーチンのルーチンのルーチン - ポートおよび接続の確立をサポートポートおよび接続の確立をサポートポートおよび接続の確立をサポートポートおよび接続の確立をサポート ................................................................................. 8-50IPC のルーチンのルーチンのルーチンのルーチン - リージョンおよびバッファの作成リージョンおよびバッファの作成リージョンおよびバッファの作成リージョンおよびバッファの作成 / 破棄破棄破棄破棄 .......................................................................... 8-62IPC のルーチンのルーチンのルーチンのルーチン - 未処理の要求未処理の要求未処理の要求未処理の要求 .......................................................................................................................... 8-87

9 START のデータ構造体およびルーチンの定義のデータ構造体およびルーチンの定義のデータ構造体およびルーチンの定義のデータ構造体およびルーチンの定義

START のデータ構造体のデータ構造体のデータ構造体のデータ構造体 ........................................................................................................................................ 9-2START のルーチンのルーチンのルーチンのルーチン ................................................................................................................................................ 9-5

A よくある質問とその回答(よくある質問とその回答(よくある質問とその回答(よくある質問とその回答(FAQ))))

Real Application Clusters .................................................................................................................................... A-2CM ............................................................................................................................................................................ A-4IPC ............................................................................................................................................................................ A-6

iv

Page 7: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

用語集用語集用語集用語集

索引索引索引索引

v

Page 8: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

vi

Page 9: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

はじめにはじめにはじめにはじめに

このマニュアルでは、Real Application Clusters およびパラレル実行のランタイム環境に対する、Windows NT および Windows 2000 オペレーティング・システム固有(OSD)のインタフェースに関する情報を提供します。

I/O モジュールは現在使用していません。この機能は CMSRVR に移行されました。それ以外のほとんどの変更は、以前のリリースからのマイナー・チェンジです。

この章では、次の項目について説明します。

� 対象読者

� このマニュアルの構成

� 関連資料

� 表記規則

� 特別な注意事項

� 移植

vii

Page 10: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

対象読者対象読者対象読者対象読者Oracle RDBMS エンジン用の Real Application Clusters では、複数のノード上のユーザーおよびプロセスが、同じデータベースに対し同時に操作を行うことができます。Real Application Clusters ソフトウェアによって、ノード間のパラレル実行操作を可能にする基本的なサポートが提供されます。これらのテクノロジでは、オペレーティング・システムおよび関連ミドルウェアなど、基礎となるクラスタ・サポートが必要です。

このマニュアルでは、Oracle9i Enterprise Edition for Windows リリース 1(9.0.1)のためのReal Application Clusters API について説明します。UNIX 環境の Oracle9i Real Application Clusters にも、同じ API セマンティックが適用されます。

オペレーティング・システムのクラスタ機能を Real Application Clusters 環境に結び付けるレイヤーである、OSD 移植レイヤーについても説明します。OSD を提供するベンダーがモジュール設計において準拠すべき要件、インタフェース仕様および実装の詳細を扱います。

このマニュアルの構成このマニュアルの構成このマニュアルの構成このマニュアルの構成このマニュアルでは、Real Application Clusters 環境が依存している一連のインタフェースを、関連機能別にグループ分けして説明します。第 1 章から第 5 章は、概要とリファレンスです。主要なデータ構造体、ルーチンおよび移植の際の注意は、第 6 章から第 9 章で説明しています。

第第第第 1 章「章「章「章「Real Application Clusters for Windows の概要」の概要」の概要」の概要」

Real Application Clusters の基本機能について説明します。OSD の概要と、共通 OSD サポートも取り上げています。

第第第第 2 章「章「章「章「OSD モジュール」モジュール」モジュール」モジュール」

Real Application Clusters API に準拠している OSD モジュールおよび OSD コンポーネントについて説明します。

第第第第 3 章「章「章「章「Cluster(グループ・メンバーシップ)(グループ・メンバーシップ)(グループ・メンバーシップ)(グループ・メンバーシップ)Manager OSD」」」」

Cluster Manager(CM)OSD モジュールについて説明します。CM では、クラスタの状態を検出および追跡する際に必要な要件およびインタフェースを定義します。

第第第第 4 章「プロセス間通信章「プロセス間通信章「プロセス間通信章「プロセス間通信 OSD」」」」

プロセス間通信(IPC)OSD モジュールについて説明します。IPC では、インスタンス間で高信頼性のメッセージを送信するために Real Application Clusters 環境で必要なインタフェースを定義します。

第第第第 5 章「起動章「起動章「起動章「起動 OSD」」」」

起動(START)OSD モジュールについて説明します。START では、Real Application Clusters インスタンスの起動プロシージャを定義します。

viii

Page 11: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

第第第第 6 章「汎用章「汎用章「汎用章「汎用 OSD のデータ構造体」のデータ構造体」のデータ構造体」のデータ構造体」

汎用の各ルーチンおよびデータ構造体を詳細に解説します。

第第第第 7 章「章「章「章「CM のデータ構造体およびルーチンの定義」のデータ構造体およびルーチンの定義」のデータ構造体およびルーチンの定義」のデータ構造体およびルーチンの定義」

CM の各ルーチンおよびデータ構造体を詳細に解説します。

第第第第 8 章「章「章「章「IPC のデータ構造体およびルーチンの定義」のデータ構造体およびルーチンの定義」のデータ構造体およびルーチンの定義」のデータ構造体およびルーチンの定義」

IPC の各ルーチンおよびデータ構造体を詳細に解説します。

第第第第 9 章「章「章「章「START のデータ構造体およびルーチンの定義」のデータ構造体およびルーチンの定義」のデータ構造体およびルーチンの定義」のデータ構造体およびルーチンの定義」

START の各ルーチンおよびデータ構造体を詳細に解説します。

付録付録付録付録 A「よくある質問とその回答(「よくある質問とその回答(「よくある質問とその回答(「よくある質問とその回答(FAQ)」)」)」)」

よくある質問と回答をリストアップしています。

用語集用語集用語集用語集

関連資料関連資料関連資料関連資料詳細な情報は、オラクル社の次のリソースを参照してください。

� Oracle ドキュメント・セット

� 『Oracle9i Database for Windows NT インストレーション・ガイド』

� 『Oracle9i Real Application Clusters インストレーションおよび構成』

� 『Oracle9i Real Application Clusters 概要』

� 『Oracle9i Real Application Clusters 管理』

� 『Oracle9i Net Services 管理者ガイド』

� 『Oracle9i Real Application Clusters 配置およびパフォーマンス』

� Oracle Enterprise Manager ドキュメント

リリース・ノート、インストール・ドキュメント、ホワイト・ペーパー、またはその他の関係資料を無償でダウンロードするには、OTN-J(Oracle Technology Network Japan)にアクセスしてください。OTN-J を利用する前に、オンライン登録が必要です。次の URL で登録できます。

http://otn.oracle.co.jp/membership/

OTN-J のユーザー名およびパスワードをすでにお持ちの場合は、次の OTN-J の Web サイトのドキュメント・セクションに直接アクセスできます。

http://otn.oracle.co.jp/document/

ix

Page 12: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

表記規則表記規則表記規則表記規則ここでは、このマニュアルの本文およびサンプル・コードで使用される表記規則について説明します。表記規則は次の 3 種類です。

� 本文の表記規則

� サンプル・コードの表記規則

� Microsoft Windows オペレーティング・システムの表記規則

本文の表記規則本文の表記規則本文の表記規則本文の表記規則本文中では、特定の用語をより簡単に識別できるように、様々な表記規則を使用しています。次の表は、本文中で使用される表記規則とその使用例を説明したものです。

規則規則規則規則 意味意味意味意味 例例例例

太字太字太字太字 太字は、本文中で定義されている用語、または用語集で説明されている用語、あるいはその両方を示します。

この句を指定する場合、索引構成表索引構成表索引構成表索引構成表を作成します。

大文字(固定幅フォント)

大文字固定幅フォントは、システムによって指定される要素を示します。これらの要素には、パラメータ、権限、データ型、Recovery Manager のキーワード、SQL の

キーワード、SQL*Plus またはユーティリ

ティのコマンド、パッケージ、メソッドの他に、システムで表示される列名、データベースのオブジェクトおよび構造、ユーザー名およびロールがあります。

この句は NUMBER列に対してのみ指定できます。

BACKUPコマンドを使用して、データベースを

バックアップできます。

USER_TABLESデータ・ディクショナリ・ビュー

の TABLE_NAME列を問い合せます。

DBMS_STATS.GENERATE_STATSプロシージャを

使用します。

小文字(固定幅フォント)

小文字固定幅フォントは、実行可能ファイル、ファイル名、ディレクトリ名、およびユーザー指定のサンプル要素を示します。これらの要素には、コンピュータ名およびデータベース名、ネット・サービス名、および接続識別子の他に、ユーザー指定のデータベースのオブジェクトおよび構造、列名、パッケージおよびクラス、ユーザー名およびロール、プログラム・ユニット、およびパラメータ値があります。

注意注意注意注意 :    一部のプログラム要素では、大文字

と小文字の組合せが使用されます。これらの要素は、表示どおりに入力します。

sqlplusを入力して、SQL*Plus を開きます。

パスワードは、orapwdファイルで指定されてい

ます。

/disk1/oracle/dbsディレクトリのデータファ

イルおよび制御ファイルをバックアップします。

department_id、department_nameおよび

location_id列は、hr.departments表にあり

ます。

QUERY_REWRITE_ENABLED初期化パラメータを

trueに設定します。

oeユーザーとして接続します。

JRepUtilクラスにより、これらのメソッドが実

装されます。

x

Page 13: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

サンプル・コードの表記規則サンプル・コードの表記規則サンプル・コードの表記規則サンプル・コードの表記規則サンプル・コードは、SQL、PL/SQL、SQL*Plus またはその他のコマンドライン文を示します。これらは固定幅フォントで示され、次の例のように、通常の本文とは区別されています。

SELECT username FROM dba_users WHERE username = 'MIGRATE';

次の表は、サンプル・コードで使用される表記規則とそれらの使用例を説明したものです。

小文字(固定幅フォント)イタリック

小文字固定幅イタリック・フォントは、プレースホルダまたは変数を表します。

parallel_clauseを指定できます。

Uold_release.SQLを実行します。

old_releaseは、アップグレード前にインス

トールしたリリースを表します。

規則規則規則規則 意味意味意味意味 例例例例

[ ] 大カッコは、1 つ以上のオプション項目を囲

みます。大カッコは入力しないでください。

DECIMAL (digits [ , precision ])

{ } 中カッコは複数の項目を囲み、そのうちの1 つを選択します。中カッコは入力しないで

ください。

{ENABLE | DISABLE}

| 垂直バーは、大カッコまたは中カッコ内にある複数のオプションの選択を表します。オプションの 1 つを入力します。垂直バー

は入力しないでください。

{ENABLE | DISABLE}

[COMPRESS | NOCOMPRESS]

... 水平の省略記号は、次のいずれかを表します。

� 例に直接関係のないコードの一部を省略

� コードの一部の繰り返しが可能

CREATE TABLE ... AS subquery;

SELECT col1, col2, ... , coln FROM employees;

.

.

.

垂直の省略記号は、例に直接関係のないコードの数行を省略したことを表します。

その他の表記規則 大カッコ、中カッコ、垂直バーおよび省略記号以外の記号は、次のように入力します。

acctbal NUMBER(11,2);

acct CONSTANT NUMBER(4) := 3;

イタリック イタリックのテキストはプレースホルダまたは変数を示し、そこに特定の値を指定します。

CONNECT SYSTEM/system_password

DB_NAME = database_name

規則規則規則規則 意味意味意味意味 例例例例

xi

Page 14: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

Microsoft Windows オペレーティング・システムの表記規則オペレーティング・システムの表記規則オペレーティング・システムの表記規則オペレーティング・システムの表記規則次の表は、Microsoft Windows オペレーティング・システムの表記規則とその使用例を説明したものです。

大文字 大文字は、システムによって指定される要素を示します。ユーザーが定義する語句と区別するために、大文字で示しています。語句が大カッコ内に表示されない場合は、記述どおりの順序とスペルで入力します。ただし、これらの語句には大文字と小文字の区別がないため、小文字で入力できます。

SELECT last_name, employee_id FROM employees;

SELECT * FROM USER_TABLES;

DROP TABLE hr.employees;

小文字 小文字は、ユーザーが指定するプログラム要素を示します。たとえば、小文字は表、列またはファイルの名前を示します。

注意注意注意注意 :    一部のプログラム要素では、大文字

と小文字の組合せが使用されます。これらの要素は、表示どおりに入力します。

SELECT last_name, employee_id FROM employees;

sqlplus hr/hr

CREATE USER mjones IDENTIFIED BY ty3MU9;

規則規則規則規則 意味意味意味意味 例例例例

「スタート」→を選択

プログラムの起動方法。 Oracle Database Configuration Assistant を起動す

るには、「スタート」→「プログラム」→「Oracle - HOME_NAME」→「Configuration and Migration Tools」→「Database Configuration Assistant」を選択します。

ファイル名およびディレクトリ名

ファイル名およびディレクトリ名では、大/ 小文字を区別しません。左山カッコ(<)、右山カッコ(>)、コロン(:)、二重引用符

(")、スラッシュ(/)、垂直バー(|)およ

びダッシュ(-)の特殊文字は、使用できま

せん。円記号(¥)は、引用中で使用されて

いる場合でも、要素のセパレータとして扱われます。ファイル名が ¥¥ で始まる場合、

Windows はそれが汎用命名規則を使用して

いると判断します。

c:¥winnt"¥"system32は、

C:¥WINNT¥SYSTEM32と同じです。

規則規則規則規則 意味意味意味意味 例例例例

xii

Page 15: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

C:¥> 現行のハード・ディスク・ドライブのWindows コマンド・プロンプトを示しま

す。コマンド・プロンプト中でのエスケープ文字は、カレット(^)です。プロンプト

は、現在作業中のサブディレクトリを示しています。このマニュアルでは、コマンド・プロンプトと呼びます。

C:¥oracle¥oradata>

Windows コマンド・プロンプトでは、二重

引用符(")のエスケープ文字として、円記

号(¥)が必要な場合があります。丸カッコ

および一重引用符(')には、エスケープ文

字は不要です。特殊文字およびエスケープ文字の詳細は、Windows オペレーティン

グ・システムのマニュアルを参照してください。

C:¥>exp scott/tiger TABLES=emp QUERY=¥"WHERE job='SALESMAN' and sal<1600¥"

C:¥>imp SYSTEM/password FROMUSER=scott TABLES=(emp, dept)

HOME_NAME Oracle ホーム名を示します。ホーム名は、

英数字 16 文字までです。ホーム名で使用で

きる特殊文字は、アンダースコアのみです。

C:¥> net start OracleHOME_NAMETNSListener

規則規則規則規則 意味意味意味意味 例例例例

xiii

Page 16: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

ORACLE_HOMEおよびORACLE_BASE

Oracle8 リリース 8.0 以下のリリースでは、

Oracle コンポーネントをインストールする

と、サブディレクトリはすべて、ORACLE_HOMEディレクトリ(デフォルト

では次のとおり)に置かれました。

� Windows NT の場合は C:¥orant

� Windows 95 の場合は C:¥orawin95

� Windows 98 の場合は C:¥orawin98

今回のリリースは、Optimal Flexible Architecture(OFA)のガイドラインに準拠

しています。すべてのサブディレクトリが上位の ORACLE_HOMEディレクトリの下

にあるわけではありません。ORACLE_BASEという 上位ディレクトリがあり、デフォルトでは C:¥oracleです。コンピュータ

に Oracle9i リリース 1(9.0.1)をインス

トールし、他の Oracle ソフトウェアをイン

ストールしない場合、 初の Oracle ホー

ム・ディレクトリのデフォルト設定は、C:¥oracle¥ora90です。Oracle ホーム・

ディレクトリは、ORACLE_BASEの直下に

置かれます。

このマニュアルでは、ディレクトリ・パスの例は、すべて OFA 表記規則に従っていま

す。

OFA 準拠の追加情報、および OFA に準拠

していないディレクトリでの Oracle 製品の

インストールに関する情報は、『Oracle9i Database for Windows スタート・ガイド』

を参照してください。

%ORACLE_HOME%¥rdbms¥adminディレクトリに

移動します。

規則規則規則規則 意味意味意味意味 例例例例

xiv

Page 17: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

特別な注意事項特別な注意事項特別な注意事項特別な注意事項このマニュアルで説明されているルーチンおよびデータ構造体は、UNIX、Windows NT および Windows 2000 で共通の、Real Application Clusters 汎用のインタフェースです。Windows NT および Windows 2000 環境用には、一部でカスタマイズと拡張が行われていますが、主要機能、特に CM および IPC 仕様に関するインタフェースは、すべて UNIX と共通です。

このマニュアルでは、Real Application Clusters インタフェース・ルーチンに、Windows NT システムに固有の命名規則を採用しています。命名規則は、インタフェースを理解する上では役に立ちますが、定義されているリンケージ・モデルのために、かなり恣意的です。このリンケージ・モデルでは、この仕様で説明されるルーチンは DLL における順序型の関数表エントリとして定義されており、読みやすい名前ではありません。つまり、DLL 内のエクスポートされた関数名は、それに対応する .DEF ファイルで指定された順序に従う必要があります。

移植移植移植移植相違点を明記していないかぎり、すべてのデータ型およびパラメータは、UNIX、Windows NT および Windows 2000 で共通になるよう定義されています。そのため、ある環境から別の環境への移植が容易です。

xv

Page 18: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

xvi

Page 19: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

Oracle Cluster ソフトウェアの新機能ソフトウェアの新機能ソフトウェアの新機能ソフトウェアの新機能

この章では、Oracle Cluster software for Oracle9i リリース 1(9.0.1)の新機能、およびその他の情報について説明します。

Real Application Clusters の機能は、次の項で説明します。

� Real Application Clusters リリース 1(9.0.1)の機能

xvii

Page 20: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

Real Application Clusters リリースリリースリリースリリース 1((((9.0.1)の機能)の機能)の機能)の機能Real Application Clusters は、Oracle の従来のクラスタ対応ソフトウェア・リリースの機能を強化した新しいアーキテクチャで、スケーラビリティと可用性の高い機能を提供します。Real Application Clusters では、キャッシュ・フュージョンの新たなフェーズを導入しています。これは、ディスク I/O を介さずに複数のクラスタ・ノード間でキャッシュの一貫性を保証する画期的なテクノロジです。キャッシュ・フュージョンの 初のフェーズは、読取り/ 書込みの同時データ・アクセスを改善するために、Oracle8i で導入されました。Real Application Clusters はこの機能を強化して、複数のクラスタ・ノード間での読取り / 読取り、読取り / 書込み、書込み / 書込みの同時実行性を 適化しています。Real Application Clusters に導入された新しい機能によって、Oracle のクラスタ・ソフトウェアのパフォーマンスとスケーラビリティが強化されました。

Oracle Cluster Setup WizardOracle Cluster Setup Wizard を使用して、Windows NT および Windows 2000 に、OSD のレイヤー・ソフトウェアをインストールできます。

I/O モジュールの廃止モジュールの廃止モジュールの廃止モジュールの廃止I/O モジュールは現在使用していません。この機能は CMSRVR に移行されました。

関連資料関連資料関連資料関連資料 : このマニュアルに記載されていない新機能の情報は、『Oracle9i Real Application Clusters 概要』の「Real Application Clusters の機能」を参照してください。

関連資料関連資料関連資料関連資料 : OSD ソフトウェアのインストールの詳細は、『Oracle9i Database for Windows インストレーション・ガイド』を参照してください。

xviii

Page 21: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

Real Application Clusters for Win

1

Real Application Clusters for Windows のののの

概要概要概要概要

この章では、Real Application Clusters の概要を説明します。

この章の項目は次のとおりです。

� バックグラウンド

� Real Application Clusters の機能

� Real Application Clusters for Windows

dows の概要 1-1

Page 22: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

バックグラウンド

バックグラウンドバックグラウンドバックグラウンドバックグラウンドこの仕様によって、Real Application Clusters API が定義され、Oracle9i 用の OSD コンポーネントを共通で開発できるようになります。このため、様々なプラットフォーム用のコンポーネントを、 小限のオーバーヘッドで簡単に開発できます。

この仕様によって、定義済のコンポーネントのベースライン OSD の実装を、コアの Oracle製品とは別に開発、テストおよび展開して、Oracle 製品と統合する際に、テストや修正の労力を 小限にすることができます。

Real Application Clusters の機能の機能の機能の機能Real Application Clusters では、複数のノード上でユーザーおよびプロセスが、1 つのデータベースを同時に操作できます。

Real Application Clusters for WindowsWindows NT と Windows 2000 の同一性は、ベンダー特有のオペレーティング・システムの実装用に調整された、グローバル・キャッシュ・サービスグローバル・キャッシュ・サービスグローバル・キャッシュ・サービスグローバル・キャッシュ・サービス(GCS)およびグローバル・エングローバル・エングローバル・エングローバル・エンキュー・サービスキュー・サービスキュー・サービスキュー・サービス(GES)の個別のポートは必要ありません。かわりに、RDBMS クライアント、および 1 つに統合された GCS と GES テクノロジが改善されており、スケーラビリティなどの様々な属性が、すべての実装において一貫した方法で発展しました。

Windows NT および Windows 2000 の Real Application Clusters API では、Real Application Clusters 製品を Windows NT および Windows 2000 に移植する際に、各ベンダーが、よりコンパクトに定義されたインタフェースおよび要件に集中できます。

関連資料関連資料関連資料関連資料 : Windows 固有ではない Real Application Clusters の機能は、『Oracle9i Real Application Clusters 概要』を参照してください。

1-2 Oracle9i Real Application Clusters クラスタ・インタフェース詳細

Page 23: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

Real Application Clusters for Windows

図図図図 1-1 Windows NT およびおよびおよびおよび Windows 2000 のののの Real Application Clusters 環境環境環境環境

ARCH LGWR DBWR

Oracle インスタンスインスタンスインスタンスインスタンス

SGA

PE

PMON SMON SRVRSRVR

SRVR

GCS

Real Application Clusters のののの OSD

ARCHLGWRDBWR

Oracle インスタンスインスタンスインスタンスインスタンス

SGA

PE

PMON SMON SRVRSRVR

SRVR

GCS

Real Application Clusters APIReal Application Clusters API

IPC StartCM.DLL

CMSRVR

CM

IPC StartCM.DLL

CMSRVR

CM

LGWR

SMON SRVRSRVR

SRVR

IPC

Real Application Clusters for Windows の概要 1-3

Page 24: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

Real Application Clusters for Windows

1-4 Oracle9i Real Application Clusters クラスタ・インタフェース詳細

Page 25: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

OSD モジュ

2

OSD モジュールモジュールモジュールモジュール

この章では、Real Application Clusters API に準拠している OSD モジュールについて説明します。

この章の項目は次のとおりです。

� 移植に関する注意事項

� OSD の概要

� OSD モジュール

� OSD モジュールの詳細

� OSD モジュール・ルーチン

� OSD モジュールの実装

� バイナリ互換性

ール 2-1

Page 26: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

移植に関する注意事項

移植に関する注意事項移植に関する注意事項移植に関する注意事項移植に関する注意事項今回のリリースの OSD では、クラスタ・システム業界の意向を反映し、ハードウェアとインターコネクトのテクノロジにおける進歩をさらに推し進め、Real Application Clusters 環境のスケーラビリティを強化しています。OSD の今後のバージョンでは、ハードウェア、インターコネクトまたは I/O パスに対する変更を取り込んで有効化して、Real Application Clusters 環境のスケーラビリティ、可用性、有用性がさらに強化される予定です。

OSD の概要の概要の概要の概要この項では、Real Application Clusters API に準拠している OSD モジュールおよび OSD コンポーネントについて説明します。

OSD は、いくつかのソフトウェア・コンポーネント、またはモジュールで構成されています。これらのモジュールは標準で、オラクル社からも提供されますが、プラットフォーム・パートナにより開発される場合もあります。プラットフォーム・パートナが修正または開発した場合、これらのモジュールはオラクル社の製品にプラグインされ、ベンダーのプラットフォームおよび個々のハードウェアの独自の機能を統合します。

複数の OSD モジュールのインスタンスは、ベンダーでサポートされます。それぞれのインスタンスを使用して、Oracle の環境と様々なベンダーが提供するプラットフォーム、またはオペレーティング・システム環境を統合することが可能です。これらの OSD モジュールのインスタンスは、このマニュアルに記載されている Real Application Clusters の要件およびインタフェースの仕様に準拠したうえで、プラットフォーム固有のサービスを提供するよう設計する必要があります。

このマニュアルに記載されている OSD コンポーネントは、Real Application Clusters およびパラレル実行が、適切なプラットフォームで機能するように定義する必要があります。オラクル社の開発した Real Application Clusters およびパラレル実行製品は、特定のプロセッサ・タイプに対して提供されており、適切な動作をテストおよび検証されています。ベンダーが独自の OSD モジュールを開発する場合は、これらのモジュールを、オラクル社が開発した Real Application Clusters およびパラレル実行製品に統合し、テストおよび検証する必要があります。

2-2 Oracle9i Real Application Clusters クラスタ・インタフェース詳細

Page 27: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

OSD の概要

次の図は、Real Application Clusters API における OSD コンポーネントを表しています。

図図図図 2-1 OSD のコンポーネントのコンポーネントのコンポーネントのコンポーネント

共有ディスク

および共通データベース・

ファイル

ARCH LGWR DBWR

SGA

PQ

PMON SMON SRVRSRVR

SRVR

GCS

Real Application Clusters ののののOSD

ARCHLGWRDBWR

SGA

PQ

PMON SMON SRVRSRVR

SRVR

GCS

CM.DLL

CMSRVR

CM

CM.DLL Start

CMSRVR

CM

Real Application Clusters APIReal Application Clusters API

IPC StartIPC

Oracle インスタンスインスタンスインスタンスインスタンス Oracle インスタンスインスタンスインスタンスインスタンス

OSD モジュール 2-3

Page 28: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

OSD モジュール

OSD モジュールモジュールモジュールモジュールReal Application Clusters API でサポートされている OSD モジュールの仕様は、いくつかのグループに分かれており、個別で OSD コンポーネントと分離して実装された関数セットが定義されています。

これらのコンポーネントは、独立した DLL モジュールとして存在するよう定義されており、Real Application Clusters 環境によって個々にロードする必要があります。

各モジュールは、Real Application Clusters API のサブセットを定義します。OSD モジュールのグループ全体で、Real Application Clusters API に対する総合的なサポートを提供します。

Cluster ManagerCluster Manager(CM)は、プロセスの状態(データベース・インスタンスの状態など)を監視します。グローバル・エンキュー・サービス・モニター LMON は、GCS の状態を監視するバックグラウンド・プロセスで、CM から登録および登録解除を行います。

イベントの発生時には、すべての Real Application Clusters インスタンスが同じメンバーシップ情報を取得することが重要です。変更の通知によって、適切な Real Application Clusters のリカバリ処理が開始されます。いずれかのノードまたはインスタンスが非アクティブ、またはシステム内で正しく機能していないと判断された場合は、CM がそのノードまたはインスタンス上のすべてのプロセスを終了します。したがって、Oracle のコードを実行しているプロセスまたはスレッドは、そのノードまたはインスタンスが、システムのアクティブ・メンバーであると想定できます。

表表表表 2-1 OSD モジュールのルーチンモジュールのルーチンモジュールのルーチンモジュールのルーチン

OSD 名名名名 説明説明説明説明

CM Cluster Manager: クラスタの状態を検出および判断するために、Cluster Manager OSD の実装が提供する要件を定義します。このモジュールでは、

Real Application Clusters において実装で提供する必要のある、基本的な

ノード管理のインタフェースも定義します。

IPC プロセス間通信 : 異なるノード上の Real Application Clusters インスタン

ス間で、高信頼性のメッセージ送信をサポートするために、IPC OSD の実

装が提供する要件を定義します。IPC モジュールは、ネットワークベース

のインターコネクトをサポートする実装のために定義されています。

START 起動 : Startup OSD(オプション)で実装定義されている起動セマン

ティックの要件を定義します。また、OSD の実装固有のシャットダウン

(オプション)の要件も定義します。

2-4 Oracle9i Real Application Clusters クラスタ・インタフェース詳細

Page 29: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

OSD モジュール

障害の発生時には、ユーザー・アプリケーションに対し透過的にリカバリが行われます。CM は、システムを自動的に再構成して障害のあるノードおよびインスタンスを切り離し、状態を GCS に通知します。その後で、GCS は障害ノードまたはインスタンスから分散データをリカバリします。Real Application Clusters は、ここでデータベースを正常な状態にリカバリできます。

GCS は、CM に対してタイムリーで適切な情報を要求します。GCS が必要な情報を取得できない場合は、インスタンスが停止されます。

CM は、次の 3 つのタイプの処理を実行します。

� ノードの監視

� プロセス・グループの管理

� I/O の制限

CM は、共有ディスクへのアクセスを管理し、様々なクラスタ・リソース(ノード、ネットワーク、インスタンス)の状態を監視します。

ノードの監視ノードの監視ノードの監視ノードの監視ノードの監視では、次の処理を行います。

� クラスタ環境で Real Application Clusters が必要とする、基本的なノード管理のインタフェース・モジュールを提供します。

� Real Application Clusters 環境で、クラスタ上のクラスタ・メンバーシップの共通ビューによって、メンバーシップ状態を検出および追跡できるようにします。

� すべてのノード上で稼働し、すべてのノードに現行のメンバーシップを問い合せることによって、クラスタのトポロジを監視します。

� イベントを送っているアクティブ・ノードの状態変更を検出し、変更を診断して、すべてのノード間で新しい共有および一貫性のある状態を調整します。

� Real Application Clusters に、メンバーシップの実際の変更を通知します。

プロセス・グループの管理プロセス・グループの管理プロセス・グループの管理プロセス・グループの管理CM は、有効になっているグループを判断し、インスタンス・メンバーを管理します。各インスタンスは、データベース固有のグループに登録されます。この CM 機能は、以前のリリースでは、グループ・メンバーシップ・サービス(PGMS)によって行われていました。

OSD モジュール 2-5

Page 30: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

OSD モジュールの詳細

I/O の制限の制限の制限の制限Real Application Clusters の環境は、調整済の Real Application Clusters インスタンスを実行する全ノード間における同時ディスク共有をサポートする、基礎となるオペレーティング・システムまたはクラスタの実装に依存します。スイッチオーバーをベースとするテクノロジとは異なり、すべての Real Application Clusters インスタンスは、アクティブで、共有された物理データベースに定義されているデータを同時に操作します。Real Application Clusters で並列なスケーラビリティが実現できるのは、この機能をベースとしているためです。GCS コンポーネントは、データの一貫性と整合性を保持しながら、共有データベースへの同時アクセスを調整します。

CM モジュールは、アクティブなクラスタには含まれないと判断されるノードを、共有 Real Application Clusters データ・ファイルにアクセスさせないようにして、データの一貫性と整合性を保証します。

プロセス間通信(ノード間)プロセス間通信(ノード間)プロセス間通信(ノード間)プロセス間通信(ノード間)Real Application Clusters の機能上の利点の大半は、相互接続された複数のマシン上で稼働するということがベースとなっています。Real Application Clusters は、プロセス間通信

(IPC)モジュールを利用して、この利点を実現しています。

IPC は、インスタンス間で高信頼性のメッセージを送受信するために、Real Application Clusters 環境で必要なプロトコルとインタフェースを定義します。メッセージは、このインタフェースで通信するための基本的な論理ユニットです。IPC の中枢となる機能は、主に非同期のキュー・メッセージ・モデルをベースとして構築されています。IPC は、ハードウェアで可能な限り高速に、送信 / 受信が別々のメッセージとして設計されます。また、 適化された通信レイヤーで、様々なサービスを実装できます。Real Application Clusters は、これらの仕組みを使用してすべてのプロセス間通信を行うことができます。

起動起動起動起動

起動(START)モジュールは、インスタンスを起動する際に、特定の順序で Real Application Clusters コンポーネントを起動します。この起動順序は、ベンダーによって定義されます。

OSD モジュールの詳細モジュールの詳細モジュールの詳細モジュールの詳細OSD モジュールは、Real Application Clusters が機能するために必要なプラグイン機能を記述するように設計されています。

OSD モジュールの記述では、通常、Real Application Clusters 環境のプロセスおよびスレッドは、定義されたインタフェースのクライアントであると想定されます。

2-6 Oracle9i Real Application Clusters クラスタ・インタフェース詳細

Page 31: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

OSD モジュール・ルーチン

OSD モジュール・ルーチンモジュール・ルーチンモジュール・ルーチンモジュール・ルーチン次の表は、各 OSD コンポーネントで定義されるルーチンの概要を表しています。詳細は、各 OSD の項に記載されているルーチンの詳細な説明を参照してください。

表表表表 2-2 CM OSD モジュール・ルーチンモジュール・ルーチンモジュール・ルーチンモジュール・ルーチン

関数名関数名関数名関数名 DLL 番号番号番号番号 説明説明説明説明

CMGetVersionInfo() 1 クライアント間でバージョン情報のネゴシエーションを行います。

CMGetDataTypeSize() 2 定義されているデータ型のサイズ情報を、クライアントに返します。

CMGetAttributeValue() 3 定義されている属性の情報を、クライアントに返します。

CMInitContext() 4 CM のコンテキストを初期化します。

CMDeleteContext() 5 以前に初期化されたコンテキストを削除します。

CMTrace() 6 トレースのオン / オフを切り替えます。

CMGetNodeNum() 7 ローカル・ノードのノード番号を取得します。

CMGetNodeName() 8 指定したノード番号のノード名を取得します。

CMGetNodeList() 9 クラスタ内に構成されているノードを返します。

CMGroupGetList 10 プロセス・グループのアクティブなメンバーを問合せします。

CMGroupJoin 11 プライマリ・メンバーとして特定のグループに登録します。

CMGroupExit 12 グループからプライマリ・メンバーを登録解除します。

CMGroupRegister 13 プロセス・グループに、プロセスをスレーブ・メンバーとして登録します。

CMGroupDeregister 14 コール側をスレーブ・メンバーとして登録解除します。

CMGroupGetStatus 15 クライアントが所属するプロセス・グループで、状態が変更されるまで待機します。グループ状態の変更が有効になったとき、またはタイムアウトに達したときに終了します。

OSD モジュール 2-7

Page 32: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

OSD モジュール・ルーチン

CMGetMemberPrivateInfo 16 CM に問い合せて、同じグループ内のメンバーにつ

いてプライベート・メンバー・データを取得します。この情報は、CMGroupJoin()を使用してグ

ループに参加したときに、メンバーによって提供されます。

CMGetMemberPublicInfo 17 指定したプロセス・グループ・メンバーによって公開されているパブリック・データ情報を問合せします。

表表表表 2-3 IPC OSD モジュール・ルーチンモジュール・ルーチンモジュール・ルーチンモジュール・ルーチン

関数名関数名関数名関数名 DLL 番号番号番号番号 説明説明説明説明

IPCGetVersionInfo() 1 クライアント間でバージョン情報のネゴシエーションを行います。

IPCGetDataTypeSize() 2 定義されているデータ型のサイズ情報を、クライアントに返します。

IPCGetAttributeValue() 3 定義されている属性の情報を、クライアントに返します。

IPCInitContext() 4 IPC のコンテキストを初期化します。

IPCDeleteContext() 5 IPC のコンテキストを削除します。

IPCInitPort() 6 新しいポートを初期化し、新規にポート ID をバイ

ンドします。

IPCDeletePort() 7 既存のポートを削除します。

IPCConnect() 8 リモート・ポートに接続します。

IPCDisconnect() 9 確立されていた接続を切断します。

IPCSendMsg() 10 接続によって示されているリモート・ポートにベクター・メッセージを送信します。

IPCReceiveMsg() 11 ポートからの受信ベクター・メッセージを取得します。

IPCGetRequestInfo() 12 未処理または完了した要求構造体から情報を取得します。

IPCWait() 13 要求のコンテキストまたはリストを待機します。

IPCCancel() 14 要求のコンテキストまたはリストを取り消します。

表表表表 2-2 CM OSD モジュール・ルーチンモジュール・ルーチンモジュール・ルーチンモジュール・ルーチン(続き)(続き)(続き)(続き)

関数名関数名関数名関数名 DLL 番号番号番号番号 説明説明説明説明

2-8 Oracle9i Real Application Clusters クラスタ・インタフェース詳細

Page 33: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

OSD モジュール・ルーチン

IPCPost() 15 未処理の IPC 要求のすべてのコンテキストを中断

します。

IPCMapMemory 16 プロセスの仮想アドレス空間の連続エクステントを、リモート・コピー操作で使用できるようにマップまたは登録します。

IPCUnmapMemory 17 以前にマップされていたメモリー領域をマップ解除します。

IPCPrepareBuffer 18 グローバルで一意のバッファ識別子(BID)を作成

します。この識別子は、リモートにマップされた領域に、前に確保されたバッファを一意にアドレスします。

IPCUnprepareBuffer 19 マップされた領域に以前に確保されていたバッファを解放します。

IPCRemoteCopy 20 ローカルのソース・バッファから、リモートのターゲット・バッファへデータをコピーします。

IPCTrace 22 指定したコンテキストに対するトレースのオン /オフを切り替えます。

表表表表 2-4 START OSD モジュール・ルーチンモジュール・ルーチンモジュール・ルーチンモジュール・ルーチン

関数名関数名関数名関数名 DLL 番号番号番号番号 説明説明説明説明

STARTGetVersionInfo() 1 クライアント間でバージョン情報のネゴシエーションを行います。

STARTStartup() 2 クライアントが、OSD 実装で登録された起動タス

クを実行するよう要求します。

STARTShutdown() 3 クライアントが、OSD 実装で登録された停止タス

クを実行するよう要求します。

表表表表 2-3 IPC OSD モジュール・ルーチンモジュール・ルーチンモジュール・ルーチンモジュール・ルーチン(続き)(続き)(続き)(続き)

関数名関数名関数名関数名 DLL 番号番号番号番号 説明説明説明説明

OSD モジュール 2-9

Page 34: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

OSD モジュールの実装

OSD モジュールの実装モジュールの実装モジュールの実装モジュールの実装この項では、次の OSD モジュール実装について説明します。

� DLL の実行コンテキスト

� OSD の一般規則

� DLL とレジストリのロード

� DLL のルーチンへのバインド

� OSD のバージョン・ネゴシエーション

Windows NT および Windows 2000 では、それぞれの OSD モジュールがすべて識別、場所を特定およびロードされ、共通した簡単な方法で、Real Application Clusters 環境にバインドされます。このプロセスを簡単にするために、他の OSD モジュールとは独立して実装し、1 つのスタンドアロン DLL としてパッケージする必要があります。

サポートされている OSD モジュールでは、同等な DLL に対して常に 1 対 1 にマッピングされます。各モジュールの DLL には一意の名前を定義する必要があります。通常は、サポートしている機能を表す名前が定義されますが、これは必須ではなく、慣例的なものです。

OSD モジュールの DLL は、Windows NT および Windows 2000 のレジストリを介して、Real Application Clusters 環境によって識別および場所が特定され、データベースのブートストラップ・フェーズの際に(つまり、データベースの操作前に)ロードされます。

それぞれの OSD モジュールの DLL は、サポートしている機能のリストを、序数によってエクスポートする必要があります。内部のモジュール関数名によるエクスポートは推奨されません。Oracle は、序数のみに基づいて関数をバインドし、他のエクスポート情報は無視します。モジュールでは、必要な関数、およびこの仕様で示されている序数をサポートする必要があります。実装されていないオプションのルーチンは、関連する関数番号に論理的に関連付けられています。テストの際には、サポートされていない序数の関数に対する単一のスタブ・エラー・ハンドラが推奨されます。

この仕様の中でオプションと指定された OSD モジュール・ルーチンにはすべて、実装がサポートされているかどうかを Real Application Clusters 環境に通知するために定義されたモジュール属性があります。Oracle は、該当する属性によってサポートされていると示されていないオプションのルーチンはコールしません。

それぞれの OSD モジュールは、Oracle の環境によって問い合せられるバージョン情報もエクスポートする必要があります。このバージョン情報は、バージョン固有のバイナリ互換性情報を表します。同様に、データベースは DLL にバージョン情報を表し、バージョン・ネゴシエーションを双方向で行う方法をサポートします。OSD モジュールの実装では、Real Application Clusters のバージョン情報をチェックして、互換性を確認します。

Real Application Clusters API、および関連する OSD モジュール仕様の設計では、この仕様で明示的に定義されていない機能には依存しないという概念を基本としています。これによって、サポートの方法について、実装の自由度が高くなります。定義されている主な要件と一致するかぎり、必要なサービスの実装はプロバイダに任されます。

2-10 Oracle9i Real Application Clusters クラスタ・インタフェース詳細

Page 35: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

OSD モジュールの実装

たとえば、独立した 2 つのベンダーは、CM サービスをそれぞれに実装できます。1 つのベンダーが個別のプロセスとして CM を実装し、他のベンダーが、DLL の初期化の際に作成されるプライベート・スレッドの実装を担当します。

実装に関係なく、定義されている OSD モジュールのすべての実装インスタンスは、同一の機能を持つように実装する必要があります。このようにすると、Real Application Clustersは、様々なソフトウェア環境とハードウェア環境で、同じように機能します。

DLL の実行コンテキストの実行コンテキストの実行コンテキストの実行コンテキスト通常、Real Application Clusters 環境の実行イメージにバインドされている OSD モジュールの DLL は、定義されたインタフェースを介した変数および構造体にアクセスを制限し、不要な内部メモリーの割当てが発生しないようにする必要があります。また、DLL は、実行されるプロセスやスレッドのコンテキストを認識していないため、割り当てられる内部 OSDモジュール・メモリーは、クライアントのプロセス領域でアクセスする必要がある場合があります。

Real Application Clusters API では、このような問題を解決するために、Oracle が OSD 用に割り当てる構造体を定義しています。これらの構造体は OSD によってサイズが決定され、内容は OSD によって定義されます。Oracle では、クライアントのコンテキスト間でこれらの構造体を共有できるように、適切な関数にポインタを渡して、割り当てられた領域のタイプを管理します。実装では、割当てが発生しているコンテキストに対して、すべての内部割当てを個別に実行して、共有構造体用にあらかじめ定義されている構造体のいずれかを使用して、Oracle 製品間での互換性を保証します。

また、OSD モジュール割当てのサイズにも注意する必要があります。これらの割当ての作成時には、プロセスのコンテキストは基本的には認識されないため、大量の割当てが発生すると、クライアントがコールを行うための操作領域が制限される可能性があります。通常は、少量のプライベートな割当ては有効になりますが、実装では大量の割当ては避けます。B(バイト)、または KB 単位の割当ては可能ですが、MB 単位の割当ては行わないでください。

OSD の一般規則の一般規則の一般規則の一般規則OSD のインタフェースには、一連の OSD コンポーネントで同様に実装される共通のメカニズムが用意されています。具体的には次のものがあります。

� OSD 実装に対する Real Application Clusters メモリー・ブロックの割当て

� 属性

� コンポーネント DLL 変換

Real Application Clusters の環境では、OSD を実装するための構造体に対してメモリーのブロック割当てをサポートしています。ここでは簡単なダイアログがサポートされています。これによって、クライアントがメモリーを割り当ててメモリーを所有している場合でも、メモリー領域の内容とサイズが OSD 実装によって定義されます。クライアントは

OSD モジュール 2-11

Page 36: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

OSD モジュールの実装

XXXGetDataTypeSize()関数をコールし、定義済のデータ型列挙子を渡して OSD が応答できるようにして、対象のメモリー構造体のサイズを取得します。

OSD は、このメモリーの内容を自由に定義できます。ほとんどの場合は、内部のコンテキスト、および必要に応じてその他の適切なステータス情報が格納されます。このメカニズムによって、内部の OSD モジュール割当ての必要性を除去できない場合は、その必要性を 小限にします。ローカル割当ても可能ですが、この場合にはコンテキストに依存せずにアドレス指定ができるように管理する必要があります。Real Application Clusters の割り当てられている構造体領域を使用すると、この処理が簡単になります。構造体用に割り当てられている Real Application Clusters を必要とする実装では、領域は Real Application Clusters プロセスのアドレス空間の範囲外になり、MB 単位の大量の割当てを行うと他のデータベース関数が適切に行われなくなるため、この実装は効率的に行う必要があります。

多くの OSD モジュールは、オプションのルーチンと関数をサポートするように定義されています。また、多くのコンポーネントには、定数の定義( 大メッセージ・サイズ)が含まれており、ベンダー間の実装を区別しています。この仕様によって、OSD モジュールで使用されている Real Application Clusters の属性リストがあらかじめ定義され、独自の機能とサポートされている値が記述されます。Real Application Clusters が OSD DLL をインスタンス化する際には、ロードしたモジュールのコールおよび機能を知るために、モジュール属性を問い合せます。

その他、OSD モジュール間で実装される一般規則として、バージョン・ネゴシエーションがあります。インスタンス化された OSD DLL はそれぞれ、バージョンの不一致が発生しないように、Real Application Clusters と OSD のバージョン・ネゴシエーションを行います。

DLL とレジストリのロードとレジストリのロードとレジストリのロードとレジストリのロードReal Application Clusters の環境では、実行時のダイナミック・リンクを使用して、レジストリに定義されている個別の OSD DLL をロードします。実際の DLL イメージは、OSD 実装の開発者が、¥Software¥Oracle¥OSD9iサブ・キーに設定されている Windows NT および Windows 2000 のレジストリ・キーを使用して指定します。次に、Real Application Clusters がこのサブ・キーに含まれている構成情報を使用して LoadLibrary()をコールすることによって、DLL がロードされます。DLL の実装は、この仕様で定義されているコンテキストおよびメモリー割当ての制約に対応するように、必須の DllEntryPoint()セマンティックを自由に実装します。

注意注意注意注意 : OSD は、必要なサイズにのみ応答するようになっており、埋込みは推奨されません。クライアントは、適切なタイプのメモリー・プールから構造体に対してメモリーを割り当て、構造体で機能するよう定義されている以後のすべての OSD 関数にポインタを渡します。

2-12 Oracle9i Real Application Clusters クラスタ・インタフェース詳細

Page 37: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

OSD モジュールの実装

インストーラの作成インストーラの作成インストーラの作成インストーラの作成Oracle9i Real Application Clusters では、インストーラを含んだ Oracle9i データベースCD-ROM に、デフォルトの OSD がバンドルされています。このインストーラには、Certification Kit は含まれていません。ベンダーは、インストーラを実装する必要があります。ベンダーのインストーラは、必要な OSD DLL をシステムにコピーして、次の OSD レジストリ・キーを設定して OSD を指定するようにする必要があります。

� ¥HKEY_lOCAL_MACHINE¥SOFTWARE¥ORACLE¥OSD9I¥IPCDLL

� ¥HKEY_lOCAL_MACHINE¥SOFTWARE¥ORACLE¥OSD9I¥STARTDLL

� ¥HKEY_lOCAL_MACHINE¥SOFTWARE¥ORACLE¥OSD9I¥CMDLL

I/O フェンス・ドライバのインストールフェンス・ドライバのインストールフェンス・ドライバのインストールフェンス・ドライバのインストールインストーラでは、OraFenceDrv.sysをインストールできます。

I/O フェンス・ドライバをインストールするには、次のようにします。

1. OraFencedrv.sysファイルを %systemroot%¥system32¥driversフォルダにコピーします。

2. Microsoft CreateService API コールを使用して、SERVICE_KERNEL_DRIVERとしてdwServiceTypeセットのサービスを作成します。

3. 次のレジストリ値を設定します。

� レジストリのサービス・キー(OraFenceService)で、Timeout という名前の値(type = REG_DWORD)を作成し、デフォルト値を 2 に設定します。

� System¥¥CurrentControlSet¥¥Control¥¥CrashControlの AutoReboot パラメータの値を読み込み、0x1 との論理和を計算して、その値を書き込みます。

4. OraFencedrv.sysは、CM サービスに依存させることもできます。その場合には、CM サービスの起動時に、自動的に Oracle Fence が起動されます。

関連資料関連資料関連資料関連資料 : OraFenceDrv.sysの詳細は、 3-7 ページの「I/O の制限」を参照してください。

OSD モジュール 2-13

Page 38: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

OSD モジュールの実装

DLL のルーチンへのバインドのルーチンへのバインドのルーチンへのバインドのルーチンへのバインドReal Application Clusters は GetProcAddress()ルーチンを使用して、以後のすべてのOSD コールで使用される内部の関数表を構築します。Real Application Clusters が、必要な関数またはルーチンで NULLを返された場合には、ロードの処理はエラーで終了します。移植キットに用意されているテストでは、任意のルーチンに対する簡単な整合性チェックを行っています。このチェックによって、そのルーチンに属性が定義されており、XXXGetAttribute()のコールで取得された属性が、ルーチンの関数ベクター・ロードの結果と一致することが保証されます。Real Application Clusters 環境には、このようなチェックはありません。有効な関数ベクターが返されるかどうかに関係なく、関連する属性のサポートをシグナルしない場合は、ルーチンはコールされません。

OSD のバージョン・ネゴシエーションのバージョン・ネゴシエーションのバージョン・ネゴシエーションのバージョン・ネゴシエーション通常は、XXXGetVersionInfo()コールを、OSD モジュールの DLL の 初のルーチンにする必要があります。このルーチンは、Real Application Clusters と OSD モジュール間でDLL バージョン情報のネゴシエーションを行う際に使用され、Real Application Clusters 環境で、GetProcAddress()によってアドレスをロードした後で(つまり、他のルーチンのバインドが終了する前に)直接コールされます。

Real Application Clusters が OSD モジュールに渡すバージョン番号の情報は、Real Application Clusters 環境が正しく機能するバイナリ・バージョン・レベルを表します。OSD モジュールは、この OSD のリビジョン番号に準拠していることを検証し、該当するサポート・レベルと一致しない場合はエラーを返す必要があります。

OSD モジュールは同様に、ビルトインのリビジョン番号もしくはコンパイルされた番号を渡します。Real Application Clusters 環境は、OSD モジュールのリビジョン番号を使用してバージョンが一致していることを確認するため、同様のバイナリ互換性チェックを行います。リビジョン番号が一致しない場合はエラーとなり、ロード処理が終了して、関連するデータベースが停止します。

OSD モジュールのバージョン・ネゴシエーションで使用されるバージョン番号は、Oracle RDBMS のバージョン番号ではなく、Real Application Clusters API 仕様のバージョン番号です。Oracle では、Real Application Clusters 製品の各リリースに対して、Real Application Clusters API のバージョン番号を提供しています。この情報は、テストや検証のプロセスの前に、パートナに提供されます。Real Application Clusters API のバージョン番号は、既存の OSD モジュールとのバイナリ互換性に影響するような変更をオラクル社が要請しないかぎり、Oracle 製品のほとんどのリリースで、変更されません。リリース番号は、拡張機能と、バイナリ互換性に影響しないため必要に応じて改訂される機能を表します。

注意注意注意注意 : バージョン番号およびリリース番号は両方とも、IPC の正しいバージョンであることを検証する必要があります。バイナリ非互換性が導入されており、現在は、これがリリース番号を示す唯一の番号となっています。

2-14 Oracle9i Real Application Clusters クラスタ・インタフェース詳細

Page 39: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

バイナリ互換性

バイナリ互換性バイナリ互換性バイナリ互換性バイナリ互換性それぞれの OSD モジュールに対して定義されているデータ構造体は、Oracle クライアントおよび基礎となる OSD 実装で認識されている構造体になります。これらの構造体は、Oracle で定義されています。OSD モジュール設計全体には、OSD 実装によって定義されている構造体、および基本的にはその実装のプライベートの内容が用意されています。これらの構造体の内容は不明で、Real Application Clusters クライアントでは解釈されません。これらのクライアントでは、構造体のサイズ、メモリー属性(共有またはプライベート)、および構造体の場所のみが認識されています。

Oracle クライアントおよび基礎となる実装では、共有の意味およびフォーマットが一致することが必須ですが、これらは Oracle 定義の構造体です。関数の引数の順序およびタイプについても、同様のことが言えます。Oracle ではバイナリ互換を容易にするために、OSD モジュール・ヘッダーを用意しています。これは、共有する構造体のフォーマットおよび内容と、適切な関数のプロトタイプを定義するものです。実装ではこれらのヘッダーを直接使用して互換性を保証します。

表表表表 2-5 OSD モジュール・ヘッダーモジュール・ヘッダーモジュール・ヘッダーモジュール・ヘッダー

ヘッダーヘッダーヘッダーヘッダー 説明説明説明説明

ORACAPI.H 汎用のデータ型と構造体を定義します。

ORACCM.H CM のインタフェース・ルーチンと構造体を定義します。

ORACIPC.H IPC のインタフェース・ルーチンと構造体を定義します。

ORACIO.H I/O のインタフェース・ルーチンと構造体を定義します。

ORACSTART.H STARTUP のインタフェース・ルーチンと構造体を定義します。

OSD モジュール 2-15

Page 40: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

バイナリ互換性

2-16 Oracle9i Real Application Clusters クラスタ・インタフェース詳細

Page 41: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

Cluster(グループ・メンバーシップ)Manage

3

Cluster(グループ・メンバーシップ)(グループ・メンバーシップ)(グループ・メンバーシップ)(グループ・メンバーシップ)

Manager OSD

この章では、CM モジュールについて説明します。CM は、Oracle プロセスのグループを監視するために必要な要件とインタフェースを定義します。また、クラスタ内のノードの状態を監視する Node Monitor(NM)についても説明します。

この章の項目は次のとおりです。

� CM の概要

� Oracle9i のリファレンスの実装

� プロセス・グループ

� グループ・メンバー情報

� スレーブ・メンバー

� プロセスの監視

� ノードの監視

� グループ・イベントの通知

� 非パーティション化の要件

� 静的ノード情報の問合せ

� プロセス・グループ情報の問合せ

� セキュリティ

� I/O の制限

� CM クライアントの計画

r OSD 3-1

Page 42: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

CM の概要

CM の概要の概要の概要の概要Real Application Clusters は、Oracle RDBMS のクラスタリングを可能にするもので、RDBMS に可用性、スケーラビリティおよびフォルト・トレランス機能を提供します。可用性およびスケーラビリティは、クラスタ内の複数ノードから共有リソースへの同時アクセスを調整することによって実現されます。フォルト・トレランスのレベルは、クラスタ・システム上の基礎となるリソースのフォルト・トレランス機能に依存します。これらのリソースには、プロセス(Real Application Clusters インスタンスなど)の集合、共有ディスク、ノード(ハードウェアとオペレーティング・システム)、およびクラスタ・コンポーネント間の通信で使用されるクラスタ・インターコネクトが含まれています。

これらのリソースは、ハードウェアまたはオペレーティング・システムのベンダーが提供する Cluster(グループ・メンバーシップ)Manager(CM)として知られているコンポーネントによって監視されます。Oracle は CM インタフェースを使用して、ステータス情報を取得し、場合によっては、ローカル・インスタンスの情報を CM に提供します。このインタフェースの機能には 2 つの種類があります。プロセス・グループの機能のサポートと管理情報およびステータス情報の提供です。

Oracle9i のリファレンスの実装のリファレンスの実装のリファレンスの実装のリファレンスの実装Oracle8i では、CM リファレンスは 2 つのサービス CMSRVRと NMSRVRから構成されていました。Oracle9i では、これらのサービスは、CMSRVR.EXEと呼ばれる 1 つのサービスに統合され、システムの複雑さが軽減しました。NM の機能はまだ残っていますが、CMSRVRサービスの機能の一部になりました。NM.DLLは、不要になったため廃止されました。Oracle8i では、VIA および TCP に関する 2 つのリファレンスの実装がありましたが、Oracle9i では、TCP 実装のみとなります。

図図図図 3-1 Oracle8i のののの RDBMS

cm.dll

nm.dll

CMSRVR.EXE

NMSRVR.EXE

3-2 Oracle9i Real Application Clusters クラスタ・インタフェース詳細

Page 43: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

プロセス・グループ

図図図図 3-2 Oracle9i のののの RDBMS

プロセス・グループプロセス・グループプロセス・グループプロセス・グループCM には、プロセス・グループを監視するための API が用意されています。この API は、実行単位として監視されるプロセスを定義します。Windows NT および Windows 2000 では、これはオペレーティング・システムのスレッドに相当します。プロセスは、実行できない場合は終了したと判断され、未処理のオペレーティング・システム要求は完了するか、または取り消されて、プロセス固有のリソースが解放されます。

CM では、分散プロセス・グループ機能が中枢となります。クラスタ上のプロセスは、名前で登録され、グローバル・リソースはグループに認識されます(CMGroupJoinを使用)。登録が完了すると、プロセスはグループのメンバーであると判断され、メンバーの番号が割り当てられて、メンバーシップのビットマップが提供されます。他の既存のグループ・メンバーは、グループのメンバーシップが変更されたことを(CMGroupGetStatusを介して)通知され、現行のメンバーシップのビットマップも提供されます。グループからグループのメンバーが登録解除されると(CMGroupExitを使用して明示的に解除した場合、プロセスの終了やノードの停止による暗黙的な場合)、残りのグループ・メンバーには、 新のメンバー・ビットマップが提供されます。グループ・メンバーのノードの分散には、制約はありません。1 つのグループには、クラスタ内の任意のノードのサブセットにおけるメンバーを含めることができます。また、1 つのノードに複数のグループ・メンバーを定義することもできます。

グループは名前によって識別されます。グループ名は、ヌル文字で終了するテキスト文字列です。Oracle クライアントで渡される名前の 大長は、(NULLバイトを除いて)18 文字です。1 つのクラスタに同時に存在できるグループ数には、制限がありません(または制限数は非常に大きな数になります)。それぞれのプロセスには、グループの番号を付けて登録できます。グループ内のメンバーは、メンバー番号によって識別されます。メンバーは、グループ登録のコールに対して、自身の番号をパラメータとして指定できます。また、CMサービスが、有効なメンバー番号を指定するのにも必要になります。メンバー数の値は、0(ゼロ)~( 大グループ数 -1)の間で定義します。この値を使用して、グループ・メンバーシップがビットマップで表現されます。 大グループ数は、CMGetAttributeValue

(属性 CMATTRIBUTE_MAX_MEMBERS)を介して問合せできます。この 大数によって、グループ・メンバーシップのビットマップ長も決定されます。この値は、1 つのクラスタ上で実行できるデータベース・インスタンスの 大数よりも大きい値とします。

cm.dll

CMSRVR.EXE

NM セクション

Cluster(グループ・メンバーシップ)Manager OSD 3-3

Page 44: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

グループ・メンバー情報

グループ・メンバー情報グループ・メンバー情報グループ・メンバー情報グループ・メンバー情報CM インタフェースは、クライアント間でデータを交換する際の制限メカニズムを定義します。クライアントをあるグループに登録すると、2 つの情報、パブリック・メンバー・データとプライベート・メンバー・データが提供されます。パブリック・メンバー・データは、CM の他のクライアントから取得できます(CMGetMemberPublicInfoを使用)が、プライベート・メンバー・データは、グループの他のメンバーからのみ取得できます

(CMGetMemberPrivateInfoを使用)。通常、プライベート・データには、IPC ポート ID、およびグループ・メンバー間で通知されるブートストラップ情報が含まれています。パブリック・データは、問合せで使用するために、メンバーのノードと名前を管理ツールに公開する場合などに使用されます。

クライアント情報は、このインタフェース上ではいくつかのバイトの配列として表現されます。この配列の長さは可変で、CMGroupJoinコールで指定されます。CM の実装では、大長 255 のパブリック・データと 96 のプライベート・データを、Oracle の要求に応じてサポートする必要があります。グループ・メンバーが、新しいメンバーが登録されたという通知を受け取ると、そのメンバーがグループから削除されないかぎり、新しいメンバーのプライベート・データの問合せは正常に行われます。パブリック・メンバー・データの順序付けの要件は、厳密なものではありません。パブリック・データでは、クラスタ間内への伝播に時間がかかることもあります。

スレーブ・メンバースレーブ・メンバースレーブ・メンバースレーブ・メンバー複数のプロセスを含むインスタンスのかわりに、1 つのプロセスをグループに登録することができます。グループからメンバーを登録解除する場合には、グループの残りのメンバーに特定のメンバーが登録解除されたことが通知された後で、他のインスタンス・プロセスが共有クラスタ・リソース(共有ディスクなど)にアクセスしないようにすることが重要です。このようにしないと、登録解除されたインスタンスが、残存するインスタンスによって行われた変更を上書きしてしまうことがあります。このような状況を回避するために、インスタンスのプロセスで、グループに登録されているプロセスのメンバーシップを共有できます。これらのプロセスは、通常の(プライマリ)メンバーとして登録されているメンバーの IDを指定して、スレーブ・メンバーとして登録します(CMGroupRegisterを使用)。プライマリ・メンバーの登録解除は、関連するスレーブ・メンバーがすべて登録解除される

(CMGroupDeregisterを使用)まで、他のプライマリ・メンバーには伝播されません。

スレーブ・メンバーの登録または登録解除は、グループ・メンバーの参照件数の変更と考えられます。プライマリ・メンバーが登録されると、メンバーの参照件数は 1 になります。スレーブ・メンバーが登録されるたびに、この参照件数が加算されます。プライマリ・メンバーまたはスレーブ・メンバーが登録解除されると、参照件数が減算されます。参照件数が0(ゼロ)になると、メンバーが削除され、登録解除のイベントが他のグループ・メンバーに渡されます。このインタフェースは、関連するプライマリ・メンバーと同一ノード上のスレーブ・メンバーのみサポートします。このしくみは、分散サービスのインスタンスが 1 つのノードのみに存在するモデルと対応します。

3-4 Oracle9i Real Application Clusters クラスタ・インタフェース詳細

Page 45: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

ノードの監視

プロセスの監視プロセスの監視プロセスの監視プロセスの監視プロセス・グループには、プロセスの終了時にグループ・メンバーを自動的に登録解除するという重要な機能があります。これは、CM がプロセスの状態を監視しているということです。監視の対象となるのは、プロセスの明示的な終了とプロセス・ノードがクラスタ・メンバーシップから削除された場合の暗黙的な終了の 2 種類です。いずれの場合でも、プロセスによって行われた未処理のオペレーティング・システムの要求が完了するまで、または要求が取り消されてプロセス固有のリソースが解放されるまでは、終了したプロセスの登録解除を行わないでください。プロセスの監視は、プライマリおよびスレーブのグループ・メンバーの両方で行う必要があります。

ノードの監視ノードの監視ノードの監視ノードの監視CM OSD の NM は、クラスタ・ノードのメンバーシップを追跡します。NM を使用して、Real Application Clusters 環境でクラスタのメンバーシップ状態を検出および追跡できます。NM は通常、基礎となるオペレーティング・システムのアダプタとして、またはクラスタ内の変更の追跡と検出を直接実行するクラスタウェア・エンティティとして実装されます。NM は、実装で定義されているクラスタ・イベントを、Real Application Clusters 環境に適した一連のイベントにマップします。NM では、クラスタ・メンバーシップの概念が中枢になります。クラスタの存続期間において、クラスタに参加しているアクティブなノードがアクティブまたは実在のクラスタ・メンバーシップ・リストとして定義され、非アクティブなメンバーとは区別されます。

非アクティブなメンバーは、クラスタに参加するというシグナルによって、アクティブなメンバーになります。実装で定義されているいくつかのメカニズムによって、既存のアクティブ・ノードのグループで、新しいノードを参加させることができます。この場合には、すべてのアクティブ・ノードに新しいメンバーが通知され、アクティブ・ノードのアクティビティと新しいメンバーを調整する、という方法で参加します。

同様に、ノードが明示的に削除された、または予想外の障害が発生した場合には、ノードがアクティブなクラスタから削除されます。このようなノードはアクティブなメンバーシップの状態を失っており、クラスタのアクティビティから分離されます。これらのノードは再参加して、調整済のクラスタのアクティビティにもう一度関連付ける必要があります。

NM は、非アクティブおよびアクティブなクラスタ・メンバーを完全に定義して、クラスタ内の各ノードで実行される CM が同じように調整されたクラスタ・メンバーシップ状態のビューを持てるようにします。

NM によって、クラスタの状態変更の検出、イベントのシグナルおよび変更の診断を行い、新しい状態が既存のメンバー・ノード間で一貫性を保持できるように調整します。この後で、CM の NM レイヤーは、CM のグループ・メンバーシップに、メンバーシップ内の実際の変更を通知します。

Cluster(グループ・メンバーシップ)Manager OSD 3-5

Page 46: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

グループ・イベントの通知

グループ・イベントの通知グループ・イベントの通知グループ・イベントの通知グループ・イベントの通知グループ・メンバーシップの変更は、CMGroupGetStatusコール(グループ・イベントに対するポーリング)を使用してメンバーに通知されます。イベントは、グループ内で現在アクティブになっているすべてのメンバーに対して、同じ順序で通知されます。2 つのイベントのいずれも、すべてのメンバーから同じ相対順序で見える必要があります。また、イベントがメンバーシップでの一時的な変更である場合でも、アクティブなメンバーには必ず全員に通知されます。CM は、いくつかの状態変更(メンバーの参加やグループからの削除)をまとめて処理する場合があります。あるメンバー番号について、1-0-1(参加→削除→参加)という状態変更をまとめて処理する場合には、新しく生成されるメンバーに対応するビットマップのビットが、CM クライアントによって決定されます。

各グループ・メンバーに同じ順序でイベントが通知される必要がありますが、各メンバーにイベントを通知する相対的なタイミングには制約はありません。クライアントは、他のすべてのメンバーがイベントを確認するまでグループ状態の変更を処理できないため、イベントの通知時間の違いはできるだけ小さくしてください。

非パーティション化の要件非パーティション化の要件非パーティション化の要件非パーティション化の要件プロセス・グループはクラスタ・レベルのエンティティです。これは、相互に認識されない複数のサブグループにパーティション化することはできません。この必要条件は、前述したグループ・イベントの通知の必要条件によるものです。CM では、この必要条件を実現するために、アクティブなクラスタ・ノードのメンバーシップをパーティション化しないようにする必要があります。

プロセス・グループのメンバーは、他のすべてのグループ・メンバーと通信できるようにしておく必要があります。CM は、Oracle が通信を行うネットワークを監視し、ネットワークのパーティションを検出します。ネットワークの障害によってグループが正しく接続できない場合は、CM が特定のメンバーを強制的にグループから削除して(CMGroupGetStatusの CMGROUPEVENT_ABORTイベントを使用)、残りのメンバーが正しく接続できるようにします。

静的ノード情報の問合せ静的ノード情報の問合せ静的ノード情報の問合せ静的ノード情報の問合せクラスタ内の各ノードは、管理およびデバッグのために、一意のノード番号と名前を割り当てられています。ローカル・ノードのノード番号は、関数 CMGetNodeNumを使用して取得できます。クラスタのノード名を取得するには、関数 CMGetNodeNameにノード番号を渡します。クラスタ内の 大ノード数を取得するには、CMATTRIBUTE_MAX_NODESの属性でCMGetAttributeValueをコールします。クラスタ内に設定されているノードのノード番号のベクターは、CMGetNodeListによって返されます。これらの静的な問合せ情報で返される値(ただし CMGetNodeNumを除く)は、クラスタ内のそれぞれのノードで同じものになります。

3-6 Oracle9i Real Application Clusters クラスタ・インタフェース詳細

Page 47: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

I/O の制限

プロセス・グループ情報の問合せプロセス・グループ情報の問合せプロセス・グループ情報の問合せプロセス・グループ情報の問合せ(管理ツールなどの)クラスタ上で実行しているアプリケーションで、所属していないプロセス・グループのメンバーシップに関する情報を取得したい場合があります。このような目的のために、いくつかの関数が用意されています。クラスタ内の現行のプロセス・グループのメンバーシップ・ビットマップは、CMGroupGetListを使用して問い合せることができます。特定のプロセス・グループ・メンバーのパブリック・メンバー・データは、CMGetMemberPublicInfoを使用して問い合せることができます。

セキュリティセキュリティセキュリティセキュリティこのインタフェースには、明示的なセキュリティ要件は定義されていません。一般的には、信頼できるクライアントのみがプロセス・グループに参加できるようにします。また、レジスタのコールで提供されたプライベート・メンバーの情報には、取り扱いに注意を要するデータが含まれている場合もあるため、他のグループ・メンバーのみで使用できるようにします。静的ノードおよびプロセス・グループのメンバーシップ情報は、パブリックな情報となるため、クライアントの広範囲で使用できます。

I/O の制限の制限の制限の制限I/O の制限では、クラスタ外のノードに対して共有ディスクへのアクセスを強制的に禁止する仕組みを適用します。コンピュータが応答を停止するような致命的な状況も(まれではあっても)考えられるため、この機能が必要になります。クラスタ内の他のノードによって、ノードが非アクティブと宣言されても、未処理の I/O をディスクへ書き出します。これらの書込みによってデータベースが破損することがあります。

この問題を解決するソリューションとして、I/O の制限があります。ノードを非アクティブと宣言した場合には、クラスタウェアによって、未処理および今後発生する共有ディスクへの書込みが制限されます。以前は I/O モジュールが I/O の制限を行っていましたが、Oracle9i では、この機能は CM に移行されました。この移行によって、Windows NT とWindows 2000 の OSD 実装は、さらに UNIX OSD に近くなりました。

また、CM に I/O 機能を持たせることによって、リモート・ノードを制限する方法が改善されました。以前の I/O の実装では、単純にローカル・コンピュータのアクセスを制限していましたが、これでは、I/O の制限で解決するような問題には対処できませんでした。CM がI/O の制限を行うことによって、障害のあるノードのディスクへのアクセスを、実装でリモートに強制禁止することが可能になりました。

この問題を解決するもうひとつの方法として、Oracle の標準のクラスタウェアである OSDの OraFenceDrv.sysドライバを使用する方法があります。

OraFenceDrv.sysドライバは、低レベルのハングアップから回復した際に、ノードを強制的に再起動します。これによって、ディスク破損の原因となるシステムのハングアップの問題を、実質的に解決します。

Cluster(グループ・メンバーシップ)Manager OSD 3-7

Page 48: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

CM クライアントの計画

ただし、これらの問題はハードウェアで解決することをお薦めします。実装には、高信頼性の帯域外通信を使用して、リモート・ノードが共有ディスクにアクセスできないようにすることをお薦めします。このためには、あるノードが他のノードによって非アクティブと宣言された場合に、コンピュータをオフにするような特別なハードウェアを使用するソリューションが考えられます。その他の 適なソリューションとして、非アクティブなノードが共有ディスクにアクセスできないようにするインテリジェントな共有記憶デバイスの使用が考えられます。

CM クライアントの計画クライアントの計画クライアントの計画クライアントの計画Real Application Clusters は、CM を使用してデータベース・インスタンスの状態を監視し、通信をブートストラップします。各インスタンスのプロセス(LMON)は、プライマリ・メンバーとしてグループに参加します。グループ名は、2 文字の接頭辞(DB)にデータベース名が続きます。プライベート・グループ・メンバーのデータは、バージョン番号および IPCポート ID を通知する際に使用します。パブリック・グループ・メンバーのデータには、管理ツールで有効な情報が含まれています。直接ディスク I/O を行うインスタンスのプロセス

(DBWR や LGWR など)は、スレーブ・メンバーとしてグループに参加します。LMON プロセスは、すべてのデータベースのグループ(DAALL_DB)にも参加します。LMON によって提供されるパブリック・メンバーのデータには、ノード番号、データベース名およびインスタンス名が含まれています。管理ツールで DAALL_DBグループを問い合せると、クラスタ上のデータベース名が不明でも、クラスタで実行されているすべてのインスタンスの情報を取得できます。Oracle のインスタンス・グループ・サービスでは、(少なくとも 初は)CMを使用します。init.ora パラメータの instance_groups が空白でない場合は、LCK0プロセスが指定されたグループに参加します。CM に指定される実際のグループ名は、「IG」+ <db_name> +「.」+ <group_name> となります。SRVM では CM の管理機能を使用して、クラスタ上で実行されているインスタンスの情報を取得します。

将来的には、他の Oracle サービスで CM を使用して、Real Application Clusters で作成されたグループの状態の問合せや、独自のプロセス・グループの作成が可能になる予定です。このインタフェースの使用方法は、段階的に変更されます。以前の使用情報は、実装の開発者に対するバックグラウンド情報としてのみ提供されます。

関連資料関連資料関連資料関連資料 : 詳細は、 2-13 ページの「I/O フェンス・ドライバのインストール」を参照してください。

3-8 Oracle9i Real Application Clusters クラスタ・インタフェース詳細

Page 49: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

プロセス間通信 OS

4

プロセス間通信プロセス間通信プロセス間通信プロセス間通信 OSD

この章では、プロセス間通信(IPC)モジュールについて説明します。IPC は、インスタンス間で高信頼性のメッセージを送信するために、Real Application Clusters 環境で必要な要件とインタフェースを定義します。

この章の項目は次のとおりです。

� IPC の概要

� IPC の設計ポイント

� IPC の要件

� IPC のデータ構造体

� IPC ルーチンの説明

D 4-1

Page 50: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

IPC の概要

IPC の概要の概要の概要の概要均一の大規模パラレル・プロセス(MPP)またはクラスタ環境におけるノード間の IPC は、Real Application Clusters 環境で重要な機能を果します。Real Application Clusters の機能上の利点の大半は、相互接続されたマシン上で稼働することで得られ、IPC の機能を活用してこのような操作を行っています。Windows NT および Windows 2000 のマーケットでは、様々な環境が増えるにつれて、共有メモリー・セグメントを使用せずにプロセス間で通信することが要求されています。これは、スケーラビリティの強化というニーズのみではなく、共有メモリーでは実装が困難でコスト高な可用性の大幅な改善に対するニーズによるものです。

Real Application Clusters は、Windows NT および Windows 2000 のクラスタ・ハードウェアおよびソフトウェアによって性能を向上させます。高速インターコネクト・テクノロジの上位に位置する Real Application Clusters 製品は、単一ノードの実装と比較して、スケー

ラビリティと可用性を大幅に改善します。

効率的なノード間通信、および分散環境における同期は非常に重要です。Real Application Clusters は、IPC のメカニズムが非常に重要なコンポーネントです。パフォーマンス上の観点から考えると、ノード数が増えるにつれて、このメカニズムはより重要になります。さらに有力で多様なテクノロジの存在が、この項に記載されている IPC OSD の設計に対する必要性を強くしています。

この IPC OSD モジュールは、パートナが、高速ノード間送信がサポートされている Real Application Clusters 環境を統合できるように設計されています。通常、基礎となる IPC メカニズムは、同一のクラスタ環境で機能する専用の高速インターコネクトです。このマニュアルでは、IPC OSD モジュールでサポートする必要がある機能と IPC API について説明します。IPC OSD は、Oracle クライアントへの効率的なメッセージ送信を目的として設計されていることに注意してください。他のアプリケーションでこれらのインタフェースを使用することもできますが、インタフェースは、Oracle クライアントのニーズに対応することに特化して設計されています。

IPC の設計ポイントの設計ポイントの設計ポイントの設計ポイントReal Application Clusters IPC モジュールの中枢には、ノード間で高信頼性のデータ転送を行うための 2 つの機能が用意されています。1 つは高信頼性のポートベースのメッセージ送信インタフェースで、これはコネクションまたはコネクションレスの実装をサポートしています。これは、キューに登録されているメッセージ送信の機能をサポートする非同期のモデルです。ここでは、次の簡単な機能が用意されています。

� IPC の送信操作を直接起動

� これらの操作を追跡および統合

4-2 Oracle9i Real Application Clusters クラスタ・インタフェース詳細

Page 51: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

IPC の設計ポイント

もう 1 つの機能は、ノード間で高信頼性のリモート・メモリーのコピー操作を開始するための、メモリー・マップされたインタフェースです。これはポートベースの機能と同様に本質的には非同期で、次の機能を実現しています。

� メモリー・マップ操作に対してメモリーを登録および登録解除

� リモート・メモリーのコピー操作を直接起動

� メモリーのコピー操作を追跡および統合

その他にも、実装でゼロコピー、散乱 / 収集、およびその他の関連する 適化をサポートするための機能が含まれています。次の機能では、サポート対象となるカテゴリのルーチンを定義しています。

� 汎用 OSD モジュールのサポート

� 管理サービス

� ポート接続および送信サービス

� メモリー・マップ登録および転送サービス

� 要求のステータスおよび同期サービス

次の項では、IPC OSD モジュール設計のための主な機能上の設計について説明します。

� 高速 Point-to-Point メッセージ送信

� メモリー・マップ転送

� メモリー割当て

� ユーザー・バッファ

� 論理接続モデル

� エラー・モデル

� オプションの機能

� レイヤリング

� IPC クライアント

� リファレンス IPC の実装

高速高速高速高速 Point-to-Point メッセージ送信メッセージ送信メッセージ送信メッセージ送信このレイヤーでは、 適化されたメッセージ送信のインタフェースを提供することを主な目的としています。このレイヤーは、単一のメッセージをハードウェアで可能なかぎり高速に送受信するよう設計されています。 適化された通信レイヤーによって、 上位で様々なサービスを実装できます。ただし、このレイヤーが高速でない場合は、この実装をベースとしている上位レイヤーも影響を受けます。

プロセス間通信 OSD 4-3

Page 52: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

IPC の設計ポイント

メモリー・マップ転送メモリー・マップ転送メモリー・マップ転送メモリー・マップ転送高性能なハードウェアでユーザーモードのリモート・メモリーを効率的にコピーするために、いくつかのメモリー・マップ操作が用意されています。これらの操作は、メモリー・マップ、ゼロコピー、およびターゲット・ノードのメモリー領域に対するユーザー領域の直接転送を頻繁に行うデータベース・クライアントを対象としています。メモリー・マップ機能は、主にパフォーマンス上の理由で必須です。メモリー・マップされたハードウェアに対して直接ハードウェアをサポートしない実装では、メモリー・マップ操作を機能的にエミュレートする必要があります。

メモリー割当てメモリー割当てメモリー割当てメモリー割当てメモリー割当ての主な目的は、OSD レイヤーのコード、および可能ならばそれ以下のレベルでメモリーの動的な割当てを取り除くことです。このインタフェースは、メッセージ送信の管理に必要なメモリー(ポート状態、接続状態、メッセージ・バッファなど)がインタフェースの仕様で定義され、IPC メカニズムのクライアントで割り当てられるように設計されています。クライアントは、利用可能なメモリーを管理しやすくなり、定義済の構造体の属性に基づいて適切なメモリーのタイプを割り当てることができます。これによって、メモリーが必要に応じてプライベート・メモリーまたは共有メモリーに割り当てられ、クリティカル・パスのコードで効率の悪いメモリーの割当てを回避することができます。

ユーザー・バッファユーザー・バッファユーザー・バッファユーザー・バッファこのインタフェースは、システム・バッファリングおよび関連するコピーをバイパスして、実装がユーザー・バッファでのメッセージの送信を直接開始するように設計されています。このような、ユーザー領域の直接操作は、ゼロコピーと呼ばれます。直接的なゼロコピーを行うことは必須ではありませんが、可能であれば、この機能を使用することをお薦めします。ユーザー領域へ直接送信すると、下位レイヤーで提供するバッファリングの量が減少するため、クライアントがメッセージの送信に必要なメモリーを厳密にコントロールできるようになり、不要なコード・パスによる処理スピードの低下を回避できます。ゼロコピーによる 適化が有効なのは、メッセージが到達する前にクライアントが受信バッファを確保した場合のみです。通常、Real Application Clusters クライアントではこのように処理していますが、常に受信バッファがあらかじめ確保されているとはかぎりません。このような状況では、受信データ用の中間バッファが必要な場合があります。

4-4 Oracle9i Real Application Clusters クラスタ・インタフェース詳細

Page 53: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

IPC の設計ポイント

論理接続モデル論理接続モデル論理接続モデル論理接続モデルこのインタフェースは、コネクションベースおよびコネクションレスのシステムの両方の上位で機能するように設計されています。このインタフェースには、コネクションベースのシステムで接続と切断を行うタイミングを認識させるため、接続と切断のコールが含まれています。コネクションレスのシステムには、関連するセマンティックが非常に少ないため、コールの実装が 小限になります。IPC のクライアントでは、ベースとして二重化の機能を使用している場合でも、論理接続を一重化方式でのみ使用します。

それぞれが反対方向の 2 つの接続が、クライアント間の双方向の接続で必要になります。通常、このような一重化方式の接続は、コネクションベースおよびコネクションレスのいずれのメカニズムの 上位でも効率的に簡単に実装されます。純粋なデータグラムのモデルでは、コネクションベースの実装(クライアントが、メッセージごとに接続と切断を行わずに、接続ステータス情報のキャッシュに必要なメモリーを転送)に対する十分な手段が用意されていません。二重化接続では、接続ごとにラウンドトリップ・メッセージを作成するために、コネクションレスの実装が必要になります。

メモリー・マップ操作では、接続のサポートはありません。物理的な接続モデルをサポートする実装では、定義済の関数の中に接続処理を隠蔽する必要があります。そのために通常は、 初にリモート・コピーに接続し、その後は送信側のクライアントが存在するかぎり、接続を保持します。

エラー・モデルエラー・モデルエラー・モデルエラー・モデルIPC OSD の機能は、単純で明確な障害のセマンティックを持つ、高信頼性の送信メカニズムとして定義されています。フェイルハード・モデル(ノードまたはプロセスの障害によるメッセージの送信エラーのみが IPC クライアントに認識されるモデル)をサポートするには、接続およびデータグラムの実装が両方必要です。ポートが存在しており、インターコネクトで到達可能なかぎり、接続上で送信されるすべてのメッセージは順番に宛先ポートに到達する必要があります。メッセージの送信が妨げられた場合、接続が使用できなくなり、それ以後その接続上で送信されるメッセージはすべて宛先に届かなくなります(その送信でもエラーが返されます)。つまり、宛先ノードがアクティブでクラスタの一部であり、宛先プロセスがアクティブで、宛先ポートが削除されていない場合は、接続および送信の要求は宛先に必ず到達します。

ノードまたはプロセスの障害を検出することは、IPC モジュールの 終的なタスクではありませんが、実装では、ノード障害を認識するメカニズムをサポートする必要があります。具体的には、送信不可と判定されたメッセージに対してエラーをシグナルし、関連する接続に相応のマークをして、それ以降その接続を使用した場合もエラーになるようにします。これによって、宛先ノードの状態が不明確であることを Real Application Clusters に警告し、以後の処理を行う前に、CM OSD API で定義されているルーチンを介して関連ノードの状態の問合せを行うよう指示します。IPC エラーはエンドポイントの障害でのみ発生するため、クライアントは障害を認識し、必要なクリーンアップまたはリカバリ処理を開始する必要があります。

プロセス間通信 OSD 4-5

Page 54: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

IPC の設計ポイント

オプションの機能オプションの機能オプションの機能オプションの機能このインタフェースの機能の 1 つであるベクター I/O には、散乱 / 収集機能が用意されており、一般的な使用モデルにマップするように設計されています。この機能は、基礎となるメッセージ送信メカニズムにおいて、ベンダーによる固有かつ効率的なサポートを促すために定義されています。IPC OSD がオプション機能をサポートしていない場合、通常は欠落した機能のエミュレートまたは回避をクライアントに強制することになるため、パフォーマンスが低下します。

通常、ベクター I/O は RPC または要求 / 応答のモードで使用され、データからヘッダー情報を切り離して、コピーを行わずにデータを特定のバッファへダイレクトします。散乱 / 収集機能をサポートしていない実装では、IPCATTR_MAXIMUM_MSG_VECTORS属性を 1に設定することによって、このように示すことができます。

レイヤリングレイヤリングレイヤリングレイヤリングIPC OSD は、基礎となる様々なオペレーティング・システム・ソフトウェアおよびハードウェアが、多様なレベルでサポートされるよう、意図的に定義されています。すべての実装は、Real Application Clusters 環境を構成するプロセスにリンクされている、IPC OSD DLLをサポートします。この DLL は、実装固有のトランスポート API にリンクが定義されています。

IPC DLL では、Real Application Clusters クライアントから統合の詳細を完全に隠蔽します。ルーチンは、パートナが、ユーザーレベルの既存のトランスポート API(WinSock やNamed Pipe など)と統合できるように定義されています。また、ルーチンは、ベンダーが各自のハードウェア用に作成されたカスタムのカーネルレベルのインタフェースと統合し、ソフトウェア・レイヤーの不要なオーバーヘッドを回避できるように設計されています。

多くのベンダーが、TCP/IP ベースと Winsock ベースの OSD 実装のインターコネクトをサポートしていますが、ベンダーでは、「コード・パスは Windows NT および Windows 2000のトランスポート・レイヤーで発行されており、適切にサポートされるノードの数、およびReal Application Clusters 全体のスケーラビリティが制限されている」ことを認識しています。

IPC クライアントクライアントクライアントクライアントReal Application Clusters クライアントは、すべてのモジュール・インスタンス間に共通で、すべての IPC OSD モジュールの実装がサポートする必要のある特定の要求機能に依存しています。これらの要件は、次の項に明確に記載されています。いくつかの機能はオプションで、基礎となる実装の効果的なサポートに依存しています。IPC の実装は、サポートされる特性や機能を定義する属性をエクスポートします。Real Application Clusters クライアントは、適切な IPC OSD モジュール属性に問い合せて、サポートされている機能を特定し、それらの機能に基づいてコール・ストリームを設定します。このようにすると、パートナはReal Application Clusters 環境の変更を要求することによって、Real Application Clusters に付加価値のあるサポートを行うことができます。クライアントでは、明確にサポートされていない機能は使用しません。

4-6 Oracle9i Real Application Clusters クラスタ・インタフェース詳細

Page 55: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

IPC の要件

グローバル・キャッシュ・サービス(グローバル・キャッシュ・サービス(グローバル・キャッシュ・サービス(グローバル・キャッシュ・サービス(GCS)およびグローバル・)およびグローバル・)およびグローバル・)およびグローバル・エンキュー・サービス(エンキュー・サービス(エンキュー・サービス(エンキュー・サービス(GES))))Real Application Clusters 環境では、IPC のダイレクト・ユーザーであるクライアントをサポートしています。 も重要なクライアントは、グローバル・キャッシュ・サービスグローバル・キャッシュ・サービスグローバル・キャッシュ・サービスグローバル・キャッシュ・サービス

(GCS)およびグローバル・エンキュー・サービスグローバル・エンキュー・サービスグローバル・エンキュー・サービスグローバル・エンキュー・サービス(GES)です。これらのサービスを使用して、クラスタ上のリソースについて一貫したビューを保持します。サービスでは IPC を使用して、クラスタのメンバー間でデータを移動し、データへのアクセスの同期をとります。これらのサービスは、Oracle のキャッシュ・フュージョン・テクノロジを提供します。

Oracle パラレル実行機能パラレル実行機能パラレル実行機能パラレル実行機能IPC のもうひとつの主なクライアントには、Oracle パラレル実行機能があります。パラレル実行は機能転送テクノロジの一種で、通常の Real Application Clusters の分散処理を補足し、並列性とスケーラビリティを大幅に拡張したものです。クラスタ環境では、パラレル実行により各問合せが細分化され、データベースへの共有アクセスによって、ノード間に作業が分散されます。これらのノードは、各自の処理能力を共同管理し、細分化された問合せを実行します。パラレル実行では、IPC を使用して細分化された問合せを分散および調整し、結果を取得して統合します。

リファレンスリファレンスリファレンスリファレンス IPC の実装の実装の実装の実装Oracle には、Real Application Clusters 移植キットの一部として、いくつかのリファレンスIPC OSD モジュールの実装が用意されています。これらのリファレンス実装は、ベンダーによる IPC モジュール設計の理解をサポートし、ベンダー固有の付加価値のある開発に対する適切な開始ポイントとして用意されています。

現在は、I/O 終了ポートで WINSOCK 2.0 TCP/IP の上位に構築されたリファレンス・モジュールを使用できます。リファレンス VIA の実装も提供されます。

IPC の要件の要件の要件の要件適切なクロス・ノードのデータベース処理では、実装は次の要件を満たす必要があります。ハードウェアまたはトランスポート・スタックが、定義された要件を満たしていない実装では、IPC OSD レイヤーで必要なサポートを提供する必要があります。要件では、次の内容を対象としています。

� 信頼性

� メッセージの境界

� メッセージの順序

� メッセージの公正

� メッセージの位置合せ

プロセス間通信 OSD 4-7

Page 56: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

IPC の要件

� プロセス・クリーンアップ

� 割込みコール

信頼性信頼性信頼性信頼性このインタフェースのクライアントでは、メッセージは確実に送信されるものと想定しています。信頼性は、クラスタ・メンバー・ノード上の正常な Real Application Clusters クライアント・プロセスによって接続されている有効なポートに、エラーなしでメッセージが送信される確実性と言えます。

メッセージが送信側のアドレス空間を離れ、送信バッファが再利用できるようになると、受信側で受信バッファを転送している場合には、ターゲット・プロセスのアドレス空間に必ずメッセージが送信されます。メッセージに対して受信バッファを転送する前に宛先のプロセスが停止した場合には、このような保証は不要です。

同様に、送信エラーが発生した場合は、ノードまたはキー・プロセスの障害に直接関連していると判断され、通常は結果としてノードが削除され、Real Application Clusters のリカバリ処理が行われます。クライアントの再試行機能は非常に制限されているため、実装では、リソースの障害およびフロー制御の障害がクライアントにまで及ばないようする必要があります。クライアントによるメッセージの再試行を信頼しないでください。

メッセージの境界メッセージの境界メッセージの境界メッセージの境界このインタフェースにおける通信の論理単位は、メッセージの境界です。メッセージのサイズは送信側で指定されます。基礎となるメッセージ送信メカニズムでは、効率的に処理するためにいくつかのメッセージを圧縮できます。ただしこれらのメッセージは、元のメッセージの境界やサイズを保持したまま、受信側で解凍する必要があります。転送した受信バッファが少なくてメッセージを格納できない場合は、送信された実際のバイト数が受信側にレポートされ、メッセージが切り捨てられたことも通知されます。クライアントによるメッセージの再送信を信頼しないでください。

メッセージの順序メッセージの順序メッセージの順序メッセージの順序IPC の順序付けモデルは、特定のコンテキストから特定のエンドポイントまでの 2 つの送信が、開始されたとおりの順序で完了するという基本特性を保証するように設計されています。メッセージの順序は、常に送信側によって定義され、受信側に通知されます。この順序は、基本的な特性が保持されるよう実装固有の方法で定義されます。たとえば、送信側で送信 A を開始し、次に同じポートへの送信 B を開始すると、受信側では、受信 A が完了した後で受信 B が通知されます。

仕様では、強制的な順序付けの要求もサポートしています。強制的な順序付けでは、特定のコンテキストから別のコンテキストまでの 2 つの送信が、開始されたとおりの順序で完了することを保証するように設計されています。強制的な順序付けの要求はすべて、送信が開始されたときに特別にマークされます。強制的な順序付けは、このようにマークされた要求のみを対象とします。

4-8 Oracle9i Real Application Clusters クラスタ・インタフェース詳細

Page 57: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

IPC の要件

受信側の順序付けは、常にクライアントの通知に相対的に規定されていることに注意してください。これは、送信またはコピーの操作が開始された順序で通知が行われているかぎり、基礎となる物理的な送信が行われた順序には関係なくなります。

メッセージの公正メッセージの公正メッセージの公正メッセージの公正このインタフェースでは、優先順位を付けられたメッセージはサポートしません。実装は、送信側または受信側のメッセージ処理でブロックや遅延が発生しないように、すべてのメッセージのタイムリーで公正なフローを保証する必要があります。

メッセージの位置合せメッセージの位置合せメッセージの位置合せメッセージの位置合せメッセージ・データ・ペイロードの明示的な位置合せが必要な、いくつかの実装がサポートされています。これらの実装では、IPCATTRIBUTEの機能を使用して要件をシグナルします。クライアントは、要求に応じてバッファの位置合せを行います。通常、実装では、確実に要求されないかぎり要求された位置合せを通知せず、自身の優先の位置合せ要求を表します。これによってクライアントは、メモリーが少ない場合に、メモリー空間と送信の 適化とのバランスをとることができます。

プロセス・クリーンアッププロセス・クリーンアッププロセス・クリーンアッププロセス・クリーンアップIPC の各クライアント・プロセスでは、IPC の非アクティブ・ユーザーとして自身を宣言する必要があります。これによって IPC は、コンテキスト構造体を保持してクライアントが識別できるようにします。プロセスが異常停止した場合、または未処理の非同期要求とともにコンテキストが削除された場合は、クライアントに割り当てられ、IPC の実装で使用中のすべてのメモリーのロックを解除し、メモリーを解放して再利用できるようにする必要があります。この中には、接続ハンドラ、リージョン、送信バッファ、受信バッファ(メモリー・マップされたバッファを含む)が含まれています。

割込みコール割込みコール割込みコール割込みコールIPC OSD の実装では、クライアント・プロセスが、IPC コールでブロックされている他のクライアント・プロセスに割り込めるようにするメカニズムをサポートする必要があります。クライアントへの割込みに使用する操作は転送と呼ばれ、IPCPost()コールによって起動されます。

クライアントは、エラー状態、または問合せが異常終了した場合のクライアントを転送することもあります。転送されたクライアント・プロセスが応答に要する時間については、厳密な要件はありません(これは、転送をサポートしていない実装でシミュレートするためです)。ただし、実装では、可能なかぎり迅速な転送メカニズムをサポートすることが推奨されます。

プロセス間通信 OSD 4-9

Page 58: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

IPC のデータ構造体

IPC のデータ構造体のデータ構造体のデータ構造体のデータ構造体次に、IPC のデータ構造体について説明します。これらの構造体は、IPC ルーチンおよびIPC OSD モジュールの機能をサポートするために必要です。これらの構造体のいくつかはIPC の実装によって定義されており、Real Application Clusters クライアントが割り当てて、様々な IPC ルーチンへ提供する不透明な構造体として扱われます。その他は予約済の構造体で、IPC クライアントと IPC 実装の間で共有されます。これらの構造体は通常、Oracle で定義されています。

IPC の実装で定義されている IPC データ構造体は、次のとおりです。

Oracle で定義されている IPC データ構造体は、次のとおりです。

IPCBUFFERID IPCPORT

IPCCONNECTION IPCPORTID

IPCCONTEXT IPCREGION

IPCCONTEXTID IPCREQUEST

IPCATTRIBUTE IPCEXTENSION

IPCBUFFERDESC IPCFLAGS

IPCCALLBACK IPCREQUESTINFO

IPCCALLBACKCTX IPCSTATUS

IPCENDPOINT IPCVERSIONINFO

IPCDATATYPE IPCREQUESTTYPE

IPCERROR IPCPROTOINFO

IPCSTAT

IPC_EXTENDED_INFO

4-10 Oracle9i Real Application Clusters クラスタ・インタフェース詳細

Page 59: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

IPC ルーチンの説明

IPC ルーチンの説明ルーチンの説明ルーチンの説明ルーチンの説明この項では、IPC.DLLでサポートする必要がある IPC ルーチンについて説明します。Real Application Clusters 環境の各クライアントは、記載されているルーチンのクライアントであり、実装では、後述の項で説明される規則に従って、必要な機能を提供する必要があります。

このマニュアルでは、各ルーチンの機能、引数、戻り値について簡単に説明します。また、Real Application Clusters 環境への適切なバインディングを保証するために割り当てる必要がある、DLL 関数番号も記載します。

ルーチンは、いくつかのグループに分類できます。

� 汎用 OSD コールの IPC バージョン。これらのコールは、Real Application Clusters がベンダー固有のバージョン情報、属性およびデータ型のサイズ情報を問合せできるように用意されています。具体的には次のものがあります。

� IPCGetAttributeValue()

� IPCGetDataTypeSize()

� IPCGetVersionInfo()

� IPC のコンテキスト領域の作成および削除をサポートし、個別のコンテキストごとのトレース機能を有効にするための IPC コール。

� IPCDeleteContext()

� IPCInitContext()

� IPCTrace()

� ポートベースの接続の作成および削除をサポートする IPC コール。

� IPCConnect()

� IPCDeletePort()

� IPCDisconnect()

� IPCInitPort()

� メモリー・マップ操作用のリージョンおよびバッファの作成と削除をサポートする IPCコール。

� IPCMapMemory()

� IPCPrepareBuffer()

� IPCUnmapMemory()

� IPCUnprepareBuffer()

プロセス間通信 OSD 4-11

Page 60: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

IPC ルーチンの説明

� IPC の転送操作を起動する IPC コール。

� IPCReceiveMsg()

� IPCRemoteCopy()

� IPCSendMsg()

� クライアントが未処理の要求を追跡、同期化、割込みおよび取消しをするための IPCコール。

� IPCCancel()

� IPCGetRequestInfo()

� IPCPost()

� IPCWait()

4-12 Oracle9i Real Application Clusters クラスタ・インタフェース詳細

Page 61: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

起動 OS

5

起動起動起動起動 OSD

この章では、起動(START)モジュールについて説明します。START は、Real Application Clusters インスタンスの起動手順、DLL バインディング・モデル、および Real Application Clusters にベンダー固有の起動方針を統一するためのフックを定義します。

この章の項目は次のとおりです。

� Oracle Real Application Clusters の起動の概要

� 起動 OSD の詳細

� START のデータ構造体

� START のルーチンの説明

D 5-1

Page 62: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

Oracle Real Application Clusters の起動の概要

Oracle Real Application Clusters の起動の概要の起動の概要の起動の概要の起動の概要Windows NT および Windows 2000 における Real Application Clusters の起動シーケンスは、2 段階の手順として定義できます。

� ブートストラップ処理

� インスタンス起動

ブートストラップ処理ブートストラップ処理ブートストラップ処理ブートストラップ処理ブートストラップ・フェーズでは、Real Application Clusters 環境の主要なコンポーネントが特定され、メモリーにロードされます。また、多数の主要な構造体用の領域が割り当てられます。ブートストラップ処理では、Oracle コードを実行する場合もありますが、このフェーズの結果は、実行可能な Real Application Clusters 環境ではなく、ロードされた Real Application Clusters 環境となります。Oracle コードの実行は、これらのタスクに含まれます。

インスタンス起動インスタンス起動インスタンス起動インスタンス起動インスタンス起動フェーズでは、ロードされた Real Application Clusters コンポーネントのそれぞれの操作を、決められた順序で開始します。通常は、 初に監視が開始され、続いて内部サーバーのデーモン、およびその他の関連プロセスが開始されます。すべての Real Application Clusters コンポーネントを、シリアル化された形式で開始することを推奨しますが、必須ではありません。Real Application Clusters 環境は、様々なコンポーネントの関連および依存性に基づいて起動を順序付けします。データベースのデータ整合性で重要な関連は、GCS と GES に関連付けられます。

GCS と GES は、他の Real Application Clusters コンポーネントが物理的なデータベースにアクセスできるようになる前に、正常に開始しておく必要があります。これらのサービスは、I/O の整合性の保証について、他のノードとネゴシエーションを行います。Real Application Clusters 環境では、他のデータベース・エンティティを処理する前に、GCS とGES を正しく稼働することによって、この保証を実現しています。GCS と GES は、ほとんどすべての OSD コンポーネントで必要な重要なクライアントであるため、各コンポーネントは、(GCS と GES が動作する前に)適切にロード、初期化および機能する必要があります。

5-2    Oracle9i Real Application Clusters クラスタ・インタフェース詳細

Page 63: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

起動 OSD の詳細

起動起動起動起動 OSD の詳細の詳細の詳細の詳細ベンダーが、Real Application Clusters の起動シーケンスにフックを定義するために、起動OSD モジュールが用意されています。起動 OSD モジュールは、実装固有の機能を提供します。これは、Real Application Clusters の主要なエンティティ、およびその他の OSD モジュールが起動する前、またはこれらのものと同時に実行する必要があります。

このような準備タスクを持たない実装では、起動 OSD モジュールの実装は不要です。Real Application Clusters 環境では、ブートストラップするためにその存在が必要になることはありません。開始されたタスクが、Real Application Clusters の残りの起動と同期的であるかどうかは、ベンダーが定義します。Real Application Clusters 環境と起動 OSD モジュールには、他に同期ポイントがないため、Real Application Clusters 環境を続行する前に完了させておくタスクでは、用意するコールの本体でこの処理を行う必要があります。

起動タスクの例として、次のものがあります。

� Real Application Clusters 環境の、ベンダーが提供するプロセス・モニターへの登録

� ハードウェア、またはその他の関連リソース(構成のチェックなど)の取得

起動モジュールで定義されるルーチンは、Real Application Clusters のブートストラップの初期段階でコールされます。具体的には、コア・イメージがロードされた直後で、他の OSDモジュールの DLLMain()ルーチンの前、および GCS、GES または Real Application Clusters インスタンスのいずれかが機能する前に、コールされます。通常は、ブートストラップ・ルーチンは、GCS および GES の初期化フェーズで早期にコールされます。

起動モジュール・ルーチンのコール順起動モジュール・ルーチンのコール順起動モジュール・ルーチンのコール順起動モジュール・ルーチンのコール順起動モジュールでは、4 つのルーチンが次の順序でコールされます。

1. START.DLL DLLMain()ルーチン

2. STARTGetVersionInfo()ルーチン

3. STARTStartup()ルーチン

� 通常の Real Application Clusters 操作

� その他すべての OSD モジュールの停止

4. STARTShutdown()ルーチン

他の OSD DLL と同様、DLLMain()ルーチンについては注意が必要です。このルーチンは、正式なバージョン・ネゴシエーションが発生する前にコールされ、バージョン番号に注意が必要な操作は、STARTStartup() ルーチンに従います。

起動 OSD 5-3

Page 64: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

START のデータ構造体

起動モジュールはオプションです。Real Application Clusters のブートストラップ処理中に、起動モジュールが設定されているかどうかを確認するためにSOFWARE¥ORACLE¥OSD9I¥STARTDLLサブキーがチェックされます。設定されている場合は、その設定がロードされ、他の OSD DLL がロードされる前に、コールが行われます。起動ルーチンでエラーが返された場合は、ブートストラップ処理が終了します。起動モジュールが設定されている場合は、Real Application Clusters のブートストラップ処理は、他のコンポーネントおよび OSD を初期化にロードするタスクを続行します。

Oracle Real Application Clusters の起動の制御の起動の制御の起動の制御の起動の制御Real Application Clusters のブートストラップおよび起動のプロセスは、Windows NT のサービス コントロール マネージャによって制御されます。すべてのサービスの開始要求では、起動モジュールのルーチンがコールされます。Real Application Clusters 環境では、後続処理のために、STARTStartup()コールに関する特定の情報を渡します。ここでは、OSD ツリーのルート(SOFTWARE¥ORACLE¥OSD)にレジストリのパスが渡されます。

START のデータ構造体のデータ構造体のデータ構造体のデータ構造体起動 OSD モジュールでは、3 つのデータ構造体が必要です。これらのデータ構造体はOracle で定義されている構造体で、Real Application Clusters 環境と STARTUP OSD で共有されます。具体的なデータ構造体は次のとおりです。

� STARTERROR

� STARTSTATUS

� STARTVERSIONINFO

START のルーチンの説明のルーチンの説明のルーチンの説明のルーチンの説明起動 OSD モジュールには 3 つのルーチンが定義されています。STARTUP OSD モジュールはオプションですが、このモジュールが設定されている場合には、次のルーチンをサポートしておく必要があります。

� STARTGetVersionInfo()

� STARTShutdown()

� STARTStartup()

5-4    Oracle9i Real Application Clusters クラスタ・インタフェース詳細

Page 65: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

汎用 OSD のデータ構造

6

汎用汎用汎用汎用 OSD のデータ構造体のデータ構造体のデータ構造体のデータ構造体

この章では、次の汎用 OSD のデータ構造体について説明します。

� OSDERROR

� OSDSTATUS

� ORAERR

体 6-1

Page 66: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

OSDERROR

OSDERROR

概要概要概要概要typedef LONG OSDERROR;

説明説明説明説明OSDERRORデータ型は、ベース OSD のエラー・タイプとして提供され、モジュール固有のXXERRORは、すべてここから導出されます。このデータ型は、OSD モジュールの複数のルーチンがコールされ、複数のエラー・コードを各モジュールに割り当てることが望ましくない場合に、クライアントによって使用されます。

実装上の注意実装上の注意実装上の注意実装上の注意CM、IPCおよび STARTのエラー・データ型は、汎用の OSDERROR型から導出されます。

関連項目関連項目関連項目関連項目同様の UNIX 概念なし

6-2 Oracle9i Real Application Clusters クラスタ・インタフェース詳細

Page 67: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

OSDSTATUS

OSDSTATUS

概要概要概要概要typedef LONG OSDSTATUS;

説明説明説明説明OSDSTATUSデータ型は、ベース OSD のエラー・タイプとして提供され、モジュール固有のXXXSTATUSは、すべてここから導出されます。このデータ型は、OSD モジュールの複数のルーチンがコールされ、複数のステータス・コードを各モジュールに割り当てることが望ましくない場合に、クライアントによって使用されます。

実装上の注意実装上の注意実装上の注意実装上の注意CM、IPCおよび STARTのステータス・データ型は、汎用の OSDSTATUS型から導出されます。

関連項目関連項目関連項目関連項目同様の UNIX 概念なし

汎用 OSD のデータ構造体 6-3

Page 68: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

ORAERR

ORAERR

概要概要概要概要typedef struct _ORAERR_{ DWORD ErrorCategory; UCHAR Operation[ ORAERR_OPERATION_LEN + 1 ]; UCHAR Location[ ORAERR_LOCATION_LEN + 1]; UCHAR OtherInfo[ ORAERR_OTHER_INFO_LEN + 1]; DWORD OSErrorCode;} ORAERR, *LPORAERR;

説明説明説明説明ORAERROR構造体は、リリース 8.1 以降、ORAERR構造体に移行されました。これは、発生するエラー状態を詳細に記述できるようにするための移行です。ORAERR構造体を使用して、OSD モジュールの実装と Oracle クライアントとの間で、詳細な障害情報を通信します。慣例的に、OSD モジュールの API ルーチンは、ORAERR構造体を 初の引数として受け取るように設計されています。

Oracle クライアントは ORAERR構造体を割り当てて、それを OSD モジュールの API ルーチンに渡します。これらのルーチンには、適切な操作が用意されています。この操作が正常に終了した場合、ORAERRフィールドは無視されます。操作が失敗した場合は、OSD モジュールが、エラー情報を使用して ORAERR構造体を更新します。この情報は、操作が失敗したことを示すリターン・コードとともに、クライアントに渡されます。詳細については、ORAERR構造体を調べる必要があります。

Oracle では、ORAERR構造体の各フィールドの用途を次のように定義しています。

ErrorCategoryこのフィールドは、発生したエラーのタイプに更新されます。

Operationこのフィールドは、実行中の操作を示します。これは OSD では使用されません。

Locationこのフィールドは、エラーが発生した場所を示します。OSD によって現在エラーが発生している関数を特定するために使用されます。

OtherInfoこのフィールドを使用して、エラーが発生した詳細な原因を表します。

6-4 Oracle9i Real Application Clusters クラスタ・インタフェース詳細

Page 69: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

ORAERR

OSErrorCodeOSD モジュールにおける、プラットフォームまたはシステム固有のエラー・フィールド。慣例的に、OSD モジュールのほとんどの実装では、オペレーティング・システム・レベルのエラー・コードが含まれるようにこのフィールドを更新することで、ErrorCategoryにより提供される診断機能を強化しています。Oracle では、この OSErrorCodeフィールドに挿入される OSD モジュールについては制限を設定していません。また、Oracle クライアントは、この内容を解釈しません。ただし、OSErrorCode情報は Oracle によって記録されているため、障害を追跡する際に有効です。

汎用 OSD のデータ構造体 6-5

Page 70: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

ORAERR

6-6 Oracle9i Real Application Clusters クラスタ・インタフェース詳細

Page 71: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

CM のデータ構造体およびルーチンの

7

CM のデータ構造体およびルーチンの定義のデータ構造体およびルーチンの定義のデータ構造体およびルーチンの定義のデータ構造体およびルーチンの定義

この章では、CM のデータ構造体およびルーチンの定義について説明します。

� CM のデータ構造体

� CM のデータ構造体 - 実装定義の構造体

� CM のルーチン - 汎用 OSD コール

� CM のルーチン - コンテキストの作成 / 破棄

� CM のルーチン - クラスタ情報コール

� CM のルーチン - グループ情報関数

� CM のルーチン - プライマリ・メンバーシップ関数

� CM のルーチン - スレーブ・メンバー関数

定義 7-1

Page 72: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

CM のデータ構造体

CM のデータ構造体のデータ構造体のデータ構造体のデータ構造体

CMATTRIBUTE

概要概要概要概要typedef enum _CMATTRIBUTE_ { CMATTRIBUTE_MAX_NODENAME, CMATTRIBUTE_MAX_MEMBERS, CMATTRIBUTE_MAX_NODES } CMATTRIBUTE;

説明説明説明説明CM OSD の実装では、CM 実装サポートの機能を記述するために Real Application Clustersクライアントによって問い合せることが可能な、1 組の属性と値のマッピングをサポートする必要があります。定義されている属性のセットは、次のとおりです。

CMATTRIBUTE_MAX_NODENAMEノード名の 大長を示します。

CMATTRIBUTE_MAX_MEMBERSグループのプライマリ・メンバーの 大数を示します。

CMATTRIBUTE_MAX_NODESクラスタ内のノードの 大数を示します。

実装上の注意実装上の注意実装上の注意実装上の注意実装では、事前定義済のすべての属性に対する問合せをサポートする必要があります。

関連項目関連項目関連項目関連項目UNIX V8 skgxnatr

7-2 Oracle9i Real Application Clusters クラスタ・インタフェース詳細

Page 73: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

CM のデータ構造体

CMCALLBACKS

概要概要概要概要typedef OSDCALLBACKS CMCALLBACKS;

説明説明説明説明CMCALLBACKSの定義では、Oracle9i クライアントが、エラー・ロギングのリストおよび関連する通知コールバックを CM レイヤーに渡すことが許可されています。

実装上の注意実装上の注意実装上の注意実装上の注意この構造体は Oracle が定義しており、実装によって変更することはできません。これは、汎用 OSD 構造体の OSDCALLBACKSに相当します。

関連項目関連項目関連項目関連項目UNIX V8 skgcb

CM のデータ構造体およびルーチンの定義 7-3

Page 74: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

CMCALLBACKCTX

CMCALLBACKCTX

概要概要概要概要typedef OSDCALLBACKCTX CMCALLBACKCTX;

説明説明説明説明CMCALLBACKCTXは、Oracle9i クライアントによって定義される引数で、CMCALLBACK構造体ルーチンで使用されます。

実装上の注意実装上の注意実装上の注意実装上の注意この構造体は Oracle が定義しており、実装によって変更することはできません。これはCMInitContext()を介してクライアントによって提供されますが、CMCALLBACKS構造体内のコールバックがコールされるときは必ず提供される必要があります。

関連項目関連項目関連項目関連項目UNIX V8 skgcbctx

7-4 Oracle9i Real Application Clusters クラスタ・インタフェース詳細

Page 75: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

CM のデータ構造体

CMDATATYPE

概要概要概要概要typedef enum _CMDATATYPE_ { CMDATATYPE_CONTEXT, CMDATATYPE_PGRPHANDLE, CMDATATYPE_SGRPHANDLE } CMDATATYPE, *LPCMDATATYPE;

説明説明説明説明CMDATATYPE列挙構造体は、Real Application Clusters クライアントがサイズを問い合せる必要のある、実装定義のデータ型のセットを記述する際に使用します。このリストは、CM実装のかわりに Real Application Clusters によって割り当てられる一連の構造体を定義したものです。Real Application Clusters クライアントは、構造体用のバックアップ・メモリーを割り当てる前に、必ず構造体のサイズを問い合せます。構造体の内容は不明であり、Real Application Clusters クライアントによって解釈されません。定義済の CMDATATYPE_XXXXは、CMGetDataTypeSize()の引数として使用され、次の実装定義の CM 構造体に対応しています。

関連項目関連項目関連項目関連項目UNIX V8 skgxntp

表表表表 7-1 実装定義の実装定義の実装定義の実装定義の CM 構造体構造体構造体構造体

データ型データ型データ型データ型 データ構造体データ構造体データ構造体データ構造体

CMDATATYPE_CONTEXT CMCONTEXT

CMDATATYPE_PGRPHANDLE CMPHANDLE

CMDATATYPE_SGRPHANDLE CMSHANDLE

CM のデータ構造体およびルーチンの定義 7-5

Page 76: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

CMERROR

CMERROR

概要概要概要概要typedef OSDERROR CMERROR;

説明説明説明説明慣例的に、CM の大部分のルーチンは、要求の完了時にステータスを返すよう設計されています。返されたステータスには、要求した操作が正常に完了したかどうかが示されます。失敗した場合は、CMSTATUS_FAILによって示され、CM OSD の実装では、失敗の理由を示すORAERR構造体を完成させます。Oracle は OSErrorCodeフィールドの内容を解釈しないため、ORAERR構造体の OSErrorCodeフィールドを使用して、OSD のエラー情報を格納できます。いくつかの CMERRORコードが定義されています。実装では、基礎となるエラーを、適切な事前定義済の CMERRORコードにマップし、ORAERR構造体の ErrorCategoryフィールドに格納する必要があります。定義済の IPCERRORは、次のとおりです。

表表表表 7-2 定義済の定義済の定義済の定義済の IPCERROR

CMERROR コードコードコードコード 意味意味意味意味

CMERROR_EUNK 不明な内部 CM エラー。

CMERROR_EINIT 無効または未初期化のコンテキスト。

CMERROR_EPERM 指定の操作が許可されていない 。

CMERROR_EINVAL 無効な引数がコールに渡された。

CMERROR_EUNAVAIL 要求されたサービスが無効。

CMERROR_ESIZE 用意されたバッファが出力データに対して小さすぎる。

CMERROR_EEXIST 指定したリソースが存在しない。

CMERROR_EINUSE 指定されたリソースは、すでに使用中。

CMERROR_EBUSY コンテキストがすでに使用中。

CMERROR_ENOMEM 内部 CM メモリー障害。

7-6 Oracle9i Real Application Clusters クラスタ・インタフェース詳細

Page 77: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

CM のデータ構造体

実装上の注意実装上の注意実装上の注意実装上の注意CM コールの大部分で、CMERROR_ENOMEMは内部 CM 障害を示し、Real Application Clusters 環境は即座にシャットダウンされます。実装では、新規の CMERRORコードは定義しないようにしてください。かわりに、実装では ORAERR構造体の Operation、Locationおよび OtherInfo文字列フィールドを使用して、追加のエラー情報を提供できます。

関連項目関連項目関連項目関連項目UNIX V8 slos

CM のデータ構造体およびルーチンの定義 7-7

Page 78: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

CMEXTENSION

CMEXTENSION

概要概要概要概要typedef OSDEXTENDED CMEXTENSION;

説明説明説明説明CMEXTENSIONは、クライアントが、バイナリ互換性を損なうことなく定義済 CM 関数に拡張パラメータを渡せるよう定義されています。

実装上の注意実装上の注意実装上の注意実装上の注意この構造体は、今後の拡張のためのプレースホルダとして定義されています。特定の定義済ルーチンに新規のパラメータを渡す必要が生じた場合に、この構造体はこれらの拡張パラメータを保持するよう定義されます。この構造体の変更は、それに対応するCMVERSIONINFOの MinorVersionフィールドが変更することで示されます。

関連項目関連項目関連項目関連項目UNIX V8 skgxnext

7-8 Oracle9i Real Application Clusters クラスタ・インタフェース詳細

Page 79: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

CM のデータ構造体

CMGROUPEVENT

概要概要概要概要typedef enum _CMGROUPEVENT_ { CMGROUPEVENT_NULL, CMGROUPEVENT_RECONFIG, CMGROUPEVENT_SUSPEND, CMGROUPEVENT_RESUME, CMGROUPEVENT_ABORT, CMGROUPEVENT_EINVAL } CMGROUPEVENT, *LPCMGROUPEVENT;

説明説明説明説明CMEVENTは、キー・プロセスのグループ・イベントが発生したことを、Real Application Clusters 環境に伝達するために使用します。各ノード上で、CM モジュールおよび関連プロセスは次の処理を実行します。

� 適切なクラスタとプロセス・グループ・イベントの一部またはすべてを検出および診断し、そのようなイベントについてクラスまたはグループ全体でのコンセンサスを図ります。

� これらのイベントを、適切な CMGROUPEVENT構成メンバーにマッピングします。

� 仕様で定義された CMGetGroupStatus()ルーチンを介して、Real Application Clusters 環境に CMGROUPEVENTストリームを渡します。

定義済の CMGROUPEVENTのセットは、基礎となる 1 つ以上のプロセス・グループ・イベントを論理的に表したものです。たとえば、CMEGROUPVENT_RECONFIGは、プロセスの参加およびプロセスの終了など、グループ・メンバーシップの変更を定義する際に使用します。CM モジュールの実装では、オペレーティング・システムまたはシステム・クラスタのイベントを、Real Application Clusters で必要な CMGROUPEVENTにマッピングします。

CMGROUPEVENTのセットは、実際のグループ・メンバーシップの変更、一時的なグループ・イベントおよびグループ未定の期間を通知するイベントを含めるために定義されます。Real Application Clusters に直接送られた CMGROUPEVENTのストリームによって、Real Application Clusters の I/O 回避およびリカバリ・プロセスが起動されます。CM の実装では、グループ・メンバーの推移をすべて検出し、それらを順序付けられたキューで Real Application Clusters に転送する必要があります。CM の実装では、個々のメンバーシップの推移が失われないかぎり、イベントを集計できます。

CM のデータ構造体およびルーチンの定義 7-9

Page 80: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

CMGROUPEVENT

Real Application Clusters 環境は、CM の受動スレーブです。Real Application Clusters には、CM の実装によって提供されたもの以外、プロセス・グループの状態を認識しません。Real Application Clusters は、CM グループの登録を処理し、定期的に CMGROUPEVENTをポーリングします。Real Application Clusters が、メンバーシップの変更を直接検出または実行することはありません。Real Application Clusters プロセス・グループのメンバーシップ通知は、すべて CM モジュールとの対話によって実行されます。

グループのメンバーによる CMGetGroupStatus()コールを介して、Real Application Clusters 環境に CMGROUPEVENTが転送されます。このコールでは常に、キューにあるイベントと、イベント発生時に各プロセス・メンバーが存在する可能性があるかどうかを記述したメンバー・マップを取り出します。CM の実装では、イベントを Real Application Clusters に転送する前に、生成された各イベントのグループ・メンバーについて定数コンセンサスを確立します。

各 CMGROUPEVENTは、Real Application Clusters 環境に対して決定的な意味を持っています。次の CMGROUPEVENTが定義されています。

CMGROUPEVENT_NULL

このイベントは、プロセスのポーリング時に、適切なグループ・メンバーの変更がなかったことを示します。CMGROUPEVENT_NULLは常に、現行のグループ・メンバーシップ・リストが全アクティブ・メンバー間でコンセンサスであり、まだカレントである(すなわち、そのメンバーがまだ全メンバーである)ということを意味します。CMGROUPEVENT_NULLは、CMGetGroupStatus()を介した Real Application Clusters クライアントによる定期的なポーリングを可能にします。

CMGROUPEVENT_RECONFIG

このイベントは、CM でメンバーシップの推移が検出されたことを、Real Application Clusters に知らせる際に使用されます。グループ・イベントが診断され、ローカル CM がグループの現行のアクティブ・メンバーに関して他のアクティブ・ノードとの間で安定したコンセンサスに到達するまで、このイベントは Real Application Clusters に送信しないでください。CMGROUPEVENT_RECONFIGは、メンバーの追加および削除を知らせるために使用されます。

新しいメンバー・リストは、CMGROUPMAP構造体を介してクライアントが利用できます。CM の実装では、複数のメンバーの参加または削除を 1 つの CMGROUPEVENT_RECONFIGに一括するため、Real Application Clusters でプロセスの推移が見逃されることはなくなります。CMGROUPEVENT_RECONFIGが発生した場合は、常にメンバーシップに変更があったことを意味します。実装では、メンバーシップの変更なしに CMGROUPEVENT_RECONFIGを生成することも機能的には許容されますが、その場合、関連アプリケーションがフリーズした際に不必要で長い Real Application Clusters リカバリに変換されることになります。CMGROUPEVENT_RESUMEは、複雑な Real Application Clusters リカバリ処理を回避する場合などに生成してください。

7-10 Oracle9i Real Application Clusters クラスタ・インタフェース詳細

Page 81: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

CM のデータ構造体

コンセンサス・メンバーシップ・リストを成立させるためには、CM がグループ状態の推移をすべて確実に検出し、他の全アクティブ・ノード上の CM と同期する必要があります。CMRECONFIGによって各メンバー・プロセスに報告されるアクティブ・メンバー間に何らかの差異があると、データ整合性の点で深刻な問題に発展する可能性があります。Real Application Clusters は、メンバー・プロセスへの CMGROUPEVENT_RECONFIGの伝播におけるかなりの偏りも許容するよう設計されています。Real Application Clusters リカバリを、すべてのノードに対して開始し(CMGROUPEVENT_RECONFIGを参照)、相互に同期することはできません。ただし、長時間のリカバリを防ぎ、リカバリのタイムアウトを回避するために、CMGROUPEVENT_RECONFIGが短時間(通常は 30 秒未満)で全ノードに伝播されるようCM を設計することは賢明です。

CMGROUPEVENT_SUSPEND

このイベントは、不明なプロセス・グループ障害が発生したために、メンバーシップが変更される可能性があることを Real Application Clusters に通知する際に、CM によって生成されます。CMGROUPEVENT_SUSPENDを受信すると、CM がこの障害を正確に診断し、CMGROUPEVENT_RESUMEまたは CMGROUPEVENT_RECONFIGイベントを提供するまで、Real Application Clusters は操作を停止します。CMGROUPEVENT_SUSPENDイベントは通常、グループ・メンバーシップの変更が開始される可能性があることを示すため、障害の原因を解決し、新たに安定したグループ・メンバーシップ・リストを定義する他のイベントが後続する必要があります。したがって、CMGROUPEVENT_SUSPENDの後には、CMGROUPEVENT_RECONFIGまたは CMGROUPEVENT_RESUMEが続く必要があります。基礎となる実装で、グループの推移が発生しないことを保証できる場合、CMGROUPEVENT_SUSPENDの後には CMGROUPEVENT_RESUMEのみを続けてください。これを保証できない実装の場合、CMGROUPEVENT_SUSPENDの後には必ずCMGROUPEVENT_RECONFIGを続け、疑わしいメンバーをグループから除外してください。CMGROUPEVENT_SUSPENDおよび CMGROUPEVENT_RECONFIGは、常にペアで発生します。CMGROUPEVENT_SUSPENDの発生より前に CMGROUPEVENT_RECONFIGが発生した場合は、CM でのエラーです。

CMGROUPEVENT_RESUME

このイベントは、実際の安定したグループ・メンバーシップ・リストに影響しない、すなわち実際の CMGROUPMAPには変更を与えない偽のグループ障害を通知するために使用します。CMGROUPEVENT_RESUMEによって、実際のグループ推移(すなわちバウンド)の検出が損なわれないよう注意することが重要です。メンバー・プロセスが変更されている、または状態が失われている場合には、CMGROUPEVENT_RESUMEを生成しないでください。CMGROUPEVENT_RESUMEは、有効なすべてのメンバーがバウンドしない、つまり状態の損失が検出されずにメンバーがグループから除外され再参加しないことを CM で保証できる場合にのみ通知する必要があります。パフォーマンスへの影響とは無関係に、これを保証できない CM の実装では、CMGROUPEVENT_SUSPENDの後に CMGROUPEVENT_RECONFIGを続けてください。

CM のデータ構造体およびルーチンの定義 7-11

Page 82: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

CMGROUPEVENT

CMGROUPEVENT_ABORT

このイベントは、グループのメンバーをグループから登録解除する必要があることを通知する際に使用します。これは、CM がクラスタからコマンドを受け、Real Application Clustersでローカルのクリーンアップおよび適切なシャットダウン・セマンティックが可能になったときに、Real Application Clusters によって提供されます。

CMGROUPEVENT_ABORTは、グループ機能を即時に強制終了させるハード停止を通知するという点が、CMGROUPEVENT_ABORTと CMGROUPEVENT_RECONFIGとの主な相違点です。CMGROUPEVENT_RECONFIGは、CM がグループ・メンバーに対して生成するアドバイザ・イベントです。

CMGROUPEVENT_EINVAL

このイベントは、内部エラーを示し、Real Application Clusters を即時停止させるためにCM によって使用されます。

実装上の注意実装上の注意実装上の注意実装上の注意一般にグループは、そのメンバーの状態に影響するグループ全体のイベントが発生しない場合に安定します。グループの 1 つ以上のメンバーが状態変更の可能性を示した場合に、グループは不安定になります。

CM の状態モデルでは、グループの状態に影響する操作として、メンバーの参加、メンバーの削除(正常または異常)、および IPC 遅延などの一時障害の 3 つを想定しています。

適切な CM の実装では、Real Application Clusters 環境で、いくつかの重要な点が保証される必要があります。次のとおりです。

� CM の実装では、グループのメンバーの状態を変更するグループ・イベントを見逃さないようにします。メンバーは、同じメンバーが再参加を試行する前に、特定のメンバーの一貫したビューを監視する必要があります。

� CM では、すべてのイベントの順序を維持します。メンバー停止イベントの後にメンバー起動イベントが続く場合は順序が重要であり、順序が失われないようにしてください。

明示的に必要とはされていませんが、CM の実装では、クライアントがポーリングされたとおりに高信頼性の、また順序付けられたストリームを取得できるよう、順序付けられたイベントのキューを提供する、あるいはそれと同等のメカニズムでイベントの発生を通知すると想定されています。

Real Application Clusters 環境で、信頼性およびデータ整合性の制約を導出するには、これらの要件を満たす必要があります。

関連項目関連項目関連項目関連項目UNIX V8 skgxnge

7-12 Oracle9i Real Application Clusters クラスタ・インタフェース詳細

Page 83: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

CM のデータ構造体

CMFLAGS

概要概要概要概要typedef OSDFLAGS CMFLAGS;

説明説明説明説明CMFLAGSは、CM に対するヒントとして、または CM ルーチンの操作を変更するために用意されています。慣例として、大部分の CM ルーチンは CMFLAGS引数を使用します。実装では、CMFLAG引数をビットマップとして扱う必要があります。各フラグは順序を示すビットで表されます。現在、オラクル社のフラグは定義されていません。

実装上の注意実装上の注意実装上の注意実装上の注意フラグの詳細は、各ルーチンの説明を参照してください。

関連項目関連項目関連項目関連項目UNIX V8 skgxn.h フラグ

CM のデータ構造体およびルーチンの定義 7-13

Page 84: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

CMGROUPMAP

CMGROUPMAP

概要概要概要概要typedef struct _CMGROUPMAP_{ UCHAR MemberBits[8]; } CMGROUPMAP, *LPCMGROUPMAP;

説明説明説明説明CMGROUPMAP構造体は、各ビットがグループ内の各メンバーの状態を表すビットマップとして定義されています。CMGROUPMAPビットマップへの索引としては、CMMEMBERNUMで表されるメンバー番号を使用します。ビットが設定されると、対応するメンバーがアクティブになります。ビットが消去されると、メンバーはアクティブになりません。

CMGROUPMAPビットマップは、Real Application Clusters によって割り当てられたビットの文字列から構成され、グループ・メンバー候補の事前定義済の 大数にサイズ調整されます。CMGROUPMAP構造体は、CMGroupGetStatus()コールを介して CM と Real Application Clusters との間で通信されます。CMGROUPMAPは常に、CMGROUPEVENTと関連付けられています。メンバーシップ・リストが安定している場合、連続したCMGroupGetStatus()コールにおいて同一の CMGROUPMAPが返され、それぞれにCMGROUPEVENT_NULLが関連付けられます。CMGROUPMAPは、プライマリ・グループ・メンバーのセットを定義するものと考えることができます。このとき、各ビット・セットは、アクティブなメンバーのサブセットを定義します。

実装上の注意実装上の注意実装上の注意実装上の注意CMGROUPMAP構造体は、CM と Real Application Clusters の間でグループ状態を通信する際の中心的な構造体です。この構造体は、Real Application Clusters によって割り当てられ、グループ・メンバーシップ・リストを取得するために CMGroupGetStatus()コールを介して CM に渡されます。現在、Real Application Clusters では 64 のメンバーがサポートされています。

関連項目関連項目関連項目関連項目UNIX V8 skgxnmap

7-14 Oracle9i Real Application Clusters クラスタ・インタフェース詳細

Page 85: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

CM のデータ構造体

CMGROUPNAME

概要概要概要概要typedef PUCHAR CMGROUPNAME;

説明説明説明説明CMGROUPNAMEは、ヌル文字で終了するテキスト文字列で、グループの名前を表します。グループは、クラスタ中の各プロセスを登録しメンバーとすることが可能なグローバル・リソースです。グループは、その名前で識別されます。

実装上の注意実装上の注意実装上の注意実装上の注意Oracle クライアントによって渡される名前の 大長は、18 文字です(NULLを含まない)。クラスタ上に同時に存在できるグループの数に、制限はありません(あっても、その値は非常に大きな数です)。

関連項目関連項目関連項目関連項目UNIX V8 skgxnreg

CM のデータ構造体およびルーチンの定義 7-15

Page 86: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

CMMEMBERNUM

CMMEMBERNUM

概要概要概要概要typedef ULONG CMMEMBERNUM, *LPMEMBERNUM;

説明説明説明説明CMMEMBERNUMは、CM のグループ実装でサポートされる 0(ゼロ)~( 大メンバー数 -1)の序数です。この数値が、クラスタ内のメンバーを一意に識別し、メンバー操作に使用されます。CMMEMBERNUMは、CMGROUPMAPでの索引として、Real Application Clusters の内部で使用され、常に 0(ゼロ)から開始するよう定義されています。

実装上の注意実装上の注意実装上の注意実装上の注意CMMEMBERNUMは、CM とクライアントの間で、イベントのソースを特定し、操作を適用したいメンバーを特定するために通信されるハンドルです。CMGROUPMAP内の、対応するCMMEMBERNUMは、メンバーがアクティブの場合は設定され、ノードがアクティブでない場合は解除されます。

関連項目関連項目関連項目関連項目UNIX V8 skgxnreg

7-16 Oracle9i Real Application Clusters クラスタ・インタフェース詳細

Page 87: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

CM のデータ構造体

CMNODENAME

概要概要概要概要typedef PUCHAR CMNODENAME;

説明説明説明説明CMNODENAMEは、ヌル文字で終了する文字列で、ノードの名前を表します。CMGetNodeName()を使用して、指定したノード番号のノード名を取得できます。

実装上の注意実装上の注意実装上の注意実装上の注意各ノードのノード名は、クラスタの他のノードからそのノードへの通信に使用可能です。具体的には、名前をプロトコル・アダプタ用の TNS アドレスに置換し、そのノード上のプロセスがリスニングできるアドレスを生成することで、他のノードがこれを使用し、リスニング・プロセスにコンタクトできます。この機能は、SRVM および Oracle Cluster Setup Wizard によって使用されるため、実装の際には、ノード命名の要件の詳細について、該当するドキュメントを参照してください。ノードのノード名は、アクティブなクラスタ・メンバーシップの一部である間は変更できません。

関連項目関連項目関連項目関連項目UNIX V8 skgxnqname

CM のデータ構造体およびルーチンの定義 7-17

Page 88: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

CMNODENUM

CMNODENUM

概要概要概要概要typedef ULONG CMNODENUM, *LPCMNODENUM;

説明説明説明説明CMNODENUMは、CM の実装でサポートされる 0(ゼロ)~( 大ノード数 -1)の序数です。この数値が、クラスタ内のノードを一意に識別し、ノード操作に使用されます。ローカル・ノードのノード番号は、CMGetNodeNum()によって返されます。

実装上の注意実装上の注意実装上の注意実装上の注意クラスタ内の各ノードには、管理およびデバッグの目的上、一意の CMNODENUMが割り当てられます。Real Application Clusters では、CMNODENUMにより参照される特定のノードと、任意の物理ノードとの間に、クラスタ操作中は常時、直接かつ一定のマッピングが想定されます。クラスタの停止中に CMNODENUMマッピングを変更することは問題ありませんが、クラスタの操作中にはマッピングを変更しないでください。

関連項目関連項目関連項目関連項目UNIX V8 skgxn.h skgxnqcnum

7-18 Oracle9i Real Application Clusters クラスタ・インタフェース詳細

Page 89: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

CM のデータ構造体

CMSTATUS

概要概要概要概要typedef OSDSTATUS CMSTATUS;

説明説明説明説明慣例的に、CM の大部分のルーチンは、ルーチンが正常に完了したかどうかを示すステータス・コードを返すよう定義されます。定義済のリターン・コードは、次のとおりです。

CMSTATUS_SUCC: ルーチンが正常に完了したことを示します。

CMSTATUS_FAIL: ルーチンが完了に失敗したことを示します。

実装上の注意実装上の注意実装上の注意実装上の注意実装では、CMSTATUS_FAILが返された場合は、常に ORAERRのエラー・コード・フィールドを更新する必要があります。

関連項目関連項目関連項目関連項目UNIX V8 slos

CM のデータ構造体およびルーチンの定義 7-19

Page 90: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

CMVERSIONINFO

CMVERSIONINFO

概要概要概要概要typedef OSDVERSIONINFO CMVERSIONINFO;

説明説明説明説明この構造体は、Oracle クライアントと OSD モジュールの実装の間での Real Application Clusters API のバージョン情報を通信します。このバージョン構造体は、Real Application Clusters API の両方の側がバイナリ互換であることを検証するための、双方向のバージョン・ネゴシエーション・ダイアログを実現するために用意されています。MajorVersionおよび MinorVersionフィールドは、CMGetVersionInfo()コールを介してそれらを渡すコンポーネントのリビジョン番号を保持するよう定義されています。

MajorVersion

この構造体の MajorVersionの部分は、コンポーネントが依存する仕様のリビジョン・レベルを示すために使用されます。同じ MajorVersion番号で設計およびコーディングされているコンポーネントには、バイナリ互換性があります。MajorVersionが一致していない場合、モジュールにはバイナリ互換性がありません。

MinorVersion

MinorVersionは、MajorVersionレベルの仕様に対する、バイナリ互換性には影響がない改訂と拡張を指定するために使用されます。

実装上の注意実装上の注意実装上の注意実装上の注意この構造体は、ベンダーの OSD コンポーネントが Real Application Clusters 環境によってロードされるときに、Real Application Clusters と OSD 間のバージョン・ネゴシエーションを実行するために使用されます。Real Application Clusters では、DLL がロードおよび初期化された直後に、自身のバージョン番号に対して OSD のバージョン番号がチェックされます。ただしこれは、DLLEntryPoint()以外のルーチンがコールされて、互換性が確認される前に実行されます。DLL の DLLEntryPoint()ルーチンは、関連するGetVersionInfo()ルーチンより前にコールされるため、DLLEntryPoint()では、バージョンに依存しない初期化アクティビティのみが発生する必要があることに注意してください。

関連項目関連項目関連項目関連項目UNIX V8 skgxnvers

7-20 Oracle9i Real Application Clusters クラスタ・インタフェース詳細

Page 91: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

CM のデータ構造体 - 実装定義の構造体

CM のデータ構造体のデータ構造体のデータ構造体のデータ構造体 - 実装定義の構造体実装定義の構造体実装定義の構造体実装定義の構造体

CMCONTEXT

概要概要概要概要typedef PVOID CMCONTEXT;

説明説明説明説明CM パッケージの基本のコンテキスト構造体です。このパッケージの一部を使用するすべてのクライアントは、他の CM 関数をコールする前に、CMInitContext()を使用してこれを初期化する必要があります。コンテキスト用のメモリーは、CMInitContext()をコールする前に、コール側で割り当ててください。任意の実装における CMCONTEXT構造体のサイズは、CMGetDataTypeSize()をコールする際に、タイプ・パラメータをCMDATATYPE_CONTEXTとすることにより決定できます。コンテキストはCMDeleteContextによってリセットされ、その後は CM レイヤーへのコールはできなくなります。

コンテキストを初期化したプロセスまたはスレッドに属するコンテキストは、共有できません。ただし、ノード上の各プロセスまたはスレッドが、それ自体の CM コンテキストを初期化することは可能です。

関連項目関連項目関連項目関連項目UNIX V8 skgxncx

CM のデータ構造体およびルーチンの定義 7-21

Page 92: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

CMPHANDLE

CMPHANDLE

概要概要概要概要typedef PVOID CMPHANDLE;

説明説明説明説明プロセス・グループのプライマリ・メンバー・ハンドル構造体です。コール側がプロセス・グループに登録される際に、CMGroupJoin()によって初期化されます。これは、メンバーを CM に識別させ、グループにおけるクライアントのメンバーシップに関連する今後のコールに必要なすべてのコンテキスト情報を含みます。ハンドル用のメモリーは、CMGroupJoin()をコールする前に、割り当てる必要があります。任意の実装におけるCMPHANDLEのサイズは、CMGetDataTypeSize()をコールする際に、タイプ・パラメータを CMDATATYPE_PGRPHANDLEとすることにより決定できます。CMPHANDLEハンドルは、CMGroupExit()(グループの登録解除)または CMDeleteContext()(プライマリ・コンテキストを消去)によってリセットされます。

関連項目関連項目関連項目関連項目UNIX V8 skgxnghdl

7-22 Oracle9i Real Application Clusters クラスタ・インタフェース詳細

Page 93: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

CM のデータ構造体 - 実装定義の構造体

CMSHANDLE

概要概要概要概要typedef PVOID CMSHANDLE;

説明説明説明説明プロセス・グループのスレーブ・メンバー・ハンドル構造体です。コール側がスレーブ・メンバーとしてプロセス・グループに登録される際に、CMGroupRegister()によって初期化されます。これは、スレーブ・メンバーを CM に識別させ、CM レイヤーで保持される必要のあるすべての状態を含みます。ハンドル用のメモリーは、CMGroupRegister()をコールする前に、割り当てる必要があります。任意の実装における CMSHANDLEのサイズは、CMGetDataTypeSize()をコールする際に、タイプ・パラメータをCMDATATYPE_SGRPHANDLEとすることにより決定できます。スレーブ・ハンドルは、CMGroupDeregister()によってコール側がグループから登録解除される際に、またはプライマリ・コンテキストが CMDeleteContext()によって消去される際にリセットされます。

関連項目関連項目関連項目関連項目UNIX V8 skgxnshdl

CM のデータ構造体およびルーチンの定義 7-23

Page 94: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

CM のルーチン - 汎用 OSD コール

CM のルーチンのルーチンのルーチンのルーチン - 汎用汎用汎用汎用 OSD コールコールコールコール

CMGetAttributeValue: 事前定義済属性の値を返す 事前定義済属性の値を返す 事前定義済属性の値を返す 事前定義済属性の値を返す

概要概要概要概要LONG CMGetAttributeValue(IN OUT LPORAERR Error, IN CMATTRIBUTE Attribute, IN CMEXTENSION ExtendedInfo, IN CMFLAGS Flags);

パラメータパラメータパラメータパラメータ

ErrorORAERR構造体へのポインタです。この構造体には、失敗の理由を示すために実装により設定される各種のエラー・フィールドが含まれます。

Attribute問い合せる CMATTRIBUTEを指定します。

ExtendedInfo将来的に使用するために予約されている引数です。

Flagsこのルーチンに定義されているフラグはありません。

戻り値戻り値戻り値戻り値要求 CMATTRIBUTEの値を返します。慣例的に、戻り値は正の値と定義されています。不明な CMATTRIBUTEに対する問合せでは、-1 が返され、ORAERRエラー・コードは次のように設定されます。

CMERROR_EINVAL不明または不正な引数が渡されたことを示しています。

説明説明説明説明CMGetAttributeValue()コールでは、クライアントが事前定義済の CMATTRIBUTEの値を問い合せることが可能です。この値は、Real Application Clusters クライアントがその後の操作およびコール順序を構成する際に使用されます。

7-24 Oracle9i Real Application Clusters クラスタ・インタフェース詳細

Page 95: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

CM のルーチン - 汎用 OSD コール

実装上の注意実装上の注意実装上の注意実装上の注意CMATTRIBUTE_MAX_NODES属性は、クラスタで許可されている 大ノード数を参照します。これは、アクティブなノード数、または構成されたノード数より大きい場合があります(新規ハードウェアのホット・プラグを可能にするため)。

詳細は、CMATTRIBUTEデータ構造体を参照してください。

DLL 情報情報情報情報CM.DLL - 関数 3

関連項目関連項目関連項目関連項目CMATTRIBUTE

UNIX V8 skgxqat()

CM のデータ構造体およびルーチンの定義 7-25

Page 96: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

CMGetDataTypeSize: 事前定義済データ型のサイズを返す

CMGetDataTypeSize: 事前定義済データ型のサイズを返す 事前定義済データ型のサイズを返す 事前定義済データ型のサイズを返す 事前定義済データ型のサイズを返す

概要概要概要概要ULONG CMGetDataTypeSize(IN OUT LPORAERR Error, IN CMDATATYPE DataType, IN CMEXTENSION ExtendedInfo, IN CMFLAGS Flags);

パラメータパラメータパラメータパラメータ

ErrorORAERR構造体へのポインタです。この構造体には、失敗の理由を示すために実装により設定される各種のエラー・フィールドが含まれます。

DataTypeコールによる情報取得の対象となる、事前定義済の CM データ型を示します。

ExtendedInfo将来的に使用するために予約されている引数です。

Flagsこのルーチンに定義されているフラグはありません。

戻り値戻り値戻り値戻り値指定したデータ型のサイズをバイト単位で返します。実装では、エラーを示す場合には0(ゼロ)を返し、ORAERRエラー・コードは次のように設定されます。

CMERROR_EINVAL不明または不正な引数が渡されたことを示しています。

説明説明説明説明この関数は、クライアントが実装定義のデータ構造体のサイズを問い合せるために用意されています。クライアントは通常、構造体用のバックアップ・メモリーを割り当てる前にこのルーチンをコールします。

実装上の注意実装上の注意実装上の注意実装上の注意指定されたデータ構造体型に基づいて、クライアントが割り当てるバックアップ・メモリーは、適切なクライアント・メモリー領域、つまり Real Application Clusters の全クライアントが共有する領域か、プロセス専用のメモリーのいずれかから確保されます。クライアントは、このメモリーの内容に直接アクセスすることはありません。これは、OSD 実装のために割り当てられています。

7-26 Oracle9i Real Application Clusters クラスタ・インタフェース詳細

Page 97: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

CM のルーチン - 汎用 OSD コール

DLL 情報情報情報情報CM.DLL - 関数 2

関連項目関連項目関連項目関連項目CMDATATYPESIZE

UNIX V8 skgxnqtsz()

CM のデータ構造体およびルーチンの定義 7-27

Page 98: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

CMGetVersionInfo: CM クライアントとの間でバージョン情報のネゴシエーションを実行

CMGetVersionInfo:    CM クライアントとの間でバージョン情報のクライアントとの間でバージョン情報のクライアントとの間でバージョン情報のクライアントとの間でバージョン情報のネゴシエーションを実行ネゴシエーションを実行ネゴシエーションを実行ネゴシエーションを実行

概要概要概要概要CMSTATUS CMGetVersionInfo(IN LPCMVERSIONINFO ClientVersionInfo, IN OUT LPCMVERSIONINFO CMVersionInfo, IN OUT LPSTR VendorId, IN LONG VendorIdSize, IN CMEXTENSION ExtendedInfo);

パラメータパラメータパラメータパラメータ

ClientVersionInfoコール側の Real Application Clusters クライアントのバージョン番号およびリリース番号のリビジョン・レベルを示す、CMGetVersionInfo()ルーチンに渡される構造体です。

CMVersionInfoCM モジュールのバージョン番号およびリリース番号のレベルを取得するために、クライアントによって CMGetVersionInfo()ルーチンに渡される構造体です。

VendorIdCM OSD モジュールによってベンダー固有の実装文字列が格納される ASCIIの NULL終端文字列へのポインタです。

VendorIdSize事前に割り当てられた VendorIdバッファのサイズを示すために、クライアントによって渡される値です。

ExtendedInfo将来的に使用するために予約されている引数です。

戻り値戻り値戻り値戻り値クライアントと OSD モジュールの間でバージョン情報のネゴシエーションが正常に実行された場合、CMSTATUS_SUCCを返します。それ以外の場合は、バージョンの不一致を示すCMSTATUS_FAILが返される必要があります。

7-28 Oracle9i Real Application Clusters クラスタ・インタフェース詳細

Page 99: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

CM のルーチン - 汎用 OSD コール

説明説明説明説明このコールは、CM OSD の DLL がロードされ、DLLMain()ルーチンがコールされた直後に実行されます。Real Application Clusters クライアントは、想定される OSD 仕様のバージョン番号を示す ClientVersionInfo構造体を渡します。渡されるリリース番号は、バージョン番号により示される仕様のうちで、バイナリ互換性のあるリビジョンを示すために使用されます。OSD の実装では、互換性を確認するために渡されたバージョン番号を問い合せるとともに、不一致が検出された場合はエラーを返す必要があります。また、OSD の実装では、リリース番号も問い合せる必要がありますが、必ずしも厳密に一致させる必要はありません。この問合せは単に、バージョン番号により示される仕様の、バイナリ互換性のある拡張を示すためにのみ使用されるためです。

同様に OSD の実装では、CMVersionInfo構造体を、依存する関連バージョン情報で更新する必要があります。Real Application Clusters クライアントでは、返された情報の整合性チェックが実行されます。このとき、バージョン番号が厳密に一致しているかどうかは検証しますが、リリース番号の不一致は無視されます。ベンダーは、OSD モジュールの実装インスタンスを追跡するために、リリース番号も使用することが推奨されます。

VendorId文字列は、ベンダーにより定義され、一意の OSD 識別子が任意に提供されます。Real Application Clusters クライアントは、通常 VendorIdフィールドをログ目的に使用するのみで、その内容は解釈しません。

実装では、この関数をサポートする必要があります。実装では、特定のバージョン番号およびリリース番号に対する移植キットでリリースされているヘッダー・ファイルをチェックする必要があります。

CMGetVersion()は、Real Application Clusters 環境の存続期間を通じて複数回コールできます。

DLL 情報情報情報情報CM.DLL - 関数 1

関連項目関連項目関連項目関連項目CMVERSIONINFO

UNIX V8 skgxnever()

CM のデータ構造体およびルーチンの定義 7-29

Page 100: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

CM のルーチン - コンテキストの作成 / 破棄

CM のルーチンのルーチンのルーチンのルーチン - コンテキストの作成コンテキストの作成コンテキストの作成コンテキストの作成 / 破棄破棄破棄破棄

CMDeleteContext: 初期化された 初期化された 初期化された 初期化された CM コンテキストを破棄コンテキストを破棄コンテキストを破棄コンテキストを破棄

概要概要概要概要CMSTATUS CMDeleteContext(IN OUT LPORAERR Error, IN CMCONTEXT Context, IN CMEXTENSION ExtendedInfo, IN CMFLAGS Flags);

パラメータパラメータパラメータパラメータ

ErrorORAERR構造体へのポインタです。この構造体には、失敗の理由を示すために実装により設定される各種のエラー・フィールドが含まれます。

Context削除する CMCONTEXT構造体へのポインタです。

ExtendedInfo将来的に使用するために予約されている引数です。

Flagsこの仕様ではフラグは使用しません。

戻り値戻り値戻り値戻り値処理が正常に完了した場合は CMSTATUS_SUCC、失敗した場合は CMSTATUS_FAILを返します。CMSTATUS_FAILが返された場合、コール側は発生した特定のエラーの ORAERRをチェックする必要があります。

説明説明説明説明この関数では、以前に初期化された CMCONTEXTが削除されます。削除する CMCONTEXTに関連するアクティブなリソースは、すべてパージしてください。コール側では、このコールで成功の戻り値を得られた後に、CMCONTEXTに関連するメモリーを解放できます。削除した CMCONTEXT構造体によって識別されたクライアントが、CM 操作の実行を継続する場合には、初期化された有効な CMCONTEXTを再度取得する必要があります。コール側がいずれかのプロセス・グループのメンバーであった(CMGroupJoin()またはCMGroupRegister()を介して)場合、このコールによって、そのグループから登録解除されます。

7-30 Oracle9i Real Application Clusters クラスタ・インタフェース詳細

Page 101: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

CM のルーチン - コンテキストの作成 / 破棄

実装上の注意実装上の注意実装上の注意実装上の注意実装では、クライアントが再利用できるように、必ず CMCONTEXT構造体をパージする必要があります。CMCONTEXTおよび関連する構造体のクリーンアップと、異常終了したクライアント・プロセスのための主な操作は、実装で処理されます。実装では、異常終了の際に基礎となるリソースが必ず解放されるようにしてください。

CMCONTEXT構造体は特定のクライアントに属していますが、所有者が終了しようとしている場合など、異常があった場合には、CMCONTEXTの所有者にかわって別のクライアントがCMDeleteContext()をコールすることがあります。Real Application Clusters では、一方向でも双方向でも、各クライアントごとに CMDeleteContext()がコールされることを保証します。

実装では、CMCONTEXT構造体の格納に使用されるバックアップ・メモリーの割当てを解除しないでください。このメモリーは、割り当てているクライアントによって所有され、そのクライアントの判断で再利用または再割当てが可能です。

DLL 情報情報情報情報CM.DLL - 関数 5

関連項目関連項目関連項目関連項目UNIX V8 skgxncdel

CM のデータ構造体およびルーチンの定義 7-31

Page 102: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

CMInitContext: CM コンテキストを初期化

CMInitContext:    CM コンテキストを初期化コンテキストを初期化コンテキストを初期化コンテキストを初期化

概要概要概要概要CMSTATUS CMInitContext(IN OUT LPORAERR Error, IN OUT CMCONTEXT Context, IN CMCALLBACKS CallBacks, IN CMCALLBACKCTX CallBackContext, IN CMEXTENSION ExtendedInfo, IN CMFLAGS Flags);

パラメータパラメータパラメータパラメータ

ErrorORAERR構造体へのポインタです。この構造体には、失敗の理由を示すために実装により設定される各種のエラー・フィールドが含まれます。

Context初期化する CMCONTEXT構造体へのポインタです。

CallBacksOracle9i クライアントは、ルーチンのロギング・エラーを含む有効な構造体を渡します。

CallBackContextOracle9i クライアントは、CallBacks構造体で示されたルーチンをコールする際に使用する必要があるコンテキスト引数へのポインタを渡します。

ExtendedInfo将来的に使用するために予約されている引数です。

Flagsこの仕様ではフラグは使用しません。

戻り値戻り値戻り値戻り値処理が正常に完了した場合は CMSTATUS_SUCC、失敗した場合は CMSTATUS_FAILを返します。CMSTATUS_FAILが返された場合、ORAERRエラー・コードは次のように更新されます。

CMERROR_EUNAVAILCM サービスが現在、このノード上で使用できないことを示します。

CMERROR_EPERMクライアントが、CM サービスを使用する許可を持っていないことを示します。

7-32 Oracle9i Real Application Clusters クラスタ・インタフェース詳細

Page 103: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

CM のルーチン - コンテキストの作成 / 破棄

説明説明説明説明この関数では、新規の CMCONTEXT構造体の初期化に必要な、実装固有のタスクを実行します。他の CM 操作が初期化される前に、各クライアントによって少なくとも 1 回はコールされる必要があります。クライアントは、実装定義の CMCONTEXT構造体にバックアップ・メモリーを割り当てますが、その内容にはアクセスせず、それを解釈もしません。クライアントは、初期化されたコンテキストを、それが必要な他の CM ルーチンに渡します。

また、クライアントは CMCALLBACK構造体も渡します。この構造体では、エラーその他の例外的なイベントを通知およびロギングする際に実装で使用できる、主要なコールバック・ルーチンを提供します。

実装上の注意実装上の注意実装上の注意実装上の注意CM の実装では、主な CM 操作をすべて追跡し、それらを開始したクライアント・プロセスまたはスレッドに関連付ける必要があります。これは、主な CM 操作のすべてが、特定のCMCONTEXT構造体で記述できる識別可能なクライアントによって所有されるということです。

CMCONTEXTは、クライアントの識別を可能にし、追跡の要件を要求するために用意されています。実装では、各プロセスまたはスレッドに関する他の関連クライアント情報も、自由にコンテキスト構造体に格納できます。

DLL 情報情報情報情報CM.DLL - 関数 4

関連項目関連項目関連項目関連項目UNIX V8 skgxncini

CM のデータ構造体およびルーチンの定義 7-33

Page 104: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

CMTrace: CM トレースを有効化 / 無効化

CMTrace:    CM トレースを有効化トレースを有効化トレースを有効化トレースを有効化 / 無効化無効化無効化無効化

概要概要概要概要CMSTATUS CMTrace(IN OUT LPORAERR Error, IN CMCONTEXT Context, IN CMEXTENSION ExtendedInfo, IN CMFLAGS Flags);

パラメータパラメータパラメータパラメータ

ErrorORAERR構造体へのポインタです。この構造体には、失敗の理由を示すために実装により設定される各種のエラー・フィールドが含まれます。

Context削除する CMCONTEXT構造体へのポインタです。

ExtendedInfo将来的に使用するために予約されている引数です。

Flagsフラグ引数は、このルーチンの操作を修正する際に使用します。定義済のフラグ引数は、次のとおりです。

CMTRACE_MFメタ関数(CMDeleteContextおよび CMGetAttributeValue)をトレースします。

CMTRACE_CQクラスタ問合せ関数(CMGetNodeNum、CMGetNodeNameおよび CMGetNodeList)をトレースします。

CMTRACE_GQグループ問合せ関数(CMGroupGetListおよび CMGetMemberPublicInfo)をトレースします。

CMTRACE_PMプライマリ・メンバーシップ関数(CMGroupJoin、CMGroupExitおよびCMGetMemberPrivateInfo)をトレースします。

CMTRACE_PSECMGroupGetStatusによってイベントが返される場合のみ、それをトレースします。

7-34 Oracle9i Real Application Clusters クラスタ・インタフェース詳細

Page 105: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

CM のルーチン - コンテキストの作成 / 破棄

CMTRACE_PSCCMGroupGetStatusに対するすべてのコールをトレースします。

CMTRACE_SMスレーブ・メンバーシップ・コール(CMGroupRegisterおよびCMGroupDeregister)をトレースします。

CMTRACE_ER異常またはエラーの状態をトレースします。

戻り値戻り値戻り値戻り値処理が正常に完了した場合は CMSTATUS_SUCC、失敗した場合は CMSTATUS_FAILを返します。CMSTATUS_FAILが返された場合、コール側は発生した特定のエラーの ORAERRをチェックする必要があります。

説明説明説明説明この関数によって、指定したコンテキストのトレースがオンまたはオフになります。トレースのレベルは、設定されたフラグによって決定されます。クライアントでは、任意の組合せでフラグを設定できます。トレース・フラグを 0(ゼロ)に設定して CMTrace()をコールすると、任意のコンテキストのトレースをオフにすることが可能です。

実装上の注意実装上の注意実装上の注意実装上の注意実装では、CALLBACK構造体を介して CMInitContext()に提供されるコールバック・ルーチンを使用して、トレース情報を書き込む必要があります。トレース情報は、デバッグ・プロセスに使用されます。このルーチンは同期式であり、転送できません。

DLL 情報情報情報情報CM.DLL - 関数 6

関連項目関連項目関連項目関連項目UNIX V8 skgxntrace

CM のデータ構造体およびルーチンの定義 7-35

Page 106: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

CM のルーチン - クラスタ情報コール

CM のルーチンのルーチンのルーチンのルーチン - クラスタ情報コールクラスタ情報コールクラスタ情報コールクラスタ情報コール

CMGetNodeNum: ローカル・ノード用のクラスタ・ノード番号を取得 ローカル・ノード用のクラスタ・ノード番号を取得 ローカル・ノード用のクラスタ・ノード番号を取得 ローカル・ノード用のクラスタ・ノード番号を取得

概要概要概要概要CMSTATUS CMGetNodeNum(IN OUT LPORAERR Error, IN CMCONTEXT Context, OUT LPCMNODENUM NodeNum, IN CMEXTENSION ExtendedInfo, IN CMFLAGS Flags);

パラメータパラメータパラメータパラメータ

ErrorORAERR構造体へのポインタです。この構造体には、失敗の理由を示すために実装により設定される各種のエラー・フィールドが含まれます。

Contextトレースが有効化または無効化される CMCONTEXT構造体へのポインタです。

NodeNum返されるノード番号へのポインタです。

ExtendedInfo将来的に使用するために予約されている引数です。

Flagsこの仕様ではフラグは使用しません。

戻り値戻り値戻り値戻り値処理が正常に完了した場合は CMSTATUS_SUCC、失敗した場合は CMSTATUS_FAILを返します。CMSTATUS_FAILが返された場合、コール側は発生した特定のエラーの ORAERRをチェックする必要があります。

7-36 Oracle9i Real Application Clusters クラスタ・インタフェース詳細

Page 107: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

CM のルーチン - クラスタ情報コール

説明説明説明説明このコールでは、現在のノードに関連付けられているノード番号を返します。正常に実行された場合、その値は *NodeNumに格納されます。ノード番号は、0(ゼロ)または 1 から始まりますが、連続している必要はありません。ノード番号は、クラスタリング・ソフトウェアで使用されているベンダーのノード番号に常に一致している必要があるため、プラットフォームのツールがノード番号 5 をコールする場合、CM の実装でもこのノードを 5 番に設定する必要があります。ノードのノード番号は、アクティブなクラスタ・メンバーシップの一部である間は変更しないでください。

DLL 情報情報情報情報CM.DLL - 関数 7

関連項目関連項目関連項目関連項目UNIX V8 skgxnqcnum

CM のデータ構造体およびルーチンの定義 7-37

Page 108: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

CMGetNodeName: 指定したノード番号のノード名を取得

CMGetNodeName: 指定したノード番号のノード名を取得 指定したノード番号のノード名を取得 指定したノード番号のノード名を取得 指定したノード番号のノード名を取得

概要概要概要概要CMSTATUS CMGetNodeName(IN OUT LPORAERR Error, IN CMCONTEXT Context, IN CMNODENUM NodeNum, IN OUT CMNODENAME NodeName, IN ULONG NodeNameBufSize, IN OUT PULONG NodeNameSize, IN CMEXTENSION ExtendedInfo, IN CMFLAGS Flags);

パラメータパラメータパラメータパラメータ

ErrorORAERR 構造体へのポインタです。この構造体には、失敗の理由を示すために実装により設定される各種のエラー・フィールドが含まれます。

Contextトレースが有効化または無効化される CMCONTEXT構造体へのポインタです。

NodeNumノードのノード番号です。

NodeNameNodeNumによって識別されるノードの、ヌル文字で終了する名前です。

NodeNameBufSiz名前を格納するために提供されるバッファのサイズです。

NodeNameSize名前の実際の長さです。

ExtendedInfo将来的に使用するために予約されている引数です。

Flagsこの仕様ではフラグは使用しません。

7-38 Oracle9i Real Application Clusters クラスタ・インタフェース詳細

Page 109: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

CM のルーチン - クラスタ情報コール

戻り値戻り値戻り値戻り値処理が正常に完了した場合は CMSTATUS_SUCC、失敗した場合は CMSTATUS_FAILを返します。CMSTATUS_FAILが返された場合、コール側は発生した特定のエラーの ORAERRをチェックする必要があります。具体的には、次をチェックします。

CMERROR_ESIZE渡されたバッファのサイズが不足しており、ノード名を保持できないことを示します。

CMERROR_EEXIST指定したノードが存在しないことを示します。

説明説明説明説明この関数では、NodeNumで指定したノードのノード名を返します。コール側は、出力バッファ NodeNameとそのサイズ NodeNameBufSizを提供します。CMGetNodeName()は、ノード名を NodeNameにコピーし、その名前の実際の長さを NodeNameSizeに格納して、TRUEを返します。渡されたバッファが小さすぎて名前を格納できない場合、FALSEが返され、必要なバッファ・サイズ(すなわち、名前の実際の長さ)が NodeNameSizeで返されます。

NodeNameが NULLで、NodeNameBufSizeが 0(ゼロ)の場合、NodeNameSizeでは名前の長さのみが返され、名前自体は返されません。

各ノードのノード名は、クラスタの他のノードからそのノードへの通信に使用可能です。具体的には、名前をプロトコル・アダプタ用の TNS アドレスに置換し、そのノード上のプロセスがリスニングできるアドレスを生成することで、他のノードがこれを使用し、リスニング・プロセスにコンタクトできます。この機能は、SRVM および Oracle Cluster Setup Wizard によって使用されるため、実装の際には、ノード命名の要件の詳細について、該当するドキュメントを参照してください。ノードのノード名は、アクティブなクラスタ・メンバーシップの一部である間は変更できません。

DLL 情報情報情報情報CM.DLL - 関数 8

関連項目関連項目関連項目関連項目UNIX V8 skgxnqname

CM のデータ構造体およびルーチンの定義 7-39

Page 110: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

CMGetNodeList: 現在構成されているノードのベクターを問合せ

CMGetNodeList: 現在構成されているノードのベクターを問合せ 現在構成されているノードのベクターを問合せ 現在構成されているノードのベクターを問合せ 現在構成されているノードのベクターを問合せ

概要概要概要概要CMSTATUS CMGetNodeList(IN OUT LPORAERR Error, IN CMCONTEXT Context, IN OUT PULONG NodeMap, IN ULONG NodeMapElements, IN OUT PULONG ActiveNodes, IN CMEXTENSION ExtendedInfo, IN CMFLAGS Flags);

パラメータパラメータパラメータパラメータ

ErrorORAERR構造体へのポインタです。この構造体には、失敗の理由を示すために実装により設定される各種のエラー・フィールドが含まれます。

Contextトレースが有効化または無効化される CMCONTEXT構造体へのポインタです。

NodeMapノード番号が代入される整数の配列へのポインタです。

NodeMapElementsNodeMap内の要素数です。

ActiveNodes使用された NodeMapエントリの数です。

ExtendedInfo将来的に使用するために予約されている引数です。

Flagsこの仕様ではフラグは使用しません。

戻り値戻り値戻り値戻り値処理が正常に完了した場合は CMSTATUS_SUCC、失敗した場合は CMSTATUS_FAILを返します。CMSTATUS_FAILが返された場合、コール側は発生した特定のエラーの ORAERRをチェックする必要があります。具体的には、次をチェックします。

CMERROR_ESIZENodeMapが小さすぎて、すべてのノード番号を保持できないことを示します。

7-40 Oracle9i Real Application Clusters クラスタ・インタフェース詳細

Page 111: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

CM のルーチン - クラスタ情報コール

説明説明説明説明この関数では、整数 NodeMapの配列を受け取り、クラスタ内の各ノードのノード番号をそれに代入します。NodeMapElementsパラメータは、クラスタ内で現在構成されているすべてのノードを保持できるよう十分大きくする必要があります(上限は、CMATTRIBUTE_MAX_NODES属性を付けて CMGetAttributeValue()をコールすることにより得られます)。ActiveNodesパラメータには、使用された NodeMapエントリの実際の数が代入されます。またこれは、クラスタ内で現在構成されているノードの数も表します

(CMGetAttributeValue()で得られる 大構成より小さい場合もあります)。

DLL 情報情報情報情報CM.DLL - 関数 9

関連項目関連項目関連項目関連項目UNIX V8 skgxnqvnds

CM のデータ構造体およびルーチンの定義 7-41

Page 112: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

CM のルーチン - グループ情報関数

CM のルーチンのルーチンのルーチンのルーチン - グループ情報関数グループ情報関数グループ情報関数グループ情報関数

CMGroupGetList: プロセス・グループのメンバーシップを問合せ プロセス・グループのメンバーシップを問合せ プロセス・グループのメンバーシップを問合せ プロセス・グループのメンバーシップを問合せ

概要概要概要概要CMSTATUS CMGroupGetList(IN OUT LPORAERR Error, IN CMCONTEXT Context, IN CMGROUPNAME GroupName, IN OUT CMGROUPMAP *MemberMap, IN CMEXTENSION ExtendedInfo, IN CMFLAGS Flags);

パラメータパラメータパラメータパラメータ

ErrorORAERR構造体へのポインタです。この構造体には、失敗の理由を示すために実装により設定される各種のエラー・フィールドが含まれます。

Contextトレースが有効化または無効化される CMCONTEXT構造体へのポインタです。

GroupNameヌル文字で終了する、問合せ対象のプロセス・グループ名です。

MemberMapアクティブなグループ・メンバーのビットマップへのポインタです。

ExtendedInfo将来的に使用するために予約されている引数です。

Flagsこの仕様ではフラグは使用しません。

戻り値戻り値戻り値戻り値処理が正常に完了した場合は CMSTATUS_SUCC、失敗した場合は CMSTATUS_FAILを返します。CMSTATUS_FAILが返された場合、コール側は発生した特定のエラーの ORAERRをチェックする必要があります。

7-42 Oracle9i Real Application Clusters クラスタ・インタフェース詳細

Page 113: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

CM のルーチン - グループ情報関数

説明説明説明説明この関数では、指定したプロセス・グループ内の現在アクティブなメンバーを、ビットマップに移入します。コール側は、ビットマップ用の記憶域を渡します。このビットマップの初の max_number_of_members は、グループの現在の状態を反映するよう設定されます。あるビットに対応するメンバーがアクティブな場合、そのビットは 1 に設定され、それ以外では 0(ゼロ)に設定されます。指定したグループが存在しない場合、空のビットマップ

(すべてのビットが 0(ゼロ))が返されます。

実装上の注意実装上の注意実装上の注意実装上の注意この関数は、管理クライアントがグループの現行のメンバーを検索する際に使用するためのものです。グループの実際のメンバーがこの情報(およびその他の状態変更)を取得する際には、CMGroupGetStatus()を使用します。

DLL 情報情報情報情報CM.DLL - 関数 10

関連項目関連項目関連項目関連項目UNIX V8 skgxnqgrp

CM のデータ構造体およびルーチンの定義 7-43

Page 114: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

CMGetMemberPublicInfo: グループ・メンバーのパブリック・データを問合せ

CMGetMemberPublicInfo: グループ・メンバーのパブリック・データを グループ・メンバーのパブリック・データを グループ・メンバーのパブリック・データを グループ・メンバーのパブリック・データを問合せ問合せ問合せ問合せ

概要概要概要概要CMSTATUS CMGetMemberPublicInfo(IN OUT LPORAERR Error, IN CMCONTEXT Context, IN CMGROUPNAME groupName, IN CMMEMBERNUM memberNum, IN OUT PVOID Info, IN ULONG InfoBufSize, IN OUT PULONG InfoSize, IN CMEXTENSION ExtendedInfo, IN CMFLAGS Flags);

パラメータパラメータパラメータパラメータ

ErrorORAERR構造体へのポインタです。この構造体には、失敗の理由を示すために実装により設定される各種のエラー・フィールドが含まれます。

Contextトレースが有効化または無効化される CMCONTEXT構造体へのポインタです。

groupNameヌル文字で終了する、プロセス・グループの名前です。

memberNum問い合せるメンバー番号です。

Infoデータのバッファです。

InfoBufSizeバッファのサイズです。

InfoSizeバッファにコピーされるデータの長さです。

ExtendedInfo将来的に使用するために予約されている引数です。

Flagsこの仕様ではフラグは使用しません。

7-44 Oracle9i Real Application Clusters クラスタ・インタフェース詳細

Page 115: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

CM のルーチン - グループ情報関数

戻り値戻り値戻り値戻り値処理が正常に完了した場合は CMSTATUS_SUCC、失敗した場合は CMSTATUS_FAILを返します。CMSTATUS_FAIL が返された場合、コール側は発生した特定のエラーの ORAERRをチェックする必要があります。具体的には、次をチェックします。

CMERROR_EEXISTメンバーが存在しないことを示します。

説明説明説明説明この関数では、指定したプロセス・グループ・メンバーによって公開されているパブリック・データ情報を問い合せます。情報用のメモリーはコール側によって渡され、このメモリーのサイズは InfoBufSizeパラメータで指定されます。

InfoSizeパラメータの内容には、メンバー・データの実サイズが代入されます。InfoがNULLで、InfoBufSizeが 0(ゼロ)の場合、*InfoSizeに指定したメンバーのパブリック・データの長さが返されます。

DLL 情報情報情報情報CM.DLL - 関数 17

関連項目関連項目関連項目関連項目UNIX V8 skgxnppbdata

CM のデータ構造体およびルーチンの定義 7-45

Page 116: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

CM のルーチン - プライマリ・メンバーシップ関数

CM のルーチンのルーチンのルーチンのルーチン - プライマリ・メンバーシップ関数プライマリ・メンバーシップ関数プライマリ・メンバーシップ関数プライマリ・メンバーシップ関数

CMGroupJoin: プライマリ・メンバーとしてプロセス・グループに登録 プライマリ・メンバーとしてプロセス・グループに登録 プライマリ・メンバーとしてプロセス・グループに登録 プライマリ・メンバーとしてプロセス・グループに登録

概要概要概要概要CMSTATUS CMGroupJoin(IN OUT LPORAERR Error, IN CMCONTEXT Context, IN CMGROUPNAME GroupName, IN OUT CMMEMBERNUM *MemberNum, IN PVOID PrivateInfo, IN ULONG PrivateInfoSize, IN PVOID PublicInfo, IN ULONG PublicInfoSize, IN OUT CMPHANDLE GroupHandle, IN CMEXTENSION ExtendedInfo, IN CMFLAGS Flags()

パラメータパラメータパラメータパラメータ

ErrorORAERR 構造体へのポインタです。この構造体には、失敗の理由を示すために実装により設定される各種のエラー・フィールドが含まれます。

Contextトレースが有効化または無効化される CMCONTEXT構造体へのポインタです。

GroupNameヌル文字で終了する、参加先のプロセス・グループの名前です。

MemberNumグループのメンバー番号へのポインタです。

PrivateInfoメンバーのプライベート・データ情報です。

PrivateInfoSizeプライベート・データ情報の長さです。

PublicInfoメンバーのパブリック・データ情報です。

7-46 Oracle9i Real Application Clusters クラスタ・インタフェース詳細

Page 117: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

CM のルーチン - プライマリ・メンバーシップ関数

PublicInfoSizeパブリック・データ情報の長さです。

GroupHandleプロセス・グループのハンドルです。

ExtendedInfo将来的に使用するために予約されている引数です。

Flagsこの仕様ではフラグは使用しません。

戻り値戻り値戻り値戻り値処理が正常に完了した場合は CMSTATUS_SUCC、失敗した場合は CMSTATUS_FAILを返します。CMSTATUS_FAIL が返された場合、コール側は発生した特定のエラーの ORAERRをチェックする必要があります。具体的には、次をチェックします。

CMERROR_EPERMコール側が、指定されたグループに参加する許可を持っていないことを示します。

CMERROR_EINUSE要求されたメンバー番号が、グループの既存メンバーによってすでに使用されていることを示します。

説明説明説明説明コール側は、指定されたプロセス・グループに、このルーチンを介してプライマリ・メンバーとして参加します。CMInitContext()へのコールを使用して、事前にコンテキストが初期化されている必要があります。*MemberNumが -1 ではない場合、指定する番号は、クライアントに割り当てられるメンバー番号である必要があります。この番号が、別のアクティブなクライアントにすでに割り当てられている場合、エラーのステータスが返されます。*MemberNumが -1 の場合、CM は未使用のメンバー番号をクライアントに割り当て、*MemberNumをこの値に設定する必要があります。CMGroupJoin()が完了した時点で、コール側は指定されたプロセス・グループのメンバーとみなされます。グループの現行のメンバーは 終的に、CMGroupGetStatus()から、新規メンバーを含むビットマップとともに CMGROUPEVENT_RECONFIGイベントを受信する必要があります(これは、CMGroupJoin()コールが返されてから発生することもあります)。

PrivateInfoパラメータには、クライアント固有の情報が含まれ、これは論理的にはグループの他のメンバーすべてにブロードキャストされます。参加コールの完了後、他のグループ・メンバーはコール側のメンバー番号に関連付けられた情報を検索できる必要があります。PublicInfoパラメータには、管理クライアントで使用可能な情報が含まれています。

CM のデータ構造体およびルーチンの定義 7-47

Page 118: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

CMGroupJoin: プライマリ・メンバーとしてプロセス・グループに登録

GroupHandleパラメータは、グループ・ハンドル構造体であり、CMGroupJoin()へのコールより前に割り当てる必要があります。その後、参加コールによって初期化されます。これは、グループ内のクライアントのメンバーシップに関連付けられた他のすべてのコールに渡されます。

DLL 情報情報情報情報CM.DLL - 関数 11

関連項目関連項目関連項目関連項目UNIX V8 skgxnqreg

7-48 Oracle9i Real Application Clusters クラスタ・インタフェース詳細

Page 119: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

CM のルーチン - プライマリ・メンバーシップ関数

CMGroupExit: プロセス・グループから(プライマリ・メンバーを) プロセス・グループから(プライマリ・メンバーを) プロセス・グループから(プライマリ・メンバーを) プロセス・グループから(プライマリ・メンバーを)登録解除登録解除登録解除登録解除

概要概要概要概要CMSTATUS CMGroupExit(IN OUT LPORAERR Error, IN CMPHANDLE GroupHandle, IN CMEXTENSION ExtendedInfo, IN CMFLAGS Flags);

パラメータパラメータパラメータパラメータ

ErrorORAERR 構造体へのポインタです。この構造体には、失敗の理由を示すために実装により設定される各種のエラー・フィールドが含まれます。

GroupHandle参加コールによって代入されるハンドルです。

ExtendedInfo将来的に使用するために予約されている引数です。

Flagsこの仕様ではフラグは使用しません。

戻り値戻り値戻り値戻り値処理が正常に完了した場合は CMSTATUS_SUCC、失敗した場合は CMSTATUS_FAILを返します。CMSTATUS_FAIL が返された場合、コール側は発生した特定のエラーの ORAERRをチェックする必要があります。

説明説明説明説明コール側は、GroupHandleパラメータ(CMGroupJoin()によって初期化される)に関連付けられたプロセス・グループから登録解除されます。このプライマリ・メンバーに関連付けられたすべてのスレーブ・メンバーが登録解除されると、このメンバーの登録解除に関する情報は、残りのプライマリ・メンバーに通知されます。

DLL 情報情報情報情報CM.DLL - 関数 12

CM のデータ構造体およびルーチンの定義 7-49

Page 120: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

CMGroupExit: プロセス・グループから(プライマリ・メンバーを)登録解除

関連項目関連項目関連項目関連項目UNIX V8 skgxnqdrg

7-50 Oracle9i Real Application Clusters クラスタ・インタフェース詳細

Page 121: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

CM のルーチン - プライマリ・メンバーシップ関数

CMGroupGetStatus: プロセス・グループの状態をポーリング プロセス・グループの状態をポーリング プロセス・グループの状態をポーリング プロセス・グループの状態をポーリング / 待機待機待機待機

概要概要概要概要CMGROUPEVENT CMGroupGetStatus(IN OUT LPORAERR Error, IN CMPHANDLE GroupHandle, IN OUT CMGROUPMAP *MemberMap, IN CMTIME Timeout, IN CMEXTENSION ExtendedInfo, IN CMFLAGS Flags);

パラメータパラメータパラメータパラメータ

ErrorORAERR 構造体へのポインタです。この構造体には、失敗の理由を示すために実装により設定される各種のエラー・フィールドが含まれます。

GroupHandleCMGroupJoin()によって初期化されたグループ・ハンドルへのポインタです。

MemberMapアクティブなメンバーのビットマップへのポインタです。

Timeoutイベントを待機するミリ秒単位の合計時間です。

ExtendedInfo将来的に使用するために予約されている引数です。

Flagsこの仕様ではフラグは使用しません。

戻り値戻り値戻り値戻り値CM グループ・イベント(CMGROUPEVENTを参照)の 1 つである CMERROR_EUNAVAILを返します。これは、CM が使用不可能になったことを示します。

CM のデータ構造体およびルーチンの定義 7-51

Page 122: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

CMGroupGetStatus: プロセス・グループの状態をポーリング / 待機

説明説明説明説明この関数では、クライアントが属しているプロセス・グループでの状態変更を待機します。グループ状態の変更が有効になったとき、または Timeoutに達したときに終了します。発生するイベントは、リターン・コード(CMGROUPEVENTタイプの)によって指定されます。

この関数では、グループ内の現在アクティブなメンバーのビットマップを移入します。コール側は、ビットマップ(MemberMap)用の記憶域を渡します。このビットマップの 初のmax_number_of_members は、グループの現在の状態を反映するよう設定されます。あるビットに対応するメンバーがアクティブな場合、そのビットは 1 に設定され、それ以外では0(ゼロ)に設定されます。コール側では、このルーチンを使用して、定期的に制御を CMパッケージに引き渡しています。OSD で要求される場合には、このルーチンを使用して CMからの ping 要求に応答することもできます。コール側では通常、このルーチンを一定の周期でコールすることは保証できません。これはシステム・ロードの関数であり、コール側の制御以外の要因であるためです。ただし、コール側がタイムアウト付きでこれをコールすることは可能です。タイムアウトの期間内であれば、OSD は、ping プロトコルの交換または類似のイベントを待機できます。

タイムアウト値は、ミリ秒単位で指定してください。タイムアウトを 0(ゼロ)に設定した場合、コール側がグループ状態のノンブロッキング・ポーリングを要求していることを意味します。イベントが検出されると、ただちに CMGroupGetStatus()が返されます。グループまたはクラスタが推移状態である場合、イベント CMGROUPEVENT_SUSPENDが返されます。実装では、クラスタによる推移の完了を、このレイヤーで待機しないでください。

実装上の注意実装上の注意実装上の注意実装上の注意この関数では、CMGROUPEVENTの 1 つ、すなわち、CM がコール側にキューイングしたイベントのリストのうちの 1 つが返されます。各イベント・タイプの意味は、次のとおりです。

CMGROUPEVENT_NULLグループに関連付けられたイベントは、指定した時間間隔内に発生しませんでした。

CMGROUPEVENT_RECONFIGグループ・メンバーシップが変更されました。新規グループ・メンバーシップのビットマップは、MemberMapで返されました。ビットマップが変更されるのは、RECONFIGイベントがキューイングされた場合のみです。他のイベントの場合、ビットマップは変更されていません。

CMGROUPEVENT_SUSPENDグループが推移状態にあります。CM のクライアントでは、このイベントを手がかりとして使用し、グループが再度安定状態に達するまでアクティビティを一時停止することができます。これは、CMGROUPEVENT_RESUMEまたは CMGROUPEVENT_RECONFIGイベントによって示されます。一時停止イベントは、タイムアウトに依存して障害を検出する CM にとって有益です。Oracle は、一時停止を受信するとアクティビティを停止します。CPU の過負荷によって、時間制のイベントのスケジューリングが妨げられた場合には、これによって負荷を軽減し、イベントが不適切にタイムアウトすることを防ぐことができます。

7-52 Oracle9i Real Application Clusters クラスタ・インタフェース詳細

Page 123: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

CM のルーチン - プライマリ・メンバーシップ関数

CMGROUPEVENT_RESUMEグループが、安定状態に達しました(CMGROUPEVENT_SUSPENDが発行された後に)。グループ・メンバーシップは変更されませんでした(変更された場合は、かわりにCMGROUPEVENT_RECONFIGがキューイングされる)。

CMGROUPEVENT_ABORTCM は、完全に接続されたグループを形成できません。クライアントは、共有リソースへのアクセスを停止し、グループから登録解除する必要があります。

CMGROUPEVENT_EINVALエラーが発生しました(詳細は、ORAERR の内容を参照してください)。

DLL 情報情報情報情報CM.DLL - 関数 15

関連項目関連項目関連項目関連項目UNIX V8 skgxnpstat

CM のデータ構造体およびルーチンの定義 7-53

Page 124: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

CMGetMemberPrivateInfo: メンバーに関連付けられたプライベート・メンバーのデータ情報を問合せ

CMGetMemberPrivateInfo: メンバーに関連付けられたプライベート・ メンバーに関連付けられたプライベート・ メンバーに関連付けられたプライベート・ メンバーに関連付けられたプライベート・メンバーのデータ情報を問合せメンバーのデータ情報を問合せメンバーのデータ情報を問合せメンバーのデータ情報を問合せ

概要概要概要概要CMSTATUS CMGetMemberPrivateInfo(IN OUT LPORAERR Error, IN CMPHANDLE GroupHandle, IN CMMEMBERNUM MemberNum, IN OUT PVOID Info, IN ULONG InfoBufSize, IN OUT PULONG InfoSize, IN CMEXTENSION ExtendedInfo, IN CMFLAGS Flags);

パラメータパラメータパラメータパラメータ

ErrorORAERR 構造体へのポインタです。この構造体には、失敗の理由を示すために実装により設定される各種のエラー・フィールドが含まれます。

GroupHandleグループ・ハンドル(CMGroupJoin()によって初期化される)へのポインタです。

MemberNum問い合せるメンバー番号です。

InfoMemberNumに関連付けられているプライベート情報です。

InfoBufSizeメンバーのプライベート情報を格納するために提供されるバッファのサイズです。

InfoSizeプライベート・データ情報の実サイズが代入されます。

ExtendedInfo将来的に使用するために予約されている引数です。

Flagsこの仕様ではフラグは使用しません。

7-54 Oracle9i Real Application Clusters クラスタ・インタフェース詳細

Page 125: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

CM のルーチン - プライマリ・メンバーシップ関数

戻り値戻り値戻り値戻り値処理が正常に完了した場合は CMSTATUS_SUCC、失敗した場合は CMSTATUS_FAILを返します。CMSTATUS_FAIL が返された場合、コール側は発生した特定のエラーの ORAERRをチェックする必要があります。具体的には、次をチェックします。

CMERROR_EEXIST指定したメンバーが存在しないことを示します。

説明説明説明説明この関数では、CM に問い合せて、同じグループ内のメンバーに関するプライベート・メンバー・データを取得します。この情報は、CMGroupJoin()によってメンバーがグループに参加する際に、そのメンバーによって提供されます。通常、この情報には、指定したメンバーとの通信を確立する際に使用するエンドポイント / ポートが含まれます。プライベート・データ情報用のメモリーはコール側によって渡され、このメモリーのサイズはInfoBufSizeパラメータで指定されます。

InfoSizeパラメータの内容には、メンバー・データの実サイズが代入されます。InfoがNULLで、InfoBufSizeが 0(ゼロ)の場合、*InfoSizeに指定したメンバーのデータの長さが返されます。

DLL 情報情報情報情報CM.DLL - 関数 16

関連項目関連項目関連項目関連項目UNIX V8 skgxnprdata

CM のデータ構造体およびルーチンの定義 7-55

Page 126: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

CM のルーチン - スレーブ・メンバー関数

CM のルーチンのルーチンのルーチンのルーチン - スレーブ・メンバー関数スレーブ・メンバー関数スレーブ・メンバー関数スレーブ・メンバー関数

CMGroupRegister: スレーブ・メンバーとして指定のグループに登録 スレーブ・メンバーとして指定のグループに登録 スレーブ・メンバーとして指定のグループに登録 スレーブ・メンバーとして指定のグループに登録

概要概要概要概要CMSTATUS CMGroupRegister(IN OUT LPORAERR Error, IN CMCONTEXT Context, IN CMGROUPNAME GroupName, IN CMMEMBERNUM MemberNum, IN OUT CMSHANDLE GroupHandle, IN CMEXTENSION ExtendedInfo, IN CMFLAGS Flags);

パラメータパラメータパラメータパラメータ

ErrorORAERR 構造体へのポインタです。この構造体には、失敗の理由を示すために実装により設定される各種のエラー・フィールドが含まれます。

Contextトレースが有効化または無効化される CMCONTEXT構造体へのポインタです。

GroupNameヌル文字で終了する、プロセス・グループ名です。

MemberNumメンバー番号です。

GroupHandleスレーブ・ハンドルです。

ExtendedInfo将来的に使用するために予約されている引数です。

Flagsこの仕様ではフラグは使用しません。

7-56 Oracle9i Real Application Clusters クラスタ・インタフェース詳細

Page 127: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

CM のルーチン - スレーブ・メンバー関数

戻り値戻り値戻り値戻り値処理が正常に完了した場合は CMSTATUS_SUCC、失敗した場合は CMSTATUS_FAILを返します。CMSTATUS_FAIL が返された場合、コール側は発生した特定のエラーの ORAERRをチェックする必要があります。具体的には、次をチェックします。

CMERROR_EEXIST指定したプライマリ・メンバーが存在しないことを示します。

CMERROR_EPERMクライアントが、スレーブ・メンバーとして登録することを許可されていないか、または指定したマスターが、ローカル・ノード上に存在していないことを示します。

説明説明説明説明このルーチンでは、プロセスをスレーブ・メンバーとしてプロセス・グループに登録します。これによって、指定したマスター・メンバーのメンバーシップが効率的に共有されます。マスター・メンバーは、スレーブ・メンバーと同じノード上に存在している必要があります。

プライマリ・メンバーがグループから登録解除された、もしくは停止した場合でも、CM は関連するすべてのスレーブ・メンバーが登録解除されるか、または停止するまで、他のプライマリ・メンバーに通知しません。1 つのスレーブが登録もしくは登録解除されても、マスターまたは他のプライマリ・メンバーには通知されません。スレーブ・メンバーでは、CMGroupGetStatusをコールしてグループ・イベントを受信することはできません。スレーブは、プライマリ・メンバーの停止を他の方法で検出し、共有ディスク・アクティビティをすべて停止してから登録解除されます。

安全上の機能として、プライマリ・メンバーがグループから登録解除されてから一定時間内に登録解除されないスレーブ・メンバーは、CM によって停止することをお薦めします。これによって、クライアントが登録解除しない場合のハングを防ぐことができます。スレーブの停止が開始されるまでの遅延時間は、設定可能であることが理想的です。

GroupHandleパラメータは、クライアントのスレーブ・メンバーとしての登録に関連するハンドルです。ハンドル用のメモリーは、CMGroupRegister()をコールする前に、割り当てる必要があります。(CMGroupDeregister()による)クライアントの登録解除には、このハンドルが使用されます。

DLL 情報情報情報情報CM.DLL - 関数 13

関連項目関連項目関連項目関連項目UNIX V8 skgxnsrg

CM のデータ構造体およびルーチンの定義 7-57

Page 128: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

CMGroupDeregister: スレーブ・メンバーを登録解除

CMGroupDeregister: スレーブ・メンバーを登録解除 スレーブ・メンバーを登録解除 スレーブ・メンバーを登録解除 スレーブ・メンバーを登録解除

概要概要概要概要CMSTATUS CMGroupDeregister(IN OUT LPORAERR Error, IN CMSHANDLE GroupHandle, IN CMEXTENSION ExtendedInfo, IN CMFLAGS Flags);

パラメータパラメータパラメータパラメータ

ErrorORAERR 構造体へのポインタです。この構造体には、失敗の理由を示すために実装により設定される各種のエラー・フィールドが含まれます。

GroupHandleCMGroupRegister()によって初期化されるスレーブ・ハンドルへのポインタです。

ExtendedInfo将来的に使用するために予約されている引数です。

Flagsこの仕様ではフラグは使用しません。

戻り値戻り値戻り値戻り値処理が正常に完了した場合は CMSTATUS_SUCC、失敗した場合は CMSTATUS_FAILを返します。CMSTATUS_FAIL が返された場合、コール側は発生した特定のエラーの ORAERRをチェックする必要があります。

説明説明説明説明コール側をスレーブ・メンバーとして登録解除します。プライマリ・メンバーのグループ登録解除に関する通知は、このプロセスには依存しません。

実装上の注意実装上の注意実装上の注意実装上の注意実装では、この関数をサポートする必要があります。

DLL 情報情報情報情報CM.DLL - 関数 14

7-58 Oracle9i Real Application Clusters クラスタ・インタフェース詳細

Page 129: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

CM のルーチン - スレーブ・メンバー関数

関連項目関連項目関連項目関連項目UNIX V8 skgxnsdr

CM のデータ構造体およびルーチンの定義 7-59

Page 130: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

CMGroupDeregister: スレーブ・メンバーを登録解除

7-60 Oracle9i Real Application Clusters クラスタ・インタフェース詳細

Page 131: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

IPC のデータ構造体およびルーチンの定

8

IPC のデータ構造体およびルーチンの定義のデータ構造体およびルーチンの定義のデータ構造体およびルーチンの定義のデータ構造体およびルーチンの定義

この章では、IPC のデータ構造体およびルーチンの定義について説明します。

� IPC のデータ構造体 - Oracle 定義の構造体

� IPC のデータ構造体 - 実装定義の構造体

� IPC のルーチン - 汎用 OSD コール

� IPC のルーチン - コンテキストの作成 / 破棄

� IPC のルーチン - ポートおよび接続の確立をサポート

� IPC のルーチン - リージョンおよびバッファの作成 / 破棄

� IPCRemoteCopy: BufferId によって指定されたリモート・バッファにメッセージをコピー

� IPC のルーチン - 未処理の要求

義 8-1

Page 132: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

IPC のデータ構造体 - Oracle 定義の構造体

IPC のデータ構造体のデータ構造体のデータ構造体のデータ構造体 - Oracle 定義の構造体定義の構造体定義の構造体定義の構造体

IPCATTRIBUTE

概要概要概要概要typedef enum _IPCATTRIBUTE_ { IPCATTR_PREFERRED_MSG_ALIGNMENT, IPCATTR_MAXIMUM_MSG_VECTORS, IPCATTR_MAXIMUM_MCOPY_VECTORS, IPCATTR_MAXIMUM_MCOPY, IPCATTR_MAXIMUM_BUFFERIDS, IPCATTR_MINIMUM_ALIGNMENT, IPCATTR_SUPPORTS_REMOTE_COPY, IPCATTR_MAXIMUM_REGION_SIZE, IPCATTR_MAP_BEFORE_MCOPY, IPCATTR_MAXIMUM_SEND_SIZE} IPCATTRIBUTE, *LPIPCATTRIBUTE;

説明説明説明説明IPC OSD の実装では、IPC 実装サポートの機能を記述するために Real Application Clustersクライアントによって問い合せることが可能な、1 組の属性または値のマッピングをサポートする必要があります。定義されている属性のセットは、次のとおりです。

IPCATTR_PREFERRED_MSG_ALIGNMENTこの実装では、厳密なメッセージの位置合せは不要ですが、位置合せが有効であることを示します。

IPCATTR_MAXIMUM_MSG_VECTORS1 つのメッセージにおいて、ポートベースの送信および受信コールによってサポートされるメッセージ・バッファの 大数を示します。Real Application Clusters では、この属性を使用して、メッセージの散乱および収集方法を制御します。この値が 1 に設定されている場合、Real Application Clusters ではメッセージの散乱 / 収集を使用しません。散乱 / 収集をサポートする実装では、少なくとも 2 つのメッセージ・ベクターを持つ必要があります。

IPCATTR_MAXIMUM_MCOPY_VECTORS1 つのメッセージにおいて、リモート・メモリーのコピー操作によってサポートされるメッセージ・バッファの 大数を示します。

8-2 Oracle9i Real Application Clusters クラスタ・インタフェース詳細

Page 133: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

IPC のデータ構造体 - Oracle 定義の構造体

IPCATTR_MAXIMUM_MCOPY1 回の送信で、IPCRemoteCopy()を介してコピーできる 大バイト数を示します。クライアントは、パフォーマンス上の理由でこの値を使用できますが、送信をこのサイズに制限する必要はありません。値は、16 以上になります。

IPCATTR_MAXIMUM_BUFFERIDS1 つのリージョンで同時に確保されるバッファの 大数を示します。この値は、クライアントが大量のリモート・コピーの数を制限する際に使用されます。実装では、リージョンへのコピーの不要な直列化を回避するために、アクティブな BID の 大数を指定してください。

IPCATTR_MINIMUM_ALIGNMENTIPCRemoteCopyのデータ・リソースとして、リモートでメモリーを更新するために確保されたバッファに必要な、 低限の位置合せを示します。

IPCATTR_SUPPORTS_REMOTE_COPYOSD の実装で、TCP/IP など他のプロトコルによるエミュレーションとは異なり、真に高速なリモートのメモリ・マップされたセマンティックをサポートすることを示します。

IPCATTR_MAXIMUM_REGION_SIZE任意の時点でマッピング可能な、デフォルトの 大メモリー・サイズを示します。

IPCATTR_MAP_BEFORE_MCOPY実装で、IPCRemoteCopy()操作に使用するより前に、送信側が優先的にすべてのメモリーをマップすることを示します。通常では、リモートの受信メモリーのみがマップされます。

IPCATTR_MAXIMUM_SEND_SIZE実装で、ポートベースのメッセージ・モデルを使用して送信できる 大メッセージのサイズを示します。この値は、 低でも 64K に設定してください。

実装上の注意実装上の注意実装上の注意実装上の注意実装では、事前定義済のすべての属性に対する問合せをサポートする必要があります。

関連項目関連項目関連項目関連項目UNIX V8 skgxpattr

IPC のデータ構造体およびルーチンの定義 8-3

Page 134: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

IPCBUFFERDESC

IPCBUFFERDESC

概要概要概要概要typedef struct _IPCBUFFERDESC_ { DWORD dwBufferSize; LPVOID lpDataBuffer;} IPCBUFFERDESC, *LPIPCBUFFERDESC;

説明説明説明説明IPCBUFFERDESC構造体は、IPC メッセージの一部を格納または受信するために使用されるクライアントのメモリー領域(すなわちバッファ)を定義します。IPC メッセージは通常、1 つ以上の IPCBUFFERDESC構造体で構成されており、それぞれの構造体が、メッセージのうちの該当するデータ・バッファ部分を定義しています。メッセージの IPCBUFFERDESCのリストは、メッセージ・ベクターと呼ばれます。

IPCBUFFERDESCによって記述されるクライアント・メモリーは、IPCSendMsg()およびIPCRemoteCopy()操作用の送信データのソースとして、または IPCReceiveMsg() 操作用の受信データの宛先として使用できます。

dwBufferSizeこのフィールドでは、関連するバッファのサイズをバイト単位で定義します。

Real Application Clusters クライアントは、IPCBUFFERDESCによって定義されるバッファの位置合せを、IPCATTR_PREFERRED_ALIGNMENT属性に基づいて試行しますが、この位置合せは保証されません。

lpDatabufferベクター・メッセージの一部を保持するクライアント・メモリー(すなわちバッファ)の始まりへのポインタです。

8-4 Oracle9i Real Application Clusters クラスタ・インタフェース詳細

Page 135: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

IPC のデータ構造体 - Oracle 定義の構造体

実装上の注意実装上の注意実装上の注意実装上の注意クライアントは、IPCBUFFERDESC構造体のリストを使用してメッセージを作成し、IPC の散乱 / 収集操作を実現します。クライアントによって渡される IPCBUFFERDESCのリストは、常に順序付けられ、連続しています。LPIPCBUFFERDESCによって記述されるように、初の要素へのポインタは、配列中の IPCBUFFERDESC要素の数とともに渡されます。

実装では、マルチセクションまたはベクター・メッセージに含まれる個々のIPCBUFFERDESC構造体によって記述されるメモリーの連続性を前提としないでください。IPCBUFFERDESCによって記述される単一のバッファのメモリー内容は、常に連続した仮想メモリーです。

実装でデフォルトの位置合せがない場合には、クライアントの要求する位置合せ(通常はlong 型整数のワード境界上)となります。同様に、割り当てられるバッファ・サイズは、実際の dwBufferSizeフィールドとは無関係に、次の long 型のワード境界に切り上げられます(すなわち、dwBufferSizeフィールドに 14 バイトが指定されていても、バッファは16 バイトになる)。

関連項目関連項目関連項目関連項目UNIX V8 skgxpbf

IPC のデータ構造体およびルーチンの定義 8-5

Page 136: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

IPCCALLBACK

IPCCALLBACK

概要概要概要概要typedef LPVOID IPCCALLBACK;

説明説明説明説明IPCCALLBACKの定義では、Oracle9i クライアントが、エラー・ロギングのリストおよび関連する通知コールバックを IPC レイヤーに渡すことが許可されています。

実装上の注意実装上の注意実装上の注意実装上の注意この構造体は Oracle が定義しており、実装によって変更することはできません。これは、汎用 OSD 構造体の OSDCALLBACKSに相当します。リファレンスの WINSOCK IPC モジュールに、この構造体をエラー・ロギングに使用するサンプルが用意されています。

関連項目関連項目関連項目関連項目UNIX V8 skgxpcb

8-6 Oracle9i Real Application Clusters クラスタ・インタフェース詳細

Page 137: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

IPC のデータ構造体 - Oracle 定義の構造体

IPCCALLBACKCTX

概要概要概要概要typedef LPVOID IPCCALLBACKCTX;

説明説明説明説明IPCCALLBACKCTXは、IPCCALLBACK構造体のルーチンで使用するために Oracle9i クライアントによって定義されている引数です。

実装上の注意実装上の注意実装上の注意実装上の注意この構造体は Oracle が定義しており、実装によって変更することはできません。これはIPCInitContext()を介してクライアントによって提供されますが、IPCCALLBACK構造体内のコールバックがコールされるときは必ず提供される必要があります。リファレンスのWINSOCK IPC モジュールに、この構造体をエラー・ロギングに使用するサンプルが用意されています。

関連項目関連項目関連項目関連項目UNIX V8 skgxpcbctx

IPC のデータ構造体およびルーチンの定義 8-7

Page 138: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

IPCDATATYPE

IPCDATATYPE

概要概要概要概要typedef enum _IPCDATATYPE_ { IPCDATATYPE_BUFFERID, IPCDATATYPE_CONTEXT, IPCDATATYPE_CONTEXTID, IPCDATATYPE_PORT, IPCDATATYPE_PORTID, IPCDATATYPE_CONNECTION, IPCDATATYPE_REGION, IPCDATATYPE_REQUEST} IPCDATATYPE, *LPIPCDATATYPE;

説明説明説明説明IPCDATATYPE列挙構造体は、Real Application Clusters クライアントがサイズを問い合せる必要のある、実装定義のデータ型のセットを記述する際に使用します。このリストは、IPC 実装のかわりに Real Application Clusters によって割り当てられる構造体のセットを定義したものです。Real Application Clusters クライアントは、構造体用のメモリーを割り当て戻す前に、必ず構造体のサイズを問い合せます。構造体に割り当てられる内容は不明で、Real Application Clusters クライアントでは解釈されません。定義済のIPCDATATYPE_XXXXは、IPCGetDataTypeSize()の引数として使用され、次の実装定義の IPC 構造体に対応しています。

詳細は、次の項の参照データ構造体を参照してください。

表表表表 8-1 実装定義の実装定義の実装定義の実装定義の IPC 構造体構造体構造体構造体

データ型データ型データ型データ型 データ構造体データ構造体データ構造体データ構造体

IPCDATATYPE_BUFFERID IPCBUFFERID

IPCDATATYPE_CONTEXT IPCCONTEXT

IPCDATATYPE_CONTEXTID IPCCONTEXTID

IPCDATATYPE_PORT IPCPORT

IPCDATATYPE_PORTID IPCPORTID

IPCDATATYPE_CONNECTION IPCCONNECTION

IPCDATATYPE_REGION IPCREGION

IPCDATATYPE_REQUEST IPCREQUEST

8-8 Oracle9i Real Application Clusters クラスタ・インタフェース詳細

Page 139: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

IPC のデータ構造体 - Oracle 定義の構造体

実装上の注意実装上の注意実装上の注意実装上の注意実装では、事前定義済のすべての属性に対する問合せをサポートする必要があります。実装では、内部的な必要に応じて、これらの構造体のサイズを自由に決定できます。ポート、接続、リージョンおよび要求の構造体のサイズは、可能な限り小さくしてください。これらの構造体が多数、同時に存在する場合があります。

IPC モジュールの実装コンテキストは、すべてが定義済の構造体セット内に格納される必要はありませんが、ローカル・メモリーの割当ては、不要であれば避けてください。

関連項目関連項目関連項目関連項目UNIX V8 skgxptyp

IPC のデータ構造体およびルーチンの定義 8-9

Page 140: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

IPCERROR

IPCERROR

概要概要概要概要typedef OSDERROR IPCERROR;

説明説明説明説明慣例的に、IPC の大部分のルーチンは、要求の完了時にステータスを返すよう設計されています。返されたステータスには、要求した操作が正常に完了したかどうかが記されます。失敗した場合は、IPCSTATUS_FAILによって示され、IPC OSD の実装では、失敗の理由を示す ORAERR構造体を完成させる必要があります。Oracle は OSErrorCodeフィールドの内容を解釈しないため、ORAERR構造体の OSErrorCodeフィールドを使用して、OSD のエラー情報を格納できます。

いくつかの IPCERRORコードが定義されています。実装では、基礎となるエラーを、適切な事前定義済の IPCERRORコードにマップし、ORAERR構造体の ErrorCategoryフィールドに格納する必要があります。事前定義済セットへのマッピングが困難な実装エラーが発生する場合、ORAERRの ErrorCategoryフィールドは、IPCERROR_OERRORに設定してください。定義済の IPCERRORは、次のとおりです。

IPCERROR_NOERRORエラーはありません。

IPCERROR_OERRORIPC 実装定義のエラーが発生しました。クライアントは、ORAERR構造体で詳細を参照する必要があります。

IPCERROR_CONNINVALID渡された接続構造体が無効です。

IPCERROR_PORTINVALID渡されたポート ID 構造体が無効です。

IPCERROR_ENOMEM内部 IPC リソースの障害を示します。

IPCERROR_ETRUNKメッセージが切り捨てられたことを示します。

IPCERROR_BUFIDINVALID渡されたバッファ ID 構造体が無効か、または失効しています。

IPCERROR_MAPINVALIDマップされるメモリー領域が無効です。

8-10 Oracle9i Real Application Clusters クラスタ・インタフェース詳細

Page 141: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

IPC のデータ構造体 - Oracle 定義の構造体

IPCERROR_RGNINVALID渡されたリージョン構造体が無効です。

IPCERROR_MEMNOMAPPED指定されたメモリー領域がマップされていません。

IPCERROR_NOBIDS同時バッファ ID の 大数を超えました。

IPCERROR_BADARGS渡された 1 つ以上の引数が無効です。

実装上の注意実装上の注意実装上の注意実装上の注意IPC コールの大部分で、IPCERROR_ENOMEMは内部 IPC 障害を示し、Real Application Clusters 環境は即座にシャットダウンされます。

実装では、新規の IPCERRORコードは定義しないようにしてください。かわりに、実装ではORAERR構造体の Operation、Locationおよび OtherInfo文字列フィールドを使用して、追加のエラー情報を提供できます。

関連項目関連項目関連項目関連項目UNIX V8 slos

IPC のデータ構造体およびルーチンの定義 8-11

Page 142: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

IPCEXTENSION

IPCEXTENSION

概要概要概要概要typedef enum _IPC_EXTENDED_INFO_TAG { IPC_EXTENDED_INFO_PROTOCOL, IPC_EXTENDED_INFO_STATUS} IPC_EXTENDED_INFO_TAG;typedef struct IPC_EXTENDED_INFO { union { IPC_EXTENDED_INFO_V21 v21Info; } Info;} IPC_EXTENDED_INFO, *PIPC_EXTENDED_INFO;typedef struct IPC_EXTENDED_INFO_V21{ IPC_EXTENDED_INFO_TAG Version; IPCDATATYPE Type; PVOID TypeInfo; union { IPCPROTOINFO ProtocolInfo; IPCSTAT StatInfo; } Info;} IPC_EXTENDED_INFO_V21, *PIPC_EXTENDED_INFO_V21;typedef IPC_EXTENDED_INFO IPCEXTENSION;

説明説明説明説明IPC_EXTENDED_INFO_TAGは、ローカルの IPCCONTEXTから、およびリモート・プロセスから受信されるエンドポイント構造体から、OSD 固有のプロトコル情報を問い合せる際に、Oracle の移植可能コードによって使用される、Oracle 定義の構造体です。この拡張機能によって、Oracle の移植可能コードで、IPC OSD 構成エラーの検出と対応が改善されます。この構造体は、改良を予定されていた元の IPCEXTENSION構造体を拡張したものです。

現在の実装では、次の変数が使用されます。

Version統計情報または一般的なプロトコル情報が記述されているかどうかを示すタイプ。

Type次の項で説明されている TypeInfo フィールドのデータ型。

TypeInfo記述されるデータ型へのポインタ。

8-12 Oracle9i Real Application Clusters クラスタ・インタフェース詳細

Page 143: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

IPC のデータ構造体 - Oracle 定義の構造体

ProcotolInfo供給される OSD のバージョンを記述した、汎用のベンダー情報。

StatInfoベンダーの供給する OSD に関する情報を収集した統計。すべて、OSD ベンダーによって記述されます。

実装上の注意実装上の注意実装上の注意実装上の注意この構造体の変更は、それに対応する IPCVERSIONINFO の MinorVersionフィールドが変更されることで示されます。

関連項目関連項目関連項目関連項目UNIX V8 skgxpext

IPC のデータ構造体およびルーチンの定義 8-13

Page 144: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

IPCFLAGS

IPCFLAGS

概要概要概要概要typedef OSDFLAGS IPCFLAGS;

説明説明説明説明IPCFLAGは、IPC ルーチンの操作を変更するヒントまたはディレクティブとして定義されています。IPCFLAGはビットマップとして実装され、各ビットが特定のフラグを表します。対応するビットが設定されているときは、ヒントまたはディレクティブが送信されています。

慣例として、大部分の IPC ルーチンは IPCFLAG引数を使用しますが、すべての IPC ルーチンで IPCFLAGを使用するわけではありません。詳細は、各 IPC ルーチンの説明を参照してください。Real Application Clusters では、次の事前定義済 IPCFLAGがサポートされています。

IPCFLAG_BULK_TRANSFERバルク・データ転送に接続が使用されることを示します。実装では、内部実装定義の接続を確立する際に、これをヒントとして扱うことができます。これは、大きいメッセージ(129バイト以上)の転送に接続が使用されることを示します。

IPCFLAG_SENDER_GUARANTEEこのフラグは、応答を受けるための受信バッファを転送したことを示す送信操作を開始するクライアントによって設定されます。実装では、RPC 操作が進行中であるというヒントとしてこれを使用できます。

IPCFLAG_WAIT_ALWAYSこのフラグは廃止されました。クライアントのタイプに応じて、IPCWaitの動作を制御する際に使用されたものです。IPCWait実装の複雑さを軽減するために、このフラグは削除されました。

IPCFLAG_NO_DEQUEUEこのフラグは、要求をデキューせずにその要求を確認する際に使用します。これを使用して、別の IPCWait() コールが完了結果を取得できるような完了済要求を IPC OSD 実装が追跡するよう、IPCWait() に指示します。

IPCFLAG_QUIET着信メモリー・コピー操作によって生成される更新通知を抑止することを示します。

IPCFLAG_ORDER要求セマンティックが Oracle9i によって使用されないよう、厳密に命令します。そのため、このフラグは削除されました。

8-14 Oracle9i Real Application Clusters クラスタ・インタフェース詳細

Page 145: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

IPC のデータ構造体 - Oracle 定義の構造体

IPCFLAG_UNRELIABLE_SENDSこのフラグは、指定した操作で高信頼性の送信が不要であることを示すために、IPCRemoteCopy()とともにのみ使用されます。

IPCFLAG_SYNCHRONOUS要求が同期式に実行されることを示します。

IPCFLAG_MAP_FOR_TRANSMITIPCATTR_MAP_BEFORE_MCOPY属性では、IPCRemoteCopyへのコールの前に送信バッファをロックする設定をベンダーが指定できます。この属性が指定されている場合、これが今後の IPCRemoteCopy操作でソースとして使用されるバッファであることを示すために、IPCMapMemoryのコールに IPCFLAG_MAP_FOR_TRANSMITが渡されます。

IPCFLAG_CLIENT_KSXPOracle9i の KSXP インタフェースを介して送信された要求ハンドルにタグを付けるために使用される要求解除フラグです。フラグは、IPCReceiveMsg、IPCSendMsg、IPCConnectおよび IPCPrepareBufferのインタフェースに要求が送信されるときに設定されます。このフラグが設定された完了済の要求は、IPCWaitがこのフラグ付きでコールされたときに完了する必要があります。IPCFLAG_CLIENT_KSXPフラグが設定されていると、たとえ未処理の要求がない場合でも、IPCWaitコールが、要求されたタイムアウト期間ブロックします。このフラグは、リリース 2.2 で廃止される予定ですが、暫定的にサポートされています。

IPCFLAG_SEND_RELIABLEIPCFLAG_SEND_UNRELIABLEの反対です。現在は、IPCFLAG_SEND_UNRELIABLEセマンティックを使用して特に指定しないかぎり、すべての要求は信頼性が高いと判断されるため、このフラグは使用されません。

実装上の注意実装上の注意実装上の注意実装上の注意下位バイトは、内部利用のための実装に使用できます。

関連項目関連項目関連項目関連項目UNIX V8 skgxp.h フラグ

IPC のデータ構造体およびルーチンの定義 8-15

Page 146: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

IPCPROTOINFO

IPCPROTOINFO

概要概要概要概要typedef ENUM _IPCPROTOINFO { UNSIGNED char OracleVersion; UNSIGNED char VendorVersion; UNSIGNED char MajorVersion; UNSIGNED char MinorVersion; } IPCPROTOINFO, *LPIPCPROTOINFO;

説明説明説明説明ベンダー定義のバージョン情報を Oracle に返すことが可能な IPCEXTENSION構造体の一部です。

OracleVersionオラクル社が割り当てたバージョン番号。

VendorVersionベンダーの供給するバージョン番号。

MajorVersionベンダーの供給するバージョン情報番号。

MinorVersionベンダーの供給するリリース情報番号。

8-16 Oracle9i Real Application Clusters クラスタ・インタフェース詳細

Page 147: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

IPC のデータ構造体 - Oracle 定義の構造体

IPCREQUESTINFO

概要概要概要概要typedef struct _IPCREQUESTINFO_ { IPCREQUESTTYPE RequestType; IPCSTATUS RequestStatus; LPVOID RequestAddr ULONG RequestBytesTransferred; LPVOID RequestMapRef IPCERROR RequestError; LPORAERR RequestOraErr; IPCFLAGS RequestFlags;} IPCREQUESTINFO, *LPIPCREQUESTINFO;

説明説明説明説明IPCREQUESTINFOは、保留中または完了済の IPC 操作に関連付けられたステータスおよびタイプ情報を取得する際に、クライアントが使用する Oracle 定義の構造体です。IPC の実装では、実装定義の IPCREQUEST 構造体、または IPCREQUEST 構造体に関連付けられたその他の内部構造体に格納されている現在の情報が、IPCREQUESTINFO構造体に提供されます。IPCREQUESTINFO構造体は、Real Application Clusters クライアントによって割り当てられ、関連する IPCREQUEST 構造体とともに IPCGetRequestInfo()構造体に渡されます。IPC の実装によって、各 IPCREQUESTINFOフィールドの値が与えられるため、IPCREQUEST の現在のステータスが反映されます。

IPCREQUESTINFOには、次の変数が含まれます。

RequestType基礎となる IPCREQUEST 構造体の要求タイプを返します。

RequestStatus完了済の操作のステータス・コードを返します。操作が未処理の場合、IPCSTATUS_INPROGRESSを返します。

RequestAddr使用される転送バッファのベース・アドレスを指します。IPCRemoteCopy()などのベクター操作の場合、ベクターの先頭バッファのベース・アドレスを指します。

RequestBytesTransferredデータ転送操作で正常に転送されたバイト数を返します。操作が正常な場合、この値は転送要求のバイト数と一致します。

IPC のデータ構造体およびルーチンの定義 8-17

Page 148: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

IPCREQUESTINFO

RequestMapRefメモリー・マップ操作の受信側では、バッファ・データが書き込まれるリージョンのハンドルを含みます。送信側では、コピーの対象となったバッファ ID を指します。

RequestErrorRequestStatusに IPCSTATUS_FAILが返される場合、この RequestErrorが失敗の理由を示すよう設定されます。

RequestOraErrIPCSTATUS_FAILが返され、RequestErrorフィールドが IPCERROR_OERRORになった場合、このフィールドは、詳細なエラー情報を追加して更新された ORAERRへのポインタとなります。

RequestFlagsコールに渡されたフラグのコピーです。

実装上の注意実装上の注意実装上の注意実装上の注意有効な IPCREQUEST構造体に対しては、基礎となる操作のステータスにかかわらず、ステータスを問い合せることができます。要求が進行中の場合、RequestType、RequestFlagsおよび RequestStatusフィールドのみ更新が必要です。IPCSTATUS_INPROGRESSが通知された場合に、Real Application Clusters クライアントはそれ以外のフィールドを調べません。

関連項目関連項目関連項目関連項目UNIX V8 skgxprqs

8-18 Oracle9i Real Application Clusters クラスタ・インタフェース詳細

Page 149: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

IPC のデータ構造体 - Oracle 定義の構造体

IPCSTAT

概要概要概要概要typedef struct _IPCSTAT { char Description[IPC_MAX_STAT_NAME]; DWORD Value;} IPCSTAT, *LPIPCSTAT;

説明説明説明説明OSD 定義の統計情報を返すために使用される Oracle 定義の構造体。すべて、ベンダーによって記述されます。

Description返される統計の名前。

Value統計の実際の値。

IPC のデータ構造体およびルーチンの定義 8-19

Page 150: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

IPCSTATUS

IPCSTATUS

概要概要概要概要typedef OSDSTATUS IPCSTATUS;

説明説明説明説明慣例的に、IPC の大部分のルーチンは、ルーチンが正常に完了したかどうかを示すステータス・コードを返すよう定義されます。定義済のリターン・コードは、次のとおりです。

IPCSTATUS_INVALIDコールに渡された要求が無効であることを示します。

IPCSTATUS_SUCC同期式の操作の場合は、要求が正常に発行されたことを示します。他のコールの場合は、I/O が完了したことを示します。

IPCSTATUS_FAIL要求された操作が失敗したことを示します。

IPCSTATUS_TIMEDOUT操作の前に要求されたタイムアウトが完了したことを示します。

IPCSTATUS_POSTED要求された操作に割込みがあったことを示します。

IPCSTATUS_INPROGRESS要求された操作が、まだ進行中であることを示します。

IPCSTATUS_CANCELLED要求された操作が取り消されたことを示します。

IPCSTATUS_NOTFOUND要求によって記述された操作が見つからないことを示します。

IPCSTATUS_BUSY要求を取り消すことができなかったことを示します。要求はすでに開始されています。

IPCSTATUS_DONE要求を取り消すことができなかったことを示します。要求はすでに完了しています。

8-20 Oracle9i Real Application Clusters クラスタ・インタフェース詳細

Page 151: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

IPC のデータ構造体 - Oracle 定義の構造体

実装上の注意実装上の注意実装上の注意実装上の注意IPC の実装では、発行された IPC 操作が未処理であるかぎり、そのすべてを実装定義による方法で追跡する必要があります。基礎となる I/O 操作が正常に、またはエラーで完了した場合は、IPCWait() コールを介して Real Application Clusters クライアントによって再取得されるまで、要求構造体を追跡する必要があります。Real Application Clusters クライアントによって要求が再取得されてからでなければ、クライアントはその要求を再利用できません。通常これは、IPCREQUEST構造体をキューイングすることによって実装されます。次のIPCSTATUS 値のいずれかが返されるまで、要求は完了していないと判断されるため、IPCの実装によって追跡される必要があります。

IPCSTATUS_SUCC

IPCSTATUS_FAIL

他のすべての IPCSTATUSは、要求が未処理である、または正常に発行されていないことを示します。たとえば、IPCReceive() 操作と、それに続く IPCWait() を実行すると仮定します。IPCWait() コールで IPCSTATUS_POSTEDが返された場合、その要求はまだ未処理であり、IPC の実装により追跡されているため、クライアントは操作が正常に完了するまで、すなわち IPCSTATUS 値として IPCSTATUS_SUCCまたは IPCSTATUS_FAILが返されるまで、再度 IPCWait() をコールする必要があります。

使用されない IPCSTATUS 値のいくつかは、関数の戻り値ですが、実装定義の要求構造体に関連付けて、要求のステータスを保持するためのものです。次のような値があります。

IPCSTATUS_CANCELLED

IPCSTATUS_INPROGRESS

各 IPCSTATUS 値の詳細は、それぞれのルーチンの説明を参照してください。

実装では、IPCSTATUS_FAILが返された場合は、次の項で説明しているように、常にIPCERROR値を更新する必要があります。

関連項目関連項目関連項目関連項目UNIX V8 slerc

IPC のデータ構造体およびルーチンの定義 8-21

Page 152: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

IPCVERSIONINFO

IPCVERSIONINFO

概要概要概要概要typedef OSDVERSIONINFO_ { } IPCVERSIONINFO, *LPIPCVERSIONINFO;

説明説明説明説明この構造体は、Oracle クライアントと IPCOSD モジュールの実装間での Real Application Clusters API のバージョン情報を通信します。このバージョン構造体は、Real Application Clusters API の両方の側がバイナリ互換であることを検証するための、双方向のバージョン・ネゴシエーション・ダイアログを実現するために用意されています。MajorVersionおよび MinorVersion フィールドは、IPCGetVersionInfo()コールを介してそれらを渡すコンポーネントのリビジョン番号を保持するよう定義されています。

MajorVersion およびおよびおよびおよび MinorVersionこの構造体の MajorVersion の部分は、コンポーネントが依存する仕様のリビジョン・レベルを示すために使用されます。同じ MajorVersion 番号で設計およびコーディングされているコンポーネントには、バイナリ互換性があります。MajorVersion が一致していない場合、モジュールにはバイナリ互換性がありません。

MinorVersion は、MajorVersion レベルの仕様に対する、バイナリ互換性には影響がない改訂と拡張を指定するために使用されます。

実装上の注意実装上の注意実装上の注意実装上の注意この構造体は、ベンダーの OSD コンポーネントが Real Application Clusters 環境によってロードされるときに、Real Application Clusters と OSD 間のバージョン・ネゴシエーションを実行するために使用されます。Real Application Clusters では、DLL がロードおよび初期化された直後に、自身のバージョン番号に対して OSD のバージョン番号がチェックされます。ただしこれは、DLLEntryPoint()以外のルーチンがコールされて、互換性が確認される前に実行されます。DLL の DLLEntryPoint()ルーチンは、関連するGetVersionInfo()ルーチンより前にコールされるため、DLLEntryPoint()では、バージョンに依存しない初期化アクティビティのみが発生する必要があることに注意してください。

関連項目関連項目関連項目関連項目UNIX V8 skgpvers

注意注意注意注意 : バージョン番号およびリリース番号は、正しいバージョンの IPC であることを検証する必要があります。バイナリ非互換性が導入されており、現在は、これがリリース番号を示す唯一の番号となっています。

8-22 Oracle9i Real Application Clusters クラスタ・インタフェース詳細

Page 153: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

IPC のデータ構造体 - 実装定義の構造体

IPC のデータ構造体のデータ構造体のデータ構造体のデータ構造体 - 実装定義の構造体実装定義の構造体実装定義の構造体実装定義の構造体

IPCBUFFERID

概要概要概要概要typedef LPVOID IPCBUFFERID;

説明説明説明説明リージョン内の各バッファは、IPCPrepareBuffer()ルーチンを使用してメモリー転送用に確保されます。このルーチンは、確保されたバッファへのリモート・アクセスに必要な実装固有のタスクを実行し、リモート・コピーを送る他のプロセスへのバッファを記述する、一意のチケットを作成します。このチケットは、バッファ識別子(IPCBUFFERID)と呼ばれるものです。

バッファ識別子によって、ローカルとリモートのあらゆるプロセスは、基礎となるバッファへの完全なアクセスが可能になります。実装では、アクセス権を付与し、関連するバッファにリモート・コピーを送るために必要な実装固有のタスクをすべて実行する必要があります。リモート・コピーは、バッファ識別子の有効なコピーを持つどのプロセスからでも作成可能です。プロセス間でのバッファ識別子の通信には、IPC の任意のメカニズムを使用できますが、通常は Oracle 共有メモリーまたは IPC のポートベース・コールを使用します。

すべてのバッファ識別子は、一意に 1 つのバッファにバインドされており、確保されたバッファが有効であるかぎり、つまり IPCUnprepareBuffer()コールを介して明示的に、または IPCUnmapMemory()や IPCDeleteContext()コールを介して暗黙的にバッファが破棄されるまで、有効と判断されます。

実装上の注意実装上の注意実装上の注意実装上の注意IPCBUFFERIDの実装では、アドレス空間およびノード間で各 IPCBUFFERIDのコピーが可能なかぎり、内部的に任意のネーミング計画を使用できます。実装では、IPCBUFFERIDネームスペースによって、IPCBUFFERIDと確保されたバッファとの間で、1 対 1 の一意なマッピングが可能となることも保証する必要があります。クラスタ内の他のクライアントへの IPCBUFFERIDの伝播は、Oracle クライアントが実行します。

Oracle9i では、IPCBUFFERIDのサイズを 大 20 バイトに制限しています。

関連項目関連項目関連項目関連項目UNIX V8 skgxpbid

IPC のデータ構造体およびルーチンの定義 8-23

Page 154: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

IPCCONNECTION

IPCCONNECTION

概要概要概要概要typedef LPVOID IPCCONNECTION;

説明説明説明説明IPCCONNECTION構造体は、リモートの IPC ポートへのデータ送信のために作成される単一の論理接続を記述する際に使用する、実装定義の構造体です。IPC OSD の実装では、この構造体を使用して、基礎となる接続の実装に関するステータス情報を管理および格納します。Real Application Clusters は、IPCCONNECTION用の領域を割り当て、OSD の実装でその内容を初期化できるように、それを IPCConnect()に渡します。接続が不要になった時点でIPCDisconnect()がコールされると、IPCCONNECTIONのステータス情報は破棄されます。

実装上の注意実装上の注意実装上の注意実装上の注意Real Application Clusters の IPC 接続モデルは、コネクションおよびコネクションレスの実装をサポートするために設計された論理モデルです。どちらのタイプの実装でも、IPCConnect()および IPCDisconnect()ルーチンが必要なため、IPCCONNECTION 構造体をサポートする必要があります。ただし、これらの構成メンバーは、実装によってはきわめて Thin である場合があります。この仕様で説明されているメッセージ送信操作では、IPCCONNECTION 構造体を介して送信の宛先を通知することに注意してください。メッセージ送信操作では、IPCPORTからデータを取得します。これは、ポート上で確立された複数の接続に対して、読取り側では IPCPORTがデマルチプレクサとして機能し、基礎となる接続で受信されるデータが関連するポートで使用可能であることを前提としています。

コネクションレス・モデルでは、多くの場合、基礎となる同じエンドポイントを参照する単純な IPCCONNECTION および IPCPORT構造体を作成します。接続ベースの実装では、基礎となるエンドポイントの同期を処理し、その同期メカニズムを介して確立されるエンドポイントにメッセージを送信する十分な状態を格納する必要があります。接続要求の適切な認証は、基礎となる実装が処理します。

コネクションレスの実装の場合、IPCCONNECTION は 小限の構造体である(すなわち、ポート ID にほぼ相当する)場合があります。その場合の実装では、擬似接続セマンティックを実装する必要はなく、IPCConnect()をハードワイアして、 小限のIPCCONNECTION構造体をビルドし、正常に返すことができます。

関連項目関連項目関連項目関連項目UNIX V8 skgxpcnh

8-24 Oracle9i Real Application Clusters クラスタ・インタフェース詳細

Page 155: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

IPC のデータ構造体 - 実装定義の構造体

IPCCONTEXT

概要概要概要概要typedef LPVOID IPCCONTEXT;

説明説明説明説明IPCCONTEXT構造体は、各クライアントに関連する内部 IPC ステータス情報を追跡する際に使用される実装定義の構造体です。IPC の実装を使用するすべてのクライアントが、IPCCONTEXTを割り当てる必要があります。この構造体は、クライアントを識別し、クライアントによって割り当てられた他のすべての IPC リソースを追跡する機能を持っています。クライアントは通常、複数の IPCCONTEXT構造体を割り当てることはなく、各クライアントに対しては 1 つの IPCCONTEXTが存在します。同様に、クライアントは、次の IPC 操作に備えるために IPCInitContext()ルーチンを通常 1 回コールします。

実装では、クライアントによって割り当てられるすべての IPC リソース、およびそれらのリソースの基礎となる状態を追跡できるように IPCCONTEXTを設計する必要があります。これは、クライアントが使用するすべての接続、ポート、リージョンおよび要求を追跡するということになります。コンテキストに関連付けられている未処理の要求をすべて問合せ、待機または取消しできるように、実装が十分なステータス情報を格納することが特に重要です。IPC の仕様では、特定の要求時に、または IPCCONTEXTに対して、IPCWait() を定義することに注意してください。コンテキストでの待機は、そのコンテキストに対して完了する IPC 操作があると割込みが発生します。

IPCCONTEXTは、クライアントによる転送の目的で間接的にも使用されます。転送は、クライアント間の割込みと考えることができます。転送は通常、IPCCONTEXTIDを介しIPCCONTEXTに対して実行されます。IPCCONTEXTは、IPCCONTEXTIDによって命名されます。

実装上の注意実装上の注意実装上の注意実装上の注意実装依存のすべての情報は、内部プライベート・メモリーを割り当てて格納するのではなく、コンテキスト構造体に格納する必要があります。プライベート・メモリーの割当ても可能ですが、それが絶対に必要な場合以外は推奨されません。

Windows NT および Windows 2000 ベースの実装では、クライアントはスレッドであり、通常は各スレッドが IPCCONTEXTを割り当てています。ほとんどの場合、IPCCONTEXTを割り当てているスレッドのみがそれを使用します。例外は、他の独立したスレッドが、異常終了した別のスレッドのかわりに IPCDeleteContext()をコールする場合です。単一のクライアントが複数のコンテキスト構造体を作成することは許可されていません。

関連項目関連項目関連項目関連項目UNIX V8 skgxpctx

IPC のデータ構造体およびルーチンの定義 8-25

Page 156: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

IPCCONTEXTID

IPCCONTEXTID

概要概要概要概要typedef LPVOID IPCCONTEXTID;

説明説明説明説明IPCCONTEXTIDは、ノード上のクライアント・プロセス(スレッド)間で IPCCONTEXTを記述するための名前です。IPCCONTEXTIDは、割込み処理の対象となるプロセス(スレッド)のコンテキストを指定するために、IPCPost() によって使用されます。

実装上の注意実装上の注意実装上の注意実装上の注意IPCCONTEXTID の実装には、IPCPost()操作をサポートするために、プロセスが該当のIPCCONTEXT情報を識別する際に必要な情報が含まれている必要があります。Real Application Clusters クライアントは、IPCCONTEXTIDのバックアップに使用するメモリーが他の Real Application Clusters クライアントと共有可能であることを保証しません。

通常、IPCCONTEXTIDはアドレス空間の間でコピーできる実装定義の参照であるため、プロセスのプライベート構造体を参照しません。

関連項目関連項目関連項目関連項目UNIX V8 skgxpcid

8-26 Oracle9i Real Application Clusters クラスタ・インタフェース詳細

Page 157: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

IPC のデータ構造体 - 実装定義の構造体

IPCPORT

概要概要概要概要typedef LPVOID IPCPORT;

説明説明説明説明IPCPORTは、ローカル通信エンドポイントの論理的な抽象化です。IPCPORTは、リモート・クライアントからのアドレスが可能となるように命名できます。IPCPORT構造体は、この論理エンドポイントを記述し、それを基礎となる処理の実装にマップする実装定義の構造体です。

IPCPORTは、メッセージ・キューと考えることができます。これはメッセージ送信の 終的な宛先として、および受信メッセージをクライアントが取り出す場所として機能します。IPCPORT は、論理的には一重化(単方向)の構成メンバーです。クライアント間で RPC を実行するには、2 つの IPCPORT と、対応する 2 つの接続操作が必要です。

IPCPORT は、グローバルな命名が可能です。すなわち、IPCPORT がクラスタ内の全ノード上の全クライアントによって一意にアドレスできるように命名できます。

IPCPORT は、クライアントが IPCInitPort()ルーチンをコールする際に明示的に作成されます。IPCPORT は、IPCDeletePort()ルーチンにより破棄されます。ポートと関連付けられていた IPCPORTIDも、IPCPORTが破棄される際に破棄されます。

データは、接続先の IPCPORT に送信されます。その結果、IPCCONNECTION構造体において IPC 送信操作が実行されます。IPC OSD の実装では、IPCPORTと、それに関連する接続との間のリンクが維持されると想定されています。

データは、IPCPORTから直接読み込まれます。データは接続に対して送信されるのみであるため、実装では接続とポートの間の関係を維持する必要があります。IPCPORTには、複数の受信接続を関連付けることができます。その場合、ポートに関連付けられた接続のいずれかで受信されるデータは、IPCPORT上での読込み操作が可能になります。

IPC のデータ構造体およびルーチンの定義 8-27

Page 158: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

IPCPORT

実装上の注意実装上の注意実装上の注意実装上の注意IPCPORT の実装では、クライアントが受信メッセージを取り出し、追跡できる十分なステータス情報を格納する必要があります。IPCPORT は、コンテキスト(すなわちプロセス)固有の構造体であり、実装では、OSD の通信エンドポイント情報に対するプロセス固有のハンドルまたは参照を格納できます。

Oracle クライアントでは、基礎となる実装が双方向のデータ・フローをサポートしているかどうかにかかわらず、IPCPORT を単方向で使用します。したがって、2 つのクライアント間での要求 / 応答の対話には、常に 2 つの IPCPORT が必要です。

Oracle クライアントは、メッセージ送信操作を開始する際に、ローカルの IPCPORTエンドポイントを明示的には提供せず、またそれを要求もしません。送信の開始にローカルのエンドポイントを必要としない実装では、IPCConnect()コールを使用して暗黙的にエンドポイントを作成することも、通常はコンテキスト初期化の際に作成されるデフォルトのエンドポイントを使用することも可能です。

実装では、クライアント間で配送されるメッセージの順序を保証する必要があります。クライアントは、対応するクライアント(メッセージの送信側)から受信したメッセージをピックアップするため、キューイングされた基礎となるすべての実装でメッセージの順序を保証する必要があります。

関連する IPCPORT が破棄される際の IPCPORTIDのクリーンアップは、実装で処理します。実装では、再割当てされたポート ID によってクライアントが混乱しないことが保証されるかぎり、必要に応じてポート ID を再利用できます。

関連項目関連項目関連項目関連項目UNIX V8 skgxpt

8-28 Oracle9i Real Application Clusters クラスタ・インタフェース詳細

Page 159: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

IPC のデータ構造体 - 実装定義の構造体

IPCPORTID

概要概要概要概要typedef LPVOID IPCPORTID;

説明説明説明説明IPCPORTIDは、1 つの IPCPORT を一意に命名するために使用される、実装定義の構造体です。IPCPORTIDは、グローバルに一意な名前である必要があります。すなわち、クラスタ内の異なるノード上にあるクライアント・プロセスが接続でき、そのポートへのメッセージ送信操作を開始できるように、IPCPORTを記述する名前です。

IPCPORTID は、実装に依存しないトランスポート・アドレスであると考えることができます。これらのアドレスは、アクティブなクラスタ・メンバーにのみ認識されている必要があります。

IPCPORTIDは、IPCInitPort() コールを介して実装により暗黙的に作成されます。関連する IPCPORT が破棄されると、IPCPORTIDも破棄されます。

実装上の注意実装上の注意実装上の注意実装上の注意IPCPORTIDの実装では、アドレス空間およびノード間で各 IPCPORTIDのコピーが可能なかぎり、内部的に任意のネーミング計画を使用できます。実装では、IPCPORTIDネームスペースによって、IPCPORTIDと IPCPORTの間で、1 対 1 の一意なマッピングが可能となることも保証する必要があります。クラスタ内の他のクライアントへの IPCPORTIDの伝播は、Oracle クライアントが実行します。

Oracle9i では、IPCPORTIDのサイズを 大 64 バイトに制限しています。

関連項目関連項目関連項目関連項目UNIX V8 skgxpid

IPC のデータ構造体およびルーチンの定義 8-29

Page 160: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

IPCREGION

IPCREGION

概要概要概要概要typedef LPVOID IPCREGION;

説明説明説明説明リージョンとは、送られたリモート・コピーが実行される、ユーザー仮想メモリーの連続エクステントです。すべてのリモート・コピーは、マップされたリージョン内に確保されたバッファのみを宛先とします。IPCREGIONは、これらのマップされたリージョンを記述および管理するために使用される、実装固有の構造体です。

リージョンは各プロセスに存在し、送られたメモリー・コピーの宛先となるクライアント・プロセスのアドレス空間の一部を定義および制限する際に使用されます。リージョンは、メモリー・コピー完了の通知を送るメカニズムとしても利用されます。リージョン内のメモリーへのコピーが発生すると、そのリージョンに関連付けられているコンテキストに通知が送信されます。

リージョンは、 大でユーザー仮想領域の合計まで大きくできますが、通常は Oracle SGAの大きいチャンクです。リージョンを小さくし、数 KB で構成することもできます。

クライアントの登録解除またはリージョンの宣言は、大きいメモリー・チャンクに対する実装固有のメモリー設定タスク(すなわち、物理マッピング)が可能となるように設計されています。そのため、リージョン・マッピングは比較的コストの高い操作と考えられ、頻繁には実行されません。

クライアントは、作成するリージョンのユーザー仮想アドレス空間を選択する、またはそれを選択するような実装を許可することができます。これは、転送に特定範囲のメモリーを優先する実装で役に立ちます。クライアントは、マップされたエクステントの返されたベースを常にチェックする必要があり、要求されたベースが割り当てられたベースと同じであると想定することはできません。

リージョン・サイズの変更、すなわち拡大または縮小は、作成後でも可能です。リージョン・サイズの変更が実行される頻度は低く、小さいリージョンへの縮小が一般的です。リージョンを縮小することは、そのリージョンの削除部分を考えれば、リージョンの破棄と等しい意味を持ちます。

リージョンは、IPCMapMemory()ルーチンを使用して作成され、IPCUnmapMemory()ルーチンによって明示的に破棄されます。リージョンは、IPCDeleteContext()ルーチンを介して、あるいはホスト・プロセスが正常または異常終了した際にも、暗黙的に破棄されます。リージョンが破棄されると、そのリージョンによって記述されていたメモリーのエクステントは、リモートのノードまたはプロセスからアクセスできなくなります。同様に、削除されたリージョンに対して未処理の操作でも、破棄以前のリージョンによって記述されたメモリー・エクステントの修正は許可されなくなります。

8-30 Oracle9i Real Application Clusters クラスタ・インタフェース詳細

Page 161: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

IPC のデータ構造体 - 実装定義の構造体

リージョンは、プロセスのプライベートまたは共有メモリー・セグメントに作成できます。リージョンは、たとえ共有メモリー・セグメント内に作成された場合でも、常にそれを作成したプロセスに属しプライベートです。リージョン内に確保されたバッファに送られるリモート・コピーの場合、基礎となるメモリーが共有かどうかにかかわらず、コピー完了の通知はコピーが実行される対象のリージョンのみに送信されます。

各リージョンは特定の IPCCONTEXT内部に作成され、存続期間を通じてそのコンテキストに関連付けられます。コンテキストは、クライアントが未処理の操作の追跡に使用できる中心的な同期ポイントを提供します。リージョン内のバッファがリモート・コピーを介して更新されると、そのバッファに関連付けられた IPCREQUESTに通知情報が記録され、リージョンおよびコンテキストに渡されます。コンテキストで受信データを待機していたプロセスは、スリープを解除され、完了したコピーを記述している IPCREQUESTに渡されます。

リージョンの存続期間は有限であり、それは作成および破棄によって決定されます。この存続期間は、リージョンによりマップされるメモリーの存続期間より短い場合もあります。したがって、同じメモリーをマップした 2 つの連続するリージョンでも、個別のリージョンとなります。実際には、リージョンはメモリーの領域にエポック識別子をプラスしたものです。

リージョンは、制御可能な存続期間を持っているため、障害を切り分ける重要な単位としても機能します。特に、マップされていないリージョンが同じメモリー・チャンクに再マップされた場合、そのリージョンは個別であると判断され、以前のリージョンに対する操作は許可されなくなります。送信操作は、対象となるリージョンが存在する場合にのみ成功するため、マップされていないリージョンへの送信は、受信側のメモリーを妨げることなく失敗します。このように、1 つのプロセスを、誤動作するリモート・プロセスから切り離すことが可能です。リージョンは通常、リカバリの前後に破棄および再構築されます。古い、または無効なリージョンへの転送は、リカバリの開始と同時に破棄されることが重要です。

複数のクライアントが、1 つのリージョン内のバッファに対して同時に転送を実行する場合があります。複数のバッファ書込みが相互に競合しないための調整は、クライアントが処理します。複数のクライアントによる単一バッファへの書込みが重複する場合、実装ではそれを回避しないため、不確定な結果を生みます。

実装上の注意実装上の注意実装上の注意実装上の注意IPCREGIONの実装では、マップされたメモリー領域を追跡および管理できる十分なステータス情報を格納する必要があります。IPCREGIONは、コンテキスト(すなわちプロセス)固有の構造体であり、実装では、OSD の転送情報に対するプロセス固有のハンドルまたは参照を格納できます。

実装では、IPCMapMemory()操作の間にメモリー領域にリモート・アクセスすることも、あるいは IPCPrepareBuffer()操作を介して特定のバッファが確保されるまでアクセスを遅延することも可能です。マッピング操作の頻度は高くありませんが、個々のバッファ確保は頻繁に行われるため、実装ではマップ・コールの間に、事前に可能なかぎり多くのリモート・アクセス設定を実行することをお薦めします。事前のマッピングができない実装の場合、リモート・アクセスを可能にするコストをバッファの確保によって分散または遅延し、関連するパフォーマンス・コストを負担させることができます。

IPC のデータ構造体およびルーチンの定義 8-31

Page 162: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

IPCREGION

実装では、確保された同じバッファへのメモリー・コピーの重複を回避する必要はありません。同じバッファへの複数のバッファ書込みが相互に競合しないための調整は、クライアントが処理します。

単一のコンテキストから単一の宛先リージョンへ複数のメモリー・コピーが送られる場合、実装では、そのリージョンのクライアントに送信される通知の順序を保証する必要があります。実装では、同じクライアントの異なるリージョンへの通知については、その順序の保証は不要です。同様に実装では、メモリー・コピーと、同じクライアントに対するポートベースの送信操作との間で、通知の順序を保証する必要もありません。

リージョンが破棄された際、そのリージョン内のバッファに対するすべてのアクセスを取り消す処理は、実装が行います。未処理または受信中のリモート・コピーが、破棄以前のリージョンによって定義されたメモリーを修正することはできません。破棄以前のリージョンで確保されていたバッファの IPCREQUESTおよび IPCBUFFERIDも、取消しはすべて実装が処理します。未処理のすべてのメモリー操作は、IPCSTATUS_CANCELLEDステータスで取り消されます。

関連項目関連項目関連項目関連項目UNIX V8 skgxprgn

8-32 Oracle9i Real Application Clusters クラスタ・インタフェース詳細

Page 163: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

IPC のデータ構造体 - 実装定義の構造体

IPCREQUEST

概要概要概要概要typedef LPVOID IPCREQUEST;

説明説明説明説明IPCREQUESTは、IPC 操作を完全に記述するために使用される、実装定義の構造体です。実装では、IPCREQUEST構造体を使用して、開始から完了までのクライアント要求を追跡し、この構造体での要求操作に関連するすべての情報を格納する必要があります。

IPC 操作の開始、未処理の操作の追跡、未処理の操作への変更(すなわち取消し)、および未処理または完了した操作に関するステータスの取得に、クライアントは IPCREQUEST構造体を使用します。

Real Application Clusters が、実装で使用するために IPCREQUEST構造体を割り当てます。クライアントは、これらの構造体を実装に発行します。この時点で、IPCREQUESTは Real Application Clusters クライアントと実装との間で共有され、未処理の IPCREQUESTとなります。未処理の要求とは、開始された、すなわち基礎となる実装に発行された要求であり、そこで指定された操作がスケジュールされた、または進行中である要求のことです。IPCREQUESTが完了したと判断されるのは、要求された操作が実行され、その完了ステータスをクライアントが取り出した時点です。この時点で、OSD の実装は要求の追跡を解放され、IPCREQUEST構造体を参照しなくなります。

IPC クライアントでは、IPCREQUEST構造体のレイアウトおよび内容には関知せず、その内容を直接アクセスまたは変更することはありません。ただし、クライアントは発行された操作を追跡するために IPCREQUESTを使用するので、IPCGetRequestInfo() コールを介して、IPCREQUESTから主な情報およびステータスを問い合せることができます。実装では、IPCREQUEST構造体に格納された実装固有の情報を、IPCREQUESTINFO構造体により定義された適切なフォームにマップする必要があります。

Real Application Clusters クライアントは、IPC 実装のかわりに、構造体用のバックアップ・メモリーを割り当てます。ただし実装では、このメモリーを初期化して本質的にはそれを所有し、IPC 操作が開始された時点から、それが完了しクライアントがそのステータスを取り出すまで、必要に応じてそれを使用します。クライアントは通常、基礎となる操作が完了すると同時に、割り当てられた IPCREQUEST構造体を再利用します。実装は、IPCWait()操作を介して、構造体の制御をクライアントに返します(すなわち、構造体の共有を停止する)。クライアントは、要求が未処理または要求が完了した際に、何度でもIPCGetRequestInfo() をコールできます。

IPC のデータ構造体およびルーチンの定義 8-33

Page 164: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

IPCREQUEST

IPCPrepareBuffer()ルーチンに提供される IPCREQUEST構造体は特別であり、ポートベースのルーチンとは別に処理する必要があります。バッファが確保されると、指定されたIPCREQUEST構造体は、バッファが有効であるかぎり、確保された特定のバッファに結び付けられます。確保されたバッファが、送られたメモリー・コピーによって更新されると、関連付けられた IPCREQUEST構造体がそのコピーに関する情報を使用して更新され、クライアントは更新要求の完了を通知されます。クライアントが IPCGetRequestInfo()をコールすると、IPCREQUESTが IPCSTATUS_INPROGRESSステータスに再配置され、他のバッファ更新を待機します。

実装上の注意実装上の注意実装上の注意実装上の注意実装では、関連する操作が完了するまで未処理の IPCREQUEST構造体を追跡する必要があります。要求の発行から完了までの間、IPCREQUEST構造体は基礎となる実装とクライアントの間で共有されます。この間、クライアントは定期的に要求を問い合せ、その完了に同期するか、または要求を取り消しますが、IPCREQUEST構造体の内容を更新するような操作は実行できません。IPC の実装が構造体の内容を所有しており、任意にそれを変更できます。

クライアントは、コンテキストに関連付けられた、未処理の IPCREQUEST構造体すべてに対する特定の操作も実行します。たとえば、IPCWait() はコンテキストに関連付けられた任意の未処理の要求の完了を待機する際にクライアントが使用できますが、IPCPost() はブロッキング要求に割り込むために使用され、IPCCancel()はコンテキストに対して未処理のすべての要求を取り消す際に使用できます。これらのいずれの場合でも、実装ではIPCCONTEXTに対して開始されたすべての IPCREQUESTを検出できる必要があります。

関連項目関連項目関連項目関連項目UNIX V8 skgxprqh

8-34 Oracle9i Real Application Clusters クラスタ・インタフェース詳細

Page 165: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

IPC のデータ構造体 - 実装定義の構造体

IPCREQUESTTYPE

概要概要概要概要typedef enum _IPCREQUESTTYPE_ { IPCREQUESTTYPE_CONNECT, IPCREQUESTTYPE_SEND, IPCREQUESTTYPE_RECEIVE, IPCREQUESTTYPE_MCOPY IPCREQUESTTYPE_MUPDATE} IPCREQUESTTYPE;

説明説明説明説明IPCREQUESTTYPE列挙構造体は、IPC OSD の実装でサポートする必要のある要求のタイプ・セットを定義する際に使用します。クライアントは、IPCGetRequestInfo() ルーチンを介して、未処理または完了した任意の要求の要求タイプおよびステータスを調べることができます。このルーチンは、どの実装定義メソッドが要求された場合でも、それによって渡された要求構造体に一致する特定の要求タイプを返します。

実装上の注意実装上の注意実装上の注意実装上の注意IPCREQUEST 構造体の内容は、すべて実装によって決定されます。ただし、特定の要求に固有の情報は、未処理または完了した要求のステータスを追跡するために、クライアントにより必要とされます。IPCGetRequestInfo() コールは、クライアントが IPCREQUEST構造体の形式を直接認識する必要がないように、特に提供されているものです。ただし、基礎となる実装では、クライアントの問合せに応答するために、要求タイプの直接通知をサポートする(すなわち、通知または何らかの正規化フォームを、関連する内部構造体に埋め込む)必要があります。

関連項目関連項目関連項目関連項目UNIX V8 skgxprqtyp

IPC のデータ構造体およびルーチンの定義 8-35

Page 166: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

IPC のルーチン - 汎用 OSD コール

IPC のルーチンのルーチンのルーチンのルーチン - 汎用汎用汎用汎用 OSD コールコールコールコール

IPCGetAttributeValue: 事前定義済属性の値を返す 事前定義済属性の値を返す 事前定義済属性の値を返す 事前定義済属性の値を返す

概要概要概要概要LONG IPCGetAttributeValue (IN OUT LPORAERR Error, IN IPCATTRIBUTE Attribute, IN IPCEXTENSION ExtendedInfo, IN IPCFLAGS Flags);

パラメータパラメータパラメータパラメータ

ErrorORAERR構造体へのポインタです。この構造体には、失敗の理由を示すために実装により設定される各種のエラー・フィールドが含まれます。

Attribute問い合せる IPCATTRIBUTEを指定します。

ExtendedInfo将来的に使用するために予約されている引数です。

Flagsこのルーチンに定義されているフラグはありません。

戻り値戻り値戻り値戻り値要求 IPCATTRIBUTEの値を返します。慣例的に、戻り値は正の値と定義されています。不明な IPCATTRIBUTEに対する問合せでは、-1 が返され、ORAERRエラー・コードは次のように設定されます。

IPCERROR_OERRORこれは、不明または不正な引数が渡されたことを示しています。

説明説明説明説明IPCGetAttributeValue() コールでは、クライアントが事前定義済の IPCATTRIBUTEの値を問い合せることが可能です。この値は、Real Application Clusters クライアントがその後の操作およびコール順序を構成する際に使用されます。

8-36 Oracle9i Real Application Clusters クラスタ・インタフェース詳細

Page 167: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

IPC のルーチン - 汎用 OSD コール

実装上の注意実装上の注意実装上の注意実装上の注意詳細は、IPCATTRIBUTEデータ構造体を参照してください。

DLL 情報情報情報情報IPC.DLL - 関数 3

関連項目関連項目関連項目関連項目IPCATTRIBUTE

UNIX V8 skgxpqry()

IPC のデータ構造体およびルーチンの定義 8-37

Page 168: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

IPCGetDataTypeSize: 事前定義済データ型のサイズを返す

IPCGetDataTypeSize: 事前定義済データ型のサイズを返す 事前定義済データ型のサイズを返す 事前定義済データ型のサイズを返す 事前定義済データ型のサイズを返す

概要概要概要概要LONG IPCGetDataTypeSize (IN IPCDATATYPE DataType, IN IPCEXTENSION ExtendedInfo, IN IPCFLAGS Flags);

パラメータパラメータパラメータパラメータ

DataTypeコールによる情報取得の対象となる、事前定義済の IPC データ型を示します。

ExtendedInfo将来的に使用するために予約されている引数です。

Flagsこのルーチンに定義されているフラグはありません。

戻り値戻り値戻り値戻り値指定したデータ型のサイズをバイト単位で返します。実装では、エラーを示す 0(ゼロ)を返す必要があります。

説明説明説明説明この関数は、クライアントが実装定義のデータ構造体のサイズを問い合せるために用意されています。クライアントは通常、構造体用のバックアップ・メモリーを割り当てる前にこのルーチンをコールします。

実装上の注意実装上の注意実装上の注意実装上の注意指定されたデータ構造体型に基づいて、クライアントが割り当てるバックアップ・メモリーは、適切なクライアント・メモリー領域、つまり Real Application Clusters の全クライアントが共有する領域か、プロセス専用のメモリーのいずれかから確保されます。クライアントは、このメモリーの内容に直接アクセスすることはありません。これは、OSD 実装のために割り当てられています。

8-38 Oracle9i Real Application Clusters クラスタ・インタフェース詳細

Page 169: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

IPC のルーチン - 汎用 OSD コール

DLL 情報情報情報情報IPC.DLL - 関数 2

関連項目関連項目関連項目関連項目IPCDATATYPESIZE

UNIX V8 skgxpsz()

IPC のデータ構造体およびルーチンの定義 8-39

Page 170: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

IPCGetVersionInfo: IPC クライアントとの間でバージョン情報のネゴシエーションを実行

IPCGetVersionInfo:    IPC クライアントとの間でバージョン情報のクライアントとの間でバージョン情報のクライアントとの間でバージョン情報のクライアントとの間でバージョン情報のネゴシエーションを実行ネゴシエーションを実行ネゴシエーションを実行ネゴシエーションを実行

概要概要概要概要IPCSTATUS IPCGetVersionInfo (IN LPIPCVERSIONINFO ClientVersionInfo IN OUT LPIPCVERSIONINFO IPCVersionInfo, IN OUT LPSTR VendorId, IN LONG VendorIdSize, IN IPCEXTENSION ExtendedInfo);

パラメータパラメータパラメータパラメータ

ClientVersionInfoコール側の Real Application Clusters クライアントのバージョン番号およびリリース番号のリビジョン・レベルを示す、IPCGetVersionInfo() ルーチンに渡される構造体です。

IPCVersionInfoIPC モジュールのバージョン番号およびリリース番号のレベルを取得するために、クライアントによって IPCGetVersionInfo() ルーチンに渡される構造体です。

VendorIdIPC OSD モジュールによってベンダー固有の実装文字列が格納される ASCIIの NULL終端文字列へのポインタです。

VendorIdSize事前に割り当てられた VendorIdバッファのサイズを示すために、クライアントによって渡される値です。

ExtendedInfo将来的に使用するために予約されている引数です。

戻り値戻り値戻り値戻り値クライアントと OSD モジュールの間でバージョン情報のネゴシエーションが正常に実行された場合、IPCSTATUS_SUCC を返します。それ以外の場合は、バージョンの不一致を示すIPCSTATUS_FAIL が返される必要があります。

8-40 Oracle9i Real Application Clusters クラスタ・インタフェース詳細

Page 171: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

IPC のルーチン - 汎用 OSD コール

説明説明説明説明このコールは、IPC OSD の DLL がロードされ、DLLMain() ルーチンがコールされた直後に実行されます。Real Application Clusters クライアントは、想定される OSD 仕様のバージョン番号を示す ClientVersionInfo 構造体を渡します。渡されるリリース番号は、バージョン番号により示される仕様のうちで、バイナリ互換性のあるリビジョンを示すために使用されます。OSD の実装では、互換性を確認するために渡されたバージョン番号を問い合せるとともに、不一致が検出された場合はエラーを返す必要があります。また、OSD の実装では、リリース番号も問い合せる必要がありますが、必ずしも厳密に一致させる必要はありません。この問合せは単に、バージョン番号により示される仕様の、バイナリ互換性のある拡張を示すためにのみ使用されるためです。

同様に OSD の実装では、IPCVersionInfo構造体を、依存する関連バージョン情報で更新する必要があります。Real Application Clusters クライアントでは、返された情報の整合性チェックが実行されます。このとき、バージョン番号が厳密に一致しているかどうかは検証しますが、リリース番号の不一致は無視されます。ベンダーは、OSD モジュールの実装インスタンスを追跡するために、リリース番号も使用することが推奨されます。

VendorId文字列は、ベンダーにより定義され、一意の OSD 識別子が任意に提供されます。Real Application Clusters クライアントは、通常 VendorIdフィールドをログ目的に使用するのみで、その内容は解釈しません。

実装では、この関数をサポートする必要があります。実装では、特定のバージョン番号およびリリース番号に対する移植キットでリリースされているヘッダー・ファイルをチェックする必要があります。

IPCGetVersion() は、Real Application Clusters 環境の存続期間を通じて複数回コールできます。

DLL 情報情報情報情報IPC.DLL - 関数 1

関連項目関連項目関連項目関連項目IPCVERSIONINFO

UNIX V8 skgxpveri()

注意注意注意注意 : バージョン番号およびリリース番号は、正しいバージョンの IPC であることを検証する必要があります。バイナリ非互換性が導入されており、現在は、これがリリース番号を示す唯一の番号となっています。

IPC のデータ構造体およびルーチンの定義 8-41

Page 172: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

IPC のルーチン - コンテキストの作成 / 破棄

IPC のルーチンのルーチンのルーチンのルーチン - コンテキストの作成コンテキストの作成コンテキストの作成コンテキストの作成 / 破棄破棄破棄破棄

IPCDeleteContext: 初期化済の 初期化済の 初期化済の 初期化済の IPC コンテキストを破棄コンテキストを破棄コンテキストを破棄コンテキストを破棄

概要概要概要概要IPCSTATUS IPCDeleteContext (IN OUT LPORAERR Error, IN IPCCONTEXT Context, IN IPCEXTENSION ExtendedInfo, IN IPCFLAGS Flags);

パラメータパラメータパラメータパラメータ

ErrorORAERR構造体へのポインタです。この構造体には、失敗の理由を示すために実装により設定される各種のエラー・フィールドが含まれます。

Context削除する IPCCONTEXT構造体へのポインタです。

ExtendedInfo将来的に使用するために予約されている引数です。

Flagsこの仕様ではフラグは使用しません。

戻り値戻り値戻り値戻り値処理が正常に完了した場合は IPCSTATUS_SUCC、失敗した場合は IPCSTATUS_FAILを返します。IPCSTATUS_FAILが返された場合、ORAERRエラー・コードのフィールドは次のように更新されます。

IPCERROR_BADARGS無効または不正な引数が渡されたことを示します。

IPCERROR_ENOMEM内部 IPC リソースの障害を示します。

IPCERROR_OERROR実装定義のエラーが発生したことを示します。実装では、ORAERR構造体に詳細な情報を提供する必要があります。

8-42 Oracle9i Real Application Clusters クラスタ・インタフェース詳細

Page 173: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

IPC のルーチン - コンテキストの作成 / 破棄

説明説明説明説明この関数では、以前に初期化された IPCCONTEXTが削除されます。削除する IPCCONTEXTに関連するアクティブなリソースは、すべてパージしてください。このコンテキストにアクティブなポートがある場合、それをクローズし削除する必要があります。このコンテキストにアクティブなリージョンがある場合、マッピングを解除し破棄する必要があります。同様に、削除される IPCCONTEXTに対して初期化された、未処理のすべての IPC 操作は、エラーの有無にかかわらず、コンテキストが破棄される前に取り消すか、または完了させる必要があります。

削除した IPCCONTEXT構造体によって識別されたクライアントが、CM 操作の実行を継続する場合には、初期化済の有効な IPCCONTEXTを再度取得する必要があります。

実装上の注意実装上の注意実装上の注意実装上の注意IPCCONTEXT構造体と、それに関連する IPCCONTEXTID の削除は、このルーチンが処理します。実装では、クライアントが無効なネーミングの問題(すなわち、廃止された不正なIPCCONTEXT構造体を参照する無効な IPCCONTEXTID)を検出することなく、これらの構造体を再利用できるように、両方の構造体をパージする必要があります。

実装では、未処理の要求を取り消して、それらをパージする必要があります。実装で、未処理の操作の完了を待機することは避けてください。取消しが可能な要求は、取り消す必要があります。IPCDeleteContext()ルーチンは、適切なタイミングで完了するようになっています。

IPCCONTEXTおよび関連する構造体のクリーンアップと、異常終了したクライアント・プロセスのための主な操作は、実装で処理されます。実装では、異常終了の際に基礎となるリソースが必ず解放されるようにしてください。

IPCCONTEXT構造体は特定のクライアントに属していますが、所有者が終了しようとしている場合など、異常があった場合には、IPCCONTEXTの所有者にかわって別のクライアントがIPCDeleteContext()をコールすることがあります。

実装では、IPCCONTEXTまたは IPCCONTEXTID 構造体の格納に使用されるバックアップ・メモリーの割当てを解除しないでください。このメモリーは、割り当てているクライアントによって所有され、そのクライアントの判断で再利用または再割当てが可能です。

このルーチンは同期式であり、転送できません。

実装では、この関数をサポートする必要があります。

DLL 情報情報情報情報IPC.DLL - 関数 5

関連項目関連項目関連項目関連項目UNIX V8 skgxpcdel

IPC のデータ構造体およびルーチンの定義 8-43

Page 174: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

IPCInitContext: IPC コンテキストを初期化

IPCInitContext:    IPC コンテキストを初期化コンテキストを初期化コンテキストを初期化コンテキストを初期化

概要概要概要概要IPCSTATUS IPCInitContext (IN OUT LPORAERR Error, IN OUT IPCCONTEXT Context, IN OUT IPCCONTEXTID ContextId, IN LPSTR InstanceId, IN IPCCALLBACK CallbackInfo, IN IPCCALLBACKCTX CallbackCtx, IN IPCEXTENSION ExtendedInfo, IN IPCFLAGS Flags);

パラメータパラメータパラメータパラメータ

ErrorORAERR構造体へのポインタです。この構造体には、失敗の理由を示すために実装により設定される各種のエラー・フィールドが含まれます。

Context初期化される IPCCONTEXT構造体へのポインタです。

ContextId初期化される IPCCONTEXTID 構造体へのポインタです。

InstanceId所属先の Real Application Clusters インスタンスを識別するためにクライアントによって渡された、ヌル文字で終了する ASCII 文字列へのポインタです。

CallbackInfoOracle9i クライアントは、ルーチンのロギング・エラーを含む有効な構造体を渡します。

CallbackCtxOracle9i クライアントは、CallbackInfo 構造体で示されたルーチンをコールする際に使用する必要があるコンテキスト引数へのポインタを渡します。

ExtendedInfo将来的に使用するために予約されている引数です。

Flagsこの仕様ではフラグは使用しません。

8-44 Oracle9i Real Application Clusters クラスタ・インタフェース詳細

Page 175: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

IPC のルーチン - コンテキストの作成 / 破棄

戻り値戻り値戻り値戻り値処理が正常に完了した場合は IPCSTATUS_SUCC、失敗した場合は IPCSTATUS_FAILを返します。IPCSTATUS_FAILが返された場合、ORAERRエラー・コードのフィールドは次のように更新されます。

IPCERROR_BADARGS無効または不正な引数が渡されたことを示します。

IPCERROR_ENOMEM内部 IPC リソースの障害を示します。

IPCERROR_OERROR実装定義のエラーが発生したことを示します。実装では、ORAERR構造体に詳細な情報を提供する必要があります。

説明説明説明説明この関数では、新規の IPCCONTEXT構造体の初期化に必要な、実装固有のタスクを実行します。他の IPC 操作が初期化される前に、各クライアントによって少なくとも 1 回はコールされる必要があります。クライアントは、実装定義の IPCCONTEXT構造体にバックアップ・メモリーを割り当てますが、その内容にはアクセスせず、それを解釈もしません。クライアントは、初期化されたコンテキストを、それが必要な他の IPC ルーチンに渡します。

この関数は、IPCCONTEXTID 構造体の初期化も行います。この構造体は、関連するIPCCONTEXT構造体の命名に使用され、同じノード上の他のクライアントに渡すことができるため、IPCCONTEXTID によって記述されるクライアントに、IPCPost() 操作を送ることが可能です。

また、クライアントは IPCCALLBACK構造体も渡します。この構造体では、エラーその他の例外的なイベントを通知およびロギングする際に実装で使用できる、主要なコールバック・ルーチンを提供します。

実装上の注意実装上の注意実装上の注意実装上の注意IPC の実装では、主な IPC 操作をすべて追跡し、それらを開始したクライアント・プロセスまたはスレッドに関連付ける必要があります。これは、主な IPC 操作のすべてが、特定のIPCCONTEXTとそれに関連する IPCCONTEXTID 構造体で記述できる、識別可能なクライアントによって所有されるということです。

IPCCONTEXTおよび IPCCONTEXTID 構造体は、クライアントの識別を可能にし、追跡の要件を要求するために用意されています。実装では、関連するその他のクライアント個々のプロセス情報または個々のスレッド情報も、自由にコンテキスト構造体に格納できます。

このルーチンは同期式であり、転送できません。

実装では、この関数をサポートする必要があります。

IPC のデータ構造体およびルーチンの定義 8-45

Page 176: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

IPCInitContext: IPC コンテキストを初期化

DLL 情報情報情報情報IPC.DLL - 関数 4

関連項目関連項目関連項目関連項目UNIX V8 skgxpcini

8-46 Oracle9i Real Application Clusters クラスタ・インタフェース詳細

Page 177: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

IPC のルーチン - コンテキストの作成 / 破棄

IPCTrace:    IPC トレースを有効化トレースを有効化トレースを有効化トレースを有効化 / 無効化無効化無効化無効化

概要概要概要概要IPCSTATUS IPCInitTrace (IN OUT LPORAERR Error, IN OUT IPCCONTEXT Context, IN IPCEXTENSION ExtendedInfo, IN IPCFLAGS TraceFlags);

パラメータパラメータパラメータパラメータ

ErrorORAERR構造体へのポインタです。この構造体には、失敗の理由を示すために実装により設定される各種のエラー・フィールドが含まれます。

Contextトレースが有効化または無効化される IPCCONTEXT構造体へのポインタです。

ExtendedInfo将来的に使用するために予約されている引数です。

TraceFlagsフラグ引数は、このルーチンの操作を修正する際に使用します。定義済のフラグ引数は、次のとおりです。

IPCTRACE_CANCELIPCCancel() のトレースを有効にします。

IPCTRACE_ERROR異常またはエラー状態のトレースを有効にします。

IPCTRACE_METAコンテキスト、ポート、リージョンまたは確保されたバッファの作成または削除について、トレースを有効にします。

IPCTRACE_POSTIPCPost() のトレースを有効にします。

IPCTRACE_RECEIVEIPCReceiveMsg() のトレースを有効にします。

IPCTRACE_RESV予約されています。

IPC のデータ構造体およびルーチンの定義 8-47

Page 178: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

IPCTrace: IPC トレースを有効化 / 無効化

IPCTRACE_RMCOPYリモート・メモリーのコピーのトレースを有効にします。

IPCTRACE_RMUPDバッファ更新通知のトレースを有効にします。

IPCTRACE_SENDIPCSendMsg()のトレースを有効にします。

IPCTRACE_WAITIPCWait() のトレースを有効にします。

戻り値戻り値戻り値戻り値処理が正常に完了した場合は IPCSTATUS_SUCC、失敗した場合は IPCSTATUS_FAILを返します。IPCSTATUS_FAILが返された場合、ORAERRエラー・コードのフィールドは次のように更新されます。

IPCERROR_BADARGS無効または不正な引数が渡されたことを示します。

IPCERROR_ENOMEM内部 IPC リソースの障害を示します。

IPCERROR_OERROR実装定義のエラーが発生したことを示します。実装では、ORAERR構造体に詳細な情報を提供する必要があります。

説明説明説明説明この関数は、特定のコンテキストに対するトレースのオン / オフを切り替えます。トレースのレベルは、設定されているフラグによって決定されます。クライアントは、任意の組合せでフラグを設定できます。TraceFlagsを 0(ゼロ)に設定して IPCTrace()をコールすると、任意のコンテキストに対するトレースをオフにできます。

実装上の注意実装上の注意実装上の注意実装上の注意実装では、CALLBACK構造体を介して IPCInitContext()に提供されるコールバック・ルーチンを使用して、トレース情報を書き込む必要があります。トレース情報は、デバッグ・プロセスに使用されます。

このルーチンは同期式であり、転送できません。

実装では、この関数をサポートする必要があります。

8-48 Oracle9i Real Application Clusters クラスタ・インタフェース詳細

Page 179: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

IPC のルーチン - コンテキストの作成 / 破棄

DLL 情報情報情報情報IPC.DLL - 関数 22

関連項目関連項目関連項目関連項目UNIX V8 skgxptrace

IPC のデータ構造体およびルーチンの定義 8-49

Page 180: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

IPC のルーチン - ポートおよび接続の確立をサポート

IPC のルーチンのルーチンのルーチンのルーチン - ポートおよび接続の確立をサポートポートおよび接続の確立をサポートポートおよび接続の確立をサポートポートおよび接続の確立をサポート

IPCConnect: リモート・ポートに接続 リモート・ポートに接続 リモート・ポートに接続 リモート・ポートに接続

概要概要概要概要IPCSTATUS IPCConnect (IN IPCCONTEXT Context, IN OUT IPCCONNECTION Connection, IN IPCPORTID RemotePortId, IN IPCPORTID LocalPortId, IN ULONG Timeout, IN OUT IPCREQUEST ConnectRequest, IN LONG MaxMsgOutstanding, IN LONG MaxMsgSize, IN IPCEXTENSION ExtendInfo, IN IPCFLAGS Flags);

パラメータパラメータパラメータパラメータ

Contextコール側のクライアントを識別し、このコールに必要な実装依存のステータス情報を保持するために使用される IPCCONTEXT構造体へのポインタです。

Connection基礎となる接続操作が完了する際に初期化される IPCCONNECTION 構造体へのポインタです。

RemotePortIdクライアントが接続するリモート・ポートを記述する、初期化済の IPCPORTID構造体へのポインタです。

LocalPortIdコール側のクライアントが、RemotePortIdをエクスポートしたクライアントに通信する、初期化済の IPCPORTID構造体へのポインタです。ローカル・ポートは、逆方向の接続を確立するためにリモート・クライアントによって使用されます。

Timeoutミリ秒単位の接続タイムアウト周期です。

ConnectRequest未処理の接続操作とそのステータスを記述および追跡する際に初期化される IPCREQUEST構造体へのポインタです。

8-50 Oracle9i Real Application Clusters クラスタ・インタフェース詳細

Page 181: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

IPC のルーチン - ポートおよび接続の確立をサポート

MaxMsgOustandingこの接続を介する未処理のメッセージの 大数を指定します。

MaxMsgSizeこの接続を介して送信できるメッセージの 大サイズを指定します。

ExtendedInfo将来的に使用するために予約されている引数です。

Flagsフラグ引数は、このルーチンの操作を修正する際に使用します。定義済のフラグ引数は、次のとおりです。

IPCFLAG_SYNCHRONOUS同期式またはブロック方式で操作を実行する必要があることを、クライアントが示します。

IPCFLAG_BULK_TRANSFER大きいメッセージ用に接続が使用されることを示します。実装では、これを使用して送信を 適化できます。

戻り値戻り値戻り値戻り値IPCConnect() ルーチンは、次の IPCSTATUS 値を返すよう定義されています。

IPCSTATUS_SUCC非同期式の要求が正常に開始された、または同期式の要求が正常に完了したことを示します。

IPCSTATUS_POSTEDこのルーチンに対する同期式のコールが、操作の完了より前に別のクライアント・プロセスによって割り込まれたことを示します。

IPCSTATUS_TIMEDOUTこのルーチンに対するコールが、指定した時間内に完了できなかったことを示します。

IPCSTATUS_FAIL非同期式の要求を開始できなかった、または同期式の要求が失敗したことを示します。

このルーチンで IPCSTATUS_FAILが返された場合は、IPCGetRequestInfo() コールを使用して、IPCREQUEST 構造体から追加のエラー情報を取得できます。IPCERRORコードの戻り値は、次のように定義されています。

IPCSTATUS_FAIL無効または不正な引数が渡されたことを示します。

IPC のデータ構造体およびルーチンの定義 8-51

Page 182: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

IPCConnect: リモート・ポートに接続

IPCERROR_CONNINVALIDIPCCONNECTION 構造体が無効であることを示します。

IPCERROR_ENOMEM内部 IPC リソースの障害を示します。

IPCERROR_PORTINVALIDIPCPORTID構造体のいずれかが無効であることを示します。

IPCERROR_OERROR実装定義のエラーが発生したことを示します。実装では、ORAERR構造体に詳細な情報を提供する必要があります。

非同期式に発行された要求の場合、操作が未処理または完了したときに、関連するIPCREQUEST 構造体から、IPCSTATUS 情報を問い合せることができます。IPCGetRequestInfo() コールによって返される IPCSTATUS 値は、次のとおりです。

IPCSTATUS_CANCELLED操作が取り消されたことを示します。

IPCSTATUS_INPROGRESS操作が未処理であることを示します。

IPCSTATUS_SUCC操作が正常に完了したことを示します。

IPCSTATUS_FAIL操作が異常終了したことを示します。

非同期式の操作によって IPCGetRequestInfo() が完了し、結果が IPCSTATUS_FAILだった場合、そのコールでは、要求が失敗した理由を記述した IPCERROR情報も取得されます。IPCERRORの戻り値は、前の項で説明してあります。

8-52 Oracle9i Real Application Clusters クラスタ・インタフェース詳細

Page 183: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

IPC のルーチン - ポートおよび接続の確立をサポート

説明説明説明説明この関数は、RemotePortIdで指定されたリモートの IPCPORT に接続しようとするクライアントによってコールされます。複数のクライアントが、共通のリモート・ポートへの接続を確立できます。複数のクライアントが、共通のリモート・ポートへの接続を確立できます。

クライアントが、同じノード上のクライアント・プロセスによってエクスポートされたポートに接続しても問題はありません。

このコールでは、どのような実装固有の接続が要求された場合でも、基礎となる実装を通知します。基礎となる操作が実行され、接続が確立すると、Connectionによって指定されている IPCCONNECTION 構造体が、接続の記述に必要な実装固有のステータス情報を使用して初期化されます。

クライアントは、確立した接続を使用してメッセージを送信します。クライアントは、正常に接続が確立されないかぎりメッセージを送信できません(IPCSendMsg()には、初期化済の IPCCONNECTION 構造体が必要)。

基礎となる実装に要求が正常に発行されると、接続要求のステータスの記述、追跡およびレポートに必要な実装依存の情報を使用して、ConnectRequest構造体が初期化されます。

IPCREQUEST 構造体のバックアップに使用されるメモリーは、実装が未処理、またはクライアントが完了を通知するまで、実装によって所有され、追跡されます。この間、クライアントは IPCGetRequestInfo() コールを使用して、いつでもステータスを取り出すことができます。クライアントは、IPCREQUEST 構造体をアクセスまたは解釈せず、IPCWait() または IPCCancel() を介してその完了が通知されるまで、それを再利用することはできません。

同様に、初期化済の IPCCONNECTION 構造体は、IPCDisconnect() が実行されるまで、実装によって所有および追跡されます。クライアントは、この構造体をアクセスまたは解釈せず、その構造体に対して IPCDisconnect() が実行されるまで、それを再利用することはできません。

クライアントは、リモート・クライアントとの間で、要求 / 応答形式の対話を頻繁に行います。LocalPortId引数は、どのポートでメッセージを受信するかを送信に指示するために、IPCConnect() のクライアントによって指定されます。

IPCConnect() コールは、Timeout引数で定義されるタイムアウト周期が終わることによって、あるいは IPCConnect() が実行されている IPCCONTEXTに対して IPCPost()をコールする他のクライアントによって、割り込むことができます。割り込まれたコールは、完了したコールではありません。クライアントでは、IPCWait() をコールして要求の完了と同期するか、または IPCCancel() をコールして要求を強制的に失敗させる必要があります。

IPC のデータ構造体およびルーチンの定義 8-53

Page 184: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

IPCConnect: リモート・ポートに接続

実装上の注意実装上の注意実装上の注意実装上の注意実装では、このルーチンの同期式および非同期式の操作をサポートすることを、強くお薦めします。効率的な非同期式のサポートは、実装のパフォーマンスとスケーラビリティに直接影響する重要な要因です。実装で、真に非同期式の操作をサポートする必要はありませんが、非同期式のコール・シーケンスをシミュレートする、すなわち指定した操作に、IPCWait() または IPCCancel() が続き、さらに IPCGetRequestInfo() が続く必要があります。

同期モードで実装される場合、このルーチンは転送可能です。IPCPost() ルーチンによって割り込まれた操作は、未処理であり、クライアントは IPCWait() をコールして、操作の正常な完了までブロックするか、または IPCCancel() をコールして操作を取り消す必要があります。

実装では、初期化済の IPCCONNECTION 構造体からのみメッセージ送信が開始されるようにしてください。同様に、実装では、IPCDisconnect()を使用してシャットダウンされた接続に対してもメッセージが送信されないようにします。

IPCConnect() は必須のコールです。明示的に基礎となる接続 / 受信セマンティックをサポートしない実装(すなわち、データグラム実装)では、IPCConnect() の 小限の実装を提供する必要があります。このような実装の場合、IPCCONNECT 構造体は IPCPORTID構造体(コピーでない場合)に直接関連付けられます。

IPCFLAG_BULK_TRANSFERフラグと、MaxMsgSizeおよび MaxOutstandingMsgs引数は、送信を 適化するヒントとしてクライアントによって指定されます。たとえば、インラインおよびアウトラインの送信をサポートする実装では、これらのヒントを使用して、適切なタイプの送信が可能です。

DLL 情報情報情報情報IPC.DLL - 関数 8

関連項目関連項目関連項目関連項目UNIX V8 skgxpcon

8-54 Oracle9i Real Application Clusters クラスタ・インタフェース詳細

Page 185: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

IPC のルーチン - ポートおよび接続の確立をサポート

IPCDeletePort: 初期化済のポートとそれに関連付けられたポート 初期化済のポートとそれに関連付けられたポート 初期化済のポートとそれに関連付けられたポート 初期化済のポートとそれに関連付けられたポート ID をををを削除削除削除削除

概要概要概要概要IPCSTATUS IPCDeletePort (IN OUT LPORAERR Error, IN IPCCONTEXT Context, IN OUT IPCPORT Port, IN IPCEXTENSION ExtendedInfo, IN IPCFLAGS Flags);

パラメータパラメータパラメータパラメータ

ErrorORAERR構造体へのポインタです。この構造体には、失敗の理由を示すために実装により設定される各種のエラー・フィールドが含まれます。

Contextコール側のクライアントを識別し、このコールに必要な実装依存のステータス情報を保持するために使用される IPCCONTEXT構造体へのポインタです。

Port破棄される IPCPORT 構造体へのポインタです。

ExtendedInfo将来的に使用するために予約されている引数です。

Flagsこのルーチンに実装されるフラグはありません。

IPC のデータ構造体およびルーチンの定義 8-55

Page 186: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

IPCDeletePort: 初期化済のポートとそれに関連付けられたポート ID を削除

戻り値戻り値戻り値戻り値処理が正常に完了した場合は IPCSTATUS_SUCC、失敗した場合は IPCSTATUS_FAIL を返します。IPCSTATUS_FAIL が返された場合、ORAERRエラー・コードのフィールドは次のように更新されます。

IPCERROR_BADARGS無効または不正な引数が渡されたことを示します。

IPCERROR_ENOMEM内部 IPC リソースの障害を示します。

IPCERROR_OERROR実装定義のエラーが発生したことを示します。実装では、ORAERR構造体に詳細な情報を提供する必要があります。

説明説明説明説明この関数は、以前に初期化されたポートに関連付けられているすべての状態を削除し、IPCInitPort() で割り当てられているリソースを解放するためにコールされます。このポート上で未処理の非同期式の受信要求は取り消され、暗黙的に受け入れられた接続は解除されます。

このときクライアントは、ポートと、取り消した受信要求に関連付けられていたメモリーを再利用または解放できます。ポートで受信されたメッセージと、その後このポートに送信されるメッセージは、すべて破棄されます。

削除コールの後に新規のポートが作成された場合、新規のポートが以前のポートに送信されたメッセージを受信することはありません。そのため、新規のポートに異なるポート ID を割り当てるか、あるいは削除の時点で存在していた接続で新規のポートが認識されないようにする必要があります。

実装上の注意実装上の注意実装上の注意実装上の注意このルーチンは同期式であり、転送できません。

DLL 情報情報情報情報IPC.DLL - 関数 7

関連項目関連項目関連項目関連項目UNIX V8 skgxppdel

8-56 Oracle9i Real Application Clusters クラスタ・インタフェース詳細

Page 187: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

IPC のルーチン - ポートおよび接続の確立をサポート

IPCDisconnect: 事前確立された接続から切断 事前確立された接続から切断 事前確立された接続から切断 事前確立された接続から切断

概要概要概要概要IPCSTATUS IPCDisconnect (IN OUT LPORAERR Error IN IPCCONTEXT Context, IN OUT IPCCONNECTION Connection, IN IPCEXTENSION ExtendedInfo, IN IPCFLAGS Flags);

パラメータパラメータパラメータパラメータ

ErrorORAERR構造体へのポインタです。この構造体には、失敗の理由を示すために実装により設定される各種のエラー・フィールドが含まれます。

Contextコール側のクライアントを識別し、このコールに必要な実装依存のステータス情報を保持するために使用される IPCCONTEXT構造体へのポインタです。

Connection切断する接続を記述する、初期化済の IPCCONNECTION 構造体へのポインタです。

ExtendedInfo将来的に使用するために予約されている引数です。

Flagsこのルーチンに実装されるフラグはありません。

戻り値戻り値戻り値戻り値処理が正常に完了した場合は IPCSTATUS_SUCC、失敗した場合は IPCSTATUS_FAIL を返します。IPCSTATUS_FAIL が返された場合、ORAERRエラー・コードのフィールドは次のように更新されます。

IPCERROR_BADARGS無効または不正な引数が渡されたことを示します。

IPCERROR_CONNINVALIDIPCCONNECTION 構造体が無効であることを示します。

IPCERROR_ENOMEM内部 IPC リソースの障害を示します。

IPC のデータ構造体およびルーチンの定義 8-57

Page 188: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

IPCDisconnect: 事前確立された接続から切断

IPCERROR_OERROR実装定義のエラーが発生したことを示します。実装では、ORAERR構造体に詳細な情報を提供する必要があります。

説明説明説明説明この関数は、クライアントが基礎となる実装に対して、既存の接続を切断するよう指示する際に使用されます。IPCDisconnect() では、接続を切断し、関連付けられたIPCCONNECTION 構造体をパージします。切断に成功すると、IPCCONNECTION 構造体は基礎となる実装によって参照されなくなり、クライアントがそれを再利用できるようになります。

IPCCONNECTION に対して開始された未処理の操作は、IPCDisconnect() 要求の完了以前にすべてパージされる必要があります。

実装上の注意実装上の注意実装上の注意実装上の注意実装では、接続に対して発行された未処理の要求が、切断操作の完了より前にすべてパージされるよう保証する必要があります。その方法は、実装により異なります。実装では、進行中ではない要求をすべて取り消す必要があり、取消しできない要求をすべて待機する必要があります。実装で、未処理の要求が通常の完了プロセスを終えるまで単に待機することも可能ですが、これは推奨されません。

このルーチンは同期式であり、転送できません。

DLL 情報情報情報情報IPC.DLL - 関数 9

関連項目関連項目関連項目関連項目UNIX V8 skgxpdis

8-58 Oracle9i Real Application Clusters クラスタ・インタフェース詳細

Page 189: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

IPC のルーチン - ポートおよび接続の確立をサポート

IPCInitPort: ポートを初期化し、ポート ポートを初期化し、ポート ポートを初期化し、ポート ポートを初期化し、ポート ID をバインドをバインドをバインドをバインド

概要概要概要概要IPCSTATUS IPCInitPort (IN OUT LPORAERR Error, IN IPCCONTEXT Context, IN OUT IPCPORT Port, IN OUT IPCPORTID PortId, IN LONG MaxMsgSize, IN IPCEXTENSION ExtendedInfo, IN IPCFLAGS Flags);

パラメータパラメータパラメータパラメータ

ErrorORAERR構造体へのポインタです。この構造体には、失敗の理由を示すために実装により設定される各種のエラー・フィールドが含まれます。

Contextコール側のクライアントを識別し、このコールに必要な実装依存のステータス情報を保持するために使用される IPCCONTEXT構造体へのポインタです。

Port初期化される IPCPORT 構造体へのポインタです。

PortId初期化される IPCPORTID構造体へのポインタです。

MaxMsgSizeこの接続を介して送信できるメッセージの 大サイズを指定します。

ExtendedInfo将来的に使用するために予約されている引数です。

Flagsこのルーチンに実装されるフラグはありません。

IPC のデータ構造体およびルーチンの定義 8-59

Page 190: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

IPCInitPort: ポートを初期化し、ポート ID をバインド

戻り値戻り値戻り値戻り値処理が正常に完了した場合は IPCSTATUS_SUCC、失敗した場合は IPCSTATUS_FAIL を返します。IPCSTATUS_FAIL が返された場合、ORAERRエラー・コードのフィールドは次のように更新されます。

IPCERROR_BADARGS無効または不正な引数が渡されたことを示します。

IPCERROR_ENOMEM内部 IPC リソースの障害を示します。

IPCERROR_OERROR実装定義のエラーが発生したことを示します。実装では、ORAERR構造体に詳細な情報を提供する必要があります。

説明説明説明説明この関数では、新規の IPCPORT 構造体の初期化に必要な、実装固有のタスクを実行します。IPCPORT 構造体は、多くの IPC 操作を開始するために必要な、ローカルの IPC エンドポイントです。クライアントは、実装定義の IPCPORT 構造体にバックアップ・メモリーを割り当てますが、その内容にはアクセスせず、それを解釈もしません。

IPCPORT 構造体は、IPCPORTIDによって命名されます。IPCPORT を作成している以外のクライアント・プロセスでは、IPCPORTIDを使用して、ポートへの実装定義の接続を確立します。IPCPORT と、それを命名する IPCPORTIDの間の関連付けは、バインディングと呼ばれます。

実装上の注意実装上の注意実装上の注意実装上の注意IPCPORT の名前、つまり IPCPORTID情報を、Real Application Clusters 内の他のクライアントに伝播する処理は、Real Application Clusters クライアントが行います。これは通常、内部ネーミング・サービスを使用して実行されます。ほとんどの場合、実装で新規のIPCPORT を作成し、実装定義のメカニズムの必要に応じてそれに IPCPORTIDを暗黙的に選択およびバインドすることを、クライアントは許可しています。次に、クライアントは内部ネーミング・サービスに IPCPORTIDを登録し、ネーミング・サービスがそれを他のノードに公開します。実装では、暗黙的に選択されバインドされた IPCPORTIDによって、クラスタ内の新規の IPCPORT が一意に命名されるようにし、古い名前が再利用されて誤ったIPCPORT を参照することのないよう、保証する必要があります。

このルーチンは同期式であり、転送できません。

8-60 Oracle9i Real Application Clusters クラスタ・インタフェース詳細

Page 191: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

IPC のルーチン - ポートおよび接続の確立をサポート

DLL 情報情報情報情報IPC.DLL - 関数 6

関連項目関連項目関連項目関連項目UNIX V8 skgxppini()

IPC のデータ構造体およびルーチンの定義 8-61

Page 192: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

IPC のルーチン - リージョンおよびバッファの作成 / 破棄

IPC のルーチンのルーチンのルーチンのルーチン - リージョンおよびバッファの作成リージョンおよびバッファの作成リージョンおよびバッファの作成リージョンおよびバッファの作成 / 破棄破棄破棄破棄

IPCMapMemory: マップ済リージョンの作成 マップ済リージョンの作成 マップ済リージョンの作成 マップ済リージョンの作成

概要概要概要概要IPCSTATUS IPCMapMemory (IN OUT LPORAERR Error, IN IPCCONTEXT Context, IN OUT IPCREGION Region, IN OUT LPVOID *Base, IN ULONG Length, IN IPCFLAGS Flags);

パラメータパラメータパラメータパラメータ

ErrorORAERR構造体へのポインタです。この構造体には、失敗の理由を示すために実装により設定される各種のエラー・フィールドが含まれます。

Contextコール側のクライアントを識別し、このコールに必要な実装依存のステータス情報を保持するために使用される IPCCONTEXT構造体へのポインタです。

Region初期化される IPCREGION構造体へのポインタです。

Base作成するメモリー領域の開始アドレスへのポインタです。

Length作成するメモリー領域のサイズを指定します。

Flagsこのルーチンに実装されるフラグはありません。

8-62 Oracle9i Real Application Clusters クラスタ・インタフェース詳細

Page 193: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

IPC のルーチン - リージョンおよびバッファの作成 / 破棄

戻り値戻り値戻り値戻り値処理が正常に完了した場合は IPCSTATUS_SUCC、失敗した場合は IPCSTATUS_FAIL を返します。IPCSTATUS_FAIL が返された場合、ORAERRエラー・コードのフィールドは次のように更新されます。

IPCERROR_BADARGS無効または不正な引数が渡されたことを示します。

IPCERROR_ENOMEM内部 IPC リソースの障害を示します。

IPCERROR_OERROR実装定義のエラーが発生したことを示します。実装では、ORAERR構造体に詳細な情報を提供する必要があります。

説明説明説明説明この関数は、プロセスの仮想アドレス空間の連続エクステントをマップまたは登録し、リモート・コピー操作の宛先として使用できるようにするために、クライアントによってコールされます。リージョンは、プロセス・メモリーの一部であり、送られたリモート・コピーはそこで実行されます。すべてのリモート・コピーは、マップ済リージョン内に確保されたバッファに送られる必要があります。

クライアントは、*Base に非 NULL値を指定することによって、その仮想アドレス空間の特定範囲をマップします。クライアントは、*Base に非 NULL値を指定することによって、マップする連続エクステントを実装で選択させることもできます。どちらの場合でも、マップされるメモリー・エクステントは、*Base で返されるプロセス仮想アドレスで始まり、サイズは Length バイトになります。

実装で新規に作成されたリージョンを特定のコンテキストに関連付けられるように、コンテキスト・ポインタである Context が渡されます。この関連付けは、メモリー・マップされた I/O の同期を、IPCWait() 関数を介してサポートするために必要です。メモリー・マップされたすべての操作の完了は、リージョンに関連付けられたコンテキストに転送されます。単一のコンテキストに、複数のリージョンを関連付けることができます。また、単一のクライアントによってマップされたメモリー領域が、相互に重複することはありません。

初期化済の IPCREGION構造体は、明示的に IPCUnmapMemory()またはIPCDeleteContext()が実行されるまで、実装によって所有および追跡されます。クライアントは、この構造体をアクセスまたは解釈せず、その構造体に対してIPCUnmapMemory() が実行されるまで、それを再利用することはできません。

IPC のデータ構造体およびルーチンの定義 8-63

Page 194: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

IPCMapMemory: マップ済リージョンの作成

実装上の注意実装上の注意実装上の注意実装上の注意実装では、このルーチンのコール時にリモート・リージョンにアクセスすることも、あるいは IPCPrepareBuffer()操作を介して特定のバッファが確保されるまでアクセスを遅延することも可能です。個々のバッファの確保は、通常、マッピング操作より高い頻度で発生するため、実装ではマップ・コールの間に、事前に可能なかぎり多くのリモート・アクセス設定を実行することをお薦めします。事前のマッピングができない、または一度にマップできるメモリー量に制限がある実装では、リモート・アクセスによるバッファ確保を遅延し、関連するパフォーマンス・コストを負担させることができます。

IPCUnmapMemory()または IPCDeleteContext()によって明示的に、あるいはプロセスの異常終了によって暗黙的にリージョンが破棄される際には、そのリージョン内のバッファに対するすべてのアクセスが取り消されることを実装で保証する必要があります。未処理または受信中のリモート・コピーが、破棄以前のリージョンによって定義されたメモリーを修正することはできません。

このルーチンは同期式であり、転送できません。

DLL 情報情報情報情報IPC.DLL - 関数 16

関連項目関連項目関連項目関連項目UNIX V8 skgxpmmap

8-64 Oracle9i Real Application Clusters クラスタ・インタフェース詳細

Page 195: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

IPC のルーチン - リージョンおよびバッファの作成 / 破棄

IPCPrepareBuffer: メモリー・バッファを確保 メモリー・バッファを確保 メモリー・バッファを確保 メモリー・バッファを確保

概要概要概要概要IPCSTATUS IPCPrepareBuffer (IN OUT LPORAERR Error, IN IPCCONTEXT Context, IN IPCREGION Region, IN OUT IPCBUFFERID Bid, IN OUT IPCREQUEST BufRequest, IN LPVOID Base, IN ULONG Length, IN LPVOID Reserved1, IN LPVOID Reserved2, IN IPCFLAGS Flags);

パラメータパラメータパラメータパラメータ

ErrorORAERR構造体へのポインタです。この構造体には、失敗の理由を示すために実装により設定される各種のエラー・フィールドが含まれます。

Contextコール側のクライアントを識別し、このコールに必要な実装依存のステータス情報を保持するために使用される IPCCONTEXT構造体へのポインタです。

Regionバッファが確保される、初期化済の IPCREGION構造体へのポインタです。

Bid初期化される IPCBUFFERID構造体へのポインタです。

BufRequest確保されるこのバッファを記述する、実装固有のタイプおよびステータス情報を使用して初期化される IPCREQUEST 構造体へのポインタです。

Base初期化されるバッファの状態を含むポインタです。

Lengthメモリー・バッファのサイズを記述する引数です。

Reserved1将来的に使用するために予約されている引数です。

IPC のデータ構造体およびルーチンの定義 8-65

Page 196: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

IPCPrepareBuffer: メモリー・バッファを確保

Reserved2将来的に使用するために予約されている引数です。

Flagsフラグ引数は、このルーチンの操作を修正する際に使用します。定義済のフラグ引数は、次のとおりです。

IPCFLAG_QUIET確保されたこのバッファに対する更新通知を抑止するよう、クライアントが指定します。

IPCFLAG_CLIENT_KSXPこのフラグが指定されている場合、メッセージが IPCWait() で完了することを示します。

戻り値戻り値戻り値戻り値処理が正常に完了した場合は IPCSTATUS_SUCC、失敗した場合は IPCSTATUS_FAIL を返します。IPCSTATUS_FAIL が返された場合、ORAERRエラー・コードのフィールドは次のように更新されます。

IPCERROR_BADARGS無効または不正な引数が渡されたことを示します。

IPCERROR_ENOMEM内部 IPC リソースの障害を示します。

IPCERROR_OERROR実装定義のエラーが発生したことを示します。実装では、ORAERR構造体に詳細な情報を提供する必要があります。

説明説明説明説明メモリー・マップされたすべての通信は、リモート・マップされたリージョンで事前に確保されたバッファにデータをコピーすることにより発生します。これらのバッファは、IPCPrepareBuffer()ルーチンを使用して確保されます。バッファを確保する際には、このバッファを一意にアドレス指定した、グローバルで一意のバッファ識別子も作成されます。また、バッファ識別子を保持しているプロセスへのリモート・コピー・アクセスを可能にするために必要な実装の設定タスクも行い、確保されたバッファを記述する有効な要求構造体を初期化します。

Base および Length 引数では、リージョン内で確保されるバッファのエクステントとサイズを記述します。メモリー・エクステントは、Region で記述されるリージョン内にすべて常駐する必要があります。1 つのリージョン内で同時転送のために確保できるバッファの大サイズは、IPCATTR_MAXIMUM_BUFFERIDSの 大値です。リージョン内で確保された

8-66 Oracle9i Real Application Clusters クラスタ・インタフェース詳細

Page 197: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

IPC のルーチン - リージョンおよびバッファの作成 / 破棄

バッファは、相互に重複する場合があります。以後の転送が相互に干渉しないようにする処理は、クライアント・コードが行います。

Context 引数は、このバッファにコピー完了の通知を送る目的で、リージョンが作成されるコンテキストを指定するために使用されます。コンテキストは、リージョンの作成に使用されるものと同一である必要があります。リージョン内に作成されたすべてのバッファは、同じコンテキストにコピー完了の通知を送ります。

Bid で指定されるメモリーは、一意のバッファ識別子を使用して更新されます。バッファ識別子は、IPCRemoteCopy()ルーチンを使用してメモリー・コピーを送る際に、アクセス・トークンとしてリモートまたはローカルのプロセスによって使用されます。このバッファ識別子を保持しているプロセスでは、マップされたこのバッファをアドレス指定できます。

BufRequest で指定されるメモリーは、バッファに対する更新操作の追跡に必要な実装情報を使用して更新されます。クライアントは、IPCGetRequestInfo() コールとともにこの要求構造体を使用して、バッファの状態を追跡できます。この要求は、個々の操作ではなくこのバッファの状態を記述するものであり、バッファが確保されているかぎりは実装に属するということに注意してください。IPCWait() および IPCGetRequestInfo() へのコールでは、存続期間を超えてバッファに送られたコピーを識別するために、要求を効率的に再利用します。

確保されたバッファは、明示的に破棄されるまで、またはバッファを含むリージョンがマッピング解除されるまで、アクセス可能です。ローカル・プロセスでは、バッファの確保状態にかかわらず常にバッファの内容にアクセスします。リモート・プロセスでは、そのプロセスがバッファ識別子を保持している確保済のバッファに対してのみアクセスします。

実装上の注意実装上の注意実装上の注意実装上の注意確保されたバッファは、何度でも更新できます。実装では、バッファ識別子のインスタンスを保持しているプロセスからの複数同時のコピーを回避する、あるいは受信側がデータを消費する前の、単一の送信側からの連続した複数のコピーを回避する必要はありません。そのような書込みの衝突があると未定義の内容が発生しますが、それを回避する処理はクライアントが行います。

IPCFLAG_QUIETを指定しないかぎり、クライアントには、バッファで 1 回のリモート・コピーが完了するごとに、通知を受けます。更新の通知には、指定された BufRequest が使用されます。バッファによって使用される、基礎となるメモリーの場合と同様、要求も潜在的な書込み衝突の原因となります。ただし、基礎となるバッファの場合とは異なり、実装では受信された更新ごとに有効な要求を返せるように、コピー完了の詳細を確保する必要があります。IPCGetRequestInfo() ルーチンは、クライアントがバッファの状態を取得しており、バッファに対する次の操作を反映するためにバッファの状態をリセットできることを実装に通知するために使用されます。

長さが 0(ゼロ)のバッファを確保することも許可されています。長さが 0(ゼロ)のバッファへ送信した場合、通知はありますが、実際にはデータは転送されません。

このルーチンは同期式であり、転送できません。

IPC のデータ構造体およびルーチンの定義 8-67

Page 198: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

IPCPrepareBuffer: メモリー・バッファを確保

DLL 情報情報情報情報IPC.DLL - 関数 18

関連項目関連項目関連項目関連項目UNIX V8 skgxpmprp

8-68 Oracle9i Real Application Clusters クラスタ・インタフェース詳細

Page 199: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

IPC のルーチン - リージョンおよびバッファの作成 / 破棄

IPCUnmapMemory: 既存のマップ済リージョンを破棄 既存のマップ済リージョンを破棄 既存のマップ済リージョンを破棄 既存のマップ済リージョンを破棄

概要概要概要概要IPCSTATUS IPCUnmapMemory (IN OUT LPORAERR Error, IN IPCCONTEXT Context, IN OUT IPCREGION Region, IN IPCFLAGS Flags);

パラメータパラメータパラメータパラメータ

ErrorORAERR構造体へのポインタです。この構造体には、失敗の理由を示すために実装により設定される各種のエラー・フィールドが含まれます。

Contextコール側のクライアントを識別し、このコールに必要な実装依存のステータス情報を保持するために使用される IPCCONTEXT構造体へのポインタです。

Region破棄される IPCREGION構造体へのポインタです。

Flagsこのルーチンに実装されるフラグはありません。

戻り値戻り値戻り値戻り値処理が正常に完了した場合は IPCSTATUS_SUCC、失敗した場合は IPCSTATUS_FAIL を返します。IPCSTATUS_FAIL が返された場合、ORAERRエラー・コードのフィールドは次のように更新されます。

IPCERROR_BADARGS無効または不正な引数が渡されたことを示します。

IPCERROR_ENOMEM内部 IPC リソースの障害を示します。

IPCERROR_OERROR実装定義のエラーが発生したことを示します。実装では、ORAERR構造体に詳細な情報を提供する必要があります。

IPC のデータ構造体およびルーチンの定義 8-69

Page 200: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

IPCUnmapMemory: 既存のマップ済リージョンを破棄

説明説明説明説明この関数では、Regionで記述されるリージョンに以前にマップされたメモリー領域のマッピングを解除します。このリージョンで確保されたバッファはすべて、暗黙的に解放され、それらのバッファで表されていたメモリーにはリモート・アクセスできなくなります。マッピングの解除後には、このリージョンへのコピー操作はすべて失敗します。実装では、無効になったバッファ識別子を介して、これらのバッファに対する変更を試行しないようにする必要があります。

マップされていないリージョンに対して以前にマップされていたエクステントが、共有メモリー内にあった場合、マップされていないリージョンに関連付けられたバッファ識別子は、無効となります。他のプロセスに、同じ共有メモリーをマップするリージョンがある場合、そのリージョンおよびバッファ識別子は変更されません。IPCMapMemory()が選択され、プロセスのアドレス空間内のメモリー・エクステントを割り当てられている場合、このコールが返された後にはそのメモリー・エクステントの内容にはアクセスできなくなります。

リージョンのマッピングを解除すると、リージョンと、そのリージョンが作成されたコンテキストとの間の関連付けも破棄されます。マッピングの解除後には、リージョンに関する通知はそのコンテキストに転送されません。メモリー・マップされた未処理のすべての操作は、IPCSTATUS_CANCELLEDのステータスで完了します。未処理の要求はすべて、IPCUnmapMemory()が完了する前に完了する必要があります。

実装上の注意実装上の注意実装上の注意実装上の注意IPCUnmapMemory()は、あるリージョンに関連付けられているすべてのアクセス権限およびリソースを完全にクリーンアップするために使用されます。実装では、そのリージョン内のバッファに対するすべてのリモート・アクセスが取り消されることを保証する必要があります。IPCUnprepareBuffer()コールとは異なり、マッピングを解除されたリージョン内のバッファに対するリモート・コピー操作によって、以前にマップされたメモリーの状態が影響されることはありません。これらのコピーを暗黙的に削除することは可能ですが、実装ではこれらの IPCRemoteCopy()操作に対して IPCERROR_BUFIDINVALIDエラーを返す必要があります。

クライアントは、そのリージョンと、取り消された要求またはバッファ識別子に関連付けられていたメモリーを再利用または解放できます。

このルーチンは同期式であり、転送できません。

DLL 情報情報情報情報IPC.DLL - 関数 17

関連項目関連項目関連項目関連項目UNIX V8 skgxpunmap

8-70 Oracle9i Real Application Clusters クラスタ・インタフェース詳細

Page 201: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

IPC のルーチン - リージョンおよびバッファの作成 / 破棄

IPCUnprepareBuffer: 確保された既存のバッファを解放 確保された既存のバッファを解放 確保された既存のバッファを解放 確保された既存のバッファを解放

概要概要概要概要IPCSTATUS IPCUnprepareBuffer (IN OUT LPORAERR Error, IN IPCCONTEXT Context, IN IPCBUFFERID Bid, IN OUT IPCREQUEST BufRequest, IN IPCFLAGS Flags);

パラメータパラメータパラメータパラメータ

ErrorORAERR構造体へのポインタです。この構造体には、失敗の理由を示すために実装により設定される各種のエラー・フィールドが含まれます。

Contextコール側のクライアントを識別し、このコールに必要な実装依存のステータス情報を保持するために使用される IPCCONTEXT構造体へのポインタです。

Bid解放されるバッファを識別する IPCBUFFERID構造体へのポインタです。

BufRequestバッファに関連付けられた IPCREQUEST 構造体へのポインタです。

Flagsこのルーチンに実装されるフラグはありません。

戻り値戻り値戻り値戻り値処理が正常に完了した場合は IPCSTATUS_SUCC、失敗した場合は IPCSTATUS_FAIL を返します。IPCSTATUS_FAIL が返された場合、ORAERRエラー・コードのフィールドは次のように更新されます。

IPCERROR_BADARGS無効または不正な引数が渡されたことを示します。

IPCERROR_ENOMEM内部 IPC リソースの障害を示します。

IPCERROR_OERROR実装定義のエラーが発生したことを示します。実装では、ORAERR構造体に詳細な情報を提供する必要があります。

IPC のデータ構造体およびルーチンの定義 8-71

Page 202: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

IPCUnprepareBuffer: 確保された既存のバッファを解放

説明説明説明説明この関数では、マップされたリージョンに以前に確保されたバッファを解放します。この関数を使用して、任意のリモート・コピーからバッファを停止し、バッファへのリモート・アクセスを有効化および追跡する際に使用された実装固有のリソースを解放します。このコールでは、バッファ識別子も無効化され、要求構造体の制御が返されて再利用可能になります。

バッファ・メモリーの解放後でも、リージョンを作成したローカル・プロセスからはまだアクセスできます。バッファの解放では、外部プロセスからのリモート・アクセスにのみ変更があります。リージョンでマップされたメモリー・エクステントが共有メモリー内にあった場合、それらのリージョン内の各バッファが解放されても、同じ共有メモリー・セグメントをマップしたプライベート・リージョンを持つ他のプロセスからは、実際のバッファ・メモリにまだアクセスが可能です。

実装上の注意実装上の注意実装上の注意実装上の注意解放の操作は、リモートでアドレス指定可能なプロセス・バッファへのアクセスを解除するタイミングを、有効な実装に通知するヒントとして用意されています。同様に、バッファ識別子を強制的に無効化する、すなわちそのバッファ識別子を保持しているプロセスでメモリー・コピーのための使用を取り消すためにも、この操作を利用します。実装では、バッファに対する物理的なアクセスを効率的に終了させることをお薦めしますが、それは必須ではありません。実装で物理的なアクセスを効率的に終了できない場合、無効なバッファを介して実行されるすべての操作を適切に更新する必要があります。これによって、アプリケーションは開放されたバッファへの不正なコピーを検出できるようになります。

このルーチンは同期式であり、転送できません。

DLL 情報情報情報情報IPC.DLL - 関数 19

関連項目関連項目関連項目関連項目UNIX V8 skgxpmunpr

8-72 Oracle9i Real Application Clusters クラスタ・インタフェース詳細

Page 203: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

IPC のルーチン - リージョンおよびバッファの作成 / 破棄

IPCRemoteCopy:    BufferId によって指定されたリモート・バッファにによって指定されたリモート・バッファにによって指定されたリモート・バッファにによって指定されたリモート・バッファにメッセージをコピーメッセージをコピーメッセージをコピーメッセージをコピー

概要概要概要概要IPCSTATUS IPCRemoteCopy (IN OUT LPORAERR Error, IN IPCCONTEXT Context, IN IPCBUFFERID Bid, IN LONG NumberOfBuffers, IN LPIPCBUFFERDESC BufferList, IN OUT IPCREQUEST CopyRequest, IN IPCFLAGS Flags);

パラメータパラメータパラメータパラメータ

ErrorORAERR構造体へのポインタです。この構造体には、失敗の理由を示すために実装により設定される各種のエラー・フィールドが含まれます。

Contextコール側のクライアントを識別し、このコールに必要な実装依存のステータス情報を保持するために使用される IPCCONTEXT構造体へのポインタです。

Bidデータがコピーされるリモート・バッファを識別する、初期化済の IPCBUFFERID構造体へのポインタです。

NumberOfBuffersBufferList 配列に渡されるバッファ数を記述する引数です。

BufferListIPCBUFFERDESC構造体の、連続する配列の先頭へのポインタです。

CopyRequestコピー操作を記述する、実装固有のタイプおよびステータス情報を使用して初期化されるIPCREQUEST 構造体へのポインタです。

Flagsフラグ引数は、このルーチンの操作を修正する際に使用します。定義済のフラグ引数は、次のとおりです。

IPCFLAG_SYNCHRONOUS同期式またはブロック方式で操作を実行する必要があることを、クライアントが示します。

IPC のデータ構造体およびルーチンの定義 8-73

Page 204: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

IPCRemoteCopy: BufferId によって指定されたリモート・バッファにメッセージをコピー

IPCFLAG_ORDER同じフラグを有効にした他の操作に関して、厳密に順序付けられた要求を示します。

IPCFLAG_UNRELIABLE_SENDSクライアントが、このコピー操作に高信頼性の送信を必要としないことを示します。

戻り値戻り値戻り値戻り値IPCRemoteCopy()ルーチンは、次の IPCSTATUS 値を返すよう定義されています。

IPCSTATUS_SUCC非同期式の要求が正常に開始された、または同期式の要求が正常に完了したことを示します。このルーチンで IPCSTATUS_SUCCが返された場合、IPCGetRequestInfo() コールを使用して、実際に送信されたバイト数を取得できます。

IPCSTATUS_FAIL非同期式の要求を開始できなかった、または同期式の要求が失敗したことを示します。

このルーチンで IPCSTATUS_FAIL が返された場合は、IPCGetRequestInfo() コールを使用して、IPCREQUEST 構造体から追加のエラー情報を取得できます。IPCERRORコードの戻り値は、次のように定義されています。

IPCERROR_BADARGS無効または不正な引数が渡されたことを示します。

IPCERROR_BUFIDINVALIDIPCBUFFERID 構造体が失効した、または無効であることを示します。

IPCERROR_ENOMEM内部 IPC リソースの障害を示します。

IPCERROR_OERROR実装定義のエラーが発生したことを示します。実装では、ORAERR構造体に詳細な情報を提供する必要があります。

非同期式に発行された要求の場合、操作が未処理または完了したときに、関連するIPCREQUEST 構造体から、IPCSTATUS 情報を問い合せることができます。IPCGetRequestInfo() コールによって返される IPCSTATUS 値は、次のとおりです。

IPCSTATUS_CANCELLED操作が取り消されたことを示します。

IPCSTATUS_INPROGRESS操作が未処理であることを示します。

8-74 Oracle9i Real Application Clusters クラスタ・インタフェース詳細

Page 205: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

IPC のルーチン - リージョンおよびバッファの作成 / 破棄

IPCSTATUS_SUCC操作が正常に完了したことを示します。

IPCSTATUS_FAIL操作が異常終了したことを示します。

非同期式の操作によって IPCGetRequestInfo() が完了し、結果が IPCSTATUS_FAILだった場合、そのコールでは、要求が失敗した理由を記述した IPCERROR情報も取得されます。IPCERRORの戻り値は、前の項で説明してあります。

説明説明説明説明この関数は、ローカルのソース・バッファから、Bid で識別されるリモートのターゲット・バッファへデータをコピーするために、クライアントが使用します。ターゲット・バッファは、マップされたリージョンに完全に含まれる確保済のバッファである必要があります。ソース・バッファは、マップされたリージョンに含まれている必要はありませんが、含まれていれば 高のパフォーマンスを達成できます。

宛先のバッファは、Bid により完全に一意に識別されます。IPCRemoteCopy()を使用して、収集メッセージ、すなわち 1 つ以上の非連続セクションから構成されるメッセージを送信できます。ほとんどのクライアントでは、単純メッセージ送信、つまり 1 つのセクションのみを持つメッセージの送信を実行するのが一般的です。

メッセージのデータ部分は、IPCBUFFERDESC構造体の配列である BufferList引数によって記述され、そのそれぞれに、メッセージのセクションに対応する 1 つのクライアント・データ・バッファが記述されています。NumberOfBuffers 引数では、ベクター内のIPCBUFFERDESC構造体の数を定義します。実装では、NumberOfBuffers 引数がIPCATTR_MAXIMUM_MCOPY_VECTORS より大きい場合に、エラーを返すようにしてください。

IPCRemoteCopy()は、同期式または非同期式にコールできます。同期モードでは、操作が完了するか、または割り込まれるまで、実装によってブロックされる必要があります。割込みは、他のクライアントが IPCPost() を実行すると発生します。割り込まれたコールは、メッセージの完了を意味しません。基礎となる操作は未処理であり、クライアントでは、IPCWait() をコールしてメッセージ送信の完了と同期するか、または IPCCancel() をコールしてそれを強制的に失敗させる必要があります。

同期式と非同期式のどちらの場合でも、コピーが完了すると必ずソース・バッファが解放され、端末間の転送にはならないことに注意してください。IPCRemoteCopy()を使用するクライアントは、基礎となる転送の信頼性が高いことを暗黙的に前提としているため、決定的な障害を除いてどのような場合でもデータを転送します。

受信側では、データがバッファに転送され、通知がコンテキストに転送されたときに、コピー操作が完了したと判断します。データ転送の完了後には、コンテキストに通知を転送することが必須です。受信側は、転送の失敗を完全に隠ぺいされており、正常に完了したコピーのみが認識されます。

IPC のデータ構造体およびルーチンの定義 8-75

Page 206: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

IPCRemoteCopy: BufferId によって指定されたリモート・バッファにメッセージをコピー

リモート・コピーのエラーは、初期化エラー(パラメータが不正)に関連して、あるいは決定的なエラー状態が検出された際に発生します。ただし、リージョンへのリモート・コピーがハードウェア上の送信エラーとして識別された場合は、同じリージョンへの以後のコピーも、同様のエラーとなります。このようなエラー状態からリカバリするには、プロセスを再起動する必要があります。

基礎となる実装に要求が正常に発行されると、コピー要求のステータスの記述、追跡およびレポートに必要な実装依存の情報を使用して、CopyRequest構造体が初期化されます。IPCREQUEST 構造体のバックアップに使用されるメモリーは、実装が未処理、またはクライアントが完了を通知するまで、実装によって所有され、追跡されます。この間、クライアントは IPCGetStatusInfo()コールを使用して、いつでもステータスを取り出すことができます。クライアントは、IPCREQUEST構造体をアクセスまたは解釈せず、IPCWait() または IPCCancel() を介してその完了が通知されるまで、それを再利用することはできません。

実装上の注意実装上の注意実装上の注意実装上の注意信頼性モデルは、高信頼性の転送の実装に依存します。一時的な障害は、ハードウェアまたはトランスポート・スタック(あるいはその両方)によって完全に処理される必要があり、送信側または受信側のクライアントには認識されません。送信の性質によって、ターゲット・バッファの存在が保証され、バッファ消費に関連するフロー制御の必要性が確認されます。ただし、ハードウェアによるパケット損失やパケット破損など、他の一時状態は、実装によって処理される必要があります。

同じプロセスから同じリージョンへの連続したコピーは順序付けられるため、実装では完了の転送も順序付けられることを保証する必要があります。宛先として複数のリージョンが関係している場合、順序に関しては保証されません。操作に IPCFLAG_ORDERが指定されていないかぎり、同じコンテキストから単一の宛先コンテキストへのコピーおよび送信操作における順序も保証はありません。

同期モードの場合、クライアントは CopyRequest に NULLを渡すこともあります。また、リモート・メモリーのコピーはきわめて高速の操作であり、IPCRemoteCopy()へのコールは即座に完了します。実際に使用する場合、Oracle9i RDBMS では同期式のリモート・コピー操作に割込みが発生しないことを想定されています。同期モードで IPCRemoteCopy()がコールされる場合、IPCSTATUS_SUCC以外の結果は、すべてのリカバリ不可能なエラー状態であると判断されます。

クライアントによって IPCFLAG_UNRELIABLE_SENDフラグが指定されている場合、実装では、一時エラーに関連するすべての送信エラー(すなわち、パケットの破損)を隠ぺいするか、またはバッファ識別子を無効にすることができます。

8-76 Oracle9i Real Application Clusters クラスタ・インタフェース詳細

Page 207: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

IPC のルーチン - リージョンおよびバッファの作成 / 破棄

DLL 情報情報情報情報IPC.DLL - 関数 20

関連項目関連項目関連項目関連項目UNIX V8 skgxpmcpy

IPC のデータ構造体およびルーチンの定義 8-77

Page 208: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

IPCReceiveMsg: ポートからベクター・メッセージを受信

IPCReceiveMsg: ポートからベクター・メッセージを受信 ポートからベクター・メッセージを受信 ポートからベクター・メッセージを受信 ポートからベクター・メッセージを受信

概要概要概要概要IPCSTATUS IPCReceiveMsg (IN IPCCONTEXT Context, IN OUT IPCPORT Port, IN LONG NumberOfBuffers, IN LPIPCBUFFERDESC BufferList, IN ULONG Timeout, IN OUT IPCREQUEST ReceiveRequest, IN IPCEXTENSION ExtendInfo, IN IPCFLAGS Flags);

パラメータパラメータパラメータパラメータ

Contextコール側のクライアントを識別し、このコールに必要な実装依存のステータス情報を保持するために使用される IPCCONTEXT構造体へのポインタです。

Port受信メッセージを取得するために使用される、初期化済の IPCPORT 構造体へのポインタです。

NumberOfBuffersBufferList 配列に渡されるバッファ数を記述する引数です。

BufferListIPCBUFFERDESC構造体の、連続する配列の先頭へのポインタです。それぞれの構造体で、受信メッセージを保管するクライアント・メモリーのセクションが記述されています。

Timeout受信操作のタイムアウト周期を、ミリ秒単位で示します。

ReceiveRequest受信操作を記述する、実装固有のタイプおよびステータス情報を使用して初期化されるIPCREQUEST 構造体へのポインタです。

ExtendedInfo将来的に使用するために予約されている引数です。

8-78 Oracle9i Real Application Clusters クラスタ・インタフェース詳細

Page 209: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

IPC のルーチン - リージョンおよびバッファの作成 / 破棄

Flagsフラグ引数は、このルーチンの操作を修正する際に使用します。定義済のフラグ引数は、次のとおりです。

IPCFLAG_SYNCHRONOUS同期式またはブロック方式で操作を実行する必要があることを、クライアントが示します。

IPCFLAG_CLIENT_KSXPこのフラグが指定されている場合、メッセージが IPCWait() で完了することを示します。

戻り値戻り値戻り値戻り値IPCReceiveMsg() ルーチンは、次の IPCSTATUS 値を返すよう定義されています。

IPCSTATUS_SUCC非同期式の要求が正常に開始された、または同期式の要求が正常に完了したことを示します。このルーチンで IPCSTATUS_SUCC が返された場合、IPCGetRequestInfo() コールを使用して、実際に送信されたバイト数を取得できます。

IPCSTATUS_POSTEDこのルーチンに対する同期式のコールが、操作の完了より前に別のクライアント・プロセスによって割り込まれたことを示します。

IPCSTATUS_TIMEDOUTこのルーチンに対するコールは、指定した時間内に完了できませんでした。

IPCSTATUS_FAIL非同期式の要求を開始できなかった、または同期式の要求が失敗したことを示します。

このルーチンで IPCSTATUS_FAIL が返された場合は、IPCGetRequestInfo() コールを使用して、IPCREQUEST 構造体から追加のエラー情報を取得できます。IPCERRORコードのリターン・コードは、次のように定義されています。

IPCERROR_BADARGS無効または不正な引数が渡されたことを示します。

IPCERROR_ETRUNK受信されたメッセージが、指定されたメッセージより大きかったこと示します。バッファには、メッセージの 初の部分が格納され、残りのメッセージは破棄されました。IPCGetRequestInfo() を使用して、受信したバイト数を取得できます。

IPCERROR_ENOMEM内部 IPC リソースの障害を示します。

IPC のデータ構造体およびルーチンの定義 8-79

Page 210: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

IPCReceiveMsg: ポートからベクター・メッセージを受信

IPCERROR_OERROR実装定義のエラーが発生したことを示します。実装では、ORAERR構造体に詳細な情報を提供する必要があります。

非同期式に発行された要求の場合、操作が未処理または完了したときに、関連するIPCREQUEST 構造体から、IPCSTATUS 情報を問い合せることができます。IPCGetRequestInfo() コールによって返される IPCSTATUS 値は、次のとおりです。

IPCSTATUS_CANCELLED操作が取り消されたことを示します。

IPCSTATUS_INPROGRESS操作が未処理であることを示します。

IPCSTATUS_SUCC操作が正常に完了したことを示します。

IPCSTATUS_FAIL操作が異常終了したことを示します。

非同期式の操作によって IPCGetRequestInfo() が完了し、結果が IPCSTATUS_FAILだった場合、そのコールでは、要求が失敗した理由を記述した IPCERROR情報も取得されます。IPCERRORの戻り値は、前の項で説明してあります。

説明説明説明説明この関数は、通常はリモート・ノード上にある他のクライアント・プロセスから送信された受信メッセージを、クライアントが取得するために使用します。また、受信メッセージ以前の受信バッファの数を送信(すなわちキューイング)するためにも使用します。

IPCReceiveMsg() ルーチンに渡される BufferList引数では、非連続バッファの分散リスト、すなわち 1 つ以上の IPCBUFFERDESC構造体の配列が指定され、その構造体それぞれに、受信メッセージがコピーされるクライアント・アドレス空間での特定のバッファが記述されています。NumberOfBuffers引数では、ベクター内の IPCBUFFERDESC構造体の数を定義します。実装では、NumberOfBuffers引数がIPCATTR_MAXIMUM_MSG_VECTORS より大きい場合に、エラーを返すようにしてください。

IPCReceive() 操作では、キューにある次のメッセージを取り出すか、あるいは指定したIPCPORTに次の使用可能なメッセージが到着するまで待機します。

IPCReceiveMsg() は、同期式または非同期式にコールできます。同期モードでは、操作が完了するか、または割り込まれるまで、実装によってブロックされる必要があります。割込みは、Timeout引数で指定されたタイムアウト周期が終わるか、他のクライアントがIPCPost() を実行したときに発生します。割り込まれたコールは、メッセージの完了を意味しません。基礎となる操作は未処理であり、クライアントでは、IPCWait() をコールしてメッセージ送信の完了と同期するか、または IPCCancel() をコールしてそれを強制的に失敗させる必要があります。

8-80 Oracle9i Real Application Clusters クラスタ・インタフェース詳細

Page 211: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

IPC のルーチン - リージョンおよびバッファの作成 / 破棄

実装上の注意実装上の注意実装上の注意実装上の注意実装では、このルーチンの同期式および非同期式の操作をサポートすることを、強くお薦めします。効率的な非同期式のサポートは、実装のパフォーマンスとスケーラビリティに直接影響する重要な要因です。実装で、真に非同期式の操作をサポートする必要はありませんが、非同期式のコール・シーケンスをシミュレートする、すなわち指定した操作に、IPCWait() または IPCCancel() が続き、さらに IPCGetRequestInfo() が続く必要があります。

メッセージ受信操作は、受信データが到着し、クライアントに指定された受信バッファに送信されるまで、未処理と判断されます。1 つのポートに複数の受信操作がキューイングされる場合、実装では、必要な任意の実装順序で受信要求を埋め込みます。ベクター数と各ベクター・サイズは、送信側と受信側で一致する必要はありません。クライアントは、要求がFIFO の順序で完了されることを想定しません。

各送信操作は、1 回の受信操作に完全一致します。ベクター送信の場合の送信は、1 回のベクター受信または非ベクター受信に一致します。実装では、1 回の送信操作で複数回の受信操作を完了することを許可しないでください。送信側に渡されるデータのサイズが、転送された受信要求バッファのいずれかのサイズよりも大きい場合、過剰なデータは切り捨てられ、次の受信にあふれることはありません。これは、メッセージの境界を維持するために必要な処理です。

クライアントは、未処理の同期式受信によって、非同期式の要求の受信がブロックされるような方法で、同期式と非同期式の受信操作を混在することのないよう配慮する必要があります。

実装では、可能な場合にはノード間におけるメッセージの順序を維持できますが、ポートに関連付けられた接続に対するメッセージの順序を維持することが優先されます。あるクライアントが、指定の接続を介して、1 つのクライアントから送信された 2 つのメッセージを受信した場合、受信側のクライアントは、その接続上のクライアントで送信されたときと同じ順序でメッセージを取り出します。

同期モードで実装される場合、このルーチンは転送可能です。IPCPost() ルーチンによって割り込まれた操作は、未処理であり、クライアントは IPCWait() をコールして、操作の正常な完了までブロックするか、または IPCCancel() をコールして操作を取り消す必要があります。

DLL 情報情報情報情報IPC.DLL - 関数 11

関連項目関連項目関連項目関連項目UNIX V8 skgxpvrcv

IPC のデータ構造体およびルーチンの定義 8-81

Page 212: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

IPCSendMsg: 接続によって指定されたポートにベクター・メッセージを送信

IPCSendMsg: 接続によって指定されたポートにベクター・ 接続によって指定されたポートにベクター・ 接続によって指定されたポートにベクター・ 接続によって指定されたポートにベクター・メッセージを送信メッセージを送信メッセージを送信メッセージを送信

概要概要概要概要IPCSTATUS IPCSendMsg (IN IPCCONTEXT Context, IN OUT IPCCONNECTION Connection, IN LONG NumberOfBuffers, IN LPIPCBUFFERDESC BufferList, IN ULONG Timeout, IN OUT IPCREQUEST SendRequest, IN IPCEXTENSION ExtendInfo, IN IPCFLAGS Flags);

パラメータパラメータパラメータパラメータ

Connectionデータの送信先となるポートへの接続に使用される、初期化済の IPCCONNECTION 構造体へのポインタです。

NumberOfBuffersBufferList配列に渡されるバッファ数を記述する引数です。

BufferListIPCBUFFERDESC構造体の、連続する配列の先頭へのポインタです。

Timeout送信操作のタイムアウト周期を、ミリ秒単位で示します。

SendRequest送信操作を記述する、実装固有のタイプおよびステータス情報を使用して初期化されるIPCREQUEST 構造体へのポインタです。

ExtendedInfo将来的に使用するために予約されている引数です。

Flagsフラグ引数は、このルーチンの操作を修正する際に使用します。定義済のフラグ引数は、次のとおりです。

IPCFLAG_SYNCHRONOUS同期式またはブロック方式で操作を実行する必要があることを、クライアントが示します。

8-82 Oracle9i Real Application Clusters クラスタ・インタフェース詳細

Page 213: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

IPC のルーチン - リージョンおよびバッファの作成 / 破棄

IPCFLAG_ORDER同じフラグを有効にした他の操作に関して、厳密に順序付けられた要求を示します。

IPCFLAG_SENDER_GUARANTEEメッセージを送信するクライアントが、すでに応答のための受信バッファを転送したことを示します。

IPCFLAG_CLIENT_KSXPこのフラグが指定されている場合、メッセージが IPCWait() で完了することを示します。

戻り値戻り値戻り値戻り値IPCSendMsg()ルーチンは、次の IPCSTATUS 値を返すよう定義されています。

IPCSTATUS_SUCC非同期式の要求が正常に開始された、または同期式の要求が正常に完了したことを示します。このルーチンで IPCSTATUS_SUCCが返された場合、IPCGetRequestInfo() コールを使用して、実際に送信されたバイト数を取得できます。

IPCSTATUS_POSTEDこのルーチンに対する同期式のコールが、操作の完了より前に別のクライアント・プロセスによって割り込まれたことを示します。

IPCSTATUS_TIMEDOUTこのルーチンに対する同期式のコールが、指定した時間内に完了できなかったことを示します。

IPCSTATUS_FAIL非同期式の要求を開始できなかった、または同期式の要求が失敗したことを示します。

このルーチンで IPCSTATUS_FAILが返された場合は、IPCGetRequestInfo() コールを使用して、IPCREQUEST 構造体から追加のエラー情報を取得できます。IPCERRORコードの戻り値は、次のように定義されています。

IPCERROR_BADARGS無効または不正な引数が渡されたことを示します。

IPCERROR_CONNINVALIDIPCCONNECTION 構造体が失効した、または無効であることを示します。

IPCERROR_ENOMEM内部 IPC リソースの障害を示します。

IPC のデータ構造体およびルーチンの定義 8-83

Page 214: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

IPCSendMsg: 接続によって指定されたポートにベクター・メッセージを送信

IPCERROR_OERROR実装定義のエラーが発生したことを示します。実装では、ORAERR構造体に詳細な情報を提供する必要があります。

非同期式に発行された要求の場合、操作が未処理または完了したときに、関連するIPCREQUEST 構造体から、IPCSTATUS 情報を問い合せることができます。IPCGetRequestInfo() コールによって返される IPCSTATUS 値は、次のとおりです。

IPCSTATUS_CANCELLED操作が取り消されたことを示します。

IPCSTATUS_INPROGRESS操作が未処理であることを示します。

IPCSTATUS_SUCC操作が正常に完了したことを示します。

IPCSTATUS_FAIL操作が異常終了したことを示します。

非同期式の操作によって IPCGetRequestInfo() が完了し、結果が IPCSTATUS_FAILだった場合、そのコールでは、要求が失敗した理由を記述した IPCERROR情報も取得されます。IPCERRORの戻り値は、前の項で説明してあります。

説明説明説明説明この関数は、通常は他のノード上にある他のクライアント・プロセスに、クライアントがメッセージを送信するために使用します。IPCSendMsg()を使用して、収集メッセージ、すなわち 1 つ以上の非連続セクションから構成されるメッセージを送信できます。ほとんどのクライアントでは、単純メッセージ送信、つまり 1 つのセクションのみを持つメッセージの送信を実行するのが一般的です。

メッセージのデータ部分は、IPCBUFFERDESC構造体の配列である BufferList引数によって記述され、そのそれぞれに、メッセージのセクションに対応する 1 つのクライアント・データ・バッファが記述されています。NumberOfBuffers 引数では、ベクター内のIPCBUFFERDESC構造体の数を定義します。実装では、NumberOfBuffers 引数がIPCATTR_MAXIMUM_MSG_VECTORS より大きい場合に、エラーを返すようにしてください。

IPCSendMsg()は、以前に初期化された IPCCONNECTION 構造体で指定されたリモート・ポートに、メッセージを送信します。IPCSendMsg()では、初期化されたIPCCONNECTION 構造体を介さず、ポートに直接メッセージを送信することはできません。

8-84 Oracle9i Real Application Clusters クラスタ・インタフェース詳細

Page 215: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

IPC のルーチン - リージョンおよびバッファの作成 / 破棄

IPCSendMsg()は、同期式または非同期式にコールできます。同期モードでは、操作が完了するか、または割り込まれるまで、実装によってブロックされる必要があります。割込みは、Timeout引数で指定されたタイムアウト周期が終わるか、他のクライアントがIPCPost() を実行したときに発生します。割り込まれたコールは、メッセージの完了を意味しません。基礎となる操作は未処理であり、クライアントでは、IPCWait() をコールしてメッセージ送信の完了と同期するか、または IPCCancel() をコールしてそれを強制的に失敗させる必要があります。

クライアントは、IPCFLAG_SENDER_GUARANTEEフラグを使用して、送信された対応の要求に受信バッファが転送されたというヒントを、基礎となる実装に提供できます。

クライアント・プロセスは、データのないメッセージ、つまり長さ 0(ゼロ)のバッファを送信する場合があります。実装では、提供されたバッファを参照しないようにし、送信要求では転送された 0(ゼロ)バイトを返す必要があります。

正常に開始されたメッセージは、正常にまたはエラーなしで完了するという点で、メッセージの送信は信頼性が高いと定義されています。エラーとなった送信は、クライアントによって宛先ノードの障害と判断されます。

基礎となる実装に要求が正常に発行されると、送信要求のステータスの記述、追跡およびレポートに必要な実装依存の情報を使用して、SendRequest構造体が初期化されます。IPCREQUEST 構造体のバックアップに使用されるメモリーは、実装が未処理、またはクライアントが完了を通知するまで、実装によって所有され、追跡されます。この間、クライアントは IPCGetStatusInfo()コールを使用して、いつでもステータスを取り出すことができます。クライアントは、IPCREQUEST構造体をアクセスまたは解釈せず、IPCWait() または IPCCancel() を介してその完了が通知されるまで、それを再利用することはできません。

実装上の注意実装上の注意実装上の注意実装上の注意実装では、このルーチンの同期式および非同期式の操作をサポートすることを、強くお薦めします。効率的な非同期式のサポートは、実装のパフォーマンスとスケーラビリティに直接影響する重要な要因です。実装で、真に非同期式の操作をサポートする必要はありませんが、非同期式のコール・シーケンスをシミュレートする、すなわち指定した操作に、IPCWait() または IPCCancel() が続き、さらに IPCGetRequestInfo() が続く必要があります。

メッセージ送信の操作は、宛先ノードに正常に送信されるか取り消されるまで、または基礎となる実装がエラーを検出するまで、未処理と判断されます。正常な送信とは、データが宛先の IPCPORT に送信されたことを意味しますが、そのポートに関連付けられたクライアント・プロセスがそのメッセージを受信したことを意味するとはかぎりません。

メッセージ送信の操作は、信頼性が高いと定義されています。未処理の送信がエラーとなった場合は、重大な問題があることを示し、クライアントは宛先ノードが停止していると判断します。

IPC のデータ構造体およびルーチンの定義 8-85

Page 216: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

IPCSendMsg: 接続によって指定されたポートにベクター・メッセージを送信

正常なメッセージ送信は、そのメッセージが保持するデータが宛先ポートに送信された時点で完了します。高信頼性の送信は、クライアント・プロセスがメッセージを取り出したことを確認するようには定義されていません。

同期モードで実装される場合、このルーチンは転送可能です。IPCPost() ルーチンによって割り込まれた操作は、未処理であり、クライアントは IPCWait() をコールして、操作の正常な完了までブロックするか、または IPCCancel() をコールして操作を取り消す必要があります。

DLL 情報情報情報情報IPC.DLL - 関数 10

関連項目関連項目関連項目関連項目UNIX V8 skgxpvsnd

8-86 Oracle9i Real Application Clusters クラスタ・インタフェース詳細

Page 217: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

IPC のルーチン - 未処理の要求

IPC のルーチンのルーチンのルーチンのルーチン - 未処理の要求未処理の要求未処理の要求未処理の要求

IPCCancel: 未処理の非同期式要求を取消し 未処理の非同期式要求を取消し 未処理の非同期式要求を取消し 未処理の非同期式要求を取消し

概要概要概要概要IPCSTATUS IPCCancel (IN OUT LPORAERR Error, IN IPCCONTEXT Context, IN IPCREQUEST CancelRequest, IN IPCEXTENSION ExtendedInfo, IN IPCFLAGS Flags);

パラメータパラメータパラメータパラメータ

ErrorORAERR構造体へのポインタです。この構造体には、失敗の理由を示すために実装により設定される各種のエラー・フィールドが含まれます。

Contextコール側のクライアントを識別し、このコールに必要な実装依存のステータス情報を保持するために使用される IPCCONTEXT 構造体へのポインタです。

CancelRequest取り消される未処理の操作を記述する、初期化済の IPCREQUEST 構造体へのポインタです。

ExtendedInfo将来的に使用するために予約されている引数です。

Flagsこのコールに定義されているフラグはありません。

IPC のデータ構造体およびルーチンの定義 8-87

Page 218: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

IPCCancel: 未処理の非同期式要求を取消し

戻り値戻り値戻り値戻り値IPCCancel() は、次の IPCSTATUS 値を返します。

IPCSTATUS_SUCC指定された IPCREQUEST が検出され、取り消されたことを示します。要求はIPCCancel() によって完了されているため、クライアントでは IPCWait() をコールしないでください。

IPCSTATUS_DONE要求がすでに完了しているため、指定された IPCREQUEST を取り消すことができなかったことを示します。コール側では、正常にその完了と同期するように、IPCWait() をコールできます。

IPCSTATUS_BUSYすでに転送中であるため、指定された IPCREQUEST を取り消すことができなかったことを示します。クライアントでは、正常にその完了と同期するように、IPCWait() をコールする必要があります。

IPCSTATUS_NOT_FOUND要求が未処理の要求ではないため、取り消すことができないことを示します。

IPCSTATUS_FAILルーチンが失敗したことを示します。実装では、ORAERR構造体を適切に更新する必要があります。

IPCCancel() が IPCSTATUS_FAILを返した場合は、失敗を示しています。IPCSTATUS_FAIL が返された場合、ORAERRエラー・コードのフィールドは次のように更新されます。

IPCERROR_BADARGS無効または不正な引数が渡されたことを示します。

IPCERROR_ENOMEM内部 IPC リソースの障害を示します。

IPCERROR_OERROR実装定義のエラーが発生したことを示します。実装では、ORAERR構造体に詳細な情報を提供する必要があります。

8-88 Oracle9i Real Application Clusters クラスタ・インタフェース詳細

Page 219: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

IPC のルーチン - 未処理の要求

説明説明説明説明このルーチンは、CancelRequest 引数で参照される IPCREQUEST 構造体によって示されるように、クライアントが未処理の IPC 要求を取り消すために使用します。

取り消された要求は、進行中で取消しが不可能な場合を除いて、ただちに返される必要があります。取り消された要求は、正常にまたは取消しのステータスで完了します。クライアントでは、適切な完了通知を取得するために、IPCWait() を使用して同期をとる必要があります。

実装上の注意実装上の注意実装上の注意実装上の注意実装では、この関数をサポートする必要があります。

DLL 情報情報情報情報IPC.DLL - 関数 14

関連項目関連項目関連項目関連項目UNIX V8 skpxpcncl

IPC のデータ構造体およびルーチンの定義 8-89

Page 220: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

IPCGetRequestInfo: 未処理または完了した要求から、タイプおよびステータス情報を返す

IPCGetRequestInfo: 未処理または完了した要求から、タイプおよび 未処理または完了した要求から、タイプおよび 未処理または完了した要求から、タイプおよび 未処理または完了した要求から、タイプおよびステータス情報を返すステータス情報を返すステータス情報を返すステータス情報を返す

概要概要概要概要IPCSTATUS IPCGetRequestInfo (IN IPCREQUEST Request, IN OUT LPCREQUESTINFO RequestInfo, IN IPCEXTENSION ExtendedInfo, IN IPCFLAGS Flags);

パラメータパラメータパラメータパラメータ

Request情報の取得元となる、初期化済で未処理または完了した IPCREQUEST 構造体へのポインタです。

RequestInfoRequestによって記述される IPCREQUEST からの、適切なタイプおよびステータス情報を使用して更新される IPCREQUEST 構造体へのポインタです。

ExtendedInfo将来的に使用するために予約されている引数です。

Flagsこのルーチンでは、フラグを使用しません。

戻り値戻り値戻り値戻り値指定された要求が保留中または完了した操作を表すものでない場合、Request またはIPCSTATUS_INVALIDで指定された操作のステータスを返します。

説明説明説明説明IPCGetRequestInfo() ルーチンは、初期化され、未処理または完了した IPC 要求に関する、タイプおよびステータス情報をクライアントが取得するために使用します。このコールの実装では、内部 IPCREQUEST 構造体の情報を、IPCREQUESTINFO構造体の適切な格納で必要な形式にマップする必要があります。

8-90 Oracle9i Real Application Clusters クラスタ・インタフェース詳細

Page 221: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

IPC のルーチン - 未処理の要求

実装上の注意実装上の注意実装上の注意実装上の注意IPCREQUESTTYPE_MCOPYタイプの要求の場合、RequestMapRefフィールドでは、メモリー・コピーの送信に使用するバッファ識別子を指定し、RequestAddrフィールドでは、コピー操作に使用するソース・バッファを指定します。

IPCREQUESTTYPE_MUPDATEタイプの要求の場合、RequestMapRefフィールドでは、更新済のバッファが格納されるリージョンを指定し、RequestAddrフィールドでは、更新済のバッファのベース・アドレスを指定します。実装では、完了した更新に関する情報を取得した後で、確保されたバッファに関連付けられた要求の IPCSTATUS_INPROGRESSを示すようステータス・フィールドをリセットし、次のバッファ・コピーの受信に備える必要があります。

DLL 情報情報情報情報IPC.DLL - 関数 12

関連項目関連項目関連項目関連項目UNIX V8 skpxprqhi

IPC のデータ構造体およびルーチンの定義 8-91

Page 222: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

IPCPost: ブロックしているコールからクライアント・プロセスを転送

IPCPost: ブロックしているコールからクライアント・プロセスを転送 ブロックしているコールからクライアント・プロセスを転送 ブロックしているコールからクライアント・プロセスを転送 ブロックしているコールからクライアント・プロセスを転送

概要概要概要概要IPCSTATUS IPCPost (IN OUT LPORAERR Error, IN IPCCONTEXT Context, IN IPCCONTEXTID ContextId, IN IPCEXTENSION ExtendedInfo, IN IPCFLAGS Flags);

パラメータパラメータパラメータパラメータ

ErrorORAERR構造体へのポインタです。この構造体には、失敗の理由を示すために実装により設定される各種のエラー・フィールドが含まれます。

Contextコール側のクライアントを識別し、このコールに必要な実装依存のステータス情報を保持するために使用される IPCCONTEXT 構造体へのポインタです。

ContextId転送操作によって割り込まれるクライアント・プロセスを表すために使用するIPCCONTEXTID 構造体へのポインタです。

ExtendedInfo将来的に使用するために予約されている引数です。

Flagsこのルーチンでは、フラグを使用しません。

8-92 Oracle9i Real Application Clusters クラスタ・インタフェース詳細

Page 223: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

IPC のルーチン - 未処理の要求

戻り値戻り値戻り値戻り値処理が正常に完了した場合は IPCSTATUS_SUCC、失敗した場合は IPCSTATUS_FAIL を返します。IPCSTATUS_FAIL が返された場合、ORAERRエラー・コードのフィールドは次のように更新されます。

IPCERROR_BADARGS無効または不正な引数が渡されたことを示します。

IPCERROR_ENOMEM内部 IPC リソースの障害を示します。

IPCERROR_OERROR実装定義のエラーが発生したことを示します。実装では、ORAERR構造体に詳細な情報を提供する必要があります。

説明説明説明説明この関数では、クライアントによる転送、すなわち同じノード上の他のクライアントに、ブロックしているコールから割り込むことが可能です。通常、転送されたプロセスは、IPCConnect() や IPCSendMsg()などの同期式バージョンの IPCWait()コールで完了イベントを待機します。割り込まれた場合、コールは中止され、IPCSTATUS_POSTED が返されます。

転送または割り込まれたコールは、待機していた IPCREQUEST の完了を意味しません。クライアントでは通常、再度 IPCWait() をコールして適切な要求の完了と同期するか、または IPCCancel() で要求を取り消す必要があります。

Context引数によって参照される IPCCONTEXT 構造体は、コール側または転送側クライアント・プロセスのローカルのコンテキストです。ContextId 引数によって参照されるIPCCONTEXTID 構造体は、転送先のターゲット・クライアント・プロセスを特定するために使用されます。

クライアントは、同じノード上の他のクライアントへの転送が可能です。別のノード上のプロセスを転送することはできません。クライアントは、いつでもプロセスを転送できます。実装では、転送されたクライアントが、割込み発生のタイミングにかかわらず適切に動作できるよう、十分な状態をサポートする必要があります。

IPC のデータ構造体およびルーチンの定義 8-93

Page 224: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

IPCPost: ブロックしているコールからクライアント・プロセスを転送

実装上の注意実装上の注意実装上の注意実装上の注意あるクライアントが、ブロッキング・コールにはない別のクライアントを転送することは許可されています。この操作では、ターゲット・クライアントがブロッキング・コールを行い、クライアントが割り込まれるまで、そのターゲット・クライアントに影響を与えません。実装では、転送による競合、すなわちクライアントが実際にブロックされるよりわずかに早く割込みが転送される状態を回避するために、割込みを忘れないようにする必要があります。

クライアントが割込みに応答する時間に関しては、厳密な要件はありません。待機されている進行中の IPC 操作が完了した際、 小限の実装の転送を返すことは可能ですが、推奨はされません。クライアントは、他のクライアントを強制的に Real Application Clusters の内部状態と同期させるために、相互に転送する傾向があります。多くの場合、急なリカバリでは、可能なかぎり効率的に割込み機能を実装することが、きわめて有効です。

実装では、この関数をサポートする必要があります。

DLL 情報情報情報情報IPC.DLL - 関数 15

関連項目関連項目関連項目関連項目UNIX V8 skpxppost

8-94 Oracle9i Real Application Clusters クラスタ・インタフェース詳細

Page 225: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

IPC のルーチン - 未処理の要求

IPCWait: コンテキストまたは要求を待機 コンテキストまたは要求を待機 コンテキストまたは要求を待機 コンテキストまたは要求を待機

概要概要概要概要IPCSTATUS IPCWait (IN OUT LPORAERR Error, IN IPCCONTEXT Context, IN IPCENDPOINT Endpoint, IN OUT IPCREQUEST *CompletedRequest, IN LONG Timeout, IN IPCEXTENSION ExtendedInfo, IN IPCFLAGS Flags);

パラメータパラメータパラメータパラメータ

ErrorORAERR構造体へのポインタです。この構造体には、失敗の理由を示すために実装により設定される各種のエラー・フィールドが含まれます。

Contextコール側のクライアントを識別し、このコールに必要な実装依存のステータス情報を保持するために使用される IPCCONTEXT 構造体へのポインタです。

EndpointIPCENDPOINTへのポインタで、これは指定したエンドポイントに対する完了通知のみを選択するリージョンまたはポートです。

CompletedRequestその値が、待機されている進行中の操作を記述する IPCREQUEST 構造体へのポインタ位置、またはコンテキストで待機中に完了した操作を記述する IPCREQUEST 構造体へのポインタ位置です。

Timeoutミリ秒単位の待機タイムアウト周期です。

ExtendedInfo将来的に使用するために予約されている引数です。

Flagsフラグ引数は、このルーチンの操作を修正する際に使用します。定義済のフラグ引数は、次のとおりです。

IPCFLAG_NO_DEQUEUE実装が要求をピークしていること、および実装でその追跡を続行する必要があることを、クライアントが実装に通知します。

IPC のデータ構造体およびルーチンの定義 8-95

Page 226: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

IPCWait: コンテキストまたは要求を待機

IPCFLAG_CLIENT_KSXPIPCFLAG_CLIENT_KSXPのタグを付けられたメッセージのデキューを示します。

戻り値戻り値戻り値戻り値IPCWait() ルーチンは、次の IPCSTATUS 値を返すよう定義されています。

IPCSTATUS_SUCCルーチンが正常に待機したことを示します。

IPCSTATUS_POSTEDクライアントの待機が、要求の完了前に、IPCPost() を実行する他のクライアントによって割り込まれたことを示します。

IPCSTATUS_TIMEDOUTクライアントの待機が、要求の完了前に、タイムアウトによって割り込まれたことを示します。

IPCSTATUS_NOT_FOUND要求が未処理の要求ではないため、待機できないことを示します。

IPCSTATUS_FAILルーチンが失敗したことを示します。実装では、ORAERR構造体を適切に更新する必要があります。

このルーチンで IPCSTATUS_SUCCが返された場合は、基礎となる要求が完了し、関連する内部 IPCREQUEST 構造体が適切に更新されたコードを示します。IPCGetRequestInfo() コールを使用して、その要求からタイプおよびステータスの情報を取得できます。クライアントは、返された IPCREQUESTINFO構造体を調べ、完了した操作の実際のステータスを取得する必要があります。

IPCWait() 操作が IPCSTATUS_FAILで完了した場合、Error引数で記述された ORAERR構造体は、次のような失敗の原因に更新されます。

IPCERROR_BADARGS無効または不正な引数が渡されたことを示します。

IPCERROR_ENOMEM内部 IPC リソースの障害を示します。

IPCERROR_OERROR実装定義のエラーが発生したことを示します。実装では、ORAERR構造体に詳細な情報を提供する必要があります。

8-96 Oracle9i Real Application Clusters クラスタ・インタフェース詳細

Page 227: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

IPC のルーチン - 未処理の要求

説明説明説明説明この関数では、特定の IPCREQUEST の完了、または Context引数で指定されたクライアント・プロセスに関連して未処理であるすべての要求の完了を待機する Timeoutミリ秒の間、コール側クライアントをブロックします。

CompletedRequest引数が、未処理の有効な IPCREQUEST 構造体を参照している場合、IPCWait() では、その要求の完了も待機します。

CompletedRequest引数が NULL の場合は、Endpointで指定されるエンドポイントに関連して未処理であるイベントの完了を、クライアントが待機することを示します。CompletedRequestおよび Endpoint引数がともに NULL の場合は、コンテキストに関連付けられた未処理のイベントの完了を、クライアントが待機することを示します。次の完了イベントが発生すると、CompletedRequestの値は、完了した IPCREQUEST 構造体へのポインタに更新されます。

クライアントが IPCWait() をコールしたときに未処理の IPCREQUEST 構造体がない場合は、ただちに返されます。

Timeout引数が 0(ゼロ)の場合、このコールはただちに返されます。IPCWait() では、無限のタイムアウトはサポートしていません。Real Application Clusters クライアントは、通常数秒の範囲でタイムアウト値を指定します。

IPCWait() は、クライアントが完了した IPCREQUEST 構造体と同期するためのプライマリ・メソッドです。実装は、適切に発行された IPCREQUEST 構造体を所有し、基礎となる操作が完了するまで、その未処理の要求を追跡します。完了すると、実装は待機を解除し、IPCREQUEST 構造体の所有権をクライアントに返すことで、クライアントに通知します。通常、クライアントは完了した要求のステータスを取得し、その構造体を再利用します。

クライアントでは、IPCWait() または IPCCancel() をコールして、適切に実装との同期をとり、完了した要求の所有権を再取得する必要があります。これらのコールが行われるまで、IPCREQUEST 構造体によって記述される完了操作は、まだ実装によって所有されています。

IPCWait() によって、IPCSTATUS_SUCCの戻り値が返された場合は、コール自体が成功したことを示しており、IPCGetRequestInfo() コールを使用して、関連するIPCREQUEST 構造体から、適切に更新された IPCPREQUESTINFO構造体を取得できます。返されたステータスには、基礎となる操作が正常に完了したかどうかは実際には示されません。クライアントは、返された IPCREQUESTINFO構造体を調べ、基礎となる操作のステータスを取得する必要があります。

IPC のデータ構造体およびルーチンの定義 8-97

Page 228: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

IPCWait: コンテキストまたは要求を待機

実装上の注意実装上の注意実装上の注意実装上の注意基礎となる IPCREQUEST 構造体ではなく、IPCWait() コールに固有の問題またはエラーをレポートする場合、IPCWait() コールに渡された ORAERR構造体を使用します。

IPCWait() ルーチンは同期モードで動作し、常に転送可能です。IPCPost() ルーチンによって割り込まれた操作は、未処理であり、クライアントは IPCWait() をコールして、操作の正常な完了までブロックするか、または IPCCancel() をコールして操作を取り消す必要があります。

DLL 情報情報情報情報IPC.DLL - 関数 13

関連項目関連項目関連項目関連項目UNIX V8 skpxpwait

8-98 Oracle9i Real Application Clusters クラスタ・インタフェース詳細

Page 229: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

START のデータ構造体およびルーチンの

9

START のデータ構造体およびルーチンの定義のデータ構造体およびルーチンの定義のデータ構造体およびルーチンの定義のデータ構造体およびルーチンの定義

この章では、START のデータ構造体およびルーチンの定義について説明します。

� START のデータ構造体

� START のルーチン

定義 9-1

Page 230: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

START のデータ構造体

START のデータ構造体のデータ構造体のデータ構造体のデータ構造体

STARTERROR

概要概要概要概要typedef OSDERROR STARTERROR;

説明説明説明説明慣例的に、STARTUP OSD ルーチンは、ルーチンが正常に完了したか、または失敗したかをクライアントに通知するステータスを返すよう設計されます。失敗が報告された場合、ORAERRのエラー・コード・フィールドは、その失敗の原因を示す STARTERRORで、実装により更新する必要があります。定義済の STARTERRORは、次のとおりです。

STARTERROR_EINIT無効な、または初期化されていないパラメータがルーチンに渡されたことを示します。

STARTERROR_ENOMEM内部リソースの障害を示します。

STARTERROR_EINVAL無効な引数がコールに渡されたことを示します。

STARTERROR_EUNK原因不明のエラーが発生したことを示します。

実装上の注意実装上の注意実装上の注意実装上の注意STARTERROR_ENOMEMは、起動時に深刻な障害が発生したことを示し、Real Application Clusters 環境は即座にシャットダウンされます。このことは、STARTERROR_EUNKでも同様です。

実装では、新規の STARTERRORコードを定義しないようにしてください。かわりに、実装では ORAERR構造体のエラー文字列フィールドを使用して、追加のエラー情報を提供できます。

関連項目関連項目関連項目関連項目UNIX V8 slerc

9-2 Oracle9i Real Application Clusters クラスタ・インタフェース詳細

Page 231: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

START のデータ構造体

STARTSTATUS

概要概要概要概要typedef OSDSTATUS STARTSTATUS;

説明説明説明説明慣例的に、STARTUP OSD ルーチンは、ルーチンが正常に完了したかどうかを示すステータス・コードを返すよう定義されます。定義済のリターン・コードは、次のとおりです。

STARTSTATUS_SUCCルーチンが正常に完了したことを示します。

STARTSTATUS_FAILルーチンが完了に失敗したことを示します。

実装上の注意実装上の注意実装上の注意実装上の注意実装では、STARTSTATUS_FAILが返された場合は、常に ORAERRのエラー・コード・フィールドを更新する必要があります。

関連項目関連項目関連項目関連項目UNIX V8 slerc

START のデータ構造体およびルーチンの定義 9-3

Page 232: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

STARTVERSIONINFO

STARTVERSIONINFO

概要概要概要概要typedef OSDVERSIONINFO

説明説明説明説明この構造体では、Oracle クライアントと START OSD モジュールの実装との間での Real Application Clusters API のバージョン情報が示されます。このバージョン構造体は、Real Application Clusters 環境の様々なコンポーネントにおけるバイナリ互換性を検証するよう設計された、OSD バージョン・ネゴシエーション・ダイアログの一部として提供されます。

MajorVersionおよび MinorVersionフィールドは、Real Application Clusters API のリビジョン番号を示すよう定義されます。この構造体の MajorVersionの部分は、コンポーネントが依存する仕様のリビジョン・レベルを示すために使用されます。同じMajorVersion番号として設計およびコーディングされているコンポーネントには、バイナリ互換性があります。MajorVersionが一致していない場合、モジュールにはバイナリ互換性がありません。

MinorVersionは、MajorVersionレベルの仕様に対する、バイナリ互換性には影響がない改訂と拡張を指定するために使用されます。

各 Real Application Clusters API の実装レベルに関連するバージョン番号およびリリース番号は、移植キットの一部としてオラクル社が提供するヘッダーに定義されています。また、オラクル社は、リリースする各 Real Application Clusters 製品のバージョンも定義しています。

実装上の注意実装上の注意実装上の注意実装上の注意この構造体は、ベンダーの OSD コンポーネントが Real Application Clusters 環境によってロードされるときに、Real Application Clusters と OSD との間のバージョン・ネゴシエーションを実行するために使用されます。Real Application Clusters では、DLL がロードおよび初期化された直後に、自身のバージョン番号に対して OSD のバージョン番号がチェックされます。ただしこれは、DLLEntryPoint() 以外のルーチンがコールされて、互換性が確認される前に実行されます。DLL の DLLEntryPoint() ルーチンは、関連するGetVersionInfo()ルーチンより前にコールされるため、DLLEntryPoint()では、バージョンに依存しない初期化アクティビティのみが発生する必要があることに注意してください。

関連項目関連項目関連項目関連項目同様の UNIX 概念なし

9-4 Oracle9i Real Application Clusters クラスタ・インタフェース詳細

Page 233: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

START のルーチン

START のルーチンのルーチンのルーチンのルーチン

STARTGetVersionInfo:    STARTUP OSD でのバージョン情報のでのバージョン情報のでのバージョン情報のでのバージョン情報のネゴシエーションネゴシエーションネゴシエーションネゴシエーション

概要概要概要概要STARTSTATUS STARTGetVersionInfo (IN LPSTARTVERSIONIFO ClientVersionInfo

IN OUT LPSTARTVERSIONINFO STARTVersionInfo,IN OUT LPSTR VendorId,IN LONG VendorIdSize,IN OSDRESERVED Reserved)

パラメータパラメータパラメータパラメータ

ClientVersionInfoコール側 Real Application Clusters クライアントのバージョン番号およびリリース番号のリビジョン・レベルを示す、STARTGetVersionInfo ルーチンに渡される構造体です。

STARTVersionInfoSTARTモジュールのバージョン番号およびリリース番号のレベルを取得するためにクライアントによって STARTGetVersionInfo ルーチンに渡される構造体です。

VendorIdSTART OSD モジュールによってベンダー固有の実装文字列が格納される ASCII の NULL 終端文字列へのポインタです。

VendorIdSize事前に割り当てられた VendorIdバッファのサイズを示すために、クライアントによって渡される値です。

ReservedSTARTモジュールによりいまだ定義されていない構造体への予約済ポインタです。

戻り値戻り値戻り値戻り値クライアントと OSD モジュールの間でバージョン情報のネゴシエーションが正常に実行された場合、STARTSTATUS_SUCCを返します。それ以外の場合は、バージョンの不一致を示す STARTSTATUS_FAILが返される必要があります。

START のデータ構造体およびルーチンの定義 9-5

Page 234: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

STARTGetVersionInfo: STARTUP OSD でのバージョン情報のネゴシエーション

説明説明説明説明このコールは、START OSD の DLL がロードされ、DLLMain() ルーチンがコールされた直後に実行されます。Real Application Clusters クライアントは、想定される OSD 仕様のバージョン番号を示す ClientVersionInfo構造体を渡します。渡されるリリース番号は、バージョン番号により示される仕様のうちで、バイナリ互換性のあるリビジョンを示すために使用されます。OSD の実装では、互換性を確認するために渡されたバージョン番号を問い合せるとともに、不一致が検出された場合はエラーを返す必要があります。また、OSD の実装では、リリース番号も問い合せる必要がありますが、必ずしも厳密に一致させる必要はありません。この問合せは単に、バージョン番号により示される仕様の、バイナリ互換性のある拡張を示すためにのみ使用されるためです。

同様に OSD の実装では、STARTVersionInfo構造体を、依存する関連バージョン情報で更新する必要があります。Real Application Clusters クライアントでは、返された情報の整合性チェックが実行されます。このとき、バージョン番号が厳密に一致しているかどうかは検証しますが、リリース番号の不一致は無視されます。ベンダーは、OSD モジュールの実装インスタンスを追跡するために、リリース番号も使用することが推奨されます。

VendorId文字列は、ベンダーにより定義され、一意の OSD 識別子が任意に提供されます。Real Application Clusters クライアントは、通常 VendorIdフィールドをログ目的に使用するのみで、その内容は解釈しません。

実装では、この関数をサポートする必要があります。実装では、特定のバージョン番号およびリリース番号に対する移植キットでリリースされているヘッダー・ファイルをチェックする必要があります。

STARTGetVersionInfo()ルーチンは、通常 Real Application Clusters クライアントのGMS により 1 回コールされます。

DLL 情報情報情報情報START.DLL - 関数 1

関連項目関連項目関連項目関連項目同様の UNIX 概念なし

9-6 Oracle9i Real Application Clusters クラスタ・インタフェース詳細

Page 235: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

START のルーチン

STARTShutdown():    OSD 実装固有のアクションをコール実装固有のアクションをコール実装固有のアクションをコール実装固有のアクションをコール

概要概要概要概要STARTSTATUS STARTShutdown (IN OUT LPORAERROR Error,

パラメータパラメータパラメータパラメータ

ErrorORAERR構造体へのポインタです。この構造体には、ルーチンが失敗した理由を示すために、実装により設定されるエラー・コード・フィールドが含まれます。

説明説明説明説明このルーチンは、Real Application Clusters のシャットダウン・プロシージャの 後でコールされます。通常、 後の Real Application Clusters スレッドがクリーンアップを実行する前にコールされます。または、Real Application Clusters 環境によりクラスタおよび関連する共有 I/O リソースが解放された後にコールされます。これは、コールされる 後の OSDルーチンであり、これにより実装では必要なクリーンアップが実行できます。

DLL 情報情報情報情報START.DLL - 関数 3

START のデータ構造体およびルーチンの定義 9-7

Page 236: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

STARTStartup(): OSD 実装固有の起動操作をコール

STARTStartup():    OSD 実装固有の起動操作をコール実装固有の起動操作をコール実装固有の起動操作をコール実装固有の起動操作をコール

概要概要概要概要STARTSTATUS STARTStartup (IN OUT LPORAERROR Error, IN LPSTR RegistryPath)

パラメータパラメータパラメータパラメータ

ErrorORAERR構造体へのポインタです。この構造体には、ルーチンが失敗した理由を示すために、実装により設定されるエラー・コード・フィールドが含まれます。

RegistryPathデフォルトの Real Application Clusters レジストリのサブ・キーを示す文字列が示されます。これは、ローカル・コンピュータの SOFTWARE¥ORACLE¥OSDサブ・キーになります。

戻り値戻り値戻り値戻り値実装のシャットダウン操作が正常に完了した場合、STARTSTATUS_SUCCを返します。失敗した場合、STARTSTATUS_FAILを返します。STARTSTATUS_FAILが返されると、ORAERRのエラー・コードは、そのコールに失敗した理由を示すよう更新されます。

説明説明説明説明このルーチンは、Real Application Clusters の起動の初めにコールされ、通常の Real Application Clusters の起動の範囲以外にある実装固有の起動タスクを初期化します。

実装の詳細実装の詳細実装の詳細実装の詳細この STARTStartup() ルーチンは、必要な OSD 起動タスクが失敗した場合にエラーを示すよう定義される必要があります。Real Application Clusters 環境は、ブートストラップ・シーケンスを終了することで、エラーに対応します。

正常に完了した場合は、すべての必要な起動タスクが完了したことを示します。Real Application Clusters 環境で継続するブートストラップおよび操作に関して重要ではないタスクの待機を、このルーチンがブロックする必要はありません。

DLL 情報情報情報情報START.DLL - 関数 2

9-8 Oracle9i Real Application Clusters クラスタ・インタフェース詳細

Page 237: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

よくある質問とその回答(FA

A

よくある質問とその回答(よくある質問とその回答(よくある質問とその回答(よくある質問とその回答(FAQ))))

この付録では、Real Application Clusters の OSD の問題に関してよくある質問とその回答をリストして、ベンダーをサポートします。

この付録では、次の項目について説明します。

� Real Application Clusters

� CM

� IPC

Q) A-1

Page 238: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

Real Application Clusters

Real Application Clusters障害が発生したインスタンスからフェイルオーバーした後に、クライアント・プログラムは障害が発生したインスタンスからフェイルオーバーした後に、クライアント・プログラムは障害が発生したインスタンスからフェイルオーバーした後に、クライアント・プログラムは障害が発生したインスタンスからフェイルオーバーした後に、クライアント・プログラムは

元のインスタンスにフェイルバックできますか。元のインスタンスにフェイルバックできますか。元のインスタンスにフェイルバックできますか。元のインスタンスにフェイルバックできますか。

ノードまたは Oracle インスタンスがシャットダウンすると、障害が発生したクラスタ内のノードまたはインスタンスに接続していたクライアントは、他のアクティブなノードに移動できます。クライアントは、障害が発生したノードから接続解除し、アクティブなノードに再接続します。クライアントは、障害が発生したノードがアクティブになっても、自動的にはそのノードに再度移動またはフェイルバックできません。新規のクライアントはそのリカバリしたノードに接続できるため、ノード間でロード・バランシングが実行されます。次のステップでは、フェイルオーバーが発生した場合の Real Application Clusters の動作を示します。

1. 各インスタンスは、それぞれクライアントに接続しています。

2. インスタンス 1 が停止します。クライアント 1 はインスタンス 2 に再接続することで、インスタンス 2 に移動します。Real Application Clusters では、障害発生時の自動的な再接続に関して提供される機能はありません。クライアント・プログラムが、障害を検知し、動作しているノードに再接続を発行するという判断をする必要があります。

クライアント 1 クライアント 2

インスタンス 2インスタンス 1

クライアント 1 クライアント 2

インスタンス 2インスタンス 1

A-2 Oracle9i Real Application Clusters クラスタ・インタフェース詳細

Page 239: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

Real Application Clusters

3. インスタンス 1 が再度起動した場合、クライアント 1 は、インスタンス 1 に自動的に移動またはフェイルバックされません。その場合、クライアント 1 のコンテキスト・スイッチが必要とされるためです。クライアントは、インスタンス 2 から切断し、適切な同期ポイントでインスタンス 1 への新規の接続を確立するという判断ができます。新規のクライアント(クライアント 3)は、インスタンス 1 と接続できます。

CM サーバーおよびサーバーおよびサーバーおよびサーバーおよび CMAPI とととと Real Application Clusters との一般的な関係を説明してくだとの一般的な関係を説明してくだとの一般的な関係を説明してくだとの一般的な関係を説明してくだ

さい。さい。さい。さい。

OSD の標準的な実装では、外部 CM モデルをサポートします。つまり、CM は Real Application Clusters 環境と通信する別のプロセスです。CM.DLLは、Real Application Clusters と同じアドレス空間にロードされます。Real Application Clusters 環境の CM.DLLは、ローカル IPC を介して CM サーバーと通信します。

GES およびおよびおよびおよび OPQ のメッセージ通信量の特徴は何ですか。のメッセージ通信量の特徴は何ですか。のメッセージ通信量の特徴は何ですか。のメッセージ通信量の特徴は何ですか。

GES では、クラスタ内で Point-to-Point 形式により多数の小型の要求パケットが送信されます。これらの要求パケットには、ロック情報が含まれています。パケットは、Oracle インスタンス間でのデータ競合に応じて、頻繁に送信されます。パケット・サイズは 64 ~ 256 バイトです。GES では、IPC 待機時間は短いことが要求されます。

OPQ では、ファンクションとプロシージャ、およびデータ内容が複数のノードに送信されます。OPQ では、ノード間で多対 1 関係が維持されます。パケットは比較的低い頻度で送信されます。パケット・サイズは 256 バイト~ 8KB 以上です。OPQ では、IPC の帯域幅は広いことが要求されます。

クライアント 1 クライアント 2

インスタンス 2インスタンス 1

クライアント 3

CMDLL

CMSERVER

ローカル IPC(NamedPipe または Socket を使用)

よくある質問とその回答(FAQ) A-3

Page 240: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

CM

CM1 つのノード上に複数のつのノード上に複数のつのノード上に複数のつのノード上に複数の Real Application Clusters インスタンスがあり、そのインスタンスがあり、そのインスタンスがあり、そのインスタンスがあり、その 1 つに障害つに障害つに障害つに障害

が生じた場合、他にアクティブなが生じた場合、他にアクティブなが生じた場合、他にアクティブなが生じた場合、他にアクティブな Real Application Clusters インスタンスがある場合でもインスタンスがある場合でもインスタンスがある場合でもインスタンスがある場合でも

CM でそのノードをシャットダウンする必要がありますか。でそのノードをシャットダウンする必要がありますか。でそのノードをシャットダウンする必要がありますか。でそのノードをシャットダウンする必要がありますか。

必要ありません。それはお薦めしません。これは実装に依存する問題です。CM では、障害が生じた Real Application Clusters インスタンスを孤立化する判断をする必要があります。CM では、他の Real Application Clusters インスタンスを継続して管理する必要があります。ノードをシャットダウンすると、PrintServer などの他のアプリケーションも停止してしまう可能性があります。サブクラスタのオーバーラップをサポートする場合は、この機能が必要になります。

CM では、では、では、では、CMEVENT_SHUTDOWN を返した後、を返した後、を返した後、を返した後、Real Application Clusters インスタンスインスタンスインスタンスインスタンス

の終了を待機する必要がありますか。の終了を待機する必要がありますか。の終了を待機する必要がありますか。の終了を待機する必要がありますか。

CM では、対応する CMDetachコールが終了の前に同期して完了するまで待機する必要があります。CMDetachコールは、CM が終了する前に完了する必要があります。不明な状態のままでノードから接続解除しないでください。新規の CMAttachでは、接続や結合の前に以前の CMDetachが完了しているとみなされます。

クラスタ・サブセット・モデルでは、ノードマップが物理ノードの構成またはクラスタ・サブセット・モデルでは、ノードマップが物理ノードの構成またはクラスタ・サブセット・モデルでは、ノードマップが物理ノードの構成またはクラスタ・サブセット・モデルでは、ノードマップが物理ノードの構成または Real Application Clusters インスタンスの構成を表しますか。インスタンスの構成を表しますか。インスタンスの構成を表しますか。インスタンスの構成を表しますか。

ノードマップでは、複数のノード上の Real Application Clusters インスタンスの構成が表されます。

クラスタが安定した状態に移行するまでに、クラスタが安定した状態に移行するまでに、クラスタが安定した状態に移行するまでに、クラスタが安定した状態に移行するまでに、CMEVENT_SUSPEND イベントの後でイベントの後でイベントの後でイベントの後で

CMGetStatus から必要な次のイベントは何ですか。そのイベントは、から必要な次のイベントは何ですか。そのイベントは、から必要な次のイベントは何ですか。そのイベントは、から必要な次のイベントは何ですか。そのイベントは、

CMEVENT_SUSPEND またはまたはまたはまたは CMEVENT_NULL ですか。ですか。ですか。ですか。

CMGetStatusコールは、クラスタが安定した状態になるまでブロックする必要があります。そして、CMEVENT_RECONFIGまたは CMEVENT_RESUMEイベントを返す必要があります。ノードが停止するか、またはクラスタが不安定な状態になった場合、CM ではCMEVENT_SUSPENDイベントが生成され、CMEVENT_RECONFIGまたは CMEVENT_RESUMEイベントが待機されます。

ヌル文字列終端は、ヌル文字列終端は、ヌル文字列終端は、ヌル文字列終端は、CMGetNodeName 関数の関数の関数の関数の NodeNameLen でカウントする必要がありまでカウントする必要がありまでカウントする必要がありまでカウントする必要がありま

すか。すか。すか。すか。

必要ありません。それは文字列名の長さです。

A-4 Oracle9i Real Application Clusters クラスタ・インタフェース詳細

Page 241: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

CM

CMAttach に渡されるに渡されるに渡されるに渡される CMCONTEXT は、事前にゼロクリアしておく必要がありますか。こは、事前にゼロクリアしておく必要がありますか。こは、事前にゼロクリアしておく必要がありますか。こは、事前にゼロクリアしておく必要がありますか。こ

れはれはれはれは CMCONTEXT の妥当性をチェックするために必要です。の妥当性をチェックするために必要です。の妥当性をチェックするために必要です。の妥当性をチェックするために必要です。

必要ありません。CMCONTEXTは、未初期化のまま CMAttachに渡されます。CMCONTEXTの妥当性は、CMAttachでチェックする必要があります。CMAttachが有効な CMCONTEXTとともにコールされると、エラーとなります。実装では、実装依存の CMCONTEXT構造体にフラグを保持して、構造体が初期化されているかどうかをチェックできます。各 CM.DLLクライアントに対して存在可能な CMCONTEXTは 1 つのみです。ただ 1 つの CMCONTEXTがあり、これは複数のスレッド間では共有されません。CMCONTEXTの存続期間は、CMAttachが開始してから CMDetachが終了するまでです。クライアントでは、CMCONTEXTを使用して、CM と通信します。参照コードをチェックしてください。

CMNODEIDS は、サブクラスタ間で一意である必要がありますか。は、サブクラスタ間で一意である必要がありますか。は、サブクラスタ間で一意である必要がありますか。は、サブクラスタ間で一意である必要がありますか。

CMNODEIDは、クラスタ内の同じドメインで一意である必要があります。CM により、ドメイン ID および CMNODEIDが割り当てられ、保持されます。

複数の定義されたサブクラスタがある場合の、「複数の定義されたサブクラスタがある場合の、「複数の定義されたサブクラスタがある場合の、「複数の定義されたサブクラスタがある場合の、「Non-members must be isolated from the cluster and all its resources」という文は何を意味していますか」という文は何を意味していますか」という文は何を意味していますか」という文は何を意味していますか ? 特定の(複数の)クラ特定の(複数の)クラ特定の(複数の)クラ特定の(複数の)クラ

イアントのみに対して、クラスタ・リソースへのアクセスを制限する必要があるのですか。イアントのみに対して、クラスタ・リソースへのアクセスを制限する必要があるのですか。イアントのみに対して、クラスタ・リソースへのアクセスを制限する必要があるのですか。イアントのみに対して、クラスタ・リソースへのアクセスを制限する必要があるのですか。

はい。アクセス制限をすることで、認証されていないアクセスから、共有ディスクなどのクラスタ・リソースを保護します。

CMGetBootStrapInfo() のののの CMCONTEXT の目的は何ですか。また、それを初期化する理由の目的は何ですか。また、それを初期化する理由の目的は何ですか。また、それを初期化する理由の目的は何ですか。また、それを初期化する理由

は何ですか。は何ですか。は何ですか。は何ですか。

CMCONTEXTは、CMGetBootStrapInfoがコールされる前に初期化される必要があります。それは、ドメイン ID を取得するために使用されます。ドメイン ID は CMAttachのコール中に設定されます。ドメイン ID は、ブートストラップ情報を取得するために必要です。

CMNODEMAP が有効である必要があるのは、どのが有効である必要があるのは、どのが有効である必要があるのは、どのが有効である必要があるのは、どの CMGetStatus() イベントにおいてですイベントにおいてですイベントにおいてですイベントにおいてです

か。か。か。か。

CMEVENT_SUSPENDが返された場合は、CMNODEMAPは有効ではありません。それ以外のCMEVENT型では、CMNODEMAPが有効な値である必要があります。

CMGetBootStrapInfo() へのコールを介して、へのコールを介して、へのコールを介して、へのコールを介して、CMBOOTSTRAPINFO を取得する場合、待機を取得する場合、待機を取得する場合、待機を取得する場合、待機

時間の問題は何かありますか。このコールは即座に完了される必要がありますか。または、時間の問題は何かありますか。このコールは即座に完了される必要がありますか。または、時間の問題は何かありますか。このコールは即座に完了される必要がありますか。または、時間の問題は何かありますか。このコールは即座に完了される必要がありますか。または、

時間がかかっても構わないのでしょうか。時間がかかっても構わないのでしょうか。時間がかかっても構わないのでしょうか。時間がかかっても構わないのでしょうか。

構いません。待機時間の問題はありません。

よくある質問とその回答(FAQ) A-5

Page 242: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

IPC

IPC次の文は、次の文は、次の文は、次の文は、IPC でのデータ構造体の存続期間を正しく説明していますか。でのデータ構造体の存続期間を正しく説明していますか。でのデータ構造体の存続期間を正しく説明していますか。でのデータ構造体の存続期間を正しく説明していますか。

IPCCONTEXTまたは IPCCONTEXTIDは、IPCInitContextと IPCDeleteContextの間で存続します。

IPCPORTまたは IPCPORTIDは、IPCInitPortと IPCDeletePortの間で存続します。

前述の文は正確です。

IPCConnect またはまたはまたはまたは IPCAccept が失敗した場合、が失敗した場合、が失敗した場合、が失敗した場合、IPCDisconnect をコールして、をコールして、をコールして、をコールして、

IPCConnection をクリーンアップする必要がありますか。をクリーンアップする必要がありますか。をクリーンアップする必要がありますか。をクリーンアップする必要がありますか。

データ構造体のメモリーは、Oracle クライアントにより所有されます。障害が発生した場合、クライアントは IPCConnectionのメモリーを使用しません。クライアントにより、メモリーは削除されるか、または別のコールに再利用されます。IPCDisconnectを、失敗した接続でコールしないでください。IPCConnectまたは IPCAcceptが正常に動作する場合には、IPCDisconnectが必要になります。

IPCREQUEST データ構造体の存続期間を説明してください。データ構造体の存続期間を説明してください。データ構造体の存続期間を説明してください。データ構造体の存続期間を説明してください。

次のダイアグラムで、IPCREQUEST構造体の所有状態を説明します。

IPCREQUESTに対するメモリーは、クライアントにより割り当てられます。IPCREQUESTの内容は、IPC OSD により初期化フェーズ中に書き込まれます。クライアントは、メモリー割当ておよび初期化のフェーズ中 IPCREQUESTを所有します。OSD は、要求発行フェーズ中 IPCREQUESTを所有します。クライアントは、要求の処理中に複数の IPCREQUESTを操作できません。要求が完了すると、クライアントは IPCWait同期ポイントの後にIPCREQUESTを再度所有し、そのメモリーを割当て解除するか、または再利用します。

IPCREQUEST の状態の状態の状態の状態 所有者所有者所有者所有者

割当て -------------------> クライアント

初期化 -------------------> クライアント

発行 -------------------> クライアントから OSD へ移動

完了 -------------------> OSD

IPCWait -------------------> OSD からクライアントへ移動

割当て解除 -------------------> クライアント

A-6 Oracle9i Real Application Clusters クラスタ・インタフェース詳細

Page 243: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

IPC

IPCDisconnect では、未処理の要求をすべてクリーンアップする必要がありますか。では、未処理の要求をすべてクリーンアップする必要がありますか。では、未処理の要求をすべてクリーンアップする必要がありますか。では、未処理の要求をすべてクリーンアップする必要がありますか。

はい。接続における未処理の要求をすべてクリーンアップする必要があります。また、IPCDisconnectでは、接続の構造体もすべてクリーンアップする必要がありますが、対応するポートの構造体はクリーンアップする必要がありません。

IPCConnect では、逆方向の接続を確立する場合に、では、逆方向の接続を確立する場合に、では、逆方向の接続を確立する場合に、では、逆方向の接続を確立する場合に、LocalPortId でリモート・ノードと通でリモート・ノードと通でリモート・ノードと通でリモート・ノードと通

信すると考えてもよいですか。信すると考えてもよいですか。信すると考えてもよいですか。信すると考えてもよいですか。

実装では、これを無視する必要があります。これは必要ありません。実装により異なります。IPC の実装の開発者は、ポート ID で通信し、双方向転送をサポートできます。

次の次の次の次の IPCConnect の属性値の概算値を教えてください。の属性値の概算値を教えてください。の属性値の概算値を教えてください。の属性値の概算値を教えてください。

* Timeout

* MaxMsgOutstanding

* MaxMsgSize

Timeoutは、相互接続のスピードなど、その実装に影響するものが何であるかにより異なります。タイムアウトはベンダー固有です。Oracle の Timeoutは、イーサネット・ベースの実装では数秒です。ベンダーの Timeoutは、相互接続のスピードによっては数ミリ秒になります。

MsgOutstandingは、主にメッセージの生成側およびそのコンシューマ(および相互接続の待機時間)の関連スピードの関数となります。これは実装により異なります。通常、64 以内になります。

MaxMsgSizeも実装により異なります。ベンダーの相互接続に有効なサイズを選択する必要があります。通常、64K ~ 64MB になります。ハードウェアに適切な値を任意に設定してください。Real Application Clusters では、大きなメッセージを送信しませんが、必ず OPQ を考慮する必要があります。OPQ の場合、大きなメッセージは MaxMsgSizeに応じて、より小さなメッセージにセグメント化され、クラスタのノードに送信されます。

バルク送信とみなされるメッセージのサイズはどれぐらいですか。バルク送信とみなされるメッセージのサイズはどれぐらいですか。バルク送信とみなされるメッセージのサイズはどれぐらいですか。バルク送信とみなされるメッセージのサイズはどれぐらいですか。

通常、1K より大きいメッセージは、バルク送信とみなされます。これは、 適化の目的で使用されます。

IPCConnect またはまたはまたはまたは IPCAccept でのでのでのでの IPCDisconnectRequest の目的を説明してください。の目的を説明してください。の目的を説明してください。の目的を説明してください。

IPCRequestDisconnectは、クライアントにより保持されます。IPCDisconnectRequestは、正しく高信頼性のシャットダウンおよび切断操作中の障害報告のために使用されます。切断操作は、ポートのシャットダウン、接続の終了およびConnection構造体のクリーンアップという異なる操作に分割できます。クライアントは、IPCDisconnectRequestの完了に対して継続的なポーリングを実行します。切断操作の障害は、IPCDisconnectRequest構造体の適切な要素が埋められることによりクライアントに報告されます。

よくある質問とその回答(FAQ) A-7

Page 244: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

IPC

IPCSendMsg のののの IPCFLAG_SENDER_GUARANTEE フラグを説明してください。フラグを説明してください。フラグを説明してください。フラグを説明してください。

このフラグの目的は、送信側がメッセージを送信する前に、すでに受信バッファを転送したという事実を受信側に公開することです。受信側は、この情報を使用してその応答の対象とします。

長さ長さ長さ長さ 0(ゼロ)のデータが(ゼロ)のデータが(ゼロ)のデータが(ゼロ)のデータが IPCSendMsg を介して送信されるとどうなりますか。を介して送信されるとどうなりますか。を介して送信されるとどうなりますか。を介して送信されるとどうなりますか。

長さ 0(ゼロ)のメッセージは、IPC を介して通信されません。それは完全にローカルで実行されます。それは NOOP 操作です。ORDBMS では、0(ゼロ)バイトのメッセージが送られることはありません。

クライアントは、クライアントは、クライアントは、クライアントは、IPCReceiveMsg で、複数送信対単一受信モデルでは、送信側の識別情報で、複数送信対単一受信モデルでは、送信側の識別情報で、複数送信対単一受信モデルでは、送信側の識別情報で、複数送信対単一受信モデルでは、送信側の識別情報

を必要としますか。を必要としますか。を必要としますか。を必要としますか。

いいえ。クライアントでは、送信側の識別情報は考慮されません。

IPCWait では、非同期要求のみを待機するのですか。では、非同期要求のみを待機するのですか。では、非同期要求のみを待機するのですか。では、非同期要求のみを待機するのですか。

いいえ。IPCWaitでは、非同期要求およびコンテキストを待機できます。コンテキストは、そのコンテキストの ID を使用して別のスレッドにより転送できます。転送操作では、同期操作が非同期になります。この場合、IPCWaitコールは、同期のために必要となります。

IPCFLAG_NO_DEQUEUE でのピーキング動作および使用方法について説明してください。でのピーキング動作および使用方法について説明してください。でのピーキング動作および使用方法について説明してください。でのピーキング動作および使用方法について説明してください。

IPCWait との関係はどのようになりますか。との関係はどのようになりますか。との関係はどのようになりますか。との関係はどのようになりますか。

ピーク・オプションは、CompletedRequestパラメータにより示される位置が、完了したIPCREQUEST構造体のコピーに対するポインタである場合に、ワイルドカード(未処理の要求)を待機するために使用されます。この場合、IPC の実装では、要求がいまだ進行中であるかのように IPCREQUEST構造体が保持されます。ピーク・オプションの主要な目的は、イベント自体をデキューしないことにあります。OSD では、IPCWaitコールがNO_DEQUEUEフラグ付きで実行されると、その後も IPCREQUEST構造体を所有します。OSD からクライアントに IPCREQUESTの所有権を移行するには、IPCWaitへの別のコールが必要です。

IPCCancel の動作について説明してください。の動作について説明してください。の動作について説明してください。の動作について説明してください。

IPCCancelは、コンテキストの非同期要求を取り消すために使用されます。要求がパラメータとして渡されない場合、そのコンテキストに関連する未処理の要求はすべて取り消されます。要求が取り消されると、その要求はエラーとともに完了します。IPCCancelでは、要求は削除されません。要求は、クライアント側で削除できるよう IPCWaitを使用してクライアントに所有権を移行する必要があります。コンテキストが取り消されると、すべての要求が取り消されます。

IPCCancel におけるにおけるにおけるにおける IPCREQUEST のののの CancelRequest フラグの使用方法について説明してフラグの使用方法について説明してフラグの使用方法について説明してフラグの使用方法について説明して

ください。ください。ください。ください。

これは実装により異なります。実装では、取消し操作の完了を待機する他に、取り消された要求の IPCREQUEST構造体にフラグを設定することで、取り消された要求をマークできます。待機しているスレッドは、その待機状態が終了すると即座に転送されます。取り消された要求の取消し操作は延期され、後で非同期的に完了できます。

A-8 Oracle9i Real Application Clusters クラスタ・インタフェース詳細

Page 245: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

IPC

IPC API には、同期バージョンと非同期バージョンが両方とも必要ですか。には、同期バージョンと非同期バージョンが両方とも必要ですか。には、同期バージョンと非同期バージョンが両方とも必要ですか。には、同期バージョンと非同期バージョンが両方とも必要ですか。

パフォーマンス上の理由から、非同期 API を優先します。非同期 API から同期的な実装を導出できます。クライアントによっては、同期 API が要求されることもあります。

通信メッセージは、事前に処理されますか。通信メッセージは、事前に処理されますか。通信メッセージは、事前に処理されますか。通信メッセージは、事前に処理されますか。

メッセージはほとんどの場合事前に処理されます。トラフィック状態を追跡または調整できる実装では、API は受信側がメッセージで溢れることなくデータを送信するよう設計されます。送信側は、適切な遅延策に基づきデータをソートしなおす必要があります。これは、従来の TCP が実装するようなメッセージ送信メカニズム(オペレーティング・システムがメッセージのキューイングおよび送信の試行を担当するメカニズム)とは多少異なります。

多くの送信側に対して 1 つの受信側が想定される接続およびポート・プロトコルを実装する場合は、受信側のポートに複数のバッファが必要です。実装では、待機時間の短縮、コンテキスト・スイッチ、コピー防止などに対する 適化が必要です。

ノード間に存在可能な論理的接続の数はいくつですか。ノード間に存在可能な論理的接続の数はいくつですか。ノード間に存在可能な論理的接続の数はいくつですか。ノード間に存在可能な論理的接続の数はいくつですか。

論理的接続数は、数千の実装が可能です。接続の数は N × N で決定されます。これは、クラスタのサイズ、および多くの送信側に対して 1 つの受信側が想定されるモデルをサポートするかどうか(およびそのサポート方式)により異なります。これは推奨モデルです。1 つの受信側は、複数の送信側からのメッセージを受信し、応答することが可能なサービス・プロバイダとみなされます(応答は Point-to-Point 形式で行われます)。受信完了時には、すべての着信接続を共通の受信キューに集めることができるという利点があります(この場合、個々の接続で識別情報が保持される必要はありません)。受信側は、この共通キューからFIFO 順にメッセージをデキューします。

IPC での一般的なデータのサイズを教えてください。での一般的なデータのサイズを教えてください。での一般的なデータのサイズを教えてください。での一般的なデータのサイズを教えてください。

一般的な要求(ロック管理通信量)は短いメッセージで、50 ~ 200 バイトです。パラレル問合せでは、各メッセージにつき 4K ~ 8K ですが、それを超える場合もあります。

他の高速相互接続に障害が生じた場合に、イーサネットをフェイルオーバー・ソリューショ他の高速相互接続に障害が生じた場合に、イーサネットをフェイルオーバー・ソリューショ他の高速相互接続に障害が生じた場合に、イーサネットをフェイルオーバー・ソリューショ他の高速相互接続に障害が生じた場合に、イーサネットをフェイルオーバー・ソリューショ

ンとして使用できますか。ンとして使用できますか。ンとして使用できますか。ンとして使用できますか。

できます。相互接続では、それがクライアントにとって信頼性が高く、専用で、透過的であるかぎり、任意の代替フェイルオーバーまたはバックアップ・パスを採用できます。

複数のプロセスからのアクセスをサポートする必要はありますか。複数のプロセスからのアクセスをサポートする必要はありますか。複数のプロセスからのアクセスをサポートする必要はありますか。複数のプロセスからのアクセスをサポートする必要はありますか。

ありません。IPC の状態は、1 つの Real Application Clusters インスタンスのプロセスにおけるスレッドに限定されます。複数のプロセス間では共有されません。Windows NT およびWindows 2000 環境の Oracle は、多数のスレッド・クライアントを持つ 1 つのプロセスです。

よくある質問とその回答(FAQ) A-9

Page 246: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

IPC

クラスタ環境での一般的なコンテキスト、接続およびポートの数はどれくらいですか。クラスタ環境での一般的なコンテキスト、接続およびポートの数はどれくらいですか。クラスタ環境での一般的なコンテキスト、接続およびポートの数はどれくらいですか。クラスタ環境での一般的なコンテキスト、接続およびポートの数はどれくらいですか。

GES および GCS では、クラスタのノード間で推移的な接続がなされていることを前提としています。ポートおよび接続の数は、クラスタ内のノード数の要因となります。Real Application Clusters インスタンスには、数千のコンテキストがある場合もあります。接続の数は N × N で決定されます。Real Application Clusters では、OSD または他の基礎となるレイヤーが多数の接続、コンテキストおよびポートを処理できることを前提としています。

A-10 Oracle9i Real Application Clusters クラスタ・インタフェース詳細

Page 247: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

用語集用語集用語集用語集

1 対対対対 1 モデルモデルモデルモデル ((((one-to-one model))))

ノード自体がアクティブなメンバーであり、正常な状態にあると判断される。Real Application Clusters のサブセットに対するモデル。

Cluster Manager((((CM))))

クラスタクラスタクラスタクラスタ内のクラスタ・メンバーシップを表す共通ビューによって、ノードノードノードノードのメンバーシップ状態を検出および追跡する OSD のコンポーネント。CM では、プロセスプロセスプロセスプロセスの状態が監視される。グローバル・キャッシュ・サービスグローバル・キャッシュ・サービスグローバル・キャッシュ・サービスグローバル・キャッシュ・サービス(GCS)の状態を監視するバックグラウンド・プロセスである LMON プロセスでは、CM への登録および登録解除が実行される。また、CMでは、ネットワーク・カードまたはネットワーク・ケーブル障害からのリカバリも管理される。

CM

「Cluster Manager((((CM))))」を参照。

Node Monitor((((NM))))

この OSD モジュール(必須)により、Real Application Clusters 環境でクラスタのメンバーシップ状態を検出および追跡できる。実装定義のメカニズムで定義済の命名規則の調整およびマッピングも実行する。Cluster Manager により、複数のメンバー・ノードがクラスタ内のアクティブ・ノードを同じ一貫性を持って参照することが保証される。

Oracle Enterprise Manager

異機種間環境を集中的に管理するための統合ソリューションを提供するシステム管理ツール。Oracle Enterprise Manager では、グラフィカルなコンソール、管理サーバー、Oracle Intelligent Agent、リポジトリ・データベース、および様々なツールを組み合せ、Oracle 製品を管理する統合された包括的なシステム管理プラットフォームが提供される。製品ファミリは、Oracle 環境全体を効率的に管理するよう設計されたシステム管理ツールで構成される。

用語集用語集用語集用語集 -1

Page 248: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

Real Application Clusters

複数のインスタンスによる、データ・ファイルの共有データベースへのアクセスを可能にするアーキテクチャ。Real Application Clusters は、必要なクラスタ・データベースクラスタ・データベースクラスタ・データベースクラスタ・データベース・スクリプト、初期化ファイル、および Oracle Enterprise Edition と Real Application Clusters に必要とされるデータファイルを提供するソフトウェア・コンポーネントでもある。クラスタ・クラスタ・クラスタ・クラスタ・データベースデータベースデータベースデータベースへの言及が一般的である場合は、Real Application Clusters はオラクル社の製品名を指すこともある。

Real Application Clusters API

Real Application Clusters およびパラレル実行製品に必要なクラスタ対応オペレーティング・システム接続レイヤーを定義するインタフェースのセット。

Server Management((((SRVM))))

Oracle Enterprise Manager のコンポーネントの 1 つ。Real Application Clusters に統合的で包括的なシステム管理ソリューションを提供する。SRVM により、オープンなクライアント/ サーバー・アーキテクチャを介して、異機種間環境で稼働する複数のインスタンス・データベースを管理できる。

クラスタ・データベースの管理の他に、ジョブのスケジューリング、イベント管理の実行、パフォーマンスの監視およびクラスタ・データベースのチューニング用統計を取得できる。SRVM は単体製品ではない。Oracle Enterprise Manager の不可欠な一部を構成する製品である。

SRVCTL

Real Application Clusters でインスタンス管理に使用可能なサービス制御(SRVCTL)ユーティリティ。SRVCTL は、各ノードにインストールされる。SRVCTL ユーティリティにより、Oracle Enterprise Manager 用にすべてのインスタンスの情報が収集される。SRVCTLは、Oracle Intelligent Agent とノードの間で制御のシングル・ポイントとして動作する。SRVCTL と通信するために使用されるのは、ただ 1 つのノードの Oracle Intelligent Agent である。

そのノードの SRVCTL は、Java Remote Method Invocation(RMI)を介してその他の(複数の)ノードと通信する。

SRVM

「Server Management((((SRVM))))」を参照。

用語集用語集用語集用語集 -2

Page 249: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

インスタンスインスタンスインスタンスインスタンス ((((instance))))

Real Application Clusters データベースでは、クラスタクラスタクラスタクラスタ内の各ノードにデータベースを参照する実行中 Oracle ソフトウェアのインスタンスが保持される。

システムのタイプにかかわらず、データベースがデータベース・サーバーで起動されると、システム・グローバル領域システム・グローバル領域システム・グローバル領域システム・グローバル領域と呼ばれるメモリー領域が割り当てられ、1 つ以上の Oracle プロセスが開始される。この SGA と Oracle プロセスの組合せが、インスタンスと呼ばれる。インスタンスのメモリーおよびプロセスでは、関連するデータベースのデータが効率的に管理され、1 人以上のデータベース・ユーザーに提供される。ユーザーは、任意のインスタンスに接続して、Real Application Clusters データベース内の情報にアクセスできる。

オペレーティング・システム・クラスタオペレーティング・システム・クラスタオペレーティング・システム・クラスタオペレーティング・システム・クラスタ ((((Operating System cluster))))

物理的に相互接続されたプラットフォームのセット。

オペレーティング・システム固有オペレーティング・システム固有オペレーティング・システム固有オペレーティング・システム固有 ((((Operating System Dependent: OSD))))

Real Application Clusters を適切に操作するために必要な基本オペレーティング・システムまたはクラスタウェア・サービス、およびパラレル実行オプションをベンダーの環境にマッピングする複数のソフトウェア・コンポーネント。Cluster Manager((((CM))))、プロセス間通信(IPC)モジュール、起動(START)モジュールおよびシステム変更番号(SCN)モジュールで構成される。

オンライン・リカバリオンライン・リカバリオンライン・リカバリオンライン・リカバリ ((((online recovery))))

Real Application Clusters を使用することで、ユーザーは従来の単一コンピュータ特有の障害またはデータベースへのアクセス不能状態を回避できる。

獲得割込み獲得割込み獲得割込み獲得割込み ((((acquisition interrupt))))

通知に使用されるソフトウェア同期機能。ウェイク・アップ・コールとも呼ばれる。Real Application Clusters では、ブロッキング割込みブロッキング割込みブロッキング割込みブロッキング割込みも使用される。

起動(起動(起動(起動(START)モジュール)モジュール)モジュール)モジュール ((((Startup((((START))))module))))

オプションの起動 OSD の実装定義起動セマンティックの要件、およびオプションの OSD の実装固有シャットダウン・アクティビティの要件を定義する OSD モジュール(オプション)。

キャッシュ一貫性キャッシュ一貫性キャッシュ一貫性キャッシュ一貫性 ((((cache coherency))))

任意のキャッシュを介してメモリー位置を読み込むと、他の任意のキャッシュを介してその位置に書き込まれた 新のデータが返されるような、複数キャッシュ間でのデータの同期。キャッシュ整合性とも呼ばれる。

用語集用語集用語集用語集 -3

Page 250: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

キャッシュ・フュージョンキャッシュ・フュージョンキャッシュ・フュージョンキャッシュ・フュージョン ((((Cache Fusion))))

Real Application Clusters で使用される、ディスクを必要としないキャッシュ一貫性メカニズム。これにより、要求先インスタンスのメモリー・キャッシュから要求元インスタンスのメモリー・キャッシュへとブロックが直接コピーされる。キャッシュ・フュージョンとは、Oracle8i から始まったフェーズの機能グループ全体を示す用語である。

共有共有共有共有 IO ((((shared IO))))

Real Application Clusters のクラスタを定義するノード全体に実装された分散ディスク・キャッシュ。

共有グローバル領域共有グローバル領域共有グローバル領域共有グローバル領域 ((((Shared Global Area: SGA))))

インスタンスを構成するプロセスのプールが、共有メモリーを介してデータベース上での作業を調整することを保証する。インスタンスのすべてのプロセスは、同じノードに存在する。

クラスタクラスタクラスタクラスタ ((((cluster))))

高い可用性を持つハードウェアとソフトウェアの組合せ。クラスタでは、通常複数のインスタンスがそれぞれ異なるノード上で実行される。ディスクに常駐する共有データベースがアクセスされた場合は、ノード間で相互に調整が図られる。

クラスタ・データベースクラスタ・データベースクラスタ・データベースクラスタ・データベース ((((cluster database))))

Real Application Clusters 製品により構成および制御されるデータベースに対する一般的用語。

クラスタのパーティション化クラスタのパーティション化クラスタのパーティション化クラスタのパーティション化 ((((cluster partitioning))))

複数のノードが別々のアクティブ・サブセットに分かれて稼働し、相互に通信していない状態。これにより、データベースの情報ブロックが同時に変更され、データベースの整合性が破損する可能性がある。

グローバル・エンキュー・サービスグローバル・エンキュー・サービスグローバル・エンキュー・サービスグローバル・エンキュー・サービス ((((Global Enqueue Service: GES))))

グローバルに共有されるエンキューを調整するサービス。

グローバル・エンキュー・サービス・デーモングローバル・エンキュー・サービス・デーモングローバル・エンキュー・サービス・デーモングローバル・エンキュー・サービス・デーモン ((((Global Enqueue Service Daemon: LMD))))

グローバル・エンキュー・サービスグローバル・エンキュー・サービスグローバル・エンキュー・サービスグローバル・エンキュー・サービス(GES)のリソース要求を管理するリソース・エージェント・プロセス。LMD プロセスプロセスプロセスプロセスでは、グローバル・エンキュー・サービスグローバル・エンキュー・サービスグローバル・エンキュー・サービスグローバル・エンキュー・サービス(GES)が要求するデッドロック検出も処理される。リモートのリソース要求とは、別のインスタンスインスタンスインスタンスインスタンスから発行される要求である。

用語集用語集用語集用語集 -4

Page 251: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

グローバル・エンキュー・サービス・モニターグローバル・エンキュー・サービス・モニターグローバル・エンキュー・サービス・モニターグローバル・エンキュー・サービス・モニター ((((Global Enqueue Service Monitor: LMON))))

バックグラウンドでクラスタクラスタクラスタクラスタ全体を監視し、グローバル・リソースを管理するモニター。LMON では、インスタンスインスタンスインスタンスインスタンスとプロセスプロセスプロセスプロセスの期限切れ、およびグローバル・キャッシュ・サーグローバル・キャッシュ・サーグローバル・キャッシュ・サーグローバル・キャッシュ・サービスビスビスビス(GCS)とグローバル・エンキュー・サービスグローバル・エンキュー・サービスグローバル・エンキュー・サービスグローバル・エンキュー・サービス(GES)の関連するリカバリが管理される。特に、LMON ではグローバル・リソースに関連するリカバリの一部が処理される。

グローバル・キャッシュ・サービスグローバル・キャッシュ・サービスグローバル・キャッシュ・サービスグローバル・キャッシュ・サービス ((((Global Cache Service: GCS))))

キャッシュ・フュージョンキャッシュ・フュージョンキャッシュ・フュージョンキャッシュ・フュージョンを実装する制御プロセス。グローバル・ロールのブロックに対するブロック・モードが維持される。このサービスにより、インスタンス間のブロック転送が制御される。グローバル・キャッシュ・サービスでは、グローバル・キャッシュ・サービグローバル・キャッシュ・サービグローバル・キャッシュ・サービグローバル・キャッシュ・サービス・プロセスス・プロセスス・プロセスス・プロセス(LMSn)およびグローバル・エンキュー・サービス・デーモングローバル・エンキュー・サービス・デーモングローバル・エンキュー・サービス・デーモングローバル・エンキュー・サービス・デーモン(LMD)などの様々なバックグラウンド・プロセスが採用されている。

グローバル・キャッシュ・サービス・プロセスグローバル・キャッシュ・サービス・プロセスグローバル・キャッシュ・サービス・プロセスグローバル・キャッシュ・サービス・プロセス ((((Global Cache Service Processes : LMSn))))

リモートのグローバル・キャッシュ・サービスグローバル・キャッシュ・サービスグローバル・キャッシュ・サービスグローバル・キャッシュ・サービス(GCS)のメッセージを処理する複数のプロセス。現行の Real Application Clusters ソフトウェアは、 大 10 までのグローバル・キャッシュ・サービス・プロセスに対応している。LMSnの数は、クラスタクラスタクラスタクラスタ内のノード間のメッセージ通信量に応じて異なる。LMSnでは、リモート・インスタンスからグローバル・キャッシュ・サービスのリソースに発行される、獲得割込み獲得割込み獲得割込み獲得割込み要求およびブロッキング割込みブロッキング割込みブロッキング割込みブロッキング割込み要求が処理される。クロス・インスタンスの一貫性読取り要求に対しては、LMSnでブロックの一貫性読取りバージョンが作成され、要求元のインスタンスに送信される。LMSnでは、リモート・インスタンスへのメッセージ・フローも制御される。

グローバル・キャッシュ要素グローバル・キャッシュ要素グローバル・キャッシュ要素グローバル・キャッシュ要素 ((((global cache element))))

キャッシュ・フュージョンキャッシュ・フュージョンキャッシュ・フュージョンキャッシュ・フュージョンのリソースを表す Oracle 固有のデータ構造体。グローバル・キャッシュ要素とグローバル・キャッシュ・サービスグローバル・キャッシュ・サービスグローバル・キャッシュ・サービスグローバル・キャッシュ・サービス(GCS)のキャッシュ・フュージョンのリソースとの間には、1 対 1 の対応関係がある。

グローバル・サービス・デーモングローバル・サービス・デーモングローバル・サービス・デーモングローバル・サービス・デーモン ((((Global Services Daemon: GSD))))

起動やシャットダウンなどの管理ジョブ・タスクを実行する SRVCTL からの要求を受信するコンポーネント。コマンドは各ノード上でローカルに実行され、結果は SRVCTL に返される。デーモンは、ノード上にデフォルトでインストールされる。削除してはならない。

グローバル・リソース・ディレクトリグローバル・リソース・ディレクトリグローバル・リソース・ディレクトリグローバル・リソース・ディレクトリ ((((Global Resource Directory))))

グローバル・リソースに関連するデータ構造体。クラスタクラスタクラスタクラスタ内のすべてのインスタンスに分配される。

サブセットサブセットサブセットサブセット ((((subset))))

Oracle インスタンスは、複数のクラスタ・メンバーがサブセット上で稼働し、1 対 1 モデルのように各ノードの参加ポリシーを制御する必要はない。

用語集用語集用語集用語集 -5

Page 252: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

システム・グローバル領域システム・グローバル領域システム・グローバル領域システム・グローバル領域 ((((System Global Area: SGA))))

1 つの Oracle データベースのインスタンスインスタンスインスタンスインスタンスのデータおよび制御情報を格納する共有メモリー構造体のグループ。Oracle インスタンスは、SGA および複数の Oracle プロセスで構成される。Oracle データベースでは、インスタンスを起動すると常に SGA 用のメモリーが自動的に割り当てられ、インスタンスをシャットダウンすると、そのメモリーはオペレーティング・システムに回収される。1 つのインスタンスは、SGA を 1 つのみ保持する。

システム識別子システム識別子システム識別子システム識別子 ((((system identifier: SID))))

Oracle システム識別子(SID)により、実行中の Oracle ソフトウェアの特定のインスタンスインスタンスインスタンスインスタンスが識別される。Real Application Clusters データベースでは、クラスタクラスタクラスタクラスタ内の各ノードノードノードノードが、データベースを参照するインスタンスを保持する。

データベース名は、INITDB_NAME.ORAファイルの DB_NAMEにより指定され、一意のススススレッドレッドレッドレッド ID により各ノードの SID が作成される。スレッド ID は、クラスタ内の 初のインスタンスを 1 として始まり、インスタンスが増えるに従い 1 ずつ増加していく。

システム変更番号システム変更番号システム変更番号システム変更番号((((SCN))))モジュールモジュールモジュールモジュール ((((System Change Number((((SCN))))module))))

外部分散クロックの OSD 実装により、Oracle SCN メカニズムをサポートするために提供される要件オプションを定義する OSD モジュール(オプション)。

スケーラビリティスケーラビリティスケーラビリティスケーラビリティ ((((scalability))))

クラスタ化されたデータベース・テクノロジを介して、単一ノードでのメモリー制限を克服することで、単一システムでより大規模なデータベースのサポートを実現できる。

スプリットブレイン・シンドロームスプリットブレイン・シンドロームスプリットブレイン・シンドロームスプリットブレイン・シンドローム ((((split-brain syndrome))))

2 つのノードが相互に確認することなく同時に操作を実行し、データの調整に失敗すること。データベースの整合性が破損する可能性がある。

スレッドスレッドスレッドスレッド ((((thread))))

各 Oracle インスタンスインスタンスインスタンスインスタンスは、独自のオンライン REDO ログ・グループを保持する。これらのグループは、オンライン REDO のスレッドと呼ばれる。Real Application Clusters 以外の環境では、各データベースはアクセスするインスタンスに属するただ 1 つのスレッドのみを保持する。Real Application Clusters 環境では、各インスタンスは分割されたスレッドを保持するため、独自のオンライン REDO ログを保持する。各スレッドは、独自の現行ログ・メンバーを保持する。

ドメインドメインドメインドメイン ID ((((domain ID))))

ドメイン ID は、複数のインスタンスが各ノードで稼働している場合に、サブクラスタに対する一意のネームスペースを管理する。また、他のノード上の関連するインスタンスと通信する。

用語集用語集用語集用語集 -6

Page 253: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

ノードノードノードノード ((((node))))

単一のオペレーティング・システム・プラットホームにおける、SMP またはユニプロセッサのクラスタ・メンバー。インスタンスが常駐する Windows NT Server。

ノードノードノードノード ID ((((node ID))))

インスタンスの存続期間中における、ノードの一意の識別子。(「ノード構成」も参照)

ノード構成ノード構成ノード構成ノード構成 ((((node configuration))))

シングル・インスタンスに対する、クラスタの存続期間を通じて一貫性が保持される一意の識別番号。(「ノード ID」も参照)

ノードの削除ノードの削除ノードの削除ノードの削除 ((((node delete))))

インスタンスに障害が発生した場合に、またはインスタンスの完了時にノードがクラスタから分離する操作。

ノードの参加ノードの参加ノードの参加ノードの参加 ((((node join))))

インスタンスの開始時に、またはオンラインでの動的アップグレード中にノードがクラスタに参加する操作。

ハートビート、ハートビート・プロトコルハートビート、ハートビート・プロトコルハートビート、ハートビート・プロトコルハートビート、ハートビート・プロトコル ((((heartbeat、、、、heartbeat protocol))))

CM では、Node Monitor のポーリングが継続的および定期的に実行される。Node Monitorでは、この NMGetStatus()コールを 1 秒間に 低 1 回受信する。これは、何らかの障害が発生するか、または NMDetach()がインスタンスの完了時にコールされるまで続けられる。

パラレル実行パラレル実行パラレル実行パラレル実行 ((((parallel execution))))

Oracle インスタンスがスループットを 大化するために、解析された SQL 文を使用可能なノードに対して副分割および分配する方法。

パラレル操作パラレル操作パラレル操作パラレル操作 ((((parallel operation))))

Real Application Clusters の使用を介して、異なる CPU ノードにワークロードを分配することで、複数の Oracle インスタンスが同時に存在することができる。

プロセスプロセスプロセスプロセス ((((process))))

Oracle インスタンスインスタンスインスタンスインスタンスには、ユーザー・プロセスおよび Oracle プロセスという 2 つのプロセス・タイプがある。

� ユーザー・プロセスでは、アプリケーション・プログラム(Oracle Forms アプリケーションなど)または Oracle のツール(リスナーなど)のコードが実行される。

� Oracle プロセスは、Oracle サーバーのメンテナンス作業をする、ユーザー・プロセスおよびバックグラウンド・プロセスのための作業をするサーバー・プロセスである。

用語集用語集用語集用語集 -7

Page 254: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

プロセス間通信(プロセス間通信(プロセス間通信(プロセス間通信(IPC)モジュール)モジュール)モジュール)モジュール ((((Interprocess Communication((((IPC))))module))))

ノード間のプロセス間通信。この OSD モジュール(必須)では、インスタンス間で高信頼性のメッセージを送信するために、Real Application Clusters 環境に必要な複数のプロトコルおよびインタフェースが定義される。これは、非同期で一般的なメッセージング・モデルである。

プロセス・グローバル領域プロセス・グローバル領域プロセス・グローバル領域プロセス・グローバル領域 ((((Process Global Area: PGA))))

RDBMS により割り当てられた各プロセス用のメモリー領域。

ブロッキング割込みブロッキング割込みブロッキング割込みブロッキング割込み ((((blocking interrupt))))

別のプロセスも非互換モードでアクセスする必要のあるリソースへのアクセス権を保持するプロセスを通知するソフトウェア同期機能。「獲得割込み獲得割込み獲得割込み獲得割込み」も参照。

平均修復時間平均修復時間平均修復時間平均修復時間 ((((mean time to repair: MTTR))))

システム・リカバリのスピードを追跡し、システムの可用性および信頼性を示すために使用される平均化の方法。

平均障害間隔時間平均障害間隔時間平均障害間隔時間平均障害間隔時間 ((((mean time between failures: MTBF))))

システム障害の頻度を示すために使用される平均化の方法。

用語集用語集用語集用語集 -8

Page 255: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

索引索引索引索引

CCluster Manager「CM」を参照

CMATTRIBUTE データ構造体,7-2CMCALLBACKCTX データ構造体,7-4CMCALLBACKS データ構造体,7-3CMCONTEXT データ構造体,7-21CMDATATYPE データ構造体,7-5CMDeleteContext ルーチン,7-30CMERROR データ構造体,7-6CMEXTENSION データ構造体,7-8CMFLAGS データ構造体,7-13CMGetAttributeValue ルーチン,7-24CMGetDataTypeSize ルーチン,7-26CMGetMemberPrivateInfo ルーチン,7-54CMGetMemberPublicInfo ルーチン,7-44CMGetNodeList ルーチン,7-40CMGetNodeName ルーチン,7-38CMGetNodeNum ルーチン,7-36CMGetVersionInfo ルーチン,7-28CMGroupDeregister ルーチン,7-58CMGROUPEVENT データ構造体,7-9CMGroupExit ルーチン,7-49CMGroupGetList ルーチン,7-42CMGroupGetStatus ルーチン,7-51CMGroupJoin ルーチン,7-46CMGROUPMAP データ構造体,7-14CMGROUPNAME データ構造体,7-15CMGroupRegister ルーチン,7-56CMInitContext ルーチン,7-32CMMEMBERNUM データ構造体,7-16CMNODENAME データ構造体,7-17CMNODENUM データ構造体,7-18CMPHANDLE データ構造体,7-22

CMSHANDLE データ構造体,7-23CMSTATUS データ構造体,7-19CMTrace ルーチン,7-34CMVERSIONINFO データ構造体,7-20CM モジュール

GCS との相互作用,2-4アクティブ・メンバー,3-5概要,3-2機能,3-5グループ・メンバーシップの変更,3-6グループ・メンバーの管理,3-4実装,3-1 ~ 3-8スレーブ・メンバー,3-4セキュリティ,3-7説明,2-4データ構造体,7-2 ~ 7-23ノードの監視,2-5,3-5パーティション化の回避,3-6プロセス・グループ,3-3プロセス・グループの監視,3-5プロセス・グループの管理,2-5有効なインスタンスの判断,2-5有効なグループの判断,2-5ルーチン,2-7,7-24 ~ 7-59ルーチン,必要なリスト,2-7

DDLL とレジストリのロード,2-12DLL の実行コンテキスト,2-11DLL のルーチンへのバインド,2-14

索引索引索引索引 -1

Page 256: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

GGCS

CM との相互作用,2-4IPC との相互作用,4-7START との相互作用,5-2

GESSTART との相互作用,5-2

II/O の制限,2-6,3-7IPCATTRIBUTE データ構造体,8-2IPCBUFFERDESC データ構造体,8-4IPCBUFFERID データ構造体,8-23IPCCALLBACKCTX データ構造体,8-7IPCCALLBACK データ構造体,8-6IPCCancel ルーチン,8-87IPCCONNECTION データ構造体,8-24IPCConnect ルーチン,8-50IPCCONTEXTID データ構造体,8-26IPCCONTEXT データ構造体,8-25IPCDATATYPE データ構造体,8-8IPCDeleteContext ルーチン,8-42IPCInitContext ルーチン,8-44,8-47IPCDeletePort ルーチン,8-55IPCDisconnect ルーチン,8-57IPC.DLL,4-11IPCERROR データ構造体,8-10IPCFLAGS データ構造体,8-14IPCGetAttributeValue ルーチン,8-36IPCGetDataTypeSize ルーチン,8-38IPCGetRequestInfo ルーチン,8-90IPCGetVersionInfo ルーチン,8-40IPCInitPort ルーチン,8-59IPCMapMemory ルーチン,8-62IPCPORTID データ構造体,8-29IPCPORT データ構造体,8-27,8-30IPCPost ルーチン,8-92IPCPrepareBuffer ルーチン,8-65IPCReceiveMsg ルーチン,8-78IPCRemoteCopy ルーチン,8-73IPCREQUESTINFO データ構造体,8-17IPCREQUESTTYPE データ構造体,8-35IPCREQUEST データ構造体,8-33IPCSendMsg ルーチン,8-82IPCSTATUS データ構造体,8-20

IPCUnmapMemory ルーチン,8-69IPCUnprepareBuffer,8-71IPCVERSIONINFO データ構造体,8-22IPCWait ルーチン,8-95IPC モジュール

GCS との相互作用,4-7IPC.DLL,4-11Point-to-Point メッセージ送信,4-3エラー・モデル,4-5オプションの機能,4-6オペレーティング・システムのレイヤリング,4-6概要,4-2共有メモリー・セグメント,4-2クライアント,4-6クライアントへの割込みコール,4-9実装,4-1 ~ 4-12信頼性,4-8設計,4-2説明,2-6データ構造体,4-10,8-2 ~ 8-35パラレル実行,4-7プロセス・クリーンアップ,4-9メッセージの位置合せ,4-9メッセージの境界,4-8メッセージの公正,4-9メッセージの順序,4-8メモリー・マップ転送,4-4メモリー割当て,4-4ユーザー・バッファ,4-4要件,4-7ルーチン,8-36 ~ 8-98ルーチンの説明,4-11論理接続モデル,4-5

OOracle Real Application Clusters

起動タスク,5-3ORAERR データ構造体,6-4OraFenceDrv.sys ドライバ,3-7OSD

Cluster Manager(CM)モジュールの説明,2-4DLL とレジストリのロード,2-12DLL の実行コンテキスト,2-11DLL のルーチンへのバインド,2-14OSD モジュールのサイズ,2-11一般規則,2-11

索引索引索引索引 -2

Page 257: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

概要,2-2規則,2-11起動(START)モジュールの説明,2-6起動シーケンス,5-3コンポーネント DLL 変換,2-11実装,2-10属性,2-11バージョン・ネゴシエーション,2-14複数の OSD モジュール・インスタンス,2-2プロセス間通信(IPC)モジュールの説明,2-6ヘッダー,2-15メモリーの割当て,2-11モジュールの説明,2-4

OSDERROR データ構造体,6-2OSDSTATUS データ構造体,6-3OSD モジュールのサイズ,2-11

PPoint-to-Point メッセージ送信,4-3

RReal Application Clusters の起動の制御,5-4

SSTARTERROR データ構造体,9-2STARTGetVersionInfo ルーチン,9-5STARTShutdown() ルーチン,9-7STARTStartup() ルーチン,9-8STARTSTATUS データ構造体,9-3STARTVERSIONINFO データ構造体,9-4START モジュール,5-4

GCS との相互作用,5-2GES との相互作用,5-2概要,5-2実装,5-1 ~ 5-4詳細,5-3説明,2-6タスク,5-3データ構造体,5-4,9-2 ~ 9-4ルーチン,5-4,9-5 ~ 9-8ルーチン,必要なリスト,2-9ルーチンのコール順,5-3ルーチンの説明,5-4

いいいい移植に関する注意事項,2-2インスタンス起動,5-2

おおおおオペレーティング・システム固有のレイヤー「OSD」を参照

オペレーティング・システムのレイヤリング,4-6

きききき起動「START」を参照

起動シーケンス,5-2起動タスク,5-3機能,新しい,xviii共有メモリー・セグメント,4-2

くくくくクラスタ・メンバー

アクティブ,3-5非アクティブ,3-5

グローバル・エンキュー・サービス(GES),4-7

ささささ大メッセージ・サイズ,2-12

しししし受信バッファ,4-9序数,2-10

すすすすスレーブ・メンバー,3-4

せせせせ接続ハンドラ,4-9

てててて転送,4-9

索引索引索引索引 -3

Page 258: Oracle9i Real Application Clusters...Oracle9i Real Application Clustersクラスタ・インタフェース詳細, リリース1(9.0.1) 部品番号: J04648-01 原本名:Oracle9i

なななな内部の OSD モジュール割当て,2-12内部の関数表,2-14

ははははバージョン・ネゴシエーション,2-14バージョン番号の情報,2-14バイナリ互換性,2-15バイナリ・バージョン・レベル,2-14パラレル実行

IPC との相互作用,4-7汎用 OSD コール,4-11

ふふふふブートストラップ処理,5-2フェイルハードのエラー・モデル,4-5複数の OSD モジュール・インスタンス,2-2プロセス間通信「IPC」を参照

プロセス・クリーンアップ,4-9

へへへへベクター I/O,4-6

めめめめメッセージの位置合せ,4-9メッセージの境界,4-8メッセージの公正と優先順位,4-9メッセージの順序,4-8メモリー・マップされたバッファ,4-9メモリー割当て,4-4

ゆゆゆゆユーザー・バッファ,4-4

よよよよよくある質問とその回答,A-1

ろろろろ論理接続モデル,4-5

わわわわ割込みコール,4-9

索引索引索引索引 -4