Sql-Server

SQL Server 數據庫何時準備好接受查詢?

  • February 28, 2018

在 SQL Server 錯誤日誌文件中,我發現了以下幾行:

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

如果我在此之前檢查數據庫 XYZ 的狀態,它ONLINE使用以下語句:

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

…但是當我嘗試使用 C# 應用程序連接到這個數據庫時,它無法連接到數據庫。

錯誤是:

使用者“asd”登錄失敗。

原因:無法打開明確指定的數據庫。

我嘗試了三個不同的使用者(為應用程序定義的 Windows 使用者、sa、SQL Server 使用者)。當我在作業系統啟動時執行應用程序時會出現問題,但是如果我在啟動後手動啟動它,則不會發生錯誤,因此我認為所有 SQL Server 設置和防火牆設置都是正確的。

在此之前我還檢查了服務狀態是否正在執行。

我還應該檢查什麼以確保數據庫實際線上並準備好進行查詢?

我正在尋找一個告訴我可以查詢數據庫的密鑰,而不是延遲一段時間(即使不是基於明確的原因)。

我想掃描錯誤日誌以查找文本“正在啟動數據庫’XYZ’”,但這意味著我必須為應用程序添加 SQL Server 錯誤日誌路徑的設置。這也意味著多次閱讀文件,直到我找到這個片語。

SQL Server 數據庫已準備好接受查詢,只要:

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

不返回NULL

DATABASEPROPERTYEX(Transact-SQL)的文件中:

注意:ONLINE當數據庫正在打開且尚未恢復時,可能會返回狀態。要確定數據庫何時可以接受連接,請查詢 的 Collat​​ion 屬性DATABASEPROPERTYEX。當數據庫排序規則返回非空值時,數據庫可以接受連接。對於 Always On 數據庫,查詢 的database_statedatabase_state_descsys.dm_hadr_database_replica_states

引用自:https://dba.stackexchange.com/questions/198898