ИСПРАВЛЕНИЕ: Происходит сбой отправки отчета обслуживания по электронной почте оператору в план обслуживания

Переводы статьи Переводы статьи
Код статьи: 279867 - Vizualiza?i produsele pentru care se aplic? acest articol.
НОМЕР ОШИБКИ: 351140 (SHILOH_BUGS)
Развернуть все | Свернуть все

Проблема

План обслуживания базы данных SQL Server содержит кнопку для отправки отчета Обслуживание (то есть файл, содержащий результаты выполнения плана обслуживания) по электронной почте для определенного оператора на сервере. Отправка по электронной почте файл отчета обслуживания оператора может произойти сбой со следующим сообщением об ошибке, можно найти в отчете обслуживание для плана обслуживания базы данных:
Ошибка 18025: Xp_sendmail [Microsoft] [SQL Server драйвер ODBC] [SQL Server]: ошибка почты 0x80004005
Эта ошибка не влияет на отчеты о состоянии работ; само задание отображается успешно.

Причина

В Процедура xp_sendmail Расширенная хранимая процедура завершается с ошибкой выше, при попытке отправить файл в сообщение электронной почты. Sqlmaint.exe выполняет план обслуживания и записывает выходные данные в файл отчета. На заключительном этапе план обслуживания, который используется для отправки сообщения электронной почты, также записывается в отчет. Так как файл отчета все еще открыто при Процедура xp_sendmail пытается отправить как вложение, заканчивается сбоем.

Решение

Чтобы устранить эту проблему, получите последний пакет обновления для SQL Server 2000. Для получения дополнительных сведений щелкните следующий номер статьи в База знаний корпорации Майкрософт:
290211 INF: Как получить последний пакет обновления для SQL Server 2000

Временное решение

Для обхода этой проблемы см. в разделе «Дополнительная информация» этой статьи.

Статус

Корпорация Майкрософт подтверждает, что это проблема в SQL Server 2000. Сначала исправление этой проблемы появилось в пакете обновления 1 для SQL Server 2000.

Дополнительная информация

Чтобы обойти эту проблему, можно включить приведенный ниже сценарий как дополнительные задания шагом последнего задания, созданные определенным плана обслуживания. Этот сценарий ниже отправляет последний файл отчета для конкретного плана обслуживания на указанный адрес электронной почты.

Чтобы использовать этот метод обхода, выполните следующие действия.
  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. Убедитесь, что установлено значение "имя плана" @, @ dir и @ оператора в сценарий.
  9. Сохраните шаг задания.
Корпорация Майкрософт предлагает примеры программного кода только для иллюстрации Это включает, но не ограничивается, подразумеваемые гарантии товарности или пригодности для определенной цели. В данной статье предполагается, что вы знакомы с языком программирования предложенном и с помощью средств, которые используются для создания и отладки. Сотрудники службы поддержки Майкрософт могут пояснить конкретной процедуры, но они будут изменять примеры для реализации дополнительных возможностей или удовлетворения конкретных требований.

Свойства

Код статьи: 279867 - Последний отзыв: 5 июня 2011 г. - Revision: 4.0
Информация в данной статье относится к следующим продуктам.
  • Microsoft SQL Server 2000 Standard Edition
Ключевые слова: 
kbbug kbfix kbsqlserv2000sp1fix kbmt KB279867 KbMtru
Переведено с помощью машинного перевода
ВНИМАНИЕ! Перевод данной статьи был выполнен не человеком, а с помощью программы машинного перевода, разработанной корпорацией Майкрософт. Корпорация Майкрософт предлагает вам статьи, переведенные как людьми, так и средствами машинного перевода, чтобы у вас была возможность ознакомиться со статьями базы знаний KB на родном языке. Однако машинный перевод не всегда идеален. Он может содержать смысловые, синтаксические и грамматические ошибки, подобно тому как иностранец делает ошибки, пытаясь говорить на вашем языке. Корпорация Майкрософт не несет ответственности за неточности, ошибки и возможный ущерб, причиненный в результате неправильного перевода или его использования. Корпорация Майкрософт также часто обновляет средства машинного перевода.
Эта статья на английском языке:279867

Отправить отзыв

 

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