Está en la página 1de 55

Administración de los

objetos de almacenamiento
de datos

Ing. Alberto Galloso Gentille


Estructuras lógicas y físicas de la Base de
Datos
Estructuras lógicas y físicas de la Base de
Datos

Bloque de Datos Oracle: Es el nivel lógico más fino de granularidad, donde se


almacenan los datos de la BD. Un bloque de datos se corresponde con un
número concreto de bytes de la BD en disco (i.e, un número de bloques del
SO).
Extensiones: Número específico de bloques de datos contiguos (obtenidos a la
vez en una única asignación) que se utilizan para almacenar un tipo concreto
de información.

Segmentos: Conjunto de extensiones asignadas a una estructura lógica (tabla,


índice) concreta. La BD Oracle realiza la gestión dinámica del espacio de la
BD. Cuando las extensiones de un segmento están ocupadas, se añaden
extensiones adicionales. Dado que las extensiones se asignan cuando son
necesarias, las extensiones de un segmento no son necesariamente contiguas
en el disco.
Estructuras lógicas y físicas de la Base de
Datos
Esquemas: Colección de objetos que son propiedad de un usuario de la BD.
Los objetos del esquema son estructuras lógicas como tablas, vistas,
secuencias, procedimientos almacenados, sinónimos o índices. En general, los
objetos de los esquemas incluyen todo lo que la aplicación crea en una BD.

Tablespace: Se compone de uno o más archivos de datos (estructuras físicas


que se ajustan al S.O. en el que se está ejecutando Oracle). Los datos de una
BD se almacenan en conjunto en los archivos de datos que constituyen cada
tablespace de la base de datos. Por ejemplo, la base de datos Oracle más
simple tendría un tablespace y un archivo de datos. Otra base de datos puede
tener tres tablespaces, de modo que uno está compuesto por dos archivos de
datos y los otros por tres.

Base de datos: Consta de una o más unidades lógicas de almacenamiento


denominadas tablespaces, que en conjunto almacenan todos los datos de la
BD.
Segmentos, Extensiones y Bloques

• Los segmentos existen en un Tablespace.


• Los segmentos están formados por un conjunto de extensiones.
• Las extensiones son un conjunto de bloques de datos.
• Los bloques de datos están asignados a bloques del S.O.
Segmentos, Extensiones y Bloques

• Los objetos de la BD se almacenan como segmentos en tablespaces. Cada


segmento contiene una o más extensiones. Una extensión es un conjunto de
bloques de datos contiguos dentro de un fichero de datos. Los bloques de
datos son la unidad de I/O más pequeña en la BD.

• Cada segmento tiene un bloque cabecera que describe las características


del segmento y sirve como directorio de las extensiones asociadas y, por
tanto, del espacio ocupado por el segmento.

• El número de bloques por extensión, y el número mínimo y máximo de


extensiones son parametrizables por objeto, de modo que puede variar de
una tabla a otra y de un índice a otro. Generalmente, los bloques de una
misma extensión están contiguos en el disco. Por el contrario, dos
extensiones de una misma tabla no estarán contiguas necesariamente.
Segmentos, Extensiones y Bloques

• Cuando la BD necesita un conjunto de bloques de datos realiza la petición


al S.O, siendo este el encargado de localizarlo en el dispositivo físico de
almacenamiento. De este modo, no es necesario conocer las direcciones
físicas de los datos de la BD. Además, esto permite que los ficheros de datos
puedan estar segmentados o duplicados en varios discos.

• El tamaño del bloque de datos puede establecerse en el momento de la


creación de la BD. El tamaño por defecto de 8KB es adecuado para la
mayoría de la BD. Sin embargo, si la BD soporta una aplicación de data
warehouse, con grandes tablas e índices, puede resultar beneficioso
trabajar con un tamaño de bloque mayor. Por otro lado, si la BD soporta una
aplicación transaccional donde las lecturas y escrituras son aleatorias,
entonces puede ser más eficiente utilizar un bloque más pequeño. El
tamaño máximo de bloque depende del S.O, mientras que el tamaño
mínimo es de 2 KB. Es posible tener tablespaces con diferentes tamaños de
bloque.
Como se almacena una tabla
Como se almacena una tabla

• Cuando se crea un nuevo objeto (tabla, índice, etc.), se crea un segmento


