"होस्ट के लिए डेटाबेस लॉग के लिए लेन-देन लॉग भरा हुआ है" एक साझा होस्ट में


92

मेरे पास एक Asp.Net MVC 5 वेबसाइट है जिसमें एक साझा होस्टिंग योजना में EntityFramework codefirst दृष्टिकोण है। यह कंट्रोल पैनल के लिए ओपन सोर्स वेबकंपनील का उपयोग करता है और इसका SQL सर्वर पैनल कुछ सीमित है। आज जब मैं डेटाबेस को संपादित करना चाहता था, तो मुझे इस त्रुटि का सामना करना पड़ा:

The transaction log for database 'db_name' is full due to 'LOG_BACKUP'

मैं चारों ओर खोज की है और जैसे संबंधित जवाब का एक बहुत पाया इस और इस या इस लेकिन समस्या यह है कि वे डेटाबेस पर एक प्रश्न चलाने की सलाह देते है। मैंने दौड़ने की कोशिश की

db.Database.ExecuteSqlCommand("ALTER DATABASE db_name SET RECOVERY SIMPLE;");

दृश्य स्टूडियो के साथ (पर HomeController) लेकिन मुझे निम्न त्रुटि मिलती है:

System.Data.SqlClient.SqlException: ALTER DATABASE statement not allowed within multi-statement transaction.

मैं अपनी समस्या कैसे हल कर सकता हूं? क्या मुझे सहायता टीम से संपर्क करना चाहिए (जो मेरे मेजबान के लिए थोड़ा गरीब है) या क्या मैं इसे स्वयं हल कर सकता हूं?


लेनदेन के बिना अलर्ट को निष्पादित करें।
usr

@usr मैं ऐसा कैसे करूंगा?
अलीरज़ा नूरी

इसका डेटाबेस समस्या, डेटाबेस सिकुड़ कर काम कर सकता है। इस पर आपकी मदद करने के लिए DBA से पूछें।
शशांक चतुर्वेदी

आपने किसी तरह लेन-देन खोला होगा। मैं नहीं जानता, शायद EF यह स्वचालित रूप से करता है। आपको ईएफ और लेनदेन पर कुछ शोध करने की आवश्यकता होगी। या, SSMS से इसे निष्पादित करें। या, कच्चे ADO.NET का उपयोग करें। संभवत: आपका हॉस्टल उस स्टेटमेंट को वैसे भी अनुमति नहीं देगा और उन्हें लॉग बैकअप को अधिक बार जारी करने की आवश्यकता होती है।
usr

जवाबों:


39

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


धन्यवाद। मैं खुद ऐसा करना चाहता था, लेकिन उनसे भी संपर्क किया और उन्होंने रिकवरी स्थापित की और shrinkDB पर भाग गया । इसके अलावा, मुझे रिकवरी की आवश्यकता नहीं थी इसलिए मैंने उन्हें इसे SIMPLEमोड पर सेट करने के लिए कहा ।
अलीरज़ा नूरी

1
यह MSDN पृष्ठ बताता है कि रिकवरी मॉडल को सरल पर कैसे सेट किया जाए!
शेखर

147

बेन के जवाब के अलावा, आप अपनी आवश्यकता के अनुसार नीचे की कोशिश कर सकते हैं

USE {database-name};  
GO  
-- Truncate the log by changing the database recovery model to SIMPLE.  
ALTER DATABASE {database-name}
SET RECOVERY SIMPLE;  
GO  
-- Shrink the truncated log file to 1 MB.  
DBCC SHRINKFILE ({database-file-name}, 1);  
GO  
-- Reset the database recovery model.  
ALTER DATABASE {database-name}
SET RECOVERY FULL;  
GO 

अपडेट क्रेडिट @ cema-sp

डेटाबेस फ़ाइल नाम क्वेरी के नीचे उपयोग करने के लिए

select * from sys.database_files;

8
अतिरिक्त: {डेटाबेस-फ़ाइल-नाम} खोजने के लिए:select * from sys.database_files;
cema-sp

2
मैं इस बात की पुष्टि कर सकता हूं कि यह एक इलाज है। स्वीकृत उत्तर होना चाहिए।
गररतेंडी

2
धन्यवाद @ मोहित धर्माधिकारी; मैंने अधिक डिस्क स्थान आवंटित करने और लॉग फ़ाइल का आकार बढ़ाने सहित कई अन्य चीजों की कोशिश की, फिर भी मैंने पहले लॉग फ़ाइल को सिकोड़ने तक कुछ भी काम नहीं किया।
जॉनी

1
धन्यवाद, बहुत मददगार।
ओबेकेंग मोल्बत्सी

3
मेरा मानना ​​है कि {डेटाबेस-फाइल-नाम} nameइस प्रश्न से, लॉग की पंक्ति के लिए कॉलम के बराबर होगा :select * from sys.database_files
बॉब हॉर्न

14

कभी-कभी जब कोई डिस्क अंतरिक्ष से बाहर निकलती है, तो "लॉग लॉगऑन 'के कारण" XXXXXXXXXX डेटाबेस के लिए लेन-देन लॉग "संदेश पूर्ण हो जाता है, जब अद्यतन SQL कथन विफल हो जाता है। अपनी डिस्क की जाँच करें :)


5

यह त्रुटि इसलिए होती है क्योंकि LOG_BACKUP के कारण लेन-देन लॉग पूर्ण हो जाता है। इसलिए, आप इस डेटाबेस पर कोई कार्रवाई नहीं कर सकते, और इस स्थिति में, SQL Server डेटाबेस इंजिन 9002 त्रुटि बढ़ाएगा।

इस समस्या को हल करने के लिए आपको निम्न कार्य करना चाहिए

  • एक पूर्ण डेटाबेस बैकअप लें।
  • भौतिक फ़ाइल आकार को कम करने के लिए लॉग फ़ाइल को सिकोड़ें।
  • एक LOG_BACKUP बनाएं।
  • अक्सर बैकअप लॉग लेने के लिए एक LOG_BACKUP रखरखाव योजना बनाएं।

मैंने इस त्रुटि के बारे में सभी विवरणों के साथ एक लेख लिखा और इसे डेटाबेस 'SharePoint_Config' के लेन-देन लॉग में कैसे हल किया जाए, यह LOG_BACKUP के कारण पूर्ण है


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

3

यह तब भी हो सकता है जब लॉग फ़ाइल आकार में प्रतिबंधित हो।

ऑब्जेक्ट एक्सप्लोरर में राइट क्लिक डेटाबेस

गुण का चयन करें

फ़ाइलें चुनें

लॉग लाइन पर, Autogrowth / Maxsize कॉलम में दीर्घवृत्त पर क्लिक करें

अधिकतम फ़ाइल आकार बदलें / सत्यापित करें असीमित है।

यहाँ छवि विवरण दर्ज करें

असीमित के लिए जप के बाद, डेटाबेस जीवन में वापस आ गया।


1

मुझे वही त्रुटि मिली लेकिन बैकएंड जॉब (SSIS जॉब) से। डेटाबेस की लॉग फ़ाइल वृद्धि सेटिंग की जाँच करने पर, लॉग फ़ाइल 1GB की सीमित वृद्धि थी। तो क्या हुआ जब नौकरी चली गई और इसने SQL सर्वर को अधिक लॉग स्पेस आवंटित करने के लिए कहा, लेकिन लॉग की वृद्धि की सीमा में गिरावट के कारण नौकरी विफल हो गई। मैंने लॉग वृद्धि को संशोधित किया और इसे 50 एमबी और असीमित विकास से बढ़ने के लिए सेट किया और त्रुटि दूर हो गई।

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