2011-08-04 4 views
1

SQL Server 2005 데이터베이스에서 복제를 설정하려고합니다. 우리는 작년에 몇 가지 지침을 따라 왔으며 모든 것이 잘되었습니다. 최근에 개발이 실패하기 시작했습니다 (개발 환경이므로 매주 데이터베이스를 다시 작성하고 replciation을 적용합니다).SQL 복제 오류 - 구독자에서 행을 찾지 못했습니다.

우리는 일련의 단계를 수행하여 스냅 샷이 생성되고 복제 된 데이터베이스에 적용됩니다. 괜찮아. 오류 없음.

그런 다음 원본 데이터베이스에 새 행을 추가하고 bang! 오류.

명령 시도 : 경우 @@ TRANCOUNT> 0 롤백 트란 (트랜잭션 서열 번호 : 0x000004BE00000558000100000000, 명령 ID : 1) 오류 메시지를 복제 된 명령을 적용 할 때 행 구독자에서 발견되지 않았다. (출처 : MSSQLServer, 오류 번호 : 20598)

행을 삽입하고 있지만 행이 구독자에 없다고 불평하고 있습니다. 맞습니다. 구독자에게 삽입을 복제하려고합니다.

원본과 대상 모두에서 SELECT COUNT (*)를 수행하면 INSERT 할 때까지 행 수는 동일합니다. , 소스 incriments,하지만 목적지는 동일하게 유지됩니다 ....

우리가 어디서 볼 수있는 아이디어?

답변

1

어 ...이 오류는 끔찍합니다. 행을 삽입했다고 말하면 게시자에게 행을 삽입했다고 가정합니다. 그건 효과가 없을거야. 복제는 명령을 순차적으로 전달합니다. 즉, 누락 된 행을 삽입 한 사실이 현재 오류를 지나칠 때까지 복제하지 않습니다.

그래서 여기서부터 시작하겠습니다. 오류 메시지에서 트랜잭션 시퀀스 번호가 표시됩니다. 누락 행의 기본 키를 결정할 때이를 사용할 수 있습니다. 배포자에는 sp_browsereplcmds라는 저장 프로 시저가 있습니다. @xact_seqno_start 및 @xact_seqno_end 매개 변수 모두에 대해 트랜잭션 시퀀스 번호를 연결할 수 있습니다. 또한 저장 프로 시저에 command_id 매개 변수가 표시됩니다. 이는 오류 메시지의 명령 ID에 해당합니다. 지정된 매개 변수만으로 프로 시저를 실행하십시오. 가입자에게 실행하려고하는 명령을 제공해야합니다. 거기에서 업데이트 또는 삭제하려고하는 행의 기본 키를 알 수 있습니다. 그런 다음 기본 키가있는 행을 구독자에 삽입하면 복제가 계속 진행됩니다.

또는 구독자에서이 기사를 삭제하고 다시 추가 한 다음 해당 기사를 다시 초기화 할 수 있습니다. 서버에서 좀 더 강렬하지만 훨씬 덜 피고 있습니다.

0

게시자 데이터베이스의 데이터 손상으로 인해 데이터 손실 허용으로 DBCC 검사 DB를 실행했을 때 동일한 복제 오류가 발생했습니다.

마지막으로 우리는 우리가 4000 만 있었다 우리의 경우 것 말이다 많은 양의 데이터가있는 경우 테이블을 퍼지) 오프라인 모드 2에 CHKDSK를 수행하여 저장 오류를 확인

1)처럼 RCA을하고 시도 행.

Google의 사례에서 데이터 삭제 후 문제가 발생했습니다.

관련 문제