2011-03-15 10 views
10

पिछले दो बार हमने अपने एसक्यूएल सर्वर को रिबूट कर दिया है, हमारी वेबसाइट नीचे गई है। ऐसा प्रतीत होता है क्योंकि tempdb को फिर से बनाया जा रहा है और एएसपीस्टेट उपयोगकर्ता tempdb को पढ़ने/लिखने की अनुमति खो रहा है (यह एक एएसपी साइट है और सत्र डेटा एसक्यूएल सर्वर में संग्रहीत है)सर्वर को रीबूट होने पर मेरी tempdb रीसेट अनुमति क्यों देता है?

यह कोई समस्या नहीं थी लगभग दो हफ्ते पहले तक। क्या किसी को पता है कि मैं SQL सर्वर को रीबूट के बाद tempdb अनुमतियों को रीसेट करने से कैसे रोक सकता हूं? या यह हाल ही में क्यों शुरू हो रहा है? हम एमएस एसक्यूएल सर्वर 2005 का उपयोग कर रहे हैं।

+0

'aspnet_regsql.exe' का क्या (ढांचा) संस्करण आपने इसे स्थापित करने के लिए उपयोग किया था, इसलिए मैं इसे अंत में कोशिश कर सकता हूं? –

उत्तर

6

सबसे पहले, आपको सीधे tempdb को अनुमतियां असाइन नहीं करनी चाहिए। स्पष्ट कारणों से कि यह हर रीबूट पर पुनर्निर्मित हो जाता है।

जो वास्तव में एक प्रश्न उठाता है: आपको इस डेटाबेस को वैसे भी अनुमति क्यों है?

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

अद्यतन
मार्टिन टिप्पणी के आधार पर सभी मैं कह सकता हूँ वाह है। मैंने कभी यह नहीं सोचा होगा कि यह एक विकल्प होगा।

ठीक है, अब मैं सदमे से बरामद हुआ हूं।

शेड्यूल सर्वर पर एक नई नौकरी बनाएं जो शेड्यूल पर निष्पादित हो। अनुसूची को "जब भी SQL सर्वर एजेंट प्रारंभ होता है स्वचालित रूप से प्रारंभ करें" पर सेट किया जाना चाहिए। नौकरी को आपके आवश्यक tempdb अनुमतियों को फिर से बनाना चाहिए।

संक्षेप में, जब सर्वर को रिबूट किया जाता है तो SQL सर्वर एजेंट को पुनरारंभ किया जाएगा (बशर्ते सेवा उस तरह से सेट हो)। जब यह पुनरारंभ होता है तो यह इस नौकरी को बंद कर देगा जो आपकी अनुमतियों को ठीक करेगा। मैं अपेक्षा करता हूं कि एसक्यूएल सर्वर पूरी तरह से पुनरारंभ करने के लिए साइट को केवल कुछ सेकंड के लिए नीचे रहना होगा।

+1

+1 एक कारण है जिसका नाम * temp * db है, आखिरकार। –

+1

यह ओपी का कोड नहीं है। Http://pums.asp.net/p/1250011/2307815.aspx यहां वर्णित एस्पस्टेट स्थापना के लिए यह एक विकल्प है। Tempdb में क्षणिक डेटा संग्रहीत करने से कम लॉगिंग के मामले में फायदे हो सकते हैं। –

+0

+1 बस ध्यान दें कि मैंने अनुमतियों को फिर से बनाने के लिए उल्लेख किए गए थ्रेड से लिंक किया है, इसलिए मुझे लगता है कि यह "डिज़ाइन द्वारा" हो सकता है - यह सुनिश्चित नहीं है कि यह ओपी के लिए केवल एक मुद्दा क्यों बन जाएगा। –

0

एसक्यूएल सर्वर में tempdb डेटाबेस (मैंने जो कुछ भी पढ़ा है, सुना है, या अनुभवी है) पूरी तरह से गिरा दिया गया है और सेवा शुरू होने पर हर बार पुनर्निर्मित किया जाता है। इस प्रकार, भूमिकाओं, उपयोगकर्ताओं, या अन्य पहुंच अधिकार सेटिंग्स सहित, उस डेटाबेस में संग्रहीत या लिखे गए कुछ भी मिटा दिए जाएंगे। उदाहरण के शुरू होने पर उन्हें सेट/रीसेट करने के लिए कुछ उग्र कोड को छोड़कर, मुझे नहीं लगता कि आप इसके आसपास काम कर सकते हैं। (मुझे नहीं लगता है कि मॉडल डेटाबेस में सेट किया गया कुछ भी टेम्पर्ड पर कॉपी हो जाता है जब मैंने बनाया है, लेकिन मैंने कभी भी इसके बारे में सोचा नहीं है ...)

क्या ऐसी कोई भी डेटाबेस उस डेटाबेस पर लिखी जा रही है? क्या आप सुनिश्चित हैं कि ऐसा करने के लिए हाल ही में आपके सिस्टम को बदला या अपडेट नहीं किया गया है? संभवतः प्रासंगिक, एसक्यूएल इंस्टेंस कितनी बार रुक जाता है और फिर से शुरू होता है? (यह असामान्य नहीं है - यदि बुद्धिमान नहीं है - एसक्यूएल के लिए महीनों तक दौड़ने के लिए यदि पुनरारंभ किए बिना yers नहीं है ...)

1

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

0

नीचे के रूप में SQL सर्वर पर एक स्टार्टअप स्क्रिप्ट बनाएं:

use master 
go 
drop proc AddAppTempDBOwner 
go 
create proc AddAppTempDBOwner as 
declare @sql varchar(200) 
select @sql = 'use tempdb' + char(13) 
+ 'exec sp_addrolemember ''db_owner'', ''app''' 
exec (@sql) 
go 
exec sp_procoption 'AddAppTempDBOwner', 'startup', 'true' 
go 
2

मैं जानता हूँ कि यह एक पुराने सवाल है, लेकिन पुन: प्रारंभ करने पर tempdb व्यवहार के बारे में कुछ नई जानकारी नहीं मिली। tempdb अनिवार्य रूप से 'मॉडल' डीबी से बनाया गया है और यही कारण है कि इसमें सभी परिवर्तन खो गए हैं। यदि आप पुनरारंभ करने के बाद भी अपने परिवर्तनों को जारी रखने के लिए कोई परिवर्तन करते हैं तो 'tempdb' के रूप में 'मॉडल' डीबी में समान परिवर्तन करें। निम्नलिखित पर एक नज़र डालें: Does tempdb Get Recreated From model at Startup?

+0

सेटअप किया था। यह पूरी तरह से मेरे मामले में फिट हुआ जिसमें SQL सर्वर पूरी तरह से एक एकल ऐप को असामान्य अनुमति आवश्यकताओं के साथ समर्पित था। – chris

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