Oracle SQL Developer が DB 接続を閉じないようにしたり、タイムアウトを増やしたりする方法はありますか? 長時間実行されているクエリ中に、SQL Dev が接続を閉じるだけで、クエリがサーバー上で実行されたままになることがありますが、結果はありません。サーバーに RDP で接続し、SQL Dev をローカルで実行すると、この問題は発生しないようです。
7 に答える
答え
物事を壊すのは、SQL Developerとデータベースの間のファイアウォールである可能性が最も高いです。SQL Developer キープアライブ プラグインを使用して、SQL Developer からこれを解決できます。
ThomasとDavid Mannの回答を使用して、データベース サーバーからこれを修正することもできます。
この問題を回避するために、デッド接続検出 (SQLNET.EXPIRE_TIME) を使用して Oracle Net を構成できます。データベース サーバーの EXPIRE_TIME をファイアウォール接続タイムアウトよりも小さい値に設定して、DCD がデータベースへの接続を維持できるようにします。Note 151972.1「Dead Connection Detection (DCD) の説明」を参照してください。
元の答え
これに対する答えはありませんが、同じ問題が発生しています。
SQL Developer とデータベースの間のファイアウォールは、「非アクティブ」なセッションを自動的に閉じます。長時間実行されているクエリは、ファイアウォールによると非アクティブなセッションであるため、彼はそれを閉じます。ファイアウォールが接続を閉じないように、SQL Developerが長時間実行されるクエリを使用して接続を介してパケットを送信する方法をまだ見つけていません。そして、これが可能かどうかはまったくわかりません。
したがって、これは SQL Developer の問題ではなく、ファイアウォールの問題だと思います。
- アップデート
接続をアクティブに保つことができる SQL Developer の拡張機能があります: http://sites.google.com/site/keepaliveext/
まだ完全には完了していません (たとえば、指定したタイムアウトに関係なく、受け取る通知には同じタイムアウトが示されます) が、うまくいきます。私はまだ、最新の SQL Developer プレリリースに対してテストしていませんが、SQL Developer 2.2.x で動作しました。
- アップデート
SQL Developer 4+ の場合は、次を使用できます: http://scristalli.github.io/SQL-Developer-4-keepalive/
これは、使用できる可能性のある別の Keep Connection Active 拡張機能です。(上記の拡張機能には、この拡張機能で解決される多くの問題が含まれています。)
また、私にはファイアウォールの問題のように聞こえます。
サーバーの SQLNET.ORA ファイルに EXPIRE_TIME パラメータを設定すると、うまくいくかもしれません。ドキュメントから:
パラメータ SQLNET.EXPIRE_TIME を使用して時間間隔を分単位で指定し、プローブを送信してクライアント/サーバー接続がアクティブであることを確認します。0 より大きい値を設定すると、クライアントの異常終了が原因で、接続が無期限に開いたままになることがなくなります。プローブが終了した接続、または使用されなくなった接続を検出すると、エラーが返され、サーバー プロセスが終了します。このパラメーターは主に、データベース サーバーを対象としています。データベース サーバーは通常、一度に複数の接続を処理します。
これはSQL開発者の問題のようには聞こえませんが、確かに私はこれに遭遇したことはありません。あなたのネットワークのような他のものではないのですか?デスクトップからSQLplusから接続するとどうなりますか。
一時的な解決策として、「データ グリッド」の横にある「DBMS 出力」タブを見つけて、DBMS 出力をオンにし、ポーリング頻度を適切な時間に設定します。
私たちのDBAはこれに対する解決策を見つけたようです:
2.2. OC4J インスタンスとデータベースの間にファイアウォールが存在する場合、ファイアウォールはデータベース サーバーへの非アクティブな jdbc 接続をドロップする可能性があります。ただし、OC4J インスタンスは、ファイアウォールがデータベースへの接続をタイムアウトにしたことを検出できません。この問題を回避するために、デッド接続検出 (SQLNET.EXPIRE_TIME) を使用して Oracle Net を構成できます。データベース サーバーの EXPIRE_TIME をファイアウォール接続タイムアウトよりも小さい値に設定して、DCD がデータベースへの接続を維持できるようにします。Note 151972.1「Dead Connection Detection (DCD) の説明」を参照してください。これは、中間層ではなくデータベース サーバーで構成された設定であるため、すべてのデータベース接続 (OCI および Thin JDBC) に適用されます。代替ソリューション: - ファイアウォールのアイドル タイムアウト パラメータを無効にするか、増やします。または - データベースおよび中間層サーバーの TCP キープアライブ時間設定を、ファイアウォール接続タイムアウトよりも小さい値に構成します。TCP キープアライブ時間を設定した後、接続を維持するために指定された分が経過すると、マシンはヌル パケットを繰り返し送信します。パケットはファイアウォールのアイドル タイムアウト内で毎回送信されるため、接続は閉じられません。