복제 고려 사항¶
이 항목에서는 복제 그룹 또는 장애 조치 그룹 또는 데이터베이스 복제 로 복제할 때 보조 데이터베이스 및 오브젝트에서 특정 Snowflake 기능의 동작을 설명하고 복제된 오브젝트 및 데이터 작업에 대한 일반적인 지침을 제공합니다.
이전에 ALTER DATABASE … ENABLE REPLICATION TO ACCOUNTS 명령을 사용하여 개별 데이터베이스에 대한 데이터베이스 복제를 활성화한 경우 데이터베이스 복제와 관련된 추가 고려 사항은 데이터베이스 복제 고려 사항 섹션을 참조하십시오.
이 항목의 내용:
복제 그룹 및 장애 조치 그룹 제약 조건¶
다음 섹션에서는 계정 오브젝트, 데이터베이스, 공유를 복제 그룹과 장애 조치 그룹에 추가하는 것과 관련된 제약 조건을 설명합니다.
계정 오브젝트¶
계정에는 데이터베이스 또는 공유 이외의 오브젝트가 포함된 복제 그룹 또는 장애 조치 그룹이 하나만 있을 수 있습니다.
복제 권한¶
이 섹션에서는 사용자가 시스템의 복제 그룹과 장애 조치 그룹 오브젝트에 대해 수행할 수 있는 작업을 지정하기 위해 역할에 부여할 수 있는 복제 권한에 대해 설명합니다. GRANT 명령의 구문은 GRANT <권한> 섹션을 참조하십시오.
참고
데이터베이스 복제 의 경우 ACCOUNTADMIN 역할을 가진 사용자만 데이터베이스 복제와 장애 조치를 활성화하고 관리할 수 있습니다. 데이터베이스 복제에 필요한 권한에 대한 자세한 내용은 6단계. 일정에 따라 보조 데이터베이스 새로 고침 의 필수 권한 테이블 을 참조하십시오.
권한 |
오브젝트 |
사용법 |
참고 |
---|---|---|---|
OWNERSHIP |
복제 그룹 장애 조치 그룹 |
오브젝트를 삭제, 변경 및 액세스 권한을 부여하거나 취소할 수 있는 권한을 부여합니다. |
다음을 통해 부여할 수 있습니다.
|
CREATE REPLICATION GROUP |
계정 |
복제 그룹을 생성할 수 있는 권한을 부여합니다. |
ACCOUNTADMIN 역할이 이 권한을 부여해야 합니다. |
CREATE FAILOVER GROUP |
계정 |
장애 조치 그룹을 생성할 수 있는 권한을 부여합니다. |
ACCOUNTADMIN 역할이 이 권한을 부여해야 합니다. |
FAILOVER |
장애 조치 그룹 |
기본 장애 조치 그룹 역할을 하도록 보조 장애 조치 그룹을 승격할 수 있는 권한을 부여합니다. |
그룹에 대한 OWNERSHIP 권한이 있는 역할에 의해 부여되거나 취소될 수 있습니다. |
REPLICATE |
복제 그룹 장애 조치 그룹 |
보조 그룹을 새로 고칠 수 있는 권한을 부여합니다. |
그룹에 대한 OWNERSHIP 권한이 있는 역할에 의해 부여되거나 취소될 수 있습니다. |
MODIFY |
복제 그룹 장애 조치 그룹 |
오브젝트의 설정 또는 속성을 변경할 수 있는 권한을 부여합니다. |
그룹에 대한 OWNERSHIP 권한이 있는 역할에 의해 부여되거나 취소될 수 있습니다. |
MONITOR |
복제 그룹 장애 조치 그룹 |
오브젝트 내의 세부 정보를 볼 수 있는 권한을 부여합니다. |
그룹에 대한 OWNERSHIP 권한이 있는 역할에 의해 부여되거나 취소될 수 있습니다. |
지정된 권한 세트로 사용자 지정 역할을 만드는 방법에 대한 지침은 사용자 지정 역할 만들기 섹션을 참조하십시오.
보안 오브젝트 에 대해 SQL 작업을 수행하기 위한 역할과 권한 부여에 대한 일반적인 정보는 액세스 제어의 개요 섹션을 참조하십시오.
복제 그룹 간의 복제와 참조¶
허상 참조(즉, 다른 복제 그룹이나 장애 조치 그룹의 오브젝트에 대한 참조)가 있는 복제(또는 장애 조치) 그룹의 오브젝트는 경우에 따라 대상 계정에 성공적으로 복제할 수 있습니다. 복제 작업으로 인해 대상 계정의 동작이 원본 계정에서 발생할 수 있는 동작과 일치하면 복제가 성공합니다.
예를 들어, 장애 조치 그룹 fg_a
의 테이블에 있는 열이 장애 조치 그룹 fg_b
의 시퀀스를 참조하는 경우 두 그룹의 복제가 성공합니다. fg_a
가 fg_b
보다 먼저 복제된 경우, fg_b
가 복제되지 않은 경우, 시퀀스를 참조하는 테이블에 대한 삽입 작업(장애 조치 후)은 실패합니다. 이 문제는 원본 계정에서 발생할 수 있습니다. 원본 계정에서 시퀀스가 삭제된 경우, 삭제된 시퀀스를 참조하는 열이 있는 테이블에 대한 삽입 작업이 실패합니다.
현수 참조가 데이터를 보호하는 보안 정책인 경우, 해당 정책을 참조하는 오브젝트가 포함된 복제 그룹이 복제되기 전에, 보안 정책이 있는 복제(또는 장애 조치) 그룹을 반드시 복제해야 합니다.
주의
별도의 복제 그룹 또는 장애 조치 그룹에서 데이터를 보호하는 보안 정책을 업데이트하면 불일치가 발생할 수 있으므로 주의해야 합니다.
데이터베이스 오브젝트의 경우 Account Usage OBJECT_DEPENDENCIES 뷰 에서 오브젝트 종속성 을 볼 수 있습니다.
허상 참조 및 네트워크 정책¶
네트워크 정책의 허상 참조로 인해 다음 오류 메시지가 표시되며 복제가 실패할 수 있습니다.
Dangling references in the snapshot. Correct the errors before refreshing again.
The following references are missing (referred entity <- [referring entities])
허상 참조를 방지하려면 복제 그룹 또는 장애 조치 그룹에 대해 CREATE 또는 ALTER 명령을 실행할 때 OBJECT_TYPES
목록에 다음 오브젝트 유형을 지정하십시오.
네트워크 정책에서 네트워크 규칙을 사용하는 경우 네트워크 규칙이 생성된 스키마가 포함된 데이터베이스를 포함하십시오.
네트워크 정책이 계정과 연결된 경우
OBJECT_TYPES
목록에NETWORK POLICIES
및ACCOUNT PARAMETERS
를 포함합니다.네트워크 정책이 사용자와 연결된 경우
OBJECT_TYPES
목록에NETWORK POLICIES
및USERS
를 포함합니다.
자세한 내용은 네트워크 정책 복제하기 섹션을 참조하십시오.
허상 참조 및 패키지 정책¶
계정에 설정된 패키지 정책 이 있는 경우 계정 오브젝트가 포함된 복제 또는 장애 조치 그룹에 대한 새로 고침 작업 중에 다음과 같은 허상 참조 오류가 발생합니다.
003131 (55000): Dangling references in the snapshot. Correct the errors before refreshing again.
The following references are missing (referred entity <- [referring entities]):
POLICY '<policy_db>.<policy_schema>.<packages_policy_name>' <- [ACCOUNT '<account_locator>']
허상 참조를 방지하려면 패키지 정책이 포함된 데이터베이스를 대상 계정에 복제하십시오. 정책이 포함된 데이터베이스는 동일하거나 다른 복제 또는 장애 조치 그룹에 있을 수 있습니다.
허상 참조 및 시크릿¶
자세한 내용은 복제 및 시크릿 섹션을 참조하십시오.
허상 참조 및 스트림¶
스트림에 대한 허상 참조로 인해 다음 오류 메시지가 표시되며 복제에 실패하게 됩니다.
Primary database: the source object ''<object_name>'' for this stream ''<stream_name>'' is not included in the replication group.
Stream replication does not support replication across databases in different replication groups. Please see Streams Documentation
https://docs.snowflake.com/en/user-guide/account-replication-considerations#replication-and-streams for options.
허상 참조 오류를 방지하는 방법:
기본 데이터베이스는 스트림과 스트림의 기본 오브젝트를 모두 포함해야 합니다. 또는
스트림을 포함하는 데이터베이스와 스트림이 참조하는 기본 오브젝트를 포함하는 데이터베이스는 동일한 복제 또는 장애 조치 그룹에 포함되어야 합니다.
복제 및 읽기 전용 보조 오브젝트¶
보조 데이터베이스 및 공유를 포함하여 대상 계정의 모든 보조 오브젝트는 읽기 전용입니다. 대상 계정에서 복제된 오브젝트 또는 오브젝트 유형을 로컬로 변경할 수 없습니다. 예를 들어 USERS
오브젝트 유형이 원본 계정에서 대상 계정으로 복제된 경우, 대상 계정에서 새 사용자를 생성하거나 수정할 수 없습니다.
대상 계정에서 새로운 로컬 데이터베이스와 공유를 생성하고 수정할 수 있습니다. ROLES
도 대상 계정에 복제되면 해당 대상 계정에서 새 역할을 생성하거나 수정할 수 없습니다. 따라서 대상 계정의 보조 오브젝트에 대한 역할에 권한을 부여하거나 취소할 수 없습니다. 그러나 권한은 대상 계정에서 생성된 로컬 오브젝트(예: 데이터베이스, 공유, 또는 복제 그룹 또는 장애 조치 그룹)에 대한 보조 역할에 부여(또는 취소)될 수 있습니다.
대상 계정의 복제와 오브젝트¶
복제 이외의 방법 (예: 스크립트 사용)을 통해 대상 계정에서 계정 오브젝트(예: 사용자 및 역할)를 생성한 경우, 이러한 사용자 및 역할에는 기본적으로 전역 식별자가 없습니다. 대상 계정이 원본 계정에서 새로 고쳐진 경우, 새로 고침 작업은 전역 식별자가 없는 대상 계정에 있는 OBJECT_TYPES
목록에서 유형의 모든 계정 오브젝트를 삭제 합니다.
참고
USERS 또는 ROLES를 복제하려고 처음 새로 고침 작업 시에 오류가 발생할 수 있습니다. 이는 사용자 및 역할과 관련된 데이터와 메타데이터가 우발적으로 삭제되지 않도록 하는 데 도움이 됩니다. 이러한 오브젝트 유형이 삭제되거나 새로 고침 작업이 실패하는지 여부를 결정하는 상황에 대한 자세한 내용은 사용자 및 역할의 초기 복제 섹션을 참조하십시오.
이러한 오브젝트의 삭제를 방지하려면 대상 계정의 스크립트에 의해 생성된 오브젝트에 전역 ID 적용하기 섹션을 참조하십시오.
대상 계정에서 다시 생성된 오브젝트¶
CREATE OR REPLACE 문을 사용하여 원본 계정의 기존 오브젝트를 바꾸는 경우 기존 오브젝트가 삭제되고 단일 트랜잭션에서 동일한 이름의 새 오브젝트가 생성됩니다. 예를 들어, 기존 테이블 t1
에 대해 CREATE OR REPLACE 문을 실행하면 테이블 t1
이 삭제되고 새 테이블 t1
이 생성됩니다. 자세한 내용은 CREATE TABLE의 사용법 노트 를 참조하십시오.
대상 계정에서 오브젝트가 바뀌면 새로 고침 작업 중에 DROP 및 CREATE 문이 원자적으로 실행되지 않습니다. 이는 오브젝트가 새 오브젝트로 다시 생성되는 동안 대상 계정에서 잠시 사라질 수 있음을 의미합니다.
복제 및 보안 정책¶
보안 정책과 참조(즉, 할당)를 포함하는 데이터베이스는 복제 그룹과 장애 조치 그룹을 사용하여 복제할 수 있습니다. 보안 정책에는 다음이 포함됩니다.
데이터베이스 복제 를 사용 중인 경우 데이터베이스 복제 및 보안 오브젝트 섹션을 참조하십시오.
인증, 비밀번호 및 세션 정책¶
복제 그룹 또는 장애 조치 그룹에서 정책(ALLOWED_DATABASES = policy_db
) 및 USERS
를 포함하는 데이터베이스를 지정할 때 사용자에 대한 인증, 비밀번호 및 세션 정책 참조가 복제됩니다.
정책 데이터베이스 또는 사용자가 대상 계정에 이미 복제된 경우, 정책을 성공적으로 복제하는 데 필요한 데이터베이스 및 오브젝트 유형을 포함하도록 원본 계정의 복제 그룹 또는 장애 조치 그룹을 업데이트합니다. 그런 다음 새로 고침 작업을 실행하여 대상 계정을 업데이트합니다.
사용자 수준 정책을 사용하지 않는 경우 USERS
를 복제 그룹 또는 장애 조치 그룹에 포함할 필요가 없습니다.
참고
정책은 계정 수준 정책 할당 및 사용자 수준 정책 할당과 동일한 계정에 있어야 합니다.
계정 또는 계정의 사용자에 대해 설정된 보안 정책이 있고 정책과 USERS
가 있는 policy_db
를 포함하도록 복제 또는 장애 조치 그룹을 업데이트하지 않으면 대상 계정에서 허상 참조가 발생합니다. 이 경우 허상 참조는 정책의 정규화된 이름이 원본 계정의 데이터베이스를 가리키므로 Snowflake가 대상 계정에서 정책을 찾을 수 없음을 의미합니다. 따라서 대상 계정 또는 대상 계정의 사용자는 보안 정책을 준수할 필요가 없습니다.
보안 정책을 성공적으로 복제하려면 복제 또는 장애 조치 그룹에 허상 참조 방지에 필요한 오브젝트 유형 및 데이터베이스가 포함되어 있는지 확인하십시오.
복제 및 시크릿¶
복제 또는 장애 조치 그룹을 사용하여 시크릿을 복제할 수 있을 뿐입니다. 시크릿이 포함된 데이터베이스, 시크릿을 참조하는 UDF 또는 프로시저가 포함된 데이터베이스, 단일 복제 또는 장애 조치 그룹에서 시크릿을 참조하는 통합을 지정합니다.
하나의 복제 또는 장애 조치 그룹에 시크릿이 포함된 데이터베이스가 있고 다른 복제 또는 장애 조치 그룹의 시크릿을 참조하는 통합이 있는 경우 다음과 같습니다.
통합을 먼저 복제한 다음 시크릿을 복제하면 작업이 성공함: 모든 오브젝트가 복제되고 허상 참조가 없습니다.
통합 전에 시크릿을 복제하고 시크릿이 대상 계정에 아직 존재하지 않는 경우 허상 참조를 방지하기 위해 대상 계정에 “자리 표시자 시크릿”이 추가됩니다. Snowflake는 자리 표시자 시크릿을 통합에 매핑합니다.
통합이 포함된 그룹을 복제하고 시크릿이 포함된 그룹에 대한 다음 새로 고침 작업 시, Snowflake는 대상 계정을 업데이트하여 자리 표시자 시크릿을 통합에서 참조되는 시크릿으로 바꿉니다.
시크릿을 복제하고 통합을
account1
에서account2
로 복제하지 않으면 시크릿을 사용할 통합이 없으므로 대상 계정(account2
)에서 통합이 작동하지 않습니다. 또한 장애 조치를 수행하고 대상 계정이 원본 계정으로 승격되면 통합이 작동하지 않습니다.account1
을 원본 계정으로 만들기 위해 장애 조치를 하기로 하면 시크릿과 통합 참조가 일치하고 자리 표시자 시크릿이 사용되지 않습니다. 오브젝트는 상호 참조할 수 있으므로 이를 통해 자격 증명이 포함된 보안 통합과 시크릿을 사용할 수 있습니다.
복제 및 물리적 복제¶
복제된 오브젝트는 보조 데이터베이스에 논리적이 아닌 물리적으로 복제됩니다. 즉, 표준 데이터베이스에서 복제된 테이블은 복제본에서 DML 연산을 통해 기존 데이터를 추가하거나 수정할 때까지 또는 그러한 경우를 제외하고 전체 데이터 저장소에 영향을 주지 않습니다. 그러나 복제된 테이블이 보조 데이터베이스에 복제되면, 물리적 데이터도 복제되며 계정의 데이터 저장소 사용량이 증가하게 됩니다.
복제 및 자동 클러스터링¶
기본 데이터베이스에서 Snowflake는 자동 클러스터링 을 사용하여 클러스터링된 테이블을 모니터링하고 필요에 따라 다시 클러스터링합니다. 새로 고침 작업의 일부로 클러스터된 테이블은 테이블 마이크로 파티션의 현재 정렬을 사용하여 보조 데이터베이스에 복제됩니다. 따라서 보조 데이터베이스의 클러스터링된 테이블에 대해 재클러스터링이 다시 수행되지 않으며 중복됩니다.
보조 데이터베이스에 클러스터된 테이블이 포함되어 있고 데이터베이스가 기본 데이터베이스가 되도록 승격되면 Snowflake는 이 데이터베이스의 테이블에 대한 자동 클러스터링을 시작하는 동시에 이전 기본 데이터베이스의 클러스터된 테이블 모니터링을 일시 중단합니다.
구체화된 뷰의 자동 클러스터링에 대한 자세한 내용은 이 항목의 복제 및 구체화된 뷰 섹션을 참조하십시오.
복제 및 대규모의 변동이 많은 테이블¶
테이블의 하나 이상의 행이 업데이트되거나 삭제되면 이 데이터를 기본 데이터베이스에 저장하는 영향을 받는 모든 마이크로 파티션이 다시 생성되고 보조 데이터베이스와 동기화되어야 합니다. 대규모의 변동이 큰 차원 테이블의 경우 복제 비용이 많이 소요될 수 있습니다.
상당한 복제 비용이 발생하는 대규모의 변동이 큰 차원 테이블의 경우 다음과 같은 완화 조치를 사용할 수 있습니다.
낮은 빈도로 이러한 테이블을 저장하는 모든 기본 데이터베이스를 복제합니다.
데이터 모델을 변경하여 변동을 줄입니다.
자세한 내용은 변동이 많은 대규모 테이블 요금 관리하기 섹션을 참조하십시오.
복제 및 Time Travel¶
Time Travel 및 Fail-safe 데이터는 보조 데이터베이스용으로 독립적으로 유지 관리되며 기본 데이터베이스에서 복제되지 않습니다. Time Travel을 사용하여 보조 데이터베이스의 테이블 및 뷰를 쿼리하면 기본 데이터베이스에서 동일한 쿼리를 실행할 때와 다른 결과가 생성될 수 있습니다.
- 과거 데이터:
Time Travel을 사용하여 기본 데이터베이스에서 쿼리할 수 있는 과거 데이터는 보조 데이터베이스에 복제되지 않습니다.
예를 들어, Snowpipe를 사용하여 10분마다 데이터가 테이블에 지속적으로 로드되고 보조 데이터베이스가 1시간마다 새로 고쳐진다고 가정해 보겠습니다. 새로 고침 작업은 최신 버전의 테이블만 복제합니다. 보존 윈도우 내 테이블의 모든 시간별 버전은 Time Travel을 사용하는 쿼리에 사용할 수 있지만 각 시간(개별 Snowpipe 로드) 내의 반복 버전은 사용할 수 없습니다.
- 데이터 보존 기간:
보조 데이터베이스의 테이블에 대한 데이터 보존 기간은 기본 데이터베이스의 테이블에 기록된 DML 연상(즉, 데이터 변경 또는 삭제)으로 보조 데이터베이스를 새로 고칠 때 시작됩니다.
참고
데이터 보존 기간 매개 변수 DATA_RETENTION_TIME_IN_DAYS 는 데이터베이스 자체가 아니라 보조 데이터베이스의 데이터베이스 오브젝트에만 복제됩니다. 매개 변수 복제에 대한 자세한 내용은 매개 변수 를 참조하십시오.
복제 및 구체화된 뷰¶
기본 데이터베이스에서 Snowflake는 구체화된 뷰의 자동 백그라운드 유지 관리를 수행합니다. 기본 테이블이 변경되면 테이블에 정의된 모든 구체화된 뷰가 Snowflake에서 제공하는 컴퓨팅 리소스를 사용하는 백그라운드 서비스에 의해 업데이트됩니다. 또한, 구체화된 뷰에 대해 자동 클러스터링이 활성화된 경우 기본 데이터베이스에서 필요에 따라 뷰가 모니터링되고 다시 클러스터링됩니다.
새로 고침 작업은 구체화된 뷰 정의 를 보조 데이터베이스에 복제하며, 구체화된 뷰 데이터 는 복제되지 않습니다. 보조 데이터베이스에서 구체화된 뷰의 자동 백그라운드 유지 관리는 기본적으로 활성화되어 있습니다. 기본 데이터베이스의 구체화된 뷰에 대해 자동 클러스터링이 활성화된 경우 보조 데이터베이스의 구체화된 뷰에 대한 자동 모니터링 및 재클러스터링도 활성화됩니다.
참고
구체화된 뷰의 자동화된 백그라운드 동기화에 대한 요금은 보조 데이터베이스가 포함된 각 계정에 부과됩니다.
복제 및 외부 테이블¶
기본 데이터베이스의 외부 테이블¶
기본 데이터베이스의 외부 테이블로 인해 현재 다음 오류 메시지와 함께 복제 또는 새로 고침 작업이 실패합니다.
003906 (55000): SQL execution error:
Primary database contains an external table '<database_name>'. Replication of a database with external table is not supported
이 오류를 방지하려면 외부 테이블을 복제되지 않는 별도의 데이터베이스로 이동하십시오. 또는 데이터베이스를 다른 계정으로 마이그레이션하는 경우 기본 데이터베이스를 복제하고 복제에서 외부 테이블을 삭제한 다음 복제된 데이터베이스를 복제할 수 있습니다. 대상 계정에서 보조 데이터베이스를 승격한 후에는 데이터베이스에서 외부 테이블을 다시 생성해야 합니다.
보조 데이터베이스의 외부 테이블¶
외부 테이블은 이전에 기본 데이터베이스였고 외부 테이블이 그 시간 중에 생성된 경우 보조 데이터베이스에 존재할 수 있습니다. 다른 데이터베이스가 지정된 기본 데이터베이스로 승격되면 그 데이터베이스가 보조 데이터베이스가 됩니다. 보조 데이터베이스의 외부 테이블로 인해 현재 다음 오류와 함께 새로 고침 작업이 실패합니다.
003958 (55000): SQL execution error:
Secondary database contains an external table '<table_name>'. Replication of a database with external table is not supported.
이 오류를 방지하려면 외부 테이블을 복제된 보조 데이터베이스가 아닌 별도의 데이터베이스로 이동하십시오.
복제 및 동적 테이블¶
동적 테이블 복제는 동적 테이블을 포함하는 기본 데이터베이스가 복제 그룹 또는 장애 조치 그룹에서 복제되는지에 따라 다르게 동작합니다.
동적 테이블 및 복제 그룹¶
동적 테이블을 포함하는 데이터베이스는 복제 그룹을 사용하여 복제할 수 있습니다. 동적 테이블이 종속된 기본 오브젝트는 동일한 복제 그룹에 있을 필요가 없습니다.
보조 오브젝트는 대상 계정에서 읽기 전용 입니다. 보조 복제 그룹이 대상 계정에서 삭제되면 그룹에 포함된 데이터베이스가 읽기/쓰기 상태가 됩니다. 하지만 복제 그룹에 포함된 모든 동적 테이블은 대상 계정에서 보조 그룹이 삭제된 후에도 읽기 전용 상태로 유지됩니다. 이러한 읽기 전용 동적 테이블에서는 DML 또는 동적 테이블 새로 고침이 발생할 수 없습니다.
동적 테이블, 장애 조치 그룹, 데이터베이스 복제¶
동적 테이블을 포함하는 데이터베이스는 장애 조치 그룹을 사용하여 복제할 수 있습니다. 동적 테이블이 종속된 기본 오브젝트를 반드시 동일한 장애 조치 그룹에 포함해야 합니다. 그렇지 않으면 새로 고침 작업 중에 다음 오류 메시지와 함께 허상 참조가 발생합니다.
002749 (55000): SQL execution error: Dynamic table <dt_name> has dependencies that are missing in the replication membership: <dependency_table_name>
데이터베이스 복제를 사용하여 데이터베이스에서 동적 테이블이 복제되는 경우에도 같은 사항이 적용됩니다. 허상 참조 오류를 방지하려면 동적 테이블이 종속된 기본 오브젝트를 동일한 데이터베이스에 포함해야 합니다.
보조 동적 테이블은 읽기 전용이며 새로 고쳐지지 않습니다. 장애 조치가 발생하고 보조 동적 테이블이 기본 동적 테이블로 승격된 후, 첫 번째 새로 고침이 다시 초기화된 다음 동적 테이블이 데이터 증분 새로 고침으로 구성된 경우 증분 새로 고침이 이어집니다.
복제 및 Snowpipe Streaming¶
기본 데이터베이스에서 Snowpipe Streaming 에 의해 채워진 테이블은 대상 계정의 보조 데이터베이스에 복제됩니다.
기본 데이터베이스에서는 테이블이 생성되고 채널 을 통해 행이 삽입됩니다. 오프셋 토큰 은 수집 진행 상황을 추적합니다. 새로 고침 작업은 기본 데이터베이스에서 보조 데이터베이스로 테이블 오브젝트, 테이블 데이터, 테이블과 연결된 채널 오프셋을 복제합니다.
원본 및 대상 계정에서 오프셋을 검색하기 위한 Snowflake Streaming 읽기 전용 작업을 사용할 수 있습니다.
Snowflake Streaming 쓰기 작업은 원본 계정에서만 사용할 수 있습니다.
클라이언트 openChannel API
채널 insertRow API
채널 insertRows API
데이터 손실 방지하기¶
장애 조치 시 데이터 손실을 방지하려면 업스트림 데이터 원본에 성공적으로 삽입된 행의 데이터 보존 시간이 복제 빈도보다 커야 합니다. 데이터가 기본 데이터베이스의 테이블에 삽입되고 장애 조치가 이루어진 후에 보조 데이터베이스에 데이터를 복제할 수 있는 경우 새로 승격된 기본 데이터베이스의 테이블에 동일한 데이터를 삽입해야 합니다. 다음은 예시 시나리오입니다.
Snowpipe Streaming과 Kafka 커넥터를 사용하여 기본 데이터베이스
repl_db
의 테이블t1
을 데이터로 채웁니다.offsetToken
은 기본 데이터베이스에서t1
에 대해 채널 1의 경우 100, 채널 2의 경우 100입니다.대상 계정에서 새로 고침 작업이 성공적으로 완료됩니다.
offsetToken
은 보조 데이터베이스에서t1
에 대해 채널 1의 경우 100, 채널 2의 경우 100입니다.기본 데이터베이스에서 더 많은 행이
t1
에 삽입됩니다.offsetToken
은 이제 기본 데이터베이스에서t1
에 대해 채널 1의 경우 200, 채널 2의 경우 200입니다.장애 조치가 이루어진 후 추가 행과 새 채널 오프셋을 보조 데이터베이스에 복제할 수 있습니다.
이 경우 새로 승격된 기본 데이터베이스에서 테이블 t1
의 각 채널에 누락된 오프셋이 100개 있습니다. 누락된 데이터를 삽입하려면 새로 승격된 원본 계정에서 Snowpipe Streaming을 위한 활성 채널 다시 열기 섹션을 참조하십시오.
요구 사항¶
Snowpipe Streaming 복제 지원에 필요한 최소 버전은 다음과 같습니다.
Snowflake Ingest SDK 버전 1.1.1 이상
Kafka 커넥터를 사용하는 경우: Kafka 커넥터 버전 1.9.3 이상
복제 및 스테이지¶
스테이지 오브젝트에는 다음 제약 조건이 적용됩니다.
Snowflake는 현재 그룹 기반 복제(복제 및 장애 조치 그룹)의 일부로 스테이지 복제를 지원합니다. 데이터베이스 복제에는 스테이지 복제가 지원되지 않습니다.
외부 스테이지를 복제할 수 있습니다. 단, 외부 스테이지의 파일은 복제되지 않습니다.
내부 스테이지를 복제할 수 있습니다. 내부 스테이지에서 파일을 복제하려면 스테이지에서 디렉터리 테이블을 활성화해야 합니다. Snowflake는 디렉터리 테이블에서 매핑한 파일만 복제합니다.
디렉터리 테이블이 있는 내부 스테이지를 복제할 경우 기본 또는 보조 스테이지에서 디렉터리 테이블을 비활성화할 수 없습니다. 디렉터리 테이블에는 복제된 파일과 COPY 문을 사용하여 로드된 파일에 대한 중요한 정보가 포함됩니다.
내부 스테이지의 디렉터리 테이블에 5GB보다 큰 파일이 포함되어 있으면 새로 고침 작업이 실패합니다. 이 제한 사항을 해결하려면 5GB보다 큰 파일을 다른 스테이지로 이동하십시오.
기본 스테이지 또는 보조 스테이지나 이전에 복제된 스테이지에서는 디렉터리 테이블을 비활성화할 수 없습니다. 스테이지가 포함된 데이터베이스를 복제 그룹이나 장애 조치 그룹에 추가하기 전에 다음 단계를 따르십시오.
기본 스테이지에서 디렉터리 테이블을 비활성화합니다.
5GB보다 큰 파일을 디렉터리 테이블이 활성화되지 않은 다른 스테이지로 이동합니다.
파일을 다른 스테이지로 이동한 후 기본 스테이지에서 디렉터리 테이블을 다시 활성화합니다.
사용자 스테이지와 테이블 스테이지의 파일은 복제되지 않습니다.
저장소 통합을 사용하는 명명된 외부 스테이지의 경우 장애 조치 전에 대상 계정에서 보조 저장소 통합에 대한 신뢰 관계를 구성해야 합니다. 자세한 내용은 보조 저장소 통합을 위한 클라우드 저장소 액세스 구성하기 섹션을 참조하십시오.
디렉터리 테이블이 있는 외부 스테이지를 복제하고 원본 디렉터리 테이블에 대해 자동 새로 고침 을 구성한 경우 장애 조치 전에 보조 디렉터리 테이블에 대해 자동 새로 고침을 구성해야 합니다. 자세한 내용은 보조 스테이지에서 디렉터리 테이블에 대한 자동 새로 고침 구성하기 섹션을 참조하십시오.
복제된 스테이지의 디렉터리 테이블이 스테이지의 복제된 파일과 일치하지 않을 경우 복사 명령이 예상보다 더 오래 걸릴 수 있습니다. 디렉터리 테이블을 일관되게 만들려면 ALTER STAGE … REFRESH 문으로 새로 고치십시오. 디렉터리 테이블의 일관성 상태를 확인하려면 SYSTEM$GET_DIRECTORY_TABLE_STATUS 함수를 사용하십시오.
복제 및 파이프¶
파이프 오브젝트에는 다음 제약 조건이 적용됩니다.
Snowflake는 현재 그룹 기반 복제(복제 및 장애 조치 그룹)의 일부로 파이프 복제를 지원합니다. 데이터베이스 복제에는 파이프 복제가 지원되지 않습니다.
Snowflake는 파이프가 대상 테이블과 동일한 복제 그룹에 속하는 경우에만 파이프의 복사 기록을 복제합니다.
알림 통합 복제는 지원되지 않습니다.
Snowflake는 최신 테이블이 잘린 후에만 로드 기록을 복제합니다.
알림을 받으려면 장애 조치 이전에 대상 계정에 보조 자동 수집 파이프를 구성해야 합니다. 자세한 내용은 보조 자동 수집 파이프에 대한 알림 구성하기 섹션을 참조하십시오.
장애 조치 후 예상 실행 상태가 아닌 파이프를 해결하려면 SYSTEM$PIPE_STATUS 함수를 사용하십시오.
저장 프로시저 및 사용자 정의 함수(UDF)의 복제¶
저장 프로시저와 UDF는 기본 데이터베이스에서 보조 데이터베이스로 복제됩니다.
저장 프로시저와 UDF 및 스테이지¶
저장 프로시저 또는 UDF가 어떤 스테이지의 파일에 종속되는 경우(예: 저장 프로시저가 어떤 스테이지에서 업로드되는 Python 코드로 정의된 경우), 스테이지와 스테이지의 파일을 보조 데이터베이스에 복제해야 합니다. 스테이지 복제에 대한 자세한 내용은 스테이지, 파이프 및 로드 기록 복제 섹션을 참조하십시오.
예를 들어 기본 데이터베이스에 스테이지에 저장된 코드를 가져오는 인라인 Python UDF가 있는 경우, 스테이지와 가져온 코드를 보조 데이터베이스에서 복제하지 않는 한 UDF는 작동하지 않습니다.
저장 프로시저와 UDF 및 외부 네트워크 액세스¶
저장 프로시저 또는 UDF가 외부 네트워크 위치 에 대한 액세스에 의존하는 경우 다음 오브젝트를 복제해야 합니다.
복제 또는 장애 조치 그룹의
allowed_integration_types
목록에 EXTERNAL ACCESS INTEGRATIONS가 포함되어야 합니다.네트워크 규칙이 포함된 데이터베이스.
외부 네트워크 위치로 인증하기 위한 자격 증명을 저장하는 시크릿이 포함된 데이터베이스.
시크릿 오브젝트가 보안 통합을 참조하는 경우 복제 또는 장애 조치 그룹의
allowed_integration_types
목록에 SECURITY INTEGRATIONS를 포함해야 합니다.
복제 및 스트림¶
이 섹션에서는 여러 계정에서 데이터베이스 복제하기 또는 계정 복제 및 장애 조치/장애 복구 에서 스트림을 복제할 때 권장되는 방법과 잠재적인 관심 영역에 대해 설명합니다.
스트림에 대해 지원되는 원본 오브젝트¶
복제된 스트림은 같은 데이터베이스의 테이블과 뷰에 대한 변경 데이터를 성공적으로 추적할 수 있습니다.
현재, 다음 원본 오브젝트 유형은 지원되지 않습니다.
외부 테이블
스트림 데이터베이스와 원본 오브젝트를 저장하는 데이터베이스가 모두 동일한 복제 또는 장애 조치 그룹 에 포함되지 않는 한, 스트림 데이터베이스와 별개인 데이터베이스의 테이블 또는 뷰.
공유 데이터베이스(즉, 공급자 계정에서 자신의 계정으로 공유되는 데이터베이스)의 테이블 또는 뷰
스테이지, 파이프 및 로드 기록 복제 를 활성화하면 디렉터리 테이블의 스트림 복제가 지원됩니다.
기본 데이터베이스에 지원되지 않는 원본 오브젝트가 있는 스트림이 포함되는 경우 데이터베이스 복제 또는 새로 고침 작업이 실패합니다. 스트림에 대한 원본 오브젝트가 삭제된 경우에도 작업이 실패합니다.
복제된 원본 오브젝트에서는 Append-only 스트림이 지원되지 않습니다.
데이터 중복 방지하기¶
참고
이 섹션에 설명된 시나리오 외에도, 보조 데이터베이스의 스트림은 새로 고침 작업에 처음 포함될 때 중복 행을 반환할 수 있습니다. 이 경우 중복 행 은 여러 METADATA$ACTION 열 값이 있는 단일 행을 나타냅니다.
최초 새로 고침 작업 후에는 보조 데이터베이스에서 이 특정 문제가 발생하지 않아야 합니다.
데이터 중복은 DML 작업이 고유성 검사 없이 스트림에서 같은 변경 데이터를 여러 번 쓸 때 발생합니다. 스트림 변경 데이터의 대상 테이블과 스트림이 별개의 데이터베이스에 저장되고 이러한 데이터베이스가 같은 그룹에서 복제되고 장애 조치되지 않는 경우에 데이터 중복이 발생할 수 있습니다.
예를 들어 스트림 s
에서 테이블 dt
로 변경 데이터를 정기적으로 삽입한다고 가정합니다. (이 예에서는 스트림의 원본 오브젝트가 중요하지 않습니다.) 별개의 데이터베이스가 스트림 및 대상 테이블을 저장합니다.
타임스탬프
t1
에서 스트림s
에 대한 원본 테이블에 행이 삽입되어 새 테이블 버전을 생성합니다. 스트림은 이 테이블 버전의 오프셋을 저장합니다.타임스탬프
t2
에서 스트림을 저장하는 보조 데이터베이스가 새로 고쳐집니다. 복제된 스트림s
는 이제 오프셋을 저장합니다.타임스탬프
t3
에서 스트림s
의 변경 데이터가 테이블dt
에 삽입됩니다.타임스탬프
t4
에서 스트림s
를 저장하는 보조 데이터베이스가 장애 조치됩니다.타임스탬프
t5
에서 스트림s
의 변경 데이터가 테이블dt
에 다시 삽입됩니다.
이 상황을 방지하려면 스트림과 대상 테이블을 저장하는 데이터베이스를 함께 복제하고 장애 조치하십시오.
작업 WHEN 절의 스트림 참조¶
WHEN boolean_expr
절에서 스트림을 참조하는 복제된 작업을 실행할 때 예기치 않은 동작을 방지하려면 다음 중 하나를 수행하는 것이 좋습니다.
같은 데이터베이스에 작업과 스트림 생성 또는
스트림이 해당 스트림을 참조하는 작업과는 다른 데이터베이스에 저장되어 있는 경우 두 데이터베이스를 모두 같은 장애 조치 그룹 에 포함합니다.
작업이 별개의 데이터베이스에 있는 스트림을 참조하고 두 데이터베이스가 모두 같은 장애 조치 그룹에 포함되지 않을 경우에는 작업이 포함된 데이터베이스를 스트림이 포함된 데이터베이스 없이 장애 조치할 수 있습니다. 이 시나리오에서는 작업이 장애 조치된 데이터베이스에서 재개되는 경우 작업이 실행을 시도하고 참조된 스트림을 찾을 수 없을 때 오류를 기록합니다. 이 문제는 스트림이 포함된 데이터베이스를 장애 조치하거나 작업이 포함된 장애 조치된 데이터베이스와 동일한 계정에 데이터베이스와 스트림을 다시 생성함으로써 해결할 수 있습니다.
스트림 부실¶
기본 데이터베이스의 스트림이 부실 해진 경우 보조 데이터베이스에서 복제된 스트림도 부실해져 쿼리할 수 없거나 스트림의 변경 데이터를 사용할 수 없습니다. 이 문제를 해결하려면 기본 데이터베이스에서 스트림을 다시 만드십시오(CREATE OR REPLACE STREAM 사용). 보조 데이터베이스가 새로 고쳐지면 복제된 스트림을 다시 읽을 수 있습니다.
다시 생성된 스트림의 오프셋은 기본적으로 현재 테이블 버전입니다. Time Travel을 사용하여 이전 테이블 버전을 가리키는 스트림을 다시 만들 수 있지만, 복제된 스트림은 읽을 수 없는 상태로 남습니다. 자세한 내용은 이 항목의 스트림 복제 및 Time Travel 을 참조하십시오.
스트림 복제 및 Time Travel¶
기본 데이터베이스가 장애 조치된 후 데이터베이스의 스트림이 Time Travel 을 사용하여 마지막 새로 고침 타임스탬프 이전의 시점에서 원본 오브젝트의 테이블 버전 을 읽는 경우 복제된 스트림을 쿼리할 수 없거나 변경 데이터를 사용할 수 없습니다. 마찬가지로, SELECT 문의 CHANGES 절을 사용하여 마지막 새로 고침 타임스탬프 이전의 시점에서 원본 오브젝트의 변경 데이터를 쿼리하면 오류가 발생하며 실패합니다.
이는 새로 고침 작업으로 테이블 기록이 단일 테이블 버전으로 축소되기 때문입니다. 새로 고침 작업 타임스탬프 전에 생성된 반복 테이블 버전은 복제된 원본 오브젝트의 테이블 기록에 보존되지 않습니다.
다음 예를 살펴보겠습니다.
테이블
t1
이 변경 추적을 사용하는 기본 데이터베이스에 생성됩니다(테이블 버전tv0
). 이후의 DML 트랜잭션으로 테이블 버전tv1
및tv2
가 생성됩니다.테이블
t1
이 포함된 보조 데이터베이스가 새로 고쳐집니다. 이 복제된 테이블의 테이블 버전은tv2
이지만, 테이블 기록은 복제되지 않습니다.Time Travel을 사용하여 오프셋이 테이블 버전
tv1
로 설정된 기본 데이터베이스에 스트림이 생성됩니다.보조 데이터베이스가 장애 조치되어 기본 데이터베이스가 됩니다.
테이블 버전
tv1
이 테이블 기록에 없으므로 스트림s1
을 쿼리하면 오류가 반환됩니다.
테이블 t1
에 대한 후속 DML 트랜잭션에서 테이블 버전을 tv3
으로 반복할 때 스트림 s1
에 대한 오프셋이 진행됩니다. 스트림을 다시 읽을 수 있습니다.
데이터 손실 방지하기¶
장애 조치 작업 전에 보조 데이터베이스에 대한 가장 최근 새로 고침 작업이 완료되지 않을 때 데이터 손실이 발생할 수 있습니다. 위험을 최소화하려면 보조 데이터베이스를 자주 새로 고치는 것이 좋습니다.
복제 및 작업¶
이 섹션에서는 여러 계정에서 데이터베이스 복제하기 또는 계정 복제 및 장애 조치/장애 복구 에서의 작업 복제에 대해 설명합니다.
복제 시나리오¶
다음 표에는 다양한 작업 시나리오에 대한 설명이 나와 있고 작업의 복제 여부가 명시되어 있습니다. 명시된 경우를 제외하면 이들 시나리오는 독립 실행형 작업과 작업 그래프 의 작업에 모두 적용됩니다.
시나리오 |
복제됨 |
참고 |
---|---|---|
작업이 생성되어 (EXECUTE TASK 를 사용해) 수동으로 재개되거나 실행되었습니다. 작업을 재개하거나 실행하면 초기 작업 버전이 생성됩니다. |
✔ |
|
작업이 생성되었지만 재개되거나 실행되지 않았습니다. |
❌ |
|
(CREATE OR REPLACE TASK 를 사용해) 작업이 다시 생성되었지만 재개되거나 실행되지 않았습니다. |
✔ |
작업이 다시 생성되기 전의 최신 버전이 복제됩니다. 작업을 재개하거나 수동으로 실행하면 새 버전이 커밋됩니다. 데이터베이스가 다시 복제되면 새 버전이나 최신 버전이 보조 데이터베이스에 복제됩니다. |
작업이 생성되고 재개 또는 실행된 이후에 수정되었지만(ALTER TASK 사용), 재개되거나 다시 실행되지 않았습니다. |
✔ |
작업을 재개하거나 수동으로 실행하면 작업 매개 변수에 대한 모든 변경 사항을 포함한 새 버전이 커밋됩니다. 새 변경 사항이 커밋되지 않았으므로 작업이 일시 중단되고 수정되기 전의 최신 버전이 복제됩니다. 수정된 작업이 보존 기간(현재 30일) 이내에 재개되지 않으면 작업의 최신 버전이 삭제됩니다. 이 기간 이후, 작업이 다시 재개되지 않으면 보조 데이터베이스에 복제되지 않습니다. |
독립 실행형 작업이 생성되고 재개 또는 실행되었지만, 그 이후에 삭제되었습니다. |
❌ |
|
작업 그래프의 루트 작업이 생성되고 재개 또는 실행되었지만, 그 이후에 일시 중단되고 삭제되었습니다. |
❌ |
전체 작업 그래프가 보조 데이터베이스에 복제되지 않습니다. |
작업 그래프의 하위 작업이 생성되고 재개 또는 실행되지만, 그 이후에 일시 중단되고 삭제됩니다. |
✔ |
(작업이 일시 중단되고 삭제되기 전) 최신 버전의 작업 그래프가 보조 데이터베이스에 복제됩니다. |
복제된 작업의 재개 또는 일시 중단 상태¶
다음 조건이 모두 충족되면 작업이 재개된 상태의 보조 데이터베이스에 복제됩니다.
작업이 완료될 때까지 복제 또는 새로 고침 작업이 시작될 때 독립 실행형 또는 루트 작업은 기본 데이터베이스에서 재개된 상태입니다. 작업이 이 기간의 일부 동안에만 재개된 상태인 경우에도 재개된 상태로 복제될 수 있습니다.
하위 작업은 최신 버전의 작업에서 재개된 상태입니다.
상위 데이터베이스가 같거나 다른 복제 또는 장애 조치 그룹 의 역할 오브젝트와 함께 대상 계정에 복제되었습니다.
역할과 데이터베이스가 복제된 후 각각 ALTER REPLICATION GROUP … REFRESH 또는 ALTER FAILOVER GROUP … REFRESH 를 실행하여 대상 계정의 오브젝트를 새로 고쳐야 합니다. ALTER DATABASE … REFRESH 를 실행하여 데이터베이스를 새로 고치면 데이터베이스에서 작업의 상태가 일시 중단으로 변경됩니다.
복제 또는 새로 고침 작업은 최신 테이블 버전이 커밋될 때 최신 상태였던 작업에 대한 권한 부여를 포함합니다. 자세한 내용은 이 항목의 복제 작업 및 권한 부여 를 참조하십시오.
이러한 조건이 충족되지 않으면 작업이 일시 중단된 상태에서 보조 데이터베이스에 복제됩니다.
참고
모든 보조 작업은 state
에 관계없이 일시 중단 됩니다. 자세한 내용은 장애 조치 후 작업 실행 을 참조하십시오.
복제 작업 및 권한 부여¶
상위 데이터베이스가 같거나 다른 복제 또는 장애 조치 그룹의 역할 오브젝트와 함께 대상 계정에 복제되면 데이터베이스의 작업에 부여된 권한도 복제됩니다.
다음 논리에 따라 복제 또는 새로 고침 작업에서 복제되는 작업 권한이 결정됩니다.
현재 작업 소유자(즉, 작업에 대한 OWNERSHIP 권한이 있는 역할)가 작업이 마지막으로 재개되었을 때와 동일한 역할인 경우에는 작업에 대한 모든 현재 권한 부여가 보조 데이터베이스에 복제됩니다.
현재 작업 소유자가 작업이 마지막으로 재개되었을 때와 동일한 역할이 아닌 경우에는 작업 버전에서 소유자 역할에 부여된 OWNERSHIP 권한만 보조 데이터베이스에 복제됩니다.
현재 작업 소유자 역할을 사용할 수 없는 경우(예: 하위 작업이 삭제되지만 새 버전의 작업 그래프가 아직 커밋되지 않은 경우) 작업 버전에서 소유자 역할에 부여된 OWNERSHIP 권한만 보조 데이터베이스에 복제됩니다.
장애 조치 후 작업 실행¶
보조 장애 조치 그룹이 기본 그룹 역할을 하도록 승격된 후 장애 조치 그룹 내의 데이터베이스에서 재개된 모든 작업은 점진적으로 예약됩니다. 재개된 모든 독립 실행형 작업과 작업 그래프의 정상적인 예약을 복원하는 데 필요한 시간은 데이터베이스에서 재개된 작업 수에 따라 다릅니다.
과거 사용 데이터¶
기본 데이터베이스의 활동에 대한 과거 사용 데이터는 보조 데이터베이스에 복제되지 않습니다. 각 계정에는 고유한 쿼리 내역, 로그인 내역 등이 있습니다.
과거 사용 데이터에는 다음 Snowflake Information Schema 테이블 함수 또는 Account Usage 뷰에서 반환된 쿼리 데이터가 포함됩니다.
COPY_HISTORY
LOGIN_HISTORY
QUERY_HISTORY
등