- Zadanie jest zleceniem dla usługi działającej w tle — najczęściej przygotowania i wysłania wiadomości z załącznikiem.
- Kolumna
ZALACZNIKIprzechowuje lokalizację plików, nie ich zawartość, co utrzymuje tabelę w rozsądnym rozmiarze. - Powiązanie z klientem i zgłoszeniem odbywa się przez kolumny
NRIDODNorazNRIDCRM. - Kolumna
STATUSmieści opis przebiegu realizacji — pierwsze miejsce do sprawdzenia, gdy zadanie nie doszło do skutku.
Do czego służy tabela [dbo].[_task]
Część czynności nie może zostać wykonana w chwili, gdy użytkownik klika przycisk: przygotowanie raportu z załącznikiem, wysyłka do kilkuset odbiorców, operacja wymagająca dostępu do zasobów sieciowych. Tabela [dbo].[_task] jest kolejką takich zleceń, odbieraną przez usługę wykonawczą działającą w tle.
Struktura przypomina kolejkę wiadomości, ale zakres jest szerszy. Poza tematem, treścią i adresatami wiersz zawiera wskazanie załączników, powiązanie z klientem oraz ze zgłoszeniem w module obsługi klienta. Kolumna REFNO_SEND wiąże zadanie z konkretną wysyłką, dzięki czemu da się prześledzić drogę od zlecenia do nadanej wiadomości.
Kolumna ZALACZNIKI przechowuje lokalizację plików, a nie ich zawartość — decyzja projektowa o wyraźnych konsekwencjach. Tabela pozostaje niewielka nawet przy zadaniach obejmujących duże raporty, ale poprawność działania zależy od dostępności zasobu sieciowego w chwili wykonania. Przeniesienie katalogu albo zmiana uprawnień do niego objawi się niewykonanymi zadaniami, nie błędem bazy.
Załączniki są wskazywane ścieżką, nie przechowywane w bazie — dostępność zasobu sieciowego jest więc warunkiem wykonania zadania.
Budowa tabeli — wykaz kolumn
Osiemnaście kolumn opisuje treść zadania, jego adresatów oraz powiązania z klientem i wysyłką.
| Kolumna | Typ | Wymagana | Znaczenie |
|---|---|---|---|
| Treść zadania | |||
TEMAT | varchar(200) tekst do 200 znaków | nie | Temat zadania np. temat maila do wysyłki |
TRESC | varchar(max) tekst bez limitu długości | nie | Treść zadania np. treść maila do wysyłki |
ZALACZNIKI | varchar(max) tekst bez limitu długości | nie | Lokalizacja zapisu załącznika wysyłanego w mailu |
STATUS | varchar(max) tekst bez limitu długości | nie | Status realizacji zadania |
| Adresaci i konto | |||
EMAIL | varchar(150) tekst do 150 znaków | nie | Adres email na który my być wysłana wiadomość |
DW | varchar(150) tekst do 150 znaków | nie | Adres email do wiadomości |
UDW | varchar(150) tekst do 150 znaków | nie | Adres emai UDW |
KONTOMAIL | varchar(5) tekst do 5 znaków | nie | Konto mailowe ze skorowidza KEML |
REPEAT | int liczba całkowita | tak | Ilosc powtorzen wysylanego maila |
| Powiązania i metryka | |||
ID_TASK | int liczba całkowita | tak | Unikalny identyfikator wiersza tabeli |
REFNO | bigint liczba całkowita 64-bitowa | tak | Systemowy numer referencyjny |
REFNO_SEND | bigint liczba całkowita 64-bitowa | tak | Nr referencyjny wysyłki |
NRIDODN | bigint liczba całkowita 64-bitowa | tak | Numer ID klienta |
NRIDCRM | bigint liczba całkowita 64-bitowa | nie | Numer ID z KNCRM |
PRX | varchar(5) tekst do 5 znaków | nie | Kod pozwalający podzielić zapisywane rekordy na poszczególne źródła |
ROLASYS | varchar(3) tekst do 3 znaków | nie | Kod roli systemowej |
KIEDY | datetime data i godzina | tak | Data i godzina dopisania rekordu |
LOGIN | varchar(50) tekst do 50 znaków | nie | Nazwa użytkownika generującego zadania |
Kolumna STATUS ma typ varchar(max) i mieści opis przebiegu realizacji, a nie kod stanu. Utrudnia to filtrowanie, ale pozwala zapisać treść błędu zwróconego przez usługę — co bywa cenniejsze niż sam status.
Indeksy i wydajność zapytań
Dwa indeksy odpowiadają dwóm zastosowaniom: odnalezieniu pojedynczego zadania i zestawieniu zadań powiązanych z jedną wysyłką.
| Indeks | Kolumny | Rodzaj |
|---|---|---|
PK__task | ID_TASK | klucz główny |
REFNO_SEND_PRX_REPEAT | REFNO_SEND, PRX, REPEAT | zwykły |
Indeks złożony REFNO_SEND_PRX_REPEAT pozwala usłudze pobrać zadania powiązane z daną wysyłką, ograniczone do jednego źródła i liczby prób. Zwraca uwagę brak indeksu na kolumnie KIEDY — przy narastającej kolejce zapytania o zadania z ostatniej doby wymuszają przejrzenie całej tabeli.
Załączniki wskazywane ścieżką — konsekwencje wyboru
Decyzja o przechowywaniu ścieżki zamiast zawartości pliku ma zalety i wady, które ujawniają się w różnych momentach eksploatacji.
| Zagadnienie | Ścieżka (obecne rozwiązanie) | Zawartość w bazie |
|---|---|---|
| Rozmiar bazy | Bez wpływu | Rośnie proporcjonalnie do liczby i wielkości plików |
| Kopia zapasowa | Nie obejmuje plików — potrzebna osobna | Obejmuje wszystko w jednej operacji |
| Przeniesienie na inny serwer | Wymaga zachowania ścieżek albo ich aktualizacji | Pliki przenoszą się razem z bazą |
| Dostęp usługi | Zależy od uprawnień do zasobu sieciowego | Wystarczą uprawnienia do bazy |
| Odtworzenie archiwalnego zadania | Możliwe tylko, gdy plik nadal istnieje | Zawsze możliwe |
Trzy ostatnie wiersze opisują sytuacje, w których obecne rozwiązanie wymaga świadomej procedury zamiast polegania na samej bazie.
Praktyczny wniosek: procedura tworzenia kopii zapasowej musi obejmować katalog załączników, a procedura przenoszenia instalacji — sprawdzenie uprawnień usługi do zasobu sieciowego. Oba punkty bywają pomijane, bo baza po migracji działa poprawnie, a niewykonane zadania nie zgłaszają się same.
Jak korzystać z tabeli w praktyce
Przy pracy z kolejką zadań warto trzymać się poniższych zasad:
- Sprawdzaj kolumnę
STATUSjako pierwszą, gdy zadanie nie zostało wykonane — mieści treść błędu zwróconego przez usługę. - Kontroluj dostępność ścieżek z kolumny
ZALACZNIKIpo każdej zmianie serwera plików albo uprawnień. - Obejmij katalog załączników procedurą tworzenia kopii zapasowej; baza sama go nie zabezpiecza.
- Ustaw próg dla kolumny
REPEAT, po którym zadanie przestaje być ponawiane i trafia do przeglądu. - Rozważ indeks na kolumnie
KIEDY, jeżeli kolejka narasta — zapytania o ostatnią dobę wymuszają obecnie odczyt całej tabeli. - Archiwizuj zadania wykonane; kolumny
TRESCiSTATUSmają typvarchar(max)i szybko powiększają tabelę.
Zadania niezrealizowane mimo powtórzonych prób, wraz z początkiem opisu statusu:
SELECT t.ID_TASK,
t.KIEDY,
LEFT(t.TEMAT, 60) AS TEMAT,
t.EMAIL,
t.REPEAT AS PROB,
LEFT(t.STATUS, 200) AS STATUS_OPIS
FROM dbo._task AS t
WHERE t.REPEAT > 2
AND t.KIEDY >= DATEADD(DAY, -14, GETDATE())
ORDER BY t.REPEAT DESC, t.KIEDY DESC;
Jeżeli w kolumnie statusu powtarza się komunikat o braku dostępu do pliku, przyczyną jest zwykle zmiana uprawnień usługi do zasobu sieciowego, a nie sama treść zadania.
Zadania wykonywane w tle działają dobrze do momentu, w którym coś zmieni się poza bazą danych — ścieżka, uprawnienie, konto usługi. Rejestr statusów pozwala to wykryć w kilka minut, ale tylko wtedy, gdy ktoś regularnie do niego zagląda albo ustawi na niego kontrolę.
Powiązane tabele i dokumentacja
Kolejka zadań współpracuje z pozostałymi mechanizmami automatyzacji i powiadamiania: