AlwaysOn 가용성 데이터베이스 "복구 보류" 또는 "의심 스러운" 상태 SQL Server 2012에서 문제 해결

요약

"복구 보류" 또는 "의심 스러운" 상태에서 Microsoft SQL Server 2012에는 가용성 데이터베이스는 AlwaysOn 가용성 그룹에 정의 되어 있는 전환에 있다고 가정 합니다. 가용성 그룹의 주 복제본에이 경우 데이터베이스 가용성을 영향을 받습니다. 이 경우 클라이언트 응용 프로그램을 통해 데이터베이스에 액세스할 수 없습니다. 또한 삭제 하거나 가용성 그룹에서 데이터베이스를 제거할 수 없습니다.

예를 들어, Microsoft SQL Server 실행 중인지 및 가용성 데이터베이스는 "복구 보류" 또는 "의심" 상태로 설정 되어 있는지 가정 합니다. 다음 SQL 스크립트를 사용 하 여 동적 관리 뷰 (Dmv) 기본 복제 데이터베이스를 쿼리할 때 데이터베이스 보고 될 수 있습니다 의심 되 는 상태 또는 데이터만NOT_HEALTHY 상태에서 다음과 같이:

select dc.database_name, d.synchronization_health_desc, d.synchronization_state_desc, d.database_state_descfrom sys.dm_hadr_database_replica_states d join sys.availability_databases_cluster dcon d.group_database_id=dc.group_database_id and d.is_local=1
database_name   synchronization_health_desc    synchronization_state_desc     database_state_desc-------------------- ------------------------------ ------------------------------ ---------------------
<
Database name> NOT_HEALTHY NOT SYNCHRONIZING RECOVERY_PENDING(1 row(s) affected)



이 데이터베이스에 있는 것으로 보고 될 수 있습니다 또한는 동기화 하지 않는 / 복구 보류 또는 Microsoft SQL Server Management Studio 상태를 의심 합니다.



데이터베이스 가용성 그룹에 정의 된 데이터베이스를 삭제 되거나 복원 될 수 없습니다. 따라서 데이터베이스를 복구 하 고 프로덕션 환경에서 사용 하려면 반환 하려면 특정 단계를 수행 해야 할 수도 있습니다. 이 문서에서는 오류 및 "복구 보류"에 있는 가용성 데이터베이스의 한계를 설명 "의심" 상태 및 데이터베이스 가용성 그룹에 대 한 전체 기능을 복원 하는 방법 또는.

자세한 내용

다음 콘텐츠 오류 및 다양 한 상황에서 "복구 보류" 상태가 되는 가용성 데이터베이스의 제한 사항에 설명 합니다.

매개 변수는 복구 된 데이터베이스를 복원 하려면 다음 SQL 스크립트를 실행 하려고 했습니다.

restore database <Database name> with recovery

이 스크립트를 실행 하면 데이터베이스는 가용성 그룹에 정의 되어 있기 때문에 다음과 같은 오류 메시지가 나타납니다.

Msg 3104, 수준 16, 상태 1, 줄 1
복원은 데이터베이스 미러링에 대해 구성 되어 있거나는 가용성 그룹에 조인 '< 데이터베이스 이름 >' 데이터베이스에서 작업할 수 없습니다. 데이터베이스를 복원 하려는 경우 미러링을 제거 하거나 가용성 그룹에서 데이터베이스를 제거 하려면 ALTER DATABASE를 사용 합니다.

메시지 3013, 수준 16, 상태 1, 줄 1
데이터베이스 복원 비정상적으로 종료 됩니다.



데이터베이스를 삭제 하려면 다음 SQL 스크립트를 실행 하려고 했습니다.

drop database <Database name>

이 스크립트를 실행 하면 데이터베이스는 가용성 그룹에 정의 되어 있기 때문에 다음과 같은 오류 메시지가 나타납니다.

Msg 3752, 수준 16, 상태 1, 줄 1
'< 데이터베이스 이름 >' 데이터베이스는 가용성 그룹에 현재 가입 되어 있습니다. 데이터베이스를 삭제 하기 전에 가용성 그룹에서 제거 해야 합니다.



가용성 그룹에서 데이터베이스를 제거 하려면 다음 SQL 스크립트를 실행 하려고 했습니다.

alter database <Database name> set hadr off

이 스크립트를 실행 하려는 경우 가용성 데이터베이스가 주 복제본에 속해 있기 때문에 다음과 같은 오류 메시지가 나타납니다.

35240 메시지, 수준 16, 14, 상태 1
' < 데이터베이스데이터베이스 이름>'에 가입 하거나 ' <가용성 그룹 이름>' 가용성 그룹에서 분리 될 수 없습니다. 가용성 그룹의 주 복제본에서이 작업이 지원 되지 않습니다.