para almacenar sus datos. Para ello, Oracle reserva para este objeto al
menos una extensión, vacía de partida. En el futuro, y a medida que se
crean las ocurrencias de este objeto, Oracle utiliza progresivamente los
bloques de la extensión. Cuando todos los bloques de una extensión están
utilizados y se tiene necesidad de espacio, Oracle busca bloques libres en
las extensiones ya asignadas a ese objeto. Si no los encuentra, asigna al
objeto una nueva extensión.

• Cuando un segmento necesita una extensión adicional se busca en el


espacio libre del tablespace asociado (i.e., de sus archivos de datos), se
asigna el primer espacio contiguo de bloques del tamaño requerido, y se
actualiza el bloque cabecera. Una vez que el segmento de datos ha
adquirido una extensión la mantiene hasta que dicho segmento se elimina o
se trunca (truncate).
Como se almacena una tabla
• Las tuplas de las tablas pueden almacenarse enteramente o a trozos. Esto
ocurre cuando las filas son demasiado grandes para ajustarse a un bloque
Oracle o cuando se actualiza una fila existente haciéndola aumentar de
tamaño de una forma considerable.

• Una extensión asignada a un objeto deja de pertenecerle cuando se borra


el objeto (drop). Es decir, si se borran tuplas únicamente (delete), entonces
los bloques libres siguen perteneciendo al objeto, no a los otros objetos del
tablespace, y por lo tanto no tiene ningún efecto sobre la cantidad de
espacio asignado a esa tabla. En caso de tratarse de un segmento de
índices, este sí se puede eliminar indirectamente al eliminar las tablas de
datos a los que indexan.

• Aunque el límite teórico de extensiones en un segmento es prácticamente


ilimitado, la mayor parte de las operaciones de mantenimiento funcionan
mejor si se limitan las extensiones por objeto a un número inferior a 4000.
Contenido de un bloque de datos
Contenido de un bloque de datos

Los bloques de datos Oracle se componen de las siguientes partes:


• Cabecera de bloque: Contiene información relativa al bloque:
 Dirección del bloque, fecha de creación, tipo (datos / índices / cluster
(agrupación de tablas))
 Un slot de 23 bytes por cada una de las transacciones concurrentes que
utilizan las tuplas almacenadas en el bloque. Su función es almacenar
las modificaciones.
 Directorio de tablas en cluster: Existe únicamente para los bloques de las
tablas en cluster. Contiene el número de tablas en cluster y el valor de la
clave del cluster.
 Directorio de líneas: Contiene, para cada línea del bloque, su dirección
en el bloque. La cabecera crece hacia abajo desde el principio del
bloque.
Contenido de un bloque de datos

• Líneas de datos: Es el lugar donde se ubican las tuplas de datos. Este espacio
crece hacia arriba desde el final del bloque.

• Espacio libre: Se encuentra en el medio del bloque. Permite que la


cabecera y las líneas crezcan cuando se precise. Las líneas ocupan este
espacio cuando se insertan nuevas filas o se actualiza el contenido de sus
columnas aumentando su tamaño. La cabecera crece en caso de que
aumente el directorio de líneas (al incorporarse una nueva tupla) o existan
más transacciones concurrentes que las inicialmente previstas. Inicialmente,
el espacio libre es contiguo. Sin embargo, los borrados y actualizaciones
pueden fragmentarlo. Es posible desfragmentarlo.
Segmentos
Segmentos

Existen diferentes tipos de segmentos:


• Segmentos de datos: Propio de cada tabla. En caso de tratarse de una
tabla particionada, cada partición tiene un segmento de datos. Cada
cluster (agrupación de tablas) tiene un segmento de datos. Los datos de
cada tabla en el cluster se almacenan en el segmento de datos del cluster.

• Segmentos de índices: Cada índice tiene un segmento de índices que


almacena sus datos. Si el índice está particionado, cada partición tiene un
segmento de índice.

• Segmentos de trabajo: Ocupan una parte de los bloques de los archivos de


datos. Esta parte es utilizada por Oracle para sus propias necesidades.
Pueden ser de 4 tipos:
Segmentos de Trabajo
Segmentos de Trabajo
1. Segmentos de Rollback: Almacenan la imagen anterior (inicial) de los
bloques de datos o índices que se están modificando. Un elemento de un
segmento de Rollback es el conjunto de bloques con la imagen anterior de
las tuplas que son modificadas por una transacción concreta.

