jueves, 22 de abril de 2010

¿QUE ES UN EXTENSION EN ORACLE?

Para cualquier objeto de base de datos que tenga cierta ocupación en disco, es decir, cualquier objeto que tenga un segment relacionado, existe el concepto de extent. Extent es un espacio de disco que se reserva de una sola vez, un segmento que se reserva en un momento determinado de tiempo. El concepto de extent es un concepto físico, unos están separados de otros dentro del disco. Ya dijimos que todo objeto tiene su segmento asociado, pero lo que no dijimos es que este segmento, a su vez, se compone de distintas extensiones. Un segmento, puede ser reservado de una sola vez (10 Mb de golpe), o de varias veces (5 Mb hoy y 5 Mb mañana). Cada una de las veces que se reserva espacio se denomina “extensión”.


En el esquema vemos como el objeto (tabla) FACTURA tiene un segmento en el datafile A-1, y este segmento está compuesto de 3 extensiones. Una de estas extensiones tiene un color distinto. Esto es porque existen dos tipos de extensiones:


INITIAL (extensiones iniciales): estas son las extensiones que se reservan durante la creación del objeto. Una vez que un objeto está creado, no se puede modificar su extensión inicial.


NEXT (siguientes o subsiguientes extensiones): toda extensión reservada después de la creación del objeto. Si el INITIAL EXTENT de una tabla está llena y se está intentando insertar más filas, se intentará crear un NEXT EXTENT (siempre y cuando el datafile tenga espacio libre y tengamos cuota de ocupación suficiente).

¿QUE ES UN SEGMENTO EN ORACLE?

Un segmento es aquel espacio reservado por la base de datos, dentro de un datafile, para ser utilizado por un solo objeto. Así una tabla (o cualquier otro objeto) está dentro de su segmento, y nunca podrá salir de él, ya que si la tabla crece, el segmento también crece con ella. Físicamente, todo objeto en base de datos no es más que un segmento (segmento, trozo, sección) dentro de un datafile. Se puede decir que, un segmento es a un objeto de base de datos, lo que un datafile a un tablespace: el segmento es la representación física del objeto en base de datos (el objeto no es más que una definición lógica)


Existen cuatro tipos de segmentos (principalmente):

Segmentos de TABLE:
aquellos que contienen tablas
Segmentos de INDEX: aquellos que contienen índices
Segmentos de ROLLBACK: aquellos se usan para almacenar información de la transacción activa. Segmentos TEMPORALES: aquellos que se usan para realizar operaciones temporales que no pueden realizarse en memoria, tales como ordenaciones o agrupaciones de conjuntos grandes de datos.

¿QUE ES UN DATAFILE?

Un datafile es la representación física de un tablespace. Son los "ficheros de datos" donde se almacena la información físicamente. Un datafile puede tener cualquier nombre y extensión (siempre dentro de las limitaciones del sistema operativo), y puede estar localizado en cualquier directorio del disco duro.

su localización típica suele ser $ORACLE_HOME/Database. Un datafile tiene un tamaño predefinido en su creación (por ejemplo 100Mb) y este puede ser alterado en cualquier momento Cuando creemos un datafile, este ocupará tanto espacio en disco como hayamos indicado en su creación, aunque internamente esté vacío. Oracle hace esto para reservar espacio continuo en disco y evitar así la fragmentación. Conforme se vayan creando objetos en ese tablespace, se irá ocupando el espacio que creó inicialmente.

Un datafile está asociado a un solo tablespace y, a su vez, un tablespace está asociado a uno o varios datafiles. Es decir, la relación lógica entre tablespaces y datafiles es de 1-N

Los datafiles tienen una propiedad llamada AUTOEXTEND, que se si está activa, se encarga de que el datafile crezca automáticamente (según un tamaño indicado) cada vez que se necesite espacio y no exista. Al igual que los tablespaces, los datafiles también puede estar en línea o fuera de ella.


Manipulación de Datafiles

Mediante el manejo de los archivos físicos de una base de datos (datafiles) podemos redimensionar los tablespaces, permitiendo la asignación de más espacio.

Para aumentar el tamaño de un tablespace se puede optar por alguno de estos dos caminos, representados por las instrucciones que permiten implementar la medida:

  • Agregar un datafile (por ejemplo, al tablespace datos_prueba):

alter tablespace datos_prueba add datafile ‘c:\oracle81\oradata\mkt\tb_mkt02.dbf’ size 50M;

  • aumentar el tamaño de un datafile ya existente:

alter datafile ‘c:\oracle81\oradata\mkt\tb_mkt01.dbf’ resize 150M;

La primera instrucción indica que se va a crear un nuevo datafile para el tablespace que se ha quedado pequeño, aumentando su capacidad en 50 megabytes.

En el segundo ejemplo, no se menciona el tablespace porque lo que se hace es redimensionar un datafile, cuyo nombre es único en la ruta mencionada y que Oracle ya conoce que está asociado a algún tablespace (datos_prueba en el ejemplo). Su tamaño se debe escribir de nuevo, por lo que realmente no se han añadido 150 megabytes como dice la instrucción, sino sólo 50, porque ya tenía 100 megabytes al inicio.


¿QUE ES UN TABLESPACE?

Una base de datos se divide en unidades lógicas denominadas TABLESPACES. Un tablespace no es un fichero físico en el disco, simplemente es el nombre que tiene un conjunto de propiedades de almacenamiento que se aplican a los objetos (tablas, secuencias…) que se van a crear en la base de datos bajo el tablespace indicado (tablas, secuencias…).

Cada tablespace se compone de, al menos, un datafile y un datafile solo puede pertenecer a un tablespace.

* Un objeto en base de datos debe estar almacenado obligatoriamente dentro de un tablespace

Las propiedades que se asocian a un tablespace son: -Localización de los ficheros de datos. -Especificación de máximas cuotas de consumo de disco. -Control de la disponibilidad de los datos (en línea o fuera de línea). -Backup de datos.

Cuando un objeto se crea dentro de un cierto tablespace, este objeto adquiere todas las propiedades antes descritas del tablespace utilizado.