SQL geri yüklemesi "Veritabanı zaten açık ve aynı anda yalnızca bir kullanıcı olabilir" hatasıyla başarısız oluyor
Summary: Kullanıcılar veritabanına eriştiğinde SQL veritabanını geri yükleme hatasına yönelik bir çözüm sağlayan Knowledge Base (KB) makalesi.
Symptoms
SQL veritabanını orijinal konuma geri yükleme işlemi başarısız olur ve aşağıdaki ekrana benzer hatalar verir:
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
Bir veya daha fazla kullanıcı ya da bağlantı, geri yüklenmekte olan veritabanına erişiyor. Veritabanına erişen kullanıcılar veya bağlantılar varsa orijinal veritabanının üzerine yazılamaz.
Resolution
Veritabanının durumunu Çoklu Kullanıcı modundan Tek Kullanıcı moduna değiştirin.
SQL Server Management Studio'yu kullanma
Veritabanını tek kullanıcı moduna ayarlamak için:
-
Object Explorer da, SQL Server Veritabanı Altyapısı'nın bir örneğine bağlanın ve ardından bu örneği genişletin.
-
Değiştirmek istediğiniz veritabanını sağ tıklatın ve ardından Properties ögesini tıklatın.
-
Database Properties iletişim kutusunda Options sayfasına tıklayın.
-
Erişimi Kısıtla seçeneğinden Tek öğesini seçin.
-
Veritabanına başka kullanıcılar da bağlıysa Open Connections mesajı görüntülenir. Özelliği değiştirmek ve diğer tüm bağlantıları kapatmak için Yes öğesine tıklayın.
Transact-SQL'i kullanma
Veritabanını tek kullanıcı moduna ayarlamak için:
-
Veritabanı Altyapısı'na bağlanın.
-
Standart çubuktan New Query öğesine tıklayın.
-
Aşağıdaki örneği kopyalayıp sorgu penceresine yapıştırın ve "Execute" düğmesine tıklayın. Bu örnek, veritabanını
SINGLE_USERözel erişim elde etmek için mod. Örnek daha sonra Avamar1 veritabanının durumunuREAD_ONLYve veritabanına erişimi tüm kullanıcılara döndürür. Sonlandırma seçeneğiWITH ROLLBACK IMMEDIATEilkinde belirtilmiştirALTER DATABASEbeyanat. Bu, tüm tamamlanmamış işlemlerin geri alınmasına ve Avamar1 veritabanına yapılan diğer bağlantıların hemen kesilmesine neden olur.
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
Referans:
https://docs.microsoft.com/en-us/sql/relational-databases/databases/set-a-database-to-single-user-mode?view=sql-server-2017Bu işlem tamamlandıktan sonra SQL veritabanı geri yüklemesini orijinal konumuna yeniden deneyin.