Disco / tablespace lleno
Ha recibido 'unable to extend', 'disk full', 'could not extend' o 'log full'. Sin pánico: primero averigüe QUÉ está lleno, recupere espacio de forma segura y luego corríjalo de forma permanente.
¿Qué está lleno?
Limpiar en el sitio equivocado no sirve. Mida primero el uso: ¿es un datafile, el log de transacciones, archive/redo, temp o el disco del SO?
SELECT d.tablespace_name, ROUND((1-(d.alloc-NVL(f.free,0))/d.maxb)*100,1) AS pct_free
FROM (SELECT tablespace_name, SUM(bytes) alloc, SUM(GREATEST(bytes,maxbytes)) maxb FROM dba_data_files GROUP BY tablespace_name) d LEFT JOIN (SELECT tablespace_name, SUM(bytes) free FROM dba_free_space GROUP BY tablespace_name) f ON f.tablespace_name = d.tablespace_name ORDER BY pct_free;- El datafile / tablespace está lleno
- El log de transacciones / archive-redo está lleno
- Temp / undo está lleno
- El disco del SO está lleno (no la BD)
¿Cuál es el mayor consumidor?
La mayoría de las veces la culpable es una sola tabla/segmento desbocado. Encuentre los más grandes.
SELECT segment_name, segment_type, ROUND(bytes/1048576,1) AS mb FROM dba_segments ORDER BY bytes DESC FETCH FIRST 10 ROWS ONLY;- Hay una tabla inesperadamente grande/desbocada
- Crecimiento normal; el espacio realmente se ha agotado
- Demasiadas filas muertas / bloat
¿Por qué crece el log?
El log/archive no puede limpiarse hasta que termine la transacción/el backup activo más antiguo. ¿Por qué se ha acumulado?
SELECT name, log_reuse_wait_desc FROM sys.databases WHERE name=DB_NAME(); -- why can it not be truncated?- MSSQL: no se están tomando backups de log (LOG_BACKUP)
- PG: un replication slot atascado está reteniendo WAL
- Oracle: el área de logs archivados (FRA) está llena
- Una transacción abierta larga está reteniendo el log
Causa raíz: tabla/segmento desbocado
Un único objeto ha crecido de forma inesperada (inserciones descontroladas, una tabla de cola/log que nunca se purga).
Causa raíz: necesidad real de capacidad
Crecimiento normal; hay que añadir espacio.
Causa raíz: bloat / filas muertas
No se ha recuperado el espacio de las filas borradas/actualizadas.
Causa raíz: Temp / undo lleno
Un sort/hash grande o una transacción abierta larga llenó el espacio temporal.
Causa raíz: disco del SO lleno
El problema está en el disco del sistema operativo, no en la BD. Pueden estar ocupando espacio logs, core dumps, backups antiguos o archivos de traza.
Causa raíz: no se toman backups de log (SQL Server)
En el modelo de recuperación FULL, el log crece indefinidamente si no se toman backups de log.
Causa raíz: Replication slot abandonado (PG)
Un slot atascado (inactivo) impide que se elimine el WAL e infla pg_wal.
Causa raíz: área de logs archivados (FRA) llena (Oracle)
Los logs archivados se han acumulado y la FRA está llena; cuando el archiver se detiene, la base de datos puede dejar de aceptar escrituras.
Causa raíz: transacción abierta larga
La transacción activa más antigua impide recuperar el log/undo.