2012-08-10 3 views
1

cron과 같이 예약해야하는 작업 목록이 있습니다. 이것은 SQL Server의 백업용입니다.종속성 및 스케줄링으로 작업 수행 방법

데이터베이스는 FULL, DIFF, LOGS 백업을 여러 가지 조합으로 실행합니다.

그래서 :

    : FULL
    • , 나는이 문제를 오전 8시
    • DIFF 각 시간
    • LOG 각 십분 그러나

    에서 하루를

  • 오전 8:15에 서버가 깨어 나면 FULL 작업이 실행되지 않습니다.
  • 전체가 실패하면
  • , 다음 토요일에 오전 8시 15분 서버 일어나가 시작 8:20 시작 로그인하면 의미가 다음주 월요일까지 기다려야합니다 전체에 대한 다음, DIFF & LOG
  • 을 실행하지.
  • LOG가 너무 많이 걸리는 경우 (오전 9:01에 끝나지 않음) 로그가 아직 완료되지 않은 경우 DIFF가 시작됩니다. 나는 그걸 원하지 않아!

나는 쿼츠 닷넷으로 이것을한다. 그러나 그것은 접선이다. 나는 lib를 바꾸고, 그것을 제거하는 등 열려있다. 그래서 나의 주요 목적은 작업 순서/실행의 신뢰성이다. THEN

  • 그러나 그때 DO_DIFF

  • DO_LOG, 스케줄러와 함께이 적어도와 (불가능 얻을

    • DO_FULL을 순차 코드에서

      , 이것은 할 매우 간단합니다 석영).

      문제는 시간 관리입니다. 작업이 매 시간마다 시작되도록 표시되면 이전 규칙을 완료 할 수 없기 때문에 하드 규칙보다 힌트가 있어야합니다. 또한 FULL이주기를 시작하기위한 요구 사항입니까?

      여기에 알고리즘을 적용해야하는 지 궁금합니다.

  • 답변

    0

    가장 간단한 솔루션은 Windows 서비스 (의도적으로 지속적으로 실행 됨)를 작성하는 것입니다.

    1. Windows 서비스는 해당 스레드 (T0) 8:00 중 하나를 깨 웁니다.
    2. T0은 필요한 유효성 검사를 수행하고 실패하면 경보를 발생시키고 중단합니다. 그렇지 않으면 전체 백업 스레드 T1이 생성됩니다.
    3. T1은 모든 유효성 검사가 좋은 경우에만 실행되므로 백업을 진행하십시오.
    4. T1이 성공적으로 완료되면 서비스는 diff 스레드 (T2)와 로그 스레드 (T3)를 깨 웁니다.
    5. T2 및 T3은 마지막으로 T1이 성공적으로 실행되었는지 확인합니다. T1이 실패하면 T2와 T3도 중단됩니다.
    6. T2는 매시간 실행되고 diff를 수행하며 절전 모드로 전환됩니다.
    7. T3는 15 분마다 실행됩니다. T2가 실행 중인지 확인하고, 그렇다면 다시 잠 (x 초 동안)하고 다시 시도해야합니다. T2가 T3를 실행하고 있지 않으면 그 의무를 수행해야합니다.
    8. 하루가 끝날 때 미리 지정된 시간에 필요한 경우 모든 스레드를 재설정하거나 중단해야합니다.
    0

    실행되는 작업을 추적해야합니다. 예를 들어, DIFF를 실행하려면 먼저 FULL을 실행해야합니다. 이를 위해 작업을 시작하고 FULL 상태를 false로 설정하십시오. FULL이 작업을 완료하면 상태를 true로 설정하십시오. DIFF가 실행될 시간이있을 때 FULL이 준비되었는지 (FULL이 생성하는 true 또는 false 값에 따라) 점검합니다. 그렇지 않은 경우 DIFF는 FULL이 작업 완료 신호를 보낼 때까지 기다립니다 (true). LOG가 실행되는 경우도 마찬가지입니다. 이것은 순차적 인 동작을 달성하는 간단한 방법입니다.