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

SQL सर्वर सिस्टम डेटाबेस - MSDB रखरखाव

SQL सर्वर सिस्टम डेटाबेस श्रृंखला के पिछले लेखों में, हमने सिस्टम डेटाबेस के माध्यम से जाना है जो SQL सर्वर स्थापना के दौरान डिफ़ॉल्ट रूप से स्थापित होते हैं, उन सिस्टम डेटाबेस में से प्रत्येक के उद्देश्य को समझते हैं और Tempdb डेटाबेस और इसके रखरखाव की अधिक विस्तार से खोज करते हैं। इस लेख में, हम MSDB डेटाबेस के बारे में अक्सर सामना की जाने वाली समस्याओं और उन्हें सही तरीके से हल करने के तरीके के साथ-साथ MSDB डेटाबेस का अधिक विस्तार से पता लगाएंगे।

MSDB डेटाबेस

एमएसडीबी SQL सर्वर सिस्टम डेटाबेस SQL ​​सर्वर एजेंट सेवा, SQL सर्वर सेवा ब्रोकर, डेटाबेस मेल, लॉग शिपिंग, डेटाबेस मिररिंग, आदि से संबंधित सभी महत्वपूर्ण कॉन्फ़िगरेशन जानकारी और ऐतिहासिक जानकारी संग्रहीत करता है:

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

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

भले ही SQL सर्वर एजेंट सेवा महत्वपूर्ण कॉन्फ़िगरेशन विवरण को MSDB . में तालिकाओं में संग्रहीत करती है डेटाबेस, SQL सर्वर विंडोज रजिस्ट्री में भी कुछ कॉन्फ़िगरेशन विवरण संग्रहीत करता है। उसके लिए, यह sp_set_sqlagent_properties नामक विस्तारित संग्रहीत कार्यविधि का उपयोग करता है

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

रजिस्ट्री संपादक खोलें regedit . लिखकर कमांड प्रॉम्प्ट में:

दर्ज करें क्लिक करें रजिस्ट्री संपादक खोलने के लिए :

अब, पथ पर नेविगेट करें:

कंप्यूटर\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL13.MSSQLSERVER\SQLServerAgent

नीचे दिए गए कॉन्फ़िगरेशन विवरण देखें। चिह्नित टुकड़ा SQL सर्वर इंस्टेंस नाम को संदर्भित करता है, और यह SQL सर्वर संस्करण और इंस्टेंस नाम के आधार पर आपके वातावरण में भिन्न हो सकता है।

रजिस्ट्री पर एक त्वरित नज़र इंगित करती है कि SQL सर्वर एजेंट सेवा से संबंधित कुछ पैरामीटर संग्रहीत हैं। चूंकि हम SQL सर्वर एजेंट सेवा से संबंधित किसी भी पैरामीटर को बदलने की अनुशंसा नहीं करते हैं और केवल सीखने के उद्देश्य से ऊपर साझा किए गए हैं, इसलिए हम यहां इसकी गहराई में नहीं जाएंगे।

हालाँकि, यदि आप व्यवसाय या उत्पादन आवश्यकताओं को पूरा करने के लिए SQL सर्वर एजेंट सेवा गुणों में से किसी को बदलने का इरादा रखते हैं, तो आप SQL सर्वर एजेंट सेवा पर राइट-क्लिक करके इसे संशोधित कर सकते हैं और गुण चुन सकते हैं। जैसा कि नीचे दिखाया गया है।

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

MSDB डेटाबेस में अक्सर आने वाली समस्याएं

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

आइए हम पहले चर्चा की गई सुविधाओं और इतिहास डेटा को संग्रहीत करने के लिए उपयोग की जाने वाली तालिकाओं की समीक्षा करें ताकि हम समझ सकें कि हम उन तालिकाओं के आकार को कैसे नियंत्रण में रख सकते हैं।

  • बैकअप इतिहास
  • SQL सर्वर एजेंट जॉब इतिहास
  • रखरखाव योजनाएं
  • SQL सर्वर डेटाबेस मेल इतिहास
  • एसएसआईएस पैकेज

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

SSMS खोलें और MSDB . पर राइट-क्लिक करें डेटाबेस> रिपोर्ट > मानक रिपोर्ट > शीर्ष तालिका द्वारा डिस्क उपयोग डिस्क उपयोग द्वारा क्रमबद्ध तालिकाओं की रिपोर्ट तैयार करने के लिए:

