数据库未启动,但SQL Server已准备好连接时发生SqlException异常
本文关键字:连接 异常 SqlException 准备好 启动 Server SQL 数据库 | 更新日期: 2023-09-27 18:19:00
我正在处理SQL Server的"准备连接"状态和我的数据库启动时的时间之间的相当长的延迟。有时需要两分钟以上。这就是为什么我有时会在数据库上线之前尝试连接它的原因。您知道如何缩短从"准备连接"到启动数据库之间的时间吗?或者我如何确定数据库是否在线,以便从我的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。无法打开登录请求的数据库"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 - Error: 18456, Severity: 14, State: 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 manager has started.
2014-03-31 08:23:41.87 -启动数据库'XXX'.
基于此链接,最佳实践是查询排序属性的值。
刚刚上线的数据库不一定准备好接受连接。要确定数据库何时可以接受连接,请查询sys的collation_name列。数据库或DATABASEPROPERTYEX的Collation属性。
因此,当Collation属性不为空时,数据库已准备好进行连接。查询如下所示
SELECT DATABASEPROPERTYEX('MyDatabase', 'Collation')