Carlos A. Garc铆a

Modificar millones de registros en Oracle

Autor: Carlos A. Garc铆a. Archivado en Oracle
Etiquetas:
05/may/2008  

Ech谩ndole un vistazo a los foros de Tom Kyte, he encontrado uno en el cual resuelve聽 un problema que nos encontramos muchas veces los desarrolladores de base de datos. Cuando se realiza la modificaci贸n de un registro de una tabla, Oracle efectua efectivamente los cambios sobre la tabla y guarda la operaci贸n en el segmento de rollback, de tal forma que podamos deshacer los cambios si es necesario. La memoria ocupada por el segmento de rollback se libera en el momento en el que se realiza un commit o un rollback.

El problema, tal como se plantea en el foro, lo tenemos cuando es preciso modificar a la vez millones de registros de una tabla. El segmento de rollback se desborda y salta un error de memoria. 驴Qu茅 podemos hacer? 驴Aumentar el tama帽o del segmento de rollback? 驴Modificar la tabla por partes? La soluci贸n aportada por Tom es tan simple que resulta genial … Crear una nueva tabla !!!! El “pseudo-script” ser铆a algo como:

CREATE TABLE nueva_tabla as select <poner aqu铆 la funci贸n de modificaci贸n> from tabla_original;

Crear 铆ndices sobre la nueva tabla

Crear los grants sobre la nueva tabla

Etc.

Drop聽 table tabla_original;

Rename nueva_tabla to tabla_original;





Art铆culos relacionados

  • No hay art铆culos relacionados


 Suscríbete a los comentarios de este post.  Comentarios

Dejar comentario

  1. Walter dice:
    28 de julio de 2008 a las 21:26

    Hola a todos,
    Esta opcion no me parece conveniente cuando la tabla que se desa actualizar tiene integridad referencial con otras.
    Para evitar desbordamientos por segmentos de RollBack en la actualizacion de millones de registros, lo conveniente puede ser seccionar la actualizacion y utilizar instrucciones avanzadas como BULK COLLECT y FORALL, que son mas eficiente para estos eventos.

    Cordialmente Walter Huerfano

  2. Carlos A. Garc铆a dice:
    29 de julio de 2008 a las 8:09

    Hola, Walter. Primero, darte las gracias por tu aportaci贸n y pedirte que contribuyas al foro. No me gusta soltar mon贸logos, prefiero di谩logos.
    Quiz谩s deber铆a haber dejado claro que la soluci贸n aportada por Tom Kyte es para situaciones extraordinarias. No s茅 t煤, pero yo no puedo crear tablas en producci贸n sin la aprobaci贸n del DBA, y aun as铆 debe ser 茅l el que ejecute el script.
    A veces no es posible seccionar la actualizaci贸n, por el otro tipo de restricci贸n que tienen las bases de datos relacionales: integridad transaccional. Es en estas situaciones (y s贸lo en estas, ya que como bien dices el BULK COLLECT es clar铆simamente m谩s eficiente) cuando nos interesa utilizar la t茅cnica CTAS.
    Saludos


Deja tu comentario








* Campos obligatorios  




2 comentarios »