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

डेटाबेस सारांश रिपोर्ट भेजने के लिए ऑटो-ईमेल सिस्टम

डेटाबेस मॉनिटरिंग किसी भी डेटाबेस एडमिनिस्ट्रेटर का सबसे जरूरी काम है। बड़े संगठनों और कंपनियों के पास कई डेटाबेस सर्वर होते हैं जो या तो एक ही डेटा केंद्र में या भौगोलिक रूप से भिन्न डेटा केंद्रों में स्थित होते हैं। डेटाबेस निगरानी के लिए कई मानक उपकरण हैं। वे उपकरण डेटा को पॉप्युलेट करने के लिए SQL सर्वर गतिशील प्रबंधन दृश्य और सिस्टम संग्रहीत कार्यविधि का उपयोग करते हैं। इन डीएमवी का उपयोग करके, हम डेटाबेस की स्थिति को भरने और रिपोर्ट को ईमेल करने के लिए अपनी अनुकूलित स्वचालित प्रणाली बना सकते हैं।

इस लेख में, मैं यह प्रदर्शित करने जा रहा हूं कि हम विभिन्न सर्वरों पर स्थित डेटाबेस की जानकारी को पॉप्युलेट करने के लिए सिस्टम संग्रहीत प्रक्रिया और लिंक किए गए सर्वर का उपयोग कैसे कर सकते हैं और रिपोर्ट भेजने के लिए कार्य को शेड्यूल कर सकते हैं।

इस डेमो में, मैं निम्नलिखित कार्य करने जा रहा हूँ:

  1. TTI609-VM1 पर आवश्यक संग्रहीत कार्यविधियां बनाएं , TTI609-VM2, और TTI412-VM डेटाबेस, डेटाबेस ऑब्जेक्ट और SQL जॉब्स की जानकारी भरने के लिए सर्वर।
  2. डेटाबेस सारांश, डेटाबेस ऑब्जेक्ट सारांश, और SQL कार्य सारांश को TTI609-VM1 से पॉप्युलेट करने के लिए एक संग्रहीत कार्यविधि बनाएं और TTI609-VM2 सर्वर और उन्हें संबंधित तालिकाओं में संग्रहीत करें।
  3. एक SSIS पैकेज बनाएं जो निम्नलिखित कार्य करता है:
      • SQL स्क्रिप्ट कार्य निष्पादित करें . का उपयोग करके संग्रहीत कार्यविधि निष्पादित करता है ।
      • TTI412-VM पर बनाए गए SQL तालिकाओं से डेटा निर्यात करें और इसे एक्सेल फ़ाइल के अलग-अलग टैब में स्टोर करें।
  4. डेटाबेस जानकारी और रिपोर्ट को ईमेल करने के लिए संग्रहीत प्रक्रिया को पॉप्युलेट करने के लिए SSIS पैकेज को निष्पादित करने के लिए SQL सर्वर जॉब बनाएं।

निम्नलिखित छवि डेमो सेटअप को दर्शाती है:

संग्रहीत कार्यविधियों की सूची निम्नलिखित है:

तालिकाओं की सूची निम्नलिखित है:

दोनों डेटाबेस सर्वर पर संग्रहीत कार्यविधियाँ बनाएँ

जैसा कि मैंने उल्लेख किया है, हम TTI609-VM1 . से डेटा भरने जा रहे हैं और TTI609-VM2 सर्वर। डेटाबेस को पॉप्युलेट करने के लिए उपयोग की जाने वाली संग्रहीत कार्यविधियाँ दोनों सर्वरों में समान रहेंगी।
तो सबसे पहले, मैंने DBATools नाम का एक डेटाबेस बनाया है। दोनों सर्वरों पर। मैंने उन डेटाबेस में एक संग्रहीत प्रक्रिया बनाई है। ऐसा करने के लिए, TTI609-VM1 . पर निम्न कोड निष्पादित करें और TTI609-VM2 सर्वर:

उपयोग [मास्टर] गो /****** ऑब्जेक्ट:डेटाबेस [डीबीटूल] स्क्रिप्ट दिनांक:10/25/2018 11:25:27 पूर्वाह्न ******/ डेटाबेस बनाएं [डीबीटूल] रोकथाम =कोई नहीं प्राथमिक पर ( NAME =N'DBATools', filename =N'C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\DATA\DBATools.mdf' , size =3264kb, maxsize =Unlimited, filegrowth =1024kb) लॉग ON (NAME =N'DBATools_log', filename =N'C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\DATA\DBATools_log.ldf' , size =816kb, maxsize =2048gb, filegrowth =10%) जाओ 

Pull_Database_Information . नामक एक संग्रहीत कार्यविधि बनाएं DBATools . में डेटाबेस। यह संग्रहीत कार्यविधि दोनों डेटाबेस सर्वरों पर मौजूद सभी डेटाबेस की निम्न जानकारी को पॉप्युलेट करती है।

  1. डेटाबेस का नाम।
  2. डेटाबेस संगतता स्तर।
  3. डेटाबेस की स्थिति (ऑनलाइन/ऑफ़लाइन/पुनर्स्थापित/निलंबित)।
  4. डेटाबेस पुनर्प्राप्ति मॉडल (सरल / पूर्ण / बल्क-लॉग)।
  5. डेटाबेस का आकार एमबी में।
  6. कुल डेटा फ़ाइल आकार।
  7. प्रयुक्त डेटा फ़ाइल का आकार।
  8. कुल लॉग फ़ाइल का आकार।
  9. प्रयुक्त लॉग फ़ाइल आकार।

