2.正確配置和使用SQL Mail進行數據庫管理
雖然數據庫管理員經常就在數據庫旁邊,但是卻不能像機器那樣不問斷地工作,如果在管理員下班后突然發生意外事件,怎樣通知管理員以及時處理緊急事件?在SQL Server 2000中,一般來說,通知方式有三種:電子郵件、呼叫程序和網絡發送。由于電子郵件的方便性和易用性,所以它成為大多數管理員選擇的方法。本文就以實現電子郵件通知為例,介紹如何設置和使用SQL中的電子郵件通知。
SQL郵件必須使用郵件配置文件來運行,該配置文件在啟動Microsoft SQL Server實例時所使用的同一域賬戶中創建。在SQL Server企業管理器的支持服務文件夾下,可以看到對 sQL郵件服務的圖形描述,并可以確定該服務是否正在運行。
(1)配置SMTP及POP3服務器。
為了使用SQL Mail,首先得在服務器上有SMTP服務,筆者沒有使用Windows 2000 Server自帶的SMTP,而是用CMailServer的SMTP,該軟件可以到作者網站http://www.youngzsoft.com去下載。其界面友好,操作簡單,運行也比較穩定。將郵件服務器設置好,然后登錄到其默認郵件Web頁測試收發郵件,確認能正常收發郵件。
(2)設置郵件配置文件。
1)安裝郵件系統。在Windows 2000 Server中默認安裝了郵件系統Outlook Express,如果沒有則需要安裝一個郵件系統(筆者安裝了Outlook 2002,發現在設置郵件配置文件時,如果不安裝Outlook而是用第三方程序,Windows 2000 Server在控制面板中就找不到“郵件”圖標)。安裝正確后可以在控制面板中看到“郵件”圖標。
2)、添加郵件賬戶。在控制面板上雙擊“郵件”圖標,在彈出的“郵件設置”窗口單擊“電子郵件賬戶”按鈕,接著就會出現“電子郵件賬戶”窗口,在該窗口選擇“添加電子郵件賬戶”,然后單擊“下一步”按鈕,在服務器類型中選擇“POP3”,然后再在“Internet電子郵件設置(POP3)”中分別完成用戶信息、服務器信息和登錄信息設置,單擊“測試用戶設置”按鈕測試其電子郵件設置,確認其設置正確。接下來的操作比較簡單,按照其默認設置即可。
3)添加用戶配置文件。在控制面板上雙擊“郵件”圖標,在彈出的“郵件設置”窗口單擊“顯示用戶配置”按鈕,然后在其中添加用戶配置文件“hongyumail”,設置完成后,該配置文件用于SQL mail使用。
4)測試Outlook。啟動Outlook,在“工具”菜單選擇“賬號”命令,添加跟前面的配置文件中相同屬性的電子郵件賬號。并在其中進行相應設置,最后測試收發郵件,確認Outlook工作正常。
(3)配置SQL Mail。
以管理員身份啟動SQL Server,展開“SQL Server組”至“支持服務”,然后右鍵單擊“SQL郵件”,在彈出的菜單中選擇“屬性”命令,在“SQL郵件”配置窗口(如圖4.2-13),單擊配置文件名下拉菜單,選中剛才定義的“hongyumail”配置文件(也可以定義多個配置文件),選擇這個配置文件,然后單擊“測試”按鈕進行測試,SQL將返回成功開始和結束一個MAPI會話的信息,如果出現錯誤或是沒有找到郵件配置文件,那一定是啟動SQL Server用的賬號有問題。
(4)使用查詢分析器發送郵件。
設置好SQL郵件后,就可以在查詢分析器中使用xp_sendmail,xp_deletemail, xp_findnextmsg,xp_readmail,xp_startmail及xp_stopmail等命令來發送、刪除、查找信息、閱讀、啟動和停止郵件了。
在查詢分析器中可以用“xp_sendmail”擴展存儲過程發送SQL郵件,其語法如下:
xp_sendmail{[@recipients=]‘recipients[;...n]’}
[,[@message=]‘message’]
[,[@query=[‘query’]
[,[@attachments=]‘attachments[;...n]’]
[,[@copy_recipients=]‘copy_recipients[;...n]’
[,[@blind_copy_recipients=]‘blind_copy_recipients[;...n]’
[,[@subject=]‘subject’]
[,[@ttype=]‘type’]
[,[@attach_results=]‘attach_value’]
[,[@no_output=]‘output_value’]
[,[@no_header=]‘header_value’]
[,[@width=]width]
[,[@separator=]‘separator’]
[,[@echo_error=]‘echo_value’]
[,[@set_user=]‘user’]
[,[@dbuse=]‘database’]
其中@recipients是必需的,參數說明如下。
[@recipients=]‘Feeipients[;...n]’:是以分號分隔的郵件收件人列表。n是表示可以指定多個recipient、copy_recipient或blind_copy_recipient的占位符。
[@message=]‘message’:是要發送的郵件。message最大可達8000個字節。
[@query=]‘query’:是有效的Microsot SQL Server查詢,其結果將通過郵件送出。 xp_sendmail對query參數使用綁定連接。SQL郵件建立的query連接不會被發出xp_sendmail請求的客戶端所控制的鎖阻塞。這使xp_sendmail更易于在觸發器中使用。但是,query語句不能引用僅在觸發器中可用的邏輯inserted表和deleted表。query最大可達8,000個字節。
[@attachments=]‘attachments[;...n]’:是以分號分隔的附加到郵件上的文件列表。
[@copy_recipients=]‘copy_recipients[;...n]’:是以分號分隔的列表,標識郵件復本收件人(抄送人)。
[@blind_copy_recipients=]‘blind_copy_recipients[;...n]’:是可選的以分號分隔的列表,標識郵件密件復本收件人(密件抄送人)。
[@subject=]‘subject’:是指定郵件主題的可選參數。如果未指定subject,則默認值為“SQL Server消息”。
[@type=]‘type’:是基于以下MAPI郵件定義的輸入郵件類型。
IP[M|C].Vendomame.subclass.如果type為NULL,則以IPM打頭的郵件類型出現在郵件客戶端的收件箱中,并由xp_findnextmsg查找或閱讀。以IPC打頭的郵件類型不出現在郵件客戶程序的收件箱中,并且必須設置type參數才能查找或閱讀。默認設置為 NULL。
[@attach_results=]‘attach_value’:是可選參數,指定查詢結果集應作為郵件中的附件文件發送,而不是追加到郵件中發送。如果attachments不為NULL,并且attach_results為 true,則attachments中的第一個文件名將作為結果集的文件名。如果attachments為NULL,則生成帶.txt擴展名的文件名。默認值為FALSE,這意味著結果集將追加到郵件中。
[@no_output=]‘output_value’:是可選參數,用來發送郵件但不向發送郵件的客戶端會話返回任何輸出。默認值為FALSE,這意味著SQL Server客戶端會話將接收輸出。
[@no_header=]‘header_value’:是可選參數,表示通過郵件發送查詢結果,但不隨查詢結果發送列標題信息。默認值為FALSE,即列標題信息隨查詢結果一起發送。
[@width=]width:是可選參數,設置查詢的輸出文本行寬。此參數與isql實用工具中的/w參數相同。對于產生長輸出行的查詢,應結合使用attach_results與width以發送行中無換行符的輸出。默認寬度為80個字符。
[@separator=]‘separator’:是結果集中每列的列分隔符字符串。默認情況,列分隔符為空格。使用列分隔符可以使訪問電子表格和其他應用程序中的結果集更容易。例如,結合使用attach_results與separator以發送用逗號分隔值的文件。
[@echo_error=]‘echo_value’:值為true時,SQL郵件將捕獲運行查詢時遇到的任何服務器消息或DB-Library錯誤,并將其追加到郵件中而不是寫入錯誤日志。同時也將返回行/受影響行的計數追加到郵件中。
[@set_user=]‘user’:是應在其中運行查詢的安全上下文。如果沒有指定user,安全上下文默認為執行xp_sendmail的用戶的安全上下文。
[@dbuse=]‘database’:是應在其中運行查詢的數據庫上下文。默認值為NULL,這意味著將用戶置于默認數據庫中。
(5)幾個應用實例。
1)使用不帶變量的xp_sendmail。向用戶cxb發送郵件(電子郵件用戶是cxb),告知該用戶master數據庫已滿。
EXEC xp_sendmail‘cxb’,‘The master database is full.’
2)使用帶變量的xp_sendmail。向用戶Robeg和Laura發送郵件,并將復本發送給Anne和Michael。在該例中還指定了郵件的主題行“Master Database Status”。
EXEC xp_sendmail@recipients=‘robertk;laurac’,
@message=‘The master database is full.’,
@capy_recipieats=‘anned;michaels’,
@subject=‘Master Database Status’
3)發送結果。下例將sp_configure的結果發送給cxb。
EXEC xp_sendmail‘cxb’,@query=‘sp_configure’
4)將結果作為附件文件發送。下例將查詢SELECT*FROM INFORMATION_SCHEMA. TABLES的結果作為文本文件附件發送給Robert King。下例包含郵件的主題行以及將在附件之前出現的郵件正文。@width參數用于防止在輸出行中換行。
EXEC xp_sendmail@recipients=‘robertk’.
@query=‘SELECT*FROM INFORMATION_SCHEMA.TABLES’,
@subject=‘SQL Server Report’,
@message=‘The contents of INFORMATION_SCHEMA.TABLES:’
@attach_results=‘TRUE’,@width=250
(6)在網站中使用SQL郵件。
如果是在Web應用中使用SQL郵件,則需要加入連接數據的賬號和用戶名。也就是在 maser庫的擴展存儲過程找到XP_sendmail,并在其屬性中增加用戶,并選擇EXEC權限。設置完畢,運行網站程序,測試用戶注冊,幾乎沒有延遲,很快就收到由SQL郵箱發出的郵件。