ODP.NETの接続にTimeoutが設定できない

このQ&Aのポイント
  • VB.NET2015からOracleのストアドを起動する際、ODPを使用していますが、タイムアウトの設定ができません。
  • 処理時間が短いものには問題なく動作していますが、重たい処理をすると「context switch deadlockが発生しました」というエラーが発生します。
  • Timeoutを設定するため、ConnectionStringに「Connection Timeout=600」と記述しましたが、エラーが発生します。
回答を見る
  • ベストアンサー

ODP.NETの接続にTimeoutが設定できない

いつも楽しく勉強させていただいております。 環境はWindows Server 2008R2 DataCenter、データベースはOracle10G、開発ツールはVB.NET2015です。 VB.NET2015からOracleのストアドを起動するのにODPを使用しています。 処理時間が短いものについては問題なく動いているのですが、重たい処理をすると 「context switch deadlockが発生しました」のエラーが発生します(画像参照)。 ここは規定以上のTimeoutを設定するべきと考えて、下記のコードを書いてみました。 Dim myCon As New OracleConnection() myCon.ConnectionString = "User Id=scot;Password=tiger;Data Source=orcl10;Connection Timeout=600" myCon.Open() ところが実行するとConnectionStringのプロパティを設定しているところで次のようなエラーが発生します。 キーワードはサポートされていません : 'Connection Timeout' ネットで見たサンプルコードをコピペしたのでキーワードが間違っているとは思えません。 System.Data.OracleClientの他に参照設定の追加などが必要なのでしょうか。 http://nanaganbaru.blog.fc2.com/blog-entry-273.html また、上記のHPで同じ現象に悩む人(ただしC#)の記事を読んで デバッグ⇒例外で例外のダイアログボックスを開き・・・とあるのを [デバッグ]-[オプション]のダイアログボックスで[デバッグ]-[オプション]の 「経過時間のPerfTipを表示する」のチェックをはずしてみたところ重たい処理を終えることができました。 これで結果オーライとするにはモヤモヤします。 疑問は下の三つです。 1.私のODPのタイムアウトの設定はどこが間違っていますか。 2.[デバッグ]-[オプション]のダイアログボックスで設定する方法はこれで正しいでしょうか。 3.1(正しくできたとして)と2とどちらの方法がよいでしょうか。 タイムアウトの秒数を明示的に指定したいのでできれば1の方法を使いたいのですが。

質問者が選んだベストアンサー

  • ベストアンサー
  • oboroxx
  • ベストアンサー率40% (317/792)
回答No.1

ConnectionStringを作成するのに便利なヘルパークラスのOracleConnectionStringBuilderクラスを使ってみてはどうでしょうか。 文字列だと1文字でも間違っているとエラーになるので、上記のクラスであればそういったことも減りやすいかと。 ただOracle10Gの時にサポートされていたかがわかりません。 頑張ってみてください。

参考URL:
http://otndnld.oracle.co.jp/document/products/oracle10g/102/windows/B31247-01/OracleConnectionStringBuilderClass.htm
meglin888
質問者

お礼

oboroxxさん、回答ありがとうございます。 OracleConnectionStringBuilderクラスを使っても結果は同じでした。 10GでもBuilderはサポートはされているのようですが、 Connection Timeoutについてはやはりキーワードはサポートされていませんの エラーになります。 社内の人に聞いて「Context Switch Deadlockが発生しました」のダイアログボックス (質問に添付した画像の)が出たところで[例外設定を開く]をクリックし、 そこでContext Switch Deadlockのチェックをはずすということをしました。 これで当座はしのげそうですが、やはりタイムアウトを設定する方が安心ですよね。

