SQL-gendannelse mislykkes med "Databasen er allerede åben og kan kun have én bruger ad gangen"
Summary: Knowledge Base-artikel (KB), der indeholder en løsning på fejl ved gendannelse af SQL-database, når brugere får adgang til databasen.
Symptoms
SQL-databasegendannelse til den oprindelige placering mislykkes med fejl, der ligner følgende visning:
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
En eller flere brugere eller forbindelser har adgang til den database, der gendannes til. Den oprindelige database kan ikke overskrives, hvis der er brugere eller forbindelser, der har adgang til databasen.
Resolution
Skift status for databasen fra flerbrugertilstand til enkeltbrugertilstand.
Brug af SQL Server Management Studio
Du indstiller en database til enkeltbrugertilstand på følgende måde:
-
Opret forbindelse til en forekomst af SQL Server-databaseprogrammet i Object Explorer, og udvid derefter forekomsten.
-
Højreklik på den database, der skal ændres, og klik derefter på Egenskaber.
-
Klik på siden Indstillinger i dialogboksen Databaseegenskaber.
-
Fra indstillingen Begræns adgang skal du vælge Enkelt.
-
Hvis andre brugere har forbindelse til databasen, vises meddelelsen Åbn forbindelser. Hvis du vil ændre egenskaben og lukke alle andre forbindelser, skal du klikke på Ja.
Brug af Transact-SQL
Du indstiller en database til enkeltbrugertilstand på følgende måde:
-
Opret forbindelse til databaseprogrammet.
-
På linjen Standard skal du klikke på Ny forespørgsel.
-
Kopier og indsæt følgende eksempel i forespørgselsvinduet, og klik på knappen "Udfør". I dette eksempel indstilles databasen til
SINGLE_USERfor at opnå eksklusiv adgang. Eksemplet indstiller derefter tilstanden for Avamar1-databasen tilREAD_ONLYog returnerer adgang til databasen til alle brugere. OpsigelsesmulighedenWITH ROLLBACK IMMEDIATEer angivet i den førsteALTER DATABASEerklæring. Dette medfører, at alle ufuldstændige transaktioner rulles tilbage, og at alle andre forbindelser til Avamar1-databasen straks afbrydes.
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
Reference:
https://docs.microsoft.com/en-us/sql/relational-databases/databases/set-a-database-to-single-user-mode?view=sql-server-2017Når det er gjort, skal du prøve at gendanne SQL-databasen til den oprindelige placering igen.