डिफरेंशियल बैकअप रिस्टोर करने से DEFUNCT लॉग फाइल बनती है?


11

यहाँ मेरी समस्या है। मैं एक डेटाबेस को पूर्ण पुनर्स्थापना के माध्यम से एक नए सर्वर पर ले जाने की कोशिश कर रहा हूं, फिर एक त्वरित अंतर बैकअप / पुनर्स्थापना के साथ कटओवर। मैं एक समस्या के बिना एक पूर्ण पुनर्स्थापना कर सकता हूं, लेकिन अंतर बैकअप को पुनर्स्थापित करते समय, मुझे निम्नलिखित चेतावनी मिलती है:

Msg 3127, स्तर 16, राज्य 1, पंक्ति 1 पुनर्स्थापित डेटाबेस 'डेटाबेसनाम' की फ़ाइल 'Database_Log2' को विरूपित स्थिति में छोड़ा जा रहा है क्योंकि डेटाबेस सरल पुनर्प्राप्ति मॉडल का उपयोग कर रहा है और फ़ाइल रीड-राइट एक्सेस के लिए चिह्नित है। इसलिए, केवल रीड-ओनली फ़ाइलों को ही स्‍पर्मल रिस्टोर करके पुनर्प्राप्त किया जा सकता है।

डेटाबेस पुनर्स्थापित करता है और इसे ऑनलाइन माना जाता है, लेकिन निम्न त्रुटि वाली इस DEFUNCT फ़ाइल के कारण कोई भी बैकअप कार्रवाई विफल हो जाती है:

Msg 3636, Level 16, State 2, Line 1 डेटाबेस आईडी 10 फ़ाइल आईडी के लिए 'BackupMetadata' मेटाडेटा को संसाधित करते समय एक त्रुटि हुई 6. Msg 3046, Level 16, State 2, Line 1 असंगत मेटाडेटा का सामना हुआ। एकमात्र संभव बैकअप ऑपरेशन, CONTINUE_AFTER_ERROR या NO_TRUNCATE विकल्प के साथ एक टेल-लॉग बैकअप है। Msg 3013, लेवल 16, स्टेट 1, लाइन 1 बैकअप डेटा असामान्य रूप से समाप्त हो रहा है।

अगर मैं पूरी तरह से पूरी तरह से पूरी तरह से करता हूं और अंतर करता है तो दोनों मुझे एक ही आउटपुट देते हैं, जो स्रोत डेटाबेस पर sys.database_files से जो दिखता है, उससे मेल खाता है। डेवलपर संस्करण पर सर्वर SQL2012 SP1 है।

मैं एक पूर्ण बैकअप कर सकता हूं, और उसके तुरंत बाद एक अंतर कर सकता हूं, और इन फ़ाइलों को एक ही सर्वर पर एक अलग डेटाबेस में पुनर्स्थापित कर सकता हूं और ठीक उसी समस्या को देख सकता हूं, इसलिए अंतर पैदा करने वाली चीज के साथ कुछ है। यदि मैं RECOVERY के साथ पूर्ण बैकअप को पुनर्स्थापित करता हूं तो कोई समस्या नहीं है। मुझे नहीं पता कि यह फाइल इस डेटाबेस पर मौजूद थी या नहीं, लेकिन यह पूरी तरह से संभव है कि यह फाइल अस्तित्व में थी और बहुत समय पहले हटा दी गई थी। यदि मैं पुनर्स्थापित डेटाबेस पर sys.database_files क्वेरी करता हूं, तो DEFUNCT फ़ाइल में drop_lsn का मान है, जो इस बात की पुष्टि करता है। वर्तमान में स्रोत डेटाबेस में केवल एक फ़ाइलग्रुप (PRIMARY), 4 डेटा फ़ाइल और एक लॉग फ़ाइल है।

कोई विचार?


क्या आप कृपया हमें उन बयानों को दिखा सकते हैं जिनका आप बैकअप और पुनर्स्थापना करने के लिए उपयोग कर रहे हैं?
जॉन सिगेल

असाधारण नहीं। DESTABASE डेटाबेसनाम का नाम DISK = 'D: \ Full.bak' के साथ REPLACE, NORECOVERY फिर RESTORE DATABASE डेटाबेस का नाम DISK = 'D: \ Diffbak' से RECOVERY
FilamentUnities

जवाबों:


5

