2009-07-22 2 views
4

나는 혼란스러운 것을 보았습니다. 디자인이 통제 할 수없는 데이터베이스에서 트랜잭션 복제를 구현하려고했습니다. 이 복제는 시스템에 과다 부담을주지 않고보고를 수행하기위한 것이 었습니다. 복제를 시도 할 때 일부 테이블 만 건너 뜁니다.기본 키가없는 트랜잭션 복제 (고유 인덱스)

기본 키가 없기 때문에 조사 테이블에서 복제하도록 선택되지 않았습니다. ODBC 및 ms 액세스를 사용하지만 관리 스튜디오에서는 사용하지 않는 경우 기본 키로 표시 될 수 없다고 생각했습니다. 또한 쿼리는 엄청나게 느리지 않습니다.

중복 레코드를 삽입하려고 시도했지만 고유 인덱스 (기본 키가 아님)에 대한 설명에 실패했습니다. 기본 키와 반대되는 고유 인덱스를 사용하여 테이블로 간주됩니다. 왜 내가 비명을 질 수 있는지 모른다.

어쨌든 트랜잭션 복제 또는 대안을 수행 할 수 있습니까? 라이브 (마지막 또는 2 분) 여야합니다. 주요 db 서버는 현재 sql 2000 sp3a이고보고 서버 2005입니다.

제가 현재 시도하고있는 유일한 방법은 다른 유형의 데이터베이스 인 것처럼 복제를 설정하는 것입니다. 나는 복제가 오라클이 가능하다고 말하기 위해 복제가 ODBC 드라이버의 사용을 강제 할 것이므로 액세스가 기본 키를 사용한다고 가정하는 것처럼 생각합니다. 그것이 내 깊이에서 정확한지 나는 모른다.

답변

7

MSDN states 같이 기본 키가없는 테이블에는 트랜잭션 복제를 만들 수 없습니다. 당신은 Merge replication (편도), 즉 기본 키를 필요로하지 않습니다 사용할 수 있으며, 존재하지 않는 경우 자동으로 rowguid 열을 생성합니다

병합 복제가 세계적으로 고유 식별자 (GUID) 열을 사용하여 까지 병합하는 동안 각 행을 식별 복제 프로세스. 게시 된 테이블에 ROWGUIDCOL 속성이 인 고유 식별자 열과 고유 인덱스가 없으면 복제시 이 추가됩니다. 게시 된 테이블을 참조하는 SELECT 및 INSERT 문 문에 열 목록이 사용되는지 확인하십시오. 테이블이 이고 더 이상 게시되지 않고 복제 이 열을 추가하면 열은 이 제거됩니다. 이미 컬럼이 존재하면 제거되지 않습니다.

불행히도 병합 복제를 사용하면 성능이 저하됩니다. 다음, 당신은 또한

+1

복제를 병합 할 수없는 스냅 샷 복제를 고려할 수

은 만보고 에 대한 복제를 사용해야하는 경우, 당신은 게시자에 정확히 동일하게 데이터가 필요하지 않습니다 그것은 guid를 추가하기 때문에이 데이터베이스는 일반적으로 열을 추가하기 위해 정기적으로 수정되고 업데이트를 수행하기 위해 우리에게 전송 된 스크립트는 수정됩니다. 잠재적으로 guid 열을 추가하면 지원을 철회 할 수 있습니다. 우리가 미러링을 할 수 있고 단지 어쨌든 읽기 전용으로 볼 수있는 SQL Server 2005로 업그레이 드하지 않는 한 나는 붙어있는 것 같습니다. 불행히도 라이브 데이터가 1 ​​분 이내에 있어야합니다. – PeteT