Serwisanci dostępni teraz · czynne całą dobę, także w weekendy i świętaWarszawa i okolice · dojazd bezpłatny
Darmowa diagnoza laptopa
Darmowa diagnoza laptopa
Dojazd do klienta bezpłatnie
Dojazd do klienta bezpłatnie
Laptopy zastępcze bezpłatnie
Laptopy zastępcze bezpłatnie
Odbiór i zwrot sprzętu bezpłatnie
Odbiór i zwrot sprzętu bezpłatnie

Database Mail

Termin Definicja
Database Mail

Database Mail to mechanizm SQL Server umożliwiający wysyłkę wiadomości e-mail bezpośrednio z poziomu bazy danych.

Rola Database Mail w SQL Server

Database Mail to wbudowany w Microsoft SQL Server mechanizm służący do wysyłania wiadomości poczty elektronicznej z poziomu aparatu bazodanowego. Pozwala przekazywać komunikaty generowane przez procedury składowane, zadania SQL Server Agent, alerty oraz inne elementy środowiska SQL Server. Wiadomość jest przygotowywana przez procedurę sp_send_dbmail, a następnie przekazywana do wewnętrznej kolejki Database Mail. Dzięki temu wykonanie polecenia nie musi oczekiwać na zakończenie całej transmisji SMTP.

Database Mail nie jest osobnym serwerem pocztowym. SQL Server korzysta z określonego profilu Database Mail i przypisanego do niego konta pocztowego, które zawiera dane potrzebne do połączenia z serwerem SMTP. Profil może być publiczny albo prywatny. Profil publiczny może być używany przez uprawnionych użytkowników bez indywidualnego przypisania, natomiast profil prywatny jest dostępny tylko dla wskazanych podmiotów zabezpieczeń w bazie msdb. Takie rozdzielenie pozwala kontrolować, które konta mogą wysyłać wiadomości.

Konto, profil i przekazanie wiadomości do SMTP

Konfiguracja Database Mail obejmuje co najmniej konto pocztowe, profil oraz uprawnienia do korzystania z profilu. Konto określa nazwę nadawcy, adres e-mail, nazwę serwera SMTP, numer portu i sposób uwierzytelniania. Profil jest logicznym zbiorem jednego lub większej liczby kont. Jeżeli profil zawiera kilka kont, Database Mail może próbować użyć kolejnego konta, gdy wcześniejsze nie powiedzie się zgodnie z zasadami obsługi kolejki i ponawiania wysyłki.

Wiadomość można wysłać między innymi za pomocą procedury msdb.dbo.sp_send_dbmail. Parametry tej procedury określają odbiorców, temat, treść, format treści, profil oraz opcjonalne załączniki. Procedura może również wykonać zapytanie i dołączyć jego wynik do wiadomości. Samo wywołanie nie oznacza jeszcze, że odbiorca otrzymał e-mail. Oznacza przede wszystkim dodanie żądania do kolejki Database Mail, a dalsza obsługa odbywa się przez proces zewnętrzny względem sesji wykonującej polecenie.

Treść wiadomości może być zwykłym tekstem albo dokumentem HTML, jeżeli parametr @body_format zostanie ustawiony na HTML. Przy używaniu wyników zapytań trzeba uwzględnić ich formatowanie, ograniczenia długości oraz uprawnienia konta wykonującego zapytanie. Załącznik musi być dostępny dla procesu SQL Server w sposób zgodny z konfiguracją środowiska. Błędna ścieżka, brak dostępu do pliku albo nieprawidłowy profil może spowodować odrzucenie wiadomości jeszcze przed kontaktem z serwerem SMTP.

Kolejka, statusy i diagnostyka wysyłki

Database Mail zapisuje informacje o wysłanych, oczekujących i nieudanych wiadomościach w bazie msdb. Do analizy historii służą między innymi widoki sysmail_allitems, sysmail_sentitems, sysmail_unsentitems oraz sysmail_faileditems. Szczegółowe komunikaty procesu wysyłki można sprawdzać w widoku sysmail_event_log. Te dane pozwalają odróżnić kilka różnych sytuacji: wiadomość oczekującą w kolejce, wiadomość przekazaną do SMTP, błąd uwierzytelniania oraz problem z połączeniem lub adresem odbiorcy.

Istotne jest rozróżnienie pomiędzy statusem zapisanym przez SQL Server a faktycznym dostarczeniem wiadomości do skrzynki. SQL Server może uznać operację za wysłaną po poprawnym przekazaniu komunikatu do serwera SMTP, ale nie potwierdza w ten sposób, że wiadomość została zaakceptowana przez docelowy serwer, dostarczona do skrzynki albo wyświetlona przez odbiorcę. Przy analizie problemu należy więc sprawdzić zarówno historię Database Mail, wpisy w dzienniku zdarzeń, jak i odpowiedź serwera SMTP.

Typowe przyczyny niepowodzeń obejmują nieprawidłową nazwę hosta SMTP, zamknięty port, błędne dane uwierzytelniające, wymaganie szyfrowania TLS niezgodne z konfiguracją konta, odrzucenie adresu nadawcy oraz limit rozmiaru wiadomości lub załącznika. Warto również sprawdzić, czy Database Mail jest uruchomiony i czy kolejka nie została zatrzymana. Do kontroli stanu kolejek oraz usług Database Mail służą procedury administracyjne udostępniane przez SQL Server, w tym sysmail_help_queue_sp i sysmail_help_status_sp.

Bezpieczne użycie w zadaniach SQL Server Agent

Jednym z częstych zastosowań Database Mail jest powiadamianie o wyniku zadań SQL Server Agent. Zadanie może wysłać komunikat po zakończeniu kopii zapasowej, wykonaniu importu, niepowodzeniu procedury albo przekroczeniu określonego warunku. W tym scenariuszu trzeba sprawdzić, czy operator SQL Server Agent ma poprawnie skonfigurowany profil pocztowy oraz czy konto używane do uruchomienia kroku ma uprawnienia do wykonania wymaganej procedury i zapytania.

Przy diagnostyce komputera, na którym działa SQL Server, warto rozdzielić problemy silnika bazy danych od problemów infrastruktury pocztowej. Brak wiadomości nie musi oznaczać uszkodzenia bazy. Przyczyną może być zatrzymana kolejka, niedostępny serwer SMTP, zmienione wymagania uwierzytelniania albo odrzucenie komunikatu przez serwer pośredni. Prawidłowa analiza powinna rozpocząć się od sprawdzenia konfiguracji profilu, historii konkretnej wiadomości i wpisu błędu, a dopiero potem obejmować test połączenia oraz weryfikację zadania, które wywołało wysyłkę.

Database Mail dotyczy środowiska administracji i obsługi Microsoft SQL Server, dlatego jego konfiguracja wymaga dostępu do instancji, bazy msdb oraz używanego serwera SMTP. Błędne zmiany w profilu, uprawnieniach lub zadaniach mogą przerwać automatyczne powiadomienia, mimo że sam SQL Server nadal wykonuje zapytania. Przy pracy z takim środowiskiem należy zachować kopię ustawień, dokumentować zmianę parametrów i potwierdzać rezultat na podstawie statusów oraz logów, a nie wyłącznie na podstawie komunikatu zwróconego przez pojedyncze wywołanie sp_send_dbmail.

+48 22 100 48 29Zadzwoń teraz · serwisant w 1 godzinę