SQL Server w logistyce

Tabela _jobs w bazie danych SQL Server

Definicje zadań automatycznych — harmonogram, warunek wykonania, adresaci powiadomień i miejsce zapisu raportów.

sql.server.net.pl/sql/
Uśmiechnięty analityk w garniturze przy szerokim monitorze
Uśmiechnięty analityk w garniturze przy szerokim monitorze
W skrócie
  • Zadanie opisuje nie tylko co ma się wykonać, ale też kiedy, pod jakim warunkiem i kogo powiadomić o wyniku.
  • Harmonogram składa się z kilku niezależnych ustawień: cyklu, godziny, dni tygodnia oraz osobnych znaczników dla soboty i niedzieli.
  • Kolumna JEZELI_ZAPYTANIE pozwala uzależnić wykonanie od wyniku zapytania — zadanie działa tylko wtedy, gdy jest co robić.
  • Kolumna OSTATNIOWYKONANO jest pierwszym miejscem do sprawdzenia, gdy zadanie przestało działać niezauważenie.

Do czego służy tabela [dbo].[_jobs]

Część pracy systemu odbywa się bez udziału człowieka: kopie zapasowe, raporty wysyłane rano na skrzynkę kierownika, kontrola stanów minimalnych, przygotowanie plików do wymiany z kontrahentem. Tabela [dbo].[_jobs] jest miejscem, w którym te czynności są zdefiniowane — razem z harmonogramem i regułami powiadamiania.

Definicja zadania jest bogatsza, niż mogłoby się wydawać. Poza typem czynności i harmonogramem obejmuje warunek uruchomienia: kolumna JEZELI_ZAPYTANIE mieści polecenie SELECT, którego wynik decyduje, czy zadanie ma się wykonać, oraz jaka treść trafi w powiadomieniu. Pozwala to zbudować kontrolę działającą na zasadzie wyjątku — wiadomość przychodzi tylko wtedy, gdy coś wymaga uwagi, a nie codziennie niezależnie od sytuacji.

Osobną grupę stanowią ustawienia dotyczące wyniku: format pliku raportu, katalog zapisu, katalog kopii oraz trzy adresy odbiorców — główny, do wiadomości i ukryty. Kolumna CONNECTIONSTRINGNAME pozwala skierować zadanie na inną bazę niż domyślna, co przydaje się przy raportach zbierających dane z kilku instalacji.

Z czego składa się definicja zadania automatycznego
Harmonogram HarmonogramCykl, godzina, dni tygodnia i termin obowiązywania
Warunek WarunekZapytanie SELECT rozstrzyga, czy zadanie ma się wykonać
Czynność CzynnośćTyp zadania, parametry, format i katalog zapisu wyniku
Powiadomienie PowiadomienieTreść i adresaci — osobno dla wyniku pozytywnego i negatywnego

Rozdzielenie warunku od czynności pozwala budować kontrole działające na zasadzie wyjątku, zamiast codziennych raportów, których nikt nie czyta.

Budowa tabeli — wykaz kolumn

Trzydzieści pięć kolumn układa się w cztery czytelne grupy. Poniższy wykaz zachowuje ten podział.