이 오류 메시지를 인해 장애 조치 데이터베이스 강요 수 있습니다. 데이터베이스가 장애 조치 되는 후 보조 역할 "복구 보류" 데이터베이스를 소유 하는 복제본이입니다. 이 경우 보조 복제본에서 가용성 그룹에서 데이터베이스를 제거 하려면 다음 SQL 스크립트를 다시 실행 하려고 하면:

alter database <Database name> set hadr off

그러나 여전히 가용성 그룹에서 데이터베이스를 제거할 수 없습니다 및 데이터베이스가 "복구 보류" 상태 이기 때문에 다음과 같은 오류 메시지가 나타납니다.

921 메시지, 수준 16, 상태 112, 줄 1
' <데이터베이스 이름>' 데이터베이스 아직 복구 되지 않았습니다. 기다렸다가 다시 시도 하십시오.


해결 방법

이 문제를 해결 하려면 다음 방법을 사용 하 여 상황에 맞게.


이 문제를 해결 하려면 다음 일반 작업을 수행.

  • 보조 역할에는 데이터베이스를 손상된 된 데이터베이스를 호스팅하는 복제본을 가용성 그룹에서 제거 합니다.

  • 시스템이 영향을 받는 모든 문제를 해결 하 고 데이터베이스 실패에 공헌한 수 있습니다.

  • 가용성 그룹에 복제본을 복원 합니다.

이러한 작업을 고려 하 고 새 주 복제본에 연결 하 고 실패 한 가용성 데이터베이스를 호스팅하는 복제본을 제거 하려면 "가용성 그룹 변경" SQL 스크립트를 실행. 이렇게 하려면, 다음 단계를 수행하십시오.

참고: 여기에서는 주 복제본 먼저 손상된 된 데이터베이스를 호스트 가정 합니다. 따라서 장애 조치 전환 보조 역할에 손상된 된 데이터베이스를 호스팅하는 복제본에 먼저 발생 해야 합니다.

  1. SQL Server를 실행 하 고 보조 복제본을 호스팅하는 서버에 연결 합니다.

  2. 다음 SQL 스크립트를 실행 합니다.

    alter availability group <Availability group name> failover
  3. 가용성 그룹에서 손상된 된 데이터베이스를 호스팅하는 복제본을 제거 하려면 다음 SQL 스크립트를 실행 합니다.

    alter availability group <Availability group name> remove replica on '<SQL Server node name>'
  4. SQL Server 실행 하는 서버에서 문제를 해결 하 고 데이터베이스 오류에 기여할 수 있는.

  5. 가용성 그룹에 복제본을 추가 합니다.


주 복제본에서 손상 된 데이터베이스를 호스트 하 고만 작업 복제본의 가용성 그룹에서 가용성 그룹을 삭제 해야 합니다. 가용성 그룹을 삭제 한 후 백업에서 데이터베이스를 복구할 수 또는 생산을 다시 시작 하 고 데이터베이스를 복원 하려면 다른 응급 복구 작업을 적용할 수 있습니다.

가용성 그룹에서 제거 다음 SQL 스크립트를:

drop availability group <Availability group name>

이 시점에서 문제가 있는 데이터베이스를 복구를 시도할 수 있습니다. 또는 마지막으로 알려진 양호한 백업 복사본에서 데이터베이스를 복원할 수 있습니다.

가용성 그룹을 삭제 하면 수신기 자원 또한 삭제 하 고 가용성 데이터베이스에 대 한 응용 프로그램 연결을 중단 합니다.

응용 프로그램 가동 중지 시간을 최소화 하려면 수신기를 통해 응용 프로그램 연결을 유지 하 고 가용성 그룹을 삭제 하려면 다음 방법 중 하나를 사용.

