Avamar : Échec de la restauration SQL avec l’erreur « La base de données est déjà ouverte et ne peut avoir qu’un utilisateur à la fois »
Summary: Article de la base de connaissances (KB) qui fournit une solution aux échecs de restauration de base de données SQL lorsque des utilisateurs accèdent à la base de données.
Symptoms
La restauration de la base de données SQL à l’emplacement d’origine échoue avec des erreurs similaires à l’affichage suivant :
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
Un ou plusieurs utilisateurs ou connexions accèdent à la base de données qui est restaurée vers. La base de données d’origine ne peut pas être remplacée si des utilisateurs ou des connexions accèdent à la base de données.
Resolution
Modifiez l’état de la base de données du mode multiutilisateur au mode utilisateur unique.
Utilisation de SQL Server Management Studio
Pour définir une base de données en mode utilisateur unique :
-
Dans Object Explorer, connectez-vous à une instance du moteur de base de données SQL Server, puis développez cette instance.
-
Cliquez avec le bouton droit de la souris sur la base de données à modifier, puis cliquez sur Properties.
-
Dans la boîte de dialogue Propriétés de la base de données, cliquez sur la page Options.
-
Dans l’option Restrict Access, sélectionnez Single.
-
Si d’autres utilisateurs sont connectés à la base de données, un message Open Connections s’affiche. Pour modifier la propriété et fermer toutes les autres connexions, cliquez sur Yes.
Utilisation de Transact-SQL
Pour définir une base de données en mode utilisateur unique :
-
Connectez-vous au moteur de base de données.
-
Dans la barre Standard, cliquez sur New Query.
-
Copiez et collez l’exemple suivant dans la fenêtre de requête et cliquez sur le bouton « Execute ». Cet exemple définit la base de données sur
SINGLE_USERpour obtenir un accès exclusif. L’exemple définit ensuite l’état de la base de données Avamar1 surREAD_ONLYet rend l’accès à la base de données à tous les utilisateurs. L’option de résiliationWITH ROLLBACK IMMEDIATEest spécifié dans le premierALTER DATABASEDéclaration. Cela entraîne l’annulation de toutes les transactions incomplètes et la déconnexion immédiate de toutes les autres connexions à la base de données 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éférences :
https://docs.microsoft.com/en-us/sql/relational-databases/databases/set-a-database-to-single-user-mode?view=sql-server-2017Une fois cette opération effectuée, relancez la restauration de la base de données SQL à l’emplacement d’origine.