VPN経由でOracle DBに接続できない/クエリがすごく遅い
Oracle社のパッケージを利用したSI案件では、ライセンスの関係上、オフショアサイト側にOracleデータベースとパッケージ(Oracle EBSとか)を配置できないケースが多い(高いから)。そんな時は、日本側のオフィス(またはクライアントのDC)とオフショア側のオフィス間で拠点間VPNを張り、オフショア側から接続させる。 で、大体どのプロジェクトでも、オフショア側から「Oracleにつながらない」「検索が重くて結果が返ってこない。開発にならない」「PL/SQLのコンパイルができない」などとクレームを受けることになる。ネットワーク系の問題だと大体わたしのところにお鉢が回ってくるので、少し切り分けをしてみた。 結論から言うと、Oracle 11g Clientになってからクライアントの仕様が変わったことで、問題が起きるようだ。 10gの場合、SDU(セッションデータユニット)のデフォルトは2048 http://otndnld.oracle.co.jp/document/products/oracle10g/102/doc_cd/network.102/B19208-02/performance.htm 11gの場合、SDUのデフォルトは8192 http://download.oracle.com/docs/cd/E16338_01/network.112/b56288/performance.htm SDUとは http://docs.oracle.com/cd/E16338_01/network.112/b56288/performance.htm#i1006332 11gになってSDUのサイズが大きくなったため、10gまでのクライアントでは問題なかったのに、11gクライアントからはVPN通信中にパケットロス等の問題が起きるようになった模様。 オフショア側のクライアント側で、SDUのサイズを小さくする(2048とか)ことで、問題は解決した。 SDUのサイズはクライアント側のsqlnet.oraファイルや、tnsnames.oraファイルの設定で調整できる。 参考: http://otndnld.oracle.co.jp/document/products/oracle10g/102/doc_cd/network.102/B19209-01/tnsnames.htm#i477833 なお、オフショア側でSQL Developerを使っている場合は、先ずOracle Clientをオフショア側の端末にインストールすること。そして、クライアント側のtnsnames.oraファイルでSDUのサイズを指定し、以下のサイトを参考に、SQL Developerでtnsnames.oraファイルの場所を指定する。 http://theitbros.com/sql-developer-use-tnsnames-ora-file