Tareas planificadas
Introducción
SQL Server ofrece la posibilidad de automatizar las tareas administrativas. Por supuesto, no es posible automatizar todas las tareas, pero las tareas planificadas son un buen complemento a la optimización que SQL Server hace por defecto. Además, con estas tareas predefinidas, el administrador tiene un rol de anticipador, lo que le da más posibilidades para salir adelante de la mejor manera posible, tanto en términos de rendimiento como de fiabilidad.
La gestión de tareas planificadas, las alertas y las operaciones son servicios gestionados por el agente SQL Server. Este servicio debe iniciarse para que todos estos elementos sean administrados. El agente SQL Server trabaja con el Observador de eventos para gestionar los errores de SQL Server, con el Monitor de rendimiento para gestionar las alertas relativas a las condiciones de rendimiento y con la base de datos MSDB para averiguar la respuesta que hay que aplicar ante una alerta o las tareas planificadas que hay que ejecutar.
Principio de funcionamiento
Cuando se produce una alerta, el agente puede reaccionar de dos maneras diferentes; ejecutando un trabajo determinado o previniendo a un operador para que esté al corriente del problema que acaba de aparecer. Obviamente, la ejecución de una tarea puede conducir a la activación de nuevas tareas y así sucesivamente.
Otras tareas planificadas van a ejecutarse por medio del servicio SQL Server...
Configuración de los servicios
Como la ejecución automática de trabajos administrativos se apoya en el servicio SQL Server Agent, es importante que este último esté correctamente configurado.
La configuración del servicio MSSQL se ha tratado durante la instalación.
1. La seguridad de SQL Server Agent
El servicio SQL Server Agent permite administrar numerosos elementos. En caso de que el servicio deba tener derechos importantes sobre el servidor para poder realizar correctamente todas las tareas que le son asignadas, la utilización de este servicio debe controlarse de la manera más precisa posible. Este control está asegurado por los tres roles de base de datos, definidos en la base de datos msdb:
-
SQLAgentUserRole: pueden crear sus propios trabajos,
-
SQLAgentReaderRole: además pueden listar todos los trabajos del servidor,
-
SQLAgentOperatorRole: todos tiene permisos sobre la gestión de los trabajos, alertas y operadores.
La pertenencia a estos roles es necesaria únicamente para los usuarios que no sean miembros del rol de servidor sysadmin.
Por ejemplo, en caso de que un usuario se conecte a la consola gráfica SQL Server Management Studio sin ser miembro de uno de estos tres roles, la herramienta no presentará el nodo relativo a SQL Server Agent. De esta manera, el usuario no es capaz de modificar, ni siquiera de saber, el trabajo realizado a nivel de la automatización de tareas. El mismo nivel de seguridad se define a nivel de Transact...
Los operadores
Un operador puede corresponder a una persona física o bien a una función de la empresa. En función del tamaño de la empresa, una misma persona física puede desempeñar la función de varios operadores, o bien un mismo operador puede corresponder a varias personas físicas.
Los operadores serán utilizados por el agente SQL Server para avisar, por medio del correo electrónico, del fin de la ejecución de un trabajo o del desencadenamiento de una alerta para informar de la gravedad de la situación.
La definición de todos los operadores se almacena en la base msdb.
1. Creación
Es preferible definir los operadores antes que las alertas y los trabajos, ya que las operaciones administrativas se encadenan en un orden lógico.
Las principales características de un operador son:
-
Su nombre.
-
Su dirección de correo electrónico (es conveniente utilizar direcciones de grupos de distribución, en el caso de que se deba notificar a varias personas simultáneamente).
SQL Server Management Studio
Para crear un nuevo operador, es necesario seleccionar Nuevo operador desde el menú contextual asociado al nodo Agente SQL Server - Operadores del explorador de objetos de SQL Server Management Studio.
Transact SQL
Es posible crear un nuevo operador a través del procedimiento almacenado sp_add_operator.
Ejemplo
USE [msdb]
GO ...
Los trabajos
Es posible automatizar algunas tareas de administración repetitivas a través de trabajos y de la planificación de su ejecución. Por supuesto, también es posible lanzar manualmente su ejecución.
Los trabajos están formados por un conjunto de tareas. Al final de cada tarea se pueden presentar dos casos: o bien la tarea se ha ejecutado con éxito o bien ha habido un fallo.
El trabajo, que es un encadenamiento de tareas, debe definir todas las soluciones posibles para que pueda ejecutarse correctamente.
Todos los trabajos se almacenan en la tabla dbo.sysjobs de la base msdb.
1. Implantación
Las principales características de un trabajo son:
-
El nombre: debe ser único en el servidor y está limitado a 128 caracteres.
-
La categoría: permite organizar los trabajos en función de las operaciones que realizan. Existen, desde la instalación del servidor, categorías predefinidas, como búsqueda de texto completo, mantenimiento de la base de datos...
-
El propietario: este puede ser diferente del usuario que lo ha creado.
-
La descripción.
-
Las etapas del trabajo.
-
La planificación.
-
La notificación.
Cada trabajo puede estar asociado a una categoría. La agrupación por categoría permite una agrupación lógica de los diferentes trabajos.
La creación de un trabajo solo es posible para un administrador del sistema (sysdamin) o bien para un usuario miembro de uno de los tres roles de base de datos asociados a SQL Server Agent.
La modificación y la eliminación de un trabajo solo las puede efectuar el propietario o un administrador del sistema.
La definición de un trabajo puede realizarla bien SQL Server Management Studio o bien el procedimiento almacenado sp_add_job.
USE [msdb]
GO
EXEC msdb.dbo.sp_add_job @job_name=N'trabajo de prueba',
@enabled=1,
@notify_level_eventlog=0...
Las alertas
Las alertas se definen con el objetivo de disparar un tratamiento automático para solucionar el problema o advertir a un operador, que será capaz de reaccionar rápidamente para resolver el problema.
1. Presentación
Cuando un servidor está funcionando, los errores, mensajes o eventos generados por SQL Server se registran en el Observador de eventos de Windows. El agente SQL Server lee el diario de Aplicación de eventos para buscar la información que puede tratar, comparándola con las alertas que han sido definidas en la tabla dbo.sysalerts de la base de datos msdb.
También se puede disparar una alerta cuando un contador de rendimiento supera un valor límite (fijo). Por último, una alerta puede dispararse tras un evento WMI (Windows Management Instrumentation) concreto. En este último caso, el agente SQL Server es un cliente del espacio de nombres WMI y en el momento de definir la alerta es necesario especificar el evento WMI que va a dispararla.
Las alertas asociadas a un error SQL Server son las más frecuentes.
a. ¿Cómo registrar la información en el diario de Aplicación?
Hay tres tipos de eventos que se pueden registrar en el Observador de eventos:
-
Los mensajes con nivel de gravedad superior a 19. Los mensajes se almacenan en la tabla dbo.sysmessages de la base Master. Para obligar a que se registre en el diario un mensaje cuando el nivel de gravedad es inferior a 19, es necesario ejecutar el procedimiento sp_altermessage.
-
Todas las instrucciones RAISERROR con la opción WITH LOG.
-
Todo evento registrado con xp_logevent.
El tamaño del diario de aplicación del Observador de eventos de Windows debe ser suficiente como para contener todos los mensajes.
b. ¿Cómo reacciona el agente SQL Server?
El agente SQL recorre el diario de Aplicación buscando mensajes que provengan de SQL Server. Entonces compara el error con las alertas definidas en la tabla dbo.sysalerts que está cargada en memoria caché para mejorar los rendimientos.
Esta alerta dispara la ejecución de una tarea planificada o la notificación al operador.
2. Gestión de las alertas
Cada alerta tiene un nombre único. Este nombre está limitado a 128 caracteres.
Solo los mensajes registrados en el Observador de eventos pueden disparar una alerta.
a. Como respuesta a errores de SQL Server...
Ejercicio: planificar tareas
1. Enunciado
Defina una tarea planificada Eliminación pedidos en la base de datos Gescom que se ejecutará todos los primeros días del mes a las 23:00 y cuya finalidad será eliminar los pedidos anteriores al 1 de enero del año actual.
2. Solución
Después de verificar que el servicio SQL Server Agent está arrancado, debemos posicionarnos en la rama Trabajo y elegir la opción Nuevo trabajo desde el menú contextual.
En la sección General, indicamos el nombre de la tarea y después nos situamos en la sección Pasos. Llegados allí debemos crear una nueva etapa (botón Nuevo) y completarla como sigue:
En caso de duda sobre la sintaxis Transact SQL, el botón Analizar permite asegurar que el script es sintácticamente correcto.
A continuación debemos situarnos en la sección Programaciones para programar la ejecución de esta tarea todos los primeros días de cada mes a las 23:00. La siguiente imagen ilustra esta planificación: