sentencia principales consultas conclusion conceptos comandos caracteristicas sql db2 zos

sql - principales - eliminar una gran cantidad de filas de una tabla



sentencia select db2 (3)

Tenemos un requisito para eliminar filas del orden de millones de varias tablas como un trabajo por lotes (tenga en cuenta que no estamos eliminando todas las filas, estamos eliminando en función de una marca de tiempo almacenada en una columna indexada). Obviamente, un DELETE normal toma una eternidad (debido al registro, la verificación de restricciones referenciales, etc.). Sé en el mundo de LUW, tenemos ALTER TABLE NOT LOGGED INITIALLY pero parece que no puedo encontrar una declaración SQL equivalente para DB2 v8 z / OS. ¿Alguien tiene alguna idea sobre cómo hacer esto realmente rápido? Además, ¿alguna idea sobre cómo evitar los controles referenciales al eliminar las filas? Por favor hagamelo saber.



En el pasado, he resuelto este tipo de problema exportando los datos y volviéndolos a cargar con un comando de reemplazo de estilo. Por ejemplo:

EXPORT to myfile.ixf OF ixf SELECT * FROM my_table WHERE last_modified < CURRENT TIMESTAMP - 30 DAYS;

Entonces puedes CARGARLO de nuevo, reemplazando lo viejo.

LOAD FROM myfile.ixf OF ixf REPLACE INTO my_table NONRECOVERABLE INDEXING MODE INCREMENTAL;

No estoy seguro de si esto será más rápido o no para usted (probablemente, esto depende de si está eliminando más de lo que conserva).


Modificamos el espacio de tabla para que el bloqueo se produzca en el nivel de espacio de tabla en lugar de en el nivel de página. Una vez que cambiamos, DB2 solo requería un bloqueo para realizar el DELETE y no tuvimos ningún problema con el bloqueo. En cuanto al registro, le pedimos al cliente que se dé cuenta de la cantidad de registros requeridos (ya que no parecía haber una solución para evitar el problema de registro). En cuanto a las restricciones, las dejamos caer y las volvimos a crear después de la eliminación.

Gracias a todos por su ayuda.