ORACLE JAPAN Server Release 6.1

 

  |  

  WebLogic Server ホーム   |     JDBC プログラミング ガイド   |   前へ   |   次へ   |   目次   |   索引   |   PDF 版

JDBC 接続のテストとトラブルシューティング

 

以下の節では、JDBC 接続のテスト方法を説明するとともに、トラブルシューティングのヒントを紹介します。

 


接続のテスト

以降の節では、接続をテストする方法について説明します。

コマンドラインからの DBMS 接続の有効性の検証

BEA では、WebLogic 2 層ドライバ、WebLogic Server、または WebLogic JDBC をインストールした後、2 層および 3 層の JDBC データベース接続をテストするために使用できるユーティリティを用意しています。

コマンドラインからの 2 層接続をテストする方法

utils.dbping ユーティリティを使用するには、JDBC ドライバのインストールを完了する必要があります。以下の作業を必ず行ってください。

utils.dbping ユーティリティを使用すると、Java とデータベースの間で接続が可能なことを確認できます。dbping ユーティリティは、WebLogic jDriver for Oracle などの WebLogic 2 層 JDBC ドライバを使用した 2 層接続 のテストにのみ使用します。

構文

$ java utils.dbping DBMS user password DB

引数

DBMS

ORACLE、MSSQLSERVER4、または INFORMIX4 を使用します。

user

データベース ログインに使用する有効なユーザ名です。SQL Server では isql、Oracle では sqlplus、Informix では DBACCESS で使用するものと同じ値と形式を使用します。

password

ユーザの有効なパスワード。isqlsqlplus、または DBACCESS で使用するものと同じ値と形式を使用します。

DB

データベースの名前。形式は、データベースとバージョンに応じて異なります。isqlsqlplus、または DBACCESS で使用するものと同じ値と形式を使用します。MSSQLServer4 や Informix4 などの Type 4 ドライバの場合は、環境にアクセスできないので、サーバを見つけるには補足情報が必要です。

Oracle

sqlplus で使用する同じ値を利用し、Java から WebLogic jDriver for Oracle 経由で Oracle に接続します。

SQLNet を使用しない(かつ ORACLE_HOME と ORACLE_SID が定義されている)場合は、次の例に従います。

$ java utils.dbping ORACLE scott tiger

SQLNet V2 を使用する場合は、次の例に従います。

$ java utils.dbping ORACLE scott tiger TNS_alias

TNS_alias は、ローカルの tnsnames.ora ファイルで定義されているエリアスです。

Microsoft SQL Server(Type 4 ドライバ)

Java から WebLogic jDriver for Microsoft SQL Server 経由で Microsoft SQL Server に接続するには、userpasswordisql の場合と同じ値を使用します。ただし、SQL Server を指定するには、SQL Server が動作しているコンピュータの名前と SQL Server がリスンしている TCP/IP ポートを指定します。コンピュータ名が mars でリスン ポートが 1433 の SQL Server にログインするには、次のように入力します。

$ java utils.dbping MSSQLSERVER4 sa secret mars:1433

1433 は Microsoft SQL Server のデフォルト ポート番号なので、この例の「:1433」は省略してもかまいません。デフォルトでは、Microsoft SQL Server は TCP/IP 接続をリスンしないことがあります。DBA でリスンするようにコンフィグレーションできます。

Informix(Type 4 ドライバ)

DBACCESS で使用する同じ値を利用し、Java から WebLogic jDriver for Informix 経由で Informix に接続します。引数は、次の順序で指定します。

$ java utils.dbping INFORMIX user pass db@server:port

この例では、次のように指定します。

$ java utils.dbping INFORMIX bill secret stores@myserver:8543

コマンドラインからの多層 WebLogic JDBC 接続の有効性を検証する方法

utils.t3dbping ユーティリティを使用すると、WebLogic Server を使用した多層データベース接続が可能なことを確認できます。t3dbping ユーティリティは、多層接続のテストのみに使用します。このテストは、2 層接続が正常に機能することを確認し、WebLogic を起動した後に行います。

