- PR -

突然Oracleにアクセスできなくなる

1
投稿者投稿内容
ひでとる
会議室デビュー日: 2006/12/07
投稿数: 2
投稿日時: 2006-12-07 13:04
はじめまして
VB.NET + ADO.NET + Oracle9iの3層(.NETリーモティング)のWindowsアプリケーションで
す。問題になっているのが2層目目のサーバーアプリ側です。
時々下記のエラー@が起こります。@の後Aのエラーが発生し最悪時には全てのクライアント
要求からAのエラーを起こしシステム完全に機能しなくなります。
1.@のエラーは必ず起きるわけではないです。呼び出しメッソドにも依存しません。
2.Aのエラーも@のエラー後必ず起きる訳でも有りません。
3.Aのエラーが発生してもその後、普通に機能する時もあります。
4.GC.Collect()が原因と思い外しましたがだめでした。
5.クライアントからの要求が多いと発生率が高くなる傾向です。
どのようなことが原因なのでしょうか。
説明が下手で申し訳有りませんが宜しくお願いいたします。

@2006/11/28 14:30:17
System.NullReferenceException: オブジェクト参照がオブジェクト インスタンスに設定されていません。
at System.Data.OracleClient.UnsafeNativeMethods.OCIStmtFetch(HandleRef stmtp, HandleRef errhp, Int32 nrows, FETCH orientation, MODE mode)
at System.Data.OracleClient.TracedNativeMethods.OCIStmtFetch(OciHandle stmtp, OciHandle errhp, Int32 nrows, FETCH orientation, MODE mode)
at System.Data.OracleClient.OracleDataReader.ReadInternal()
at System.Data.OracleClient.OracleDataReader.Read()
at System.Data.Common.DbDataAdapter.FillLoadDataRow(SchemaMapping mapping)
at System.Data.Common.DbDataAdapter.FillFromReader(Object data, String srcTable, IDataReader dataReader, Int32 startRecord, Int32 maxRecords, DataColumn parentChapterColumn, Object parentChapterValue)
at System.Data.Common.DbDataAdapter.Fill(DataSet dataSet, String srcTable, IDataReader dataReader, Int32 startRecord, Int32 maxRecords)
at System.Data.Common.DbDataAdapter.FillFromCommand(Object data, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior)
at System.Data.Common.DbDataAdapter.Fill(DataSet dataSet, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior)
at System.Data.Common.DbDataAdapter.Fill(DataSet dataSet, String srcTable)
at Mj.SvrMjk1100.fncSelectKonyuData(Object ss, Object objRefData, Int32 iSelectType, OracleConnection pConn, Boolean pDataNothing)
at Mj.SvrMjk1100.fncGetKonyuDispData(Object ss, Object objRefData, Int32 sSelectType, Int32& SeihinCnt, Int32& KojiCnt, Int32& SiireCnt, Int32& SekkeiCnt, String& LastUpdate)
at Mj.RemotingMjk.svrMjk1100_fncGetKonyuDispData(Object ss, Object objRefData, Int32 sSelectType, Int32& SeihinCnt, Int32& KojiCnt, Int32& SiireCnt, Int32& SekkeiCnt, String& LastUpdate)

A 2006/11/28 14:31:38
System.Data.OracleClient.OracleException: ORA-03127: アクティブ操作が完了するまで、新しい操作を行えません。

