여러 계정에서 데이터베이스 복제하기

이 항목에서는 여러 Snowflake 계정 사이에서 데이터베이스를 복제하고 데이터베이스 오브젝트와 저장된 데이터를 동기화된 상태로 유지하기 위해 필요한 단계를 설명합니다. 데이터베이스 복제는 같거나 다른 리전 에 있는 Snowflake 계정 전반에 걸쳐 발생할 수 있습니다.

참고

계정 복제 기능 을 사용하여 데이터베이스를 복제하는 것이 좋습니다. 복제 및 장애 조치 그룹 을 사용하면 그룹의 오브젝트에 대한 특정 시점 일관성을 유지하며 여러 데이터베이스와 다른 계정 오브젝트를 복제할 수 있습니다. 제공되는 기능지원되는 오브젝트 의 전체 목록은 여러 계정에 걸쳐 복제 및 장애 조치 도입 섹션을 참조하십시오.

이 항목의 내용:

데이터베이스 복제 및 장애 조치/장애 복구를 위한 리전 지원

Amazon Web Services, Google Cloud Platform 및 Microsoft Azure의 모든 Snowflake 리전은 데이터베이스 복제 및 장애 조치/장애 복구를 지원합니다.

계정은 리전 그룹 (예: Virtual Private Snowflake(VPS) 및 다중 tenant 리전) 사이에서 데이터베이스를 복제하여 이러한 리전 사이에서 데이터 공유 및 계정 마이그레이션을 편리하게 수행할 수 있도록 해줍니다. 이 기능은 기본적으로 비활성화됩니다. 이 기능을 이용하려면 Snowflake 지원 에 문의하십시오.

데이터베이스 복제 및 장애 조치/장애 복구를 위한 웹 인터페이스

주의

Snowsight 및 Classic Console 에서 복제 및 장애 조치/장애 복구를 관리하고 모니터링하는 것은 비공개 연결을 사용하는 계정에서만 사용할 수 있습니다.

다른 모든 계정은 Snowsight를 사용하여 복제 모니터링하기계정 오브젝트 및 데이터베이스 복제하기 섹션을 참조하십시오.

계정 관리자(ACCOUNTADMIN 역할의 사용자)는 Snowsight 또는 Classic Console 에서 복제 및 장애 조치/장애 복구 작업을 관리할 수 있습니다.

Snowsight

탐색:

Data » Databases

기본 데이터베이스 관리하기

주의

비공개 연결을 사용하는 계정에만 사용할 수 있습니다. 다른 모든 계정은 Snowsight를 사용하여 복제 모니터링하기계정 오브젝트 및 데이터베이스 복제하기 섹션을 참조하십시오.

  1. 기본 데이터베이스가 포함된 Snowflake 계정으로 Snowsight 에 로그인합니다.

  2. 왼쪽 상단(로그인 이름 옆) » Switch Role » ACCOUNTADMIN 에서 드롭다운 메뉴를 선택합니다.

  3. 왼쪽 탐색 창에서 Data » Databases 를 선택합니다. 데이터베이스 오브젝트 탐색기에서 기본 데이터베이스를 선택합니다. 데이터베이스 세부 정보 페이지가 열립니다.

    또는 복제를 위해 활성화된 데이터베이스만 보려면 Replication Status » Primary 필터를 사용하여 계정의 기본 데이터베이스를 나열하십시오. 목록에서 데이터베이스를 선택하여 세부 정보 페이지를 엽니다.

    참고

    Replication Status 필터는 계정이 데이터베이스 복제의 원본 또는 대상 계정인 경우에만 사용할 수 있습니다.

  4. 추가 옵션 » Enable Replication 를 선택합니다. Enable replication 대화 상자가 열립니다.

    수행하려는 작업을 선택합니다.

    • 장애 조치를 활성화합니다. 이 기능을 사용하려면 Business Critical Edition 이상이 필요합니다.

    • 하나 이상의 대상 계정에 보조 데이터베이스를 만듭니다.

      다른 계정의 기본 데이터베이스가 현재 계정으로 복제되도록 활성화된 경우 현재 계정에 보조 데이터베이스를 생성할 수 있습니다. 대상 계정을 더 추가하려면 원본 계정에서 ALTER DATABASE 명령을 사용하여 기본 데이터베이스를 업데이트합니다.

    • 생성된 각 보조 데이터베이스를 한 번 새로 고칩니다.

  5. 이 데이터베이스의 각 대상 계정에 대해 보조 데이터베이스를 생성하고 데이터베이스를 새로 고치는 옵션을 선택합니다.

  6. 이전에 해당 계정에서 ACCOUNTADMIN 역할의 사용자로 대상 계정에 로그인합니다.

    Snowflake가 요청된 작업을 수행하고 성공 대화 상자를 표시합니다.

    데이터베이스 세부 정보의 Replication 탭에서 이 데이터베이스에 대한 복제를 관리합니다.

보조 데이터베이스 관리하기

주의

비공개 연결을 사용하는 계정에만 사용할 수 있습니다. 다른 모든 계정은 Snowsight를 사용하여 복제 모니터링하기계정 오브젝트 및 데이터베이스 복제하기 섹션을 참조하십시오.

  1. 보조 데이터베이스가 포함된 Snowflake 계정으로 Snowsight 에 로그인합니다.

  2. 왼쪽 상단(로그인 이름 옆) » Switch Role » ACCOUNTADMIN 에서 드롭다운 메뉴를 선택합니다.

  3. 왼쪽 탐색 창에서 Data » Databases 를 선택합니다.

    페이지의 오른쪽 상단 모서리에 있는 작업() 버튼에서 다음 작업을 수행할 수 있습니다.

    • 보조 데이터베이스를 만듭니다.

      참고

      이 옵션은 계정이 데이터베이스 복제의 원본 또는 대상 계정인 경우에만 사용할 수 있습니다.

      다른 계정의 기본 데이터베이스가 현재 계정으로 복제되도록 활성화된 경우 현재 계정에 보조 데이터베이스를 생성할 수 있습니다. 대상 계정을 더 추가하려면 원본 계정에서 ALTER DATABASE 명령을 사용하여 기본 데이터베이스를 업데이트합니다.

  4. 데이터베이스 오브젝트 탐색기에서 보조 데이터베이스를 선택합니다. 데이터베이스 세부 정보 페이지가 열립니다.

  5. Replication 탭을 선택합니다.

    페이지의 오른쪽 상단 모서리에 있는 작업() 버튼에서 다음 작업을 수행할 수 있습니다.

    • 기본 데이터베이스로 사용할 보조 데이터베이스를 승격합니다. 이 기능을 사용하려면 Business Critical Edition 이상이 필요합니다.

      참고

      기본 데이터베이스 역할을 하도록 보조 데이터베이스를 승격하려면 기본 데이터베이스에서 보조 데이터베이스가 있는 대상 계정에 대해 장애 조치를 활성화해야 합니다.

      이 옵션을 사용할 수 없는 경우 원본 계정에서 ALTER DATABASE 명령을 사용하여 기본 데이터베이스에 대한 장애 조치를 대상 계정으로 활성화할 수 있습니다. 자세한 내용은 3단계: 기본 데이터베이스에 대한 장애 조치 활성화 섹션을 참조하십시오.

    • 보조 데이터베이스를 새로 고칩니다.

    • 템플릿을 복사하여 일정에 따라 보조 데이터베이스를 새로 고치는 작업을 생성합니다. 템플릿을 Snowsight 워크시트에 붙여넣고 편집하여 원하는 일정을 지정합니다.

Classic Console

주의

비공개 연결을 사용하는 계정에만 사용할 수 있습니다. 다른 모든 계정은 Snowsight를 사용하여 복제 모니터링하기계정 오브젝트 및 데이터베이스 복제하기 섹션을 참조하십시오.

Classic Console 에서 Databases 데이터베이스 탭 탭의 Replication 영역을 사용하여 다음과 같은 작업을 포함한 데이터베이스 복제 구성 및 관리와 관련된 대부분의 작업을 수행합니다.

  • 로컬 데이터베이스의 복제를 활성화합니다. 이를 통해 기본 데이터베이스로 사용할 데이터베이스가 승격됩니다.

  • 기본 데이터베이스(Business Critical Edition 계정 이상)에 대해 장애 조치를 활성화합니다.

  • 보조 데이터베이스를 한 번(수동으로) 또는 반복적으로(일정에 따라 작업을 사용하여) 새로 고칩니다.

  • 기본 데이터베이스(Business Critical Edition 계정 이상)의 역할을 하도록 보조 데이터베이스를 승격합니다.

    참고

    기본 데이터베이스 역할을 하도록 보조 데이터베이스를 승격할 수 있도록 하려면 기본 데이터베이스에서 보조 데이터베이스가 있는 대상 계정에 대해 장애 조치를 활성화해야 합니다.

    이 옵션을 사용할 수 없는 경우:

    1. 기본 데이터베이스를 사용하여 원본 계정에 로그인합니다.

    2. Databases 영역에서 Replication 을 선택합니다.

    3. Primary 탭을 선택하여 기본 데이터베이스를 나열합니다. 기본 데이터베이스가 있는 행을 선택합니다.

    4. 장애 조치를 활성화하려는 대상 계정을 찾고 Failover 를 선택합니다.

  • 기본 데이터베이스에 대한 복제 및/또는 장애 조치를 비활성화합니다.

데이터베이스를 다른 계정으로 복제하기

이 섹션의 지침에서는 복제를 위해 계정을 준비하고, 로컬 데이터베이스를 기본 데이터베이스로 승격하며, 이 기본 데이터베이스를 다른 계정으로 초기 복제하고, 보조 데이터베이스 새로 고침을 예약하는 방법에 대해 설명합니다.

중요

대상 계정에는 기본적으로 활성화된 Tri-Secret Secure 또는 Snowflake 서비스에 대한 비공개 연결(예: AWS PrivateLink)이 없습니다. 규정 준수, 보안 또는 기타 목적을 위해 Snowflake 서비스에 대한 Tri-Secret Secure 또는 비공개 연결이 필요한 경우 대상 계정에서 해당 기능을 구성하고 활성화하는 것은 사용자의 책임입니다.

전제 조건: 조직의 계정에 대한 복제 활성화

조직 관리자(ORGADMIN 역할)는 데이터베이스를 복제하기 전에 원본 및 대상 계정에 대해 복제를 활성화해야 합니다. 자세한 지침은 전제 조건: 조직의 계정에 대한 복제 활성화 섹션을 참조하십시오.

데이터베이스 복제 및 장애 조치 활성화 및 보조 데이터베이스 새로 고치기

참고

명시된 경우를 제외하고 계정 관리자(ACCOUNTADMIN 역할 사용자)만 이 섹션의 SQL 문을 실행할 수 있습니다.

1단계: 조직의 모든 계정 보기

조직에서 복제가 활성화된 계정의 목록을 검색합니다. 이러한 계정의 기존 영구 또는 임시 데이터베이스는 기본 데이터베이스로 사용하도록 수정할 수 있습니다. 기본 데이터베이스(즉, 보조 데이터베이스)의 복제본은 이러한 계정에서만 생성할 수 있습니다.

조직의 계정 목록을 살펴보려면 SHOW REPLICATION ACCOUNTS 를 쿼리합니다.

SHOW REPLICATION ACCOUNTS;

+------------------+---------------------------------+---------------+------------------+---------+-------------------+
| snowflake_region | created_on                      | account_name  | account_locator  | comment | organization_name |
|------------------+---------------------------------+---------------+------------------+---------+-------------------|
| AWS_US_WEST_2    | 2018-11-19 16:11:12.720 -0700   | ACCOUNT1      | MYACCOUNT1       |         | MYORG             |
| AWS_US_EAST_1    | 2019-06-02 14:12:23.192 -0700   | ACCOUNT2      | MYACCOUNT2       |         | MYORG             |
+------------------+---------------------------------+---------------+------------------+---------+-------------------+
Copy

리전 IDs 전체 목록을 살펴봅니다.

2단계: 로컬 데이터베이스를 기본 데이터베이스로 승격

ALTER DATABASE … ENABLE REPLICATION TO ACCOUNTS 문을 사용하여 기본 데이터베이스 역할을 하도록 기존 영구 또는 임시 데이터베이스 수정합니다. 조직에서 이 데이터베이스(즉, 보조 데이터베이스)의 복제본을 저장할 수 있는 쉼표로 구분된 계정 목록을 제공하여 해당 계정의 사용자가 보조 데이터베이스의 오브젝트를 쿼리할 수 있도록 합니다.

로컬 데이터베이스 mydb1 (account1 계정)를 기본 데이터베이스로 승격하고 account2account3 계정이 각각 이 데이터베이스의 복제본을 저장할 수 있도록 지정합니다.

ALTER DATABASE mydb1 ENABLE REPLICATION TO ACCOUNTS myorg.account2, myorg.account3;
Copy

3단계: 기본 데이터베이스에 대한 장애 조치 활성화

참고

장애 조치/장애 복구를 위해서는 Business Critical 이상이 필요합니다. 업그레이드에 대해 문의하려면 Snowflake 지원 에 문의하십시오.

ALTER DATABASE … ENABLE FAILOVER TO ACCOUNTS 문을 사용하여 조직의 하나 이상의 계정에 대한 기본 데이터베이스의 장애 조치를 활성화합니다. 이러한 계정(즉, 보조 데이터베이스) 중 하나에 있는 이 기본 데이터베이스의 복제본을 승격하여 기본 데이터베이스로 사용할 수 있습니다.

기본 데이터베이스에 대한 장애 조치 활성화는 또는 지정된 계정에서 기본 데이터베이스의 복제본이 생성된 후에 수행할 수 있습니다.

account2account3 계정에 대한 mydb1 기본 데이터베이스의 장애 조치를 활성화합니다.

-- Executed from primary account
ALTER DATABASE mydb1 ENABLE FAILOVER TO ACCOUNTS myorg.account2, myorg.account3;
Copy

4단계: 보조 데이터베이스 만들기

기본 데이터베이스를 저장하는 동일한 계정 또는 다른 계정(동일하거나 다른 리전)에 기존 기본 데이터베이스의 복제본을 생성합니다. 보조 데이터베이스는 2단계: 로컬 데이터베이스를 기본 데이터베이스로 승격ALTER DATABASE … ENABLE REPLICATION TO ACCOUNTS 문에 지정된 계정에서만 생성할 수 있음에 유의하십시오.

참고

