![数据库服务器上的计算机重新启动后,IIS 7.5 无法打开数据库](https://linux22.com/image/510228/%E6%95%B0%E6%8D%AE%E5%BA%93%E6%9C%8D%E5%8A%A1%E5%99%A8%E4%B8%8A%E7%9A%84%E8%AE%A1%E7%AE%97%E6%9C%BA%E9%87%8D%E6%96%B0%E5%90%AF%E5%8A%A8%E5%90%8E%EF%BC%8CIIS%207.5%20%E6%97%A0%E6%B3%95%E6%89%93%E5%BC%80%E6%95%B0%E6%8D%AE%E5%BA%93.png)
我决定也在这里发布这个问题,以防我们遇到的问题与 SQL 服务器有关。
有一个问题困扰了我一段时间。我有一个使用 NHibernate 来建模数据库的 asp.net mvc。基础架构如下:所有虚拟机均使用 Windows 2008 R2。IIS 7.5 在一台虚拟机上运行。Sql Server 2008 在另一台虚拟机上运行。我们有几个数据库,两个用于存储应用程序数据,一个用于注册所有未处理的异常。
有时,托管数据库服务器的虚拟机会重新启动(在半夜,不太清楚原因),之后与存储应用程序数据的数据库的连接将无法正常工作,结果在第三个数据库中注册了数千个未处理的异常。值得一提的是,数据库可以从 Management Studio 访问。通过重置 IIS 可以解决问题。连接通过 NHibernateUtil 类处理,该类在每次请求时打开和关闭会话。
答案1
在我看来,这似乎是编码错误。基本上 - 是的,应用程序在 SQL Server 重新启动时不可用。确实会发生这种情况(如果您修复了这个问题,请查看运行镜像的第二台服务器)。
但是,如果 Web 应用程序永久不可用,则数据库连接的处理存在问题。例如,应用程序“保留”不可用的数据库连接,而不是放弃它们并打开新的连接。违反最佳实践(仅在需要时才打开数据库连接)。
SQL Server 重启的原因可能是修补,顺便说一下,请检查自动更新设置。