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ć?
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ć.
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
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.
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.
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ć.
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.
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.
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.
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.....
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.
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;)
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:
- Kliknij prawym przyciskiem myszy bazę danych -> Właściwości - > Opcje
- Ustaw
Database Read-Only
Na True - Kliknij "tak" w oknie dialogowym Ostrzeżenie SQL Server zamknie wszystkie połączenia z bazą danych.
- Ponownie otwórz Opcje i Wyłącz Tylko do odczytu
- Teraz spróbuj zmiana nazwy bazy danych lub wyłączenie jej.
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ć.
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 .
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.
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.
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.
- EXEC sp_who
-
Kill
-
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
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