테스트 환경에서 Windows Server 장애 조치 (Failover) 클러스터를 설치하고 클러스터 된 SQL Server 2014 인스턴스를 설치했습니다. 클러스터에는 두 개의 노드가 있고 네트워크 이름은 SQLINSTANCE입니다.SQL Server 2014 클러스터 장애 조치 인스턴스, 장애 조치시 다시 연결하는 방법?
지금 작은 콘솔 응용 프로그램에서 내가 테스트 데이터베이스를 100ms마다 쿼리 (잘 실행) 간단한 루프가 있습니다 (
while (true)
{
using (var dbContext = new TestDBContext())
{
foreach (var person in dbContext.People)
{
Console.WriteLine(person.FirstName + " " + person.LastName);
System.Threading.Thread.Sleep(100);
}
}
}
지금 내가 클러스터에 강제로 장애 조치를 하나 하나 개의 노드를 종료하여, 또는 SQL Server 역할을 Cluster Manager에서 다른 노드로 이동). 장애 조치 프로세스에는 약 50 초가 소요됩니다. 장애 조치가 완료되면 내 테스트 루프에서 EntityException을 throw하여 "기본 공급자가 열려있을 때 실패했습니다"라고 말합니다. InnerException은 SqlClient.SqlException입니다. "로그인 할 수없는 데이터베이스"TestDB "를 열 수 없습니다. 로그인에 실패했습니다. 'Domain \ User'사용자가 로그인하지 못했습니다."
내 연결 문자열을 다음과 같이 설정을했습니다가 :
<add name="TestDBEntities" connectionString="metadata=res://*/Model1.csdl|res://*/Model1.ssdl|res://*/Model1.msl;provider=System.Data.SqlClient;
provider connection string="data source=sqlinstance;initial catalog=TestDB;integrated security=True;
MultiSubnetFailover=true;
connect timeout=150;
ConnectRetryCount=15;
ConnectRetryInterval=10;
MultipleActiveResultSets=True;App=EntityFramework"" providerName="System.Data.EntityClient" />
내가 뭘 기대 한 것은하는 SqlClient 10 secondes 간격, 15 시간 내 clusterd 인스턴스에 다시 연결을 시도하는 것입니다, 그리고 성공적인 때 다시 연결 장애 조치가 완료되었습니다. 그러나 여전히 예외는 계속 발생하고 있습니다.
본인은 "연결 시간 초과", "ConnectRetryCount"와 "ConnectRetryInterval"값을 변경하려고했지만 여전히 내가 여기서 무엇을 놓치고 나는 매우 혼란 스러워요 장애 복구 후 더 성공 전체 재 연결 ...는 없다 , 또는 기본 SqlClient 의존 할 수 및 예를 들어 DAL 내 owm 재시도 논리 제공해야합니까 ???
그리고 예외는? 아마도 장애 조치가 완료 되었기 때문에 묻는 중입니다. 그러나 모든 데이터베이스가 온라인 상태가 아니기 때문에 ... –
"기본 공급자가 열리지 못했습니다"라는 EntityException입니다. InnerException은 SqlClient.SqlException입니다. "로그인 할 수없는 데이터베이스"TestDB "를 열 수 없습니다. 로그인에 실패했습니다. 'Domain \ User'사용자가 로그인하지 못했습니다." 페일 오버가 완료되는 순간에 문제가 발생합니다. Btw 나는 또한이 상세한 예외 정보와 함께 나의 저능을 편집했다 ... – Jeroen1984
문제는 데이터베이스를 opend 할 수 없다. 왜 이것이 appens? SQL Server를 다시 시작할 때마다 데이터베이스에 대한 검사가 필요합니다. 크기 및 보류중인 거래에 따라 며칠에서 며칠이 걸릴 수 있습니다. 오류 로그에서이를 확인할 수 있습니다. "데이터베이스 'dbname'시작하기 '와 같은 검사 메시지와 검사 상태에 대한 정보를 제공하는 메시지를 찾을 수 있습니다. –