계정 오브젝트 복제하기

이 항목에서는 같은 조직의 Snowflake 계정 전체에 걸쳐 계정 오브젝트 및 데이터를 복제하고 오브젝트와 데이터를 동기화된 상태로 유지하는 데 필요한 단계를 설명합니다. 계정 복제는 다양한 리전 의 Snowflake 계정과 클라우드 플랫폼 에서 발생할 수 있습니다.

이 항목의 내용:

복제 및 장애 조치/장애 복구를 위한 리전 지원

고객은 리전 그룹 내의 모든 리전에서 복제할 수 있습니다. 다양한 리전 그룹 에서 리전 간에(예: Snowflake 상업 리전에서 Snowflake 정부 리전으로) 복제하려면 Snowflake 지원 에 문의하여 액세스를 활성화하십시오.

데이터베이스 복제에서 그룹 기반 복제로 전환하기

ALTER DATABASE 항목을 사용하여 복제가 활성화된 데이터베이스는 복제 또는 장애 조치 그룹에 추가되기 전에 복제를 비활성화해야 합니다.

참고

ACCOUNTADMIN 역할을 사용하여 이 섹션의 SQL 문을 실행하십시오.

1단계: 복제가 활성화된 데이터베이스에 대한 복제 비활성화하기

복제 또는 장애 조치 그룹에 추가하기 위해 기본 데이터베이스와 연결된 보조 데이터베이스에 대한 복제를 비활성화하는 SYSTEM$DISABLE_DATABASE_REPLICATION 함수를 실행합니다.

기본 데이터베이스가 있는 원본 계정에서 다음 SQL 문을 실행합니다.

SELECT SYSTEM$DISABLE_DATABASE_REPLICATION('mydb');

2단계: 기본 장애 조치 그룹에 데이터베이스를 추가하고 보조 장애 조치 그룹 생성하기

데이터베이스에 대한 복제를 성공적으로 비활성화했으면, 원본 계정의 장애 조치 그룹에 기본 데이터베이스를 추가할 수 있습니다.

그런 다음 대상 계정에 보조 장애 조치 그룹을 생성합니다. 보조 장애 조치 그룹이 대상 계정에서 새로 고쳐지면 이전의 보조 데이터베이스가 자동으로 보조 장애 조치 그룹의 구성원으로 추가되고, 기본 데이터베이스의 변경 사항으로 새로 고쳐집니다.

기본 및 보조 장애 조치 그룹 생성에 대한 자세한 내용은 워크플로 섹션을 참조하십시오.

참고

이전에 복제된 데이터베이스를 복제 또는 장애 조치 그룹에 추가하면 Snowflake는 해당 데이터베이스에 대해 이미 복제된 데이터를 다시 복제하지 않습니다. 그룹을 새로 고칠 때 마지막 새로 고침 이후의 변경 사항만 복제됩니다.

워크플로

다음 SQL 문은 계정 및 데이터베이스 오브젝트 복제를 활성화하고 오브젝트를 새로 고치는 워크플로를 보여줍니다. 각 단계는 아래에서 자세히 설명합니다.

참고

다음 예제에서는 원본 계정과 대상 계정에 대해 복제를 활성화해야 합니다. 자세한 내용은 전제 조건: 조직의 계정에 대한 복제 활성화 섹션을 참조하십시오.

선호하는 Snowflake 클라이언트에서 다음 SQL 문을 실행하여 계정 및 데이터베이스 오브젝트 복제 및 장애 조치를 활성화하고 오브젝트를 새로 고칩니다.

