Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 06-08-2003
Marina Marina is offline
Miembro
 
Registrado: may 2003
Ubicación: Córdoba - Argentina
Posts: 52
Poder: 22
Marina Va por buen camino
Question 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
Responder Con Cita
  #2  
Antiguo 06-08-2003
Avatar de kinobi
kinobi kinobi is offline
Miembro
 
Registrado: may 2003
Posts: 2.621
Poder: 24
kinobi Va por buen camino
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.
Responder Con Cita
  #3  
Antiguo 06-08-2003
Marina Marina is offline
Miembro
 
Registrado: may 2003
Ubicación: Córdoba - Argentina
Posts: 52
Poder: 22
Marina Va por buen camino
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
Responder Con Cita
  #4  
Antiguo 06-08-2003
Avatar de kinobi
kinobi kinobi is offline
Miembro
 
Registrado: may 2003
Posts: 2.621
Poder: 24
kinobi Va por buen camino
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.
Responder Con Cita
  #5  
Antiguo 06-08-2003
PALANCA PALANCA is offline
Miembro
 
Registrado: may 2003
Ubicación: ARGENTINA
Posts: 12
Poder: 0
PALANCA Va por buen camino
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.
Responder Con Cita
  #6  
Antiguo 06-08-2003
Avatar de kinobi
kinobi kinobi is offline
Miembro
 
Registrado: may 2003
Posts: 2.621
Poder: 24
kinobi Va por buen camino
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.
Responder Con Cita
  #7  
Antiguo 10-08-2003
Newbie Newbie is offline
Miembro
 
Registrado: jul 2003
Ubicación: Veracruz, México
Posts: 30
Poder: 0
Newbie Va por buen camino
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.
Responder Con Cita
  #8  
Antiguo 10-08-2003
Avatar de kinobi
kinobi kinobi is offline
Miembro
 
Registrado: may 2003
Posts: 2.621
Poder: 24
kinobi Va por buen camino
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.
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


La franja horaria es GMT +2. Ahora son las 12:35:08.


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