다이나믹 테이블의 복제 및 장애 조치 동작

다이나믹 테이블의 복제 및 장애 조치 동작

다이나믹 테이블은 failover 그룹이나 replication 그룹을 사용해 재해 복구 용도로 보조 계정에 복제할 수 있어요. 장애 조치(failover) 후 다이나믹 테이블은 승격된 보조 계정에서 재초기화합니다. 리프레시 스케줄, 웨어하우스 할당, 정의는 보존됩니다.

장애 조치 후 승격된 다이나믹 테이블은 보조 계정의 base 객체 현재 상태에 대해 전체 리프레시를 실행합니다. 복제 lag 때문에 base table이 시간상 약간 다른 시점에 있을 수 있으므로, 재초기화된 결과가 이전 기본 계정의 마지막으로 알려진 상태와 다를 수 있어요.

출처: Snowflake 문서

본문

Failover 그룹과 Replication 그룹

Snowflake는 두 가지 그룹 기반 복제 유형을 제공합니다: failover groups는 기본 계정으로의 승격을 지원하고, replication groups은 failover 지원 없이 읽기 전용 복제를 제공해요.

동작 Failover group Replication group
보조 계정에서 다이나믹 테이블 리프레시 아니요 (승격 전까지 읽기 전용) 아니요 (영구 읽기 전용)
Failover/승격 지원 예 아니요
장애 조치 후 재초기화 필요 예 해당 없음 (failover 미지원)
에디션 요구사항 Business Critical (또는 그 이상) Standard (또는 그 이상)

Failover 그룹을 다이나믹 테이블로 구성하기

다이나믹 테이블, 그 base table, 그리고 모든 상위 다이나믹 테이블을 같은 failover 그룹에 배치하세요:

CREATE FAILOVER GROUP myfg
  OBJECT_TYPES = DATABASES
  ALLOWED_DATABASES = analytics_db
  ALLOWED_ACCOUNTS = myorg.secondary_account
  REPLICATION_SCHEDULE = '10 MINUTE';

경고: 다이나믹 테이블이 failover 그룹 밖의 base 객체를 참조해도 복제는 가능합니다. 하지만 장애 조치 후 다이나믹 테이블의 정의는 승격된 계정에서 같은 이름을 가진 객체가 무엇이든 참조해요. 참조된 객체가 (다른 데이터베이스나 그룹에 속해 있어) 복제되지 않았다면, 리프레시가 object-not-found 에러로 실패합니다.

장애 조치 후 승격된 보조 계정의 다이나믹 테이블은 전체 리프레시로 재초기화합니다. 정의, 리프레시 스케줄, 웨어하우스 할당은 기본 계정에서 그대로 옮겨져요.

읽기 전용 보조 계정의 다이나믹 테이블

보조 계정이 읽기 전용 복제본으로 남아 있는 동안에는 다이나믹 테이블이 리프레시되지 않습니다. 데이터는 기본 계정의 복제 스케줄을 통해서만 도착합니다.

보조 계정의 복제된 다이나믹 테이블은 다음 스케줄링 상태 사유 코드 중 하나로 자동 suspend됩니다. 이 코드들은 DYNAMIC_TABLE_GRAPH_HISTORY 테이블 함수 출력의 scheduling_state 컬럼에 나타나요:

사유 코드 의미
RG_REPLICA 다이나믹 테이블이 replication group의 복제본
FG_REPLICA 다이나믹 테이블이 failover group의 복제본
UPSTREAM_FG_REPLICA 상위 의존성이 failover group의 복제본이어서 다이나믹 테이블이 suspend됨

읽기 전용 보조 계정에서는 다이나믹 테이블을 수동 리프레시할 수 없습니다. 시도하면 에러가 반환됩니다.

복제된 다이나믹 테이블의 하위에 다이나믹 테이블 만들기

장애 조치 후, 또는 같은 계정의 다른 데이터베이스에서 복제된 다이나믹 테이블을 참조할 때, 복제된 다이나믹 테이블을 읽는 새 다이나믹 테이블을 만들 수 있어요. 복제된 테이블은 파이프라인 경계 역할을 하므로, 하위 다이나믹 테이블은 상위 파이프라인의 스케줄과 독립적으로 리프레시됩니다.

복제된 다이나믹 테이블 모니터링

장애 조치 후 다음 쿼리로 승격된 보조 계정의 다이나믹 테이블 상태를 확인하세요.

복제 관련 일시중지 이유에 대한 스케줄링 상태를 확인:

SELECT name, scheduling_state FROM TABLE(INFORMATION_SCHEMA.DYNAMIC_TABLE_GRAPH_HISTORY());
+------------------+------------------+
| NAME             | SCHEDULING_STATE |
|------------------+------------------|
| DT_ORDERS       | SUSPENDED        |
| DT_ORDERS_DAILY | SUSPENDED        |
+------------------+------------------+

재초기화 이벤트에 대한 리프레시 이력 확인:

SELECT name, refresh_action, refresh_trigger, state_message
FROM TABLE(INFORMATION_SCHEMA.DYNAMIC_TABLE_REFRESH_HISTORY())
WHERE refresh_action = 'REINITIALIZE'
ORDER BY data_timestamp DESC;
+------------------+----------------+-----------------+-------------------------------------+
| NAME             | REFRESH_ACTION | REFRESH_TRIGGER | STATE_MESSAGE                       |
|------------------+----------------+-----------------+-------------------------------------|
| DT_ORDERS       | REINITIALIZE   | SCHEDULED       | Reinitialize after database failover|
+------------------+----------------+-----------------+-------------------------------------+

더 알아보기 (Learn more)