2009-05-01 2 views
3

병합 복제에 문제가 있습니다. 우리의 게시자는 SQL Server 2008을 실행하고 두 명의 구독자는 2005 년을 실행합니다. 게시자는 ALTER TABLE Foo SET (LOCK_ESCALATION) 명령을 구독자에게 보냅니다. 이 명령은 SQL Server 2008에서 새로운 기능이라는 것을 읽은 것 같습니다. 그렇다면 2005 년 서버에서 명령이 실패하게됩니다. 그러나 2005 년 호환성을 위해 병합 복제가 설정되었습니다. 테이블의 LOCK_ESCALATION 설정시 병합 복제가 실패하는 이유는 무엇입니까?

스키마 스크립트 '것으로, object_id 경우 (N'

[DBO]. [사용자]) (ALTER는 TABLE [dbo가]. [사용자] SET (LOCK_ESCALATION = 표) 가 ')'할 수 널 간부 아니다 ' 구독자에게 전파되지 않습니다.

게시자가이 작업을 수행하려는 이유에 대한 아이디어가 있습니까?

편집 : 우리의 2008 서버의 호환성 수준이 설정되어 "SQL 서버 2005 (90)"

+1

SQL Server 2008에서 확인 된 버그입니다. SQL Server 2011까지는 수정되지 않을 가능성이 높습니다. (https://connect.microsoft.com/SQLServer/feedback/details/536571) – hangy

답변

5

그것 때문에 당신의 설정이 사용자가 수도 얼마나 복잡한에 따라 2005 년에 지원되지 않는 SQL 2008의 새로운 기능 호환성 90 (sql 2005)에서 데이터베이스를 실행하여 데이터베이스에 SQL 2008 기능을 추가하지 않도록하십시오. 스키마 데이터를 복제 할 때 큰 문제가있었습니다. 저는 항상 멍청한 행동을하고 데이터를 관리합니다. 병합 복제를 사용하는 32 명의 가입자와 병합 시스템을 지원해야했으며 스키마 변경을 푸시 할 때 큰 스키마 문제가 계속 발생했습니다.

그렇다면 문서화 된대로 작동하면 잠금 변경을 시도해서는 안됩니다. 구독이 SQL 2005와 호환되는지 확인하십시오. 그 그들이 (예를 들어) 데이터 유형 잠시 다시 새로운 잠금 유형에 대한 SQL dev에 사람 blogged

에서했던 방식으로 2005 년까지 2008에서 설정의 자동 맵을 작성하지 않은 것
+1

내 의심을 확인하고 호환성 옵션. 안타깝게도 호환성 수준 *은 90으로 설정되어 있습니다. –

+0

이 업데이트되었습니다. 그 가능성이 2008 복제의 버그. msdn 기사에 문서화되어 있지 않다. http://msdn.microsoft.com/en-us/library/ms143241.aspx – u07ch

4

이 명령은 SQL Server 2005와 호환되지 않으며 replicate 테이블에서 스키마 변경을 수행하면 스키마 변경 내용에이 명령이 적용되기 때문에 발생합니다.

두 가지 방법이 있습니다 : 프로덕션 서버에있을 때 해당 서술을 제거하고 다시 작성하십시오.

스키마 스크립트 '경우 OBJECT_ID (N'. [DBO] [사용자] ') 가되지 않습니다 : 두 번째 방법은 테이블 데이터베이스에 sysmergeschemachange에 가서 이런 일이있는 행을 삭제입니다 null exec ('ALTER TABLE [dbo]. [사용자] SET (LOCK_ESCALATION = TABLE)') ' 은 가입자에게 전파 될 수 없습니다.

이 정보가 도움이되기를 바랍니다.

+0

테이블에서'DELETE' 행을 읽는 것이 약간 무서워서, 나는 그것을 시도했다. 나를 위해. – hangy

관련 문제