2015-02-05 19:43:31 (Thu);
こんな状況が発生したら・・・
- 1行(数行)の問い合わせは問題ないのに、大量データを問い合わせると応答が無い
- 同じDBへの接続なのにクライアントによって応答が無くなる場合がある
- 11g Clientをインストールしたら応答が無くなった
- DBやクライアントは変わらないのに、とあるネットワーク網で接続すると応答が無い
などなど。
なぜか
Oracleの応答が無くなる(もしくは遅延する)といった現象。
原因としては
Oracle 11g Client のSDU(セッションデータユニット)のデフォルト値が変わったこと
なのかもしれません。
10g以前のSDUのデフォルトは2048
11gのSDUのデフォルトは8192
上記事例に該当する場合は、
SDUのデフォルトを2048に変えて実行するとうまくいくかもしれません。
変更するには sqlnet.ora か tnsnames.ora にSDUを記述します。
★sqlnet.ora(クライアント全体に設定)
DEFAULT_SDU_SIZE=2048
★tnsnames.ora(特定の接続のみ設定)
xxDB =
(DESCRIPTION =
(SDU=2085)
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.100)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = xxdb)
)
)
(こっそりおまけ) ※注意:未検証です。
私は特定のネットワーク網で接続したときに発生しました。
解決策を教えてくれた人の話では、
原因はMTU(Maximum Transmission Unit)の設定とかファイアーウォールにあるのかもしれない
とのこと。
MTUの設定が小さいため、通信時にパケットが大量に分散され
それをファイアーウォールが危険と判断してブロックする。
なのでいつまでたっても通信中のまま応答が無くなる。
もしくは、ファイアーウォールにブロックされないまでも、
パケットが大量に分散されるため、応答が著しく遅い。
とか。
ここらへん疎いので、
私の解釈が間違ってる可能性大です。
なのであまり気にしないでください。
最終更新:2015年02月05日 19:43