Установка базы данных из однопользовательского режима в многопользовательский
мне нужна помощь с созданием базы данных, которая была восстановлена в 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
см. вот если у вас все еще есть проблемы:
В КАЧЕСТВЕ ПОСЛЕДНЕЙ АЛЬТЕРНАТИВЫ - если вы пробовали все выше, и вы в отчаянии, вы можете попробовать остановить экземпляр 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
- пробовал все не получилось
- войдите на этот сервер удаленно, так как мы убьем все соединения
- запустите приведенный ниже код более одного раза, пока он не вернется завершенным, и тест" процесс убийства " больше не
- повторно активируйте его, используя код ниже приведенного ниже кода
используйте 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; ИДИ
Это отлично сработало для меня
- сделать резервную копию
- создайте новую базу данных и восстановите резервную копию к ней
- затем Свойства > параметры > [прокрутите вниз] состояние > RestrictAccess > выберите Multi_user и нажмите OK
- удалить старую базу данных
надеемся, что эта работа для всех Спасибо Рамеш Кумар!--1-->
просто зайти в свойства базы данных и измените однопользовательский режим на MULTI USER
Примечание.: если это не работает для вас, то возьмите резервную копию БД и восстановите снова и сделайте выше метод снова
* Single=SINGLE_USER
Multiple=MULTI_USER
Restricted=RESTRICTED_USER
Я решил проблему легко
щелкните правой кнопкой мыши имя базы данных переименуйте его
после изменения щелкните правой кнопкой мыши имя базы данных -- > свойства --> Параметры --> перейдите к нижней части прокрутки RestrictAccess (SINGLE_USER к MULTI_USER)
теперь вы снова можете переименовать базу данных в свое старое имя.
более 3 раз, работая с SQL Server 2014, у меня было преобразование базы данных в однопользовательский режим без каких-либо изменений. Должно быть, это произошло во время создания базы данных. Все вышеперечисленные методы никогда не работали, так как я всегда получал сообщение об ошибке, что база данных находится в однопользовательском режиме и не может быть подключена.
единственное, что я получил на работу, это перезапуск службы Windows SQL Server. Что позволило мне подключиться к базе данных и сделать необходимые изменения или удалить базу данных и начать все сначала.
Если вы делаете резервную копию из существующей БД (A) на сервере, а затем попробуйте восстановить его на другой БД (B) на сервере
затем вы должны убедиться, что B пути установлены правильно с mdf
и ldf
пути B