DBATools . में निम्न कोड निष्पादित करें संग्रहीत कार्यविधि बनाने के लिए दोनों डेटाबेस सर्वरों का डेटाबेस:

उपयोग डीबीएटूल्स गो क्रिएट प्रोसीड्योर पुल_डाटाबेस_इनफॉर्मेशन जैसे कि ऑब्जेक्ट_आईडी ('tempdb.dbo.#DBSize') न्यूल ड्रॉप टेबल नहीं है #dbsize क्रिएट टेबल #dbsize (data_id INT PRIMARY KEY, data_file_used_size DECIMAL_file_used_size DECIMAL(18, 2), log_file_used_size DECIMAL(18, 2) (18, 2)) DECLARE @SQLCommand NVARCHAR (अधिकतम) चुनें @SQLCommand =सामग्री ((चयन करें 'उपयोग [' + d.NAME + '] INSERT INTO #DBSize (डेटाबेस_आईडी, डेटा_फाइल_यूज्ड_साइज, लॉग_फाइल_यूज्ड_साइज) सेलेक्ट डीबी_आईडी () , एसयूएम ( केस जब [टाइप] =0 फिर स्पेस_यूज्ड END), एसयूएम (केस जब [टाइप] =1 फिर स्पेस_यूज्ड END) से (सेलेक्ट एस। [टाइप], स्पेस_यूज्ड =एसयूएम (फाइलप्रॉपर्टी (एस. * 8. / 1024) sys.database_files s GROUP BY s। h(''), type).value('.', 'NVARCHAR(MAX)'), 1, 2, '') EXEC sys.Sp_executesql @SQLCommand सेलेक्ट d.database_id AS 'डेटाबेस आईडी', d.NAME AS 'डेटाबेस नाम', d.state_desc 'डेटाबेस स्थिति' के रूप में, d.recovery_model_desc 'रिकवरी मॉडल' के रूप में, t.total_db_size 'डेटाबेस आकार' के रूप में, t.data_file_size AS 'डेटा फ़ाइल आकार', s.data_file_used_size AS 'डेटा फ़ाइल का उपयोग किया गया ', t.log_file_size AS 'लॉग फाइल साइज', s.log_file_used_size AS 'लॉग फाइल यूज्ड' से (सेलेक्ट डेटाबेस_आईडी, लॉग_फाइल_साइज =कास्ट (योग (केस जब [टाइप] =1 फिर साइज END) * 8. / 1024 दशमलव के रूप में (18, 2) ), data_file_size =कास्ट (योग (केस जब [प्रकार] =0 फिर आकार अंत) * 8. / 1024 दशमलव के रूप में(18, 2)), कुल_डीबी_साइज =कास्ट (योग (आकार) * 8. / 1024 दशमलव के रूप में(18, 2) ) sys.master_files GROUP BY database_id से) t sys.databases से d.d.database_id पर =t.database_id लेफ्ट जॉइन करें #dbsize s ऑन d.database_id =s.database_id t.total_db_presize DESC द्वारा ऑर्डर करें। 

दूसरे, Pull_Database_Objects . नामक संग्रहीत कार्यविधियां बनाएं DBATools . में डेटाबेस। यह संग्रहीत प्रक्रिया दोनों डेटाबेस सर्वरों के भीतर सभी डेटाबेस के माध्यम से पुनरावृत्त होती है और सभी डेटाबेस ऑब्जेक्ट्स की गिनती को पॉप्युलेट करती है। यह निम्नलिखित कॉलमों को भरता है:

  1. सर्वर / होस्ट नाम।
  2. डेटाबेस का नाम।
  3. डेटाबेस ऑब्जेक्ट का प्रकार (तालिका/संग्रहीत प्रक्रिया/एसक्यूएल स्केलर फ़ंक्शन/बाधाएं आदि…)
  4. डेटाबेस ऑब्जेक्ट्स की कुल संख्या।