원본 계정에서 실행됨

  1. 역할을 생성하고 CREATE FAILOVER GROUP 권한을 부여합니다. 이 단계는 선택 사항 입니다.

    -- Execute the following SQL statements using the ACCOUNTADMIN role:
    USE ROLE ACCOUNTADMIN;
    
    CREATE ROLE myrole;
    
    GRANT CREATE FAILOVER GROUP ON ACCOUNT
     TO ROLE myrole;
    
  2. 원본 계정에 장애 조치 그룹을 생성하고 특정 대상 계정에 복제를 활성화합니다.

    참고

    • 이전에 ALTER DATABASE 항목을 사용하여 데이터베이스 복제 및 장애 조치에 대해 활성화된 복제 또는 장애 조치 그룹에 추가할 데이터베이스가 있는 경우, 그룹에 추가하기 전에 이 항목의 데이터베이스 복제에서 그룹 기반 복제로 전환하기 지침을 따르십시오.

    • 장애 조치 그룹에 데이터베이스를 추가하려면 활성 역할에 데이터베이스에 대한 MONITOR 권한이 있어야 합니다. 데이터베이스 권한에 대한 자세한 내용은 별도 항목의 데이터베이스 권한 섹션을 참조하십시오.

    USE ROLE myrole;
    
    -- Execute the following SQL statement using a role with the CREATE FAILOVER GROUP privilege:
    CREATE FAILOVER GROUP myfg
        OBJECT_TYPES = USERS, ROLES, WAREHOUSES, RESOURCE MONITORS, DATABASES
        ALLOWED_DATABASES = db1, db2
        ALLOWED_ACCOUNTS = myorg.myaccount2, myorg.myaccount3
        REPLICATION_SCHEDULE = '10 MINUTE';
    

    주의

    복제 중 삭제하지 않을 계정 오브젝트(예: 사용자 또는 역할)가 대상 계정에 있는 경우 복제 또는 장애 조치 그룹을 만들 때 REPLICATION_SCHEDULE 매개 변수를 포함하지 마십시오. 자세한 내용은 5단계. 대상 계정의 스크립트에 의해 생성된 오브젝트에 전역 ID 적용하기 — 선택 사항 섹션을 참조하십시오.

대상 계정에서 실행됨

  1. 대상 계정에서 역할을 생성하고 CREATE FAILOVER GROUP 권한을 부여합니다. 이 단계는 선택 사항 입니다.

    -- Execute the following SQL statements using the ACCOUNTADMIN role:
    USE ROLE ACCOUNTADMIN;
    
    CREATE ROLE myrole;
    
    GRANT CREATE FAILOVER GROUP ON ACCOUNT
        TO ROLE myrole;
    
  2. 대상 계정에 장애 조치 그룹을 원본 계정에 있는 장애 조치 그룹의 복제본으로서 생성합니다.

    USE ROLE myrole;
    
    -- Execute the following SQL statement using a role with the CREATE FAILOVER GROUP privilege:
    CREATE FAILOVER GROUP myfg
        AS REPLICA OF myorg.myaccount1.myfg;
    
  3. 오브젝트에 전역 ID를 적용합니다. 이것은 복제를 통해 생성되지 않은 계정 오브젝트에 대한 선택 사항 단계입니다.

    -- Execute the following SQL statements using the ACCOUNTADMIN role:
    SELECT SYSTEM$LINK_ACCOUNT_OBJECTS_BY_NAME('myfg');
    

    주의

    복제 중 삭제하지 않으려는 계정 오브젝트(예: 사용자 또는 역할)가 대상 계정에 있는 경우 이 단계를 실행해야 합니다. 이 단계를 건너뛰면 오브젝트(예: 공유)에서 사용자 워크시트나 역할에 대한 권한 부여가 손실될 수 있습니다. 자세한 내용은 5단계. 대상 계정의 스크립트에 의해 생성된 오브젝트에 전역 ID 적용하기 — 선택 사항 섹션을 참조하십시오.

수동으로 보조 그룹 새로 고치기

대상 계정의 보조 장애 조치 그룹을 수동으로 새로 고치려면 이 항목의 대상 계정에서 수동으로 보조 장애 조치 그룹 새로 고치기 섹션을 참조하십시오.

참고

모범 사례로서 Snowflake는 REPLICATION_SCHEDULE 매개 변수를 사용하여 자동 새로 고침을 예약할 것을 권장합니다. 이 항목의 복제 일정 섹션을 참조하십시오.

계정 오브젝트 및 데이터베이스 복제하기

이 섹션의 지침은 복제를 위해 계정을 준비하고, 원본 계정에서 대상 계정으로 특정 오브젝트의 복제를 활성화하고, 대상 계정의 오브젝트를 동기화하는 방법을 설명합니다.

중요

대상 계정에는 기본적으로 Tri-Secret Secure 또는 AWS PrivateLink 가 구성되어 있지 않습니다. 규정 준수, 보안 또는 기타 목적을 위해 Tri-Secret Secure 또는 PrivateLink가 필요한 경우 해당 기능이 대상 계정에 구성되어 있는지 확인하는 것은 사용자의 책임입니다.

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

조직 관리자(ORGADMIN 역할)는 원본 및 대상 계정에 대해 복제를 활성화해야 합니다.

