- - PR -
ASP.NET ORA-01000: 最大オープン・カーソル数を超えました。
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 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-07-15 15:58
こんにちわ、餅宮です。
多分テーブルのclose処理をおこなっていないせいじゃないかと思います。 | ||||||||||||
|
投稿日時: 2005-07-15 16:00
まず最初に、 この設計を止めたほうが良いです。 利用する局面で都度コネクションオブジェクトを生成し接続/切断するようにしましょう。 _________________ 「伝える」とは「人に云う」と書く。 http://d.hatena.ne.jp/NAL-6295/ | ||||||||||||
|
投稿日時: 2005-07-15 16:08
#毎度言うのも疲れたけど 使用しているデータブロバイダは何ですか? ADO.NET for OracleやODP.NETを使わないのはなぜですか?
つまり自前でConnectionPool相当の処理を実装しているということですか? 標準のコネクションプールの処理を使わないのはなぜですか? コネクションの開放はどうしてるんですか?
単にDetaAdapterを解放(Dispose)していないからなんじゃ・・・ | ||||||||||||
|
投稿日時: 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カーソル程使用していました・・ 現在、そこを修正してから現象が発生していません。 まだカーソルの開放タイミングがわからず、本当の解決には至っていません。 また、カーソルの最大値を増やして対応もできるのであれば それを行いたいです。 | ||||||||||||
|
投稿日時: 2005-07-15 22:28
時間がかかってしまうのは最初の接続だけだと思いますが。 | ||||||||||||
|
投稿日時: 2005-07-16 01:29
はじめまして、じゅんさん。
Oracelの初期化バラメータのOPEN_CURSORSの値を 大きくしてはどうでしょうか? 的はずれならごめんなさい。 | ||||||||||||
|
投稿日時: 2005-07-16 07:40
さらに、NTSを使っていないにもかかわらず、NTSの設定になっているからでしょう。 _________________ |