SQL-herstel mislukt met de melding Database is al geopend en kan slechts één gebruiker tegelijk hebben
Summary: Knowledge Base-artikel (KB) dat een oplossing biedt voor een SQL-databaseherstelfout wanneer gebruikers toegang krijgen tot de database.
Symptoms
SQL databaseherstel naar de oorspronkelijke locatie mislukt met fouten die vergelijkbaar zijn met de volgende weergave:
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
Een of meer gebruikers of verbindingen hebben toegang tot de database waarnaar wordt hersteld. De oorspronkelijke database kan niet worden overschreven als er gebruikers of verbindingen zijn die toegang hebben tot de database.
Resolution
Wijzig de status van de database van Multi-User naar Single-User modus.
SQL Server Management Studio gebruiken
Ga als volgt te werk om een database in te stellen op de modus voor één gebruiker:
-
Maak in Object Explorer verbinding met een instantie van de SQL Server Database Engine en vouw die instantie uit.
-
Klik met de rechtermuisknop op de database die u wilt wijzigen en klik vervolgens op Eigenschappen.
-
Klik in het dialoogvenster Database-eigenschappen op de pagina Opties.
-
Selecteer Enkelvoudig uit de optie Toegang beperken.
-
Als andere gebruikers zijn verbonden met de database, wordt het bericht Open verbindingen weergegeven. Als u de eigenschap wilt wijzigen en alle andere verbindingen wilt sluiten, klikt u op Ja.
Transact-SQL gebruiken
Ga als volgt te werk om een database in te stellen op de modus voor één gebruiker:
-
Maak verbinding met de Database Engine.
-
Klik op de standaardbalk op Nieuwe query.
-
Kopieer en plak het volgende voorbeeld in het queryvenster en klik op de knop "Execute". In dit voorbeeld wordt de database ingesteld op
SINGLE_USERmodus om exclusieve toegang te verkrijgen. In het voorbeeld wordt de status van de Avamar1-database vervolgens ingesteld opREAD_ONLYen geeft alle gebruikers weer toegang tot de database. De opzeggingsoptieWITH ROLLBACK IMMEDIATEis gespecificeerd in de eersteALTER DATABASEverklaring. Hierdoor worden alle onvolledige transacties teruggedraaid en worden alle andere verbindingen met de Avamar1-database onmiddellijk losgekoppeld.
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
Referentie:
https://docs.microsoft.com/en-us/sql/relational-databases/databases/set-a-database-to-single-user-mode?view=sql-server-2017Zodra dat is gebeurd, probeert u de SQL-database opnieuw te herstellen naar de oorspronkelijke locatie.