Tải bản đầy đủ (.pdf) (7 trang)

Sử dụng và quản lý Database Mail ppt

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (137.35 KB, 7 trang )

Sử dụng và quản lý Database Mail
SQL Server 2005 có một hệ thống mail nhỏ được gọi là Database Mail.
Database Mail là một tính năng được cải thiện trong SQL Mail so với các
phiên bản trước đó của SQL Server. Với tính năng này bạn có thể thiết lập
nhiều tài khoản cũng như hồ sơ để hỗ trợ những vấn đề về email. Database
Mail là gì?

Database Mail là một hệ thống hàng đợi của mail. Các email message được l
ưu
trong một hàng đợi bên trong cơ sở dữ liệu để được xử lý. Khi một email
message được đưa vào trong hàng đợi, một quá trình mở sẽ được kích hoạt để
gửi email messages trong hàng đợi đến mail server thích hợp. Khi email đã
được gửi thì một email message có trạng thái của phân phối sẽ được gửi trở lại
cho SQL Server.

Kích hoạt Database Mail

Database Mail không ở trạng thái có sẵn khi cài đặt. Từ mô hình bảo mật của
SQL Server có một số thứ bị tắt mặc định, bạn cần phải kích hoạt Database
Mail nếu muốn sử dụng nó. Bạn có thể sử dụng công cụ cấu hình Surface Area
Configuration hoặc T-SQL Server dưới đây để kích hoạt Database Mail:
sp_configure 'show advanced options', 1;
GO
RECONFIGURE;
GO
sp_configure 'Database Mail XPs', 1;
GO
RECONFIGURE
GO
Thiết lập tài khoản


Một tài khoản Database Mail cho biết SQL Server 2005 phải truyền thông như
thế nào với máy chủ SMTP. Tài khoản chỉ rõ email được định dạng và được
gửi như thế nào. Một tài khoản sẽ nhận dạng một máy chủ SMTP và phương
pháp thẩm định. Tài khoản được sử dụng cho Database Mail không tương ứng
với tài khoản đăng nhập của SQL Server.

Khi thiết lập một tài khoản, bạn cần phải chỉ ra đủ thông tin để SQL Server
2005 có thể truyền thông với máy chủ SMTP và th
ẩm định lại nó nếu cần thiết.
Tham khảo các nguồn dữ liệu có online để có danh sách đầy đủ về các tùy
chọn trong việc định nghĩa một tài khoản. Bạn có thể thiết lập một tài khoản
bằng sử dụng Database Mail Configuration Wizard, chức năng này có thể đư
ợc
tìm thấy ở dưới “Database Mail” trong thư mục “Management” bên trong SQL
Server Management Studio, hoặc bằng sử dụng thủ tục được lưu (SP)
“sysmail_add_account_sp”. Đây là một đoạn mã sử dụng phương pháp SP ở
trên để tạo một tài kho
ản cho phép truyền thông với một máy chủ SMTP không
yêu cầu sự thẩm định:
EXECUTE msdb.dbo.sysmail_add_account_sp
@account_name = 'Database Administration Account',
@description = 'Mail account for used by DBA staff',
@email_address = '',
@display_name = 'ProdServer01 DBA Mail',
@replyto_address = '',
@mailserver_name = 'mailserver.domainname.com';
Tài khoản này có tên là “Database Administration Account”, và có địa chỉ
email là Một trong những ưu điểm của việc
sử dụng Database Mail là địa chỉ email này không nhất thiết phải là một tài
khoản email hợp lệ trong hệ thống mail. Thêm vào đó, bạn lại có thể kết hợp

một địa chỉ “reply to” với một tài khoản mail cơ s
ở dữ liệu của bạn. trong ví dụ
của tôi ở trên, tôi đã định nghĩa là
@replyto_address. Vì vậy khi một ai đó nhận đươc m
ột email từ bất kỳ các quá
trình thông báo email tự động nào của tôi họ sẽ có thể trả lời nó và email có th

được gửi trực tiếp đến tôi.

Với Database Mail, bạn có thể thiết lập nhiều tài kho
ản email nếu muốn. Trong
phần dưới đây tôi sẽ giới thiệu một số lý do tại sao bạn lại có thể thiết lập đư
ợc
nhiều tài khoản Database Mail như vậy.

Thiết lập hồ sơ và liên kết nó với các tài khoản

