Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

pack en Firebird

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Bases de Datos
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: pack en Firebird Responder citando

Me he fijado que al eliminar registros de las tablas en Firebird no los elimina físicamente, o sea, ´sólo marca los registros como eliminados.
¿Existe alguna forma de realizar el pack de dbase, o el compactar de Access para que los registros se borren realmente?

La causa es que tengo una tabla en la que inserto y borro constantemente datos (los tickets de una TPV).
Con dbase, realizaba el pack a través de código y la tabla se quedaba casi vacía físicamente. Sin realizar ese pack el acceso a esa tabla se ralentizaba cada vez más.
Estoy hablando de unos 500000 registros anuales marcados como eliminados, lo cual no se si en Firebird ralentizaría progresivamente el acceso a dicha tabla.

Graciaaaaaas. Rolling Eyes
_________________
LA INSPIRACIÓN EXISTE, PERO TIENE QUE ENCONTRARTE TRABAJANDO
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

Posiblemente no estas haciendo el COMMIT en la transación.

¿Con que componentes te conectas a la BD?

Saludos.
_________________
Quien hace una pregunta teme parecer un ignorante durante cinco minutos, quien no pregunta se mantiene ignorante toda la vida.
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email MSN Messenger
Mensaje    Asunto: Responder citando

Me conecto con un IBDatabase, un IBTransaction, y después a las tablas con un IBDataSet y IBDataSource.
He seguido los pasos indicados en los tutoriales de www.firebird.com.mx

En el IBTransaction, la propiedad DefaultAction está en TACommit.

Alguna sugerencia??

Gracias por el interés
Volver arriba
Mensaje    Asunto: Responder citando

El invitado de antes era yo. Se me olvidó loguearme. Confused
_________________
LA INSPIRACIÓN EXISTE, PERO TIENE QUE ENCONTRARTE TRABAJANDO
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

Bien, hablar de las transacciones es un poco extenso, pero de manera breve te explico que debes terminar tus transacciones ya sea confirmando y haciendo permanentes todos los cambios (Commit), o descartando cualquier modificación realizada (RollBack).

Tienes dos opciones, con dos variantes en cada opción.

Hacer un Commit() o CommitRetaining() y RollBack() o RollBackRetaining()

Debes especificar en algun momento ya sea un Commit o RollBack.

Código:

         // Almacenar permanente los cambios realizados en el dataset
         // asociado a la transacción.
         IBTransaction1->Commit();



Código:

         // Cancelar los cambios realizados en el dataset
         // asociado a la transacción.
         IBTransaction1->RollBack();



Te recomiendo checar la ayuda para que te quede claro las dos variantes en cada una de las opciones.

Te dejo esta liga donde puedes leer mas acerca de las transacciones.

http://www.terra.es/personal2/jrodriguezpe/kinobi/descargas/transacciones-0.2.6.pdf

Saludos.
_________________
Quien hace una pregunta teme parecer un ignorante durante cinco minutos, quien no pregunta se mantiene ignorante toda la vida.
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email MSN Messenger
Mensaje    Asunto: Responder citando

Gracias Buildero por el documento, es muy interesante, pero tampoco funciona.
Realizo el commit y el resultado es el mismo.

En realidad los registros se borran de la tabla (en las consultas ya no aparecen más), pero el fichero físico en el disco duro sigue teniendo el mismo tamaño. Por lo tanto los registros se están "marcando" como eliminados en Firebird, pero no se eliminan del archivo, y esto puede ser un inconveniente por el tamaño creciente que va a adquirir la base de datos así como (creo) en la velocidad de acceso con miles de registros. Se puede dar el caso de que una tabla tenga 25 registros, y tenga 10000 marcados como eliminados, por ejemplo.

Esto ocurre también en Access, dbase, etc.. pero en ellos existe la opción de compactar las tablas, de forma que los registros son eliminados físicamente del disco duro, reduciéndose el tamaño del archivo.

Gracias por todo, y si se os ocurre algo...... Razz
_________________
LA INSPIRACIÓN EXISTE, PERO TIENE QUE ENCONTRARTE TRABAJANDO
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

jose escribió:
Los registros se borran de la tabla (en las consultas ya no aparecen más), pero el fichero físico en el disco duro sigue teniendo el mismo tamaño.


Hola Jose, no te preocupes por este tema, Firebird borra los registros realemente como comprobaste pero no realiza el Pack como vos queres.

Para volver al tamaño minimo la unica forma que conozco es hacer un backup y restaurarla.

Pero igualmente no lo necesitas.

Por que no? porque Firebird una vez que borra un registro este espacio puede ser utilizado por un nuevo registro que creas por ende el agregar y borrar registros no aumenta el tamaño de la base de datos como te pasaba anteriormente.

Esto en realidad es mucho más eficiente dado que cuando se agrega un nuevo registro se debe agrandar el tamaño de la DB y en tu caso no es necesario porque el lugar ya esta reservado por lo que se hace más rápido.

Espero haber sido claro y Suerte.
_________________
Crandel

"hay 10 tipos de personas, las que ven en binario y las que no"

Angel Zeitoune - Artículo: Generación de eventos en C++Builder
Volver arriba
Ver perfil de usuario Enviar mensaje privado Visitar sitio web del autor MSN Messenger
Mensaje    Asunto: Responder citando

Eres grande, Crandel.

Si eso es así (cosa que no dudo en absoluto), en realidad mi problema inicial no existe.

Tenía un problema y lo hiciste desaparecer. ¿Eres mago?

Gracias a todoooooooos
_________________
LA INSPIRACIÓN EXISTE, PERO TIENE QUE ENCONTRARTE TRABAJANDO
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mostrar mensajes de anteriores:   
Cambiar a:  
No puedes publicar temas nuevos en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en las encuestas de este foro


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.