복제 명령(예: 원본 계정에서 데이터베이스를 기본 데이터베이스로 승격)은 일반적으로 여러 리전에 걸쳐 작업을 트리거하며 적용되는 데 몇 초 정도 걸릴 수 있습니다. 예를 들어, 원본 계정에서 어떤 데이터베이스를 기본 데이터베이스로 사용하도록 프로그래밍 방식으로 승격하고 대상 계정에서 보조 데이터베이스를 만드는 경우 몇 초 정도 후에 보조 데이터베이스를 만들 수 있습니다.

각 대상 계정에서 CREATE DATABASE … AS REPLICA OF 문을 실행하여 지정된 기본 데이터베이스의 복제본을 생성합니다.

중요

모범 사례로, 각 보조 데이터베이스에 기본 데이터베이스와 동일한 이름을 지정하는 것이 좋습니다. 이 방법은 뷰에서 정규화된 테이블 이름을 쿼리하는 것과 같이 동일한 데이터베이스의 다른 오브젝트에서 정규화된 오브젝트(즉, '<db>.<스키마>.<오브젝트>')를 참조하는 것을 지원합니다.

보조 데이터베이스의 이름이 기본 데이터베이스와 다른 경우 이러한 오브젝트 참조는 보조 데이터베이스에서 중단됩니다.

조직의 기본 및 보조 데이터베이스 목록을 보려면 SHOW REPLICATION DATABASES 를 쿼리합니다. 보조 데이터베이스가 생성된 후 계정 관리자는 데이터베이스의 소유권을 다른 역할로 이전할 수 있습니다(GRANT OWNERSHIP 사용).

다음 예에서는 myorg.account2 계정에 myorg.account1.mydb1 기본 데이터베이스의 복제본을 생성합니다.

-- Log into the ACCOUNT2 account.

-- Query the set of primary and secondary databases in your organization.
-- In this example, the MYORG.ACCOUNT1 primary database is available to replicate.
SHOW REPLICATION DATABASES;

+------------------+-------------------------------+-----------------+----------+---------+------------+----------------------------+---------------------------------+------------------------------+-------------------+-----------------+
| snowflake_region | created_on                    | account_name    | name     | comment | is_primary | primary                    | replication_allowed_to_accounts | failover_allowed_to_accounts | organization_name | account_locator |
|------------------+-------------------------------+-----------------+----------+---------+------------+----------------------------+---------------------------------+------------------------------+-------------------+-----------------|
| AWS_US_WEST_2    | 2019-11-15 00:51:45.473 -0700 | ACCOUNT1        | MYDB1    | NULL    | true       | MYORG.ACCOUNT1.MYDB1       | MYORG.ACCOUNT2, MYORG,ACCOUNT1  | MYORG.ACCOUNT1               | MYORG             | MYACCOUNT1      |
+------------------+-------------------------------+-----------------+----------+---------+------------+----------------------------+---------------------------------+------------------------------+-------------------+-----------------+

-- Create a replica of the 'mydb1' primary database
-- If the primary database has the DATA_RETENTION_TIME_IN_DAYS parameter set to a value other than the default value,
-- set the same value for the parameter on the secondary database.
CREATE DATABASE mydb1
  AS REPLICA OF myorg.account1.mydb1
  DATA_RETENTION_TIME_IN_DAYS = 10;

-- Verify the secondary database
SHOW REPLICATION DATABASES;

+------------------+-------------------------------+---------------+----------+---------+------------+-------------------------+---------------------------------+------------------------------+-------------------+-----------------+
| snowflake_region | created_on                    | account_name  | name     | comment | is_primary | primary                 | replication_allowed_to_accounts | failover_allowed_to_accounts | organization_name | account_locator |
|------------------+-------------------------------+---------------+----------+---------+------------+------------------------------------------+----------------+------------------------------+-------------------------------------|
| AWS_US_WEST_2    | 2019-11-15 00:51:45.473 -0700 | ACCOUNT1      | MYDB1    | NULL    | true       | MYORG.ACCOUNT1.MYDB1    | MYORG.ACCOUNT2, MYORG.ACCOUNT1  | MYORG.ACCOUNT1               | MYORG             | MYACCOUNT1      |
| AWS_US_EAST_1    | 2019-08-15 15:51:49.094 -0700 | ACCOUNT2      | MYDB1    | NULL    | false      | MYORG.ACCOUNT1.MYDB1    |                                 |                              | MYORG             | MYACCOUNT2      |
+------------------+-------------------------------+---------------+----------+---------+------------+-------------------------+---------------------------------+------------------------------+-------------------+-----------------+
Copy

5단계. 각 보조 데이터베이스 새로 고침

이 섹션의 지침은 기본 데이터베이스의 스냅샷에서 보조 데이터베이스를 새로 고치는 방법(ALTER DATABASE … REFRESH 사용)을 설명합니다. 스냅샷에는 오브젝트 및 데이터 변경 사항이 포함됩니다. 매우 큰 기본 데이터베이스의 초기 복제의 경우 문의 시간 제한 을 늘리는 것이 좋습니다.

