# 복제(Replications)

원본 데이터베이스의 데이터를 다른 데이터베이스로 복사한 후, 이를 동기화시켜 사용할 수 있게(대부분 읽기전용으로 사용)하는 것

 

복제를 위한 서버의 역할

 

게시자

다른서버에 동기화될 데이터가 포함된 원본 데이터베이스를 유지 관리하는 서버

 

배포자

게시자가 제공하는 게시를 가져와 구독자에게 배포하는 역할을 맡은 서버

※ 대부분 서버 하나가 게시자와 배포자 역할을 동시에 담당하는데, 이를 '로컬 배포자'라고 합니다.

 

구독자

게시되는 데이터를 받거나 가져가는 서버

 

# 복제 유형

 

스냅숏 복제(Snapshot Replication)

복제를 구성하면 게시 전체를 구독자에게 정기적으로 보내서 동기화한다.

 

스냅샷 복제는 특정 시간에 나타나는 그대로 데이터를 배포하고 데이터 업데이트를 모니터링하지 않습니다. 동기화가 일어나면 전체 스냅샷이 생성되어 구독자에게 전송됩니다.

 참고

스냅샷 복제는 단독으로 사용할 수 있지만 게시에서 지정한 모든 개체 및 데이터의 복사본을 만드는 스냅샷 프로세스는 일반적으로 트랜잭션 및 병합 게시에 대한 초기 데이터 및 데이터베이스 개체 집합을 제공하는 데에도 사용됩니다.

다음 조건 중 하나 이상이 해당될 경우 스냅샷 복제를 단독으로 사용하는 것이 좋습니다.

  • 데이터가 자주 변경되지 않습니다.

  • 게시자 측에서 최신이 아닌 데이터 복사본을 일정 기간 동안 보유할 수 있습니다.

  • 소량의 데이터를 복제합니다.

  • 짧은 기간 동안 많은 양의 데이터가 변경됩니다.

 

트랜잭션 복제(Transactionsal Replication)

스냅숏 복제를 한 후, 데이터 변경과 스키마 변경 내용을 1) 그 판독기 에이전트가 수집해 배포 데이터베이스에 기록하면, 2) 배포 에이전트가 그 내용을 읽어 구독자에 반영하여, 일관된 데이터 상태를 유지하는 유형

-> 거의 실시간 동기화를 수행!

 

트랜잭션 복제는 일반적으로 게시 데이터베이스 개체 및 데이터의 스냅샷으로 시작됩니다. 일반적으로 초기 스냅샷이 사용되자마자 게시자에서의 후속 데이터 변경 내용 및 스키마 수정 내용이 구독자로 배달됩니다. 이러한 작업은 거의 실시간으로 수행됩니다. 데이터 변경 내용은 게시자에서 발생한 것과 같은 순서 및 같은 트랜잭션 경계 내에서 구독자에 적용되므로 게시 내에서는 트랜잭션 일관성이 보장됩니다.

트랜잭션 복제는 일반적으로 서버 간 환경에 사용되며 다음과 같은 경우에 적합합니다.

  • 증분 변경 내용을 발생과 동시에 구독자로 전파하려고 합니다.

  • 애플리케이션이 게시자에서 변경이 수행된 시점과 해당 변경 내용이 구독자에 도달한 시점 간의 짧은 대기 시간이 필요합니다.

  • 애플리케이션이 중간 데이터 상태에 액세스해야 합니다. 예를 들어 한 행이 5번 변경될 경우 트랜잭션 복제를 사용하면 애플리케이션은 행의 실질적인 데이터 변경만이 아닌 모든 변경(예: 트리거 실행)에 응답할 수 있습니다.

  • 게시자가 많은 양의 삽입, 업데이트 및 삭제 작업을 수행합니다.

  • 게시자 또는 구독자가 Oracle과 같은SQL Server 이외의 데이터베이스입니다.

기본적으로 변경 내용은 게시자로 다시 전파되지 않기 때문에 트랜잭션 게시에 대한 구독자는 읽기 전용으로 취급됩니다. 그러나 트랜잭션 복제는 구독자의 업데이트를 허용하는 다양한 옵션을 제공합니다.

 

 

병합 복제(Merge Replication)

트리거를 이용하여 게시자와 구독자의 변경 내용을 변경 추적 테이블에 기록하는 유형

 

피아 투 피어 복제(Peer To Peer Replication)

여러 SQL Server 인스턴스에 걸쳐 데이터베이스 복제본을 유지 관리해서, 확장성과 고가용성의 이점을 제공하는 복제 유형

 

출처 : MSDN docs.microsoft.com/ko-kr/sql/relational-databases/replication/transactional/transactional-replication?view=sql-server-ver15

'MSSQL 기본' 카테고리의 다른 글

[MSSQL] ColumnStore Index  (0) 2021.01.25
[MSSQL] Covered Index / Include Index  (0) 2021.01.23
[MSSQL] SQL Server 아키텍처  (0) 2020.10.29
[MSSQL] SQL문장종류 / DML, DDL, DCL, TCL  (0) 2020.10.29
[MSSQL] 트랜잭션이란?  (0) 2020.10.27

+ Recent posts