SQL-gjenoppretting mislykkes med «Databasen er allerede åpen og kan bare ha én bruker om gangen»
Summary: Kunnskapsbaseartikkel (KB) som gir en løsning på feil ved gjenoppretting av SQL-database når brukere åpner databasen.
Symptoms
Gjenoppretting av SQL-database til den opprinnelige plasseringen mislykkes med feil som ligner på følgende skjerm:
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
Én eller flere brukere eller tilkoblinger har tilgang til databasen som gjenopprettes. Den opprinnelige databasen kan ikke overskrives hvis det er brukere eller tilkoblinger som har tilgang til databasen.
Resolution
Endre statusen for databasen fra flerbruker- til enkeltbrukermodus.
Bruke SQL Server Management Studio
Slik setter du en database til enbrukermodus:
-
I Object Explorer kobler du til en forekomst av SQL Server-databasemotoren, og deretter utvider du denne forekomsten.
-
Høyreklikk databasen du vil endre, og klikk deretter Egenskaper.
-
I dialogboksen Databaseegenskaper klikker du Alternativer-siden.
-
Fra alternativet Begrens tilgang velger du Singel.
-
Hvis andre brukere er koblet til databasen, vises meldingen Åpne tilkoblinger. Hvis du vil endre egenskapen og lukke alle andre tilkoblinger, klikker du Ja.
Bruke Transact-SQL
Slik setter du en database til enbrukermodus:
-
Koble til databasemotoren.
-
Fra standardlinjen klikker du Ny spørring.
-
Kopier og lim inn følgende eksempel i spørringsvinduet, og klikk på "Utfør"-knappen. Dette eksemplet angir databasen til
SINGLE_USER-modus for å få eksklusiv tilgang. Eksemplet angir deretter tilstanden til Avamar1-databasen tilREAD_ONLYog returnerer tilgang til databasen til alle brukere. Alternativet for oppsigelseWITH ROLLBACK IMMEDIATEer spesifisert i den førsteALTER DATABASEuttalelse. Dette fører til at alle ufullstendige transaksjoner rulles tilbake, og at alle andre tilkoblinger til Avamar1-databasen umiddelbart kobles fra.
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
Referanse:
https://docs.microsoft.com/en-us/sql/relational-databases/databases/set-a-database-to-single-user-mode?view=sql-server-2017Når dette er gjort, kan du prøve å gjenopprette SQL-databasen til den opprinnelige plasseringen.