2012-02-13 1 views
0

내 데이터베이스가 실행 중인지 또는 Java 코드에서 실행되지 않았는지 확인하고 싶습니다. 어떤 접근 방식이 가장 효과적 일지 확신하지 못합니다. 가장 확실한 방법은 주기적으로 데이터베이스를 폴링하는 스레드를 만드는 것입니다. 또 다른 접근법은 트리거를 사용하는 것입니다. 트리거에 능숙하지는 않지만 업데이트, 삽입 및 삭제를위한 트리거를 실행할 수 있음을 알고 있습니다. 그러나 데이터베이스가 다운되었을 때 트리거를 실행할 수 있습니까? 데이터베이스가 다운되었을 때 작동 할 것이라고 생각하지 않습니다.데이터베이스가 실행 중인지 또는 Java를 사용하지 않는지 확인하십시오.

추신 : 지금 우리가 사용하는 데이터베이스는 오라클,하지만 난이 같은 솔루션은 데이터베이스에

감사

을 적용 할 수 있다고 생각

답변

2

트리거 일반적으로 서버 측 구조입니다; 그래서 "방아쇠를 당"하기 위해서는 먼저 DB에 연결할 수 있어야합니다. DB를 연결해야만 도움이되지 않습니다.

"서버가 가동 중인지 확인"하는 동기는 무엇입니까? DB가 충돌하지 않았거나 네트워크 연결이 끊어진 데이터베이스 호출을 실행하기 전에 자주 충돌하는지, 아니면 조심해야합니까?

두 번째 이유인데, Java Oracle 드라이버를 사용한다고 가정하면 실패한 호출에서 예외가 발생합니다.

예외를 catch하고 통화를 다시 시도하기 위해 연결을 시도하려면 통화를 코딩하십시오. 이렇게하면 데이터베이스를 폴링 할 필요가 없습니다. 연결이 끊어졌을 때 (드문 경우) 이벤트에 응답합니다.

다시 연결하려고 할 때 5 번 정도 시도하면 데이터베이스가 사망했다는 것을 발신자에게 알리고 관리자 나 다른 사람에게 이메일을 보낼 수 있습니다.

여기에는 몇 가지 전략이 있지만 호출이 실행되도록하려는 경우 Java 드라이버가 실패하고 별도의 스레드에서 DB 서버를 폴링하는 대신 알려주는 것이 중요합니다. 그럴 필요 없어.

+0

저는 실제로 사람들이 각 서버의 상태를 볼 수있는 대시 보드 응용 프로그램을 만들고 있습니다. 그래서, 나는 데이터베이스가 다운되었는지 아닌지 실시간으로 알 필요가있다. 데이터베이스가 다운 된 경우 즉시 대시 보드 애플리케이션의 상태를 업데이트해야합니다. – CuriousCoder

+0

오 그래; 그렇다면 대시 보드가 올라 갔을 때 그냥 폴링하거나 'SELECT * FROM user LIMIT 1'과 같은 간단한 조작을 시도하는 간단한 폴링 메커니즘 서버 측을 작성하거나 즉각 실행하여 리턴해야하는 그런 말도 안되는 것들을 그냥 폴링하십시오. 드라이버에서 예외를 잡아서 대시 보드를 업데이트하고 서버가 다운되었음을 알려줍니다. –

1

상태 대시 보드 응용 프로그램 인 경우 정기적으로 (매 10 초마다?) 모니터링 할 모든 데이터베이스 서버를 확인하십시오. ICMP ping을 사용하거나 포트에 대한 연결을 시도하여 장치에 ping을 수행 할 수없는 경우 하드웨어 오류 또는 네트워크 고장을 나타내는 높은 수준의 경고 여야합니다. 핑 (ping) 할 수 있으면 데이터베이스 포트에 연결하십시오. 그렇게 할 수 없다면 소프트웨어 오류가 있음을 나타냅니다.

이것이 작동하는 경우 간단한 쿼리를 실행 해보십시오. 예외가 발생하면 다른 소프트웨어 오류가 발생합니다. 작동하지만 사전 설정된 임계 값보다 느리면 오류 자체가 아니라 서버가 "물 부족"이라는 표시가 될 수 있습니다. 대시 보드에서 노란색으로 빛을 낼 수 있습니다.

또한 데이터베이스 CPU로드 및 전체 CPU로드, 사용 된 스왑 파일의 양 등을 모니터링하여 서버 상태를 측정 할 수 있습니다.