2 層 JDBC ドライバが WebLogic jDriver の場合は、utils.dbping を使用して 2 層接続をテストします。他のドライバの場合は、多層接続をテストする前に、使用する 2 層 JDBC ドライバのドキュメントを参照して接続のテスト方法を確認してください。

構文

$ java utils.t3dbping URL user password DB driver_class driver_URL

引数

URL

WebLogic Server の URL。

username

DBMS の有効なユーザ名です。

password

ユーザの有効なパスワードです。

DB

データベースの名前。前述の 2 層接続のテストで使用した同じ値と形式を使用します。

driver_class

WebLogic と DBMS を接続する JDBC ドライバのクラス名です。たとえば、サーバサイドで WebLogic jDriver for Oracle を使用する場合、ドライバのクラス名は weblogic.jdbc.oci.Driver です。ドライバのクラス名では、ドット(.)表記を使用します。

driver_URL

WebLogic と DBMS を接続する JDBC ドライバの URL です。たとえば、サーバサイドで WebLogic jDriver for Oracle を使用する場合、ドライバの URL は jdbc:weblogic:oracle です。ドライバの URL はコロンで区切ります。

以下の例は、読みやすいように複数の行に分けられています。実際には、1 つのコマンドとして入力してください。

Oracle

次の例は、bigbox というサーバで動作している Oracle DBMS DEMO20 に対して ping を実行する方法を示しています。WebLogic も同じホストにあり、ポート 7001 でリスンしています。

$ java utils.t3dbping // コマンド

  t3://bigbox:7001 // WebLogic URL

  scott tiger // ユーザ名とパスワード

  DEMO20 // DB

  weblogic.jdbc.oci.Driver // ドライバのクラス

  jdbc:weblogic:oracle // ドライバの URL

DB2 と AS/400 Type 4 JDBC ドライバ

次の例は、IBM AS/400 Type 4 JDBC ドライバを使用してワークステーションのコマンド シェルから AS/400 DB2 データベースに対して ping を実行する方法を示しています。

 $ java utils.t3dbping // コマンド

  t3://as400box:7001 // WebLogic URL

  scott tiger // ユーザ名とパスワード

  DEMO // データベース

  com.ibm.as400.access.AS400JDBCDriver // ドライバのクラス

  jdbc:as400://as400box // ドライバの URL

WebLogic jDriver for Microsoft SQL Server(Type 4 JDBC ドライバ)

次の例は、WebLogic jDriver for Microsoft SQL Server を使用して Microsoft SQL Server データベースに対して ping を実行する方法を示しています。

  $ java utils.t3dbping       // コマンド

  t3://localhost:7001 // WebLogic URL

  sa // ユーザ名

  abcd // パスワード

       hostname               // database@hostname:port
                              //URL の一部として指定する場合は
 
                             // 省略可能)

  weblogic.jdbc.mssqlserver4.Driver // ドライバのクラス

  jdbc:weblogic:mssqlserver4:pubs@localhost:1433

  // ドライバの URL:database@hostname:port
  //(データベース パラメータで使用されている場合は省略可)

 


JDBC のトラブルシューティング

以降の節では、トラブルシューティングのヒントを紹介します。

JDBC 接続のトラブルシューティング

WebLogic への接続をテストする場合は、WebLogic のログを調べてください。デフォルトでは、ログは weblogic\myserver ディレクトリの weblogic.log というファイルに記録されています。

UNIX ユーザ

native_login のロードで問題が発生した場合は、truss を使用して問題の原因を突き止めます。たとえば、tutorial.example3 を実行するには、次のように入力します。

$ truss -f -t open -s\!all java tutorial.example3

WinNT

.dll のロードが失敗したことを示すエラー メッセージが表示された場合は、PATH で 32 ビット データベース関連の .dll を指定してください。

 


JDBC と Oracle データベースでの SEGV

