Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Oracle »

Bloquear lectura de una tabla en Oracle

Estas en el tema de Bloquear lectura de una tabla en Oracle en el foro de Oracle en Foros del Web. Hola, Necesitaría bloquear una determinada tabla en Oracle. Es decir, que mientras que yo la tenga bloqueada, nadie pueda hacer consultas ni modificaciones sobre dicha ...
  #1 (permalink)  
Antiguo 25/06/2008, 08:49
Avatar de Jawar  
Fecha de Ingreso: octubre-2005
Ubicación: Málaga
Mensajes: 34
Antigüedad: 19 años, 1 mes
Puntos: 0
Bloquear lectura de una tabla en Oracle

Hola,
Necesitaría bloquear una determinada tabla en Oracle. Es decir, que mientras que yo la tenga bloqueada, nadie pueda hacer consultas ni modificaciones sobre dicha tabla. He probado con el siguiente comando :

LOCK TABLE miTabla IN exclusive MODE


Esto bloquea la tabla para el resto de usuarios pero solo para operaciones de manipulación (insert, update, delete). El problema es que no bloquea los select en esa tabla.
¿hay alguna forma de bloquear las consultas a una tabla?

Gracias

PDT: he probado también el select for update pero tampoco me ha servido.
  #2 (permalink)  
Antiguo 25/06/2008, 09:12
Avatar de matanga  
Fecha de Ingreso: octubre-2007
Ubicación: España
Mensajes: 1.091
Antigüedad: 17 años
Puntos: 85
Respuesta: Bloquear lectura de una tabla en Oracle

Hola,

Nop, en Oracle no existe el concepto de bloqueo sobre un SELECT. Cuando se hace un select sobre un bloque que esta siendo ocupado por una transaccion, Oracle ejecuta lo que se llama lectura consistente del bloque (en las estadisticas se lo ve como consistent gets), es decir que busca el valor dentro de los segmentos de undo o rollback.

Edito

Fe de errata, Oracle siempre ejecuta una operacion de lectura consistente en un SELECT, si el bloque esta siendo modificado o no, afectara el origen de la busqueda, un datafile, undo o rollback, etc

Saludos

Última edición por matanga; 25/06/2008 a las 09:19
  #3 (permalink)  
Antiguo 25/06/2008, 10:23
 
Fecha de Ingreso: junio-2008
Ubicación: D.F.
Mensajes: 62
Antigüedad: 16 años, 5 meses
Puntos: 1
Respuesta: Bloquear lectura de una tabla en Oracle

Hola Que Tal.

Otro Solución podría ser el de Cambiar el Nombre de tu Tabla

RENAME nombre_tabla_origen TO nombre_tabla_destino

Con esto tu podrías trabajar con tu tabla_destino y una vez que termines tus modificaciones solo la renombras con el nombre Original.

Saludos.
  #4 (permalink)  
Antiguo 26/06/2008, 01:36
 
Fecha de Ingreso: junio-2007
Mensajes: 891
Antigüedad: 17 años, 5 meses
Puntos: 43
Respuesta: Bloquear lectura de una tabla en Oracle

Cita:
Iniciado por OscarH Ver Mensaje
Hola Que Tal.

Otro Solución podría ser el de Cambiar el Nombre de tu Tabla

RENAME nombre_tabla_origen TO nombre_tabla_destino

Con esto tu podrías trabajar con tu tabla_destino y una vez que termines tus modificaciones solo la renombras con el nombre Original.

Saludos.

Si, claro. Y todo lo que haga referencia a esa tabla se va al campo a recoger zanahorias.

Eso no se puede hacer, hombre.
  #5 (permalink)  
Antiguo 26/06/2008, 08:46
 
Fecha de Ingreso: junio-2008
Ubicación: D.F.
Mensajes: 62
Antigüedad: 16 años, 5 meses
Puntos: 1
Respuesta: Bloquear lectura de una tabla en Oracle

Cita:
Iniciado por jc3000 Ver Mensaje
Si, claro. Y todo lo que haga referencia a esa tabla se va al campo a recoger zanahorias.

Eso no se puede hacer, hombre.

