SQL Server 에이전트 작업 연결


9

SQL Server 에이전트에서 작업을 설정 한 각 작업 패키지가 여러 개 있습니다. 때때로 나는 모두 함께 달려야합니다. 주어진 순서대로 모든 것을 실행하는 가장 좋은 방법은 무엇입니까? SQL Server 에이전트가 작업을 실행할 작업 단계로 포함시킬 수 없다는 것에 약간 놀랐습니다. 나는 시도했다


1
+2 나는 지난 밤에 대해 생각하고 있었다 :)
jcolebrand

1
각 품목이 별도의 직업이어야합니까? 별도의 작업 단계를 사용하여 마스터 작업으로 설정하고 각 작업 단계마다 t-sql 또는 단계를 실행해야하는지 여부 (예 : (조건 = true)가 다른 작업을 수행하지 않는 방법을 결정하는 기타 논리를 추가 할 수 있음
johndacostaa

도움을 주신 모든 분들께 감사드립니다. Aarons가 제안한 방식이 내가 필요한 것에 가장 가까이 다가오고있는 것 같습니다. 도구에 대한 권한이 있는지 확인합니다. 그렇지 않으면 SQL 에이전트 내에서 괴물 직업을 만들어야합니다. (.
nojetlag

"패키지"라고 말하면 SSIS 패키지를 의미합니까?
SqlSandwiches

John DaCosta와 합의했습니다. 조건이있는 단계를 사용하십시오.
Alex_L

답변:


5

학습 곡선 시간이나 SSIS를 사용할 기존 기술이없는 경우이를 수행 할 수있는 타사 도구가 있습니다. 면책 조항 : 나는 그 회사 중 하나를 위해 일합니다. SQL Sentry를 확인하십시오-SQL Server 작업 (SSIS 패키지 포함), Windows 예약 작업 및 Oracle 작업을 처리합니다. 다음은 SQL Server 기능 (체인 및 큐 포함)입니다.

불행히도 나는 당신이 SQL Agent를 스스로 사용하여 여러 작업을 연결할 수 있다고 생각하지 않습니다. Marian이 제안한 sp_start_job 메소드는 작업을 비동기 적으로 시작합니다. 다음 명령이나 다음 단계로 넘어 가기 전에 완료 될 때까지 기다릴 수 없습니다.


음, 그는 msdb 시스템 테이블을 쿼리 할 수 ​​있고 다른 작업 (및 해당 단계) 상태를 가질 수 있다고 생각합니다. 내가 틀렸다면 사과 드리며 이것을 공개하기 위해 6 팩을 줄 것입니다 :-).
Marian

당신의 요점을 이해하지 마십시오. msdb 테이블을 쿼리하면 작업을 서로 연결하는 데 어떻게 도움이됩니까? 상태가 변경 될 때까지 1 = 1 동안? 쿼리 알림? 물론 수동으로이 작업을 수행 할 수있는 방법이 많이 있지만 sp_start_job을 호출하는 것보다 훨씬 더 복잡 할 것입니다.
Aaron Bertrand

8

SQL 에이전트는 작업 스케줄러로서 "엔터프라이즈 클래스"로 간주되지 않습니다. 결국 스스로 구축해야 할 많은 기능이 부족합니다. 그러한 예로는 의존성이 있습니다. 결과적으로이 로직의 대부분을 SSIS 패키지에 넣어야합니다. 반드시 나쁜 것은 아니지만 스스로를 구축하고 관리하는 데 어려움이 있습니다.

그래서 그것은 저의 대답입니다 .SSIS 패키지를 구축하고 일부 t-sql 명령을 사용하여 원하는대로 SQL 에이전트 작업을 호출하십시오. 요구 사항과 시나리오가 명확하게 정의되어 있는지 확인하십시오. 예를 들어, 여러 작업이 동시에 같은 테이블에 충돌하지 않도록 할 수 있습니다.

HTH


이처럼 성숙한 "엔터프라이즈 에디션"제품에서 "엔터프라이즈"스케줄러가 필요합니다. 단계로 많은 것들을 포함시킬 수 있기 때문에 희망이 있었는데, 가장 명백한 (다른 직업)을 실행 가능한 객체로 사용할 수 없다는 것이 재미있었습니다. 작업을 사용하여 복잡성이 많은 SSIS 패키지를 실행하고 유연하게 작업을 실행하기 위해 다른 SSIS 패키지를 구축해야하는 것이 올바른 방법이 아닙니다. 특히 asynch sp_start_job으로 다시 끝나기 때문에.
nojetlag

6

시스템 저장 프로 시저 sp_start_job을 사용하여 작업 단계에서 T-SQL 스크립트를 사용하여 시도해야합니다 . 원하는 작업 수를 체인으로 묶을 수 있습니다.


Aaron이 언급했듯이, 주어진 순서를 유지할 수는 없습니다. 왜냐하면 그들은 거의 동시에 발생하기 때문입니다 (비동기 적이라는 사실 때문에). 따라서 이것은 실제로 연쇄 접근 방식이 아니라 수집 방식입니다. :
nojetlag

아주 간단하지는 않지만 msdb 시스템 테이블을 쿼리 할 수 ​​있습니다. 특정 시간 동안 기다렸다가 다시 쿼리 할 수 ​​있습니다. 또는 작업 단계 상태를 지정하는 추적 테이블을 작성하고 트리거를 기반으로 다음 단계를 자동으로 실행할 수 있습니다. 또는 그렇게하고 더 많은 가치를 추가하고 멋진 UI를 보여주는 도구를 구입할 수 있습니다 :-). 모든 옵션이 있습니다 ..
Marian
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.