Ich muss eine Datenbankwiederherstellung aus meiner Anwendung heraus durchführen. Bevor ich dies tue, möchte ich alle Prozesse wie folgt beenden:
private void KillAllProcessesOnSMARTDatabases(Server targetServer)
{
targetServer.KillAllProcesses(SMART_DB);
targetServer.KillAllProcesses(SMART_HISTORY_DB);
targetServer.KillAllProcesses(SMART_METADATA_DB);
SqlConnection.ClearAllPools();
}
Wenn jedoch der erste KillAllProcesses ausgeführt wird, erhalte ich die folgende Ausnahme:
Microsoft.SqlServer.Management.Smo.FailedOperationException: Drop all active database connections failed for Server 'MYServer'. ---> Microsoft.SqlServer.Management.Common.ExecutionFailureException: Bei der Ausführung einer Transact-SQL-Anweisung oder eines Stapels ist eine Ausnahme aufgetreten. ---> System.Data.SqlClient.SqlException: Nur Benutzerprozesse können beendet werden.
Die Verbindungszeichenfolge, die zur Erstellung des Servers verwendet wird, hat die Anmeldeinformationen von sa, aber die Prozesse, die beendet werden müssen, werden unter einem anderen Benutzer gestartet. Ich habe ein ähnliches Szenario getestet und der Test war erfolgreich.
Dies ist erst seit kurzem der Fall. Für mich sieht es so aus, als ob einige Prozesse laufen, die nicht vom Benutzer gestartet werden?