- PR -

JDBCを使用したOracle接続

1
投稿者投稿内容
Kira
ぬし
会議室デビュー日: 2004/10/30
投稿数: 252
投稿日時: 2005-11-18 23:49
いつも勉強させて頂いています。

以下の環境でJDBC経由でOracleに接続して、開発を行っております。
また処理に関しては以下に概要を記述しています。
開発中にEclipseでブレイクポイントを設定してA〜Dのポイントで
途中中断ということを何度もしているとなぜか以下のような現象が発生します。
・OracleサーバのCPU使用率が100%になる。
・特定のテーブルのみ他システムからの参照を受け付けない。
 (特定のテーブルとは開発中に使用しているテーブル)

(このときのOracleの状態なのですが、ロックしている表はなくセッション数も1 or 2になっています。)

この現象を回避する方法はないのでしょうか??
またACは同じResultSetを使用していますが、それもなんらかの悪影響を及ぼすのでしょうか?

・環境
Eclipse 3.0
Tomcat 4.1
Oracle 9i

・処理
 @DB接続
 ソース抜粋↓
 (
Class.forName(DB_DRIVER);
pri_cn = DriverManager.getConnection(
DB_DSN
, DB_USER
, DB_PASS
);

 ASQL実行
 B業務ロジック
 CSQL実行
 D業務ロジック
 EDB CLOSE
紅茶
会議室デビュー日: 2005/11/18
投稿数: 11
投稿日時: 2005-11-22 11:09
紅茶と申します。

ロック、セッションに問題ないのであれば
JDBCの問題ではないように思えます。

CPU使用率が100%というのはタスクマネージャーの情報でしょうか?
Oracleのstatspackなり統計情報なりで分析してみることをお勧めします。
vincent
大ベテラン
会議室デビュー日: 2004/07/09
投稿数: 142
投稿日時: 2005-11-22 15:05
中断→終了となったときリソースが
正しく開放されていないのではないでしょうか。

ResultSetやConnectionは確実にclose()していますか?
紅茶
会議室デビュー日: 2005/11/18
投稿数: 11
投稿日時: 2005-11-22 15:53
>途中中断ということを何度もしているとなぜか以下のような現象が発生します。

の一文を見逃していました。(汗)
それであれば、vincentさんの書き込み通りのように思えますね。
Kira
ぬし
会議室デビュー日: 2004/10/30
投稿数: 252
投稿日時: 2005-11-27 09:35
vincentさん、紅茶さん>
お返事遅くなり申し訳ございません。アドバイスありがとうございます。

通常ルーチンの場合は
 connectionをclose
しております。


DBアクセスに関してはconnectionをcloseすると
resultsetは自動的にDBとのセッション関係がなくなる
という認識をもっていますが、間違いなのでしょうか?


>紅茶さん
>>CPU使用率が100%というのはタスクマネージャーの情報でしょうか?
 タスクマネージャーの情報になります。
 statspackに関しては使用してなかったので、確認してみます。
Kazuki
ぬし
会議室デビュー日: 2004/10/13
投稿数: 298
投稿日時: 2005-11-27 11:12
一般的にJDBCを使ったプログラムは
コード:
Connection con = null;
Statement stmt = null;
ResultSet rs = null;
try {
  con = DriverManager.getConnection(.....);
  stmt = con.....;
  rs = stmt.exe....;
  イロイロ
} catch(SQLException e) {
  何か異常時にすることがあれば
} finally {
  if(rs != null) {
    try {
      rs.close();
    } catch(SQLException e){}
  }
  if(stmt != null) {
    try {
      stmt.close();
    } catch(SQLException e){}
  }
  if(con != null) {
    try {
      con.close();
    } catch(SQLException e){}
  }
}


という形になります。
ちゃんと全部閉じないとJDBCの実装によっては,何かリソースを握ったままになる可能性があります。
1

スキルアップ/キャリアアップ(JOB@IT)