계정에 대한 복제를 활성화하기 위해, ORGADMIN 역할을 가진 사용자는 SYSTEM$GLOBAL_ACCOUNT_SET_PARAMETER 함수를 사용하여 ENABLE_ACCOUNT_DATABASE_REPLICATION 매개 변수를 true 로 설정합니다. 조직의 여러 계정을 사용해 동일한 ORGADMIN 계정에서 복제할 수 있습니다.

ORGADMIN 계정에 로그인하여 조직에서 각 원본 계정과 대상 계정에 대해 복제를 활성화합니다.

-- Assume the ORGADMIN role
use role orgadmin;

-- View the list of the accounts in your organization
-- Note the organization name and account name for each account for which you are enabling replication
show organization accounts;

-- Enable replication by executing this statement for each source and target account in your organization
select system$global_account_set_parameter('<organization_name>.<account_name>', 'ENABLE_ACCOUNT_DATABASE_REPLICATION', 'true');

SYSTEM$GLOBAL_ACCOUNT_SET_PARAMETER 함수는 레거시 계정 로케이터 식별자를 지원하지만, 조직에 (다양한 리전에서) 같은 로케이터를 공유하는 계정이 여러 개 있을 때 예기치 않은 결과를 초래합니다.

스트림 및 작업 복제 미리 보기 사용하기 — 선택 사항

계정, 데이터베이스 또는 복제 또는 장애 조치 그룹에 대한 스트림 복제 및 작업 복제 미리 보기를 사용하려면 원본 계정 또는 기본 오브젝트에 대해 ENABLE_STREAM_TASK_REPLICATION 매개 변수를 true 로 설정합니다.

다음 예제는 원본 계정에서 실행해야 합니다.

데이터베이스 mydb 의 스트림 및 작업 복제 사용:

alter database mydb set ENABLE_STREAM_TASK_REPLICATION = true;

복제 그룹 myrg 의 스트림 및 작업 복제 사용:

alter replication group myrg set ENABLE_STREAM_TASK_REPLICATION = true;

조직 myorgmyaccount 계정에 대한 스트림 및 작업 복제 사용:

alter account myorg.myaccount set ENABLE_STREAM_TASK_REPLICATION = true;

1단계: 원본 계정에서 CREATE FAILOVER GROUP 권한이 있는 역할 만들기 — 선택 사항

역할을 생성하고 CREATE FAILOVER GROUP 권한을 부여합니다. 이 단계는 선택 사항입니다. 이 역할을 이미 만든 경우 2단계: 원본 계정에서 기본 장애 조치 그룹 생성하기 항목으로 건너뛰십시오.

-- Execute the following SQL statements using the ACCOUNTADMIN role:
USE ROLE ACCOUNTADMIN;

CREATE ROLE myrole;

GRANT CREATE FAILOVER GROUP ON ACCOUNT
    TO ROLE myrole;

2단계: 원본 계정에서 기본 장애 조치 그룹 생성하기

기본 장애 조치 그룹을 생성하고 현재(원본) 계정에서 동일 조직의 하나 이상의 대상 계정으로 특정 오브젝트의 복제 및 장애 조치를 활성화합니다.

복제가 활성화된 모든 계정 보기

복제가 활성화된 조직의 계정 목록을 검색하려면 SHOW REPLICATION ACCOUNTS 항목을 사용하십시오.

-- Execute the following SQL statements using the ACCOUNTADMIN role:
SHOW REPLICATION ACCOUNTS;

+------------------------+-------------------------+--------------+-----------------+-----------------+-------------------+
| snowflake_region       | created_on              | account_name | account_locator |  comment        | organization_name |
+------------------------+-------------------------+--------------+-----------------+-----------------+-------------------+
| AWS_US_WEST_2          | 2020-07-15 21:59:25.455 | myaccount1   | myacctlocator1  |                 | myorg             |
+------------------------+-------------------------+--------------+-----------------+-----------------+-------------------+
| AWS_US_EAST_1          | 2020-07-23 14:12:23.573 | myaccount2   | myacctlocator2  |                 | myorg             |
+------------------------+-------------------------+--------------+-----------------+-----------------+-------------------+
| AWS_US_EAST_2          | 2020-07-25 19:25:04.412 | myaccount3   | myacctlocator3  |                 | myorg             |
+------------------------+-------------------------+--------------+-----------------+-----------------+-------------------+

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