DBATools . में निम्नलिखित कोड निष्पादित करें संग्रहीत प्रक्रिया बनाने के लिए दोनों डेटाबेस सर्वर पर डेटाबेस:

 उपयोग dbatools जाओ प्रक्रिया बनाएं [Pull_database_objects] जैसे ही तालिका बनाएं # finalsummery (आईडी INT पहचान (1, 1), डेटाबेस नाम VARCHAR (350), ऑब्जेक्ट टाइप VARCHAR (200), कुल ऑब्जेक्ट INT) घोषित @SQLCommand NVARCHAR(अधिकतम) @I INT=0 डिक्लेयर @DBName VARCHAR(350) DECLARE @DBCount INT CREATE TABLE #databases ( NAME VARCHAR(350)) INSERT INTO #databases (NAME) sys.databases से नाम चुनें जहां डेटाबेस_आईडी> 4 और नाम नहीं है ( ' ReportServer', 'reportservertempdb' ) SET @DBCount=(#databases से गणना (*) चुनें) जबकि ( @DBCount> @I ) BEGIN SET @DBName=(#databases से शीर्ष 1 नाम चुनें) SET @SQLCommand=' में डालें #FinalSummery (डेटाबेसनाम, ऑब्जेक्ट टाइप, टोटलऑब्जेक्ट्स) ''' + @DBName + '''' का चयन करें, जब टाइप ='' टीआर '' तब मामला '' एसक्यूएल डीएमएल ट्रिगर '' जब टाइप ='' एफएन '' तब '' एसक्यूएल स्केलर फंक्शन '' जब टाइप ='' डी '' तब '' डिफ़ॉल्ट (बाधा या स्टैंड-अलोन) '' जब टाइप ='' पीके '' तब '' प्राथमिक कुंजी बाधा '' जब टाइप ='' पी '' तब '' एसक्यूएल संग्रहीत प्रक्रिया '' टाइप करते समय =''यू'' तब ''टेबल (यूजर-डिफ़ाइंड)'' जब टाइप =''वी'' तब ''व्यू'' जब टाइप =''एक्स'' तब ''विस्तारित संग्रहित प्रक्रिया'' ऑब्जेक्ट टाइप के रूप में समाप्त होता है , काउंट (नाम) '+ @DBName +' .sys.all_objects समूह से कुल ऑब्जेक्ट 'प्रकार' EXEC Sp_executesql @SQLCommand #डेटाबेस से हटाएं जहां NAME =@DBName SET @[email protected] + 1 END चुनें होस्ट_नाम() AS ' सर्वर का नाम', डेटाबेसनाम, ऑब्जेक्ट टाइप , Totalobjects, Getdate () # finalsummery से 'रिपोर्टडेट' के रूप में जहां ऑब्जेक्ट टाइप न्यूल ड्रॉप टेबल नहीं है #फाइनलसमरी END

Pull_SQLJob_Information . नामक संग्रहीत कार्यविधियां बनाएं DBATools . में डेटाबेस। यह संग्रहीत प्रक्रिया सभी डेटाबेस सर्वर के माध्यम से पुनरावृत्त होती है और सभी SQL नौकरियों और उनकी स्थितियों की जानकारी को पॉप्युलेट करती है। यह निम्नलिखित कॉलमों को भरता है:

  1. सर्वर / होस्ट नाम।
  2. एसक्यूएल नौकरी का नाम।
  3. एसक्यूएल जॉब के मालिक।
  4. नौकरी श्रेणी।
  5. नौकरी का विवरण।
  6. नौकरी की स्थिति (सक्षम / अक्षम)
  7. नौकरी सृजन की तिथि।
  8. नौकरी संशोधित तिथि।
  9. नौकरी निर्धारित स्थिति।
  10. अनुसूची का नाम।
  11. आखिरी निष्पादन तिथि और समय
  12. अंतिम निष्पादन स्थिति।

DBATools . में निम्न कोड निष्पादित करें संग्रहीत प्रक्रिया बनाने के लिए दोनों डेटाबेस सर्वर पर डेटाबेस:

प्रक्रिया बनाएं, जैसे ही चुनें होस्ट_नाम () 'सर्वर नाम' के रूप में, ए.नाम के रूप में 'नौकरी का नाम', डी.नाम के रूप में मालिक, बी.नाम एएस श्रेणी, ए विवरण के रूप में विवरण, केस ए.सक्षम जब 1 फिर 'हां' जब 0 फिर 'नहीं' के रूप में 'सक्षम' के रूप में समाप्त होता है, a.date_created as createDate, a.date_modified as ModifiedDate, मामला जब f.schedule_uid शून्य है तब 'नहीं' अन्यथा 'हां' अंत 'अनुसूचित' के रूप में? , f.NAME AS JobScheduleName, Max(Cast(Stuff(Stuff(Cast(g.run_date AS VARCHAR), 7, 0, '-'), 5, 0, '-') + '' + Stuff(Stuff(Replace) (Str(g.run_time, 6, 0), '', '0'), 5, 0, ':'), 3, 0, ':') AS DATETIME) AS [LastRun], CASE g.run_status जब 0 तब 'असफल' जब 1 तब 'सफल' ss' जब 2 तब 'पुन:प्रयास करें' जब 3 तब 'रद्द' हो गया जब 4 तब 'प्रगति में' समाप्त स्थिति के रूप में msdb.dbo.sysjobs से एक आंतरिक जॉइन के रूप में msdb.dbo.sysjobhistory g ON a.job_id =g.job_id LEFT JOIN msdb.dbo.sysश्रेणियाँ a.category_id =b.category_id बाएँ शामिल हों a.owner_sid =d.sid लेफ्ट जॉइन msdb.dbo.sysjobschedules as e ON a.job_id =e.job_id लेफ्ट जॉइन msdb.dbo.sysschedules as f ON e.schedule_id =f.schedule_id ग्रुप बाय a.NAME, d.NAME , b.NAME, a.description, a.enabled, f.schedule_uid, f.NAME, a.date_created, a.date_modified, g.run_status ORDER BY a.NAME END

केंद्रीय सर्वर पर संग्रहीत कार्यविधियाँ, लिंक्ड सर्वर और तालिकाएँ बनाएँ

एक बार TTI609-VM1 . पर प्रक्रियाएं बन जाने के बाद और TTI609-VM2 डेटाबेस सर्वर, केंद्रीय सर्वर पर आवश्यक प्रक्रियाएं और टेबल बनाएं (TTI412-VM )।

