Как закрыть все текущие соединения с базой данных SQL Server 2005?
Я хочу переименовать базу данных, но продолжаю 9X_sql-srever получать сообщение об ошибке «не удалось 9X_sql-srever получить эксклюзивную блокировку» для базы 9X_sql-srever данных, что означает, что некоторые соединения 9X_sql-srever все еще активны.
Как убить все соединения 9X_sql-srever с базой данных, чтобы я мог ее переименовать?
Ответ #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
- @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
- У меня это сработало, я добавил `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
Ответ #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 переименовать.
- Я обнаружил «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
Ответ #6
Ответ на вопрос: Как закрыть все текущие соединения с базой данных SQL Server 2005?
ALTER DATABASE [Test] SET OFFLINE WITH ROLLBACK IMMEDIATE ALTER DATABASE [Test] SET ONLINE
9X_sql-server-2005
Ответ #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 базы данных. Хорошо
Ответ #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 из вашей базы данных.
- Это действительно работает :) Я бы посоветовал оставить часть выполнения этого скрипта закомментированно ...
Ответ #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 все соединения с базой данных.
Ответ #10
Ответ на вопрос: Как закрыть все текущие соединения с базой данных SQL Server 2005?
В MS SQL Server Management Studio в проводнике 9X_ms-sql-server объектов щелкните правой кнопкой мыши базу 9X_mssql2005 данных. В следующем контекстном меню выберите 9X_mssql «Задачи - > Отключить»
- Вы не можете этого сделать, если есть активное соединени ...
Ответ #11
Ответ на вопрос: Как закрыть все текущие соединения с базой данных SQL Server 2005?
Вот как надежно сделать подобные вещи в 9X_ms-sql-server MS SQL Server Management Studio 2008 (может 9X_sql-srever работать и для других версий):
- В дереве обозревателя объектов щелкните правой кнопкой мыши корневой сервер базы данных (с зеленой стрелкой), затем щелкните монитор активности.
- Откройте вкладку процессов в мониторе активности, выберите раскрывающееся меню "базы данных" и отфильтруйте нужную базу данных.
- Щелкните правой кнопкой мыши базу данных в обозревателе объектов и запустите задачу «Задачи -> Перевести в автономный режим». Оставьте это работать в фоновом режиме, пока вы ...
- Безопасно выключите все, что сможете.
- Завершите все оставшиеся процессы на вкладке процессов.
- Верните БД в оперативный режим.
- Переименуйте БД.
- Верните свою службу в оперативный режим и укажите в ней новую БД.
Ответ #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 конфигурацию на сервере / базе данных)
- Я бы пошел на все, что должно повлиять ТОЛЬКО на мою целевую БД. ва ...
Ответ #13
Ответ на вопрос: Как закрыть все текущие соединения с базой данных SQL Server 2005?
В этом сценарии у меня работает следующий 9X_mssql2005 вариант:
- Запустите операцию «Отсоединить» от рассматриваемой базы данных. Это откроет окно (в SQL 2005), отображающее активные соединения, которые предотвращают действия с БД.
- Убейте активные соединения, отмените операцию отсоединения.
- Теперь база данных должна быть доступна для восстановления.
Ответ #14
Ответ на вопрос: Как закрыть все текущие соединения с базой данных SQL Server 2005?
Попробуйте это:
ALTER DATABASE [DATABASE_NAME]
SET SINGLE_USER
WITH ROLLBACK IMMEDIATE
9X_sql-server
Ответ #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 ....
Ответ #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 мне восстановить БД.
Ответ #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.
-
4
-
5
-
7
-
9
-
5
-
14
-
8
-
3
-
11
-
5
-
42
-
10
-
4
-
12
-
3
-
8
-
4
-
18
-
9
-
2
-
22
-
4
-
14
-
24
-
4
-
13
-
5
-
4
-
9
-
22
-
14
-
4
-
5
-
10
-
7
-
2
-
10
-
6
-
10
-
19
-
7
-
4
-
2
-
11
-
10
-
3
-
9
-
6
-
9
-
7