Sqlserver
 sql >> डेटाबेस >  >> RDS >> Sqlserver

T-SQL का उपयोग करके SQL सर्वर में SQL जॉब्स को कॉन्फ़िगर करें

SQL सर्वर एजेंट डेटाबेस कार्यों के स्वचालन के लिए उपयोग किया जाने वाला एक घटक है। उदाहरण के लिए, हमें केवल गैर-व्यावसायिक घंटों के दौरान उत्पादन सर्वर पर इंडेक्स रखरखाव करने की आवश्यकता है। इसलिए, हम इंडेक्स रखरखाव चलाने के लिए एक SQL सर्वर जॉब बनाते हैं और इसे "ऑफ" घंटों के लिए शेड्यूल करते हैं।

जब हम SQL सर्वर स्थापित करते हैं, तो SQL सर्वर एजेंट सेवा अक्षम हो जाती है। सबसे पहले, हम इसे सक्षम करते हैं और इसे मैन्युअल रूप से प्रारंभ करते हैं। फिर, हम SQL सर्वर प्रबंधन स्टूडियो और MSDB डेटाबेस की सिस्टम संग्रहीत कार्यविधियों का उपयोग करके SQL सर्वर कार्य को कॉन्फ़िगर करते हैं।

यह आलेख बताता है कि MSDB डेटाबेस की सिस्टम संग्रहीत कार्यविधियों का उपयोग करके SQL सर्वर जॉब कैसे बनाया जाए।

MSDB डेटाबेस की सिस्टम संग्रहीत कार्यविधियाँ

SQL सर्वर निम्नलिखित का उपयोग करता है:

  1. sp_add_job :प्रक्रिया एक नया कार्य सृजित करने की है। यदि यह सफल होता है, तो यह @job_id लौटाता है। निम्नलिखित तर्क लागू होते हैं:
  • @job_name:यह एक अद्वितीय कार्य नाम है।
  • @सक्षम:कार्य सक्षम या अक्षम है। एक बार नौकरी बन जाने के बाद, आप कार्य को सक्षम करने के लिए पैरामीटर के मान को 1 के रूप में सेट कर सकते हैं।
  • @notify_level_eventlog:इस पैरामीटर का उपयोग विंडोज इवेंट व्यूअर में SQL जॉब की स्थिति लिखने के लिए किया जाता है।
मान विवरण
0 कार्य का परिणाम इवेंट लॉग में नहीं लिखा जाएगा।
1 यदि कार्य सफलतापूर्वक निष्पादित होता है, तो परिणाम ईवेंट व्यूअर को लिखा जाएगा
2 (डिफ़ॉल्ट मान) यदि कार्य विफल हो जाता है, तो परिणाम और त्रुटि संदेश ईवेंट व्यूअर को लिखा जाएगा
3 कार्य का परिणाम ईवेंट व्यूअर को लिखा जाता है।
  • @notify_level_email:यह पैरामीटर SQL जॉब परिणाम के बारे में ईमेल भेजने का कार्य करता है। पैरामीटर के मान्य मान @notify_level_eventlog तर्क मानों के समान हैं।
  • @notify_level_page:यह पैरामीटर SQL जॉब परिणाम की पेजर सूचना भेजने का कार्य करता है। पैरामीटर के मान्य मान @notify_level_eventlog तर्क मानों के समान हैं।
  • @delete_level:यह पैरामीटर पूरा होने के बाद कार्य को हटाने का कार्य करता है। इस स्थिति में, पैरामीटर का मान 1 होना चाहिए। ध्यान दें कि डिफ़ॉल्ट मान 0 है; फिर, यह पूरा होने के बाद कार्य को नहीं हटाएगा।
  • @category_level:यह पैरामीटर कार्य श्रेणी के मानों को इंगित करता है। डिफ़ॉल्ट मान NULL है।
  • @owner_login_name:मान डोमेन नाम या नौकरी के मालिक का SQL लॉगिन नाम है।

2. Sp_add_jobserver: यह संग्रहीत कार्यविधि SQL कार्य निष्पादन के लिए लक्ष्य सर्वर निर्दिष्ट करने का कार्य करती है। प्रक्रिया निम्नलिखित तर्कों को स्वीकार करती है:

  • @job_id:यह SQL जॉब का UNIQUEIDENTIFIER है। इस तर्क का डिफ़ॉल्ट मान NULL है।
  • @job_name:यह SQL जॉब का नाम है।
  • @server_name:यह उस सर्वर का नाम है जहां आप SQL जॉब चलाना चाहते हैं। डिफ़ॉल्ट तर्क मान स्थानीय सर्वर (LOCAL) या लक्ष्य सर्वर होस्टनाम हो सकता है।

<मजबूत>3. sp_add_jobstep: यह संग्रहीत कार्यविधि SQL कार्य में कार्य चरण जोड़ने के लिए कार्य करती है। प्रक्रिया निम्नलिखित तर्कों का उपयोग करती है:

  • @job_name:उस जॉब का नाम जिसमें आप स्टेप जोड़ रहे हैं। यह डिफ़ॉल्ट मान के रूप में NULL वाला एक SYSNAME है।
  • @step_name:चरण का नाम। यह डिफ़ॉल्ट मान के रूप में NULL वाला एक SYSNAME है।
  • @step_id:कार्य चरण की अनुक्रमिक आईडी. यह एक अंतराल के बिना एक वृद्धिशील संख्या है। यह एक INT मान है, और डिफ़ॉल्ट मान NULL है।
  • @cmdexec_success_code:यह मान CmdExec सबसिस्टम द्वारा लौटाया जाता है। यह इंगित करता है कि क्या कमांड निष्पादन सफल रहा। डिफ़ॉल्ट मान के रूप में 0 के साथ कोड int मान है।
  • @on_sucess_action:यह मान उस क्रिया को इंगित करता है जिसे कार्य चरण सफलतापूर्वक पूरा होने के बाद किया जाना चाहिए। मान निम्न में से कोई भी हो सकते हैं:
मान विवरण
1 नौकरी छोड़ें और सफलता लौटाएं
2 नौकरी छोड़ें और वापसी विफल
3 अगले कार्य चरण पर जाएं
4 on_success_step_id की चरण आईडी पर जाएं
  • @on_fail_action:निर्दिष्ट करें कि कार्य के चरण विफल होने पर क्या कार्रवाई करनी है। यह एक INT मान है, और डिफ़ॉल्ट मान NULL है।
  • @retry_attempt:जॉब स्टेप फेल होने के बाद रिट्रीट के प्रयासों की संख्या निर्दिष्ट करें। यह एक INT मान है, और डिफ़ॉल्ट मान NULL है।
  • @retry_interval:दो SQL जॉब चरण विफलता प्रयासों के बीच समय अंतराल (मिनट) सेट करें। यह एक INT मान है, और डिफ़ॉल्ट मान NULL है।
  • @os_run_priority:
  • @Subsystem:कमांड को निष्पादित करने के लिए SQL सर्वर एजेंट द्वारा उपयोग किए जाने वाले सबसिस्टम का नाम निर्दिष्ट करें। मान्य मान निम्नलिखित हैं:
सबसिस्टम मान विवरण
CmdExec ऑपरेटिंग सिस्टम कमांड या निष्पादन योग्य फ़ाइल(*.exe,*.bat)
विश्लेषण SQL सर्वर विश्लेषण सेवा क्वेरी, उदाहरण के लिए, MDX, DMX।
विश्लेषण SQL सर्वर विश्लेषण सेवा कमांड, उदाहरण के लिए, XMLA।
एसएसआईएस SQL सर्वर एकीकरण सेवा पैकेज।
पावरशेल पॉवरशेल कमांड या स्क्रिप्ट।
टी-एसक्यूएल T-SQL क्वेरी या संग्रहीत कार्यविधि
वितरण SQL सर्वर प्रतिकृति वितरक एजेंट।
स्नैपशॉट SQL सर्वर प्रतिकृति स्नैपशॉट एजेंट।
लॉगरीडर SQL सर्वर प्रतिकृति लॉग रीडर एजेंट।
क्यूरीडर SQL सर्वर प्रतिकृति कतार पाठक।
  • @command:कमांड निर्दिष्ट करें जिसे SQL सर्वर एजेंट सेवा को सबसिस्टम के माध्यम से निष्पादित करना चाहिए। डेटा प्रकार वर्चर (अधिकतम) है, और डिफ़ॉल्ट मान NULL है।
  • @Database_name:उस डेटाबेस का नाम निर्दिष्ट करें जहां आप कमांड चलाना चाहते हैं। यह पैरामीटर तब उपयोगी होता है जब आप SQL सर्वर एजेंट का उपयोग करके T-SQL स्क्रिप्ट चला रहे होते हैं।

4. Sp_add_jobschedule: संग्रहीत कार्यविधि SQL कार्य शेड्यूल बनाने का कार्य करती है। यह प्रक्रिया निम्नलिखित तर्कों का उपयोग करती है:

  • @job_name:SQL कार्य का नाम निर्दिष्ट करें। @job_name तर्क में निर्दिष्ट SQL कार्य के लिए शेड्यूल बनाया जाएगा।
  • @name:शेड्यूल का नाम। डेटा प्रकार varchar है, और डिफ़ॉल्ट मान NULL है।
  • @सक्षम:शेड्यूल को सक्षम करने के लिए 1 या शेड्यूल को अक्षम करने के लिए 0 सेट करें।
  • @freq_type:SQL कार्य निष्पादन के समय को इंगित करता है। पैरामीटर का डेटा प्रकार INT है, और डिफ़ॉल्ट मान 0 है। मान्य मान निम्न में से कोई भी हैं:
मान विवरण
1 कार्य केवल एक बार निष्पादित किया जाएगा।
4 दैनिक।
8 साप्ताहिक
16 मासिक
64 SQL सर्वर एजेंट सेवा प्रारंभ होने पर कार्य निष्पादित करें
128 सर्वर निष्क्रिय होने पर SQL कार्य निष्पादित करें।
  • @freq_interval:SQL कार्य निष्पादन के दिन को इंगित करता है। डेटा प्रकार INT है, और डिफ़ॉल्ट मान 0 है। मान @freq_type पैरामीटर में निर्दिष्ट मान पर निर्भर करता है। मान्य मान निम्न में से कोई हैं:
मान कार्य समय-सारणी पर प्रभाव
1 (एक बार) @Freq_interval उपयोग नहीं किया जाएगा।
4 (दैनिक) हर @freq_interval दिन
8 @Freq_interval का मान निम्न में से कोई भी हो सकता है:
1 =रविवार
2 =सोमवार
4 =मंगलवार
8 =बुधवार
16 =गुरुवार
32 =शुक्रवार
64 =शनिवार
16 कार्य को @Freq_interval पर चलाएं महीने का दिन
64 @Freq_interval उपयोग नहीं किया जाएगा
128 @Freq_interval उपयोग नहीं किया जाएगा
  • @freq_subday_type:freq_subday_interval की इकाई निर्दिष्ट करें। डेटा प्रकार INT है, और डिफ़ॉल्ट मान NULL है।
  • @active_start_date:वह तिथि निर्धारित करें जब आप कार्य निष्पादन प्रारंभ करना चाहते हैं। डेटा प्रकार INT है, और इसका कोई डिफ़ॉल्ट मान नहीं है। दिनांक प्रारूप YYYYMMDD है। मान 19900001 से अधिक या बराबर होना चाहिए।
  • @active_end_date:कार्य निष्पादन को रोकने के लिए दिनांक निर्दिष्ट करें। डेटा प्रकार INT है, जिसमें कोई डिफ़ॉल्ट मान नहीं है। दिनांक प्रारूप YYYYMMDD है, और मान 19900101 से अधिक या बराबर होना चाहिए।
  • @active_start_time:वह समय निर्दिष्ट करें जब आप कार्य निष्पादन प्रारंभ करना चाहते हैं। डिफ़ॉल्ट मान के बिना डेटा प्रकार INT है। समय प्रारूप एचएचएमएमएसएस है।
  • @active_end_time:वह समय निर्दिष्ट करें जब आप कार्य निष्पादन को रोकना चाहते हैं। डिफ़ॉल्ट मान के बिना डेटा प्रकार INT है। समय प्रारूप एचएचएमएमएसएस है।

एसक्यूएल जॉब बनाने के लिए टी-एसक्यूएल कोड

प्रक्रियाओं को स्पष्ट करने के लिए, हम AdventureWorks2017 के साथ वर्कस्टेशन पर SQL Server 2019 का उपयोग करते हैं। डेटाबेस, एक बैकअप से बहाल। हम दैनिक पूर्ण बैकअप . नामक एक SQL कार्य बनाते हैं - यह AdventureWorks2017 . का बैकअप बनाता है डेटाबेस और इसे C:\Backups . पर कॉपी करता है स्थान।

