नौकरी शेड्यूल पर नहीं चल रही है


11

इसलिए मेरे पास एक बुनियादी SQL एजेंट काम है जो एक फाइल को एक फ़ोल्डर से दूसरे फ़ोल्डर में ले जाने के लिए एक Robocopy स्क्रिप्ट चलाता है।

जॉब एक ​​बहुत ही बेसिक सेट अप है। सक्रिय

एक बहुत ही बुनियादी कार्यक्रम के साथ।

अनुसूची

और फिर भी इसे अभी तक चलना बाकी है। मैं सफलतापूर्वक चलाने का मतलब यह नहीं है कि मेरा मतलब है कि मैं बिल्कुल भी दौड़ता हूं। क्या ऐसा होने का कोई कारण है?

अतिरिक्त जानकारी के लिए मैं नौकरी से भी स्क्रिप्ट लिखूंगा।

USE [msdb]
GO

/****** Object:  Job [MoveMantisFilesToArchive]    Script Date: 12/23/2015 10:21:52 AM ******/
BEGIN TRANSACTION
DECLARE @ReturnCode INT
SELECT @ReturnCode = 0
/****** Object:  JobCategory [[Uncategorized (Local)]]]    Script Date: 12/23/2015 10:21:52 AM ******/
IF NOT EXISTS (SELECT name FROM msdb.dbo.syscategories WHERE name=N'[Uncategorized (Local)]' AND category_class=1)
BEGIN
EXEC @ReturnCode = msdb.dbo.sp_add_category @class=N'JOB', @type=N'LOCAL', @name=N'[Uncategorized (Local)]'
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback

END

DECLARE @jobId BINARY(16)
EXEC @ReturnCode =  msdb.dbo.sp_add_job @job_name=N'MoveMantisFilesToArchive', 
        @enabled=1, 
        @notify_level_eventlog=0, 
        @notify_level_email=2, 
        @notify_level_netsend=0, 
        @notify_level_page=0, 
        @delete_level=0, 
        @description=N'Moves Mantis files to archive. It''s a very descriptive title.', 
        @category_name=N'[Uncategorized (Local)]', 
        @owner_login_name=N'sa', 
        @notify_email_operator_name=N'MyEmailGroup', @job_id = @jobId OUTPUT
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
/****** Object:  Step [Move the files in the afformentioned title.]    Script Date: 12/23/2015 10:21:53 AM ******/
EXEC @ReturnCode = msdb.dbo.sp_add_jobstep @job_id=@jobId, @step_name=N'Move the files in the afformentioned title.', 
        @step_id=1, 
        @cmdexec_success_code=0, 
        @on_success_action=1, 
        @on_success_step_id=0, 
        @on_fail_action=2, 
        @on_fail_step_id=0, 
        @retry_attempts=0, 
        @retry_interval=0, 
        @os_run_priority=0, @subsystem=N'CmdExec', 
        @command=N'robocopy MySoruce MyDestination /mov', 
        @flags=0, 
        @proxy_name=N'RunsAs'
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
EXEC @ReturnCode = msdb.dbo.sp_update_job @job_id = @jobId, @start_step_id = 1
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
EXEC @ReturnCode = msdb.dbo.sp_add_jobschedule @job_id=@jobId, @name=N'M-F', 
        @enabled=1, 
        @freq_type=8, 
        @freq_interval=62, 
        @freq_subday_type=1, 
        @freq_subday_interval=0, 
        @freq_relative_interval=0, 
        @freq_recurrence_factor=1, 
        @active_start_date=20151218, 
        @active_end_date=99991231, 
        @active_start_time=170000, 
        @active_end_time=235959, 
        @schedule_uid=N'bcb83273-19e8-49fb-a456-8517642370e3'
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
EXEC @ReturnCode = msdb.dbo.sp_add_jobserver @job_id = @jobId, @server_name = N'(local)'
IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback
COMMIT TRANSACTION
GOTO EndSave
QuitWithRollback:
    IF (@@TRANCOUNT > 0) ROLLBACK TRANSACTION
EndSave:

GO

ठीक है जब यह मूल रूप से स्थापित किया गया था तो यह सेवा खाते के रूप में चल रहा था। चूंकि यह एक अलग खाते में बदल दिया गया है और ठीक चल रहा है।
ज़ेन

जवाबों:


4

इस प्रश्न पर टिप्पणी: इस पोस्ट को देखकर मुझे लगता है कि आपकी नौकरी मूल रूप से 'सा' के रूप में चल रही थी। ऐसा प्रतीत होता है कि आपके SQL सर्वर के लिए सेवा खाते को आवश्यक फ़ाइल शेयरों के अधिकार नहीं दिए गए थे

यह जाहिरा तौर पर क्या काम की वजह से लग रहा था जैसे कि यह " रनिंग " हमेशा के लिए था। बेशक, वास्तव में कुछ भी नहीं हो रहा था।

यह एक है सबसे अच्छा अभ्यास किसी भी करने के लिए SQL सर्वर सेवा खाते अधिकार देने को रोककर रखने की गैर जरूरी फ़ोल्डरों । यह SQL सर्वर वातावरण को असुरक्षित गतिविधियों के लिए दोहन से रखने में मदद करता है। (अधिकतर यही कारण है कि xp_cmdshellसंग्रहीत प्रक्रिया डिफ़ॉल्ट रूप से अक्षम है।)

जब आपने saउस खाते से स्विच किया, जिसमें फ़ाइल सिस्टम के लिए आवश्यक अधिकार थे, तो सब कुछ काम किया। जो, ज़ाहिर है, सही बात थी।

शेड्यूल किए गए SQL एजेंट जॉब कभी-कभी हैंग हो जाते हैं (लेकिन देखो कि वे अभी भी 'चल रहे हैं')। आमतौर पर यह बाहरी मुद्दों के कारण होता है, जैसे कि फ़ाइल सिस्टम तक पहुंच न होना।

जब तक एसक्यूएल एजेंट का मानना ​​है कि काम "चालू" है, तब तक वह फिर से काम शुरू करने की कोशिश नहीं करेगा।

सरल पाठ:

  1. SQL सर्वर को सत्तारूढ़ करने के रूप में 'सा' के बारे में सोचो, लेकिन कहीं और अधिकार के लिए भीख माँगना चाहिए।
  2. SQL एजेंट नौकरी के इतिहास की समीक्षा करते समय, उन नौकरियों के लिए सतर्क रहें जो बहुत लंबे समय से चल रही हैं। आमतौर पर इसका मतलब है कि SQL एजेंट को इस बात का एहसास नहीं है कि यह प्रक्रिया मर गई है।
  3. हमेशा SQL एजेंट नौकरियों के लिए एक प्रॉक्सी खाते का उपयोग करने की योजना है जो SQL सर्वर के बाहर डेटा या ऑब्जेक्ट तक पहुंचने की आवश्यकता है। और यह सुनिश्चित कर लें कि जो क्रेडेंशियल प्रॉक्सी का उपयोग कर रहे हैं, उन्हें अधिकार दिए गए हैं।

और, ज़ाहिर है, हर नियम के अपवाद हैं।


TLDR: ध्यान नहीं दे रहा था और कुछ बेवकूफ था।
ज़ेन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.