Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Firebird e Interbase
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 27-03-2013
Avatar de cesarsoftware
cesarsoftware cesarsoftware is offline
Miembro
 
Registrado: nov 2006
Posts: 241
Poder: 18
cesarsoftware Va por buen camino
Corrupcion en una tabla

Buenas foreros.

¿Os a pasado alguna vez que se corrompa una tabla en firebird 2.5?

Tengo una BD con 17 gigabytes y me acaban de informar que una tabla (la mayor) esta corrompida.

Estamos tratando de recuperarla con GFIX http://www.firebirdfaq.org/faq324/ pero de momento no se ha solucionado (menos mal que se hace copia todos los dias)

¿Alguna respuesta?

Gracias
__________________
Disfruta de la vida ahora, vas a estar muerto mucho tiempo.
Responder Con Cita
  #2  
Antiguo 28-03-2013
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por cesarsoftware Ver Mensaje
¿Os a pasado alguna vez que se corrompa una tabla en firebird 2.5?
No

Cita:
Empezado por cesarsoftware Ver Mensaje
¿Alguna respuesta?
¿Cual es la pregunta?
Responder Con Cita
  #3  
Antiguo 28-03-2013
Avatar de cesarsoftware
cesarsoftware cesarsoftware is offline
Miembro
 
Registrado: nov 2006
Posts: 241
Poder: 18
cesarsoftware Va por buen camino
Hola Casimiro.

Que suerte que no te haya pasado nunca, tengo que reconocer que es la primera vez en mucho, mucho tiempo.

La pregunta es generica, por ejemplo
A: Como evitar la corrupcion
B: GFix se usa asi (bla.bla.bla)
__________________
Disfruta de la vida ahora, vas a estar muerto mucho tiempo.
Responder Con Cita
  #4  
Antiguo 28-03-2013
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por cesarsoftware Ver Mensaje
A: Como evitar la corrupcion
¿Cómo evitar la corrupción?, supongo que manteniendo buenas costumbres, buen hardware, un buen SAI, cerrar las transacciones y conexiones antes de salir del programa, etc. No hay secretos.
Supongo que en tu caso ha debido ocurrir algo más, lo habitual es algún defecto en el disco, por ejemplo.

Cita:
Empezado por cesarsoftware Ver Mensaje
B: GFix se usa asi (bla.bla.bla)
gfix
Recuperación de datos corruptos

Imagino que el problema habrá sido causado por fallos físicos en el sistema, yo chequearía el disco en profundidad, por si acaso.
Y la memoria RAM también.
Responder Con Cita
  #5  
Antiguo 28-03-2013
Avatar de cesarsoftware
cesarsoftware cesarsoftware is offline
Miembro
 
Registrado: nov 2006
Posts: 241
Poder: 18
cesarsoftware Va por buen camino
Gracias casimiro, intentaremos ir por ahi.

__________________
Disfruta de la vida ahora, vas a estar muerto mucho tiempo.
Responder Con Cita
  #6  
Antiguo 28-03-2013
Gallosuarez Gallosuarez is offline
Miembro
 
Registrado: feb 2007
Posts: 92
Poder: 18
Gallosuarez Va por buen camino
Question ¿?

cesarsoftware:

¿Lo que no me queda muy claro es como se daño solo una tabla? Vamos, es la primer vez que oigo de un caso así. ¿Porqué dices que está dañada esa tabla? ¿Que error te sale? etc, etc. Entre más detalles nos des, más es la probabilidad que alguien en el foro te pueda ayudar.

Por otro lado, te comento un caso que me sucedió a mi, y que al principio se podría interpretar que se había dañado solo una tabla. Modifiqué un dominio un VARCHAR (lo puse un valor menor al que tenía). Despues de esto, al tratar de hacer un sentencia SELECT sobre esta tabla me mandaba un error de "overflow". Y obvio, solo sucedía en un sola tabla. Lo que hice fue, hacer un respaldo de dicha Base de datos y posteriormente la volví a restaurar (sobre-escriendo la misma Base de datos). Con esto se reparó dicho error. ¿Ves, eso es precisamente a lo que me refería: al principio pareció ser lo que no era?