장애 조치 및 복제 그룹 구성원 보기

계정, 데이터베이스, 공유 오브젝트에는 그룹 구성원 자격에 대한 제약 이 있습니다. 새 그룹을 생성하거나 기존 그룹에 오브젝트를 추가하기 전에 기존 장애 조치 그룹 및 각 그룹의 오브젝트 목록을 검토할 수 있습니다.

참고

계정 관리자(ACCOUNTADMIN 역할이 있는 사용자) 또는 그룹 소유자(그룹에 대한 OWNERSHIP 권한이 있는 역할)만 이 섹션의 SQL 문을 실행할 수 있습니다.

현재 계정에 연결된 모든 장애 조치 그룹, 그리고 각 그룹의 오브젝트 유형을 봅니다.

SHOW FAILOVER GROUPS;

장애 조치 그룹 myfg 의 모든 데이터베이스 보기:

SHOW DATABASES IN FAILOVER GROUP myfg;

장애 조치 그룹 myfg 의 모든 공유 보기:

SHOW SHARES IN FAILOVER GROUP myfg;

원본 계정에서 대상 계정으로 계정 및 데이터베이스 오브젝트 복제 활성화하기

원본 계정에 지정된 계정 및 데이터베이스 오브젝트의 장애 조치 그룹을 생성하고 대상 계정 목록에 대한 복제 및 장애 조치를 활성화합니다. 구문은 CREATE FAILOVER GROUP 섹션을 참조하십시오.

예를 들어 원본 계정에서 동일 조직의 myaccount2 계정으로 사용자, 역할, 웨어하우스, 리소스 모니터, db1db2 데이터베이스를 복제할 수 있습니다. 10분마다 자동으로 myaccount2 를 새로 고치도록 복제 일정을 설정합니다.

참고

이전에 ALTER DATABASE 항목을 사용하여 데이터베이스 복제에 대해 활성화된 복제 또는 장애 조치 그룹에 추가할 데이터베이스가 있는 경우, 그룹에 추가하기 전에 이 항목의 데이터베이스 복제에서 그룹 기반 복제로 전환하기 지침을 따르십시오.

원본 계정에서 실행됨:

use role myrole;

-- Execute the following SQL statement using a role with the CREATE FAILOVER GROUP privilege:
create failover group myfg
    object_types = users, roles, warehouses, resource monitors, databases, integrations, network policies
    allowed_databases = db1, db2
    allowed_integration_types = API INTEGRATIONS
    allowed_accounts = myorg.myaccount2
    replication_schedule = '10 MINUTE';

주의

복제 중 삭제하지 않을 계정 오브젝트(예: 사용자 또는 역할)가 대상 계정에 있는 경우 복제 또는 장애 조치 그룹을 만들 때 REPLICATION_SCHEDULE 매개 변수를 포함하지 마십시오. 자세한 내용은 5단계. 대상 계정의 스크립트에 의해 생성된 오브젝트에 전역 ID 적용하기 — 선택 사항 섹션을 참조하십시오.

3단계: 대상 계정에서 CREATE FAILOVER GROUP 권한이 있는 역할 만들기 — 선택 사항

대상 계정에서 역할을 생성하고 CREATE FAILOVER GROUP 권한을 부여합니다. 이 단계는 선택 사항입니다. 이 역할을 이미 만든 경우 4단계: 대상 계정에 보조 장애 조치 그룹 생성하기 항목으로 건너뛰십시오.

-- Execute the following SQL statements using the ACCOUNTADMIN role:
USE ROLE ACCOUNTADMIN;

CREATE ROLE myrole;

GRANT CREATE FAILOVER GROUP ON ACCOUNT
    TO ROLE myrole;

4단계: 대상 계정에 보조 장애 조치 그룹 생성하기

원본 계정의 기본 장애 조치 그룹의 복제본으로서 대상 계정에 보조 장애 조치 그룹을 생성합니다.

이 항목의 2단계: 원본 계정에서 기본 장애 조치 그룹 생성하기 에서 복제를 활성화한 각 대상 계정에서 CREATE FAILOVER GROUP … AS REPLICA OF 문을 실행합니다.

각 대상 계정에서 실행됨:

use role myrole;

-- Execute the following SQL statement using a role with the CREATE FAILOVER GROUP privilege:
CREATE FAILOVER GROUP myfg
  AS REPLICA OF myorg.myaccount1.myfg;

