jueves, 3 de abril de 2014

Cómo programar SQL Server para que realice tareas automáticas

SQL Server permite programar tareas de cualquier tipo para que se ejecuten automáticamente a la hora que deseemos, de ellas  la más habitual es programar una copia de seguridad de la base de datos por ejemplo para que se realice todas las noches de madrugada.

Para programar una tarea automática en SQL server hay que abrir el explorador de objetos y tener activado el Agente de SQL server, dentro del agente sobre la carpeta de trabajos.

                                 monitor de actividad SQL Server

Pulsamos botón derecho del ratón y elegimos nuevo trabajo.

nuevo trabajo SQL server

Con esto se abre la pantalla de abajo, sobre la pestaña General (ver a su izquierda) escribiremos el nombre de la tarea, el propietario que será el administrador sa o cualquier otro.
Programar backup de una base de datos

En descripción podemos escribir un texto explicativo de lo que hace la tarea, y en el check habilitado lo marcaremos para que la tarea se ejecute cuando le indiquemos más adelante. Pulsamos a la izquierda sobre la pestaña pasos y se abre una pantalla similar a la anterior.

nuevo paso en SQL Server

Pulsamos el botón nuevo para agregar un nuevo paso, lo que abrirá otra ventana, en esta ventana pondremos el nombre del paso, el tipo del paso, por defecto una secuencia de comandos Transact-SQL.

programar paso en SQL Server

También elegimos la base de datos sobre la que actuará la secuencia de comandos y finalmente en el área específica para ello escribiremos la secuencia de comandos, en este caso la secuencia para realizar una copia de seguridad de la base de datos.
Esta nueva pantalla a su vez tiene dos pestañas, la General mostrada arriba y la de Avanzado mostrada abajo.
acciones del paso SQL server

En la pestaña de Avanzado podemos especificar la acción a realizar después del paso si hubiera más de dos, el número de reintentos, lo que hará en caso de error, etc.
También podemos elegir en que directorio  se grabará la copia de seguridad (en este caso) o el archivo de salida en un caso más general. Se hace pulsando el botón de los tres puntos … remarcado en rojo, que nos abre un cuadro estándar para elegir un directorio.


Guardar fichero resultados acción SQL Server

Hecho esto sobre la pantalla de la pestaña pasos aparecerá nuestro paso creado, podemos crear tantos como queramos pero en este caso nos basta con uno. Si queremos modificarlo nos posicionamos sobre el paso deseado y pulsamos el botón Editar.

Paso creado en SQL Server

Si pulsamos la pestaña programaciones pulsando el botón nuevo, se nos abrirá otra pantalla donde le indicaremos si la tarea será periódica, la frecuencia de esta, la hora de comienzo, etc. También es importante pulsar el check Habilitado a la derecha del tipo de programación para que esta se ejecute

Periodicidad acciones del paso SQL Server

Elegidas las opciones deseadas pulsamos Aceptar y vamos a la pestaña notificaciones donde podremos elegir como y a quien se notificará cuando se realice la tarea o cuando se produzca un fallo.

Notificaciones SQL Server

Finalmente realizada la nueva tarea, esta aparecerá en la página principal del monitor de actividad. Si se ha realizado correctamente aparecerá con un icono verde y si dio error aparecerá con un icono de aspa roja.

Tarea SQL Server creada







5 comentarios:

  1. quiero hacer lo mismo con un delete

    ResponderEliminar
  2. Quiero Hacer lo mismo para borrar registros antiguos de mi bd. Y uqe solo me queden los registros mas recientes. (puede ser un margen de 2 meses... Como lo haria? alguien me puede ayudar?

    ResponderEliminar
  3. Dependiendo de la cantidad de tablas que tengas en tu base de datos la tarea puede ser más o menos tediosa. Si tienes muchas tablas
    borrar registros con más de dos meses puede ser una tarea compleja por lo que la mejor opción es precisamente generar una tarea para que
    se ejecute automáticamente todos los meses o todas las semanas.

    La tarea se crea como explico en el post y en los pasos tendrías que poner tantas intrucciones del tipo:

    DELETE dbo.tbNombre_Tabla where DATEDIFF(month, Columna_fecha, GETDATE()) > 2

    como tablas tangas de tal modo que que quedaría una tarea de este estilo.

    DELETE dbo.tbNombre_Tabla1 where DATEDIFF(month, Columna_fecha1, GETDATE()) > 2
    DELETE dbo.tbNombre_Tabla1 where DATEDIFF(month, Columna_fecha2, GETDATE()) > 2
    DELETE dbo.tbNombre_Tabla2 where DATEDIFF(month, Columna_fecha, GETDATE()) > 2
    DELETE dbo.tbNombre_Tabla3 where DATEDIFF(month, Columna_fecha, GETDATE()) > 2
    ....
    ....

    etc.

    Que se ejecutará automáticamente cada periodo de tiempo que le especifiques.
    Espero que te sirva de ayuda.

    ResponderEliminar
  4. Qué version de SQL Management tenés ??? en el que tengo no aparece el Agente SQL Server en el árbol...

    ResponderEliminar
    Respuestas
    1. Yo tengo SQL 2005, SQL 2008 R2 y SQL 2014. Lo veo en las tres versiones, tal vez sea un problema de licencia. Por ejemplo aquí indica que en las licencias Express no está disponible el SQL Server Agent.

      https://www.microsoft.com/es-es/download/details.aspx?id=8961

      Aquí explica como iniciar el agente en SQL 2008
      https://technet.microsoft.com/es-es/library/ms191454(v=sql.105).aspx

      Y aquí en 2014.
      https://msdn.microsoft.com/es-es/library/ms178142(v=sql.120).aspx

      Eliminar