शीर्ष तालिका के अनुसार डिस्क उपयोग . पर क्लिक करें रिपोर्ट देखने के लिए। जैसा कि मेरा उदाहरण एक विकास है, बड़ी तालिकाएँ नहीं हैं, लेकिन यह रिपोर्ट अवरोही क्रम में क्रमबद्ध डेटाबेस में सभी तालिकाओं का आकार दिखा सकती है।

हम डेटाबेस में तालिकाओं के आकार प्राप्त करने के लिए नीचे दी गई क्वेरी का भी उपयोग कर सकते हैं।

SELECT -- TOP(10)
	  SCHEMA_NAME(o.[schema_id]) Schema_name
	, o.name object_name
    , total_size = CAST(SUM(au.total_pages) * 8. / 1024 AS DECIMAL(18,2))
    , total_rows = SUM(CASE WHEN i.index_id IN (0, 1) AND au.[type] = 1 THEN p.[rows] END)
FROM sys.objects o 
JOIN sys.indexes i ON o.[object_id] = i.[object_id]
JOIN sys.partitions p ON i.[object_id] = p.[object_id] AND i.index_id = p.index_id
JOIN sys.allocation_units au ON p.[partition_id] = au.container_id
WHERE i.is_disabled = 0
AND i.is_hypothetical = 0
AND o.Type in ('S','U','V')
GROUP BY o.name, SCHEMA_NAME(o.[schema_id])
ORDER BY 3 DESC

एक बार जब हम जान जाते हैं कि कौन सी तालिकाएँ अधिक स्थान लेती हैं, तो हम उनके आकार को नियंत्रण में रखने के लिए संबंधित संग्रहीत कार्यविधियों का उपयोग कर सकते हैं।

बैकअप इतिहास

DBA की प्राथमिक जिम्मेदारी यह सुनिश्चित करना है कि डेटाबेस को एक समय में पुनर्प्राप्त करने के लिए सभी प्रोडक्शन SQL सर्वर इंस्टेंस में पूर्ण बैकअप और ट्रांजेक्शनल लॉग सक्षम हैं।

SQL सर्वर निम्नलिखित MSDB डेटाबेस तालिकाओं में बैकअप विवरण और पुनर्स्थापना जानकारी संग्रहीत करता है :

  • बैकअप फ़ाइल
  • बैकअपफ़ाइलसमूह
  • बैकअपमीडिया परिवार
  • बैकअपमीडियासेट
  • बैकअपसेट
  • पुनर्स्थापित फ़ाइल
  • फ़ाइल समूह को पुनर्स्थापित करें
  • पुनर्स्थापित इतिहास

एक महत्वपूर्ण संख्या के लिए। SQL सर्वर इंस्टेंस में डेटाबेस के पूर्ण बैकअप और ट्रांजेक्शनल लॉग बैकअप के साथ कॉन्फ़िगर किए गए, उपरोक्त तालिकाओं में रिकॉर्ड तेजी से बढ़ सकते हैं।

इस प्रकार, SQL सर्वर MSDB . में दो सिस्टम संग्रहीत कार्यविधियाँ प्रदान करता है उपरोक्त तालिकाओं के आकार को नियंत्रित करने के लिए डेटाबेस:

  • sp_delete_backuphistory - उपरोक्त 8 तालिकाओं में से बैकअप इतिहास डेटा को हटा देता है सबसे पुरानी तिथि के आधार पर पैरामीटर।
  • sp_delete_database_backuphistory - उपरोक्त 8 तालिकाओं में से बैकअप इतिहास डेटा को हटाता है डेटाबेस नाम के आधार पर

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

exec msdb.dbo.sp_delete_backuphistory @oldest_date = 'oldest_date'
exec msdb.dbo.sp_delete_database_backuphistory @database_name = 'database_name'

जब हम बैकअप इतिहास तालिकाओं में विशाल रिकॉर्ड वाले डेटाबेस पर ऊपर वर्णित किसी भी संग्रहीत कार्यविधि को निष्पादित करते हैं, तो हम अवरुद्ध हो सकते हैं या नोटिस कर सकते हैं कि रिकॉर्ड बहुत धीरे-धीरे हटा दिए जाते हैं। इसका समाधान करने के लिए, हम बैकअपसेट . पर नीचे अनुपलब्ध अनुक्रमणिका बनाते हैं टेबल। इसे हमारी किसी भी संग्रहीत कार्यविधि को तेजी से निष्पादित करने के लिए संग्रहीत कार्यविधि की निष्पादन योजना के माध्यम से पहचाना जा सकता है।

IF NOT EXISTS (SELECT * FROM sys.indexes WHERE OBJECT_ID = OBJECT_ID('[dbo].[backupset]') AND name = 'IX_BackupSet_FinDate_MediaSet')
CREATE NONCLUSTERED INDEX IX_BackupSet_FinDate_MediaSet ON backupset(backup_finish_date) 
INCLUDE (media_set_id)
GO

SQL सर्वर एजेंट जॉब इतिहास

SQL सर्वर सभी SQL सर्वर एजेंट जॉब इतिहास को msdb.dbo.sysjobhistory में संग्रहीत करता है टेबल। साथ ही, SQL सर्वर में msdb.dbo.sp_purge_jobhistory नामक एक सिस्टम संग्रहीत कार्यविधि है जो sysjobhistory . को बनाए रखने में मदद करता है टेबल का आकार नियंत्रण में है।

sp_purge_jobhistory . चलाने का सिंटैक्स संग्रहित प्रक्रिया होगी:

exec msdb.dbo.sp_purge_jobhistory @job_name = 'job_name', @job_id = 'job_id', @oldest_date ='oldest_date'

सभी 3 पैरामीटर वैकल्पिक हैं, और हम oldest_date पास करके उपरोक्त प्रक्रिया को निष्पादित करने की अनुशंसा करते हैं पैरामीटर sysjobhistory . रखने के लिए टेबल का आकार नियंत्रण में है।

रखरखाव योजनाएं

SQL सर्वर नीचे दी गई तालिकाओं में सभी रखरखाव योजनाओं का विवरण संग्रहीत करता है:

  • msdb.dbo.sysmaintplan_log
  • msdb.dbo.sysmaintplan_logdetail

SQL सर्वर में msdb.dbo.sp_maintplan_delete_log नामक एक अंतर्निहित संग्रहीत कार्यविधि है इन 2 तालिकाओं के आकार को नियंत्रण में रखने के लिए।

प्रक्रिया को निष्पादित करने के लिए सिंटैक्स होगा:

exec msdb.dbo.sp_maintplan_delete_log @plan_id = '', @subplan_id = '', @oldest_Time = 'oldest_datetime'

सभी 3 पैरामीटर वैकल्पिक हैं। हम उपरोक्त दो तालिकाओं के आकार को नियंत्रण में रखने के लिए सबसे पुराने_टाइम पैरामीटर को पास करते हुए उपरोक्त प्रक्रिया को निष्पादित करने की अनुशंसा करते हैं।

SQL सर्वर डेटाबेस मेल इतिहास

SQL सर्वर सभी डेटाबेस मेल इतिहास लॉग को नीचे दी गई तालिकाओं में संग्रहीत करता है:

  • sysmail_mailitems
  • sysmail_log
  • sysmail_attachments
  • sysmail_attachments_transfer

इन इतिहास तालिका आकारों को नियंत्रण में रखने के लिए, SQL सर्वर msdb.dbo.sysmail_delete_mailitems_sp नामक 2 सिस्टम संग्रहीत कार्यविधियाँ प्रदान करता है और msdb.dbo.sysmail_delete_log_sp.

इन संग्रहीत कार्यविधियों को निष्पादित करने का सिंटैक्स होगा:

exec msdb.dbo.sysmail_delete_mailitems_sp @sent_before = 'oldest_datetime', @sent_status = NULL
exec msdb.dbo.sysmail_delete_log_sp @logged_before = 'oldest_datetime', @event_type = NULL

दोनों प्रक्रियाओं के लिए, सभी पैरामीटर वैकल्पिक हैं। हालांकि, भेजे गए_पहले . का उपयोग करने की अनुशंसा की जाती है या logged_befor अवधारण अवधि के आधार पर पुराने रिकॉर्ड को हटाने के लिए पैरामीटर।

कुछ परिदृश्यों में, यदि डेटाबेस मेल से संबंधित सभी तालिकाएं बहुत बड़ी हैं, तो हटाएं . चल रहा है प्रक्रिया हमेशा के लिए चलेगा। समस्या से निपटने का एक तेज़ तरीका है sysmail_attachments पर विदेशी कुंजी बाधा को हटाना और sysmail_send_retrys तालिकाएँ, उपरोक्त 4 तालिकाओं को छोटा करें और 2 विदेशी कुंजियों को वापस sysmail_attachments पर पुन:बनाएँ और sysmail_send_retrys टेबल जैसा कि नीचे दिखाया गया है:

USE MSDB;

ALTER TABLE [dbo].[sysmail_attachments] DROP [FK_sysmail_mailitems_mailitem_id];
GO
ALTER TABLE [dbo].[sysmail_send_retries] DROP [FK_mailitems_mailitem_id];
GO

TRUNCATE TABLE [dbo].[sysmail_attachments];
TRUNCATE TABLE [dbo].[sysmail_send_retries];
TRUNCATE TABLE [dbo].[sysmail_mailitems];
TRUNCATE TABLE [dbo].[sysmail_log];

ALTER TABLE [dbo].[sysmail_attachments]  WITH CHECK ADD  CONSTRAINT [FK_sysmail_mailitems_mailitem_id] FOREIGN KEY([mailitem_id])
REFERENCES [dbo].[sysmail_mailitems] ([mailitem_id])
ON DELETE CASCADE;
ALTER TABLE [dbo].[sysmail_attachments] CHECK CONSTRAINT [FK_sysmail_mailitems_mailitem_id];
GO

ALTER TABLE [dbo].[sysmail_send_retries]  WITH CHECK ADD  CONSTRAINT [FK_mailitems_mailitem_id] FOREIGN KEY([mailitem_id])
REFERENCES [dbo].[sysmail_mailitems] ([mailitem_id])
ON DELETE CASCADE;
ALTER TABLE [dbo].[sysmail_send_retries] CHECK CONSTRAINT [FK_mailitems_mailitem_id];
GO

एसएसआईएस पैकेज

SQL सर्वर सभी SSIS(*.dtsx) . को स्टोर करता है msdb.dbo.sysssispackages . में संकुल टेबल। यह तालिका एक कॉन्फ़िगरेशन तालिका है, हालांकि, यादृच्छिक मामलों में, संभावना है कि टेबल पर ढेर सारे एसएसआईएस पैकेज हो सकते हैं। इससे इस तालिका का आकार बहुत बड़ा हो जाता है।

उन मामलों में, हमें यह पहचानने की आवश्यकता है कि क्या कोई अवांछित पैकेज हैं और sysssispackages को बनाए रखने के लिए उन पैकेजों को हटा दें। टेबल का आकार नियंत्रण में है।

नीचे की रेखा

SQL सर्वर में सभी तालिकाओं को हटाने के कार्य को संभालने के लिए अंतर्निहित कार्य नहीं हैं ऊपर चर्चा की। फिर भी, हमारे पास सबसे पुराना दिनांक पैरामीटर है उपरोक्त सभी प्रक्रियाओं के लिए उपलब्ध है।

इसलिए, MSDB तालिका आकार को नियंत्रण में संभालने के लिए अनुशंसित दृष्टिकोण दिनों की संख्या के आधार पर एक अवधारण अवधि को परिभाषित करना होगा, और नीचे दी गई स्क्रिप्ट को एक निर्धारित आधार पर निष्पादित करने के लिए एक नया SQL सर्वर एजेंट कार्य बनाना होगा:

declare @retention_date datetime = '2021-04-01'
exec msdb.dbo.sp_delete_backuphistory @oldest_date = @retention_date;
exec msdb.dbo.sp_purge_jobhistory @oldest_date = @retention_date;
exec msdb.dbo.sp_maintplan_delete_log @oldest_Time = @retention_date;
exec msdb.dbo.sysmail_delete_mailitems_sp @sent_before = @retention_date;
exec msdb.dbo.sysmail_delete_log_sp @logged_before = @retention_date;

निष्कर्ष

हमने उन तालिकाओं की सूची के बारे में सीखा है जो MSDB . में तेजी से बढ़ सकती हैं डेटाबेस और इन तालिकाओं के आकार को नियंत्रण में कैसे रखा जाए। हमने MSDB . को रोकने के लिए नियमित रूप से निष्पादित करने के लिए प्रक्रियाओं की सूची के साथ एक आसान स्क्रिप्ट प्राप्त की है डेटाबेस भी विशाल आकार में बढ़ रहा है। आशा है कि यह लेख आपके स्वचालन के लिए सहायक होगा और यह जानकारी आपके दिमाग को MSDB डेटाबेस रखरखाव से मुक्त करेगी और अन्य गतिविधियों पर ध्यान केंद्रित करेगी।


  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. SQL सर्वर में महीने का अंतिम दिन कैसे खोजें

  3. SQL सर्वर डेटाबेस प्रतिकृति

  4. SQL सर्वर में सभी डेटाबेस में सभी तालिकाओं के लिए कॉलम नाम कैसे खोजें

  5. SQL सर्वर में "COMMIT TRANSACTION अनुरोध का कोई संगत BEGIN TRANSACTION नहीं है" को कैसे ठीक करें