Ejecutar una Tarea SQL mediante un Archivo por Lotes o Batch

Cada persona encargada de una base de datos va a llegar a la situación en que debe realizar tareas de mantenimiento como realizar backups de bases de datos, reindexar tablas y otras tareas similares.

Esas tareas idealmente deben ser programadas, y ellas son ejecutadas en una agenda programada. Pero en el caso que la tarea deba ser ejecutada a voluntad ("On Demand", bajo demanda) necesitará intervención humana, y la persona obviamente necesitará tener conocimientos técnicos para poder desarrollarla.

Entonces, el reto esta ahí, y es que podamos hacer que cualquier persona, tenga habilidades técnicas o no, pueda ejecutar dichas tareas.

Una forma seria utilizar un script VBS y utilizar DMO para ejecutar la tarea. Otra forma, y al parecer más sencilla es ejecutar un comando osql en un archivo por lotes o batch.

La utilidad osql permite ejecutar sentencias Transact-SQL, procedimientos de sistema y archivos script. Esta utilidad utiliza ODBC para comunicarse con el servidor.

PRIMER PASO:
Ver si el trabajo a realizar puede ser ejecutado utilizando osql. Abrimos una ventana de comandos y ejecutamos la siguiente sentencia osql en ella:

osql -S "NOMBRE_INSTANCIA_SERVIDOR" -E -Q"exec msdb.dbo.sp_start_job ' BACKUPTEST ' "


Aquí "NOMBRE_INSTANCIA_SERVIDOR" es el nombre de la instanacia Sql Server ejecutandose en la computadora y sobre la cual se va a ejecutar la tarea. "BACKUPTEST" es el nombre de la tarea que ejecutará el trabajo de mantenimiento deseado. Despues de ejecutar el comando notaras que el procedimiento almacenado de sistema 'sp_start_job' ejecuta la tarea deseada sobre la instancia del servidor elegida.

SEGUNDO PASO:
El siguiente paso es crear un archivo por lotes. Abre el Bloc de Notas y escribe los siguientes comandos:

ECHO ejecutando tarea
ECHO.
pause
osql -S "NOMBRE_INSTANCIA_SERVIDOR" -E -Q"exec msdb.dbo.sp_start_job ' BACKUPTEST ' "
ECHO tarea ejecutada
pause
CLS
EXIT


Guarda el archivo como "Tarea.bat".

Luego, el archivo por lotes está listo para ser utilizado. Solo se hace doble click sobre el archivo y el trabajo de mantenimiento se realizará, sin necesidad de tener conocimientos de SQL Server.

1 comentario:

Rodrigo dijo...

Estimado; muchas gracias por el aporte... aun asi tengo una consulta.

Necesito conecarme a un servidor departamental mediante DOS (el servidor se llama S3K-DATAMART103, la base se llama SEI). Y necesito ejecutar un procedimiento almacenado llamado ej: sp_task mas el parametro tiempo ej: '20100506'.... a ver si me puedes echar una mano.

De antemano gracias.