Gestión de tablespaces en Oracle: consulta, ampliación y asignación

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;

Etiquetas: Oracle tablespace database administration datafile SQL

Publicado el 6-23 04:25