簡體   English   中英

數據庫未啟動但 SQL Server 已准備好連接時的 SqlException

[英]SqlException when the database is not started but SQL Server is ready for connections

我正在處理 SQL Server 的“准備連接”狀態和我的數據庫啟動時間之間的相當長的延遲。 有時需要超過 2 分鍾。 這就是為什么我有時會在數據庫在線之前嘗試連接到數據庫的原因。 您知道如何縮短“准備連接”和啟動數據庫之間的時間嗎? 或者我如何確定數據庫在線以從我的 C# 應用程序連接到它?

基本上我有一些連接字符串的“緩存”連接。 這當然發生在第一次連接上,所以我的連接代碼非常簡單:

var result = new SqlConnection();

result.ConnectionString = "some connection string here";

try
{
   result.Open()
}
catch (Exception ex)
{
   //some logging stuff here
   throw;
}

這是 C# 異常:

System.Data.SqlClient.SqlException:無法打開登錄請求的數據庫“XXX”。 登錄失敗。

這是 SQL Server 日志:

2014-03-31 08:21:05.65 - SQL Server 現在已准備好進行客戶端連接。 這是一條情報信息; 無需用戶操作。

2014-03-31 08:21:09.21 - 數據庫模型(數據庫 ID 3)在 1 秒內恢復完成(分析 234 毫秒,重做 0 毫秒,撤消 514 毫秒。)這只是一條信息性消息。 無需用戶操作。

2014-03-31 08:21:11.52 - 錯誤:18456,嚴重性:14,狀態:38。

2014-03-31 08:21:11.52 - 用戶“YYY”登錄失敗。 原因:無法打開明確指定的數據庫。 [客戶: ]

2014-03-31 08:21:13.88 - 清除 tempdb 數據庫。

2014-03-31 08:21:21.38 - 數據庫 msdb(數據庫 ID 4)的恢復在 2 秒內完成(分析 327 毫秒,重做 0 毫秒,撤消 468 毫秒。)這只是一條信息性消息。 無需用戶操作。

2014-03-31 08:21:32.98 - 啟動數據庫“tempdb”。

2014-03-31 08:21:40.30 - Service Broker 協議傳輸被禁用或未配置。

2014-03-31 08:21:40.41 - 數據庫鏡像協議傳輸被禁用或未配置。

2014-03-31 08:21:41.50 - 恢復完成。 這只是一條信息性消息。 無需用戶操作。

2014-03-31 08:21:41.52 - Service Broker 管理器已啟動。

2014-03-31 08:23:41.87 - 啟動數據庫“XXX”。

基於此鏈接,最佳實踐是查詢 Collat​​ion 屬性的值。

剛剛上線的數據庫不一定准備好接受連接。 要確定數據庫何時可以接受連接,請查詢 sys.databases 的 collat​​ion_name 列或 DATABASEPROPERTYEX 的 Collat​​ion 屬性。

因此,當 Collat​​ion 屬性不為 null 時,數據庫已准備好進行連接。 查詢看起來像這樣

SELECT DATABASEPROPERTYEX('MyDatabase', 'Collation')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM