Sql-Server
SQL Server 數據庫何時準備好接受查詢?
在 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
當數據庫正在打開且尚未恢復時,可能會返回狀態。要確定數據庫何時可以接受連接,請查詢 的 Collation 屬性DATABASEPROPERTYEX
。當數據庫排序規則返回非空值時,數據庫可以接受連接。對於 Always On 數據庫,查詢 的database_state
或database_state_desc
列sys.dm_hadr_database_replica_states
。