참고

  • 보조 데이터베이스를 새로 고치려면 작업을 수행하는 데 사용되는 역할에 데이터베이스에 대한 OWNERSHIP 권한이 있거나 해당 역할에 데이터베이스에 대한 OWNERSHIP 권한이 있는 역할이 부여되어야 합니다.

  • 새로 고침 작업을 실행하는 역할은 데이터베이스 새로 고침의 결과로 추가된 모든 새 오브젝트를 소유합니다.

계정에 로그인한 후 현재 리전을 확인하려면 CURRENT_REGION 함수를 쿼리합니다.

ALTER DATABASE mydb1 REFRESH;
Copy

웹 UI에서 보조 데이터베이스 새로 고침 을 수행할 수도 있습니다.

6단계. 일정에 따라 보조 데이터베이스 새로 고침

모범 사례로, 보조 데이터베이스 새로 고침을 예약하는 것이 좋습니다. 이 섹션에서는 지정된 일정에 따라 데이터베이스 새로 고침을 자동으로 시작하는 지침을 제공합니다.

보조 데이터베이스를 새로 고치는 빈도는 보조 데이터베이스의 데이터에 대한 복구 시점 목표(RPO)에 따라 다릅니다. 예를 들어, 데이터에 의존하는 애플리케이션이 최대 1시간의 데이터 손실을 허용할 수 있는 경우 최소한으로 매시간마다 데이터를 새로 고쳐야 합니다. 데이터 손실 허용 범위가 5분이면 최소한 5분마다 보조 데이터베이스를 새로 고칩니다.

참고

  • 기본 데이터베이스의 초기 복제를 수동으로 실행하고(ALTER DATABASE … REFRESH 사용) 후속 새로 고침만 예약하는 것이 좋습니다.

  • 작업의 단일 실행에 대한 기본 제한은 60분입니다. 이 제한은 종료되지 않는 작업에 대한 보호 수단으로 구현되었습니다. 드문 경우지만 매우 큰 데이터베이스를 새로 고치면 기본 작업 실행 제한을 초과할 수 있습니다. 이러한 상황의 발생 여부를 판단하려면 TASK_HISTORY 테이블 함수를 쿼리합니다. ALTER TASK … SET USER_TASK_TIMEOUT_MS = <num> 을 실행하여 작업에 대한 시간 제한을 늘리는 것이 좋습니다.

지정된 일정에 따라 데이터베이스 새로 고침을 자동으로 시작하려면 이 섹션의 단계를 완료하십시오.

전제 조건:

보조 데이터베이스를 저장하는 계정에 필요한 Snowflake 오브젝트는 다음과 같습니다.

  • 보조 데이터베이스.

  • 이 섹션에서 생성되는 새 오브젝트를 저장하기 위한 별도의 데이터베이스입니다. 보조 데이터베이스는 읽기 전용이므로, 이 데이터베이스는 보조 데이터베이스와 분리되어야 합니다. 이 데이터베이스에 포함되어야 하는 오브젝트는 다음과 같습니다.

    • 스키마. PUBLIC 스키마를 사용하거나 CREATE SCHEMA 를 사용하여 새 스키마를 생성합니다.

    • 웨어하우스. 구문 요구 사항을 충족하기 위해 모든 웨어하우스를 여기에 제공할 수 있지만 데이터베이스 새로 고침에는 사용되지 않습니다. CREATE WAREHOUSE 를 사용하여 새 웨어하우스를 생성합니다.

    • 일정에 따라 보조 데이터베이스를 새로 고치는 작업입니다.

필수 권한:

이 섹션의 단계에는 보조 데이터베이스를 새로 고치는 계정에서 다음 권한이 있는 역할이 필요합니다.

오브젝트 타입

오브젝트

권한

참고

계정

보조 데이터베이스를 저장하는 계정

EXECUTE TASK

새 작업을 실행하기 위해 필요합니다.

데이터베이스

보조 데이터베이스

OWNERSHIP

보조 데이터베이스를 새로 고치기 위해 필요합니다.

데이터베이스

새 작업을 저장하는 데이터베이스

USAGE

스키마

새 작업을 저장하는 스키마

USAGE, CREATE TASK

작업

OWNERSHIP

작업을 생성하는 역할은 기본적으로 오브젝트를 소유합니다. 소유권은 GRANT privileges … TO ROLE 을 사용하여 다른 역할로 이전할 수 있습니다.

웨어하우스

작업을 구성하기 위해 사용되는 웨어하우스

USAGE

작업을 구성하려면 웨어하우스를 지정해야 하지만, 웨어하우스는 작업을 실행하거나 새로 고침 작업을 수행하는 데 사용되지 않습니다.

단계:

일정에 따라 새로 고칠 각 보조 데이터베이스에 대해 다음 단계를 완료합니다.

  1. 일정에 따라 데이터베이스 새로 고침을 시작하는 태스크를 생성(CREATE TASK 사용)합니다. 복제 일정을 지정하기 위한 CREATE TASK 구문에는 웨어하우스가 필요하지만 웨어하우스는 복제에 사용되지 않습니다.

    예를 들어, 4시간의 시간 제한으로 10분마다 이름이 mydb1 인 보조 데이터베이스를 새로 고치는 이름이 refresh_mydb1_task 인 태스크를 생성합니다. 태스크는 기존 웨어하우스인 mywh 를 사용하여 구성됩니다.

    CREATE TASK refresh_mydb1_task
      WAREHOUSE = mywh
      SCHEDULE = '10 minute'
      USER_TASK_TIMEOUT_MS = 14400000
    AS
      ALTER DATABASE mydb1 REFRESH;
    
    Copy
  2. 태스크는 생성될 때 기본적으로 일시 중단됩니다. 태스크 정의에 지정된 매개 변수를 기반으로 실행할 수 있도록 태스크를 재개합니다.

ALTER TASK refresh_mydb1_task RESUME;
Copy

원하는 Snowflake 클라이언트에서 다음 SQL 문을 실행하여 복제 및 장애 조치를 활성화하고 초기 데이터베이스 새로 고침을 수행하고 예약된 새로 고침을 설정합니다.

원본 계정에서 실행하기
-- The commands below are executed from the source account

-- View replication enabled accounts
SHOW REPLICATION ACCOUNTS;

ALTER DATABASE mydb ENABLE REPLICATION TO ACCOUNTS myorg.account2, myorg.account3;
ALTER DATABASE mydb ENABLE FAILOVER TO ACCOUNTS myorg.account2, myorg.account3;
Copy
각 대상 계정에서 실행하기
-- The commands below are executed from each target account

-- View replication enabled databases
-- Note the primary column of the source database for the CREATE DATABASE statement below
SHOW REPLICATION DATABASES;

-- If the primary database has the DATA_RETENTION_TIME_IN_DAYS parameter set to a value other than the default value,
-- set the same value for the parameter on the secondary database.
CREATE DATABASE mydb
  AS REPLICA OF myorg.account1.mydb
  DATA_RETENTION_TIME_IN_DAYS = 10;

-- Increase statement timeout for initial refresh
-- Optional but recommended for initial refresh of a large database
ALTER SESSION SET STATEMENT_TIMEOUT_IN_SECONDS = 604800;
-- If you have an active warehouse in current session, update warehouse statement timeout
SELECT CURRENT_WAREHOUSE();
ALTER WAREHOUSE my_wh SET STATEMENT_TIMEOUT_IN_SECONDS = 604800;
-- Reset warehouse statement timeout after initial refresh
ALTER WAREHOUSE my_wh UNSET STATEMENT_TIMEOUT_IN_SECONDS;

-- Refresh a secondary database
ALTER DATABASE mydb REFRESH;

-- Create task
-- Set up refresh schedule for each secondary database using a separate database
USE DATABASE my_db2;

-- Create a task and RESUME the task for each secondary database
-- Edit the task schedule and timeout for your specific use case
CREATE TASK my_refresh_task
  WAREHOUSE = my_wh
  SCHEDULE = '10 minute'
  USER_TASK_TIMEOUT_MS = 14400000
AS
  ALTER DATABASE mydb REFRESH;

-- Start task
ALTER TASK my_refresh_task RESUME;
Copy

레거시 계정 로케이터 사용하기

현재는 복제 및 장애 조치 명령에서 계정을 식별할 때 레거시 snowflake_region.account_locator 형식이 지원되지만, 앞으로는 작동이 중지될 수 있으므로 사용하지 않는 것이 좋습니다.

초기 복제에 대한 명령문 시간 제한 늘리기

데이터베이스 복제는 자체 가상 웨어하우스 대신 Snowflake에서 제공하는 컴퓨팅 리소스를 사용하여 오브젝트와 데이터를 복사합니다. 그러나 STATEMENT_TIMEOUT_IN_SECONDS 세션/오브젝트 매개 변수는 취소되기 전에 문이 실행되는 시간을 계속 제어합니다. 기본값은 172800 (2일)입니다. 매우 큰 기본 데이터베이스의 초기 복제 는 완료하는 데 2일 이상 걸릴 수 있으므로(데이터베이스에 있는 메타데이터의 양뿐 아니라 데이터베이스 오브젝트에 있는 데이터의 양에 따라서도 다름), 복제 작업을 실행하는 세션의 경우 STATEMENT_TIMEOUT_IN_SECONDS 값을 604800 (7일, 최대값)으로 늘리는 것이 좋습니다.

동일한 세션에서 ALTER DATABASE secondary_db_name REFRESH 문을 실행하기 전 다음 ALTER SESSION 문을 실행합니다.

ALTER SESSION SET STATEMENT_TIMEOUT_IN_SECONDS = 604800;
Copy

STATEMENT_TIMEOUT_IN_SECONDS 매개 변수는 세션의 활성 웨어하우스에도 적용됩니다. 매개 변수는 세션 또는 웨어하우스 수준에서 설정된 낮은 값을 따릅니다. 현재 세션에 활성 웨어하우스가 있는 경우 이 웨어하우스에 대해서도 STATEMENT_TIMEOUT_IN_SECONDS 를 604800 으로 설정합니다(ALTER WAREHOUSE 사용).

