SQL服务器恢复机制

时间:2011-06-02 04:05:06

标签: c# sql service

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

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

我尝试停止MSSQLSERVER服务,即使MSSQLSERVER服务停止,sqlconnection.State也始终打开。

4 个答案:

答案 0 :(得分:1)

第一:解决你的真正问题。 SQL Server应该非常非常稳定。

第二:考虑在客户端应用程序和服务器上使用MSMQ(或SQL Service Broker)来排队更新。

答案 1 :(得分:1)

从根本上调用SQL命令之前检查连接状态的一般策略是行不通的。如果服务在连接检查后崩溃,但在调用SQL命令之前会发生什么?

您可能需要弄清楚当数据库关闭时抛出什么异常,并在适当的代码层从该异常中恢复。

答案 2 :(得分:0)

我认为你选择的方法不是很好。

如果您的应用程序是某种预定作业,请让它崩溃。没有数据库 - 无法完成任何工作。在这种情况下崩溃是可以的。下次运行并且db启动它会完成它的工作。您也可以实施重试。

如果您的应用程序是内部的Windows服务和某种计划的计时器,您只需通过处理SqlExcpetion确保您的服务不会崩溃。再次重试,直到服务器启动。

此外,您可能希望使用分布式事务。为了保证复制过程的完整性,但是否需要,取决于要求。

[编辑] 回复重试问题。

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
    }
}

答案 3 :(得分:0)

手动它是一些硬修复损坏的SQL数据库,特别适合那些技术上不牢固的人。这些类型的人可以使用任何第三方应用程序。谷歌上有很多可用的。好的是,他们中的许多人提供免费试用版,在免费版中你可以修复你的数据库,并可以看到恢复的原始结果的预览。这是我从谷歌获得的应用程序。 http://www.softmagnat.com/sql-database-recovery.html