Trước khi gửi một Database Mail đến máy chủ SMTP đã được phân biệt trong
một tài khoản, bạn cần phải kết hợp tài khoản với một hồ sơ (profile) và cho
phép truy cập đến profile. Database Mail profile được sử dụng để cải thiện bảo
mật mail. Có hai loại profile: public và private. Public profile luôn được áp
dụng cho bất cứ ai được phép truy cập đến cơ sở dữ liệu msdb và là một thành
viên của DatabaseMailUserRole trong cơ sở dữ liệu msdb. Trong khi đó
private profile chỉ có thể được sử dụng cho những người dùng đặc biệt được
phép truy cập vào private profile. Một mail profile có thể đư
ợc kết hợp với một
hay nhiều tài khoản khác. Bạn có thể quản lý các profile bằng Database Mail
Configuration Wizard, hoặc sử dụng lệnh T-SQL Server giống như thiết lập
cho một mail profile dưới đây:
Create a Database Mail profile

EXECUTE msdb.dbo.sysmail_add_profile_sp
@profile_name = 'Database Administration Profile',
@description = 'Mail Profile for use by DBA processes';
Ở đây tôi đã tạo một profile có tên là “Database Administration Profile”. Có
một profile đã tạo không có nghĩa là bạn có thể sử dụng profile này để gửi
email. Bạn vẫn cần phải kết hợp nó với ít nhật một tài khoản Database Mail và
một người dùng bên trong dữ liệu msdb. Để thực hiện điều đó tôi có thể chạy
hai lệnh dưới đây:
Add the account to the profile
EXECUTE msdb.dbo.sysmail_add_profileaccount_sp
@profile_name = 'Database Administration Profile',
@account_name = 'Database Administration Account',
@sequence_number =1 ;
Grant access to the profile
EXECUTE msdb.dbo.sysmail_add_principalprofile_sp
@profile_name = 'Database Administration Profile',
@principal_name = 'ProdServer01',
Câu lệnh EXECUTE đầu tiên sẽ kết hợp profile của tôi với một tài khoản. Câu
lệnh thứ hai sẽ kết hợp profile với cơ sở dữ liệu msdb người dùng
‘ProdServer01’. Những người dùng này cần phải được cho phép là thành viên
trong DatabaseMailUserRole trước khi họ có thể gửi mail. Khi tôi kết hợp
profile này với một người dùng đặc biệt, thì profile này được hiểu như một
private profile. Để tạo một public profile bạn cần phải kết hợp một profile với
một “public” database role.
Gửi Database Mail

SQL Server cung cấp SP “sp_send_dbmail” để gửi mail. Cú pháp dưới đây
được sử dụng để gọi SP này:
sp_send_dbmail [ [ @profile_name = ] 'profile_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' ]
[ , [ @file_attachments = ] 'attachment [ ; n ]' ]
[ , [ @query = ] 'query' ]
[ , [ @execute_query_database = ] 'execute_query_database' ]
[ , [ @attach_query_result_as_file = ] attach_query_result_as_file ]
[ , [ @query_attachment_filename = ] query_attachment_filename ]
[ , [ @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 ]
Như nh
ững gì bạn nhìn thấy, SP này hỗ trợ một số các tham số khác nhau.
Thông tin về mỗi tham số này bạn có thể tham khảo trong các sách online.

Dưới đây là một ví dụ nói về tôi sẽ sử dụng private profile đã được tạo ở trên
để gửi một email message đơn giản như thế nào không quan tâm đến quá trình
đánh chỉ số lại cơ sở dữ liệu tự động.
EXEC msdb.dbo.sp_send_dbmail
@profile_name = 'Database Administration Profile',
@recipients = '',
@body = 'Reindex database process completed successfully',

@subject = 'Reindex Database' ;
Database Mail xử lý hết một hàng đợi khi chạy lệnh trên thì tôi s
ẽ có một thông
báo được gửi phản hồi nói rằng mail được đưa vào hàng đợi “Mail queued”.
Khi bạn thực thi sp_send_dbmail SP thì mail không được gửi đi ngay lập tức
mà thay vì đó nó được lưu trong hàng đợi mail bên trong cơ sở dữ liệu msdb.
SP này kích hoạt một quá trình mail mở rộng (DatabaseMail90.exe) để chạy.
Thực thi này đọc mail trong hàng đợi và gửi nó đến mail server thích hợp.

Các trường hợp khác nhau trong sử dụng tài khoản và hồ sơ

Có một số cách khác nhau trong việc sử dụng những ưu điểm của đa tài khoản
và profile được Database Mail cho phép bạn thực hiện với chúng.

Một trong những ưu điểm quan sát thấy của tính năng đa tài khoản đó là cấu
hình profile Database Mail của bạn có thể cho phép khả năng chuyển đổi dự
phòng khi một trong những máy chủ SMTP gặp các vấn đề trục trặc. Khi bổ
sung vào các tài khoản cho một profile Database Mail bạn có thể cung cấp cho
chúng một chuỗi số sequence_number. Khi gửi một email message mới,
Database Mail cố gắng gửi nó bằng cách sử dụng số chuỗi thấp nhất trư
ớc. Nếu
quá trình gửi đó bị hỏng thì Database Mail sẽ sử dụng chuỗi số cao hơn tiếp
theo. Database Mail sẽ liên tục thực hiện công việc này cho đến khi mail được
gửi thành công hoặc tất cả các tài khoản đã đều được thử.

Một tùy chọn khác trong việc sử dụng này là hỗ trợ cho mail message phân
phát đến các địa chỉ email khác nhau. Nếu bạn có nhiều ứng dụng cần phải gửi
email, mỗi ứng dụng có một địa chỉ email riêng của nó. Việc làm này sẽ giúp
người nhận email tự đông phân biệt được quá trình đã gửi là quá trình gì bằng
việc xem địa chỉ email.


Ngoài ra, n
ếu bạn sử dụng các private profile thì bạn có thể kết hợp các profile
này với các chính sách bảo mật khác. Bằng cách đó sẽ cho phép bạn kiểm soát
được private profile, người dùng msdb sẽ được phép sử dụng một profile
Database Mail riêng biệt.

Kiểm tra Database Mail

SQL Server cung cấp 6 cửa sổ hệ thống khác nhau trong cơ sở dữ liệu msdb
cho việc kiểm tra thông tin Database Mail. Các cửa sổ này có thể đư
ợc sử dụgn
để lấy lại thông tin trong cơ sở dữ liệu msdb có cho biết đến cả trạng thái của
tất cả Database Mail hoặc chỉ những email message cụ thể. Các cửa sổ này rất
hữu dụng trong việc phân biệt mail nào đã được xử lý cũng như lý do tại sao
mail message có thể không được phân phối đến mail server yêu cầu. Chúng là
các công cụ lý tưởng cho phép bạn có thể kiểm tra và khắc phục một số các
vấn đề Database Mail. Để có thêm thông tin chi tiết về các cửa sổ này, bạn có
thể tìm hiểu thêm trong các sách online.

sysmail_allitems – cửa sổ này cho phép bạn trả về một tập bản ghi, gồm có
một hàng cho mỗi email message được xử lý bằng Database Mail.

sysmail_event_log – Cửa sổ này cho phép bạn trả về một hàng cho mỗi một
thông báo lỗi của Windows hoặc SQL Server khi Database Mail xử lý một
email message.

sysmail_faileditems – Cửa sổ này trả về một bản ghi cho mỗi một email
message có một trạng thái nào đó hoặc bị thất bại.


sysmail_mailattachments – Cửa sổ này gồm một hàng cho mỗi một đính kèm
đã gửi

sysmail_sentitems – Cửa sổ này gồm có một bản ghi cho mỗi một email đã
được gửi thành công

sysmail_unsentitems – Cửa sổ này gồm có một bản ghi cho mỗi email hiện
đang có trong hàng đợi để được gửi hoặc trong quá trình đang gửi.

Duy trì các thông báo trong MSDB Database

Tất cả các email message được lưu trong cơ sở dữ liệu msdb, bạn phải xem xét
xem quản lý các thông tin này như thế nào. Phụ thuộc vào các chính sách ghi
nhớ email, bạn cần thiết lập một thói quen để làm sạch có chu kỳ đối với các
email message không cần thiết nữa. SQL Server 2005 cung cấp hai thủ tục lưu
khác nhau để gỡ các bản ghi mail từ cơ sở dữ liệu msdb.

sysmail_delete_mailitems_sp – SP này xóa thường xuyên các email message
có trong msdb trong bảng Database Mail.

sysmail_delete_log_sp – SP này xóa các thông báo bản ghi Database Mail.

Bạn có thể xem sách online để có thêm thông tin chi tiết về SP.

T-SQL Server dưới đây sẽ xóa mail đã được gửi cách đấy một tháng:
DECLARE @delete_date datetime
SET @delete_date = dateadd(MM,-1,getdate())
EXECUTE msdb.dbo.sysmail_delete_mailitems_sp
@sent_before=@delete_date


Kết luận

Database Mail SQL Server 2005 là một sự cải thiện lớn trong SQL Mail so với
các phiên bản trước đây của SQL Server. Database Mail cung cấp một hệ
thống mail với rất nhiều tính năng để bảo vệ và quản lý tốt hơn các mail đang
gửi bằng sử dụng T-SQL. Với Database Mail trong SQL Server 2005, bạn
không cần phải xây dựng một lời giải cho một giải pháp sử dụng CDOSYS để
gửi email. Nếu bạn đang tìm cách để hỗ trợ email từ T-SQL, hãy xem xét đến
những tính năng của Database Mail.

Văn Linh (Theo Databasejournal)

×