예:

-- determine the active warehouse in the current session (if any)
SELECT CURRENT_WAREHOUSE();

+---------------------+
| CURRENT_WAREHOUSE() |
|---------------------|
| MY_WH               |
+---------------------+

-- change the STATEMENT_TIMEOUT_IN_SECONDS value for the active warehouse

ALTER WAREHOUSE my_wh SET STATEMENT_TIMEOUT_IN_SECONDS = 604800;
Copy

복제 작업이 완료된 후 매개 변수 값을 기본값으로 재설정할 수 있습니다.

ALTER WAREHOUSE my_wh UNSET STATEMENT_TIMEOUT_IN_SECONDS;
Copy

데이터베이스 새로 고침 진행 상황 모니터링하기

초기 데이터베이스 복제 또는 후속 보조 데이터베이스 새로 고침의 현재 상태를 확인하려면 DATABASE_REFRESH_PROGRESS , DATABASE_REFRESH_PROGRESS_BY_JOB 테이블 함수(Snowflake Information Schema)를 쿼리합니다.

데이터베이스 새로 고침 작업은 복제할 데이터의 양에 따라 완료하는 데 몇 시간 이상이 걸릴 수 있습니다.

지정된 날짜 범위 내에서 지정된 데이터베이스에 대한 복제 내역을 살펴보려면 다음 중 하나를 쿼리합니다.

mydb1 보조 데이터베이스 새로 고침 진행률 모니터링:

select *
  from table(information_schema.database_refresh_progress(mydb1));
Copy

Classic Console에서 데이터베이스 새로 고침 진행률 모니터링하기

Classic Console 에서 보조 데이터베이스 새로 고침을 수동으로 시작하여 통계와 함께 새로 고침 작업의 현재 상태를 보여주는 동적 진행률 표시줄을 살펴봅니다.

보조 데이터베이스 새로 고침 작업을 시작하려면 다음을 수행합니다.

  1. Classic Console 에서 Databases 데이터베이스 탭 탭 » Replication 을 선택합니다.

  2. 보조 데이터베이스를 선택하여 새로 고칩니다.

  3. Refresh now 버튼을 선택합니다. Refresh Database 대화 상자가 열립니다.

  4. Refresh 버튼을 선택합니다.

Last Refresh Status 열은 현재 새로 고침 작업의 상태를 표시합니다. 진행률 표시줄은 동적으로 업데이트됩니다.

측면 창의 Refresh History 통계에는 새로 고침 시작 시간, 전송된 바이트 수 및 기타 통계와 함께 현재 새로 고침 상태도 표시됩니다.

Classic Console의 보조 새로 고침 작업

데이터베이스 새로 고침 내역 보기

보조 데이터베이스 새로 고침 작업 내역을 살펴보려면 DATABASE_REFRESH_HISTORY 테이블 함수(Snowflake Information Schema)를 쿼리합니다. 이 함수는 지난 14일 동안의 데이터베이스 새로 고침 활동을 반환합니다.

또는

DATABASE_REPLICATION_USAGE_HISTORY 뷰 를 쿼리합니다(공유 Snowflake 데이터베이스의 Account Usage 스키마에서). 이 뷰에서는 지난 365일(1년) 동안의 데이터베이스 복제 사용 활동을 반환합니다.

mydb1 보조 데이터베이스 새로 고침 작업 내역 보기:

select *
  from table(information_schema.database_refresh_history(mydb1));
Copy

데이터베이스 복제 비용 모니터링하기

데이터베이스 복제 를 사용하여 복제된 개별 데이터베이스의 경우 ACCOUNTADMIN 역할의 사용자는 Snowsight, Classic Console 또는 SQL을 사용하여 특정 기간 내에 Snowflake 계정에서 전송한 복제 데이터의 양(바이트)을 확인할 수 있습니다.

계정의 데이터 전송량을 살펴보려면:

Snowsight:

Select Admin » Cost Management

Classic Console:

Account 계정 탭 » Billing & Usage 을 클릭합니다.

복제 사용량은 이름이 파란색 Snowflake 로고(텍스트 없음) REPLICATION 인 Snowflake가 제공하는 특수 웨어하우스로 표시됩니다. Data Transfer 버튼을 클릭하여 데이터 전송 요금을 확인합니다. 웹 인터페이스에서는 복제와 관련된 세부 데이터 전송 요금을 제공하지 않습니다.

SQL:

