LoginSignup
0
0

More than 1 year has passed since last update.

OCIでデータベースへの接続がタイムアウトする場合の回避方法

Last updated at Posted at 2022-02-03

OCI(Oracle Clud Infrastructure)のDBCS(Database Cloud Service)などのデータベースを利用する際に、通信経路の何らかの機器のタイムアウト設定などの影響を受けて、接続がORA-3113でタイムアウトすることがあります。(クラウド環境に限らない話ですが....)

対応方法としては、該当機器のタイムアウト設定を見直す方法がありますが、Oracle Client側の設定で対処できるか確認してみました。

1.Windows10のTCP/IP Keep Alive Time変更

まずは、Oracle ClientとなるWindows10のKeep Alive Timeを設定してみます。

マイクロソフト社のTechNetにある「TCP 関連でレジストリにより設定可能なパラメーターについて」の記事を参考にしました。

TCP/IPのKeep Alive Timeとして、以下のレジストリーキーを追加します。

パス:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
名前:KeepAliveTime
種類:REG_DWORD(32ビット)
値:設定したいKeep Alive Time(ミリ秒)

今回は 60秒(60000ミリ秒)に設定しました。
image.png

2.tnsnames.oraの変更

Oracle Net ServiceのEnableパラメータをOracle Clientのtnsnames.oraに設定することで、TCP転送のキープアライブ機能をネット・サービス・クライアントに対して有効にできます。

tnsnames.oraのDESCRIPTIONセクションに「(ENABLE=BROKEN)」を追加します。

privatedb =
  (DESCRIPTION =
    (ENABLE=BROKEN)
    (ADDRESS = (PROTOCOL = TCP)(HOST = xxx.xxx.xxx.xxx)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = xxxxxxxx.subxxxxxxxx.vcnxxxxxxxx.oraclevcn.com)
    )
  )

こちらの記事にある、ネットワーク・ロード・バランサを経由したデータース接続環境でテストしたところ、本来6分でタイムアウトする事象を回避できることを確認できました。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0