FIX: 維護計劃中傳送維護報告以電子郵件給運算子失敗

文章翻譯 文章翻譯
文章編號: 279867 - 檢視此文章適用的產品。
Bug #: 351140 (SHILOH_BUGS)
全部展開 | 全部摺疊

徵狀

SQL Server 資料庫維護計劃包含傳送維護報告 (也就是包含維護計劃執行的結果檔案) 的選項以在伺服器上的預先定義運算子的電子郵件。電子郵件傳送給操作員維護報表檔案可能會失敗並出現下列錯誤訊息,可以在維護報表中的資料庫維護計劃找到:
錯誤 18025: [Microsoft] [ODBC SQL Server 驅動程式] [SQL Server] xp_sendmail: 失敗,發生郵件錯誤 0x80004005
此錯誤不會影響作業的狀態報告 ; 工作本身會顯示為成功。

發生的原因

當您嘗試將開啟的檔案當作電子郵件附件傳送時,xp_sendmail 延伸預存程序就會失敗並出現上述錯誤。Sqlmaint.exe 執行維護計劃,並將輸出寫入至報告檔。在 [維護計劃,也就是傳送電子郵件,最後的步驟也會記錄在報表中。因為報告檔案仍為開啟狀態時 xp_sendmail 試著要當成附件嘗試失敗時傳送。

解決方案

如果要解決這個問題,取得最新的 Service Pack,SQL Server 2000。如需詳細資訊按一下 [下面的文件編號,檢視 「 Microsoft 知識庫 」 中的發行項]:
290211INF: 如何取得最新的 SQL Server 2000 Service Pack

其他可行方案

針對這個問題的解決辦法,請參閱本文的 < 其他相關資訊 > 一節]。

狀況說明

Microsoft 已確認這是在 SQL Server 2000 中的問題。這個問題已經先在 SQL Server 2000 Service Pack 1 中獲得修正。

其他相關資訊

如果要解決這個問題,您可以包含下面指令碼作為由特定的維護計畫建立的最後一個工作中的其他作業步驟。下面這個指令碼會將最後的報表檔案為特定的維護計畫傳送到指定的電子郵件地址。

若要將這項因應措施請依照下列步驟執行:
  1. 識別上次工作的維護計劃。
  2. 用滑鼠右鍵按一下作業,按一下 [內容]、 按一下 步驟、 選取步驟然後再按一下 [編輯
  3. 編輯作業步驟] 對話方塊上按一下 [進階] 索引標籤]。
  4. 您可以將 啟動成功動作移至下一步驟
  5. 按一下 [編輯作業步驟] 對話方塊上的 [確定]
  6. 按一下 [新增] 以新增新的步驟,並再提供一個名稱步驟。型別 應該在 Transact-SQL 指令碼 (TSQL)資料庫 應該是 主版
  7. 在 [命令] 視窗中貼上下列指令碼:
    declare @planname varchar(100)
    declare @dir varchar(200)
    declare @operator varchar(50)
    declare @cmd varchar (200)
    declare @mailfilename varchar(200)
    declare @filenamelen int
    
    --Values set here can actually be provided as parameters to a stored procedure.
    --If provided as parameters to a stored procedure, rem the following select statements.
    --@plananme is the plan whose maintenance report is sent.
    --@dir is the log directory for SQL Server. It is the directory to which the 
    --maintenance report files are written. 
    --@operator is the email address of the person to whom the report file should be mailed.
    
    select @planname = 'Database Maintenance Plan 1'
    select @dir ='c:\Program Files\Microsoft SQL Server\MSSQL$SQL2K1\LOG'
    select @operator ='email@domain.com'
    --You can automatically set the above by reading various values from SQL Server.
    
    SET NOCOUNT ON
    IF RIGHT (@dir, 1) <> '\' 
    begin
    select @dir =@dir +'\'
    end
    SELECT @dir = 'dir /s /b '+'"'+@dir + @planname+'*.txt'+'"' +' >c:\dir.txt'
    
    create table #TMP_MAINT_FILENAMES (NAME1 varchar(8000))
    exec xp_cmdshell @dir
    BULK INSERT #TMP_MAINT_FILENAMES
       FROM 'c:\dir.txt'
       WITH 
          (
             ROWTERMINATOR = '\n'
          )
    
    select @mailfilename=MAX(name1) from #TMP_MAINT_FILENAMES
    print 'The following file is being sent as an atachement'
    print @mailfilename
    
    --Set the various parameters for xp_sendmail.
    declare @tmpmessage varchar(300)
    declare @tmpsubject varchar(300)
    select @tmpmessage = 'This is the last maintenance report on the server for the maintenance plan '+@planname
    select @tmpsubject = 'SQL Server Maintenance Report for '+@planname
    
    --Send the last file for the maintenance plan.
    exec master..xp_sendmail @recipients= @operator, @subject =@tmpsubject, @message=@tmpmessage, 
    @attachments= @mailfilename
    
    --Perform cleanup here.
    drop table #TMP_MAINT_FILENAMES
    exec master..xp_cmdshell "del c:\dir.txt"
    SET NOCOUNT OFF
    					
  8. 確定 @ planname、 @ dir 和 @ 運算子值已設定指令碼中。
  9. 儲存作業步驟。
Microsoft 僅,為了說明提供程式設計範例,不提供任何明示或默示的保證。這包括,但不限於適售性或適合某特定用途之默示擔保責任。本文假設您已熟悉使用我們所示範的程式設計語言以及建立和偵錯程序所使用的工具。Microsoft 技術支援工程師可以協助解釋特定程序的功能,但它們不會修改這些範例以提供附加功能或建構程序,以符合您特定需求。

屬性

文章編號: 279867 - 上次校閱: 2005年6月23日 - 版次: 5.2
這篇文章中的資訊適用於:
  • Microsoft SQL Server 2000 Standard Edition
關鍵字:?
kbmt kbbug kbfix kbsqlserv2000sp1fix KB279867 KbMtzh
機器翻譯
重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。
按一下這裡查看此文章的英文版本:279867
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。

提供意見

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com