SQL-återställning misslyckas med "Databasen är redan öppen och kan bara ha en användare i taget"
Summary: Kunskapsbasartikel (KB) som tillhandahåller en lösning på SQL-databasåterställningsfel när användare får åtkomst till databasen.
Symptoms
SQL-databasåterställning till den ursprungliga platsen misslyckas med fel som liknar följande skärm:
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 flera användare eller anslutningar har åtkomst till databasen som återställs till. Den ursprungliga databasen kan inte skrivas över om det finns användare eller anslutningar som har åtkomst till databasen.
Resolution
Ändra status för databasen från fleranvändarläge till enanvändarläge.
Använda SQL Server Management Studio
Så här ställer du in en databas i enanvändarläge:
-
I Object Explorer ansluter du till en instans av SQL Server Database Engine och expanderar sedan den instansen.
-
Högerklicka på den databas som du vill ändra och klicka sedan på Egenskaper.
-
I dialogrutan Databasegenskaper klickar du på sidan Alternativ.
-
I alternativet Begränsa åtkomst väljer du Enkel.
-
Om andra användare är anslutna till databasen visas meddelandet Öppna anslutningar. Om du vill ändra egenskapen och stänga alla andra anslutningar klickar du på Ja.
Använda Transact-SQL
Så här ställer du in en databas i enanvändarläge:
-
Anslut till databasmotorn.
-
I fältet Standard klickar du på Ny fråga.
-
Kopiera och klistra in följande exempel i frågefönstret och klicka på knappen "Execute". I det här exemplet anges databasen till
SINGLE_USERläge för att få exklusiv åtkomst. Exemplet anger sedan tillståndet för Avamar1-databasen tillREAD_ONLYoch returnerar åtkomst till databasen till alla användare. Möjligheten till uppsägningWITH ROLLBACK IMMEDIATEanges i den förstaALTER DATABASEuttalande. Detta gör att alla ofullständiga transaktioner återställs och att alla andra anslutningar till Avamar1-databasen omedelbart kopplas bort.
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
Referens:
https://docs.microsoft.com/en-us/sql/relational-databases/databases/set-a-database-to-single-user-mode?view=sql-server-2017När det är gjort försöker du återställa SQL-databasen till den ursprungliga platsen igen.