Jak usunąć wszystkie bieżące połączenia z bazą danych SQL Server 2005?

Chcę zmienić nazwę bazy danych, ale ciągle pojawia się błąd "Couldn' t get exclusive lock" w bazie danych, co oznacza, że niektóre połączenia są nadal aktywne.

Jak mogę zabić wszystkie połączenia do bazy danych, aby zmienić jej nazwę?

Author: Tom H, 2008-08-14

19 answers

Zobacz Zabij Wszystkie Aktywne Połączenia Do Bazy Danych .

Powodem, dla którego podejście zaproponowane przez Adama nie będzie działać, jest to, że w czasie, gdy zapętlasz aktywne połączenia, można ustanowić nowe i będziesz za nimi tęsknić. Artykuł, który podlinkowałem, wykorzystuje następujące podejście, które nie ma tej wady:

-- 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
 371
Author: SQLMenace,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:02:45

Skrypt aby to osiągnąć, zastąp 'DB_NAME' bazą danych, aby zabić wszystkie połączenia do:

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
 109
Author: Adam,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-14 19:57:15

Zabić i zabić ogniem:

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
 53
Author: btk,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-05-12 10:40:36

Using SQL Management Studio Express:

W drzewie Eksploratora obiektów przejdź pod zarządzanie do "Monitora aktywności" (jeśli nie możesz go tam znaleźć, kliknij prawym przyciskiem myszy na serwerze bazy danych i wybierz "Monitor aktywności"). Otwierając Monitor aktywności, możesz wyświetlić wszystkie informacje o procesie. Powinieneś być w stanie znaleźć blokady dla interesującej Cię bazy danych i zabić te blokady, co również zabije połączenie.

Powinieneś być w stanie zmienić nazwę po tym.

 27
Author: Joseph Daigle,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-11-21 07:51:13

Zawsze używałem:


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 
 24
Author: brendan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-14 20:00:23
ALTER DATABASE [Test]
SET OFFLINE WITH ROLLBACK IMMEDIATE

ALTER DATABASE [Test]
SET ONLINE
 21
Author: santhosh kumar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-07-18 09:25:31

Take offline zajmuje trochę czasu i czasami mam z tym problemy..

Najbardziej solidny sposób moim zdaniem:

Detach Kliknij prawym przyciskiem myszy DB - > zadania - > odłącz... sprawdź " Drop Connections" Ok

Reattach Kliknij prawym przyciskiem myszy bazy danych - > Załącz.. Add... - >wybierz swoją bazę danych i zmień kolumnę Dołącz jako do żądanej nazwy bazy danych. Ok

 13
Author: NJV,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-01-05 14:49:27
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

Użyj bazy danych 'master' i uruchom to zapytanie, zabije wszystkie aktywne połączenia z twojej bazy danych.

 6
Author: Talha,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-02-01 10:11:50

Zwykle napotykam ten błąd, gdy próbuję przywrócić bazę danych, zwykle po prostu wchodzę na szczyt drzewa w Management Studio i klikam prawym przyciskiem myszy i restartuję serwer bazy danych (ponieważ jest na maszynie programistycznej, może to nie być idealne w produkcji). To jest Zamknij wszystkie połączenia z bazą danych.

 5
Author: RedWolves,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-15 15:52:24

W MS SQL Server Management Studio w object explorer kliknij prawym przyciskiem myszy na bazie danych. W menu kontekstowym, które następuje, wybierz "zadania - > Take Offline"

 4
Author: John Christensen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-14 19:56:56

Kolejnym podejściem "kill it with fire" jest ponowne uruchomienie usługi MSSQLSERVER. Lubię robić rzeczy z linii poleceń. Wklejenie tego dokladnie do CMD to zrobi: NET STOP MSSQLSERVER & NET START MSSQLSERVER

Lub Otwórz " usługi.msc "i znajdź" SQL Server (MSSQLSERVER)" i kliknij prawym przyciskiem myszy, wybierz "restart".

Spowoduje to" na pewno, na pewno " zabicie wszystkich połączeń do wszystkich baz danych uruchomionych na tej instancji.

(podoba mi się to bardziej niż wiele podejść, które zmieniają i zmień z powrotem konfigurację na serwerze / bazie danych)

 4
Author: aikeru,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-08-18 22:16:24

Oto jak niezawodnie tego typu rzeczy w MS SQL Server Management Studio 2008 (może działać również w innych wersjach):

  1. w drzewie Eksploratora obiektów kliknij prawym przyciskiem myszy główny serwer bazy danych (zieloną strzałką), a następnie kliknij monitor aktywności.
  2. Otwórz zakładkę Procesy w Monitorze aktywności, wybierz menu rozwijane "bazy danych" i filtruj według żądanej bazy danych.
  3. Kliknij prawym przyciskiem myszy DB W Object Explorer i uruchom zadanie "zadania - > Take Offline". Zostawić bieganie w tle, podczas gdy ty...
  4. Bezpiecznie Wyłącz wszystko, co się da.
  5. Zabij wszystkie pozostałe procesy z zakładki proces.
  6. Przywróć DB.
  7. Zmień nazwę DB.
  8. Przywróć serwis i wskaż Nowy DB.
 4
Author: alirobe,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-03-10 13:14:19

Opcja działająca dla mnie w tym scenariuszu jest następująca:

  1. Uruchom operację "Odłącz" w danej bazie danych. Spowoduje to otwarcie okna (w SQL 2005) wyświetlającego aktywne połączenia, które uniemożliwiają działania na DB.
  2. Wyłącz aktywne połączenia, anuluj operację odłączenia.
  3. baza danych powinna być teraz dostępna do przywrócenia.
 3
Author: Lars Timenes,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-12-28 10:42:47

Spróbuj tego:

ALTER DATABASE [DATABASE_NAME]
SET SINGLE_USER
WITH ROLLBACK IMMEDIATE
 2
Author: Joseph Sturtevant,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-08-14 19:58:13

Kliknij prawym przyciskiem myszy nazwę bazy danych, kliknij właściwość, aby uzyskać Właściwość, Otwórz kartę Opcje i zmień właściwość "Ogranicz dostęp" z wielu użytkowników na jednego użytkownika. Po naciśnięciu przycisku OK pojawi się monit o zamknięcie wszystkich otwartych połączeń, wybranie "TAK" i ustawienie zmiany nazwy bazy danych....

 2
Author: Sanjay Saxena,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-11-15 11:13:29

Te nie działały dla mnie (Sql2008 Enterprise), nie mogłem również zobaczyć żadnych uruchomionych procesów lub użytkowników podłączonych do DB. Ponowne uruchomienie serwera (kliknij prawym przyciskiem myszy na SQL Server w Management Studio i wybierz Restart) pozwoliło mi przywrócić DB.

 2
Author: The Coder,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-05-01 03:10:41

Używam SQL Server 2008 R2, mój DB był już ustawiony dla pojedynczego użytkownika i było połączenie, które ograniczyło wszelkie działania w bazie danych. Dlatego zalecane rozwiązanie SQLMenace ' s odpowiedziało błędem. Oto jeden, który zadziałał w moim przypadku.

 2
Author: Ilmar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:26:27

Używam sp_who aby uzyskać listę wszystkich procesów w bazie danych. Jest to lepsze, ponieważ możesz chcieć przejrzeć, który proces zabić.

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

Wynik
Możesz użyć polecenia w kolumnie KillCommand, aby zabić proces, który chcesz.

SPID    KillCommand
26      kill 26;
27      kill 27;
28      kill 28;
 0
Author: Rawitas Krungkaew,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-05-07 09:42:40

Możesz użyć komendy SP_Who i zabić wszystkie procesy, które używają Twojej bazy danych, a następnie zmienić jej nazwę.

 -1
Author: mehdi lotfi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-06-02 09:58:11