Oracle SQL DeveloperがDB接続を閉じないようにする方法、またはタイムアウトを増やす方法はありますか?長時間実行されるクエリ中に、SQL Devが接続を閉じるだけで、クエリはサーバー上で実行されたままになりますが、結果は表示されません。サーバーにRDPを実行し、SQL Devをローカルで実行すると、この問題は発生しないようです。
これはSQL開発者の問題のようには聞こえませんが、確かに私はこれに遭遇することはありません。それはあなたのネットワークのような他のものではないと確信していますか? SQLプラスデスクトップから接続するとどうなりますか。
これに対する答えはありませんが、同じ問題が発生しています。
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より大きい値を設定すると、クライアントの異常終了により接続が無期限に開かれたままにならないようにします。プローブが終了した接続、または使用されなくなった接続を検出すると、エラーを返し、サーバープロセスを終了させます。このパラメーターは、主にデータベースサーバーを対象としており、通常は一度に複数の接続を処理します。
一時的な解決策として、「データグリッド」の横に「DBMS出力」タブがあり、DBMS出力をオンにして、ポーリング頻度を適切な時間に設定します。
dBAはこれに対する解決策を見つけたようです。
2.2。 OC4Jインスタンスとデータベースの間にファイアウォールが存在する場合ファイアウォールは、データベースサーバーへの非アクティブなjdbc接続を切断する場合があります。ただし、OC4Jインスタンスは、ファイアウォールがデータベースへの接続をタイムアウトしたことを検出できません。 Oracle Netは、この問題を回避するためにDead Connection Detection(SQLNET.EXPIRE_TIME)を使用して構成できます。データベースサーバーのEXPIRE_TIMEをファイアウォール接続タイムアウトよりも小さい値に設定して、DCDがデータベースへの接続を維持するようにします。注151972.1「デッド接続検出(DCD)の説明」を参照してください。これは中間層ではなくデータベースサーバーで構成された設定であるため、すべてのデータベース接続(OCIおよびシンJDBC)に適用されます。代替ソリューション:-ファイアウォールのアイドルタイムアウトパラメーターを無効にするか、増やします。または-データベースおよび中間層サーバーのTCPキープアライブ時間設定をファイアウォール接続タイムアウトよりも小さい値に設定します。TCPキープアライブ時間、指定された分数が経過すると、マシンはヌルパケットを繰り返し送信し、接続が維持されるようにパケットを送信します。