2016-07-20 6 views
0

OCIライブラリを使用してoracleクライアント・プログラムを作成しました。OCIクライアント・プログラムからOracleサーバー・クラッシュを検出する方法

クライアントはサーバーがクラッシュしてクライアントに関係していないため、サーバーに要求を送信してハングします。

(OCI APIを使用して)クライアント側からサーバーステータスを見つける方法はありますか。

おかげ

答えて

1

は私がアスタリスク用のOracle DBモジュールは素敵なDCD(デッド接続検出)実装されていたと思います。さまざまなアプローチ(サーバー側、クライアント側)があります。

最も簡単な方法は、TCPキープアライブを使用することです。 tnsnames.oraにenable=brokenディレクティブを使用してください。

目的

サポートTCPトランスポート上のキープアライブ機能は、接続文字列に DESCRIPTIONパラメータの下に(ENABLE = BROKEN)埋め込むことにより、ネット・サービスクライアントのために を有効にすることができます。キープアライブを使用すると、 呼び出し元がデッド・リモート・サーバーを検出できますが、通常は通知に2時間以上かかることがあります。オペレーティングシステムのTCPコンフィグラブル(プラットフォームによって異なる )は、実際のキープアライブタイミングの詳細を定義します。

net_service_name= 
(DESCRIPTION= 
    (enable=broken) 
    (ADDRESS=(PROTOCOL=tcp)(HOST=sales1-svr)(PORT=1521)) 
    (ADDRESS=(PROTOCOL=tcp)(HOST=sales2-svr)(PORT=1521))) 
    (CONNECT_DATA=(SERVICE_NAME=sales.us.example.com)) 

ちょうどあなたはまた、root権限が必要になります注意してください。デフォルト設定では、Linuxカーネルは2時間の休止後にキープアライブパケットの送信を開始します。したがって、tcp_keepalive_timetcp_keepalive_intvl/etc/sysctl.confに変更する必要があります。これはグローバルなサーバー側の設定であり、Oracleは単一のTCP接続のキープアライブ間隔をまだ設定できません。

もう1つのコメント:OCIPingと呼ばれる機能があります。 これはテストにも使用できます。しかし、長時間実行されているクエリとデッドサーバーの状況を区別する方法がわかりません。

+0

便利な情報。ありがとうございます – vinod

関連する問題