REVISIÓN: No enviar informe de mantenimiento por correo electrónico al operador de plan de mantenimiento

Seleccione idioma Seleccione idioma
Id. de artículo: 279867 - Ver los productos a los que se aplica este artículo
Nº DE ERROR: 351140 (SHILOH_BUGS)
Expandir todo | Contraer todo

Síntomas

Un mantenimiento de base de datos de SQL Server incluye una opción para enviar un informe de mantenimiento (es decir, un archivo que contiene los resultados de la ejecución del plan de mantenimiento) por correo electrónico a un operador predefinido en el servidor. Enviar por correo electrónico el archivo de informe de mantenimiento para el operador puede fallar el mensaje de error siguientes, que puede encontrarse en el informe de mantenimiento para el Database Maintenance Plan:
Error 18025: [Microsoft] [controlador ODBC para SQL Server] [SQL Server] xp_sendmail: correo error 0 x 80004005
Este error no afecta a los informes del estado del trabajo; el trabajo sí se muestra como correcta.

Causa

El procedimiento almacenado extendido xp_sendmail produce el error anterior al intentar enviar un archivo abierto como datos adjuntos de correo electrónico. Sqlmaint.exe se ejecuta el plan de mantenimiento y se escribe resultados en el archivo de informe. El paso final en el plan de mantenimiento, que consiste en enviar un mensaje de correo electrónico, también está registrado en el informe. Como todavía está abierto el archivo de informe cuando xp_sendmail intenta enviar como datos adjuntos, el intento falla.

Solución

Para resolver este problema, consiga el Service Pack más reciente para SQL Server 2000. Para obtener información adicional, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:
290211INF: Cómo obtener el Service Pack más reciente de SQL Server 2000

Solución

Para una solución para este problema, consulte la sección "Más información" de este artículo.

Estado

Microsoft ha confirmado que este es un problema de SQL Server 2000. Este problema se corrigió por primera vez en SQL Server 2000 Service Pack 1.

Más información

Para evitar este problema, puede incluir la secuencia de comandos a continuación como un paso de trabajo adicional en el último trabajo creado por un determinado Maintenance Plan. Esta secuencia de comandos siguiente envía el último archivo de informe para un plan de mantenimiento específico a una dirección de correo electrónico especificada.

Para utilizar esta solución provisional, siga estos pasos:
  1. Identificar el último trabajo para el plan de mantenimiento.
  2. Haga clic con el botón secundario en el trabajo, haga clic en Propiedades , haga clic en pasos , seleccione el paso y, a continuación, haga clic en Modificar .
  3. En el cuadro de diálogo Modificar paso de trabajo , haga clic en la ficha Avanzadas .
  4. Establecer en acción correcto en Ir A siguiente paso .
  5. Haga clic en Aceptar en el cuadro de diálogo Modificar paso de trabajo .
  6. Haga clic en nuevo para agregar un nuevo paso y, a continuación, asigne el paso de un nombre. tipo debe ser la Secuencia de comandos de Transact-SQL (TSQL) y base de datos debe ser maestro .
  7. Pegue la siguiente secuencia de comandos en la ventana 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. Asegúrese de que los valores de @ planname, @ dir y @ operador están establecidos en la secuencia de comandos.
  9. Guardar el paso de trabajo.
Microsoft proporciona ejemplos de programación con fines ilustrativos únicamente, sin ninguna garantía tanto expresa como implícita. Esto incluye, entre otras, las garantías implícitas de comerciabilidad e idoneidad para un fin determinado. Este artículo se supone que está familiarizado con el lenguaje de programación que se muestra y con las herramientas que se utilizan para crear y depurar procedimientos. Los ingenieros de soporte técnico de Microsoft pueden explicarle la funcionalidad de un determinado procedimiento, pero no modificarán estos ejemplos para ofrecer mayor funcionalidad ni crearán procedimientos que cumplan sus requisitos específicos.

Propiedades

Id. de artículo: 279867 - Última revisión: jueves, 23 de junio de 2005 - Versión: 5.2
La información de este artículo se refiere a:
  • Microsoft SQL Server 2000 Standard Edition
Palabras clave: 
kbmt kbbug kbfix kbsqlserv2000sp1fix KB279867 KbMtes
Traducción automática
IMPORTANTE: Este artículo ha sido traducido por un software de traducción automática de Microsoft (http://support.microsoft.com/gp/mtdetails) en lugar de un traductor humano. Microsoft le ofrece artículos traducidos por un traductor humano y artículos traducidos automáticamente para que tenga acceso en su propio idioma a todos los artículos de nuestra base de conocimientos (Knowledge Base). Sin embargo, los artículos traducidos automáticamente pueden contener errores en el vocabulario, la sintaxis o la gramática, como los que un extranjero podría cometer al hablar el idioma. Microsoft no se hace responsable de cualquier imprecisión, error o daño ocasionado por una mala traducción del contenido o como consecuencia de su utilización por nuestros clientes. Microsoft suele actualizar el software de traducción frecuentemente.
Haga clic aquí para ver el artículo original (en inglés): 279867

Enviar comentarios

 

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