मैंने मॉनिटरिंगडैशबोर्ड . नाम से एक अलग डेटाबेस बनाया है TTI412-VM . पर सर्वर। केंद्रीय सर्वर पर डेटाबेस बनाने के लिए निम्न कोड निष्पादित करें।

उपयोग [मास्टर] गो /****** ऑब्जेक्ट:डेटाबेस [मॉनिटरिंगडैशबोर्ड] स्क्रिप्ट दिनांक:10/25/2018 2:44:09 अपराह्न ******/डेटाबेस बनाएं [मॉनिटरिंगडैशबोर्ड] नियंत्रण =कोई नहीं प्राथमिक पर ( NAME =N'MonitoringDashboard', फ़ाइल नाम =N'E:\MS_SQL\SQL2017_Data\MonitoringDashboard.mdf', size =8192kb, maxsize =Unlimited, filegrowth =65536kb ) लॉग ऑन करें ( NAME =N'MonitoringDashboard_log', filename =N'E:\MS_SQL\SQL2017_Log\MonitoringDashboard_log.ldf', size =8192kb, maxsize =2048gb, filegrowth =65536kb ) go

एक बार डेटाबेस बन जाने के बाद, एक संग्रहीत कार्यविधि बनाएं जो TTI609-VM1 पर एक प्रक्रिया निष्पादित करने के लिए LINKED सर्वर का उपयोग करती है। और TTI609-VM2 डेटाबेस सर्वर। TTI412-VM . के "मास्टर" डेटाबेस में निम्न कोड निष्पादित करें लिंक्ड सर्वर बनाने के लिए डेटाबेस सर्वर:

स्क्रिप्ट 1:लिंक्ड सर्वर TTI609-VM1 बनाएं

उपयोग [मास्टर] गो /****** ऑब्जेक्ट:लिंक्डसर्वर [TTI609-VM1] स्क्रिप्ट दिनांक:10/25/2018 2:49:28 अपराह्न ******/ EXEC Master.dbo.Sp_addlinkedserver @server =N'TTI609-VM1', @srvproduct=N'SQL Server' /* सुरक्षा कारणों से लिंक किए गए सर्वर रिमोट लॉगिन पासवर्ड को ######## */EXEC Master.dbo.Sp_addlinkedsrvlogin @rmtsrvname से बदल दिया गया है। =N'TTI609-VM1', @useself=N'False', @locallogin=NULL, @rmtuser=N'sa', @rmtpassword='########' go EXEC Master.dbo.Sp_serveroption @ सर्वर=N'TTI609-VM1', @optname=N'collation संगत', @optvalue=N'true' go EXEC Master.dbo.Sp_serveroption @server=N'TTI609-VM1', @optname=N'data access' , @optvalue=N'true' go EXEC Master.dbo.Sp_serveroption @server=N'TTI609-VM1', @optname=N'dist', @optvalue=N'false' go EXEC Master.dbo.Sp_serveroption @server=N'TTI609-VM1', @optname=N'rpc', @optvalue=N'true' go EXEC Master.dbo.Sp_serveroption @server=N'TTI609-VM1', @optname=N'rpc out', @optvalue =N'true' जाओ EXEC मास्टर.dbo.Sp_serverop tion @ सर्वर=N'TTI609-VM1', @optname=N'connect timeout', @optvalue=N'0' go EXEC Master.dbo.Sp_serveroption @server=N'TTI609-VM1', @optname=N'query timeout', @optvalue=N'0' go EXEC Master.dbo.Sp_serveroption @server=N'TTI609-VM1', @optname=N'use Remote Collation', @optvalue=N'true' go EXEC Master.dbo। Sp_serveroption @server=N'TTI609-VM1', @optname=N'remote proc transaction Promotion', @optvalue=N'false' go

स्क्रिप्ट 2:लिंक्ड सर्वर TTI609-VM2 बनाएं

उपयोग [मास्टर] गो /****** ऑब्जेक्ट:लिंक्डसर्वर [TTI609-VM2] स्क्रिप्ट दिनांक:10/25/2018 2:55:29 अपराह्न *******/ EXEC Master.dbo.Sp_addlinkedserver @server =N'TTI609-VM2', @srvproduct=N'SQL Server' /* सुरक्षा कारणों से लिंक किए गए सर्वर रिमोट लॉगिन पासवर्ड को ######## */EXEC Master.dbo.Sp_addlinkedsrvlogin @rmtsrvname से बदल दिया गया है। =N'TTI609-VM2', @useself=N'False', @locallogin=NULL, @rmtuser=N'sa', @rmtpassword='########' go EXEC Master.dbo.Sp_serveroption @ सर्वर=N'TTI609-VM2', @optname=N'collation संगत', @optvalue=N'true' go EXEC Master.dbo.Sp_serveroption @server=N'TTI609-VM2', @optname=N'data access' , @optvalue=N'true' go EXEC Master.dbo.Sp_serveroption @server=N'TTI609-VM2', @optname=N'dist', @optvalue=N'false' go EXEC Master.dbo.Sp_serveroption @server=N'TTI609-VM2', @optname=N'rpc', @optvalue=N'true' go EXEC Master.dbo.Sp_serveroption @server=N'TTI609-VM2', @optname=N'rpc out', @optvalue =N'true' जाओ EXEC मास्टर.dbo.Sp_serverop tion @ सर्वर=N'TTI609-VM2', @optname=N'connect timeout', @optvalue=N'0' go EXEC Master.dbo.Sp_serveroption @server=N'TTI609-VM2', @optname=N'collation name', @optvalue=NULL go EXEC Master.dbo.Sp_serveroption @server=N'TTI609-VM2', @optname=N'query timeout', @optvalue=N'0' go EXEC Master.dbo.Sp_serveroption @server=N'TTI609-VM2', @optname=N'दूरस्थ संयोजन का उपयोग करें', @optvalue=N'true' go EXEC Master.dbo.Sp_serveroption @server=N'TTI609-VM2', @optname=N'remote proc लेनदेन प्रचार ', @optvalue=N'false' go

