我有一些 Selenium 测试脚本,用于测试 Classic ASP Web 应用程序,但在每次运行测试之前使用备份文件恢复数据库 (SQL Server 2005) 后遇到问题。成功恢复后 (从运行 sqlcmd ... 的 Python 脚本),当 ASP 尝试连接到数据库时,立即出现以下错误...
[Microsoft][ODBC SQL Server Driver][DBNETLIB]ConnectionWrite (send()).,,,Microsoft OLE DB Provider for ODBC
这是由 ADODB 使用此连接字符串生成的...
"DSN=mydbdsn;UID=myuser;PWD=mypass;"
但是尝试通过 ODBC 从 C++ ActiveX 对象连接也会失败并出现相同的错误。
重新启动 IIS 即可恢复正常。SQL Server 2008 也出现同样的问题。
有人知道为什么我在恢复后无法连接到数据库吗?
谢谢,
答案1
来自RESTORE
规格:
在离线恢复期间,如果指定的数据库正在使用中,RESTORE 会在短暂延迟后强制用户关闭。
因此请确保你打开新的恢复后的连接。连接池中的现有连接均被 RESTORE 破坏,如文档中明确所述。每次测试前清除连接池。
答案2
恢复后重新启动 Classic ASP 应用程序。这将清除恢复前的现有连接。
或者,您可以在还原之前将数据库设置为单用户模式(这应该会驱逐任何现有连接),然后在继续测试之前执行还原。
设置单用户模式的SQL脚本是:
ALTER DATABASE <DB_NAME_HERE> SET SINGLE_USER WITH ROLLBACK IMMEDIATE