Microsoft/Azure

SQL Always-on 가용성 그룹 구성 후 동기화 오류 (Data synchronization state of some availability database is not healthy.)

megapain 2021. 4. 25. 15:19

Azure에 SQL Server 2012 Sp4 Enterprise 두 대로 Always-on 가용성 그룹(Availability Group)을 구성하면서 발생했던 동기화 오류를 해결한 방법입니다.

아래 해외 Blog를 참고하여 해결하였습니다.

Fix SQL Server AlwaysOn Availability Group Error: 1408 Joining database on secondary replica resulted in an error - www.mssqltips.com/sqlservertip/4687/fix-sql-server-alwayson-availability-group-error-1408-joining-database-on-secondary-replica-resulted-in-an-error/

 

참고) 구성 환경 (OS 및 SQL 버전 정보)

 

[증상]

1. Always-on 가용성 그룹 구성 후, Secondary (SQLDB02)에서 Database가 Restoring... 으로 표시되고, 대상 DB를 클릭하면 아래와 같은 오류가 발생함

  • The database databaseName is not accessible. (ObjectExplorer)

 

2. Secondary에서 Availability Group - Availability Databases 에 경고가 표시되고, Dashboard에서도 아래와 같은 경고가 표시됨.

  • Data synchronization state of some availability database is not healthy.
  • Secondary database is not joined.

 

 

 

[해결 방법]

아래와 같이 Primary 에서 DB와 Log를 백업하고 Secondary에서 복원 후 Availability Group에 join하면 됩니다.

1. Primary에서 DB와 Log를 백업 (COPY_ONLY 옵션 사용)

BACKUP DATABASE [dbname]
TO DISK = 'F:\backuppath\dbname.bak'
WITH COPY_ONLY;
GO

BACKUP LOG [dbname]
TO DISK = 'F:\backuppath\dbname.trn'
WITH COPY_ONLY;
GO

 

2. Backup 파일을 공유하고, Secondary에서 접근 가능한지 확인합니다. (공유 권한에서 SQL Service 계정에 모든 권한을 부여해야 합니다.)

 

3. Secondary에서 DB와 Log 복원 (NORECOVERY 옵션 사용)

RESTORE DATABASE [dbname]
FROM DISK = '\\shareserver\filepath\dbname.bak'
WITH NORECOVERY, REPLACE;
GO

RESTORE LOG [dbname]
FROM DISK = '\\shareserver\filepath\dbname.trn'
WITH NORECOVERY, REPLACE;
GO

 

4. Join to Availability Group

Secondary의 Availability Group - Availability Databases에서 대상 Database를 오른쪽 클릭 후 'Join th Availability Group'을 선택합니다.

 

[OK]를 클릭합니다.

 

Secondary에서 Database가 Synchronized로 표시되고, Availability Database 에서도 경고 표시가 사라졌습니다.

 

-끝-