En fin, necesitamos más información sobre tu problema.

Saludos,
Gerardo Suárez Trejo
Responder Con Cita
  #7  
Antiguo 28-03-2013
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Claro, una tabla es muy complicado que se rompa, sería mucha casualidad que se estropeara un disco justo por el lugar donde hay datos de sólo una tabla.
Es por lo que al principio contesté que nunca había visto un caso así. Y suena más a fallo de software.
Responder Con Cita
  #8  
Antiguo 28-03-2013
cointec cointec is offline
Miembro
 
Registrado: jul 2004
Ubicación: Alicante-España
Posts: 76
Poder: 20
cointec Va por buen camino
Cita:
Empezado por Casimiro Notevi Ver Mensaje
Claro, una tabla es muy complicado que se rompa, sería mucha casualidad que se estropeara un disco justo por el lugar donde hay datos de sólo una tabla.
Es por lo que al principio contesté que nunca había visto un caso así. Y suena más a fallo de software.
Creo que quedaría mal Firebird si pon un fallo de software se corrompiera una tabla.

¿Qué tipo de corrupción tiene? Qué aparece en Firebird.log? Has comprobado si en Firebird.log se ha producido algún reinicio?

Yo tuve algún problema de corrupción con la versión 2.5.0 por unos fallos en el motor, pero se solventó en un parche y actualmente la versión 2.5.2 es bastante estable.
__________________
Un saludo, Jesus García
Responder Con Cita
  #9  
Antiguo 28-03-2013
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por cointec Ver Mensaje
Creo que quedaría mal Firebird si pon un fallo de software se corrompiera una tabla.
Un fallo de su (cesarsoftware) software
Responder Con Cita
  #10  
Antiguo 28-03-2013
cointec cointec is offline
Miembro
 
Registrado: jul 2004
Ubicación: Alicante-España
Posts: 76
Poder: 20
cointec Va por buen camino
Cita:
Empezado por Casimiro Notevi Ver Mensaje
Un fallo de su (cesarsoftware) software
Ya, lo he entendido, y por eso lo he comentado. Un fallo en una aplicación cliente puede producir muchos problemas, debido a un mal control de transacciones, etc. pero nunca debería deber poder corromper una tabla o base de datos, a no ser que se ataqué directamente a las tablas del sistema.
__________________
Un saludo, Jesus García
Responder Con Cita
  #11  
Antiguo 28-03-2013
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por cointec Ver Mensaje
a no ser que se ataqué directamente a las tablas del sistema.
Pues eso, también creación/edición de campos/dominios/triggers/stores procedures/etc. en tiempo de ejecución y que no estén debidamente probadas.
Responder Con Cita
  #12  
Antiguo 28-03-2013
cointec cointec is offline
Miembro
 
Registrado: jul 2004
Ubicación: Alicante-España
Posts: 76
Poder: 20
cointec Va por buen camino
Talking

Cita:
Empezado por Casimiro Notevi Ver Mensaje
Pues eso, también creación/edición de campos/dominios/triggers/stores procedures/etc. en tiempo de ejecución y que no estén debidamente probadas.
Entonces el motor no debería permitir ejecutar ddl en una base de datos en uso. Sigue siendo un problema del motor. El motor no debería permitir que se ejecute ddl en una base de datos en uso si va a corromperla, o si lo permite debería emitir un aviso indicando de la acción, pero no he leído por ninguna parte en la documentación de Firebird ese tipo de advertencias, aunque por supuesto, cuando ejecuto scripts de actualización, los lanzo sin ningún usuario conectado, excepto el sysdba. Lo hago para evitar errores del tipo "objeto en uso", que es un mensaje que entiendo que lanza el propio motor para evitar modificaciones sobre objetos que están en uso por usuarios, y es como creo que debe actuar, ya que lo principal es que garantice una consistencia e integridad en la información contenida en la bd.
__________________
Un saludo, Jesus García
Responder Con Cita
  #13  
