SQL सर्वर डेटाबेस प्रश्नों को स्वीकार करने के लिए कब तैयार होता है?


11

SQL सर्वर त्रुटि लॉग फ़ाइल में मुझे निम्न पंक्तियाँ मिलीं:

2018-02-22 14:10:58.95 spid17s     Starting up database 'msdb'.
2018-02-22 14:10:58.95 spid16s     Starting up database 'ReportServer'.
2018-02-22 14:10:58.95 spid18s     Starting up database 'ReportServerTempDB'.
2018-02-22 14:10:58.95 spid19s     Starting up database 'XYZ'.

यदि मैं इस समय से पहले डेटाबेस XYZ की स्थिति की जाँच करता हूं, तो यह ONLINEनिम्नलिखित कथन का उपयोग कर रहा है:

SELECT state_desc FROM sys.databases WHERE name='XYZ'

... लेकिन जब मैं C # एप्लिकेशन का उपयोग करके इस डेटाबेस से कनेक्ट करने का प्रयास करता हूं, तो यह डेटाबेस से कनेक्ट नहीं हो सकता।

त्रुटि यह है:

उपयोगकर्ता 'asd' के लिए लॉगिन विफल रहा।
कारण: स्पष्ट रूप से निर्दिष्ट डेटाबेस को खोलने में विफल।

मैंने तीन अलग-अलग उपयोगकर्ताओं (विंडोज उपयोगकर्ता, सा, एसक्यूएल सर्वर उपयोगकर्ता को एप्लिकेशन के लिए परिभाषित किया) की कोशिश की। समस्या तब होती है जब मैं ओएस के स्टार्ट अप में एप्लिकेशन चलाता हूं, लेकिन अगर मैं इसे स्टार्ट अप के बाद मैन्युअल रूप से शुरू करता हूं, तो कोई त्रुटि नहीं होती है, इसलिए मुझे लगता है कि सभी SQL सर्वर सेटिंग्स और फ़ायरवॉल सेटिंग्स सही हैं।

मैंने इससे पहले भी जाँच की थी कि सेवा की स्थिति चल रही है।

मुझे यह सुनिश्चित करने के लिए और क्या जाँचना चाहिए कि डेटाबेस वास्तव में ऑनलाइन है और प्रश्नों के लिए तैयार है?

मैं एक ऐसी कुंजी की तलाश कर रहा हूं जो बताती है कि डेटाबेस को क्वेरी करना ठीक है, बजाय एक समय के लिए देरी के (यहां तक ​​कि स्पष्ट कारण के आधार पर नहीं)।

मैंने टेक्स्ट "स्टार्टिंग डेटाबेस 'एक्सवाईजेड" के लिए त्रुटि लॉग को स्कैन करने के बारे में सोचा, लेकिन इसका मतलब है कि मुझे एसक्यूएल सर्वर त्रुटि लॉग के पथ के लिए आवेदन के लिए एक सेटिंग जोड़ना होगा। इसका मतलब यह भी है कि जब तक मुझे यह वाक्यांश नहीं मिल जाता, तब तक फ़ाइल को कई बार पढ़ना।

जवाबों:


23

SQL सर्वर डेटाबेस प्रश्नों को स्वीकार करने के लिए तैयार है:

SELECT DATABASEPROPERTYEX(N'database name', 'Collation')

वापस नहीं आता है NULL

के लिए प्रलेखन से DATABASEPROPERTYEX(लेनदेन एसक्यूएल) :

नोट: ONLINEस्थिति खोली जा सकती है जबकि डेटाबेस खोला जा रहा है और अभी तक पुनर्प्राप्त नहीं किया गया है। यह पहचानने के लिए कि कब डेटाबेस कनेक्शन स्वीकार कर सकता है, की Collation प्रॉपर्टी की क्वेरी करें DATABASEPROPERTYEX। डेटाबेस कनेक्शन कनेक्शन स्वीकार कर सकता है जब डेटाबेस टकराव एक गैर-शून्य मान देता है। हमेशा डेटाबेस पर, क्वेरी database_stateया के database_state_descकॉलम sys.dm_hadr_database_replica_states


3

SQL सर्वर डेटाबेस शुरू करते हैं, लेकिन फिर उन्हें लेन-देन लॉग का विश्लेषण करने के लिए लेनदेन को आगे और पीछे रोल करने की आवश्यकता होती है। यह प्रक्रिया मिलिसेकंड से लेकर घंटों (यहां तक ​​कि दिनों में!) एक लंबे समय तक चलने वाले लेनदेन की स्थिति में, उपयोगकर्ता डेटाबेस के कई (विचार हजारों), या बहुत सारे (हजारों का दसियों) वर्चुअल लॉग फ़ाइलों के साथ हो सकती है।

यदि आप चाहते हैं कि रिकवरी होने पर ही एप्लिकेशन प्राप्त हो और डेटाबेस तैयार हो, तो एप्लिकेशन को इसके कनेक्शन को पुनः प्राप्त करें।

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

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