関連するQ&A

  • ODB.netでの接続環境について

    こんにちわ。質問させていただきたいことがあります。 OS:ローカルデバッグ環境 WindowsXP+SP2 (実際はWindowsServer2003 R2) 開発環境:VS2005(VB.net) .net:2.0.50727 Oracle:10g(10.2.0.1.0) 現在、VB.net+ODP.netで開発を進めております。VS2005でデバッグするため WindowsXPにIISをインストールして環境を作成しました。 最初にOracleClient 10.2.0.1.0のみをインストールして製造作業をすすめており 以下のようなコードで記述し、問題なく動作しておりました。 この場合特に「ODP.net」というコンポーネントをインストールした覚えはありません。 --------------------------------------------------------------------------------------- Imports Microsoft.VisualBasic Imports Oracle.DataAccess.Client Imports Oracle.DataAccess.Types Imports System.Configuration Private cnn As New OracleConnection Private trans As OracleTransaction Dim connectionString As String = "Data Source=xxxx;User ID=xxxx;Password=xxxx" cnn.ConnectionString = connectionString cnn.Open() ------------------------------------------------------------------------------------------ ところが、いろいろなページを参照すると「ODP.net」はインストールが必要とのことだったので、 「ODTwithODAC1020221.exe」というファイルをダウンロードしてインストールしました。 すると参照の追加に「Oracle.DataAccess 2.102.2.20」という行が現れこれを選択すると 「OracleConnection' は、名前空間 'Oracle.DataAccess.Client' では不適切です。 」 というエラーが発生して接続できなくなりました。 教えていただきたいポイントとしては 1.ODP.net接続をする場合は別途インストールする必要があるのでしょうか? それともOracleClientに含まれているのでしょうか? またもし別途インストールする必要があるなら、最初に接続に成功していた場合 はODP.netでは接続していなかったということになるのでしょうか? 2.「ODTwithODAC1020221.exe」というファイルはODACとしてまとめられていますが これがインストールされている場合は逆にOracleClientは必要ないのでししょうか(混在可?)? 3.この発生しているエラーは何を意味しているのでしょうか? ちょっと乱文になりましてすみません。今回オラクルは初めてでいろんなコンポーネント があり、混乱しているようです。 ご教示いただけるかたいらっしゃいましたらお忙しいところすみませんがよろしくお願いいたします。

  • OLEDB.NETで接続できない

    OS:XP 開発:VB 2008 .NET Framework 2.0 MDAC2.5 DB:Oracle9i(サーバー)、Oracle8i(クライアント) 以下のようにOracle Provider for OLEDBで接続を試みるもエラーに なります。 Dim con As New OleDbConnection() con.ConnectionString = "Provider=OraOLEDB.Oracle;User Id=scott;" & _ "Password=tiger;Data Source=Oracle;OLEDB.NET=True;" con.Open 結果は、「'OraOLEDB.Oracle'プロバイダーはローカルのコンピュータ に登録されていません。」のエラーになります。 環境変数のPATHに、[OralceHome]\binは定義されていますし、Oracle Provider for OLEDB はインストールされているのを確認しました。 因みにですが、ODP.NETでの接続ができるのですがよく分からない 状態です。あまり.NETやOracleの知識がないので詳しく伝えれないの ですが、デバッグ実行時はエラーになるのに、EXE単体で実行した場合 には問題なく接続できている状態です。ODP.NETは、クライアントが Oracle9R2からだったら使えるようなことがどこかに書いてあったので このようにデバッグ時とEXE単体実行時で異なるのかと思います。 デバッグ時には、接続オープンエラーになります。 そのような経緯でOLEDB.NETでは、正常に動作するであろうと思い修正 に踏み切ったのですが、うまくいきません。.NET側での参照設定などの 設定がいけないのでしょうか?それとも他に原因があるのでしょうか? かなり悩んでいるので原因と対処方法の分かる方がおられましたら、 ご教授よろしくお願い致します。

  • 接続設定を削除したところ、エラーが出ていて直りません。

    環境はVB2005、SQLServer2005です。 DataGridViewを使用してSQLデータを表示、編集できるようにしています。 DataGridViewを貼り付けた時に右上に出てくる右矢印からデータソースを選択し、表示させていましたが、接続設定を変更するため、MyProjectの設定タブから現在使っている接続を削除してみたところ、以下のエラーが出てきてしまいどう直していいか分かりません。どなたか詳しい方いましたらお願いします! エラーメッセージ エラー 1 'Database1ConnectionString' は 'WindowsApplication1.My.MySettings' のメンバではありません。 エラー箇所 DataBase1.DataSet1.Designer.vb <System.Diagnostics.DebuggerNonUserCodeAttribute()> _ Me._connection.ConnectionString =Global.WindowsApplication1.My.MySettings.Default.Database1ConnectionString

  • 書き込んだDVDが再生できなくなりました(;→д←)

    書き込んだDVDを再生しようとしたら。 アプリケーションのコンポーネントでハンドルされていない例外が発生しおました。 オブジェクト参照がオブジェクトインスタンスに設定されていません。 と出ました、どうしたら直りますか?  詳細は以下です。          このダイアログ ボックスではなく、Just-In-Time (JIT) デバッグを呼び出すための詳細については、 このメッセージの最後を参照してください。 ************** JIT デバッグ ************** Just-In-Time (JIT) デバッグを有効にするには、 このアプリケーション、またはコンピュータ (machine.config) の構成ファイルの jitDebugging 値を system.windows.forms セクションで設定しなければなりません。 アプリケーションはまた、デバッグを 有効にしてコンパイルされなければなりません。 例 : <configuration> <system.windows.forms jitDebugging="true" /> </configuration> JIT デバッグが有効なときは、このダイアログで処理するよりも、ハンドルされていない例外はすべて コンピュータに登録された JIT デバッガに設定されなければなりません。    

  • マカフィーで”許可しない”を選び、ネット&プリンタ接続不能に

    win2000にてネット中、マカフィーの接続許可を求める表示が出て 内容をよく確かめないまま<許可しない>を選んだ結果、 ネットに接続できなくなりました。 再起動したところ、<アプリケーションのコンポーネントで ハンドルされていない例外が発生しました。 ”System.Net.IPAddress”のタイプ初期化子が例外をスローしました> などと表示され、続行しても終了してもネットは接続できないままです。 ”詳細”には<JITデバッグが有効なときは、このダイアログで処理 するよりも、ハンドルされていない例外は、すべてコンピュータに 登録されたJITデバッガに設定されなければなりません> 等ありましたが、意味がわからず困っています。 その他プリンタとも接続できなくなりました。 つたない説明で恐縮ですが、どうぞよろしくお願い致します。

  • デバッグ中に例外が発生した時、プログラムを止めてコードを黄色でマーク表示するには

    VB2005 Express EditionにSP1を適用しています。 VBの勉強を始めて3ヶ月ほどになります。 以前に使っていたときは、デバッグ時に例外が発生すると、特に例外処理していない場合はイミディエイトウィンドウに例外のメッセージが表示され、プログラムがストップし、問題があったコードが黄色でマークされて表示されていました。 しかし最近PCをフォーマットして改めてVB2005を入れたところ、ほとんどの場合例外時にプログラムが止まらず、コードが黄色でマークされたりもしなくなってしまいました。ただ、イミディエイトウィンドウに、「'System.ArgumentOutOfRangeException' の初回例外が System.Windows.Forms.dll で発生しました。」などと表示されるだけです。どこで例外が発生したのかわかりにくくなって困っています。場合によってはちゃんとプログラムがとまることもありますが、違いなどもよくわからずにおります。 なにか事前の設定を忘れているのだと思うのですが、どこの設定を変えればよいのか教えてください。よろしくお願いいたします。

  • C#~SQL2005で勝手にタイムアウト

    C#とSQL Server2005との連携でConnectionStringに connection timeout=60 を設定していますが、 30秒程度でタイムアウトしてしまいます。 タイムアウトの設定はソースコード上以外に、 SQL Server上でも設定が必要なのでしょうか?

  • JITデバッグ

    Windows8でWebカメラで作成したビデオファイル(wmvの拡張子)をWindowsXP に移し、トリミングをして保存したらJITデバッグのエラーが出ました。 ************** JIT デバッグ ************** Just-In-Time (JIT) デバッグを有効にするには、このアプリケーション、 またはコンピュータ (machine.config) の構成ファイルの jitDebugging 値を system.windows.forms セクションで設定しなければなりません。 アプリケーションはまた、デバッグを有効にしてコンパイルされなければ なりません。 例: <configuration> <system.windows.forms jitDebugging="true" /> </configuration> JIT デバッグが有効なときは、このダイアログ ボックスで処理するよりも、 ハンドルされていない例外はすべてコンピュータに登録された JIT デバッガに設定されなければなりません。 どう処理したらよいですか?

  • Sleipnir2.5.17環境でのインターネットオプションの設定について

    WindowsXP Pro SP2環境にて、IE6ベースでSleipnir2.5.17を使用しています。 時々なのですが、Sleipnirでブラウズしている時にエラーが含まれているページにアクセスすると 「デバックしますか?」とのダイアログが警告音と共に出てきます。 このダイアログはIE6で同じページへアクセスした場合は出現せず、黄色い三角マークの警告アイコンが左下に出るだけです。 このSleipnirでの警告ダイアログを出さないようにする為には、インターネットオプション内の「詳細設定」タブにある「スクリプトのデバッグを使用しない(その他)」のチェックボックスにチェックを入れると、以後は出なくなります。 そこで質問なのですが、私はこのエラーメッセージダイアログの出現が嫌で、「スクリプトのデバッグを使用しない(その他)」にチェックを入れていますが、これをチェックしている場合、何か不都合な面(例えばセキュリティーが低下するなど)が発生しますでしょうか? また、何故IE6では警告アイコンがブラウザの左下に出るだけであるのに、Sleipnirではダイアログが出るのでしょうか? ご存知の方、ご教示くださいませ。

  • ワード2010 オプション設定

    ワード2010を利用し作成中、Wordのオプション設定でダイアログボックスのチェックを外したり、付けたりした設定を≪この文書のみ≫の設定にするという事は、可能なのでしょか・・・。 Wordのオプション→表示→常に画面に表示する編集記号のダイアログボックスです。 次に、ワードを起動すると前回の設定状態なので、それを回避したいのですが・・・ よろしくお願いします。