db_owner veritabanı bırakamıyor - Hata 615, SQL Server


11

Amazon EC2 üzerinde çalışan bir SQL Server 2012 veritabanı var. Veritabanları oluşturmak, düzenlemek ve bırakmak için bir kullanıcı oluşturdum. dbcreatorSunucu rolüyle yeni kullanıcıya verdim .

Kullanıcım uzaktan bağlanabilir ve create database foo;komutu başarıyla çalıştırır . Ancak kullanıcı drop database foo;komutu ile veritabanını yeniden bırakmaya çalıştığında aşağıdaki hatayla başarısız olur:

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

Seçilen veritabanı olmasına rağmen master(bu yüzden çünkü kullanımda olduğunu sanmıyorum). Yönetici kullanıcı olarak tekrar oturum açtığımda da komut başarılı oluyor.

Yeni oluşturulan veritabanını kontrol ettim ve kullanıcıma, db_ownerbeklediğim gibi veritabanındaki rolü atandı, bu yüzden anlayışım, bu kullanıcının yeni oluşturdukları veritabanını bırakabilmesi için yeterli izin olması gerektiğidir.

resim açıklamasını buraya girin

Göre http://technet.microsoft.com/en-us/library/ms178613.aspx vt_sahibi rolünün yeterli izinleri olmalıdır. "Veritabanında CONTROL izni veya ALB HERHANGİ BİR VERİTABANI izni veya db_owner sabit veritabanı rolü üyelik gerektirir."

Ben hata 615 baktım ve bulundu "Veritabanı tablo kimliği bulunamadı% d, adı '%. * Ls'." bu bana mantıklı gelmiyor. http://technet.microsoft.com/en-us/library/aa937592(v=sql.80).aspx

SQL sunucusu sürüm bilgisi: 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- from select @@version.

Yanıtlar:


12

Veritabanı için Otomatik Kapatma seçeneğinin Doğru olarak ayarlandığını tahmin edebilirim. Express Editions ile bir veritabanı oluşturduğunuzda bu varsayılan davranıştır.

Bahsedilen hata tam olarak bu durumda ortaya çıkabilir. Aslında tam hata mesajı 615 şunları ifade eder: "Could not find database ID %d, name '%.*ls'. The database may be offline. Wait a few minutes and try again."... Yani veritabanının bırakma sırasında kapatılabileceğini gösterir.

Bu nedenle, DB özelliklerine gidin, False olarak değiştirin ve tekrar bırakmayı deneyin veya bırakmadan önce aşağıdaki komut dosyasını kullanın

ALTER DATABASE [MyDB] SET AUTO_CLOSE OFF 
GO

Birçoğu, AutoClose'un False olarak ayarlanmasının daha iyi olduğuna dikkat çekiyor. Bu makaleyi AutoClose hakkında biraz daha açıklayan buldum: http://sqlmag.com/blog/worst-practice-allowing-autoclose-sql-server-databases

Cevabın küçük uzantısı:

-- 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

Açıkladığınız yapılandırma iyi olmalıdır.

Veritabanını farklı bir kullanıcı olarak bırakma girişiminiz var mı?

Bu kullanıcı olduğunuzdan% 100 emin olmak için SSMS kullanarak test kullanıcısı olarak bağlanmanızı öneririm. Ayrıca, veritabanı kontrolünü bırakmadan önce bazı verilere erişebilirsiniz, belki de test edersiniz ki tek bir kullanıcı moduna girebilirsiniz.


Gerçekten bu kullanıcının kimlik bilgileri ile yeni bir bağlantı yaparak, doğrudan sunucuda SSMS ile denedim. Uzaktan aynı sonuç. Sadece kontrol ettim ve kullanıcı gerçekten bir tablo oluşturabilir, bir satır ekleyebilir ve satırı başarıyla geri okuyabilir. Sorguyu ssms içinde yürütmeden önce doğru kullanıcının gösterildiğini iki kez kontrol ettim ve oldu, ancak drop deyimini çalıştırdıktan sonra "bağlı değil" olarak değiştirildi. Sanırım bunun nedeni ölümcül bir hata ama bunu daha önce fark etmemiştim.
Tim Abell

2
@Tim: Evet, seviye 20 ve üzerindeki hatalar bağlantıyı düşürür, bu sadece bir semptomdur. SQL Server Hata Günlüğü veya Uygulama Olay Günlüğü daha fazla bilgi veriyor mu?
Jon Seigel

Korkarım kontrol etmek için buna geri dönme şansım olmadı, ama bahşiş için teşekkürler. Bir dahaki sefere bu günlükleri kontrol edeceğim (ne zaman emin değilim).
Tim Abell

0

Bunun nedenini bulamadım, ancak aşağıdaki en iyi çözüm olmasa da komutu etkinleştirir.

Umarım soruna işaret eder ve birisi daha iyi bir cevap verebilir.

Microsoft SQL Server Management Studio'yu (Yönetici) localhost Güvenlik girişleri altında kullanıyorum

Kullanıcıya çift tıklayın, Sunucu Rolleri'ni seçin, dbcreator, public ve sysadm verin.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.