트랜잭션 복제를 설정하면 SQL Server가 ID 범위 관리를 수동으로 설정합니다. 이것은 구독 데이터베이스에서 PK가 ID 열인 테이블에 새 레코드를 삽입하려고 할 때 오류가 발생하고 PK "1", "2를 삽입하려고 시도했다는 의미입니다. ","3 "등입니다. 이는 구독자의 모든 ID 열에 대한 현재 ID 값이 게시자의 값을 유지하지 않고 시드 값 (일반적으로 1)으로 재설정되기 때문입니다.
SQL Server가 왜 그렇게하는지 이해합니다. 가입자 테이블을 읽기 전용으로 남겨 두어야합니다. 그러나 내 시나리오는 약간 정통적입니다. 복제를 통해 구독자를 수시로 업데이트하고 해당 DB를 즉시 백업 한 다음 구독자에게 다시 업데이트하지 말고 구독자에게 업데이트를하고 싶습니다. 구독자를 다시 업데이트하려고하면 이전 백업에서 데이터베이스를 복원하고 최신 업데이트를 가져옵니다. 이 업데이트 사이에 구독자에게 업데이트를 원하기 때문에 (필요한 경우 '임시 델타') 복제 할 때 ID 열이 작동하고 1로 재설정하지 않아야합니다.
게시를 설정할 때 자동 ID 범위 관리를 설정하려고 시도했지만 게시에 테이블을 추가하려고 할 때 다음 오류가 발생합니다.
메시지 21231, 수준 16, 상태 1, 절차 sp_MSrepl_addarticle, 줄 2243
자동 ID 범위 지원은 구독자를 업데이트 할 수있는 게시에만 유용합니다.
이 문제를 해결할 수있는 방법이 있습니까? 게시자에게 푸시되는 업데이트 를 계획하지 않기 때문에 구독자 쪽에서 읽기 전용 인 것처럼이 복제를 SQL Server에 제공 하려고하지만 임시 업데이트를 하고 싶습니다. 다음 복제 전에 지워집니다.
또한 스냅 샷 복제가 사용 패턴에 대한 트랜잭션 복제보다 더 적절한 방법이라고 생각했지만 스냅 샷 복제는 단일 업데이트마다 전체 DB를 전송해야한다는 문제가 있습니다 . 최신 복제 후 DB를 즉시 백업 할 계획이므로 매번 전체 전송을 수행 할 필요는 없습니다. 지난번 이후의 변화.
Is there any way I can get round this problem?SQL Server 2005 이상 에서는 sys.sp_identitycolumnforreplication 을 사용하여 ID 열을 NOT FOR REPLICATION 으로 설정해야 합니다. ID 열을 복제 용이 아닌 것으로 변경할 때 기사를 다시 스냅 샷하지 않아도됩니다. GUI를 사용하여하지 마십시오.