2013-01-16 3 views
0

동일한 패키지를 병렬로 실행할 수있는 상당히 복잡한 시나리오가 있습니다. 경우에 따라 두 실행 모두 대상에 동일한 행을 삽입하려고하면 결국 기본 키 오류가 발생합니다.ole db 대상의 중복 행

현재 대상 테이블을 검사하여 해당 레코드가 있는지를 확인하여 삽입이 "일치하지 않음"출력에서 수행되는지 확인합니다. 조회가 패키지 시작에로드되므로 두 패키지가 동일한 데이터를 가져오고 두 행이 모두 "새로운"행으로 간주되어 첫 번째 행이 성공하고 두 번째 행이 실패하면 오류가 발생하지 않습니다. .

이 시나리오를 피하기 위해 수행 할 수있는 작업은 무엇입니까? 꽤 많은 oledb 목적지에서 "중복 행"을 무시합니까? 중복 된 행은 첫 번째 패키지에 없었고 삽입되어야하는 다른 행 중에서 욕조에 있기 때문에 MAX ERROR COUNT를 사용할 수 없습니다.

+0

데이터베이스 또는 Excel 스프레드 시트에 액세스 할 수 있습니까? – Derek

+0

원본 및 대상이 모두 SQL 서버 인 – Diego

+0

PK를 삽입 할 수 있습니까? – Bulat

답변

2

기본 조회 동작은 전체 캐시 모드를 사용하는 것입니다. 패키지 확인 단계에서 모든 조회 값을 로컬 메모리 캐시로 가져 와서 테이블에 업데이트가 누락 된 결과를 사용합니다.

시나리오의 경우 캐시 모드를 None (부분 옵션이 다른 옵션 임)으로 변경해보십시오. None은 통과하는 모든 행에 대해 실제 쿼리가 대상 데이터베이스로 시작되어야 함을 나타냅니다. 데이터 볼륨이나 성능이 좋지 않은 쿼리에 따라 대상에 별다른 영향을 미치지 않을 수 있습니다. 병렬 인스턴스가 정확히 동일한 레코드를로드하려고 시도하지 않는다는 (또는 병렬 실행이 이미 조회를 만족하고 대상 테이블에 쓸 준비가되었음을) 보장하지 않지만 상황을 개선해야합니다.

동시 데이터 흐름이 실행되는 것과 같이 패키지 실행을 제어 할 수없는 경우 접근 방식을 다시 설계해야합니다 (파티션에 쓰고 스왑하고, 리소스를 잠그기 위해 무언가를 사용하고, 모든 데이터를 준비하고 TSQL 병합 등)

+0

고마워, 그 생각하지만, 문제의 데이터 세트가 1M 행 이상을 포함 할 수 있으므로 부분 캐시가 옵션이 아님을 언급해야합니다. 최악의 경우 값이 매우 희박하므로 일치하지 않는 캐시 비율조차도 데이터베이스에서 1M 선택을 피할 수 없습니다. – Diego

0

그냥 생각 ... 임시 테이블에 새 레코드를 작성하고 간헐적으로 병합하는 것은 어떻습니까? 이렇게하면 중복 된 것을 필터링 할 수 있습니다.

관련 문제