Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

Ejecutar un SP el primer día de cada mes

Estas en el tema de Ejecutar un SP el primer día de cada mes en el foro de SQL Server en Foros del Web. Hola. Tengo un SP "sp_habil_al_mes" sin parametros de ejecucion... Como puedo hacer que se ejecute el Primer dia de cada mes a las 6 de ...
  #1 (permalink)  
Antiguo 15/08/2009, 10:50
Avatar de vrenzo  
Fecha de Ingreso: febrero-2007
Mensajes: 289
Antigüedad: 17 años, 2 meses
Puntos: 15
Ejecutar un SP el primer día de cada mes

Hola.

Tengo un SP "sp_habil_al_mes" sin parametros de ejecucion...

Como puedo hacer que se ejecute el Primer dia de cada mes a las 6 de la mañana?...
fuera de un programa o aplicación. Quiero que se ejecute directamente en el SQL 2000 sin depender de un programita externo... ya que seguramente me diran que vea esa manera.

Pense en programarlo como cuando mando a ejecutar un bk de la db cada día... o un DTS... alguna ayuda?
  #2 (permalink)  
Antiguo 15/08/2009, 17:32
Avatar de flaviovich  
Fecha de Ingreso: agosto-2005
Ubicación: Lima, Peru
Mensajes: 2.951
Antigüedad: 18 años, 8 meses
Puntos: 39
Respuesta: Ejecutar un SP el primer día de cada mes

Tienes que crear un job, ahi haces el llamado de tu SP, y programas el dia y hora de ejecucion.
__________________
No repitamos temas, usemos el Motor de busquedas
Plantea bien tu problema: Ayúdanos a ayudarte.
  #3 (permalink)  
Antiguo 17/08/2009, 07:30
Avatar de vrenzo  
Fecha de Ingreso: febrero-2007
Mensajes: 289
Antigüedad: 17 años, 2 meses
Puntos: 15
Respuesta: Ejecutar un SP el primer día de cada mes

Claro... mi duda era sobre como promagar un JOB... efectivamente... es correcto... gracais.

Última edición por vrenzo; 17/08/2009 a las 07:45 Razón: OK
  #4 (permalink)  
Antiguo 17/08/2009, 07:35
Avatar de vrenzo  
Fecha de Ingreso: febrero-2007
Mensajes: 289
Antigüedad: 17 años, 2 meses
Puntos: 15
Respuesta: Ejecutar un SP el primer día de cada mes

Claro... mi duda era sobre como promagar un JOB... efectivamente... es correcto... gracias.

Los pasos para programar un JOB...

DOCUMENTO QUE encontre en una web... muy explicativo...

Los trabajos, jobs en ingles y a partir de ahora me referiré a ellos como jobs, los ejecuta el servicio SQLServerAgent (SQL Server Agente) por lo que este servicio debe estar iniciado, para iniciarlo basta con ir al Administrador corporativo y expandir los niveles Servidores Microsoft SQL Server -> Grupo de SQL Server -> Administración -> SQL Server Agent, pulsáis con el botón derecho sobre él y seleccionáis la opción iniciar.

Los jobs se pueden programar de varias formas diferentes:

- Desde el administrador corporativo.
- A través de transact-sql con stored procedures propias para trabajar con jobs
- Desde código (VB, .NET, etc) con SQL-DMO


Programar jobs desde el administrador corporativo.

Desde esta opción podemos crearlos de dos formas, una es ir a la opción de “trabajos” del administrador corporativo (Servidores Microsoft SQL Server -> Grupo de SQL Server -> Administración -> SQL Server Agent –> trabajos) y pulsar con el botón derecho seleccionando nuevo (imagen 1). Pasos para crear un trabajo:

1) Tab General: esta pantalla es informativa y en ella daremos el nombre del trabajo, la categoría, una descripción y si está o no habilitado.
2) Tab pasos, donde se especificarán las acciones que debe realizar el trabajo. Para dar de alta una acción pulsaremos el botón nuevo (imagen 2):

- Nombre del paso: Nombre descriptivo de la acción que vamos a realizar.
- Tipo: Especifica el tipo, si es una sentencia de transact-sql, o se ejecuta un comando de dos con cmdshell, etc.
- Base de datos: Si el trabajo va a interactuar con una base de datos, como por ejemplo una copia de seguridad, aquí se selecciona la base de datos.
- Comandos: es lo que el trabajo ejecutará. Por ejemplo, si queremos hacer una copia de seguridad pondremos el código transact-sql que realice la copia.

3) Tab Programación. Aquí especificaremos cuando queremos que el trabajo se ejecute. Para ésto pulsaremos el botón “nueva programación” y aparecerá la imagen 3, donde podemos especificar en que acción queremos que se inicie el trabajo. Si seleccionamos la última opción, periódica, y pulsamos el botón “cambiar” aparece la imagen 4 desde donde podremos programar el trabajo para que se ejecute en una fecha y hora específica.
4) Tab Notificaciones (imagen 5), esta opción a diferencia de las anteriores no es obligatoria y se puede dejar tal como está sin tocar, aquí lo que especificamos son notificaciones del estado del trabajo.

Nota: para que la opción de “correo eléctrico al operador” funcione debéis tener configurado el SQL Mail (ver artículo sobre SQL Mail).

Esta es la forma manual de programar los jobs, existe otra forma más automática y cómoda, pero esto se verá mejor con unos ejemplos.