>>Bueno hasta el momento creía que todos sabían que una vez que regresara la tabla al nombre anterior. Todo bastaría con recompilar los objetos por progrma (automáticamente de acuerdo a los objetos referentes a la tabla) o si no manualmente. Pero creo que me equivoque.
  #6 (permalink)  
Antiguo 27/06/2008, 03:13
 
Fecha de Ingreso: junio-2007
Mensajes: 891
Antigüedad: 17 años, 5 meses
Puntos: 43
Respuesta: Bloquear lectura de una tabla en Oracle

Si quieres hacer chapuzas, adelante.

No quiero perder el tiempo hablando con alguien que no quiere oir.
  #7 (permalink)  
Antiguo 27/06/2008, 17:20
Avatar de kikolice  
Fecha de Ingreso: marzo-2004
Mensajes: 1.510
Antigüedad: 20 años, 8 meses
Puntos: 7
Respuesta: Bloquear lectura de una tabla en Oracle

bueno pensando que la pregunta original era como desaparesco una tabla mientras la uso (en otras palabras) una opcion como dicen es renombrarla, pero claro, problemas por los constraints, con los procedures que hagan referencia a ella, etc

tal vez otra opcion sea por el lado de privilegios, si los demas usuarios se conectan con su propio usuario de base de datos, pues les quito temporalmente los privilegios

tambien habriamos que plantear por que demontres quiere desaparecer esa tabla miesntras la usa? realmente tendria algun problema en que solo pudieran consultar?
__________________
Blogzote.com :-) Mi blog
  #8 (permalink)  
Antiguo 30/06/2008, 09:46
 
Fecha de Ingreso: junio-2008
Ubicación: D.F.
Mensajes: 62
Antigüedad: 16 años, 5 meses
Puntos: 1
Respuesta: Bloquear lectura de una tabla en Oracle

Hola que tal

Tienes razón kikolice, de inicio tendríamos que saber cual el motivo por lo que quiere inhabilitar esa tabla al resto de los usuarios. Para después dar una respuesta adecuada.

Saludos.
  #9 (permalink)  
Antiguo 22/07/2008, 04:54
Avatar de Jawar  
Fecha de Ingreso: octubre-2005
Ubicación: Málaga
Mensajes: 34
Antigüedad: 19 años, 1 mes
Puntos: 0
Respuesta: Bloquear lectura de una tabla en Oracle

Hola, perdón por tardar tanto en contestar. He estado liado con otros asuntos.

necesito bloquear la tabla incluso para evitar consultas porque en ella hay un campo cuyo significado es que almacena un contador. La base de datos es accedida por distintas aplicaciones, así que no puedo renombrar la tabla ni nada parecido. Necesito que mientras que estoy leyendo y operando con dicho valor del contador, nadie pueda leer el mismo valor del contador, porque entonces luego se producirían conflictos al operar sobre él y obtener el mismo resultado.

A ver si alguien me podría ayudar, muchas gracias a todos.
  #10 (permalink)  
Antiguo 22/07/2008, 05:33
Avatar de matanga  
Fecha de Ingreso: octubre-2007
Ubicación: España
Mensajes: 1.091
Antigüedad: 17 años
Puntos: 85
Respuesta: Bloquear lectura de una tabla en Oracle

Hola,

No tengo muy claro lo que intentas hacer, pero una secuencia en Oracle tambien puede utilizarse como contador, esto es, si no te importa no tener garantias sobre la correlatividad.

Otra opcion, es que todos los SELECT en los que interviene el contador dentro de la tabla, sean del tipo SELECT FOR UPDATE, de esta manera quedan a la espera por lockeo y se procesan en forma secuencial, ahora, esto NO lo recomiendo porque estas generando un proceso muy poco escalable, cuando tengas que procesar muchas operaciones, las demoras seran poco tolerables.

Saludos
  #11 (permalink)  
Antiguo 22/07/2008, 10:17
Avatar de kikolice  
Fecha de Ingreso: marzo-2004
Mensajes: 1.510
Antigüedad: 20 años, 8 meses
Puntos: 7
Respuesta: Bloquear lectura de una tabla en Oracle

entonces igual lo que necesitas se soluciona con un select for update of campodelcontador
__________________
Blogzote.com :-) Mi blog
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 04:07.