Ponieważ jestem DBA (aw wielu przypadkach de facto sysadmin), SQL Server jest instalowany na prawie każdym serwerze, z którym muszę regularnie pracować. Ostatnio zdałem sobie sprawę, że używam SQL Agenta jako harmonogramu zadań w prawie każdym przypadku, a nie natywnego harmonogramu zadań Windows.
Z mojej perspektywy SQL Agent ma wiele zalet w porównaniu z natywnym Harmonogramem zadań Windows:
- Zdalne (z mojej stacji roboczej) uruchamianie / zatrzymywanie / monitorowanie zadań
- Wspólne harmonogramy (zamiast każdego zadania na własną rękę)
- Wiele kroków i kontrola przepływu
- Różne rodzaje zadań
- Alerty o niepowodzeniu / zakończeniu
- Może być skonfigurowany do działania jako różni użytkownicy
- (Umiarkowanie) opisowe komunikaty o błędach, a nie tylko kod błędu
Nie mogę jednak uniknąć wrażenia, że jest to zła praktyka - agent SQL powinien być zarezerwowany tylko do zadań związanych z bazą danych i powinienem pozostawić zadania na poziomie systemu operacyjnego uruchomione w Harmonogramie zadań systemu Windows, pomimo mojej niechęci do jego użyteczności.
Czy można w ten sposób polegać na agencie SQL? Jeśli nie, czy powinienem rozważyć harmonogram zadań systemu Windows innej firmy, aby uzyskać niektóre z funkcji, których szukam?
Odpowiedzi:
Osobiście uważam, że największym zastrzeżeniem byłaby trudność w utrzymaniu uporządkowanej listy miejsc pracy. O ile mi wiadomo, nie można tworzyć folderów do organizowania zadań, więc duża liczba byłaby uciążliwa. Nie jestem tego jednak w 100% pewien, ponieważ żaden z moich serwerów nie ma więcej niż kilkanaście zadań. Server 2008 i późniejsze Harmonogram zadań pozwala na znacznie łatwiejszą organizację, IMO, i ogólnie ma znacznie lepszą funkcjonalność niż poprzednie wersje. Jestem pewien, że aplikacje innych firm wykonują jeszcze lepszą pracę. Płakałbym, gdybym musiał użyć harmonogramu zadań Server 2003 lub
at.exe
.Drugim zastrzeżeniem, które mogę wymyślić, byłoby potencjalnie zbyt duże obciążenie serwera SQL. Agent jest małym programem, ale wykonywanie długiego lub złożonego zadania może z łatwością zużyć wiele zasobów. Te zasoby nie byłyby dostępne dla silnika SQL. Ponieważ silnik SQL jest zaprogramowany tak, aby zajmował około 80% dostępnej pamięci systemowej, może to stanowić problem.
Po trzecie, problemem może być tworzenie kopii zapasowych. Będziesz musiał nie tylko wykonać kopię zapasową systemu plików, ale także bazy danych msdb, aby umożliwić odzyskanie zadań (lub użyć czegoś do skryptu zadań do pliku tekstowego). To dodaje warstwę złożoności do odzyskiwania po awarii.
Wreszcie, nie chcesz być w sytuacji, w której płacisz za licencję na SQL Server tylko po to, aby uruchomić SQL Server Agent. Jeśli baza danych zostanie wycofana z eksploatacji, musisz opracować plan migracji z SQL Server Agent.
źródło
W poprzednim zadaniu robiłem dokładnie to, głównie dlatego, że wszystkie zadania były uruchamiane z naszego centralnego, podstawowego klastra, który był najbardziej widocznym serwerem. Widziałem wszystkie nasze zaplanowane zadania w jednym miejscu zamiast konieczności sprawdzania wiersza poleceń na kilku serwerach.
Chociaż jest to w dużej mierze subiektywne (i ciężko będzie uzyskać „poprawną” odpowiedź w tym formacie), nie sądzę, aby w tym podejściu było coś złego poza tym, że stało się ono pojedynczym punktem niepowodzenia.
Może to nie być istotne, jeśli wszystkie zadania współdziałają z serwerem bazy danych lub są zależne od uruchomionego serwera bazy danych i usług SQL Server (w naszym przypadku tak było).
Aha, musisz dodać obsługę błędów w przypadkach, gdy serwer, na którym zadanie próbuje uruchomić, nie działa - coś, czego nie musiałbyś robić, gdyby zadanie zostało skonfigurowane na tym serwerze.
źródło
~ Prawdopodobnie ~ wziąłbym agenta SQL nad menedżerem zadań Windows ... oczywiście w przypadku zadań związanych z bazą danych.
Jeśli możesz w ogóle kodować lub masz osoby, które potrafią kodować, możesz zrobić sporo z aplikacjami konsoli i zawinąć je w kreatora usług, takiego jak TopShelf (http://topshelf-project.com/). Może to być tani / łatwy hack, aby uzyskać trochę odsprzęgania od agenta SQL dla wszystkiego i zacząć dawać również warstwę do kolejkowania, jeśli jesteś w tym momencie.
Osobiście wydajesz się, że troszczysz się o to wystarczająco dobrze, a także wiesz wystarczająco dużo o swoich problemach, że myślę, że nic ci nie będzie. Ludzie się tym nie przejmują / wiedzą, że naprawdę się o mnie martwię. Nie mam wątpliwości, że będziesz oceniać swoje rozwiązania w rozsądnych odstępach czasu i postępować zgodnie z nimi.
źródło
Inną opcją jest utworzenie tabeli dla zaplanowanych zadań za pomocą procedury składowanej, aby zaktualizować z niej tabelę kolejek komunikatów. Następnie SQL Server Agent co jakiś czas wywoływał procedurę przechowywaną, aby tworzyć komunikaty i aktualizować status zadania. Inne systemy sprawdzałyby tabelę kolejek komunikatów za pośrednictwem połączenia SQL lub warstwy interfejsu API sieci Web jako JSON.
źródło