एक संग्रहित प्रक्रिया और टेबल बनाएं

एक बार लिंक किया गया सर्वर बन जाने के बाद, हमें Database_Object_Summery नाम की तीन तालिकाएँ बनाने की आवश्यकता है , डेटाबेस_समरी , और SQL_Job_List निगरानीडैशबोर्ड . में डेटाबेस। ये तालिकाएँ Generate_Database_Information . द्वारा भरी गई जानकारी संग्रहीत करती हैं संग्रहीत प्रक्रिया और बाद में डेटा, उन तालिकाओं में संग्रहीत किया जाता है जिनका उपयोग एक्सेल में एक रिपोर्ट बनाने के लिए किया जाएगा।

SQL_Job_List . बनाने के लिए निम्न कोड निष्पादित करें तालिका:

उपयोग [मॉनिटरिंगडैशबोर्ड] जाओ टेबल बनाएं [डीबीओ]। (250) NULL, [जॉब ओनर] [VARCHAR] (250) NULL, [जॉब कैटेगरी] [VARCHAR] (250) NULL, [जॉब डिस्क्रिप्शन] [VARCHAR] (250) NULL, [जॉबस्टेटस] [VARCHAR] (50) NULL, [ बनाया गया] [डेटटाइम] न्यूल, [संशोधित तिथि] [डेटटाइम] न्यूल, [जारी किया गया] [वर्चर] (5) न्यूल, [शेड्यूलनाम] [वचर] (250) न्यूल, [रिपोर्टडेट] [डेटटाइम] न्यूल) ऑन [प्राथमिक] गो वैकल्पिक तालिका [डीबीओ]। [sql_job_list] [रिपोर्ट दिनांक] जाने के लिए डिफ़ॉल्ट जोड़ें (गेटडेट ()) 

lst_dbservers . बनाने के लिए निम्न कोड निष्पादित करें तालिका:

उपयोग [मॉनिटरिंगडैशबोर्ड] जाओ टेबल बनाएं [डीबीओ]। ] न्यूल नहीं, प्राथमिक कुंजी क्लस्टर ([आईडी] एएससी) के साथ (पैड_इंडेक्स =बंद, सांख्यिकी_नोरकंप्यूट =ऑफ, इग्नोर_डुप_की =ऑफ, allow_row_locks =ऑन, allow_page_locks =ऑन) ऑन [प्राथमिक], अद्वितीय गैर-क्लस्टर () के साथ अद्वितीय गैर-क्लस्टर () सर्वरनाम पैड_इंडेक्स =बंद, सांख्यिकी_नोरकंप्यूट =बंद, अनदेखा_डुप_की =बंद, allow_row_locks =चालू, allow_page_locks =चालू) पर [प्राथमिक]) पर [प्राथमिक] वैकल्पिक तालिका [डीबीओ] पर जाएं। जाओ

Database_Summery . बनाने के लिए निम्न कोड निष्पादित करें तालिका:

 उपयोग [मॉनिटरिंग डैशबोर्ड] जाओ टेबल बनाएं [डीबीओ]। [डेटाबेस_समरी] ( [आईडी] [आईएनटी] पहचान (1, 1) न्यूल नहीं, [सर्वरनाम] [वरचर] (150) न्यूल, [डेटाबेसिड] [आईएनटी] NULL, [डेटाबेसनाम] [VARCHAR] (250) NULL, [डेटाबेसस्टैटस] [VARCHAR] (50) NULL, [रिकवरीमॉडल] [VARCHAR] (50) NULL, [compatibilitylevel] [INT] NULL, [databasecreatedate] [दिनांक] NULL , [डेटाबेस द्वारा निर्मित] [VARCHAR] (150) NULL, [dbsize] [NUMERIC] (10, 2) NULL, [datafilesize] [NUMERIC] (10, 2) NULL, [datafileused] [NUMERIC] (10, 2) NULL , [logfilesize] [NUMERIC](10, 2) NULL, [logfileused] [NUMERIC](10, 2) NULL, [reportdate] [DATETIME] NULL ) ऑन [प्राथमिक] ALTER TABLE [dbo] पर जाएं।[database_summery] ADD [ReportDate] जाने के लिए डिफ़ॉल्ट (Getdate ())

