2011-12-12 2 views
0

내 소프트웨어에는 최신 버전까지 패치하기 위해 적용해야하는 데이터베이스 업데이트가 실행되는 프로세스가 있습니다. 최신 스크립트에서 복제 설정을위한 게시가있는 테이블에 열을 추가하려고합니다. 이 문제는 라운드 가장 쉬운 방법은 얻기 위해 무엇을복제 된 테이블에 열을 추가하는 트랜잭션 문제

You can only specify the READPAST lock in the READ COMMITTED or REPEATABLE READ isolation levels. 

모든 아이디어 : 나는 열을 추가 내 ALTER 스크립트를 생성 할 때 나는 다음을 말하는 메시지가? 발행물을 제거한 후 나중에 다시 추가해야합니까?

+0

스크립트를 어떻게 만들고 있습니까? 어떻게 생겼습니까? – Pondlife

답변

2

SQL 비교에 의해 생성 된 스크립트를 사용하는 중에 이번 주에이 문제가 발생하여 프로덕션 및 개발 환경을 동기화합니다. 이 문제는 READ COMMITTED 또는 REPEATABLE READ보다 높은 격리 수준의 트랜잭션을 시작하는 SQL Compare (또는 사용중인 모든 것)의 스크립트로 인해 발생합니다.

당신은 스크립트 모자의 일부가 가입자에게 ALTER TABLE 명령을 propogates은 SQL 복제 코드를 호출을 시작하는 열을 추가 할 ALTER 테이블이 실행합니다. 이 코드는 격리 수준이 높은 큰 트랜잭션 내부에서는 실행할 수 없습니다.

우리가 사용한 솔루션은 복제를 스크립팅하는 것이 었습니다. 해당 테이블에서 복제를 삭제하십시오. 동기화 스크립트를 적용하십시오. 그런 다음 복제를 다시 작성하십시오.

대안은 트랜잭션의 격리 수준을 변경하거나 완전히 제거하기 위해 동기화 스크립트를 편집하는 것입니다. 그것은 우리가 이전에 언급 한 해결책을 가지고 갔기 때문에 우리가하고 싶지 않은 것이 었습니다.

1

테이블에 새 열을 추가하고 기존 게시에 포함 시키려면 게시자에서 ALTER TABLE < 테이블> ADD < 열> 구문을 사용해야합니다. 기본적으로 스키마 변경 내용은 구독자에게 전파되며 게시 속성 @replicate_ddl을 true로 설정해야합니다.

자세한 내용은 Making Schema Changes on Publication Databases을 참조하십시오.

관련 문제