2016-10-17 3 views
2

SSIS 패키지를 실행하는 SQL 에이전트 작업이 3 개 있습니다. 작업 오류가 발생하면 제목에 '작업 실패 -'이메일이 생성되고 이메일에는 '작업 실패'라는 메시지가 표시됩니다. 작업이 일정 schename에 의해 호출되었습니다. 실행 마지막 단계는 Run_ 'SQL 에이전트 작업 실패시 전자 메일에 전체 오류 메시지 생성

입니다. 작업 기록을 볼 때 표시되는 FULL 오류 메시지가 없습니다. 이메일에 COMPLETE 오류 메시지를 포함하도록 작업을 구성 할 수있는 방법이 있습니까? 또는 특정 작업 실패시 실행될 저장 프로 시저를 빌드 할 수있는 방법이 있으며 시스템 테이블 (sysjobs) 중 하나를 쿼리합니다.

필자는 한번도 해 본 적이 없지만 특정 작업이 실패하면 트리거되는 sysjobs 테이블에 트리거를 작성할 수 있다고 생각합니다. sp_db_sendmail을 수행합니다. 나는이 길로가는 것을 피하려고 노력하고있다. 내 작업을 수행하는 최적의 방법이 있습니까?

+0

가 여기에 ssisdb 카탈로그에서 메시지를 추출하기위한 샘플 쿼리의 사용을 원하기 때문에 할 수있을 것입니다 가정 xp_cmdshell을 사용할 수 있어야합니다. 이들은 모든 작업 로그에서 찾을 수있는 것보다 훨씬 많은 정보를 제공합니다. 당신 (또는 나)은 이것을 확장하여 주어진 패키지 이름에 대한 최신 오류를 반환 할 수 있습니다. http://sqlblog.com/blogs/jamie_thomson/archive/2012/10/17/querying-the-ssis-catalog-here-sa-handy-query.aspx –

+0

@ Nice.McDermaid - 비슷한 점이 있지만 작업이 실패하자마자 생성되는 무언가가 필요합니다. 설정된 시간에 실행되고 실패한 작업에 대한 모든 정보를 얻는 예약 된 작업이 아닙니다. 즉, 작업이 실패하고 알림 이메일을 보내 자마자 그 이메일에 오류 메시지 정보가 모두 필요하거나 전체 메시지를 캡처 할 수있는 다른 이메일이 필요합니다. –

+0

글쎄, 이미 이메일을 보내고있다. 전자 메일을 보내는 프로세스를 설명하면 무언가를 해결할 수 있는지 알 수 있습니다. SQL 에이전트 작업 단계가 실패하면 아니면 SSIS 패키지 안에 있습니까? –

답변

0

하나의 더 좋은 방법은 여러 작업 단계를 사용하는 것입니다.

Step1: Execute Package 

1 단계가 실패 할 경우 :

2 단계는 이전 단계의 SSIS 패키지에 의해 생성 된 로그를 첨부 할 수 있습니다 OU 같은 여러 가지 방법으로 사용자 정의 할 수 있습니다
Step2: use T-SQL with sp_db_sendmail 

.

또는

는 작업 기록에서 오류 메시지를 확인하고 Refer을 sp_db_sendmail에 추가.

프로젝트 배포 모델을 사용하는 경우 SP를 사용하여 ssis 패키지를 실행하고 로그 테이블에서 오류 정보를 가져 오는 것과 같이 카탈로그로 많은 작업을 수행 할 수 있습니다.

+0

sysjobs 및 sysjobhistory를 쿼리하는 2 단계가있는 경우 메서드를 사용하면 방금 발생한 오류 정보가 이미 기록되어 있습니까? 또는 2 단계를 포함하여 전체 작업이 완료된 후 해당 테이블에 오류 정보가 기록됩니까? 그렇다면 1 단계에서 발생한 오류 정보가 없으므로 내 목적에 도움이되지 않습니다. 내가 잘못 했습니까? –

0

다음은 작업에서 사용할 수있는 스크립트입니다. 현재 날짜에 실패한 작업을 찾습니다. 이 작업을 하루에 한 번 실행하면 그 날에 실패한 작업을 볼 수 있습니다. 30 분마다 실행하고 지난 한 시간 내에 실패한 작업 만 보려면 시간 변수를 추가 할 수 있습니다. 당신은 내가 당신이 sp_send_dbmail

declare @filepath nvarchar(100)  --file path where results are stored as csv 
declare @filename nvarchar(100)  --file name where results are stored 
declare @command nvarchar(4000)  --dynamic sql of bcp command 
declare @count int     --result count 
declare @emailList varchar(4000) --people to email 
declare @dt int      --current date in INT format 



set @filepath = '"e:\somefolder\' 
set @filename = 'Failures.csv"' 
set @emailList = '[email protected]; [email protected]' 
set @dt = (select convert(int,replace(convert(date,substring(convert(varchar,getdate()),1,11)),'-',''))) 

--query to get the jobs that failed and why. Looks for jobs that were executed today. 
select 
    h.run_date, 
    h.run_time, 
    h.run_status, 
    j.name, 
    j.description, 
    h.message 
from 
    msdb.dbo.sysjobhistory h 
    inner join 
    msdb.dbo.sysjobs j on j.job_id = h.job_id 
where 
    h.run_status = 0 
    and h.run_date = @dt 

--if there were failures then put them in a csv and email them. 
set @count = @@ROWCOUNT 

if (select @count) > 0 
begin 
    set @command = 'bcp "select h.run_date, h.run_status, j.name, j.description, h.message from msdb.dbo.sysjobhistory h inner join msdb.dbo.sysjobs j on j.job_id = h.job_id where h.run_status = 0 and h.run_date = convert(int,''' + convert(varchar,@dt) + ''') " queryout ' 
    set @command = @command + @filepath + @filename + ' -c -t, -T '----> character data, tab delimtted is default use -t, for comma ... trusted conn,server instance to connect to 
    exec master..xp_cmdshell @command 

    exec msdb.dbo.sp_send_dbmail 
        @profile_name = null, 
        @recipients = @emailList, 
        @body = 'Attached is the job failure results', 
        @body_format = 'TEXT', 
        @subject = 'Job Failures', 
        @file_attachments = 'e:\someFolder\Failures.csv' 

end 
+0

다시 말하지만,이 작업은 예정된 작업입니다. 작업이 실패 할 때 바로 생성되는 작업이 필요합니다. 작업이 실패하자마자 전체 오류 메시지를 이메일로 보내야합니다. –

+0

이렇게 매분마다 실행하십시오. 그것은 세금이 부과되지 않습니다 – scsimon

+0

나는 최적의 해결책을 내놓으라는 질문을 받았다. 1 분짜리 일정을 세우는 것은 하나가 아닐 것이다. –

관련 문제