Oracle® JDBC for Rdb

ユーザーズ・ガイド

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サイトで提供されるコンテンツについては、一切の責任を負いかねます。当該コンテンツの利用は、お客様の責任になります。第三者の製品またはサービスを購入する場合は、第三者と直接の取引となります。オラクル社およびその関連会社は、第三者の製品およびサービスの品質、契約の履行(製品またはサービスの提供、保証義務を含む)に関しては責任を負いかねます。また、第三者との取引により損失や損害が発生いたしましても、オラクル社およびその関連会社は一切の責任を負いかねます。



目次

 

 

はじめに. 7

このマニュアルの目的7

対象読者. 7

このマニュアルの構成. 7

表記規則. 7

第1章       概要. 9

第2章       Oracle JDBC for Rdb. 11

2.1      Oracle JDBC for Rdbネイティブ・ドライバ. 11

2.1.1        Oracle RdbデータベースのURL指定(Oracle JDBC for Rdbネイティブ・ドライバを使用する場合)11

2.1.2        クラス(Oracle JDBC for Rdbネイティブ・ドライバを使用する場合)12

2.2      Oracle JDBC for Rdb Thinドライバ. 12

2.2.1        Oracle RdbデータベースのURL指定(Oracle Rdb Thinドライバを使用する場合)13

2.2.2        クラス(Oracle JDBC for Rdb Thinドライバを使用する場合)14

2.3      接続オプション. 14

2.4      Oracle JDBC for Rdbのシステム・プロパティ. 17

第3章       Oracle JDBC for Rdbサーバー. 19

3.1      Oracle JDBC for Rdb Thinサーバー. 19

3.1.1        Thinサーバーの起動20

3.2      Oracle JDBC for Rdbマルチプロセス・サーバー. 21

3.2.1        マルチプロセス・サーバーの起動22

3.2.2        共有メモリーの使用. 24

3.2.3        エグゼキュータの事前起動. 24

3.2.4        エグゼキュータの命名. 25

3.2.5        エグゼキュータ・プロセスの起動. 26

3.3      Oracle JDBC for Rdbプール・サーバー. 28

3.3.1        プール・サーバーの起動29

3.3.2        プール・サーバーの操作. 30

第4章       サーバーの構成. 32

4.1      サーバーの構成オプション. 32

4.2      プール・サーバーの構成オプション. 40

4.3      構成ファイル. 43

4.3.1        標準のプロパティ・ファイル. 43

4.3.2        XML書式の構成ファイル. 44

第5章       SSLの使用.. 56

5.1      SSLの構成. 56

5.1.1        クライアントSSLの構成. 56

5.1.2        サーバーSSLの構成. 58

5.2      SSLとコントローラ. 59

5.3      SSL構成オプション. 60

5.4      自己署名付き証明書を使用したテスト. 61

第6章       Oracle JDBC for Rdbコントローラ. 63

6.1      コントローラの実行. 66

6.1.2        コントローラのコマンドライン. 69

6.2      サーバーへの接続. 74

6.2.1        connectコマンド. 75

6.2.2        暗黙的な接続. 76

6.3      制御パスワード. 76

6.4      サーバーの操作. 77

6.4.1        サーバーのクローズ. 78

6.4.2        サーバーのオープン. 79

6.4.3        サーバーの表示. 81

6.4.4        サーバーの起動. 83

6.4.5        サーバーの停止. 85

6.4.6        サーバーの監視. 87

6.4.7        サーバーのポーリング. 88

6.5      クライアントの操作. 90

6.5.1        クライアントの表示. 90

6.5.2        クライアントの停止. 91

第7章       Oracle SQL/ServicesとOracle JDBC for Rdbサーバー. 95

7.1      JDBCディスパッチャ. 95

7.1.1        Oracle SQL/Services JDBCディスパッチャの作成95

7.1.2        サーバーに対するOracle SQL/Services JDBCディスパッチャの関連付け96

7.1.3        JDBCディスパッチャの起動102

7.1.4        JDBCディスパッチャの停止103

7.2      Oracle SQL/Servicesによって使用されるコマンド・プロシージャ. 103

7.2.1        JDBCディスパッチャの設定手順. 104

7.3      プール・サーバーの使用. 105

第8章       その他の機能. 108

8.1      匿名のユーザー名. 108

8.2      BYPASS権限. 108

8.2.1        BYPASSとマルチプロセス・サーバー. 109

8.3      persona. 110

8.3.1        personaとサーバーの操作. 110

8.4      デフォルト・トランザクション. 111

8.5      Rdbネイティブ・ドライバとエグゼキュータ・サブプロセスの併用. 112

8.5.1        ハンドシェークの最大試行回数と待ち時間の設定. 112

8.6      FetchSize. 113

8.7      Statement.cancel()メソッド・コールの無視. 113

8.8      非アクティブ・タイムアウト. 114

8.8.1        クライアント接続タイムアウト114

8.8.2        サーバー非アクティブ・タイムアウト115

8.9      JDBCヒント・メソッド. 116

8.10     lockwaitとmaxtries. 116

8.10.1      lockwaitの優先順位. 117

8.11     ロギング. 119

8.12     名前. 119

8.13     名前付きデータベース. 121

8.14     起動時コマンド. 122

8.14.1      srv.onStartCmd. 122

8.14.2      srv.onExecStartCmd. 124

8.15     サーバー構成ファイルにおけるパスワードの不明瞭化. 124

8.16     サーバーおよびデータベース・アクセスの制限. 126

8.16.1      データベース・アクセスの制限. 126

8.16.2      ユーザー・アクセスの制限. 127

8.16.3      サーバーに対するその他のアクセス保護. 128

8.17     CONNECTION.setReadOnly()のスコープ129

8.18     サーバー・コマンド・プロシージャ. 129

8.18.1      サーバー起動コマンド・プロシージャ. 130

8.18.2      エグゼキュータ起動コマンド・プロシージャ. 131

8.19     サーバー/クライアントのプロトコル・チェック. 132

8.20     OpenVMS FailSAFE IPの使用132

8.21     SET文. 133

8.22     SQL文のキャッシュ. 134

8.23     トレース. 136

8.23.1      tracelevelの設定136

8.23.2      tracelevelの短縮形138

8.23.3      トレース値. 138

8.24     ファイルおよびディレクトリに関するアクセス要件. 139

第9章       Oracle RdbのJDBC拡張機能. 141

9.1      BLOB処理の拡張. 141

9.2      ResultSet.getBytes()142

第10章         その他の情報. 143

10.1     許可されていない動的SQL文. 143

10.2     Oracle JDBC for Rdb Thinサーバーの設定、起動および使用(例)143

10.3     Oracle SQL/ServicesによるOracle JDBC for Rdb Thinサーバーの設定と起動(例)152

10.4     構成ファイルの例(MY_SERVERS.XML). 158

10.5     Oracle Rdbからjava.sql.Typesへのデータ型のマッピング. 160

10.6     java.sql.TypesからOracle Rdbへのデータ型のマッピング. 161

10.7     JDBC仕様: SQLからJavaへのデータ型のマッピング. 162

10.8     JDBC仕様: JavaからSQLへのデータ型のマッピング. 163

 

 



はじめに

このマニュアルの目的

『Oracle JDBC for Rdbユーザーズ・ガイド』では、Oracle JDBC for Rdbドライバおよびサーバーの概念、機能および使用方法について説明します。このマニュアルでは、AlphaサーバーおよびIntegrityサーバー上のOpenVMS用Oracle JDBC for Rdbについて説明します。

対象読者

このマニュアルでは、次のタスクを担当するユーザーを対象としています。

§   システム管理

§   データベース管理

§   アプリケーション・プログラミング

このマニュアルの構成

このマニュアルは、10の章から構成されています。

  第1章

概要

  第2章

Oracle JDBC for Rdbドライバについて説明します。

  第3章

Oracle JDBC for Rdbサーバーについて説明します。

  第4章

Oracle JDBC for Rdbサーバーの構成方法の詳細について説明します。

  第5章

Oracle JDBC for RdbでSSLを使用する方法の詳細について説明します。

  第6章

Oracle JDBC for Rdbコントローラの使用方法について説明します。

  第7章

Oracle JDBC for RdbとOracle SQL/Servicesを併用する方法について説明します。

  第8章

利用可能なその他の機能について説明します。

  第9章

Oracle Rdbで利用可能なJDBC拡張機能について説明します。

  第10章

一般的な例とデータ型の互換性を示します。

表記規則

Oracle JDBC for Rdbは、JDBCとも表記されます。

Hewlett-Packard社は、HP社とも表記されます。

このマニュアルでは次の表記規則を使用します。

word

書式例に含まれる小文字の単語は、ユーザーが指定する構文要素を表します。

[ ]

大カッコは、カッコ内の項目を任意に選択することを表します。

{ }

中カッコは、カッコ内の項目からいずれか1つを選択する必要があることを表します。

...

水平の省略記号は、前にある項目を繰り返すことができることを示します。

.
.
.

例の中の垂直の省略記号は、例に直接関連しない情報が省略されていることを示します。

 

 

目次

 



第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の一般的な情報:

http://java.sun.com/reference

 

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マネージャを使用すると実行できます。

 

目次


 

第2章  
Oracle JDBC for Rdb

 

Oracle JDBC for Rdbドライバには、次の2つのタイプがあります。

 

