Ekstremalny czas oczekiwania podczas korzystania z bazy danych SQL Server w trybie offline

Próbuję wykonać konserwację offline (dev database restore from live backup) w mojej dev database, ale polecenie "Take Offline" za pośrednictwem SQL Server Management Studio wykonuje niezwykle powoli - na zamówienie 30 minut plus teraz. Jestem po prostu o mój rozum koniec i wydaje się, że nie mogę znaleźć żadnych odniesień w Internecie, co może być przyczyną problemu prędkości, lub jak to naprawić.

Niektóre witryny sugerują, że otwarte połączenia z bazą danych powodują to spowolnienie, ale jedyną aplikacją, która korzysta z tej bazy danych jest instancja IIS mojej maszyny deweloperskiej, a usługa jest zatrzymana - nie ma już otwartych połączeń.

Co może być przyczyną tego spowolnienia i co mogę zrobić, aby go przyspieszyć?

Author: Erik Forbes, 2009-04-30

17 answers

Po kilku dodatkowych wyszukiwaniach (nowe hasła zainspirowane odpowiedzią gbn i komentarzem u07ch do odpowiedzi KMike) znalazłem to, które zakończyło się pomyślnie w 2 sekundy:

ALTER DATABASE <dbname> SET OFFLINE WITH ROLLBACK IMMEDIATE

(Aktualizacja)

Gdy to nadal nie powiedzie się z następującym błędem, można go naprawić jako zainspirowany Ten post na blogu :

Zmiana bazy danych nie powiodła się, ponieważ blokada nie mogła zostać umieszczona w bazie danych 'dbname' spróbuj ponownie później.

Możesz uruchomić następujące polecenie, aby znaleźć out who is keeping a lock on your database:

EXEC sp_who2

I użyj tego, co SPID znajdziesz w następującej komendzie:

KILL <SPID>

Następnie uruchom ponownie polecenie ALTER DATABASE. Teraz powinno zadziałać.

 376
Author: Erik Forbes,
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-02-03 17:13:24

Istnieje najprawdopodobniej połączenie z DB skądś (rzadki przykład: asynchronous statistic update )

Aby znaleźć połączenia, użyj sys.sysprocesy

USE master
SELECT * FROM sys.sysprocesses WHERE dbid = DB_ID('MyDB')

Aby wymusić rozłączenie, użyj ROLLBACK IMMEDIATE

USE master
ALTER DATABASE MyDB SET SINGLE_USER WITH ROLLBACK IMMEDIATE
 120
Author: gbn,
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-01-23 08:45:17

Czy masz jakieś otwarte okna SQL Server Management Studio, które są podłączone do tego DB?

Włącz tryb pojedynczego użytkownika, a następnie spróbuj ponownie.

 25
Author: KM.,
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-05-30 09:36:33

W moim przypadku, po tak długim oczekiwaniu na zakończenie nie miałem cierpliwości i po prostu zamknąłem Studio zarządzania. Przed zakończeniem pokazywał komunikat o sukcesie, db jest offline. Pliki były dostępne do zmiany nazwy.

 16
Author: Rudy,
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-08-20 15:02:42

Uruchom procedurę składowaną sp_who2

To pozwoli Ci sprawdzić, czy nie ma żadnych blokad.. zabić ich powinno to naprawić.

 6
Author: woodwa,
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-01-24 03:16:05

W SSMS: kliknij prawym przyciskiem myszy ikonę SQL server, Monitor Aktywności. Otwarte Procesy. Znajdź przetworzone połączone. Kliknij prawym przyciskiem myszy proces, Zabij.

 5
Author: nzeemin,
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-12-10 16:23:13

Za każdym razem, gdy napotkasz tego typu rzeczy, zawsze powinieneś pomyśleć o swoim dzienniku transakcji. Alter db statment z rollback immediate wskazuje, że tak jest. Zobacz też: http://msdn.microsoft.com/en-us/library/ms189085.aspx

Kości na punktach kontrolnych itp. Musisz zdecydować, czy transakcje w twoim dzienniku są warte zapisania, czy nie, a następnie wybrać tryb, w którym odpowiednio uruchomisz swój db. Naprawdę nie ma powodu, abyś musiał czekać, ale także nie ma powodu, aby możesz stracić dane albo - możesz mieć oba.

 4
