Как убить все текущие соединения с базой данных SQL Server 2005? - PullRequest
281 голосов
/ 14 августа 2008

Я хочу переименовать базу данных, но продолжаю получать сообщение об ошибке «Не удалось установить эксклюзивную блокировку» для базы данных, что означает, что некоторые соединения все еще активны.

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

Ответы [ 19 ]

4 голосов
/ 12 ноября 2010

Вот как надежно работать с такими вещами в MS SQL Server Management Studio 2008 (может работать и для других версий):

  1. В дереве обозревателя объектов щелкните правой кнопкой мыши корневой сервер базы данных (с зеленой стрелкой) и выберите монитор активности.
  2. Откройте вкладку процессов в мониторе активности, выберите раскрывающееся меню «Базы данных» и выполните фильтрацию по нужной базе данных.
  3. Щелкните правой кнопкой мыши БД в обозревателе объектов и запустите задачу «Задачи -> Отключить». Оставь это в фоновом режиме, пока ты ...
  4. Безопасно выключите все, что можете.
  5. Убить все оставшиеся процессы на вкладке процессов.
  6. Переведите БД в оперативный режим.
  7. Переименуйте БД.
  8. Переведите службу в оперативный режим и укажите ее в новой БД.
4 голосов
/ 14 августа 2008

В MS SQL Server Management Studio в проводнике объектов щелкните правой кнопкой мыши базу данных. В появившемся контекстном меню выберите «Задачи -> Отключить»

3 голосов
/ 28 декабря 2011

Опция, работающая для меня в этом сценарии, выглядит следующим образом:

  1. Запустить операцию «Отсоединить» для рассматриваемой базы данных. Это откроет окно (в SQL 2005), отображающее активные соединения, которые предотвращают действия на БД.
  2. Завершить активные подключения, отменить операцию отсоединения.
  3. База данных теперь должна быть доступна для восстановления.
2 голосов
/ 12 июня 2012

Я использую SQL Server 2008 R2, моя БД уже настроена для одного пользователя, и было установлено соединение, которое ограничивало любые действия с базой данных. Таким образом, рекомендуемое решение SQLMenace ответило с ошибкой. Вот тот, который работал в моем случае .

2 голосов
/ 01 мая 2012

Они не работали для меня (SQL2008 Enterprise), я также не мог видеть запущенные процессы или пользователей, подключенных к БД. Перезапуск сервера (щелкните правой кнопкой мыши Sql Server в Management Studio и выберите «Перезапустить») позволил мне восстановить БД.

2 голосов
/ 14 августа 2008

Попробуйте это:

ALTER DATABASE [DATABASE_NAME]
SET SINGLE_USER
WITH ROLLBACK IMMEDIATE
2 голосов
/ 15 ноября 2010

Щелкните правой кнопкой мыши по имени базы данных, щелкните «Свойство», чтобы открыть окно свойств, откройте вкладку «Параметры» и измените свойство «Ограничить доступ» с Многопользовательского на Однопользовательский. Когда вы нажмете кнопку ОК, он предложит вам закрыть все открытые соединения, выберите «Да», и вы настроены на переименование базы данных ....

0 голосов
/ 07 мая 2015

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

declare @proc table(
    SPID bigint,
    Status nvarchar(255),
    Login nvarchar(255),
    HostName nvarchar(255),
    BlkBy nvarchar(255),
    DBName nvarchar(255),
    Command nvarchar(MAX),
    CPUTime bigint,
    DiskIO bigint,
    LastBatch nvarchar(255),
    ProgramName nvarchar(255),
    SPID2 bigint,
    REQUESTID bigint
)

insert into @proc
exec sp_who2

select  *, KillCommand = concat('kill ', SPID, ';')
from    @proc

Результат
Вы можете использовать команду в столбце KillCommand, чтобы завершить требуемый процесс.

SPID    KillCommand
26      kill 26;
27      kill 27;
28      kill 28;
0 голосов
/ 02 июня 2014

Вы можете использовать команду SP_Who и убить все процессы, которые используют вашу базу данных, а затем переименовать вашу базу данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...