5단계. 대상 계정의 스크립트에 의해 생성된 오브젝트에 전역 ID 적용하기 — 선택 사항

주의

복제 중 삭제하지 않으려는 계정 오브젝트(예: 사용자 또는 역할)가 대상 계정에 있는 경우 이 단계를 실행해야 합니다. 이 단계를 건너뛰면 오브젝트(예: 공유)에서 사용자 워크시트나 역할에 대한 권한 부여가 손실될 수 있습니다.

복제 이외의 방법(예: 스크립트 사용)을 통해 대상 계정에서 계정 오브젝트(예: 사용자 및 역할)를 생성한 경우, 이러한 사용자 및 역할에는 기본적으로 전역 식별자가 없습니다. 새로 고침 작업은 전역 식별자를 사용하여 이러한 오브젝트를 원본 계정의 동일 오브젝트에 동기화합니다. 대상 계정이 원본 계정에서 새로 고쳐진 경우, 새로 고침 작업은 전역 식별자가 없는 대상 계정에 있는 object_types 목록(예: users 또는 roles)에서 유형의 모든 계정 오브젝트를 삭제 합니다.

복제 일정 없이 복제 또는 장애 조치 그룹 만들기

보조 복제 또는 장애 조치 그룹이 복제 일정과 함께 기본 복제 또는 장애 조치 그룹의 복제본으로 생성되면 보조 복제 또는 장애 조치 그룹이 생성될 때 보조 그룹의 초기 새로 고침이 자동으로 실행됩니다. 다음 지침을 실행하기 전에 이러한 일이 발생하지 않도록 하려면 REPLICATION_SCHEDULE 매개 변수를 설정하지 않고 기본 복제 또는 장애 조치 그룹을 만드십시오.

대상 계정에서 보조 그룹이 생성된 후 SYSTEM$LINK_ACCOUNT_OBJECTS_BY_NAME 함수를 사용하여 대상 계정의 계정 오브젝트에 전역 식별자를 추가합니다. 오직 대상 계정에만 존재하는 계정 오브젝트의 경우, 이 함수를 호출하기 전에 원본 계정에 수동으로 복제합니다.

대상 계정의 오브젝트에 전역 식별자를 적용하거나 원본 계정에서 이런 식별자를 수동으로 다시 만든 후, ALTER REPLICATION GROUP 또는 ALTER FAILOVER GROUP 명령을 사용하여 기본 복제 또는 장애 조치 그룹의 복제 일정을 설정합니다.

API 통합을 위해 원격 서비스 업데이트하기

API 통합 복제를 활성화한 경우 API 통합이 대상 계정에 복제된 후 추가 단계가 필요합니다. 복제된 통합에는 기본 통합의 ID 및 IAM 엔티티와는 다른 고유한 ID 및 액세스 관리(IAM) 엔티티가 있습니다. 따라서 복제된 함수에 대한 액세스 권한을 부여하려면 원격 서비스에 대한 권한을 업데이트해야 합니다. 이 프로세스는 기본 계정의 함수에 대한 액세스 권한을 부여하는 것과 유사합니다. 자세한 내용은 아래 링크를 참조하십시오.

대상 계정에서 수동으로 보조 장애 조치 그룹 새로 고치기

대상 계정의 오브젝트를 수동으로 새로 고치려면 ALTER FAILOVER GROUP … REFRESH 명령을 실행합니다.

모범 사례로서 CREATE FAILOVER GROUP 또는 ALTER FAILOVER GROUP 항목을 사용하여 REPLICATION_SCHEDULE 매개 변수를 설정해 보조 새로 고침을 예약하는 것이 좋습니다.

참고

대상 계정에서 함수를 호출한 사용자가 원본 계정에서 삭제된 경우 새로 고침 작업이 실패합니다.

역할에 장애 조치 그룹에 대한 REPLICATE 권한 부여하기 — 선택 사항

REPLICATE 권한은 현재 복제되지 않으며 원본 계정 및 대상 계정 둘 다의 장애 조치(또는 복제) 그룹에 부여되어야 합니다.

원본 계정에서 실행됨:

-- Execute the following SQL statements using a role with the OWNERSHIP privilege on the group:
GRANT REPLICATE ON FAILOVER GROUP myfg TO ROLE my_replication_role;

대상 계정에서 실행됨:

