2012-08-22 11 views
15

मेरे पास एक SQL सर्वर [उन्नत सेवाओं के साथ 2012 एक्सप्रेस] डेटाबेस है, इसमें बहुत कुछ नहीं है। मैं ईएफ कोड फर्स्ट का उपयोग कर एक एप्लीकेशन विकसित कर रहा हूं, और चूंकि मेरा मॉडल अभी भी प्रवाह की स्थिति में है, इसलिए डेटाबेस को गिरा दिया जा रहा है और प्रति दिन कई बार फिर से बनाया जा रहा है।एसक्यूएल सर्वर घटना लॉग में "डेटाबेस शुरू करना" क्यों कहता है, प्रति सेकंड दो बार?

आज सुबह, मेरा एप्लिकेशन पहली बार डेटाबेस से कनेक्ट होने में विफल रहा। जांच पर, ऐसा लगता है कि डेटाबेस "रिकवरी लंबित" मोड में है।

ईवेंट लॉग में देख रहे हैं, मैं देख सकता हूँ कि SQL सर्वर लॉग इन किया है:

डेटाबेस (मेरे डेटाबेस) को शुरू

... मोटे तौर पर दो बार प्रति सेकंड रात भर। (घटना लॉग भर गया, इसलिए मैं कल शाम से परे नहीं देख सकता)।

उन "जानकारी" लोग इन प्रविष्टियों के बारे में 6:00 आज सुबह में बंद हो, और तुरंत प्रविष्टि लॉग इन करें यह बताने वाला "त्रुटि" द्वारा पीछा कर रहे हैं:

वहाँ संसाधन पूल में अपर्याप्त स्मृति है 'आंतरिक' इस क्वेरी चलाने के लिए

मेरे डेटाबेस में क्या हुआ है?

नोट: यह संभव है कि मैंने अपना वेब एप्लिकेशन रातोंरात "डीबग" मोड में चलाया - हालांकि बिना किसी "ड्राइविंग" के बिना मैं कल्पना नहीं कर सकता कि वहां कोई डेटाबेस ट्रैफ़िक होगा, यदि कोई हो।

यह भी उल्लेखनीय है कि मेरे पास डेटाबेस में एक पूर्ण-पाठ कैटलॉग है (हालांकि मैं कहता हूं कि वर्तमान में डीबी में कोई वास्तविक सामग्री नहीं है)।

मुझे कहना है, यह चिंताजनक है - मैं खुश रहूंगा यदि यह मेरे उत्पादन डेटाबेस के साथ होता है!

+2

संभवत: यह [ 'AUTO_CLOSE'-इंग] है (http://www.sqlmag.com/article/sql- सर्वर/बारी ऑफ auto_close)। यह डिफ़ॉल्ट रूप से SQL सर्वर एक्सप्रेस डेटाबेस IIRC में चालू है। –

+0

क्या आपने कल अपने डीबी में कोई महत्वपूर्ण बदलाव किया है? –

+0

@GermannArlington: जैसा कि मैंने कहा है, डेटाबेस को गिरा दिया गया है और प्रति दिन कई बार फिर से बनाया गया है क्योंकि मैं अपने डेटा मॉडल में बदलाव करता हूं। लेकिन परिवर्तन मामूली हैं (एक नया कॉलम इत्यादि जोड़ें) –

उत्तर

21

डेटाबेस पर AUTO_CLOSE के साथ डेटाबेस पर बंद होने के तुरंत बाद बंद हो जाएगा, और प्रत्येक बार एक कनेक्शन स्थापित होने पर फिर से खोलें (एक त्वरित गति के बावजूद पुनर्प्राप्ति चलाएं)। तो आप संदेश देख रहे थे क्योंकि आपका 2 सेकंड आपका एप्लिकेशन डेटाबेस से कनेक्ट होगा। आप शायद हमेशा इस व्यवहार किया था और पहले कभी नहीं देखा था। अब जब आपका डेटाबेस क्रैश हो गया है, तो आपने लॉग की जांच की और इस समस्या की खोज की। जबकि यह अच्छा है कि अब आप जानते हैं और इसे ठीक कर देंगे, यह आपको वास्तविक समस्या, यानी डेटाबेस की उपलब्धता को संबोधित नहीं करता है।

तो अब आपके पास एक डेटाबेस है जो पुनर्प्राप्ति से बाहर नहीं आएगा, आप क्या करते हैं? आप पिछले बैकअप से पुनर्स्थापित करते हैं और अपना disaster recovery plan लागू करते हैं। वास्तव में, यह सब कुछ है। और कोई विकल्प नहीं है।

आप को समझने के लिए क्यों दुर्घटना हुआ चाहते हैं (इसके बारे में 1 असंख्य कारणों में से किसी हो सकता है ...) तो आप CSS (उत्पाद समर्थन) से संपर्क करने की जरूरत है। उनके पास जांच के माध्यम से आपको मार्गदर्शन करने का साधन है।

2

मुझे वसूली में फंस गए एसक्यूएल एक्सप्रेस डेटाबेस के साथ एक ही समस्या थी। लॉग की जांच के बाद यह प्रेरित हुआ कि डेटाबेस हर कुछ मिनटों में शुरू हो रहा था।स्क्रिप्ट

select name, state_desc, is_auto_close_on from sys.databases where name = 'mydb' 

ने खुलासा किया कि ऑटो क्लोज़ चालू है।

तो ऐसा लगता है कि डेटाबेस हमेशा वसूली में है लेकिन वास्तव में ऑफ़लाइन जाने से पहले एक संक्षिप्त सेकंड के लिए ऑनलाइन आ रहा है क्योंकि कोई क्लाइंट कनेक्शन नहीं है।

मैंने इसे निम्नलिखित स्क्रिप्ट के साथ हल किया।

Declare @state varchar(20) 
while 1=1 
    begin 
    Select @state = state_desc from sys.databases where name='mydb'; 
    If @state = 'ONLINE' 
     Begin 
      Alter database MyDb 
       Set AUTO_CLOSE_OFF; 
      Print 'Online' 
      break; 
     End 
     waitfor delay '00:00:02' 
    end 
13

यदि आप इस संदेश को इवेंट लॉग में बंद करना चाहते हैं। बस गोटो एसक्यूएल सर्वर प्रबंधन स्टूडियो,

  1. सही अपने डेटाबेस
  2. चयन विकल्प (बाएं पैनल से)
  3. में "स्वचालित" अनुभाग को देखो, और बदलने के "ऑटो बंद करने के लिए" "गलत"
  4. पर क्लिक करें
  5. क्लिक करें ठीक

है यही कारण है कि सभी :)

संबंधित मुद्दे