条件次第では、JDBC と Oracle データベースを使用するときにセグメンテーション違反エラー(SEGV)やハングが発生します。以下の事項に注意してください。

メモリ不足エラー

メモリ不足エラーのよくある原因は、ResultSet が閉じていないことです。たいていは、以下のようなエラー メッセージが表示されます。

Run-time exception error; current exception: xalloc

No handler for exception

配列フェッチを使用すると、ネイティブ レイヤではメモリが Java ではなく C に割り当てられます。そのため、Java のガベージ コレクションではメモリがすぐにはクリーンアップされません。メモリを解放する唯一の方法は、ResultSet を閉じることです(このメモリ使用量を最小限に抑えれば、パフォーマンスが向上します)。

メモリ不足エラーを防止するには、プログラム ロジックで必ず ResultSet を閉じるようにします。閉じていない ResultSet が原因でメモリ不足エラーが発生しているのかをテストするには、配列フェッチのサイズを最小限にして、割り当てられる C メモリの量を少なくします。そのためには、weblogic.oci.cacheRows プロパティ(JDBC 接続プロパティ)を小さい値に設定します。次に例を示します。

Properties props = new java.util.Properties();
props.put("user", "scott");
props.put("password", "tiger");
props.put("server", "DEMO" );
props.put("weblogic.oci.cacheRows", "1" );

Driver d =
(Driver)Class.forName("weblogic.jdbc.oci.Driver").newInstance();

Connection conn = d.connect("jdbc:weblogic:oracle", props);

これでメモリ不足エラーが解消されたら、ResultSet がコードのどこかで閉じられていないと判断できます。詳細については、「JDBC オブジェクトを閉じる」を参照してください。

コードセットのサポート

WebLogic では、Oracle のコードセットがサポートされています。ただし、次のことに注意してください。

詳細については、「WebLogic jDriver for Oracle の使い方」の「コードセットのサポート」を参照してください。

UNIX での Oracle に関わる他の問題

使用するスレッディング モデルをチェックしてください。グリーン スレッドは、OCI で使用されるカーネル スレッドと衝突します。Oracle ドライバを使用する場合は、ネイティブ スレッドを使用することをお勧めします。ネイティブ スレッドの使用を指定するには、Java を起動するときに -native フラグを追加します。

UNIX でのスレッド関連の問題

UNIX では、グリーン スレッドとネイティブ スレッドという 2 つのスレッディング モデルを利用できます。詳細については、Sun の Web サイトで提供されている Solaris 環境用の JDK を参照してください。

使用しているスレッドの種類は、THREADS_TYPE 環境変数を調べることで確認できます。この変数が設定されていない場合は、Java の bin ディレクトリにあるシェル スクリプトを調べてください。

一部の問題は、各オペレーティング システムの JVM でのスレッドの実装に関連しています。すべての JVM で、オペレーティング システム固有のスレッドの問題が等しく適切に処理されるわけではありません。以下に、スレッド関連の問題を防止するためのヒントを紹介します。

JDBC オブジェクトを閉じる

プログラムを効率的に実行するために、finally ブロックで Connection、Statement、ResultSet などの JDBC オブジェクトを必ず閉じるようにしてください。これは WebLogic の推奨であるとともに、プログラミングの優れた慣例でもあります。次に、一般的な例を示します。

try {

Driver d =
(Driver)Class.forName("weblogic.jdbc.oci.Driver").newInstance();

Connection conn = d.connect("jdbc:weblogic:oracle:myserver",
"scott", "tiger");

Statement stmt = conn.createStatement();
stmt.execute("select * from emp");
ResultSet rs = stmt.getResultSet();
// 処理を行う

}

catch (Exception e) {

// あらゆる例外を適切に処理する

}

