miércoles, 8 de febrero de 2012

Tablespaces


Un tablespace es una división lógica de la Base de Datos. Cada Base de Datos tiene al menos uno. Un tablespace puede pertenecer sólo a una Base de Datos. Los tablespaces se utilizan para mantener juntos los datos de usuarios o de aplicaciones para facilitar su mantenimiento o mejorar las prestaciones del sistema.
De esta manera, cuando se crea una tabla, se debe indicar el tablespace al que se destina. Por defecto se depositan en el tablespace SYSTEM, que se crea por defecto. Este espacio de tablas es el que contiene el diccionario de datos, por lo que conviene reservarlo para el uso del servidor, y asignar las tablas de usuario a otro. Lo razonable y aconsejable es que cada aplicación tenga su propio espacio de tablas.
Hay varias razones que justifican este modo de organización de las tablas en tablespaces:
  1. Un tablespace puede quedarse offline debido a un fallo de disco, pero el SGBD continúa funcionando sin problemas.
  2. Los tablespaces pueden estar montados sobre dispositivos ópticos si son de sólo lectura.
  3. Permiten distribuir a nivel lógico/físico los distintos objetos de las aplicaciones.
  4. Son una unidad lógica de almacenamiento, pueden usarse para aislar completamente los datos de diferentes aplicaciones.
  5. Oracle permite realizar operaciones de respaldo/recuperación a nivel de tablespace mientras la Base de Datos sigue funcionando.
Cuando se crean los tablespace, se les asigna un espacio en disco que Oracle reserva inmediatamente, se utilice o no. Si este espacio inicial se ha quedado pequeño Oracle puede gestionar el crecimiento dinámico de los ficheros sobre los que se trabajan los tablespace. Esto elimina la posibilidad de error en las aplicaciones por fallos de dimensionamiento inicial. Los parámetros de crecimiento del tamaño de los espacios de tablas se especifican en la creación de los mismos.
Se pueden ver los tablespace definidos en nuestra Base de D con el siguiente comando SQL:
SELECT * FROM user_tablespaces;
Dentro de cada espacio de tabla se pueden almacenar objetos de distinta naturaleza: tablas, índices, etc. Pero no se pueden mezclar si más. Una manera de separarlos es mediante los segmentos.
Se puede almacenar más de un segmento por tablespace. Un segmento está contenido en su totalidad en un tablespace. Un segmento está constituido por un conjunto de extensiones, que no son más que grupos de bloques de disco contiguos. Cuando se borra un segmento, el espacio es devuelto al tablespace. Todos los datos de la BD están almacenados en segmentos.
Existen 5 tipos de segmentos:
  1. Segmentos de datos: almacenan las tablas.
  2. Segmentos de índices: permiten un acceso rápido a los datos dependiendo de la cantidad de los mismos. Las consultas que sólo referencian a columnas indexadas se resuelven en el índice.
  3. Segmentos de rollback: son objetos internos de la Base de Datos que permiten efectuar la restauración de las transacciones no validadas asegurando la consistencia en lectura.
  4. Segmentos temporales: son creados por Oracle para un uso temporal cuando debe realizar una ordenación que no le cabe en memoria. Son eliminados cuando la sentencia finaliza.
  5. Segmentos de bootstrap: Se crea en SYSTEM y contiene definiciones del diccionario para sus tablas, que se cargan al abrir la Base de Datos. No requiere ninguna acción por parte del DBA. No cambia de tamaño.
La tabla que guarda la información de los segmentos de usuario es user_segments, y se puede visualizar la información sobre los segmentos con la siguiente sentencia SQL:
SELECT * FROM user_segments;