Wykaz kolumn tabeli
KolumnaTypWymaganaZnaczenie
Identyfikacja zadania
ID_JOBSint
liczba całkowita
takUnikalny identyfikator wiersza tabeli
NAZWAvarchar(100)
tekst do 100 znaków
takNazwa zadania
TYPZADANIAvarchar(50)
tekst do 50 znaków
takTyp zadania do wykonania
PRXvarchar(3)
tekst do 3 znaków
takOznaczenie kodem PRX wiersza tabeli
ACHvarchar(1)
tekst do 1 znaków
takOznaczenie stanu wiersza tabeli
AKTYWNEbit
wartość logiczna 0/1
takOznaczenie czy dany wiersz tabeli jest aktywny czy nie
SYSTEMOWEbit
wartość logiczna 0/1
takOznaczenie czy zapis w bazie ROOT jest systemowy i czy będzie instalowany podczas synchornizacji struktury bazy danych
KIEDYdatetime
data i godzina
takData i czas zapisu wiersza w tabeli - dodania zadania
LASTUPDATEtimestamp
znacznik wersji wiersza
nieCzas ostatniej aktualizacji zadania
Harmonogram
CYKLICZNOSCint
liczba całkowita
takOznaczenie cyklu do wykonania
CYKLICZNOSCTYPEvarchar(10)
tekst do 10 znaków
takTyp cykliczności do wykonania zadania
GODZINAtime
godzina
nieGodzina o której ma być realizowane zadanie
DNIZADANIAint
liczba całkowita
takDni tygodnia w których zadanie ma być wykonywane, np. Jeśli chcemy zadanie codziennie od pon do piątku wpisujemy: 1,2,3,4,5
ZADANIESOBOTAbit
wartość logiczna 0/1
takOznaczenie czy zadanie ma być wykonywane w sobotę
ZADANIENIEDZIELAbit
wartość logiczna 0/1
takOznaczenie czy zadanie ma być wykonywane w niedzielę
TERMINdate
data
nieDzień do którego zadanie ma być wykonywane - termin realizacji
OSTATNIOWYKONANOdatetime
data i godzina
nieData i czas ostatniego wykonania zadania
Warunek wykonania
JEZELI_ZAPYTANIEvarchar(max)
tekst bez limitu długości
nieZapytanie SELECT zwaracające wyniki dla pól JEZELI_TAK, JEZELI_NIE, JEZELI_TAK_MAIL, JEZELI_NIE_MAIL
JEZELI_TAKbit
wartość logiczna 0/1
nieOkreślenie, czy polecenie ma zostać wykonywane w zależności od wyników zapytania w polu JEZELI_ZAPYTANIE
JEZELI_NIEbit
wartość logiczna 0/1
nieOkreślenie, czy polecenie ma zostać wykonywane w zależności od wyników zapytania w polu JEZELI_ZAPYTANIE
JEZELI_TAK_MAILvarchar(max)
tekst bez limitu długości
nieTreść wiadomości e-mail, w zależności od wyników zapytania w polu Zapytanie jeżeli
JEZELI_NIE_MAILvarchar(max)
tekst bez limitu długości
nieTreść wiadomości e-mail, w zależności od wyników zapytania w polu Zapytanie jeżeli
Wynik i powiadomienia
MAILPOWIADOMIENIEvarchar(max)
tekst bez limitu długości
nieAdres mailowy do wysłania powiadomienia o wykonaniu zadania lub wysłania raportu
MAILPOWIADOMIENIEDWvarchar(max)
tekst bez limitu długości
nieAdres mailowy do wysłania powiadomienia o wykonaniu zadania lub wysłania raportu
MAILPOWIADOMIENIEUDWvarchar(max)
tekst bez limitu długości
nieAdres mailowy do wysłania powiadomienia o wykonaniu zadania lub wysłania raportu
FORMATvarchar(10)
tekst do 10 znaków
nieFormat pliku raportu z wykonanego zadania - raportu
SCIEZKARAPORTUvarchar(250)
tekst do 250 znaków
nieFolder do umieszczania raportów wykonywanych przez zadania automatyczne
FOLDERKOPIIvarchar(200)
tekst do 200 znaków
nieOznaczenie folderu gdzie mają być wykonywane kopie
RODZAJKOPIIvarchar(20)
tekst do 20 znaków
nieRodzaj kopii
ID_RAPint
liczba całkowita
takUnikalny identyfikator raportu
PARAMETRYvarchar(max)
tekst bez limitu długości
nieMiejsce na wprowadzenie parametrów do wykonywanego zadania
CONNECTIONSTRINGNAMEvarchar(200)
tekst do 200 znaków
nieNazwa połączenia dobazy danych
UZYTKOWNIKvarchar(150)
tekst do 150 znaków
nieNazwa użytkownika zadania
LOGOWANIEbit
wartość logiczna 0/1
takOznaczenie czy wymagane jest lgowanie, czy też zadanie wykonywane jest automatycznie
NRIDODNvarchar(20)
tekst do 20 znaków
nieIdentyfikator kontrahenta

Kolumna DNIZADANIA koduje dni tygodnia liczbowo, a soboty i niedziele mają dodatkowo własne znaczniki. Przy zmianie harmonogramu trzeba sprawdzić wszystkie trzy ustawienia — pominięcie jednego jest częstą przyczyną zadań wykonujących się w nieoczekiwane dni.

Indeksy i wydajność zapytań

Tabela zawiera zwykle od kilku do kilkudziesięciu wierszy i jest odczytywana w całości przy każdym przebiegu harmonogramu, dlatego indeksowanie ogranicza się do klucza głównego.

Indeksy zdefiniowane na tabeli
IndeksKolumnyRodzaj
PK__jobsID_JOBSklucz główny

Klucz główny na kolumnie ID_JOBS w zupełności wystarcza. Odczyt całej tabeli przy takiej liczbie wierszy jest tańszy niż utrzymywanie dodatkowych indeksów, a zadania są modyfikowane rzadko.

Dlaczego zadania automatyczne przestają działać niezauważenie

Awaria zadania automatycznego różni się od awarii ekranu jedną cechą: nikt jej nie zgłasza. Użytkownik zauważy zablokowany formularz natychmiast, a brak porannego raportu — czasem po tygodniu. Poniżej najczęstsze przyczyny cichych przestojów.

Ciche awarie zadań automatycznych
PrzyczynaJak ją rozpoznaćZapobieganie
Upłynął termin z kolumny TERMINData w kolumnie jest wcześniejsza niż dzisiejszaKontrola zadań zbliżających się do terminu
Zmiana hasła konta z kolumny UZYTKOWNIKZadanie przestaje działać w dniu zmiany hasłaKonto techniczne z hasłem niepodlegającym wygaśnięciu
Warunek SELECT nigdy nie zwraca wynikuOSTATNIOWYKONANO nie zmienia się mimo aktywnego zadaniaSprawdzenie zapytania warunkowego po zmianach w danych
Katalog zapisu przestał być dostępnyZadanie kończy się błędem, raport nie powstajeMonitorowanie rejestru błędów pod kątem zadań
Zadanie wyłączone znacznikiem AKTYWNEKolumna ma wartość 0, często po pracach serwisowychPrzegląd listy zadań po każdych pracach na bazie

Wspólny mianownik: kolumna OSTATNIOWYKONANO ujawnia wszystkie te sytuacje, o ile ktoś do niej zagląda.

Najprostsze zabezpieczenie to zadanie kontrolujące pozostałe zadania — codzienne zapytanie sprawdzające, które definicje mają datę ostatniego wykonania starszą niż wynikałoby z ich cyklu. Wysłane na jeden adres, zajmuje minutę pracy i wychwytuje wszystkie przypadki z powyższej tabeli.

Jak korzystać z tabeli w praktyce

Przy definiowaniu i utrzymaniu zadań automatycznych warto trzymać się kilku zasad:

  • Nadawaj w kolumnie NAZWA opis zrozumiały dla osoby, która zobaczy zadanie po raz pierwszy — nazwy techniczne utrudniają późniejszą diagnozę.
  • Ustawiaj powiadomienia warunkowe zamiast codziennych; raport przychodzący bez wyjątku przestaje być czytany po kilku tygodniach.
  • Rozkładaj godziny uruchomienia — kilka zadań startujących o tej samej minucie potrafi obciążyć serwer bardziej niż praca użytkowników.
  • Sprawdzaj kolumnę OSTATNIOWYKONANO cyklicznie; to jedyny sygnał, że zadanie przestało działać.
  • Testuj zapytanie z kolumny JEZELI_ZAPYTANIE osobno przed zapisaniem definicji — błąd w nim wstrzymuje całe zadanie.
  • Używaj konta technicznego w kolumnie UZYTKOWNIK, z hasłem niepodlegającym wygaśnięciu; zadania oparte na koncie pracownika przestają działać przy zmianie hasła.

Kontrola zadań, które mimo aktywnego statusu nie wykonały się w ciągu ostatniej doby:

SELECT  NAZWA,
        TYPZADANIA,
        CYKLICZNOSCTYPE,
        GODZINA,
        OSTATNIOWYKONANO,
        TERMIN,
        DATEDIFF(HOUR, OSTATNIOWYKONANO, GETDATE()) AS GODZIN_TEMU
FROM    dbo._jobs
WHERE   AKTYWNE = 1
  AND   (OSTATNIOWYKONANO IS NULL
         OR OSTATNIOWYKONANO < DATEADD(DAY, -1, GETDATE()))
ORDER BY OSTATNIOWYKONANO;