방법 1: 새 가용성 그룹 (역할) 장애 조치 클러스터 관리자를 사용 하 여 수신기 연결이 메서드를 사용 하면 수신기를 삭제 하 고 가용성 그룹을 다시 작성 하는 동안 유지할 수 있습니다.

  1. 기존 가용성 그룹 수신기는 연결을 전송 하는 SQL Server 인스턴스를 새로 만든 빈 가용성 그룹을 만듭니다. 이 프로세스를 단순화 하기 Transact SQL 명령을 사용 하 여 없는 보조 복제본 또는 데이터베이스 가용성 그룹을 만듭니다.

    use mastergo
    create availability group ag for replica on 'sqlnode1' with
    (endpoint_url = 'tcp://sqlnode1:5022', availability_mode=asynchronous_commit, failover_mode=manual)
  2. 장애 조치 클러스터 관리자를 시작한 다음 왼쪽된 창에서 역할 을 클릭 합니다. 역할을 나열 하는 창에 원래의 가용성 그룹을 선택 합니다.

  3. 리소스 탭의 아래쪽 중간 창에서 가용성 그룹 리소스를 마우스 오른쪽 단추로 클릭 한 다음 속성을 클릭 합니다. 종속성 탭을 클릭 하 고, 수신기에 의존 관계를 삭제 다음 확인을 누릅니다.

  4. 자원, 수신기를 마우스 오른쪽 단추로 클릭 하 고 기타 작업을 클릭 다른 역할 할당을 클릭 합니다.

  5. 역할에 할당할 원본 대화 상자에서 새 가용성 그룹을 선택한 다음 확인을 클릭 합니다.

  6. 역할 창에서 새 가용성 그룹을 선택 합니다. 리소스 탭의 아래쪽 중간 창에서 새 가용성 그룹 수신기 자원 하 고 이제 표시 됩니다. 새 가용성 그룹 리소스를 마우스 오른쪽 단추로 클릭 한 다음 속성을 클릭 합니다.

  7. 종속성 탭을 클릭 수신기 리소스 드롭 다운 상자에서 선택한 다음 확인을 클릭 합니다.

  8. Microsoft SQL Server Management Studio 개체 탐색기를 사용 하 여 새 가용성 그룹의 주 복제본을 호스팅하는 SQL Server 인스턴스에 연결 합니다. AlwaysOn 고가용성을 누르고 새 가용성 그룹 가용성 그룹 수신기를 클릭 합니다. 수신기를 볼 수 있습니다.

  9. 수신기를 마우스 오른쪽 단추로 클릭 하 고 수신기는 속성 형식의 적절 한 포트 번호를 클릭 다음 확인을 누릅니다.

이렇게 하면 하는 수신기를 사용 하는 응용 프로그램 사용할 수 중단 없이 프로덕션 데이터베이스를 호스팅하는 SQL Server 인스턴스에 연결 하려면. 원래의 가용성 그룹 이제 완전히를 다시 생성 합니다. 또는 데이터베이스 및 복제본 새 가용성 그룹에 추가할 수 있습니다.

중요: 다시 원래의 가용성 그룹을 만들면 해당 수신기 가용성 그룹 역할을 다시 할당 해야, 수신기를 새 가용성 그룹 리소스 사이의 의존 관계를 설정 하며 수신기 포트를 다시 할당 합니다. 이렇게 하려면, 다음 단계를 수행하십시오.

  1. 장애 조치 클러스터 관리자를 시작한 다음 왼쪽된 창에서 역할 을 클릭 합니다. 역할을 나열 하는 창에서 새 가용성 그룹을 호스팅하는 수신기를 클릭 합니다.

  2. 리소스 탭의 아래쪽 중간 창에 수신기를 마우스 오른쪽 단추로 클릭 하 고 기타 작업을 클릭 다른 역할 할당을 클릭 합니다. 대화 상자에서 다시 가용성 그룹을 선택한 다음 확인을 클릭 합니다.

  3. 역할 창에 다시 만든된 가용성 그룹을 클릭 합니다. 리소스 탭의 아래쪽 중간 창에 다시 만든된 가용성 그룹 및 수신기 리소스 이제 표시 됩니다. 다시 만들어진된 가용성 그룹 리소스를 마우스 오른쪽 단추로 클릭 한 다음 속성을 클릭 합니다.

  4. 종속성 탭을 클릭 수신기 리소스 드롭 다운 상자에서 선택한 다음 확인을 클릭 합니다.

  5. SQL Server Management Studio 개체 탐색기 사용 하 여 다시 생성된 된 가용성 그룹의 주 복제본을 호스팅하는 SQL Server 인스턴스에 연결 하려면. AlwaysOn 고가용성을 누르고 새 가용성 그룹 가용성 그룹 수신기를 클릭 합니다. 수신기를 볼 수 있습니다.

  6. 수신기를 마우스 오른쪽 단추로 속성을 클릭 수신기는 적절 한 포트 번호를 입력 한 다음 확인을 누릅니다.

방법 2: 연결 된 수신기에는 기존 SQL Server 장애 조치 클러스터 인스턴스 (SQLFCI)