§   Oracle JDBC for Rdbネイティブ・ドライバ

§   Oracle JDBC for Rdb Thinドライバ 

 

2.1         Oracle JDBC for Rdbネイティブ・ドライバ

 

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アプレットを必要とするアプリケーションには適していません。

 

 

2.1.1               Oracle RdbデータベースのURL指定(Oracle JDBC for Rdbネイティブ・ドライバを使用する場合)

 

JDBC DriverManagerを使用してOracle Rdbデータベースに接続する際にネイティブ・ドライバを使用する場合は、次の接続URL書式を使用します。

書式

               jdbc:RdbNative:<database_specification><connect_switches>

 

要素

 書式要素を表2–1「RdbNative書式要素」に示します。

 

表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

 

 

2.1.2               クラス(Oracle JDBC for Rdbネイティブ・ドライバを使用する場合)

 

Rdbネイティブ・ドライバは、次のクラスにあります。

 

  oracle.rdb.jdbc.rdbNative.Driver

 

2.2         Oracle JDBC for Rdb Thinドライバ

 

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ソケットをサポートしている必要があります。

 

 

2.2.1               Oracle RdbデータベースのURL指定(Oracle Rdb Thinドライバを使用する場合)

 

JDBC DriverManagerを使用してOracle Rdbデータベースに接続する際にThinドライバを使用する場合は、次の接続URL書式を使用します。

 

書式

  jdbc:rdbThin://<node>:<port>/<database_specification><connect_switches>

 

要素

 書式要素を表2–2「RdbThin書式要素」に示します。

 

表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サーバーの起動元アカウントおよびディレクトリに対して有効である必要があります。

 

 

2.2.2               クラス(Oracle JDBC for Rdb Thinドライバを使用する場合)

 

Rdb Thinドライバは、次のクラスにあります。

 

                 oracle.rdb.jdbc.rdbThin.Driver

 

目次

 

2.3         接続オプション


Oracle JDBC for Rdbドライバでは、接続時に確立される特定のデフォルトの動作および設定を指定するために接続文字列に追加される可能性がある一連のオプションを認識します。

 

接続オプションは、セパレータとして@文字を使用し接続URLに直接追加することもできますし、DriverManager.GetConnection()メソッドに渡すことができるプロパティ・ブロック内のプロパティ値として追加することもできます。

 

接続URL内での書式

               @<option_name>=<value>

 

オプション

使用可能な接続オプションを、表2–3「接続オプション」に示します。

  

表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ヒント・メソッドが遵守されます。
falseの場合は、オプションの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);

 

 

 

2.4         Oracle JDBC for Rdbのシステム・プロパティ

 

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

 

 

目次


 

第3章  
Oracle JDBC for Rdbサーバー

 

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のディレクトリおよびファイルに対する所定のアクセス権が必要です。詳細は、「ファイルおよびディレクトリに関するアクセス要件」を参照してください。

 

3.1         Oracle JDBC for Rdb Thinサーバー

 

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)。

3.1.1         Thinサーバーの起動

 

Thinサーバーを起動する方法には、コントローラ内で適切なstart文を使用する方法、Oracle SQL/Services JDBCディスパッチャとして起動する方法、およびオペレーティング・システムのコマンドラインから直接起動する方法があります。

 

3.1.1.1   Oracle JDBC for RdbコントローラからThinサーバーを起動する方法

 

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

 

3.1.1.2   Oracle SQL/ServicesからThinサーバーを起動する方法

 

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>

 

              

3.1.1.3   コマンドラインからThinサーバーを起動する方法

 

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書式の構成ファイル」を参照してください。

 

3.2         Oracle JDBC for Rdbマルチプロセス・サーバー

 

Oracle JDBC for Rdbマルチプロセス・サーバーは、メモリー・フットプリントが小さいサブプロセスを使用してOracle JDBC for Rdb Thinドライバからのリクエストを処理し、要求された操作をOracle Rdbデータベース上で実行するサーバー側のコンポーネントです。

 

マルチプロセス・サーバーはマルチスレッドであり、各クライアントにデータベース・アクセス用の独自のサブプロセスを割り当てることにより複数のクライアントを同時に処理し、同時実行性と可用性を向上させます。

 

マルチプロセス・サーバーの操作のほとんどはメインのサーバー・プロセスの中のクライアント・スレッド・コンテキスト内で実行され、クライアントに割り当てられたサブプロセスに制御が渡されるのは、Oracle Rdbデータベースに対する直接的な操作が必要な場合のみです。どのクライアントもそれ独自のOpenVMSサブプロセスを持つので、同時実行性が改善されます。それは、データベース操作の同期化をサーバーで行う必要がないためです。

 

割り当てられたサブプロセスはデフォルト時、クライアントの切断時に終了します。エグゼキュータは、クライアントの切断後に再利用できるよう、そのままにしておくこともできます。詳細は、「エグゼキュータの事前起動」を参照してください。

 

マルチプロセス・サーバーは、Oracle Rdbデータベースにサービスを提供する各ノードにインストールされ、各ノード上で起動されます。該当するノードでは、Oracle Rdbがすでにインストールされていて、稼働している必要があります。

 

マルチプロセス・サーバーは、TCP/IP上でJavaソケットを使用し、Thinドライバと通信します(デフォルトのポートIDは1701)。

 

 

3.2.1         マルチプロセス・サーバーの起動

 

マルチプロセス・サーバーを起動する方法には、コントローラ内で適切なstart文を使用する方法、Oracle SQL/Services JDBCディスパッチャとして起動する方法、およびオペレーティング・システムのコマンドラインから直接起動する方法があります。

 

3.2.1.1   コントローラからマルチプロセス・サーバーを起動する方法

 

マルチプロセス・サーバーは、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

 

 

3.2.1.2   Oracle SQL/Servicesからマルチプロセス・サーバーを起動する方法

 

マルチプロセス・サーバーは、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サーバー」を参照してください。

 

3.2.1.3   コマンドラインからマルチプロセス・サーバーを起動する方法

 

マルチプロセス・サーバーは、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

 

3.2.2   共有メモリーの使用

 

マルチプロセス・サーバーでは、そのエグゼキュータと通信するために、共有グローバル・メモリーを割り当てる必要があります。その場合は、サーバー構成オプションのsharedmemを使用して指定できます。

 

共有メモリーのデフォルトの割当ては1024KBであり、これが十分なのはエグゼキュータが1つまたは2つの場合のみです。

 

サーバーと同時に動作すると考えられるエグゼキュータごとに1024KBを割り当てるのが目安ですが、それは問合せの複雑さ、関連する列の数、Rdbからエグゼキュータに返されるデータを保持するために作成される必要があるデータ領域のサイズによって異なります。

 

3.2.3   エグゼキュータの事前起動

 

マルチプロセス・サーバーの場合は、サーバーの起動時に事前開始できるエグゼキュータ・プロセスの数を指定することもできます。

 

また、サーバーの稼働中に待機させておくことができる解放されたエグゼキュータ・プロセスの最大数を指定することもできます。システム・ロードが原因でOpenVMSのプロセスおよびサブプロセスの起動にシステムで時間が少しかかる場合、これは特に便利です。

 

エグゼキュータ・プロセスを事前起動しておけば、クライアントがその最初のデータベース接続にかかる時間全体を短縮できます。

 

3.2.4   エグゼキュータの命名

 

単一のシステム上で起動される各エグゼキュータは、該当するシステム上で一意なプロセス名を持ちます。デフォルト時、その名前は、起動元サーバーの名前と、そのサーバーに関連するエグゼキュータ・プロセスのインスタンスを表す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

 

注意:

接頭辞が長くなると、一意性を確保するための文字数が短くなります。そのため、エグゼキュータ名の接頭辞をカスタマイズする際は、サーバーに同時に維持させるエグゼキュータの数を考慮する必要があります。

 

 

3.2.5               エグゼキュータ・プロセスの起動

 

マルチプロセス・サーバーは、割り当てて起動するエグゼキュータごとに、サブプロセスを1つ作成します。このサブプロセスの作成時には、OpenVMSのコマンド・プロシージャが使用されます。これらのコマンド・プロシージャについては、このドキュメントの「サーバー・コマンド・プロシージャ」および「起動時コマンド」を参照してください。

 

サーバーでpersona(詳細は「persona」を参照)が指定されている場合、サーバーはOpenVMS CREPRCシステム・サービスを使用して該当プロセスを起動します。personaが指定されていない場合は、Java System.exec()メソッドがかわりに使用されます。

 

サーバーを稼働させるための環境またはJDBCディレクトリが適切に設定されていないと、エグゼキュータ・プロセスの起動時にエラーが発生する可能性があります。

 

JDBCディレクトリのアクセス要件の詳細は、 「ファイルおよびディレクトリに関するアクセス要件」 を参照してください。

 

エグゼキュータ・プロセスを起動する際の手順は、サーバーでpersonaを使用するかどうかによって異なります。

 

3.2.5.1   エグゼキュータの起動手順

 

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を使用する場合

 

personaを使用する場合は、次の手順が実行されます。

 

1.      サーバー名に基づき、新しいプロセスのエグゼキュータ名が生成されます。詳細は、「エグゼキュータの命名」を参照してください。

