- PR -

ASP.NET ORA-01000: 最大オープン・カーソル数を超えました。

投稿者投稿内容
じゅん
会議室デビュー日: 2005/07/15
投稿数: 8
投稿日時: 2005-07-15 15:52
はじめまして。じゅんです。
現在、ASP.NETでWEB開発をしています。

SELECT時に、ORA-01000エラーが発生し、困っています。
誰かご存知の方がいらっしゃいましたらご教授ください!!

----------------------------------------------
開発環境
・言語 ASP.NET(VB)
・WEBサーバ OS:2003Server
・DB Oracle 9i  
----------------------------------------------

Connection接続タイミングは、
Gloabl.aspx.vbの、Application_Startで行っています。
※アプリケーションで1コネクションです。

SELECTしているソースは以下です。
----------------------------------------------
Public Function SelectDB(ByVal sql As String) As DataTable

'ADO.NET 上で再定義された仮想的なテーブル情報構造体群(データ保持用)
Dim dsPageData As New DataSet

'OLEDB接続用のオブジェクトを宣言する
Dim dbConn As OleDbConnection = CType(DbConnectionManager.GetDbConnection(), OleDbConnection)

'OleDbDataAdapter は、
'DataSet とデータベースの間でデータを取得および保存するための、ブリッジの役割です。
Dim adapter As OleDbDataAdapter = New OleDbDataAdapter(sql, dbConn)

'結果の格納
'DBデータを読み込む ↓ここでエラーが発生・・・
adapter.Fill(dsPageData, "DBDATA")

Return dsPageData.Tables("DBDATA")

End Function

----------------------------------------------

カーソルの開放(?)のような処理はないのでしょうか・・。

餅宮餅吉
ベテラン
会議室デビュー日: 2005/03/04
投稿数: 57
お住まい・勤務地: 月餅のうまい店の隣
投稿日時: 2005-07-15 15:58
こんにちわ、餅宮です。

多分テーブルのclose処理をおこなっていないせいじゃないかと思います。
NAL-6295
ぬし
会議室デビュー日: 2003/01/26
投稿数: 966
お住まい・勤務地: 東京
投稿日時: 2005-07-15 16:00
引用:

じゅんさんの書き込み (2005-07-15 15:52) より:

Connection接続タイミングは、
Gloabl.aspx.vbの、Application_Startで行っています。
※アプリケーションで1コネクションです。




まず最初に、
この設計を止めたほうが良いです。
利用する局面で都度コネクションオブジェクトを生成し接続/切断するようにしましょう。

_________________
「伝える」とは「人に云う」と書く。
http://d.hatena.ne.jp/NAL-6295/
甕星
ぬし
会議室デビュー日: 2003/03/07
投稿数: 1185
お住まい・勤務地: 湖の見える丘の上
投稿日時: 2005-07-15 16:08
引用:

じゅんさんの書き込み (2005-07-15 15:52) より:
はじめまして。じゅんです。
----------------------------------------------
開発環境
・言語 ASP.NET(VB)
・WEBサーバ OS:2003Server
・DB Oracle 9i  
----------------------------------------------


#毎度言うのも疲れたけど
使用しているデータブロバイダは何ですか?
ADO.NET for OracleやODP.NETを使わないのはなぜですか?

引用:

Connection接続タイミングは、
Gloabl.aspx.vbの、Application_Startで行っています。
※アプリケーションで1コネクションです。


つまり自前でConnectionPool相当の処理を実装しているということですか?
標準のコネクションプールの処理を使わないのはなぜですか?
コネクションの開放はどうしてるんですか?

引用:

SELECTしているソースは以下です。


単にDetaAdapterを解放(Dispose)していないからなんじゃ・・・
じゅん
会議室デビュー日: 2005/07/15
投稿数: 8
投稿日時: 2005-07-15 19:59
早速の回答、ありがとうございます。

餅宮餅喜さんへ>
>多分テーブルのclose処理をおこなっていないせいじゃないかと思います。

すみません。具体的にどのような関数を使用していいのかわかりませんでした・・
もしご存知でしたら教えてください。

NAL-6295さんへ>
DBコネクション接続に時間がかかるため、
アプリケーションで1コネクションという設計にしています。
セッション毎に1コネクションにするか検討しています。

甕星さんへ>
記述が少なくすみません。
ADO.NET for OracleのSystem.Data.OleDbを使用しています。

>単にDetaAdapterを解放(Dispose)していないからなんじゃ・・・
Disposeを行ってみましたが、変わりませんでした。


いろいろと解析していてわかったことは、
頻繁にORA-010000エラーが発生していたのは、
一覧を表示する画面で、SELECT文を大量に発行してしまっていたのが、
原因だったようです。
画面を開くだけで、50カーソル程使用していました・・
現在、そこを修正してから現象が発生していません。

まだカーソルの開放タイミングがわからず、本当の解決には至っていません。
また、カーソルの最大値を増やして対応もできるのであれば
それを行いたいです。

NAL-6295
ぬし
会議室デビュー日: 2003/01/26
投稿数: 966
お住まい・勤務地: 東京
投稿日時: 2005-07-15 22:28
引用:

じゅんさんの書き込み (2005-07-15 19:59) より:
NAL-6295さんへ>
DBコネクション接続に時間がかかるため、
アプリケーションで1コネクションという設計にしています。
セッション毎に1コネクションにするか検討しています。




時間がかかってしまうのは最初の接続だけだと思いますが。
MM
会議室デビュー日: 2002/12/20
投稿数: 11
投稿日時: 2005-07-16 01:29
はじめまして、じゅんさん。

Oracelの初期化バラメータのOPEN_CURSORSの値を
大きくしてはどうでしょうか?

的はずれならごめんなさい。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2005-07-16 07:40
引用:

NAL-6295さんの書き込み (2005-07-15 22:28) より:
引用:

じゅんさんの書き込み (2005-07-15 19:59) より:
NAL-6295さんへ>
DBコネクション接続に時間がかかるため、
アプリケーションで1コネクションという設計にしています。
セッション毎に1コネクションにするか検討しています。




時間がかかってしまうのは最初の接続だけだと思いますが。


さらに、NTSを使っていないにもかかわらず、NTSの設定になっているからでしょう。
_________________

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