Antiguo 28-03-2013
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Si quieres iniciar un debate sobre ese tema entonces crea un nuevo hilo, gracias
Responder Con Cita
  #14  
Antiguo 28-03-2013
Avatar de cesarsoftware
cesarsoftware cesarsoftware is offline
Miembro
 
Registrado: nov 2006
Posts: 241
Poder: 18
cesarsoftware Va por buen camino
Cita:
Empezado por Casimiro Notevi Ver Mensaje
Un fallo de su (cesarsoftware) software
Je,je,je, muy gracioso

El cliente me llamo ayer informado que "mi software" informaba de que no podia leer el identificador (el soft continua, quizas no debiera, porque lee el resultado de un ensayo de amortiguadores y luego indica a los distintos robots lo que tiene que hacer en funcion al resultado del ensayo) y que al leer la bbdd con un software de terceros solo decia (segun el cliente) "table corrupted" o algo asi, me lo dijo por telefono, pero que otras tablas si podia leer.
Como me dijo que tiraria de copia, la verdad es que no se me ocurrio pedirle que me leyera el firebirl.log.

Uso la version 2.5.1 de 64 bits.

La funcion para leer el identificador es la siguiente
Código Delphi [-]
function TFormMain.LeeIdentificadorBBDD(): integer;
var
  identificador: integer;
  DataSet: TSQLDataset;
  msg: string;
begin
  Result := -1;
  if conectadoBase = False then
    Exit;
  try
    FormBBDD.SQLConnection.Execute('SELECT MAX(IDENTIFICADOR) FROM ENSAYOS', nil, @DataSet);
    identificador := Dataset.Fields[0].AsInteger;
    FreeAndNil(DataSet);
    Inc(identificador);
    Result := identificador;
  except
    FreeAndNil(DataSet);
    Exit;
  end;
  msg := 'Identificador de ensayo ' + IntToStrMil(identificador);
  ListBoxMonitor.ItemIndex := ListBoxMonitor.Items.Add(msg);
  FreeAndNil(DataSet);
end;

La funcion para grabar datos (unos 3000 por ensayo (1 ensayo cada 24 segundos)) en la siguiente (se graban 2 tablas y solo ha fallado la tabla LECTURAS.
Código Delphi [-]
function TFormMain.GuardaEnsayoBBDD(identificador, resultado: integer): boolean;
var
  i: longword;
  tag: longword;
  Transaccion: TDBXTransaction;
  sFecha, msg, sql: string;
  tIni, tFin, tSegIni, tSegFin, tiempo: int64;
  r: boolean;
begin
  Result := False;
  if conectadoBase = False then
    Exit;
  if identificador = -1 then
  begin
    ListBoxMonitor.ItemIndex := ListBoxMonitor.Items.Add(
     'Nº de identificador erroneo ' + IntToStr(BBDDidentificador));
    Exit;
  end;
  if RxLecturas = 0 then
  begin
    ListBoxMonitor.ItemIndex := ListBoxMonitor.Items.Add(
     'No hay lecturas que grabar');
    Exit;
  end;
  // Grabar los datos
  r := True;
  tag := ListBoxMonitor.Items.Count + 1;
  tIni := GetTickCount();
  msg := 'Comenzando transacción';
  ListBoxMonitor.ItemIndex := ListBoxMonitor.Items.Add(msg);
  Transaccion := FormBBDD.SQLConnection.BeginTransaction;
  if Transaccion = nil then
  begin
    ListBoxMonitor.ItemIndex := ListBoxMonitor.Items.Add(
     'No se creo la trasacción');
    Exit;
  end;
  tSegIni := GetTickCount();
  // Grabar el ensayo
  sql := DateToStr(Now());
  sFecha := Copy(sql, 7, 4) + '/' +
            Copy(sql, 4, 2) + '/' +
            Copy(sql, 1, 2);
  sql := 'INSERT INTO ENSAYOS (';
  sql := sql + 'LINEA,IDENTIFICADOR,FECHA,HORA,ORDEN,MODELO,RESULTADO,';
  sql := sql + 'V1_MAX_EXT,V1_MAX_COM,V2_MAX_EXT,V2_MAX_COM,';
  sql := sql + 'V3_MAX_EXT,V3_MAX_COM,V4_MAX_EXT,V4_MAX_COM,';
  sql := sql + 'V5_MAX_EXT,V5_MAX_COM,V1_AREA_0,V1_AREA_1,V1_AREA_2,';
  sql := sql + 'V1_AREA_3,V2_AREA_0,V2_AREA_1,V2_AREA_2,V2_AREA_3,V3_AREA_0,';
  sql := sql + 'V3_AREA_1,V3_AREA_2,V3_AREA_3,V4_AREA_0,V4_AREA_1,V4_AREA_2,';
  sql := sql + 'V4_AREA_3,V5_AREA_0,V5_AREA_1,V5_AREA_2,V5_AREA_3';
  sql := sql + ') VALUES (';
  sql := sql + IntToStr(NombreLinea) + ',';
  sql := sql + IntToStr(identificador) + ',''';
  sql := sql + sFecha + ''',''';
  sql := sql + TimeToStr(Now()) + ''',''';
  sql := sql + Trim(EditOF.Text) + ''',''';
  sql := sql + Trim(EditModelo.Text) + ''',';
  sql := sql + IntToStr(resultado) + ',';
  sql := sql + FloatStrComaToPunto(FloatToStr(VmaxExt[0])) + ',';
  sql := sql + FloatStrComaToPunto(FloatToStr(VmaxCom[0])) + ',';
  sql := sql + FloatStrComaToPunto(FloatToStr(VmaxExt[1])) + ',';
  sql := sql + FloatStrComaToPunto(FloatToStr(VmaxCom[1])) + ',';
  sql := sql + FloatStrComaToPunto(FloatToStr(VmaxExt[2])) + ',';
  sql := sql + FloatStrComaToPunto(FloatToStr(VmaxCom[2])) + ',';
  sql := sql + FloatStrComaToPunto(FloatToStr(VmaxExt[3])) + ',';
  sql := sql + FloatStrComaToPunto(FloatToStr(VmaxCom[3])) + ',';
  sql := sql + FloatStrComaToPunto(FloatToStr(VmaxExt[4])) + ',';
  sql := sql + FloatStrComaToPunto(FloatToStr(VmaxCom[4])) + ',';
  sql := sql + FloatStrComaToPunto(FloatToStr(EnsayoGrafica.areaTotal[0, 0])) + ',';
  sql := sql + FloatStrComaToPunto(FloatToStr(EnsayoGrafica.areaTotal[0, 1])) + ',';
  sql := sql + FloatStrComaToPunto(FloatToStr(EnsayoGrafica.areaTotal[0, 2])) + ',';
  sql := sql + FloatStrComaToPunto(FloatToStr(EnsayoGrafica.areaTotal[0, 3])) + ',';
  sql := sql + FloatStrComaToPunto(FloatToStr(EnsayoGrafica.areaTotal[1, 0])) + ',';
  sql := sql + FloatStrComaToPunto(FloatToStr(EnsayoGrafica.areaTotal[1, 1])) + ',';
  sql := sql + FloatStrComaToPunto(FloatToStr(EnsayoGrafica.areaTotal[1, 2])) + ',';
  sql := sql + FloatStrComaToPunto(FloatToStr(EnsayoGrafica.areaTotal[1, 3])) + ',';
  sql := sql + FloatStrComaToPunto(FloatToStr(EnsayoGrafica.areaTotal[2, 0])) + ',';
  sql := sql + FloatStrComaToPunto(FloatToStr(EnsayoGrafica.areaTotal[2, 1])) + ',';
  sql := sql + FloatStrComaToPunto(FloatToStr(EnsayoGrafica.areaTotal[2, 2])) + ',';
  sql := sql + FloatStrComaToPunto(FloatToStr(EnsayoGrafica.areaTotal[2, 3])) + ',';
  sql := sql + FloatStrComaToPunto(FloatToStr(EnsayoGrafica.areaTotal[3, 0])) + ',';
  sql := sql + FloatStrComaToPunto(FloatToStr(EnsayoGrafica.areaTotal[3, 1])) + ',';
  sql := sql + FloatStrComaToPunto(FloatToStr(EnsayoGrafica.areaTotal[3, 2])) + ',';
  sql := sql + FloatStrComaToPunto(FloatToStr(EnsayoGrafica.areaTotal[3, 3])) + ',';
  sql := sql + FloatStrComaToPunto(FloatToStr(EnsayoGrafica.areaTotal[4, 0])) + ',';
  sql := sql + FloatStrComaToPunto(FloatToStr(EnsayoGrafica.areaTotal[4, 1])) + ',';
  sql := sql + FloatStrComaToPunto(FloatToStr(EnsayoGrafica.areaTotal[4, 2])) + ',';
  sql := sql + FloatStrComaToPunto(FloatToStr(EnsayoGrafica.areaTotal[4, 3]));
  sql := sql + ')';
  try
    FormBBDD.SQLConnection.ExecuteDirect(sql);
  except
    on E: Exception do
    begin
      ListBoxMonitor.ItemIndex := ListBoxMonitor.Items.Add(
       'No se ha guardado el ensayo');
      Result := False;
      FormBBDD.SQLConnection.RollbackFreeAndNil(Transaccion);
      Exit;
    end;
  end;
  // Grabar los datos
  for i := 0 to RxLecturas - 1 do
  begin
    sql := 'INSERT INTO LECTURAS (';
    sql := sql + 'LINEA,IDENTIFICADOR,V,CICLO,LECTURA,POSICION,ESFUERZO,VELOCIDAD)';
    sql := sql + ' VALUES (';
    sql := sql + IntToStr(NombreLinea) + ',';
    sql := sql + IntToStr(identificador) + ',';
    sql := sql + IntToStr(aSpeed[i]) + ',';
    sql := sql + IntToStr(aCiclo[i]) + ',';
    sql := sql + IntToStr(i + 1) + ',';
    sql := sql + IntToStr(aPosicion[i]) + ',';
    sql := sql + IntToStr(aFuerza[i]) + ',';
    sql := sql + IntToStr(aVelocidad[i]);
    sql := sql + ')';
    try
      FormBBDD.SQLConnection.ExecuteDirect(sql);
    except
      on E: Exception do
      begin
        ListBoxMonitor.ItemIndex := ListBoxMonitor.Items.Add(
         'No se ha guardado la lectura nº ' + IntToStr(i));
        r := False;
        Break;
      end;
    end;
    tSegFin := GetTickCount();
    if (tSegFin - tSegIni) >= 1000 then
    begin
      tSegIni := GetTickCount();
      msg := 'Grabados ' + IntToStrMil(i) + ' de ' + IntToStrMil(RxLecturas - 1);
      ListBoxMonitor.Items[tag - 1] := msg;
      Application.ProcessMessages;
    end;
  end;
  msg := 'Grabados ' + IntToStrMil(i) + ' de ' + IntToStrMil(RxLecturas - 1);
  ListBoxMonitor.Items[tag - 1] := msg;
  if r = True then
  begin
    try
      FormBBDD.SQLConnection.CommitFreeAndNil(Transaccion);
    except
      on E: Exception do
      begin
        ListBoxMonitor.ItemIndex := ListBoxMonitor.Items.Add(
         'No se ha guardado la trasacción');
        FormBBDD.SQLConnection.RollbackFreeAndNil(Transaccion);
        Exit;
      end;
    end;
  end
  else
  begin
    ListBoxMonitor.ItemIndex := ListBoxMonitor.Items.Add(
     'Se han registrado errores');
    FormBBDD.SQLConnection.RollbackFreeAndNil(Transaccion);
    Exit;
  end;
  tFin := GetTickCount();
  tiempo := (tFin - tIni);
  msg:= DateTimeToStr(Now()) + ' - ' + IntToStrMil(RxLecturas - 1) +
        Format(' - %.2f', [tiempo / 1000]) + ' Seg.';
    ListBoxMonitor.Items[tag - 1] := msg;
  Result := True;
end;

Quizas no hago bien las cosas, ¿como veis las funciones? ¿Os parecen que pueden corronper? Hasta la fecha a registrado correctamente mas de 100.000 ensayos (unos 17 gigabytes)

Saludos.
__________________
Disfruta de la vida ahora, vas a estar muerto mucho tiempo.

Última edición por cesarsoftware fecha: 28-03-2013 a las 20:48:52.
Responder Con Cita
  #15  
Antiguo 28-03-2013
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por cesarsoftware Ver Mensaje
El cliente me llamo ayer informado que "mi software" informaba de que no podia leer el identificador [..] y que al leer la bbdd con un software de terceros solo decia (segun el cliente) "table corrupted" o algo asi, me lo dijo por telefono,
O sea, resumiendo, que casi seguro que no pasa nada, no tienes información. A mí me llama un cliente y me dice eso y como si me dice que llueve
Responder Con Cita
  #16  
Antiguo 28-03-2013
Avatar de cesarsoftware
cesarsoftware cesarsoftware is offline
Miembro
 
Registrado: nov 2006
Posts: 241
Poder: 18
cesarsoftware Va por buen camino
Cita:
Empezado por Casimiro Notevi Ver Mensaje
O sea, resumiendo, que casi seguro que no pasa nada, no tienes información. A mí me llama un cliente y me dice eso y como si me dice que llueve
Ya, pero habra que hacer caso al cliente, ¿no te parece? El cliente siempre tiene razon

¿Que os parecen las funciones? ¿Esta bien escritas o son una chapucilla?
__________________
Disfruta de la vida ahora, vas a estar muerto mucho tiempo.
Responder Con Cita
  #17  
Antiguo 28-03-2013
Avatar de cesarsoftware
cesarsoftware cesarsoftware is offline
Miembro
 
Registrado: nov 2006
Posts: 241
Poder: 18
cesarsoftware Va por buen camino
Cita:
Empezado por Casimiro Notevi Ver Mensaje
O sea, resumiendo, que casi seguro que no pasa nada, no tienes información. A mí me llama un cliente y me dice eso y como si me dice que llueve
Ya, pero habra que hacer caso al cliente, ¿no te parece? El cliente siempre tiene razon

¿Que os parecen las funciones? ¿Esta bien escritas o son una chapucilla?

PD: firebird graba 3000 registros en 1 segundo mas o menos ¿esta bien no?
__________________
Disfruta de la vida ahora, vas a estar muerto mucho tiempo.
Responder Con Cita
  #18  
Antiguo 28-03-2013
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
El cliente puede puede tener toda la razón que quiera, pero en cosas así, no.
A mí me llama un cliente y me dice que ha probado un software de terceros y le dice "tabla corrupta" y lo mando a... comprar fanta.
Lo que tienes que hacer es verlo con tus ojos y probarlo. Y nada de software de terceros, ¡¡¡qué sabrá ese software sobre tu base de datos!!!

En cuanto a tu código, bueno, si funciona no lo toques

Ya en serio, yo haría las cosas de otra manera, pero por indicar sólo una cosa: el insert sería un 'stored procedure' al que le pasaría parámetros.
Y, bueno, no se parecería mucho a tu código, pero ya digo, si funciona no lo toques
Responder Con Cita
  #19  
Antiguo 28-03-2013
Avatar de cesarsoftware
cesarsoftware cesarsoftware is offline
Miembro
 
Registrado: nov 2006
Posts: 241
Poder: 18
cesarsoftware Va por buen camino
Ante todo gracias por estar ahi casimiro.

Estoy contigo, las cosas hay que verlas con nuestros propios ojos y nuestros dedos. Cierto es que me tiene muy mosca, porque primero me dice que el departamento de calidad ha parado la linea de produccion, linea que me dice pasadas unas horas que sigue funcionando pero sin almacenar datos, producen amortiguadores de camion y se prueba uno a uno y se registra el ensayo, ya sabes que en automocion son muy extrictos con la trazabilidad, no sea que un camion vuelque por un amortiguador defectuoso, bueno a lo que voy, que si fuera asi de grave (linea que hace cientos de amortiguadores cada dia) me voy a casa del informatico y me traigo en helicoptero si hace falta. Tras otra llamada a la hora que le digo que intente usar el gfix, no me ha vuelto a llamar. ¿Lo habra solucionado y no me ha dicho nada? ¿a sido solo un susto?

En cuanto al codigo, supongo que vengo de la escuela de las tablas planas en msdos y unix y mis cursos de sql son .... ¿libros, internet,casimiro?

En serio, si que me gustaria "comparar" codigos, sobre todo de un experto y paciente moderador, ya ves que uso firebird como si de c-isam o dbase se tratara.

Te voy pidiendo una
__________________
Disfruta de la vida ahora, vas a estar muerto mucho tiempo.
Responder Con Cita
  #20  
Antiguo 28-03-2013
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por cesarsoftware Ver Mensaje
bueno a lo que voy, que si fuera asi de grave [] me voy a casa del informatico y me traigo en helicoptero si hace falta. Tras otra llamada a la hora que le digo que intente usar el gfix, no me ha vuelto a llamar. ¿Lo habra solucionado y no me ha dicho nada? ¿a sido solo un susto?
Jamás se me ocurriría hacer algo así
Nunca le diría a un cliente que use gfix (ni ninguna herramienta, salvo alguna opción implementada por mí en el software que le haya instalado). ¿Cómo le mandas hacer eso?, eso es algo que tiene que hacerlo uno mismo, comprobar, revisar, verificar todo: la situación de la cadena de montaje, si está funcionando el programa, mirar el problema, hacer backups seguro, desconectar conexiones a la BD, etc. Un análisis completo de la situación, antes, durante y después.
Imagina que el cliente hace cualquer cosa y pierde los datos y ahora te responsabiliza a ti porque el backup no es recuperable (por multitud de motivos), ¿qué haces?, te buscas un problemón enorme.
Tú eres el experto, profesional. Y tú debes de encargarte de todo eso. (Damos por hecho que te pagan por hacerlo, claro).

Cita:
Empezado por cesarsoftware Ver Mensaje
En cuanto al codigo, supongo que vengo de la escuela de las tablas planas en msdos y unix y mis cursos de sql son .... ¿libros, internet,casimiro?
Años antes de que existiera msdos ya existían BD relacionales y Sql.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Hay tantos casos de corrupción que... Casimiro Notevi La Taberna 24 04-03-2013 13:27:25
Una mas de demencia o de corrupción política escafandra La Taberna 16 28-12-2012 09:59:49
Detectar corrupción de memoria ALAM C++ Builder 1 27-07-2007 12:09:19
Corrupción en la base de datos. AMINOA2R Firebird e Interbase 2 03-06-2005 09:54:58
Corrupción de Tablas TDworD Tablas planas 6 29-09-2004 17:29:38


La franja horaria es GMT +2. Ahora son las 07:29:50.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi