我有一个网站,它接受用户输入,对其进行处理,然后将记录添加到 sql 表中。
这个周末我遇到了一个问题,SQL 服务器运行起来,给用户留下了很长的处理时间,最后有一个超时响应。最重要的是,处理过的数据丢失了。
最终,我想知道是否有可能以某种方式将这些处理过的数据保存在某个地方,直到 SQL 再次工作,然后添加记录?
我想这可能是通过网络服务来完成的?或者可以在asp.net代码后面完成吗?
不久前,当我们有一个传真服务器负责处理传入的传真并将它们存储在数据库中时,我们处理过这种情况,但是数据库不太可靠。
在这种情况下,如果我们无法访问 SQL Server,我们会将数据序列化到磁盘上的队列中,并在应用程序中设置一个标志,指示 SQL Server 处于脱机状态。设置此标志时,任何后续提交都将存储在磁盘队列中。
然后,我们会定期检查 SQL Server 以查看它是否已备份,如果已备份,我们将处理队列中的每个文件,然后关闭脱机标志。
在 ASP.Net 中,一旦 SQL Server 脱机,您可以启动一个线程来监视 SQL Server,并在它重新联机时执行此处理。
但是,在您描述的情况下,听起来好像有人启动了事务但没有完成它,或者正在发生维护操作(DBCC、备份)。
如果这种情况经常发生,您可能需要设置一个比预期的正常持续时间稍长的 CommandTimeout(比如双倍),如果操作没有在该时间范围内完成,要么告诉用户有问题,要么继续进入缓存模式。