다음 중 하나를 쿼리합니다.

  • DATABASE_REPLICATION_USAGE_HISTORY 테이블 함수(Snowflake Information Schema). 이 함수는 지난 14일 동안의 데이터베이스 복제 사용 활동을 반환합니다.

  • DATABASE_REPLICATION_USAGE_HISTORY 뷰 뷰(Account Usage). 이 뷰에서는 지난 365일(1년) 동안의 데이터베이스 복제 사용 활동을 반환합니다.

    DATABASE_REPLICATION_USAGE_HISTORY 뷰에 대해 다음 쿼리를 실행할 수 있습니다.

    쿼리: 복제 비용 기록(일별, 오브젝트별)

    이 쿼리는 복제 데이터베이스와 지난 30일간 하루 단위로 나누어 복제 서비스를 통해 사용된 크레딧 볼륨의 전체 목록을 제공합니다. 크레딧 사용의 불규칙성 또는 지속적으로 높은 사용량은 추가로 조사해봐야 할 대상입니다.

    SELECT TO_DATE(start_time) AS date,
      database_name,
      SUM(credits_used) AS credits_used
    FROM snowflake.account_usage.database_replication_usage_history
    WHERE start_time >= DATEADD(month,-1,CURRENT_TIMESTAMP())
    GROUP BY 1,2
    ORDER BY 3 DESC;
    
    Copy

    쿼리: 복제 기록 및 m일 평균

    이 쿼리는 작년에 복제에서 사용된 평균 일일 크레딧을 주 단위로 나누어 보여줍니다. 이 쿼리는 일일 평균의 이상을 파악하는 데 도움이 되므로 사용의 급증 또는 변화를 조사할 수 있습니다.

    WITH credits_by_day AS (
      SELECT TO_DATE(start_time) AS date,
        SUM(credits_used) AS credits_used
      FROM snowflake.account_usage.database_replication_usage_history
      WHERE start_time >= DATEADD(year,-1,CURRENT_TIMESTAMP())
      GROUP BY 1
      ORDER BY 2 DESC
    )
    
    SELECT DATE_TRUNC('week',date),
      AVG(credits_used) AS avg_daily_credits
    FROM credits_by_day
    GROUP BY 1
    ORDER BY 1;
    
    Copy

기본 및 보조 데이터베이스의 데이터 세트 비교하기

선택적으로 HASH_AGG 함수를 사용하여 기본 및 보조 데이터베이스의 임의 테이블 세트의 행을 비교하여 데이터 일관성을 확인합니다. HASH_AGG 함수는 (순서 없는) 입력 행 세트에 대해 서명된 집계 64비트 해시 값을 반환합니다. 보조 데이터베이스와 기본 데이터베이스(기본 데이터베이스 스냅샷의 타임스탬프 기준)에 있는 테이블의 전체 또는 임의의 하위 세트에서 이 함수를 쿼리하고 출력을 비교합니다.

보조 데이터베이스에서 실행됨

  1. 보조 데이터베이스에서 DATABASE_REFRESH_PROGRESS 테이블 함수(Snowflake Information Schema)를 쿼리합니다. PRIMARY_UPLOADING_DATA 단계에 대한 DETAILS 열에서 snapshot_transaction_timestamp 를 기록합니다. 기본 데이터베이스의 최신 스냅샷에 대한 타임스탬프입니다.

    select parse_json(details)['snapshot_transaction_timestamp']
    from table(information_schema.database_refresh_progress(mydb))
    where phase_name = 'PRIMARY_UPLOADING_DATA';
    
    Copy
  2. 지정된 테이블에 대해 HASH_AGG 함수를 쿼리합니다. 다음 쿼리는 mytable 테이블의 모든 행에 대한 해시 값을 반환합니다.

    SELECT HASH_AGG( * ) FROM mytable;
    
    Copy

기본 데이터베이스에서 실행됨

  1. 기본 데이터베이스에서 동일한 테이블에 대해 HASH_AGG 함수를 쿼리합니다. Time Travel을 사용하여 보조 데이터베이스에 대한 최신 스냅샷이 생성된 타임스탬프를 지정합니다.

    SELECT HASH_AGG( * ) FROM mytable AT(TIMESTAMP => '<snapshot_transaction_timestamp>'::TIMESTAMP);
    
    Copy
  2. 두 쿼리의 결과를 비교합니다. 출력은 동일해야 합니다.

보조 데이터베이스 삭제하기

DROP DATABASE 명령을 사용하여 언제든지 보조 데이터베이스를 삭제할 수 있습니다. 데이터베이스 소유자(즉, 데이터베이스에 대한 OWNERSHIP 권한 역할)만 데이터베이스를 삭제할 수 있습니다.

기본 데이터베이스 삭제하기

데이터베이스의 복제본(즉, 보조 데이터베이스)이 하나 이상 있는 경우 기본 데이터베이스를 삭제할 수 없습니다. 기본 데이터베이스를 삭제하려면 먼저 보조 데이터베이스를 승격하여 기본 데이터베이스로 사용하도록 한 후에 이전 기본 데이터베이스를 삭제합니다. 또는 기본 데이터베이스에 대한 모든 보조 데이터베이스를 삭제한 후 기본 데이터베이스를 삭제합니다.

데이터베이스 소유자만 데이터베이스를 삭제할 수 있음에 유의하십시오.