Ms-Dos - SQL Server Bat FTP

 
Vista:

SQL Server Bat FTP

Publicado por JMD (4 intervenciones) el 04/06/2009 02:34:34
Saludos a todos y todas.

Mi pregunta es la siguiente:

Tengo un programa que genera todos los días archivos planos, estos archivos planos tienen que ser enviados por un BAT hacia un FTP específico, he pensado en ejecutar este BAT desde un SP en SQL Server. Mi pregunta es como puedo validar que la transferencia de estos archivos haya sido completa? ya que si no se han trasnferido bien los archivos hay que enviarlos nuevamente. Puede el archivo BAT hacer estavalidación Y/O comunicárselo de alguna forma al SP que lo ejecutó??.

Agradeceré mucho la ayuda que me puedan brindar Y/O otras ideas para poder realizar este desarrollo.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:SQL Server Bat FTP

Publicado por Armando (194 intervenciones) el 10/06/2009 04:57:24
Saludos

Puedes validar la transferencia obteniendo el tamaño del archivo, despues haces el ftp, mandas la salida a un archivo, dentro busca la cadena de cuantos bytes se transmitieron, comparala con el tamaño de tu archivo y listo.

@echo off
FOR /F %%a IN ('dir /B') do (echo nombre: %%a tamanio: %%~za)
pause
-----------------------------------------------------------------

ECHO OPEN TU_IP > amex.ftp
ECHO USER USUARIO PASSWD >> amex.ftp
ECHO asc >> amex.ftp
ECHO put datos.txt >> amex.ftp
ECHO bye >> amex.ftp

ftp -niv < amex.ftp > log.txt
----------------------------------------------------------------

REM Dependiendo del sistema es la cadena a buscar
findstr "bytes enviados" log.txt
----------------------------------------------------------------

ftp: 25423 bytes enviados //etc etc

----------------------------------------------------------------

Direccionando la salida del findstr a un archivo podemos extraer los bytes.

findstr "bytes enviados" log.txt > tama_arch.txt

for /F "tokens=1,2 delims= " %%i IN (tama_arch.txt) do (echo %%j)
----------------------------------------------------------------
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:SQL Server Bat FTP

Publicado por JJM (4 intervenciones) el 16/06/2009 16:37:44
Muchas gracias Armando, es buena idea, puedo hacerlo de esa forma, pero hora me queda la duda de como puedo hacer que el SP se de cuenta que el bat reconoció que la transferencia no fue satisfactora, tal vez retornando un código de error, ya que yo ejecuto el bat desde el SP así:

EXEC master..xp_cmdshell 'C:programa.bat'

Agradezco mucho de atemano tu ayuda.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:SQL Server Bat FTP

Publicado por Armando Nava  (194 intervenciones) el 17/06/2009 16:40:49
Saludos.

Cuando terminas de ejecutar el BAT puedes invocar desde MS-DOS:
echo %ERRORLEVEL% > error_transf.log

Si el bat falla te arrojará un valor distinto de cero, dependiendo del error.

Entonces, no se como se haga en SP pudes colocar el valor contenido en error_transf.log en alguna variable.

En MS-DOS quedaría como:

FOR /F "tokens=1" %%i IN (error_transf.log) do (
set COD_ERROR= %%i
echo EL codigo de error es: %COD_ERROR%
)

En el mismo BAT pudes establecer alguna condición, todo lo que necesitas en es conocer lo que te arrijaria en el log para los casos:

1.- Error en el usuario y password
2.- Error en la comunicacion
3.- Interrupcion de la comunicación

Tienes que simular los posibles casos, ve lo que te arroja en el log si:

1.- Colocas un usuario y passwod incorrectos
2.- Desconectas el cable de red ó modem antes de la transferencia
3.- Desonectas el cable a mitad de la transferencia

En funcion de eso vuelves a buscar cadenas en el log y estableces el codigo de error para alguna variable. No se puedes buscar algo como esto:

could not logon
adapter failed
incompleted transfer

Depende del sistema es el error que se va a producir, las cadenas son solo ejemplos, tendrias que ver en la practica que mensaje te manda

findstr "could not logon" log.txt > logon.txt
solo restaria ver si el tamaño de logon.txt es cero, de lo contrario establecer el codigo de error

FOR /F "tokens=1" %%i IN ('DIR /B logon.txt') do (
set TAMA=%%~zi
if TAMA GTR 0 set COD_ERROR=5
)

//NO recuerdo si GTR es mayor que
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:SQL Server Bat FTP

Publicado por JJM (4 intervenciones) el 18/06/2009 18:48:02
Cierto esa sería la forma, creo que haré un archivo de texto plano con solo una linea, por ejemplo :
Si no dio error el archivo de texto plano tendría:
VALOR_RESPUESTA|0

Si dio error entonces el archivo lo guardaré con esto:
VALOR_RESPUESTA|0

Esto lo cargaré con un DTS a una tabla y luego haré que el SP lea la tabla y según el código de respuesta sabré si hubo error o no.

Muchas gracias por tu ayuda Aramando, cuidate y suerte!!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar