dataiotech Labs
dbaguidedbaguideDBAdataxtoolsdataopsphere
Home/Hata Teşhis Kütüphanesi/sqlserver-4064-cannot-open-user-default-database
SQL Server
SQL Server 2016–2022Bağlantı & Kullanıcı Yönetimi
7 dk okuma
Msg 4064, Level 11, State 1: Cannot open user default database. Login failed.

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ğı.

İnceleyen:Principal Database Reliability Architect
Test Edilen Sürümler: SQL Server 2022 CU15 & 2019 CU28 (Windows Server 2022 / Docker 29.7)

Operasyonel Doğrulama & Güvenilirlik Standardı

Son Teknik İnceleme: 30 Ekim 2026
Test Edilen SürümlerSQL Server 2022 CU15 & 2019 CU28 (Windows Server 2022, Docker 29.7)
Gerekli YetkiALTER ANY LOGIN veya sysadmin (login varsayılan veritabanını değiştirmek için); DAC (Dedicated Admin Connection) erişimi
Risk Seviyesi
LowVarsayılan veritabanı olarak tempdb kullanmak instance yeniden başladığında oturum hatalarını gizler
Beklenen ÇıktıALTER LOGIN app_user WITH DEFAULT_DATABASE = master ile girişin kurtarılması ve AUTO_CLOSE OFF yapılması
Geri Dönüş (Rollback) Planı:Varsayılan veritabanını geçici olarak master yapmak, hedef veritabanını ONLINE statüye çekmek ve AUTO_CLOSE kapatmak
Microsoft Docs: Troubleshoot Error 4064 Default Database
İlk 60 Saniye Teşhis Protokolü:

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

plaintext
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=app yazmış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:

bash
sqlcmd -S sunucu -A -E

2. Başka Bir Sysadmin Hesabıyla Bağlanın ve Login Durumunu Sorgulayın

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

sql
SELECT name, state_desc, user_access_desc, is_auto_close_on FROM sys.databases WHERE name = 'app';

Dört olası kök neden:

  1. 1Veritabanı silinmiş veya adı değiştirilmiştir: sys.databases listesinde hiç yoktur.
  2. 2Veritabanı erişilemez durumdadır: state_desc değeri OFFLINE, RESTORING, RECOVERY_PENDING veya SUSPECT durumundadır.
  3. 3Kullanıcı Eşleşmesi Kopmuştur (Orphaned User): Veritabanı ayaktadır ancak veritabanı içinde bu login'e bağlı bir USER kaydı silinmiştir.
  4. 4`AUTO_CLOSE` Tuzağı: is_auto_close_on = 1 ise 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:

sql
ALTER LOGIN app_kullanici WITH DEFAULT_DATABASE = master;
İPUCU
Geçici varsayılan olarak her zaman `master` veritabanını kullanın. Asla 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:

sql
ALTER DATABASE app SET ONLINE;

3. AUTO_CLOSE Özelliğini Kapatın

Kurumsal SQL Server ortamlarında AUTO_CLOSE kesinlikle kapalı olmalıdır:

sql
ALTER DATABASE app SET AUTO_CLOSE OFF;

4. Kullanıcı-Login Eşleşmesini Onarın

sql
USE app; ALTER USER app_kullanici WITH LOGIN = app_kullanici;

▸İlgili Hata Rehberleri & Hub Bağlantıları

Diğer Veritabanı Hata Teşhisleri

Kriz anında başvurabileceğiniz diğer doğrulanmış hata rehberleri.

Tüm Hatalar (50)