सबसे पहले, हमें एजेंट XP को सक्षम करना होगा। यह एक उन्नत विकल्प है। इसलिए, हम पहले उन्नत कॉन्फ़िगरेशन विकल्प और एजेंट XPs घटक को सक्षम करते हैं।

ऐसा करने के लिए, निम्न क्वेरी चलाएँ:

EXEC Sp_configure 
  'Show advanced options', 
  1 

go 

RECONFIGURE WITH override 

EXEC Sp_configure 
  'Agent XPs', 
  1 

go 

RECONFIGURE WITH override 

एजेंट के सक्षम होने के बाद, हम एजेंट सेवा शुरू करते हैं।

SQL सर्वर प्रबंधन स्टूडियो खोलें और SQL सर्वर इंस्टेंस से कनेक्ट करें। फिर, SQL सर्वर एजेंट पर राइट-क्लिक करें और प्रारंभ . क्लिक करें ।

एजेंट के शुरू होने के बाद, हम SQL सर्वर एजेंट जॉब बना सकते हैं।

जैसा कि बताया गया है, हम AdventureWorks2017 . का बैकअप बनाने के लिए एक SQL जॉब तैयार करेंगे डेटाबेस। इसके लिए हम SQL सर्वर एजेंट का उपयोग करके निम्न कमांड चलाते हैं।

N'Backup Database [AdventureWorks2017] to disk=''C:\Backups\AdventureWorks2017.bak'' with compression'

दैनिक पूर्ण बैकअप, . नामक एक नया SQL कार्य बनाने के लिए निम्नलिखित स्क्रिप्ट निष्पादित करें:

USE [msdb] 
go 
DECLARE @jobId BINARY(16) 

EXEC msdb.dbo.Sp_add_job 
  @job_name=N'Daily Full Backup', 
  @enabled=1, 
  @notify_level_eventlog=0, 
  @notify_level_email=2, 
  @notify_level_page=2, 
  @delete_level=0, 
  @category_name=N'[Uncategorized (Local)]', 
  @owner_login_name=N'NISARG-PC\Nisarg', 
  @job_id = @jobId output 

SELECT @jobId 
go  

यह मेरे स्थानीय कार्य केंद्र पर कार्य निष्पादित करेगा। इस प्रकार, हम इसे जॉब सर्वर में जोड़ते हैं।

निम्नलिखित क्वेरी निष्पादित करें:

EXEC msdb.dbo.Sp_add_jobserver 
  @job_name=N'Daily Full Backup', 
  @server_name = N'NISARG-PC' 
go 

कार्य चरण बैकअप डेटाबेस को निष्पादित करता है आज्ञा। कार्य चरण को कॉन्फ़िगर करने के लिए, निम्न कोड का उपयोग करें:

USE [msdb] 
go 

EXEC msdb.dbo.Sp_add_jobstep 
  @job_name=N'Daily Full Backup', 
  @step_name=N'Generate Backup', 
  @step_id=1, 
  @cmdexec_success_code=0, 
  @on_success_action=1, 
  @on_fail_action=2, 
  @retry_attempts=0, 
  @retry_interval=0, 
  @os_run_priority=0, 
  @subsystem=N'TSQL', 
  @command= 
N'Backup Database [AdventureWorks2017] to disk=''C:\Backups\AdventureWorks2017.bak'' with compression' 
, 
@database_name=N'master', 
@flags=0 
go 

SQL जॉब प्रतिदिन 1:00 पूर्वाह्न पर चलेगा। शेड्यूल को कॉन्फ़िगर करने के लिए, निम्न कोड का उपयोग करें:

USE [msdb] 
go 

DECLARE @schedule_id INT 

EXEC msdb.dbo.Sp_add_jobschedule 
  @job_name=N'Daily Full Backup', 
  @name=N'Run Backup At', 
  @enabled=1, 
  @freq_type=4, 
  @freq_interval=1, 
  @freq_subday_type=1, 
  @freq_subday_interval=0, 
  @freq_relative_interval=0, 
  @freq_recurrence_factor=1, 
  @active_start_date=20200918, 
  @active_end_date=99991231, 
  @active_start_time=10000, 
  @active_end_time=235959, 
  @schedule_id = @schedule_id output 

SELECT @schedule_id 

go 

कार्य का संपूर्ण कोड इस प्रकार है:

USE [msdb] 
go 

DECLARE @jobId BINARY(16) 