finally {

try {rs.close();}
catch (Exception rse) {}
try {stmt.close();}
catch (Exception sse) {}
try {conn.close();
catch (Exception cse) {}

}

 


UNIX での共有ライブラリに関連する問題のトラブルシューティング

ネイティブの 2 層 JDBC ドライバをインストールするとき、パフォーマンス パックを使用するように WebLogic Server をコンフィグレーションするとき、または UNIX で BEA WebLogic Server を Web サーバとして設定するときには、システムで共有ライブラリまたは共有オブジェクト(WebLogic ソフトウェアと一緒に配布される)をインストールします。ここでは、予期される問題について説明し、それらの問題の解決策を提案します。

オペレーティング システムのローダでは、さまざまな場所でライブラリが検索されます。ローダの動作は、UNIX の種類によって異なります。以降の節では、Solaris と HP-UX について説明します。

WebLogic jDriver for Oracle

共有ライブラリは、このマニュアルで説明されている手順に従って設定してください。実際に指定するパスは、Oracle クライアントのバージョンや Oracle サーバのバージョンなどによって異なります。詳細については、「WebLogic jDriver for Oracle のインストール」を参照してください。

Solaris

どのダイナミック ライブラリが実行ファイルによって使用されているのかを確認するには、ldd コマンドを実行します。このコマンドの出力が、ライブラリが見つからないことを示している場合は、次のようにして、ライブラリの位置を LD_LIBRARY_PATH 環境変数に追加します(C シェルまたは Bash シェルの場合)。

# setenv LD_LIBRARY_PATH weblogic_directory/lib/solaris/oci817_8

このようにして追加すれば、ld を実行してもライブラリの紛失は報告されないはずです。

HP-UX

不適切なファイル パーミッションの設定

HP-UX システムで WebLogic をインストールした後、発生する可能性が最も高い共有ライブラリの問題は、不適切なファイル パーミッションの設定です。WebLogic をインストールした後は、chmod コマンドを使用して共有ライブラリのパーミッションを適切に設定してください。HP-UX 11.0 で適切なパーミッションを設定するには、次のように入力します。

% cd weblogic_directory/lib/hpux11/oci817_8

% chmod 755 *.sl

ファイル パーミッションを設定した後に共有ライブラリをロードできない場合は、ライブラリの位置を特定することに問題があることが考えられます。その場合はまず、次のようにして、weblogic_directory/lib/hpux11SHLIB_PATH 環境変数に設定されていることを確認してください。

% echo $SHLIB_PATH

そのディレクトリがない場合は、次のようにして追加してください。

# setenv SHLIB_PATH weblogic_directory/lib/hpux11:$SHLIB_PATH

あるいは、WebLogic 配布キットにある .sl ファイルを SHLIB_PATH 変数で既に設定されているディレクトリへコピー(またはリンク)してください。

それでも問題が解決しない場合は、chatr コマンドを使用して、アプリケーションが SHLIB_PATH 環境変数のディレクトリを検索するように指定してください。+s enabled オプションを使用すると、SHLIB_PATH 変数を検索するようにアプリケーションが設定されます。次に、このコマンドの例を示します。この例は、HP-UX 11.0 の WebLogic jDriver for Oracle 共有ライブラリで実行します。

# cd weblogic_directory/lib/hpux11

# chatr +s enable libweblogicoci37.sl

このコマンドの詳細については、chatr のマニュアル ページを参照してください。

不適切な SHLIB_PATH

Oracle 9 を使用している場合、SHLIB_PATH に適切なパスが含まれていないことが原因で共有ライブラリの問題が発生する場合もあります。SHLIB_PATH には、ドライバ(oci901_8)へのパスと、ベンダ提供のライブラリ(lib32)へのパスが含まれている必要があります。たとえば、パスは次のようになります。

export SHLIB_PATH=
$WL_HOME/lib/hpux11/oci901_8:ORACLE/lib32:$SHLIB_PATH

パスに Oracle 8.1.7 ライブラリを含めることはできません。含まれているとクラッシュします。詳細については、「WebLogic jDriver for Oracle の使用環境の設定」を参照してください。

 

back to top previous page