परिचय
पिछले लेख में, हमने इस बात पर प्रकाश डाला था कि msdb डेटाबेस व्यावहारिक रूप से स्वचालन से संबंधित सभी वस्तुओं को संग्रहीत करता है। इस लेख में, हम SQL सर्वर इंस्टेंस के बीच जॉब और ऑब्जेक्ट को स्थानांतरित करने के मामले की समीक्षा करेंगे।
आइए SQL सर्वर के इस उदाहरण पर msdb में संग्रहीत वस्तुओं की सूची से शुरू करें।
हमारे पास रखरखाव योजना के साथ कई नौकरियां बनाई गई हैं (लेख SQL सर्वर में रखरखाव योजनाएं बनाना देखें)। हमारे पास दो अलर्ट और एक ऑपरेटर भी है। एमएसडीबी अलर्ट और ऑपरेटरों को भी स्टोर करता है (चित्र 1 देखें)। हम इन वस्तुओं को हटा देंगे, और फिर msdb डेटाबेस के बैकअप को पुनर्स्थापित करके उन्हें पुनर्प्राप्त करेंगे।
msdb में संग्रहीत वस्तुओं को देखना
यदि हम प्रासंगिक सिस्टम ऑब्जेक्ट को क्वेरी करते हैं, तो हम यह भी देखते हैं कि ये ऑब्जेक्ट परिणाम सेट के रूप में वापस आ गए हैं। (सूची 1 देखें, चित्र 2)। एमएसडीबी सिस्टम कैटलॉग को नौकरियों के रिकॉर्ड, बैकअप लॉग, ऑपरेटरों, रखरखाव स्थानों, डेटाबेस मेल और स्वचालन से संबंधित अन्य वस्तुओं के साथ भी संग्रहीत करता है।
-- Listing 1: Check List of Jobs in the Instance
use msdb
go
select @@SERVERNAME as ServerName
select name from sysjobs;
एमएसडीबी का बैकअप लें
SQL सर्वर के एकल उदाहरण के लिए अवधारणा को स्पष्ट करने के लिए, हम पहले msdb डेटाबेस का बैकअप लेते हैं। उत्पादन परिदृश्यों में, आपके सिस्टम डेटाबेस का नियमित बैकअप आपकी रणनीति का हिस्सा होना चाहिए। वे आम तौर पर इतने छोटे होते हैं कि दैनिक पूर्ण बैकअप शेड्यूल में आराम से फिट हो जाते हैं।
बेशक, जब मैं सिस्टम डेटाबेस को संदर्भित करता हूं, तो इसमें आवश्यक tempdb शामिल नहीं होता है। इसके अलावा, एक मॉडल डेटाबेस के लिए दैनिक बैकअप की भी आवश्यकता नहीं हो सकती है - एक साप्ताहिक बैकअप पर्याप्त है। संपूर्ण दैनिक बैकअप के लिए, मास्टर और एमएसडीबी पर विचार करें।
लिस्टिंग 2 में सरल कोड का उपयोग करके, हम msdb डेटाबेस का बैकअप लेते हैं।
-- Listing 2: Backup msdb Database
backup database msdb to disk = 'E:\DriveF\msdb_18072020.bak';
नौकरियां छोड़ना
एक बार बैकअप तैयार हो जाने के बाद, हम उदाहरण पर कार्य छोड़ देते हैं। ध्यान दें कि रखरखाव योजना द्वारा बनाई गई नौकरियों को छोड़ने के लिए उन्हें बनाने वाली रखरखाव योजनाओं को हटाना होगा (चित्र 3 देखें)।
नियमित नौकरियों को GUI से हटाकर हटाया जा सकता है। दूसरा तरीका है लिस्टिंग 3 से कोड चलाना, उसके बाद लिस्टिंग 4 से कोड चलाना।
लिस्टिंग 3 नौकरियों को छोड़ने के लिए आवश्यक लिपियों का सेट तैयार करती है। फिर, लिस्टिंग 4 में, हम लिस्टिंग 3 में उत्पन्न स्क्रिप्ट को निष्पादित करते हैं।
आप इस दृष्टिकोण का उपयोग कर सकते हैं, भले ही आपके उदाहरण में नौकरी के नाम शायद मेरे नाम से अलग हों।
-- Listing 3: Generate Script to Drop Jobs
USE [msdb]
GO
select 'EXEC msdb.dbo.sp_delete_job @job_name=N''' + [name] + ''', @delete_unused_schedule=1' from sysjobs;
GO
-- Listing 4: Drop SQL Agent Jobs
EXEC msdb.dbo.sp_delete_job @job_name=N'DB1_BackupTransactionLog', @delete_unused_schedule=1
EXEC msdb.dbo.sp_delete_job @job_name=N'syspolicy_purge_history', @delete_unused_schedule=1
नौकरियों को छोड़ने के बाद, हम यह सत्यापित कर सकते हैं कि कोई नौकरी नहीं बची है। उसी स्क्रिप्ट का उपयोग करें, जैसा कि लिस्टिंग 1 में दिखाया गया है। हम परिदृश्य के लिए दो तरीकों पर विचार करते हैं:
- किसी ने गलती से नौकरी और इसी तरह की वस्तुओं को एक उदाहरण में हटा दिया है।
- हम नौकरियों को एक उदाहरण से दूसरे में आयात करना चाहते हैं।
msdb को पुनर्स्थापित करना
हम लिस्टिंग 5 से स्क्रिप्ट का उपयोग करके रिस्टोर ऑपरेशन शुरू करते हैं। उस स्क्रिप्ट में, हम डेटाबेस को सिंगल_यूज़र मोड पर सेट करके शुरू करते हैं। चूंकि इस डेटाबेस में कोई व्यक्ति या कुछ (एसक्यूएल एजेंट खाता?) लॉग इन हो सकता है, यह आवश्यक है।
फिर, हम "पुनर्स्थापना" आदेश जारी करते हैं और नए msdb डेटाबेस को multi_user पर सेट करते हैं। ध्यान दें कि हमने पुनर्स्थापना कथन में REPLACE विकल्प का उपयोग किया है। यदि आप msdb को किसी नए इंस्टेंस में माइग्रेट कर रहे हैं, तो REPLACE क्लॉज़ आवश्यक होगा। इसके बिना, SQL सर्वर उदाहरण पर msdb डेटाबेस से संबंधित नहीं बैकअप सेट के बारे में एक त्रुटि लौटा सकता है।
-- Listing 5: Restore msdb database
use master
go
alter database msdb set single_user with rollback immediate;
GO
restore database msdb from disk = 'E:\DriveG\msdb_18072020.bak'
with replace;
GO
alter database msdb set multi_user;
GO
एक बार पुनर्स्थापना कार्रवाई पूरी हो जाने के बाद, लापता कार्य और अन्य वस्तुएं वापस आ जाती हैं। वे अपने संबंधित कार्य इतिहास के साथ पूर्ण होते हैं। डेटाबेस और अन्य वस्तुओं के साथ नौकरियों के बीच सभी संबंध बरकरार हैं। नौकरियां ऐसे काम करती हैं जैसे किसी ने और किसी ने उन्हें कभी नहीं हटाया।
निष्कर्ष
हम आसानी से नौकरियों और समान वस्तुओं को एक SQL सर्वर इंस्टेंस से दूसरे में माइग्रेट कर सकते हैं। उसके लिए, हमें msdb की बैकअप और पुनर्स्थापना प्रक्रिया की आवश्यकता है। इसी तरह, अगर किसी कारण से खो जाने पर हम इन ऑब्जेक्ट्स को SQL सर्वर इंस्टेंस पर पुनर्प्राप्त कर सकते हैं।