EXEC msdb.dbo.Sp_add_job 
  @job_name=N'Daily Full Backup', 
  @enabled=1, 
  @notify_level_eventlog=0, 
  @notify_level_email=2, 
  @notify_level_page=2, 
  @delete_level=0, 
  @category_name=N'[Uncategorized (Local)]', 
  @owner_login_name=N'NISARG-PC\Nisarg', 
  @job_id = @jobId output 

SELECT @jobId 
go 


EXEC msdb.dbo.Sp_add_jobserver 
  @job_name=N'Daily Full Backup', 
  @server_name = N'NISARG-PC' 

go 

USE [msdb] 
go 
EXEC msdb.dbo.Sp_add_jobstep 
  @job_name=N'Daily Full Backup', 
  @step_name=N'Generate Backup', 
  @step_id=1, 
  @cmdexec_success_code=0, 
  @on_success_action=1, 
  @on_fail_action=2, 
  @retry_attempts=0, 
  @retry_interval=0, 
  @os_run_priority=0, 
  @subsystem=N'TSQL', 
  @command= 
N'Backup Database [AdventureWorks2017] to disk=''C:\Backups\AdventureWorks2017.bak'' with compression' 
, 
@database_name=N'master', 
@flags=0 
go 

USE [msdb] 
go 

DECLARE @schedule_id INT 

EXEC msdb.dbo.Sp_add_jobschedule 
  @job_name=N'Daily Full Backup', 
  @name=N'Run Backup At', 
  @enabled=1, 
  @freq_type=4, 
  @freq_interval=1, 
  @freq_subday_type=1, 
  @freq_subday_interval=0, 
  @freq_relative_interval=0, 
  @freq_recurrence_factor=1, 
  @active_start_date=20200918, 
  @active_end_date=99991231, 
  @active_start_time=10000, 
  @active_end_time=235959, 
  @schedule_id = @schedule_id output 

SELECT @schedule_id 
go 

हम नीचे दिए गए कोड को निष्पादित करके पहले प्रदर्शन के लिए मैन्युअल रूप से कार्य चलाते हैं:

use msdb
go
exec sp_start_job 'Daily Full Backup'

आप निम्न क्वेरी चलाकर कार्य की स्थिति देख सकते हैं:

SELECT  NAME 
             AS [Job Name], 
             CONVERT(VARCHAR, Dateadd(s, ( run_time / 10000 ) * 60 * 60 
                                         
                                         + ( ( run_time - ( run_time / 10000 ) * 
                                                          10000 ) / 
                                             100 ) * 60 
                                         
                                         + ( run_time - ( run_time / 100 ) * 100 
                                           ), CONVERT(DATETIME, Rtrim(run_date), 113)), 100) 
             AS 
             [Job Executed Date and Time], 
             CASE 
               WHEN enabled = 1 THEN 'Enabled' 
               ELSE 'Disabled' 
             END 
             [Job Status], 
             CASE 
               WHEN JobHistory.run_status = 0 THEN 'Failed' 
               WHEN JobHistory.run_status = 1 THEN 'Succeeded' 
               WHEN JobHistory.run_status = 2 THEN 'Retry' 
               WHEN JobHistory.run_status = 3 THEN 'Cancelled' 
               ELSE 'Unknown' 
             END 
             [Job Outcome] 
FROM   sysjobhistory JobHistory 
       JOIN sysjobs Jobs 
         ON JobHistory.job_id = Jobs.job_id 
WHERE  NAME = 'Daily Full Backup' 

आउटपुट:

बैकअप फ़ाइल देखने के लिए, C:\Backups खोलें स्थान:

जैसा कि आप देख सकते हैं, बैकअप फ़ाइल बना दी गई है।


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL सर्वर अप्रयुक्त सूचकांक

  2. मैं एसक्यूएल में यादृच्छिक संख्याओं के साथ कॉलम कैसे भर सकता हूं? मुझे हर पंक्ति में समान मूल्य मिलता है

  3. SQL LIKE क्लॉज में SqlParameter का उपयोग काम नहीं कर रहा है

  4. अल्पविराम से अलग किए गए मान अलग करें और sql सर्वर में तालिका में संग्रहीत करें

  5. एएसपीनेट में एक एसक्यूएल सर्वर डेटाबेस से एक छवि प्रदर्शित करने का सबसे अच्छा तरीका क्या है?