我的 Windows 2008 R2 服务器上有一个非常烦人的问题。每次重新启动时(无论是计划内还是计划外),一个特定站点都无法连接到数据库服务器(同一台计算机上的 MSSQL Server 2008 R2 Express 实例)。它将给出以下错误:
无法打开登录请求的数据库“SiteDb”。登录失败。
用户“SiteDbUser”登录失败。
此错误将持续存在,直到我手动回收此特定网站的应用程序池 - 简单的网站重启似乎无法解决问题。一旦我回收应用程序池,网站就会正常连接,并将继续保持这种状态,直到下次重启。现在,奇怪的是,我在这个网络服务器上运行着其他网站,它们似乎没有受到这个问题的影响 - 重启后它们会正常连接。我所有的网站都有不同的 MSSQL 用户,但我将正常工作的网站与不正常工作的网站进行了比较,似乎找不到任何区别。我也尝试为有问题的网站创建一个新用户,但这似乎没有什么区别。我尝试在连接字符串中同时指定实例名称和“127.0.0.1”,两者都适用于其他网站,但对有问题的网站都没有影响。
我也尝试了其他一些方法,但由于我必须重新启动服务器才能进行测试(或至少看起来如此?),所以测试这个有点“昂贵”,因为服务器运行的网站每天有大量访问者,这对我的业务很重要。
你们中有人经历过类似的事情吗? 我会很感激任何想法 :)
答案1
重启时,IIS 可能先于 SQL Server 数据库可用(即它处于恢复状态且不可用)。您有很多数据库吗?这可能意味着启动时间更长。
我猜测这是因为“无法打开登录请求的数据库“SiteDb””,这意味着登录成功但无法连接到指定的数据库。
思路:
- 您能将 IIS 服务改为延迟启动吗?
- 设置启动任务,等待 30 秒然后发出
iisreset
- 在网页代码中添加重试逻辑?