Obnovení SQL selhává s chybou "Databáze je již otevřená a může mít vždy pouze jednoho uživatele"
Summary: Článek znalostní báze (KB), který poskytuje řešení selhání obnovení databáze SQL, když uživatelé přistupují k databázi.
Symptoms
Obnovení databáze SQL do původního umístění selhává s chybami podobnými následujícímu zobrazení:
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
Jeden nebo více uživatelů nebo připojení přistupuje k databázi, do které se obnovuje. Původní databázi nelze přepsat, pokud k databázi přistupují uživatelé nebo připojení.
Resolution
Změňte stav databáze z režimu pro více uživatelů na režim pro jednoho uživatele.
Použití nástroje SQL Server Management Studio
Nastavení databáze do režimu pro jednoho uživatele:
-
V Průzkumník objektů se připojte k instanci SQL Server databázového stroje a pak tuto instanci rozbalte.
-
Klepněte pravým tlačítkem myši na databázi, kterou chcete změnit, a potom klepněte na příkaz Vlastnosti.
-
V dialogovém okně Vlastnosti databáze klikněte na stránku Možnosti.
-
V možnosti Omezit přístup vyberte Jeden.
-
Pokud jsou k databázi připojeni další uživatelé, zobrazí se zpráva Otevřená připojení. Chcete-li změnit vlastnost a zavřít všechna ostatní připojení, klepněte na tlačítko Ano.
Použití jazyka Transact-SQL
Nastavení databáze do režimu pro jednoho uživatele:
-
Připojte se k databázovému stroji.
-
Na panelu Standard (Standard) klikněte na New Query (Nový dotaz).
-
Zkopírujte a vložte následující příklad do okna dotazu a klikněte na tlačítko "Execute". Tento příklad nastaví databázi na
SINGLE_USERrežim pro získání výhradního přístupu. Příklad poté nastaví stav databáze Avamar1 naREAD_ONLYa vrátí přístup k databázi všem uživatelům. Možnost ukončeníWITH ROLLBACK IMMEDIATEje specifikován v prvnímALTER DATABASEvýrok. To způsobí, že všechny nedokončené transakce budou vráceny zpět a všechna ostatní připojení k databázi Avamar1 budou okamžitě odpojena.
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
Odkazy:
https://docs.microsoft.com/en-us/sql/relational-databases/databases/set-a-database-to-single-user-mode?view=sql-server-2017Až to uděláte, zkuste znovu obnovit databázi SQL do původního umístění.