CORRECÇÃO: Falha no envio relatório de manutenção por correio electrónico para o operador no plano de manutenção

Traduções de Artigos Traduções de Artigos
Artigo: 279867 - Ver produtos para os quais este artigo se aplica.
N.º DE BUGS: 351140 (SHILOH_BUGS)
Expandir tudo | Reduzir tudo

Sintomas

Um plano de manutenção da base de dados do SQL Server inclui uma opção para enviar um relatório de manutenção (ou seja, um ficheiro que contém os resultados para a execução do plano de manutenção) por um operador predefinido no servidor de correio electrónico. O ficheiro de relatório de manutenção para o operador de correio electrónico poderá falhar com a seguinte mensagem de erro, que pode ser encontrada no relatório de manutenção para o plano de manutenção da base de dados:
Erro 18025: [Microsoft] [ODBC SQL Server controlador] [servidor SQL] xp_sendmail: falhou com o correio erro 0 x 80004005
Este erro não afecta os relatórios do estado da tarefa; a tarefa propriamente dito é mostrada como com êxito.

Causa

xp_sendmail procedimento armazenado expandido falha com o erro acima quando tentar enviar um ficheiro aberto como um anexo de correio electrónico. Sqlmaint.exe executa o plano de manutenção e escreve resultado no ficheiro de relatório. O passo final a manutenção de plano, que irá enviar uma mensagem de correio electrónico, também é registado no relatório. Ainda porque o ficheiro de relatório é aberto quando xp_sendmail tentar enviar como anexo, o tentativa falhar.

Resolução

Para resolver este problema, obtenha o service pack mais recente do SQL Server 2000. Para obter informações adicionais, clique no número de artigo que se segue para visualizar o artigo na Microsoft Knowledge Base:
290211INF: How to Obtain the Latest SQL Server 2000 Service Pack

Como contornar

Para uma solução para este problema, consulte a secção "Mais informação" deste artigo.

Ponto Da Situação

A Microsoft confirmou que este é um problema no SQL Server 2000. Este problema foi corrigido pela primeira vez no SQL Server 2000 Service Pack 1.

Mais Informação

Para contornar este problema, pode incluir o script abaixo como um passo de tarefa adicional na tarefa de última criado por um determinado plano de manutenção. Este script abaixo envia o último ficheiro de relatório para um plano de manutenção específico para um endereço de correio electrónico especificado.

Para utilizar esta solução alternativa, siga estes passos:
  1. Identificar o último trabalho para o plano de manutenção.
  2. Clique com o botão direito do rato a tarefa, clique em Propriedades , faça clique sobre os passos , seleccione o passo e, em seguida, clique em Editar .
  3. Na caixa de diálogo Editar passo de projecto , clique no separador Avançadas .
  4. Definido em acção com êxito para Ir para o passo seguinte .
  5. Clique em OK na caixa de diálogo Editar passo de projecto .
  6. Clique em Novo para adicionar um passo de novo e atribua o passo um nome. o tipo deve ser Script Transact-SQL (TSQL) e da base de dados deve ser principal .
  7. Cole o script seguinte na janela de comandos:
    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. Certifique-se que os valores @ planname, @ dir e @ operador estão definidos no script.
  9. Guarde o passo de tarefa.
A Microsoft fornece exemplos de programação apenas, para fins sem garantia expressa ou implícita. Isto inclui, mas não está limitado a, as garantias implícitas de comercialização ou adequação a um fim específico. Este artigo pressupõe que está familiarizado com a linguagem de programação apresentada e as ferramentas que são utilizadas para criar e depurar procedimentos. Os técnicos de suporte da Microsoft podem ajudar a explicar a funcionalidade de um determinado procedimento, mas não modificarão estes exemplos para proporcionarem funcionalidades adicionais nem criarão procedimentos adaptados às necessidades específicas do utilizador.

Propriedades

Artigo: 279867 - Última revisão: 23 de junho de 2005 - Revisão: 5.2
A informação contida neste artigo aplica-se a:
  • Microsoft SQL Server 2000 Standard Edition
Palavras-chave: 
kbmt kbbug kbfix kbsqlserv2000sp1fix KB279867 KbMtpt
Tradução automática
IMPORTANTE: Este artigo foi traduzido por um sistema de tradução automática (também designado por Machine translation ou MT), não tendo sido portanto revisto ou traduzido por humanos. A Microsoft tem artigos traduzidos por aplicações (MT) e artigos traduzidos por tradutores profissionais. O objectivo é simples: oferecer em Português a totalidade dos artigos existentes na base de dados do suporte. Sabemos no entanto que a tradução automática não é sempre perfeita. Esta pode conter erros de vocabulário, sintaxe ou gramática? erros semelhantes aos que um estrangeiro realiza ao falar em Português. A Microsoft não é responsável por incoerências, erros ou estragos realizados na sequência da utilização dos artigos MT por parte dos nossos clientes. A Microsoft realiza actualizações frequentes ao software de tradução automática (MT). Obrigado.
Clique aqui para ver a versão em Inglês deste artigo: 279867

Submeter comentários

 

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