테이블의 lock_escalation을 설정하는 데 병합 복제가 실패하는 이유는 무엇입니까?

StackOverflow https://stackoverflow.com/questions/813403

문제

우리는 병합 복제에 문제가 있습니다. 당사의 게시자는 SQL Server 2008을 실행하고 두 가입자는 2005를 실행합니다. 게시자는 다음을 보내려고합니다. ALTER TABLE Foo SET (LOCK_ESCALATION) 가입자에게 명령하십시오. 이 명령이 SQL Server 2008에서 새 명령이라는 것을 읽은 것을 기억하며, 그렇다면 2005 서버에서 명령이 실패한다는 것이 합리적입니다. 그러나 합병 복제는 2005 년 호환성을 위해 설정됩니다.

Schema 스크립트 'Object_id (n'[dbo]. [user] ')가 null exec ('Alter Table [dbo]. [user] set (lock_escalation = table) ''가 가입자에게 전파 할 수 없습니다.

우리 출판사가 왜 이런 일을하려고하는지에 대한 아이디어가 있습니까?

편집하다: 2008 서버의 호환성 레벨은 "SQL Server 2005 (90)로 설정됩니다.

도움이 되었습니까?

해결책

SQL 2008의 새로운 기능은 2005 년에 지원되지 않습니다. 설정이 얼마나 복잡한 지에 따라 데이터베이스를 호환성 90 (SQL 2005)에서 실행하여 데이터베이스에 SQL 2008 기능을 추가하지 않도록 고려할 수 있습니다. 스키마 데이터의 복제와 관련하여 큰 문제가 생겼습니다. 나는 항상 멍청하게 행동하고 데이터를 관리하려고 노력하고 있습니다. 합병 복제가있는 32 명의 가입자가있는 병합 시스템을 지원해야했으며 스키마 변경을 추진했을 때 지속적으로 큰 스키마 문제가있었습니다.

그것은 그것이 문서화 된대로 작동한다면 잠금 변화를 밀어 붙이지 말아야한다고 말했다. 구독이 SQL 2005 호환으로 표시되어 있는지 확인하십시오. 그들은 데이터 유형에 대한 방식으로 2008 년부터 2005 년까지 설정의 자동지도를 만들지 않았을 것입니다 (예 :

SQL 개발자 중 하나 블로그 새로운 잠금 유형에서 잠시 후

다른 팁

이는 SQL Server 2005를 사용한이 명령어의 비 호환성과 복제중인 테이블에서 스키마 변경을 수행 할 때이 명령을 스키마 변경에 넣을 때 냉담하게 발생하기 때문에 발생합니다.

두 가지 방법이 있습니다. 제작 서버에있을 때는 적용 할 수없는 SUSCRIPCION을 제거하고 다시 작성하십시오. 두 번째 방법은 이동입니다 Sysmergeschemachange 데이터베이스의 테이블과 다음과 같은 행을 삭제하십시오.

Schema 스크립트 'Object_id (n'[dbo]. [user] ')가 null exec ('Alter Table [dbo]. [user] set (lock_escalation = table) ''가 가입자에게 전파 할 수 없습니다.

이게 도움이 되길 바란다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top