2017-02-23 13 views
2

연결을 통해 루프하는 루프가 있습니다. 각 루프는 다른 연결에 연결 한 다음 테이블 등을로드합니다. 두 번째 단계에서는 DWH에 데이터를 연결 한 다음로드합니다. 때로는 연결이 끊어지고이 단계에서 실패하게됩니다. 이 연결을 계속 진행하려면 패키지가 필요합니다.각 루프에 대한 SSIS가 작동하지 않음

나는 propogate에서 많은 것들을 false로 읽었으며 여전히 작동하지 않습니다. 내 스크린 샷에서 볼 수 있듯이 "Load ..."onError 이벤트 처리기 propogate가 false로 설정되어 있고 sequence 컨테이너 onError propogate가 false로 설정되어 있습니다.

또한 시퀀스 컨테이너의 최대 오류를 0으로 설정하여 섹션이 완료되도록하고 "로드 ..."의 onError를 사용하여 연결이 완료되면 계속 진행하도록 변수에 플래그를 설정하거나 중지합니다. 거기에 연결이 실패하면.

나는 과거에이 작업을 수행했으며 전체 패키지 완료 상태를 완료시 성공으로 설정했지만,이 루프에서 발생할 수있는 패키지를 캐치/실패해야하는 다른 오류는 발견하지 못합니다.

여기에 도움을 주시면 감사하겠습니다. 실패 연결에 대한 더 많은 연구를하는

enter image description here

+0

이 False로'FailParentOnFailure' 설정 시도? – NickyvV

+1

나는 이것들을 모두 false로 설정했지만 여전히 차이가 없다. 나는 그것을 알아 냈다. 내 대답은 아래를 참조하십시오. – Caveman42

답변

2

, 나는 제이미 톰슨에 의해 스크립트를 발견 Verify a connection before using it [SSIS].

난 내 자신의 사용에 조금 수정 :

  1. 만 대신에 그들 모두를 통해 반복의 단일 연결을 사용했다.
  2. 작업 결과를 항상 성공으로 설정했습니다.
  3. FireError 대신 FireWarning을 작성했습니다.
  4. 연결이 실패했는지 여부에 따라 0 또는 1로 설정하는 변수 (connFail)를 만들었습니다.

내가 작업을 실행하기 전에 실패한 연결을 잡기 위해이 테이블 작업을 내 테이블로드 전에 배치합니다. 이러한 변경으로 인해 연결이 실패하면 (connfail = 1) 전자 우편 경고를 발령하거나 연결이 성공하면 패키지에서 계속할 수 있습니다 (`connFail = 0 '). 내가 사용

전체 스크립트는 다음과 같습니다 :

bool failure = false; 
bool fireAgain = true; 

try 
{ 
    Dts.Connections["Connection"].AcquireConnection(null); 
    Dts.Events.FireInformation(1, "" 
     , String.Format("Connection aquired successfully on '{0}'", Dts.Connections["Connection"].Name) 
     , "", 0, ref fireAgain); 
} 
catch (Exception e) 
{ 
    Dts.Events.FireWarning(-1, "" 
     , String.Format("Failed to aquire connection to '{0}'. Error Message='{1}'",Dts.Connections["Connection"].Name, e.Message) 
     , "", 0); 
    failure = true; 
} 

if (failure) 
{ 
    Dts.TaskResult = (int)ScriptResults.Success; 
    Dts.Variables["connFail"].Value = 1; 
} 
else 
{ 
    Dts.TaskResult = (int)ScriptResults.Success; 
    Dts.Variables["connFail"].Value = 0; 
}