डेटाबेस को छोड़ने में असमर्थ db_owner - त्रुटि 615, SQL सर्वर


11

मेरे पास amazon EC2 पर SQL Server 2012 डेटाबेस चल रहा है। मैंने डेटाबेस बनाने, संपादित करने और ड्रॉप करने में सक्षम होने के लिए एक उपयोगकर्ता बनाया है। मैंने नया उपयोगकर्ता dbcreatorसर्वर भूमिका के साथ दिया ।

मेरा उपयोगकर्ता दूरस्थ रूप से कनेक्ट हो सकता है और सफलतापूर्वक create database foo;कमांड चला सकता है। लेकिन जब उपयोगकर्ता drop database foo;कमांड के साथ डेटाबेस को फिर से गिराने का प्रयास करता है , तो निम्न त्रुटि के साथ विफल होता है:

Warning: Fatal error 615 occurred at Feb  1 2014  5:15PM.
   Note the error and time, and contact your system administrator.
ErrorCode: 21

भले ही चयनित डेटाबेस है master(इसलिए मुझे नहीं लगता कि यह है क्योंकि यह उपयोग में है)। और कमांड तब सफल होता है जब मैं इसे चलाता हूं फिर से एक प्रशासनिक उपयोगकर्ता के रूप में लॉग इन करता हूं।

मैंने नए बनाए गए डेटाबेस की जाँच की, और मेरे उपयोगकर्ता को db_ownerडेटाबेस में भूमिका सौंपी गई है क्योंकि मुझे उम्मीद थी कि मेरी समझ यह है कि यह उस उपयोगकर्ता के लिए पर्याप्त अनुमतियाँ होनी चाहिए जिससे वे अभी बनाए गए डेटाबेस को छोड़ सकें।

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

Http://technet.microsoft.com/en-us/library/ms178613.aspx के अनुसार db_owner भूमिका पर्याप्त अनुमतियाँ होनी चाहिए। "डेटाबेस पर नियंत्रण की अनुमति की आवश्यकता है, या किसी DATABASE अनुमति की अनुमति दें, या db_own में निर्धारित डेटाबेस भूमिका की सदस्यता लें।"

मैंने 615 त्रुटि देखी है और पाया "डेटाबेस तालिका ID% d, '%। * Ls' नाम नहीं मिला।" जो मुझे कोई मतलब नहीं है। http://technet.microsoft.com/en-us/library/aa937592(v=sql.80).aspx

Sql सर्वर संस्करण जानकारी: Microsoft SQL Server 2012 (SP1) - 11.0.3368.0 (X64) /n May 22 2013 17:10:44 /n Copyright (c) Microsoft Corporation/n Express Edition (64-bit) on Windows NT 6.2 <X64> (Build 9200: ) (Hypervisor)/n- से select @@version

जवाबों:


12

मैं अनुमान लगा सकता हूँ कि आपके पास True पर सेट डेटाबेस के लिए AutoClose विकल्प है। एक्सप्रेस एडिशन के साथ डेटाबेस बनाते समय यह डिफ़ॉल्ट व्यवहार है।

इस मामले में उल्लिखित त्रुटि बिल्कुल हो सकती है। वास्तव में पूर्ण त्रुटि संदेश 615 बताता है: "Could not find database ID %d, name '%.*ls'. The database may be offline. Wait a few minutes and try again."... इसलिए यह इंगित करता है कि डेटाबेस को छोड़ने के दौरान बंद किया जा सकता है।

तो, DB गुणों पर जाएं, इसे गलत पर स्विच करें और ड्रॉप करने से पहले इसे फिर से छोड़ने या स्क्रिप्ट के नीचे उपयोग करने का प्रयास करें

ALTER DATABASE [MyDB] SET AUTO_CLOSE OFF 
GO

कई बिंदु बताते हैं कि गलत के लिए AutoClose सेट करना बेहतर है। मुझे यह लेख AutoClose के बारे में थोड़ा और बताते हुए मिला: http://sqlmag.com/blog/worst-ults-allowing-autoclose-sql-server-dat डेटाबेस

उत्तर का छोटा विस्तार:

-- this works in standard SQL Server Editions, but NOT with Express Editions:
CREATE DATABASE [MyDB]
GO
DROP DATABASE [MyDB]
GO

-- this works in ALL SQL Server Editions
CREATE DATABASE [MyDB]
GO
ALTER DATABASE [MyDB] SET AUTO_CLOSE OFF 
GO
DROP DATABASE [MyDB]
GO

2

आपके द्वारा वर्णित कॉन्फ़िगरेशन ठीक होना चाहिए।

क्या कोई मौका है कि आप वास्तव में एक अलग उपयोगकर्ता के रूप में डेटाबेस को छोड़ने का प्रयास कर रहे हैं?

मैं SSMS का उपयोग करके परीक्षण उपयोगकर्ता के रूप में कनेक्ट करने की सलाह देता हूं ताकि यह सुनिश्चित हो कि आप उस उपयोगकर्ता हैं। इसके अलावा, डेटाबेस चेक छोड़ने से पहले आप इससे कुछ डेटा एक्सेस कर सकते हैं, हो सकता है कि आप यह भी परीक्षण कर सकते हैं कि आप इसे एकल उपयोगकर्ता मोड में डाल सकते हैं, जो मुझे लगता है कि आपको अंततः वैसे भी करने की आवश्यकता होगी


मैंने वास्तव में सर्वर पर सीधे SSMS के साथ प्रयास किया है, जिससे इस उपयोगकर्ता की साख के साथ एक नया संबंध बनता है। एक ही परिणाम के रूप में दूर से। मैंने अभी जाँच की है और उपयोगकर्ता वास्तव में एक तालिका बना सकता है, एक पंक्ति सम्मिलित कर सकता है और पंक्ति को सफलतापूर्वक पढ़ सकता है। मैंने ssms में क्वेरी निष्पादित करने से पहले सही उपयोगकर्ता को डबल-चेक किया था और यह था, लेकिन ड्रॉप स्टेटमेंट को चलाने के बाद यह "कनेक्टेड नहीं" में बदल गया। मुझे लगता है कि यह सिर्फ इसलिए कि यह एक घातक त्रुटि है, लेकिन मैंने अब से पहले इस पर ध्यान नहीं दिया था।
टिम एबेल

2
@ समय: हाँ, स्तर 20 की त्रुटियां और उच्चतर कनेक्शन को छोड़ देता है, इसलिए यह सिर्फ एक लक्षण है। SQL सर्वर त्रुटि लॉग या अनुप्रयोग इवेंट लॉग किसी भी अधिक जानकारी देता है?
जॉन सेगेल

मुझे डर है कि मुझे जांच के लिए वापस जाने का मौका नहीं मिला, लेकिन टिप के लिए धन्यवाद। मैं अगली बार लॉग की जाँच करूँगा कि मैं यह देख रहा हूँ (निश्चित नहीं है कि कब होगा)।
टिम एबेल

0

मुझे इसका कारण नहीं मिला, लेकिन निम्नलिखित जबकि सबसे अच्छा समाधान कमांड को सक्षम नहीं करता है।

यह मेरी आशा है कि यह समस्या की ओर इशारा करता है और कोई व्यक्ति बेहतर उत्तर दे सकता है।

मैं Microsoft SQL सर्वर प्रबंधन स्टूडियो (व्यवस्थापक) का उपयोग स्थानीयहोस्ट सुरक्षा लॉगइन के तहत करता हूं

डबल क्लिक उपयोगकर्ता, सर्वर रोल का चयन करें, dbcreator, सार्वजनिक और sysadm दें।

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