Как удалить базу данных, ошибка 5030 база не может быть заблокирована - PullRequest
9 голосов
/ 08 февраля 2009

Я пытаюсь удалить существующую базу данных в SQL Server 2005. Моя первая попытка вызвала следующую ошибку:

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

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

Есть какие-нибудь мысли о том, что еще может удерживать блокировку, кроме процессов и репликации SQL Server?

Обновление : Я перезапустил сервер, и это исправило. Я пытался избежать этого, так как это рабочий сервер, но что вы можете сделать?

Ответы [ 8 ]

13 голосов
/ 23 ноября 2009

Производственный сервер, на котором так много подключений используют базу данных, но вы хотите удалить ее? :)

Тем не менее, как выкинуть всех из базы данных:

USE [dbname];
ALTER DATABASE [dbname] SET SINGLE_USER WITH ROLLBACK IMMEDIATE;

Затем сбросьте базу данных:

USE [master];
DROP DATABASE [dbname];

Между USE [master]; и DROP DATABASE ... все еще есть очень небольшое окно возможностей, где какое-то другое соединение может захватить 1 единственную разрешенную блокировку для базы данных, но обычно это не стоит обходить.

6 голосов
/ 08 февраля 2009

Мне неприятно это говорить, но быстрое решение - перезапустить систему, убедиться, что служба сервера sql server не запущена, и тогда вы сможете удалить.

Кроме того, IIS остановлен, если ваша БД подключена к веб-приложению?

3 голосов
/ 08 февраля 2009

Вы случайно не знаете, оставил ли кто-либо транзакцию в незавершенном состоянии отката (или иным образом незавершенным)? Также можно проверить список блокировок.

2 голосов
/ 08 февраля 2009

В студии управления перейдите в Управление-> Монитор активности (щелкните правой кнопкой мыши) -> Просмотр процессов. Это даст вам полный список всего запущенного, вы можете отсортировать список по базе данных, чтобы увидеть, что еще подключено, и вы также можете уничтожить любые соединения. Легко получить потерянные соединения, которые не позволят вам получить эксклюзивный доступ, который вам нужен.

1 голос
/ 08 февраля 2009

Никто другой не должен использовать БД, включая вас.

0 голосов
/ 28 октября 2015

Чтобы избежать этой ошибки, используйте приведенный ниже скрипт T-SQL в базе данных master. Обязательно запустите это (и измените @dbname) для каждой базы данных, в которой вы запускаете команду ALTER DATABASE.

"База данных не может быть заблокирована исключительно для выполнения Операция "

Этот сценарий "убийцы соединений" будет работать, если Windows установила соединения JDBC с базой данных. Но этот сценарий не может уничтожить соединения JDBC для служб Linux (например, JBoss). Так что вы все равно получите эту ошибку, если не остановите JBoss вручную. Я не пробовал другие протоколы, но, пожалуйста, прокомментируйте, если вы узнаете больше информации при создании новых систем.

USE master;

DECLARE @dbname sysname

Set @dbname = 'DATABASE_NAME_HERE-PROD'

Declare @spid int
Select @spid = min(spid) from master.dbo.sysprocesses
where dbid = db_id(@dbname)
While @spid Is Not Null
Begin
        Execute ('Kill ' + @spid)
        Select @spid = min(spid) from master.dbo.sysprocesses
        where dbid = db_id(@dbname) and spid > @spid
End
0 голосов
/ 13 июня 2014

Зачем нам делать удаленную БД в многопользовательском режиме.

ALTER DATABASE dbName SET MULTI_USER WITH ROLLBACK IMMEDIATE
0 голосов
/ 16 сентября 2013

Эта ошибка обычно возникает, когда ваша база данных находится в многопользовательском режиме, когда пользователи обращаются к вашей базе данных или некоторые объекты ссылаются на вашу базу данных. Сначала вы должны установить базу данных в однопользовательский режим:

ALTER DATABASE dbName
SET SINGLE_USER WITH ROLLBACK IMMEDIATE

Теперь попробуем удалить базу данных

delete DATABASE ...

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

ALTER DATABASE dbName
SET MULTI_USER WITH ROLLBACK IMMEDIATE
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...