Database_Object_Summery . बनाने के लिए निम्न कोड निष्पादित करें तालिका:

 उपयोग [मॉनिटरिंग डैशबोर्ड] टेबल बनाएं [डीबीओ]। [डेटाबेस_ऑब्जेक्ट_समरी] ( [आईडी] [आईएनटी] पहचान (1, 1) न्यूल नहीं, [सर्वरनाम] [वचर] (250) न्यूल, [डेटाबेसनाम] [वचर] (250) NULL, [ऑब्जेक्ट टाइप] [VARCHAR] (50) NULL, [ऑब्जेक्टकाउंट] [INT] NULL, [रिपोर्टडेट] [डेटटाइम] न्यूल) ऑन [प्राथमिक] ऑन ऑल्टर टेबल [dbo]। [database_object_summery] ADD DEFAULT (गेटडेट) ()) [रिपोर्ट दिनांक] जाने के लिए

एक बार टेबल बन जाने के बाद, Generate_Database_Information . नामक एक संग्रहीत कार्यविधि बनाएं मॉनिटरिंगडैशबोर्ड . पर डेटाबेस। "RPC" का उपयोग करते हुए, यह TTI609-VM1 . पर बनाई गई संग्रहीत कार्यविधियों को निष्पादित करता है और TTI609-VM2 डेटा को पॉप्युलेट करने के लिए डेटाबेस सर्वर।

संग्रहीत कार्यविधि बनाने के लिए निम्न कोड निष्पादित करें:

Create PROCEDURE Generate_database_information AS BEGIN /*Cleanup*/ TRUNCATE TABLE database_object_summery TRUNCATE TABLE database_summery TRUNCATE TABLE sql_job_list DECLARE @ServerCount INT DECLARE @i INT =0 DECLARE @SQLCommand_Object_Summery NVARCHAR(max) DECLARE @SQLCommand_Database_Information NVARCHAR(max) DECLARE @SQLCommand_SQL_Job_Information NVARCHAR (अधिकतम) DECLARE @servername VARCHAR(100) CREATE TABLE #db_server_list (servername VARCHAR(100)) INSERT INTO #db_server_list (servername) सेलेक्ट सर्वरनाम lst_dbservers SET @ServerCount=(सेलेक्ट काउंट (सर्वरनाम) #db_server_list से) जबकि ( @ServerCount)> @i) BEGIN SET @servername=(#db_server_list से शीर्ष 1 सर्वरनाम चुनें) SET @SQLCommand_Object_Summery ='डेटाबेस_ऑब्जेक्ट में डालें _Summery (सर्वरनाम, डेटाबेसनाम, ऑब्जेक्ट टाइप, ऑब्जेक्टकाउंट, रिपोर्टडेट) निष्पादन ['+ @servername +'].DBATools.dbo। ,DatabaseCreateDate,DatabaseCreatedBy,DBSize,DataFileSize,DataFileUsed,LogFileSize,LogFileUsed) exec ['+ @servername +'].DBATools.dbo.[Pull_Database_Information]' SET @SQLCommand_SQL_Job_Information ='Ob_List, SQLCommand_SQL_Job_Information ='Ob_List (SQLCommand_SQL_Job_Information ='Ob_List, SQLCommand_Job_Information ='Ob_List, SQLCommand_SQL_Job_Information ='Ob_List, SQLCommand_Job_Information ='Obgory, SQLCommand_Job_Information ='Obgory, SQLCommand_Job_Information ='Obgory,Job_List में सम्मिलित करें। जॉब डिस्क्रिप्शन, जॉबस्टैटस, क्रिएटडेट, मॉडिफाइडडेट, जारी किया गया, शेड्यूल किया गया, शेड्यूलनाम) एग्जीक्यूटिव ['+ @servername +'].DBATools.dbo। सर्वरनाम SET @[email protected] + 1 END END

एक बार प्रक्रिया बन जाने के बाद, डेटा को एक्सेल फ़ाइल में निर्यात करने के लिए एक SSIS पैकेज बनाएँ।

एक्सेल फ़ाइल में डेटा निर्यात करने के लिए SSIS पैकेज बनाएं

अपने पिछले लेखों में, मैंने डेटा प्रवाह कार्यों, OLEDB कनेक्शन और एक्सेल कनेक्शन को कॉन्फ़िगर करने के चरणों के बारे में बताया, इसलिए मैं इस भाग को छोड़ देता हूं।

एक्सेल फ़ाइल में डेटा निर्यात करने के लिए, SQL सर्वर डेटा टूल खोलें और Export_Database_Information. नामक एक नया SSIS प्रोजेक्ट बनाएं।

प्रोजेक्ट बनने के बाद, खींचें और छोड़ें SQL कार्य निष्पादित करें नियंत्रण प्रवाह . के लिए विंडो और उसका नाम बदलें सर्वर से डेटा पॉप्युलेट करें . निम्न चित्र देखें:

डबल-क्लिक करें SQL कार्य निष्पादित करें (सर्वर से डेटा पॉप्युलेट करें)। SQL कार्य संपादक निष्पादित करें SQL कनेक्शन को कॉन्फ़िगर करने के लिए डायलॉग बॉक्स खुलता है। निम्न चित्र देखें:

कनेक्शन . में दर्ज किया गया है, OLEDB . चुनें कनेक्शन स्ट्रिंग और SQL कथन . में फ़ील्ड, निम्न क्वेरी प्रदान करें:

यूज मॉनिटरिंगडैशबोर्ड गो EXEC Generate_database_information

डायलॉग बॉक्स बंद करने के लिए ओके पर क्लिक करें।

