2012-02-13 10 views
0

データベースが実行中かどうか、Javaコードから調べたいと思います。どのアプローチが最も効果的かはわかりません。最も明白なのは、定期的にデータベースをポーリングするスレッドを持つことです。もう1つの方法は、トリガーを使用する方法です。私はトリガーに精通していませんが、アップデート、挿入、削除のトリガを起動することができます。しかし、データベースがダウンしているときにトリガを起動することは可能ですか?データベースがダウンしたときにトリガーが働くのは当然のことです。データベースが実行中であるかどうかを確認してください。

PS:私たちが今使用しているデータベースがOracleであるが、私は同じソリューションは、任意のデータベースに

答えて

2

トリガは、通常、サーバー側の構築物で

感謝を適用することができると信じて。 "トリガーを撃つ"ためには、最初にDBに接続する必要があります。これは起動する必要があり、それは助けになりません。

"サーバーが起動しているかどうか"を確認する動機は何ですか?頻繁にクラッシュするか、DBがクラッシュしていない、またはネットワーク接続が失われたというデータベース呼び出しを実行する前に、特別な注意を払っていますか?

2番目の理由がある場合は、Java Oracleドライバを使用していると仮定すると、失敗した呼び出しから例外が発生します。

これらの例外をキャッチしてコールを再試行するために接続を再試行するように、コールをコーディングします。この方法では、データベースをポーリングする必要はありません。接続が切断されたときに(まれな)イベントに応答するだけです。

再接続を試みることができない場合は、データベースが死んでいることを発信者に通知し、管理者などに電子メールを送信できます。

ここにはいくつかの戦略がありますが、コールを確実に実行しようとしている場合は、Javaドライバが失敗して別のスレッドでDBサーバーをポーリングするのを待つだけです。その必要はありません。

+0

私は実際に各サーバーの状態を表示できるダッシュボードアプリケーションを作成しています。だから、私はリアルタイムでデータベースがダウンしているかどうかを知る必要があります。データベースがダウンしている場合は、すぐにダッシュボードアプリケーションのステータスを更新する必要があります。 – CuriousCoder

+0

ありがとうございます。はい、ダッシュボードが起動しているときにポーリングするか、単純なポーリングメカニズムを使用して、SELECT * FROM LIMIT 1などの非常に簡単な操作を試みるサーバーサイドを作成します。ドライバから例外をキャッチし、ダッシュボードを更新し、サーバーがダウンしていることを知らせます。 –

1

ステータスダッシュボードアプリケーションの場合は、定期的に(毎分10秒ごとに)、監視するすべてのデータベースサーバーを確認することをお勧めします。 ICMP pingを使用してデバイスにpingを実行できない場合、またはポートへの接続を開こうとすると、完全なハードウェア障害またはネットワーク故障を示す高レベルのアラームになります。 pingを実行できる場合は、データベースポートに接続してみてください。できない場合は、ソフトウェアの障害が発生していることを示します。

これが機能する場合は、簡単なクエリを実行してみてください。例外をスローすると、これは他のソフトウェアエラーです。動作するが、あらかじめ設定されたしきい値よりも遅い場合は、エラー自体ではなく、サーバーが「水中」であることを示すことがあります。ダッシュボードで黄色に点灯したい場合があります。

また、データベースのCPU負荷と全体的なCPU負荷、使用されているスワップファイルの量などを監視して、サーバーの状態を調べることもできます。

関連する問題