Jak podczas przywracania kopii zapasowej odłączyć wszystkie aktywne połączenia?
Mój SQL Server 2005 nie przywraca kopii zapasowej z powodu aktywnych połączeń. Jak mogę to wymusić?
9 answers
SQL Server Management Studio 2005
Po kliknięciu prawym przyciskiem myszy na bazie danych i kliknięciu Tasks
, a następnie kliknięciu Detach Database
, wyświetla się okno dialogowe z aktywnymi połączeniami.
Odłącz ekran http://www.kodyaz.com/images/articles/kill-all-processes/detach-database.JPG
Klikając na hiperłącze pod "wiadomości" możesz zabić aktywne połączenia.
Możesz następnie zabić te połączenia bez odłączania bazy danych.
Więcej informacji tutaj .
SQL Server Management Studio 2008
Interfejs został zmieniony dla SQL Server Management studio 2008, oto kroki (via: Tim Leung )
- kliknij prawym przyciskiem myszy serwer w Object Explorer i wybierz "monitor aktywności".
- gdy to się otworzy, rozwiń grupę procesów.
- Teraz użyj rozwijanej listy, aby filtrować wyniki według nazwy bazy danych.
- Wyłącz połączenia z serwerem, wybierając prawym przyciskiem myszy 'Zabij proces' opcja.
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:17
Chcesz ustawić db na tryb pojedynczego użytkownika, wykonaj restore, a następnie ustaw go z powrotem na multiuser:
ALTER DATABASE YourDB
SET SINGLE_USER WITH
ROLLBACK AFTER 60 --this will give your current connections 60 seconds to complete
--Do Actual Restore
RESTORE DATABASE YourDB
FROM DISK = 'D:\BackUp\YourBaackUpFile.bak'
WITH MOVE 'YourMDFLogicalName' TO 'D:\Data\YourMDFFile.mdf',
MOVE 'YourLDFLogicalName' TO 'D:\Data\YourLDFFile.ldf'
/*If there is no error in statement before database will be in multiuser
mode. If error occurs please execute following command it will convert
database in multi user.*/
ALTER DATABASE YourDB SET MULTI_USER
GO
Reference : Pinal Dave ( http://blog.SQLAuthority.com )
Oficjalne odniesienie: https://msdn.microsoft.com/en-us/library/ms345598.aspx
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-10-20 12:30:30
Ten kod zadziałał dla mnie, zabija wszystkie istniejące połączenia z bazą danych. Wszystko co musisz zrobić, to zmienić linię @ dbname = 'databaseName' tak, aby miała nazwę twojej bazy danych.
Use Master
Go
Declare @dbname sysname
Set @dbname = 'databaseName'
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
Po tym udało mi się go przywrócić
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-31 10:04:58
Ponowne uruchomienie serwera SQL spowoduje odłączenie użytkowników. Najprostszy sposób, jaki Znalazłem-dobry również, jeśli chcesz wziąć serwer w trybie offline.
Ale z jakiegoś bardzo dziwnego powodu opcja 'Take Offline' nie robi tego niezawodnie i może zawiesić lub pomylić konsolę zarządzania. Ponowne uruchamianie, a następnie pobieranie prac offline
Czasami jest to opcja - jeśli na przykład zatrzymałeś serwer WWW, który jest źródłem połączeń.
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-04-11 08:02:51
Spróbuj tego ...
DECLARE UserCursor CURSOR LOCAL FAST_FORWARD FOR
SELECT
spid
FROM
master.dbo.sysprocesses
WHERE DB_NAME(dbid) = 'dbname'--replace the dbname with your database
DECLARE @spid SMALLINT
DECLARE @SQLCommand VARCHAR(300)
OPEN UserCursor
FETCH NEXT FROM UserCursor INTO
@spid
WHILE @@FETCH_STATUS = 0
BEGIN
SET @SQLCommand = 'KILL ' + CAST(@spid AS VARCHAR)
EXECUTE(@SQLCommand)
FETCH NEXT FROM UserCursor INTO
@spid
END
CLOSE UserCursor
DEALLOCATE UserCursor
GO
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
2013-04-12 23:06:04
Żaden z nich nie działał dla mnie, nie mógł usunąć lub odłączyć obecnych użytkowników. Nie widać też żadnych aktywnych połączeń z DB. Ponowne uruchomienie SQL Server (kliknij prawym przyciskiem myszy i wybierz Restart) pozwoliło mi to zrobić.
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:04:56
Aby dodać do porad już udzielonych, jeśli masz aplikację internetową działającą przez IIS, która korzysta z DB, może być również konieczne zatrzymanie (nie recykling) puli aplikacji podczas przywracania, a następnie ponowne uruchomienie. Zatrzymanie puli aplikacji zabija aktywne połączenia http i nie pozwala na więcej, co w przeciwnym razie może doprowadzić do wyzwalania procesów, które łączą się i tym samym blokują bazę danych. Jest to znany problem na przykład z systemem zarządzania treścią Umbraco podczas przywracania its database
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
2013-07-31 00:30:05
Natknąłem się na ten problem podczas automatyzacji procesu przywracania w SQL Server 2008. Moje (udane) podejście było mieszanką dwóch udzielonych odpowiedzi.
Najpierw natknąłem się na wszystkie połączenia tej bazy danych i je zabiłem.DECLARE @SPID int = (SELECT TOP 1 SPID FROM sys.sysprocess WHERE dbid = db_id('dbName'))
While @spid Is Not Null
Begin
Execute ('Kill ' + @spid)
Select @spid = top 1 spid from master.dbo.sysprocesses
where dbid = db_id('dbName')
End
Następnie ustawiam bazę danych na tryb single_user
ALTER DATABASE dbName SET SINGLE_USER
Następnie uruchamiam restore...
RESTORE DATABASE and whatnot
Kill the connections again
(same query as above)
I ustaw bazę danych z powrotem na multi_user.
ALTER DATABASE dbName SET MULTI_USER
W ten sposób zapewniam, że nie ma żadnych połączeń zatrzymujących bazę danych przed ustawieniem na tryb pojedynczy, ponieważ pierwszy zostanie zamrożony, jeśli istnieją.
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-10-05 18:40:57
Żadne z powyższych nie zadziałało na mnie. Moja baza danych nie wykazała żadnych aktywnych połączeń przy użyciu Monitora aktywności lub sp_who. Ostatecznie musiałem:
- Kliknij prawym przyciskiem myszy węzeł bazy danych
- Wybierz " Odłącz..."
- Zaznacz pole "Drop Connections"
- Reattach
Nie jest to najbardziej eleganckie rozwiązanie, ale działa i nie wymaga ponownego uruchamiania serwera SQL (nie jest to dla mnie opcja, ponieważ serwer DB hostował kilka innych baz danych)
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-01-27 03:48:40