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

lac*_*dev 9 sql-server smo

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

    private void KillAllProcessesOnSMARTDatabases(Server targetServer)
    {
        targetServer.KillAllProcesses(SMART_DB);
        targetServer.KillAllProcesses(SMART_HISTORY_DB);
        targetServer.KillAllProcesses(SMART_METADATA_DB);
        SqlConnection.ClearAllPools();
    }
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

Joh*_*som 10

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

如果要执行数据库还原,则应将有问题的数据库设置为single_user模式或RESTRICTED_USER模式,后者最适合.

请查看以下将数据库切换到RESTRICTED_USER模式的示例,以及如何关闭进程中的任何打开的用户连接.

如何:将数据库设置为单用户模式