Tablespaces, datafile, segmentes, extents
Los datos se almacena de una forma lógica en segmentos y físicamente en datafiles (ficheros de datos).
Tablespaces
Un “Tablespace” abstrae ambas:
- Puede contener muchos segmentos.
- Y puede componerse de múltiples datafiles.
La relación entre los segmentos y los datafiles es de muchos-a-muchos.
Tipos de segmentos
- Tabla: Es donde se almacena la información de los usuarios o de la propia Base de Datos.
- índices: Almacena los índices que se crean par a las tablas.
- Type 2 Undo: Son segmentos deshacer.
- Partición de tabla: Una tabla puede estar dividida en muchas particiones. Entonces las particiones serán segmentos individuales. Estos segmentos pueden estar en tablespace diferentes, esto significa que es posible extender una tabla a través de múltiples tablespace. (una tabla puede estar dividida en varios segmentos que a su vez pueden estar en varios tablespaces).
- Partición de índice: Si una tabla se divide, los índices también se dividirán.
- Lobsegment, lobindex, lob patition: Si una columna es definida como un tipo de datos de objeto grande, entonces solo se almacena un puntero, este puntero apuntará a un segmento separado donde están los datos. Lobs también puede ser divididos.
- Cluster: Es un segmento que puede contener varias tablas.
- Nested table: Es cuando una columna de una tabla es definida como un tipo de objeto definido por el usuario y contiene columnas.
La vista DBA_SEGMENTS describe cada segmento en la base de datos. Para saber dónde está el fichero de datos de una Base de Datos se puede utilizar:
- SELECT TABLESPACE_NAME, FILE_NAME FROM DBA_DATA_FILES WHERE FILE_ID = 4.
- También se puede hacer una consulta sobre DBA_SEGMENTS.
SEGMENTOS, EXTENTS, BLOQUES Y REGISTROS.
En el Diccionario de Datos existe la vista DBA_SEGMENTSla cual contiene información de los segmentos.
La siguiente consulta permite ver el número de segmentos agrupados por tipo:
- SELECT SEGMENT_TYPE, COUNT(1) FROM DBA_SEGMENTS.
- GROUP BY SEGMENT_TYPE.
- ORDER BY SEGMENT_TYPE.
Los segmentos se hacen más grandes mediante la asignación de nuevos extents dentro del mismo tablespace, aunque no necesariamente en el mismo datafile ya que la información de un segmento puede estar contenida en varios datafiles.
Cuando un segmento se crea, Oracle le asigna un extent que posteriormente se puede introducir datos. Y Oracle le asignará un segundo extent, en el mismo tablespace, pero no necesariamente en el mismo archivo de datos. Se puede añadir manualmente más extent con la sentencia:
- ALTER TABLE HR.NEWTAB ALLOCATE EXTENT
Los extent a su vez están formado por bloques consecutivos, el tamaño por defecto de un bloque es de 8 kilobytes, y puede ser entre 2 y 32 kilobytes. El tamaño del bloque es controlado por el parámetro DB_BLOCK_SIZE.
Se debe evitar que los bloques de sistema operativo sean más grandes que los bloques de Oracle. Un bloque consta de un encabezamiento que es de tamaño variable y un área de datos. El encabezamiento contiene un directorio de fila (que lista donde comienza cada fila dentro del bloque) y la información de cierre de fila:
- La vista DBA_DATA_FILES contiene información sobre los datafiles.
- La vista DBA_EXTENTS contienen información sobre los extents.
Con el comando ALTER TABLE se puede asignar un nuevo extent a una tabla aunque el actual extent no esté totalmente lleno y también permite especificar que datafile almacenará el extent.
El comando seria:
- ALTER TABLE tb_nom [ALLOCATE EXTENT] [(DATAFILE ‘f_nom[)].
- ALLOCATE EXTENT: Fuerza a alocar un nuevo extent.
- DATAFILE: Indiça en que va a contener el nuevo extent.
AUTOMATIC STORAGE MANAGEMENT (ASM)
Los ficheros de datos pueden existir en 4 tipos de dispositivos:
- Sistema de archivo local: Los datos son almacenados en discos duros locales.
- Sistema de archivo agrupado: Los datos se almacenan en discos externos, montados en más de un ordenador. A ellos pueden acceder todos los ordenadores del cluster. Esto equivale a un RAC.
- Dispositivo raw: Se puede crear archivos de datos en los discos sin el sistema de archivo, es preferible usar grupos de disco (ASM).
- Grupos de disco (ASM): Es una alternativa para almacenar archivos de datos basados en el sistema, Oracle permite al DBA referirse a grupos de discos manejados por ASM.
ASM es un administrador de volumen lógico proporcionado por Oracle y empaquetado con la base de datos. Consiste en agrupar discos raw, y Oracle se encarga de la creación del sistema de archivo.
Los volúmenes lógicos tienen las mejoras striping y mirroring de datos (reflejar datos). En el striping los datos son almacenados en varios discos, proporcionando más rapidez. En un mirroring de datos, los datos son almacenados a la vez en los dos discos, proporcionando seguridad.
Discos de ASM son los volúmenes fisicos, Grupos de discos de ASM son los volúmenes lógicos. El tamaño de una unidad de asignación por defecto es de 1MB, pero puede ser de hasta 64MB, si se utiliza como un depósito de datos (data warehouse).
ASM puede almacenar el fichero de control, el online redo log files, el fichero de datos, más Ficheros de backup, fichero redo log files, y ficheros de Datapump. Pero no se puede usar con el Oracle Home o los Ficheros Alert Log y Traces Files.
datafile segment