Tablas en Oracle

Share

Un vistazo rápido a las tablas en Oracle.

Las tablas son la unidad básica de almacenamiento en una base de datos en Oracle.

Los datos son almacenados en filas (rows) y columnas (columns), y se define con:

  • Nombre
  • Conjunto de columnas (nombre y tipo (datatype))

Al crear una tabla, Oracle asigna un segmento de datos en el tablespace. Se puede controlar el espacio y el uso de ese segmento.

Veamos los tipos de tablas en Oracle:

  • Regulares: Forma bastante común para almacenar los datos.
    • Tipo por defecto
    • Se tiene muy poco control sobre la distribución de las filas en su almacenamiento físico
  • Particionadas.
  • Organizadas por índices.
  • Agrupadas (clusterizadas).

Convenciones de nombres.

  • Nombre lo más descriptivo posible
    • Hasta 30 caracteres
    • Debe empezar por letra
    • Puede contener letras, números y caracteres especiales ( $ # y _ )
  • Se puede documentar añadiendo comentarios

Operaciones:

  • Crear: CREATE TABLE nombre_tabla (nombre_columna TIPO, {nombre_columna TIPO});
  • Ejemplo: CREATE TABLE profesor (nombre VARCHAR(20), id INTEGER);
  • Opciones dentro de la creación:
    • TABLESPACE
    • STORAGE
    • PCTUSED / PCTFREE

Cláusula Storage:

  • Opciones:
    STORAGE( INITIAL entero{K|M} NEXT entero{K|M}
    {MINEXTENTS entero} {MAXEEXTENTS entero|UNLIMITED}
    {PCTINCREASE %entero});
  • Tamaño de los bloques:
    INITIAL, mínimo 2 bloques, máximo *, defecto 5 bloques
    NEXT, mínimo 1 bloque, máximo *

PCTUSED y PCTFREE. Controlan el espacio libre para inserciones y eliminaciones de filas en los bloques de un segmento.

PCTFREE. Este parámetro se utiliza para modificar el comportamiento de Oracle a la hora de insertar y modificar filas dentro de un bloque de datos o data block, se asigna a la hora de crear la tabla o índice, y también se puede modificar después alterando la tabla o índice.

Indica el porcentaje mínimo que se debe dejar libre para modificaciones de los datos de las filas que ya existen dentro del bloque.

  • Valor por defecto 10
  • El valor es entre 0 y 99
  • En cualquier otro caso PCTFREE = 100*upd/(upd + ins)
  • Ejemplo: A una tabla le asignamos PCTFREE de 20, querrá decir que  se pueden insertar filas hasta que quede libre en dicho bloque solamente el 20%. Desde ese momento todas las filas nuevas que se creen se crearán en otros bloques. Ese 20% se utilizará para las modificaciones de las filas que ya están en el bloque.

PCTUSED. El concepto está ligado a PCTFREE. Imaginemos que se crea un segmento (tabla o índice) y se le asigna PCTFREE 20

¿Qué hacemos para aumentar el espacio libre de un bloque? O borramos filas o modificamos campos de las mismas disminuyendo el tamaño de los valores que están guardadas en ellas

¿Cuánto espacio libre tiene que haber para poder volver a insertar nuevas filas? Ese valor es el que nos da PCTUSED

Entonces, si a un bloque le hemos asignado un PCTUSED de 40 conseguimos que no se puedan insertar nuevos registros después de haberse llenado hasta dejar solamente el PCTINCREASE de espacio libre hasta que el espacio ocupado por las filas en dicho bloque no baje por debajo de 40. O sea, que el PCTUSED nos indica el límite mínimo por debajo del cual debe bajar el espacio ocupado dentro del bloque antes de volver a estar disponible para aceptar nuevas filas, nuevas inserciones.

Para consultar el valor tanto de pctfree como de pctused de cada segmento de tipo tabla o de tipo índice, podemos leer las vistas dba_tables y dba_indexes del usuario SYS.

Select owner, table_name, pct_free, pct_used from dba_tables;
Select owner, index_name, pct_free from dba_indexes;

Para modificar el valor de los parámetros de una tabla o de un índice se pueden utilizar las siguientes sentencias:

Alter table nombre_de_tabla  pctfree nuevo_pct_free;
Alter table nombre_de_tabla pctused nuevo_pct_used;
Alter index nombre_de_indice pctfree nuevo_pct_free;
  • Valor por defecto 40
  • El valor es entre 1 y 99
  • PCTUSED = 100 – (PCTFREE + 100*upd/blocksize) + 100 ins/blocksize

PCTUSED + PCTFREE < 100 (deben ser menor de 100)
upd: cantidad promedio en bytes, añadido en una actualización.
ins: tamaño promedio de una fila al insertarse.

Después que un bloque se llena hasta el límite permitido por PCTFREE, Oracle considera que el bloque no está disponible para la inserción de nuevas filas hasta que el porcentaje del bloque no cae por debajo del parámetro PCTUSED.

Continuará

Leave a Reply