Author: yetanotherdave,
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
2009-04-30 18:25:36

Aby to obejść, zatrzymałem stronę, która była podłączona do db w IIS i natychmiast panel "zamrożony ""take db offline" został odmrożony.

 2
Author: Dan,
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-01-23 13:45:49

Zamknięcie instancji SSMS (SQL Service Manager), z której zostało wykonane żądanie rozwiązało problem dla mnie.....

 2
Author: Armand G.,
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-02-25 15:52:31

W moim przypadku przejrzałem kilka tabel w DB przed wykonaniem tej akcji. Moje konto użytkownika posiadało aktywne połączenie z tym DB w SSMS. Po odłączeniu od serwera w SSMS (pozostawiając otwarte okno dialogowe "weź bazę danych w trybie offline") operacja się powiodła.

 2
Author: RamenNoodle,
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-09-11 15:45:25

Zamknij również wszystkie otwarte okna zapytań, które są połączone z daną bazą danych;)

 1
Author: Steve Woods,
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-08-17 11:58:33

W SSMS Ustaw bazę danych na tylko do odczytu, a następnie z powrotem. Połączenia zostaną zamknięte, co uwalnia zamki.

W moim przypadku była strona internetowa, która miała otwarte połączenia z bazą danych. Ta metoda była dość łatwa:

  1. Kliknij prawym przyciskiem myszy bazę danych -> Właściwości - > Opcje
  2. Ustaw Database Read-Only Na True
  3. Kliknij "tak" w oknie dialogowym Ostrzeżenie SQL Server zamknie wszystkie połączenia z bazą danych.
  4. Ponownie otwórz Opcje i Wyłącz Tylko do odczytu
  5. Teraz spróbuj zmiana nazwy bazy danych lub wyłączenie jej.
 1
Author: zacharydl,
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-02-01 19:24:28

Dla mnie, po prostu musiałem przejść do Monitora aktywności zawodowej i zatrzymać dwie rzeczy, które były przetwarzane. Potem natychmiast się wyłączył. W moim przypadku, choć wiedziałem, co te 2 procesy były i że to było w porządku, aby je zatrzymać.

 0
Author: craig,
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-07-02 12:19:50

W moim przypadku zatrzymałem serwer Tomcat . potem natychmiast DB został wyłączony .

 0
Author: Java Main,
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-12-02 12:49:23

W moim przypadku baza danych była związana ze starą instalacją Sharepoint. Zatrzymywanie i wyłączanie powiązanych usług w Menedżerze serwerów "unhung" akcja take offline, która była uruchomiona przez 40 minut i zakończyła się natychmiast.

Możesz sprawdzić, czy jakieś usługi obecnie korzystają z bazy danych.

 0
Author: Jonathan,
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-08-11 18:45:21

Następnym razem, w oknie dialogowym Take Offline, pamiętaj, aby zaznaczyć pole wyboru "porzuć wszystkie aktywne połączenia". Byłem też na sql_express na lokalnej maszynie bez połączeń, ale to spowolnienie stało się dla mnie, chyba że sprawdziłem to pole wyboru.

 0
Author: Brett Drake,
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
2018-09-19 16:51:55

Wypróbowałem wszystkie poniższe sugestie i nic nie działało.

  1. EXEC sp_who
  2. Kill

  3. ALTER DATABASE SET SINGLE_USER WITH Rollback Immediate

    ALTER DATABASE SET OFFLINE WITH ROLLBACK IMMEDIATE

    Wynik: oba powyższe polecenia również zostały zablokowane.

4 . Kliknij prawym przyciskiem myszy bazę danych - > Właściwości - > Opcje Ustaw tylko do odczytu bazy danych na True Kliknij "Tak" w oknie dialogowym Ostrzeżenie SQL Server zamknie wszystkie połączenia z bazą danych.

Wynik: okno zostało zablokowane podczas wykonywania.

W ostateczności ponownie uruchomiłem usługę SQL server z configuration manager, a następnie uruchomiłem ALTER DATABASE SET OFFLINE z natychmiastowym wycofaniem. To działało jak czar

 0
Author: Viraj A,
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
2018-10-03 09:23:31