Sitelerini paylaşımlı bir hosting hesabı üzerinde barındıran, ya da herhangi bir sebepten dolayı veritabanı sunucuları üzerinde tam kontrole sahip olmayan SQL Server kullanıcılarını, SQL Server 2008'in yanında gelen SQL Server Management Studio 2008'in kötü bir süprizi (bug'ı desem daha doğru olur) bekliyor. Sitemi GoDaddy sunucularındaki paylaşımlı hesabıma transfer ederken biraz zamanımı çalan bu hatanın sebebini ve çözümünü burada anlatacağım.
Problem kendini, Management Studio 2008 ile veritabanı sunucusuna gayet normal bir şekilde bağlandıktan sonra, sol taraftaki "Object Explorer" bölümündeki "Databases" dalını açmaya kalktığınız zaman belli ediyor.
Databases dalına basıldıktan sonra, Object Explorer yukarıda göstermiş olduğum halde uzun bir süre beklemeye başlıyor. Siz sabırla listenin alınmasını bekliyorsunuz ancak bir süre sonra veritabanlarının listesiyle değil, aşağıdaki hata mesajı ile karşılaşıyorsunuz.
Bu mesajda mavi ile kapatmış olduğum yerde veritabanına girerken kullandığım kullanıcı adım, siyah ile kapatmış olduğum yerde ise benimle uzaktan yakından alakası olmayan birinin veritabanının adı yazıyordu. Mesajı ilk gördüğümde hatanın bende olduğunu düşünüp yaptığım her adımı defalarca kez kontrol ettim. Ancak sonuç alamayınca biraz araştırma yaptım ve sorunun benden değil, Management Studio 2008'deki saçma bir bug'dan kaynaklandığını öğrendim.
Hatanın sebebi, Management Studio'nun veritabanlarının listesini almakla yetinmeyip, her veritabanı için normalde "Object Explorer Details (OED)" penceresini açmadığınız sürece göremeyeceğiniz bir sürü bilgiyi daha almaya kalkması. Tabi asıl sorun bu verileri almaya çalışması değil. Veritabanları arasında "auto-close" özelliğine sahip olup da kapanmış olanlar varsa, bunları da o bilgileri alabilmek için sorgulamaya çalışması ve eğer o veritabanına erişim hakkınız yoksa (ki paylaşımlı hosting'de tabi ki olmayacak) o veritabanı ile ilgili bilgileri almadan geçmek yerine donup yukarıdaki hatayı göstermesi. İşin kötü yanı, bu veri alma işlemini siz OED bölümünü disable etseniz bile yapması.
Bağlanmış olduğunuz sunucuda auto-close özelliği aktif olan veritabanları olup olmadığını öğrenmek için aşağıdaki SQL sorgusunu kullanabilirsiniz.
SELECT * FROM sys.databases WHERE is_auto_close_on = 1
Eğer bu sorgu sonucunda hiçbir satır dönmüyorsa listeleme işlemi sırasında bahsettiğim hatadan etkilenmeyeceksiniz demektir. Yok eğer dönüyorsa, ki paylaşımlı hosting kullanıyorsanız büyük ihtimalle dönecektir, o zaman yapmanız gereken şey şu: F7 tuşuna basarak OED bölümünü açmak, Databases bölümüne girmek ve sonra sütun başlıkları üzerinde sağ tuşa tıklayıp açılan menüden "Collation" seçeneğinin başındaki tiki kaldırmak. Aşağıdaki resimde tam olarak nereyi kasdettiğimi görebilirsiniz.
Bu işlemi yaptıktan sonra Object Explorer'da refresh yaparsanız, tüm veritabanlarının sorunsuz listelendiğini göreceksiniz.