SQL-palautus epäonnistuu ja sanoo "Tietokanta on jo auki, ja sillä voi olla vain yksi käyttäjä kerrallaan"
Summary: Tietämyskannan (KB) artikkeli, joka tarjoaa ratkaisun SQL-tietokannan palautusvirheeseen, kun käyttäjät käyttävät tietokantaa.
Symptoms
SQL-tietokannan palautus alkuperäiseen sijaintiin epäonnistuu ja näyttöön tulee seuraavankaltakaltaisia virheitä:
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
Yksi tai useampi käyttäjä tai yhteys käyttää tietokantaa, johon palautetaan. Alkuperäistä tietokantaa ei voi korvata, jos tietokantaa käyttää käyttäjät tai yhteydet.
Resolution
Vaihda tietokannan tila usean käyttäjän tilasta yhden käyttäjän tilaan.
SQL Server Management Studion käyttäminen
Tietokannan asettaminen yhden käyttäjän tilaan:
-
Muodosta objektinhallinnassa yhteys SQL Server Database Enginen esiintymään ja laajenna kyseinen esiintymä.
-
Napsauta muutettavaa tietokantaa hiiren kakkospainikkeella ja valitse sitten Ominaisuudet.
-
Napsauta Tietokannan ominaisuudet -valintaikkunassa Asetukset-sivua.
-
Valitse Rajoita käyttöä -vaihtoehdosta Single.
-
Jos tietokantaan on muodostettu yhteys muita käyttäjiä, näyttöön tulee Open Connections -viesti. Jos haluat muuttaa ominaisuutta ja sulkea kaikki muut yhteydet, klikkaa Kyllä.
Transact-SQL:n käyttäminen
Tietokannan asettaminen yhden käyttäjän tilaan:
-
Muodosta yhteys tietokantamoduuliin.
-
Valitse Vakio-palkista Uusi kysely.
-
Kopioi ja liitä seuraava esimerkki kyselyikkunaan ja napsauta "Suorita" -painiketta. Esimerkissä tietokannaksi määritetään
SINGLE_USERtilassa saadaksesi yksinomaisen pääsyn. Esimerkissä Avamar1-tietokannan tilaksi määritetäänREAD_ONLYja palauttaa tietokannan käyttöoikeuden kaikille käyttäjille. IrtisanomismahdollisuusWITH ROLLBACK IMMEDIATEon määritelty ensimmäisessäALTER DATABASElausunto. Tämä aiheuttaa sen, että kaikki keskeneräiset tapahtumat peruutetaan ja kaikki muut yhteydet Avamar1-tietokantaan katkeavat välittömästi.
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
Viite:
https://docs.microsoft.com/en-us/sql/relational-databases/databases/set-a-database-to-single-user-mode?view=sql-server-2017Tämän jälkeen yritä palauttaa SQL-tietokanta uudelleen alkuperäiseen sijaintiin.