SQL Server veritabanı sorguları kabul etmeye ne zaman hazırdır?


11

SQL Server hata günlüğü dosyasında aşağıdaki satırları buldum:

2018-02-22 14:10:58.95 spid17s     Starting up database 'msdb'.
2018-02-22 14:10:58.95 spid16s     Starting up database 'ReportServer'.
2018-02-22 14:10:58.95 spid18s     Starting up database 'ReportServerTempDB'.
2018-02-22 14:10:58.95 spid19s     Starting up database 'XYZ'.

Bu zamandan önce veritabanı XYZ durumunu kontrol edersem ONLINE, aşağıdaki ifadeyi kullanıyor:

SELECT state_desc FROM sys.databases WHERE name='XYZ'

... ama bir C # uygulaması kullanarak bu veritabanına bağlanmaya çalıştığımda, veritabanına bağlanamıyor.

Hata:

'Asd' kullanıcısı için oturum açılamadı.
Sebep: Açıkça belirtilen veritabanı açılamadı.

Üç farklı kullanıcı denedim (uygulama için tanımlanan Windows kullanıcısı, sa, SQL Server kullanıcısı). Uygulamayı işletim sisteminin başlangıcında çalıştırdığımda sorun oluşuyor, ancak başlattıktan sonra manuel olarak başlatırsam hata oluşmaz, bu yüzden tüm SQL Server ayarları ve güvenlik duvarı ayarlarının doğru olduğunu düşünüyorum.

Ayrıca bundan önce servis durumunun çalışıp çalışmadığını kontrol ettim.

Veritabanının gerçekten çevrimiçi ve sorgulara hazır olduğundan emin olmak için başka ne kontrol etmeliyim?

Bana bir süre (hatta açık bir neden dayalı değil) gecikme yerine, veritabanını sorgulamak için ok olduğunu söyleyen bir anahtar arıyorum.

Ben "XYZ 'veritabanı başlatılıyor" metni için hata günlüğü tarama düşündüm, ama bu SQL Server hata günlüğü yolu için uygulama için bir ayar eklemek zorunda anlamına gelir. Bu ifadeyi bulana kadar dosyayı defalarca okumak anlamına da gelir.

Yanıtlar:


23

SQL Server veritabanı sorguları en kısa sürede kabul etmeye hazırdır:

SELECT DATABASEPROPERTYEX(N'database name', 'Collation')

geri dönmez NULL.

DATABASEPROPERTYEX(Transact-sql) belgelerinden :

Not: ONLINEDurum, veritabanı açılırken ve henüz kurtarılmamışken döndürülebilir. Bir veritabanının ne zaman bağlantı kabul edebileceğini belirlemek için DATABASEPROPERTYEX,. Veritabanı harmanlaması boş olmayan bir değer döndürdüğünde veritabanı bağlantıları kabul edebilir. Always On veritabanları için, database_stateveya database_state_descsütunlarını sorgulayın sys.dm_hadr_database_replica_states.


3

SQL Server veritabanları başlatılır, ancak daha sonra işlemleri ileri ve geri almak için işlem günlüğünü analiz etmeleri gerekir. Bu işlem, uzun süren bir işlem, birçok (binlerce) kullanıcı veritabanı veya çok sayıda (on binlerce) sanal günlük dosyası içeren veritabanları durumunda milisaniyeden saatlere (hatta günler!) Kadar sürebilir.

Uygulamanın yalnızca kurtarma işlemi tamamlandığında ve veritabanı hazır olduğunda içeri girmesini istiyorsanız, uygulamanın bağlantısını yeniden denemesini sağlayın .

Uygulamanın hemen SQL Server'a girmesini istiyorsanız, ancak henüz herhangi bir sorgu çalıştıramayabilirseniz, varsayılan veritabanını kullanıcı veritabanı yerine TempDB olarak ayarlayın. Kullanıcı veritabanları kullanılamıyor olsa bile hemen çevrimiçi olacaktır.

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.