Wiersze z pustą kolumną OSTATNIOWYKONANO wymagają osobnej uwagi — oznaczają zadania, które nie wykonały się ani razu od chwili zdefiniowania.

Automatyzacja odciąża zespół tylko wtedy, gdy ktoś pilnuje, że nadal działa. Jedno zadanie kontrolujące pozostałe kosztuje kilkanaście minut konfiguracji i zamyka lukę, przez którą najczęściej wypadają raporty i kopie zapasowe.

Powiązane tabele i dokumentacja

Zadania automatyczne korzystają z definicji zapytań i raportów opisanych w pozostałych tabelach systemowych:

FAQ

Najczęściej zadawane pytania o tabelę _jobs

01

Jak działa warunkowe uruchamianie zadania?

Kolumna JEZELI_ZAPYTANIE mieści polecenie SELECT. Jego wynik rozstrzyga, czy zadanie ma się wykonać, a kolumny JEZELI_TAK_MAIL i JEZELI_NIE_MAIL określają treść powiadomienia w każdym z przypadków. Pozwala to wysyłać wiadomość tylko wtedy, gdy coś wymaga reakcji.

02

Dlaczego zadanie przestało się wykonywać bez żadnego komunikatu?

Najczęstsze przyczyny to upłynięcie daty w kolumnie TERMIN, wyłączenie znacznikiem AKTYWNE albo wygaśnięcie hasła konta wskazanego w kolumnie UZYTKOWNIK. Wszystkie te przypadki ujawnia kolumna OSTATNIOWYKONANO — jej wartość przestaje się zmieniać.

03

Po co trzy osobne kolumny z adresami e-mail?

Odpowiadają trzem polom wiadomości: adresatowi głównemu, kopii oraz kopii ukrytej. Podział pozwala wysłać raport osobie odpowiedzialnej, a jej przełożonego umieścić w kopii — bez tworzenia osobnych definicji zadania dla każdego odbiorcy.

04

Czy zadanie może pobierać dane z innej bazy?

Tak. Kolumna CONNECTIONSTRINGNAME wskazuje połączenie, na którym zadanie ma się wykonać. Domyślnie jest to baza podstawowa, ale podanie innej nazwy pozwala zbudować raport zbiorczy obejmujący kilka instalacji albo pobierający dane z systemu finansowo-księgowego.

Słownik pojęć

Słownik pojęć

Pojęcia związane z automatyzacją zadań po stronie bazy danych.

MMicrosoft SQL Server
Serwer relacyjnej bazy danych, na którym pracują aplikacje SoftwareStudio. Odpowiada za spójność danych, uprawnienia dostępu, kopie zapasowe i wydajność zapytań.
TT-SQL
Transact-SQL — dialekt języka SQL używany w Microsoft SQL Server. Służy do zapytań, procedur składowanych, wyzwalaczy i logiki uruchamianej po stronie serwera.
KKopia zapasowa
Zabezpieczona kopia bazy danych pozwalająca odtworzyć stan systemu po awarii. W SQL Server wykonuje się ją w trybie pełnym, różnicowym lub jako kopię dziennika transakcji.
RRaportowanie
Przetwarzanie danych operacyjnych w zestawienia wspierające decyzje. W SQL Server realizowane zapytaniami, widokami i narzędziami analitycznymi.
PPowiadomienia SMS i e-mail
Automatyczne komunikaty wysyłane po zajściu zdarzenia w systemie — potwierdzeniu awizacji, zmianie statusu reklamacji czy zbliżającym się terminie przeglądu.
HHarmonogram
Plan przypisujący zadania do zasobów i przedziałów czasu. W wersji online widoczny natychmiast dla wszystkich zainteresowanych.
IIndeks bazodanowy
Struktura przyspieszająca wyszukiwanie wierszy w tabeli. Dobrze dobrane indeksy skracają czas zapytań, ale spowalniają zapisy i zajmują miejsce na dysku.
EEksport do Excela
Przekazanie danych z systemu do arkusza kalkulacyjnego. Wygodne przy analizie doraźnej, ale kopia w arkuszu natychmiast przestaje być aktualna.

Zobacz to w praktyce

Sprawdź, jak systemy SoftwareStudio oparte na MS SQL Server wspierają ten obszar Twojej firmy.