【发布时间】:2014-10-16 01:33:59
【问题描述】:
我正在处理 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”。
【问题讨论】:
-
显示用于连接数据库的代码!!
-
检查自动关闭属性:
SELECT Name, is_auto_close_on FROM master.sys.databases -
自动关闭和镜像功能都被禁用。
标签: c# sql .net sql-server exception