SQL Server/SQL Server 이중화_백업

[MSSQL] Standard 버전에서 Availability Group Auto Failover 설정하기

꽁담 2020. 7. 16. 17:49

Standard 버전의 AG 이중화 가용성 그룹 개념



Standard 버전은 하나의 가용성 그룹이 여러개의 DB 를 구성할 수 없습니다.

이말은 하나의 가용성 그룹은 하나의 데이터베이스만 가질 수 있다는 부분입니다.


이런 경우에는 가용성 그룹이 DB 별로 각각 구성되어 있다보니

하나의 서버에서 주, 보조 역할이 가용성 그룹마다 다르게 설정되어 있을 수 있습니다.


이 때 어느 한 가용성 그룹에서 Failover 가 발생하면,

다른 가용성 그룹도 같이 Failover 되도록 설정하여

항상 하나의 서버가 주 역할을 하도록 설정할 수 있습니다.



Standard 버전에서 AG 이중화 Auto Failover 설정방법


1. 배치작업을 만든 후 아래 프로시저를 호출하도록 설정합니다.

이 프로시저는, 가용성 그룹 역할이 보조인 그룹명을 테이블에 넣은 후 Failover 를 하는 역할입니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
USE [msdb]
GO
 
Create Procedure [dbo].[AG_Auto_Failover_SP]
as 
begin
  DECLARE @cnt SMALLINT
  DECLARE @sql VARCHAR(8000)
  DECLARE @seq SMALLINT
  
  IF OBJECT_ID('AG_Auto_Failover') IS NOT NULL
  BEGIN
    DROP TABLE AG_Auto_Failover
  END
 
  --1. Group Name 을 저장할 임시 테이블 생성
  CREATE TABLE AG_Auto_Failover ( cnt SMALLINT IDENTITY(1,1), AGName varchar(30) )
 
  --2.다른 노드에 Online 되어 있는 AG Name Insert
  INSERT INTO AG_Auto_Failover(AGName)
  SELECT 
         b.Name
  FROM sys.dm_hadr_availability_replica_states as a
    INNER JOIN sys.availability_groups as b on a.group_id = b.group_id
  WHERE is_local = 1
    AND role =2
  GROUP by b.name
  
  --3.AG Failover 수행
  SELECT @cnt = max(cnt) FROM AG_Auto_Failover
  SET @seq = 1
  IF @cnt <> 0 
  BEGIN
    WHILE(@seq <= @cnt)
      BEGIN 
        SET @SQL = ''
        SET @SQL = 'USE MASTER  '
        
        SELECT @SQL = @SQL + 'ALTER AVAILABILITY GROUP ' + '[' + AGName + ']' + ' FAILOVER'
        FROM AG_Auto_Failover
        WHERE cnt = @seq
        
        EXEC(@sql)
    SET @seq = @seq + 1
    END
  END
  
  --4. 임시 테이블 삭제
  DROP TABLE AG_Auto_Failover
END
GO
cs


2. SQL Server 에이전트 경고에서 새 이벤트를 생성합니다.

3. 이벤트에서 위에서 만든 배치작업을 호출하도록 설정합니다.

- [일반] Failover 가 발생하면  41074 의 SQL Server 이벤트 경고값이 기록됩니다.

- [응답] 위에서 만든 배치작업을 선택해 줍니다.