12

मेरे पास बस सामान्य से अधिक समय तक SQL सर्वर जॉब रन निर्धारित है, और मैं वास्तव में एक निश्चित अवधि के बाद इसे रोकने के लिए टाइमआउट सेट करने के साथ कर सकता था।एसक्यूएल सर्वर एजेंट जॉब टाइमआउट

मैं इस पर थोड़ा सा अंधेरा हो सकता हूं, लेकिन मुझे नौकरी के लिए टाइमआउट सेट करने का कोई तरीका नहीं दिख रहा है। क्या कोई इसे करने का तरीका जानता है?

धन्यवाद

+1

+1 काम संपादक में कोई स्पष्ट "टाइमआउट" संपत्ति नहीं है। मुझे दिलचस्पी है कि लोग क्या करते हैं। – Tomalak

+0

मुझे लगता है कि आपको SQL में WAITFOR-type सेटिंग में जोड़ना होगा। –

उत्तर

10

हम एक रात काम प्रसंस्करण सबसिस्टम के हिस्से के रूप नीचे कोड की तरह कुछ करना - यह यह वास्तव में वास्तव में तुलना में अधिक जटिल है, उदाहरण के लिए हम नौकरियों के कई अन्योन्याश्रित सेट कार्रवाई कर रहे हैं, और विन्यास तालिकाओं से काम के नाम और टाइमआउट मानों में पढ़ा - लेकिन इस विचार को दर्शाता है:

DECLARE @JobToRun NVARCHAR(128) = 'My Agent Job' 
DECLARE @dtStart DATETIME = GETDATE(), @dtCurr DATETIME 
DECLARE @ExecutionStatus INT, @LastRunOutcome INT, @MaxTimeExceeded BIT = 0 
DECLARE @TimeoutMinutes INT = 180 

EXEC msdb.dbo.sp_start_job @JobToRun 
SET @dtCurr = GETDATE() 
WHILE 1=1 
BEGIN 
    WAITFOR DELAY '00:00:10' 
    SELECT @ExecutionStatus=current_execution_status, @LastRunOutcome=last_run_outcome 
    FROM OPENQUERY(LocalServer, 'set fmtonly off; exec msdb.dbo.sp_help_job') where [name] = @JobToRun 
    IF @ExecutionStatus <> 4 
    BEGIN -- job is running or finishing (not idle) 
     SET @dtCurr=GETDATE() 
     IF DATEDIFF(mi, @dtStart, @dtCurr) > @TimeoutMinutes 
     BEGIN 
      EXEC msdb.dbo.sp_stop_job @[email protected]     
      -- could log info, raise error, send email etc here 
     END 
     ELSE 
     BEGIN 
      CONTINUE 
     END 
    END 
    IF @LastRunOutcome = 1 -- the job just finished with success flag 
    BEGIN 
     -- job succeeded, do whatever is needed here 
     print 'job succeeded'         
    END 

END 
2

यह किस तरह का काम है? आप पूरे काम को एक जबकि लूप के भीतर एक TSQL स्क्रिप्ट में डालने पर विचार करना चाह सकते हैं। जांच करने की शर्त स्पष्ट रूप से वर्तमान समय और नौकरी के प्रारंभ समय के बीच का समय अंतर होगा।

राज

+0

इस विशिष्ट नौकरी के साथ, मैं इसे विभाजित कर सकता था ... मैं बस उम्मीद कर रहा था कि "उचित" समाधान हो सकता है। धन्यवाद –

संबंधित मुद्दे