-- Execute the following SQL statements using a role with the OWNERSHIP privilege on the group:
GRANT REPLICATE ON FAILOVER GROUP myfg TO ROLE my_replication_role;

수동으로 보조 장애 조치 그룹 새로 고치기

예를 들어 장애 조치 그룹 myfg 의 오브젝트를 새로 고치려면 대상 계정에서 다음 문을 실행합니다.

USE ROLE my_replication_role;

-- Execute the following SQL statements using a role with the REPLICATE privilege:
ALTER FAILOVER GROUP myfg REFRESH;

복제 모니터링

이 섹션에서는 계정 복제 진행률, 기록, 비용을 모니터링하는 방법에 대한 정보를 제공합니다.

복제 그룹 또는 장애 조치 그룹 새로 고침의 진행률 모니터링

복제 또는 장애 조치 그룹 새로 고침의 진행률을 모니터링하려면 (Snowflake Information Schema 에서) REPLICATION_GROUP_REFRESH_PROGRESS, REPLICATION_GROUP_REFRESH_PROGRESS_BY_JOB 테이블 함수를 쿼리합니다.

장애 조치 그룹 myfg 에 대한 가장 최근 새로 고침 작업의 진행률을 확인합니다.

SELECT PHASE_NAME, START_TIME, END_TIME, PROGRESS, DETAILS
  FROM TABLE(information_schema.replication_group_refresh_progress('myfg'));

복제 기록

지정된 날짜 범위 내에서 특정 복제 또는 장애 조치 그룹의 복제 기록을 보려면 다음 중 하나를 쿼리하십시오.

지난 7일간 장애 조치 그룹 myfg 의 계정 복제 기록을 보려면 Information Schema REPLICATION_GROUP_REFRESH_HISTORY 테이블 함수를 쿼리하십시오.

SELECT PHASE_NAME, START_TIME, END_TIME, TOTAL_BYTES, OBJECT_COUNT
  FROM TABLE(information_schema.replication_group_refresh_history('myfg'))
  WHERE START_TIME >= current_date - interval '7 days';

이번 달의 계정 복제 기록을 보려면 Account Usage REPLICATION_GROUP_REFRESH_HISTORY 뷰를 쿼리하십시오.

SELECT REPLICATION_GROUP_NAME, PHASE_NAME, START_TIME, END_TIME, TOTAL_BYTES, OBJECT_COUNT
  FROM snowflake.account_usage.replication_group_refresh_history
  WHERE START_TIME >= date_trunc('month', current_date());

복제 비용 모니터링

복제에 대한 크레딧 사용을 모니터링하려면 다음 중 하나를 쿼리하십시오.

지난 7일간 계정 복제에 사용된 크레딧을 보려면 REPLICATION_GROUP_USAGE_HISTORY 테이블 함수를 쿼리하십시오.

SELECT start_time, end_time, replication_group_name, credits_used, bytes_transferred
  FROM table(information_schema.replication_group_usage_history())
  WHERE START_TIME >= current_date - interval '7 days';

이번 달의 계정 복제 기록에 대해 복제 또는 장애 조치 그룹에서 사용하는 크레딧을 보려면 Account Usage REPLICATION_GROUP_USAGE_HISTORY 뷰를 쿼리하십시오.

SELECT start_time, end_time, replication_group_name, credits_used, bytes_transferred
  FROM snowflake.account_usage.replication_group_usage_history
  WHERE START_TIME >= date_trunc('month', current_date());

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

복제 또는 장애 조치 그룹에 포함된 개별 데이터베이스의 복제 비용은 데이터베이스에 대해 복사된 바이트 수를 검색하고 이를 사용된 크레딧과 연결하여 계산할 수 있습니다.

Account Usage 뷰 쿼리하기

