SQL Server는 다음 세 종류의 복제를 제공합니다:
1. | 스냅샷. 데이터 뷰 전체를 다른 컴퓨터에 복사하는 것을 말합니다. 이 경우 대상 데이터베이스 뷰를 새 버전이 덮어씁니다. 스냅샷 복제는 특정한 순간의 데이터를 모습 그대로 배포하며 모니터링을 실시해 데이터를 업데이트하지는 않습니다. 따라서 스냅샷 복제는 자주 변경되지 않는 데이터를 복제하거나 가장 최신 값이 필수적이지 않은 경우에 많이 사용됩니다. 동기화가 이루어지면 스냅샷 전체가 만들어져서 가입자에게 전송됩니다. | ||||||
2. | 트랜잭션. 한 컴퓨터에서 실행되는 트랜잭션, 즉 INSERT, UPDATE, DELETE 문이 다른 컴퓨터로 복제됩니다. 트랜잭션 복제를 사용하면 데이터의 초기 스냅샷이 가입자에게 적용되며 게시자가 데이터를 변경하면 개별 트랜잭션이 캡처되어 가입자에게 전파됩니다. 트랜잭션 복제는 다음 경우에 유용합니다:
| ||||||
3. | 병합. 한 컴퓨터가 업데이트되면 나중에 다른 컴퓨터로 복제됩니다. 병합 복제는 데이터를 게시자에게서 가입자에게 배포하여 연결되어 있거나 연결이 끊어져 있는 동안 게시자와 가입자가 모두 업데이트를 한 다음 연결되어 있을 때 사이트 간에 업데이트 내용을 병합하는 절차입니다. |
병합 복제를 실시하면 여러 사이트를 독립적으로 실행할 수 있으며, 시간이 지나면 결과는 같아집니다. 맨 처음의 스냅샷을 가입자에게 전달한 다음 게시자와 가입자에게 있는 게시된 데이터의 변경 사항을 추적합니다. 각 서버의 데이터는 정해진 시간이나 요청할 때에 계속해서 동기화됩니다. 업데이트가 두 개 이상 서버에서 이루어지므로 게시나 또는 두 명 이상의 가입자가 동일한 데이터를 업데이트했을 수도 있습니다. 따라서 업데이트 내용을 병합할 때 충돌이 일어날 수 있습니다.
병합 복제에는 이러한 충돌을 해결하기 위해 기본값 및 사용자 정의 선택 사항이 있으므로 사용자는 병합 게시를 구성하고 이러한 선택 사항을 정의할 수 있습니다. 충돌이 발생하면 병합 에이전트가 해결 프로그램을 호출하며, 이 프로그램은 어떤 데이터를 수락하여 다른 사이트로 전파할지를 결정합니다. 병합 복제는 다음 경우에 유용합니다:
| • | 다수의 가입자가 각자 다른 시간에 데이터를 업데이트하고 변경 사항을 게시자 및 다른 가입자에게 전파해야 하는 경우. |
| • | 가입자가 데이터를 수신하여 오프라인에서 변경한 다음 그 후에 변경 사항을 게시자 및 다른 가입자와 동기화해야 하는 경우. |
| • | 여러 사이트에서 데이터를 업데이트하는 경우 그렇게 많은 충돌이 예상되지는 않습니다. 이는 데이터를 파티션으로 필터링한 다음 다른 가입자에게 게시하거나 응용 프로그램을 사용하기 때문입니다. 하지만 충돌이 실제로 발생한 경우에는 ACID 속성 위반도 수락됩니다. |