我有一个需要连接到SQL Server数据库(SQL Server 2008 R2,Windows Server 2008 R2)的Windows服务。 这个服务依赖于SQL Server。 问题是当SQL Server服务启动时:
用户“数据库”login失败。 原因:无法打开明确指定的数据库。 [客户:]
2011-09-20 17:18:29.47login
错误:18456,严重性:14,状态:38。
在阅读互联网上的几篇文章后,我检查了自动closures属性db(false),检查了用户权限,但不能成为这个问题,因为我的服务在MSSQLSERVER服务启动几秒后工作正常。
在我的日志中有些奇怪的东西:
数据库数据库(数据库ID 8)在5秒内完成恢复(分析909毫秒,重做0毫秒,撤消809毫秒)。这仅为参考消息。 无需用户操作。
任何想法呢?
谢谢
也许服务帐户login的默认数据库是需要大量时间启动(因为它很大或有其他问题?)。 为了testing这个,你可以把这个login的默认数据库改成tempdb。
ALTER LOGIN [domain\user] WITH DEFAULT_DATABASE = tempdb;
您也可以考虑添加TRY/CATCHerror handling或waitfor逻辑到您的服务,所以它不会彻底失败,因为暂时无法连接(特别是在启动时)。
实际上它不会失败,exception处理正确,但下一个进程不会启动。
事实上,有人通过这个post给出了解决scheme:
最后我把一些逻辑来处理这个问题(检查db状态,直到它在线)
谢谢回复
尝试将您的服务设置为自动(DelayedStart)。