다음 예제에서는 지난 30일 동안 한 복제 그룹의 데이터베이스 복제 비용을 계산합니다.

  1. REPLICATION_GROUP_REFRESH_HISTORY Account Usage 뷰를 쿼리하고 데이터베이스당 복제된 바이트 수의 합계를 계산합니다.

    예를 들어, 지난 30일 동안 복제 그룹 myrg 의 데이터베이스에 대해 복제된 바이트 수의 합계를 계산하려면 다음을 수행하십시오.

    select sum(value:totalBytesToReplicate) as sum_database_bytes
    from snowflake.account_usage.replication_group_refresh_history rh,
        lateral flatten(input => rh.total_bytes:databases)
    where rh.replication_group_name = 'MYRG'
    and rh.start_time >= current_date - interval '30 days';
    

    데이터베이스 바이트 합계의 출력을 확인합니다.

    +--------------------+
    | SUM_DATABASE_BYTES |
    |--------------------|
    |              22016 |
    +--------------------+
    
  2. REPLICATION_GROUP_USAGE_HISTORY Account Usage 뷰를 쿼리하고 사용된 크레딧 수의 합계와 복제용으로 전송된 바이트의 합계를 계산합니다.

    예를 들어, 사용된 크레딧 수의 합계와 지난 30일 동안 복제 그룹 myrg 의 복제용으로 전송된 바이트의 합계를 계산하려면 다음을 수행하십시오.

    select sum(credits_used) as credits_used, SUM(bytes_transferred) as bytes_transferred
    from snowflake.account_usage.replication_group_usage_history
    where replication_group_name = 'MYRG'
    and start_time >= current_date - interval '30 days';
    

    사용된 크레딧 합계와 전송된 바이트 합계의 출력을 확인합니다.

    +--------------+-------------------+
    | CREDITS_USED | BYTES_TRANSFERRED |
    |--------------+-------------------|
    |  1.357923604 |             22013 |
    +--------------+-------------------+
    
  3. 데이터베이스에 대해 전송된 바이트 값, 사용된 크레딧 합계, 이전의 두 단계에서 복제용으로 전송된 모든 바이트의 합계를 사용하여 데이터베이스의 복제 비용을 계산합니다.

    (<전송된_데이터베이스_바이트> / <전송된_바이트>) * <사용된_크레딧>

    예:

    (22016 / 22013) * 1.357923604 = 1.35810866)

Information Schema 테이블 함수 쿼리하기

지난 14일 이내에 수행된 새로 고침 작업의 경우 연결된 Information Schema 테이블 함수를 쿼리합니다.

  1. 복제 그룹 myrg 에 대한 데이터베이스 복제를 위해 복사된 바이트 수의 합계를 보려면 REPLICATION_GROUP_REFRESH_HISTORY 테이블 함수를 쿼리하십시오.

    select sum(value:totalBytesToReplicate)
      from table(information_schema.replication_group_refresh_history('myrg')) as rh,
      lateral flatten(input => total_bytes:databases)
      where rh.phase_name = 'COMPLETED'
      and rh.start_time >= current_date - interval '14 days';
    
  2. REPLICATION_GROUP_USAGE_HISTORY 테이블 함수를 쿼리하여 사용된 크레딧 수의 합계와 복제 그룹 myrg 에 대한 복제용으로 전송된 바이트의 합계를 확인합니다.

    select sum(credits_used), sum(bytes_transferred)
      from table(information_schema.replication_group_usage_history(
          date_range_start=>dateadd('day', -14, current_date()),
          replication_group_name => 'myrg'
      ));
    

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

데이터베이스 오브젝트가 복제 또는 장애 조치 그룹에서 복제되는 경우 HASH_AGG 함수를 사용하여 기본 및 보조 데이터베이스의 임의 테이블 세트의 행을 비교하여 데이터 일관성을 확인할 수 있습니다. HASH_AGG 함수는 (순서 없는) 입력 행 세트에 대해 서명된 집계 64비트 해시 값을 반환합니다. 보조 데이터베이스와 기본 데이터베이스(기본 데이터베이스 스냅샷의 타임스탬프 기준)에 있는 테이블의 전체 또는 임의의 하위 세트에서 이 함수를 쿼리하고 출력을 비교합니다.

아래 예에서 데이터베이스 mydb 는 장애 조치 그룹 myfg 에 포함되어 있습니다. 데이터베이스 mydb 에는 테이블 mytable 이 있습니다.

대상 계정에서 실행됨

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

    SELECT PARSE_JSON(details)['primarySnapshotTimestamp']
      FROM TABLE(information_schema.replication_group_refresh_progress('myfg'))
      WHERE PHASE_NAME = 'PRIMARY_UPLOADING_METADATA';
    
  2. 보조 데이터베이스에서 지정된 테이블에 대해 HASH_AGG 함수를 쿼리합니다. 다음 쿼리는 mytable 테이블의 모든 행에 대한 해시 값을 반환합니다.

    SELECT HASH_AGG( * ) FROM mytable;
    

원본 계정에서 실행됨

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

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

맨 위로 이동