Как закрыть все текущие соединения с базой данных SQL Server 2005?

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

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

293
0
17
Общее количество ответов: 17

Ответ #1

Ответ на вопрос: Как закрыть все текущие соединения с базой данных SQL Server 2005?

Причина, по которой подход Adam suggested не сработает, заключается 9X_sql-server-2005 в том, что за то время, пока вы зацикливаетесь 9X_sql2005 на активных соединениях, может быть установлено 9X_mssql новое, и вы их пропустите. Вместо этого 9X_sql2005 вы можете использовать следующий подход, который 9X_sql-server-2005 не имеет этого недостатка:

-- set your current connection to use master otherwise you might get an error use master ALTER DATABASE YourDatabase SET SINGLE_USER WITH ROLLBACK IMMEDIATE --do you stuff here ALTER DATABASE YourDatabase SET MULTI_USER 

386
3

  • @Wagner, если в имени базы данных есть '-', нео ...

Ответ #2

Ответ на вопрос: Как закрыть все текущие соединения с базой данных SQL Server 2005?

Сценарий для этого, замените 'DB_NAME' на 9X_sql-server базу данных, чтобы убить все подключения 9X_ms-sql-server к:

USE master GO SET NOCOUNT ON DECLARE @DBName varchar(50) DECLARE @spidstr varchar(8000) DECLARE @ConnKilled smallint SET @ConnKilled=0 SET @spidstr = '' Set @DBName = 'DB_NAME' IF db_id(@DBName) < 4 BEGIN PRINT 'Connections to system databases cannot be killed' RETURN END SELECT @spidstr=coalesce(@spidstr,',' )+'kill '+convert(varchar, spid)+ '; ' FROM master..sysprocesses WHERE dbid=db_id(@DBName) IF LEN(@spidstr) > 0 BEGIN EXEC(@spidstr) SELECT @ConnKilled = COUNT(1) FROM master..sysprocesses WHERE dbid=db_id(@DBName) END 

112
1

  • У меня это сработало, я добавил `and spid <> @@ SPID` в оператор SELECT @ sKillConnection, чтобы он не пытался разорвать мое текущее соединение, что привело бы к появл ...

Ответ #3

Ответ на вопрос: Как закрыть все текущие соединения с базой данных SQL Server 2005?

Убить его и убить огнем:

USE master go DECLARE @dbname sysname SET @dbname = 'yourdbname' 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 

9X_sql-server

56
0

Ответ #4

Ответ на вопрос: Как закрыть все текущие соединения с базой данных SQL Server 2005?

Использование SQL Management Studio Express:

В 9X_sql2005 дереве объектов обозревателя разверните 9X_mssql раздел «Управление» до «Монитор активности» (если 9X_ms-sql-server вы не можете найти его там, щелкните правой 9X_mssql кнопкой мыши сервер базы данных и выберите 9X_sql-server-2005 «Мониторинг активности»). Открыв Монитор 9X_mssql2005 активности, вы можете просмотреть всю информацию 9X_sql-server о процессе. Вы должны быть в состоянии найти 9X_ms-sql-server блокировки для интересующей вас базы данных 9X_mssql и снять эти блокировки, что также приведет 9X_sql-srever к разрыву соединения.

После этого вы сможете 9X_mssql переименовать.

27
1

  • Я обнаружил «Activity Montior», если щелкнуть правой кнопкой мыши СЕРВЕР, а не БД. Затем вы можете выбрать вкладку «Процессы» и ...

Ответ #5

Ответ на вопрос: Как закрыть все текущие соединения с базой данных SQL Server 2005?

Я всегда использовал:

 ALTER DATABASE DB_NAME SET SINGLE_USER WITH ROLLBACK IMMEDIATE GO SP_RENAMEDB 'DB_NAME','DB_NAME_NEW' Go ALTER DATABASE DB_NAME_NEW SET MULTI_USER -- set back to multi user GO 

9X_mssql

24
0

Ответ #6

Ответ на вопрос: Как закрыть все текущие соединения с базой данных SQL Server 2005?

ALTER DATABASE [Test] SET OFFLINE WITH ROLLBACK IMMEDIATE ALTER DATABASE [Test] SET ONLINE 
9X_sql-server-2005
21
0

Ответ #7

Ответ на вопрос: Как закрыть все текущие соединения с базой данных SQL Server 2005?

Переход в автономный режим занимает некоторое 9X_mssql2005 время, и иногда у меня возникают проблемы 9X_sql-server с этим ..

На мой взгляд, самый надежный способ:

Отключить Щелкните 9X_sql-srever правой кнопкой мыши DB -> Задачи -> Отсоединить 9X_mssql2005 ... отметьте "Drop Connections" Хорошо

Повторно прикрепить Щелкните 9X_sql2005 правой кнопкой мыши "Базы данных" -> "Прикрепить". Добавить 9X_mssql2005 ... -> выберите свою базу данных и измените 9X_sql-server-2005 столбец «Присоединить как» на желаемое имя 9X_mssql2005 базы данных. Хорошо