नियंत्रण प्रवाह . पर SSIS टूलबॉक्स से डेटा फ़्लो टास्क को स्क्रीन, ड्रैग और ड्रॉप करें और इसका नाम बदलकर रिपोर्ट जेनरेट करें। निम्न चित्र देखें:

डेटा प्रवाह खोलने के लिए डबल-क्लिक करें खिड़की।

जैसा कि मैंने पहले बताया, Generate_Database_Information प्रक्रिया निम्न तालिकाओं में डेटाबेस सर्वर के आउटपुट को सम्मिलित करती है:

  1. डेटाबेस_ऑब्जेक्ट_समरी
  2. डेटाबेस_समरी
  3. SQL_Job_List

मैंने एक एक्सेल फाइल बनाई है जिसमें तीन वर्कशीट हैं। निम्न तालिकाएँ SQL तालिकाओं और एक्सेल वर्कशीट की मैपिंग दिखाती हैं।


डेटा प्रवाह में विंडो, तीन ADO.Net स्रोत और तीन एक्सेल गंतव्यों को खींचें और छोड़ें। निम्न चित्र देखें:

ऑब्जेक्ट सारांश पर डबल-क्लिक करें y (ADO.NET स्रोत) ADO.NET स्रोत . में संपादक.

  1. TTI412-VM\SQL2017MonitoringDashboard का चयन करें ADO.NET कनेक्शन प्रबंधक . से ड्रॉप-डाउन बॉक्स।
  2. तालिका या दृश्य चुनें डेटा एक्सेस मोड . से ड्रॉप-डाउन बॉक्स।
  3. Database_Object_Summery का चयन करें तालिका या दृश्य का नाम . से ड्रॉप-डाउन बॉक्स।

डेटाबेस जानकारी पर डबल-क्लिक करें (ADO.NET स्रोत) ADO.NET स्रोत संपादक . में ।

  1. चुनें “TTI412-VM\SQL2017MonitoringDashboardADO.NET कनेक्शन प्रबंधक . से ड्रॉप-डाउन बॉक्स।
  2. तालिका या दृश्य चुनें डेटा एक्सेस मोड . से ड्रॉप-डाउन बॉक्स।
  3. चुनें “डेटाबेस_समरीतालिका या दृश्य के नाम . से ड्रॉप-डाउन बॉक्स।

एसक्यूएल जॉब्स पर डबल-क्लिक करें (ADO.NET स्रोत) ADO.NET स्रोत संपादक . में ।

  1. TTI412-VM\SQL2017MonitoringDashboard का चयन करें ADO.NET कनेक्शन प्रबंधक में।
  2. तालिका या दृश्य चुनें डेटा एक्सेस मोड . से ड्रॉप-डाउन बॉक्स।
  3. चुनें SQL_Job_List तालिका या दृश्य का नाम . में ड्रॉप-डाउन बॉक्स।

अब, SSIS टूलबॉक्स से तीन एक्सेल गंतव्यों को खींचें और छोड़ें। निम्न चित्र देखें:

एक बार डेस्टिनेशन कॉपी हो जाने के बाद, नीले तीर को ADO.Net सोर्स के नीचे ड्रैग करें और एक्सेल डेस्टिनेशन पर छोड़ दें। सभी के लिए ऐसा ही करें। निम्न चित्र देखें:

एक्सेल ऑब्जेक्ट सारांश पर डबल-क्लिक करें (ADO.NET स्रोत) में एक्सेल गंतव्य संपादक

  1. एक्सेल कनेक्शन प्रबंधक का चयन करें एक्सेल कनेक्शन प्रबंधक . से ड्रॉप-डाउन बॉक्स।
  2. टीसक्षम या देखें का चयन करें डेटा एक्सेस मोड . से ड्रॉप-डाउन बॉक्स।
  3. ऑब्जेक्ट सारांश$ चुनें एक्सेल शीट के नाम से ड्रॉप-डाउन बॉक्स।

जैसा कि मैंने उल्लेख किया है, SQL तालिका और एक्सेल कॉलम के कॉलम नाम समान हैं, इसलिए मैपिंग स्वचालित रूप से की जाएगी। मानचित्रण Click क्लिक करें कॉलम मैप करने के लिए। निम्न चित्र देखें:

डबल-क्लिक करें एक्सेल डेटाबेस जानकारी (एक्सेल गंतव्य) एक्सेल गंतव्य संपादक . में ।

  1. एक्सेल कनेक्शन प्रबंधक का चयन करें एक्सेल कनेक्शन प्रबंधक . से ड्रॉप-डाउन बॉक्स।
  2. टीसक्षम या देखें का चयन करें डेटा एक्सेस मोड . से ड्रॉप-डाउन बॉक्स।
  3. डेटाबेस जानकारी$ चुनें एक्सेल शीट के नाम से ड्रॉप-डाउन बॉक्स।

जैसा कि मैंने उल्लेख किया है, SQL तालिका और एक्सेल कॉलम के कॉलम नाम समान हैं, इसलिए मैपिंग स्वचालित रूप से की जाएगी। मानचित्रण Click क्लिक करें कॉलम मैप करने के लिए। निम्न चित्र देखें:

