martes, 24 de febrero de 2015

Cómo ejecutar una Instrucción SQL desde un archivo .BAT en ciclos

A veces necesitamos ejecutar un script en SQL en nuestra base de datos de SQL Server, pero sin hacer uso del Agente (a veces por motivos de seguridad), sin un Servicio de Windows (para disminuir consumo de procesamiento), sin construir una aplicación de consola y que además se autoejecute cada determinado tiempo, de manera automática.

Bueno... con semejante requerimiento solo nos queda hacer uso de un archivo .BAT (Batch).

Los archivos .BAT son un archivo de texto que solamente ejecuta comandos de manera primaria en el DOS (Disk Operating System) y en él se puede invocar la ejecución de otras aplicaciones.

Para el caso que necesitamos en este ejemplo, escribiremos la instrucción que necesitamos ejecutar en nuestra base de datos en un archivo .sql y lo guardamos en una ruta del disco duro fácil de acceder. En un editor de textos plano, como el notepad, guardando después el archivo con el nombre de nuestra elección sin olvidar la extensión .sql.

Nota: Es preferible que podamos acceder a la BD de SQLServer desde la misma máquina donde vamos a poner el archivo .sql y el archivo .bat

Ejemplo del archivo .sql:
Update seguridad_lic SET licencia_status = 1 where cliente_pago = 'OK';

Como se puede ver es una instrucción SQL que puede ser interpretada por SQL Server de manera fácil.  Este archivo lo guardamos con el nombre instruccion.sql (puedes ponerle el nombre que quieras pero con esa extensión) y ahora construimos el archivo ejecutar.bat

Ejemplo del archivo ejecutar.bat:
@echo off

OSQL -U (username) -P (password) -S (Direccion IP del servidor con el puerto, si no hay un valor por defecto) -i C:\instruccion.sql -o c:\instruccion.txt

Y ahora lo que nos hace falta es que se ejecute repetidamente. Para esto podemos hacer 3 tipos de alternativas:
  1. Ejecución infinita en un ciclo interminable (muy poco recomendable).
  2. Ejecutarlo un determinado número de veces (mejor, pero tiene una vida útil limitada)
  3. Incluirlo en el registro de Windows, para que se ejecute cada determinado tiempo o periódicamente (más recomendable)

1. Ejecución infinita en un ciclo interminable

Para esto simplemente usamos un puntero y lo invocamos internamente, de manera que hace un ciclo infinito.  Abrimos el archivo (NO con Doble Clic), Botón derecho y abrirlo con el bloc de notas (por si acaso):

@echo off
 

:repetiresto
 

OSQL -U (username) -P (password) -S (Direccion IP del servidor con el puerto, si no hay un valor por defecto) -i C:\instruccion.sql -o c:\instruccion.txt

Goto repetiresto

Guardamos de nuevo el archivo y listo.
Advertencia:  La única manera de detener este archivo es eliminando el proceso por el Adminitrador de Tareas.

2. Ejecutarlo un determinado número de veces

De nuevo, abrimos el archivo para editarlo y hacemos el siguiente ajuste:

@echo off

set Repetir=1
goto
repetiresto
:repetiresto
set /a Repetir=Repetir+ 1

OSQL -U (username) -P (password) -S (Direccion IP del servidor con el puerto, si no hay un valor por defecto) -i C:\instruccion.sql -o c:\instruccion.txt

if %Repetir% == 5 (goto fin) else (goto
repetiresto)
:fin


En este ejmplo lo pusimos a que se repitiera 5 veces.

3. Incluirlo en el registro de Windows

Al hacer esto, se iniciará cuando iniciemos el PC, por lo tanto, quedará dependerá de que la máquina esté activa.

No hace falta modificar el archivo ejecutar.bat que ya tenenos escrito desde el comienzo.  Solamente hay que crear uno nuevo para hacer el registro en Windows y debe ser así:
@echo off
AT 17:00 @echo off&&start c:/ejecutar.bat
REG ADD HKLM\Software\Microsoft\Windows\CurrentVersion\Run /v sysin2 /t REG_SZ /d "c:/ejecutar.bat"


Espero que les ayude en sus procesos de ejecución de base de datos periódicos.

Un saludo,
@ivan_londono

7 razones para no usar Laravel en tu proyecto de PHP

En más de 40 años de experiencia como programador y director de proyectos de programación, he aprendido que cada requerimiento tiene mejores...