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

This entry was posted in Oracle. Bookmark the permalink. Both comments and trackbacks are currently closed.

関連記事