병합 아티클의 처리 순서 지정Specify the Processing Order of Merge Articles

MicrosoftMicrosoft SQL Server 2005SQL Server 2005부터 병합 게시에 대한 아티클의 기본 처리 순서를 덮어쓸 수 있게 되었습니다.Beginning with MicrosoftMicrosoft SQL Server 2005SQL Server 2005, it is possible to override the default order of article processing for merge publications. 트리거를 통해 참조 무결성을 정의하고 이러한 트리거가 특정 순서로 발생해야 할 경우 이러한 작업이 유용할 수 있습니다.This is useful, for example, if you define referential integrity through triggers and those triggers must fire in a certain order.

아티클의 처리 순서를 지정하려면To specify the processing order of articles

처리 순서 결정 방식How Processing Order is Determined

병합 동기화 중 아티클은 기본적으로 기본 테이블에 정의된 DRI(선언적 참조 무결성) 제약 조건을 포함하여 개체 간 종속 관계에 필요한 순서대로 처리됩니다.During merge synchronization, articles are, by default, processed in the order required by the dependencies between objects, including the declarative referential integrity (DRI) constraints defined on the base tables. 아티클 처리 시 테이블에 변경 내용을 열거한 다음 이들 변경 내용을 적용합니다.Processing involves enumerating the changes to a table and then applying those changes. DRI가 없지만 조인 필터 또는 논리적 레코드가 테이블 아티클 사이에 존재할 경우 아티클은 필터 및 논리적 레코드에 필요한 순서대로 처리됩니다.If no DRI is present but join filters or logical records exist between table articles, the articles are processed in the order required by the filters and logical records. DRI, 조인 필터, 논리적 레코드 또는 기타 종속 관계를 통해 다른 아티클과 관련되어 있지 않은 아티클은 sysmergearticles(Transact-SQL) 시스템 테이블에서의 아티클 애칭에 따라 처리됩니다.Articles not related to any other article through DRI, join filters, logical records, or other dependencies are processed according to the article nickname in the sysmergearticles (Transact-SQL) system table.

SalesOrderHeader 테이블에는 기본 키 열 SalesOrderID 가 있고 SalesOrderDetail 테이블에는 해당 외래 키 열 SalesOrderID 가 있는 SalesOrderHeaderSalesOrderDetail 테이블을 포함하는 게시가 있다고 가정합니다.Consider a publication that includes the tables SalesOrderHeader and SalesOrderDetail with a primary key column SalesOrderID in the SalesOrderHeader table and a corresponding foreign key column SalesOrderID in the SalesOrderDetail table. 이 게시를 동기화할 때 병합 복제에서 SalesOrderHeader 에 새 행을 삽입한 다음 SalesOrderDetail에 연결된 행을 삽입하여 외래 키 위반을 방지합니다.During synchronization, merge replication prevents foreign key violations by inserting any new rows in SalesOrderHeader before inserting associated rows in SalesOrderDetail. 마찬가지로 SalesOrderDetail 에서 행을 삭제한 다음 SalesOrderHeader에서 연결된 행을 삭제합니다.Similarly, rows are deleted from SalesOrderDetail before the associated row is deleted from SalesOrderHeader.

그러나 일부 응용 프로그램에서는 DRI가 아닌 응용 프로그램 수준에서나 데이터베이스 트리거를 통해 참조 무결성이 적용됩니다.However, in some applications referential integrity is enforced through database triggers, or at the application level, rather than through DRI. DRI 대신 위에서 설명한 게시를 제공한 경우 SalesOrderDetail 테이블에는 삽입을 허용하기 전에 SalesOrderHeader 테이블에 연결된 행이 존재하도록 하는 삽입 트리거가 있을 수 있습니다.Given the publication described above, instead of DRI, the SalesOrderDetail table could have an insert trigger that ensures the associated row in the SalesOrderHeader table exists before allowing an insert. SalesOrderHeader 에는 삭제를 허용하기 전에 SalesOrderDetail 에 연결된 행이 없도록 하는 삭제 트리거가 있을 수 있습니다.SalesOrderHeader could have a delete trigger that ensures there are no associated rows in SalesOrderDetail before allowing a delete. 병합 복제는 트리거가 발생될 때까지 트리거의 결과를 확인할 수 없으므로 아티클의 처리 순서를 결정할 때 트리거를 고려하지 않습니다.Merge replication does not take into account triggers when determining processing order of articles because it cannot determine what the result of the trigger will be until it has fired. 마찬가지로 복제는 응용 프로그램 수준에서 정의된 제약 조건을 고려할 수 없습니다.Similarly, replication cannot take into account constraints defined at the application level.

참조 무결성이 트리거를 통해서 또는 응용 프로그램 수준에서 유지 관리되는 경우 아티클이 처리되는 순서를 지정해야 합니다.When referential integrity is maintained through triggers or at the application level, you should specify the order in which the articles should be processed. 트리거가 있는 예제에서 아티클 순서는 삽입 순서에 따라 지정되므로 SalesOrderDetail 전에 SalesOrderHeader테이블이 처리되도록 지정합니다.In the example with triggers, you would specify that the SalesOrderHeader table should be processed before SalesOrderDetail, because article ordering is based on insert order. 병합 복제는 삭제 순서를 자동으로 반대로 바꿉니다.Merge replication will automatically reverse the order for deletes. 병합 에이전트는 제약 조건 위반이 발생해도 아티클을 계속 처리하고 다른 아티클이 처리된 후 실패한 작업을 모두 다시 시도하므로 병합 복제는 아티클 순서를 지정하지 않아도 실패하지 않습니다.Merge replication will not fail without article ordering, because the Merge Agent continues to process articles if a constraint violation occurs; it then retries any operations that failed after other articles have been processed. 아티클 순서를 지정하면 다시 시도 및 다시 시도와 연결된 추가 처리 작업이 실행되지 않도록 할 수 있습니다.Specifying article order simply avoids retries and the additional processing associated with them. 헤더 레코드 전에 정보 레코드가 처리되도록 하는 등 순서를 잘못 지정하면 병합 복제는 성공할 때까지 처리를 다시 시도합니다.If you specify an incorrect order (for example, one that results in detail records being processed before header records), merge replication will retry processing until it succeeds.

관련 항목:See Also

병합 복제를 위한 아티클 옵션 Article Options for Merge Replication
논리적 레코드를 사용하여 관련된 행의 변경 내용 그룹화 Group Changes to Related Rows with Logical Records
Join Filters Join Filters