locked
adjuntar log a mail tras backup RRS feed

  • Pregunta

  • Hola, me gustaría adjuntar el log de una tarea de backup al mail que se envia a un operador cuando finaliza la tarea. El mail llega bien, pero no sé como podría adjuntar ese log al mail.

    Saludos,
    lunes, 11 de mayo de 2009 10:31

Respuestas

  • Hola.

    Eso ya no es trivial. Te indico más o menos cómo lo haría yo. Por un lado, contaría con este procedimiento almacenado: http://blog.tech-cats.com/2008/03/querying-file-system-from-coldfusion-to.html. Es para facilitar el manejo de las consultas al sistema de ficheros, lo podrías hacer igual tirando de xp_cmdshell y ms-dos, este procedimiento te ayuda un poco a escribir menos código. 

    Así, modificas el procedimiento para que te devuelva únicamente el último fichero modificado de una extensión dada. Para ello, cambias donde ponga:

    select * from #fileList

    Pones: 

    select top 1 [filename] from #filelist order by lastModifiedOn desc

    Así te devuelve el último fichero. Y eso se lo pasas como parámetro al otro procedimiento. Lo puedes hacer en un único batch (una sola tarea).

    Alberto López Grande.



    lunes, 11 de mayo de 2009 15:09
    Moderador

Todas las respuestas

  • Hola.

    No sé exactamente cómo estás enviando ese mail, una de las posibilidades sería, dentro de un paquete de Integration Services que realiza el backup, que exista una tarea de Envío de Mail. Si es ese el caso, hay una propiedad llamada "Attachments", ahí le pones la ruta del fichero a adjuntar (si ya está en un fichero el log). Te paso un link:


    Otra forma sería con procedimientos almacenados de envío de mail, que permiten adjuntar el resultado de una consulta, por ejemplo. Dime cómo lo estás haciendo ahora, para ver la mejor aproximación al caso.

    Alberto López Grande.
    lunes, 11 de mayo de 2009 11:02
    Moderador
  • Hola Alberto,

    He configurado una cuenta de correo para que envíe y un perfil público para esa cuenta en Database Mail. Luego he creado un operador que será el que reciba los correos. En un maintenance plan, le agregado la tarea Notify Operator Task, la cual se ejecuta cuando una tarea de backup database da success. Al ejecutar el plan, el correo llega correctamente a la cuenta del operador, con el texto que le indico en la tarea de Notify Operator Task, pero me gustaría adjuntar el log completo, sobretodo para poder programar este mismo envio de mail en planes que tienen varias tareas configuradas, y que en ese mail se notificara el resultado de todas las tareas.

    Saludos,
    lunes, 11 de mayo de 2009 11:08
  • Hola.

    En ese caso, lo más fácil sería utilizar directamente el procedimiento almacenado sp_notify_operator desde una tarea "Execute T-SQL Task" (que es lo que hace esta tarea de Notify Operator Task), indicando el attachment en el parámetro adecuado.


    También puedes añadir esta tarea de Send Mail Task a tu plan de mantenimiento. No sale cuando lo abres desde el Management Studio, pero un plan de mantenimieno no deja de ser un dtsx. Puedes abrir ese dtsx desde el Bussiness Intelligent Development Studio (importando el plan de mantenimiento), agregar esta tarea en la que sí puedes adjuntar el archivo y luego guardando el dts en el servidor de SQL Server, dentro de la carpeta MaintenancePlans. Entiendo que esto puede ser algo enrevesado.

    Otra opción que se me ocurren es que incluyas en el mensaje un link (o la ruta únicamente) al fichero de log, sugiriendo su lectura en el mensaje.

    Alberto López Grande.
    lunes, 11 de mayo de 2009 12:37
    Moderador
  • Hola Alberto, parece que lo mas facil es el execute t-sql task con sp_notify_operator. Lo tengo ya escrito, pero ¿como le indico el archivo que tiene que enviar?. En la carpeta de logs se genera un log por cada vez que se ejecuta el plan, con el formato de [plan+fecha+hora]. Yo no sé cuanto va a durar, y por lo tanto cual es el nombre exacto del archivo. ¿Como se lo indico?

    Saludos
    lunes, 11 de mayo de 2009 14:22
  • Hola.

    Eso ya no es trivial. Te indico más o menos cómo lo haría yo. Por un lado, contaría con este procedimiento almacenado: http://blog.tech-cats.com/2008/03/querying-file-system-from-coldfusion-to.html. Es para facilitar el manejo de las consultas al sistema de ficheros, lo podrías hacer igual tirando de xp_cmdshell y ms-dos, este procedimiento te ayuda un poco a escribir menos código. 

    Así, modificas el procedimiento para que te devuelva únicamente el último fichero modificado de una extensión dada. Para ello, cambias donde ponga:

    select * from #fileList

    Pones: 

    select top 1 [filename] from #filelist order by lastModifiedOn desc

    Así te devuelve el último fichero. Y eso se lo pasas como parámetro al otro procedimiento. Lo puedes hacer en un único batch (una sola tarea).

    Alberto López Grande.



    lunes, 11 de mayo de 2009 15:09
    Moderador