Tablespaces en Oracle
Tipos de Tablespaces
- Temporales
- Permenetes
- Deshacer
Sintaxis:
CREATE [UNDO] TABLESPACE tablespace_name
DATAFILE Datafile_Options Storage_Options ;
Datafile_Options:
‘filespec’ [AUTOEXTEND OFF]
‘filespec’ [AUTOEXTEND ON [NEXT int K | M] [MAXSIZE int K | M]]
La opción Autoextend Maxsize es por defecto UNLIMITED si no se especifica valor.
Storage_Options:
DEFAULT [COMPRESS|NOCOMPRESS] STORAGE storage_clause
MINIMUM EXTENT int {K|M}
BLOCKSIZE int K
LOGGING | NOLOGGING
FORCE LOGGING
ONLINE | OFFLINE
PERMANENT | TEMPORARY
EXTENT MANAGEMENT {DICTIONARY |
LOCAL {AUTOALLOCATE | UNIFORM [SIZE int K | M]} }
SEGMENT SPACE MANAGEMENT {MANUAL | AUTO}
Permanent tablespace
create tablespace ts_something
logging
datafile ‘/dbf1/ts_sth.dbf’
size 32m
autoextend on
next 32m maxsize 2048m
extent management local;
create tablespace data datafile ‘/home/oracle/databases/ora10/data.dbf’
size 10M
autoextend on maxsize 200M
extent management local uniform size 64K;
Temporary tablespace
create temporary tablespace temp_mtr
tempfile ‘/dbf1/mtr_temp01.dbf’
size 32m
autoextend on
next 32m maxsize 2048m
extent management local;
Note, a temporary tablespace has tempfiles, not datafiles.
Undo tablespace
create undo tablespace ts_undo
datafile ‘/dbf/undo.dbf’
size 100M;
Dictionary Manager: Esta era la forma antigua de controlar los extends, la base de datos registraba dentro del diccionario los extends libres y ocupados. Cada vez que se producía un movimiento en los extens se tenían que actualizar las tablas correspondientes. Consultaba constantemente las tablas FET$ y UET$ (la primera guarda los segmentos libres y la segunda los usados) localizadas en el diccionario. Esto provocaba contención en el tablespace de system.
Ejemplo de la creación de tablespace dictionary manager:
CREATE TABLESPACE users
DATAFILE ‘/u10/app/oradata/TESTDB/user01.dbf’ SIZE 50M
EXTENT MANAGEMENT DICTIONARY
DEFAULT STORAGE (
INITIAL 64K
NEXT 64K
MINEXTENTS 2
MAXEXTENTS 121
PCTINCREASE 0);
Locally manager : Con este nuevo sistema que aparece a partir de Oracle 9, el registro de extends se hace a través de bitmaps. Cada bit dentro del bitmap corresponde a un bloque o grupo de bloques, cuando a un extends se le asigna espacio el servidor de oracle cambia los valores del bitmap para mostrar el nuevo status de los bloques. En oracle 9 si el parámetro COMPATIBLE =9.0.0 será la opción por defecto, si es inferior se creara como dictionary. A partir de Oracle 10 es la opción por defecto. Oracle recomienda la utilización de esta opción.
Con locally manager tablespaces existen dos opciones para asignar el espacio de los extends: UNIFORM o AUTOLLOCATE:
La opción uniform asigna y desasigna el espacio en los extens de un tamaño uniforme. Este es el valor por defecto en los tablespaces temporales y no se puede especificar en los tablespaces de undo.
Ejemplo de la creación de un tablespace locally uniform:
CREATE TABLESPACE users
DATAFILE ‘/u10/app/oradata/TESTDB/user01.dbf’ SIZE 50M
EXTENT MANAGEMENT LOCAL UNIFORM SIZE 512K;
El autoallocate (or automatic) sin embargo le dice a la base de datos que varíe el tamaño de los extends para cada segmento. Por ejemplo, en Windows y en Linux con bloques de datos de 8KB, los primero 16 extends de un segmento serán de 64 KB. Los siguientes 63 extends serán de 1MB, de 8MB los siguientes 64 extend, y así progresivamente. Este algoritmo permite que los segmentos pequeños sean pequeños, mientras los grandes irán creciendo si afectar a los demás segmentos.
Ejemplo de la creación de un tablespace localy autoallocate:
CREATE TABLESPACE users
DATAFILE ‘/u10/app/oradata/TESTDB/user01.dbf’ SIZE 50M
EXTENT MANAGEMENT LOCAL AUTOALLOCATE;
Ventajas de la utilización de locally manager:
- Como no guarda la información sobre el espacio sobre en el diccionario, reduce la contención sobre estas tablas.
- Automáticamente rastrea el espacio adyacente libre, eliminando la necesidad de unirlo.
- Evita operaciones recurrentes sobre las tablas del diccionario.
- El tamaño de los extens puede ser determinado automáticamente por system,
- Los cambios en los bitmaps no generan información de rollback, porque no actualizan las tablas en el diccionario. (excepto casos especiales como información de cuota del tablespace).
-
Reduce la fragmentación
Storage clause
Configuración del almacenamiento de tablas (CREATE TABLE), indices (CREATE INDEX), etc… en oracle.
STORAGE opciones
opciones:
INITIAL int K | M
NEXT int K | M
MINEXTENTS int
MAXEXTENTS int
MAXEXTENTS UNLIMITED
PCTINCREASE int
FREELISTS int
FREELIST GROUPS int
OPTIMAL
OPTIMAL int K | M
OPTIMAL NULL
BUFFER POOL {KEEP|RECYCLE|DEFAULT}
storage (
initial 65536
next 1048576
minextents 1
maxextents 2147483645
pctincrease 0
freelists 1
freelist groups 1
optimal 7k
buffer_pool default
)
Esta clausula aparece al final de la definición de los objetos de almacenamiento de la base de datos (tablas, indices, etc…).
Cuando creamos un tablespace (CREATE TABLESPACE) podemos definir un storage por defecto para los objetos que se creen dentro de el.
However, a default storage clause can not be specified for locally managed tablespaces. Dictionary managed tablespaces allow to have a storage clause, but without freelists, freelist groups and buffer_pool.
initial
Especifica el tamaño (en bytes) de la primera extensión.
next
Especifica el tamaño (en bytes) de la segunda extensión.
pctincrease
Especifica el % de incremento en el tamaño de las siguientes extensiones.
Especifica el incremento en el tamaño de las siguientes extensiones. El tamaño de una nueva extension es el tamaño de la anterior multiplico por pctincrease. Debe ser 0 para reducir la fragmentación en los tablespaces.
minextents
Especifica el numero inicial de extensiones cuando se crea el objeto.
maxextents
Especifica el numero máximo de extensiones que el objeto puede tener.
freelists
Especifica el numero de freelists. Este parámetro solo se puede usar con CREATE TABLE or CREATE INDEX.
freelist groups
Especifica el numero de freelist groups. Este parámetro solo se puede usar con CREATE TABLE or CREATE INDEX.
buffer_pool
El valor de buffer_pool debe ser uno de: keep, recycle, default. Este parámetro solo se puede usar con CREATE TABLE, CREATE INDEX, CREATE CLUSTER, ALTER TABLE, ALTER INDEX Y ALTER CLUSTER.
optimal
Solo se puede especificar para los rollback segments.