Todos los bloques de datos e índices en curso de modificación son


copiados con sus valores iniciales en un segmento de Rollback. Como
veremos posteriormente, la copia se hace inicialmente en memoria (en el
buffer de Rollback) y, únicamente en caso de un checkpoint, se llevan los
datos al Archivo de Datos (al segmento de Rollback). Si la transacción
finaliza normalmente, estos bloques no son utilizados. Por el contrario, si la
transacción es anulada o termina anormalmente, estos bloques serán
utilizados para restituir el estado de la BD al momento anterior al inicio de la
transacción, llevándolos a memoria de nuevo.
Segmentos de Trabajo
Toda BD contiene el segmento de ROLLBACK SYSTEM y, por defecto, se crea un
segmento de Rollback por cada nuevo usuario. En el caso de existir varios segmentos
de Rollback, es Oracle quien decide la distribución de los bloques imagen anterior
sobre estos segmentos, y quien “dirige” las transacciones hacia los segmentos de
Rollback. El número de segmentos de Rollback puede influir sobre el rendimiento de la
BD.

Los segmentos de Rollback se gestionan con extensiones igual que los segmentos de
datos. En este caso, hay dos extensiones iniciales y, eventualmente, otras extensiones
en función de las necesidades.

El mecanismo de asignación de extensiones en los segmentos de rollback es el


siguiente: los bloques correspondientes a varias transacciones pueden estar en una
misma extensión. Cuando ésta se llena y una transacción tiene necesidad de más
espacio, Oracle busca si existe una extensión ya asignada pero limpia (conteniendo
bloques de transacciones no activas). Si no la encuentra, asigna una nueva extensión.
Cada extensión debería ser lo suficientemente grande como para gestionar los datos
de, al menos, una transacción.
Segmentos de Trabajo
Segmentos de Trabajo
Comandos SQL asociados a los segmentos de Rollback:

Para la creación de los segmentos de Rollback se utiliza el comando CREATE


ROLLBACK SEGMENT, donde:
• PUBLIC indica si puede ser utilizado para todas las instancias de la BD (en otro caso
solo podrá ser utilizado por las instancias especificadas en el archivo de parámetros
INIT.ORA)
• TABLESPACE indica el tablespace donde será creado (por defecto en el tablespace
SYSTEM)

Para modificar los parámetros de almacenamiento de un segmento de Rollback ya


existente, o desactivarlo, se emplea ALTER ROLLBACK SEGMENT.

DROP ROLLBACK SEGMENT borra el segmento de Rollback. Para ello, el segmento no


puede estar en uso. Para saberlo es posible consultar el atributo STATUS de la tabla del
catálogo DBA_ROLLBACK_SEGS.
Segmentos de Trabajo
Segmentos de Trabajo
2. Segmentos Temporales: Son creados por Oracle para las sentencias SQL que precisan un área
de trabajo temporal para completar su ejecución: la creación de índices, la ordenación y el
join sin índices sobre tablas grandes (CREATE INDEX, ORDER BY, DISTINCT, GROUP BY, UNION,
INTERSECT, ...). Cada usuario tiene asignado un espacio de tablas temporal, que se especifica
al crear la cuenta.

Se puede crear un tablespace temporal predeterminado para todos los usuarios (CREATE
TEMPORARY TABLESPACE). En caso contrario, estos segmentos se almacenan en el
tablespace SYSTEM o en los tablespaces de usuario.

La asignación de extensiones se hace de la misma forma que para los segmentos de datos.
Los parámetros de asignación son los del tablespace donde se encuentre el segmento
temporal. El segmento se amplía por sí mismo cuando es preciso, y se elimina cuando la
operación concluye o encuentra un error. Las diferentes extensiones que ha utilizado una
operación son suprimidas y, por tanto, devueltas a la BD.

Se deben mantener los objetos temporales en su propio tablespace. Haciéndolo así se


eliminan los problemas de rendimiento asociados a la mezcla de segmentos temporales con
otros objetos de la BD
Segmentos de Trabajo

3. Segmentos Rollback Diferidos: Los segmentos


diferidos son utilizados por Oracle para colocar los
bloques imagen anterior de un tablespace
cuando éste está offline. Estos bloques serán
recuperados cuando el tablespace sea puesto
de nuevo en servicio (online) y, por la misma
razón, el espacio que ellos ocupaban será
liberado.

4. Segmento de Arranque (BOOTSTRAP): El segmento


de arranque es un segmento de al menos 50
bloques, creado por Oracle para sus propias
necesidades durante la creación de la BD. Este
segmento no crece durante toda la vida de la
BD.
Tablespaces y archivos de datos

Oracle almacena los datos lógicamente en tablespaces y físicamente en archivo de


datos (data file)

 Los tablespaces
 Pertenecen a una base de datos
 Estan formados por uno o mas archivos de datos

 Los archivos de datos


 Pertenecen a un tablespace
Tablespaces y archivos de datos
• Un tablespace es una unidad lógica de almacenamiento que se puede utilizar para
agrupar estructuras lógicas relacionadas (tablas, índices, etc.). Es la unidad más pequeña
para operaciones de mantenimiento (supresión, puesta en activo (online/offline), copias de
seguridad y restauración, entre otros). Cada base de datos está dividida lógicamente en
uno o más tablespaces.

• Un tablespace tiene un nombre y consiste en uno o varios archivos de datos que


almacenan físicamente los datos de todas sus estructuras lógicas. Cada archivo de datos
puede contener una parte de una tabla o de un índice, una o varias tablas, uno o varios
índices, etc.

• Una tabla o un índice se encuentra en un, y sólo en un, tablespace. En el momento de su


creación es cuando el usuario decide en qué tablespace será depositado. El usuario no
puede elegir el archivo físico donde se almacenará el objeto.

• El DBA puede imponer un tablespace particular para los objetos de un usuario.

• El DBA no puede suprimir un archivo de un tablespace si no ha suprimido antes el propio


tablespace. Por el contrario, este puede siempre “aumentar” un tablespace añadiendo en
él un archivo físico.
Tablespaces y archivos de datos
Oracle Managed Files (OMF)

Las operaciones se especifican en términos de objetos de BD y no de nombres de


ficheros
Oracle Managed Files (OMF)
Gestión de Espacio en Tablespaces

Los tablespaces asignan espacio en extensiones. Los tablespaces se pueden crear para
utilizar uno de los dos siguientes métodos de realización de seguimiento de espacio libre
o usado:

• Tablespaces gestionados localmente: Las extensiones se gestionan en el tablespace


a través de bitmaps. Cada bit del bitmap corresponde a un bloque o grupo de
bloques. Cuando una extensión se asigna o se libera para volver a utilizarla, el
servidor de Oracle cambia los valores del bitmap para mostrar el nuevo estado de los
bloques.

• Tablespaces gestionados por diccionario: El diccionario de datos gestiona las


extensiones libres. Siempre que se asigna o se anula la asignación de una extensión el
servidor de Oracle actualiza las tablas correspondientes del diccionario de datos.
Este tipo de tablespaces se soportan únicamente por compatibilidad con versiones
anteriores; se recomienda utilizar la gestión local para todos los tablespaces.
Consultar los tablespaces que componen la BD
Comprobar los ficheros
select rpad(a.tablespace_name,10) tablespace, rpad(a.file_name,40) fichero,
to_char(a.bytes/1024/2014,'999.999')MB, to_char(a.increment_by *
b.value/1024/1024,'999.999')nextmb,
to_char(a.maxbytes/1024/1024,'99999.999') maxmb
from dba_data_files a, v$parameter b where b.name='db_block_size';
Creación de un Nuevo Tablespace
Creación de un Nuevo Tablespace
Aspectos a tener en cuenta a la hora de crear un tablespace:

• Para crear un tablespace igual a otro existente, seleccionar el tablespace existente y


elegir Create Like en el menú Actions

• Los tablespaces permanentes (Type = Permanent) almacenan objetos de base de


datos permanentes creados por el sistema o por usuarios.

• Seleccionando Status=Read Write los usuarios podrán leer y escribir en el tablespace


una vez creado. Es el valor por defecto. Para deshabilitar el acceso al tablespace debe
elegirse la opción Status=OFFLINE. Nota: Para conocer el estado de los tablespaces
puede consultarse el atributo STATUS de la vista del catálogo DBA_TABLESPACES.