at System.Data.OracleClient.OracleConnection.CheckError(OciHandle errorHandle, Int32 rc)
at System.Data.OracleClient.OracleCommand.Execute(OciHandle statementHandle, CommandBehavior behavior, Boolean isReader, Boolean needRowid, OciHandle& rowidDescriptor, ArrayList& refCursorParameterOrdinals)
at System.Data.OracleClient.OracleCommand.Execute(OciHandle statementHandle, CommandBehavior behavior, ArrayList& refCursorParameterOrdinals)
at System.Data.OracleClient.OracleCommand.ExecuteReader(CommandBehavior behavior)
at System.Data.OracleClient.OracleCommand.System.Data.IDbCommand.ExecuteReader(CommandBehavior behavior)
at System.Data.Common.DbDataAdapter.FillFromCommand(Object data, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior)
at System.Data.Common.DbDataAdapter.Fill(DataSet dataSet, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior)
at System.Data.Common.DbDataAdapter.Fill(DataSet dataSet, String srcTable)
at Mj.ServerDB.fncSvr_DB_FillDataSet(OracleCommand cmd, String strName, DataSet& ds)
at Mj.ServerMje3ComDB.fncMje3Com_DB_GetJuchuChk(OracleConnection conn, String sJuchuNo)
at Mj.SvrMje3200.subMje3200_ChkJuchuNo(OracleConnection conn, Object[] ss, String strJuchuNo, String sAccessFlg, Int32 JchSelTypeFlg, String Jigyosho)
at Mj.SvrMje3200.fncMje3200_GetData001(Object[] ss, Int32 JchSelTypeFlg, String strJuchu, String strHikiai, Int32 intMesaiCnt, String Kengen, String Jigyosho)
at Mj.RemotingMje.fncMje3200_GetData001(Object[]& ss, Int32 JchSelTypeFlg, String strJuchu, String strHikiai, Int32 int
NAO
ぬし
会議室デビュー日: 2001/10/24
投稿数: 1256
お住まい・勤務地: 神奈川のはずれから東京の下町
投稿日時: 2006-12-07 13:48
引用:

時々下記のエラー@が起こります。@の後Aのエラーが発生し最悪時には全てのクライアント
要求からAのエラーを起こしシステム完全に機能しなくなります。
1.@のエラーは必ず起きるわけではないです。呼び出しメッソドにも依存しません。


発生する時のシチュエーションは?
(例えば何クライアント繋いでるとかサーバーのCPU負荷率がどうとか…)

引用:

2.Aのエラーも@のエラー後必ず起きる訳でも有りません。


1.に同じ

引用:

3.Aのエラーが発生してもその後、普通に機能する時もあります。


1.に同じ

引用:

4.GC.Collect()が原因と思い外しましたがだめでした。


何を持ってしてダメと判定?

引用:

5.クライアントからの要求が多いと発生率が高くなる傾向です。


1.に同じ

トラブルシューティングはもっと詳細に現象を掴まないと
いつまで経っても解決しません

まずは環境も含めて発生条件を有る程度絞り込む事が重要です。
これだと殆どの人が回答出来ませんし、

回答したとしても推測の域を出ません。
_________________
Inspired Ambitious
ISMS Assistant Auditor
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-12-07 15:04
引用:

ひでとるさんの書き込み (2006-12-07 13:04) より:

(1) のエラーは必ず起きるわけではないです。呼び出しメッソドにも依存しません


今回の呼び出しメソッドは、

引用:

fncSelectKonyuData


だと思いますが、例外が実際に起きている箇所は、DataAdapter.Fill メソッドだったりしませんか?

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
ひでとる
会議室デビュー日: 2006/12/07
投稿数: 2
投稿日時: 2006-12-07 19:11
NAOさん、じゃんぬねっとさん早速の回答ありがとうございました。


> トラブルシューティングはもっと詳細に現象を掴まないと
> いつまで経っても解決しません
> まずは環境も含めて発生条件を有る程度絞り込む事が重要です。
> これだと殆どの人が回答出来ませんし、

おっしゃるとおりなんですが、月末の数日のみ(2ヶ月連続)発生
していた現象で現在はおきてなく、現象の再現もできない状況な
のです。。。

> 回答したとしても推測の域を出ません。

推測の域でもなにかヒントを頂ければ現象の切り分けができるの
で助かります。



> 例外が実際に起きている箇所は、DataAdapter.Fill メソッドだったりしませんか?

その通りで、何回か現象が出ましたが全てFillのところで発生しています。




現象についての補足です。(参考にならないかもしれませんが。。。)

・通常エラーが出ている処理を動かしても正常に動作する。
・2ヶ月前から突然現象が発生した。
・2ヶ月前にプログラムの一部修正があった。
・修正の中にCC.Collect処理を入れていたので原因ではないかと思いやめた
 がその後も現象が発生した。
・当然、上記修正部分を疑うのですが、今まで動いていた場所でエラーが出
 ている。(該当部分の修正は全く行っていない)しかもFillの中。
・サーバへの接続はSingleCallでOracleの接続は、呼び出し毎に行っている。

以上 なにかヒントでもあれば宜しくお願いします。

じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-12-07 19:20
引用:

ひでとるさんの書き込み (2006-12-07 19:11) より:

その通りで、何回か現象が出ましたが全てFillのところで発生しています。


つまり、"呼び出しメッソドにも依存しません" ではないわけですね。
(Fill メソッドの呼び出し元を指しているのだとすれば、着眼点が間違っていると思います)

そういえば、OracleClient は、ODP.NET に比べて不具合が多いです。
今回がソレであると断言はしませんが。

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2006-12-07 22:50
 言いたいことはNAOさんと同じなのですが。

> 1.(1)のエラーは必ず起きるわけではないです。呼び出しメッソドにも依存しません。
でも、その時の、Oracle との接続がどうなっているかは、調べられますよね?(OEM も使えないのかな?)

> 4.GC.Collect()が原因と思い外しましたがだめでした。
どこで、どの様に、何を目的として GC.Collect を行っていて、なぜこれが原因だと思いましたか?
(原因となるとしたら、GC.Collect じゃなく、Close や Dispose なんだよね)

> 5.クライアントからの要求が多いと発生率が高くなる傾向です。
接続クライアント数が多いのか、アクセス要求が多いのか、どちらでしょう?
単一のクライアントが短時間に複数回要求するのと、
多数のクライアントが同時期に1回要求するとの、
「クライアントからの要求が多い」という表現は同じでも、内部的には違うということは、わかりますか?


 とりあえず、うまくいっているときに LAN を引っこ抜いて、同じエラーが出るか、確認。
出たら、「そういうことね〜。ネットワーク屋さん、よろしく!!」と、言えますね。
_________________
1

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