Jump to content


Photo

monitorear conexion con base de datos firebird


  • Please log in to reply
4 replies to this topic

#1 luk2009

luk2009

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2040 posts
  • LocationSanto Domingo

Posted 21 January 2011 - 01:27 PM

Hola amigos como estan?

Tengo una aplicacion en la cual debo revisar constantemente si hay nuevos registros. Antes tenia un timer y con este enviaba cada 1/2 segundo un query para saber si habia llegado algo. si habia algun problema con el query entonces me daba cuenta que la conexion estaba mal.

Ahora lo estoy haciendo utilizando los eventos de firebird after insert, after update y quisiera saber cual es la mejor forma de monitorear que no se haya perdido la conexion con la base de datos?

  • 0

#2 fredycc

fredycc

    Advanced Member

  • Moderadores
  • PipPipPip
  • 874 posts
  • LocationOaxaca, México

Posted 21 January 2011 - 02:03 PM

Q tal luk2009, creo yo que si estas evaluando el posible problema de conexión de tu(s) aplicacion(es) clientes que se conectan a tu base de datos desde donde se encuentra tu servidor central, esta consulta puede funcionarte, al menos con interbase me funciona, algunos ajustes posiblemente serían necesarios:



sql
  1. SELECT TMP$ATTACHMENT_ID AS "Attachment ID",
  2.       TMP$DATABASE_ID AS "Database ID",
  3.       TMP$STATEMENTS AS "Compiled Statements",
  4.       TMP$TRANSACTIONS AS "Active Transactions",
  5.       TMP$TIMESTAMP AS "Established At",
  6.       TMP$QUANTUM AS "Units of Execution",
  7.       TMP$USER AS "User Name",
  8.       TMP$USER_IP_ADDR AS "User IP",
  9.       TMP$USER_HOST AS "User Host",
  10.       TMP$USER_PROCESS AS "Process ID",
  11.       TMP$STATE AS "State"
  12. FROM TMP$ATTACHMENTS



Esta es una consulta que por default trae ibexpert y puedes conocer cuales ip's estan conectadas y bueno, si alguna no aparece por cierto tiempo, pues posiblemente tiene un problema. Independientemente si ha hecho algo en alguna tabla o no, mientras la conexión este abierta, te va aparecer en la consulta.

Pero si deseas que la aplicación cliente te notifique de un problema, tal vez halla más opciones, desde enviarte un email o sms comunicando el problema de conexión.

Espero haber comprendido tu problema.

Saludos.
  • 0

#3 luk2009

luk2009

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2040 posts
  • LocationSanto Domingo

Posted 21 January 2011 - 11:16 PM

Gracias Fredycc por tu respuesta.

Si entiendo bien lo que dices, esta consulta me sirve desde el servidor, pero lo que quiero es que software cliente se de cuenta si la conexion no esta funcionando. Hasta ahora cuando se fallaba el query que estaba en el timer, yo hacia esto:



delphi
  1. procedure TFRMreconexion.FormShow(Sender: TObject);
  2. begin
  3. {$I-}
  4. FRMactivasred.Timer1.Enabled:=false;
  5. Timerconexion.Enabled:=true;
  6. end;
  7.  
  8. procedure TFRMreconexion.TimerconexionTimer(Sender: TObject);
  9. begin
  10. IdIcmpClient1.Host:='10.0.0.2';
  11. IdIcmpClient1.ReceiveTimeout:=2000;
  12. IdIcmpClient1.Ping('Prueba de IP correcta',0);
  13. if (inttostr(IdIcmpClient1.ReplyStatus.BytesReceived))<>'0' then
  14.   begin
  15.     Label1.Caption:='SE CONECTO NUEVAMENTE' +(inttostr(IdIcmpClient1.ReplyStatus.BytesReceived));
  16.     DMmonitorenred.ZConmonred.Disconnect;
  17.     DMmonitorenred.ZConmonred.Connect;
  18.   FRMactivasred.Timer1.Enabled:=true;
  19.   {$I+}
  20.   Timerconexion.Enabled:=false;
  21.   FRMreconexion.Close;
  22.   FRMreconexion.ModalResult:=mrnone;
  23.   end
  24.   else
  25.   begin
  26.   FRMreconexion.Color:=clred;
  27.   label1.Color:=clYellow;
  28.   end;
  29. end;



pero el metodo aunque funciona, me dispara algunos errores en pantalla.


  • 0

#4 Marc

Marc

    Advanced Member

  • Moderadores
  • PipPipPip
  • 1484 posts
  • LocationMallorca

Posted 22 January 2011 - 09:29 PM

No se me ocurre otra forma de comprobar que no se haya caído la conexión, que haciendo lo que hacías antes : lanzar una consulta cada poco tiempo.

Naturalmente puedes lanzar una consulta bien sencilla, para no sobrecargar el servidor ni la Red. Por ejplo :

select 1 as ACTIVO
from RDB$DATABASE

Saludos.
  • 0

#5 luk2009

luk2009

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2040 posts
  • LocationSanto Domingo

Posted 22 January 2011 - 10:22 PM

Gracias Marc por tu respuesta. (y)

Dejame ponerme a depurar mi codigo de reconexion.
  • 0




IP.Board spam blocked by CleanTalk.