La desconexión del servidor puede deberse a muchos motivos. Sobre todo en servidores remotos. Los servidores muchas veces cuando una conexión no está activa la "mata" para no desperdiciar recursos. A veces la conexión puede ser por perdida del enlace cliente-servidor.
Cuando estás accediendo a una base de datos, la secuencia sería.
Me conecto, traigo-llevo datos, me desconecto. No permanezco conectado mientras la aplicación espera al usuario o una impresión lenta.
En todo caso pido perdón en lugar de permiso.
STORE 0 TO lnErrores, lnEtapa
oConexion = NULL
DO WHILE lnEtapa = 0
TRY
IF oConexion = NULL
* aquí te conectas, si hay error la captura el catch
ENDIF
SQLExec() && acá haces la operación SQL si hay error lo captura el catch
lnEtapa = 1 && usa números positivos para devolver algún dato de interés
CATCH && acá gestionas los errores, puedes hacerlo específico o genérico
lnErrores = lnErrores + 1
IF lnErrores > 3
lnEtapa = -2 && usa números negativos para indicar que algo anduvo mal
ENDIF
ENDTRY
ENDDO
IF lnErrores < 0
* acá tratas el error, por ejemplo le avisas al usuario
ELSE
* acá el proceso funcionó, sigues con lo que sea.
ENDIF
El timer también es una opción, pero si el usuario se fue a almorzar y vuelve en una hora, hubo 60 re-conexiones al GNH.
Además debes prever apagar el timer mientras haces la transacción, para impedir una re-conexión que te interrumpa la transacción en curso, y volver a activarlo al final.
Además, nadie te garantiza que después de una reconexión exitosa con el timer, 30" cuando quieras hacer tu transacción, la conexión se haya caído de nuevo.
Saludos: Miguel