- Vamos a programar una copia de seguridad para que se ejecute diariamente a las 2:00 AM. Para ésto nos ponemos sobre la base de datos que queremos copiar (pubs) y con el botón derecho seleccionamos todas las tareas -> copia de seguridad de la base de datos y aparece la imagen 6, si no sabemos o no nos acordamos de cómo hacer una copia de seguridad mirar este artículo, para programarla seleccionaremos la opción de programación y pulsaremos el botón marcado con tres puntos, tras lo cual aparece la imagen 7 y pulsamos el botón cambiar (imagen 3) ahí seleccionamos en el apartado “Sucede” diariamente y en el apartado “frecuencia diaria” sucede una vez a las … y ponemos a las 2:00:00, ésto hará que la copia de seguridad se ejecute diariamente a las 2:00 AM, ahora pulsamos aceptar en todos los botones y si vamos a la opción de trabajos veremos que se nos ha creado uno nuevo.

Otra de las tareas que se puede programar son los DTS, por ejemplo, si queremos pasar los datos de una tabla a un fichero Excel periódicamente lo podríamos programar mediante un trabajo muy fácilmente (si alguien no tiene muy claro el tema de los DTS puede refrescarse la memoria aquí).

- Para realizar esta acción nos posicionaremos sobre la base de datos de la que queremos extraer los datos, en nuestro caso la pubs, y con el botón derecho seleccionamos todas las tareas -> exportar y una vez hemos pasado casi todo el asistente de exportación le diremos, en la opción “Guardar, programar y duplicar el paquete”, “Programar paquete DTS para ejecución posterior” y deseleccionaremos “Ejecutar inmediatamente” (imagen 8), si pulsamos el botón asociado saldrá la imagen 3 desde donde podremos programar fecha y hora de ejecución.

A través del administrador corporativo podemos realizar varias acciones sobre los jobs, para ésto, dentro del listado de los jobs (Servidores Microsoft SQL Server -> Grupo de SQL Server -> Administración -> SQL Server Agent –> trabajos) imagen 9, si pulsamos sobre un job con el botón derecho veremos que nos sale un menú de acciones a realizar sobre dicho job:

- Iniciar trabajo
- Detener trabajo
- Deshabilitar trabajo
- Ver historial de trabajos (imagen 10), a través de esta opción podemos ver si los jobs que tenemos programados han funcionado correctamente o han fallado.
- Eliminarlo
- Propiedades, donde aparecerá el menú (imagen 1) para poder modificar las opciones del trabajo

Programación de Jobs a través de transact-sql.

Esta opción es muy versátil porque no nos limita a trabajar con el administrador corporativo sino que nos da la posibilidad de programar jobs desde nuestros programas en .NET, asp o VB ejecutando una serie de Stored Procedures, también es un poco más complicada de realizar. Si queréis o necesitáis más información podéis mirar los libros en pantalla que viene toda la documentación sobre los jobs.

- sp_add_job: Agrega un nuevo trabajo ejecutado por el servicio SQLServerAgent.
- sp_add_jobschedule: Crea una programación para un trabajo.
- sp_add_jobserver: Destina el trabajo indicado al servidor que se indica
- sp_apply_job_to_targets: Aplica un trabajo a uno o más servidores de destino, o a los servidores de destino que pertenecen a uno o más grupos de servidores de destino.
- sp_delete_job: Elimina un trabajo.
- sp_delete_jobschedule: Quita una programación de un trabajo.
- sp_delete_jobserver: Quita el servidor de destino especificado.
- sp_delete_jobstep: Quita un paso de un trabajo.
- sp_help_job: Devuelve información acerca de los trabajos que el Agente SQL Server utiliza para realizar actividades automatizadas en SQL Server.
- sp_help_jobschedule: Devuelve información acerca de la programación de los trabajos que el Administrador corporativo de SQL Server utiliza para realizar actividades automatizadas.
- sp_help_jobstep: Devuelve información de los pasos de un trabajo que el servicio
SQLServerAgent utiliza para realizar actividades automatizadas.
- sp_start_job: Indica al Agente SQL Server que ejecute un trabajo inmediatamente.
- sp_stop_job: Indica a SQLServerAgent que detenga la ejecución de un trabajo.
- sp_update_job: Cambia los atributos de un trabajo.
- sp_update_jobschedule: Cambia la configuración de la programación del trabajo especificado.
- sp_update_jobstep: Cambia la configuración de un paso de un trabajo que se utiliza para realizar actividades automatizadas.

Programación de jobs desde código (VB, .NET, etc) con SQL-DMO
Éste es un apartado que ocupará un artículo completo por eso de momento si queréis ver como funciona podéis leer este artículo sobre SQL-DMO y .NET.


¿Dónde se guardan los trabajos?
Como casi todo en SQL Server los jobs e información relacionada con ellos se guarda en tablas propias del SQL Server en concreto en la base de datos msdb y en las tablas:

- sysjobs, donde guarda la información relativa a cada job
- sysjobhistory, guarda información del histórico de los jobs.
- Sysjobschedules, Contiene información acerca de los trabajos programados para su ejecución por el Agente SQL Server.
- Sysjobsteps, Contiene la información de cada paso de un trabajo que debe ejecutar el Agente SQL Server.

....

Con esto resolvi muchos problemas que tenia... Gracias.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:09.