수신기 클러스터 리소스 삭제 하 고 가용성 그룹을 다시 만드는 동안에 SQL Server 장애 조치 클러스터 인스턴스 (SQLFCI) 하 여 가용성 그룹을 호스팅하는 경우 SQLFCI 클러스터 리소스 그룹을 사용 하 여 연결할 수 있습니다.

  1. 장애 조치 클러스터 관리자를 시작한 다음 왼쪽된 창에서 역할 을 클릭 합니다.

  2. 역할을 나열 하는 창에 원래의 가용성 그룹을 선택 합니다.

  3. 리소스 탭의 아래쪽 가운데 창에서 가용성 그룹 리소스를 마우스 오른쪽 단추로 클릭 한 다음 속성을 클릭 합니다.

  4. 종속성 탭을 클릭 하 고, 수신기에 의존 관계를 삭제 다음 확인을 누릅니다.

  5. 리소스 탭의 아래쪽 중간 창에 수신기를 마우스 오른쪽 단추로 클릭 하 고 기타 작업 을 클릭 다른 역할 할당을 클릭 합니다.

  6. 역할에 대 한 자원 배정 대화 상자에서 SQL Server FCI 인스턴스를 클릭 한 다음 확인을 누릅니다.

  7. 역할 창에서 SQL Server 장애 조치 클러스터 인스턴스 (SQLFCI) 그룹을 선택 합니다. 리소스 탭의 아래쪽 중간 창에 새 수신기 리소스 이제 표시 됩니다.

이렇게 하면 있는지 수신기를 사용 하는 응용 프로그램 사용할 수 호스트 하는 SQL Server 인스턴스에 연결 하려면 중단 없이 프로덕션 데이터베이스. 원래의 가용성 그룹 이제 완전히를 다시 생성 합니다. 또는 데이터베이스 및 복제본 새 가용성 그룹에 추가할 수 있습니다.

중요: 가용성 그룹을 다시 만든 후 해당 수신기 가용성 그룹 역할을 다시 할당 합니다. 새 가용성 그룹 리소스 및 수신기, re-ssign 수신기 포트 간의 의존 관계를 설정 합니다.

  1. 장애 조치 클러스터 관리자를 시작한 다음 왼쪽된 창에서 역할 을 클릭 합니다.

  2. 역할을 나열 하는 창에서 원래 SQL 장애 조치 클러스터 인스턴스 역할을 클릭 합니다.

  3. 리소스 탭의 아래쪽 중간 창에 수신기를 마우스 오른쪽 단추로 클릭 하 고 기타 작업을 클릭 다른 역할 할당을 클릭 합니다.

  4. 대화 상자에서 다시 가용성 그룹을 클릭 한 다음 확인을 클릭 합니다.

  5. 역할 창에서 새 가용성 그룹을 선택 합니다.

  6. 자원 탭에서 새 가용성 그룹 수신기 자원 하 고 표시 됩니다. 새 가용성 그룹 리소스를 마우스 오른쪽 단추로 클릭 한 다음 속성을 클릭 합니다.

  7. 종속성 탭을 클릭 수신기 리소스 드롭 다운 상자에서 선택한 다음 확인을 클릭 합니다.

  8. SQL Server Management Studio 개체 탐색기 사용 하 여 새 가용성 그룹의 주 복제본을 호스팅하는 SQL Server 인스턴스에 연결 하려면.

  9. AlwaysOn 고가용성을 누르고 새 가용성 그룹 가용성 그룹 수신기를 클릭 합니다. 수신기를 볼 수 있습니다.

  10. 수신기를 마우스 오른쪽 단추로 속성을 클릭 수신기는 적절 한 포트 번호를 입력 한 다음 확인을 누릅니다.

방법 3: 가용성 그룹을 삭제 한 다음 다시 만드십시오 고 가용성 그룹 수신기 이름이 같은 수신기

이 메서드는 고 가용성 그룹 수신기는 삭제 하 고 다시 만들어야 하기 때문에 현재 연결 되어 있는 응용 프로그램에 대 한 작은 중단 발생 됩니다.

  1. 가용성 그룹을 삭제 합니다.

    참고: 수신기를 삭제할 것이.

  2. 즉시 수신기 정의 프로덕션 데이터베이스를 호스팅하는 동일한 서버에 있는 새로 만든 빈 가용성 그룹을 만듭니다. 예를 들어, 가용성 그룹 수신기는 "aglisten." 다음 Transact SQL 문은 없이 주 또는 보조 데이터베이스를 사용 하 여 가용성 그룹을 만듭니다.. 하지만 "aglisten." 라는 수신기도 만듭니다. 응용 프로그램이이 수신기를 사용 하 여 연결할 수 있습니다.

    use mastergo
    create availability group ag for replica on 'sqlnode1' with
    endpoint_url = 'tcp://sqlnode1:5022', availability_mode=asynchronous_commit, failover_mode=manual)
    listener 'aglisten' (with ip ((n'11.0.0.25', n'255.0.0.0')), port=1433)go
  3. 손상된 된 데이터베이스를 복구 합니다. 와 보조 복제본의 가용성 그룹에 다시 추가 합니다.


추가 도움이 필요하신가요?

기술 향상
교육 살펴보기
새로운 기능 우선 가져오기
Microsoft Insider 참가

이 정보가 유용한가요?

소중한 의견에 감사드립니다.

피드백을 주셔서 감사합니다. Office 지원 에이전트와 연락하는 것이 도움이 될 것 같습니다.

×