Установка базы данных из однопользовательского режима в многопользовательский

мне нужна помощь с созданием базы данных, которая была восстановлена в SINGLE_USER режим MULTI_USER. Каждый раз, когда я бегу

ALTER DATABASE BARDABARD
SET MULTI_USER;
GO

я получаю эту ошибку:

изменения состояния или параметров базы данных "BARDABARD" не могут быть внесены в настоящее время.

база данных находится в однопользовательском режиме, и пользователь в данный момент подключен к нему.

он должен быть в non -SINGLE_USER mode, чтобы установить его в другой режим, но я не могу установить базу данных в любом другой режим, пока он SINGLE_USER режим.

16 ответов


"пользователь в настоящее время подключен к нему" может быть само окно SQL Server Management Studio. Попробуйте выбрать базу данных master и запустить ALTER запрос снова.


это сообщение об ошибке обычно означает, что есть другие процессы, связанные с БД. Попробуйте запустить это, чтобы увидеть, какие из них подключены:

exec sp_who

это вернет вам процесс, а затем вы сможете запустить:

kill [XXX]

где [xxx] находится spid процесса, который вы пытаетесь убить.

затем вы можете запустить выше заявление.

удачи.


вы можете добавить опцию для отката изменения немедленно.

ALTER DATABASE BARDABARD
SET MULTI_USER
WITH ROLLBACK IMMEDIATE
GO

SQL Server 2012:

щелкните правой кнопкой мыши на DB > Properties > Options > [Scroll down] State > RestrictAccess > select Multi_user и нажмите OK.

вуаля!


У меня была та же проблема, и она исправлена следующими шагами - ссылка: http://giladka8.blogspot.com.au/2011/11/database-is-in-single-user-mode-and.html

use master
GO

select 
    d.name, 
    d.dbid, 
    spid, 
    login_time, 
    nt_domain, 
    nt_username, 
    loginame
from sysprocesses p 
    inner join sysdatabases d 
        on p.dbid = d.dbid
where d.name = 'dbname'
GO

kill 56 => kill the number in spid field
GO

exec sp_dboption 'dbname', 'single user', 'FALSE'
GO

это отлично сработало для меня.

Шаг 1. Щелкните правой кнопкой мыши на Database engine, нажмите на монитор активности и посмотрите, какой процесс имеет соединение. Убейте этого конкретного пользователя и немедленно выполните запрос.

Шаг 2.

USE [master];
GO
ALTER DATABASE [YourDatabaseNameHere] SET MULTI_USER WITH NO_WAIT;
GO  

и обновить базу данных.


у меня на самом деле была проблема, когда моя БД была в значительной степени заблокирована процессами и состоянием гонки с ними, к тому времени, когда я получил обновленную команду, и они снова заблокировали ее... Я должен был выполнить следующие команды спина к спине в SSMS и получил меня в автономном режиме, и оттуда я сделал свое восстановление и вернулся в интернет просто отлично, два запроса, где:

первый РАН:

USE master
GO

DECLARE @kill varchar(8000) = '';
SELECT @kill = @kill + 'kill ' + CONVERT(varchar(5), spid) + ';'
FROM master..sysprocesses 
WHERE dbid = db_id('<yourDbName>')

EXEC(@kill);

потом сразу после (во втором окне запроса):

USE master ALTER DATABASE <yourDbName> SET OFFLINE WITH ROLLBACK IMMEDIATE

сделал то, что мне было нужно, а потом снова включил. Спасибо всем, кто написал эти кусочки для меня, чтобы объединить и решить мою проблему.


возможно, лучше всего войти на сервер напрямую, а не использовать SQL Management Studio

убедитесь, что учетная запись, которую вы регистрируете как dbowner для базы данных, которую вы хотите установить в MULTI_USER. Войдите в систему как sa (используя аутентификацию SQL server), если вы можете

если ваша база данных используется IIS, остановите веб-сайт и пул приложений, которые его используют - это может быть процесс, который подключен и блокирует установку на MULTI_USER

USE MASTER
GO

-- see if any process are using *your* database specifically

SELECT * from master.sys.sysprocesses
WHERE spid > 50 -- process spids < 50 are reserved by SQL - we're not interested in these
AND dbid=DB_ID ('YourDbNameHere')

