SQL-Wiederherstellung schlägt fehl mit "Datenbank ist bereits geöffnet und kann nur einen Nutzer gleichzeitig haben"
Summary: Wissensdatenbank-Artikel (KB), der eine Lösung für Fehler bei der SQL-Datenbankwiederherstellung bietet, wenn Nutzer auf die Datenbank zugreifen.
Symptoms
Die SQL-Datenbankwiederherstellung am ursprünglichen Speicherort schlägt mit Fehlern ähnlich der folgenden Anzeige fehl:
avsql Error <40258>: sqlconnectimpl_smo::get_database_data_names Microsoft.SqlServer.Management.Common.ExecutionFailureException: An exception occurred while executing a Transact-SQL statement or batch. ---> System.Data.SqlClient.SqlException: Database 'Avamar1' is already open and can only have one user at a time.
Cause
Ein oder mehrere Nutzer oder Verbindungen greifen auf die Datenbank zu, in der wiederhergestellt wird. Die ursprüngliche Datenbank kann nicht überschrieben werden, wenn Nutzer oder Verbindungen auf die Datenbank zugreifen.
Resolution
Ändern Sie den Status der Datenbank von Multi-User in Single-User Mode.
Verwenden von SQL Server Management Studio
So legen Sie eine Datenbank in den Einzelnutzermodus fest:
-
Stellen Sie im Objekt-Explorer eine Verbindung mit einer Instanz von SQL Server-Datenbankmodul her, und erweitern Sie diese Instanz.
-
Klicken Sie mit der rechten Maustaste auf die zu ändernde Datenbank und klicken Sie dann auf Eigenschaften.
-
Klicken Sie im Dialogfeld Datenbankeigenschaften auf die Seite Optionen.
-
Wählen Sie in der Option Zugriff einschränkendie Option Einzeln aus.
-
Wenn andere Nutzer mit der Datenbank verbunden sind, wird die Meldung Open Connections angezeigt. Um die Eigenschaft zu ändern und alle anderen Verbindungen zu schließen, klicken Sie auf Ja.
Verwenden von Transact-SQL
So legen Sie eine Datenbank in den Einzelnutzermodus fest:
-
Stellen Sie eine Verbindung mit der Datenbank-Engine her.
-
Klicken Sie in der Leiste Standard auf New Query.
-
Kopieren Sie das folgende Beispiel, fügen Sie es in das Abfragefenster ein und klicken Sie auf die Schaltfläche "Ausführen". In diesem Beispiel wird die Datenbank auf Folgendes festgelegt:
SINGLE_USERModus, um exklusiven Zugriff zu erhalten. Im Beispiel wird dann der Status der Avamar1-Datenbank wie folgt festgelegt:READ_ONLYund gibt den Zugriff auf die Datenbank an alle Benutzer zurück. Die KündigungsmöglichkeitWITH ROLLBACK IMMEDIATEwird in der erstenALTER DATABASEAussage. Dies führt dazu, dass für alle unvollständigen Transaktionen ein Rollback ausgeführt wird und alle anderen Verbindungen zur Avamar1-Datenbank sofort getrennt werden.
SQLCopy
USE master; GO ALTER DATABASE Avamar1 SET SINGLE_USER WITH ROLLBACK IMMEDIATE; GO ALTER DATABASE Avamar1 SET READ_ONLY; GO ALTER DATABASE Avamar1 SET MULTI_USER; GO
Referenz:
https://docs.microsoft.com/en-us/sql/relational-databases/databases/set-a-database-to-single-user-mode?view=sql-server-2017Sobald dies abgeschlossen ist, wiederholen Sie die Wiederherstellung der SQL-Datenbank am ursprünglichen Speicherort.