यहां SQL 2012 SP1 डेवलपर संस्करण पर परीक्षण किए गए, इसे पुन: पेश करने के चरण दिए गए हैं। SQL 2008 पर ऐसा नहीं होता है। संक्षेप में, SQL डेटाबेस में बनाया गया डेटाबेस जबकि SIMPLE पुनर्प्राप्ति में मॉडल डेटाबेस होता है, जिसमें एक अतिरिक्त बैकअप फ़ाइल मौजूद होने पर पूर्ण बैकअप लिया जाता है, यदि अतिरिक्त लॉग फ़ाइल में उपयोग करने योग्य अंतर बैकअप नहीं बनाया जा सकता। कभी हटा दिया गया।

ALTER DATABASE [model] SET RECOVERY SIMPLE
GO
CREATE DATABASE [DefunctTest]
GO
ALTER DATABASE [DefunctTest] ADD LOG FILE ( NAME = N'DefunctTest_log2', FILENAME = N'D:\DefunctTest_log2.ldf' , SIZE = 25600KB , FILEGROWTH = 10%)
GO
BACKUP DATABASE [DefunctTest] TO DISK = 'D:\DefunctTestPostLogFile.bak' WITH INIT
GO
ALTER DATABASE [DefunctTest]  REMOVE FILE [DefunctTest_log2]
GO

BACKUP DATABASE [DefunctTest] TO DISK = 'D:\DefunctTestFull.bak' WITH INIT
GO
BACKUP DATABASE [DefunctTest] TO DISK = 'D:\DefunctTestDiff.bak' WITH DIFFERENTIAL, INIT
GO
--Show that the backups only have the one log file.
RESTORE FILELISTONLY FROM DISK = 'D:\DefunctTestFull.bak'
RESTORE FILELISTONLY FROM DISK = 'D:\DefunctTestDiff.bak'
GO
RESTORE DATABASE [DefunctTest2] FROM DISK = 'D:\DefunctTestFull.bak' WITH 
MOVE 'DefunctTest' TO 'D:\DefunctTest2.mdf',
MOVE 'DefunctTest_log' TO 'D:\DefunctTest2_log.ldf', REPLACE, NORECOVERY
GO
--This restore will have the error.
RESTORE DATABASE [DefunctTest2] FROM DISK = 'D:\DefunctTestDiff.bak' WITH RECOVERY
GO

USE [DefunctTest2]
SELECT * FROM sys.database_files
GO

मैंने इस बग के लिए एक कनेक्ट आइटम यहां प्रस्तुत किया है । इस डिफंक्शन फाइल को हटाने का एकमात्र तरीका डेटाबेस को अलग करना है, और ATTACH_REBUILD_LOG के साथ फिर से जुड़ना है।

अद्यतन: मेरी पुनरावृत्ति स्क्रिप्ट में इस परिदृश्य को बनाने वाला बग इस KB द्वारा तय किया गया लगता है: https://support.microsoft.com/en-us/kb/2830400 । टिप्पणियों से ऐसा प्रतीत होता है कि अतिरिक्त फिक्स SQL2012 / 2014 के लिए उपलब्ध है, परिदृश्य बहुत समान हैं: https://support.microsoft.com/en-us/kb/3009576


मैं लोगों को पुन: उत्पन्न करने में मदद करने के लिए कनेक्ट की गई टिप्पणियों में आपकी स्क्रिप्ट शामिल करूंगा।
केनेथ फिशर

1
मुझे SQL Server 2012 एंटरप्राइज़ संस्करण, 11.0.3412 (SP1 के लिए CU9) पर आपकी स्क्रिप्ट चलाने में कोई त्रुटि नहीं मिलती है

यदि आप विवरण बटन पर क्लिक करते हैं, तो रेप्रो स्क्रिप्ट कनेक्ट आइटम में है।
FilamentUnities

1
शॉन, क्यूई में सुधार के माध्यम से देख रहा है, मुझे लगता है कि यह शायद इस व्यवहार को तय करता है: support.microsoft.com/kb/2830400
FilamentUnities

2
मेरी पिछले हफ्ते इसके साथ लड़ाई हुई थी और यह धागा मुझे इसे सुलझाने में मदद करता है इसलिए धन्यवाद। ऐसा लगता है कि फिक्स SQL ​​2012 SP2 CU3 में है: support.microsoft.com/en-us/kb/3009576
रिचर्ड
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.