15
0

Ответ #8

Ответ на вопрос: Как закрыть все текущие соединения с базой данных SQL Server 2005?

Select 'Kill '+ CAST(p.spid AS VARCHAR)KillCommand into #temp from master.dbo.sysprocesses p (nolock) join master..sysdatabases d (nolock) on p.dbid = d.dbid Where d.[name] = 'your db name' Declare @query nvarchar(max) --Select * from #temp Select @query =STUFF(( select ' ' + KillCommand from #temp FOR XML PATH('')),1,1,'') Execute sp_executesql @query Drop table #temp 
используйте "главную" базу данных и запустите 9X_sql-server-2005 этот запрос, он убьет все активные соединения 9X_mssql из вашей базы данных.
6
1

  • Это действительно работает :) Я бы посоветовал оставить часть выполнения этого скрипта закомментированно ...

Ответ #9

Ответ на вопрос: Как закрыть все текущие соединения с базой данных SQL Server 2005?

Обычно я сталкиваюсь с этой ошибкой, когда 9X_sql-server-2005 пытаюсь восстановить базу данных. Обычно 9X_ms-sql-server я просто иду в верхнюю часть дерева в Management 9X_ms-sql-server Studio, щелкаю правой кнопкой мыши и перезапускаю 9X_sql-srever сервер базы данных (поскольку он находится 9X_sql-server на машине разработки, это может быть не 9X_sql-srever идеально в производство). Это закрывает 9X_sql-server-2005 все соединения с базой данных.

5
0

Ответ #10

Ответ на вопрос: Как закрыть все текущие соединения с базой данных SQL Server 2005?

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

4
1

  • Вы не можете этого сделать, если есть активное соединени ...

Ответ #11

Ответ на вопрос: Как закрыть все текущие соединения с базой данных SQL Server 2005?

Вот как надежно сделать подобные вещи в 9X_ms-sql-server MS SQL Server Management Studio 2008 (может 9X_sql-srever работать и для других версий):

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

4
0

Ответ #12

Ответ на вопрос: Как закрыть все текущие соединения с базой данных SQL Server 2005?

Другой способ «убить его огнем» - просто 9X_ms-sql-server перезапустить службу MSSQLSERVER. Мне нравится 9X_sql-server-2005 делать что-то из командной строки. Вставка 9X_sql-server-2005 этого точно в CMD сделает это: NET STOP 9X_mssql2005 MSSQLSERVER И NET START MSSQLSERVER

Или откройте 9X_sql-server-2005 "services.msc", найдите "SQL Server (MSSQLSERVER)" и 9X_mssql2005 щелкните правой кнопкой мыши, выберите "перезапустить".

Это 9X_sql-server "наверняка, наверняка" уничтожит ВСЕ подключения 9X_sql-srever ко ВСЕМ базам данных, работающим на этом 9X_sql2005 экземпляре.

(Мне это нравится больше, чем 9X_sql-server многие подходы, которые изменяют и меняют 9X_sql-server-2005 конфигурацию на сервере / базе данных)

4
1

  • Я бы пошел на все, что должно повлиять ТОЛЬКО на мою целевую БД. ва ...

Ответ #13

Ответ на вопрос: Как закрыть все текущие соединения с базой данных SQL Server 2005?

В этом сценарии у меня работает следующий 9X_mssql2005 вариант:

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

3
0

Ответ #14

Ответ на вопрос: Как закрыть все текущие соединения с базой данных SQL Server 2005?

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

ALTER DATABASE [DATABASE_NAME] SET SINGLE_USER WITH ROLLBACK IMMEDIATE 

9X_sql-server

2
0

Ответ #15

Ответ на вопрос: Как закрыть все текущие соединения с базой данных SQL Server 2005?

Щелкните правой кнопкой мыши имя базы данных, выберите 9X_ms-sql-server «Свойства», чтобы открыть окно свойств, откройте 9X_mssql вкладку «Параметры» и измените свойство 9X_mssql2005 «Ограничить доступ» с «Многопользовательский» на 9X_sql-srever «Однопользовательский». Когда вы нажмете 9X_sql-server кнопку ОК, вам будет предложено закрыть 9X_sql-server все открытые соединения, выберите «Да», и 9X_sql2005 вы настроены на переименование базы данных 9X_ms-sql-server ....

2
0

Ответ #16

Ответ на вопрос: Как закрыть все текущие соединения с базой данных SQL Server 2005?

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

2
0

Ответ #17

Ответ на вопрос: Как закрыть все текущие соединения с базой данных SQL Server 2005?

Я использую SQL Server 2008 R2, моя БД уже 9X_sql-srever была настроена для одного пользователя, и 9X_sql-server было соединение, которое ограничивало любые 9X_mssql2005 действия с базой данных. Таким образом, рекомендованное 9X_sql-srever решение SQLMenace's выдает ошибку. Here is one that worked in my case.

2
0