Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 28-06-2003
mpedra mpedra is offline
Miembro
 
Registrado: may 2003
Ubicación: Buenos Aires (Arg)
Posts: 19
Poder: 0
mpedra Va por buen camino
Bloqueo de registros en DB2

Salud Foro!!!

Recientemente he tenido que migrar us sistema de base de datos, desde un Oracle 9i a DB2 8.
Por la forma en como está hecho el código practicamente no he tenido que realizar cambios. PERO el problema se presentó con los bloqueos de registros.

En oracle tengo lo siguiente:

SELECT *FROM tabla WHERE condicion FOR UPDATE NO WAIT

En DB2 no es valido el NO WAIT, y en realidad no funciona el bloqueo. es decir, perece como que a pesar de la clausula FOR UPDATE el 2do usuario que intenta modificar el mismo registro puede acceder y modificarlo sin problemas, en lugar de quedarse esperando.
(Esto sucede como en el caso de la estrategia optimista de conflictos de edición, en la cual se supone que no habrá conflictos... pero yo necesito una estrategia pesimista, es decir que no me deje a cceder al registro si alguien mas lo está editando)

Bueno en resumen: ¿Alguien puede ayudarme con los bloqueos en DB2? Desde ya muchas gracias por la atención.


Saludos

Marcos
__________________
Marcos
Responder Con Cita
  #2  
Antiguo 01-07-2003
__cadetill __cadetill is offline
Miembro
 
Registrado: may 2003
Posts: 3.387
Poder: 25
__cadetill Va por buen camino
En principio, si el sistema esta bien configurado, es el propio As400 es que se dedica a controlar el tema de los bloqueos. Si un registro esta en modo edicion/insercion, otro usuario no puede acceder a el, pero si esta en modo lectura, cualquier usuario puede acceder a ese registro
Responder Con Cita
  #3  
Antiguo 01-07-2003
mpedra mpedra is offline
Miembro
 
Registrado: may 2003
Ubicación: Buenos Aires (Arg)
Posts: 19
Poder: 0
mpedra Va por buen camino
Te agradezco Cadetil, pero no estoy sobre AS/400 sino sobre Windows, es decir el DB2 server esta en él.
El tema de los bloqueos me ha dejado bastante confundido porque el manejo parece ser muy diferente al que hace Oracle.

La pregunta la deberia cambiar a:

Hay alguna/s sentencia/s SQL que me permitan bloquear un registro en DB2 utilizando BDE?

Como debo configurar el Transisolation del TDatabase, para que sean admitidos los bloqueos?

Bueno si tienen alguna idea o experiencia con este tema será bien recibida.

Saludos

Marcos
__________________
Marcos
Responder Con Cita
  #4  
Antiguo 01-07-2003
__cadetill __cadetill is offline
Miembro
 
Registrado: may 2003
Posts: 3.387
Poder: 25
__cadetill Va por buen camino
uff, pues mucho no voy a poder ayudarte, nunca he trabajado con DB" para Windows y esos menesteres siempre los he dejado a cargo del As400

Espero que alguien pueda responderte
Responder Con Cita
  #5  
Antiguo 01-07-2003
mpedra mpedra is offline
Miembro
 
Registrado: may 2003
Ubicación: Buenos Aires (Arg)
Posts: 19
Poder: 0
mpedra Va por buen camino
Bueno gracias de todas formas, despues de leerme por lo menos 15 manuales de IBM donde no pude encontrar mas que un par de ejemplos y un monton de información dispersa y mal organizada, di con la solución:

La consigna es no poder editar un registro que está siendo editado por otro usuario.

Lo primero que hay que tener en cuenta que esta estrategia de acceso se configura para la base de datos a la que estemos accediendo. Es decir al menos hasta ahora....

==> Setear el parametro LOCKTIMEOUT a 0 (mediante el Control Central en la base de datos, Modificar parametros)
Se reinicia la base y ya estamos en condiciones.

==> Ahora para hacer el bloqueo del registro hay que tener en cuenta el nivel de aislamiento... prefiero no explicar esta parte porque a pesar de que lo he hecho funcionar no lo he entendido muy bien.

El SQL necesario para lograr el bloqueo es:

SELECT * FROM TABLA WHERE CONDICIONES
FOR UPDATE
WITH RR

donde RR es el nivel de aislamiento que le quiero dar al acceso.
Es interesante para entender que pasa con los diferentes nivles de aislamiento probar diferentes convinaciones entre el nivel de aislamiento de la base y del acceso, y que pasa con la obtención de registros que han sido modificados... y no 'comiteados'



Saludos

Marcos
__________________
Marcos
Responder Con Cita
  #6  
Antiguo 01-07-2003
__cadetill __cadetill is offline
Miembro
 
Registrado: may 2003
Posts: 3.387
Poder: 25
__cadetill Va por buen camino
Me alegra cantidad de que lo tengas solucionado. A ver si en la proxima podemos darte una ayudita
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 10:03:48.


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