SQL服务器恢复机制
本文关键字:机制 恢复 服务器 SQL | 更新日期: 2023-09-27 17:58:17
我在C#中有一个服务应用程序,它从一个数据库中查询数据并将其插入另一个SQL数据库。
有时,MSSQLSERVER服务由于未知原因崩溃,我的应用程序也会崩溃。我想做一个SQL恢复机制,在写入数据库之前,我会检查以确保sqlconnection状态良好,但我是如何做到的?
我尝试停止MSSQLSERVER服务和sqlconnection。即使MSSQLSERVER服务已停止,状态也始终处于打开状态。
首先:解决您的实际问题。SQL Server应该非常稳定。
第二:考虑在客户端应用程序和服务器上使用MSMQ(或SQL Service Broker)对更新进行排队。
在调用SQL命令之前检查连接状态的常规策略根本不起作用。如果在连接检查之后,但在调用SQL命令之前服务崩溃,会发生什么情况?
您可能需要弄清楚数据库关闭时抛出的异常,并在适当的代码层从该异常中恢复。
我认为您选择的方法不是很好。
如果你的应用程序是某种预定的作业,那就让它崩溃吧。没有数据库-无法完成任何工作。在这种情况下崩溃是可以的。下次它运行并且数据库启动时,它会做它自己的事情。您还可以实现重试。
如果你的应用程序是一个内部的windows服务和某种定时定时器,你只需要通过处理SqlExcpetion来确保你的服务不会崩溃。请重试,直到服务器启动。
此外,您可能希望使用分布式事务。要保证复制过程的完整性,但是否需要取决于要求。
[Edit]回答重试问题。
var attemptNumber = 0;
while (true)
{
try
{
using (var connection = new SqlConnection())
{
connection.Open();
// do the job
}
break;
}
catch (SqlException exception)
{
// log exception
attemptNumber++;
if (attemptNumber > 3)
throw; // let it crash
}
}