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



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



ALTER DATABASE BARDABARD
SET MULTI_USER;
GO


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




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



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




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

774   16  

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 и нажмите кнопку ОК.

вуаля!

У меня была такая же проблема, и она была исправлена следующими шагами-Ссылка: 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 объявить @sql как varchar (20), @spid как int

выберите @spid = min (spid) от мастера..sysprocesses где dbid = db_id ('DB_NAME') и spid != @ @ spid

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

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

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

ALTER DATABASE DB_NAME SET MULTI_USER; GO

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

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

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

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

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

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

Comments

    Ничего не найдено.