एक ही समय में कई डेटाबेस का बैकअप लेना


10

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

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

इसलिए मैं बैकअप तंत्र की तलाश कर रहा हूं जो नीचे उल्लिखित आवश्यकताओं को पूरा करेगा।

  1. एक बार में सभी dbs का बैकअप शुरू करें और उपयोग के लिए db जारी करें।
  2. चूंकि डेटाबेस एक-दूसरे से जुड़े हुए हैं, इसलिए मैं चाहता हूं कि बैकअप फ़ाइलों में डेटा स्थिरता बनी रहे। इसलिए इस डेटा संगतता आवश्यकता के कारण मैं अपनी बैकअप फ़ाइल के लिए प्रतिबद्ध होने वाले परिवर्तनों पर नहीं जाना चाहता।

मैं केवल इतना चाहता हूं - एक निश्चित समय में सभी डीबीएस का बैकअप।


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

1
इस बैकअप से आप क्या हासिल करना चाहते हैं? इस बिंदु पर पूर्ण पुनर्प्राप्ति - या कुछ और? दूसरे शब्दों में ... यदि आपको इस बैकअप से पुनर्स्थापित करना है, तो क्या बहाल किया जाना चाहिए --- किसी भी डीडीएल में परिवर्तन? डेटा में परिवर्तन, या क्या?
सत्रहवाँ

जो आप चाहते हैं वह SQL 2012 में संभव नहीं है। SQL 7.0 दिनों में वापस, डेटाबेस बैकअप सेट का उपयोग डेटाबेस को फिर से बनाने के लिए किया गया था क्योंकि यह उस समय का स्टेटमेंट था, जब BACKUP स्टेटमेंट शुरू हुआ था। SQL 2000 और उसके बाद से, डेटाबेस बैकअप सेट का उपयोग डेटाबेस को फिर से बनाने के लिए किया जाता है क्योंकि यह उस समय था जब BACKUP स्टेटमेंट पूरा हो गया था।
स्टैसिलराय

@DanielHutmacher मैं पूर्ण बैकअप के लिए देख रहा हूँ।
प्रवीण

जवाबों:


13

मैं मान रहा हूं कि आपका काम बैकअप का एक सेट बनाना है, जहां आप उन सभी को एक स्थिर (कोई खुले लेनदेन) बिंदु (सभी सिंक में) को पुनर्स्थापित कर सकते हैं। DB2 में आपके लिए एक विचित्र बिंदु क्या होगा। दुर्भाग्य से SQL सर्वर में ऐसा कुछ नहीं है जो वास्तव में ऐसा करता है। हालाँकि, यह मानते हुए कि आपके डेटाबेस पूर्ण पुनर्प्राप्ति मोड में हैं, आप कुछ समान कर सकते हैं।

आप एक साथ सभी डेटाबेस में एक ही MARKEDलेन-देन कर सकते हैं । फिर आप प्रत्येक डेटाबेस का ट्रांजेक्शन लॉग बैकअप लेते हैं। यह मानते हुए कि आप अपने लॉग बैकअप (जो आपको वैसे भी होने चाहिए) के साथ रख रहे हैं, लॉग बैकअप बहुत लंबा नहीं है। और सिस्टम में होने से किसी को रोकने की कोई आवश्यकता नहीं है (सिवाय आपके चिह्नित लेनदेन को बनाने के लिए शायद आपके लिए लंबे समय तक छोड़कर)।

इस बिंदु पर यदि आपको एक पुनर्स्थापना करने की आवश्यकता है तो आप RESTORE STOPBEFOREMARKअपने प्रत्येक डेटाबेस पर करते हैं। यह सभी डेटाबेस को एक ही बिंदु (आपके लेनदेन के आधार पर) को पुनर्स्थापित करेगा। नोट: यदि आप उस लेनदेन को शामिल करना चाहते हैं तो एक STOPATMARK भी है।

यदि आप एक उदाहरण चाहते हैं तो मुझे ऊपर दिए गए लिंक में एक साथ कुछ अतिरिक्त पढ़ने के लिए मिल गया है।

मुझे लगता है कि यह आपके सवाल का सही जवाब नहीं देता है, लेकिन उम्मीद है कि यह आपकी समस्या को हल करता है।


2
यह कैसे BizTalk कई डेटाबेस के बिंदु-में-समय बैकअप का प्रबंधन करता है। यदि यह Microsoft BizTalk के लिए काम करता है, तो यह एक बहुत अच्छी तरह से परीक्षण किया गया फीचर है।
मैक्स वर्नोन

हम टीएफएस डेटाबेस के लिए इसका उपयोग लॉगशीपिंग में करते हैं जिसे हमने हमेशा बदल दिया है।
परिजन शाह

1
केन के उत्तर को ड्राइव करने के लिए एक (निहित लेकिन अप्रयुक्त) विवरण: आपके पास कई डीबी में एक पूर्ण बैकअप संगत नहीं हो सकता है। निकटतम आप आ सकते हैं पूर्ण बैकअप का एक दौर लेने के लिए, तुरंत एक चिह्नित लेनदेन के बाद, फिर लॉग बैकअप का एक दौर। लॉग बैकअप का वह पहला दौर उस समय की स्थिरता को "सच" कर देगा।
AMtwo

तकनीकी रूप से आप ओप्स विधि का उपयोग कर सकते हैं। सिस्टम से सभी को लॉक करें, सुनिश्चित करें कि कोई सक्रिय कनेक्शन नहीं हैं (शायद डेटाबेस को केवल पढ़ने / प्रतिबंधित के रूप में चिह्नित करें), फिर हर डेटाबेस का पूरा बैकअप लें। हालाँकि जैसा कि ओपी ने कहा कि यह दुनिया की सबसे अच्छी विधि नहीं है।
केनेथ फिशर

7

आपका प्रश्न मेरे द्वारा उत्तर दिए गए - एक समकालिक स्थिति में 10-20 SQL सर्वर डेटाबेस का बैकअप लेना और पुनर्स्थापित करना है?

अपने डेटाबेस पुनर्प्राप्ति मॉडल को पूर्ण मानते हुए, आपको पूर्ण बैकअप लेना चाहिए और फिर चिह्नित लेनदेन का उपयोग करना चाहिए ।

अपने मिथकों को नष्ट कर देता है ...

एक बार में सभी dbs का बैकअप शुरू करें और उपयोग के लिए db जारी करें।

से बैकअप मिथकों (अत्यधिक सभी बैकअप मिथकों को पढ़ने के लिए आपको सलाह) :

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

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

चिह्नित लेनदेन आपको लगातार लॉग बैकअप लेने में मदद करेंगे और आप पुनर्स्थापित करने में सक्षम होंगे उनका उपयोग करके उन्हें RESTORE ... WITH STOPBEFOREMARK = '<mark_name>'

याद रखें कि उदाहरण के लिए सभी डेटाबेस के लिए चिह्नित लेनदेन भी डेटाबेस dbo.logmarkhistoryमें तालिका में दर्ज किए गए हैं MSDB


-1
--]---- Begin Code ----[
--–declaring variables
DECLARE @dbname VARCHAR(100) -- database name
DECLARE @bupath VARCHAR(100) -- path for backup location
DECLARE @filename VARCHAR(100) -- filename used for backup files
DECLARE @datestamp VARCHAR(25) -- date used for backup file timestamp
-- specify database backup directory
SET @bupath = 'D:\DB Bkp\'
-- file date formatting
SELECT @datestamp = CONVERT(VARCHAR(20),GETDATE(),112) + REPLACE
(CONVERT(VARCHAR(20),GETDATE(),108),':','')
--specify databases to backup
DECLARE db_cursor CURSOR for
SELECT name
FROM master.dbo.sysdatabases
WHERE name not IN ('tempdb') -- excludes these databases, if excluding multiple databases, seprate them by a comma
--backup process
OPEN db_cursor
FETCH NEXT FROM db_cursor INTO @dbname
WHILE @@FETCH_STATUS = 0
BEGIN
   SET @filename = @bupath + @dbname + '_' + @datestamp + '.bak'
   BACKUP DATABASE @dbname TO DISK = @filename WITH INIT,
   CHECKSUM; --init overwrites existing files with the same name, and checksum verifies the backup
       FETCH NEXT from db_cursor INTO @dbname
END
CLOSE db_cursor
DEALLOCATE db_cursor

अधिक जानकारी के लिए: https://blogs.technet.microsoft.com/letsdothis/2013/11/06/backup-multiple-sql-dat डेटाबेस-in-a-single-swoop/


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