Tablespaces, Segmentos, Deshacer, Tablas e Índices en Oracle: Guía de Administración de Bases de Datos
Tablespace y Archivos de Datos
- Forma lógica: una BD a la vez; uno o más archivos de datos; subdividido en unidades lógicas de almacenamiento.
- Archivos de datos: forma física; pertenece a un tablespace y a una BD; repositorios de datos de objetos del esquema.
* TBS SYSTEM: se crea con la BD; contiene el diccionario de datos; contiene el segmento de deshacer SYSTEM.
* TBS no SYSTEM: segmentos separados; facilita la administración del espacio; controla el espacio del usuario.
TBS gestionados localmente
- Extensiones libres del tablespace registradas mediante bitmap.
- Cada bit corresponde a un bloque o grupo; valor del bit: libre o en uso.
- Reduce el contenido del diccionario; no necesita fusión; no genera deshacer al producirse una asignación libre.
CREATE TABLESPACE nombre DATAFILE '/u01/oradata/nombre.dbf' SIZE 500M EXTENT MANAGEMENT LOCAL UNIFORM SIZE 128K;TBS gestionados por diccionario
- Las extensiones gestionan el diccionario de datos.
- Actualiza la tabla al asignar o liberar extensiones; la fusión es necesaria.
- Puede tener cláusula de almacenamiento.
CREATE TABLESPACE nombre DATAFILE '/u01/oradata/nombre.dbf' SIZE 500M EXTENT MANAGEMENT DICTIONARY DEFAULT STORAGE (INITIAL 1M NEXT 1M PCTINCREASE 0);Operaciones básicas
Crear TBS:
CREATE TABLESPACE nombre DATAFILE '/u01/oradata/nombre.dbf' SIZE 100M;Migrar TBS por diccionario a local:
EXEC DBMS_SPACE_ADMIN.TABLESPACE_MIGRATE_TO_LOCAL('SYSTEM');Tablespace de deshacer (UNDO)
CREATE UNDO TABLESPACE nombre DATAFILE '/u01/oradata/nombre.dbf' SIZE 40M;- Utiliza las cláusulas DATAFILE y EXTENT MANAGEMENT.
- Se utiliza para guardar segmentos de deshacer.
- No debe contener otro objeto.
- Las extensiones se gestionan de forma local.
Tablespace temporal
CREATE TEMPORARY TABLESPACE nombre TEMPFILE '/u01/oradata/nombre.dbf' SIZE 50M EXTENT MANAGEMENT LOCAL UNIFORM SIZE 4M;- Operaciones de ordenación.
- Compartido por múltiples usuarios.
- No debe contener ningún objeto permanente.
- Extensiones gestionadas localmente.
Tablespace temporal por defecto:
CREATE DATABASE ...; ALTER DATABASE DEFAULT TEMPORARY TABLESPACE default_temp2;El tablespace por defecto no puede: borrarse hasta asignar otro por defecto; ponerse offline; modificarse para convertirlo en permanente.
Buscar tablespace temporal: SELECT * FROM DATABASE_PROPERTIES;
Tablespace de solo lectura y estados
ALTER TABLESPACE nombre READ ONLY;Genera punto de control.
ALTER TABLESPACE nombre OFFLINE;Con el tablespace offline/online se pueden borrar objetos.
Cambiar valores de almacenamiento
ALTER TABLESPACE nombre MINIMUM EXTENT 2M;
ALTER TABLESPACE nombre DEFAULT STORAGE (INITIAL 2M NEXT 2M MAXEXTENTS 999);Autoextensión
CREATE TABLESPACE nombre DATAFILE '/u01/oradata/nombre.dbf' SIZE 200M AUTOEXTEND ON NEXT 10M MAXSIZE 500M;Consultar: DBA_DATA_FILES
Cambiar tamaño y añadir archivos
ALTER DATABASE DATAFILE '/u01/oradata/nombre.dbf' RESIZE 200M;
ALTER TABLESPACE nombre ADD DATAFILE '/u01/oradata/nombre.dbf' SIZE 200M;Mover un tablespace
Requisitos: estar offline y que exista el archivo de destino.
ALTER TABLESPACE nombre RENAME DATAFILE '/u01/oradata/nombre.dbf' TO '/u02/oradata/nombre.dbf';Borrar tablespace
DROP TABLESPACE nombre INCLUDING CONTENTS AND DATAFILES;Gestión OMF (Oracle Managed Files)
ALTER SYSTEM SET DB_CREATE_FILE_DEST = '/u01/oradata/';
CREATE TABLESPACE nombre DATAFILE SIZE 20M;
ALTER TABLESPACE nombre ADD DATAFILE;Información de tablespaces
- Tablespaces:
DBA_TABLESPACES,V$TABLESPACE - Archivos de datos:
DBA_DATA_FILES,V$DATAFILE - Archivos temporales:
DBA_TEMP_FILES,V$TEMPFILE
Relaciones y Estructura de Almacenamiento: Segmentos
Tipos de segmentos: tablas, particiones de tablas, agrupamientos, índices, tablas organizadas por índice, particiones de índices, segmentos de deshacer, segmentos temporales, segmentos LOB, tablas anidadas y segmento de arranque (prioridad).
Cláusula STORAGE: valor por defecto del tablespace.
- Asigna extensiones al segmento: al crearse, ampliarse o modificarse.
- Desasigna extensiones: al borrarse, modificarse o truncarse.
Bloque de la BD
Definido al crear el tablespace mediante DB_BLOCK_SIZE (tamaño por defecto). Formado por uno o más bloques del sistema operativo. Soporta múltiples tamaños: la BD puede crearse con tamaño estándar y tamaños no estándar (hasta 4 bloques no estándar). El tamaño puede tener valores múltiplos de 2 entre 2 y 32 KB.
- Estándar: se define al crear la BD (
DB_BLOCK_SIZE); utilizado por los tablespaces SYSTEM y TEMPORARY.DB_CACHE_SIZEespecifica el tamaño de la caché de buffers; mínimo un granulo (4 o 16 MB); valor por defecto 48 MB. - No estándar:
DB_nK_CACHE_SIZE(de 2 a 32); mínimo un granulo.
CREATE TABLESPACE nombre DATAFILE 'nombre.dbf' SIZE 10M BLOCKSIZE 4K;Contenido de un bloque de BD
Cabecera, espacio libre y datos. Parámetros de utilización: INITRANS, MAXTRANS, PCTFREE, PCTUSED.
Gestión de espacio
Gestión automática:
CREATE TABLESPACE nombre DATAFILE '/u01/oradata/nombre.dbf' SIZE 5M EXTENT MANAGEMENT LOCAL UNIFORM SIZE 64K SEGMENT SPACE MANAGEMENT AUTO;Gestión manual: permite configurar con los parámetros PCTFREE, PCTUSED y FREELIST.
Información de almacenamiento
DBA_EXTENTS, DBA_SEGMENTS, DBA_TABLESPACES, DBA_DATA_FILES, DBA_FREE_SPACE
Gestión de Datos Deshacer (Undo)
Existen 2 tipos de gestión de datos deshacer: SMU automático y SMU manual (deshacer equivale a rollback).
Tipos de segmentos de deshacer
- SYSTEM: para el tablespace SYSTEM.
- Diferido: offline al instante; tablespace en offline.
- No SYSTEM: otros tablespaces; modo automático (tablespace UNDO).
Modo manual:
- Privado (única instancia)
- Público (cualquier instancia)
SMU automático (UNDO)
Asignación de UNDO por instancia para trabajar con la instancia. El servidor Oracle mantiene el deshacer automáticamente en el tablespace UNDO.
UNDO_MANAGEMENT = AUTO
UNDO_TABLESPACE = UNDOTBSCREATE DATABASE nombre1 ... UNDO TABLESPACE nombre2 DATAFILE '/u01/oradata/nombre.dbf' SIZE 20M AUTOEXTEND ON;
CREATE UNDO TABLESPACE nombre DATAFILE '/u01/oradata/nombre.dbf' SIZE 20M;Modificar:
ALTER TABLESPACE nombre ADD DATAFILE '/u01/oradata/nombre.dbf' SIZE 30M AUTOEXTEND ON;Cambiar a tablespace UNDO:
ALTER SYSTEM SET UNDO_TABLESPACE = nombre;Borrar:
DROP TABLESPACE nombre;Parámetros
UNDO_SUPPRESS_ERRORS: en TRUE suprime errores.UNDO_RETENTION: controla los datos de deshacer.UNDO_POOL: define la cantidad de espacio permitido.
Información
DBA_ROLLBACK_SEGS, V$ROLLNAME, V$ROLLSTAT, V$UNDOSTAT, V$SESSION, V$TRANSACTION
Gestión de Tablas
Almacenamiento de datos de usuario: tabla regular, tabla particionada, tabla organizada por índice y agrupamiento.
Crear tablas temporales
CREATE GLOBAL TEMPORARY TABLE nombre AS SELECT * FROM nombre;Cálculos
PCTFREE = ((tamaño medio de fila - tamaño inicial de fila) * 100) / tamaño medio de fila
PCTUSED = (100 - PCTFREE) - ((tamaño medio de fila * 100) / espacio disponible)
Operaciones
Cambiar parámetros de bloques y almacenamiento:
ALTER TABLE nombre PCTFREE 30 PCTUSED 50 STORAGE (NEXT 500K MINEXTENTS 2 MAXEXTENTS 100);Asignación manual de extensiones:
ALTER TABLE nombre ALLOCATE EXTENT (SIZE 500K DATAFILE '/disk01/nombre.dbf');Reorganización de tabla particionada:
ALTER TABLE nombre MOVE TABLESPACE nombre2;Truncar tabla:
TRUNCATE TABLE nombre;Borrar tabla:
DROP TABLE nombre CASCADE CONSTRAINTS;Borrar columna:
ALTER TABLE nombre DROP COLUMN comuna CASCADE CONSTRAINTS CHECKPOINT 1000;Renombrar columna:
ALTER TABLE nombre RENAME COLUMN columna TO nueva_columna;Marcar columna como no usada:
ALTER TABLE nombre SET UNUSED COLUMN columna CASCADE CONSTRAINTS;Borrar columnas no usadas:
ALTER TABLE nombre DROP UNUSED COLUMNS CHECKPOINT 1000;Borrar columnas (continuar):
ALTER TABLE nombre DROP COLUMNS CONTINUE CHECKPOINT 1000;Información
DBA_TABLES, DBA_OBJECTS
Gestión de Índices
Tipos de índices
- Lógicos: columna única o concatenados; únicos o no únicos; basados en función; de dominio.
- Físicos: particionados o no; B-TREE (clave normal o inversa); bitmap.
Estructura B-TREE: raíz, derivación, hoja, cabecera, longitud de la columna clave, valor de la columna clave y ROWID.
- B-TREE: alta cardinalidad; actualización de clave de costo bajo; ineficaz para consultas con OR; útil en OLTP.
- BITMAP: baja cardinalidad; claves costosas de actualizar; eficaz para consultas con OR; útil en almacenes de datos.
Creación
CREATE INDEX nombre ON nombre(parametro) PCTFREE 30 STORAGE (INITIAL 200K NEXT 200K PCTINCREASE 0 MAXEXTENTS 50) TABLESPACE indice;CREATE BITMAP INDEX nombre ON nombre1(parametro) PCTFREE 30 STORAGE (INITIAL 200K NEXT 200K PCTINCREASE 0 MAXEXTENTS 50) TABLESPACE indice;Operaciones
Cambiar parámetros:
ALTER INDEX nombre STORAGE (NEXT 400K MAXEXTENTS 100);Asignar y desasignar extensiones:
ALTER INDEX nombre ALLOCATE EXTENT (SIZE 200K DATAFILE 'DISK6/nombre.dbf');
ALTER INDEX nombre DEALLOCATE UNUSED;Reconstruir índice:
ALTER INDEX nombre REBUILD TABLESPACE indice;Reconstruir online:
ALTER INDEX nombre REBUILD ONLINE;Fusión de índice:
ALTER INDEX nombre COALESCE;Validar:
ANALYZE INDEX nombre VALIDATE STRUCTURE;Borrar índice:
DROP INDEX nombre;Controlar uso:
ALTER INDEX nombre MONITORING USAGE;
ALTER INDEX nombre NOMONITORING USAGE;Información
DBA_INDEXES, DBA_IND_COLUMNS, V$OBJECT_USAGE