执行KillAllProcesses时,删除Server的所有活动数据库连接失败

时间:2009-09-17 14:18:11

标签: sql-server smo

我需要从我的应用程序执行数据库还原。在此之前,我想杀死所有进程,如下所示:

    private void KillAllProcessesOnSMARTDatabases(Server targetServer)
    {
        targetServer.KillAllProcesses(SMART_DB);
        targetServer.KillAllProcesses(SMART_HISTORY_DB);
        targetServer.KillAllProcesses(SMART_METADATA_DB);
        SqlConnection.ClearAllPools();
    }

但是,当第一个KillAllProcesses运行时,我得到以下异常:

  

Microsoft.SqlServer.Management.Smo.FailedOperationException:删除Server'MYServer'的所有活动数据库连接失败。 ---> Microsoft.SqlServer.Management.Common.ExecutionFailureException:执行Transact-SQL语句或批处理时发生异常。 ---> System.Data.SqlClient.SqlException:只能杀死用户进程。

用于创建服务器的连接字符串具有sa凭据,但是,需要终止的进程是在其他用户下启动的。我测试了类似的场景,测试成功了。

这种情况最近才开始发生。对我来说,似乎有一些进程没有被用户启动?

2 个答案:

答案 0 :(得分:10)

您的代码似乎正在尝试终止所有SQL Server进程,这不是一个好主意。

如果要执行数据库还原,应将相关数据库设置为single_user模式或RESTRICTED_USER模式,后者最适合。

查看将数据库切换到RESTRICTED_USER模式的following example以及如何在此过程中关闭任何打开的用户连接。

How to: Set a Database to Single-User mode

答案 1 :(得分:-1)

您可以使用SMO“杀死”特定数据库。 这将强制只删除所有客户端连接到该数据库,然后删除数据库本身

Microsoft.SqlServer.Management.Smo.Server oServer = this.GetSmoServer();
oServer.KillDatabase(this.DatabaseName);