2014-01-20 2 views
0

최근에 Client Machine에서 Sql 서버 교착 상태 문제가 발생했습니다. 우리는 Job A, Job B, Job C가 빈번한 간격으로 스케줄을 잡을 것으로 생각합니다.교착 상태가없는 SSIS 작업을 예약하는 방법

a. 직업 A - 매 15 분 b. 작업 B - 매 20 분마다 c. 작업 C - 30 분

이러한 간격은 데이터 볼륨에 따라 다르지 않으므로 작업이 중복 실행됩니다. 또한 수동 개입이있는 경우 작업이 보류중인 작업이 완료되었는지 어떻게 확인할 수 있습니까?

1. 의존성 작업을 생성하는 방법이 있습니까?

작업 B가 작업 A 프로세스 완료를 기다릴 수 있도록하려면 작업 C가 작업 B 프로세스 완료를 기다려야합니다.

2. 최악의 시나리오를 처리하는 방법, 작업이 실패하면 트랜잭션을 되돌릴 수 있습니까?

3. SSIS 작업 상태에서 사용자 지정 로그 파일/전자 메일 경고를 작성하고 추적하는 방법이 있습니까? 사전

답변

0

에서

감사는 조금 미봉책하지만 각 작업은 분명 그들이 시작 플래그 파일을 가지고, 그들이 끝날 때 쓸 수 있습니다. 다음 작업은 시작하기 전에 이전 작업의 플래그 파일을 확인해야합니다. 물론 작업이 여러 번 시작되고 플래그 파일이 없으면 전자 메일을 보냄으로써 장애물을 분류하고 다시 정상적으로 작동하게 할 수 있습니다.

오류에 대한 되돌리기는 별도의 것이며, 첫 번째 문제를 어떻게 해결 했느냐에 달려 있습니다.

한 프로세스의 일부로 특정 항목을 로그에 기록하고 다른 SSIS 패키지가이를 모니터링하고 특정 텍스트가있는 경우 전자 메일을 보낼 수 있습니다. 이 로그는 플래그 파일 대신 사용할 수도 있지만 완료된 프로세스가 15 분 전의 프로세스가 아니라 현재 프로세스임을 알아야합니다.

0

나는 현재 작업의 첫 단계로이를 넣어이 처리 해요 :

-- Check running SQL Agent jobs. If there are any 'Load' jobs then don't run this one. 
-- This step has 3 retries at 5 minutes each 
IF EXISTS 
(
SELECT sj.name, sja.* 
FROM msdb.dbo.sysjobactivity AS sja 
INNER JOIN msdb.dbo.sysjobs AS sj ON sja.job_id = sj.job_id 
WHERE sja.start_execution_date IS NOT NULL 
AND sja.stop_execution_date IS NULL 
AND sj.name LIKE 'Load%' 
) 
    RAISERROR('Job is still currently running. Cannot run this job in parallel. This step will retry.',18,0) 

는 다음 고급 탭에서 당신은 어떤 간격으로 몇 번을 다시 시도 할 수있는 단계를 설정합니다. . 다른 작업이 이미이 예에서 Load로 시작하는 작업 이름으로 식별 (실행중인 경우,이 오류를 rasie하고 다시 시도합니다

교착 상태를 피할 수있는 다른 옵션은 다음과 같습니다

  1. 은 querties을들이도록 최적화
  2. 이 경합을 줄이기 위해 쿼리의 시작에 SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED; 추가 너무 오래 걸릴하지 않습니다 ....하지만 당신이 먼저 무엇을 이해한다.
관련 문제