2010-03-12 4 views
0

플랫 파일에서 데이터를 읽고 SQL 데이터베이스에 삽입하는 간단한 SSIS 패키지가 있습니다. 파일에는 90K 행이 있으며 때때로 잘못된 데이터 패키지로 인해 실패하지만 실패하기 전에 부분 레코드를 삽입합니다. 내가 필요로하는 것은 삽입이 언제든지 실패하고 DB에 레코드를 삽입하지 말고 모든 것을 롤백해야한다는 것입니다. 어떻게 처리 할 수 ​​있습니까?SSIS 플랫 파일 삽입 실패 롤백

답변

1

감사합니다. 마침내 나는 대답을 얻었다. 내가 실험 한 두 가지 방법이 있습니다. 1. 거래 옵션을 사용하십시오.하지만 여기에서 문제가 있습니다. 이것은 실행중인 MSDTC 서비스가 필요하고 SQl 관리자가 나를 대신 실행할 수없는 몇 가지 문제로 인해 대안을 생각했습니다. 2. SQL 서버 트랜잭션을 사용하십시오. 저는 BEGIN TRANSACTION과 COMMIT TRANSACTION을 위해 두 가지 SQL 태스크를 사용했습니다. 이 작업을하려면 SQL 연결 관리자의 "RetainSameConnection"속성을 True로 설정해야합니다. 이것은 내 문제를 해결했다.

0

트랜잭션에 포함시킬 패키지 또는 컨테이너에서 TransactionOption을 설정 했습니까? 컨테이너 (또는 전체 패키지를 선택하는 컨트롤 서피스)를 클릭하고 F4를 누릅니다. 해당 컨테이너가 TransactionOption에 대해 Required로 설정되었거나 패키지가 Required로 설정되어 있고 그 컨테이너가 Supported로 설정되어 있는지 확인하십시오.

NotSupported를

더 트랜잭션이 컨테이너 시작되지 않으며, 하나는 부모 컨테이너에 의해 시작 된 경우 그 결과, 현재의 트랜잭션 (transaction)의 결과가, 데이터에 영향을주지 않도록 지정 다음과 같이 사용할 수 TransactionOption 값은 이 컨테이너의 실행 중에 변경 될 가능성이 있습니다. 즉, 부모 컨테이너가 트랜잭션을 시작한 경우에도 변경 사항이 롤백되지 않습니다.
필수 상위 컨테이너에 이미 트랜잭션이있는 경우를 제외하고이 컨테이너가 새 트랜잭션을 시작하도록 지정합니다.이 경우 부모 트랜잭션이 조인됩니다.
지원됨이 컨테이너가 트랜잭션을 시작하지 않도록 지정합니다. 그러나 부모 컨테이너가 트랜잭션을 시작하면 트랜잭션에 참여합니다. 이것이 기본값입니다.
http://msdn.microsoft.com/en-us/library/microsoft.sqlserver.dts.runtime.dtstransactionoption.aspx

0

더 좋은 방법은, (또는 적어도 내가 반드시 더 나은, 그것을 얼마나) 플랫 파일 읽기 섹션에서 검사를 일부 데이터에 추가하는 것입니다 TransactionOption 값 위

는에 있습니다. 변수가 VarChar, 숫자 등등에 대해 올바르게 정의되었는지 확인하십시오. 그런 식으로 변수를 삽입하고 삽입하지 않습니다.

읽기와 삽입 사이에 스크립트 검사를 추가 할 수도 있습니다.

또 다른 옵션은 데이터를 임시 테이블에 삽입 한 다음 프로덕션 테이블에 삽입 할 때 트랜잭션을 사용하는 SQL 문을 실행하는 것입니다.

+0

예, SSIS의 특성입니다. SSIS에서 수행하려는 작업에는 42 가지가 있지만 올바른 방법이 있습니다. –

관련 문제