Para administrar bases de datos Oracle es fundamental conocer cómo consultar los tiblespaces asociados a los usuarios, verificar el espacio disponible y ampliarlo cuendo sea necesario. A continuación se presentan ejemplos prácticos de estas operaciones.
1. Consulta de tablespaces y usuarios
-- Listar todos los tablespaces del sistema
SELECT * FROM dba_tablespaces;
-- Obtener el tablespace por defecto de cada usuario
SELECT username, default_tablespace FROM dba_users;
-- Tablas del usuario actual
SELECT table_name FROM user_tables;
-- Tablas accesibles por el usuario actual
SELECT table_name FROM all_tables;
-- Tablas de todos los esquemas (incluyendo sistema)
SELECT table_name FROM all_tables;
-- Uso de espacio por tablespace
SELECT ts.tablespace_name "Tablespace",
total.total_mb "Tamaño (MB)",
free.free_mb "Libre (MB)",
(total.total_mb - NVL(free.free_mb, 0)) "Ocupado (MB)",
ROUND((total.total_mb - NVL(free.free_mb, 0)) / total.total_mb * 100, 2) || '%' "Porcentaje usado"
FROM (SELECT tablespace_name, SUM(bytes) / 1024 / 1024 total_mb
FROM dba_data_files
GROUP BY tablespace_name) total,
(SELECT tablespace_name, SUM(bytes) / 1024 / 1024 free_mb
FROM dba_free_space
GROUP BY tablespace_name) free
WHERE total.tablespace_name = free.tablespace_name
ORDER BY "Ocupado (MB)" DESC;
2. Detalles del tablespace
-- Información de archivos de datos (ruta, autoextensión, tamaño máximo, etc.)
SELECT FILE_NAME "Archivo de datos",
TABLESPACE_NAME "Tablespace",
AUTOEXTENSIBLE "Autoextensible",
STATUS "Estado",
MAXBYTES "Máximo (bytes)",
USER_BYTES "Usado (bytes)",
INCREMENT_BY "Incremento (bloques)"
FROM dba_data_files;
3. Ampliación de tablespace
-- Redimensionar un archivo de datos existente a 500 MB
ALTER DATABASE DATAFILE '/u01/oradata/prod/users01.dbf' RESIZE 500M;
-- Activar autoextensión con incremento de 200 MB y tope máximo de 5 GB
ALTER DATABASE DATAFILE '/u01/oradata/prod/users01.dbf'
AUTOEXTEND ON NEXT 200M MAXSIZE 5G;
-- Permitir crecimiento sin límite
ALTER DATABASE DATAFILE '/u01/oradata/prod/users01.dbf'
AUTOEXTEND ON MAXSIZE UNLIMITED;
Nota: El tamaño máximo de un archivo de datos está limitado por el número de bloques (4194304 bloques) según el parámetro DB_BLOCK_SIZE:
- 4K → 16384 MB
- 8K → 32768 MB
- 16K → 65536 MB
- 32K → 131072 MB
- 64K → 262144 MB
4. Creación de un nuevo tabelspace
-- Sintaxis básica
CREATE TABLESPACE nombre_tablespace
DATAFILE 'ruta_y_nombre_archivo' SIZE tamaño_inicial
[AUTOEXTEND ON NEXT incremento MAXSIZE tamaño_maximo]
[LOGGING | NOLOGGING];
-- Ejemplo: tablespace 'ventas' con autoextensión
CREATE TABLESPACE ventas
DATAFILE '/u01/oradata/prod/ventas01.dbf' SIZE 50M
AUTOEXTEND ON NEXT 10M MAXSIZE UNLIMITED
LOGGING;
5. Asignación de tablespace a un usuario
-- Crear el tablespace
CREATE TABLESPACE datos_usr
DATAFILE '/u01/oradata/prod/datos_usr01.dbf' SIZE 100M;
-- Otorgar cuota ilimitada sobre el tablespace a un usuario
ALTER USER nombre_usuario QUOTA UNLIMITED ON datos_usr;
-- Agregar un archivo de datos adicional al tablespace existente
ALTER TABLESPACE datos_usr
ADD DATAFILE '/u01/oradata/prod/datos_usr02.dbf'
SIZE 100M
AUTOEXTEND ON NEXT 50M MAXSIZE UNLIMITED;