데이터베이스 복제 고려 사항

이 항목에서는 데이터베이스 복제 를 사용할 때 보조 데이터베이스에서 특정 Snowflake 기능의 동작에 대해 설명합니다. 복제된 오브젝트 및 데이터 사용에 대한 추가 지침은 복제 고려 사항 섹션을 참조하십시오.

참고

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

이 항목의 내용:

데이터베이스 복제 및 보안 오브젝트

이 섹션에서는 보안 정책과 시크릿의 데이터베이스 복제 동작에 대해 설명합니다.

마스킹 정책 및 행 액세스 정책

다음 조건 중 하나에 해당하면 복제 작업이 실패합니다.

  • 기본 데이터베이스가 Enterprise 이상 계정에 있고 정책/태그가 포함되어 있지만, 복제가 승인된 1개 이상의 계정이 하위 에디션에 있습니다.

  • 기본 데이터베이스에 포함된 오브젝트에 다른 데이터베이스의 태그에 대한 현수 참조 가 있습니다.

복제 그룹 또는 장애 조치 그룹 에서 여러 데이터베이스를 복제할 때 데이터베이스 복제에 대한 현수 참조 동작을 피할 수 있습니다.

태그 기반 마스킹 정책

다음 조건 중 하나에 해당하면 복제 작업이 실패합니다.

  • 기본 데이터베이스가 Enterprise 이상 계정에 있고 정책/태그가 포함되어 있지만, 복제가 승인된 1개 이상의 계정이 하위 에디션에 있습니다.

  • 기본 데이터베이스에 포함된 오브젝트에 다른 데이터베이스의 태그에 대한 현수 참조 가 있습니다.

태그 기반 마스킹 정책에 대한 자세한 내용은 태그 기반 마스킹 정책 섹션을 참조하십시오.

비밀번호 및 세션 정책

다음 조건 중 하나에 해당하면 복제 작업이 실패합니다.

  • 기본 데이터베이스가 Enterprise 이상 계정에 있고 정책이 포함되어 있지만, 복제가 승인된 1개 이상의 계정이 하위 에디션에 있습니다.

  • 기본 데이터베이스에 포함된 이러한 오브젝트 중 하나가 같은 계정의 사용자에게 연결됩니다. 이 경우 Snowflake는 복제 작업에 실패합니다.

사용자 참조로 인한 데이터베이스 복제 작업이 실패하지 않도록 하려면 복제 그룹 또는 장애 조치 그룹 을 대신 사용하십시오.

자세한 내용은 복제 및 보안 정책 섹션을 참조하십시오.

시크릿

데이터베이스 복제를 사용하여 시크릿을 복제할 수 없습니다. 복제 또는 장애 조치 그룹을 사용하여 시크릿을 복제합니다. 자세한 내용은 복제 및 시크릿 섹션을 참조하십시오.

허상 참조

다른 데이터베이스 오브젝트에 대한 참조

기본 데이터베이스의 뷰 또는 테이블 제약 조건이 다른 데이터베이스의 오브젝트를 참조하는지 주의 깊게 분석하십시오. 데이터베이스 오브젝트의 경우 Account Usage OBJECT_DEPENDENCIES 뷰 에서 오브젝트 종속성 을 볼 수 있습니다.

다음 표에서는 데이터베이스의 오브젝트(참조하는 오브젝트)가 다른 데이터베이스의 오브젝트(참조되는 오브젝트)를 참조할 때 데이터베이스 복제 동작에 대해 설명합니다.

참조하는 오브젝트

참조되는 오브젝트

복제 동작

구체화되지 않은 뷰

오브젝트

성공

구체화된 뷰

오브젝트

실패

구체화된 뷰

삭제된 오브젝트

실패

외래 키 제약 조건

기본 키

실패

테이블

시퀀스

실패

마스킹 정책, 행 액세스 정책 또는 태그

오브젝트 정책/태그가 할당되는 대상

실패

스트림

오브젝트

실패

구체화되지 않은 뷰

다른 데이터베이스의 오브젝트를 참조하는 구체화되지 않은 뷰(예: 테이블 열, 다른 뷰, UDFs 또는 스테이지)의 경우 이러한 타입의 참조는 이름을 기반으로 하므로 복제가 가능합니다. 이름 기반 참조이므로 복제가 실패하지 않지만, 다른 데이터베이스가 동일한 리전에서 복제되지 않으면 보조 데이터베이스의 뷰에 대한 쿼리가 실패합니다.

예를 들어, d1 데이터베이스의 v1 뷰가 d1d2 데이터베이스의 t1t2 테이블을 각각 참조한다고 가정해 보겠습니다. d1 보조 데이터베이스에서 뷰 v1 을 쿼리하려면 d2 보조 데이터베이스도 계정에 있어야 합니다(예: 다른 보조 데이터베이스). 또한, 기본 데이터베이스와의 일관된 쿼리 결과를 위해서는 보조 데이터베이스 d1d2 를 동시에 새로 고쳐야 합니다.

구체화된 뷰

구체화된 뷰의 허상 참조로 인해 다음 오류 메시지가 표시되며 복제가 실패할 수 있습니다.

Dangling references in the snapshot. Correct the errors before refreshing again. The following references are missing (referred entity <- [referring entities])
Copy

이러한 허상 참조는 다음과 같은 경우에 발생할 수 있습니다.

  • 구체화된 뷰는 또 다른 데이터베이스의 오브젝트를 참조합니다.

    구체화된 뷰는 이름이 아닌 ID로 오브젝트를 참조합니다. 데이터베이스 스냅샷은 데이터베이스 외부의 오브젝트에 대한 ID 기반 참조를 확인할 수 없습니다.

    이 제한을 해결하려면 동일한 복제 그룹 또는 장애 조치 그룹 에서 두 데이터베이스를 함께 복제하십시오. 또는 구체화된 뷰와 이들 뷰가 참조하는 오브젝트를 동일한 데이터베이스에 저장할 수 있습니다.

  • 구체화된 뷰가 유효하지 않습니다(즉, 삭제된 오브젝트 를 참조함).

    유효하지 않은 구체화된 뷰에 대한 허상 참조 오류를 방지하려면 구체화된 뷰의 문제를 식별하고 수정하십시오. 구체화된 뷰 항목의 문제 해결 섹션을 참조하십시오.

제약 조건

현재 외래 키가 현수된 경우 복제가 실패하며 다음과 같은 오류 메시지가 표시됩니다.

Dangling references in the snapshot. Correct the errors before refreshing again. The following references are missing
(referredentity <- [referring entities])
Copy

이러한 상황은 기본 데이터베이스의 외래 키가 다른 데이터베이스의 기본 키를 참조하거나 그 반대의 경우에 발생합니다. 이는 제약 조건 참조가 ID 기반이기 때문입니다. 데이터베이스 스냅샷은 자체 데이터베이스 외부의 오브젝트에 대한 ID 기반 참조를 확인할 수 없습니다.

계정에서 외래 키 참조를 보려면 Information Schema TABLE_CONSTRAINTS 뷰 또는 Account Usage TABLE_CONSTRAINTS 뷰 를 쿼리하십시오.

이 제한을 해결하려면 동일한 복제 그룹 또는 장애 조치 그룹 에서 두 데이터베이스를 함께 복제하십시오. 또는 동일한 데이터베이스에 연결된 테이블을 저장할 수 있습니다.

시퀀스

현재, 현수 시퀀스로 인해 복제가 실패하고 다음 오류 메시지가 표시됩니다.

Dangling references in the snapshot. Correct the errors before refreshing again. The following references are missing
(referred entity <- [referring entities])
Copy

이러한 상황은 기본 데이터베이스의 테이블이 다른 데이터베이스의 시퀀스를 참조할 때 발생합니다. 이는 시퀀스 참조가 ID 기반이기 때문입니다. 데이터베이스 스냅샷은 자체 데이터베이스 외부의 오브젝트에 대한 ID 기반 참조를 확인할 수 없습니다.

이 제한을 해결하려면 동일한 복제 그룹 또는 장애 조치 그룹 에서 두 데이터베이스를 함께 복제하십시오. 또는 동일한 데이터베이스에서 시퀀스를 참조할 수 있습니다.

마스킹 정책 및 행 액세스 정책과 태그

마스킹 정책, 행 액세스 정책 또는 태그 에 대한 현수 참조로 인해 다음 오류 메시지와 함께 복제가 실패하게 됩니다.

Dangling references in the snapshot. Correct the errors before refreshing again. The following references are missing
(referred entity <- [referring entities])
Copy

이 상황은 정책/태그와 정책/태그가 할당된 오브젝트가 다른 데이터베이스에 존재할 때 발생합니다. 예를 들어 db1.s1.t1 로 명명된 테이블, db2.s1.rap1 로 명명된 행 액세스 정책, 행 액세스 정책이 테이블에 할당됩니다.

이 제한을 해결하려면 동일한 복제 그룹 또는 장애 조치 그룹 에서 두 데이터베이스를 함께 복제하십시오.

삭제된 오브젝트 참조

동일한 또는 다른 데이터베이스의 다른 오브젝트가 참조하는 오브젝트를 삭제하면 현수 참조가 생성됩니다. 기본 데이터베이스의 오브젝트가 삭제된 오브젝트를 참조하는 경우 복제 작업이 실패하며 다음 메시지가 표시됩니다.

Dangling references in the snapshot. Correct the errors before refreshing again. The following references are missing
(referred entity <- [referring entities])
Copy

이 제한을 해결하려면 다음 단계 중 하나 를 완료하는 것이 좋습니다.

  • 참조된 오브젝트의 삭제를 취소합니다.

  • 참조 오브젝트를 수정합니다(예: ALTER MATERIALIZED VIEW 를 사용하여 구체화된 뷰 수정). 다른 오브젝트를 참조하거나 삭제된 오브젝트에 대한 참조를 제거합니다.

  • 삭제된 오브젝트를 참조하는 기본 데이터베이스의 모든 오브젝트를 삭제합니다.

여러 데이터베이스 복제

여러 데이터베이스가 복제되는 경우 데이터베이스 전반에서 시점 일관성을 사용할 수 없습니다. 각 기본 데이터베이스의 스냅샷은 독립적으로 생성되고 보조 데이터베이스에 대한 변경 사항은 독립적으로 커밋됩니다. 이는 서로 다른 데이터베이스의 테이블 간에 조인하거나 데이터베이스 간 트랜잭션을 사용하는 뷰가 있는 경우 문제가 될 수 있습니다. 예를 들어, 두 개의 기본 데이터베이스를 원자적으로 업데이트하는 트랜잭션은 보조 데이터베이스에 동시에 반영되지 않을 수 있습니다.

특정 시점 일관성으로 여러 데이터베이스를 복제하려면 복제 그룹 또는 장애 조치 그룹 을 사용하십시오.