• Los tablespaces deben tener al menos un archivo de datos. Se añaden en Datafiles. Los
tablespaces de archivo grande se utilizan con BDs muy grandes en las que la Gestión
Automática de Almacenamiento (ASM) de Oracle u otros gestores de volúmenes
lógicos soportan la segmentación o RAID, además de volúmenes lógicos extensibles
dinámicamente.
Creación de un Nuevo Tablespace
Comprobar ubicación de los datafile
Comprobar tamaño creado y libre de los
tablespace - FIJA
select b.tablespace_name, tbs_size SizeMb, a.free_space FreeMb from (select
tablespace_name, round(sum(bytes)/1024/1024 ,2) as free_space
from dba_free_space group by tablespace_name) a, (select tablespace_name,
sum(bytes)/1024/1024 as tbs_size from dba_data_files group by tablespace_name
UNION
select tablespace_name, sum(bytes)/1024/1024 tbs_size from dba_temp_files group by
tablespace_name ) b where a.tablespace_name(+)=b.tablespace_name;
Administración de datos-FIJA

 1 Tablespace = 1 a muchos datafiles


 Como user ORACLE crear el directorio :
 mkdir -p /u02/data
 sqlplus / as sysdba.
 create tablespace sisalmacen_tab datafile
‘/u02/data/sisalmacen_tab01.dbf’ size 100M;
 Modificar tamaño de datafile:
 alter database datafile ‘/u02/data/sisalmacen_tab01.dbf’ resize 50M;
Creat Tbs y valida tamaño-FIJA
Modifica Tbs y valida tamaño
(reducción)-FIJA
Administración de datos

 Eliminar el tablespace.
 Elimina el tablespace sin datafile ni constraints.
 DROP TABLESPACE sisalmacen_tab;
 Elimina el tablespace con contraints y datafiles.
 DROP TABLESPACE sisalmacen_tab INCLUDING CONTENTS AND DATAFILES;
sqlplus

root

Para eliminar el archivo aplicar:


sqlplus

root
Administración de datos

 Creamos de nuevo el tablespace


 create tablespace sisalmacen_tab datafile ‘/u02/data/sisalmacen_tab01.dbf’ size 100M;
 Dar de baja temporalmente el tablespace :
 SQL> ALTER TABLESPACE sisalmacen_tab OFFLINE;
 Dar de alta :
 SQL> ALTER TABLESPACE sisalmacen_tab ONLINE;
 Tablespace sea de lectura :
 SQL> ALTER TABLESPACE sisalmacen_tab READ ONLY;

 Tablespace de lectura/escritura:
 SQL> ALTER TABLESPACE sisalmacen_tab READ WRITE;
Crear Tbs y valida estatus
Tablespace OFFLINE
Tablespace ONLINE
Tablespace READ ONLY
Tablespace READ WRITE
Tablespaces gestionados por el
diccionario
Tablespaces gestionados por el
diccionario
PARAMETROS DE ALMACENAJE DESCRIPCION
INITIAL Define el tamaño (en k o M)de la primera extensión en el
segmento.
NEXT Define el tamaño (en K o M) de la siguiente extensión.

PCTINCREASE Define el tanto por ciento en que crecerá cada


extensión a partir de la segunda.
MINEXTENTS Especifica el numero de extensiones que se tomara en
la creación de un segmento cuando sea creado en el
tablespace
MAXEXTENTS Define el numero máximo de extensiones que puede
tomar un segmento.
Ejercicios

 I) Crear tabla en tablespace


 sql>create user usmpalm identified by usmpalm default tablespace
sisalmacen_tab;
 sql>create table usmpalm.tbl_producto (cod_producto varchar2(5),
des_producto varchar2(30))
tablespace sisalmacen_tab;
oracle>mkdir -p /u02/bk/data
sql>create tablespace sisalmbk_tab datafile ‘/u02/bk/data/sisalmbk_tab01.dbf’
size 100M;
sql>select owner,table_name,tablespace_name from dba_tables where
table_name=‘TBL_PRODUCTO’;
sql>alter table usmpalm.tbl_producto move tablespace sisalmbk_tab;
Creando usuario y tabla en sqlplus

Creando directorio en linux


Creando tablespace
Modificando ubicación del archivo
de datos del tablespace
Crear tabla con un tamaño especifico

También podría gustarte