LA FUNCION DE CORREO EN SQL SERVER

 

La función de correo electrónico de SQL Server, que se puede configurar para que notifique a los administradores de bases de datos la existencia de problemas o la finalización de tareas, constituye una potente herramienta que ayuda a mantener los servidores en continuo funcionamiento. En SQL Server 6.5, SQL Mail no era precisamente la función más fácil de configurar, algo que Microsoft ya mejoró en SQL Server 7.0. (Para más información sobre cómo se configura SQL Mail en SQL Server 7.0 o 6.5, véase el artículo "INF: How to Configure SQL Mail" -"¿Cómo se configura SQL Mail?"- disponible en la dirección http://support.microsoft.com/support/kb/articles/q263/5/56.asp). Ahora, con SQL Server 2000, que puede utilizar como servidor de correo electrónico tanto un servidor POP3 como un servidor Microsoft Exchange Server, la función de correo es aún más fácil de configurar. Veamos, pues, cómo se configura SQL Mail en SQL Server 2000.

Configuración de SQL Mail

Para configurar el perfil de correo de SQL Server en Windows 2000 Advanced Server siendo el servidor de correo un servidor Exchange Server, cree, en primer lugar, una cuenta de correo electrónico en el servidor de correo. Esta será la cuenta desde la que SQL Server enviará y recibirá el correo. Nosotros disponemos, normalmente, de una cuenta de dominio que utilizamos exclusivamente para los servicios MSSQLServer y SQLAgent. Haga usted lo mismo, creeando dicha cuenta de dominio y asociándola a la cuenta de correo. A continuación, acceda al "Panel de control", haga doble clic en "Servicios" y seleccione la cuenta que SQL Server utiliza como cuenta de servicio. Dicha cuenta debe encontrarse en la cuenta de dominio. Acto seguido, inicie una sesión en el sistema SQL Server con la cuenta asociada a la cuenta de correo electrónico que acaba de crear. Una vez que haya iniciado la sesión, regrese al "Panel de control" y seleccione "Correo". Cuando haya acabado, no se olvide de reiniciar todos los servicios que se hayan visto afectados por las operaciones realizadas.

Para crear un perfil de correo, opte entre crear una nueva configuración de correo o copiar y modificar una configuración de correo ya existente. Sea cual sea la opción que elija, rellene los datos de la misma forma que lo haría con cualquier otra cuenta de correo electrónico con la sola excepción de que el host de correo debe ser compatible con MAPI (Messaging Application Programming Interface o Interfaz de programación de aplicaciones de mensajería) para que SQL Server pueda conectarse con él. Le recomendamos que utilice cuentas distintas para cada servidor y que dé a dichas cuentas nombres fácilmente distinguibles con el fin de que le resulte más fácil administrar el correo. Si utiliza cuentas distintas, podrá, por ejemplo, separar el correo electrónico proveniente de un servidor SQL Server dedicado a tareas de desarrollo del correo electrónico proveniente del servidor SQL Server de producción con el fin de poder dar prioridad a unos errores sobre otros.

A continuación, configure la función de correo electrónico de SQL Server a través de "Enterprise Manager" (Administrador corporativo). Para ello, haga doble clic, primero, en el icono "Grupo de servidores" y, después, en el servidor desde el que desee que se envíe el correo. Acto seguido, seleccione la carpeta "Servicios de compatibilidad", haga clic con el botón derecho del ratón en "SQL Mail" y seleccione la opción "Propiedades". Se abrirá, entonces, el cuadro de diálogo "SQL Mail Configuration" (Configuración de SQL Mail) en cuyo interior se encuentra el menú desplegable "Profile name" (Nombre de perfil), tal y como se aprecia en la Pantalla 1. Especifique un perfil de Exchange previamente configurado o seleccione el perfil que acaba de crear de entre las opciones que incluye el menú desplegable. Le recomendamos que seleccione, también, la casilla de verificación "Autostart SQL Mail when SQL Server starts" (Iniciar automáticamente SQL Mail al iniciar SQL Server) para asegurarse de que el administrador de bases de datos reciba todos y cada uno de los mensajes que se envíen. Para acceder a esta opción desde "Grupo de servidores", haga clic con el botón derecho del ratón en el servidor desde el que desee que se envíe el correo y seleccione la opción "Propiedades". Como medida de seguridad, le aconsejamos que pruebe la cuenta de correo electrónico antes de utilizarla con su sistema SQL Server.

Creación de un operador

Si bien es cierto que no hace falta crear ningún operador de SQL Server para utilizar algunas de las funciones de SQL Mail, le recomendamos que lo haga para que pueda sacar el mayor provecho posible de sus prestaciones. Un operador es un alias de una cuenta de correo electrónico que esperan encontrar algunas funciones predefinidas. Por ejemplo, si se configura SQL Server para que envíe un mensaje de correo electrónico a una persona determinada cada vez que fracase una operación de copia de seguridad, SQL Server enviará el mensaje de correo electrónico a la cuenta de correo electrónico del operador que se haya definido previamente. Para crear un operador, haga doble clic en "Administración", "Agente SQL Server" y "Operadores". A continuación, haga clic con el botón derecho del ratón en "Operador" y seleccione la opción "Nuevo operador". Se abrirá, entonces, un cuadro de diálogo que le permitirá rellenar los campos "Nombre" y "Correo electrónico".

Cuando cree los operadores de correo, cree también, si lo desea, dos operadores a los que puede llamar, por ejemplo, "abd" (es decir, "administrador de bases de datos") y "desarrollador". De ese modo, podrá identificar más fácilmente al operador al que se van a enviar las notificaciones relacionadas con las tareas de administración y al operador al que se van a enviar las notificaciones relacionadas con las tareas de desarrollo, respectivamente. Y cada vez que un administrador de bases de datos o un desarrollador jefe abandone la empresa y sea sustituido por otra persona, sólo tendrá que cambiar o redireccionar la dirección de correo electrónico del operador "abd" o "desarrollador" para que los mensajes de correo electrónico lleguen al operador correcto. Para cambiar la dirección de correo electrónico de un operador, haga doble clic en "Agente SQL Server" y en "Operadores", seleccione el nombre del operador en cuestión, abra el cuadro de diálogo de propiedades del mismo y sustituya la dirección de correo electrónico antigua por la nueva.

 

 

Configuración de las notificaciones automáticas

Una vez que haya configurado las opciones de SQL Mail y que haya creado los operadores, configure los sucesos que desencadenarán el envío de los mensajes de error, de finalización de tareas y de éxito o fracaso de operaciones. Para configurar los mensajes de error y de advertencia de modo que se notifiquen por medio del correo electrónico, haga doble clic en "Administración", "Agente SQL Server" y "Operadores". A continuación, haga clic con el botón derecho del ratón en el operador que desee que reciba el mensaje en cuestión y seleccione la opción "Propiedades". Se abrirá, entonces, un cuadro de diálogo en cuyo interior se encuentra la ficha "Notifications" (Notificaciones) que muestra la Pantalla 2. Dicha ficha le permitirá seleccionar los mensajes de error que desee que se envíen por correo electrónico al operador, incluidos "Full msdb log" (Registro de msdb lleno), "Full tempdb" (Tempdb lleno) y varios errores cuyos niveles de gravedad son iguales o superiores a 19.

Le recomendamos que seleccione tanto "Full msdb log" como "Full tempdb". Cuando se llena el registro de la base de datos "msdb", se interrumpe la ejecución de todas las tareas automatizadas, ya que SQL Server no puede incluir ninguna entrada de registro hasta que no se borre dicho registro o se le asigne espacio adicional. De igual modo, cuando se llena "tempdb", el servidor interrumpe la ejecución de todas aquellas transacciones que requieran espacio en dicha base de datos al no poder incluir ninguna entrada en la misma. También le recomendamos que seleccione los errores cuyos niveles de gravedad son iguales o superiores a 19, ya que indican la existencia de algún problema con los recursos del sistema o con la finalización de procesos por lotes. Los errores cuyos niveles de gravedad son iguales o superiores a 20 se consideran muy graves, ya que pueden ocasionar que el servidor se bloquee. Los distintos niveles de gravedad indican que el servidor tiene problemas o ha dejado de funcionar.

 

Modificación de las tareas para que utilicen SQL Mail

Las copias de seguridad -no sólo de las bases de datos de los usuarios, sino también de las bases de datos del sistema- se deben realizar antes de que la operatividad del servidor se haya visto mermada. Tanto si realiza dichas copias de seguridad de forma manual como si las realiza mediante un plan de mantenimiento, podrá configurar SQL Mail para que notifique a un operador determinado el éxito o el fracaso de las mismas. Pero recuerde que es contraproducente configurar las bases de datos para que notifiquen al operador que las operaciones de copia de seguridad se han realizado con éxito, ya que se corre el riesgo de que el operador se acostumbre a ver notificaciones de copias de seguridad realizadas con éxito y pase por alto alguna notificación de que la operación ha fracasado. En otras palabras, que si no desea que al operador se le pase ningún mensaje importante, configure la base de datos de modo que sólo notifique los fallos.

Una vez que haya configurado SQL Server para que utilice el correo electrónico, podrá modificar fácilmente la configuración de las tareas de copias de seguridad y de los planes de mantenimiento para que utilicen SQL Mail. Por lo que se refiere a los planes de mantenimiento, puede optar entre crear uno nuevo o modificar uno ya existente. Para crear uno nuevo, utilice el "Asistente para planes de mantenimiento". Para iniciar dicho asistente, acceda a "Enterprise Manager", seleccione el servidor en el que se encuentre la base de datos para la que desee crear el plan de mantenimiento y abra la carpeta "Bases de datos". A continuación, seleccione la base de datos en cuestión y haga clic en "Nuevo plan de mantenimiento". Para modificar un plan de mantenimiento ya existente, acceda a "Enterprise Manager" y seleccione el servidor en el que se encuentre el plan de mantenimiento que desee modificar. A continuación, abra la carpeta "Administración" y seleccione "Planes de mantenimiento de la base de datos" para ver los planes de mantenimiento que ya existen en el servidor. Acto seguido, haga doble clic en el plan de mantenimiento que desee modificar y seleccione la ficha "Informes". Dicha ficha le permitirá crear el operador al que se van a enviar las notificaciones de correo electrónico sobre las distintas operaciones que se configuren mediante el asistente. Para crear un operador, seleccione "Nuevo".

 

El procedimiento a seguir para la realización de una copia de seguridad es prácticamente el mismo tanto si utiliza un plan de mantenimiento como si no. Si no utiliza ningún plan de mantenimiento, haga clic con el botón derecho del ratón en el icono "Copia de seguridad" y seleccione la opción "Copia de seguridad de la base de datos" para configurar la tarea. Para realizar una copia de seguridad programada, acceda a "Enterprise Manager", seleccione la carpeta "Administración", el icono "Agente SQL Server" y la opción "Trabajos" y aparecerá en pantalla la tarea de copia de seguridad programada que está buscando. Para modificar dicha tarea, haga doble clic en ella y se abrirá el cuadro de diálogo que muestra la Pantalla 3. Seleccione la ficha "Notifications" (Notificaciones), haga clic en la casilla de verificación "E-mail operator" (Correo electrónico al operador) y seleccione el operador al que desee que se le envíen las notificaciones por correo electrónico (que, en el ejemplo de la Pantalla 3, es "dba", siglas en inglés de "database administrator o administrador de bases de datos"). Por último, especifique el momento en el que desee que se envíen las notificaciones al operador seleccionando una de las opciones siguientes: "When the job fails" (Si el trabajo no tiene éxito), "When the job succeeds" (Si el trabajo tiene éxito) o "When the job has completed" (Cuando el trabajo concluye).

 

SQL Mail y los procedimientos almacenados

Pero la función SQL Mail tiene otras aplicaciones aparte de las puramente administrativas. Por ejemplo, SQL Mail permite utilizar el procedimiento almacenado extendido xp_sendmail con activadores, procedimientos almacenados y procesos por lotes para integrar la función de correo en el código. El procedimiento almacenado extendido xp_sendmail se encuentra en la base de datos "master" (maestra o principal), pero, con la sintaxis adecuada, se puede invocar desde cualquier otra base de datos. La sintaxis correcta para la invocación de xp_sendmail desde otra base de datos es

master.dbo.xp_sendmail

seguida de cualquiera de los parámetros especificados en la Tabla 1 (puede consultar también la lista de parámetros existente en los "Libros en pantalla de SQL Server").

Recuerde que debe tener presente las siguientes normas a la hora de ejecutar el procedimiento de almacenamiento extendido xp_sendmail:

  • Configure las sesiones de SQL Mail antes de usar xp_sendmail.
  • No puede haber más de un usuario ejecutando xp_sendmail a la vez. Si un usuario realiza una consulta que tarda mucho en ejecutarse, los demás tendrán que esperar a que dicha consulta finalice.
  • Las consultas xp_sendmail se ven afectadas por los bloqueos del mismo modo que cualquier otra consulta.
  • Sólo los miembros de "sysadmin" (administradores de sistema) poseen por defecto los permisos de ejecución de xp_sendmail, pero, si lo desea, puede concedérselos también a otros usuarios.

Si, antes de utilizar xp_sendmail desde SQL Server, planifica debidamente a quién y en qué momento se deben enviar los mensajes de notificación, verá cómo se simplifican las tareas de administración y solución de problemas.
No cabe duda que xp_sendmail le hace la vida más fácil tanto a los desarrolladores como a los administradores de bases de datos. Supongamos, por ejemplo, que los agentes comerciales del gimnasio "En forma" sólo deben tener acceso a los datos más básicos de los nuevos clientes, mientras que los empleados de otros departamentos también deben tener acceso a otros datos más importantes como son los relacionados con los asuntos contables o con el estado de salud de los clientes previo a su inscripción en el gimnasio. Pero, ¿cómo van a saber los empleados de esos otros departamentos en qué momento deben recopilar los datos que necesitan sobre un cliente nuevo? Una solución sería configurar una tarea para que se ejecute todas las noches, busque los datos que falten relativos a la contabilidad y al estado de salud de los clientes nuevos y envíe los resultados a los departamentos correspondientes para su seguimiento. De ese modo, dichos departamentos recibirían cada 24 horas un informe con los datos de los clientes nuevos que se hayan inscrito en el gimnasio, lo que les permitiría disponer de la totalidad de los datos sobre los mismos.

Otra solución sería incluir un activador en la tabla en la que los agentes comerciales introducen los datos de los clientes para que detecte los registros nuevos que se introduzcan con independencia de cuál sea su origen y notifique de inmediato la existencia de los mismos al departamento interesado mediante un mensaje de correo electrónico. Una cosa que hay que tener en cuenta a la hora de utilizar xp_sendmail con un activador es que no se pueden hacer referencias a las tablas lógicas "inserted" y "deleted", por lo que habrá que hacer referencia a un campo datetime o hacer una búsqueda de los datos que falten.

El procedimiento almacenado extendido xp_sendmail permite notificar a un operador determinado los fallos de ejecución de una tarea automatizada. Supongamos que el departamento de contabilidad del gimnasio "En forma" genera los informes por las noches, ya que, aunque permanece abierto las 24 horas del día 7 días a la semana, es por las noches cuando es menor el tráfico generado por las bases de datos. Algunas tablas no cambian todos los días, pero como en este gimnasio los datos se introducen en las tablas todas las noches, podría producirse algún fallo que pasara desapercibido a los programas de generación de informes. Una solución sería incluir una bifurcación condicional en el procedimiento almacenado para que se introduzcan los datos en la tabla en el caso de que la variable de sistema @@error devuelva un valor distinto de 0. De ese modo, el procedimiento almacenado notificaría el error al operador responsable de la solución de problemas relacionados con la generación de informes mediante un mensaje de correo electrónico, tal y como se aprecia en el ejemplo siguiente:

IF @@error <>0
BEGIN
Master..xp_sendmail @recipients =
"responsable@enforma.com",
@message = "Fallo al generar el informe de nuevos clientes.",
@subject = "Fallo"
END

Esta solución permitiría al departamento de informes saber a primera hora de la mañana que se ha producido un fallo a la hora de introducir los datos en las tablas que hay que resolver.

Otra solución que podría resultar aún más eficaz cuando se generan numerosos informes por la noche sería crear una tabla en la que se almacenaran los distintos estados de los informes generados durante la noche. De ese modo, una vez que se supone que se han generado todos los informes, se podría ejecutar un procedimiento almacenado que enviara por correo electrónico al operador correspondiente un informe sobre las actividades realizadas dicha noche. Para poner en práctica esta solución, cree una tabla similar a la siguiente:

CREATE TABLE estado_informes
(
nombre_informe varchar(100) NOT NULL,
hora_inicio datetime NOT NULL,
hora_finalización datetime NULL
)
GO

De este modo, cada uno de los informes que se ejecuten insertarán sus nombres y horas de inicio al principio del informe y, cuando terminen de ejecutarse, sus horas de finalización. La existencia, por tanto, de valores NULL indicaría que algunos informes han tardado más tiempo de la cuenta en ejecutarse. Se podría crear, entonces, otro procedimiento almacenado que seleccionara todos los registros de la tabla y enviara al operador correspondiente un mensaje de correo electrónico con el estado de los informes de la noche anterior, tal y como muestra el ejemplo siguiente:

CREATE PROCEDURE sp_enviar_estado_informes
AS
Master..xp_sendmail @recipients =
"responsable@enforma.com",
@query = "SELECT * FROM estado_informes",
@subject = "Informe de estado"
GO

También se podría incluir una línea en este procedimiento almacenado para que envíe un mensaje de correo electrónico al administrador de bases de datos en el caso de que detecte un valor NULL en el campo hora_finalización, ya que dicho valor indicaría la existencia de algún problema en la ejecución de un informe. Para asegurarse de que el tamaño de la tabla estado_informes no crezca en exceso, archívela con frecuencia o trúnquela de vez en cuando.

 


Plantillas en SQL