Niepowodzenie przywracania SQL z komunikatem "Baza danych jest już otwarta i może mieć tylko jednego użytkownika naraz"
Summary: Artykuł z bazy wiedzy (KB) zawierający rozwiązanie problemu z niepowodzeniem przywracania bazy danych SQL, gdy użytkownicy uzyskują dostęp do bazy danych.
Symptoms
Przywracanie bazy danych SQL do oryginalnej lokalizacji kończy się niepowodzeniem z powodu błędów podobnych do następującego widoku:
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
Co najmniej jeden użytkownik lub połączenie uzyskuje dostęp do bazy danych, do której trwa przywracanie. Oryginalna baza danych nie może zostać zastąpiona, jeśli istnieją użytkownicy lub połączenia uzyskujące dostęp do bazy danych.
Resolution
Zmień stan bazy danych z trybu wielu użytkowników na tryb pojedynczego użytkownika.
Korzystanie z programu SQL Server Management Studio
Aby ustawić bazę danych w trybie pojedynczego użytkownika:
-
W Eksploratorze obiektów połącz się z wystąpieniem aparatu bazy danych SQL Server, a następnie rozwiń to wystąpienie.
-
Kliknij prawym przyciskiem myszy bazę danych, którą chcesz zmienić, a następnie kliknij polecenie Właściwości.
-
W oknie dialogowym Właściwości bazy danych kliknij stronę Opcje.
-
Z opcji Ogranicz dostęp wybierz pozycję Pojedynczy.
-
Jeśli inni użytkownicy są połączeni z bazą danych, zostanie wyświetlony komunikat Otwórz połączenia. Aby zmienić właściwość i zamknąć wszystkie inne połączenia, kliknij przycisk Tak.
Korzystanie z języka Transact-SQL
Aby ustawić bazę danych w trybie pojedynczego użytkownika:
-
Nawiąż połączenie z aparatem bazy danych.
-
Na pasku Standardowy kliknij przycisk Nowe zapytanie.
-
Skopiuj i wklej poniższy przykład w oknie zapytania, a następnie kliknij przycisk "Execute". W tym przykładzie baza danych jest ustawiana na
SINGLE_USERw celu uzyskania wyłącznego dostępu. Następnie w przykładzie ustawiono stan bazy danych Avamar1 naREAD_ONLYi zwraca dostęp do bazy danych wszystkim użytkownikom. Opcja wypowiedzeniaWITH ROLLBACK IMMEDIATEjest określony w pierwszymALTER DATABASEwypowiedź. Spowoduje to wycofanie wszystkich niekompletnych transakcji i natychmiastowe rozłączenie wszelkich innych połączeń z bazą danych Avamar1.
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
Źródło:
https://docs.microsoft.com/en-us/sql/relational-databases/databases/set-a-database-to-single-user-mode?view=sql-server-2017Gdy to zrobisz, ponów próbę przywrócenia bazy danych SQL do oryginalnej lokalizacji.