Lección 01: Recuperación de espacio en tablas Talleres Oracle RECUPERACION DE ESPACIO EN TABLAS Con el tiempo, las actualizaciones y eliminaciones en objetos dentro de un espacio de tablas pueden crear espacios vacíos que, individualmente, no son lo suficientemente grandes como para ser reutilizados para nuevos datos. Este tipo de espacio vacío se conoce como espacio libre fragmentado. Los objetos con espacio libre fragmentado pueden generar mucho desperdicio de espacio y pueden afectar el rendimiento de la base de datos. La forma preferida de desfragmentar y reclamar este espacio es realizar una reducción del segmento en línea. -------------------------------------------------------------------- 1. CREANDO TABLESPACE TBS_DATOS, TABLAS E INSERCIÓN DE REGISTROS ------------------------------------------------------------------- $ mkdir /u03/data CREATE TABLESPACE TBS_DATOS DATAFILE '/u03/data/df_data.dbf' SIZE 200M; CREATE TABLE CURSO ( ID INTEGER , NOMBRE CHAR(200) ) TABLESPACE TBS_DATOS; INSERT INTO CURSO SELECT LEVEL , 'CURSO_' || LEVEL FROM DUAL CONNECT BY LEVEL <= 500000; COMMIT; SELECT COUNT(*) FROM CURSO; www.talleresoracle.com Versión: 2021 11 Lección 01: Recuperación de espacio en tablas Talleres Oracle ----------------------------------------------------- 2. ESPACIO OCUPADO POR LA TABLA – 500K REISTROS ---------------------------------------------------- SELECT SEGMENT_NAME, SEGMENT_TYPE, BYTES/1024/1024 MB, BLOCKS FROM USER_SEGMENTS WHERE SEGMENT_NAME = 'CURSO'; -- NUMERO DE FILAS DE TABLA SELECT OWNER, TABLE_NAME, BLOCKS, NUM_ROWS FROM DBA_TABLES WHERE TABLE_NAME IN ('CURSO'); ANALYZE TABLE CURSO COMPUTE STATISTICS; ----------------------------------- 3. BORRADO DEL 50% DE REGISTROS ---------------------------------- DELETE FROM CURSO WHERE ID <= 250000; COMMIT; -------------------------------------------------------- 4. ESPACIO OCUPADO POR LA TABLA LUEGO DEL BORRADO ------------------------------------------------------- SELECT SEGMENT_NAME, SEGMENT_TYPE, BYTES/1024/1024 MB, BLOCKS FROM USER_SEGMENTS WHERE SEGMENT_NAME = 'CURSO'; -- NUMERO DE FILAS DE TABLA ( conteo directo ) SELECT COUNT(*) FROM CURSO; -- NUMERO DE FILAS DE TABLA (de las estadísticas) SELECT OWNER, TABLE_NAME, BLOCKS, NUM_ROWS FROM DBA_TABLES WHERE TABLE_NAME IN ('CURSO'); www.talleresoracle.com Versión: 2021 11 Lección 01: Recuperación de espacio en tablas Talleres Oracle ANALYZE TABLE CURSO COMPUTE STATISTICS; SELECT OWNER, TABLE_NAME, BLOCKS, NUM_ROWS FROM DBA_TABLES WHERE TABLE_NAME IN ('CURSO'); ----------------------------------- 5. RECUPERANDO ESPACIO DE REGISTROS BORRADOS ---------------------------------- ALTER TABLE CURSO ENABLE ROW MOVEMENT; ALTER TABLE CURSO SHRINK SPACE ; SELECT SEGMENT_NAME, SEGMENT_TYPE, BYTES/1024/1024, BLOCKS FROM USER_SEGMENTS WHERE SEGMENT_NAME = 'CURSO'; www.talleresoracle.com Versión: 2021 11