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
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
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
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
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-
gą
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
Plik z chomika:
Kapy97
Inne pliki z tego folderu:
2007.06_Oracle10g przechowywanie plików multimedialnych w polach typu BLOB_[Bazy Danych].pdf
(738 KB)
2006.11_Obiektowe projektowanie relacyjnej bazy danych_[Bazy Danych].pdf
(1329 KB)
2006.11_Ewolucja i efektywność technologii dostępu do baz danych_[Bazy Danych].pdf
(1272 KB)
2006.11_Firebird SQL 2.0 _[Bazy Danych].pdf
(560 KB)
2006.11_Instalacja, konfiguracja i zapytania w MySQL 5.0_[Bazy Danych].pdf
(975 KB)
Inne foldery tego chomika:
Algorytmy
Antyhaking
Aplikacje Biznesowe
Aspekty
Biblioteka Miesiaca
Zgłoś jeśli
naruszono regulamin