Qué son????
Cuando el tamaño de una fila supere el tamaño de un bloque de la base de datos, puede generarse una migración o un encadenamiento de la fila.
Cuando hablamos de filas migradas nos referimos a una fila que se mueve completa de un bloque a otro dejando en el bloque original un puntero.
Cuando hablamos de filas encadenadas nos referimos a filas que requieren más de un bloque para su almacenamiento.
Si nos encontramos en presencia de una tabla con gran cantidad de filas encadenadas o migradas quiere decir que la base de datos va a tener que realizar varias lecturas físicas para poder procesar los datos de una misma fila lógica.
Como evitamos entonces el encadenamientos? Seteando un valor adecuado de pctfree en nuestra tabla.
Otra solución es un expdp/impdp de las tablas en cuestion
Si quisiéramos solucionar el problema de filas encadenadas debemos seguir los siguientes pasos:
Paso 1:
Correr el script utlchain.sql el cual crea la tabla CHAINED_ROWS.
Paso 2:
Revisamos la/s tabla para ver si poseen filas encadenadas. De poseerlas se insertaran en la tabla CHAINED_ROWS.
SQL> ANALYZE TABLE
Paso 3:
Creamos una tabla auxiliar la cual llenaremos con las “filas duplicadas” de nuestra tabla
SQL> CREATE TABLE aux AS
2 SELECT * from
4 (SELECT head_rowid
5 FROM chained_rows
6 WHERE table_name = ‘nuestra tabla’);
Paso 4:
Borramos las filas encadenadas de nuestra tabla
SQL> DELETE FROM
3 (SELECT head_rowid
4 FROM chained_rows
5 WHERE table_name = ‘nuestra tabla’);
Paso 5:
Volvemos a insertar las tablas antes encadenadas en nuestra tabla
SQL> INSERT INTO
Paso 6:
Realizar nuevamente la verificación para cerciorarse de que no queden filas encadenadas
SQL> DELETE CHAINED_ROWS WHERE table_name = 'nuestra tabla';
SQL> ANALYZE TABLE nombre_de_la_tabla
2 LIST CHAINED ROWS INTO chained_rows;
SQL> SELECT * FROM chained_rows WHERE table_name = 'nuestra tabla';
Espero les haya servido
Saludos!
Gondalf
Rápido, sencillo y para toda la familia.
ResponderEliminarMuy buena explicación, también sería conveniente explicar que podemos hacer para evitarlo, por ejemplo modificando el parámetro PCTFREE o PCTVERSION de la tabla.
En el metalink (cuenta gratuita) con tan sólo buscar CHAINED MIGRATED ROWS encontraréis varios documentos relacionados con estos problemas.
Metalink (How to Find and Eliminate Migrated and Chained Rows [ID 102989.1])
Muy buen aporte Gondalf.
Saludos.
Gracias por tu comentario!!
ResponderEliminar