2.      稼働中のサーバーの現在の割当て制限に基づいて、エグゼキュータ・プロセスの割当て制限が決定されます。 

3.      終了メールボックスがエグゼキュータ・プロセスのために設定され、読取りが発行されます。

4.      CREPRCを使用してプロセスが作成され、SYS$SYSTEM:LOGINOUT.EXEが実行されます。

5.      先のリストの手順3〜6が実行されます。

 

 

3.2.5.2   エグゼキュータ・プロセスの起動時の問題

 

エグゼキュータ・サブプロセスの作成時にサーバーで問題が発生すると、その問題に関連するステータス・コードがサーバー・ログに書き込まれます。

 

  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の論理名によって指定されたディレクトリに対してサーバー・プロセスが適切なアクセス権を所持していることが重要です。詳細は、「ファイルおよびディレクトリに関するアクセス要件」を参照してください。

 

目次

3.3         Oracle JDBC for Rdbプール・サーバー

 

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プール・サーバーは、接続のプーリングではなくサーバーのプーリングを実行します。接続は、各接続リクエスト内で作成されますが、再利用可能ではありません。

 

3.3.1    プール・サーバーの起動

 

プール・サーバーは、サーバーのリダイレクトを実行する各ノード上で起動する必要があります。プール・サーバーは、そのプール・サーバーによってプーリングされるサーバーと同じノード上に存在している必要がありません。

 

プール・サーバーを起動する方法には、コントローラ内で適切なstart文を使用する方法、Oracle SQL/Services JDBCディスパッチャとして起動する方法、およびオペレーティング・システムのコマンドラインから直接起動する方法があります。

 

3.3.1.1   コントローラからプール・サーバーを起動する方法

 

プール・サーバーは、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

 

 

3.3.1.2   Oracle SQL/Servicesからプール・サーバーを起動する方法

 

プール・サーバーは、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サーバー」を参照してください。

 

              

3.3.1.3   コマンドラインからプール・サーバーを起動する方法

 

プール・サーバーは、OpenVMSのコマンドラインから起動することもできます。

 

書式

      $ java –jar rdbthinsrvpool.jar [-option ]

 

有効なオプションについては、「プール・サーバーの構成オプション」を参照してください。

どのオプションにも、前にハイフン(–)を付ける必要があります。

 

 

$ java –jar rdbthinsrvpool.jar –cfg mycfg.xml –

–name mypoolserver

 

3.3.2         プール・サーバーの操作

 

プール・サーバーは、起動されると、プーリングされているサーバーのリストをラウンドロビン法でスキャンし、次に利用可能なサーバーを選択します。

プール内のサーバーの起動と停止は、いつでも実行できます。利用できないサーバーは、プール・サーバーによってバイパスされます。プール・サーバーでは、プール・サーバー自体の起動時に、プーリングされているサーバーの1つ以上を自動的に起動することもできます。

 

プール・サーバーの起動時は、そのプール内の各サーバーに対してチェックが実行され、プーリングされているサーバーのautoStartオプションが有効になっているかどうかが調べられます。autoStartが有効な場合は、プーリングされているサーバーのsrv.startupオプションによって指定されているコマンド・プロシージャが実行されます。詳細は、「サーバー・コマンド・プロシージャ」を参照してください。

 

プール・サーバーは稼働中、サーバーのプールにプーリングされている各サーバーでautoRestartオプションが有効になっていてまだ実行されているかを定期的にチェックします。プーリングされているものの稼働していないサーバーに対してautoRestartが有効になっていると、そのサーバーのsrv.startupオプションによって指定されているコマンド・プロシージャが実行され、そのサーバーが再起動されます。

 

プール・サーバーの起動時にsrv.keepAliveTimerオプションを使用すると、稼働していないautoRestartサーバーのチェックの間の時間を指定できます。詳細は、「プール・サーバーの構成オプション」を参照してください。

 

コントローラまたはOracle SQL/Servicesマネージャを使用してプール・サーバーを停止すると、該当サーバーの停止中に、該当プールにプーリングされているサーバーでautoStartが有効になっている全サーバーも停止されます。

 

3.3.2.1   プール・サーバーによるリダイレクトとfailSAFE IP

 

プール・サーバーによる接続のリダイレクト時、プーリングされているサーバーの中で選択されたサーバーのIPがThinドライバに返されます。そのため、Thinドライバは、その選択されたサーバーにクライアントの接続リクエストをリダイレクトできます。DNSノード名の変換がクライアント・ノードとサーバー・ノードで異なる可能性があるので、プール・サーバーは指定されたノードをすべてIPアドレスに暗黙的に変換した後、得られたIPをThinドライバに返します。

 

このIPアドレスへの変換により、failSAFE IPによって実行されるスタンバイ・アドレスへのフェイルオーバーが制限される場合もあります。

 

failSAFE IPはOpenVMS上のTCP/IP Servicesによって提供されるオプション・サービスであり、これにより、ノードで障害が発生した場合にIPアドレスのフェイルオーバーが可能になります。

 

指定されたIPの「論理的」な性質を維持し、failSAFE IPがスタンバイ・ノードに正しくリダイレクトされるように、接続のリダイレクト時、指定されたノードをプール・サーバーがIPアドレスに変換しないように指定することもできます。

 

詳細は、「プール・サーバーの構成オプション」–srv.useLogicalIpsを参照してください。

 

目次


 

第4章  
サーバーの構成

 

 

Oracle JDBC for Rdbサーバーに適用される構成オプションは多数あり、それらはコマンドライン・オプションとして使用することもできますし、構成ファイル内のサーバー・オプションとして使用することもできます。

 

これらのオプションを構成ファイル内で使用する方法の詳細は、「構成ファイル」を参照してください。

 

利用可能な構成オプションの詳細を、次の項で説明します。

 

 

4.1         サーバーの構成オプション

 

次のサーバー構成オプションは、標準のThinサーバーおよびマルチプロセス・サーバーの場合に、コマンドラインまたは構成ファイルで使用できます。プール・サーバーで使用可能なオプションについては、「プール・サーバーの構成オプション」を参照してください。

 

表4–1「サーバーの構成オプション」に、これらのオプションを示します。

 

表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         プール・サーバーの構成オプション

 

プール・サーバーで使用できる有効な構成オプションを、表4–2「プール・サーバーの構成オプション」に示します。

 

表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を指定する必要があります。

 

プール・サーバーの構成例は、「構成ファイル」を参照してください。

 

目次

4.3         構成ファイル

 

コマンドラインで一連のスイッチを設定するかわりに、構成ファイルを指定し、設定の詳細を示すこともできます。

 

次の2つの書式の構成ファイルが認識されます。

 

§   標準のJavaプロパティ・ロード・ファイル

§   XML書式のファイル

 

4.3.1               標準のプロパティ・ファイル

 

ここでは、標準の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

 

目次

 

4.3.2               XML書式の構成ファイル

 

コマンドラインで一連のスイッチを設定するかわりに、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書式の構成ファイルの様々なセクションについて説明します。

 

4.3.2.1   configセクション

このセクションでは、構成設定の全体をカバーし、次のような各構成セクションを規定します。

 

書式

 

<config>

       [ session section ]

       [ databases section ]

       [ servers section ]   

</config>

 

4.3.2.2   sessionセクション

 

このセクションでは、対話型セッションのセッション特性を規定します。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セクションで指定することもできます。

 

4.3.2.3   databasesセクション

 

 このセクションでは、databaseセクションを1つ以上指定します。

 

書式

 

            <databases>

           [ database section ]

            </databases>

 

 

4.3.2.4   databaseセクション

 

このセクションでは、データベースの名前と一連のプロパティを指定します。

 

書式

 

<database>

       [ database property  ]

/>

 

 オプション

databaseセクションで有効なプロパティを、表4–4「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>

 

4.3.2.5   serversセクション

 

              このセクションでは、サーバー・プロパティ・セクションを1つ以上指定します。

 

書式

 

<servers>

    [ server section ]

</servers>

 

4.3.2.6    serverセクション

 

このセクションでは、該当するサーバーに割り当てるプロパティを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>

 

 

4.3.2.7   pooledServerサブセクション

 

このサブセクションでは、親サーバーのサーバー・プールに入るサーバーを指定します。宣言するサーバー名では、該当する構成ファイル内ですでに指定されているサーバーを参照する必要があります。

 

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>

 

4.3.2.8   allowDatabaseサブセクション

 

このサブセクションでは、サーバーを使用するクライアントからアクセスされる可能性があるデータベースを指定します。宣言するデータベース名は、この構成ファイルの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>

 

4.3.2.9   allowUserサブセクション

 

このサブセクションでは、サーバーによってアクセスが許可されるユーザー名を指定します。宣言するユーザー名は、Rdbによって認識される有効なユーザー名である必要があります。このレベルの制限に対するサーバーでのユーザー名のマッチングでは、大/小文字が区別されません。

 

このサブセクションは、サーバーの宣言内で使用する場合にのみ有効です。

allowUserサブセクションは、単一のサーバー宣言内に複数存在することができます。

 

ユーザー・アクセスを制限するには、サーバー属性restrictAccess"true"に設定する必要があります。

 

詳細は、「ユーザー・アクセスの制限」を参照してください。

 

書式

 

              <allowUser name="username" />

 

 

 

