따라.SqlException 동안 발생하는 데이터베이스에 실패해
-
03-07-2019 - |
문제
나는 두 Microsoft SQL2005 데이터베이스 설정에서 실패을 통해 시나리오이다.응용 프로그램을 연결 문자열에"장애 조치 파트너"연결에 지정된 문자열입니다.
현재 라이브 데이터베이스의 실패를 통해 슬레이브 데이터베이스,거기에 작은 기간 동안 사용자가를 얻을 수 있습니다 따라.SqlException 메시지와 함께"기존의 연결에 의해 강제로 끊어졌습니다 원격 호스트".
이 때문에 주로 속도는 데이터베이스는 계속해서 실패하는 다른 뭔가가 있는 것을 방지하기 위해 수행 할 수 있습니다 이러한 오류?
해결책
맞습니다 : 데이터베이스가 실패하는 데 걸리는 시간과 관련이 있습니다.
동기 미러링 장애 조치 타임 라인은 다음과 같습니다.
- 기본 서버 A는 모든 연결을 종료하고 닫습니다. 이 시점부터 서버 A에 연결하려는 모든 클라이언트는 연결을 강제로 닫게됩니다.
- 기본 서버 A는 로그가 보조 서버 B와 완전히 동기화되어 있는지 확인합니다.
- 서버 B의 SQL 서비스가 시작됩니다.
- 서버 B의 SQL 서비스는 연결을 수락하기 시작하며 그 시점에서 클라이언트가 다시 연결할 수 있습니다.
서버가 아무리 빨라도 연결이 폭격되는 간단한 (최소 1 초) 기간이있을 것입니다. Steven Lowe가 말했듯이, 당신은 그 예외를 가두고, 기다렸다가 다시 시도해야합니다. 앱이 더 큰 트랜잭션의 일부로 여러 쿼리를 연속으로 발행하면 거래가 실패 할 수 있습니다.
다른 팁
경고 : 몇 년 전에 'Failover Partner'옵션을 사용할 수 없었습니다.
우리는 Connect-Lost 예외 (몇 가지 다른 맛)를 덫에 걸리고 몇 초 동안 기다렸다가 다시 시도해야했습니다. 이를 위해서는 모든 데이터베이스 작업이 대기중인 논리를 자동화하기 위해 래퍼가 필요했습니다. 이로 인해 많은 작업이 아니었고 상당히 편리한 것으로 판명되었습니다. 오류 코드와 예외 유형을 검사하고 작업을 안전하게 재 시도 할 수 있는지 여부에 대한 의사 결정 테이블을 만들기위한 노력이 진행되었습니다.
이로 인해 응용 프로그램를 사용하면 기존의 연결에 연결 수영장도 있습니다.만 이 오류가 발생한 후 응용 프로그램이 수영장 얻을,삭제하고 새로운 연결을 사용하여 장애 조치 상자입니다.