OCIライブラリを使用してoracleクライアント・プログラムを作成しました。OCIクライアント・プログラムからOracleサーバー・クラッシュを検出する方法
クライアントはサーバーがクラッシュしてクライアントに関係していないため、サーバーに要求を送信してハングします。
(OCI APIを使用して)クライアント側からサーバーステータスを見つける方法はありますか。
おかげ
OCIライブラリを使用してoracleクライアント・プログラムを作成しました。OCIクライアント・プログラムからOracleサーバー・クラッシュを検出する方法
クライアントはサーバーがクラッシュしてクライアントに関係していないため、サーバーに要求を送信してハングします。
(OCI APIを使用して)クライアント側からサーバーステータスを見つける方法はありますか。
おかげ
は私がアスタリスク用の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_time
とtcp_keepalive_intvl
を/etc/sysctl.conf
に変更する必要があります。これはグローバルなサーバー側の設定であり、Oracleは単一のTCP接続のキープアライブ間隔をまだ設定できません。
もう1つのコメント:OCIPingと呼ばれる機能があります。 これはテストにも使用できます。しかし、長時間実行されているクエリとデッドサーバーの状況を区別する方法がわかりません。
便利な情報。ありがとうございます – vinod