ユーザーズ・ガイド
2008年5月
リリース7.2.5.2
Oracle JDBC for Rdbユーザーズ・ガイド, リリース7.2.5.2
部品番号: E06181-01
原本名: Oracle JDBC for Rdb User Guide, Release 7.2.5.2
Copyright © 2005, 2008 Oracle Corporation. All rights reserved.
制限付権利の説明
このプログラム(ソフトウェアおよびドキュメントを含む)には、オラクル社およびその関連会社に所有権のある情報が含まれています。このプログラムの使用または開示は、オラクル社およびその関連会社との契約に記された制約条件に従うものとします。著作権、特許権およびその他の知的財産権と工業所有権に関する法律により保護されています。
独立して作成された他のソフトウェアとの互換性を得るために必要な場合、もしくは法律によって規定される場合を除き、このプログラムのリバース・エンジニアリング、逆アセンブル、逆コンパイル等は禁止されています。
このドキュメントの情報は、予告なしに変更される場合があります。オラクル社およびその関連会社は、このドキュメントに誤りが無いことの保証は致し兼ねます。これらのプログラムのライセンス契約で許諾されている場合を除き、プログラムを形式、手段(電子的または機械的)、目的に関係なく、複製または転用することはできません。
このプログラムが米国政府機関、もしくは米国政府機関に代わってこのプログラムをライセンスまたは使用する者に提供される場合は、次の注意が適用されます。
U.S. GOVERNMENT RIGHTS
Programs, software, databases, and related documentation and technical data delivered to U.S. Government customers are "commercial computer software" or "commercial technical data" pursuant to the applicable Federal Acquisition Regulation and agency-specific supplemental regulations. As such, use, duplication, disclosure, modification, and adaptation of the Programs, including documentation and technical data, shall be subject to the licensing restrictions set forth in the applicable Oracle license agreement, and, to the extent applicable, the additional rights set forth in FAR 52.227-19, Commercial Computer Software--Restricted Rights (June 1987). Oracle Corporation, 500 Oracle Parkway, Redwood City, CA 94065.
このプログラムは、核、航空、大量輸送、医療あるいはその他の本質的に危険を伴うアプリケーションで使用されることを意図しておりません。このプログラムをかかる目的で使用する際、上述のアプリケーションを安全に使用するために、適切な安全装置、バックアップ、冗長性(redundancy)、その他の対策を講じることは使用者の責任となります。万一かかるプログラムの使用に起因して損害が発生いたしましても、オラクル社およびその関連会社は一切責任を負いかねます。
Oracleは米国Oracle Corporationおよびその子会社、関連会社の登録商標です。その他の名称は、他社の商標の可能性があります。
このプログラムは、第三者のWebサイトへリンクし、第三者のコンテンツ、製品、サービスへアクセスすることがあります。オラクル社およびその関連会社は第三者のWebサイトで提供されるコンテンツについては、一切の責任を負いかねます。当該コンテンツの利用は、お客様の責任になります。第三者の製品またはサービスを購入する場合は、第三者と直接の取引となります。オラクル社およびその関連会社は、第三者の製品およびサービスの品質、契約の履行(製品またはサービスの提供、保証義務を含む)に関しては責任を負いかねます。また、第三者との取引により損失や損害が発生いたしましても、オラクル社およびその関連会社は一切の責任を負いかねます。
2.1 Oracle JDBC for Rdbネイティブ・ドライバ
2.1.1 Oracle RdbデータベースのURL指定(Oracle JDBC for Rdbネイティブ・ドライバを使用する場合)
2.1.2 クラス(Oracle JDBC for Rdbネイティブ・ドライバを使用する場合)
2.2 Oracle JDBC for Rdb Thinドライバ
2.2.1 Oracle RdbデータベースのURL指定(Oracle Rdb Thinドライバを使用する場合)
2.2.2 クラス(Oracle JDBC for Rdb Thinドライバを使用する場合)
2.4 Oracle JDBC for Rdbのシステム・プロパティ
3.1 Oracle JDBC for Rdb Thinサーバー
3.2 Oracle JDBC for Rdbマルチプロセス・サーバー
3.3 Oracle JDBC for Rdbプール・サーバー
第7章 Oracle SQL/ServicesとOracle JDBC for Rdbサーバー
7.1.1 Oracle SQL/Services JDBCディスパッチャの作成
7.1.2 サーバーに対するOracle SQL/Services JDBCディスパッチャの関連付け
7.2 Oracle SQL/Servicesによって使用されるコマンド・プロシージャ
8.5 Rdbネイティブ・ドライバとエグゼキュータ・サブプロセスの併用
8.7 Statement.cancel()メソッド・コールの無視
8.17 CONNECTION.setReadOnly()のスコープ
10.2 Oracle JDBC for Rdb Thinサーバーの設定、起動および使用(例)
10.3 Oracle SQL/ServicesによるOracle JDBC for Rdb Thinサーバーの設定と起動(例)
10.5 Oracle Rdbからjava.sql.Typesへのデータ型のマッピング
10.6 java.sql.TypesからOracle Rdbへのデータ型のマッピング
10.7 JDBC仕様: SQLからJavaへのデータ型のマッピング
10.8 JDBC仕様: JavaからSQLへのデータ型のマッピング
『Oracle JDBC for Rdbユーザーズ・ガイド』では、Oracle JDBC for Rdbドライバおよびサーバーの概念、機能および使用方法について説明します。このマニュアルでは、AlphaサーバーおよびIntegrityサーバー上のOpenVMS用Oracle JDBC for Rdbについて説明します。
このマニュアルでは、次のタスクを担当するユーザーを対象としています。
§ システム管理
§ データベース管理
§ アプリケーション・プログラミング
このマニュアルは、10の章から構成されています。
概要 |
|
Oracle JDBC for Rdbドライバについて説明します。 |
|
Oracle JDBC for Rdbサーバーについて説明します。 |
|
Oracle JDBC for Rdbサーバーの構成方法の詳細について説明します。 |
|
Oracle JDBC for RdbでSSLを使用する方法の詳細について説明します。 |
|
Oracle JDBC for Rdbコントローラの使用方法について説明します。 |
|
Oracle JDBC for RdbとOracle SQL/Servicesを併用する方法について説明します。 |
|
利用可能なその他の機能について説明します。 |
|
Oracle Rdbで利用可能なJDBC拡張機能について説明します。 |
|
一般的な例とデータ型の互換性を示します。 |
Oracle JDBC for Rdbは、JDBCとも表記されます。
Hewlett-Packard社は、HP社とも表記されます。
このマニュアルでは次の表記規則を使用します。
word |
書式例に含まれる小文字の単語は、ユーザーが指定する構文要素を表します。 |
[ ] |
大カッコは、カッコ内の項目を任意に選択することを表します。 |
{ } |
中カッコは、カッコ内の項目からいずれか1つを選択する必要があることを表します。 |
... |
水平の省略記号は、前にある項目を繰り返すことができることを示します。 |
. |
例の中の垂直の省略記号は、例に直接関連しない情報が省略されていることを示します。 |
Oracleでは、次のOracle JDBC for Rdbドライバを提供しています。
§ Oracle JDBC for Rdbネイティブ・ドライバ: クライアント側で使用、Oracle Rdbのインストールが必要。
§ Oracle JDBC for Rdb Thinドライバ: クライアント側用の100% Pure Javaドライバ、Oracle Rdbのインストールが不要。アプレットと併用する際に特に便利です。
どちらのOracle JDBC for Rdbドライバも、提供する基本機能は同じです。どちらも、次の標準と機能をサポートしています。
§ JDK 1.4/JDBC 3.0
§ 同一の構文とAPI
どちらのOracle JDBC for Rdbドライバも、Sun社の標準的なjava.sqlインタフェースを実装しています。これらの注意事項を読む読者は、JavaおよびJDBCにすでに精通しているものとします。
Javaの一般的な情報:
JDBCの一般的な情報:
http://java.sun.com/products/jdbc/index.html
HP社のOpenVMSシステム用Javaに関するドキュメント:
http://www.compaq.com/java/documentation/index.html - Java 2
http://h18012.www1.hp.com/java/documentation/index.html
Oracle JDBC for Rdb Thinドライバとともに、Oracleでは次のOracle JDBC for Rdbサーバーも提供しています。
§ Oracle Rdb Thinサーバー
§ Oracle Rdb Thinマルチプロセス・サーバー
§ Oracle Rdb Thinプール・サーバー
Oracle JDBC for Rdbサーバーでは、Oracle JDBC for Rdb Thinドライバに代わって、リモート・データベース・アクセス操作を実行します。
Oracle JDBC for Rdbサーバーの管理は、Oracle JDBC for RdbコントローラまたはOracle SQL/Servicesマネージャを使用すると実行できます。
Oracle JDBC for Rdbドライバには、次の2つのタイプがあります。
§ Oracle JDBC for Rdbネイティブ・ドライバ
§ Oracle JDBC for Rdb Thinドライバ
Oracle JDBC for Rdbネイティブ・ドライバは、クライアント/サーバーJavaアプリケーションで使用するためのタイプ2ドライバです。
このネイティブ・ドライバは、JavaとCを組み合せてコーディングされており、独自の方法を使用してCのエントリ・ポイントをコールすることにより、JDBCの起動をSQLMODモジュールに対するコールに変換します。
ネイティブ・ドライバの使用時は、SQLMODを使用して、ネイティブ・ドライバからOracle Rdbデータベース・システムに直接接続されます。Rdbリモート・アクセスを使用しない場合は、ネットワーク接続が存在しません。つまり、ネイティブ・ドライバは、Oracle JDBC for Rdbドライバ内で利用可能な最高速のJDBCアクセス方法になる場合もあります。
ドライバは、SQLMODライブラリを使用してOracle Rdbにアクセスするため、同じクライアント・マシン上でOracle Rdb Clientライブラリも利用可能な場合は、そのマシン上でのみ使用できます。また、ネイティブ・ドライバでは、そのJava JNIインタフェースで使用する共有イメージを動的にロードする必要もあります。そのため、ネイティブ・ドライバは、Javaアプレットを必要とするアプリケーションには適していません。
JDBC DriverManagerを使用してOracle Rdbデータベースに接続する際にネイティブ・ドライバを使用する場合は、次の接続URL書式を使用します。
jdbc:RdbNative:<database_specification><connect_switches>
書式要素を表2–1「RdbNative書式要素」に示します。
要素 |
説明 |
<database_specification> |
接続先Rdbデータベースの完全ファイル指定。
|
<connect_switches>
|
これらのオプション・スイッチは、データベースの接続時に確立する必要がある特定の設定を指定する際に使用できます。
詳細は、「接続オプション」を参照してください。
|
MY_DB_DIR:PERSONNELへの接続方法:
Connection conn = DriverManager.getConnection(
"jdbc:RdbNative:my_db_dir:personnel",user, pass);
<database_specification>は、OpenVMSスタイルの有効なファイル指定または論理名である必要があります。
my_disk:[my_directory]my_database
Rdbネイティブ・ドライバは、次のクラスにあります。
oracle.rdb.jdbc.rdbNative.Driver
Oracle JDBC for Rdb Thinドライバは、100% Pure Javaのタイプ4ドライバです。すべてJavaで記述されているので、このドライバはプラットフォームに依存しません。クライアント側にOracleソフトウェアを追加する必要もありません。
アプレットと併用する場合、Thinドライバは実行されるJavaアプレットとともにブラウザにダウンロードできます。HTTPプロトコルはステートレスですが、Thinドライバは違います。アプレットおよびThinドライバをダウンロードする最初のHTTPリクエストは、ステートレスです。Thinドライバがデータベース接続を確立すると、ブラウザとデータベースの間の接続はステートフルになり、2層構成になります。
Thinドライバを使用すると、Javaソケット上でTCP/IPを使用し、Oracle JDBC for Rdbサーバーを介して任意のOracle Rdbデータベースに直接接続できます。
Thinドライバとアプレットを併用する場合、クライアント側のブラウザではJavaソケットをサポートしている必要があります。
JDBC DriverManagerを使用してOracle Rdbデータベースに接続する際にThinドライバを使用する場合は、次の接続URL書式を使用します。
jdbc:rdbThin://<node>:<port>/<database_specification><connect_switches>
書式要素を表2–2「RdbThin書式要素」に示します。
要素 |
説明 |
<node> |
接続先のRdb JDBCサーバーが稼働しているノードのノード名またはIPアドレス。
|
<port> |
接続先のRdb Thinサーバーがリスニングするポート。
|
<database_specification> |
接続先Rdbデータベースの完全ファイル指定。
|
<connect_switches>
|
これらのオプション・スイッチは、データベースの接続時に確立する必要がある特定の設定を指定する際に使用できます。 詳細は、「接続オプション」を参照してください。
|
ポート1701を使用してノードBRAVO上のMY_DB_DIR:PERSONNELにThinドライバを介して接続する場合の手順:
Connection conn = DriverManager.getConnection(
"jdbc:rdbThin://bravo:1701/my_db_dir:personnel",user, pass);
<database_specification>は、次のようにOpenVMSスタイルの有効なファイル指定または論理名である必要があります。
my_disk:[my_directory]my_database
Oracle Rdb Thinドライバによる接続を使用する場合、データベースの指定で使用する論理名および相対ディレクトリ指定は、Oracle Rdb Thinサーバーの起動元アカウントおよびディレクトリに対して有効である必要があります。
Rdb Thinドライバは、次のクラスにあります。
oracle.rdb.jdbc.rdbThin.Driver
Oracle JDBC for Rdbドライバでは、接続時に確立される特定のデフォルトの動作および設定を指定するために接続文字列に追加される可能性がある一連のオプションを認識します。
接続オプションは、セパレータとして@文字を使用し接続URLに直接追加することもできますし、DriverManager.GetConnection()メソッドに渡すことができるプロパティ・ブロック内のプロパティ値として追加することもできます。
@<option_name>=<value>
使用可能な接続オプションを、表2–3「接続オプション」に示します。
<option_name> |
<value> |
デフォルト値 |
説明 |
cli.idleTimeout |
10進または16進の整数 |
0 |
該当するクライアント接続がアイドル状態でいられる最大時間(ミリ秒)を設定します。指定した時間内に該当する接続を使用して操作が実行されないと、該当する接続は強制的に切断されます。 値0の場合は、無制限のアイドル時間が許可されます。 詳細は、「クライアント接続タイムアウト」を参照してください。
|
handshakeTries |
10進または16進の整数 |
500 |
メイン・プロセスがその関連付けられたエグゼキュータ・サブプロセスとのハンドシェークを確立する際の最大試行回数を設定します。 このオプションは、マルチプロセスがネイティブ接続で有効なときに、rdbNativeドライバを使用した接続でのみ有効です。 このオプションは、マルチプロセス・オプションとのみ併用できます。 詳細は、「Rdbネイティブ・ドライバとエグゼキュータ・サブプロセスの併用」を参照してください。
|
handshakeWait |
10進または16進の整数 |
10 |
メイン・プロセスとその関連付けられたエグゼキュータ・サブプロセスの間で試行されるハンドシェークの間隔(ミリ秒)を設定します。 このオプションは、マルチプロセスがネイティブ接続で有効なときに、rdbNativeドライバを使用した接続でのみ有効です。 このオプションは、マルチプロセス・オプションとのみ併用できます。 詳細は、「Rdbネイティブ・ドライバとエグゼキュータ・サブプロセスの併用」を参照してください。
|
lockwait |
10進または16進の整数 |
-1 |
トランザクションのlockwait(秒)を設定します。 値–1の場合、サーバーはロックを無期限に待ちます。 詳細は、「lockwaitとmaxtries」を参照してください。
|
multiProcess |
trueまたはfalse |
false |
trueの場合は、該当する接続に対して新しいエグゼキュータ・プロセスが1つ作成されます。 このオプションは、Rdbネイティブ・ドライバ接続と併用される場合にのみ有効であり、Rdb Thinドライバからは無視されます。 詳細は、「Rdbネイティブ・ドライバとエグゼキュータ・サブプロセスの併用」を参照してください。
|
networkKeepalive |
trueまたはfalse |
false |
trueの場合、クライアントをサーバーに接続する際に使用されるソケットはSoKeepAliveが有効になります。 SoKeepAliveの詳細は、ソケットのドキュメントを参照してください。
|
networkTimeout |
10進または16進の整数 |
0 |
該当するクライアント接続がネットワークに対する読取りまたは書込みの完了を待つ最大時間(ミリ秒)を設定します。指定した時間内に読取りまたは書込みが完了しないと、例外が通知されます。 値0の場合は、無制限の時間が許可されます。 このタイムアウトは、Thinドライバに対してのみ有効であり、クライアント側のソケット操作にのみ適用されます。
|
sqlcache |
10進または16進の整数 |
0 |
SQLキャッシュに保持可能な文の数を指定します。 0以下の場合、SQL文のキャッシュは無効です。正の値の場合は、SQL文のキャッシュのサイズになります。
|
srv.password |
文字列値 |
なし |
接続に使用されるサーバーのパスワードを指定します。詳細は、「サーバーに対するその他のアクセス保護」を参照してください。
|
ssl*
|
各種 |
NONE |
1つ以上のSSL特性を設定します。それらの特性の詳細は、「SSLの使用」を参照してください。
|
tracelevelまたは tl |
10進または16進の整数 |
0 |
接続のデフォルトのtracelevelを指定します。
|
transaction |
readonly readwrite automatic oracle manual |
automatic |
接続のデフォルトのトランザクションを指定します。 詳細は、「デフォルト・トランザクション」および「CONNECTION.setReadOnly()のスコープ」を参照してください。
|
usehints
|
trueまたはfalse |
true |
trueの場合は、オプションのJDBCヒント・メソッドが遵守されます。 詳細は、「JDBCヒント・メソッド」を参照してください。
|
ポート1755を使用するノードBRAVO上のMY_DB_DIR:PERSに、Oracle JDBC for Rdbサーバーを介してThinドライバを使用し接続する手順(該当する接続のフル・トレース・ロギングを有効化):
Connection conn = DriverManager.getConnection(
"jdbc:rdbThin://bravo:1755/my_db_dir:pers@tracelevel=-1",
user, pass);
これらのオプションは、プロパティ・ブロックに配置することもできます。
Properties info = new Properties();
info.put("user", user);
info.put("password", password);
info.put("tracelevel", traceLevel);
Connection conn = DriverManager.getConnection(
"jdbc:rdbThin://bravo:1755/my_db_dir:pers", info);
Oracle JDBC for Rdbのドライバおよびサーバーは、アプリケーションの起動時にオペレーティング・システムのコマンドラインからJavaシステム・プロパティとして渡される構成プロパティまたは接続プロパティを認識できます。
Rdbネイティブ・ドライバまたはRdb Thinドライバは、それらのドライバを起動するアプリケーションとともに使用される場合、有効な接続オプションに類似した<option_name>を持つシステム・プロパティを認識できます。それらのオプションの詳細は、「接続オプション」を参照してください。
同じ構成オプションをRdbシステム・プロパティとして指定し、接続URL内でも指定した場合は、接続URL内の値が優先されます。
Rdbサーバーの起動とともに使用すると、該当するサーバーはサーバー構成オプションとして使用可能な<option_name>を持つシステム・プロパティを認識します。それらのオプションの詳細は、「サーバーの構成オプション」および「プール・サーバーの構成オプション」を参照してください。
サーバーの起動時に指定したRdbシステム・プロパティは、標準の構成オプションとしてコマンドラインで指定したプロパティまたは構成ファイルで指定したプロパティよりも優先されます。
-Doracle.rdb.jdbc.<option_name>=<value>
Rdbネイティブ・ドライバまたはRdb Thinドライバを使用するアプリケーションに対し、すべての情報をトレースするようトレース・レベルを設定する手順:
$java –Doracle.rdb.jdbc.tracelevel=-1 my_application
Oracle JDBC for Rdbサーバーは、Oracle Rdb Thinドライバを使用するアプリケーションによって発行されたJDBCリクエストにサービスを提供するサーバー側のコンポーネントです。
Oracle JDBC for Rdbサーバーには、次の3つのタイプがあります。
§ Oracle JDBC for Rdb Thinサーバー
§ Oracle JDBC for Rdbマルチプロセス・サーバー
§ Oracle JDBC for Rdbプール・サーバー
いずれのサーバーもマルチスレッドであり、複数のクライアント・リクエストを同時に処理できます。
Oracle JDBC for Rdbサーバーは、Oracle Rdbデータベースにサービスを提供する各ノードにインストールし、各ノード上で起動する必要があります。
Oracle JDBC for Rdb Thinドライバは、TCP/IP上でJavaソケットを使用し、Oracle JDBC for Rdbサーバーと通信します。
各サーバー・タイプと、システム上でサーバーを起動する様々な方法を、後述の項で説明します。
Oracle JDBC for Rdbサーバーを起動するには、Oracle JDBC for Rdbのディレクトリおよびファイルに対する所定のアクセス権が必要です。詳細は、「ファイルおよびディレクトリに関するアクセス要件」を参照してください。
Oracle JDBC for Rdb Thinサーバーは、Oracle Rdb Thinドライバを使用するアプリケーションによって発行されたJDBCリクエストにサービスを提供するサーバー側のコンポーネントです。
標準のThinサーバーはマルチスレッドであり、複数のクライアント・リクエストを同時に処理できます。このサーバーは単一のOpenVMSプロセスとして管理されるため、各スレッドにおけるデータベース・アクセスは同期化されます。
Thinサーバーは、Oracle Rdbデータベースにサービスを提供する各ノードにインストールされ、各ノード上で起動されます。該当するノードでは、Oracle Rdbがすでにインストールされていて、稼働している必要があります。
Thinサーバーは、TCP/IP上でJavaソケットを使用し、Oracle Rdb Thinドライバと通信します(デフォルトのポートIDは1701)。
Thinサーバーを起動する方法には、コントローラ内で適切なstart文を使用する方法、Oracle SQL/Services JDBCディスパッチャとして起動する方法、およびオペレーティング・システムのコマンドラインから直接起動する方法があります。
Thinサーバーは、XML書式の構成ファイル内でThinサーバーの定義を参照することにより、コントローラから起動できます。詳細は、「Oracle JDBC for Rdbコントローラ」の「サーバーの起動」を参照してください。
XML書式の構成ファイルmycfg.xmlの中に次のようなserverセクションがある場合:
<server
name="serv1"
type="RdbThinSrv"
url="//localhost:1707/"
logfile="myLogs:serv1.log"
/>
次のコマンドを使用すると、該当するサーバーをコントローラ内から起動できます。
rdbthincontrol> start server serv1
また、コントローラをコマンド・モードで使用し、サーバーを起動することもできます。
$ java –jar rdbthincontrol.jar –cfg mycfg.xml –
–name serv1 –startserver
Thinサーバーは、Oracle SQL/Servicesマネージャから起動することもできます。
Oracle SQL/Servicesマネージャを使用する場合はまず、SQL/Serviceサーバーに対する接続を確立する必要があります。接続が確立されたら、JDBCディスパッチャを起動できます。
ただし、JDBCディスパッチャは、Oracle SQL/Services環境でその定義を作成しておかないと、起動することができません。
詳細は、「Oracle SQL/ServicesとOracle JDBC for Rdbサーバー」を参照してください。
$run sys$system:SQLSRV_MANAGE71
SQLSRV> connect server;
Connecting to server
Connected
SQLSRV> start disp JDBC_MPDISP;
SQLSRV>
Thinサーバーは、OpenVMSのコマンドラインから起動することもできます。
コマンドラインで一連のオプションを指定するより、XML書式の構成ファイル内でサーバーの定義を作成した後、そのサーバー名を指定してサーバーを起動するとよいでしょう。この場合のサーバー定義におけるサーバー・タイプは、標準的なThinサーバーを表すRdbThinSrvに設定します。
$ java –jar rdbthinsrv.jar [-option ]
有効なオプションについては、「サーバーの構成オプション」を参照してください。DCLコマンドラインの場合は、各構成オプションの前にハイフン(-)を付ける必要があります。
デフォルト時、サーバーはタイプRdbThinSrv(標準的なThinサーバー)であると仮定されます。
$ java –jar rdbthinsrv.jar -port 1707
XML書式の構成ファイルmycfg.xmlの中に次のようなserverセクションがある場合:
<server
name="serv1"
type="RdbThinSrv"
url="//localhost:1707/"
logfile="myLogs:serv1.log"
/>
次の方法を使用すると、該当するThinサーバーを起動できます。
$ java –jar rdbthinsrv.jar –cfg mycfg.xml –name serv1
構成ファイル内のサーバー定義の詳細は、「XML書式の構成ファイル」を参照してください。
Oracle JDBC for Rdbマルチプロセス・サーバーは、メモリー・フットプリントが小さいサブプロセスを使用してOracle JDBC for Rdb Thinドライバからのリクエストを処理し、要求された操作をOracle Rdbデータベース上で実行するサーバー側のコンポーネントです。
マルチプロセス・サーバーはマルチスレッドであり、各クライアントにデータベース・アクセス用の独自のサブプロセスを割り当てることにより複数のクライアントを同時に処理し、同時実行性と可用性を向上させます。
マルチプロセス・サーバーの操作のほとんどはメインのサーバー・プロセスの中のクライアント・スレッド・コンテキスト内で実行され、クライアントに割り当てられたサブプロセスに制御が渡されるのは、Oracle Rdbデータベースに対する直接的な操作が必要な場合のみです。どのクライアントもそれ独自のOpenVMSサブプロセスを持つので、同時実行性が改善されます。それは、データベース操作の同期化をサーバーで行う必要がないためです。
割り当てられたサブプロセスはデフォルト時、クライアントの切断時に終了します。エグゼキュータは、クライアントの切断後に再利用できるよう、そのままにしておくこともできます。詳細は、「エグゼキュータの事前起動」を参照してください。
マルチプロセス・サーバーは、Oracle Rdbデータベースにサービスを提供する各ノードにインストールされ、各ノード上で起動されます。該当するノードでは、Oracle Rdbがすでにインストールされていて、稼働している必要があります。
マルチプロセス・サーバーは、TCP/IP上でJavaソケットを使用し、Thinドライバと通信します(デフォルトのポートIDは1701)。
マルチプロセス・サーバーを起動する方法には、コントローラ内で適切なstart文を使用する方法、Oracle SQL/Services JDBCディスパッチャとして起動する方法、およびオペレーティング・システムのコマンドラインから直接起動する方法があります。
マルチプロセス・サーバーは、XML書式の構成ファイル内でマルチプロセス・サーバーの定義を参照することにより、コントローラから起動できます。詳細は、「Oracle JDBC for Rdbコントローラ」の「サーバーの起動」を参照してください。
XML書式の構成ファイルmycfg.xmlの中に次のようなserverセクションがある場合:
<server
name="Mpserv1"
type="RdbThinSrvMP"
url="//localhost:1799/"
logfile="myLogs:serv1.log"
/>
次のコマンドを使用すると、該当するサーバーをコントローラ内から起動できます。
rdbthincontrol> start server Mpserv1
また、コントローラをコマンド・モードで使用し、サーバーを起動することもできます。
$ java –jar rdbthincontrol.jar –cfg mycfg.xml –
–name Mpserv1 –startserver
マルチプロセス・サーバーは、Oracle SQL/Servicesマネージャから起動することもできます。
Oracle SQL/Servicesマネージャを使用する場合はまず、SQL/Serviceサーバーに対する接続を確立する必要があります。接続が確立されたら、JDBCディスパッチャを起動できます。
ただし、JDBCディスパッチャは、Oracle SQL/Services環境でその定義を作成しておかないと、起動することができません。
詳細は、「Oracle SQL/ServicesとOracle JDBC for Rdbサーバー」を参照してください。
$run sys$system:SQLSRV_MANAGE71
SQLSRV> connect server;
Connecting to server
Connected
SQLSRV> start disp JDBC_MPDISP;
SQLSRV>
詳細は、「Oracle SQL/ServicesとOracle JDBC for Rdbサーバー」を参照してください。
マルチプロセス・サーバーは、OpenVMSのコマンドラインから起動することもできます。
$ java –jar rdbthinsrv.jar [-option]
有効なオプションについては、「サーバーの構成オプション」を参照してください。DCLコマンドラインの場合は、各構成オプションの前にハイフン(-)を付ける必要があります。
Thinサーバーもマルチプロセス・サーバーも、同一のrdbthinsrv.jarファイルを使用して起動されます。起動されるサーバーのスタイルを決定するのは、サーバー・タイプです。
デフォルト時、サーバーはタイプRdbThinSrv(標準的なThinサーバー)であると仮定されます。マルチプロセス・サーバーを起動するには、サーバー・タイプをRdbThinSrvMPに設定する必要があります。
$ java –jar rdbthinsrv.jar –port 1755 –type "RdbThinSrvMP"
DCLのコマンドラインの場合、タイプ名の大文字/小文字の区別を維持するには二重引用符で囲む必要があります。
また、XML書式の構成ファイル内でサーバーの定義を作成し、そのサーバー名を指定してサーバーを起動することもできます。その場合も、サーバー・タイプはRdbThinSrvMPに設定する必要があります。
XML書式の構成ファイルmycfg.xmlの中に次のようなserverセクションがある場合:
<server
name="Mpserv1"
type="RdbThinSrvMP"
url="//localhost:1799/"
sharedmem="102400"
logfile="myLogs:serv1.log"
/>
次の方法を使用すると、該当するマルチプロセス・サーバーを起動できます。
$ java –jar rdbthinsrv.jar –cfg mycfg.xml –name Mpserv1
マルチプロセス・サーバーでは、そのエグゼキュータと通信するために、共有グローバル・メモリーを割り当てる必要があります。その場合は、サーバー構成オプションのsharedmemを使用して指定できます。
共有メモリーのデフォルトの割当ては1024KBであり、これが十分なのはエグゼキュータが1つまたは2つの場合のみです。
サーバーと同時に動作すると考えられるエグゼキュータごとに1024KBを割り当てるのが目安ですが、それは問合せの複雑さ、関連する列の数、Rdbからエグゼキュータに返されるデータを保持するために作成される必要があるデータ領域のサイズによって異なります。
マルチプロセス・サーバーの場合は、サーバーの起動時に事前開始できるエグゼキュータ・プロセスの数を指定することもできます。
また、サーバーの稼働中に待機させておくことができる解放されたエグゼキュータ・プロセスの最大数を指定することもできます。システム・ロードが原因でOpenVMSのプロセスおよびサブプロセスの起動にシステムで時間が少しかかる場合、これは特に便利です。
エグゼキュータ・プロセスを事前起動しておけば、クライアントがその最初のデータベース接続にかかる時間全体を短縮できます。
単一のシステム上で起動される各エグゼキュータは、該当するシステム上で一意なプロセス名を持ちます。デフォルト時、その名前は、起動元サーバーの名前と、そのサーバーに関連するエグゼキュータ・プロセスのインスタンスを表す16進値から作成されます。
エグゼキュータの命名書式は、srv.execPrefix構成オプションを使用して変更することもできます。
マルチプロセス・サーバーに対してsrv.execPrefix構成オプションを指定すると、該当するサーバーのすべてのエグゼキュータの名前にその接頭辞が付きます。サーバーは、指定された接頭辞の後にエグゼキュータの16進数値ID(文字データ)を付加して各エグゼキュータ・インスタンスに一意な名前を付けます(それでもエグゼキュータ名はOpenVMSが要求するプロセス名のサイズに収まっている)。
エグゼキュータの名前は大/小文字が区別されます。
サーバー定義の詳細は、「XML書式の構成ファイル」を参照してください。
エグゼキュータ・サブプロセスの名前はデフォルト時、次の書式です。
サーバー名の最初の7文字+16進IDの8文字。
RDBTHNS00000220
そのため、同一のシステム内で起動されるマルチプロセス・サーバーの名前の先頭7文字は、大/小文字の区別以外は一意である必要があります。そうしないと、エグゼキュータ・プロセスの名前が重複するおそれがあります。
srv.execPrefixを指定すると、このデフォルトの命名書式が無効になります。
srv.execPrefixに"MY_EXECUTOR_"を設定した場合、4番目のエグゼキュータの名前は次のようになります。
MY_EXECUTOR_004
接頭辞が長くなると、一意性を確保するための文字数が短くなります。そのため、エグゼキュータ名の接頭辞をカスタマイズする際は、サーバーに同時に維持させるエグゼキュータの数を考慮する必要があります。
マルチプロセス・サーバーは、割り当てて起動するエグゼキュータごとに、サブプロセスを1つ作成します。このサブプロセスの作成時には、OpenVMSのコマンド・プロシージャが使用されます。これらのコマンド・プロシージャについては、このドキュメントの「サーバー・コマンド・プロシージャ」および「起動時コマンド」を参照してください。
サーバーでpersona(詳細は「persona」を参照)が指定されている場合、サーバーはOpenVMS CREPRCシステム・サービスを使用して該当プロセスを起動します。personaが指定されていない場合は、Java System.exec()メソッドがかわりに使用されます。
サーバーを稼働させるための環境またはJDBCディレクトリが適切に設定されていないと、エグゼキュータ・プロセスの起動時にエラーが発生する可能性があります。
JDBCディレクトリのアクセス要件の詳細は、 「ファイルおよびディレクトリに関するアクセス要件」 を参照してください。
エグゼキュータ・プロセスを起動する際の手順は、サーバーでpersonaを使用するかどうかによって異なります。
personaを使用しない場合は、サーバーによって次の手順が実行され、エグゼキュータが起動されます。
1. サーバー名に基づき、新しいプロセスのエグゼキュータ名が生成されます。詳細は、「エグゼキュータの命名」を参照してください。
2. System.exec()メソッドを使用して、アタッチされたプロセスが作成されます。
3. マルチプロセス・サーバーのsrv.execStartupオプションによって指定されているコマンド・プロシージャが実行されます。このオプションがサーバーでも構成ファイル内のDEFAULTサーバーでも指定されていない場合は、RDB$JDBC_HOME:RDBJDBC_STARTEXEC.COM が使用されます。「サーバー起動コマンド・プロシージャ」を参照してください。
4. 該当するサーバーまたはDEFAULTサーバーでsrv.onExecStartCmdオプションが指定されている場合は、該当するコマンドが実行されます。これは通常、サーバー環境およびサイト固有環境の設定に使用されます。「srv.onExecStartCmd」を参照してください。
5. 論理名RDBJDBCEXECによって指定されているエグゼキュータ・イメージが実行されます。
6. エグゼキュータとサーバーが、通信チャネルを確立します。
personaを使用する場合は、次の手順が実行されます。
1. サーバー名に基づき、新しいプロセスのエグゼキュータ名が生成されます。詳細は、「エグゼキュータの命名」を参照してください。
2. 稼働中のサーバーの現在の割当て制限に基づいて、エグゼキュータ・プロセスの割当て制限が決定されます。
3. 終了メールボックスがエグゼキュータ・プロセスのために設定され、読取りが発行されます。
4. CREPRCを使用してプロセスが作成され、SYS$SYSTEM:LOGINOUT.EXEが実行されます。
5. 先のリストの手順3〜6が実行されます。
エグゼキュータ・サブプロセスの作成時にサーバーで問題が発生すると、その問題に関連するステータス・コードがサーバー・ログに書き込まれます。
Java.sql.SQLException: Unable to start process,
status: 0x56EC03C : substatus 65535
今示したステータス・コードは、VMSのステータス・コードまたはRdb固有のステータス・コードです。このステータス・コードの詳細は、OpenVMSおよびOracle Rdbのドキュメントを参照してください。
検出された問題の詳細は、substatusで示されます。表3–1「サブコードの説明」に、サブコードの値とその意味を示します。
表3-1 サブコードの説明
サブコード |
説明 |
12 |
メモリー不足。割当て制限を確認します。
|
13 |
rdb$jdbc_com:ディレクトリ内でコマンド・プロシージャを作成することができません。権限またはアクセス権が不十分で拒否されたか、別のユーザーによって作成された同名ファイルの以前のバージョンがすでに存在しています。
|
19 |
rdb$jdbc_com論理名によって指定したパス名に問題があります。指定したデバイスが無効です。
|
20 |
rdb$jdbc_com論理名によって指定したパス名に問題があります。指定したディレクトリが無効です。 |
|
|
24 |
サーバーによってオープンされているファイルが多すぎます。割当て制限を確認します。 |
28 |
ディスクが満杯。rdb$jdbc_comによって指定されているディスクを確認します。
|
30 |
ディスクまたはディレクトリが書込み保護されています。rdb$jdbc_comによって指定されているディスク/ディレクトリを確認します。 |
65530 |
プロセスが早期に終了されました。
|
65531 |
終了メールボックスの読取り中に問題が発生しました。
|
65532 |
CREPRCに対するコール中に問題が発生しました。
|
65533 |
終了メールボックスに関する情報の取得中に問題が発生しました。
|
65534 |
終了メールボックスの作成中に問題が発生しました。 |
|
|
JDBC$RDB_HOME、RDB$JDBC_COMおよびRDB$JDBC_LOGSの論理名によって指定されたディレクトリに対してサーバー・プロセスが適切なアクセス権を所持していることが重要です。詳細は、「ファイルおよびディレクトリに関するアクセス要件」を参照してください。
Oracle JDBC for Rdbプール・サーバーは、Thinドライバから接続リクエストを受け取り、次に利用可能なOracle JDBC for Rdbサーバーにそれらのリクエストをリダイレクトして処理させるサーバー側コンポーネントです。
プール・サーバーを使用する場合に指定できる単一のポートIDをクライアント側アプリケーションで使用すれば、次に利用可能なサーバーに接続できます。プール・サーバーは、一連の候補のサーバーから構成されるテーブルから、次に利用可能なサーバーをラウンドロビン法で選択します。
接続リクエストのリダイレクトが完了すると、Thinドライバと指定されたサーバーが互いに直接通信します。
プール・サーバーは、Oracle JDBC for Rdbサーバーにアクセスをリダイレクトする各ノードにインストールされ、各ノード上で起動されます。プール・サーバーはOracle Rdbと直接通信しないので、それらのノードにOracle Rdbが存在している必要はありません。プール・サーバーと、そのプール・サーバーによってプーリングされるサーバーは、同じノード上に存在している必要がありません。
プール・サーバーは、TCP/IP上でJavaソケットを使用し、Thinドライバと通信します(デフォルトのポートIDは1702)。
Thinプール・サーバーは、接続のプーリングではなくサーバーのプーリングを実行します。接続は、各接続リクエスト内で作成されますが、再利用可能ではありません。
プール・サーバーは、サーバーのリダイレクトを実行する各ノード上で起動する必要があります。プール・サーバーは、そのプール・サーバーによってプーリングされるサーバーと同じノード上に存在している必要がありません。
プール・サーバーを起動する方法には、コントローラ内で適切なstart文を使用する方法、Oracle SQL/Services JDBCディスパッチャとして起動する方法、およびオペレーティング・システムのコマンドラインから直接起動する方法があります。
プール・サーバーは、XML書式の構成ファイル内でThinプール・サーバーの定義を参照することにより、コントローラから起動できます。詳細は、「Oracle JDBC for Rdbコントローラ」の「サーバーの起動」を参照してください。
XML書式の構成ファイルmycfg.xmlの中に次のようなserverセクションがある場合:
<server
name="mypoolserver"
type="RdbThinSrvPool"
url="//localhost:1702/" >
<pooledServer name="srv1forRdb"/>
<pooledServer name="srv2forRdb"/>
<pooledServer name="srvMPforRdb"/>
</server>
次のコマンドを使用すると、該当するサーバーをコントローラ内から起動できます。
rdbthincontrol> start server mypoolserver
また、コントローラをコマンド・モードで使用し、サーバーを起動することもできます。
$ java –jar rdbthincontrol.jar –cfg mycfg.xml –
–name mypoolserver –startserver
プール・サーバーは、Oracle SQL/Servicesマネージャから起動することもできます。
Oracle SQL/Servicesマネージャを使用する場合はまず、SQL/Serviceサーバーに対する接続を確立する必要があります。接続が確立されたら、JDBCディスパッチャを起動できます。
ただし、JDBCディスパッチャは、Oracle SQL/Services環境でその定義を作成しておかないと、起動することができません。
詳細は、「Oracle SQL/ServicesとOracle JDBC for Rdbサーバー」を参照してください。
$run sys$system:SQLSRV_MANAGE71
SQLSRV> connect server;
Connecting to server
Connected
SQLSRV> start disp JDBC_DISP;
SQLSRV>
詳細は、「Oracle SQL/ServicesとOracle JDBC for Rdbサーバー」を参照してください。
プール・サーバーは、OpenVMSのコマンドラインから起動することもできます。
$ java –jar rdbthinsrvpool.jar [-option ]
有効なオプションについては、「プール・サーバーの構成オプション」を参照してください。
どのオプションにも、前にハイフン(–)を付ける必要があります。
$ java –jar rdbthinsrvpool.jar –cfg mycfg.xml –
プール・サーバーは、起動されると、プーリングされているサーバーのリストをラウンドロビン法でスキャンし、次に利用可能なサーバーを選択します。
プール内のサーバーの起動と停止は、いつでも実行できます。利用できないサーバーは、プール・サーバーによってバイパスされます。プール・サーバーでは、プール・サーバー自体の起動時に、プーリングされているサーバーの1つ以上を自動的に起動することもできます。
プール・サーバーの起動時は、そのプール内の各サーバーに対してチェックが実行され、プーリングされているサーバーのautoStartオプションが有効になっているかどうかが調べられます。autoStartが有効な場合は、プーリングされているサーバーのsrv.startupオプションによって指定されているコマンド・プロシージャが実行されます。詳細は、「サーバー・コマンド・プロシージャ」を参照してください。
プール・サーバーは稼働中、サーバーのプールにプーリングされている各サーバーでautoRestartオプションが有効になっていてまだ実行されているかを定期的にチェックします。プーリングされているものの稼働していないサーバーに対してautoRestartが有効になっていると、そのサーバーのsrv.startupオプションによって指定されているコマンド・プロシージャが実行され、そのサーバーが再起動されます。
プール・サーバーの起動時にsrv.keepAliveTimerオプションを使用すると、稼働していないautoRestartサーバーのチェックの間の時間を指定できます。詳細は、「プール・サーバーの構成オプション」を参照してください。
コントローラまたはOracle SQL/Servicesマネージャを使用してプール・サーバーを停止すると、該当サーバーの停止中に、該当プールにプーリングされているサーバーでautoStartが有効になっている全サーバーも停止されます。
プール・サーバーによる接続のリダイレクト時、プーリングされているサーバーの中で選択されたサーバーのIPがThinドライバに返されます。そのため、Thinドライバは、その選択されたサーバーにクライアントの接続リクエストをリダイレクトできます。DNSノード名の変換がクライアント・ノードとサーバー・ノードで異なる可能性があるので、プール・サーバーは指定されたノードをすべてIPアドレスに暗黙的に変換した後、得られたIPをThinドライバに返します。
このIPアドレスへの変換により、failSAFE IPによって実行されるスタンバイ・アドレスへのフェイルオーバーが制限される場合もあります。
failSAFE IPはOpenVMS上のTCP/IP Servicesによって提供されるオプション・サービスであり、これにより、ノードで障害が発生した場合にIPアドレスのフェイルオーバーが可能になります。
指定されたIPの「論理的」な性質を維持し、failSAFE IPがスタンバイ・ノードに正しくリダイレクトされるように、接続のリダイレクト時、指定されたノードをプール・サーバーがIPアドレスに変換しないように指定することもできます。
詳細は、「プール・サーバーの構成オプション」の–srv.useLogicalIpsを参照してください。
Oracle JDBC for Rdbサーバーに適用される構成オプションは多数あり、それらはコマンドライン・オプションとして使用することもできますし、構成ファイル内のサーバー・オプションとして使用することもできます。
これらのオプションを構成ファイル内で使用する方法の詳細は、「構成ファイル」を参照してください。
利用可能な構成オプションの詳細を、次の項で説明します。
次のサーバー構成オプションは、標準のThinサーバーおよびマルチプロセス・サーバーの場合に、コマンドラインまたは構成ファイルで使用できます。プール・サーバーで使用可能なオプションについては、「プール・サーバーの構成オプション」を参照してください。
表4–1「サーバーの構成オプション」に、これらのオプションを示します。
オプション |
デフォルト値 |
説明 |
anonymous |
false |
指定すると、サーバーは匿名接続、すなわちユーザーおよびパスワードを指定しない接続を許可するように指示されます。
Oracle Rdbデータベースの設定方法によって異なりますが、Oracle Rdbではユーザー名を明示的に指定しないでデータベースに接続することが許される場合があります。その場合、データベースのアクセス権は、Oracle Rdbによりサーバー起動者の認可アカウントの特性を使用して決定されます。
このスイッチをパスワードおよびユーザーとともに指定すると、接続上で使用するデフォルトのユーザー名/パスワードを指定できます。 デフォルト時は匿名接続が無効なので、Rdbデータベースにアクセスする場合、クライアントは有効なユーザー名とパスワードを指定する必要があります。
|
allowDatabase <name=database-name> |
なし |
該当するサーバーによって許可されるアクセス先データベースの名前を指定します。これは、restrictAccessオプションとともに指定します。 このオプションは、XML書式の構成ファイル内でのみ指定します。 指定するデータベースも、同一の構成ファイル内で規定する必要があります。
該当するサーバーによって許可されるアクセス先データベースごとに、allowDatabaseオプションで指定する必要があります。
詳細は、「データベース・アクセスの制限」を参照してください。
|
allowUser <name=user-name> |
なし |
該当するサーバーによってデータベース・アクセスが許可されるユーザーの名前を指定します。これは、restrictAccessオプションとともに指定します。 このオプションは、XML書式の構成ファイル内でのみ指定します。
該当するサーバーによってデータベース・アクセスが許可されるユーザーごとに、allowUserオプションで指定する必要があります。
詳細は、「ユーザー・アクセスの制限」を参照してください。
|
autorestart |
false |
指定すると、該当するサーバーがサーバー・プールに含まれている可能性があるすべてのプール・サーバーが、該当するサーバーを自動的に再起動するよう指示されます。このオプションは、XML書式の構成ファイルの中でのみ有効です。詳細は、「Oracle JDBC for Rdbプール・サーバー」を参照してください。
|
autostart |
false |
指定すると、該当するサーバーがサーバー・プールに含まれている可能性があるすべてのプール・サーバーが、該当するサーバーを自動的に起動するよう指示されます。このオプションは、XML書式の構成ファイルの中でのみ有効です。詳細は、「プール・サーバーの操作」を参照してください。
|
bまたはbuffersize <send_buffer_size> |
説明を参照 |
基礎となるネットワークI/Oバッファのサイズに関するヒントがサーバーに提供されます。 バッファ・サイズを大きくすると、高ボリューム接続のネットワークI/Oのパフォーマンスを向上させることができます。一方、バッファ・サイズを小さくすると、着信データのバックログを減らすことができます。 デフォルトのバッファ・サイズは、サーバー・システム上で設定されているTCP/IPの現行のデフォルト・ネットワーク・バッファ・サイズです。
|
bypass |
false |
この権限が利用可能な場合は、サーバー・プロセスでバイパスが許可可能な権限であることになります。 Rdbはこの権限をチェックして、データベースおよびデータベース・オブジェクトに対するアクセス権を決定します。 有効な場合、該当するサーバー・インスタンスを介してデータベースに接続されている有効なユーザーはすべて、バイパスの権限を所持しているものとみなされます。
デフォルト値のfalseの場合、バイパス権限はサーバーに対して無効です(デフォルト時)。バイパス権限をすでに所持している有効なユーザーの場合は、バイパスを引き続き利用できます。 詳細は、「BYPASS権限」を参照してください。
|
cfgまたはconfigfile < file_specification>
|
なし |
サーバー属性が検出される可能性がある構成ファイルのファイル指定。 該当する構成ファイル内で設定されている属性は、コマンドライン・レベルでの同一属性の設定により、無効化される場合もあります。 ファイル拡張子がXMLの場合、構成パラメータはXML書式で保持されます。詳細は、「構成ファイル」 を参照してください。 デフォルト時、構成ファイルは使用されません。
|
cli.idleTimeout <timeout> |
0 |
クライアント接続がアイドル状態でいられる最大時間(ミリ秒)を設定します。指定した時間内に該当する接続を使用して操作が実行されないと、該当する接続は強制的に切断されます。
値がゼロ(0)の場合は、無制限のアイドル時間が許可されます。 詳細は、「クライアント接続タイムアウト」を参照してください。
|
controlpass <control_password>
|
なし |
該当するサーバー・インスタンス上で制御コマンドを発行できるように制御ユーザーが使用する必要があるパスワードを指定します。 このパスワードは、プレーン・テキストまたはパスワード・ダイジェスト値です。
このパスワードの詳細は、「制御パスワード」を参照してください。
|
fsまたはfetchsize <default_fetch_size> |
100 |
使用するデフォルトのfetchsizeを指定します。 fetchsizeは、検索してクライアントに返送する1回当たりのレコード数を示すヒントをサーバーに提供します。 fetchsizeを大きくすると、検索されるレコード1件当たりのネットワークの平均オーバーヘッドが減るので、ネットワークのパフォーマンスが改善される場合もあります。
|
lockwait <lock_wait>
|
-1 |
レコード・ロックを取得する際の最大待ち時間(秒)を指定します。 このスイッチとmaxtriesを併用すると、ロック対象オブジェクトに対するロックを取得しようとする場合の試行時間(この時間を超えると、オブジェクトがロックされたという例外が発行される)を指定できます。 値が-1の場合は、無期限に待つことを意味します。
|
logまたはlogfile <file_specification> |
コンソール |
該当するサーバーのログ・ファイルのファイル指定。 トレースが有効な場合、トレース・メッセージはコンソールではなくこのファイルに書き込まれます。 トレース・メッセージはデフォルト時、コンソールに書き込まれます。
|
maxclients <maximum_number_of_clients> |
-1 |
該当するサーバー・インスタンスで処理できる同時クライアントの最大数を指定します。 値が-1の場合、許可されるクライアントの数は無制限になります。
|
maxFreeExecutors <maximum_number_of_free_executors>
|
0 |
サーバーの稼働中に保持できる解放された(使用されていない)エグゼキュータ・プロセスの最大数を指定します。 この機能は、マルチプロセス・サーバーにのみ適用できます。
|
maxtries <maximum_number_of_lock_attempts> |
10 |
レコード・ロックを取得する際の最大試行回数を指定します。 このスイッチとlockwaitを併用すると、ロック対象オブジェクトに対するロックを取得しようとする場合の試行時間(この時間を超えると、オブジェクトがロックされたという例外が発行される)を指定できます。
|
name <server name > |
説明を参照 |
該当するサーバー・インスタンスの名前を指定します。この名前は、一意である必要はありませんが、起動時構成ファイル内でサーバー情報を検索する際に使用される場合があります。この名前の値は、大/小文字が区別されません。
指定しないと、サーバー・タイプに基づき、サーバーのために名前が作成されます。
|
pまたはport <port_num> |
1701 |
サーバーが、ポート<port_num>をリスニングするよう指示されます。
|
pwまたはpassword <default_user_password> |
なし |
スイッチuserおよびanonymousとともに指定すると、匿名接続で使用するパスワードを指定できます。
|
persona <username> |
なし |
オペレーティング・システムのユーザー名(サーバーを実行中のプロセスで仮定されるもの)を指定します。指定しないと、personaは使用されません。詳細は、「persona」を参照してください。
|
prestartedExecutors <number_of_prestarted_executors> |
0 |
マルチプロセス・サーバーの起動時に起動されるエグゼキュータ・プロセスの数を指定します。 この機能は、マルチプロセス・サーバーにのみ適用できます。
|
relay |
false |
指定すると、該当するサーバーは、そのネットワーク・コミュニティ内でアクティブな全サーバーにポーリング・リクエストを中継するよう指示されます。
この機能は現在、使用不能です。
|
restrictAccess |
false |
allowDatabaseオプションとともに指定すると、指定したデータベースに対するアクセスを制限できます。 このオプションは、XML書式の構成ファイル内でのみ指定します。 詳細は、「データベース・アクセスの制限」を参照してください。
|
sharedMem <size_in_KB> |
1024 |
サーバーによって割り当てられるグローバルな共有メモリーの量(KB)を指定します。 この機能は、マルチプロセス・サーバーにのみ適用できます。
|
srv.bindTimeout <timeout> |
0 |
データベース接続の完了を待つ場合のタイムアウト(ミリ秒)を設定します。この時間内にデータベース接続が完了しないと、例外が通知されます。 値がゼロ(0)の場合、タイムアウトは無制限になります。
|
srv.execPrefix <prefix> |
説明を参照 |
マルチプロセス・サーバーの場合にのみ有効です。 エグゼキュータ名で使用される接頭辞を指定します。 指定しないと、サーバー名から得られる標準的な接頭辞が使用されます。 詳細は、「エグゼキュータの命名」を参照してください。
|
srv.execStartup <file_specification> |
説明を参照 |
マルチプロセス・サーバーの場合にのみ有効です。 各クライアント接続のサブプロセスの起動に使用される起動用のバッチ・ファイルまたはコマンド・ファイルを指定します。指定しないと、 rdb$jdbc_home:rdbjdbc_startexec.comが使用されます。
詳細は、「サーバー・コマンド・プロシージャ」を参照してください。
|
srv.idleTimeout <timeout> |
0 |
新しいクライアント接続リクエストをサーバーが待つ最大時間(ミリ秒)を指定します。このタイムアウト時間内に新しい接続が確立されないと、サーバーは非アクティブであるため終了されます。 値がゼロ(0)の場合は、無制限のアイドル時間が許可されます。 詳細は、「サーバー非アクティブ・タイムアウト」を参照してください。
|
srv.mcBasePort <base_port> |
5517 |
マルチキャスト操作で使用されるベース・ポート番号を指定します。 値がゼロ(0)の場合、マルチキャスト操作は無効になります。
|
srv.mcGroupIP <group_ip> |
239.192.1.1 |
該当するサーバーが参加するマルチキャストIPグループを指定します。
|
srv.mpMaxTries <max_tries> |
500 |
マルチプロセス・サーバーの場合にのみ有効です。 エグゼキュータとのハンドシェークの同期化をサーバーが試行する最大回数を指定します。
|
srv.mpTryWait <wait_time> |
10 |
マルチプロセス・サーバーの場合にのみ有効です。 サーバー/エグゼキュータのハンドシェーク同期化試行間の間隔(ミリ秒)を指定します。
|
srv.onExecStartCmd <command> |
なし |
エグゼキュータの起動前に実行されるDCLコマンド文を指定します。 詳細は、「起動時コマンド」を参照してください。
|
srv.onStartCmd <command> |
なし |
サーバーの起動前に実行されるDCLコマンド文を指定します。 指定したコマンドが実行されるのは、コントローラまたはサーバーを使用してプール・サーバーが起動される場合のみです。 詳細は、「起動時コマンド」を参照してください。
|
srv.password <server_password> |
なし |
データベース接続にサーバーを使用できるようにクライアントが指定する必要がある追加のパスワードを指定します。 詳細は、「サーバーに対するその他のアクセス保護」を参照してください。
|
srv.startup <file_specification> |
説明を参照 |
該当するサーバーのプロセスを起動するためにコントローラが使用する起動用のバッチ・ファイルまたはコマンド・ファイルを指定します。指定しないと、 rdb$jdbc_home:rdbjdbc_startsrv.comが使用されます。 詳細は、「サーバー・コマンド・プロシージャ」を参照してください。
|
tlまたはtracelevel <trace_level>
|
0 |
デバッグ用のトレース・レベルを設定します。 詳細は、「トレース」を参照してください。
|
tracelocal |
false |
ローカル・サーバー・ベースのトレースのみを有効にするよう指定します。このオプションを設定すると、クライアント接続によって指定されたtracelevel値は、サーバー・コンポーネントのトレース・レベルに影響を与えません。
|
type <server_type> |
RdbThinSrv |
該当するサーバーのサーバー・タイプを指定します。 有効な値: • RdbThinSrv標準Thinサーバー • 通信にSSLを使用するRdbThinSrvSSL Thinサーバー • RdbThinSrvMPマルチプロセス・サーバー • RdbThinSrvMPSSL: SSLを使用するマルチプロセス・サーバー • RdbThinSrvPoolプール・サーバー • SSLを使用するRdbThinSrvPoolSSLプール・サーバー
|
uまたはuser <default_user_name>
|
なし |
スイッチpasswordおよびanonymousとともに指定すると、匿名接続で使用するユーザー名を指定できます。
|
url <connection URL> |
なし
|
このサーバーが稼働するノードのIPとポートを指定します。このスイッチは、portスイッチより優先されます。 <connection URL>の書式は//<node>:<port>/です。
|
プール・サーバーで使用できる有効な構成オプションを、表4–2「プール・サーバーの構成オプション」に示します。
オプション |
デフォルト値 |
説明 |
cfgまたはconfigfile <configuration_filename>
|
なし |
サーバー属性が検出される可能性がある構成ファイルのファイル指定。該当する構成ファイル内で設定されている属性は、コマンドライン・レベルでの同一属性の設定により、無効化される場合もあります。 ファイル拡張子がXMLの場合、構成パラメータはXML書式で保持されます。詳細は、「構成ファイル」を参照してください。
デフォルト時、構成ファイルは使用されません。
|
controlpass <control_password>
|
なし |
該当するサーバー・インスタンス上で制御コマンドを発行できるように制御ユーザーが使用する必要があるパスワードを指定します。 このパスワードの詳細は、「制御パスワード」を参照してください。
|
logまたはlogfile <file_specification> |
コンソール |
該当するサーバーのログ・ファイルのファイル指定。 トレースが有効な場合、トレース・メッセージはコンソールではなくこのファイルに書き込まれます。 トレース・メッセージはデフォルト時、コンソールに書き込まれます。
|
node<n> <node> |
なし |
番号<n>のThinサーバーが存在するノードを指定します。このオプションをXML書式の構成ファイル内で使用するのは無効です。
|
poolserver |
なし |
サーバーがプール・サーバーとして機能するよう指定します。このオプションは、コマンドラインで使用される場合またはXML書式以外の構成ファイルで使用される場合、必須です。
|
pooledserver <name=server-name> |
なし |
プールに参加するサーバーの名前を指定します。このオプションは、XML書式の構成ファイルを使用する場合にのみ利用できます。 指定するサーバーも、同一の構成ファイル内で規定する必要があります。
|
poolsize <pool_size> |
なし |
指定の対象となるThinサーバーの数を指定します。このオプションは、コマンドラインで使用される場合またはXML書式以外の構成ファイルで使用される場合、必須です。
|
port<n> <port_num> |
なし |
サーバー・リスト内の番号<n>のThinサーバーのポートを指定します。このオプションをXML書式の構成ファイル内で使用するのは無効です。
|
pまたはport <port_num> |
1701 |
プール・サーバーが、ポート<port_num>をリスニングするよう指示されます。
|
srv.keepAliveTimer <seconds> |
60 |
プーリングされているサーバーの中でautoRestartが有効になっていて、かつ稼働していないプール・サーバーのチェック間隔(秒)を設定します。 詳細は、「Oracle JDBC for Rdbプール・サーバー」を参照してください。
|
srv.mcBasePort <base_port> |
5517 |
マルチキャスト操作で使用されるベース・ポート番号を指定します。 値がゼロ(0)の場合、マルチキャスト操作は無効になります。
|
srv.mcGroupIP <group_ip> |
239.192.1.1 |
該当するサーバーが参加するマルチキャストIPグループを指定します。
|
srv.password <server_password> |
なし |
データベース接続にサーバーを使用できるようにクライアントが指定する必要がある追加のパスワードを指定します。 詳細は、「サーバーに対するその他のアクセス保護」を参照してください。
|
srv.useLogicalIPs |
false |
プール・サーバーの場合にのみ有効です。 指定されたIP値を接続リクエストをリダイレクトする前にサーバーがIPアドレスに変換しないように指定します。詳細は、「OpenVMS FailSAFE IPの使用」を参照してください。
|
tlまたはtracelevel <trace_level>
|
0 |
デバッグ用のトレース・レベルを設定します。 詳細は、「トレース」を参照してください。
|
url <connection URL> |
なし |
このサーバーが稼働するノードのIPとポートを指定します。このスイッチは、portスイッチより優先されます。
|
サーバー・プール内に一連のサーバーがリストされている可能性があるので、前述のオプションは構成ファイルを使用して指定した方がよいでしょう。標準的な構成ファイルを使用する場合、プール内のサーバーの数はpoolsizeオプションによって指定します。XML書式の構成ファイルの場合、プール内のサーバーの数はPooledServerサブセクションの数によって決定されます。プールに含まれるサーバーごとに、ノードとポートIDを指定する必要があります。
プール・サーバーの構成例は、「構成ファイル」を参照してください。
コマンドラインで一連のスイッチを設定するかわりに、構成ファイルを指定し、設定の詳細を示すこともできます。
次の2つの書式の構成ファイルが認識されます。
§ 標準のJavaプロパティ・ロード・ファイル
§ XML書式のファイル
ここでは、標準のJavaプロパティ・ロード・ファイルという書式を持つ構成ファイルの使用方法について説明します。XML書式の構成ファイルの使用の詳細は、「XML書式の構成ファイル」を参照してください。
「サーバーの構成オプション」および「プール・サーバーの構成オプション」で示したのと同じサーバー構成オプションを使用できますが、次の変更点があります。
1. どのキーワード(コマンドライン上で値を持たないものも含む)の場合も、値が必要です。それらのオプションはブールと考えられるため、適切な‘TRUE’値を持つ必要があります。
2. 各キーワードの値は、等号(=)を使用して指定する必要があります。
コマンドラインの–cfgスイッチを使用すると、構成ファイルを指定できます。
$java –jar rdb$jdbc_home:rdbthinsrv.jar –cfg thinsrv.cfg
構成ファイルの中では、次のように、Javaスタイルのコメント行と空の行を指定できます。
//
// configuration file for our thin server
//
// the default port for the thin server is 1701 but we
// want it to listen on another port
port=1708
// allow anonymous connections
anonymous=true
// enable password display
showpass=true
// limit the number of clients
maxclients=10
// set the locking keywords
lockwait=2
maxtries=20
// end of config file
また、Thinプール・サーバーの構成ファイルの中では、次のように、接続リクエストの委任先となる可能性があるThinサーバーのリストに関する情報を指定する必要があります。
//
// configuration file for pool server
//
// the default port for the pool server is 1702
port=1702
// show is a pool server and the poolsize ( number of subservient servers)
poolserver=true
poolsize=4
// now add the servers
node1=MYNODE1
port1=1704
node2=MYNODE1
port2=1705
node3=MYNODE1
port3=1706
node4=MYNODE2
port4=1704
// end of config file
コマンドラインで一連のスイッチを設定するかわりに、XML書式の構成ファイルを指定し、それらスイッチの設定の詳細を示すこともできます。XML書式の構成ファイルは、標準のCFGファイルに比べて指定できる構成オプションの数が多いので、構成ファイルの書式としてお薦めです。
XML書式の構成ファイルが標準のCFGファイルと異なっている点は、同じ構成ファイルの中で複数のサーバーに関する情報を指定できる点です。
どのサーバーも、各serverセクションで指定し、一意な名前を持つ必要があります。この名前は、サーバーの起動時に該当するサーバーのデフォルトの構成情報を取得したり、システム上およびコントローラ・インタフェース内でのサーバーの特定方法を取得したりするのに使用されます。
コマンドラインの–cfgスイッチを使用すると、この構成ファイルを指定できます。
「サーバーの構成オプション」および「プール・サーバーの構成オプション」で示したのと同じサーバー構成オプションを使用できますが、次の変更点があります。
· どのキーワード(コマンドライン上で値を持たないものも含む)の場合も、値が必要です。それらのオプションはブール値と考えられるため、適切な‘TRUE’値を持つ必要があります。
· 各キーワードの値は、等号(=)を使用して指定する必要があります。
· どのオプション値も、二重引用符で囲む必要があります。
この構成ドキュメントは、階層的なXMLオブジェクトです。どのキーワードも、適切なセクションまたはサブセクションに記述する必要があります。同一の構成ファイル内で、複数のサーバーを指定できます。どのサーバーも、一意な名前を持つ必要があります。
この構成ファイルの内容の書式は、XML V1.0です。
$java –jar rdb$jdbc_home:rdbthinsrv.jar –cfg rdbjdbccfg.xml
<?xml version = ‘1.0’?>
<!—Configuration file for Rdb Thin JDBC Drivers and Servers -->
<config>
<!—SERVERS -->
<servers>
<!—DEFAULT server characteristics-->
<server
name="DEFAULT"
type="RdbThinSrv"
url="//localhost:1701/"
maxClients="-1"
srv.bindTimeout="1000"
srv.idleTimeout="0"
srv.mcBasePort="5517"
srv.mcGroupIP="239.192.1.1"
tracelevel = "0"
autostart = "false"
autorestart = "false"
restrictAccess = "false"
anonymous = "false"
bypass = "false"
tracelocal = "false"
relay = "false"
controlUser="control_user"
controlPass="0x18E007C81F6B2E2EA02065F78A587BD3"
cfg="rdb$jdbc_com:rdbjdbccfg.xml"
srv.execStartup="rdb$jdbc_home:rdbjdbc_startexec.com"
srv.startup="rdb$jdbc_home:rdbjdbc_startsrv.com"
sharedmem = "0"
/>
<!—DEFAULT Secure socket server -->
<server
name="DEFAULTSSL"
type="RdbThinSrvSSL"
ssl.default="false"
ssl.context="TLS"
ssl.keyManagerFactory="SunX509"
ssl.keyStoreType="jks"
ssl.keyStore="rdbjdbcsrv.kst"
ssl.keyStorePassword="CHANGETHIS"
ssl.trustStore="rdbjdbcsrv.kst"
ssl.trustStorePassword="CHANGETHIS"
/>
<!—now specific servers that will be started up by pool server -->
<server
name="srv1forRdb"
type="RdbThinSrv"
url="//localhost:1701/"
autoStart="true"
autoRestart="true"
logfile="rdb$jdbc_logs:srv1forRdb.log"
tracelevel="-1"
maxClients=1
/>
<server
name="srv2forRdb"
type="RdbThinSrv"
url="//localhost:1708/"
autoStart="true"
logfile="rdb$jdbc_logs:srv2forRdb.log"
/>
<!—MP server -->
<!—sharedmem is in KB default = 1024 -->
<server
name="srvMPforRdb"
type="RdbThinSrvMP"
url="//localhost:1705/"
autoStart="true"
maxClients="10"
maxFreeExecutors="10"
prestartedExecutors="10"
sharedMem="10240"
/>
<!—the pool server -->
<server
name="rdbpool"
type="RdbThinSrvPool"
url="//localhost:1702/" >
<pooledServer name="srv1forRdb"/>
<pooledServer name="srv2forRdb"/>
<pooledServer name="srvMPforRdb"/>
</server>
<!—Secure socket server -->
<server
name="srvssl1forRdb"
type="RdbThinSrvSSL"
url="//localhost:1709/"
/>
</servers>
<!—database -->
<databases>
<database
name="mf_pers"
url="//localhost:1701/mydisk:[databases]mf_personnel"
driver="oracle.rdb.jdbc.rdbThin.Driver"
URLPrefix="jdbc:rdbThin:"
/>
<database
name="pers"
url="//localhost:1702/mydisk:[databases]personnel"
driver="oracle.rdb.jdbc.rdbThin.Driver"
URLPrefix="jdbc:rdbThin:"
/>
</databases>
</config>
次は、XML書式の構成ファイルの様々なセクションについて説明します。
このセクションでは、構成設定の全体をカバーし、次のような各構成セクションを規定します。
<config>
[ session section ]
[ databases section ]
[ servers section ]
</config>
このセクションでは、対話型セッションのセッション特性を規定します。sessionセクション内の情報を使用するのは現在、Oracle JDBC for Rdbコントローラだけです。コントローラ・セッションの起動時に使用される可能性があるパスワードやユーザー名のような情報を指定できます。コントローラが現在認識できるのは、DEFAULTという名前のセッション1つだけです。
後述のセッション・プロパティを使用すると、コントローラの起動時にコマンドライン・オプション以外のオプションを別の方法で指定できます。
<session
[ session properties ]
/>
sessionセクションで有効なプロパティを、表4-3「sessionセクションのプロパティ」に示します。
表4-3 sessionセクションのプロパティ
オプション |
デフォルト値 |
説明 |
controlPass
|
なし
|
制御を目的としてアクティブなサーバーに接続する際にデフォルトで使用されるパスワードを指定します。このパスワードは、接続の認可用にサーバーに送信されるため、プレーン・テキストである必要があります。不明瞭化されたパスワードをここで使用しないでください。
|
controlUser |
なし
|
接続上で使用する制御ユーザーの名前。 |
password |
なし
|
これは現在、controlPassと同じ機能を持ちます。ただし、両方とも存在していると、controlPassの方が優先されます。
|
name |
なし |
このセッションの記述の名前であり、DEFAULTである必要があります。
|
user |
なし
|
接続上で使用するユーザー名。 |
tracelevel |
0
|
セッションのデフォルトのトレース・レベル。 |
srv.mcBasePort <base_port> |
5517
|
マルチキャスト操作で使用されるベース・ポート番号を指定します。
|
srv.mcGroupIP <group_ip> |
239.192.1.1 |
マルチキャスト操作で使用されるマルチキャストIPグループを指定します。
|
ssl.* |
なし
|
SSL対応のThinサーバーへの接続で使用される可能性があるセッションのSSL構成情報を指定します。詳細は、「SSLの使用」を参照してください。
|
<session
name="DEFAULT"
controlPass="jdbc_control"
user="jdcb_user"
password="jdbc_control"
tracelevel="0"
srv.mcBasePort="5517"
srv.mcGroupIP="239.192.1.1"
/>
1. セッション・プロパティsrv.mcBasePortおよびsrv.mcGroupIPでは、サーバーに対するポーリングで使用されるマルチキャスト属性を指定します。指定したマルチキャスト・グループに参加しているそのようなサーバーだけが、コントローラによって発行されるポーリング・リクエストに応答します。
2. 前述の例のようにユーザーおよび制御パスワードは構成ファイルのsessionセクションにプレーン・テキストの書式で格納できますが、そのような方法は組織のセキュリティ・ポリシーに反している場合もあります。プレーン・テキストのパスワードを構成ファイルに格納するのではなく、適切なコマンドライン・スイッチを使用して適切なパスワードを指定してください。サーバーに関連付けられている制御パスワードを、不明瞭化された形態により構成ファイルのserverセクションで指定することもできます。
このセクションでは、databaseセクションを1つ以上指定します。
<databases>
[ database section ]
</databases>
このセクションでは、データベースの名前と一連のプロパティを指定します。
<database>
[ database property ]
/>
databaseセクションで有効なプロパティを、表4–4「databaseセクションのプロパティ」に示します。
オプション |
デフォルト値 |
説明 |
name |
なし |
Oracle JDBC for Rdbドライバはこの名前によって、該当するデータベースを認識します。この名前は必須であり、この構成ファイルのdatabasesセクション内で一意である必要があります。
|
url |
なし
|
該当するデータベースにアクセスする際に使用できるURLです。 |
driver |
なし |
該当するデータベースにアクセスする際に使用できる優先JDBCドライバのクラス・パスです。
|
URLPrefix |
なし
|
完全なJDBC接続URLを与えるために前述のURLに付加する必要がある接頭辞です。
|
<!—database -->
<databases>
<database
name="mf_pers"
url="//localhost:1701/mydisk:[databases]mf_personnel"
driver="oracle.rdb.jdbc.rdbThin.Driver"
URLPrefix="jdbc:rdbThin:"
/>
<database
name="pers"
url="//localhost:1702/mydisk:[databases]personnel"
driver="oracle.rdb.jdbc.rdbThin.Driver"
URLPrefix="jdbc:rdbThin:"
/>
</databases>
このセクションでは、サーバー・プロパティ・セクションを1つ以上指定します。
<servers>
[ server section ]
</servers>
このセクションでは、該当するサーバーに割り当てるプロパティを1つ以上指定します。
設定対象のプロパティの詳細は、「サーバーの構成」を参照してください。
<server
<property="value"/>
/>
または
<server
<property="value"/>
>
[ pooled server subsection ]…
[ allowed database subsection ]…
[ allowed user subsection ]…
</server>
ポート1799をリスニングするserv1という名前の標準Thinサーバーは、次のサーバー・プロパティ・セクションを使用して記述できます。
<server
name="serv1"
type="RdbThinSrv"
url="//localhost:1799/"
logfile="myLogs:serv1.log"
/>
サーバー構成におけるデフォルトのサーバー特性は、個々のサーバー構成セクション内でオプションを繰り返し指定することなく指定できます。デフォルトのサーバー・オプションは、DEFAULTまたはDEFAULTSSLという名前を持つserverセクションを宣言することにより指定できます。
<server
name="DEFAULT"
type="RdbThinSrv"
url="//localhost:1701/"
maxClients="-1"
srv.bindTimeout="0"
srv.idleTimeout="0"
srv.mcBasePort="5517"
srv.mcGroupIP="239.1.1.1"
autoStart="false"
controlUser="jdbc_user"
controlPass="0x811B15F866179583EB3C96751585B843"
/>
DEFAULTおよびDEFAULTSSLというサーバーの定義は、デフォルトのサーバー特性を定義する場合にのみ使用し、コントローラまたはプール・サーバーによって起動できる実際のサーバー・インスタンスを表すためのものではありません。
これらのデフォルトのサーバー・プロパティは、特定のserverサブセクション内で明示的にオーバーライドされないかぎり、構成ファイル内でその後に定義されている各サーバーに割り当てられます。
DEFAULTおよびDEFAULTSSLというserverセクションは、構成ファイル内での位置が重要です。それらのサーバーは、これらのデフォルトの定義の後にあるセクション内で定義されている場合にのみ、それらのデフォルト特性を持ちます。デフォルトのserverセクションより前で指定されているserverセクションは、それらのデフォルト特性を持ちません。これら2つのセクションは、構成ファイル内先頭の2つのserverセクションとしてください。
pooledServerやallowDatabaseのようなサブセクションが必要な場合は、2番目の書式のserverセクションを使用する必要があります。
<server
name="rdbpool"
type="RdbThinSrvPool"
url="//localhost:1702/" >
<pooledServer name="srv1forRdb"/>
<pooledServer name="srv2forRdb"/>
<pooledServer name="srvMPforRdb"/>
</server>
このサブセクションでは、親サーバーのサーバー・プールに入るサーバーを指定します。宣言するサーバー名では、該当する構成ファイル内ですでに指定されているサーバーを参照する必要があります。
pooledServerサブセクションは、単一のサーバー宣言内に複数存在することができます。
このサブセクションは、RdbThinSrvPoolサーバーの宣言内で使用する場合にのみ有効です。
指定した一連のpooledServerは、親のプール・サーバーからアクセスされる可能性があるサーバー・プールを形成します。
<pooledServer name="declared server"/>
<server
name="rdbpool"
type="RdbThinSrvPool"
url="//localhost:1702/" >
<pooledServer name="srv1forRdb"/>
<pooledServer name="srv2forRdb"/>
<pooledServer name="srvMPforRdb"/>
</server>
このサブセクションでは、サーバーを使用するクライアントからアクセスされる可能性があるデータベースを指定します。宣言するデータベース名は、この構成ファイルのdatabaseセクションで指定済のデータベースを参照するか、有効なデータベース・ファイル指定または論理名である必要があります。
このサブセクションは、サーバーの宣言内で使用する場合にのみ有効です。
allowDatabaseサブセクションは、単一のサーバー宣言内に複数存在することができます。
データベース・アクセスを制限するには、サーバー属性restrictAccessを"true"に設定する必要があります。
詳細は、「データベース・アクセスの制限」を参照してください。
<allowDatabase name="db specification" />
<server
name="srv2restrict"
type="RdbThinSrv"
url="//localhost:1701/"
restrictAccess="true">
<allowDatabase name="mf_pers"/>
<allowDatabase name="disk1:[databases]customers"/>
</server>
このサブセクションでは、サーバーによってアクセスが許可されるユーザー名を指定します。宣言するユーザー名は、Rdbによって認識される有効なユーザー名である必要があります。このレベルの制限に対するサーバーでのユーザー名のマッチングでは、大/小文字が区別されません。
このサブセクションは、サーバーの宣言内で使用する場合にのみ有効です。
allowUserサブセクションは、単一のサーバー宣言内に複数存在することができます。
ユーザー・アクセスを制限するには、サーバー属性restrictAccessを"true"に設定する必要があります。
詳細は、「ユーザー・アクセスの制限」を参照してください。
<allowUser name="username" />
<server
name="srv2restrict"
type="RdbThinSrv"
url="//localhost:1701/"
restrictAccess="true">
<allowUser name="smith"/>
<allowUser name="jones"/>
</server>
構成ファイルのセクション内では、一連の属性で次のようなファイル名を指定する必要があります。
§ cfg="<filename>"
§ log="<filename>"
§ srv.execStartup="<filename>"
§ srv.startup="<filename>"
ファイル名は、ファイル・パスが全部または一部含まれる可能性がある有効なOpenVMSファイルでなければならず、論理名を含むことができます。
論理名を使用する場合、サーバーが起動されるコンテキストで利用できる必要があり、ファイルはサーバーを起動するVMSユーザーからアクセスできる必要があります。
構成内で定義されているサーバーが、コントローラを使用して起動されるか、プール・サーバーによってプーリングされているサーバーとして起動されるか、またはOracle SQL/Servicesによって起動されると、該当するサーバーのためにデタッチされたプロセスが作成され、JavaおよびOracle Rdbにアクセスできる有効なプロセス環境がLOGINOUT.EXEの実行によって保証されます。
LOGINOUT.EXEプログラムが実行されるため、相対ファイル・パスを使用するファイル指定はすべて、起動者のログイン・ディレクトリに対して相対的である必要があります。そうでない場合は、完全ファイル指定を使用する必要があります。
Secure Sockets Layer(SSL)は、機密保護、メッセージの整合性、認証などのセキュリティをWebトラフィックに提供するために開発されました。SSLでは、暗号化、デジタル署名および証明書の使用により、その目的を達成しています。
Oracle JDBC for RdbのサーバーおよびThinクライアントでは、SSLを使用し、TCP/IP上で通信を実行できます。SSLの場合、SSL対応のサーバーはSSL対応のクライアントに対して自分自身の認証を実行し、SSL対応のクライアントはSSL対応のサーバーに対して自分自身の認証を実行できます。そして、両方のマシンで、暗号化された接続を確立できます。
SSLとThinドライバを併用する前に、JavaのセキュリティとSSLに関する一般的な概念に精通しておく必要があります。SSLとJavaのセキュリティに関する一般的な情報については、Javaのドキュメントを参照してください。
次の項では、SSLとThinドライバを併用する場合のSSLに関する情報を示しますが、JavaのセキュリティとSSLに関する基本的な理解が前提になります。
SSLの接続特性に関する情報を、クライアントにもサーバーにも渡す必要があります。また、通信チャネルを確立するには、SSLのセキュリティ特性に関してサーバーもクライアントも同意する必要があります。
さらに、クライアントもサーバーも、認可用の同じセキュリティ証明書を持つことが重要です。後述の項では、クライアントの接続リクエストでSSL特性をSSL対応のOracle JDBC for Rdbサーバーに渡す方法の詳細を示します。
クライアント・アプリケーションでは、Thinドライバに対する接続リクエスト時に、そのSSL特性を指定する必要があります。その最も簡単な方法は、DriverManager.getConnection()メソッドに渡されるプロパティ・ブロックに入れて余分なSSL情報を提供するという方法です。
そのSSL情報では、SSL接続に適した証明書の検索先や、接続設定時にSSLハンドシェークの実行に使用するコンテキストおよびプロトコルなどを示します。
Properties info = new Properties();
info.put("user", user);
info.put("password", password);
info.put("tracelevel", traceLevel);
info.put("ssl", "true");
info.put("ssl.default", "false");
info.put("ssl.context", "TLS");
info.put("ssl.keyManagerFactory", "SunX509");
info.put("ssl.keyStoreType", "jks");
info.put("ssl.keyStore", "rdbjdbccli.kst");
info.put("ssl.keyStorePassword", "CHANGETHIS");
info.put("ssl.trustStore", "rdbjdbccli.kst");
info.put("ssl.trustStorePassword", "CHANGETHIS");
Connection conn = DriverManager.getConnection(
"jdbc:rdbThin://bravo:1755/my_db_dir:pers", info);
SSL接続を試行するには、プロパティ・ブロックでプロパティsslにtrueを設定する必要があります。
また、SSL特性をプロパティとして明示的に指定したり、ssl.defaultにtrueを設定してシステムのデフォルトのSSL特性を使用するよう要求したりすることもできます。
Properties info = new Properties();
info.put("user", user);
info.put("password", password);
info.put("tracelevel", traceLevel);
info.put("ssl", "true");
info.put("ssl.default", "true");
Connection conn = DriverManager.getConnection(
"jdbc:rdbThin://bravo:1755/my_db_dir:pers", info);
ssl.*オプションの詳細は、「SSL構成オプション」を参照してください。
SSL接続を確立するには、アタッチ先のサーバーに適した証明書が、接続に対するSSLプロパティ内で指定されているキーストアの中にある必要があります。
証明書が見つからないと、次の例外が通知されます。
javax.net.ssl.SSLException: No available certificate corresponds to
the SSL cipher suites, which are enabled.
証明書の詳細は、Javaセキュリティのドキュメントを参照してください。
SSL構成情報とともに、SSL対応のサーバーも指定する必要があります。これは通常、XMLベースの構成ファイル内で指定したサーバーのserverセクション内で指定します。
サーバーがSSL対応であることを示すには、サーバーを次のいずれか1つのSSLサーバー・タイプとして定義する必要があります。
RdbThinSrvSSL
RdbThinSrvMPSSL
RdbThinSrvPoolSSL
<server
name="MYSSL"
type="RdbThinSrvSSL"
ssl.default="false"
ssl.context="TLS"
ssl.keyManagerFactory="SunX509"
ssl.keyStoreType="jks"
ssl.keyStore="rdbjdbcsrv.kst"
ssl.keyStorePassword="CHANGETHIS"
ssl.trustStore="rdbjdbcsrv.kst"
ssl.trustStorePassword="CHANGETHIS"
/>
SSL特性が同じ一連のSSL対応サーバーを定義するには、特別なDEFAULTSSLサーバーの定義を使用してデフォルトの特性を定義します。いずれか1つのSSLサーバー・タイプを持つ後続の各サーバー定義では、サーバー定義で明示的にオーバーライドされないかぎり、それらのデフォルトの定義を持ちます。
<server
name="DEFAULTSSL"
type="RdbThinSrvSSL"
ssl.default="false"
ssl.context="TLS"
ssl.keyManagerFactory="SunX509"
ssl.keyStoreType="jks"
ssl.keyStore="rdbjdbcsrv.kst"
ssl.keyStorePassword="CHANGETHIS"
ssl.trustStore="rdbjdbcsrv.kst"
ssl.trustStorePassword="CHANGETHIS"
/>
<server
name="SSLsrv1"
type="RdbThinSrvSSL"
url="//localhost:1707/"
/>
<server
name="SSLsrv2"
type="RdbThinSrvMPSSL"
url="//localhost:1708/"
sharedMem="10000"
/>
これらのオプションの詳細は、「SSL構成オプション」を参照してください。
プール・サーバーは、SSL対応である場合、セキュリティ上の理由から、そのプール内のプーリングされているサーバー(これもSSL対応)とのみ通信します。該当するプール内のプーリングされているサーバーで、SSL対応でないものは、無視され、接続リクエストのリダイレクトの候補とみなされます。
SSL対応のサーバーに対する接続はすべて、SSL接続を使用して確立する必要があります。これにはコントローラも含まれます。
コントローラを使用してSSL対応のサーバーを管理する場合は、サーバーに対してセキュアな接続を確立できるよう、コントローラ・セッションでも正確なSSL情報を持つ必要があります。
SSL対応のThinサーバーに接続する際にコントローラによって使用されるSSL情報は、適切なSSL情報がsessionセクションで指定されているXML書式の構成ファイルを使用してコントローラを起動すれば、指定できます。
<session
name="DEFAULT"
controlPass="jdbc_user"
user="cts1"
password="jdbc_user"
tracelevel="0"
srv.mcBasePort="5518"
srv.mcGroupIP="239.192.1.2"
ssl.default="false"
ssl.context="TLS"
ssl.keyManagerFactory="SunX509"
ssl.keyStoreType="jks"
ssl.keyStore="rdbjdbccli.kst"
ssl.keyStorePassword="CHANGETHIS"
ssl.trustStore="rdbjdbccli.kst"
ssl.trustStorePassword="CHANGETHIS"
/>
これは、「クライアントSSLの構成」で示したのと同じSSL情報です。
この情報を与えると、コントローラは該当するSSL構成を使用して、SSL対応のサーバーとしてポーリング・リクエストに応答する任意のサーバーに接続します。
設定が可能な様々なSSL構成オプションを、表5–1「SSL構成オプション」に示します。
表5-1 SSL構成オプション
オプション |
デフォルト値 |
説明 |
ssl.default |
false |
指定すると、デフォルトのSSLソケット・ファクトリを使用してSSLソケットが作成されます。
デフォルトのSSLソケット・ファクトリは、"ssl.ServerSocketFactory.provider"セキュリティ・プロパティ(Javaセキュリティ・プロパティ・ファイル内)の値を目的のクラスに設定すると、変更できます。
他のssl.*構成オプションはすべて、ssl.defaultが指定されていてtrueに設定されていると、無視されます。 ssl.defaultが指定されていないかfalseとして指定されている場合は、次のssl.*プロパティの値を使用してSSLソケット・ファクトリが作成されます。
|
ssl.context <ssl context> |
なし
|
使用するSSLコンテキスト("TLS"など)を指定します。 |
ssl.keyManagerFactory <keymanager factory>
|
なし |
使用するkeymanagerファクトリ("SunX509"など)を指定します。
|
ssl.keyStoreType <store type> |
なし |
キーストアのタイプ("jks"など)を指定します。
|
ssl.keyStore <store filename> |
なし |
キーストアのファイル名を指定します。
|
ssl.keyStorePassword <password> |
なし |
キーストアのパスワードを指定します。
|
ssl.trustStore <trust store filename> |
なし |
トラスト・ストアのファイル名を指定します。
|
ssl.trustStorePassword <password> |
なし
|
トラスト・ストアのパスワードを指定します。
|
次のサンプル・コードを使用すると、SSLの通信で使用可能な証明書の作成やコピーが行えます。この場合、クライアントとサーバーは、Java環境が設定済のOpenVMSノード上にあります。
キーストアやパスワードなどの情報は、使用する環境に合せて変更してください。
$! The following should be done on the Server node
$ write sys$output "Generating the Server KeyStore in file rdbjdbcsrv.kst
$ keytool –genkey –alias rdbjdbc-sv
-dname "CN=Jim Murray, OU=Rdb Engineering, O=Oracle, c=US"
-keypass "CHANGETHIS" –storepass "CHANGETHIS" –KeyStore rdbjdbcsrv.kst
$!
$write sys$output "Exporting the certificate from keystore to external file server.cer
$ keytool –export –alias rdbjdbc-sv –storepass "CHANGETHIS" –
-file server.cer –keystore rdbjdbcsrv.kst
$!
$!----------------------------------------------------------------------
$!
$! The following should be done on the client node
$!
$write sys$output "Generating the Client KeyStore in file rdbjdbccli.kst
$ keytool –genkey –alias rdbjdbc-cl –
-dname "CN=Rdbjdbc Client, OU=X, O=Y, L=Z, S=XY, C=YZ"
-keyalg RSA –keypass "CHANGETHIS" –storepass "CHANGETHIS" –keystore rdbjdbccli.kst
$!
$write sys$output "Exporting the certificate from keystore to external file client.cer
$ keytool –export –alias rdbjdbc-cl –storepass "CHANGETHIS"
-file client.cer –keystore rdbjdbccli.kst
$!
$!----------------------------------------------------------------------
$!
$! Exchange the certificates by copying the client certificate file (client.cer) to
$! The server node, and the server certificate file (server.cer) to the client node
$!
$!----------------------------------------------------------------------
$!
$! Now on the server node
$write sys$output "Importing Client’s certificate into Server’s keystore
$ keytool –import –v –trustcacerts –alias rdbjdbc –file client.cer
-keystore rdbjdbcsrv.kst –keypass "CHANGETHIS" –storepass "CHANGETHIS"
yes
$!
$!----------------------------------------------------------------------
$!
$! Now on the client node
$write sys$output "Importing Server’s certificate into Client’s keystore
$ keytool –import –v –trustcacerts –alias rdbjdbc –file server.cer
-keystore rdbjdbccli.kst –keypass "CHANGETHIS" –storepass "CHANGETHIS"
yes
前述のkeytoolコマンドは、Javaがインストールされているほとんどのオペレーティング・システムで正常に機能するはずです。
パスワードなどの値は、サーバーまたはクライアントのSSL接続構成プロパティで指定するのと同じように、二重引用符で囲む点に注意してください。
キーストアの設定が終わり、前述の項で示したようにクライアントおよびサーバーのSSLプロパティを正しく設定したら、Thinドライバ内でSSLを使用し、クライアント/サーバーの通信が行えます。
目次
Oracle JDBC for Rdbコントローラ(以降、「コントローラ」と表記)を使用すると、Oracle JDBC for Rdbサーバーの基本的な管理が行えます。
rdbthincontrol.jarファイルに含まれるこのアプリケーションを使用すると、パスワードで保護されたローカルおよびリモートのサーバー管理操作を、Thinサーバーまたはプール・サーバー上で実行できます。それらの操作には、現在接続されているクライアントの表示、クライアント・スレッドの停止、Thinサーバーの起動と停止が含まれます。
コントローラは、対話型モードまたはシングル・コマンド・モードで実行できます。対話型モードでは通常、管理対象のサーバーに接続し、管理リクエストを発行します。コントローラの使用が終わったら、exitコマンドを発行してイメージを終了することができます。
シングル・コマンド・モードの場合は、コマンドライン・スイッチを使用して、実行する必要があるアクションをコントローラに指示します。アクションが完了すると、コントローラ・イメージが終了します。
コントローラは通常、システム上で実行できるOracle JDBC for Rdbサーバーに関する情報を提供するXML書式の構成ファイルとともに使用されます。また、その構成ファイルからは、ポーリング操作の実行時に使用されるブロードキャスト・ポート情報などのセッション情報が提供される場合もあります。構成ファイルの詳細は、「構成ファイル」を参照してください。
コントローラを使用すると、サーバーの起動および停止や、サーバーおよび接続先クライアントに関するその他の操作が行えます。また、コントローラを使用すると、ネットワーク全体で稼働しているOracle JDBC for Rdbサーバーの現行ステータスを表示することもできます。
コントローラを対話型モードで使用する場合のセッションの例を次に示します。
rdbthincontrol> show stored servers
Stored server info
RDB$NODE : localhost
RDB$PORT : 1702
RDB$STATUS : not available
RDB$SERVER_NAME : SRV2
RDB$SERVER_TYPE : RdbThinSrv
RDB$SERVER_VERSION : not available
RDB$SERVER_SHR_VERSION : not available
RDB$SERVER_PID : not available
RDB$ALLOWS_ANON : false
RDB$ALLOWS_BYPASS : false
RDB$NUMBER_OF_CLIENTS : 0
RDB$MAX_CLIENTS : -1
RDB$NODE : localhost
RDB$PORT : 1701
RDB$STATUS : not available
RDB$SERVER_NAME : SRV1
RDB$SERVER_TYPE : RdbThinSrv
RDB$SERVER_VERSION : not available
RDB$SERVER_SHR_VERSION : not available
RDB$SERVER_PID : not available
RDB$ALLOWS_ANON : false
RDB$ALLOWS_BYPASS : false
RDB$NUMBER_OF_CLIENTS : 0
RDB$MAX_CLIENTS : -1
RDB$NODE : localhost
RDB$PORT : 1701
RDB$STATUS : not available
RDB$SERVER_NAME : DEFAULT
RDB$SERVER_TYPE : RdbThinSrv
RDB$SERVER_VERSION : not available
RDB$SERVER_SHR_VERSION : not available
RDB$SERVER_PID : not available
RDB$ALLOWS_ANON : false
RDB$ALLOWS_BYPASS : false
RDB$NUMBER_OF_CLIENTS : 0
RDB$MAX_CLIENTS : -1
rdbthincontrol> start server srv1
Starting server ...
.
RDB$NODE : 138.1.14.91
RDB$PORT : 1701
RDB$STATUS : Idle
RDB$SERVER_NAME : srv1
RDB$SERVER_TYPE : RdbThinSrv
RDB$SERVER_VERSION : T7.2-510 20070109 B719
RDB$SERVER_SHR_VERSION : T7.2-510 20061221 B6CL
RDB$SERVER_PID : 0x20238378(539198328)
RDB$ALLOWS_ANON : false
RDB$ALLOWS_BYPASS : false
RDB$NUMBER_OF_CLIENTS : 0
RDB$MAX_CLIENTS : -1
RDB$TRACE_LEVEL : 0
RDB$LOG_FILE : rdbjdbclog
RDB$RESTRICT_ACCESS : false
rdbthincontrol> poll
Polling servers ...
srv1(0) //138.1.14.91:1701/ (0x20238378<539198328>)
rdbthincontrol> start server srv2
Starting server ...
.
RDB$NODE : 138.1.14.91
RDB$PORT : 1702
RDB$STATUS : Idle
RDB$SERVER_NAME : srv2
RDB$SERVER_TYPE : RdbThinSrv
RDB$SERVER_VERSION : T7.2-510 20070109 B719
RDB$SERVER_SHR_VERSION : T7.2-510 20061221 B6CL
RDB$SERVER_PID : 0x2033137C(540218236)
RDB$ALLOWS_ANON : false
RDB$ALLOWS_BYPASS : false
RDB$NUMBER_OF_CLIENTS : 0
RDB$MAX_CLIENTS : -1
RDB$TRACE_LEVEL : 0
RDB$LOG_FILE : rdbjdbclog
RDB$RESTRICT_ACCESS : false
rdbthincontrol> poll
Polling servers ...
srv2(0) //138.1.14.91:1702/ (0x2033137C<540218236>)
srv1(0) //138.1.14.91:1701/ (0x20238378<539198328>)
rdbthincontrol> show active servers
Active server info
RDB$NODE : 138.1.14.91
RDB$PORT : 1702
RDB$STATUS : Idle
RDB$SERVER_NAME : srv2
RDB$SERVER_TYPE : RdbThinSrv
RDB$SERVER_VERSION : T7.2-510 20070109 B719
RDB$SERVER_SHR_VERSION : T7.2-510 20061221 B6CL
RDB$SERVER_PID : 0x2033137C(540218236)
RDB$ALLOWS_ANON : false
RDB$ALLOWS_BYPASS : false
RDB$NUMBER_OF_CLIENTS : 0
RDB$MAX_CLIENTS : -1
RDB$TRACE_LEVEL : 0
RDB$LOG_FILE : rdbjdbclog
RDB$RESTRICT_ACCESS : false
RDB$NODE : 138.1.14.91
RDB$PORT : 1701
RDB$STATUS : Idle
RDB$SERVER_NAME : srv1
RDB$SERVER_TYPE : RdbThinSrv
RDB$SERVER_VERSION : T7.2-510 20070109 B719
RDB$SERVER_SHR_VERSION : T7.2-510 20061221 B6CL
RDB$SERVER_PID : 0x20238378(539198328)
RDB$ALLOWS_ANON : false
RDB$ALLOWS_BYPASS : false
RDB$NUMBER_OF_CLIENTS : 0
RDB$MAX_CLIENTS : -1
RDB$TRACE_LEVEL : 0
RDB$LOG_FILE : rdbjdbclog
RDB$RESTRICT_ACCESS : false
rdbthincontrol> stop all servers
Successfully stopped Thin Server : srv1 (//138.1.14.91:1701/)
Successfully stopped Thin Server : srv2 (//138.1.14.91:1702/)
rdbthincontrol> poll
Polling servers ...
rdbthincontrol> exit
コントローラを使用すると、Oracle JDBC for Rdbサーバーの基本的な管理を実行できます。
コントローラは、OpenVMSのDCLコマンドラインから、シングル・コマンド・モードで実行するか、コマンドライン・インタフェースとして実行できます。
$java –jar rdb$jdbc_home:rdbthincontrol.jar [<option> | <command_keyword>]
有効なオプションについては、表6–1「コントローラのオプション」を参照してください。
有効なcommand_keywordについては、表6–2「コントローラのコマンド・キーワード」を参照してください。
サーバーが制御パスワードを所持していないと、コントローラでOracle JDBC for Rdbサーバーを管理することができません。
制御パスワードの指定の詳細は、「サーバーの構成オプション」を参照してください。
オプション |
デフォルト値 |
説明 |
-active |
n/a |
command_keywordとともに使用し、指定したアクティブなエンティティにのみ該当アクションが適用されることを指定します。
|
-all |
false
|
command_keywordとともに使用し、指定した全エンティティに該当アクションが適用されることを指定します。 |
-cfgまたは–configfile <configuration_filename>
|
なし |
セッション属性およびサーバー属性が検出される可能性がある構成ファイルのファイル指定。 該当する構成ファイル内で設定されている属性は、コマンドライン・レベルでの同一属性の設定により、無効化される場合もあります。 詳細は、「構成ファイル」を参照してください。
デフォルト時、構成ファイルは使用されません。
|
-controlpass <control password> |
なし
|
サーバーに接続する際に使用される制御パスワードを指定します。このパスワードは、同一のコマンドラインで指定されたすべてのpasswordオプションより優先されます。
|
-nまたは–node <node> |
なし |
接続先のサーバーが稼働しているノードを指定します。
|
-name <server name > |
なし |
サーバーの名前を指定します。この名前は、起動時構成ファイルの中でサーバー情報を検索するために使用されます。この名前の値は、大/小文字が区別されません。
|
-oem |
n/a |
リターン・ステータスおよびメッセージをOEMの用途に合せてフォーマッティングするよう示すために、OEMが使用します。
|
-pまたは–port <port_num> |
なし |
接続先サーバーがリスニングするポートを指定します。
|
-pwまたは–password <password>
|
なし |
制御接続の要求時にThinサーバーに送信されるパスワードを指定します。同一のコマンドライン上でcontrolpassオプションも検出された場合は、controlpassオプションが優先されます。
|
-srvargs <server_arguments>
|
なし
|
サーバーに接続する際に接続URL上で渡される追加の引数(@tracelevel=-1など)。
|
-srv.mcBasePort <base_port> |
.5517
|
マルチキャスト操作で使用されるベース・ポート番号を指定します。
|
-srv.mcGroupIP <group_ip> |
239.192.1.1
|
該当するサーバーが参加するマルチキャストIPグループを指定します。 |
-stored |
n/a
|
command_keywordとともに使用し、XML構成ファイルに格納されている指定エンティティに該当アクションが適用されることを指定します。
|
-tlまたは–tracelevel <trace_level> |
0 |
セッションのデフォルトのtracelevelを指定します。 値がゼロ(0)の場合、トレースは実行されません。
|
-uまたは–user <user_name> |
なし
|
サーバーに接続する際に使用されるユーザー名を指定します。 |
-url <connection URL> |
なし
|
接続先サーバーのノードのIPとポートを指定します。このスイッチは、指定されているportスイッチおよびnodeスイッチより優先されます。<connection URL>の書式は、//<node>:<port>/です。
|
これらの一連のオプションは、対話型コントローラ・セッションの起動に使用されるXML書式の構成ファイルのsessionセクションで指定することもできます。詳細は、「XML書式の構成ファイル」の「sessionセクション」を参照してください。
オプション |
説明 |
-poll |
アクティブなサーバーをロケーティングするために、ポーリング・リクエストが送出されます。詳細は、「サーバーのポーリング」を参照してください。
|
-startserver |
コマンドライン上の他のオプションによって指定したサーバーが起動されます。詳細は、「サーバーの起動」を参照してください。
|
-openserver |
コマンドライン上の他のオプションによって指定したサーバーがオープンされます。詳細は、「サーバーのオープン」を参照してください。
|
-closeserver |
コマンドライン上の他のオプションによって指定したサーバーがクローズされます。詳細は、「サーバーのクローズ」を参照してください。
|
-showserver
|
接続先のサーバーからサーバー情報を取得するshow serverコマンドが発行されます。詳細は、「サーバーの表示」を参照してください。
|
-showclients |
接続先のサーバーからクライアント情報を取得するshow clientsコマンドが発行されます。詳細は、「クライアントの表示」を参照してください。
|
-stopserver
|
コマンドライン上の他のオプションによって指定したサーバーが停止されます。詳細は、「サーバーの停止」を参照してください。
|
-stopclient <client_id>
|
指定したクライアント・スレッドを終了するよう接続先のサーバーに要求するstop clientsコマンドが発行されます。 <client_id>は、show clientsコマンドによって表示されるクライアントのIDです。詳細は、「クライアントの停止」を参照してください。<client_id>のデフォルト値はありません。
|
コントローラは、適切な接続情報とコマンド・キーワード(1つ)を指定して起動されると、該当するリクエストをサーバーに発行し(結果が表示される場合もある)、即座に終了します。
コマンド・キーワードが複数存在する場合は、前述の表で示した優先順位に従って、1つだけ発行されます。
コントローラに対するコマンド・キーワードの発行例:
$java -jar rdb$jdbc_home:rdbthincontrol.jar -u jan –
-controlpass mpass -node nd1 -port 1701 –stopserver
コントローラの起動時にコマンド・キーワードを1つも指定しないと、アプリケーションは複数のコマンドを発行できるコマンドライン・プロンプト・モードになります。
コントローラの起動時に有効な接続情報(ノード、ポート、ユーザーおよびパスワード)を指定すると、コントローラは指定されたサーバーに自動的に接続しようとします。
接続が確立されていない場合または別のサーバー接続が必要な場合は、制御コマンドラインでconnectコマンドを発行できます。詳細は、「サーバーへの接続」を参照してください。
connectコマンドラインでユーザー名およびパスワードを指定しないと、コントローラ起動時の構成オプションの値が使用されます。構成ファイルを指定すると、構成ファイルのセッション特性が使用されます。セッション特性の詳細は、「XML書式の構成ファイル」の「sessionセクション」を参照してください。
コマンドは、制御コマンドラインで、サーバー接続のコンテキスト内または特定のサーバー接続のコンテキスト外で発行できます。
サーバーに対する接続が確立された後で発行できるコマンドについては、「サーバー接続を必要とするコマンド」を参照してください。
サーバー接続を必要としないコマンドについては、「サーバー接続を必要としないコマンド」を参照してください。
$java -jar rdb$jdbc_home:rdbthincontrol.jar –cfg my_servers.xml
有効なサーバー接続が確立された後は、表6–3「コントローラのコマンドライン・コマンド(接続内)」のコマンドを発行できます。
コマンド |
説明 |
close server
|
現在の接続先サーバーがクローズされます。詳細は、「サーバーのクローズ」を参照してください。
|
disconnect |
現在の接続先サーバーから切断されます。
|
open server
|
現在の接続先サーバーがオープンされます。詳細は、「サーバーのオープン」を参照してください。
|
set logfile [<filename>] |
現在接続されているアクティブなサーバーのログ・ファイルが設定されます。このコマンドを使用すると、トレース・ログ・メッセージが別のログ・ファイルにリダイレクトされ、現在のログ・ファイルがクローズされます。<filename>を指定しない(値OFFに等しい)と、現在のログ・ファイルがクローズされ、ログ・メッセージはそのログ・ファイルに送られなくなります。
|
set default tracelevel <int> |
現在接続されているアクティブなサーバーのデフォルトのtracelevelが設定されます。このコマンドは、現在接続されているクライアントに影響を与えません。set default tracelevelが発行された後に接続されたクライアントだけが影響を受けます。
|
set tracelevel <int> |
現在接続されているアクティブなサーバーのtracelevelが設定されます。該当するサーバーに現在接続されている全クライアントのトレース・レベルが設定されます。 このコマンドの発行後に接続されたクライアントは、影響を受けません。
|
show clients |
現在の接続先サーバーの全クライアントが表示されます。詳細は、「クライアントの表示」を参照してください。
|
stop client <client_id> |
現在接続されているサーバー上の指定された<client_id>に一致するクライアントが停止されます。詳細は、「クライアントの停止」を参照してください。
|
stop clients
|
現在の接続先サーバーの全クライアントが停止されます。詳細は、「クライアントの停止」を参照してください。
|
stop server |
現在の接続先サーバーが停止されます。
|
watch [server] |
接続先サーバーから現在のコンソールに、トレース・ロギングが送られます。詳細は、「サーバーの監視」を参照してください。
|
$java -jar rdb$jdbc_home:rdbthincontrol.jar
rdbthincontrol> connect //localhost:1701/ jones mypassword
rdbthincontrol> show server
RDB$NODE : localhost
RDB$PORT : 1701
RDB$STATUS : Idle
RDB$SERVER_NAME : rdbthnsrv1
RDB$SERVER_TYPE : RdbThinSrv
RDB$SERVER_VERSION : V7.1-300 20040624 B46N
RDB$SERVER_SHR_VERSION : V7.1-300 20040624 B46N
RDB$SERVER_PID : 0x0B24(2852)
RDB$ALLOWS_ANON : false
RDB$ALLOWS_BYPASS : false
RDB$NUMBER_OF_CLIENTS : 0
RDB$MAX_CLIENTS : -1
rdbthincontrol>
rdbthincontrol> stop server
Successfully stopped Rdb Thin Server : //localhost:1701/
rdbthincontrol> exit
$
接続を確立しなくても発行できるコマンドは多数ありますが、pollおよびquit以外のコマンドではすべて、ユーザー名と制御パスワード(サーバーに接続して必要な情報を取得するために使用される)を指定する必要があります。それらのコマンドを、表6–4「コントローラのコマンドライン・コマンド(接続なし)」に示します。
表6-4 コントローラのコマンドライン・コマンド(接続なし)
コマンド |
説明 |
poll |
応答のあったサーバーに対するマルチキャスト・ポーリング。詳細は、「サーバーのポーリング」を参照してください。
|
set session controlpass <pwd>
|
セッション制御パスワードが設定されます。詳細は、「制御パスワード」を参照してください。
|
set default tracelevel <int> <server_ident>
|
指定したアクティブなサーバーのデフォルトのtracelevelが設定されます。このコマンドは、現在接続されているクライアントに影響を与えません。set default tracelevelが発行された後に接続されたクライアントだけが影響を受けます。
|
set logfile <filename> <server_ident> |
指定したアクティブなサーバーのログ・ファイルが設定されます。このコマンドを使用すると、トレース・ログ・メッセージが別のログ・ファイルにリダイレクトされ、現在のログ・ファイルがクローズされます。<filename>が値OFFの場合は、現在のログ・ファイルがクローズされ、そのログ・ファイルにログ・メッセージが送られなくなります。
|
set tracelevel <int> <server_ident> |
指定したアクティブなサーバーのtracelevelが設定されます。該当するサーバーに現在接続されている全クライアントのトレース・レベルが設定されます。 このコマンドの発行後に接続されたクライアントは、影響を受けません。
|
show active servers show all servers show server <server_ident>
|
サーバーの情報が表示されます。詳細は、「サーバーの表示」を参照してください。
|
show active clients show all clients
|
応答のあった全サーバー上のクライアントに関する情報が表示されます。詳細は、「クライアントの表示」を参照してください。
|
show active clients <name> show all clients <name>
|
応答のあった全サーバー上の、<name>というユーザー名を持つクライアントの情報が表示されます。詳細は、「クライアントの表示」を参照してください。
|
stop active clients stop all clients
|
応答のあった全サーバー上のすべてのクライアントが停止されます。 詳細は、「クライアントの停止」を参照してください。
|
stop active clients <name> stop all clients <name>
|
応答のあったすべてのサーバー上の、ユーザー名<name>のクライアントすべてが停止されます。詳細は、「クライアントの停止」を参照してください。
|
stop active clients in <database spec> stop all clients in <database spec>
|
指定したデータベースに該当クライアントが現在接続されている場合、応答のあった全サーバーのすべてのクライアントが停止されます。詳細は、「クライアントの停止」を参照してください。
|
stop active servers stop all servers stop server <server_ident>
|
アクティブなサーバーが停止されます。詳細は、「サーバーの停止」を参照してください。
|
open active servers open all servers open server <server_ident>
|
アクティブなサーバーがオープンされます。詳細は、「サーバーのオープン」を参照してください。
|
close active servers close all servers close server <server_ident>
|
アクティブなサーバーがクローズされます。詳細は、「サーバーのクローズ」を参照してください。
|
watch [server] <server_ident>
|
アクティブなサーバーが監視されます。詳細は、「サーバーの監視」を参照してください。
|
quitまたはexit
|
コントローラ・アプリケーションが終了します。 |
$java -jar rdb$jdbc_home:rdbthincontrol.jar -user jones –
-controlpass jdbc_user
rdbthincontrol> show active servers
RDB$NODE : localhost
RDB$PORT : 1701
RDB$STATUS : Idle
RDB$SERVER_NAME : rdbthnsrv1
RDB$SERVER_TYPE : RdbThinSrv
RDB$SERVER_VERSION : V7.1-300 20040624 B46N
RDB$SERVER_SHR_VERSION : V7.1-300 20040624 B46N
RDB$SERVER_PID : 0x0B30(2864)
RDB$ALLOWS_ANON : false
RDB$ALLOWS_BYPASS : false
RDB$NUMBER_OF_CLIENTS : 0
RDB$MAX_CLIENTS : -1
RDB$NODE : localhost
RDB$PORT : 1711
RDB$STATUS : Idle
RDB$SERVER_NAME : myserver
RDB$SERVER_TYPE : RdbThinSrv
RDB$SERVER_VERSION : V7.1-300 20040624 B46N
RDB$SERVER_SHR_VERSION : V7.1-300 20040624 B46N
RDB$SERVER_PID : 0x0B88(2952)
RDB$ALLOWS_ANON : false
RDB$ALLOWS_BYPASS : false
RDB$NUMBER_OF_CLIENTS : 0
RDB$MAX_CLIENTS : -1
rdbthincontrol>
サーバーは、指定された制御パスワードを認識できないと、エラー・メッセージを返します。
rdbthincontrol> show active servers
Failed to connect <CONTROL>
No Rdb Thin Server connection has been established
Unable to connect to server //localhost:1701/
Failed to connect <CONTROL>
No Rdb Thin Server connection has been established
Unable to connect to server //localhost:1711/
rdbthincontrol>
コントローラから発行できるコマンドのほとんどでは、サーバーと有効な制御接続を確立する必要があります。コントローラの起動時に有効な接続情報(ノード、ポート、ユーザーおよびパスワード)を指定すると、コントローラは指定されたサーバーに自動的に接続しようとします。
コントローラの起動時にユーザーおよびパスワードを指定すると、その情報はコマンド文で明示的にオーバーライドされないかぎり、コントローラのセッション全体で維持され、後続の接続リクエストで使用されます。
コマンドは、制御接続が確立されている場合にのみサーバー上で実行されます。制御接続を確立するには、接続リクエスト時に正しい制御パスワードを指定する必要があります。このパスワードの詳細は、「制御パスワード」を参照してください。
この制御接続は、connectコマンドを使用し、該当するセッションで明示的に確立することができます。また、アクセス制御が正常に実行されることが必要なサーバーにコマンドが発行される場合は、暗黙的に実行することもできます。多くのコントローラ・コマンドでは、コマンドの適用先サーバーを示し、サーバー接続情報を指定できます。また、その接続情報では、該当するサーバーで使用されるユーザー名およびパスワードを指定することもできます。
<command> <server_connection>
<server_connection>情報は、サーバーID文字列と、オプションの接続ユーザー名および制御パスワードから構成されます。
<server_ident> [<server_uid>]
<server_ident>文字列は、次のいずれか1つとすることができます。
• ポートID: //localhost:<port>/の発行と同じ
• フルURL(書式は//<node>:<port>/)
• サーバーの名前(コントローラを起動する場合に使用される構成と同じ)
<server_uid>は次のとおりです。
<username> [<password>]
制御接続を正常に実行するには、<password>はサーバーの制御パスワードと一致する必要があります。
コマンドラインでユーザー名またはパスワードを指定しないと、現在のセッション情報が使用されます。
この接続は、一度確立されると、明示的なdisconnectが発行されるか、別のサーバーに対して新しい接続が確立されるか、またはコントローラが終了するまで、維持されます。
接続を確立しないでコントローラ・コマンドを発行しようとすると、エラー状態が通知されます。
rdbthincontrol> watch
No Rdb Thin Server connection has been established
connectコマンドラインでユーザー名およびパスワードを指定しないと、コントローラの起動時に設定される適切な構成オプションの値が使用されます。構成ファイルを指定すると、構成ファイルのセッション特性が使用されます。セッション特性の詳細は、「XML書式の構成ファイル」の「sessionセクション」を参照してください。
接続が確立されていない場合、現在の接続が切断されている場合、または別のサーバー接続が必要な場合は、制御コマンドラインでconnectコマンドを発行できます。
connect [server] <server_connection>
このコマンドを実行すると、<server_connection>情報によって指定したサーバーに接続されます。
connectコマンドの使用例を次に示します。
rdbthincontrol> connect //localhost:1701/ jones mypassword
rdbthincontrol> connect server 1701
rdbthincontrol> connect myServer jim xxxxx
connectコマンドラインでユーザー名およびパスワードを指定しないと、コントローラの起動時に構成オプションに入力された値が使用されます。構成ファイルを指定すると、構成ファイルのセッション特性が使用されます。セッション特性の詳細は、「XML書式の構成ファイル」の「sessionセクション」を参照してください。
いくつかの制御コマンドでは、ターゲット・サーバーとの制御接続の確立が必要です。ターゲット・サーバーが現在接続されていない場合は、明示的に指定した接続情報とセッション接続情報が使用され、制御接続の確立が試行される場合があります。
接続情報は、次のように、該当するコマンドとともにコマンドラインで指定することもできます。
rdbthincontrol> stop server //localhost:1701/ jones mypassword
暗黙的な接続は、いったん確立されると、別の暗黙的な接続または明示的な接続によってオーバーライドされるまで、現在のセッション接続として確立されます。
アクティブなサーバーまたはクライアント上で操作を実行するには、制御パスワードを指定する必要があります。
このパスワードは、該当するアクティブなサーバーの制御パスワードに一致する必要があります。そうしないと、例外が通知され、該当する操作に失敗します。
コントローラを起動する場合、パスワードはコマンドライン・オプションとして指定することもできますし、「XML書式の構成ファイル」のsessionセクション内で指定することもできます。パスワードとcontrolPassを両方とも指定すると、controlPassが優先されます。
rdbthincontrol> stop server myMPServer
Failed to connect <CONTROL>
No Rdb Thin Server connection has been established
Unable to connect to server //localhost:1788/
また、制御パスワードは、コントローラのコマンドライン・プロンプトでset session controlpass文を使用し、セッションで設定することもできます。
rdbthincontrol> set session controlpass badpassword
rdbthincontrol> show server 1701
Failed to connect <CONTROL>
No Rdb Thin Server connection has been established
rdbthincontrol> set session controlpass mypassword
rdbthincontrol> show server 1701
RDB$NODE : 192.168.1.100
RDB$PORT : 1701
RDB$STATUS : Idle
RDB$SERVER_NAME : jiserv
RDB$SERVER_TYPE : RdbThinSrv
RDB$SERVER_VERSION : X7.1-301 20040713 B47C
RDB$SERVER_SHR_VERSION : X7.1-301 20040712 B47C
RDB$SERVER_PID : 0x1728(5928)
RDB$ALLOWS_ANON : false
RDB$ALLOWS_BYPASS : false
RDB$NUMBER_OF_CLIENTS : 0
RDB$MAX_CLIENTS : -1
ここでは、コントローラを使用し、サーバー上で対話型またはコマンド・モードで実行できる操作の詳細を示します。
この項で示す例では、Javaが設定済であり、次のDCL記号が環境内で設定済であることを前提としています。
$ thincontrol :== 'java' -jar rdb$jdbc_home:rdbthincontrol.jar –
–cfg my_servers.xml –controlpass "MySecretPassword"
それらの例で使用される構成ファイルの内容については、「構成ファイルの例(MY_SERVERS.XML)」を参照してください。
アクティブなサーバーは、コントローラを使用してクローズできます。その場合は、該当するサーバーの有効な制御パスワードを指定する必要があります。
サーバーをクローズすると、そのmaxClients属性がゼロ(0)に設定されるため、接続をそれ以上確立することができなくなります。すでに確立されている接続は、影響を受けません。クローズされているサーバーは、後でopenコマンドを発行し、再度オープンすることができます。その場合は、該当するサーバーのmaxClientsの値が再確立され、クローズする前の値に戻されます。詳細は、「サーバーのオープン」を参照してください。
制御パスワードが制御セッションの制御パスワードに一致するサーバーだけがクローズされます。
サーバーをクローズする際に利用できる対話型の制御コマンドを、表6–5「サーバーのクローズ(対話型モード)」に示します。
表6-5 サーバーのクローズ(対話型モード)
コマンド |
説明 |
close active servers close all servers |
応答のあったサーバーがすべてクローズされます。
|
close server
|
現在の接続先サーバーがクローズされます。 |
close server <server_connection>
|
サーバー接続情報によって指定したアクティブなサーバーがクローズされます。詳細は、「サーバーへの接続」を参照してください。
|
rdbthincontrol> close server myserver
rdbthincontrol> close server //prod_node:1766/
rdbthincontrol> close server 1701
rdbthincontrol> close active servers
rdbthincontrol> close server myserver george MySecretPassword
サーバーをクローズする際に利用できるコマンド・モードのコマンドを、表6–6「サーバーのクローズ(コマンド・モード)」に示します。
コマンド |
説明 |
-closeServer-active -closeServer -all
|
応答のあったサーバーがすべてクローズされます。次のコマンドライン・オプションは、存在していても、無視されます。
• -name • -node • -port • -URL
-allと–activeはこの場合、シノニムと考えられます。
|
-closeServer
|
他のコマンドライン・オプションの指定に従って該当サーバーがクローズされます。 |
$ thincontrol –closeServer –url //prod_node:1766/
$ thincontrol –closeServer–port 1701 –node localhost
$ thincontrol –closeServer –active
$ thincontrol –closeServer –name myserver
アクティブなサーバーは、コントローラを使用してオープンできます。その場合は、該当するサーバーの有効な制御パスワードを指定する必要があります。
サーバーをオープンすると、該当するサーバーを使用して、新しいクライアント接続を確立できます。
クローズされているサーバーは、openコマンドを発行し、再度オープンすることができます。その場合は、該当するサーバーのmaxClientsの値が再確立され、クローズする前の値に戻されます。
制御パスワードが制御セッションの制御パスワードに一致するサーバーだけがオープンされます。
サーバーをオープンする際に利用できる制御コマンドを、表6–7「サーバーのオープン(対話型モード)」に示します。
表6-7 サーバーのオープン(対話型モード)
コマンド |
説明 |
open active servers open all servers
|
応答のあったサーバーがすべてオープンされます。
|
open server
|
現在の接続先サーバーがオープンされます。 |
open server <server_connection>
|
サーバー接続情報によって指定したアクティブなサーバーがオープンされます。詳細は、「サーバーへの接続」を参照してください。
|
rdbthincontrol> openserver
rdbthincontrol> open server myserv
rdbthincontrol> openserver //prod_node:1766/
rdbthincontrol> open server 1701
rdbthincontrol> openall servers
rdbthincontrol> open server //prod_node:1766/ fred mypass
サーバーをオープンする際に利用できるコマンド・モードのコマンドを、表6–8「サーバーのオープン(コマンド・モード)」に示します。
コマンド |
説明 |
-openServer -active -openServer -all
|
応答のあったサーバーがすべてオープンされます。次のコマンドライン・オプションは、存在していても、無視されます。
• -name • -node • -port • -URL
-allと–activeはこの場合、シノニムと考えられます。
|
-openServer
|
他のコマンドライン・オプションの指定に従って該当サーバーがオープンされます。 |
$ thincontrol –openServer –url //prod_node:1766/
$ thincontrol –openServer–port 1701 –node localhost
$ thincontrol –openServer –active
$ thincontrol –openServer –name myserver
アクティブなサーバーおよび認識されているサーバーの情報は、コントローラを使用して表示できます。ただし、情報を表示するには、該当するサーバーの有効な制御パスワードを指定する必要があります。
すべてのサーバーまたはアクティブなサーバーを表示する場合は、制御パスワードが制御セッションの制御パスワードに一致するサーバーの情報だけが表示されます。
構成ファイルに格納されているサーバーまたは全サーバーを表示する場合は、構成ファイルに格納されているものとして全サーバーの定義が制御パスワードとは無関係に表示されます。
サーバーを表示する際に利用できる制御コマンドを、表6–9「サーバーの表示(対話型モード)」に示します。
表6-9 サーバーの表示(対話型モード)
コマンド |
説明 |
show active servers |
マルチキャスト・ポーリング・リクエストに応答したすべてのサーバーが表示されます。
|
show all servers |
アクティブなサーバーと、コントローラの起動に使用される構成ファイル内で検出されたサーバーの定義が表示されます。
|
show stored servers |
コントローラの起動に使用される構成ファイル内で検出されたサーバーの定義が表示されます。
|
show server |
現在の接続先サーバーの情報が表示されます。
|
show server <server_connection>
|
サーバー接続情報によって指定したアクティブなサーバーの情報が表示されます。詳細は、「サーバーへの接続」を参照してください。
|
rdbthincontrol> show server
rdbthincontrol> show server myserv
rdbthincontrol> show server //prod_node:1766/
rdbthincontrol> show server 1701
rdbthincontrol> show active servers
rdbthincontrol> show server //prod_node:1766/ fred mypass
サーバーを表示する際に利用できるコマンド・モードのコマンドを、表6–10「サーバーの表示(コマンド・モード)」に示します。
コマンド |
説明 |
-showServer -active -showServer -all
|
アクティブなサーバーと、コントローラの起動に使用される構成ファイル内で検出されたサーバーの定義が表示されます。 次のコマンドライン・オプションは、存在していても、無視されます。
• -name • -node • -port • -URL
-allと–activeはこの場合、シノニムと考えられます。
|
-showServer -stored
|
コントローラの起動に使用される構成ファイル内で検出されたサーバーの定義が表示されます。
|
-showServer |
他のコマンドライン・オプションの指定に従って該当サーバーが表示されます。
|
競合する複数のキーワードが同一のコマンドライン上で検出されると、次の優先順位に従ってアクションが1つだけ実行されます。
• -all
• -active
• -stored
• 指定されたサーバー
$ thincontrol –showServer –url //prod_node:1766/
$ thincontrol –showServer–port 1701 –node localhost
$ thincontrol –showServer –active
$ thincontrol –showServer –all
$ thincontrol –showServer –stored
$ thincontrol –showServer –name myserver
サーバーは、コントローラを使用して起動することができます。
コントローラが実行されているノードとは異なるノードまたはURLをサーバーで指定すると、例外が通知されます。
サーバーは現在、コントローラが実行されているのと同じノードが該当サーバーの構成で指定されている場合にのみ、起動できます。
リモート・サーバーの起動は現在、利用できません。
サーバーを起動する際に利用できる制御コマンドを、表6–11「サーバーの起動(対話型モード)」に示します。
コマンド |
説明 |
start all servers |
コントローラの起動時に使用されるXML書式の構成ファイルで指定されているautostartサーバーが起動されます。
autostart属性を持つサーバーとローカル・ホスト用のサーバーのみが起動されます。
|
start server
|
ローカル・ホスト上のタイプRdbThinSrvのサーバー(特性はすべてデフォルト)が起動されます。
|
start server <port id>
|
ローカル・ホスト上の指定されたポートをリスニングするタイプRdbThinSrvのサーバー(残りの特性はデフォルト)が起動されます。
|
start server <name>
|
指定した名前に一致するサーバーが起動されます。名前付きのサーバー定義の詳細は、「XML書式の構成ファイル」を参照してください。
|
rdbthincontrol> start server myserver
rdbthincontrol> start server 1799
rdbthincontrol> start server all
サーバーを起動する際に利用できるコマンド・モードのコマンドを、表6–12「サーバーの起動(コマンド・モード)」に示します。
コマンド |
説明 |
-startServer –all |
コントローラの起動時に使用されるXML書式の構成ファイルで指定されているautostartサーバーが起動されます。
autostart属性を持つサーバーとローカル・ホスト用のサーバーのみが起動されます。次のコマンドライン・オプションは、存在していても、無視されます。
• -name • -node • -port • -URL • -active
|
-startServer |
他のコマンドライン・オプションの指定に従って該当サーバーが起動されます。
|
$ thincontrol –startServer–port 1701 –node localhost
$ thincontrol –startServer –name myserver
$ thincontrol –startServer –all
アクティブなサーバーは、コントローラを使用して停止できます。その場合は、該当するサーバーの有効な制御パスワードを指定する必要があります。
制御パスワードが制御セッションの制御パスワードに一致するサーバーだけが停止されます。
サーバーを停止すると、該当するサーバー上のすべてのデータベース接続が強制的に終了され、クライアント・トランザクションの完了は待ちません。まずclose serverコマンドを使用してクライアント接続がさらに確立されるのを停止し、次にバインドされているクライアントが1つも存在しないときにstop serverコマンドを使用します。詳細は、「サーバーのクローズ」を参照してください。
サーバーを現在使用しているクライアントがあるかどうか確認するには、show serverまたはshow clientsコマンドを使用できます。詳細は、「サーバーの表示」を参照してください。
サーバーを停止する際に利用できる制御コマンドを、表6–13「サーバーの停止(対話型モード)」に示します。
コマンド |
説明 |
stop active servers stop all servers
|
応答のあったサーバーがすべて停止されます。
|
stop server
|
現在の接続先サーバーが停止されます。 |
stop server <server_connection>
|
サーバー接続情報によって指定したアクティブなサーバーが停止されます。詳細は、「サーバーへの接続」を参照してください。
|
rdbthincontrol> stop server
rdbthincontrol> stop server myserv
rdbthincontrol> stop server //prod_node:1766/
rdbthincontrol> stop server 1701
rdbthincontrol> stop active servers
rdbthincontrol> stop server //prod_node:1766/ fred mypass
サーバーを停止する際に利用できるコマンド・モードのコマンドを、表6–14「サーバーの停止(コマンド・モード)」に示します。
コマンド |
説明 |
-stopServer -active -stopServer -all
|
応答のあったサーバーがすべて停止されます。次のコマンドライン・オプションは、存在していても、無視されます。
• -name • -node • -port • -URL
-allと–activeはこの場合、シノニムと考えられます。
|
-stopServer
|
他のコマンドライン・オプションの指定に従って該当サーバーが停止されます。 |
$ thincontrol –stopServer –url //prod_node:1766/
$ thincontrol –stopServer–port 1701 –node localhost
$ thincontrol –stopServer –active
$ thincontrol –stopServer –name myserver
アクティブなサーバーのトレース出力を、コントローラのコンソールに表示できます。ただし、サーバーの有効な制御パスワードを指定しないと、そのトレースを監視することはできません。制御パスワードが制御セッションの制御パスワードに一致するサーバーだけが監視されます。
サーバーを監視する場合、該当するサーバーのトレース出力はすべて、コントローラを実行している現在のコンソールにも送られます。
トレース出力のメッセージ表示は、コマンドライン・インタフェースと非同期に実行されます。同じトレース情報は、サーバーのログ・ファイルにも送られます。
監視は、対話型モードでのみ利用できます。
サーバーはJavaログ出力を使用してトレース・メッセージをコントローラのようなリモート・コンソールにロギングするため、サーバーからの出力はバッファリングされてから、ネットワーク経由でコンソールに送信されます。つまり、バッファが満杯になった後消去されるので、トレース出力は散発的にコンソールに表示される可能性があります。
サーバーを監視する際に利用できる制御コマンドを、表6–15「サーバーの監視(対話型モード)」に示します。
コマンド |
説明 |
watch [server]
|
現在の接続先サーバーが監視されます。 |
watch server <server_connection>
|
サーバー接続情報によって指定したアクティブなサーバーが監視されます。詳細は、「サーバーへの接続」を参照してください。
|
rdbthincontrol> watch server myserv
rdbthincontrol> watch server //prod_node:1766/
rdbthincontrol> watch server 1701 jack password1
rdbthincontrol> watch
pollコマンドでは、マルチキャスト情報を使用して、応答のあったOracle JDBC for Rdbサーバーをポーリングします。
利用可能な各サーバーは、各自がリスニングするノードおよびポートに関する情報を使って応答します。また、ポーリング応答により、該当するノード上でサーバーが使用しているプロセスIDもわかります。
制御パスワードがなくても、pollコマンドは使用できます。
サーバーをポーリングする際に利用できる制御コマンドを、表6–16「サーバーのポーリング(対話型モード)」に示します。
コマンド |
説明 |
poll
|
アクティブなサーバーがポーリングされます。 |
rdbthincontrol> poll
Polling servers ...
myserver(0) //localhost:1711/ (0x0B88<2952>)
rdbthnsrv1(0) //localhost:1701/ (0x0B30<2864>)
rdbthincontrol>
サーバーをポーリングする際に利用できるコマンド・モードのコマンドを、表6–17「サーバーのポーリング(コマンド・モード)」に示します。
コマンド |
説明 |
-poll
|
アクティブなサーバーがポーリングされます。次のコマンドライン・オプションは、存在していても、無視されます。
• -name • -node • -port • -URL
|
$ thincontrol –poll
コントローラは、マルチキャスト・ポーリングを使用して、ネットワーク上で利用可能なOracle JDBC for Rdbサーバーを検出します。
マルチキャストは、ネットワーク接続を介して多数の接続先サーバーにデータを効率よくブロードキャストする1つのスタイルです。マルチキャストIPアドレスをリスニングするサーバーはすべて、ポーリング・リクエストのようなブロードキャストされるデータ・パケットを受信します。
Oracle JDBC for Rdbサーバーで使用するアドレスの管理有効範囲では、マルチキャスト転送をネットワーク内の明確な境界に、簡単に制限できます。
管理有効範囲は、マルチキャスト・グループのアドレス範囲に基づくマルチキャスト・トランスポートの制限です。それは、RFC 2365 「Administratively Scoped IP Multicast」によって定義され、次のアドレス範囲に制限されます。
239.0.0.0〜239.255.255.255
サーバー・マルチキャスト・ポーリングのIPアドレスは、次の範囲から選択できます。
239.192.0.0〜239.192.255.255
この範囲はIPv4 Organization Local Scopeとして知られており、そのサブネット・マスクは255.252.0.0です。これは、独自の内部用または組織用にマルチキャスト・スコープをプライベートに設定する組織全体で使用するためのものであり、グループ・アドレスは262,144個まで許可されています。
Rdbサーバーではデフォルト時、マルチキャストIP 239.192.1.1(ベース・ポートは5517)を使用します。
マルチキャスト・グループのIPアドレスは、srv.mcGroupIPオプションをサーバー構成ファイル内またはサーバー起動時のコマンドライン内で使用すると、サーバーに割り当てることができます。
srv.mcBasePortオプションを使用すると、マルチキャスト・ベース・ポートを変更できます。
サーバーがマルチキャスト・グループに入っていると、該当グループ内でのその存在は標準のマルチキャスト・プロトコルの一部として、定期的にブロードキャストされます。これは、ユーザーのネットワーク管理のネットワーク・ポリシーおよび手順と矛盾する場合があります。
マルチキャスト・ポーリングがシステム上で許可されていることを、ネットワーク管理者に確認してください。Rdbネイティブ・ドライバが使用できる特殊なIPアドレスおよびポート範囲をネットワーク管理者が割り当てる場合もあります。そのような場合は、割り当てられたそれらのアドレスが反映されるように、サーバーおよびセッションの構成ファイルを変更する必要があります。
マルチキャスト・ベース・ポートをゼロ(0)に設定すると、マルチキャスト/ブロードキャストと、該当サーバーにおけるその受取りを無効にすることができます。これは、コントローラによって発行されたポーリング・リクエストに該当サーバーが応答しないことも意味しています。
アクティブなサーバー内のクライアントに関する情報は、コントローラを使用して表示できます。その場合は、該当するサーバーの有効な制御パスワードを指定する必要があります。
クライアントが表示されるのは、制御パスワードが制御セッションの制御パスワードに一致するサーバーの場合のみです。
クライアントを表示する際に利用できる制御コマンドを、表6–18「クライアントの表示(対話型モード)」に示します。
表6-18 クライアントの表示(対話型モード)
コマンド |
説明 |
show active clients show all clients
|
応答のあったサーバーの全クライアントが表示されます。
|
show active clients <name> show all clients <name>
|
応答のあったサーバー上の、ユーザー名<name>のクライアントすべてが表示されます。
|
show active clients in <database_spec> show all clients in <database_spec>
|
応答のあった全サーバー上の指定したデータベースに現在接続されているすべてのクライアントが表示されます。
|
show clients
|
現在の接続先サーバー内の全クライアントが表示されます。 |
show clients in <database_spec>
|
現在の接続先サーバー上の指定したデータベースに現在接続されているすべてのクライアントが表示されます。
|
rdbthincontrol> show active clients
rdbthincontrol> show all clients fred
rdbthincontrol> show clients
rdbthincontrol> show clients in disk1:[dbc]pers
rdbthincontrol> show all clients in disk1:[dbc]pers
クライアントを表示する際に利用できるコマンド・モードのコマンドを、表6–19「クライアントの表示(コマンド・モード)」に示します。
コマンド |
説明 |
-showclients
|
応答のあったサーバーの全クライアントが表示されます。
次のコマンドライン・オプションは、存在していても、無視されます。
• -name • -node • -port • -URL • -all • -active
|
$ thincontrol –showclients
アクティブなサーバー内のクライアントは、コントローラを使用して停止できます。その場合は、該当するサーバーの有効な制御パスワードを指定する必要があります。
クライアントが停止されるのは、制御パスワードが制御セッションの制御パスワードに一致するサーバーの場合のみです。
データベース・ファイルを指定すると、該当するデータベースに現在接続されているクライアントだけが停止されます。データベース・ファイル指定は、show clientsの出力に表示されるものと同じである必要があります(大/小文字は区別されない)。
クライアントを停止すると、該当するクライアントの該当サーバー上のすべてのデータベース接続が強制的に終了され、クライアント・トランザクションの完了は待ちません。
show clientsコマンドを使用すると、該当するサーバーを現在使用しているクライアントがわかります。詳細は、「クライアントの表示」を参照してください。
次に示すコマンドで<client_id>を指定する場合、それはshow clientsコマンドから返されるクライアントIDに一致する必要があります。<client_id>の先頭のゼロ(0)は省略できます。
クライアントを停止する際に利用できる制御コマンドを、表6–20「クライアントの停止(対話型モード)」に示します。
コマンド |
説明 |
stop active clients stop all clients
|
応答のあったサーバーの全クライアントが停止されます。
|
stop active clients <name> stop all clients <name>
|
応答のあったサーバー上の、ユーザー名<name>のクライアントすべてが停止されます。
|
stop active clients in<database_spec> stop all clients in <database_spec>
|
応答のあった全サーバー上の指定したデータベースに現在接続されているすべてのクライアントが停止されます。
|
stop clients
|
現在の接続先サーバー内の全クライアントが停止されます。 |
stop clients in<database_spec> |
指定したデータベースに現在接続されているサーバーの全クライアントが停止されます。
|
stop client <client_id>
|
現在の接続先サーバー上の指定したクライアントが停止されます。
|
rdbthincontrol> stop active clients
rdbthincontrol> stop all clients fred
rdbthincontrol> stop clients
rdbthincontrol> stop client 0000000A
rdbthincontrol> stop all clients in disk1:[dbs]pers
クライアントを停止する際に利用できるコマンド・モードのコマンドを、表6–21「クライアントの停止(コマンド・モード)」に示します。
コマンド |
説明 |
-stopClient <client id>
|
現在の接続先サーバー上の指定したクライアントが停止されます。
次のコマンドライン・オプションは、存在していても、無視されます。 • -name • -node • -port • -URL • -active • -all
|
-stopClients |
現在の接続先サーバーの全クライアントが停止されます。 |
|
|
-stopClients -all -stopClients -active
|
応答のあったサーバーの全クライアントが停止されます。 次のコマンドライン・オプションは、存在していても、無視されます。 • -name • -node • -port • -URL
|
-stopClients -all –user<name> -stopClients –active –user<name>
|
応答のあったサーバー上の、ユーザー名<name>のクライアントすべてが停止されます。 次のコマンドライン・オプションは、存在していても、無視されます。 • -name • -node • -port • -URL
|
-stopClients –active -in <database_spec> -stopClients –all -in <database_spec>
|
応答のあった全サーバー上の指定したデータベースに現在接続されているすべてのクライアントが停止されます。 次のコマンドライン・オプションは、存在していても、無視されます。 • -name • -node • -port • -URL
|
-stopClients –in <database_spec> |
指定したデータベースに現在接続されているサーバーの全クライアントが停止されます。
|
$ thincontrol –stopClient 0000000A
$ thincontrol –stopClients –all
$ thincontrol –stopClients –active –in db_dir:mf_personnel
$ thincontrol –stopClients
Oracle SQL/Servicesの管理用コマンドラインを使用すると、Oracle SQL/Servicesリリース7.1.6以上で利用可能なJDBCと呼ばれる新しいディスパッチャ・プロトコルを使用して、サーバーの起動および停止を実行できます。
現在、Oracle JDBC for Rdbサーバーに対するOracle SQL/Servicesインタフェースは、最小限のものであり、JDBCディスパッチャ(該当するOracle JDBC for Rdbサーバーを起動または停止する)の起動および停止にのみ使用できます。
Oracle SQL/Servicesを使用してOracle JDBC for Rdbサーバーを起動するには、次の手順を実行します。
1. プロトコルJDBCを使用するSQL/Servicesディスパッチャを作成します。「Oracle SQL/Services JDBCディスパッチャの作成」を参照してください。
2. JDBCディスパッチャとOracle JDBC for Rdbサーバーを関連付けます。「サーバーに対するOracle SQL/Services JDBCディスパッチャの関連付け」を参照してください。
3. JDBCディスパッチャを起動する。「JDBCディスパッチャの起動」を参照。
ディスパッチャは、サーバーを起動するには、サーバーの名前とタイプ、および起動時に使用するコマンド・プロシージャと構成ファイルを特定する必要があります。
その実行方法を、次の項で説明します。
JDBCディスパッチャの作成とそのサーバーの関連付けの実例については、10.3項「Oracle SQL/ServicesによるOracle JDBC for Rdb Thinサーバーの設定と起動(例)」を参照してください。
JDBCという新しいSQL/Servicesディスパッチャ・プロトコルは、リリース7.1.6のOracle SQL/Servicesで導入されました。このディスパッチャ・タイプを使用すると、Oracle JDBC for Rdbサーバーと関連付けることができるJDBCディスパッチャを作成できます。
Oracle SQL/Servicesを使用してOracle JDBC for Rdbサーバーの起動および停止を実行するには、Oracle SQL/Services管理コンソールを使用して、プロトコルJDBCを使用するディスパッチャを定義する必要があります。
新しいディスパッチャには、一意な名前とnetwork_portを与える必要があります。PORT_IDが一意なものであることが重要です。指定したポートは関連付けられたOracle JDBC for Rdbサーバーによって使用され、1つのサーバーで一度にリスニングできるTCPIPポートは1つだけだからです。
CREATE DISPATCHER <dispatcher name> NETWORK_PORT TCPIP PORT_ID <port> PROTOCOL JDBC;
ここで、
<dispatcher name>は、該当するディスパッチャ・インスタンスの一意な名前。
<port>は、関連付けられたサーバーがリスニングするポート番号。
$ MCR SQLSRV_MANAGE71
SQLSRV> CONNECT SERVER;
SQLSRV> CREATE DISPATCHER JDBC_DISP NETWORK_PORT TCPIP PORT_ID 1880 PROTOCOL JDBC;
SQLSRV> SHOW DISPATCHER;
Dispatcher JDBC_DISP
State: UNKNOWN
Autostart: on
Max connects: 100 clients
Idle User Timeout: <none>
Max client buffer size: 5000 bytes
Network Ports: (State) (Protocol)
TCP/IP port 1880 Unknown JDBC clients
Log path: SYS$MANAGER:
Dump path: SYS$MANAGER:
既存のバージョンのOracle SQL/Services管理GUIは、タイプJDBCのディスパッチャを認識しません。
つまり、JDBCディスパッチャをいったん定義すると、該当するGUIを使用できなくなります。
各Oracle SQL/Services JDBCディスパッチャは、Oracle JDBC for Rdbサーバーと関連付ける必要があります。ディスパッチャの作成時に指定するPORT_IDは、この関係の鍵になります。
PORT_IDは、Oracle JDBC for Rdbサーバーによって使用されるTCPIPポートを指定します。そのため、関連付けられているサーバーの情報を特定するために、ディスパッチャの起動時プロシージャによって使用されます。
サーバーがリスニングするポートだけでなく、ディスパッチャはPORT_IDの使用により、次の項目も特定します。
• 起動されるOracle JDBC for Rdbサーバーのタイプ
• 該当するサーバーに与えられる名前
• 該当するサーバーで使用される構成ファイル
• サーバーの起動時プロシージャで実行されるDCLコマンド
JDBCディスパッチャによるPORT_IDの使用が過度になるのは、必然的なことです。JDBCディスパッチャのために格納される情報の量は、他のSQL/Servicesディスパッチャ・タイプのために格納される情報とともに保持されるため、最小限だからです。
サーバー属性を特定するプロセスで、ディスパッチャは次の論理名の変換を試みる場合があります。
• RDB$JDBC_SQSNAM_<port>
• RDB$JDBC_SQSCFG_<port>
• RDB$JDBC_SQSCMD_<port>
• RDB$JDBC_SQSTYPE_<port>
前述の論理名内の<port>は、論理名の変換より前にJDBCディスパッチャのPORT_IDに置き換えられます。
そのような論理名が存在しない場合、ディスパッチャは別の方法を使用してサーバーに名前を与え、適切なコマンド・プロシージャと構成ファイルを見つけようとします。その実行方法の詳細を、次の項で説明します。
関連付けられているOracle JDBC for Rdbサーバーを正しく起動するのに必要なサーバー情報を特定する際、ディスパッチャは次の手順を、指定された順序で実行します。
1. ディスパッチャはまず、サーバーの名前を作成します。
2. 次に、サーバーの起動時に実行する必要があるDCLコマンドが決定されます。
3. 次に、サーバーに渡される構成ファイルの指定が決定されます。
4. 次にサーバーのサーバー・タイプが決定されます。
サーバー名が必要なのは、その構成ファイルからプロパティを見つけるためにサーバーの起動時プロシージャによって使用される可能性があるからです。標準的なサーバーの様々な特性は、この使用される名前によって決まります。
また、サーバー名は、OpenVMSのプロセス名として使用され、サーバーがマルチプロセス・サーバーの場合は関連付けられているエグゼキュータの命名方法も決定します。
サーバー名は、サーバーの稼働中、ログ・ファイルおよび一時ファイルの作成でも使用されます。
PORT_IDは、次の手順を使用してOracle JDBC for Rdbサーバーの名前を決定する際に使用されます。
1. 論理名RDB$JDBC_SQSNAM_<port>が存在する場合は、それを変換してサーバー名が決定されます。
2. この論理名が存在しない場合、サーバー名はSQS<port>になります。
例1
論理名が定義されていない場合:
$ show log RDB$JDBC_SQSNAM_1888
%SHOW-S-NOTRAN, no translation for logical name RDB$JDBC_SQSNAM_1888
$ MCR SQLSRV_MANAGE71
SQLSRV> CONNECT SERVER;
SQLSRV> CREATE DISPATCHER JDBC_DISP NETWORK_PORT TCPIP PORT_ID 1888 PROTOCOL JDBC;
SQS1888という名前のサーバーが作成されます。
例2
論理名が定義されている場合:
$ DEFINE/SYSTEM RDB$JDBC_SQSNAM_1888 MY_POOL_SRV
$ MCR SQLSRV_MANAGE71
SQLSRV> CONNECT SERVER;
SQLSRV> CREATE DISPATCHER JDBC_DISP NETWORK_PORT TCPIP PORT_ID 1888 PROTOCOL JDBC;
MY_POOL_SRVという名前のサーバーが作成されます。
JDBCサーバーの起動時、次のDCLコマンド・プロシージャが実行されます。
RDB$JDBC_HOME:RDBJDBC_STARTSRV.COM
これは、Oracle JDBC for Rdbによって使用される標準的な起動コマンド・プロシージャであり、Oracle JDBC for Rdb製品のインストール時に自動的に作成されます。
このコマンド・プロシージャでは、一部の環境要素を設定してJavaコマンドを実行し、サーバーを起動します。SQL/ServicesのSTART DISPATCHERコマンドによって別のディスパッチャ・プロセスが設定され、このプロセス・コンテキスト内でJavaコマンドが実行されます。
RDBJDBC_STARTSRVコマンド・プロシージャは、ユーザーによって指定されている可能性がある特定の設定コマンド・プロシージャを見つけて実行しようとします。この処理は、最終的にサーバー・インスタンスを起動するJavaコマンドが実行されるプロシージャの前に実行されます。
起動される可能性があるOpenVMS DCLコマンド・プロシージャ(システムおよび環境の設定プロシージャも含まれる)の名前は、PORT_IDを使用して決定されます。該当するコマンド・プロシージャのファイル指定は、次の優先順位に従って決定されます。
1. 論理名RDB$JDBC_SQSCMD_<port>が存在する場合は、それを変換してコマンド・プロシージャのファイル指定が決定されます。
2. この論理名が存在しない場合、ディスパッチャはファイルrdb$jdbc_com:rdbjdbc_sqs_onStartup.comを見つけて実行しようとします。
3. このファイルが存在しない場合、ディスパッチャはファイルrdb$jdbc_home:rdbjdbc_sqs_onStartup.comを見つけて実行しようとします。
例1
論理名が未定義で、ファイルrdb$jdbc_com:rdbjdbc_sqs_onStartup.comが存在している場合:
$ show log RDB$JDBC_SQSCMD_1888
%SHOW-S-NOTRAN, no translation for logical name RDB$JDBC_SQSCMD_1888
$ MCR SQLSRV_MANAGE71
SQLSRV> CONNECT SERVER;
SQLSRV> CREATE DISPATCHER JDBC_DISP NETWORK_PORT TCPIP PORT_ID 1888 PROTOCOL JDBC;
ファイルRDB$JDBC_COM:RDBJDBC_SQS_ONSTARTUP.COMが実行されます。
例2
論理名が定義されている場合:
$ DEFINE/SYSTEM RDB$JDBC_SQSCMD_1888 RDB$JDBC_COM:MY_SRV1888_ONSTART.COM
$ MCR SQLSRV_MANAGE71
SQLSRV> CONNECT SERVER;
SQLSRV> CREATE DISPATCHER JDBC_DISP NETWORK_PORT TCPIP PORT_ID 1888 PROTOCOL JDBC;
RDB$JDBC_COM:MY_SRV1888_ONSTART.COMが実行されます。
PORT_IDは、サーバーの起動時に使用される構成ファイルの特定にも使用されます。該当するファイルは、CFGファイルまたはXML書式の構成ファイルであり、実行時に使用される特性に関する情報をサーバーに与えるために使用されます。構成ファイルの使用の詳細は、「構成ファイル」を参照してください。
各JDBCディスパッチャと関連付けられているサーバーに対して別々の構成ファイルを指定することもできますし、全サーバーのサーバー属性が含まれる単一のXML書式の構成ファイルを使用することもできます。
該当する構成ファイルは、論理名RDB$JDBC_SQSCFG_<port>(<port>は、論理名の変換前にPORT_IDに置き換えられる)の変換により、ディスパッチャによって決定されます。この論理名が存在しない場合、ディスパッチャはJDBCシステム・ディレクトリの構成ファイルを使用しようとします。
このファイル検索時の優先順位は、次のとおりです。
1. RDB$JDBC_SQSCFG_<port>によって指定されているファイル(存在する場合)
2. RDB$JDBC_COM:<server name>_CFG.XML(<server_name>は、直前の手順で決定されたサーバー名に置き換えられる)
3. RDB$JDBC_COM:SQLSRV_JDBC_SERVER_CFG.XML
4. RDB$JDBC_COM:RDBJDBCCFG.XML
論理名が未定義で、ファイルRDB$JDBC_COM:SQLSRV_JDBC_SERVER_CFG.XMLが存在している場合:
$ show log RDB$JDBC_SQSCFG_1888
%SHOW-S-NOTRAN, no translation for logical name RDB$JDBC_SQSCFG_1888
$ MCR SQLSRV_MANAGE71
SQLSRV> CONNECT SERVER;
SQLSRV> CREATE DISPATCHER JDBC_DISP NETWORK_PORT TCPIP PORT_ID 1888 PROTOCOL JDBC;
ファイルRDB$JDBC_COM:SQLSRV_JDBC_SERVER_CFG.XMLが使用されます。
論理名が定義されている場合:
$ DEFINE/SYSTEM RDB$JDBC_SQSCFG_1888 RDB$JDBC_COM:MY_SRV1888_CFG.XML
$ MCR SQLSRV_MANAGE71
SQLSRV> CONNECT SERVER;
SQLSRV> CREATE DISPATCHER JDBC_DISP NETWORK_PORT TCPIP PORT_ID 1888 PROTOCOL JDBC;
ファイルRDB$JDBC_COM:MY_SRV1888_CFG.XMLが使用されます。
Oracle SQL/Services JDBCディスパッチャと関連付けられているサーバーの起動時は、起動されるサーバーのタイプを特定する必要があります。
ディスパッチャは、このサーバー・タイプを使用して、サーバーの起動時に使用される適切なJDBC JARファイルを特定します。 サーバー・タイプは、サーバー・プロセスを正常にインスタンス化するために設定する必要があるその他のサーバー属性を決定する際にも使用されます。
ディスパッチャは、PORT_IDを使用して、起動する適切なJDBCサーバー・タイプを特定しようとします。
Oracle SQL/Servicesによって認識されるOracle JDBC for Rdbサーバーには、次の3つのタイプがあります。
· POOL: プール・サーバー(すなわちtype="RdbThinSrvPool")
· MP: マルチプロセス・サーバー(すなわちtype="RdbThinSrvMP")
· STD: 標準的なThinサーバー(すなわちtype="RdbThinSrv")
ディスパッチャがサーバー・タイプを決定する際は、次の手順が使用されます。
1. 論理名RDB$JDBC_SQSTYPE_<port>が存在する場合は、それを変換してサーバー・タイプが決定されます。変換後の論理名は、前述の有効なサーバー・タイプの1つである必要があります。
2. 該当する論理名が存在しない場合、サーバー・タイプはPOOLになります。
ディスパッチャは現在、サーバー名を使用してサーバー・タイプを決定することができません。そのため、起動するサーバーのタイプがプール・サーバー(すなわちtype="RdbThinSrvPool")でない場合は、この論理名を正しく設定することが重要です。それが正しく設定されていないと、間違ったJDBC JARファイルが使用され、サーバーが正しく起動されない可能性があります。サーバーと関連付けられているログ・ファイル(通常はディレクトリRDB$JDBC_LOGSに書き込まれる)には、起動時のエラーとそのエラーの理由が出力されます。
例1
論理名が定義されていない場合:
$ show log RDB$JDBC_SQSTYPE_1888
%SHOW-S-NOTRAN, no translation for logical name RDB$JDBC_SQSTYPE_1888
$ MCR SQLSRV_MANAGE71
SQLSRV> CONNECT SERVER;
SQLSRV> CREATE DISPATCHER JDBC_DISP NETWORK_PORT TCPIP
PORT_ID 1888 PROTOCOL JDBC;
タイプRdbThinSrvPoolのサーバーが作成されます。
例2
論理名が定義されている場合:
$ DEFINE/SYSTEM RDB$JDBC_SQSTYPE_1888 MP
$ MCR SQLSRV_MANAGE71
SQLSRV> CONNECT SERVER;
SQLSRV> CREATE DISPATCHER JDBC_DISP NETWORK_PORT TCPIP PORT_ID 1888 PROTOCOL JDBC;
タイプRdbThinSrvMPのサーバーが作成されます。
JDBCディスパッチャは、定義が完了すると、他のすべてのOracle SQL/Servicesディスパッチャの場合と同様に起動できます。
SQLSRV> start dispatcher jdbc_disp;
SQLSRV> show disp jdbc_disp;
Dispatcher JDBC_DISP
State: STARTING
Autostart: on
Max connects: 100 clients
Idle User Timeout: <none>
Max client buffer size: 5000 bytes
Network Ports: (State) (Protocol)
TCP/IP port 1880 Inactive JDBC clients
Log path: SYS$MANAGER:
Dump path: SYS$MANAGER:
SQLSRV> show disp jdbc_disp;
Dispatcher JDBC_DISP
State: RUNNING
Autostart: on
Max connects: 100 clients
Idle User Timeout: <none>
Max client buffer size: 5000 bytes
Network Ports: (State) (Protocol)
TCP/IP port 1880 Inactive JDBC clients
Log path: SYS$MANAGER:
Dump path: SYS$MANAGER:
Log File: SYS$SYSROOT:[SYSMGR]SQS_DECRDB_JDBC_DISP06O71.LOG;
Dump File: SYS$SYSROOT:[SYSMGR]SQS_DECRDB_JDBC_DISP06O.DMP;
Oracle SQL/Servicesモニターは、該当するディスパッチャに関連付けられているサーバーを起動して、次の名前を持つログ・ファイルの中のSYS$MANAGERディレクトリ内にディスパッチャ・イベントのログを作成しようとします。
SYS$MANAGER:SQS_<nodename>_JDBC_DISP<nnnnn>.LOG
<nodename>は、ディスパッチャが起動されたノードです。
<nnnnn>は、Oracle SQL/Servicesから該当するディスパッチャ・インスタンスに与えられる一意なIDです。
次に例を示します。
SQS_MALIBU_SQLSRV_DIS06010.LOG
このログは、ディスパッチャが正しく起動されなかった理由を特定する際に便利な場合があります。たとえば、Oracle JDBC Drivers for Rdbのインストールで指定されたような適切な論理名が設定されていないと、ログ・ファイルの末尾に次のようなメッセージが出力される場合があります。
.
.
.
$ @rdb$jdbc_home:rdbjdbc_startsrv SQS1880 "SQS"
%DCL-E-OPENIN, error opening RDB$JDBC_HOME:[SYSMGR]RDBJDBC_STARTSRV.COM; as input
-RMS-F-DEV, error in device name or inappropriate device type for operation
SYSTEM job terminated at 21-JUL-2004 21:52:07.56
Accounting information:
Buffered I/O count: 37 Peak working set size: 2272
Direct I/O count: 14 Peak virtual size: 173072
Page faults: 192 Mounted volumes: 0
Charged CPU time: 0 00:00:00.04 Elapsed time: 0 00:00:00.21
STOP DISPATCHER文を使用すると、実行中のJDBCディスパッチャを停止できます。
SQLSRV> STOP DISPATCHER JDBC_DISP
この文により、関連付けられているOracle JDBC for Rdbサーバーも停止されます。
JDBCディスパッチャとプール・サーバーが関連付けられていて、プーリングされているサーバーのautoStartが有効になっていると、それらプーリングされているサーバーも該当する時点で停止されます。
Oracle SQL/Services管理コンソールの詳細は、Oracle SQL/Servicesのドキュメントを参照してください。
JDBCディスパッチャが起動されると、Oracle SQL/Servicesは次のようなOpenVMSコマンド・プロシージャを使用して、
SYS$MANAGER:SQLSRV_JDBC_SERVER_STARTUP<version>.COM
JDBCディスパッチャに関連付けられているサーバーを起動します。
SQL/Servicesの複数のバージョンがシステム上に存在する可能性があるので、Oracle JDBC for Rdbのインストールでは複数のバージョンのSQLSRV_JDBC_SERVER_STARTUPコマンド・プロシージャが用意されます。このコマンド・プロシージャの<version>により、関連付けられるSQL/Servicesのバージョンが決まります。そのため、
SYS$MANAGER:SQLSRV_JDBC_SERVER_STARTUP71.COM
このコマンド・プロシージャが、JDBCディスパッチャの起動時にバージョン7.1のSQL/Servicesによって使用されます。
それらのコマンド・プロシージャにより、次のコマンド・プロシージャが実行されます。
RDB$JDBC_HOME:RDBJDBC_STARTSRV.COM
そのため、複数のバージョンのOracle JDBC for Rdbをシステム上に置き、それぞれ異なる起動要件をRDBJDBC_STARTUP.COM内で指定できます。 SQL/Services環境内の論理名RDB$JDBC_HOMEを使用すると、使用される特定のバージョンのOracle JDBC for Rdbを選択できます。
また、別のOpenVMSコマンド・プロシージャを定義して、システムに必要な環境特性を設定することもできます。該当するコマンド・プロシージャは、次の優先順位に従って検索され、該当するサーバーとともに使用されます。
1. 論理名RDB$JDBC_SQSCMD_<port>によって指定されているファイル(定義されている場合)
2. RDB$JDBC_COM:RDBJDBC_SQS_ONSTARTUP.COM
3. RDB$JDBC_HOME:RDBJDBC_SQS_ONSTARTUP.COM
コマンド・プロシージャは、この検索リストを使用してシステム上で見つかった場合、サーバーが起動される直前に実行されます。 このコマンド・プロシージャを使用すると、次のようなサーバー実行のための環境条件を設定できます。
$@sys$share:rdb$setver 71
$@sys$common:[java$141.com]JAVA$141_SETUP.COM
定義されているどのJDBCディスパッチャも、1つのサーバーにのみ関連付けることができます。単一のディスパッチャでサーバーを複数起動する必要がある場合は、プール・サーバーを使用してください。
プール・サーバーで使用可能なサーバー・プール(一連のサーバーから構成されるプール)を定義し、それらの各サーバー上でautoStartを有効にすると、単一のディスパッチャを起動することにより、サーバー・プール全体を起動できます。プール・サーバーの詳細は、「プール・サーバーの操作」を参照してください。
次の例では、ディスパッチャを定義してプール・サーバーを起動し、そのプールの一部として3つの標準的なThinサーバーが自動的に起動されるようにする方法を示します。
この例では、サーバーのデフォルトの命名法、デフォルトのサーバー・タイプ(POOL)および標準的なSQS_ONSTARTUPコマンド・プロシージャを使用します。RDB$JDBC_SQS*の論理名の設定は不要です。
Oracle SQL/Servicesディスパッチャを定義します。
$ MCR SQLSRV_MANAGE71
SQLSRV> CONNECT SERVER;
SQLSRV> CREATE DISPATCHER POOL_DISP NETWORK_PORT TCPIP PORT_ID 1880 PROTOCOL JDBC;
該当するサーバーの構成ファイルをRDB$JDBC_COM:SQS1880_CFG.XML内で作成します。
<?xml version = '1.0'?>
<!-- Configuration file for Rdb Thin JDBC Drivers and Servers -->
<config>
<!-- SERVERS -->
<servers>
!-- DEFAULT server characteristics-->
server
name="DEFAULT"
type="RdbThinSrv"
url="//localhost:1880/"
maxClients="-1"
srv.bindTimeout="0"
srv.idleTimeout="0"
srv.mcBasePort="5520"
srv.mcGroupIP="239.192.1.10"
autoStart="false"
controlUser="jdbc_user"
controlPass="0x811B15F866179583EB3C96751585B843"
cfg="rdb$jdbc_com:sqlsrv_jdbc_server_cfg.xml"
srv.startup="rdb$jdbc_home:rdbjdbc_startsrv.com"
srv.onStartCmd="@rdb$jdbc_com:rdbjdbc_sqs_onstartup.com"
!-- now the servers that will be started up by pool server -->
<server
name="SQSrjs1"
type="RdbThinSrv"
url="//localhost:1891/"
autoStart="true"
maxClients="10"
<server
name="SQSrjs2"
type="RdbThinSrv"
url="//localhost:1892/"
autoStart="true"
maxClients="10"
<server
name="SQSrjs3"
type="RdbThinSrv"
url="//localhost:1893/"
autoStart="true"
maxClients="10"
!-- Pool Server -->
<server
name="SQS1880"
type="RdbThinSrvPool"
url="//localhost:1880/" >
<pooledServer name="SQSrjs1"/>
<pooledServer name="SQSrjs2"/>
<pooledServer name="SQSrjs3"/>
</server>
</servers>
</config>
システムに適したRdbおよびJavaのバージョンを設定するonStartupコマンド・プロシージャを作成します。
たとえば、RDB$JDBC_COM:RDBJDBC_SQS_ONSTARTUP.COMには、次のものが含まれている場合があります。
$@sys$share:rdb$setver 71
$@sys$common:[java$141.com]JAVA$141_SETUP.COM
ディスパッチャを起動します。
SQLSRV> start dispatcher pool_disp;
この例では、XML構成ファイル内のデフォルトのsrv.onStartCmdによって指定されているコマンド・プロシージャが、SQS_ONSTARTUPコマンド・プロシージャとして作成されているものと、たまたま同じになっています。これらは、同一のコマンド・プロシージャでなくてもかまいません。
Oracle SQL/Services JDBCディスパッチャのSQS_ONSTARTUPコマンド・プロシージャは、関連付けられているプール・サーバーの起動時に使用されます。プール・サーバーによって起動される一連のサーバーでは、srv.onStartCmdスイッチによって指定されているコマンド・プロシージャを使用します。
Oracle SQL/Services JDBCディスパッチャでJDBC XML構成ファイルの情報を直接使用することはありません。
デフォルトでは、Thinドライバがデータベース接続の際に空白のユーザー名を受け取ることは許可されていません。該当するデータベースに適した有効なユーザー名を指定する必要があります。クライアントが空白のユーザー名を使用してデータベースに接続しようとすると、次の例外が通知されます。
rdb.RdbException: Io exception : Io exception :
in <rdbjdbcsrv:connect>
%RDB-E-AUTH_FAIL, authentication failed for user .Anonymous.
この動作は、次のサーバー構成オプションを使用すると変更できます。
anonymous
このオプションを使用すると、匿名接続(つまり、ユーザー名が空白の接続)を許可するようOracle JDBC for Rdb Thinサーバーに指示することができます。例を次に示します。
$ java -jar rdbthinsrv.jar -anonymous
また、匿名接続が許可されると、次のオプションを使用することにより、デフォルトのユーザー名およびパスワードを匿名接続で使用するよう指定することができます。
username <username>
password <password>
次に例を示します。
$ java -jar rdbthinsrv.jar -anonymous –
-username fred -password "jones"
Oracle Rdbでの権限チェックでは、階層型の方法が使用されます。権限チェックでその結果が得られる過程が明確でない場合もあります。
§ 権限チェックでの最初のパスはオブジェクト識別子のレベルで実行され、該当するエンティティが該当オブジェクトに対して該当アクションを実行する権利を持つかどうかが尋ねられます。このレベルでアクセスが拒否されると、権限を取得するための一連の試行が実行されます。
§ オブジェクト保護のチェックが終わると、該当するエンティティのデータベースにおける権限がチェックされます。エンティティは、DBADMが付与されていると、CREATEのような明示的な権限を所持していない場合でも、該当する操作の実行が許可されます。この権限は、OpenVMSのBYPASSに酷似したcatch allの一種です。
§ エンティティにデータベース・レベルでの権限がまだ付与されない場合は、アプリケーションが実行されているOpenVMSユーザーのOpenVMSの権限がチェックされます。
§ ユーザーは、適切なレベルの権限を所持していると、該当するオブジェクトに対する該当アクションの実行が許可されます。
つまり、Oracle JDBC for Rdbサーバー内での権限チェックは、データベース内で接続ユーザーに割り当てられる権限だけでなく、サーバー・アプリケーション(エグゼキュータ)を起動したOpenVMSユーザーの権限にも依存しています。
注意:
エグゼキュータは、該当するアプリケーションが実行されているOpenVMSユーザーに対して使用される標準的な用語です。マルチプロセス・サーバーで使用されるエグゼキュータ・プロセスと混同しないでください。
そのため、該当するユーザーがアクセスできないデータにアクセスする権限を持つサーバーを設定することができます。つまり、データベース内のデータは、Oracle JDBC for Rdbサーバーを介す場合にかぎり、ユーザーからのアクセスを制限し、ユーザーからの直接アクセスを禁止することができます。
制限付きアクセスが必要な場合は、エグゼキュータにのみ制限付きアクセス権を付与し、最低限の権限を設定します。その後、接続ユーザーに、必要なアクセス権が得られるように、適切な権限を付与します。接続ユーザーがそのような権限を所持せず、エグゼキュータも該当する権限を所持しない場合は、アクセスが拒否されます。接続ユーザーがそのような権限を所持している場合は、エグゼキュータが該当する権限を所持していなくても、アクセスは許可されます。
Thinサーバー内では、BYPASSおよびSYSPRVの権限がデフォルトで禁止されています。ユーザーは、自分に付与されている権限のみを取得し、エグゼキュータから権限を継承することはありません。
BYPASS権限を指定して実行するにはサーバーが稼働している必要があり、それにより権限の低いユーザー・アクセス権をデータベース・オブジェクトに許可する場合は、-bypassオプションを使用します。
マルチプロセス・サーバーを使用する場合は、別のエグゼキュータ・プロセスを使用して、データベース操作を実行します。このエグゼキュータ・プロセスは、起動元のサーバー・プロセスから権限および認可特性を継承します。
そのため、前述のような情報は、サーバー・プロセスについて説明したのとまったく同じ方法で、エグゼキュータ・プロセスに適用されます。
Oracle JDBC for Rdb Thinサーバーの稼働中、サーバー・プロセスを起動したユーザーのデフォルトの権限と識別子を前提としています。それと同様に、SQL Services JDBCディスパッチャによって起動されたサーバーは、SQL/Servicesディスパッチャ・プロセスの権限および識別子を継承します。
この動作は、XML書式の構成ファイル内のサーバー定義でpersona値を指定するか、サーバーの起動時にコマンドラインでpersonaスイッチを指定すると、変更できます。
personaを指定して起動されると、サーバー・プロセスは指定されたpersonaからその権限と識別子を継承します。
BYPASSおよびSYSPRVの権限は、この場合もデフォルトで禁止されています。詳細は、「BYPASS権限」を参照してください。
特定のpersonaを指定してサーバーを起動するには、IMPERSONATE権限およびシステム認可データベースに対する読取りのアクセス権を備えたアカウントにログインする必要があります。
サーバーに関連付けるpersona値は、サーバーが稼働しているシステム上のOpenVMSの有効なpersonaである必要があります。
personaオプションの書式については、「サーバーの構成オプション」を参照してください。
personaをサーバーで使用する場合は、使用するpersonaがJDBCコマンド・プロシージャとJDBCログ・ディレクトリに対する適切なアクセス権を所持していることを確認する必要があります。
プール・サーバーまたはマルチプロセス・サーバーでpersonaを使用する場合、これは特に重要です。
サーバーは、他の操作を実行する前に、指定されたpersonaを仮定し、デフォルト時はBYPASSを無効にします(「BYPASS権限」を参照)。そのため、サーバーはその時点以降、指定されたpersonaに基づいて動作するので、該当するpersonaに与えられた権限と認可に制限されます。
personaの使用時は、マルチプロセス・サーバーもプール・サーバーも、RDB$JDBC_COMディレクトリに対しては読取り/実行/書込みのアクセス権、RDB$JDBC_LOGディレクトリに対しては読取り/書込みのアクセス権を所持する必要があります。
デフォルト時は、JDBCドライバをインストールすると、これらのディレクトリがインストール先のディレクトリに作成され、それら両方のディレクトリに対するアクセス権がworld READ/EXECUTEに設定されます。これらのディレクトリに対するファイル保護を変更し、personaにWRITEのアクセス権を付与する必要があります。
これらの論理名を別のディレクトリにリダイレクトしてある場合は、それらのディレクトリに対してpersonaが読取り/書込みのアクセス権を所持していることを確認する必要があります。
詳細は、「ファイルおよびディレクトリに関するアクセス要件」を参照してください。
トランザクションが必要なときにOracle JDBC for Rdbドライバが起動するトランザクションのタイプは、次のような一連の条件によって決まります。
• autoCommitが有効かどうか
• 実行対象のSQL文の演算子
• 接続スイッチtransactionを使用して接続上で指定されるデフォルトのトランザクション・タイプ
• 接続内でのトランザクション・タイプの設定(Connection.setReadOnly()やConnection.setTransactionIsolation()などのメソッドによって変更される場合)
特定の動作が指定されていない場合はデフォルト時、Oracle JDBC for RdbドライバはAUTOCOMMITモードで起動され、SQL文が読取り/書込みのトランザクション(INSERT、UPDATEなど)を必要とする場合はREAD_WRITE SERIALIZABLEのトランザクションを起動します。読取り/書込みのトランザクションが必要でない場合は、READ_ONLYのトランザクションが起動されます。
AUTOCOMMITが無効な場合、起動されるトランザクションのタイプは、接続が読取り専用に設定されているかどうか、および接続に対してデフォルトのトランザクション・タイプが指定されているかどうかによって決まります。デフォルト時は、autoCommitが無効で、デフォルトのトランザクション・タイプを変更するために別のメソッドがコールされていないのであれば、READ_WRITE SERIALIZABLEのトランザクションが起動されます。
接続におけるトランザクション・タイプの設定がMANUALの場合は、このデフォルトの動作が変更されます。トランザクションがMANUALに設定されていると、クライアントがトランザクションを起動します。ドライバは、トランザクションを起動しません。ただし、autoCommitが有効な場合、ドライバはトランザクションを適宜コミットします。
トランザクションがMANUALに設定されていて、接続後またはトランザクション終了後初めての操作がSET TRANSACTIONでない場合は、クライアントのかわりにOracle Rdbがトランザクションを起動します。SQLによるデフォルト・トランザクションのメカニズムについては、Oracle Rdbのドキュメントを参照してください。
Rdbネイティブ・ドライバ使用時のマルチスレッドによるデータベースへの同時アクセスを改善するには、接続リクエストごとに別々のサブプロセス・エグゼキュータを起動するような指定が必要な場合もあります。
デフォルト時、標準のRdbネイティブ・ドライバ・インスタンス内でのデータベース操作はすべて、単一のOpenVMSプロセス内で同期的に実行されます。このような同期化が必要なわけは、Rdbの場合、1つのスレッドで一度に1つのデータベース操作しか実行できないからです。そのため、Rdbネイティブ・ドライバをマルチスレッド環境で使用すると、全般的な同時実行性が制限される可能性があります。
マルチスレッド環境で同時実行性を改善するには、データベース接続ごとに別々のエグゼキュータを起動するようRdbネイティブ・ドライバに要求します。
データベース接続ごとに別々のエグゼキュータを起動するには、データベース接続で使用する接続URLに対してマルチプロセス・スイッチを指定する必要があります。
Connection conn = DriverManager.getConnection(
"jdbc:rdbNative:my_db_dir:pers@multiprocess=true",
user, pass);
ただし、このスイッチは、Rdbネイティブ・ドライバを使用する場合にのみ利用できます。
接続が確立されるたびに別のサブプロセスが作成されるので、エグゼキュータ・プロセスによってSYS$OUTPUTおよびSYS$ERRORに書き込まれる出力は、該当するサブプロセスに固有なログ・ファイルにリダイレクトされます。 プロセスがログ・ディレクトリRDB$JDBC_LOGSに対して書込みのアクセス権を所持していることを確認する必要があります。
メイン・プロセスがエグゼキュータ・プロセスを起動するとき、それら2つのプロセス間でハンドシェーク・プロトコルが確立され、それら2つのプロセスは以降プロセス間通信を実行できるようになります。
メイン・プロセスは、ハンドシェークの確立を100回すばやく連続して試行した後、デフォルト時は10ms間隔でその試行をもう500回実行します。
ワークロードが大きな一部のシステム(特に単一CPUシステム)では、サブプロセスの作成後、メイン・プロセスによる通信の確立が失敗することもあります。 プロセスおよびスレッドのスケジューリングによっては、サブプロセスの実行がスケジューリングされる前に、ハンドシェークを確立するための最大試行回数に到達してしまう場合もあります。
そのようなシステムでは、ハンドシェークの試行回数またはハンドシェーク試行間の待ち時間を増やし、ドライバとエグゼキュータの間の早期中断を回避することが必要な場合もあります。接続文字列でhandshakeTriesおよびhandshakeWaitオプションを使用すると、これらの値を変更できます。
詳細は、「接続オプション」を参照してください。
StatementおよびResultSetでSetFetchSizeメソッドを使用すると、サーバー・レコード取得時のレコードのフェッチ・サイズを設定できます。FetchSizeは、一度に取得してネットワーク経由で返送するレコード件数に関するヒントをサーバーに提供します。
ネットワークI/Oは非常に高価であるため、単一のI/Oで送信できるデータ量が増えると、パフォーマンスが向上します。FetchSizeオプションを使用してデフォルトのFetchSizeを明示的に変更しなかった場合のデフォルト値は、100です。
Oracle JDBC for Rdbドライバでは現在、メソッドStatement.cancel()がサポートされていません。アプリケーションがこのメソッドをコールすると、Oracle JDBC for Rdbドライバから次の例外が通知されます。
oracle.rdb.jdbc.common.RdbException: Unsupported feature <Statement.cancel>
この機能が存在すると予期しているアプリケーションおよびアプリケーション・サーバーでは、この例外が通知されると、アプリケーションの機能で問題が発生したり、アプリケーションのログ・ファイルに過剰なメッセージが書き込まれたりする場合があります。
アプリケーションが文の取消しが実際に有効となるかどうかに依存せず、その取消しの失敗を無視しても安全な場合は、接続URLのignoreStatementCancelスイッチを指定できます。
Connection conn = DriverManager.getConnection(
"jdbc:rdbNative:my_db_dir:pers@ignoreStatementCancel=true",
user, pass);
クライアント・アプリケーションまたはサーバーが非アクティブな状態でいられる時間の長さ(この時間を超えると強制終了させられる)は、サーバー・スイッチおよび接続スイッチを使用して設定できます。
–cli.idleTimeoutスイッチを使用すると、接続が非アクティブな状態でいられる時間(この時間を超えると終了させられる)をミリ秒単位で指定できます。デフォルト値であるゼロ(0)の場合はその時間が無期限になり、接続はタイムアウトになりません。
サーバー構成オプションとしてのクライアント・アイドル・タイムアウトは、XML書式の構成ファイル内のサーバー定義で指定することもできますし、サーバー起動時のコマンドライン・スイッチとして指定することもできます。
次に例を示します。
$ java -jar rdbthinsrv.jar –port 1701 –cli.idleTimeout 3600000
この場合、クライアント接続は1時間までアイドル状態でいることができ、それを超えると終了するよう指定されています。
それをXML書式の構成ファイル内で指定すると、次のようになります。
<server
name="srv2forRdb"
type="RdbThinSrv"
url="//localhost:1708/"
cli.idleTimeout="3600000"
/>
このタイムアウトによってクライアントが強制終了させられると、次のメッセージがサーバー・ログにロギングされます。
oracle.rdb.jdbc.common.RdbException: Client terminated
due to inactivity
このタイムアウトは、サーバー・スイッチとして指定すると、該当するサーバーを使用して接続されているすべてのクライアントに適用されます。
クライアント・タイムアウトは、クライアント側アプリケーション上で接続文字列の修飾子として指定できます。
Connection conn = DriverManager.getConnection(
"jdbc:rdbthin://bravo:1701/my_db_dir:personnel@cli.idleTimeout=3600000",user, pass);
この方法で指定すると、タイムアウトは該当する1つの接続にのみ適用されます。
ゼロ以外のcli.idleTimeoutをサーバー構成内でも指定し、接続修飾子としても指定すると、該当する接続ではそれら2つの値の小さい方の値が使用されます。
サーバーがクライアントをリスニングしているソケット上のアクティビティの有無によって非アクティブであるかどうかが判断され、クライアントから所定の期間リクエストが送信されない場合はタイムアウトとみなされます。
マルチプロセス・サーバー・エグゼキュータを使用している接続上でクライアント非アクティブ・タイムアウトが発生すると、該当するエグゼキュータが終了させられます。タイムアウト・イベントの後、接続は正しく終了させられます。とはいえ、接続上でアクティビティが検出されなかった理由が不明であるため、エグゼキュータ・サブプロセスは安全でないとみなされ、終了させられます。
非アクティブであることが原因でサーバーがアイドル状態でいられる時間の長さ(この時間を超えるとサーバーは終了させられる)を指定できます。
–srv.idleTimeoutスイッチを使用すると、サーバーが非アクティブな状態でいられる時間(この時間を超えると終了させられる)をミリ秒単位で指定できます。デフォルト値であるゼロ(0)の場合はその時間が無期限になり、サーバーはタイムアウトになりません。
サーバー構成オプションとしてのサーバー・アイドル・タイムアウトは、XML書式の構成ファイル内のサーバー定義で指定することもできますし、サーバー起動時のコマンドライン・スイッチとして指定することもできます。
次に例を示します。
$ java -jar rdbthinsrv.jar –port 1701 –srv.idleTimeout 3600000
この場合、サーバーは1時間までアイドル状態でいることができ、それを超えると終了するよう指定されています。
それをXML書式の構成ファイル内で指定すると、次のようになります。
<server
name="srv2forRdb"
type="RdbThinSrv"
url="//localhost:1708/"
srv.idleTimeout="3600000"
/>
このタイムアウトによってサーバーが終了させられると、次のメッセージがサーバー・ログにロギングされます。
Server terminated due to inactivity
2006-02-08 12:28:03.578 : Forced disconnect by Server terminated due to inactivity @ LOCAL
サーバー非アクティブ・タイムアウトは、指定された期間、該当するサーバーに対して新しいクライアント接続が実行されないと、発生します。つまり、タイムアウト期間は、新しい接続が実行されるたびに始まります。タイムアウト期間は、満了した時点で現在の接続が該当するサーバーをまだ使用している場合、リセットされ、再開されます。
そのため、タイムアウト値は、サーバーが受け取る新しい接続リクエスト間の最小期間(この期間を超えるとサーバーが停止させられる)ですが、現在のサーバーが非アクティブであることが原因で、現在の接続がなくなるまで延長される場合もあります。
JDBCクラスのメソッドの中には、ドライバまたは基礎となるデータベース・システムにヒントを与えるので厳密に遵守する必要がないと考えられるものもあります。多くの既存のドライバでは、そのようなメソッドを黙って無視します。
他のドライバとの互換性を確保するために、usehints接続スイッチを使用して、オプションのヒント・メソッドを無視するよう指定することもできます。
@usehints=false
このように設定すると、Oracle JDBC for Rdbドライバはヒント・メソッドを無視するよう指示されます。
Oracle JDBC for Rdbドライバはデフォルト時、ヒント・メソッドを遵守します。
次のメソッドは、必須でないヒントとみなされます。
• Connection.setReadOnly()
• ResultSet.setFetchDirection()
• ResultSet.setFetchSize()
• Statement.setFetchDirection()
• Statement.setFetchSize()
標準のThinサーバーは、マルチスレッド・サーバーであり、多数のクライアント・プロセスによるOracle Rdbへの同時アクセスが許可されます。単一のOpenVMSプロセス内ではOracle Rdbはシングルスレッドなので、Thinサーバーはクライアント・データベースのアクティビティを同期化する必要があります。
データベース・アクションをシリアライズする必要があるので、時間がかかる可能性があるアクションはサーバーのスループット全体に深刻な影響を及ぼすおそれがあります。
サーバーはデフォルト時、ロックを無期限に待ちます。ただし、クライアント・スレッドが他のクライアント・スレッドに与える影響を最小限に抑えるために、ロックに対するサーバーの待ち時間を指定することができます。
この待ち時間が無期限でない場合、スレッドはロックを取得する際、指定された時間(最大)まで待つことになります。ロックが付与されないと、制御はサーバーに戻されます。その場合、サーバーはデフォルト時、ロックの取得を10回試み(指定された時間(最大)まで毎回待つ)、それでもロックを取得できないとロックに関する例外を通知します。
指定する待ち時間が短い(たとえば1秒)と、あるスレッドがその兄弟関係にあるスレッドに与える影響を抑えるのに役立つ場合もあります。
lockwaitスイッチを使用すると、ロックに対する待ち時間(Rdbトランザクションによってサポートされているロックの最小待ち時間であり、実際の最小待ち時間は1秒)を制御できます。
lockwaitが0の場合は、NOWAITでトランザクションを起動するのと同じです。lockwaitがマイナス1(-1)の場合は、値を指定しないでWAITだけ指定してトランザクションを起動するのと同じです。この場合、サーバーの待ち時間は無期限になります。
maxtriesスイッチを使用すると、ロックを取得する際のサーバーの最大試行回数を指定できます。maxtriesのデフォルト値は10です。
lockwaitスイッチに代入する値が大きくなると、ロック対象のオブジェクトによって全クライアントの動作が遅くなる確率が高くなる可能性があります。そのため、lockwaitの値は最小限に抑え、ロック取得の試行回数を適宜増やす方がよいでしょう。
前述のように、lockwaitはサーバー・レベルでも接続レベルでも指定できます。それと同様に、Oracle Rdbでは、論理名RDM$BIND_LOCK_TIMEOUT_INTERVALを使用して、プロセスにおけるロックの最大待ち時間を指定できます。また、SQL CREATE DATABASE文およびSQL ALTER DATABASE文のLOCK TIMEOUT INTERVAL句を使用すると、データベース全体におけるロック・タイムアウト値を指定できます。
lockwaitが複数の方法で指定された場合の優先順位を、次に示します。
1. 接続文字列で明示的に指定されたconnection LOCKWAIT値は、server LOCKWAIT値より優先されますが、該当する1つの接続にのみ適用されます。
2. サーバーまたは接続で設定された明示的なLOCKWAITは、論理名RDM$BIND_LOCK_TIMEOUT_INTERVALによって設定された値より優先されます。
3. データベース全体におけるLOCK TIMEOUT INTERVALは、指定された場合は、サーバーおよび接続で論理名RDM$BIND_LOCK_TIMEOUT_INTERVALまたはLOCKWAITによって指定された期間の上限になります。
RDM$BIND_LOCK_TIMEOUT_INTERVAL = 10
server LOCKWAIT = 20
connection LOCKWAIT = 30
LOCK TIMEOUT INTERVAL not specified
lockwaitは30になります。
RDM$BIND_LOCK_TIMEOUT_INTERVAL = 10
server LOCKWAIT = 20
connection LOCKWAIT = 30
LOCK TIMEOUT INTERVAL = 25
lockwaitは25になります。
RDM$BIND_LOCK_TIMEOUT_INTERVAL = 10
server LOCKWAIT = 20
connection LOCKWAIT = 30
LOCK TIMEOUT INTERVAL = 35
lockwaitは30になります。
RDM$BIND_LOCK_TIMEOUT_INTERVAL = 10
server LOCKWAIT = 20
connection LOCKWAIT not specified
LOCK TIMEOUT INTERVAL not specified
lockwaitは20になります。
RDM$BIND_LOCK_TIMEOUT_INTERVAL = 10
server LOCKWAIT not specified
connection LOCKWAIT not specified
LOCK TIMEOUT INTERVAL = 25
lockwaitは10になります。
論理名RDM$BIND_LOCK_TIMEOUT_INTERVALおよびLOCK TIMEOUT INTERVAL句の使用の詳細は、Oracle Rdbのドキュメントを参照してください。
Oracle JDBC for Rdbドライバおよびサーバーでは現在、Javaロギング・ユーティリティを使用して、エラー・メッセージおよびトレース情報のロギングを実行できます。
Javaロギングはデフォルト時、無効です。
Javaログ出力についてはh、Java JDK 1.4.1を参照してください。
どのサーバーにも、コントローラ内でのサーバーの特定および接続情報の検索に使用できる独自の名前が与えられます。サーバーの名前を使用すると、サーバーの起動時にXML書式の構成ファイル内で構成設定を特定できます。
たとえば、MY_CFG.XMLファイルの中に次のようなエントリがあり、
<servers>
<server
name="myMPServer"
type="RdbThinSrvMP"
url="//localhost:1788/"
/>
</servers>
次のようなコマンドライン文を指定するものとします。
$ java -jar rdbthinsrv.jar -cfg MY_CFG.XML -name myMPServer
この場合は、myMPServerという名前のマルチプロセス・サーバーが、ポート1788をリスニングするlocalhost上で起動されます。
XML書式の構成ファイル内のサーバー名は、一意である必要があります。構成ファイル内でサーバーの特性は、その名前のみを使用して検索されるからです。名前を比較する際、OpenVMSの大/小文字の区別は重要ではありません。
XML書式の構成ファイル内では、DEFAULTおよびDEFAULTSSLという2つの特殊なサーバー名を使用できます。
DEFAULTサーバー内で定義されたサーバー特性は全サーバーの基礎となる構成情報として使用されますが、そのいずれの特性も、コマンドライン・スイッチまたは構成ファイル内の指定サーバー内で定義された特性によりオーバーライドすることができます。
たとえば、MY_CFG.XMLファイルの中に次のようなサーバー・エントリがあり、
<servers>
<server
name = DEFAULT
type = "RdbThinSrv"
url = "//localhost:1755/"
maxClients="-1"
/>
<server
name="myServer"
maxClients="10"
/>
</servers>
次のようなコマンドライン文を指定するものとします。
$ java -jar rdbthinsrv.jar -cfg MY_CFG.XML -name "myServer"
この場合は、myServerという名前のThinサーバーが、maxClients =10でポート1755をリスニングするlocalhost上で起動されます。
DEFAULTSSLサーバー内のサーバー特性は、RdbThinSrvSSLタイプのサーバーの基本SSL情報を提供するために使用されます。
XML書式の構成ファイルの使用時に、コマンドラインで指定した名前を持つサーバーが見つからない場合、DEFAULTサーバーが定義されていると、該当するサーバーにはDEFAULTサーバーの特性が使用されます。
たとえば、MY_CFG.XMLファイルの中に次のようなサーバー・エントリがあり、
<servers
<server
name = "DEFAULT"
type = "RdbThinSrv"
url = "//localhost:1799/"
maxClients=-1
/>
</servers>
次のようなコマンドライン文を指定するものとします。
$ java -jar rdbthinsrv.jar -cfg MY_CFG.XML -name "myServer"
この場合は、myServerという名前のThinサーバーが、maxClientsは無制限でポート1799をリスニングするlocalhost上で起動されます。
XML書式の構成ファイルを使用すると、既知の名前付きデータベースを指定できます。Oracle JDBC for Rdbサーバーはそれにより、サーバーが稼働しているノード上でサービスを受けているデータベースの別名を認識できます。
論理名およびJNDI名前空間の場合と同様に、別名を使用すると、データベースに対してクライアントが使用する名前と、データベースの実際のファイル指定を分離することができます。
データベースに接続するようOracle Rdbに要求する前に、Thinサーバーはその既知のデータベースのリストをチェックし、指定された接続URLのファイル指定部分に一致するものがないか調べます。一致するものがあると、名前付きデータベースのURLプロパティのファイル指定部分を使用して、接続先データベースが指定されます。
たとえば、次の名前付きデータベースが指定され、
<database
name="mf_pers"
url="//localhost:1701/disk1:[databases]mf_personnel"
driver="oracle.rdb.jdbc.rdbThin.Driver"
URLPrefix="jdbc:rdbThin:"
/>
次の接続文が指定されるものとします。
Connection conn = DriverManager.getConnection(
"jdbc:rdbThin://bravo:1701/mf_pers",user, pass);
この場合、クライアントはOracle Rdbデータベースdisk1:[databases]mf_personnel.rdbに接続されます。
名前付きデータベースの変換時、名前付きデータベースの定義内にあるURLのノードおよびポートは破棄されます。
名前付きデータベースを使用して、サーバー内のデータベース・アクセスを制限することもできます。この機能の詳細は、「データベース・アクセスの制限」を参照してください。
XML書式の構成ファイルのserverセクションでは、srv.onStartCmdおよびsrv.onExecStartCmdという2つの起動時コマンド属性を指定できます。
これらのオプションでは、サーバーまたはエグゼキュータの起動の直前に実行されるDCLコマンドを指定できます。
srv.onStartCmdおよびsrv.onExecStartCmdでは、サーバーまたはエグゼキュータの起動時に実行されるコマンドを指定します。該当するコマンドによってDCLコマンド・プロシージャが起動される場合は、コマンドラインにDCL起動記号@も含める必要があります。
このオプションでは、指定したThinサーバーが起動される前に実行されるDCLコマンドを指定します。OpenVMSの有効なDCLコマンドで、コントローラまたはプール・サーバーによって作成されるサーバー・プロセスのコンテキスト内で有効である必要があります。
複数のDCLコマンドが必要な場合、それらのDCLコマンドは、1つのDCLコマンド・プロシージャに入れる必要があります。そして、そのDCLコマンド・プロシージャは、コントローラまたはプール・サーバーが稼働する環境で利用可能である必要があります。それらのコマンド・プロシージャはrdb$jdbc_comディレクトリに格納し、ファイル保護はコントローラまたはプール・サーバーに実行のアクセス権を許可するよう設定してください。
たとえば、システムで特定の設定を実行し、Java環境およびOracle Rdb環境を設定する必要がある場合は、次の例のようなコマンド・プロシージャを作成できます。
次のような記述が含まれるrdb$jdbc_com:our_setup.comを作成します。
$@sys$share:rdb$setver 71
$@sys$common:[java$141.com]JAVA$141_SETUP.COM
そして、このコマンド・プロシージャに対するポインタを、srv.onStartCmdオプションで指定します。
<server
name="srv2forRdb"
type="RdbThinSrv"
url="//localhost:1708/"
srv.onStartCmd="@rdb$jdbc_com:our_setup.com"
/>
このプロパティを使用してサーバー・プロセスが実行するコマンドを指定する際は、注意が必要です。それらのコマンドは、実際のサーバー・インスタンスを起動するJava文の起動前に実行されます。デタッチされたOpenVMSプロセスを使用してサーバーが実行されるので、必要な記号および論理名はすべて、デタッチされたプロセス内のサーバーで利用できる必要があります。
特に、標準のRDB$JDBC_*論理名を設定内で再定義し、プライベート版のOracle JDBC for Rdbを使用する場合は、該当するJARファイルおよびイメージがデタッチされたプロセス・サーバー環境で利用および実行可能である必要があります。
たとえば、論理名の指定方法には注意が必要です。 次のような再定義により、論理名を使用して現在のデフォルト・ディレクトリを指す場合もあります。
$define rdb$jdbc_home []
ただし、この論理名はサーバーの起動に使用される一時的なコマンド・プロシージャの作成時に変換され、この場合はディレクトリのみが指定されているので、ディスクまたはデバイスはデタッチされたプロセスのログイン・ディレクトリのカレント・デバイスがデフォルトとなるため、予期したデバイスにならない可能性があります。その結果、サーバー・プロセスが正しく起動されない場合があります。
論理名を再定義して現在のデフォルト・ディレクトリにするには、DCLの字句機能f$environmentを使用します。
$define rdb$jdbc_home 'f$environment("DEFAULT")
これにより、デフォルトのデバイスとディレクトリが設定されます。
サーバー・プロセスの起動時に問題が発生した場合は、RDB$JDBC_LOGSディレクトリの中に新しいログ・ファイルができていて、情報やエラーがそのファイルに格納されている場合があります。
これらのコマンド・プロシージャの中でSET VERIFY
コマンドを使用してはいけません。メソッドRuntime.exec()をサーバーで使用するとプロセスを作成できますが、SET VERIFYコマンドをコマンド・プロシージャの中で使用すると、サーバーがハングする可能性があります。これは、OpenVMS JavaでRuntime.exec()を使用する際の制限であり、ドキュメントに記載されています。論理名JAVA$EXEC_TRACE
を使用すると、Runtime.exec()
コールのデバッグをOpenVMS上で実行できます。詳細は、OpenVMS Javaのドキュメントを参照してください。
srv.onStartCmdコマンドが使用されるのは、コントローラまたはプール・サーバーがサーバーを起動する場合のみです。サーバーが他の手段で起動される場合は、サーバー起動コマンド・プロシージャも、srv.onStartCmdサーバー属性内のコマンドも実行されません。
このオプションでは、マルチプロセス・サーバーによるエグゼキュータの起動前に実行されるDCLコマンドを指定します。OpenVMSの有効なDCLコマンドで、マルチプロセス・サーバー・プロセスのコンテキスト内で有効である必要があります。
複数のDCLコマンドが必要な場合、それらのDCLコマンドは、1つのDCLコマンド・プロシージャに入れる必要があります。そして、そのDCLコマンド・プロシージャは、サーバーが稼働する環境で利用できる必要があります。それらのコマンド・プロシージャはrdb$jdbc_comディレクトリに格納し、ファイル保護はサーバーからそれらのコマンド・プロシージャにアクセスできるように設定してください。
たとえば、システムで特定の設定を実行し、Oracle Rdb環境を設定する必要がある場合は、次の例のようなコマンド・プロシージャを作成できます。
次のような記述が含まれるrdb$jdbc_com:our_exec_setup.comを作成します。
$@sys$share:rdb$setver 7.1
そして、このコマンド・プロシージャに対するポインタを、srv.onExecStartCmdオプションで指定します。
<server
name="MPsrv2forRdb"
type="RdbThinSrvMP"
url="//localhost:1788/"
srv.onExecStartCmd="@rdb$jdbc_com:our_exec_setup.com"
/>
これらのコマンド・プロシージャの中でSET VERIFY
コマンドを使用してはいけません。メソッドRuntime.exec()をサーバーで使用するとプロセスを作成できますが、SET VERIFYコマンドをコマンド・プロシージャの中で使用すると、サーバーがハングする可能性があります。これは、OpenVMS JavaでRuntime.exec()を使用する際の制限であり、ドキュメントに記載されています。論理名JAVA$EXEC_TRACE
を使用すると、Runtime.exec()
コールのデバッグをOpenVMS上で実行できます。詳細は、OpenVMS Javaのドキュメントを参照してください。
稼働中のサーバーを停止するなどのサーバーの操作を不正ユーザーに制御させないためには、制御パスワードを各サーバーに起動時割り当てます。
このパスワードは、Oracle JDBC for Rdbのコントローラ・インタフェースを使用してサーバー制御操作を実行する際に使用する必要があります。
これらのパスワードのセキュリティを向上させるには、サーバーの制御パスワードを不明瞭化した形式でサーバー構成ファイルに含めます。
たとえば、XML書式のサーバー構成ファイル内では次のように指定します。
<server
name="RdbThinSrv1707"
type="RdbThinSrvMP"
url="//localhost:1707/"
srv.execStartup="mystartup"
controlUser="jdbc_user"
controlPass="0x811B15F866179583EB3C96751585B843"
/>
不明瞭化されたパスワードは、Rdb Thinサーバー・コントローラ内でdigest文を使用すると取得できます。
rdbthincontrol> digest thisismypassword
digest : 0x31435008693CE6976F45DEDC5532E2C1
この値は、プレーン・テキストの制御パスワードが通常指定される構成ファイルで使用できます。
この値は、digest文から返されたとおりにコピーする必要があります。
プレーン・テキストの形式から不明瞭化された形式にパスワードを変換する際は、大/小文字が区別されます。そのため、単語やフレーズが同じであっても、大/小文字が異なっていれば、digest文の実行結果も異なります。
パスワードの大/小文字が区別されるので、プレーン・テキスト形式で使用するパスワードの値とdigest文の実行結果の形式で使用するパスワードの値は、大/小文字も含め、1文字ずつ正確に一致させる必要があります。
これは、パスワードをDCLコマンドラインで使用する際、特に重要です。プレーン・テキスト形式のパスワードを二重引用符で囲まない場合は、環境により、パスワードの値がすべて小文字またはすべて大文字に強制的に変換される場合があり、オリジナルのパスワードと異なる値になることがあります。
たとえば、-digestをコマンド・モードで使用する場合、値は二重引用符で囲む必要があります。
$ java -jar rdbthincontrol.jar -digest "MySecretPassword"
digest : 0x7315A012ECAD1059A3634F8BE1347846
$ java -jar rdbthincontrol.jar -digest MySecretPassword
digest : 0x4CAB2A2DB6A3C31B01D804DEF28276E6
注意:
不明瞭化されたパスワードが有効なのは、構成ファイル内のサーバー定義で使用する場合、またはサーバー・スタートアップ・コマンドラインの構成オプションとして使用する場合のみです。制御ユーザーとしてサーバーに接続し、コントローラを使用してサーバー上で操作を行うには、接続リクエストで使用する制御パスワードはまだプレーン・テキストである必要があります。不明瞭化された値を接続時のパスワードとして使用することはできません。
Thinサーバーを使用してデータベースに接続する際に実行される標準のRdb認可チェックの他に、アクセス先のデータベースおよび許可されるユーザー名をサーバー・レベルで制限することもできます。
Thinサーバーへのアクセスおよびサービスを受けるデータベースへのアクセスを意図的に制限する方法の詳細を、後述の項で説明します。
サーバー経由で確立する接続を、許可されたデータベースとして指定したデータベースにのみ制限することができます。
その場合は、構成ファイル内でサーバーのrestrictAccessプロパティを設定した後、アクセスが許可されるデータベースのリストをallowDatabaseサブセクションを使用して指定します。
<server
name="srv2restrict"
type="RdbThinSrv"
url="//localhost:1701/"
restrictAccess="true">
<allowDatabase name="mf_pers"/>
<allowDatabase name="disk1:[databases]customers"/>
</server>
allowDatabaseサブセクションの名前の値は、同じ構成ファイル内ですでに宣言されているデータベースの名前であってもかまいませんし、接続URLのデータベース・ファイル指定部分であってもかまいません。
アクセスが制限されているサーバーをクライアントが使用している場合、JDBC接続URLのファイル指定部分は、allowDatabaseサブセクション内の名前の1つに一致する必要があります。許可されたデータベースに照らしてそれらの名前をサーバーがチェックする前に接続URLに対してファイル拡張子の変換も論理名の変換も実行されないので、大/小文字の違いとは別に、それらの名前をallowDatabaseサブセクション内で指定されているものとまったく同じにすることが重要です。
サーバーのrestrictAccessプロパティがtrue、かつallowDatabaseサブセクションが1つ以上指定されている場合、サーバーは指定されているそれらのデータベースに対するアクセスのみを許可します。
サーバーのrestrictAccessプロパティがfalseか指定されていない、またはサーバーのallowDatabaseサブセクションが指定されていない場合、データベースの制限は適用されません。
たとえば、ノードbravo上で稼働しているサーバーが前述のようなサーバーの場合:
Connection conn = DriverManager.getConnection(
"jdbc:rdbThin://bravo:1701/mf_pers",user, pass);
これは許可されます。
Connection conn = DriverManager.getConnection(
"jdbc:rdbThin://bravo:1701/MF_Pers",user, pass);
これは、データベースの指定における大/小文字の区別は重要でないので許可されます。
Connection conn = DriverManager.getConnection(
"jdbc:rdbThin://bravo:1701/disk1:[databases]customers",user, pass);
これは許可されます。
Connection conn = DriverManager.getConnection(
"jdbc:rdbThin://bravo:1701/disk1:[databases]customers.rdb",user, pass);
これは、.rdbが余分であるため許可されません。
Connection conn = DriverManager.getConnection(
"jdbc:rdbThin://bravo:1701/cust ",user, pass);
これは、custがdisk1:[databases]customersに変換される論理名であっても許可されません。
Thinサーバーの使用時、Rdbの認可チェックはデータベースへの接続時に実行されます。 Rdbは、指定されたユーザー名とパスワードをチェックし、該当するユーザーの認可アクセスを判断します。
また、構成ファイル内でサーバーのrestrictAccessプロパティを設定し、許可するユーザー名のリストをallowUserサブセクションで指定することにより、サーバーを使用できるユーザーをさらに制限することもできます。
<server
name="srv2restrict"
type="RdbThinSrv"
url="//localhost:1701/"
restrictAccess="true">
<allowUser name="jdbc_user"/>
<allowUser name="smith"/>
<allowUser name="jones"/>
</server>
allowUserサブセクションの名前の値は、Rdbの有効なユーザー名である必要があります。
ユーザー・アクセスに制限があるサーバーをクライアントが使用する場合、接続に使用するユーザー名は、allowUserサブセクション内の名前の1つに一致する必要があります。そのユーザー名の一致がチェックされる際、大/小文字は区別されません。
サーバーのrestrictAccessプロパティがtrue、かつallowUserサブセクションが1つ以上指定されている場合、サーバーは指定されているそれらのユーザーにのみアクセスを許可します。
サーバーのrestrictAccessプロパティがfalseか指定されていない、またはサーバーのallowUserサブセクションが指定されていない場合、ユーザーの制限はサーバーに適用されません。
アクセス先のデータベースおよびサーバーの使用が許可されるユーザーを制限するだけでなく、サーバー・パスワードを使用してサーバーを保護することもできます。
その場合は、構成ファイル内でサーバーのsrv.passwordプロパティを設定します。このパスワードは、プレーン・テキストのパスワードでもかまいませんし、不明瞭化されたパスワード値でもかまいません。
ただし、Oracleでは、構成ファイル内では不明瞭化されたパスワードを使用するようお薦めします。不明瞭化されたパスワードは、コントローラ・アプリケーション内のDIGEST機能を使用すると生成できます。詳細は、「サーバー構成ファイルにおけるパスワードの不明瞭化」を参照してください。
パスワードが保護されたサーバーを使用してデータベースに正常に接続するには、クライアント接続プロパティにより、パスワードのプレーン・テキスト値をクライアント接続リクエストで指定する必要もあります。
<server
name="srv2restrict"
type="RdbThinSrv"
url="//localhost:1701/"
srv.password="0x811B15F866179583EB3C96751585B843"
/>
この例で使用している不明瞭化されたパスワードは、プレーン・テキスト形式のパスワード"jdbc_user"に一致しています。
このサーバーを使用してデータベースに接続するには、クライアントは接続リクエストで@srv.passwordの値を指定する必要があります。また、そのパスワードはプレーン・テキスト形式のパスワードであって、サーバーで指定されているものの1つに一致する必要があります。
Connection conn = DriverManager.getConnection(
"jdbc:rdbThin://bravo:1755/my_db_dir:pers@srv.password=jdbc_user",
user, pass);
デフォルト時、CONNECTION.setReadOnly()メソッドのスコープはセッションです。つまり、メソッドCONNECTION.setReadOnly(true)がコールされると、CONNECTION.setReadOnly()に対する別のコールによって変更されないかぎり、接続状態にある該当セッションの残りの部分におけるデフォルトのトランザクションはREAD_ONLYになります。
ただし、標準のOracle JDBCドライバは、CONNECTION.setReadOnly()に対して別のスコープを持ちます。メソッドCONNECTION.setReadOnly(true)がコールされると次のトランザクションのみがREAD ONLYになり、そのトランザクションが終了するとデフォルトのトランザクションはREAD WRITEに戻ります。
transaction接続スイッチで値oracleを指定すると、標準のOracle JDBCドライバで一貫性のあるセマンティクスを実現できます。
@transaction=oracle
このスイッチを指定すると、デフォルトのトランザクションはREAD_WRITEになりますが、このトランザクション・タイプはCONNECTION.setReadOnly(true)メソッド・コールの発行によって変更できます。これにより、次のトランザクションだけがREAD_ONLYに接続されます。
OpenVMS DCLコマンド・プロシージャは、プロセスの作成時に使用されます。その際は、コントローラを使用してThinサーバーが起動され、マルチプロセス・サーバーがエグゼキュータ・プロセスを起動します。
これらのコマンド・プロシージャは、ソフトウェアのバージョン設定や出力のリダイレクトなどの操作をカスタマイズできるように、システム環境に合せて調整できます。
起動時に使用されるコマンド・プロシージャは2つあり、一方は次のサーバー起動コマンド・プロシージャ
rdb$jdbc_home:rdbjdbc_startsrv.com
他方は次のエグゼキュータ起動コマンド・プロシージャです。
rdb$jdbc_home:rdbjdbc_startexec.com
これらのコマンド・プロシージャの中でSET VERIFY
コマンドを使用してはいけません。メソッドRuntime.exec()をサーバーで使用するとプロセスを作成できますが、SET VERIFYコマンドをコマンド・プロシージャの中で使用すると、サーバーがハングする可能性があります。これは、OpenVMS JavaでRuntime.exec()を使用する際の制限であり、ドキュメントに記載されています。論理名JAVA$EXEC_TRACE
を使用すると、Runtime.exec()
コールのデバッグをOpenVMS上で実行できます。詳細は、OpenVMS Javaのドキュメントを参照してください。
必要な変更が環境の設定だけの場合は、起動コマンド・プロシージャを変更するのではなく、サーバー属性srv.onStartCmdまたはsrv.onExecStartCmdを変更してください。詳細は、「起動時コマンド」を参照してください。
コントローラでは、サーバー起動コマンド・プロシージャを使用して、Thinサーバーを起動します。
XML書式の構成ファイルのserverセクションでsrv.startupオプションを使用すると、サーバーの起動に使用されるコマンド・プロシージャのファイルを指定できます。
次に例を示します。
<server
name="srv2forRdb"
type="RdbThinSrv"
url="//localhost:1708/"
autoStart="true"
logfile=rdb$jdbc_logs:srv2forRdb.log"
srv.startup="rdb$jdbc_com:our_customized_startsrv.com"
/>
ドライバ・キットのインストール時、コマンド・プロシージャrdbjdbc_startsrv.comはrdb$jdbc_homeディレクトリに格納されます。このファイルはデフォルト時、コントローラおよびプール・サーバーを使用したサーバーの起動に使用されます。
このコマンド・プロシージャは、デフォルトの構成ファイルrdbjdbccfg.xmlの中で指定されるDEFAULTサーバーによって指定されます。
srv.startup=rdb$jdbc_home:rdbjdbc_startsrv.com
このデフォルトのコマンド・プロシージャを変更してシステム設定をカスタマイズすることもできますし、カスタマイズ対象の新しいプロシージャを作成し、該当する新しいファイルがサーバーによって使用されるように構成ファイルを変更することもできます。ただし、Oracleでは、かわりにサーバー属性srv.onStartCmdを使用するようお薦めします。srv.onStartCmd属性の使用の詳細は、「srv.onStartCmd」を参照してください。
これらのコマンド・プロシージャの中でSET VERIFY
コマンドを使用してはいけません。メソッドRuntime.exec()をサーバーで使用するとプロセスを作成できますが、SET VERIFYコマンドをコマンド・プロシージャの中で使用すると、サーバーがハングする可能性があります。これは、OpenVMS JavaでRuntime.exec()を使用する際の制限であり、ドキュメントに記載されています。論理名JAVA$EXEC_TRACE
を使用すると、Runtime.exec()
コールのデバッグをOpenVMS上で実行できます。詳細は、OpenVMS Javaのドキュメントを参照してください。
サーバー起動コマンド・プロシージャは、Thinサーバーを起動するために、コントローラまたはプール・サーバーによってのみ使用されます。サーバーが他の手段で起動される場合は、サーバー起動コマンド・プロシージャも、srv.onStartCmdサーバー属性内のコマンドも実行されません。
Thinマルチプロセス・サーバーは、エグゼキュータ起動コマンド・プロシージャを使用して、クライアント接続用のエグゼキュータ・プロセスを起動します。
srv.execStartupオプションを使用すると、マルチプロセス・サーバーによるエグゼキュータの起動に使用されるコマンド・プロシージャのファイルを指定できます。
次に例を示します。
<server
name=MPsrv2forRdb
type=RdbThinSrvMP
url=//localhost:1788/
srv.execStartup=rdb$jdbc_com:our_customized_startexec.com
/>
このデフォルトのコマンド・プロシージャを変更してシステム設定をカスタマイズすることもできますし、カスタマイズ対象の新しいプロシージャを作成し、該当する新しいファイルがサーバーによって使用されるように構成ファイルを変更することもできます。ただし、Oracleでは、かわりにサーバー属性srv.onExecStartCmdを使用するようお薦めします。srv.onExecStartCmd属性の使用の詳細は、「srv.onExecStartCmd」を参照してください。
これらのコマンド・プロシージャの中でSET VERIFY
コマンドを使用してはいけません。メソッドRuntime.exec()をサーバーで使用するとプロセスを作成できますが、SET VERIFYコマンドをコマンド・プロシージャの中で使用すると、サーバーがハングする可能性があります。これは、OpenVMS JavaでRuntime.exec()を使用する際の制限であり、ドキュメントに記載されています。論理名JAVA$EXEC_TRACE
を使用すると、Runtime.exec()
コールのデバッグをOpenVMS上で実行できます。詳細は、OpenVMS Javaのドキュメントを参照してください。
srv.execStartupおよびsrv.onExecStartCmdオプションは、マルチプロセス・サーバーのXML書式の構成ファイルのserverセクション内でのみ有効です。
Oracle JDBC for RdbのThinドライバとサーバーの間のプロトコルが正しくそろっていることを確認するために、Oracle JDBC for Rdbサーバーではクライアントから伝送されたバージョン情報をチェックします。これにより、サーバー・インスタンスとThinドライバの間の不一致が原因で発生する可能性がある問題を、すばやくトラップすることができます。
クライアントとサーバーが一致しない場合に検出されるエラー・メッセージのタイプの例を次に示します。
oracle.rdb.jdbc.common.RdbException: Io exception :
Io exception : Server Protocol error : received 1 : expected 2 @rdb.Client.FetchBlobSeg
このようなプロトコル・エラーを防止するために、Oracle JDBC for RdbドライバのJARファイルはすべて、新しいキットがインストールされるたびに、それと同時期に交換する必要があります。
サーバー・インスタンスとクライアント・インスタンスが一致していることをチェックするには、クライアント・アプリケーションの接続URL上で@tracelevel=-1を有効にします。詳細は、「トレース」を参照してください。
ログの先頭部付近に、クライアントとサーバーのインスタンス値を示すメッセージがあります。それら2つの数値が一致しない場合は、プロトコル・エラーが予想されます。
インスタンス情報を示すログ・メッセージの例を次に示します。
>> main ThinConnect@3.setTraceLevel msg : Rdb nativeInstance=20030508
>> main ThinConnect@3.setTraceLevel msg : Rdb serverInstance=20030508
OpenVMS FailSAFE IPは、Oracle JDBC for RdbのThinドライバおよびサーバーで使用される場合があります。フェイルオーバーの際、FailSAFE IPは、既存のOracle JDBC for Rdbのクライアント/サーバーIP接続をスタンバイ・サービスにリダイレクトします。
失敗したサービスと同じノード上にフェイルオーバー・サービスが存在している場合、接続は透過的に継続して利用できる必要があります。
ただし、フェイルオーバー・サービスが別のノード上にある場合は、Rdb接続をプロセス間で転送することができないので、フェイルオーバーは透過的になりません。 Thinドライバは、オリジナルのサービスがもう利用できないので、失敗したTCP/IPポート上でソケット例外を受領します。
サーバーのソケット例外は、ネットワークの読取りまたは書込みが未処理の場合に、接続上で通知されるだけです。 ドライバが現在アイドル状態で、サーバーに対する読取りまたは書込みをソケット上で実行していない場合、例外は通知されません。 ただし、ドライバによる該当接続上での後続の操作では、ソケット例外が通知されます。
ソケット例外は、SQLExceptionにラッピングされて、アプリケーションにパススルーで渡されます。 その場合、例外を捕捉してその環境をクリーンアップし、ドライバに対する新しい接続を確立する(妥当な場合)かどうかは、アプリケーション次第です。
クライアントがどこで稼働しているのかによって異なりますが、読取りまたは書込みが保留中であっても、クライアントのオペレーティング・システムがSocketExceptionを通知しない場合もあります。 そのようなシステムの場合は、読取りまたは書込みが完了するまでクライアント接続が中間状態で待機することがあります。
ソケット・サブシステムが正しいソケット例外を通知しないことが原因で発生する可能性があるハングの影響を抑えるために、ネットワークの読取り/書込みに対してタイムアウトを設けることができます。 指定した時間内に読取りまたは書込みが完了しないと、例外が通知されます。
このタイムアウト値を設定する際は、注意が必要です。文のコンパイルなどのデータベース操作に時間がかかると、サーバーがその結果を返送するのが遅延する可能性があります。
クライアント側のソケット読取りは結果の戻りを待機しますが、それはシステムおよびデータベース・ソフトウェアのパフォーマンスに比べ設定期間が短かすぎるとタイムアウトになる可能性があります。このタイムアウト値は、使用する場合、問合せ操作にサーバー側で時間がかかると思われるのであれば、大きな値(数分のオーダー)を設定してください。
ネットワークの読取りおよび書込みのタイムアウトの詳細は、「接続オプション」の「networkTimeout」を参照してください。
動的SQLで許可されている標準のSQL SET文だけでなく、Oracle JDBC for Rdbドライバは次のようなドライバ固有のSET文も認識します。
SET TRACELEVEL <trace_level>
|
トレース・レベルが設定されます。詳細は、「トレース」を参照してください。 |
SET SQLCACHE <sqlcache_size> |
SQL文のキャッシュ・サイズが、指定した値に設定されます。値がゼロ(0)の場合は、SQL文のキャッシングが無効になります。
|
SET文は、次のメソッドを使用すると、SQL文として発行できます。
• java.sql.Statement.execute |
• java.sql.Statement.executeUpdate |
• java.sql.Statement.executeQuery |
Statement stmt = conn.createStatement();
stmt.execute(set sqlcache 10);
Thinドライバの使用時、SQL文のキャッシュを有効にすると、パフォーマンスを改善できます。
ThinドライバがSQL文の準備を行う必要がある場合、SQL文をその準備のためにネットワーク経由でOracle Rdbのサーバーに送信し、SQL文によって参照される列またはパラメータのリストを返送する必要があります。
SQL文のキャッシュなしに単一の接続で同じSQL文の準備が何度も実行される場合は、該当するSQL文の準備と列情報の返送が毎回実行されます。ネットワーク・トラフィック、SQL文の準備、および列情報とパラメータ情報の取得が必要なため、これは時間のかかる処理になる可能性があります。これらのステップは、問合せのネットワークI/Oおよびパフォーマンス・コストにとって重要な部分です。
このコストの低減を可能にするために、ThinドライバではSQL文のキャッシュをサポートしています。単一の接続セッションの間に同一のSQL文字列の準備が複数回実行される場合、その準備および列情報のコストは1回しか発生しません。
SQL文のキャッシュは、sqlcacheスイッチによって有効化できます。つまり、接続を要求する際、接続URL内でsqlcacheスイッチを指定するか、接続リクエストで渡される情報ブロックを使用します。
· DriverManager.getConnectionメソッドに渡されるPropertiesのsqlcacheプロパティを設定する場合:
Properties info = new Properties();
info.put("user", user);
info.put("password", pw);
info.put("sqlcache", 100);
conn = DriverManager.getConnection (connStr, info);
· 接続URLのデータベース指定部の末尾に@sqlcacheを付加する場合:
Connection conn = DriverManager.getConnection(
jdbc:rdbthin://bravo:1701/my_db_dir:personnel@sqlcache=100,user, pass);
また、set sqlcache文を実行することもできます。
Stmt.executeUpdate(set sqlcache 100);
sqlcacheスイッチを使用して指定した値により、Thinドライバはそのキャッシュ内に同時に保持できるSQL文の個数を認識します。値がデフォルト値のゼロ(0)の場合、SQL文のキャッシュは無効です。
ある接続でSQL文のキャッシュが満杯になった後、新しい文の格納が発生すると、最低使用頻度の文がキャッシュから削除されます。
SQL文は、それが含まれるjava.sql.Statementをユーザーがクローズした後も、キャッシュに保持される場合があります。そのため、該当する問合せは、Oracle Rdbによりカレントとして登録され、DROP TABLEのようなアクションの実行を阻止することもあります。また、キャッシュに保持されている各同時文が、接続のサーバー側およびクライアント側でメモリーを占有する場合もあります。
値ゼロ(0)を指定してSET SQLCACHE文を発行し接続のSQLキャッシュをクリーンアウトした後、別のSET SQLCACHE文を発行してキャッシュを目的のサイズにリセットすることもできます。
現在、特定のSQL文を指定してキャッシュから削除することはできません。
SQL文のキャッシュは、クライアント側のアクションであり、デフォルト時は無効です。この機能は、Thinドライバにのみ適用可能です。ネイティブ・ドライバは、SQL文キャッシュ・プロパティまたはset sqlcache文の使用を黙って無視します。
トレース機能では、Oracle JDBC for Rdbのドライバおよびサーバー内で、メソッド・コールやその他のデバッグ情報をトレースすることができます。有効なトレース・レベルの値については、「トレース値」を参照してください。
トレース・レベルの値は、符合付き10進またはJavaスタイルの16進リテラルです。
トレース出力はデフォルト時、通常のJDBC DriverManager PrintWriterに書き込まれます。次のいずれかの設定を使用すると、このデフォルト値をオーバーライドできます。
• rdb.Debug.setLogStream(PrintStream ps)
• rdb.Debug.setLogWriter(PrintWriter pw)
次の例は、デフォルト値をオーバーライドする方法を示しています。
rdb.Debug.setLogStream(new PrintStream(
new FileOutputStream("mylog.log")));
トレースが有効で、DriverManager PrintWriterが現在定義されていない場合は、System.out用のPrintWriterが自動的に定義されます。
JDBC操作のトレースは、次のいずれかのメソッドにより有効化できます。
• tracelevelプロパティ
• tracelevelスイッチ
• traceLevelオプション
• Doracle.rdb.jdbc.tracelevelシステム・プロパティ
• set tracelevel文
これらのメソッドの詳細は、後述の項を参照してください。
DriverManager.getConnectionメソッドに渡されるPropertiesのtracelevelプロパティに適切な値を設定すると、トレースを有効化できます。
Properties info = new Properties();
info.put("user", user);
info.put("password", pw);
info.put("tracelevel", -1);
conn = DriverManager.getConnection (connStr, info);
詳細は、「接続オプション」を参照してください。
サーバーの起動時にtracelevelスイッチを指定すると、トレースを有効化できます。
$java -jar rdb$jdbc_home:rdbthinsrv.jar -cfg thinsrv.cfg -tracelevel -1
詳細は、「コマンドラインからThinサーバーを起動する方法」、「コマンドラインからマルチプロセス・サーバーを起動する方法」および「コマンドラインからプール・サーバーを起動する方法」を参照してください。
XML書式の構成ファイル内のサーバー定義でtraceLevelオプションを指定すると、トレースを有効化できます。
<server
name="mypoolserver"
type="RdbThinSrvPool"
traceLevel="-1"
url="//localhost:1702/" >
<pooledServer name="srv1forRdb"/>
<pooledServer name="srv2forRdb"/>
<pooledServer name="srvMPforRdb"/>
</server>
詳細は、「サーバーの構成」を参照してください。
アプリケーションまたはRdbサーバーの起動時にRdbのシステム・プロパティDoracle.rdb.jdbc.tracelevelを指定すると、トレースを有効化できます。
$java Doracle.rdb.jdbc.tracelevel=-1 my_application
詳細は、「Oracle JDBC for Rdbのシステム・プロパティ」を参照してください。
コントローラでSET TRACELEVELコマンドを使用すると、トレースを有効化できます。
$java -jar rdb$jdbc_home:rdbthincontrol.jar
rdbthincontrol> connect //localhost:1701/ jones mypassword
rdbthincontrol> set tracelevel -1
詳細は、「コントローラのコマンドライン」を参照してください。
tracelevelキーワードの"tl"も、同じ方法で使用できます。
トレースに渡される値は実際、32ビットのフラグ・マスクです。各ビットの設定により、次の表のようにトレース対象が決定されます。
ビット |
16進値 |
10進値 |
トレースされるもの |
0 |
0x00000001 |
1 |
標準のJDBCメソッド |
1 |
0x00000002 |
2 |
標準のJDBCクラスの作成/ファイナライズ |
2 |
0x00000004 |
4 |
SQL文 |
4 |
0x00000010 |
16 |
非標準のJDBCメソッド |
5 |
0x00000020 |
32 |
非標準のJDBCクラスの作成/ファイナライズ |
6 |
0x00000040 |
64 |
ガベージ・コレクション |
7 |
0x00000080 |
128 |
SQL文のキャッシュ情報 |
8 |
0x00000100 |
256 |
Rdb JNIコール |
9 |
0x00000200 |
512 |
ネットワーク送信 |
10 |
0x00000400 |
1024 |
サーバー・アクション |
11 |
0x00000800 |
2048 |
パフォーマンス情報 |
14 |
0x00004000 |
16384 |
SQLDA情報のダンプ |
29 |
0x20000000 |
536870912 |
メモリー情報 |
30 |
0x40000000 |
1073741824 |
特定フラグの詳細 |
(すべて) |
0xFFFFFFFF |
-1 |
全情報のトレース |
Oracle JDBC for Rdbのサーバー、ドライバおよびコントローラを正常に使用するために満たす必要がある、特定のファイルおよびディレクトリに関するアクセス要件があります。
コントローラおよびサーバーには、次の論理名によって指定されるディレクトリへのアクセス権が必要です。
• RDB$JDBC_HOME
• RDB$JDBC_COM
• RDB$JDBC_LOGS
インストール時に自動的に作成される1つのコマンド・プロシージャを使用すると、インストール・ディレクトリを指定しながら、システムに合せてそれらの論理名を設定することができます。それらの論理名を起動コマンド・プロシージャに追加するのか、あるいはログイン設定コマンド・プロシージャのような何か別のメカニズムを使用してそれらの論理名をJDBCユーザーのために設定するのかは、ユーザーの判断に委ねられます。
論理名は、任意の論理名表に追加できます。JDBCコンポーネントがそれらの論理名を使用してファイルにアクセスしようとする際は、OpenVMSにおける通常の論理変換の優先順位に従って処理されます。そのため、それぞれ独自のディレクトリ・セットを使用して、JDBCキットのシステム全体、グループ・レベルまたはプライベートなコピーを持つことができます。
サーバーの起動またはJDBC JARファイルの使用が必要なユーザーに、適切なアクセス権を付与することが重要です。
インストール時、前述の3つのディレクトリはインストール・ディレクトリの下に作成され、次の保護が与えられます。
(S:RWE, O:RWE, G:RE, W:RE)
そのため、world read/executeは、すべてのディレクトリおよびコンテンツにアクセスできます。これが組織の要件に適合しない場合は、これらの保護を適宜変更する必要があります。
また、コントローラのユーザー、すなわちサーバーを手動で起動するユーザーは、RDB$JDBC_COMディレクトリおよびRDB$JDBC_LOGSディレクトリに対してWRITEのアクセス権がないと、サーバーを正常に起動することができません。なぜなら、サーバー・プロセスは、ログ・ファイルおよび一時ファイルをそれらのディレクトリに書き込むことができなければならないためです。
SQL/Services JDBCディスパッチャを使用してサーバーを起動する場合、そのディスパッチャが実行されるアカウントには、それらのディレクトリに対するWRITEのアクセス権が必要です。
それらの論理名を他のディレクトリにリダイレクトする場合は、ファイルおよびディレクトリの保護が前述の要件に適合していることを確認する必要があります。
サーバーでpersonaを使用する場合は、前述のようにpersonaが適切なアクセス権を所持していることを確認する必要があります。
Oracle JDBC for Rdbによって提供されるJDBC標準に対する拡張機能について、次の項で説明します。
Oracle Rdbで現在サポートされているBLOBセグメントの最大数は、65535です。Oracle JDBC for Rdbドライバは、この最大数まで、セグメントを正しく処理します。
ただし、BLOBはドライバによって内部のバイト配列にマテリアライズされるので、単一のBLOBに格納できるセグメントの数に制限はありません。非常に大きなBLOBを今回のバージョンのOracle JDBC for Rdbドライバで正しく処理できるのは、Java環境で利用可能な空きメモリーの量までに限られています。
Oracle Rdbのセグメント化された文字列から返されたデータの制限付きフォーマッティングを有効にするために、新しいパブリック・メソッドがoracle.jdbc.rdb.common.Blobに追加されています。そのパブリック・メソッドを使用すると、セグメント化された文字列をJDBCのBLOBオブジェクトに変換する際、セパレータ文字列値の指定をセグメント間に挿入できます。
public void oracle.jdbc.rdb.common.Blob.setSegSeparator(java.lang.String separator)
セグメント化された文字列セグメントの間で使用するセパレータ文字列を指定します。
separator - 使用するセパレータ文字列
Void
次のコード・セグメントは、セグメント間に改行を追加する方法を示しています。
ResultSet rs = s.executeQuery(
"select resume from resumes where employee_id = '00164'");
rs.next();
oracle.jdbc.rdb.common.Blob bl =
(oracle.jdbc.rdb.common.Blob)rs.getBlob(1);
bl.setSegSeparator("\n");
byte[] bytes = bl.getBytes(1,9999);
String st1 = new String(bytes);
System.out.println("resume : " + st1 );
oracle.jdbc.rdb.common.Blob.setSegSeparator()にNULLオブジェクトまたは空の文字列をパラメータとして渡すと、セパレータをクリアすることができます。
JDBC標準では、BINARYデータ、VARBINARYデータおよびLONGVARBINARYデータにアクセスする際、ResultSet.getBytes()メソッドの使用が制限されています。Oracle JDBC for Rdbドライバではこの制限が緩和されており、有効なすべてのSQLデータ型に対し、次のメソッドを使用してバイト配列を返そうとします。
getBytes()
· CHARおよびVARCHARの列からは、Rdbからドライバに返されるように、生データが返されます。
· 数値型列は、ビッグ・エンディアンのバイト配列としてRdbのネイティブ書式で返されます。
· 日付および時刻は、64ビットのビッグ・エンディアンのバイト配列として返されます。
JDBCには独自の接続プロトコルがあるため、次の動的SQL文をStatementまたはPreparedStatementから実行すると、例外が通知されます。
SET CONNECT
|
CONNECT
|
DISCONNECT
|
この項では、簡単なJDBCサーバーを起動し、それを使用してシステム上のデータベースにアクセスする方法を、1ステップずつ説明します。
1. Oracle JDBC for Rdbをデータベース・サーバーにインストールします。
2. サーバーで使用するRdbおよびJavaを決定します。
3. サーバー側の構成ファイルとコマンド・プロシージャを設定します。
4. Oracle JDBC for Rdb Thinサーバーを起動します。
5. クライアント・マシンにOracle JDBC for Rdb Thinドライバをインストールします。
6. JDBC APIを使用してアプリケーションを作成します。
7. アプリケーションを実行します。
サーバーは、次のいずれかの方法で起動できます。
• DCLのコマンドラインでrdbthinsrv JARを直接起動。「コマンドラインからThinサーバーを起動する方法」を参照してください。
• SQL/ServicesでJDBCディスパッチャを作成し、起動。「Oracle SQL/ServicesからThinサーバーを起動する方法」を参照してください。
• Oracle JDBC for Rdbコントローラを使用。「Oracle JDBC for RdbコントローラからThinサーバーを起動する方法」を参照してください。
このウォークスルーでは、コントローラを使用してサーバーを管理します。コントローラからサーバーを起動する際に使用されるコマンド・プロシージャを正しく指定することが重要であるため、該当するコマンド・プロシージャの詳細を後述します。
手順1 Oracle JDBC for Rdbのインストール
Oracle JDBC for Rdbのインストールに必要な手順は、『Oracle JDBC for Rdbリリース・ノート』に記述されています。 それらの手順に従い、Oracle Rdbデータベースでサーバーとして使用されるOpenVMSノードにOracle JDBC for Rdbをインストールします。
サーバー・マシンには、Oracle JDBC for Rdbキットをインストールする前に、Javaをインストールしておく必要があります。
Oracle JDBC for Rdbキットをインストールしたら、システムを設定し、Oracle JDBC for Rdbキットを利用できるようにします。いくつかの構成ファイルの作成または変更が必要な場合があります。それらの手順の詳細を、後述します。
手順2 RdbおよびJavaのバージョンの決定
『Oracle JDBC for Rdbリリース・ノート』には、Oracle JDBC for Rdbでサポートされている最低バージョンのRdbおよびJavaが記載されています。 ただし、その最低要件を満たすRdbおよびJavaのバージョンが、サーバーにいくつかインストールされている場合もあります。 Thinサーバーを実行する際は、組織の要件、およびThinサーバーからアクセスするOracle Rdbデータベースに応じて適切なバージョンのRdbおよびJavaが使用されるよう、稼働する環境を設定する必要があります。
Rdbのバージョンがシステムに複数存在する場合は、アクセス先のデータベースに対してサーバーが正しいバージョンのRdbの中で稼働することが重要です。 サーバーの稼働中、Rdbの環境はプロセス・レベルで設定され、サーバーについての変更はできません。 つまり、Thinサーバーの単一の稼働中インスタンスは、単一バージョンのRdbのデータベースにしかアクセスすることができません。
Thinサーバーの実行インスタンスに対して設定したRdbのバージョンに一致しないデータベースに接続しようとすると、次のような例外が通知されます。
SQLException: Failed to connect : in <rdbjdbcsrv:connect failure>
%RDB-F-WRONG_ODS, the on-disk structure of the database file is not supported by this version
-RDMS-F-ROOTMAJVER, database format 71.0 is not compatible with software version 72.1:S1000
システム上に別のバージョンのJavaが存在している場合もあります。 また、実行環境として別のJava VMを選択することもできます。VMのバージョンとタイプは、Javaが起動済でサーバーが稼働中であるとサーバー・インスタンスに対して変更することができないため、単一のThinサーバー・インスタンスに対して決定する必要があります。
RdbおよびJavaによってサポートされているメカニズムを使用すると、ユーザーは特定のバージョンまたはバリアントに合せて環境を設定することができます。 DCLのコマンドラインからThinサーバーを起動する前に、Rdbのバージョンの設定およびJava VMの設定を手動で実行できます。
また、SQL/Services JDBCディスパッチャまたはコントローラを使用してサーバーを起動する場合は、Thinサーバーの起動時に適切な設定を実行する方法がいくつかあります。このタイプの設定の例を、後述します。
このウォークスルーのために、サーバー・マシン上で次のものを使用します。
• Oracle Rdbリリース7.2
• Java 1.4.2 FAST VM
手順3 サーバー側の構成ファイルとコマンド・プロシージャの設定
Oracle JDBC for Rdbでは、様々なコマンド・プロシージャを使用してサーバーの操作を実行し、その環境を設定します。 それらのコマンド・プロシージャは、組織および業務上のニーズに合せて、変更が必要な場合があります。
次の操作が必要な場合があります。
• RDBJDBC_STARTUP.COMの変更
• システム起動プロシージャからの起動用RDBJDBC_STARTUP.COMの追加
• サーバーの定義を目的としたXML書式の構成ファイルの作成
• サーバー設定コマンド・プロシージャの作成
また、サーバーおよびその他の情報の管理には、XML書式の構成ファイルを使用してください。それらの構成ファイルは、ユーザーが作成する必要があります。サーバー構成ファイルの例については、後述の項および「構成ファイルの例(MY_SERVERS.XML)」を参照してください。
RDBJDBC_STARTUP.COM
インストール時に作成されるRDBJDBC_STARTUP.COMファイルを使用すると、Oracle JDBC for Rdbを正しく機能させるのに必要なシステム全体の論理名を設定することができます。 このコマンド・プロシージャを使用してもかまいませんし、変更なしでJDBC環境を設定してもかまいません。
JDBCのサーバーとドライバをシステム全体で使用する場合は、システムの論理名を使用する必要があります。 その場合は、RDBJDBC_STARTUP.COMコマンド・プロシージャをシステム起動プロシージャに追加するのが適していることもあります。
プライベートな使用のみが必要な場合は、ジョブ・レベルの論理名を使用してください。その場合は、RDBJDBC_STARTUP.COMをコピーまたは変更して、論理レベルをジョブ・レベルに変更します。 サーバー・システム上のOracle JDBC for Rdbの各ユーザーは、コントローラのアクション、Thinサーバーの起動、停止、Thinサーバーへのアクセスなどの操作を実行する前に、この起動プロシージャを起動する必要があります。
Oracle JDBC for Rdbコンポーネントは、RDBJDBC_STARTUP.COMファイルによって提供される論理名を使用して、JAR、イメージ、コマンド・プロシージャおよびログ・ファイルと一時ファイルの書込み先を特定します。このコマンド・プロシージャおよびJDBCに固有な論理名の詳細は、『Oracle JDBC for Rdbリリース・ノート』を参照してください。
後述の手順では、適切な論理名が設定されており、ユーザーおよびOracle JDBC for Rdbから利用可能なことを前提としています。
サーバー構成ファイル
サーバー、セッションおよび接続オプションは、サーバーまたはコントローラを起動する際、DCLのコマンドラインで個々に追加できます。しかし、それらのオプションを構成ファイル内で指定し、その構成ファイルをサーバーの操作の実行時に使用する方がさらに便利な場合もあります。
構成ファイル内で指定が可能なもの、および構成ファイル内のデータの書式の詳細は、「構成ファイル」を参照してください。Oracleでは、XML書式の構成ファイルを使用するようお薦めします。それは、オプションの指定が非常に柔軟であり、単一の構成ファイル内でサーバーの定義を複数定義できるからです。
インストール時、汎用の構成ファイルRDBJDBCCFG.XMLがRDB$JDBC_HOMEディレクトリにコピーされます。このファイルは、サーバー構成ファイルのベースとして使用できます。この構成ファイルは、起動可能な様々なサーバーに関する情報をOracle JDBC for Rdbに提供します。また、コントローラのユーザーにセッション情報を提供します。
このウォークスルーのために、ポート1888をリスニングするMY_SRVという名前のThinサーバーの定義を作成することにしました。汎用の構成ファイルをコピーして変更し、この情報を追加しました。
また、構成およびその他のサイト固有のファイルは、RDB$JDBC_COMディレクトリに格納するようにしました。その理由としては、これがOracle JDBC for Rdbの標準ディレクトリであり、この論理名はすでにシステム・レベルで自動的に設定済であることが主な理由です。 該当する一連のファイルは、コントローラおよびサーバー・プロセスからアクセスできるという条件で、システム上のいずれかの場所に格納されます。 サーバー・プロセスは、システムに対する通常のログインとほとんど同じ方法で起動されます。そのため、ファイル指定で使用される論理名がそのプロセスで利用可能なことが重要です。 それを実現するには、システム全体で利用可能な論理名にするのが最も簡単な方法です。
制御パスワードに加えて、サーバーに対するアクセス制御としてMySecretPasswordも選択してあります。
controlpassは構成ファイルにプレーン・テキスト書式で格納できますが、サーバー特性セクションでは不明瞭化された形式を使用してください。ただし、パスワードは大/小文字が区別されるので、パスワードの大/小文字の区別は違わないようにしてください。
コントローラを使用するとこの不明瞭化されたパスワードを使用できますが、コントローラをコマンド・モードで使用する場合はパスワードのフレーズを二重引用符で囲み、大/小文字の区別を正しく維持する必要があります。
例
$ java -jar rdbthincontrol.jar -digest "MySecretPassword"
digest : 0x7315A012ECAD1059A3634F8BE1347846
詳細は、「サーバー構成ファイルにおけるパスワードの不明瞭化」を参照してください。
MY_CFG.XMLという名前の新しい構成ファイル:
<?xml version = '1.0'?>
<!-- Configuration file for MY servers -->
<config>
<!-- SESSION -->
<session
name="DEFAULT"
tracelevel="0"
srv.mcBasePort="5517"
srv.mcGroupIP="239.192.1.1"
/>
<!-- SERVERS -->
<servers>
<!-- DEFAULT server characteristics-->
<server
name="DEFAULT"
type="RdbThinSrv"
url="//localhost:1701/"
maxClients="-1"
srv.bindTimeout="1000"
srv.idleTimeout="0"
srv.mcBasePort="5517"
srv.mcGroupIP="239.192.1.1"
tracelevel = "0"
autostart = "false"
autorestart = "false"
restrictAccess = "false"
anonymous = "false"
bypass = "false"
tracelocal = "false"
relay = "false"
srv.startup="rdb$jdbc_home:rdbjdbc_startsrv.com"
/>
<!—My new server -->
<server
name="MY_SRV"
controlUser="GROUND_CONTROL"
controlPass="0x7315A012ECAD1059A3634F8BE1347846"
type="RdbThinSrv"
url="//localhost:1888/"
cfg="rdb$jdbc_com:my_cfg.xml"
srv.onStartCmd="@rdb$jdbc_com:my_setup.com"
/>
</servers>
</config>
注意
MY_SRVのサーバーの定義はかなり限定されており、DEFAULT特性のほとんどが継承可能になっています。また、コントローラによってチェックされるブロードキャストIPが、サーバーによって使用されるものと同じであることを、sessionセクションを使用して保証しています。
RDB$JDBC_HOME:RDBJDBC_STARTSRV.COM
MY_CFG.XMLの中のデフォルトのサーバー・プロパティでは、サーバーによって使用されるサーバー構成ファイルを、srv.startupプロパティを使用して設定しています。
srv.startup="rdb$jdbc_home:rdbjdbc_startsrv.com"
このファイルは、サーバーが実行されるデタッチされたOpenVMSプロセスの起動時に、コントローラによって使用されます。ほとんどの場合は、インストール時に作成されるデフォルトのコマンド・プロシージャrdb$jdbc_home:rdbjdbc_startsrv.comを、変更なしで使用できます。
サーバー設定コマンド・プロシージャ
サーバーの起動時、サーバーのsrv.onStartCmdで指定されているDCLコマンドは、サーバー・クラスが起動される前に実行されます。そのため、これは、システム固有およびバージョン固有の設定プロシージャの実行に適しています。
srv.onStartCmd="@rdb$jdbc_com:my_setup.com"
このプロパティは実行可能なDCLコマンドであるため、@文字を指定しないと、コマンド・プロシージャを正しく起動することができません。
例
my_setup.com
$@SYS$LIBRARY:RDB$SETVER 72
$@sys$common:[java$142.com]JAVA$142_SETUP.COM FAST
$define/job MY_DB_DIR sys$common:[DBS]
これらのコマンドで指定している環境では、FAST Java VMを使用してサーバー・プロセスがリリース7.2のOracle Rdbデータベースに正しくアクセスすることができます。
手順4 Oracle JDBC for Rdb Thinサーバーの起動
これで、コントローラを使用してサーバーを起動できる適切な場所に、設定ファイルおよび構成ファイルが作成されました。 サーバーの定義が含まれる構成ファイルは、コントローラを起動するDCLコマンドラインのパラメータとして使用されます。例の中では、コマンド・モード–startServerを使用して、サーバーを起動しています。
例
$ JAVA -JAR RDBTHINCONTROL.JAR –CFG RDB$JDBC_COM:MY_CFG.XML –CONTROLPASS "MySecretPassword" –STARTSERVER –NAME MY_SRV
.
RDB$NODE : 138.1.14.91
RDB$PORT : 1888
RDB$STATUS : Idle
RDB$SERVER_NAME : srv1
RDB$SERVER_TYPE : RdbThinSrv
RDB$SERVER_VERSION : T7.2-510 20070109 B719
RDB$SERVER_SHR_VERSION : T7.2-510 20061221 B6CL
RDB$SERVER_PID : 0x2030DA4D(540072525)
RDB$ALLOWS_ANON : false
RDB$ALLOWS_BYPASS : false
RDB$NUMBER_OF_CLIENTS : 0
RDB$MAX_CLIENTS : -1
RDB$TRACE_LEVEL : 0
RDB$RESTRICT_ACCESS : false
この例の中では、使用する構成ファイルと制御パスワードを指定しています。controlpassは構成セッション・セクションの中でプレーン・テキストとして設定することができますが、プレーン・テキストのパスワードをプレーン・テキスト・ファイルに記述することは望ましくありません。また、パスワードは、大/小文字の区別が変更されるのを防ぐために、二重引用符で囲む必要があります。
手順5 クライアント・マシンへのOracle JDBC for Rdb Thinドライバのインストール
Oracle JDBC for RdbキットをOpenVMSサーバー・マシンにインストールしたら、アプリケーションを実行するマシンにThinドライバ・コンポーネントをコピーする必要があります。 このマシンには、Javaもインストールしておく必要があります。
Thinドライバのクライアント側コンポーネントは、RDBTHIN.JARファイルに入っています。
このJARファイルは、FTPのようなファイル転送プログラムを使用するとクライアント・マシンにコピーできます。 JARはバイナリ・ファイルであるため、バイナリ・モードの転送を実行する必要があります。
JARは、クライアント・マシン上の適切なディレクトリに保存します。 その格納先は、JDBCドライバの最終的な使用方法や、クライアント・マシン上で使用するアプリケーション・システムおよび開発システムが決定要因となる場合もあります。 JDBCドライバの保存先については、アプリケーションや開発環境のドキュメントを参照してください。
RDBTHIN.JARは、アプリケーションから要求されたときにJavaがロードできるよう、CLASSPATHに含める必要があります。
クライアント・システムによって異なりますが、アプリケーションの実行時にJavaコマンドの一部にドライバのJARを含める方法がいくつかあります。その場合、環境変数CLASSPATHにJARを含める必要はありません。
例
たとえば、MSDOSの場合、Javaでは–cpスイッチを使用して、クラスパスの要素を指定できます。
dos> java –cp .;rdbThin.jar my_app
注意:
JARファイルは、バイナリ・ファイルであるため、転送ユーティリティではバイナリ・モードでコピーする必要があります。
手順6 JDBC APIを使用したアプリケーションの作成
JDBCがインストールされていること、および設定が正しく実行されていることをテストする簡単なアプリケーションを次に示します。この例はインストールのRdbJdbcCheckup.javaをベースとしており、Rdbサーバー・ノードが555.1.14.91というIPを持ち、使用するThinサーバー(以前に起動済)のリスニング先ポートが1888であることを前提としています。
/*
* This sample can be used to check the JDBC installation.
* Just run it and provide the connect information.It will select
* "Hello World" from the database.
*/
// You need to import the java.sql package to use JDBC
import java.sql.*;
// We import java.io to be able to read from the command line
import java.io.*;
class my_app
{
static BufferedReader in;
public static void main(String args[])
throws SQLException, IOException, Exception
{
String driverConStr = "jdbc:rdbThin://555.1.14.91:1888/";
in = new BufferedReader(new InputStreamReader(System.in));
Class.forName ("oracle.rdb.jdbc.rdbThin.Driver");
// Prompt the user for connect information
System.out.println(
"Please enter information to test connection"+
" to the database");
String user;
String password;
String database;
user = readEntry("user: ");
int slash_index = user.indexOf('/');
if (slash_index != -1)
{
password = user.substring(slash_index + 1);
user = user.substring(0, slash_index);
}
else
password = readEntry("password: ");
database = readEntry("database: ");
System.out.print("Connecting to the database...");
System.out.flush();
System.out.println("Connecting...");
Connection conn = DriverManager.getConnection(
driverConStr + database, user, password);
System.out.println("connected.");
// Create a statement
Statement stmt = conn.createStatement();
// Do the SQL "Hello World" thing
ResultSet rset = stmt.executeQuery(
"select 'Hello World' from rdb$database");
while (rset.next())
System.out.println(rset.getString(1));
// close the result set, the statement and connect
rset.close();
stmt.close();
conn.close();
}
// Utility function to read a line from standard input
static String readEntry(String prompt)
{
try
{
StringBuffer buffer = new StringBuffer();
System.out.print(prompt);
System.out.flush();
return in.readLine();
}
catch(IOException e)
{
return "";
}
}
}
手順7 アプリケーションの実行
サーバーが起動済の状態で、サンプル・アプリケーションを起動し、Thinサーバーの接続情報を指定できます。
例
次の例では、Oracle RdbデータベースのpersonnelがMY_DB_DIRの中にあると仮定しています。
$java –cp .;rdb$jdbc_home:rdbThin.jar "my_ap"
Please enter information to test connection to the database
user: my_name
password: my_password
database: my_db_dir:personnel
Connecting to the database...Connecting...
connected.
Hello World
Your JDBC installation is correct.
後述の項では、Oracle SQL/Servicesを使用して簡単なJDBCサーバーを設定し、実行する方法を、1ステップずつ説明します。
基本的に、次の操作を実行する必要があります。
1. サーバーで使用するRdbおよびJavaを決定します。
2. サーバー側の構成ファイルとコマンド・プロシージャを設定します。
3. SQL/ServicesでJDBCディスパッチャを作成します。
4. 構成ファイルと設定ファイルの関連付けを実行します。
5. JDBCディスパッチャを起動します。
これらの操作の詳細は、第7章「Oracle SQL/ServicesとOracle JDBC for Rdbサーバー」を参照してください。
手順1 RdbおよびJavaのバージョンの決定
このステップは基本的に、「Oracle JDBC for Rdb Thinサーバーの設定、起動および使用(例)」の「手順2 RdbおよびJavaのバージョンの決定」と同じです。
手順2 サーバー側の構成ファイルとコマンド・プロシージャの設定
サーバーを正しく起動するには、コマンド・プロシージャと構成ファイルを作成する必要があります。
次の2つのファイルを作成する必要があります。
• サーバー構成ファイル
• サーバー設定ファイル
XML書式の構成ファイルを使用すると、サーバーの定義を保存できます。また、該当するサーバーのRdbおよびJava環境を正しく設定するには、コマンド・プロシージャを設定する必要があります。
この環境の設定は、SQL/Servicesのディスパッチャ環境の設定の一部として実行することもできますが、この例の目的のために、独自の設定プロシージャを作成するものとします。
サーバー構成ファイル
コマンドラインを使用してサーバーに渡すことができる情報には限度があるため、JDBCディスパッチャ・サーバーのサーバー特性のほとんどは構成ファイルで指定します。
構成ファイル内で指定が可能なもの、および構成ファイル内のデータの書式の詳細は、「構成ファイル」を参照してください。Oracleでは、XML書式の構成ファイルを使用するようお薦めします。それは、オプションの指定が非常に柔軟であり、単一の構成ファイル内でサーバーの定義を複数定義できるからです。
インストール時、汎用の構成ファイルRDBJDBCCFG.XMLがRDB$JDBC_HOMEディレクトリにコピーされます。このファイルは、サーバー構成ファイルのベースとして使用できます。この構成ファイルは、起動可能な様々なサーバーに関する情報をOracle JDBC for Rdbに提供します。また、コントローラのユーザーにセッション情報を提供します。
このウォークスルーのために、ポート1888をリスニングするSQS1888という名前のThinサーバーの定義を作成することにしました。汎用の構成ファイルをコピーして変更し、この情報を追加しました。
また、構成およびその他のサイト固有のファイルは、RDB$JDBC_COMディレクトリに格納するようにしました。その理由としては、これがOracle JDBC for Rdbの標準ディレクトリであり、この論理名はすでにシステム・レベルで自動的に設定済であることが主な理由です。 該当する一連のファイルは、コントローラおよびサーバー・プロセスからアクセスできるという条件で、システム上のいずれかの場所に格納されます。 サーバー・プロセスは、システムに対する通常のログインとほとんど同じ方法で起動されます。そのため、ファイル指定で使用される論理名がそのプロセスで利用可能なことが重要です。 それを実現するには、システム全体で利用可能な論理名にするのが最も簡単な方法です。
制御パスワードに加えて、サーバーに対するアクセス制御としてMySecretPasswordも選択してあります。
controlpassは構成ファイルにプレーン・テキスト書式で格納できますが、サーバー特性セクションでは不明瞭化された形式を使用してください。ただし、パスワードは大/小文字が区別されるので、パスワードの大/小文字の区別は違わないようにしてください。
コントローラを使用するとこの不明瞭化されたパスワードを使用できますが、コントローラをコマンド・モードで使用する場合はパスワードのフレーズを二重引用符で囲み、大/小文字の区別を正しく維持する必要があります。
例
$ java -jar rdbthincontrol.jar -digest "MySecretPassword"
digest : 0x7315A012ECAD1059A3634F8BE1347846
詳細は、「サーバー構成ファイルにおけるパスワードの不明瞭化」を参照してください。
構成ファイルの検索時にディスパッチャによって使用される標準のファイル指定の1つを使用して、構成ファイルを作成することにしました。使用する構成ファイルをディスパッチャが特定する方法については、「サーバー構成ファイルの決定」を参照してください。
サーバーが使用するポートは1888なので、SQS1888_CFG.XMLという名前の新しい構成ファイルを作成し、それをRDB$JDBC_COMディレクトリに格納します。
$type RDB$JDBC_COM:SQS1888_CFG.XML
<?xml version = '1.0'?>
<!-- Configuration file for MY servers -->
<config>
<!-- SESSION -->
<session
name="DEFAULT"
tracelevel="0"
srv.mcBasePort="5517"
srv.mcGroupIP="239.192.1.1"
/>
<!-- SERVERS -->
<servers>
<!-- DEFAULT server characteristics-->
<server
name="DEFAULT"
type="RdbThinSrv"
url="//localhost:1701/"
maxClients="-1"
srv.bindTimeout="1000"
srv.idleTimeout="0"
srv.mcBasePort="5517"
srv.mcGroupIP="239.192.1.1"
tracelevel = "0"
autostart = "false"
autorestart = "false"
restrictAccess = "false"
anonymous = "false"
bypass = "false"
tracelocal = "false"
relay = "false"
srv.startup="rdb$jdbc_home:rdbjdbc_startsrv.com"
/>
<!—My new server -->
<server
name="SQS1888 "
controlUser="SQS_CONTROL"
controlPass="0x7315A012ECAD1059A3634F8BE1347846"
type="RdbThinSrv"
url="//localhost:1888/"
/>
</servers>
</config>
注意
SQS1888のサーバーの定義はかなり限定されており、DEFAULT特性のほとんどが継承可能になっています。また、コントローラによってチェックされるブロードキャストIPが、サーバーによって使用されるものと同じであることを、sessionセクションを使用して保証しています。
サーバー設定ファイル
JDBCディスパッチャには、Javaの環境設定と実行される正しいバージョンのOracle Rdbが必要な場合があります。 この設定は、実際のサーバー・イメージの起動直前に実行されるコマンド・プロシージャで実行できます。
この設定はかなり汎用的なので、ファイルRDBJDBC_SQS_ONSTARTUP.COMを作成し、それをRDB$JDBC_COMディレクトリに格納することにしました。このファイルはデフォルト時、サーバーの起動が必要な場合は常に、ディスパッチャによって使用されます。ディスパッチャの設定コマンド・プロシージャの使用については、「JDBCディスパッチャの設定手順」を参照してください。
例
$type RDB$JDBC_COM:RDBJDBC_SQS_ONSTARTUP.COM
$@SYS$LIBRARY:RDB$SETVER 72
$@sys$common:[java$142.com]JAVA$142_SETUP.COM FAST
$define/job MY_DB_DIR sys$common:[DBS]
これらのコマンドで指定している環境では、FAST Java VMを使用してサーバー・プロセスがリリース7.2のOracle Rdbデータベースに正しくアクセスすることができます。
手順3 SQL/ServicesでのJDBCディスパッチャの作成
構成ファイルおよび設定プロシージャを作成し、適切なディレクトリに移動したので、JDBCディスパッチャを作成できます。 PORT_IDとして1888を使用します。これは、サーバーの起動に必要なファイルを探すときにディスパッチャが使用するキー値になります。
$ MCR SQLSRV_MANAGE71
SQLSRV> CONNECT SERVER;
SQLSRV> CREATE DISPATCHER MY_JDBC_DISP NETWORK_PORT TCPIP PORT_ID 1888 PROTOCOL JDBC;
SQLSRV> SHOW DISPATCHER;
Dispatcher MY_JDBC_DISP
State: UNKNOWN
Autostart: on
Max connects: 100 clients
Idle User Timeout: <none>
Max client buffer size: 5000 bytes
Network Ports: (State) (Protocol)
TCP/IP port 1888 Unknown JDBC clients
Log path: SYS$MANAGER:
Dump path: SYS$MANAGER:
手順4 構成ファイルと設定ファイルの関連付け
次は、サーバーの構成ファイルと設定ファイルをこのディスパッチャに関連付ける必要があります。
標準の構成ファイル名を使用するよう選択したので、ディスパッチャは次の関連付けを自動的に実行します。そのため、何も実行する必要はありません。
1888というPORT_IDを与えた場合は、次のようになります。
• サーバー名 = SQS1888
• 構成ファイル = RDB$JDBC_COM:SQS1888_CFG.XML
• 設定ファイル = RDB$JDBC_COM:RDBJDBC_SQS_ONSTARTUP.COM
標準の命名方法を使用しないよう選択した場合は、論理名を設定し、適切なファイルを指す必要があります。詳細は、「サーバーに対するOracle SQL/Services JDBCディスパッチャの関連付け」を参照してください。
ただし、起動対象のサーバーのタイプをディスパッチャにまだ指示する必要があるので、適切な論理名を作成する必要があります。話を簡単にするために、この論理名はSYSTEM論理名表に格納します。サーバー・タイプの関連付けについては、「サーバー・タイプの決定」を参照してください。
$DEFINE/SYSTEM RDB$JDBC_SQSTYPE_1888 STD
プール・サーバーを起動するよう選択する場合は、この論理名を作成する必要がありません。それは、JDBCディスパッチャによって使用されるデフォルトのサーバー・タイプだからです。しかし、サーバー・タイプが通常のThinサーバーであるため、論理名を使用してその事実をディスパッチャに教える必要があります。
手順5 JDBCディスパッチャの起動
構成ファイルが適切な場所に格納されており、ディスパッチャによって使用される論理名の定義も終わったので、SQL/Servicesマネージャを使用してJDBCディスパッチャを起動できます。
SQLSRV> start dispatcher my_jdbc_disp;
SQLSRV> show disp my_jdbc_disp;
Dispatcher MY_JDBC_DISP
State: STARTING
Autostart: on
Max connects: 100 clients
Idle User Timeout: <none>
Max client buffer size: 5000 bytes
Network Ports: (State) (Protocol)
TCP/IP port 1888 Inactive JDBC clients
Log path: SYS$MANAGER:
Dump path: SYS$MANAGER:
SQLSRV> show disp my_jdbc_disp;
Dispatcher MY_JDBC_DISP
State: RUNNING
Autostart: on
Max connects: 100 clients
Idle User Timeout: <none>
Max client buffer size: 5000 bytes
Network Ports: (State) (Protocol)
TCP/IP port 1888 Inactive JDBC clients
Log path: SYS$MANAGER:
Dump path: SYS$MANAGER:
Log File: SYS$SYSROOT:[SYSMGR]SQS_DECRDB_JDBC_DISP08O91.LOG;
Dump File: SYS$SYSROOT:[SYSMGR]SQS_DECRDB_JDBC_DISP08O.DMP;
ディスパッチャの起動の詳細は、Oracle SQL/Servicesのドキュメントおよび「JDBCディスパッチャの起動」を参照してください。
サーバーが正しく起動される場合は、Oracle JDBC for Rdb Thinドライバを使用して、JDBCクライアントから該当するサーバーを使用することができます。
また、コントローラを使用して、サーバーが実際に稼働しているかどうかをチェックすることもできます。
$ java -jar rdb$jdbc_home:rdbthincontrol.jar –cfg RDB$JDBC_COM:SQS1888_CFG.XML–controlpass "MySecretPassword" –name SQS1888 –showServer
<?xml version = ‘1.0’?>
<!—Configuration file for Rdb Thin JDBC Drivers and Servers -->
<config>
<!—SESSION -->
<session
name="fred"
user="jdcb_user"
tracelevel="0"
srv.mcBasePort="5517"
srv.mcGroupIP="239.192.1.1"
/>
<!—SERVERS -->
<servers>
<!—DEFAULT server characteristics.-->
<!-NOTE that the control password is the obfuscated form of "MySecretPassword".-->
<server
name="DEFAULT"
type="RdbThinSrv"
url="//localhost:1701/"
maxClients="-1"
srv.bindTimeout="1000"
srv.idleTimeout="0"
srv.mcBasePort="5517"
srv.mcGroupIP="239.192.1.1"
tracelevel = "0"
autostart = "false"
autorestart = "false"
restrictAccess = "false"
anonymous = "false"
bypass = "false"
tracelocal = "false"
relay = "false"
controlUser="control_user"
controlPass="0x7315A012ECAD1059A3634F8BE1347846"
cfg="rdb$jdbc_com:rdbjdbccfg.xml"
srv.execStartup="rdb$jdbc_home:rdbjdbc_startexec.com"
srv.startup="rdb$jdbc_home:rdbjdbc_startsrv.com"
sharedmem = "0"
ssl.default="true"
/>
<!—DEFAULT Secure socket server -->
<server
name="DEFAULTSSL"
type="RdbThinSrvSSL"
ssl.default="false"
ssl.context="TLS"
ssl.keyManagerFactory="SunX509"
ssl.keyStoreType="jks"
ssl.keyStore="rdbjdbcsrv.kst"
ssl.keyStorePassword="CHANGETHIS"
ssl.trustStore="rdbjdbcsrv.kst"
ssl.trustStorePassword="CHANGETHIS"
/>
<!—now specific servers that will be started up by pool server -->
<server
name="srv1forRdb"
type="RdbThinSrv"
url="//localhost:1701/"
autoStart="true"
autoRestart="true"
logfile="rdb$jdbc_logs:srv1forRdb.log"
tracelevel="-1"
maxClients=1
/>
<server
name="srv2forRdb"
type="RdbThinSrv"
url="//localhost:1708/"
autoStart="true"
logfile="rdb$jdbc_logs:srv2forRdb.log"
/>
<server
name="myserver"
type="RdbThinSrv"
url="//localhost:1788/"
/>
<!—MP server -->
<!—sharedmem is in KB default = 1024 -->
<server
name="srvMPforRdb"
type="RdbThinSrvMP"
url="//localhost:1705/"
autoStart="true"
maxClients="10"
maxFreeExecutors="10"
prestartedExecutors="10"
sharedMem="10240"
/>
<!—the pool server -->
<server
name="rdbpool"
type="RdbThinSrvPool"
url="//localhost:1702/" >
<pooledServer name="srv1forRdb"/>
<pooledServer name="srv2forRdb"/>
<pooledServer name="srvMPforRdb"/>
</server>
<!—Secure socket server -->
<server
name="srvssl1forRdb"
type="RdbThinSrvSSL"
url="//localhost:1709/"
/>
</servers>
<!-DATABASES -->
<databases>
<database
name="mf_pers"
url="//localhost:1701/mydisk:[databases]mf_personnel"
driver="oracle.rdb.jdbc.rdbThin.Driver"
URLPrefix="jdbc:rdbThin:"
/>
<database
name="pers"
url="//localhost:1702/mydisk:[databases]personnel"
driver="oracle.rdb.jdbc.rdbThin.Driver"
URLPrefix="jdbc:rdbThin:"
/>
</databases>
</config>
Rdb SQLのデータ型 |
java.sql.Types |
CHAR(n) |
CHAR |
NCHAR(n) |
CHAR |
VARCHAR(n) |
VARCHAR |
NCHAR VARYING |
VARCHAR |
FLOAT[(n)] |
n > 24の場合はDOUBLE、そうでない場合はFLOAT |
REAL |
FLOAT |
DOUBLE PRECISION |
DOUBLE |
DECIMAL[(n[,n])] |
DECIMAL |
INTEGER[(n)] |
n == 0の場合はINTEGER、そうでない場合はNUMERIC |
SMALLINT[(n)] |
n == 0の場合はSMALLINT、そうでない場合はNUMERIC |
TINYINT[(n)] |
n == 0の場合はTINYINT、そうでない場合はNUMERIC |
BIGINT[(n)] |
n == 0の場合はBIGINT、そうでない場合はNUMERIC |
QUADWORD[(n)] |
n == 0の場合はBIGINT、そうでない場合はNUMERIC |
DATE ANSI |
DATE |
DATE VMS |
TIMESTAMP |
TIME |
TIME |
TIMESTAMP |
TIMESTAMP |
INTERVAL |
BIGINT |
BYTE VARYING |
VARBINARY |
LIST OF BYTE VARYING |
BLOB |
SQL型(java.sql.Types) |
Rdb SQLのデータ型 |
CHAR |
CHAR(n) |
NCHAR |
NCHAR(n) |
VARCHAR |
VARCHAR(n) |
FLOAT |
REAL |
DOUBLE |
DOUBLE PRECISION |
DECIMAL |
DECIMAL[(n[,n])] |
INTEGER |
INTEGER |
SMALLINT |
SMALLINT |
TINYINT |
TINYINT |
BIGINT |
BIGINT |
NUMERIC |
BIGINT(n) |
DATE |
DATE ANSI |
TIMESTAMP |
TIMESTAMP |
TIME |
TIME |
BIGINT |
INTERVAL |
VARBINARY |
BYTE VARYING |
BLOB |
LIST OF BYTE VARYING |
CLOB |
LIST OF BYTE VARYING |
SQL型(java.sql.Types) |
Java型 |
BIT |
boolean |
TINYINT |
byte |
SMALLINT |
short |
INTEGER |
int |
BIGINT |
long |
REAL |
float |
FLOAT |
double |
DOUBLE |
double |
DECIMAL |
java.math.BigDecimal |
NUMERIC |
java.math.BigDecimal |
CHAR |
java.lang.String |
VARCHAR |
java.lang.String |
LONGVARCHAR |
java.lang.String |
DATE |
java.sql.Date |
TIME |
java.sql.Time |
TIMESTAMP |
java.sql.Timestamp |
BINARY |
byte[] |
VARBINARY |
byte[] |
BLOB |
java.sql.Blob |
CLOB |
java.sql.Clob |
Java型 |
SQL型(java.sql.Types) |
boolean |
BIT |
byte |
TINYINT |
short |
SMALLINT |
int |
INTEGER |
long |
BIGINT |
float |
REAL |
double |
DOUBLE |
java.math.BigDecimal |
NUMERIC |
java.lang.String |
VARCHARまたはLONGVARCHAR |
byte[] |
VARBINARYまたはLONGVARBINARY |
java.sql.Date |
DATE |
java.sql.Time |
TIME |
java.sql.Timestamp |
TIMESTAMP |
java.sql.Blob |
BLOB |
java.sql.Clob |
CLOB |