SQL服务器恢复机制

本文关键字:机制 恢复 服务器 SQL | 更新日期: 2023-09-27 17:58:17

我在C#中有一个服务应用程序,它从一个数据库中查询数据并将其插入另一个SQL数据库。

有时,MSSQLSERVER服务由于未知原因崩溃,我的应用程序也会崩溃。我想做一个SQL恢复机制,在写入数据库之前,我会检查以确保sqlconnection状态良好,但我是如何做到的?

我尝试停止MSSQLSERVER服务和sqlconnection。即使MSSQLSERVER服务已停止,状态也始终处于打开状态。

SQL服务器恢复机制

首先:解决您的实际问题。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
    }
}