<server

      name="srv2restrict"

      type="RdbThinSrv"

      url="//localhost:1701/"

      restrictAccess="true">

      <allowUser name="smith"/>

      <allowUser name="jones"/>

</server>

 

4.3.2.10                構成ファイル内でのファイル名の指定

 

構成ファイルのセクション内では、一連の属性で次のようなファイル名を指定する必要があります。

 

§   cfg="<filename>"

§   log="<filename>"

§   srv.execStartup="<filename>"

§   srv.startup="<filename>"

 

 

ファイル名は、ファイル・パスが全部または一部含まれる可能性がある有効なOpenVMSファイルでなければならず、論理名を含むことができます。

論理名を使用する場合、サーバーが起動されるコンテキストで利用できる必要があり、ファイルはサーバーを起動するVMSユーザーからアクセスできる必要があります。

 

構成内で定義されているサーバーが、コントローラを使用して起動されるか、プール・サーバーによってプーリングされているサーバーとして起動されるか、またはOracle SQL/Servicesによって起動されると、該当するサーバーのためにデタッチされたプロセスが作成され、JavaおよびOracle Rdbにアクセスできる有効なプロセス環境がLOGINOUT.EXEの実行によって保証されます。

 

LOGINOUT.EXEプログラムが実行されるため、相対ファイル・パスを使用するファイル指定はすべて、起動者のログイン・ディレクトリに対して相対的である必要があります。そうでない場合は、完全ファイル指定を使用する必要があります。

 

 

目次


 

第5章  
SSLの使用

 

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に関する基本的な理解が前提になります。

 

5.1         SSLの構成

 

SSLの接続特性に関する情報を、クライアントにもサーバーにも渡す必要があります。また、通信チャネルを確立するには、SSLのセキュリティ特性に関してサーバーもクライアントも同意する必要があります。

 

さらに、クライアントもサーバーも、認可用の同じセキュリティ証明書を持つことが重要です。後述の項では、クライアントの接続リクエストでSSL特性をSSL対応のOracle JDBC for Rdbサーバーに渡す方法の詳細を示します。

 

 

5.1.1               クライアントSSLの構成

 

クライアント・アプリケーションでは、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セキュリティのドキュメントを参照してください。

 

5.1.2   サーバーSSLの構成

 

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対応でないものは、無視され、接続リクエストのリダイレクトの候補とみなされます。

 

 

 

5.2         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対応のサーバーとしてポーリング・リクエストに応答する任意のサーバーに接続します。

 

 

5.3         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>

なし

 

トラスト・ストアのパスワードを指定します。

 

 

  

 

 

5.4         自己署名付き証明書を使用したテスト

 

次のサンプル・コードを使用すると、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を使用し、クライアント/サーバーの通信が行えます。

 

目次


 

第6章  
Oracle JDBC for Rdbコントローラ

 

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

 

 

6.1         コントローラの実行

 

コントローラを使用すると、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サーバーを管理することができません。

制御パスワードの指定の詳細は、「サーバーの構成オプション」を参照してください。

 

 

表6-1     コントローラのオプション

オプション

デフォルト値

説明

-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セクション」を参照してください。

 

 

表6-2     コントローラのコマンド・キーワード

オプション

説明

-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

 

6.1.2   コントローラのコマンドライン

 

コントローラの起動時にコマンド・キーワードを1つも指定しないと、アプリケーションは複数のコマンドを発行できるコマンドライン・プロンプト・モードになります。

 

コントローラの起動時に有効な接続情報(ノード、ポート、ユーザーおよびパスワード)を指定すると、コントローラは指定されたサーバーに自動的に接続しようとします。

接続が確立されていない場合または別のサーバー接続が必要な場合は、制御コマンドラインでconnectコマンドを発行できます。詳細は、「サーバーへの接続」を参照してください。

 

connectコマンドラインでユーザー名およびパスワードを指定しないと、コントローラ起動時の構成オプションの値が使用されます。構成ファイルを指定すると、構成ファイルのセッション特性が使用されます。セッション特性の詳細は、「XML書式の構成ファイル」「sessionセクション」を参照してください。

 

コマンドは、制御コマンドラインで、サーバー接続のコンテキスト内または特定のサーバー接続のコンテキスト外で発行できます。  

 

サーバーに対する接続が確立された後で発行できるコマンドについては、「サーバー接続を必要とするコマンド」を参照してください。

 

サーバー接続を必要としないコマンドについては、「サーバー接続を必要としないコマンド」を参照してください。

 

 

書式

$java -jar rdb$jdbc_home:rdbthincontrol.jar –cfg my_servers.xml

 

6.1.2.1   サーバー接続を必要とするコマンド

 

有効なサーバー接続が確立された後は、表6–3「コントローラのコマンドライン・コマンド(接続内)」のコマンドを発行できます。

 

表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

$

 

6.1.2.2     サーバー接続を必要としないコマンド

 

接続を確立しなくても発行できるコマンドは多数ありますが、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>

 

 

目次

 

6.2         サーバーへの接続

 

コントローラから発行できるコマンドのほとんどでは、サーバーと有効な制御接続を確立する必要があります。コントローラの起動時に有効な接続情報(ノード、ポート、ユーザーおよびパスワード)を指定すると、コントローラは指定されたサーバーに自動的に接続しようとします。

 

コントローラの起動時にユーザーおよびパスワードを指定すると、その情報はコマンド文で明示的にオーバーライドされないかぎり、コントローラのセッション全体で維持され、後続の接続リクエストで使用されます。

 

コマンドは、制御接続が確立されている場合にのみサーバー上で実行されます。制御接続を確立するには、接続リクエスト時に正しい制御パスワードを指定する必要があります。このパスワードの詳細は、「制御パスワード」を参照してください。

 

この制御接続は、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セクション」を参照してください。

 

 

6.2.1   connectコマンド

 

接続が確立されていない場合、現在の接続が切断されている場合、または別のサーバー接続が必要な場合は、制御コマンドラインで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セクション」を参照してください。

 

 

6.2.2               暗黙的な接続

 

いくつかの制御コマンドでは、ターゲット・サーバーとの制御接続の確立が必要です。ターゲット・サーバーが現在接続されていない場合は、明示的に指定した接続情報とセッション接続情報が使用され、制御接続の確立が試行される場合があります。

 

接続情報は、次のように、該当するコマンドとともにコマンドラインで指定することもできます。

 

rdbthincontrol> stop server //localhost:1701/ jones mypassword

 

暗黙的な接続は、いったん確立されると、別の暗黙的な接続または明示的な接続によってオーバーライドされるまで、現在のセッション接続として確立されます。

 

6.3         制御パスワード

 

アクティブなサーバーまたはクライアント上で操作を実行するには、制御パスワードを指定する必要があります。

 このパスワードは、該当するアクティブなサーバーの制御パスワードに一致する必要があります。そうしないと、例外が通知され、該当する操作に失敗します。

 

コントローラを起動する場合、パスワードはコマンドライン・オプションとして指定することもできますし、「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

 

 

目次

 

6.4         サーバーの操作

 

               ここでは、コントローラを使用し、サーバー上で対話型またはコマンド・モードで実行できる操作の詳細を示します。

 

注意:

 

この項で示す例では、Javaが設定済であり、次のDCL記号が環境内で設定済であることを前提としています。

 

$ thincontrol :== 'java'  -jar rdb$jdbc_home:rdbthincontrol.jar –

  –cfg my_servers.xml –controlpass "MySecretPassword"

 

それらの例で使用される構成ファイルの内容については、「構成ファイルの例(MY_SERVERS.XML)」を参照してください。

 

6.4.1               サーバーのクローズ

 

アクティブなサーバーは、コントローラを使用してクローズできます。その場合は、該当するサーバーの有効な制御パスワードを指定する必要があります。

 

サーバーをクローズすると、そのmaxClients属性がゼロ(0)に設定されるため、接続をそれ以上確立することができなくなります。すでに確立されている接続は、影響を受けません。クローズされているサーバーは、後でopenコマンドを発行し、再度オープンすることができます。その場合は、該当するサーバーのmaxClientsの値が再確立され、クローズする前の値に戻されます。詳細は、「サーバーのオープン」を参照してください。

 

制御パスワードが制御セッションの制御パスワードに一致するサーバーだけがクローズされます。

 

6.4.1.1   対話型モード 

サーバーをクローズする際に利用できる対話型の制御コマンドを、表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.4.1.2   コマンド・モード

 

サーバーをクローズする際に利用できるコマンド・モードのコマンドを、表6–6「サーバーのクローズ(コマンド・モード)」に示します。

 

表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

 

 

6.4.2   サーバーのオープン

 

アクティブなサーバーは、コントローラを使用してオープンできます。その場合は、該当するサーバーの有効な制御パスワードを指定する必要があります。

サーバーをオープンすると、該当するサーバーを使用して、新しいクライアント接続を確立できます。

 

クローズされているサーバーは、openコマンドを発行し、再度オープンすることができます。その場合は、該当するサーバーのmaxClientsの値が再確立され、クローズする前の値に戻されます。

制御パスワードが制御セッションの制御パスワードに一致するサーバーだけがオープンされます。

 

6.4.2.1   対話型モード 

 

サーバーをオープンする際に利用できる制御コマンドを、表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.4.2.2   コマンド・モード

 

サーバーをオープンする際に利用できるコマンド・モードのコマンドを、表6–8「サーバーのオープン(コマンド・モード)」に示します。

 

