Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

SQL Server 2008 R2 Stuck in Single User Mode

Having executed a DB deploy (from a VS SQL Server database project) on a local database, which failed, the database has been left in a state where it has single user mode left on (the deploy runs as single user mode).

When I connect to it from SSMS and try something like the following:

ALTER DATABASE MyDatabase
SET MULTI_USER;
GO

I get the error:

Changes to the state or options of database 'MyDatabase' cannot be made at this time. The database is in single-user mode, and a user is currently connected to it.

I tried taking the database offline, which SSMS tells me succeeds, but it doesn't appear to actually do anything. So far, I've only been able to get around this by dropping and recreating the database (which is kind of okay, because it's only a local test database). However, I'd like to be able to reset the status.

How can I convince SQL Server to take this database out of single user mode?

like image 694
Paul Michaels Avatar asked Jul 07 '14 10:07

Paul Michaels


People also ask

How do I change SQL database from single user mode?

To change the database mode using SSMS, open SQL Server Management Studio Connect to the database engine Expand Databases Right-click on AdventureWorks2017. In the database properties dialog box, click on Options. Click on Restrict Access drop-down box and select SINGLE_USER. Click OK to save the configuration.

Why SQL Server is in single user mode?

Starting SQL Server in single-user mode enables any member of the computer's local Administrators group to connect to the instance of SQL Server as a member of the sysadmin fixed server role. For more information, see Connect to SQL Server when system administrators are locked out.


3 Answers

In first run following query in master database

exec sp_who 

If you can't find the culprit, try

SELECT request_session_id FROM sys.dm_tran_locks  WHERE resource_database_id = DB_ID('YourDatabase') 

Then kill all process that use your database with following query:

KILL spid 

Then run following query:

USE Master ALTER DATABASE YourDatabase SET MULTI_USER 
like image 199
mehdi lotfi Avatar answered Sep 23 '22 03:09

mehdi lotfi


Try the below commands

First run these three commands

USE [master]  SET DEADLOCK_PRIORITY HIGH exec sp_dboption MyDBName, 'single user', 'FALSE'; 

Second run these two commands

ALTER DATABASE MyDBName SET MULTI_USER WITH NO_WAIT ALTER DATABASE MyDBName SET MULTI_USER WITH ROLLBACK IMMEDIATE 
like image 24
Pankil Agrawal Avatar answered Sep 23 '22 03:09

Pankil Agrawal


This was answered here, the code is:

use master
ALTER DATABASE YourDatabase SET SINGLE_USER WITH ROLLBACK IMMEDIATE 

--do you stuff here 

ALTER DATABASE YourDatabase SET MULTI_USER
like image 25
Tristan Avatar answered Sep 21 '22 03:09

Tristan