miércoles, 27 de mayo de 2009

Oracle: tablespaces y segmentos

Una Base de Datos Oracle es un conjunto de datos almacenado y accesible según el formato de tablas relacionales. Una tabla relacional tiene un nombre y unas columnas, su definición. Los datos están almacenados en las filas. Las tablas pueden estar relacionadas con otras.

Estructuras internas de la base de datos permiten la correspondencia entre los ficheros físicos en los que se almacenan los datos y las tablas lógicas. Para agrupar tablas se utilizan espacios de tablas, tablespaces.

TABLESPACE

Toda base de datos tiene, por defecto, un tablespace SYSTEM. Lo aconsejable es que cada aplicación tenga el suyo propio.

Dentro de cada espacio se almacenan objetos de distinta naturaleza: tablas, índices, etc. No se pueden mezclar y la manera de separarlos son los segmentos.

Motivación:
  • Un espacio de tablas puede quedarse offline debido a un fallo de disco, permitiendo que el SGBD continúe funcionando con el resto.
  • Los espacios de tablas pueden estar montados sobre dispositivos ópticos si son de sólo lectura.
  • Permiten distribuir a nivel lógico/físico los distintos objetos de las aplicaciones.
  • Son una unidad lógica de almacenamiento, pueden usarse para aislar completamente los datos de diferentes aplicaciones.
  • Oracle permite realizar operaciones de backup/recovery a nivel de espacio de tabla mientras la BD sigue funcionando.

SEGMENTOS

Un segmento está constituido por un conjunto de extensiones, que no son más que grupos de bloques de disco ORACLE contiguos. Está contenido por completo en un único espacio de tablas. Cuando se borra un segmento, el espacio es devuelto al espacio de tabla.
Existen cinco tipos de segmentos:
  • De datos: almacenan las tablas
  • De índices: permiten acceso rápido a los datos. Cada índice ocupa un segmento independiente del segmento de datos y deberían estar en un espacio de tablas distinto al de los datos, para mejorar el rendimiento.
  • De rollback: permiten efectuar la restauración de las transacciones no validadas asegurando la consistencia en lectura. La estructura de los registros de rollback es :
    • Identificador de la transacción.
    • Dirección del bloque donde está la tabla.
    • Número de fila.
    • Número de columna.
    • Valor del dato antiguo (antes de ser modificado).
    Una BD no puede arrancar si no puede acceder al menos a un segmento de rollback. Si la BD tiene múltiples espacios de tablas, deben existir al menos dos segmentos de rollback y cada segmento de rollback debe tener al menos dos extensiones, reutilizables de manera cíclica. Esto segmentos son un objeto compartido de la BD, aunque se puede asinar un segmento de rollback particular a una transacción dada.
  • Temporales: son eliminados cuando la sentencia finaliza.
  • De bootstrap: se crea en SYSTEM y contiene definiciones del diccionario para sus tablas, que se cargan al abrir la BD. No requiere ninguna acción por parte del DBA. No cambia de tamaño.
También te puede interesar optimizar el gestor de Oracle:

14 comentarios:

  1. Veo que con esta entrada del blog has dejado sin palabras a la peña ;-).

    Por cierto, una motivación más de la existencia de los Tablespaces es la optimización de velocidad de acceso a los datos. Poner un índice en un tablespace distinto al de los datos de la tabla, permite separarlos en discos físicos distintos y por lo tanto, le permite al Oracle (o el SGBD que sea) acceder a índices y datos a la vez, optimizando el tiempo de acceso (vaya, he seguido leyendo y veo que lo indicas en los segmentos. Bueno, como ya lo he escrito... jeje).

    ResponderEliminar
  2. En realidad tampoco esperaba que tuviera muchos comentarios :-)

    Eres un prisas y no acabas de leer la entrada antes de ponerte a comentarla, eh? Fijo que eres de los que se lee el final del libro al empezar para saber a qué atenerse :-p

    Tengo más cosas sobre Oracle, un marrón laboral obligó a un aprendizaje apresurado, ya las iré poniendo de vez en cuando.

    ResponderEliminar
  3. Ese marrón es el que yo conozco o algún otro :-D
    Si que te ha salido técnico este post, jejeje

    ResponderEliminar
  4. Tú conoces otros marrones de Oracle seguro :-)

    Era técnico a tope, pero mira, ya van dos comentarios! jajaja

    ResponderEliminar