-- if so, kill the process:

KILL n -- where 'n' is the 'spid' of the connected process as identified using query above

-- setting database to read only isn't generally necessary, but may help:

ALTER DATABASE YourDbNameHere
SET READ_ONLY;
GO

-- should work now:

ALTER DATABASE Appswiz SET MULTI_USER WITH ROLLBACK IMMEDIATE

см. вот если у вас все еще есть проблемы:

http://www.sqlservercentral.com/blogs/pearlknows/2014/04/07/help-i-m-stuck-in-single-user-mode-and-can-t-get-out/

В КАЧЕСТВЕ ПОСЛЕДНЕЙ АЛЬТЕРНАТИВЫ - если вы пробовали все выше, и вы в отчаянии, вы можете попробовать остановить экземпляр SQL server и запустить его снова


приведенный ниже код работал для меня, когда я не знал конкретного SPID, который использовался для изменения в singleuser режим.

use master
GO

select 
    d.name, 
    d.dbid, 
    spid, 
    login_time, 
    nt_domain, 
    nt_username, 
    loginame
from sysprocesses p 
    inner join sysdatabases d 
        on p.dbid = d.dbid
where d.name = 'dbname'
GO

kill 52 -- kill the number in spid field
GO

exec sp_dboption 'dbname', 'single user', 'FALSE'
GO

  1. пробовал все не получилось
  2. войдите на этот сервер удаленно, так как мы убьем все соединения
  3. запустите приведенный ниже код более одного раза, пока он не вернется завершенным, и тест" процесс убийства " больше не
  4. повторно активируйте его, используя код ниже приведенного ниже кода

используйте master GO declare @sql как varchar (20), @spid как int

выберите @spid = min (spid) из master..ѕуѕргосеѕѕеѕсистемная где dbid = db_id ('DB_NAME') и spid != @ @ spid

while (@spid не равно null) begin печать 'процесс убийства' + cast (@spid как varchar)+'...' set @sql = 'kill' + cast (@spid как varchar) exec (@sql)

select 
    @spid = min(spid)  
from 
    master..sysprocesses  
where 
    dbid = db_id('DB_NAME') 
    and spid != @@spid end

тогда вернуть его живым

ИЗМЕНИТЬ ПАРАМЕТРЫ DB_NAME БАЗЫ ДАННЫХ SET MULTI_USER; ИДИ


Это отлично сработало для меня

  1. сделать резервную копию
  2. создайте новую базу данных и восстановите резервную копию к ней
  3. затем Свойства > параметры > [прокрутите вниз] состояние > RestrictAccess > выберите Multi_user и нажмите OK
  4. удалить старую базу данных

надеемся, что эта работа для всех Спасибо Рамеш Кумар!--1-->


Если выше не работает, найдите имя Входа spid и отключите его в Security - Logins


просто зайти в свойства базы данных и измените однопользовательский режим на MULTI USER

enter image description here

Примечание.: если это не работает для вас, то возьмите резервную копию БД и восстановите снова и сделайте выше метод снова

* Single=SINGLE_USER

Multiple=MULTI_USER

Restricted=RESTRICTED_USER


Я решил проблему легко

  1. щелкните правой кнопкой мыши имя базы данных переименуйте его

  2. после изменения щелкните правой кнопкой мыши имя базы данных -- > свойства --> Параметры --> перейдите к нижней части прокрутки RestrictAccess (SINGLE_USER к MULTI_USER)

  3. теперь вы снова можете переименовать базу данных в свое старое имя.


более 3 раз, работая с SQL Server 2014, у меня было преобразование базы данных в однопользовательский режим без каких-либо изменений. Должно быть, это произошло во время создания базы данных. Все вышеперечисленные методы никогда не работали, так как я всегда получал сообщение об ошибке, что база данных находится в однопользовательском режиме и не может быть подключена.

единственное, что я получил на работу, это перезапуск службы Windows SQL Server. Что позволило мне подключиться к базе данных и сделать необходимые изменения или удалить базу данных и начать все сначала.


Если вы делаете резервную копию из существующей БД (A) на сервере, а затем попробуйте восстановить его на другой БД (B) на сервере

затем вы должны убедиться, что B пути установлены правильно с mdf и ldf пути B