
El espacio de tabla en Oracle 10g se utiliza casi al 100%.
Tamaño (MB) = 571.768,0 Usado (MB) = 571.534,0
Acabo de eliminar (y confirmar) miles de registros en una tabla que pertenece a un esquema asociado con ese espacio de tabla. Sorprendentemente, no se liberó espacio según la página Tablespaces en Enterprise Manager.
Pregunta: ¿hay algo que deba hacer para obligar a Oracle a liberar el espacio correspondiente a los registros eliminados?
Respuesta1
alterar la tabla {table_name} habilitar el movimiento de filas;
alterar la tabla {table_name} reducir el espacio;
Respuesta2
Es casi seguro que la página que está viendo en Enterprise Manager informa sobre el espacio libre al comparar DBA_DATA_FILES
(lo que le indica los tamaños totales de los distintos archivos asignados a un espacio de tabla) con DBA_SEGMENTS
(lo que le indica el tamaño total de todos los segmentos asignados a los objetos en el espacio de tabla). Esto no cambiará simplemente porque haya eliminado algunos datos.
Cuando elimina datos, libera espacio dentro de los bloques y extensiones asignados a un objeto en particular. Entonces, si elimina 100 MB de datos de la tabla FOO (y los índices FOO asociados), el tamaño del segmento FOO no disminuirá. Pero ahora habría espacio en ese segmento que acomodaría otros 100 MB de inserciones en FOO. Si está eliminando espacio de FOO para liberar espacio para otros segmentos en el espacio de tabla, deberá reorganizar FOO después de eliminar los datos; este es un proceso un tanto complicado que probablemente requiera tiempo de inactividad y algunas pruebas. . A menos que esté reduciendo permanentemente el tamaño de un objeto, generalmente no es aconsejable: si FOO eventualmente verá otros 100 MB de inserciones, no es beneficioso reducir el segmento FOO solo para que vuelva a crecer.
Puede utilizar el paquete DBMS_SPACE para ver cuánto espacio hay disponible en diferentes segmentos. Eso le informará sobre los bloques vacíos, así como sobre los bloques que se encuentran en varios estados de llenado (0-25% lleno, 25-50% lleno, 50-75% lleno y 75-100% lleno). Cuando elimina datos, generalmente provocará un aumento en la cantidad de bloques vacíos y parcialmente vacíos asignados a una tabla.
Respuesta3
Como continuación de la respuesta aceptada, puede utilizar Segment Advisor (mediante una llamada a dbms_advisor) para estimar el ahorro de espacio al ejecutar la operación de reducción de espacio. [No necesita un paquete de licencia para ejecutar el asesor de segmentos]
Luego podría ahorrar algo de tiempo y dirigirse únicamente a los segmentos en los que obtendría el mayor beneficio.
Respuesta4
Por lo general, es mejor crear una tabla temporal como crear tabla temp_table name como select * from table_you_deleted_from; luego suelte los índices en la tabla original, deshabilite la restricción que no apunta a esa tabla y luego suelte y vuelva a crear esta tabla como crear tabla table_you_deleted_from nombre como select * from temp_table; recrear sus índices y habilitar las restricciones.
Aquí básicamente redujo el tamaño de su tabla y la longitud del árbol de índice, es decir, una recuperación más rápida en el futuro.