SQL सर्वर एक्सप्रेस 2005 के उपयोगकर्ता उदाहरण सुविधा का उपयोग करते इस तरह एक कनेक्शन स्ट्रिंग के साथ:आप SQL सर्वर के उपयोगकर्ता-उदाहरण को कैसे रोकते हैं? (SQL एक्सप्रेस उपयोगकर्ता उदाहरण डेटाबेस फ़ाइलें, बंद को रोकने के बाद भी Sql एक्सप्रेस सेवा)
<add name="Default" connectionString="Data Source=.\SQLExpress;
AttachDbFilename=C:\My App\Data\MyApp.mdf;
Initial Catalog=MyApp;
User Instance=True;
MultipleActiveResultSets=true;
Trusted_Connection=Yes;" />
हम पाते हैं कि हम कॉपी नहीं कर सकते डेटाबेस फ़ाइलों MyApp.mdf और MyApp_Log.ldf (क्योंकि वे लॉक हैं) SqlExpress सेवा को रोकने के बाद भी, और स्वचालित रूप से मैन्युअल स्टार्टअप मोड से SqlExpress सेवा को सेट करने का प्रयास करना होगा, और उसके बाद मशीन को पुनरारंभ करना होगा, इससे पहले कि हम कॉपी कर सकें फ़ाइलें।
यह मेरी समझ थी कि SqlExpress सेवा को रोकने से सभी उपयोगकर्ता उदाहरणों को भी रोकना चाहिए, जो उन फ़ाइलों पर ताले को छोड़ देना चाहिए। लेकिन ऐसा कोई प्रतीत नहीं होता है - क्या कोई उपयोगकर्ता उदाहरण को रोकने के तरीके पर कुछ प्रकाश डाल सकता है, जैसे कि डेटाबेस फ़ाइलों को अब लॉक नहीं किया गया है?
अद्यतन
ठीक है, मैं आलसी जा रहा है बंद कर दिया और प्रोसेस एक्सप्लोरर ऊपर निकाल दिया। लॉक sqlserver.exe द्वारा आयोजित किया गया था - लेकिन वहाँ एसक्यूएल सर्वर के दो उदाहरणों हैं:
sqlserver.exe PID: 4680 User Name: DefaultAppPool
sqlserver.exe PID: 4644 User Name: NETWORK SERVICE
फ़ाइल पीआईडी के साथ sqlserver.exe उदाहरण से खुला है: 4680
"एसक्यूएल सर्वर रोक (SQLEXPRESS) "सेवा, पीआईडी के साथ प्रक्रिया को मार डाला: 4644, लेकिन पीआईडी छोड़ दिया: 4680 अकेले।
शेष प्रक्रिया के मालिक के रूप में देखकर DefaultAppPool था, अगली चीज़ मैंने कोशिश की थी आईआईएस को रोक रहा था (यह डेटाबेस एएसपी.Net एप्लिकेशन से उपयोग किया जा रहा है)। दुर्भाग्यवश इस प्रक्रिया को या तो बंद नहीं किया।
शेष एसक्यूएल सर्वर प्रक्रिया को मैन्युअल रूप से मारने से डेटाबेस फ़ाइलों पर खुले फ़ाइल हैंडल को हटा दिया जाता है, जिससे उन्हें प्रतिलिपि/स्थानांतरित करने की अनुमति मिलती है।
दुर्भाग्यवश मैं उन फ़ाइलों को एक वाईएक्स इंस्टॉलर के कुछ पूर्व/पोस्ट इंस्टॉल कार्यों में कॉपी/पुनर्स्थापित करना चाहता हूं - जैसे कि मैं उम्मीद कर रहा था कि विंडोज़ सेवा को रोककर इसे हासिल करने का एक तरीका हो सकता है, बल्कि बाहर खोलना sqlserver.exe के सभी उदाहरणों को मारने के लिए है कि के रूप में कुछ समस्या बन गया है:
- सभी sqlserver.exe उदाहरणों हत्या अपनी मशीनों पर अन्य Sql सर्वर उदाहरणों के साथ उपयोगकर्ताओं के लिए अवांछनीय consequencies हो सकता है।
- मैं उन मामलों को आसानी से पुनरारंभ नहीं कर सकता।
- इंस्टॉलर में अतिरिक्त जटिलताओं का परिचय देता है।
क्या किसी के पास कोई विशिष्ट उपयोगकर्ता उदाहरण से जुड़े SQL सर्वर के उदाहरण बंद करने के बारे में कोई और विचार है?
सभी के लिए एथहैंक - सबसे उपयोगी उत्तर SSEUtil.exe का उपयोग करना था। यद्यपि हमें इसे एक वाईएक्स इंस्टॉलर से आमंत्रित करने की आवश्यकता है, हम देख सकते हैं कि यह थोड़ा समस्याग्रस्त हो जाएगा यानी यदि इंस्टॉलर चलाने वाले उपयोगकर्ता को sp_dettach_db निष्पादित करने की अनुमति नहीं है जो कि हम किस विधि का उपयोग करते हैं, इस पर ध्यान दिए बिना समस्या है - तो हम बस अपग्रेड से पहले उपयोगकर्ताओं के लिए कुछ मैन्युअल प्री-इंस्टॉलेशन चरण प्रदान करें ताकि वे स्वयं को SSEUtil.exe का उपयोग करके संभाल सकें। – Bittercoder
मैं उत्सुक हूं, SSEUtil.exe अनुमति समस्या के आसपास काम नहीं करता है? यदि उपयोगकर्ता को SSEUtil का उपयोग करके स्वयं को संभालना होगा, तो इंस्टॉलर का काम SSEUtil का आह्वान नहीं करना चाहिए? – AMissico
मेरे परीक्षणों में यह मामला प्रतीत नहीं होता - मेरा मानना है कि यह इसलिए था क्योंकि एसएसईयूटीटी का आह्वान करते समय इंस्टॉलर को ऊंचा नहीं किया गया था ... लेकिन मेरे पास अभी तक इसकी जांच करने का समय नहीं है। एक तरफ ध्यान दें कि हमने पाया है कि SSEUtil सभी सक्रिय उपयोगकर्ता-उदाहरणों को Windows7 x64 पर सही ढंग से सूचीबद्ध नहीं करेगा, दोनों SqlServer और SqlServer Express के साथ-साथ \ sqlExpress पैरामीटर में गुजरते समय भी स्थापित किया जाएगा। तो हमारे पास अभी भी काम करने के लिए कुछ किनारे के मामले हैं :) – Bittercoder