.png)
저는 단일 구독자에게 "트랜잭션 게시"로 게시되는 데이터베이스를 사용하여 SQL Server 2008 Std를 실행하고 있습니다.
"테이블이 복제용으로 게시되었기 때문에 수정할 수 없습니다."라는 메시지가 표시되지 않으면 게시자의 테이블을 변경할 수 없습니다. 스키마 변경 사항(또는 이를 위해 실행되는 스크립트)이 구독자에게 푸시되어야 하기 때문에 이는 이상해 보입니다. 현재 테이블을 변경하려면 전체 게시 시스템을 삭제해야 합니다.
내가 무엇을 놓치고 있나요? 게시자 테이블을 업데이트할 수 있는 방법이 있어야 합니까?
감사해요!
답변1
수행하려는 테이블 수정은 아마도 SSMS의 그래픽 테이블 디자이너에서 수행되었을 것입니다. 그래픽 디자이너를 통한 테이블 변경 구현이 좋지 않습니다.
변경 사항을 저장하면 SSMS가 실행되어 전체 테이블을 새 디자인이 통합된 새 테이블에 복사한 다음 '이전' 테이블을 삭제하고 새 테이블의 이름을 바꿔 교체합니다.
열 순서는 SQL Server에 저장된 테이블에 거의 영향을 미치지 않습니다. 테이블의 '중간'에 새 열을 추가할 필요가 없습니다. 보기에 더 좋을 수도 있습니다. :=)
테이블이 트랜잭션 복제에 있으므로 SSMS는 백그라운드 테이블 삭제 문을 수행할 수 없으며 기록해 둔 오류 메시지가 표시됩니다.
원하는 대로 변경하려면(열 추가 또는 삭제) T-SQL에서 명령을 수행해야 합니다.
ALTER TABLE dbo.Table ADD NewCol int NULL;
ALTER TABLE dbo.Table DROP COLUMN NewCol;
명령 구문이 일관성이 없다는 점에 유의하십시오(MS에게 감사드립니다!). 열을 추가할 때는 키워드 COLUMN을 지정할 필요가 없으며 삭제 시에는 키워드가 필요합니다.
스키마 변경 사항을 복제하도록 복제가 올바르게 설정되어 있으면 이러한 명령이 작동하고 구독자에게 전파됩니다.
기본 키 변경을 제외하고는 이 방법으로 테이블을 변경할 수 있습니다. PK는 트랜잭션 복제가 작동하는 데 필요하며 변경할 수 없습니다. 이러한 열을 변경하려면 복제에서 아티클을 제거해야 합니다.
도움이 되길 바랍니다.