2009.06_Database Mail _[Bazy Danych].pdf

(736 KB) Pobierz
441073448 UNPDF
Bazy danych
Database Mail
Konfiguracja i wykorzystanie usługi w SQL Server 2005/2008
Podczas implementacji aplikacji biznesowych niejednokrotnie pojawia się
wymaganie wysyłania do użytkowników wiadomości e-mail, zawierające
potwierdzenia lub inne informacje pochodzące bezpośrednio z systemu
źródłowego. W artykule tym przedstawię sposób, w jaki można spełnić to
wymaganie wykorzystując do tego serwer bazy danych.
Dowiesz się:
• Jak uruchomić, skonigurować i zarządzać
usługą Database Mail;
• Jak wysyłać wiadomości e-mail z poziomu ser-
wera bazy danych.
Powinieneś wiedzieć:
• Podstawy języka SQL;
• Podstawowa obsługa serwera SQL Server
2005/2008;
• Instalacja przykładowej bazy AdventureWorks.
• logowanie informacji: utrzymywanie
dziennika w logu SQL Server, dzienniku
zdarzeń systemu operacyjnego i informa-
cji w tabelach w bazie msdb ;
• opcja audytu – utrzymywanie historii wy-
syłanych maili.
Poziom trudności
trzymany lub nie działa poprawnie, SQL
Server umieszcza wiadomości w specjalnej
kolejce. W momencie uruchomienia kom-
ponentu kolejka ta jest do niego przekazy-
wana – zaległe wiadomości są wysyłane;
• dzięki zastosowaniu profili możliwe jest
zdefiniowanie i użycie więcej niż jednego
serwera SMTP . W przypadku, gdy jeden
serwer SMTP nie działa poprawnie, wia-
domości są wysyłane z wykorzystaniem
innych dostępnych. W dalszej części arty-
kułu zademonstruję, jak zdefiniować takie
rozwiązanie;
• możliwość wyboru profilu do wysłania
konkretnej wiadomości;
• możliwość przypisania wielu kont poczto-
wych do jednego profilu;
• wysyłanie wiadomości odbywa się w try-
bie asynchronicznym dzięki kolejkom Se-
rvice Broker , co oznacza, że podczas wysy-
łania wiadomości e- mail nie trzeba czekać
na odpowiedź serwera;
• możliwość zdefiniowania zasad bezpie-
czeństwa: użytkownicy, którzy chcą ko-
rzystać z usługi Database Mail i wysyłać
e-maile, muszą mieć nadaną rolę Databa-
seMailUserRole w bazie msdb ;
• dołączanie plików do wysyłanych wiado-
mości;
• możliwość zdefiniowania listy rozszerzeń
plików, które nie mogą być wysyłane jako
załączniki;
• możliwość zdefiniowania maksymalnego
rozmiaru pliku załącznika;
• obsługa środowisk klastrowych;
• wysyłanie wiadomości w formacie HTML;
Aktywowanie
usługi Database Mail
W celu poprawnego używania usługi Data-
base Mail musimy ją najpierw aktywować,
gdyż domyślnie nie jest ona dostępna po in-
stalacji SQL Server. Możemy to uczynić na
kilka sposobów:
D atabase Mail to nowa funkcjonalność,
udostępniona po raz pierwszy w SQL
Server 2005, umożliwiająca wysyła-
nie wiadomości e-mail bezpośrednio z pozio-
mu serwera bazodanowego. Zastąpiła ona do-
stępną we wcześniejszej wersji serwera usługę
SQL Mail , która do obsługi poczty elektronicz-
nej wykorzystywała opracowane przez firmę
Microsoft rozszerzenie MAPI ( Messaging Ap-
plication Program Interface ), a więc do popraw-
nego działania wymagała zainstalowania w tym
samym środowisku aplikacji obsługującej pocz-
tę np. Microsoft Outlook. W przeciwieństwie
do swojej poprzedniczki, usługa Database Mail
do wysyłania wiadomości wykorzystuje proto-
kół SMTP ( Simple Mail Transfer Protocol ). Ozna-
cza to, że usługa może współpracować z dowol-
nymi serwerami pocztowymi. Ponadto usłu-
ga Database Mail jest bardzo prosta w użyciu,
a jednocześnie umożliwia łatwą i szybką reali-
zację wielu zaawansowanych wymagań bizne-
sowych spotykanych w aplikacjach bazodano-
wych. Poza wspomnianą wcześniej obsługą pro-
tokołu SMTP , usługa Database Mail ma jeszcze
szereg innych zalet:
• Z lokalizacji Menu Start -> Programy ->
Microsoft SQL Server -> Configuration To-
ols uruchamiamy SQL Server Surface Area
Configuration i klikamy odnośnik Surface
Area Configuration for Features . W nowym
oknie wybieramy Database Mail , a następ-
nie zaznaczamy opcję Enable Database
Mail stored procedures . Wybór zatwierdza-
my przyciskiem OK;
• W SQL Server Management Studio (pod-
stawowym narzędziu do zarządzania
serwerem SQL Server i wykonywania
poleceń języka SQL) rozwijamy gałąź
Management , klikamy prawym przyci-
skiem myszy na element Database Ma-
il i wybieramy Configure Database Ma-
il . Wyświetli się okno dialogowe z pyta-
niem, czy chcemy aktywować tę usługę.
Klikamy Yes;
• Z poziomu SQL Server Management Stu-
dio wykonujemy polecenie z Listingu 1.
Konfigurowanie
usługi Database Mail
Zajmiemy się teraz konfiguracją usługi Databa-
se Mail na naszym serwerze. W tym celu wraca-
my do okna Configrue Database Mail z opisane-
go wcześniej punktu 2., a następnie wykonuje-
my poniższe kroki:
• mechanizm wysyłający wiadomości dzia-
ła niezależnie od silnika bazy danych, a
więc obciąża go w minimalnym stopniu.
W przypadku, gdy komponent ten jest za-
60
06/2009
441073448.036.png 441073448.037.png 441073448.038.png 441073448.039.png 441073448.001.png 441073448.002.png 441073448.003.png 441073448.004.png 441073448.005.png 441073448.006.png
Database Mail
W pierwszym oknie kreatora klikamy Next .
W kolejnym oknie mamy do wyboru następu-
jące opcje:
rvice credentials – logowanie do serwe-
ra SMTP z wykorzystaniem nazwy i ha-
sła użytkownika systemu operacyjnego,
z którego konta uruchamiana jest usługa
bazy danych, Basic Authentication – au-
toryzacja z wykorzystaniem podanej na-
zwy ( User name ) i hasła ( Password, Con-
firm password ), Anonymous authentica-
tion – autoryzacja użytkowników ano-
nimowych (ze względu na zagrożenie ze
Set up Database Mail by performing the fol-
lowing tasks – łączy w sobie trzy następne
opcje i na niej się skupimy w dalszej części
artykułu;
Manage Database Mail accounts and profi-
les – umożliwia konfigurację kont i profi-
le wykorzystywanych do wysyłania wia-
domości e-mail;
Manage profile security – konfiguracja za-
bezpieczeń profili;
View or change system parameters – pod-
gląd i zmiana ustawień systemowych
związanych z usługą Database Mail.
Listing 1. Aktywacja usługi Database Mail w bazie danych
sp_conigure 'show advanced options' , 1;
GO
RECONFIGURE;
GO
-- Wartość 1 aktywuje usługę Database Mail, 0 – wyłącza.
sp_conigure 'Database Mail XPs' , 1;
GO
RECONFIGURE
GO
Klikamy Next . W oknie New Profile przed-
stawionym na Rysunku 1. mamy możliwość
utworzenia nowego profilu. W tym celu wpi-
sujemy dowolną nazwę i opis profilu. W dol-
nej części opisywanego okna mamy możli-
wość przypisania do tworzonego profilu kon-
ta SMTP . Jak już wspomniałem wcześniej, z
jednym profilem może być związanych wie-
le kont pocztowych. W przypadku awarii
jednego, profil do wysłania wiadomości wy-
korzysta kolejne. Priorytet wykorzystania
kont definiujemy poprzez przesuwanie ich
w hierarchii za pomocą przycisków Move Up
i Move Down . W przykładzie w pierwszej ko-
lejności będzie wykorzystywane konto igor-
kruk , a w przypadku niepowodzenia wysyła-
nia wiadomości zostanie wykorzystane kon-
to gmail . Aby zdefiniować konto SMTP, kli-
kamy przycisk Add .
W oknie New Database Mail Account defi-
niujemy następujące parametry:
Listing 2. Utworzenie konta o nazwie igorkruk
EXECUTE msdb.dbo.sysmail_add_account_sp
@account_name = 'igorkruk' ,
@description = 'jakis opis' ,
@email_address = 'igor@igorkruk.pl' ,
@display_name = 'Igor Kruk' ,
@username= 'igor' ,
@ password = '123' ,
@mailserver_name = 'mail.igorkruk.pl'
Listing 3. Utworzenie pro�lu o nazwie myPro�le
EXECUTE msdb.dbo.sysmail_add_proile_sp
@proile_name = 'myProile' ,
@description = 'Podstawowy proil do wysyłania wiadomości (art. SDJ)'
Listing 4. Przypisanie konta igorkruk do pro�lu myPro�le
EXECUTE msdb.dbo.sysmail_add_proileaccount_sp:
@proile_name = 'myProile' ,
@account_name = 'igorkruk' ,
@sequence_number = 1
Listing 5. Nadanie pro�lowi statusu Public i Default
Account Name – nazwa konta;
Description – opis konta;
E-mail address – adres e-mail, z którego
będą wysyłane wiadomości;
Display name – nazwa, która będzie poja-
wiać się w wiadomościach wysłanych z te-
go konta;
Reply e-mail – wartość opcjonalna, adres e-
mail, który będzie wykorzystywany w od-
powiadaniu na wysłane ze zdefiniowane-
go konta wiadomości;
Server name – nazwa lub adres IP serwera
SMTP , który będzie wykorzystywany do
wysyłania wiadomości z tworzonego kon-
ta;
Port number – numer portu, na którym
nasłuchuje serwer SMTP (wartość domyśl-
na 25);
This server requires a secure connection ( SSL )
– opcja określa, czy połączenie z serwerem
SMTP będzie szyfrowane;
SMTP Authentication – sposób uwierzy-
telniania do serwera SMTP : Windows
Authentication using Database Engine se-
EXECUTE msdb.dbo.sysmail_add_principalproile_sp
@proile_name = 'myProile' ,
@principal_name = 'public' ,
@is_default = 1
Listing 6. Sprawdzenie ustawień parametrw usługi Database Mail
EXECUTE msdb.dbo.sysmail_help_conigure_sp
Listing 7. De�niowanie parametru maksymalnego rozmiaru pliku załącznika
EXECUTE msdb.dbo.sysmail_conigure_sp
'MaxFileSize' , '2097152'
Listing 8. Wysyłanie przykładowe wiadomości e-mail
EXEC msdb.dbo.sp_send_dbmail
-- proil
@proile_name = 'myProile' ,
-- odbiorca
@recipients = 'igor@igorkruk.pl' ,
-- treść
@body = 'Database Mail. Koniguracja i wykorzystanie uslugi w SQL Server 2005/
2008' ,
-- temat
@subject = 'SDJ - artykul'
www.sdjournal.org
61
441073448.007.png 441073448.008.png 441073448.009.png 441073448.010.png 441073448.011.png 441073448.012.png 441073448.013.png 441073448.014.png 441073448.015.png 441073448.016.png 441073448.017.png
Bazy danych
strony spamerów obecnie już raczej nie
wykorzystywana).
W kolejnym oknie Manage Profile Security
mamy możliwość zdefiniowania poziomu
zabezpieczeń dla profili. Profile mogą mieć
status publiczny ( Public ) lub prywatny ( Pri-
vate ). Do profili publicznych mają dostęp
wszyscy użytkownicy i role, do profili pry-
watnych dostęp określa się zaś dla poszcze-
gólnych użytkowników i ról. Na zakładce Pu-
blic Profiles mamy możliwość określenia, któ-
re profile będą miały status Public, i który z
nich będzie profilem domyślnym (opcja De-
fault Profile ). Na zakładce Private Profiles mo-
żemy przypisywać użytkowników i role do
poszczególnych profili prywatnych. Dla na-
szych testów definiujemy tworzony profil ja-
ko publiczny i domyślny.
Kolejne okno – Configure System Parameters
jest niezwykle istotne, gdyż pozwala zdefinio-
wać wiele ważnych parametrów systemowych
związanych z usługą Database Mail . Poszcze-
gólne opcje oznaczają:
Rysunek 1. Okno New Pro�le
Rysunek 2. Skrzynka odbiorcza – odebrana wiadomość
Account Retry Attempts – liczba podejmo-
wanych prób wysłania wiadomości;
Account Retry Delay (seconds) – wyrażony
w sekundach interwał między kolejnymi
próbami wysłania wiadomości;
Maximum File Size ( Bytes ) – wyrażony w
bajtach maksymalny rozmiar załącznika;
Prohibited Attachment File Extensions
rozdzielone przecinkami rozszerzenia pli-
ków, które nie mogą stanowić załączników
wysyłanych wiadomości;
Database Mail Executable Minimum Lifeti-
me (seconds) – określony w sekundach czas
aktywności procesu wysyłającego wiado-
mości e-mail w przypadku braku nowych
wiadomości w kolejce do wysłania;
Logging level – poziom szczegółowości lo-
gowanych zdarzeń: Normal – logowa-
ne są tylko komunikaty o błędach, Exten-
ded – logowane są komunikaty o błędach,
ostrzeżenia i informacje – jest to opcja do-
myślna, Verbose – logowane są dodatkowo
informacje o powodzeniu wykonania ope-
racji i dodatkowe inne komunikaty. Opcji
Verbose najlepiej używać w przypadku te-
stowania i niepoprawnego działania usługi
Database Mail, Reset All – ustawia wszyst-
kie wartości na domyślne.
Rysunek 3. Wiadomość z załącznikiem
Rysunek 4. Wiadomość w formacie HTML
W ostatnim oknie kreatora wyświetlone jest
podsumowanie wykonywanych czynności i wy-
branych ustawień. W celu zatwierdzenia wpro-
wadzonej konfiguracji klikamy przycisk Finish.
Wszystkie opisane w powyższych krokach
czynności można także wykonać z poziomu
kodu T-SQL:
Listing 9. Wysyłanie wiadomości z załącznikiem
EXEC msdb.dbo.sp_send_dbmail
@recipients = 'igor@igorkruk.pl' ,
@query = 'SELECT [Name], [ProductNumber], [SellStartDate]
FROM AdventureWorks.Production.Product
WHERE SellStartDate > ''2003-01-01''' ,
@subject = 'Produkty sprzedawane po 2003-01-01' ,
@query_attachment_ilename = 'produkty.txt' ,
@attach_query_result_as_ile = 1
• Utworzenie konta – służy do tego proce-
dura sysmail _ add _ acount (Listing 2).
• Utworzenie profilu – służy do tego proce-
dura sysmail _ add _ proile (Listing 3).
• Dodanie konta do profilu – służy do tego
procedura sysmail _ add _ proileaccount
(Listing 4).
62
06/2009
441073448.018.png 441073448.019.png 441073448.020.png 441073448.021.png 441073448.022.png 441073448.023.png
 
Database Mail
• Nadanie status Public i Default – słu-
ży do tego procedura sysmail _ add _
principalproile (Listing 5).
• Sprawdzenie aktualnych ustawień para-
metrów sysmail _ help _ conigure _ sp
(Listing 6).
• Definiowanie parametrów – służy do tego
procedura sysmail _ conigure _ sp (Li-
sting 7). W przykładzie definiowany jest
maksymalny rozmiar załącznika na 2 MB.
@body _ format – format wiadomości:
text (wartość domyślna) lub HTML;
@importance – ważność wiadomości: Low ,
Normal (wartość domyślna), High ;
@sensitivity – określa poufność wia-
domości: Normal (wartość domyślna),
Personal , Private , Conidential ;
@ile _ attachements – rozdzielona śred-
nikami lista załączników (musi zostać po-
dana bezwzględna ścieżka dostępu do każ-
dego pliku);
@query – polecenie, którego wyniki mogą
zostać dołączone do wiadomości jako plik
lub stanowić fragment treści;
Listing 10. Wysyłanie wiadomości w formacie HTML
Testowanie usługi Database Mail
Utworzyliśmy profil i przypisaliśmy do nie-
go konto. Powinniśmy zatem sprawdzić po-
przez wysłanie testowej wiadomości, czy
nasze ustawienia są poprawne. Narzędzie
SQL Server Management Studio daje nam ta-
ką możliwość. W tym celu klikamy prawym
przyciskiem myszy element Database Ma-
il znajdujący się w gałęzi Management , a na-
stępnie wybieramy Send Test E-mail . W oknie
wybieramy profil, z którego chcemy wysłać
wiadomość, wpisujemy adres odbiorcy, te-
mat oraz treść e-maila, a następnie klikamy
przycisk Send Test E-Mail . SQL Server infor-
muje nas w nowym oknie, że nasza wiado-
mość została dodana do kolejki wiadomo-
ści oczekujących na wysłanie. Po chwili wia-
domość powinna pojawić się w skrzynce od-
biorczej.
-- deiniujemy zmienną, w której zapiszemy treść wiadomości e-mail
DECLARE @htmlBody NVARCHAR ( MAX ) ;
-- budujemy treść wiadomości,
-- deinicja tabeli zapisana w języku HTML, do której dołączone są wyniki zapytania
SET @htmlBody =
N '<H1>Contact & HireDate</H1>' +
N '<table border="1">' +
N '<tr><th>Name</th><th>HireDate</th><th>Gender</th></tr>' +
CAST ( (
SELECT TOP 5
TD = C.[FirstName] + C.[LastName],
'' ,
TD = E.[HireDate],
'' ,
TD = E.[Gender]
FROM HumanResources.Employee AS E
INNER JOIN Person.Contact AS C
ON E.[ContactID] = C.[ContactID]
ORDER BY 1 ASC
FOR XML PATH ( 'tr' ) , TYPE
) AS NVARCHAR ( MAX ) ) +
N '</table>' ;
Wysyłanie wiadomości e-mail
Zademonstruję teraz, jak z poziomu kodu T-
SQL można wysyłać wiadomości e-mail wyko-
rzystując usługę Database Mail . Służy do tego
procedura sp_send_dbmail , której składnia
przedstawiona została na Listingu 11.
Poszczególne parametry zostały opisane po-
niżej:
-- wysyłamy wiadomość z przygotowaną wcześniej treścią w formacie HTML
EXEC msdb.dbo.sp_send_dbmail
@recipients= 'igor@igorkruk.pl' ,
@subject = 'Contact & HireDate' ,
@body = @htmlBody,
@body_format = 'HTML'
@proile _ name – nazwa profilu, z któ-
rego chcemy wysłać wiadomość. Jeśli po-
miniemy ten parametr, to zostanie wy-
korzystany profil domyślny dla dane-
go użytkownika. Jeśli użytkownik nie
ma zdefiniowanego domyślnego profilu,
zostanie wykorzystany domyślny pro-
fil publiczny. Jeśli taki profil także nie
został zdefiniowany, to wykonanie opi-
sywanej procedury bez tego parametru
spowoduje wyświetlenie komunikatu o
błędzie;
@recipients – rozdzielona średnikami li-
sta adresów e-mail odbiorców wiadomo-
ści;
@copy _ recipients – rozdzielona średni-
kami lista adresów e-mail , na które zosta-
ną wysłane jawne kopie wiadomości;
@blind _ copy _ recipients – rozdzie-
lona średnikami lista adresów e-mail , na
które zostaną wysłane ukryte kopie wia-
domości;
@subject – temat wysyłanej wiadomości;
@body – treść wiadomości;
Listing 11. Składania procedury sp_send_dbmail
sp_send_dbmail [ [ @proile_name = ] 'proile_name' ]
[ , [ @recipients = ] 'recipients [ ; ...n ]' ]
[ , [ @copy_recipients = ] 'copy_recipient [ ; ...n ]' ]
[ , [ @blind_copy_recipients = ] 'blind_copy_recipient [ ; ...n ]' ]
[ , [ @subject = ] 'subject' ]
[ , [ @body = ] 'body' ]
[ , [ @body_format = ] 'body_format' ]
[ , [ @importance = ] 'importance' ]
[ , [ @sensitivity = ] 'sensitivity' ]
[ , [ @ile_attachments = ] 'attachment [ ; ...n ]' ]
[ , [ @query = ] 'query' ]
[ , [ @execute_query_database = ] 'execute_query_database' ]
[ , [ @attach_query_result_as_ile = ] attach_query_result_as_ile]
[ , [ @query_attachment_ilename = ] query_attachment_ilename ]
[ , [ @query_result_header = ] query_result_header ]
[ , [ @query_result_width = ] query_result_width ]
[ , [ @query_result_separator = ] 'query_result_separator' ]
[ , [ @exclude_query_output = ] exclude_query_output ]
[ , [ @append_query_error = ] append_query_error ]
[ , [ @query_no_truncate = ] query_no_truncate ]
[ , [ @mailitem_id = ] mailitem_id ] [ OUTPUT ]
www.sdjournal.org
63
441073448.024.png 441073448.025.png 441073448.026.png 441073448.027.png 441073448.028.png 441073448.029.png 441073448.030.png 441073448.031.png 441073448.032.png 441073448.033.png 441073448.034.png
Bazy danych
@execute _ query _ database – kon-
tekst, z którego polecenie określone w
parametrze @query ma zostać wykona-
ne;
@attach _ query _ result _ as _ ile
wartość 0 oznacza, że wyniki polecenia
określonego w parametrze @query zosta-
nie doklejona do treści wiadomości okre-
ślonej w parametrze @body , wartość 1
oznacza, że wynik zapytania będzie dołą-
czony do wiadomości w postaci oddzielne-
go pliku;
@query _ attachement _ ilename – na-
zwa pliku, w którym zostaną zapisane
wyniki polecenia określonego w para-
metrze @query, parametr ten jest igno-
rowany w przypadku gdy parametr
@attach _ query _ result _ as _ ile ma
wartość 0;
@query _ result _ header – określa, czy
wyniki zapytania zdefiniowanego w para-
metrze @query będą zawierały nagłówki
kolumn;
@query _ result _ width – szerokość linii
(wyrażona w ilości znaków) formatowania
wyników;
@query _ result _ separator – znak roz-
dzielający poszczególne kolumny wyni-
ków;
@exclude _ query _ output – wartość 0
oznacza, że komunikat wyświetlony po
wykonaniu zapytania określonego w para-
metrze @query zostanie dodany do wiado-
mości, wartość 1 oznacza, że ten komuni-
kat zostanie pominięty w wynikach;
@append _ query _ error – wartość 1
oznacza, że wiadomość zostanie wysłana
nawet w przypadku, gdy zapytanie okre-
ślone w parametrze @query zwróci błąd
– komunikat o błędzie zostanie dołączo-
ny do wiadomości, wartość 0 oznacza, że
w takim przypadku wiadomość nie zosta-
nie wysłana;
@query _ no _ truncate – wartość 0 ozna-
cza, że dane w kolumnach będą obcinane
do 256 znaków, wartość 1 oznacza, że da-
ne nie będą obcinane;
@mailitem _ id – dodatkowy, opcjonalny
parametr zwracający identyfikator wysy-
łanej wiadomości.
do wiadomości w postaci oddzielnego pliku
o nazwie produkty.txt . Wiadomość wysyła-
na jest na adres igor@igorkruk.pl . Implemen-
tacja tego zadania przedstawiona została na
Listingu 9.
Zwróćmy uwagę, że tym razem nie podano
parametru @ profile — mogliśmy tak uczynić, bo
zdefiniowaliśmy wcześniej profil myProfile jako
domyślny i to właśnie on zostanie użyty do wy-
słania tej wiadomości. Treść wiadomości z wi-
docznym załącznikiem produkty.txt przedsta-
wiona została na Rysunku 3.
W kolejnym przykładzie wyślemy wiado-
mość e-mail w formacie HTML. W tym przy-
kładzie wysyłamy wiadomość e-mail na ad-
res igor@igorkruk.pl. Wiadomości nadajemy
temat Contact & HireDate , a jej treść została
sformatowana jako HTML, w którym zapisa-
ne są informacje o pięciu osobach (imię, na-
zwisko, płeć i data zatrudnienia). Dzięki in-
strukcji FOR XML PATH('tr') , TYPE dane kon-
wertujemy automatycznie na postać XML ,
a następnie doklejamy do definicji HTML-
owej tabeli.
Wyniki powyższych poleceń zostały zapre-
zentowane na Rysunku 4.
kich plikach załączników wysyłanych wia-
domości.
W celu sprawdzenia stanu kolejki Database
Mai l należy wykonać następujące polecenie:
msdb.dbo.sysmail_help_status_sp
Zwracana jest wartość STARTED lub STOPPED .
Procedury sysmail_start_sp i sysmail_stop_
sp odpowiednio uruchamiają i zatrzymują ko-
lejkę usługi Database Mail.
Dodatkowe procedury
związane z usługą Database Mail
Usługa Database Mail przechowuje wszyst-
kie informacje w bazie msdb , dlatego też musi-
my zadbać o porządkowanie i usuwanie zbęd-
nych danych. Służy do tego specjalna procedura
sysmail_delete_ mailitems_sp , która umoż-
liwia usuwanie wiadomości przetworzonych
wcześniej niż określona w pierwszym parame-
trze data . Drugi parametr, który przyjmuje jed-
ną z wartości: sent , unsent , failed , retrying ,
umożliwia usunięcie wiadomości w zależności
od ich statusu — odpowiednio: wysłane, niewy-
słane, wysyłanie zakończone niepowodzeniem
— serwer SMTP zwrócił błąd, wysyłanie do ser-
wera SMTP nie powiodło się. Niepodanie żad-
nej wartości oznacza, że usuwane będą wiado-
mości ze wszystkimi statusami. Zapytanie z po-
niższego przykładu usuwa wszystkie wiadomo-
ści, które były przetwarzane wcześniej niż 20
grudnia 2008.
Monitorowanie
usługi Database Mail
Jak już wspomniałem wcześniej, usługa Da-
tabase Mail utrzymuje własny dziennik zda-
rzeń, w którym zapisuje informacje o róż-
nych zdarzeniach — nie tylko błędach — w za-
leżności od systemowego parametru Logging
level . Dostęp do tych logów uzyskujemy z
poziomu SQL Server Management Studio.
Klikamy prawym przyciskiem myszy Databa-
se Mail i z menu wybieramy View Database
Mail Logs . Pojawia się okno Log File Viewer. W
oknie znajdziemy m.in. opisy wszelkich błę-
dów, które wystąpiły podczas wysyłania wia-
domości. Dostęp do tego dziennika zdarzeń
możemy także uzyskać, wykonując poniższe
polecenie T-SQL:
EXECUTE msdb.dbo.sysmail_delete_mailitems_sp
@sent_before = 'December 20, 2008' ;
Podsumowanie
W artykule tym zapoznaliśmy się z usłu-
Database Mail, dostępną w SQL Server
2005 i 2008. Umożliwia ona wysyłanie wia-
domości e-mail bezpośrednio z poziomu ser-
wera bazy danych. Dzięki temu daje ona du-
że możliwości realizacji bardzo często spoty-
kanych w prawdziwych projektach wymagań
wysyłania powiadomień użytkownikom sys-
temów. Usługa Database Mail w znaczny spo-
sób ułatwia życie także administratorom baz
danych. W prosty sposób mogą oni teraz in-
formować odpowiednich użytkowników o
określonych wydarzeniach zachodzących w
bazie danych.
SELECT * FROM msdb.dbo.sysmail_event_log
Dodatkowe informacje na temat wiadomości i
statusu ich wysłania są zapisane w specjalnych
widokach:
Polecenie z Listingu 8. wysyła najprostszą wia-
domość e-mail, w której zdefiniowany jest tyl-
ko odbiorca, temat i treść. Wykorzystywany
jest utworzony wcześniej profil myProfile .
Wynik tego polecenia został przedstawiony
na Rysunku 2. (widzimy wysłaną wiadomość
w skrzynce odbiorczej).
W kolejnym przykładzie zdefiniowa-
no polecenie SELECT , które pobiera z tabe-
li Production.Product z bazy Adventure-
Works informacje o produktach, których
sprzedaż rozpoczęła się po po 01 stycznia
2003 roku. Wyniki zapytania są dołączone
SELECT * FROM msdb.dbo.sysmail _
allitems – lista wszystkich wiadomości;
SELECT * FROM msdb.dbo.sysmail _
sentitems – lista wiadomości wysłanych;
SELECT * FROM msdb.dbo.sysmail _
unsentitems – lista wiadomości niewysła-
nych;
SELECT * FROM msdb.dbo.sysmail _
faileditems – lista wiadomości, których
wysyłanie zakończyło się niepowodze-
niem;
SELECT * FROM msdb.dbo.sysmail _
mailattachments – informacje o wszyst-
IGOR KRUK
Igor Kruk jest z wykształcenia informatykiem. Obec-
nie pracuje na stanowisku Business Intelligence Con-
sultant i zajmuje się wdrażaniem systemów klasy BI.
Jest również współautorem książek „Oracle 10g i
Delphi. Programowanie baz danych” oraz „SQL Se-
rver 2005. Zaawansowane rozwiązania biznesowe”.
Kontakt z autorem: igorkruk@gmail.com,
http://www.igorkruk.pl
64
06/2009
441073448.035.png
 
Zgłoś jeśli naruszono regulamin