Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   CommitRetaining con IBX (https://www.clubdelphi.com/foros/showthread.php?t=2781)

Marina 06-08-2003 16:31:06

CommitRetaining con IBX
 
Hola a todos!

Mi duda es la siguiente:
Trabajo con componentes IBDataset. Tengo un programa donde se carga una factura, se graba, y luego se imprime.
Al grabarse cierro la transacción con Commit, esto hace que se me cierren todos los IBDatasets y al querer imprimir ya no poseo la información.
Una solución a esto es antes de imprimir volver a abrir todos los IBDatasets y posicionarme en los registros correspondientes mediante Locate o bookmarks.
Otra solución sería hacer Commitretaining en lugar de Commit; mi duda surge aquí, pues no tengo experiencia en el uso de este método. He estado leyendo un poco acerca de esto y no aconsejan usarlo porque van quedando las distintas versiones de los registros y afecta el rendimiento del sistema. Por otro lado, como se maneja el mismo contexto de la transacción, la vista de la base de datos es siempre la misma, es decir que no vería los cambios que realicen otras transacciones concurrentes (esto es según lo que interpreté de un artículo que leí).

Alguien puede darme una sugerencia?

Desde ya muchas gracias.

Marina

kinobi 06-08-2003 16:44:16

Hola,

Cita:

Posteado originalmente por Marina
He estado leyendo un poco acerca de esto y no aconsejan usarlo porque van quedando las distintas versiones de los registros y afecta el rendimiento del sistema.
Cierto, aunque en realidad lo que ocurre es que, con CommitRetaining, no se lanza el proceso de recolección cooperativa de basura, o lo que es lo mismo, no se eliminan los "deltas" (recuerda que InterBase no almacena copias completas en la multiversión de registro, sólo de los cambios efectivos dentro de cada registro) que se generan en la Arquitectura Multi-Generacional. De todas formas, el proceso de sweeping, o un backup-restore, elimina el problema.

Cita:

Posteado originalmente por Marina
Por otro lado, como se maneja el mismo contexto de la transacción, la vista de la base de datos es siempre la misma, es decir que no vería los cambios que realicen otras transacciones concurrentes
Realmente la transacción no es la misma después de un CommitRetaining. Lo que sucede es que la nueva transacción, que se crea tras el CommitRetaining, aprovecha el contexto que estaba utilizando la transacción anterior para agilizar el proceso. Los cambios que realicen otras transacciones concurrentes, independientemente al uso de Commit o CommitRetaining, sólo podrás verlos si se confirman (con Commit o CommitRetaining) en esas transacciones y, además, tu transacción tiene un nivel de aislamiento suficientemente bajo para verlos (READ COMMITED).

Saludos.

Marina 06-08-2003 16:54:38

Gracias Kinobi por tu aclaración con respecto a mis dudas.

Lo que realmente quiero saber es cada cuanto tiempo será necesario realizar el backup-restore. Tené en cuenta que se trate de un comercio que realiza muchas facturas por día.

Marina

kinobi 06-08-2003 17:05:39

Hola,

Cita:

Posteado originalmente por Marina
Lo que realmente quiero saber es cada cuanto tiempo será necesario realizar el backup-restore.
Pues tendrás que utilizar tu propia experiencia, ya que yo no tengo datos al respecto.

Cita:

Posteado originalmente por Marina
Tené en cuenta que se trate de un comercio que realiza muchas facturas por día.
Según mi opinión, ya no sólo por el asunto del rendimiento, sino también por la propia seguridad de la información, una empresa (comercio) que realice actividad diaria debería hacer copias de seguridad (que podrías aprovechar también para el proceso de recuperación-restore) diarias. Ten en cuenta que InterBase permite hacer copias de seguridad (backups) en bases de datos activas (en las que se esté trabajando). Aunque el proceso quita algo de rendimiento al servidor, siempre puede hacerse en horas de poca actividad: a la hora de la comida, a última hora antes del cierre, ... El proceso de recuperación (restore) no necesariamente debe ser diario, pero tal vez (te remito al párrafo anterior, la experiencia) una vez a la semana o cada 10-15 días.

Saludos.

PALANCA 06-08-2003 18:16:29

Disculpen mi ignorancia, pero si por ejemplo yo conecto la base de datos en el OnCreate del módulo de datos y la desconecto en el OnDestroy, no se puede realizar el backup y el restore en forma automática.

Muchas gracias por todo.

kinobi 06-08-2003 18:43:33

Hola,

sí es posible. Si estamos hablando de Delphi e IBX, nada más fácil que utilizar los componentes TIBBackupService y TIBRestoreService. Ahora bien, ¿estás seguro que éso es lo que quieres?. Imagina a un usuario que ejecute tu aplicación cinco, diez, veinte, cien, ..., veces seguidas. Habrás lanzado tantas veces el proceso de backup (y/o restore) innecesariamente. Además, existe otro problema, según que sistema operativo se esté utilizando, puede ser necesario tener permisos especiales para hacer el proceso.

Los procesos "automáticos" de ese tipo, mejor hacerlos con alguna utilidad del sistema.

Saludos.

Newbie 10-08-2003 01:41:20

Oigan, antes que todo, saludos.

Lo que pasa es que me gustaría que me ampliaran más eso de las inconveniencias que genera el commitretaining, ya que yo lo utilizo bastante en las aplicaciones que hago a fin de no perder los datos con los que estoy trabajando y no tener que volver a cerrar y a abrir la tabla(o a refrescarla, según sea el caso).

¿Quieren decir que no es conveniente utilizarlo?

Y otra pregunta :¿Para qué usar el método de bakup y restore? Según lo que entendí de lo que escribieron anteriormente, cuando utilizas el commit retaining pasa algo que se soluciona usando el bakup o el restore. ¿Entendí bien, o me fui de filo?

¿Dónde podría encontrar más información sobre la manera en que funciona el commitretaining y en general, el funcionamiento de Interbase? ya que lo que comentó kinobi es que Interbase utiliza una arquitectura multi generacional, que según tengo entendido, también es utilizada por postgresql.

Ojalá me puedan responder pronto, pues francamente lo que leí en este hilo me confundió un poco(acabo de pasar la etapa de confundirte con los niveles de aislamiento de las transacciones, je je).

Muchas gracias de antemano y hasta pronto. :)

kinobi 10-08-2003 10:06:04

Hola,

Cita:

Posteado originalmente por Newbie
¿Dónde podría encontrar más información sobre la manera en que funciona el commitretaining y en general, el funcionamiento de Interbase?
En mi página web (http://www.clubdelphi.com/users/kinobi) encontrarás un documento sobre transacciones en InterBase y Firebird donde se tratan esos temas.

Saludos.


La franja horaria es GMT +2. Ahora son las 20:57:09.

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