表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.4.3   サーバーの表示

 

アクティブなサーバーおよび認識されているサーバーの情報は、コントローラを使用して表示できます。ただし、情報を表示するには、該当するサーバーの有効な制御パスワードを指定する必要があります。

 

すべてのサーバーまたはアクティブなサーバーを表示する場合は、制御パスワードが制御セッションの制御パスワードに一致するサーバーの情報だけが表示されます。

構成ファイルに格納されているサーバーまたは全サーバーを表示する場合は、構成ファイルに格納されているものとして全サーバーの定義が制御パスワードとは無関係に表示されます。

 

6.4.3.1   対話型モード 

 

サーバーを表示する際に利用できる制御コマンドを、表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.4.3.2    コマンド・モード

 

サーバーを表示する際に利用できるコマンド・モードのコマンドを、表6–10「サーバーの表示(コマンド・モード)」に示します。

 

表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

 

 

 

6.4.4   サーバーの起動

 

サーバーは、コントローラを使用して起動することができます。

コントローラが実行されているノードとは異なるノードまたはURLをサーバーで指定すると、例外が通知されます。

 

注意:

サーバーは現在、コントローラが実行されているのと同じノードが該当サーバーの構成で指定されている場合にのみ、起動できます。

リモート・サーバーの起動は現在、利用できません。

 

6.4.4.1   対話型モード 

 

サーバーを起動する際に利用できる制御コマンドを、表6–11「サーバーの起動(対話型モード)」に示します。

 

表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.4.4.2    コマンド・モード

 

サーバーを起動する際に利用できるコマンド・モードのコマンドを、表6–12「サーバーの起動(コマンド・モード)」に示します。

 

表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

 

6.4.5   サーバーの停止

 

アクティブなサーバーは、コントローラを使用して停止できます。その場合は、該当するサーバーの有効な制御パスワードを指定する必要があります。

制御パスワードが制御セッションの制御パスワードに一致するサーバーだけが停止されます。

 

注意:

サーバーを停止すると、該当するサーバー上のすべてのデータベース接続が強制的に終了され、クライアント・トランザクションの完了は待ちません。まずclose serverコマンドを使用してクライアント接続がさらに確立されるのを停止し、次にバインドされているクライアントが1つも存在しないときにstop serverコマンドを使用します。詳細は、「サーバーのクローズ」を参照してください。

 

サーバーを現在使用しているクライアントがあるかどうか確認するには、show serverまたはshow clientsコマンドを使用できます。詳細は、「サーバーの表示」を参照してください。

 

6.4.5.1   対話型モード 

 

サーバーを停止する際に利用できる制御コマンドを、表6–13「サーバーの停止(対話型モード)」に示します。

 

表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.4.5.2   コマンド・モード

 

 サーバーを停止する際に利用できるコマンド・モードのコマンドを、表6–14「サーバーの停止(コマンド・モード)」に示します。

 

表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

 

 

 

6.4.6         サーバーの監視

 

アクティブなサーバーのトレース出力を、コントローラのコンソールに表示できます。ただし、サーバーの有効な制御パスワードを指定しないと、そのトレースを監視することはできません。制御パスワードが制御セッションの制御パスワードに一致するサーバーだけが監視されます。

 

サーバーを監視する場合、該当するサーバーのトレース出力はすべて、コントローラを実行している現在のコンソールにも送られます。

トレース出力のメッセージ表示は、コマンドライン・インタフェースと非同期に実行されます。同じトレース情報は、サーバーのログ・ファイルにも送られます。

 
監視は、対話型モードでのみ利用できます。

 

注意:

 

サーバーはJavaログ出力を使用してトレース・メッセージをコントローラのようなリモート・コンソールにロギングするため、サーバーからの出力はバッファリングされてから、ネットワーク経由でコンソールに送信されます。つまり、バッファが満杯になった後消去されるので、トレース出力は散発的にコンソールに表示される可能性があります。

 

6.4.6.1   対話型モード 

サーバーを監視する際に利用できる制御コマンドを、表6–15「サーバーの監視(対話型モード)」に示します。

 

表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

 

 

 

6.4.7   サーバーのポーリング

 

pollコマンドでは、マルチキャスト情報を使用して、応答のあったOracle JDBC for Rdbサーバーをポーリングします。

 

利用可能な各サーバーは、各自がリスニングするノードおよびポートに関する情報を使って応答します。また、ポーリング応答により、該当するノード上でサーバーが使用しているプロセスIDもわかります。

 

制御パスワードがなくても、pollコマンドは使用できます。

 

6.4.7.1   対話型モード 

 

サーバーをポーリングする際に利用できる制御コマンドを、表6–16「サーバーのポーリング(対話型モード)」に示します。

 

表6-16  サーバーのポーリング(対話型モード)

コマンド

説明

poll

 

アクティブなサーバーがポーリングされます。

   

 

rdbthincontrol> poll

Polling servers ...

myserver(0) //localhost:1711/ (0x0B88<2952>)

rdbthnsrv1(0) //localhost:1701/ (0x0B30<2864>)

rdbthincontrol>

 

6.4.7.2   コマンド・モード

 

 

サーバーをポーリングする際に利用できるコマンド・モードのコマンドを、表6–17「サーバーのポーリング(コマンド・モード)」に示します。

 

表6-17  サーバーのポーリング(コマンド・モード)

コマンド

説明

-poll

 

アクティブなサーバーがポーリングされます。次のコマンドライン・オプションは、存在していても、無視されます。

 

         -name 

         -node

         -port

         -URL

 

   

 

$ thincontrol –poll

 

 

6.4.7.3   マルチキャスト・ポーリング

 

コントローラは、マルチキャスト・ポーリングを使用して、ネットワーク上で利用可能な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.5         クライアントの操作

6.5.1         クライアントの表示

 

アクティブなサーバー内のクライアントに関する情報は、コントローラを使用して表示できます。その場合は、該当するサーバーの有効な制御パスワードを指定する必要があります。

クライアントが表示されるのは、制御パスワードが制御セッションの制御パスワードに一致するサーバーの場合のみです。

 

6.5.1.1    対話型モード 

 

クライアントを表示する際に利用できる制御コマンドを、表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.5.1.2    コマンド・モード

 

クライアントを表示する際に利用できるコマンド・モードのコマンドを、表6–19「クライアントの表示(コマンド・モード)」に示します。

 

表6-19  クライアントの表示(コマンド・モード)

コマンド

説明

-showclients

 

応答のあったサーバーの全クライアントが表示されます。

 

次のコマンドライン・オプションは、存在していても、無視されます。

 

         -name 

         -node

         -port

         -URL

         -all

         -active

 

   

 

$ thincontrol –showclients 

 

 

6.5.2   クライアントの停止

 

アクティブなサーバー内のクライアントは、コントローラを使用して停止できます。その場合は、該当するサーバーの有効な制御パスワードを指定する必要があります。

クライアントが停止されるのは、制御パスワードが制御セッションの制御パスワードに一致するサーバーの場合のみです。

 

データベース・ファイルを指定すると、該当するデータベースに現在接続されているクライアントだけが停止されます。データベース・ファイル指定は、show clientsの出力に表示されるものと同じである必要があります(大/小文字は区別されない)。

 

 

 注意:

クライアントを停止すると、該当するクライアントの該当サーバー上のすべてのデータベース接続が強制的に終了され、クライアント・トランザクションの完了は待ちません。

show clientsコマンドを使用すると、該当するサーバーを現在使用しているクライアントがわかります。詳細は、「クライアントの表示」を参照してください。

 

次に示すコマンドで<client_id>を指定する場合、それはshow clientsコマンドから返されるクライアントIDに一致する必要があります。<client_id>の先頭のゼロ(0)は省略できます。

 

6.5.2.1    対話型モード 

 

クライアントを停止する際に利用できる制御コマンドを、表6–20「クライアントの停止(対話型モード)」に示します。

 

表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.5.2.2   コマンド・モード

 

クライアントを停止する際に利用できるコマンド・モードのコマンドを、表6–21「クライアントの停止(コマンド・モード)」に示します。

 

表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

 

 

 

目次


 

第7章  
Oracle SQL/ServicesとOracle JDBC for Rdbサーバー

 

 

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サーバーの設定と起動(例)」を参照してください。

 

7.1         JDBCディスパッチャ

 

JDBCという新しいSQL/Servicesディスパッチャ・プロトコルは、リリース7.1.6のOracle SQL/Servicesで導入されました。このディスパッチャ・タイプを使用すると、Oracle JDBC for Rdbサーバーと関連付けることができるJDBCディスパッチャを作成できます。

 

7.1.1         Oracle SQL/Services 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を使用できなくなります。

 

 

 

7.1.2   サーバーに対するOracle SQL/Services JDBCディスパッチャの関連付け

 

各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.      次にサーバーのサーバー・タイプが決定されます。

 

7.1.2.1   サーバー名の決定

 

サーバー名が必要なのは、その構成ファイルからプロパティを見つけるためにサーバーの起動時プロシージャによって使用される可能性があるからです。標準的なサーバーの様々な特性は、この使用される名前によって決まります。

 

また、サーバー名は、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という名前のサーバーが作成されます。

 

 

7.1.2.2   起動時に使用される追加のDCLコマンドの決定

 

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が実行されます。

 

 

7.1.2.3   サーバー構成ファイルの決定

 

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

 

 

例1

論理名が未定義で、ファイル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が使用されます。

 

例2

論理名が定義されている場合:

 

$ 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が使用されます。

 

 

7.1.2.4   サーバー・タイプの決定

 

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のサーバーが作成されます。

 

 

7.1.3         JDBCディスパッチャの起動

 

 

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

 

 

7.1.4               JDBCディスパッチャの停止

 

STOP DISPATCHER文を使用すると、実行中のJDBCディスパッチャを停止できます。

 

 

SQLSRV> STOP DISPATCHER JDBC_DISP

 

この文により、関連付けられているOracle JDBC for Rdbサーバーも停止されます。

 

JDBCディスパッチャとプール・サーバーが関連付けられていて、プーリングされているサーバーのautoStartが有効になっていると、それらプーリングされているサーバーも該当する時点で停止されます。

 

Oracle SQL/Services管理コンソールの詳細は、Oracle SQL/Servicesのドキュメントを参照してください。

 

目次

 

7.2         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を選択できます。

 

7.2.1               JDBCディスパッチャの設定手順

 

また、別の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 

 

7.3         プール・サーバーの使用

 

定義されているどの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構成ファイルの情報を直接使用することはありません。

 

 

目次


 

第8章  
その他の機能

 

8.1         匿名のユーザー名

 

デフォルトでは、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"

 

 

 

8.2         BYPASS権限

 

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オプションを使用します。

 

8.2.1               BYPASSとマルチプロセス・サーバー

 

マルチプロセス・サーバーを使用する場合は、別のエグゼキュータ・プロセスを使用して、データベース操作を実行します。このエグゼキュータ・プロセスは、起動元のサーバー・プロセスから権限および認可特性を継承します。

 

そのため、前述のような情報は、サーバー・プロセスについて説明したのとまったく同じ方法で、エグゼキュータ・プロセスに適用されます。

 

 

8.3         persona

 

Oracle JDBC for Rdb Thinサーバーの稼働中、サーバー・プロセスを起動したユーザーのデフォルトの権限と識別子を前提としています。それと同様に、SQL Services JDBCディスパッチャによって起動されたサーバーは、SQL/Servicesディスパッチャ・プロセスの権限および識別子を継承します。

 

この動作は、XML書式の構成ファイル内のサーバー定義でpersona値を指定するか、サーバーの起動時にコマンドラインでpersonaスイッチを指定すると、変更できます。

 

personaを指定して起動されると、サーバー・プロセスは指定されたpersonaからその権限と識別子を継承します。

 

BYPASSおよびSYSPRVの権限は、この場合もデフォルトで禁止されています。詳細は、「BYPASS権限」を参照してください。

 

特定のpersonaを指定してサーバーを起動するには、IMPERSONATE権限およびシステム認可データベースに対する読取りのアクセス権を備えたアカウントにログインする必要があります。

 

サーバーに関連付けるpersona値は、サーバーが稼働しているシステム上のOpenVMSの有効なpersonaである必要があります。

 

personaオプションの書式については、「サーバーの構成オプション」を参照してください。

 

 

8.3.1               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が読取り/書込みのアクセス権を所持していることを確認する必要があります。

 

詳細は、「ファイルおよびディレクトリに関するアクセス要件」を参照してください。

 

8.4         デフォルト・トランザクション

 

トランザクションが必要なときに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のドキュメントを参照してください。

 

 

 

8.5         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に対して書込みのアクセス権を所持していることを確認する必要があります。

 

8.5.1         ハンドシェークの最大試行回数と待ち時間の設定

メイン・プロセスがエグゼキュータ・プロセスを起動するとき、それら2つのプロセス間でハンドシェーク・プロトコルが確立され、それら2つのプロセスは以降プロセス間通信を実行できるようになります。

メイン・プロセスは、ハンドシェークの確立を100回すばやく連続して試行した後、デフォルト時は10ms間隔でその試行をもう500回実行します。

ワークロードが大きな一部のシステム(特に単一CPUシステム)では、サブプロセスの作成後、メイン・プロセスによる通信の確立が失敗することもあります。   プロセスおよびスレッドのスケジューリングによっては、サブプロセスの実行がスケジューリングされる前に、ハンドシェークを確立するための最大試行回数に到達してしまう場合もあります。

そのようなシステムでは、ハンドシェークの試行回数またはハンドシェーク試行間の待ち時間を増やし、ドライバとエグゼキュータの間の早期中断を回避することが必要な場合もあります。接続文字列でhandshakeTriesおよびhandshakeWaitオプションを使用すると、これらの値を変更できます。

詳細は、「接続オプション」を参照してください。

 

目次

 

8.6         FetchSize

 

StatementおよびResultSetでSetFetchSizeメソッドを使用すると、サーバー・レコード取得時のレコードのフェッチ・サイズを設定できます。FetchSizeは、一度に取得してネットワーク経由で返送するレコード件数に関するヒントをサーバーに提供します。

 

ネットワークI/Oは非常に高価であるため、単一のI/Oで送信できるデータ量が増えると、パフォーマンスが向上します。FetchSizeオプションを使用してデフォルトのFetchSizeを明示的に変更しなかった場合のデフォルト値は、100です。

 

 

 

8.7         Statement.cancel()メソッド・コールの無視

 

 

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);

 

 

8.8         非アクティブ・タイムアウト

 

クライアント・アプリケーションまたはサーバーが非アクティブな状態でいられる時間の長さ(この時間を超えると強制終了させられる)は、サーバー・スイッチおよび接続スイッチを使用して設定できます。

 

8.8.1   クライアント接続タイムアウト

 

–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つの値の小さい方の値が使用されます。

 

サーバーがクライアントをリスニングしているソケット上のアクティビティの有無によって非アクティブであるかどうかが判断され、クライアントから所定の期間リクエストが送信されない場合はタイムアウトとみなされます。

 

マルチプロセス・サーバー・エグゼキュータを使用している接続上でクライアント非アクティブ・タイムアウトが発生すると、該当するエグゼキュータが終了させられます。タイムアウト・イベントの後、接続は正しく終了させられます。とはいえ、接続上でアクティビティが検出されなかった理由が不明であるため、エグゼキュータ・サブプロセスは安全でないとみなされ、終了させられます。

 

 

8.8.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

 

サーバー非アクティブ・タイムアウトは、指定された期間、該当するサーバーに対して新しいクライアント接続が実行されないと、発生します。つまり、タイムアウト期間は、新しい接続が実行されるたびに始まります。タイムアウト期間は、満了した時点で現在の接続が該当するサーバーをまだ使用している場合、リセットされ、再開されます。

 

そのため、タイムアウト値は、サーバーが受け取る新しい接続リクエスト間の最小期間(この期間を超えるとサーバーが停止させられる)ですが、現在のサーバーが非アクティブであることが原因で、現在の接続がなくなるまで延長される場合もあります。

 

 

 

目次

 

8.9         JDBCヒント・メソッド

 

JDBCクラスのメソッドの中には、ドライバまたは基礎となるデータベース・システムにヒントを与えるので厳密に遵守する必要がないと考えられるものもあります。多くの既存のドライバでは、そのようなメソッドを黙って無視します。

 

他のドライバとの互換性を確保するために、usehints接続スイッチを使用して、オプションのヒント・メソッドを無視するよう指定することもできます。

 

            @usehints=false

 

このように設定すると、Oracle JDBC for Rdbドライバはヒント・メソッドを無視するよう指示されます。

 

Oracle JDBC for Rdbドライバはデフォルト時、ヒント・メソッドを遵守します。

 

次のメソッドは、必須でないヒントとみなされます。

 

         Connection.setReadOnly()

         ResultSet.setFetchDirection()

         ResultSet.setFetchSize()

         Statement.setFetchDirection()

         Statement.setFetchSize()

 

8.10   lockwaitとmaxtries

 

標準のThinサーバーは、マルチスレッド・サーバーであり、多数のクライアント・プロセスによるOracle Rdbへの同時アクセスが許可されます。単一のOpenVMSプロセス内ではOracle Rdbはシングルスレッドなので、Thinサーバーはクライアント・データベースのアクティビティを同期化する必要があります。

 

データベース・アクションをシリアライズする必要があるので、時間がかかる可能性があるアクションはサーバーのスループット全体に深刻な影響を及ぼすおそれがあります。

 

サーバーはデフォルト時、ロックを無期限に待ちます。ただし、クライアント・スレッドが他のクライアント・スレッドに与える影響を最小限に抑えるために、ロックに対するサーバーの待ち時間を指定することができます。

 

この待ち時間が無期限でない場合、スレッドはロックを取得する際、指定された時間(最大)まで待つことになります。ロックが付与されないと、制御はサーバーに戻されます。その場合、サーバーはデフォルト時、ロックの取得を10回試み(指定された時間(最大)まで毎回待つ)、それでもロックを取得できないとロックに関する例外を通知します。

 

指定する待ち時間が短い(たとえば1秒)と、あるスレッドがその兄弟関係にあるスレッドに与える影響を抑えるのに役立つ場合もあります。

 

lockwaitスイッチを使用すると、ロックに対する待ち時間(Rdbトランザクションによってサポートされているロックの最小待ち時間であり、実際の最小待ち時間は1秒)を制御できます。

 

lockwaitが0の場合は、NOWAITでトランザクションを起動するのと同じです。lockwaitがマイナス1(-1)の場合は、値を指定しないでWAITだけ指定してトランザクションを起動するのと同じです。この場合、サーバーの待ち時間は無期限になります。

 

maxtriesスイッチを使用すると、ロックを取得する際のサーバーの最大試行回数を指定できます。maxtriesのデフォルト値は10です。

 

lockwaitスイッチに代入する値が大きくなると、ロック対象のオブジェクトによって全クライアントの動作が遅くなる確率が高くなる可能性があります。そのため、lockwaitの値は最小限に抑え、ロック取得の試行回数を適宜増やす方がよいでしょう。

 

8.10.1         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によって指定された期間の上限になります。

 

例1

RDM$BIND_LOCK_TIMEOUT_INTERVAL = 10

server LOCKWAIT  = 20

connection LOCKWAIT = 30

LOCK TIMEOUT INTERVAL not specified

 

            lockwaitは30になります。

 

例2

RDM$BIND_LOCK_TIMEOUT_INTERVAL = 10

server LOCKWAIT  = 20

connection LOCKWAIT = 30

LOCK TIMEOUT INTERVAL = 25

 

            lockwaitは25になります。

 

例3

RDM$BIND_LOCK_TIMEOUT_INTERVAL = 10

server LOCKWAIT  = 20

connection LOCKWAIT = 30

LOCK TIMEOUT INTERVAL = 35

 

            lockwaitは30になります。

 

例4

RDM$BIND_LOCK_TIMEOUT_INTERVAL = 10

server LOCKWAIT  = 20

connection LOCKWAIT not specified

LOCK TIMEOUT INTERVAL not specified

 

            lockwaitは20になります。

 

例5

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のドキュメントを参照してください。

 

8.11   ロギング

 

Oracle JDBC for Rdbドライバおよびサーバーでは現在、Javaロギング・ユーティリティを使用して、エラー・メッセージおよびトレース情報のロギングを実行できます。

 

Javaロギングはデフォルト時、無効です。

 

Javaログ出力についてはh、Java JDK 1.4.1を参照してください。

 

 

 

8.12   名前

 

どのサーバーにも、コントローラ内でのサーバーの特定および接続情報の検索に使用できる独自の名前が与えられます。サーバーの名前を使用すると、サーバーの起動時にXML書式の構成ファイル内で構成設定を特定できます。

 

例1

たとえば、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サーバー内で定義されたサーバー特性は全サーバーの基礎となる構成情報として使用されますが、そのいずれの特性も、コマンドライン・スイッチまたは構成ファイル内の指定サーバー内で定義された特性によりオーバーライドすることができます。

 

例2

たとえば、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情報を提供するために使用されます。

 

 

例3

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上で起動されます。

 

目次

8.13   名前付きデータベース

 

 

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のノードおよびポートは破棄されます。

 

名前付きデータベースを使用して、サーバー内のデータベース・アクセスを制限することもできます。この機能の詳細は、「データベース・アクセスの制限」を参照してください。

 

 

 

8.14   起動時コマンド

 

XML書式の構成ファイルのserverセクションでは、srv.onStartCmdおよびsrv.onExecStartCmdという2つの起動時コマンド属性を指定できます。

 

これらのオプションでは、サーバーまたはエグゼキュータの起動の直前に実行されるDCLコマンドを指定できます。

 

注意:

srv.onStartCmdおよびsrv.onExecStartCmdでは、サーバーまたはエグゼキュータの起動時に実行されるコマンドを指定します。該当するコマンドによってDCLコマンド・プロシージャが起動される場合は、コマンドラインにDCL起動記号@も含める必要があります。

 

8.14.1         srv.onStartCmd

 

このオプションでは、指定したThinサーバーが起動される前に実行されるDCLコマンドを指定します。OpenVMSの有効なDCLコマンドで、コントローラまたはプール・サーバーによって作成されるサーバー・プロセスのコンテキスト内で有効である必要があります。

 

複数のDCLコマンドが必要な場合、それらのDCLコマンドは、1つのDCLコマンド・プロシージャに入れる必要があります。そして、そのDCLコマンド・プロシージャは、コントローラまたはプール・サーバーが稼働する環境で利用可能である必要があります。それらのコマンド・プロシージャはrdb$jdbc_comディレクトリに格納し、ファイル保護はコントローラまたはプール・サーバーに実行のアクセス権を許可するよう設定してください。

 

例1

たとえば、システムで特定の設定を実行し、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ファイルおよびイメージがデタッチされたプロセス・サーバー環境で利用および実行可能である必要があります。

 

例2

たとえば、論理名の指定方法には注意が必要です。  次のような再定義により、論理名を使用して現在のデフォルト・ディレクトリを指す場合もあります。

 

$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サーバー属性内のコマンドも実行されません。

 

8.14.2         srv.onExecStartCmd

 

このオプションでは、マルチプロセス・サーバーによるエグゼキュータの起動前に実行される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のドキュメントを参照してください。

 

目次

8.15   サーバー構成ファイルにおけるパスワードの不明瞭化

 

稼働中のサーバーを停止するなどのサーバーの操作を不正ユーザーに制御させないためには、制御パスワードを各サーバーに起動時割り当てます。

 

このパスワードは、Oracle JDBC for Rdbのコントローラ・インタフェースを使用してサーバー制御操作を実行する際に使用する必要があります。

 

これらのパスワードのセキュリティを向上させるには、サーバーの制御パスワードを不明瞭化した形式でサーバー構成ファイルに含めます。

 

例1

たとえば、XML書式のサーバー構成ファイル内では次のように指定します。

 

<server

      name="RdbThinSrv1707"

      type="RdbThinSrvMP"

      url="//localhost:1707/"

      srv.execStartup="mystartup"

      controlUser="jdbc_user"

      controlPass="0x811B15F866179583EB3C96751585B843"

/>

 

不明瞭化されたパスワードは、Rdb Thinサーバー・コントローラ内でdigest文を使用すると取得できます。

 

例2

rdbthincontrol> digest thisismypassword

digest : 0x31435008693CE6976F45DEDC5532E2C1

 

この値は、プレーン・テキストの制御パスワードが通常指定される構成ファイルで使用できます。

 

この値は、digest文から返されたとおりにコピーする必要があります。

 

プレーン・テキストの形式から不明瞭化された形式にパスワードを変換する際は、大/小文字が区別されます。そのため、単語やフレーズが同じであっても、大/小文字が異なっていれば、digest文の実行結果も異なります。

 

パスワードの大/小文字が区別されるので、プレーン・テキスト形式で使用するパスワードの値とdigest文の実行結果の形式で使用するパスワードの値は、大/小文字も含め、1文字ずつ正確に一致させる必要があります。

 

これは、パスワードをDCLコマンドラインで使用する際、特に重要です。プレーン・テキスト形式のパスワードを二重引用符で囲まない場合は、環境により、パスワードの値がすべて小文字またはすべて大文字に強制的に変換される場合があり、オリジナルのパスワードと異なる値になることがあります。

 

例3

たとえば、-digestをコマンド・モードで使用する場合、値は二重引用符で囲む必要があります。

 

$ java -jar rdbthincontrol.jar -digest "MySecretPassword"

 digest : 0x7315A012ECAD1059A3634F8BE1347846

$ java -jar rdbthincontrol.jar -digest MySecretPassword

 digest : 0x4CAB2A2DB6A3C31B01D804DEF28276E6

 

注意:

不明瞭化されたパスワードが有効なのは、構成ファイル内のサーバー定義で使用する場合、またはサーバー・スタートアップ・コマンドラインの構成オプションとして使用する場合のみです。制御ユーザーとしてサーバーに接続し、コントローラを使用してサーバー上で操作を行うには、接続リクエストで使用する制御パスワードはまだプレーン・テキストである必要があります。不明瞭化された値を接続時のパスワードとして使用することはできません。

 

目次

8.16   サーバーおよびデータベース・アクセスの制限

 

Thinサーバーを使用してデータベースに接続する際に実行される標準のRdb認可チェックの他に、アクセス先のデータベースおよび許可されるユーザー名をサーバー・レベルで制限することもできます。

 

Thinサーバーへのアクセスおよびサービスを受けるデータベースへのアクセスを意図的に制限する方法の詳細を、後述の項で説明します。

8.16.1         データベース・アクセスの制限

サーバー経由で確立する接続を、許可されたデータベースとして指定したデータベースにのみ制限することができます。

 

その場合は、構成ファイル内でサーバーの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サブセクションが指定されていない場合、データベースの制限は適用されません。

 

 

例1

たとえば、ノードbravo上で稼働しているサーバーが前述のようなサーバーの場合:

 

Connection conn = DriverManager.getConnection(

"jdbc:rdbThin://bravo:1701/mf_pers",user, pass);

 

           これは許可されます。

 

例2

Connection conn = DriverManager.getConnection(

"jdbc:rdbThin://bravo:1701/MF_Pers",user, pass);

 

           これは、データベースの指定における大/小文字の区別は重要でないので許可されます。

 

例3

Connection conn = DriverManager.getConnection(

"jdbc:rdbThin://bravo:1701/disk1:[databases]customers",user, pass);

 

           これは許可されます。

 

例4

Connection conn = DriverManager.getConnection(

"jdbc:rdbThin://bravo:1701/disk1:[databases]customers.rdb",user, pass);

 

           これは、.rdbが余分であるため許可されません。

 

例5

Connection conn = DriverManager.getConnection(

"jdbc:rdbThin://bravo:1701/cust ",user, pass);

           

これは、custがdisk1:[databases]customersに変換される論理名であっても許可されません。

8.16.2         ユーザー・アクセスの制限

 

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サブセクションが指定されていない場合、ユーザーの制限はサーバーに適用されません。

 

8.16.3         サーバーに対するその他のアクセス保護

 

アクセス先のデータベースおよびサーバーの使用が許可されるユーザーを制限するだけでなく、サーバー・パスワードを使用してサーバーを保護することもできます。

 

その場合は、構成ファイル内でサーバーの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);

 

 

8.17   CONNECTION.setReadOnly()のスコープ

 

デフォルト時、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に接続されます。

 

 

8.18   サーバー・コマンド・プロシージャ

 

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を変更してください。詳細は、「起動時コマンド」を参照してください。

 

8.18.1         サーバー起動コマンド・プロシージャ

 

コントローラでは、サーバー起動コマンド・プロシージャを使用して、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サーバー属性内のコマンドも実行されません。

 

8.18.2         エグゼキュータ起動コマンド・プロシージャ

 

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セクション内でのみ有効です。

 

目次

8.19   サーバー/クライアントのプロトコル・チェック

 

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

 

 

目次

8.20   OpenVMS FailSAFE IPの使用

 

 

OpenVMS FailSAFE IPは、Oracle JDBC for RdbのThinドライバおよびサーバーで使用される場合があります。フェイルオーバーの際、FailSAFE IPは、既存のOracle JDBC for Rdbのクライアント/サーバーIP接続をスタンバイ・サービスにリダイレクトします。

 

失敗したサービスと同じノード上にフェイルオーバー・サービスが存在している場合、接続は透過的に継続して利用できる必要があります。

 

ただし、フェイルオーバー・サービスが別のノード上にある場合は、Rdb接続をプロセス間で転送することができないので、フェイルオーバーは透過的になりません。  Thinドライバは、オリジナルのサービスがもう利用できないので、失敗したTCP/IPポート上でソケット例外を受領します。 

 

サーバーのソケット例外は、ネットワークの読取りまたは書込みが未処理の場合に、接続上で通知されるだけです。  ドライバが現在アイドル状態で、サーバーに対する読取りまたは書込みをソケット上で実行していない場合、例外は通知されません。  ただし、ドライバによる該当接続上での後続の操作では、ソケット例外が通知されます。

 

ソケット例外は、SQLExceptionにラッピングされて、アプリケーションにパススルーで渡されます。  その場合、例外を捕捉してその環境をクリーンアップし、ドライバに対する新しい接続を確立する(妥当な場合)かどうかは、アプリケーション次第です。

 

クライアントがどこで稼働しているのかによって異なりますが、読取りまたは書込みが保留中であっても、クライアントのオペレーティング・システムがSocketExceptionを通知しない場合もあります。  そのようなシステムの場合は、読取りまたは書込みが完了するまでクライアント接続が中間状態で待機することがあります。

 

ソケット・サブシステムが正しいソケット例外を通知しないことが原因で発生する可能性があるハングの影響を抑えるために、ネットワークの読取り/書込みに対してタイムアウトを設けることができます。  指定した時間内に読取りまたは書込みが完了しないと、例外が通知されます。

 

このタイムアウト値を設定する際は、注意が必要です。文のコンパイルなどのデータベース操作に時間がかかると、サーバーがその結果を返送するのが遅延する可能性があります。

クライアント側のソケット読取りは結果の戻りを待機しますが、それはシステムおよびデータベース・ソフトウェアのパフォーマンスに比べ設定期間が短かすぎるとタイムアウトになる可能性があります。このタイムアウト値は、使用する場合、問合せ操作にサーバー側で時間がかかると思われるのであれば、大きな値(数分のオーダー)を設定してください。

 

ネットワークの読取りおよび書込みのタイムアウトの詳細は、「接続オプション」「networkTimeout」を参照してください。

 

目次

8.21   SET文

 

動的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);

 

 

8.22   SQL文のキャッシュ

 

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文の使用を黙って無視します。

 

目次

 

8.23   トレース

 

トレース機能では、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が自動的に定義されます。

8.23.1         tracelevelの設定

 

JDBC操作のトレースは、次のいずれかのメソッドにより有効化できます。

 

         tracelevelプロパティ

         tracelevelスイッチ

         traceLevelオプション

         Doracle.rdb.jdbc.tracelevelシステム・プロパティ

         set tracelevel文

 

これらのメソッドの詳細は、後述の項を参照してください。

 

8.23.1.1    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);

 

詳細は、「接続オプション」を参照してください。

 

8.23.1.2    tracelevelスイッチ

 

サーバーの起動時にtracelevelスイッチを指定すると、トレースを有効化できます。

 

 

$java -jar rdb$jdbc_home:rdbthinsrv.jar -cfg thinsrv.cfg -tracelevel -1

 

 

詳細は、「コマンドラインからThinサーバーを起動する方法」「コマンドラインからマルチプロセス・サーバーを起動する方法」および「コマンドラインからプール・サーバーを起動する方法」を参照してください。

 

 

8.23.1.3    traceLevelオプション

 

XML書式の構成ファイル内のサーバー定義でtraceLevelオプションを指定すると、トレースを有効化できます。

 

<server

          name="mypoolserver"

          type="RdbThinSrvPool"

          traceLevel="-1"

          url="//localhost:1702/" >

          <pooledServer name="srv1forRdb"/>

          <pooledServer name="srv2forRdb"/>

          <pooledServer name="srvMPforRdb"/>

</server>

 

詳細は、「サーバーの構成」を参照してください。

 

 

8.23.1.4    Doracle.rdb.jdbc.tracelevelシステム・プロパティ

 

アプリケーションまたはRdbサーバーの起動時にRdbのシステム・プロパティDoracle.rdb.jdbc.tracelevelを指定すると、トレースを有効化できます。

 

$java Doracle.rdb.jdbc.tracelevel=-1 my_application

 

詳細は、「Oracle JDBC for Rdbのシステム・プロパティ」を参照してください。

 

 

8.23.1.5    set tracelevel文

 

コントローラでSET TRACELEVELコマンドを使用すると、トレースを有効化できます。

 

$java -jar rdb$jdbc_home:rdbthincontrol.jar

rdbthincontrol> connect //localhost:1701/ jones mypassword

rdbthincontrol> set tracelevel -1

 

詳細は、「コントローラのコマンドライン」を参照してください。

 

8.23.2         tracelevelの短縮形

 

            tracelevelキーワードの"tl"も、同じ方法で使用できます。

 

  

8.23.3         トレース値

 

トレースに渡される値は実際、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

全情報のトレース

 

 

目次

 

 

8.24   ファイルおよびディレクトリに関するアクセス要件

 

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が適切なアクセス権を所持していることを確認する必要があります。

 

 

目次


 

第9章  
Oracle RdbのJDBC拡張機能

 

Oracle JDBC for Rdbによって提供されるJDBC標準に対する拡張機能について、次の項で説明します。

 

9.1         BLOB処理の拡張

 

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オブジェクトまたは空の文字列をパラメータとして渡すと、セパレータをクリアすることができます。

 

 

9.2         ResultSet.getBytes()

 

JDBC標準では、BINARYデータ、VARBINARYデータおよびLONGVARBINARYデータにアクセスする際、ResultSet.getBytes()メソッドの使用が制限されています。Oracle JDBC for Rdbドライバではこの制限が緩和されており、有効なすべてのSQLデータ型に対し、次のメソッドを使用してバイト配列を返そうとします。

 

getBytes()

 

·        CHARおよびVARCHARの列からは、Rdbからドライバに返されるように、生データが返されます。

·        数値型列は、ビッグ・エンディアンのバイト配列としてRdbのネイティブ書式で返されます。

·        日付および時刻は、64ビットのビッグ・エンディアンのバイト配列として返されます。

 

 

目次


 

第10章      
その他の情報

 

10.1   許可されていない動的SQL文

 

JDBCには独自の接続プロトコルがあるため、次の動的SQL文をStatementまたはPreparedStatementから実行すると、例外が通知されます。

           

SET CONNECT

 

CONNECT

 

DISCONNECT

 

 

10.2   Oracle JDBC for Rdb Thinサーバーの設定、起動および使用(例)

 

 この項では、簡単な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.

 

 

目次

 

 

10.3    Oracle SQL/ServicesによるOracle JDBC for Rdb Thinサーバーの設定と起動(例)

 

 後述の項では、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

 

 

10.4   構成ファイルの例(MY_SERVERS.XML)

 

 

 

<?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>

 

 

10.5   Oracle Rdbからjava.sql.Typesへのデータ型のマッピング

 

 

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

 

 

 

10.6   java.sql.TypesからOracle Rdbへのデータ型のマッピング

 

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

 

 

 

10.7   JDBC仕様: SQLからJavaへのデータ型のマッピング

 

 

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

 

 

 

 

 

10.8   JDBC仕様: JavaからSQLへのデータ型のマッピング

 

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

 

 

目次