트랜잭션 복제의 오류 건너뛰기
트랜잭션 복제의 경우 배포 프로세스 중에 오류가 발견되면 이를 건너뛸 수 있는 두 가지 방법이 있습니다.
배포 에이전트의 -SkipErrors 매개 변수를 사용하면 특정 유형의 오류를 건너뛸 수 있습니다. 오류가 있는 트랜잭션은 커밋되지 않지만 후속 트랜잭션은 커밋됩니다.
sp_setsubscriptionxactseqno 저장 프로시저를 사용하면 오류를 발생시킨 하나 이상의 트랜잭션을 건너뛸 수 있습니다. 비-SQL Server(Non-SQL Server) 구독자에는 이 옵션을 사용할 수 없습니다.
중요 |
---|
일반적인 복제 프로세스에서는 건너뛰어야 할 오류가 있어서는 안 됩니다. 오류를 건너뛸 때는 신중해야 하며 오류 조건, 오류 발생 이유 및 오류나 특정 트랜잭션을 해결하는 대신 건너뛰는 이유를 이해해야 합니다. 게시자에서 커밋된 트랜잭션을 구독자에서 건너뛰는 경우 두 노드가 완전히 동기화되지 않으므로 오류가 추가로 발생할 수 있습니다. |
-SkipErrors 매개 변수
기본적으로 배포 에이전트에 오류가 발생하면 에이전트가 중지됩니다. -SkipErrors 매개 변수를 사용하고 복제를 중단시키지 않는 예상 오류를 지정하면 에이전트가 해당 오류 정보를 기록한 다음 계속 실행됩니다. 예를 들어 배포 에이전트에서 중복 키 위반을 기록하고 후속 트랜잭션을 계속 처리하려면 해당 에이전트에서 오류 2601(고유 인덱스가 '%.*ls'인 개체 '%.*ls'에 중복 키 행을 삽입할 수 없습니다)과 2627(%ls 제약 조건 '%.*ls'을(를) 위반했습니다. 개체 '%.*ls'에 중복 키를 삽입할 수 없습니다)을 건너뛰도록 지정합니다.
-SkipErrors 2601;2627
-SkipErrors 매개 변수를 사용하는 가장 일반적인 방법은 데이터 일관성 오류가 발생했지만 계속됩니다라는 배포 에이전트 프로필을 사용하는 것입니다. 그러면 배포 에이전트에서 2601, 2627 및 20598(복제된 명령을 적용할 때 구독자에서 행을 찾을 수 없습니다) 오류를 건너뜁니다. 자세한 내용은 복제 에이전트 프로필을 참조하십시오. 미리 정의된 이러한 프로필 외에도 생성 또는 수정하는 에이전트 프로필이나 명령줄에서 매개 변수를 지정할 수 있습니다. 자세한 내용은 아래의 항목을 참조하십시오.
중요 |
---|
기본적으로 XACT_ABORT 설정이 ON인 상태로 트리거가 실행됩니다. 배포 에이전트가 구독자에서 변경 내용을 적용하는 동안 트리거 내의 문에 오류가 발생하면 개별 문이 아닌 일괄 변경 전체가 실패합니다. 트랜잭션 복제에서 배포 에이전트의 -SkipErrors 매개 변수를 사용하여 오류 발생 문을 건너뛸 수 있습니다. XACT_ABORT가 ON인 상태로 -SkipErrors를 사용하면 문에 오류가 발생할 경우 일괄 변경 전체가 생략됩니다. 트리거에서 XACT_ABORT를 ON으로 설정해야 하는 경우가 아니면 -SkipErrors 매개 변수 사용 시에는 이 옵션을 OFF로 설정하는 것이 좋습니다. 이 옵션을 해제하려면 트리거 정의에서 SET XACT_ABORT OFF를 지정합니다. XACT_ABORT에 대한 자세한 내용은 SET XACT_ABORT(Transact-SQL)를 참조하십시오. |
sp_setsubscriptionxactseqno 저장 프로시저
sp_setsubscriptionxactseqno 저장 프로시저를 사용하여 구독자에 적용 시 오류를 발생시킨 하나 이상의 트랜잭션을 건너뛸 수 있습니다. 오류가 있는 하나 이상의 트랜잭션을 건너뛰려면 다음을 수행하십시오.
배포 에이전트가 중지된 다음 배포자에서 sp_helpsubscriptionerrors를 실행합니다. 이 저장 프로시저는 실패한 각 트랜잭션의 LSN(로그 시퀀스 번호)이 들어 있는 xact_seqno 열을 반환합니다.
@xact_seqno 매개 변수의 값을 지정하고 sp_setsubscriptionxactseqno를 실행합니다. 실패한 트랜잭션을 모두 건너뛰려면 sp_helpsubscriptionerrors에서 반환한 LSN 중 가장 큰 값을 지정하십시오.
자세한 내용은 sp_setsubscriptionxactseqno(Transact-SQL) 및 sp_helpsubscriptionerrors(Transact-SQL)를 참조하십시오.