Restore SQL non riuscito con il messaggio "Il database è già aperto e può avere un solo utente alla volta"
Summary: Articolo della Knowledge Base (KB) che fornisce una soluzione agli errori di restore del database SQL quando gli utenti accedono al database.
Symptoms
Il ripristino del database SQL nella posizione originale non riesce con errori simili al seguente display:
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
Uno o più utenti o connessioni accedono al database in cui viene eseguito il ripristino. Il database originale non può essere sovrascritto se vi sono utenti o connessioni che accedono al database.
Resolution
Modificare lo stato del database dalla modalità multiutente alla modalità utente singolo.
Utilizzo di SQL Server Management Studio
Per impostare un database in modalità utente singolo:
-
In Esplora oggetti, connettersi a un'istanza del Motore di database di SQL Server, quindi espandere tale istanza.
-
Fare clic con il pulsante destro del mouse sul database da modificare, quindi scegliere Proprietà.
-
Nella finestra di dialogo Database Properties, cliccare sulla pagina Options.
-
Dall'opzione Restrict Access selezionare Single.
-
Se altri utenti sono connessi al database, viene visualizzato il messaggio Open Connections. Per modificare la proprietà e chiudere tutte le altre connessioni, cliccare su Yes.
Utilizzo di Transact-SQL
Per impostare un database in modalità utente singolo:
-
Connettersi al Motore di database.
-
Dalla barra Standard, cliccare su New Query.
-
Copiare e incollare l'esempio seguente nella finestra della query e cliccare sul pulsante "Execute". In questo esempio il database viene impostato su
SINGLE_USERper ottenere l'accesso esclusivo. Nell'esempio viene quindi impostato lo stato del database Avamar1 suREAD_ONLYe restituisce l'accesso al database a tutti gli utenti. L'opzione di terminazioneWITH ROLLBACK IMMEDIATEè specificato nel primoALTER DATABASEaffermazione. Ciò comporta il rollback di tutte le transazioni incomplete e la disconnessione immediata di tutte le altre connessioni al database 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
Riferimento:
https://docs.microsoft.com/en-us/sql/relational-databases/databases/set-a-database-to-single-user-mode?view=sql-server-2017Al termine, riprovare a eseguire il ripristino del database SQL nella posizione originale.