Excel SQL Jobs पर डबल-क्लिक करें (एक्सेल गंतव्य) एक्सेल गंतव्य संपादक . में ।

  1. एक्सेल कनेक्शन प्रबंधक का चयन करें एक्सेल कनेक्शन प्रबंधक . से ड्रॉप-डाउन बॉक्स।
  2. टीसक्षम या देखें का चयन करें डेटा एक्सेस मोड . से ड्रॉप-डाउन बॉक्स।
  3. एक्सेल शीट का नाम से “SQL Jobs$ चुनें ड्रॉप-डाउन बॉक्स।

जैसा कि मैंने उल्लेख किया है, SQL तालिका और एक्सेल कॉलम के कॉलम नाम समान हैं, इसलिए मैपिंग स्वचालित रूप से की जाएगी। मानचित्रण Click क्लिक करें कॉलम मैप करने के लिए। निम्न चित्र देखें:

डेटाबेस रिपोर्ट ईमेल करने के लिए SQL जॉब बनाएं

एक बार पैकेज बन जाने के बाद, निम्नलिखित गतिविधियों को करने के लिए एक SQL कार्य बनाएँ:

  1. सभी सर्वरों से डेटा पॉप्युलेट करने के लिए SSIS पैकेज निष्पादित करें।
  2. आवश्यक टीम को डेटाबेस रिपोर्ट ईमेल करें।

SQL जॉब में, हमें दो चरण बनाने होंगे। पहला चरण SSIS पैकेज निष्पादित करेगा और दूसरा चरण ईमेल भेजने की प्रक्रिया को निष्पादित करेगा।

SQL जॉब बनाने के लिए, SSMS>> SQL सर्वर एजेंट खोलें>> नई SQL जॉब पर राइट-क्लिक करें ।

ओम द नई नौकरी विज़ार्ड, चरण . चुनें विकल्प पर क्लिक करें और नहीं . पर क्लिक करें डब्ल्यू नए कार्य चरण . में संवाद बॉक्स में, चरण . में नाम टेक्स्ट बॉक्स में, वांछित नाम प्रदान करें, SQL सर्वर एकीकरण सेवा पैकेज का चयन करें प्रकार . से ड्रॉप डाउन बॉक्स। पैकेज टेक्स्ट . में SSIS पैकेज का स्थान प्रदान करें डिब्बा। निम्न चित्र देखें:

नया कार्य चरण बंद करने के लिए ठीक क्लिक करें ।

एक अन्य कार्य चरण बनाएं जो रिपोर्ट को ईमेल करने के लिए एक संग्रहीत कार्यविधि निष्पादित करेगा। यह एक ईमेल भेजने के लिए एक सिस्टम प्रक्रिया का उपयोग करता है। SSIS पैकेज एक विशिष्ट स्थान पर डेटाबेस जानकारी की प्रतिलिपि बनाता है, इसलिए sp_send_dbmail के @file_attachments पैरामीटर में एक्सेल फ़ाइल का पूरा पथ प्रदान करता है। संग्रहीत प्रक्रिया।

संग्रहीत कार्यविधि बनाने के लिए, DBATools . में निम्न कोड निष्पादित करें सेंट्रल सर्वर का डेटाबेस:

प्रक्रिया बनाएं Send_database_report as BEGIN DECLARE @ProfileName VARCHAR(150) SET @ProfileName =(msdb से नाम चुनें..sysmail_profile जहां profile_id =7) DECLARE @lsMessage NVARCHAR(max) SET @lsMessage ='

नमस्कार समर्थन, कृपया संलग्न डेटाबेस सारांश रिपोर्ट प्राप्त करें। ' + '

' EXEC msdb.dbo.Sp_send_dbmail @recipients='[email protected]', @[email protected], @subject='डेटाबेस सारांश रिपोर्ट', @file_attachments='C:\Users\ Administrator\Desktop\Database_Information.xlsx', @copy_recipients='', @blind_copy_recipients='', @body_format='HTML', @[email protected] END

Once the procedure is created, add a new SQL Job कदम। Click New . In the New Job Step dialog box, provide a Job Step name, and select Transact-SQL script (T-SQL) from the Type ड्रॉप डाउन बॉक्स। In the Command Text box, write the following code:

USE DBAtools Go EXEC Send_database_report

निम्न चित्र देखें:

Click OK to close the wizard. Now to configure Job Schedule , select Schedules on the New Job window. Click New to add a schedule.

In the New Job Schedule dialog box, provide the desired name in the Name text box, choose frequency and time. निम्न चित्र देखें:

Close OK to close the New Job Schedule and in the New Job window, click on OK to close the dialog box.

Now, to test the SQL Job, right-click the Email Database Report SQL job and click Start Job at Step

In the result of successful completion of the SQL Job, you will receive an email with the database report. निम्न चित्र देखें:

सारांश

In this article I have covered as follows:

  1. How to populate information of the databases located on remote DB server.
  2. Create an SSIS package to populate database information and export it to excel file
  3. Create a multi-step SQL job to generate the report by executing an SSIS package and email the report.

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. डेटाबेस डिज़ाइन शिक्षकों, पाठों और छात्रों को व्यवस्थित करने में कैसे मदद करता है?

  2. एक हजार कटौती कार्यभार से मौत का विश्लेषण

  3. क्या sp_ उपसर्ग अभी भी नहीं-नहीं है?

  4. एसक्यूएल में अस्थायी तालिका कैसे बनाएं?

  5. एसक्यूएल शुरुआती के लिए तालिका बनाएं