पूर्ण बैकअप से SQL सर्वर db को पुनर्स्थापित नहीं किया जा सकता है, लॉग प्रोसेसिंग विफल रहता है, 'पुनर्स्थापित' स्थिति में डेटाबेस


14

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

पूर्ण बैकअप से पुनर्स्थापित करने का प्रयास करते समय, कुछ समय बाद (~ 1 घंटा शायद, डेटाबेस ~ 270 जीबी आकार में है), मुझे एक त्रुटि मिल रही है:

System.Data.SqlClient.SqlError: डेटाबेस 'डेटाबेस नाम' के लिए लॉग को संसाधित करते समय एक त्रुटि हुई। यदि संभव हो, तो बैकअप से पुनर्स्थापित करें। यदि बैकअप उपलब्ध नहीं है, तो लॉग का पुनर्निर्माण करना आवश्यक हो सकता है। (Microsoft.SqlServer.SmoExtended)

इसके बाद, डीबी 'रिस्टोरिंग ..' स्टेट में है।

मैं कुछ चलाना चाहता था (इसे इस प्रश्न से मिला )

ALTER DATABASE recovery_test_2 SET EMERGENCY;
ALTER DATABASE recovery_test_2 SET SINGLE_USER;

DBCC CHECKDB (recovery_test_2, REPAIR_ALLOW_DATA_LOSS) WITH NO_INFOMSGS, ALL_ERRORMSGS;

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

मैं डीबी कैसे प्राप्त करूं और काम करूं? लेन-देन की संगतता मेरे लिए कोई मायने नहीं रखती है।

SSMS स्वतः-निर्मित पुनर्स्थापना स्क्रिप्ट:

  USE [master]
  RESTORE DATABASE [database_name] FROM  DISK = N'D:\database_name.bak' WITH  FILE = 1,
  MOVE N'database_name' TO N'D:\MSSQL\MSSQL12.MSSQLSERVER\MSSQL\DATA\database_name.mdf',
  MOVE N'database_name_index' TO N'D:\MSSQL\MSSQL12.MSSQLSERVER\MSSQL\DATA\database_name_index.ndf',
  MOVE N'database_name_log' TO N'D:\MSSQL\MSSQL12.MSSQLSERVER\MSSQL\DATA\database_name_log.ldf',
  NOUNLOAD,
  STATS = 5

  GO

@Craig Efrein द्वारा सुझाई गई क्वेरी का परिणाम

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


टिप्पणियाँ विस्तारित चर्चा के लिए नहीं हैं; इस वार्तालाप को बातचीत में स्थानांतरित कर दिया गया है ।
पॉल व्हाइट 9

जवाबों:


2

चैट में स्थानांतरित टिप्पणियों से, यह नोट ओपी से:

मैंने इसे GUI के माध्यम से संलग्न करने का प्रयास किया। जैसा कि मैंने .mdf फ़ाइल का चयन किया है, SSMS ने डेटाबेस की पहचान 3 फ़ाइलों (डेटा, इंडेक्स, लॉग) से की है, लेकिन किसी तरह भले ही मैं MOVE के साथ पुनर्स्थापित कर रहा था, लेकिन फ़ाइल पथ के बारे में डेटाबेस विवरण इसे गलत कह रहे थे! इसलिए मैंने अभी उन्हें पुराने लॉग / डेटा / इंडेक्स फ़ाइल में बताया और ... डेटाबेस ऑनलाइन है।


-3

एकल उपयोगकर्ता मोड में बदलें और पुनर्स्थापित करें।

उदाहरण:
पहला पुनर्स्थापना NORECOVERY विकल्प का उपयोग करता है इसलिए अतिरिक्त पुनर्स्थापना की जा सकती है। दूसरा कमांड लेनदेन लॉग को पुनर्स्थापित करता है और फिर अंतिम उपयोगकर्ता के उपयोग के लिए डेटाबेस को ऑनलाइन लाता है।

RESTORE DATABASE AdventureWorks FROM DISK = 'C:\AdventureWorks.BAK'
WITH NORECOVERY
GO
RESTORE LOG AdventureWorks FROM DISK = 'C:\AdventureWorks.TRN'
WITH RECOVERY
GO

1
यह प्रश्न एकल पुनर्स्थापना विवरण को संदर्भित करता है, कोई अलग लेनदेन लॉग पुनर्स्थापना नहीं की जा रही है। यह संभावना है कि स्रोत डेटाबेस और / या बैकअप फ़ाइल भ्रष्ट है।
ब्रायन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.