SQL Server Msg 4064 — Giriş Yapamıyorum, Hangi Veritabanı Kapalı?
4064 hatasında login'in varsayılan veritabanını bulma, 4060 ile farkı, ADMIN: bağlantısıyla kurtarma ve AUTO_CLOSE tuzağı.
Operasyonel Doğrulama & Güvenilirlik Standardı
Hata mesajı semptomdur, kök neden değildir. Sunucuyu yeniden başlatmadan veya rastgele ayar değiştirmeden önce aşağıdaki "Nedeni ayırt eden tek sorgu"yu çalıştırarak gerçek senaryoyu netleştirin.
▸Belirti
Msg 4064, Level 11, State 1, Line 1
Cannot open user default database. Login failed.
Msg 18456, Level 14, State 1, Line 1
Login failed for user 'app_kullanici'.Bu iki hata satırı birlikte fırlatıldığında çok önemli bir teşhis gerçeği ortaya çıkar: Kullanıcının parolası doğrudur ve kimlik doğrulaması başarılı olmuştur! Ancak SQL Server oturumu açarken login'e atanmış varsayılan veritabanına bağlanamadığı için oturumu zorla sonlandırmıştır.
▸H-15 ile Farkı: Msg 4060 mı, Msg 4064 mü?
- •Msg 4060 (`Cannot open database requested by login`): İstemci bağlantı dizesinde (Connection String) açıkça
Initial Catalog=appyazmıştır ve belirtilen bu veritabanı erişilemez durumdadır (H-15). - •Msg 4064 (`Cannot open user default database`): İstemci bağlantı dizesinde veritabanı belirtmemiştir (veya belirtmiş olsa dahi) SQL Server login kaydının varsayılan veritabanı (`default_database_name`) açılamamaktadır.
Bu ayrım son derece pratiktir: 4064 aldığınızda arayacağınız yer doğrudan sys.server_principals.default_database_name sütunudur.
▸Teşhis: Tavuk-Yumurta Problemini Aşma
Kullanıcı veritabanına bağlanamadığı için hedef sunucuya normal yollarla sorgu atamazsınız. İki kurtarma yolu vardır:
1. SQLCMD ile DAC (Dedicated Administrator Connection) Üzerinden Bağlanın
DAC bağlantısı varsayılan veritabanı bozuk veya çevrimdışı olsa dahi her zaman master üzerinden doğrudan bağlantı sağlar:
sqlcmd -S sunucu -A -E2. Başka Bir Sysadmin Hesabıyla Bağlanın ve Login Durumunu Sorgulayın
SELECT name, default_database_name, is_disabled, type_desc
FROM sys.server_principals
WHERE name = 'app_kullanici';Ardından bu varsayılan veritabanının gerçek durumuna bakın:
SELECT name, state_desc, user_access_desc, is_auto_close_on
FROM sys.databases
WHERE name = 'app';Dört olası kök neden:
- 1Veritabanı silinmiş veya adı değiştirilmiştir:
sys.databaseslistesinde hiç yoktur. - 2Veritabanı erişilemez durumdadır:
state_descdeğeriOFFLINE,RESTORING,RECOVERY_PENDINGveyaSUSPECTdurumundadır. - 3Kullanıcı Eşleşmesi Kopmuştur (Orphaned User): Veritabanı ayaktadır ancak veritabanı içinde bu login'e bağlı bir
USERkaydı silinmiştir. - 4`AUTO_CLOSE` Tuzağı:
is_auto_close_on = 1ise son oturum kapandığında veritabanı kendini kapatır; yeni bağlantı açılırken yaşanan milisaniyelik gecikme 4064 üretebilir.
▸Adım Adım Kalıcı Çözüm
1. Login'in Varsayılan Veritabanını Geçici Olarak master Yapın
Bu komut kullanıcının giriş yapmasını anında geri kazandırır:
ALTER LOGIN app_kullanici WITH DEFAULT_DATABASE = master;tempdb atamayın; çünkü tempdb sunucu yeniden başladığında sıfırlanır ve ileride gizli bağımlılık sorunları doğurur.2. Çevrimdışı Veritabanını Ayağa Kaldırın
Eğer veritabanı bilerek veya kazaen çevrimdışı yapıldıysa:
ALTER DATABASE app SET ONLINE;3. AUTO_CLOSE Özelliğini Kapatın
Kurumsal SQL Server ortamlarında AUTO_CLOSE kesinlikle kapalı olmalıdır:
ALTER DATABASE app SET AUTO_CLOSE OFF;4. Kullanıcı-Login Eşleşmesini Onarın
USE app;
ALTER USER app_kullanici WITH LOGIN = app_kullanici;▸İlgili Hata Rehberleri & Hub Bağlantıları
- •SQL Server Cannot Open Database 4060 (H-15) — Açıkça talep edilen veritabanı erişim engeli
- •SQL Server Login Failed 18456 (H-04) — Kimlik doğrulama hataları
- •SQL Server Msg 229 Permission Denied (H-39) — Yetki ve guest kullanıcı sorunları
- •SQL Server Hub — Oturum yönetimi ve veritabanı kurtarma rehberleri
Diğer Veritabanı Hata Teşhisleri
Kriz anında başvurabileceğiniz diğer doğrulanmış hata rehberleri.
SQL Server Error 18456: State Kodlarına Göre Gerçek Neden
18456 hatasında State numarası gerçek nedeni söyler. State 5, 8, 11, 18, 38 ve 40 için ayrı çözümler, ERRORLOG okuma komutları.
SQL Server Error 1205 Deadlock: Grafiği Bulma ve Önleme
SQL Server 1205 hatasında deadlock grafiğini system_health oturumundan çıkarma, kurban seçimini anlama ve kalıcı önleme yöntemleri.
SQL Server Pool Timeout: Bağlantı Havuzu Tükenmesi Çözümü
"Timeout expired prior to obtaining a connection from the pool" hatasının komut zaman aşımından farkı, sızıntı tespiti ve .NET tarafında kalıcı düzeltme.