Job SQL analisis de laboreo

Instructivo: Automatización del Análisis de Labores e Insumos

1. Objetivo

Describir el proceso técnico para la creación y configuración de un Job en SQL Server que automatice la ejecución del procedimiento almacenado ANALISISLABORESINSUMOS. Este proceso asegura que las tablas de análisis se actualicen diariamente de forma desatendida.

2. Detalles del Job

  • Nombre del Job: Job_AnalisisLaboresInsumos_Diario

  • Frecuencia: Diaria.

  • Horario de ejecución: 23:00 hs (11:00 PM).

  • Acción: Ejecución del SP ANALISISLABORESINSUMOS.

3. Requisitos Previos

  1. Estado del Servicio: El servicio SQL Server Agent debe estar en ejecución (índice verde en el Object Explorer).

  2. Permisos: El usuario que ejecute el script debe tener el rol sysadmin o pertenecer a SQLAgentUserRole en la base de datos msdb.

  3. Base de Datos: Identificar el nombre exacto de la base de datos donde reside el procedimiento almacenado.


4. Procedimiento de Implementación

Paso 1: Configuración del Script

Antes de ejecutar el script en el entorno, es imperativo modificar el parámetro @database_name en la línea del Paso 4 del código, reemplazando 'TuBaseDeDatos' por el nombre real de la base de datos de producción/operación.

Paso 2: Ejecución del Script SQL

Copiar y ejecutar el siguiente bloque de código en una ventana de consulta (New Query) en SQL Server Management Studio (SSMS):

SQL

USE msdb;
GO

-- A. Limpieza: Elimina el Job si ya existe para evitar duplicados o errores de conflicto
IF EXISTS (SELECT job_id FROM msdb.dbo.sysjobs WHERE name = N'Job_AnalisisLaboresInsumos_Diario')
BEGIN
    EXEC msdb.dbo.sp_delete_job @job_name = N'Job_AnalisisLaboresInsumos_Diario';
END
GO

-- B. Creación del Contenedor del Job
DECLARE @jobId BINARY(16);

EXEC msdb.dbo.sp_add_job 
    @job_name = N'Job_AnalisisLaboresInsumos_Diario', 
    @enabled = 1, 
    @description = N'Ejecuta el SP ANALISISLABORESINSUMOS diariamente a las 11 PM.', 
    @job_id = @jobId OUTPUT;

-- C. Configuración del Paso (Step) de ejecución
-- IMPORTANTE: Cambiar 'TuBaseDeDatos' por el nombre real de la BD
EXEC msdb.dbo.sp_add_jobstep 
    @job_id = @jobId, 
    @step_name = N'Ejecutar SP ANALISISLABORESINSUMOS', 
    @step_id = 1, 
    @cmdexec_success_code = 0, 
    @on_success_action = 1, -- Salir reportando éxito
    @on_fail_action = 2,    -- Salir reportando error
    @database_name = N'TuBaseDeDatos', 
    @command = N'EXEC ANALISISLABORESINSUMOS', 
    @retry_attempts = 0, 
    @retry_interval = 0;

-- D. Programación del Horario (Schedule)
EXEC msdb.dbo.sp_add_jobschedule 
    @job_id = @jobId, 
    @name = N'HorarioDiario_23hs', 
    @enabled = 1, 
    @freq_type = 4,          -- Tipo: Diario
    @freq_interval = 1,      -- Repetir: Cada 1 día
    @active_start_time = 230000; -- Formato HHMMSS (23:00:00)

-- E. Asignación al Servidor Local
EXEC msdb.dbo.sp_add_jobserver 
    @job_id = @jobId, 
    @server_name = N'(local)';
GO


5. Verificación y Monitoreo

Verificación Inicial

Para confirmar que el Job se ha creado correctamente, ejecute la siguiente consulta:

SQL

SELECT name, enabled, start_step_id, date_created 
FROM msdb.dbo.sysjobs 
WHERE name = 'Job_AnalisisLaboresInsumos_Diario';

Ejecución de Prueba

Se recomienda realizar una ejecución manual inicial para validar que los permisos y la lógica del SP funcionen dentro del contexto del Job:

  1. En el Object Explorer, expanda SQL Server Agent > Jobs.

  2. Click derecho en Job_AnalisisLaboresInsumos_Diario.

  3. Seleccione Start Job at Step….

Monitoreo de Errores

En caso de falla, revisar el historial:

  • Click derecho sobre el Job > View History.

6. Resolución de Problemas Frecuentes

  • Error “Could not find stored procedure”: Asegúrese de haber escrito correctamente el nombre de la base de datos en el parámetro @database_name.

  • El Job no corre a la hora programada: Verifique que el servicio SQL Server Agent esté encendido.

  • Error de permisos (Truncate table): El usuario que ejecuta el Agent debe tener permisos suficientes sobre las tablas de destino.

:police_car_light: Nota: Solo apilica para clientes con Windows Server :police_car_light: