Estructuras de Almacenamiento

Anuncio
Instituto Profesional DuocUC
Escuela de Ingeniería
Estructuras de Almacenamiento
Jaime Amigo P. © 2006, Santiago - Chile
Instituto Profesional DuocUC
Escuela de Ingeniería
Objetivos
Después de completar esta lección, usted deberá:
• Definir el propósito de los Tablespaces y Datafiles
• Crear Tablespaces
• Administrar Tablespaces
• Obtener Información de Tablespaces
2
Instituto Profesional DuocUC
Escuela de Ingeniería
Segmentos, Extents y Data Blocks
•
•
•
•
Los Segments existen dentro de un tablespace
Los Segments estan hechos de una colección de
extents
Los Extents son una colección de data blocks
Los Data blocks estan mapeados a Bloques del
Sistema Operativo.
Segment
Extents
Data
blocks
OS blocks
Segmentos, Extents y Data Block
El más alto nivel de almacenamiento en disco son los tablespaces. Estos estan compuestos
por segmentos, que solo residen en un tablespace. Cada segmento esta construido de uno o
más extents. Cada uno de esos extents puede residir en un solo datafile. Un extents esta
compuesto de un conjunto de bloques contiguos los cuales son el más bajo nivel de
admnistración de espacio de almacenamiento. Un bloque (data block) es un número fijo de
bytes de espacio en disco.
La figura, muestra la relación entre segmentos, extents y data blocks.
Un data block size es un atributo de un tablespace. El tablespace SYSTEM y SYSAUX
tienen tamaño de data block estándar, definido al momento de la creación de la base de
datos por el parámetro db_block_size. Otros tablespaces pueden tener tamaño de bloques
diferentes, definidos al momento de la creación. Una base de datos podría tener diferentes
tamaños de bloques. Una base de datos Oracle siempre asigna y usa espacio en disco en
unidades de block de datos (data block). El tamaño del data block es generalmente 8KB
hasta 32KB y debe ser múltiplo del tamaño del bloque físico del dispositivo de
almacenamiento. Tamaños grandes de data block son comunes en ambientes de
warehousing.
3
Instituto Profesional DuocUC
Escuela de Ingeniería
Estructuras de Datos manejadas por Oracle
Introducción Tablespaces
Los tablespace son utilizados para almacenar lógicamente los datos. Se puede tener un tablespace para
almacenar información de contabilidad y otro para almacenar las ventas de una compañia. Al segmentar
grupos de datos relacionados en tablespaces diferentes, se simplifican las tareas de administración de
dichos grupos.
Los tablespace pueden estar constituidos de varios datafiles. Al utilizar mas de un datafile por
tablespace, pueden distribuirse los datos en más de un disco físico y balancear la carga de Input/Output,
mejorando así el rendimiento del sistema general.
Como parte del proceso de crear una base de datos, Oracle crea un tablespace llamado SYSTEM.
Oracle recomienda no almacenar información en dicho tablespace y crear las estructuras que sean
necesarias de tablespaces para almacenar los datos de las aplicaciones corporativas que almacenara. El
tablespace SYSTEM, almacena el diccionario de datos de una base de datos Oracle.
4
Instituto Profesional DuocUC
Escuela de Ingeniería
Segmentos en Oracle
Un segmento almacena la información de una estructura lógica de
Oracle dentro de un Tablespace. Está formado por una o más
extensiones y, a medida que va creciendo el segmento se van
asignando nuevas extensiones al mismo. Existen diferentes tipos de
segmentos:
•
•
•
•
Segmentos de datos
– Almacena los datos correspondientes a una tabla
Segmentos de índices
– Mantiene los datos para un índice definido dentro de la base de datos
Segmentos de rollback
– Permite almacenar las acciones de una transacción que debe ser
deshecha bajo ciertas circunstancias
Segmentos temporales
– Se crean cuando se requiere de un espacio temporal para procesar
una instrucción de SQL y son destruidos una vez que haya culminado
Segmentos
Un segmento es un conjunto de extents que han sido asignados para un tipo de almacenamiento
específico y todos ellos se encuentran ubicados en el mismo tablespace. Existen diferentes tipos de
segmentos:
•Segmentos de datos
Cada segmento de datos almacena los datos correspondientes a una tabla
•Segmentos de índices
Cada segmento de índice mantiene los datos para un índice definido dentro de la base de datos
•Segmentos de rollback
Un segmento de rollback permite almacenar las acciones de una transacción que debe ser deshecha bajo ciertas
circunstancias
•Segmentos temporales
Los segmentos temporales se crean cuando se requiere de un espacio temporal para procesar una instrucción de
SQL y son destruidos una vez que haya culminado el procesamiento de la instrucción.
5
Instituto Profesional DuocUC
Escuela de Ingeniería
Extents / Extensiones
•
•
•
•
•
Los extents son las piezas utilizadas para construir
segmentos
Cada extent se compone de una serie de bloques de datos
La razón principal de esta estructura es la de minimizar el
espacio desperdiciado (vacío) de un tablespace
A medida que se insertar o eliminan filas de una tabla, los
extents del tablespace asociado a la tabla pueden aumentar
o disminuir de tamaño
De esta forma el espacio para el almacenamiento de los
datos, puede ser administrado dependiendo de como la tabla
va sufriendo modificaciones en el número de filas
Extents
Los extents son las piezas utilizadas para construir segmentos. Cada extent se compone de una serie de
bloques de datos. La razón principal de esta estructura es la de minimizar el espacio desperdiciado
(vacío) de un tablespace. A medida que se insertar o eliminan filas de una tabla, los extents del
tablespace asociado a la tabla pueden aumentar o disminuir de tamaño. De esta forma el espacio para el
almacenamiento de los datos, puede ser administrado dependiendo de como la tabla va sufriendo
modificaciones en el número de filas.
Cuando se crea un tablespace, se puede especificar el número minimo de extents a ser asignados, asi
como el número de extents a ser agregados cada vez que se agote el espacio disponible para almacenar
datos.
Bloques de Datos
Una base de datos se encuentra almacenada en bloques de datos que es el nivel mas pequeño de
unidades de almacenamiento. El tamaño de un bloque de datos, siempre corresponde a un múltiplo del
tamaño de bloque manejado por el sistema operativo. El tamaño del bloque de datos es un valor
configurable en Oracle.
6
Instituto Profesional DuocUC
Escuela de Ingeniería
Segmentos de Datos y Temporales
•
•
•
•
En un segmento de datos se almacenan todos los datos de una
tabla
Se crea el segmento de datos a la hora de ejecutar la sentencia
create que crea la tabla
En dicha sentencia se indican los valores de la cláusula storage y
que va a determinar la forma en que dicho segmento va a ir
asignando y desasignando las extensiones (tanto para Datos como
Indices)
Cuando Oracle procesa las consultas se puede ver en la necesidad
de utilizar espacio en disco para poder llevar a cabo algunas partes
del parsing (análisis) y de la ejecución de la misma. Solamente
utilizará este tipo de segmentos cuando no pueda realizar la
consulta íntegramente en memoria o cuando no pueda buscarse un
método alternativo para realizarla utilizando los índices, esto es
conocido como Segmento Temporal.
Tipos de Segmentos
Segmentos de datos y temporales
Introducción
Un segmento almacena la información de una estructura lógica de Oracle dentro de un Tablespace. Está
formado por una o más extensiones y, a medida que va creciendo el segmento se van asignando nuevas
extensiones al mismo. Hay cuatro tipos de segmentos: de datos, de índices, temporales y de rollback.
Segmentos de datos e índices
En un segmento de datos se almacenan todos los datos de una tabla que no esté particionada o que no
forme parte de un cluster, de una partición de una tabla particionada o, de un cluster de tablas. Se crea el
segmento de datos a la hora de ejecutar la sentencia create que crea la tabla, cluster o partición. En
dicha sentencia se indican también los valores de la cláusula storage y que va a determinar la forma en
que dicho segmento va a ir asignando y desasignando las extensiones.
En el caso de los índices, existe un segmento para cada índice no particionado o para cada partición de
un índice particionado. Al igual que con las tablas, los segmentos de índices se crean al ejecutar la
sentencia de creación de índices en la cual, también se pueden indicar valores para la cláusula storage y
así parametrizar la forma en que se le asignarán las extensiones a medida que vaya creciendo.
7
Segmentos temporales
Cuando Oracle procesa las consultas se puede ver en la necesidad de utilizar espacio en disco
para poder llevar a cabo algunas partes del parsing (análisis) y de la ejecución de la misma.
Solamente utilizará este tipo de segmentos cuando no pueda realizar la consulta íntegramente
en memoria o cuando no pueda buscarse un método alternativo para realizarla utilizando los
índices.
Hay varios tipos de sentencias en las que Oracle se ve en la obligación de utilizar los segmentos
temporales:
SELECT ... ORDER BY. CREATE INDEX. SELECT ... GROUP BY. SELECT ... UNION ...
SELECT DISTINCT ... SELECT INSERSEC ... SELECT MINUS ...
Se puede dar el caso en el que algunas consultas en las que intervengan joins en los que no
haya índices que faciliten la unión y en las que se den a la vez sentencias del tipo "group by" y
"order by" o incluso "distinct", en las que no solo se requiere de un nuevo segmento temporal
sino que pueden adquirirse dos segmentos para poder realizar dichas consultas.
Como es natural, cuantas más operaciones se hagan en memoria mejor será el rendimiento del
sistema, por lo que si en nuestra aplicación existe un número considerable de consultas de las
mencionadas anteriormente, resulta muy apropiado hacer un tunning para decidir si ampliar la
zona de memoria reservada para las ordenaciones, aumentando el valor del parámetro
SORT_AREA_SIZE.
En Oracle también existen las tablas temporales y los índices temporales para dichas tablas.
Estos objetos tambíen utilizan segmentos temporales, pero se les asigna y desasigna de forma
diferente a como se hace con las consultas, creación de índices y ordenaciones.
Asignación de segmentos temporales en consultas.
En las consultas, los segmentos temporales se van asignando según se van necesitando y, al
terminar la ejecución de la sentencia, se desasignan. Para determinar en qué tablespace se van
a crear los segmentos temporales necesarios para estas consultas, a cada usuario de la base de
datos, se le asigna un tablespace para dicha función. Esto se realiza con el siguiente comando:
Alter user nombre_de_usuario default tablespace nombre_tablespace_temporal;
Por defecto, en la creación del usuario también se le puede asignar un tablespace temporal y, si
no se le indica, el sistema le asigna por defecto siempre el tablespace SYSTEM. Es muy
importante que ningún esquema o usuario tenga como tablespace temporal el SYSTEM por
varios motivos. En primer lugar, porque SYTEM no es un tablespace temporal y por lo tanto, no
está optimizado para la gestión de los segmentos temporales, en segundo lugar, al utilizar
SYSTEM como tablespace temporal, se aumenta la fragmentación de dicho tablespace por culpa
de los segmentos temporales que se van creando y borrando en medio de segmentos de datos e
índices con lo que disminuye drásticamente el rendimiento del tablespace principal de la base de
datos, y por último, se corre el peligro de que se llene este tablespace por culpa de alguna select
mal escrita y que se descontrole aumentando desproporcinadamente el tamaño del segmento
temporal creado para ejecutarla.
8
Asignación de segmentos temporales para tablas temporales
El segmento requerido para una tabla temporal y para sus índices temporales se asigna en el
momento de producirse la primera insert en dicha tabla. Este segmento al igual que en el caso
anterior, se creará en el tablespace temporal del usuario que está creando la tabla temporal.
Para conocer el tablespace por defecto de un usuario y su tablespace temporal, podemos
consultar la vista dba_users.
Select username, default_tablespace, temporary_tablespace from dba_users;
La explicación del funcionamiento de las tablas temporales excede los objetivos de este manual
por lo que no se va a profundizar más en ellas, simplemente se indicará aquí que la eliminación
del segmento temporal que se ha creado se hará dependiendo del tipo de tabla temporal que se
ha creado. Cuando la tabla temporal es específica para una transacción, Oracle eliminará el
segmento creado al finalizar dicha transacción, y si por el contrario, la tabla es específica para la
sesión, su segmento se eliminará al terminarse esta sesión.
Segmentos de Rollback
Introducción
En cada base de datos Oracle tenemos uno o más segmentos de rollback en los que se
almacena la información que ha sido cambiada por las transacciones. Estas transacciones
pueden ser definitivas, es decir, se ha realizado ya el commit de ellas, o puede que aún no se
haya hecho dicho commit. Este tipo especial de segmento se utiliza principalmente para poder
realizar una lectura consistente de la base de datos Oracle mientras se están modificando los
datos y para poder llevar a cabo las recuperaciones de la base cuando ésta cae por algún
motivo.
La información de un segmento de rollback se almacena en las llamadas entradas de rollback.
En estas entradas se detalla en qué datafile estaba el dato que ha sido modificado, en qué
bloque dentro de dicho datafile y también el dato viejo que se ha modificado en la transacción.
Además, todas las entradas de rollback de una misma transacción están encadenadas unas con
otras para que así, si se deben deshacer los cambios llevados a cabo en esa transacción, resulta
más fácil de encontrarlos todos.
Las vistas más importantes de las que podemos extraer información sobre los segmentos de
rollback son: v$rollname, dba_rollback_segs y v$rollstat.
En una base de datos Oracle, se guardan todos cambios en los bloques modificados en una
estructura llamada "logs de rehacer" o, "redo logs". Cuando se crea una nueva entrada de
rollback en un segmento de rollback, realmente se está modificando un bloque que se encuentra
en dicho segmento de rollback con la información de dicha entrada, por lo que este cambio
también se almacena en los log de rehacer. Este doble almacenamiento de la información que se
guarda en los segmentos de rollback y en los log de rehacer es fundamental para poder realizar
un buen proceso de recuperación de la base de datos en caso de que se produzca en fallo en
ella.
9
Cuando se produce una caída de la base de datos, en el momento de la recuperación, se
recupera el estado de los segmentos de rollback tanto con las transacciones que ya se habían
terminado como con aquellas transacciones cuyo commit aún no se había realizado. El siguiente
paso que se produce es el rollback de todas aquellas transacciones que se encuentran en los
segmentos de rollback y para las cuales no se había completado el commit.
Utilización de los segmentos de rollback
Como se ha indicado anteriormente, los segmentos de rollback se utilizan para poder deshacer
los cambios de las transacciones para las que no se ha hecho un commit y para asegurar la
consistencia de lectura. Para facilitar estas tareas, Oracle guarda por cada bloque una tabla de
las transacciones que en cada momento se están ejecutando en el mismo. Además, por cada
transacción, por cada nuevo cambio que se realiza en los bloques de datos se crea una entrada
de rollback que se encadena a las anteriores entradas de rollback asignadas a esa misma
transacción de forma ordenada.
Gracias a este sistema, cada vez que se desea restaurar el estado de una transacción al realizar
el rollback de la misma, simplemente se debe detectar en qué bloque del segmento de rollback
se está almacenando los cambios producidos por dicha transacción mirando en las tablas de
transacciones de los bloques del segmento de rollback y, una vez detectado el bloque, se deben
seguir una a una las entradas de rollback de la transacción que se encuentran ordenadas y
encadenadas, para ir restaurando los valores antiguos en los bloques de datos de forma
ordenada.
De la misma manera, se utiliza para facilitar la lectura consistente ya que se detecta el valor
antiguo de los bloques navegando por la cadena de las entradas de rollback de la transacción.
¿Cómo se asignan las transacciones a los segmentos de rollback?.
Cada vez que comienza una nueva transacción, se asigna a un determinado segmento de dos
formas diferentes:
•Se asigna la transacción al siguiente segmento de rollback que se encuentre libre en ese
momento de manera automática. Solamente se asigna una transacción cuando se realiza una
instrucción de DDL o de DML que no sea una select.
•También se puede asignar una transacción a un segmento de rollback en concreto de forma
manual. De esta forma, se puede asignar a un segmento de rollback grande una transacción
que conocemos de antemano que modifica un gran volumen de datos. Una vez finalizada la
transacción, Oracle vuelve a asignar la siguiente de manera automática al primer rollback que
encuentra libre. La instrucción es la siguiente: Set transaction use rollback segment
nombre_segmento_rollback;
Cuando se finaliza una transaccion, Oracle libera la información de rollback aunque no la
destruye, esto es para soportar la lectura consistente de consultas que han comenzado antes de
que se realizara el commit. Para asegurarse que la información se encuentra en los segmentos
de rollback el mayor tiempo posible para estas consutas sin borrarla, Oracle va asignando las
extensiones a los segmentos de rollback de manera secuencial y, cuando se ha llenado el
segmento, se reutilizan las extensiones empezando nuevamente por la primera, como si fuera un
segmento circular.
Un segmento de rollback puede tener asignadas solamente un número fijo de transacciones
como máximo. Oracle se encarga de asignar las transacciones de una instancia de manera que
todos los segmentos tengan el mismo número de transacciones aproximadamente, sin tener en
cuenta el tamaño de las mismas ya que, de antemano no lo puede conocer. El número de
transacciones que puede contener cada segmento de rollback depende del tamaño del bloque.
10
Asignación de extensiones
Como hemos indicado anteriormente, un segmento de rollback debe tener al menos dos
extensiones y cada una de sus extensiones está formada por un número determinado de
bloques. A continuación vamos a explicar cómo se organizan las transacciones en los
segmentos de rollback.
En un segmento de rollback pueden estar realizándose a la vez varias transacciones. Estas
transacciones pueden estar escribiendo en distintas extensiones o incluso en la misma. Sin
embargo, en un bloque de una extensión solamente puede contener información de una
transacción, es decir, que no pueden escribir dos transacciones en el mismo bloque de la misma
extensión a la vez. Además, como hemos indicado que la escritura de transacciones es
secuencial, en cada momento una transacción escribe en una sola extensión. Cuando una
transacción se queda sin espacio para escribir en la extensión en la que estaba, puede hacer
dos cosas, bien reutilizar una extensión que ya estaba asignada al segmento o bien requerir una
nueva extensión para el segmento de rollback.
La primera transacción que necesita más espacio nuevo chequea la siguiente extensión del
segmento de rollback, y si no contiene información de transacciones activas, la adquiere. A partir
de ese momento, todas las demás transacciones que necesiten espacio utilizarán esta
extensión. Si, nuevamente se llena esta extensión y alguna transacción sigue necesitando
espacio libre, Oracle vuelve a comprobar si en la siguiente extensión que le toca ocupar,
siguiendo el orden secuencial y circular de asignación de extensiones, no se están realizando
transacciones activas (insistimos en la naturaleza circular de los segmentos de rollback que, una
vez ocupada la última extensión, vuelve a intentar ocupar la primera como si formaran todas un
anillo).
Como estamos viendo, Oracle mantiene un anillo formado por las extensiones que ha ido
adquiriendo este segmento de rollback y siempre intenta reusar una de las extensiones que lo
forman antes que adquirir una nueva del sistema. Si en algún momento Oracle necesita utilizar
una extensión y, en todas los que forman parte del anillo se están escribiendo transacciones
activas, se ve obligado a adquirir una nueva extensión del sistema y a añadirla al anillo del
segmento de rollback para seguir escribiendo. El número máximo de extensiones que pueden
formar parte de un segmento de rollback viene determinado por una parámetro definido en el
initSID.ora y que es MAXEXTENTS.
Ya hemos visto cómo se asignan extensiones a un segmento de rollback, pero ¿cómo se van
desasignando?.
Al borrar un segmento de rollback, todas las extensiones que tenía asignadas el segmento se
devuelven al tablespace y pueden ser utilizadas por el resto de objetos que pertenecen al
tablespace. Existe otra manera de devolver el espacio utilizado por un segmento sin tener que
eliminarlo. A la hora de crear un segmento de rollback se puede indicar un valor en el parámetro
OPTIMAL de la cláusula storage que representa el tamaño óptimo de dicho segmento en bytes.
Cada vez que Oracle necesista una nueva extensión para el segmento de rollback, compara el
tamaño que tiene dicho segmento con el valor del parámetro optimal y, si lo ha sobrepasado, irá
devolviendo al tablespace las extensiones más antiguas que se va encontrando en las que ya no
quedan transacciones activas ya que, son las que menor probabilidad tienen de tener datos
necesarios para mantener la consistencia de lectura.
11
Si puede, liberará tantas extensiones como para quedarse con un tamaño aproximado al
indicado en optimal pero siempre por encima.
El valor del parámetro óptimal nuca podrá ser menor que el espacio necesario para la creación
del segmento, en el que participan el parámetro initial_extent, next_extent, y min_extents
(recordemos que pct_increase no tiene sentido en los segmentos de rollback, todas las
extensiones deben ser iguales).
Para consultar los valores de estos parámetros podemos utilizar la vista
dba_rollback_segs de la siguiente forma:
Select segment_name, initial_extent, next_extent, min_extents, max_extents from
dba_rollack_segs;
Y para conocer si nuestros rollback segments tiene asignado un tamaño óptimo:
Select name, optsize from v$rollname, v$rollstat where v$rollname.usn = v$rollstat.usn
order by 1;
Estados de un segmento de rollback
Un segmento de rollback puede encontrarse en un determinado estado dependiendo de cada
momento. Los estados en los que puede encontrarse son:
•OFFLINE: No ha sido adquirido por ninguna instancia de la base de datos.
•ONLINE: Ha sido adquirido por alguna de las instancias y puede contener datos de
transacciones activas.
•NEEDS RECOVERY: Contiene datos de transacciones que no se pueden hacer rollback
porque sus datafiles están inaccesibles o corruptos.
•PARTLY AVAILABLE: Contiene información de una transacción "en duda" que son
transacciones en entornos de base de datos distribuidas de las que aún no se ha recibido
respuesta.
•INVALID: Ha sido borrado.
Esta información se puede obtener de la vista dba_rollback_segs.
12
Instituto Profesional DuocUC
Escuela de Ingeniería
Data Block - Bloques
•
•
•
•
Un bloque es la unidad mínima de
almacenamiento de información de
Oracle
Cada uno de estos bloques está
formado por un número determinado
de bloques del sistema operativo
A la hora de crear una nueva base
de datos se debe indicar cuántos
bloques de sistema operativo
formarán un bloque de datos o
bloque oracle (se recomienda
múltiplo)
Esta dado por el parámetro de
inicialización DB_BLOCK_SIZE
Data Blocks - Bloques
Introducción
Oracle almacena la información en unidades lógicas que son los segmentos, las extensiones y los
bloques. Estas tres unidades están relacionadas entre sí. Un segmento está formado por una o varias
extensiones y cada extensión está formado por varios bloques.
Un bloque es la unidad mínima de almacenamiento de información de Oracle. A los bloques también se
les conoce como "bloques de datos", "bloques lógicos" o "bloques oracle". Cada uno de estos bloques
está formado por un número determinado de bloques del sistema operativo. A la hora de crear una
nueva base de datos se debe indicar cuántos bloques de sistema operativo formarán un bloque de datos
o bloque oracle. Es muy importante decidir bien este valor de antemano ya que una vez creada la base
de datos ya no se puede modificar más que en migraciones a versiones más actuales del producto.
Un bloque de datos es la mínima unidad de Lectura / Escritura en una base de datos Oracle, es decir,
Oracle no lee y escribe en bloques del sistema operativo sino que lo hace en unidades lógicas que son
los bloques de datos y que varían de una base de datos a otra en la misma máquina ya que es un valor
que se debe indicar en la creación de cada base de datos Oracle.
Oracle recomienda que el tamaño de un bloque de datos o, data block, sea siempre un múltiplo
del bloque de datos del sistema operativo.
13
Estructura de un bloque
Los bloques de base de datos, pueden contener información de tablas, índices o segmentos de
rollback, pero no importa qué información contengan, siempre tienen la misma estructura, que es
la mostrada en la siguiente figura.
Todo bloque de datos o, data block, está dividido en una cabecera, en un directorio de tablas que
utilizan dicho bloque, en un directorio de las filas que se encuentran almacenadas en ese bloque,
de espacio aún libre y de las filas de datos de las tablas, índices o segmentos de rollback. Al
espacio ocupado por la cabecera más el directorio de tablas y más el directorio de filas se le
llama overhead ya que es un espacio del bloque que realmente no se rellena con datos sino que
está ocupado por la información que necesita Oracle para saber exactamente qué datos tiene en
dicho bloque.
Cabecera:
Contiene información general sobre el bloque como el tipo de segmento al que pertenece (índice,
tabla, rollback) o la dirección del bloque.
Directorio de Tablas:
Contiene información acerca de las tablas que tienen datos en el bloque.
Directorio de Filas:
Contiene información sobre las filas que se encuentran en cada momento en el bloque. Esta
información incluye la dirección de la fila dentro de la subzona "Datos de Filas" del bloque en la
que debe buscar Oracle los datos.
El espacio ocupado por esta subzona va aumentando a medida que se insertan nuevas filas en
el bloque, sin embargo nunca se libera el espacio. Si se borran filas de datos que estaban en el
bloque, en el directorio de filas desaparecerá la entrada que apuntaba a ellas, pero el espacio
permanecerá reservado aunque vacío. A medida que se insertan nuevas filas de datos en el
bloque, también se insertan registros en el Directorio de Filas, pero antes de aumentar el tamaño
de esta subzona para la nueva entrada, se comprueba si alguna de las entradas que hay está
vacía y en ese caso se "ocupa" y no hace falta que crezca más la subzona.
Espacio Libre:
Esta subzona está reservada para la inserción de nuevas filas en el bloque o, para la
modificación de campos que requieren más espacio que el que tenían con anterioridad. Esto
último ocurre, por ejemplo, con los campos que son de tipo varchar2. Si en un campo de una
tabla tenemos un varchar2 de 30 caracteres para almacenar el nombre del empleado, si
insertamos un registro con el nombre de 'Jesus', solo ocupa 5 bytes y si posteriormente lo
modificamos para poner 'Jesus Maria', se necesitarán 6 bytes más para almacenarlo.
Si en el bloque se están almacenando datos de segmentos de tipo tabla o índice, en la subzona
de Espacio Libre también se utiliza para llevar un registro de las transacciones que en cada
momento acceden a datos del bloque. Se necesita una entrada de transacción siempre que se
realice una insert, update, delete o select for update sobre filas del bloque. El tamaño necesario
para cada una de las entradas de transacciones depende del sistema operativo.
Datos de Filas:
En esta subzona se almacenan los datos de las tablas o de los índices del bloque. Se puede dar
el caso de que una fila no entre completa en el bloque y tenga que ocupar más de un bloque.
14
Instituto Profesional DuocUC
Escuela de Ingeniería
Estructura de un Bloque Oracle
•
•
•
•
•
Cabecera
Directorio de Tablas
Directorio de Filas
Espacio Libre
Datos de Filas
– PCTFREE
– PCTUSED
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. También se
puede modificar posteriormente el valor del pctfree alterando la tabla o el índice.
Este parámetro indica el porcentaje mínimo que se debe dejar libre para modificaciones de los
datos de las filas que ya existen dentro del bloque. Hay que tener en cuenta que el espacio de un
bloque no está compuesto solamente por los datos, sino que también hay un overhead, por lo que si
asignamos a un segmento de tipo tabla un pctfree de 20, no estamos dejando para insercciones el 80%
sino el 80% menos lo que ocupe el overhead del bloque.
El concepto de pctfree se entiende mejor con un ejemplo. Si a una tabla le asignamos un pctfree de 20,
le estamos diciendo que se pueden insertar filas en el hasta que quede libre en dicho bloque solamente
el 20 por ciento. A partir de ese instante, todas las filas nuevas que se creen se crearán en otros bloques
ya que en este ya no queda sitio para más. Entonces, ¿qué ocurre con este 20%?. Pues muy sencillo, se
utiliza para las modificaciones de las filas que ya están en el bloque. Cuando se modifica una fila y se
aumenta el contenido de un campo, por ejemplo, el campo "nombre" tenía el valor 'Jesus' y ahora pasa a
tener el valor 'Jesus Maria', Oracle echa mano del espacio libre dentro del bloque para poder realizar
esta operación.
15
Instituto Profesional DuocUC
Escuela de Ingeniería
Concepto PCTFREE
Si a una tabla le asignamos un PCTFREE de 20, estamos
diciendo que se pueden insertar filas en el hasta que quede libre
en dicho bloque solamente el 20%. A partir de entonces, todas
las filas nuevas que se creen, se crearán en otros bloques pues
en este ya no queda sitio para más.
¿Qué ocurre con este 20%?
Se utiliza para las modificaciones de las filas que ya están en el
bloque. Cuando se modifica una fila y se aumenta el contenido de
un campo, por ejemplo, el campo "nombre" tenía el valor 'Jesus' y
ahora pasa a tener el valor 'Jesus Maria', Oracle usa el espacio
libre dentro del bloque para poder realizar esta operación.
Por lo tanto, este espacio podría incluso llenarse lo cual, en caso de seguir haciendo modificaciones de
este estilo, podría generarnos filas migradas, como se explica más adelante. Sin embargo, el espacio
libre en un bloque también puede aumentar, bien borrando filas o bien haciendo updates que disminuyan
el valor de los campos de las filas que existen en dicho bloque. Cuando se hace espacio libre suficiente
en el bloque se permite otra vez la insercción de registros en el mismo. El concepto de "espacio libre
suficiente" para volver a permitir inserciones en el bloque es lo que se define con el parámetro pctused.
Pctused
El concepto de pctused está directamente relacionado con pctfree. Supongamos que se crea un
segmento (tabla o índice) y se le asigna un pcfree de 20, por lo que todos sus bloques tendrán dicho
pctfree. Como ya hemos explicado, esto quiere decir que podremos insertar filas o registros en uno de
sus bloques hasta que se llene al 80 por ciento. A partir de ese momento ya no se pueden insertar
nuevos registros hasta que se libere espacio en el bloque, o sea, hasta que vuelva a aumentar el espacio
libre.
16
Instituto Profesional DuocUC
Escuela de Ingeniería
Concepto PCTUSED
•
•
•
Concepto Asociado al parámetro PCTFREE
¿Qué hay que hacer para aumentar el espacio libre en un
bloque?
• Borrar Filas existentes
• Modificar campos de dichas filas disminuyendo el tamaño
de los valores guardados
¿Cuànto espacio libre tiene que haber para poder volver a
insertar nuevas filas?
• ESTE VALOR ES LO QUE INDICA PCTUSED
Si un bloque tiene asignado un PCTUSED de 40, significa
que no se pueden volver a insertar nuevas filas hasta que
el espacio ocupado no baje por debajo de 40%
Llegados a este punto nos hacemos 2 preguntas:
•¿Qué hay que hacer para que aumente el espacio libre en un bloque?. Muy sencillo, o bien borrar las
filas que están en él o bien modificando campos de esas filas disminuyendo el tamaño de los valores
que en ellas están guardados.
•¿Cuanto espacio libre tiene que haber para poder volver a insertar nuevas filas?. Este valor nos lo
indica el parámetro pctused.
Así, si a un bloque le hemos asignado un pctused de 40, lo que conseguimos es que en un bloque 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, es
decir, 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. Hay
que resaltar que en los bloques de los segmentos de tipo índice, no tiene utilidad el parámetro pctused
debido a la finalidad de los mismos y a su estructura interna en forma de árbol binario.
17
Instituto Profesional DuocUC
Escuela de Ingeniería
Parámetros de Utilización del Bloque
INITRANS
Define número mínimo de transacciones
concurrentes que pueden modificar un bloque.
Default 1.
MAXTRANS
Define número máximo de transacciones
concurrentes que pueden modificar un bloque.
Default 255.
PCTFREE
Indica el porcentaje mínimo a dejar libre para
modificaciones de los datos de las filas que ya
existen dentro del bloque. Default 20%.
PCTUSED
Porcentaje de utilización del bloque, por debajo
del cual Oracle considera que un bloque puede
ser utilizado para insertar filas nuevas en él.
Default es 40%
Para consultar el valor tanto del parámetro pctfree como del parámetro 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;
Encadenamiento y Migración de Filas
Existen dos circunstancias diferentes por las cuales puede ocurrir que los datos de una fila recién
insertada no tengan espacio suficiente dentro del bloque. Hay que intentar por todos los medios evitar
que esto se produzca para que no caiga el rendimiento del sistema ya que cuando hay encadenamiento
o migracion de filas, los datos de una fila se dispersan por varios bloques, con lo que para obtener esos
datos o para modificarlos Oracle debe recorrer varios bloques que, posiblemente, no estén contiguos.
18
Encadenamiento de filas:
El encadenamiento o chained rows, se da cuando los datos de una fila ocupan tanto espacio que
no caben físicamente en un solo bloque y Oracle debe guardarlos en dos o más bloques de los
reservados para ese segmento. Esto suele ocurrir generalmente cuando se utilizan columnas de
tipo long o long raw que pueden almacenar grandes cantidades de espacio, por lo que no caben
en un solo bloque.
Migración de filas
Este otro caso se da cuando modificamos los datos de una fila de un bloque, aumentándolos de
tamaño, es decir, como en le ejemplo anterior, si teníamos un campo varchar2(30) con el valor
'Jesus' solo ocupaba 5 bytes y si lo modificamos para que contenga 'Jesus Maria' necesita 11
bytes. En este caso, si en la subzona en la que tenemos el espacio libre del bloque no
disponemos de espacio suficiente, Oracle mueve o mejor dicho, migra toda la fila a un nuevo
bloque en el que si que haya espacio para toda la fila. Sin embargo, para no tener que cambiarle
a dicha fila el rowid, es decir, el identificador único de la fila, lo que se hace es dejar en el bloque
inicial una información mínima de la fila, que será simplemente un puntero hacia la dirección del
nuevo bloque en el que se ha reubicado toda esta fila.
INITRANS
Especifica el mínimo y máximo de slots de transacciones que se crean en un bloque de índice o
de datos. Los slots de transacción se utilizan para almacenar la información sobre las
transacciones que están realizando cambios al bloque en un instante del tiempo. Una
transacción utiliza solamente un slot de transaccion, incluso si está cambiando más de una
entrada filas o índices. INITRANS, por defecto es 1 para un segmento de datos y 2 para un
segmento de índices, eso garantiza un nivel del mínimo concurrencia. Por ejemplo, si el sistema
es seteado a 3, INITRANS se asegura de que por lo menos tres transacciones puedan realizar
concurrentemente cambios al bloque. En caso de necesidad, los slots adicionales de la
transacción se pueden asignar del espacio libre en el bloque para permitir que transacciones
más concurrentes modifiquen filas en el bloque.
MAXTRANS
Su valor por defecto es 255, fija el límite para el número de las transacciones concurrentes que
pueden modificar datos en un bloque de datos o índices. Cuando está seteado, este valor
restringe el uso de slots de transacciones y por lo tanto, da garantiza que hay suficiente espacio
en el bloque para datos o índices.
19
Instituto Profesional DuocUC
Escuela de Ingeniería
Tablespaces y Datafiles
Oracle almacena datos lógicamente en tablespaces y
físicamente en datafiles.
• Tablespaces:
– Puede pertenecer a una sola base de datos a la vez
– Consiste de uno o más datafiles
– Se dividen dentro de unidades lógicas de
almacenamiento
•
Datafiles:
– Pueden pertenecer solo a un tablespace y a una base
de datos
Database
– Son un repositorio de datos (objectos)
Tablespace
Data files
Tablespaces y Data Files
Una tabla o índice, Oracle la almacena lógicamente en un tablespace y físicamente en un
datafile. Una base de datos oracle consiste de 2 o más tablespaces y cada tablespace de
uno o mas datafiles. Cuando se crea una tabla, se puede indicar en cuál tablespace se
colocan los datos.
Un tablespace agrupa físicamente objectos para una conveniente administración. Mezclas
estructuras físicas como datafiles o extents y estructuras lógicas, tales como tablas e índices.
Un tablespace puede almacenar cero o más segmentos. Los segmentos son objectos que
requieren almacenamiento fuera del diccionario de datos. Tablas e índices son ejemplos de
segmentos. Constraints y secuencias, son ejemplos de objetos que no necesitan ser
almacenados fuera del diccionario de datos y no requieren segmentos.
Un aspecto común en administración de tablespace tiene que ver con el rendimiento. Se
pueden separar tablas e índices en tablespace separados e incluso en discos físicos
distintos. De esta manera es posible separar los segmentos de datos e índices y reducir la
contención de disco y con ello, acelerar el acceso a los datos.
20
Tablespaces y Data Files (continuación)
Base de datos, tablespaces, y data files estan muy relacionados pero tienen importantes
diferencias:
• Una base de datos consiste de uno o mas unidades lógicas de almacenamiento llamadas
tablespace, las que almacenan todos los datos de una base de datos
• Cada tablespace consiste de uno o mas archivos llamados datafiles, los que son
estructuras físicas en disco
• Una base de datos Oracle es un conjunto de datos almacenados en datafiles que estan
conformados de tablespaces.
Ejemplos: una base de datos Oracle podría tener 1 tablespaces y 2 datafiles. Otra,
podría tener 3 tablespaces cada uno consistente de 2 datafiles (6 en total). Una
base de datos Oracle podría potencialmente tener hasta 65.535 datafiles.
Identificando un Tablespace por Default
El tablespace SYSTEM es usado por el diccionario de datos y no debe ser usado para
almacenar schemas de objetos de otros lugares. El tablespace SYSAUX es nuevo en Oracle 10g
y almacena schema de objetos asociados con características provistas por Oracle, tales como
Spatial data option, XMLDB o Intermedia.
Los tablespaces SYSTEM y SYSAUX siempre son creados cuando se crea la base de datos.
SYSAUX, es creado cuando se hace upgrade a Oracle 10g desde una versión inferior. Uno o
más tablespaces temporales generalmente son creados en una base de datos tales como, undo
tablespace y varios tablespaces de aplicaciones. Dado que los tablespaces SYSTEM y SYSAUX
siempre son creados con la base de datos, estos son los tablespace por defecto. Sin embargo,
no se puede seguir usandolos como tablespaces por default para aplicaciones de usuarios, por
tanto, es precioso crear un nuevo tablespace para dicho propósito.
21
Instituto Profesional DuocUC
Escuela de Ingeniería
Administración de Espacio en Tablespaces
•
Tablespaces manejados Localmente:
– Los extents libres son manejados en el tablespace
– Un mapa de bit es usado por Oracle para registrar los
extents libres
– Cada bit corresponde a un bloque o grupo de bloques
– El valor bit indica libre o usado
•
Tablespaces manejados por Diccionario:
– El DBA debe manejar manualmente el crecimiento
– Los extents libres son manejados por el diccionario de datos
Administración de Espacio en Tablespaces
Un Tablespaces asigna espacio en extents. Los tablespaces pueden ser creados usando dos
mçetodos diferentes para mantener la pista de espacio libre y usado:
Localmente: Los extents son manejados dentro del tablespace vía bitmaps. Cada bit en el
bitmap corresponde a un bloque o grupo de bloques. Cuando un extent es asignado libre para
reusar, el servidor Oracle cambia el valor del bitmap mostrando un nuevo estado del bloque.
Dictionary: Los extents son manejados por el diccionario de datos. El servidor Oracle modifica
tablas apropiadas del diccionario de datos cada vez que un extent es asignado o desasignado.
Esto solo es para compatibilidad, lo recomendable es usar tablespace manejados Localmente.
22
Instituto Profesional DuocUC
Escuela de Ingeniería
Creando un nuevo Tablespace
Creando un nuevo Tablespace
Para crear un tablespace, ejecute los siguientes pasos:
1. Navege a la pagina Tablespaces. Vaya al tab de Administration, haga click bajo Storage
heading.
2. Haga click en el boton Create.
Nota: Si desea crear un tablespace a partir de otro existente, seleccionar el tablespace
existente y seleccione Create Like from en el menu y haga click en Go.
Aparecerá una página de tablespace Creado
3. Ingrese el nombre del Tablespace.
4. Bajo Extent Management, seleccione Locally Managed. Este tipo de administración es
más eficiente. Los tablespaces manejados por diccionario usted debe manejar
manualmente los extents y el acceso al diccionario de datos requerido para rastrearlos.
Tablespasce manejado por diccionario esta desaprobando en Oracle 10g y Oracle no
recomienda este tipo de administración de tablespaces.
5. Bajo Type, seleccione Permanent. Los tablespace Permanent almacenan
permanentemente objetos creados por el sistema o usuarios.
6. Bajo Status, seleccione Read Write. El estado Read/write significa que los usuarios
pueden leer y escribir a tablespaces despuçes de ser creados. Este valor es por default.
23
Creando un nuevo Tablespace (continuación)
7. Haga en la region de DATAFILES haga click en ADD para agregar Datafiles a un
tablespace, un tablespace debe tener al menos un archivo. Un tablespace Bigfile será
usado con bases de datos ultra grandes donde el ASM (Automatic Storage Management) u
otro administrador de volúmenes lógicos que soporte Stripping o RAID y extensión dinámica
de volúmenes lógicos.
8. En la pagina ADD DATAFILES, ingrese el nombre del archivo. Acepte los valores por
defecto para el Archivo de Directorio y Tamaño del Archivo.
9. Bajo la región STORAGE, seleccione “Automatically extend datafile when full
(AUTOEXTEND)” y especifique la cantidad en el campo Increment con la que se desea
extender la data de cada archivo cada vez que se requiera. Leave the Maximum File Size
set to Unlimited. Click OK. Usted regresa a la página Create Tablespace General.
10. Haga click en el tab Storage. Aparece una página Create Tablespace Storage.
11. Acepte todos los valores por defecto en la página Storage.
12. Haga click en el tab Thresholds (Umbrales). Esta página habilita un conjunto de thresholds
para monitorear el espacio utilizado. Usted recibe un consejo y una acción cuando se
alanza el umbral.
13. Después de especificar el Umbral haga click en ADD THE TABLESPACE. Usted regresa a
la página Tablespaces donde recibe una confirmación de la creación del tablespace. Puede
ver el nuevo tablespace en la sección Results.
Nota: Estos pasos intentan mostrar rápidamente la creación de un tablespace para la mayoria de
las situaciones. Necesitará hacer algunos cambios en algunas opciones dependiendo de sus
requerimientos particulares.
24
Instituto Profesional DuocUC
Escuela de Ingeniería
Almacenamiento para Tablespaces
Manejados Localmente
Almacenamiento para Tablespaces manejados localmente
Los extents dentro de un tablespace manejado localmente puede ser asignado de la siguiente
manera:
• Automática: También llamado autoallocate, especifica que el tamaño de los extents
dentro de un tablespace es manejado por el sistema. No necesita especificar el tamaño
del extent. No necesita especificar automatic para un tablespace temporal.
• Uniforme: Especifica que el tamaño del tablespace es manejado dentro de extents
uniformes del tamaño que ha especificado. El tamaño por defecto es 1 MB. Todos los
extents de un tablespace temporal son de tamaño uniforme, lo que es opcional para este
tipo de tablespaces. No puede especificar tamaños uniformes para un tablespace Undo.
Administración de espacio del segmento dentro de un tablespace manejado localmente:
• Automático: Oracle usa bitmaps para manejar el espacio libre dentro de los segmentos.
Un bitmap, en este caso, es un mapa que describe el estado de cada bloque de datos
dentro de un respecto con respecto a la cantidad de espacio disponible en los bloques
disponibles para insertar filas. Mayor o menor espacio disponible en un bloque de datos,
corresponde a un nuevo estado en el bitmap.. Los bitmap permiten a Oracle manejar
espacio libre automáticamente y esta manera de administración de espacio es llamada
Administración Automática de Espacio de Segmentos (Automatic segment-space
Management).
25
Almacenamiento para Tablespaces Manejados Localmente (continuación)
• Manual: Esto le dice a Oracle que usted desea utilizar las listas disponibles para
manejar el espacio libre dentro de segmentos. Las listas disponibles, son listas de los
bloques de datos que tienen espacio disponible para insertar filas. Esta forma de
manejar espacio dentro de segmentos se llama Administración Manual de Espacio de
Segmentos, debido a la necesidad de especificar y de ajustar los parámetros del
almacenamiento para los esquemas creados en el tablespace (PCTUSED,
FREELISTS, FREELIST GROUPS). Esto es soportado para compatibilidad de
versiones anteriores.
Ventajas de Tablespaces Manejados Localmente
Tablespaces manejados localmente tienen las siguientes ventajas sobre los tablespaces
manejados por diccionario:
•
•
•
•
•
La administración local evita operaciones recursivas de administración del espacio.
Esto puede ocurrir en tablespaces manejados por diccionario si consumen o liberan
espacio en extents, resultado de operaciones que consumen o liberan espacio en un
segmento de undo o una tabla del diccionario de datos.
Porque los tablespaces manejados localmente no registran el espacio libre en tablas
del diccionario de los datos, ello disminuye la contención en estas tablas.
La administración local de extents sigue automáticamente la pista del espacio libre,
eliminando la necesidad de unir extents libres.
Los tamaños de los extents que son manejados localmente se pueden determinar
automáticamente por el sistema.
Los cambios en los extents bitmap no generan información de undo, porque ellos no
modifican tablas en el diccionario de datos (excepto casos especiales como
información de quota en un tablespace)
Nota: Si usted desea manejar un base de datos que sus tablespaces son manejados por
diccionario y desea convertirlo a una administración local, utilice los procedimientos
almacenados DBMS_SPACE_ADMIN.TABLESPACE_MIGRATE_TO_LOCAL.
Logging
Cuando ocurren cambios a objetos dentro de un tablespace, el cambio es registradoen el
redo stream. Este redo stream se inicia en memoria, es escrito a los archivo de redolog
online y puede ser escrito a los archivos de archive log. Usted puede dejar esteproceso
desactivo. Si usted desactiva el registro (logging), los objetos en el tablespace seran
irrecuperables en el caso de un evento de falla
Thresholds (Umbrales)
Al usar el tab Tablespace Thresholds, se setea el espacio utilizado para Umbrales en el
tablespace activo. Se puede definir un uso por defecto de Umbrales o especificar un
porcentaje de espacio utilizado para el tablespace activo ingresando valores para el Warning
and Critical fields.
26
Instituto Profesional DuocUC
Escuela de Ingeniería
Tablespaces en la Base de Datos
Preconfigurada
•
•
•
SYSTEM
SYSAUX
TEMP
•
•
•
UNDOTBS1
USERS
EXAMPLE
Tablespaces en la Base de Datos Preconfigurada
Los siguientes tablespaces son creados para una base de datos pre configurada:
• SYSTEM: Este tablespace es usado por Oracle para administrar la base de datos.
Contiene el diccionario de datos y tablas que contienen informacion administrativa sobre
la base de datos. Toda esta información esta bajo el schema SYS, y puede ser accesada
solo por el usuario SYS u otro usuario con privilegios administrativos
• SYSAUX: Es un tablespace auxiliar al tablespace SYSTEM. Algunos componentes y
productos que usaban el tablespace SYSTEM ahora usan el tablespace SYSAUX. Cada
base de datos Oracle 10g o superior debe tener un tablespace SYSAUX.
• TEMP: Este tablespace es usado para almacenar tablas temporales e indices cuando se
procesan sentencias SQL. Por ejemplo, sería usado para el área de trabajo de sort. Cada
base de datos debe tener un tablespace temporal que es asignado al tablespace
temporal de cada usuario. En la base de datos preconfigurada, el tablespace temporal se
especifica como el tablespace temporal por defecto. Esto significa que si no se especifica
ningún tablespace temporal cuando se crea la cuenta del usuario, entonces Oracle
asigna este tablespace al usuario.
27
Tablespaces en la Base de Datos Preconfigurada
(continuación)
• UNDOTBS1: Este tablespace es usado para almanacenar información de Undo
(deshacer). Cada base de datos debe tener un tablesspace de undo, que es creado
durante la creación de la base de datos.
• USERS: Este tablespace es usado para almacenar permanentemente objetos y datos de
usuarios. En una base de datos preconfigurada, el tablespace USERS es el tablespace
por default para todos los objetos creados que no son del sistema. Para los usuarios SYS
y SYSTEM (usuarios del sistema), el tablespace default permanente es el tablespace
SYSTEM.
• EXAMPLE: Este tablespace contiene los ejemplos de schema que pueden ser instalados
cuando se crea la base de datos. Los ejemplos de schema proveen una plataforma
común de ejemplos. La documentacion de Oracle y sus cursos oficiales contienen
ejemplos basados sobre estos ejemplos de schema.
28
Instituto Profesional DuocUC
Escuela de Ingeniería
Alterando un Tablespace
Alterando un tablespace
Despues de crear el tablespace, usted puede alterarlo de diferentes maneras dependiendo de
las necesidades de cambios en su sistema.
Renaming: Simplemente ingresar un nuevo nombre para el tablespace y hacer click en el
botón Apply. Con esta acción se renombra un tablespace.
Changing the Status: Un tablespace puede estar en 1 de 3 estados posibles. Dependiendo
del tipo de tablespace, no todos los estados estan disponibles:
• Read Write: El tablespace es online y se puede ser leer o escribir en el.
• Read Only: Especifica que el tablespace esta de read-only por tanto, solo acepta
transacciones de lectura-escritura. En este estado, las transacciones existentes pueden
terminar (commit o rollback), pero no se permiten operaciones DML excepto un commit o
rollback de transacciones existentes previamente y que modificaron bloques. El
tablespace esta online mientras este en estado Read-Only. No se puede dejar el
tablespace SYSTEM o SYSAUX en modo read-only.
29
Alterando un Tablespace (continuación)
• Offline: Usted puede dejar un tablespace que este online a offline, y de esta manera
dejar temporalmente no disponible esta porción de la base de datos para uso general. El
resto de la base de datos esta abierta para acceso a datos por parte de los usuarios.
Cuando se coloca offline hay dos formas de hacerlo:
- Normal: Un tablespace se puede colocar offline sino existen condiciones de error en
ningún datafile del tablespace. Oracle hace un checkpoint para todos los datafiles
del tablespace antes de colocarlo offline.
- Temporary: Un tablespace se puede dejar offline temporary, incluso si hay algun
error en uno o más archivos del tablespace. Oracle deja offline los datafiles que ya
no estan offline, haciendo un chekpoint sobre ellos. Si no hay archivos offilne, pero
se esta usando la cláusula temporay, no es necesaria una recuperación para
regresar el tablespace a online. Sin embargo, si unos o más archivos del tablespace
estan offline porque hay errores de escritura y se deja el tablespace offline
temporalmente , el tablespace requiere recuperación antes de volver a dejarlo
online
- Immediate: Un tablespace puede dejarse offline immediately, sin que Oracle realice
un checkpoint sobre ninguno de sus datafiles. Cuando se especifica Immediate, se
requiere recuperación del tablespace antes que puede ser dejarlo online
nuevamente. No se puede dejar un tablespace offiline immediately si la base de
datos esta corriendo en modo NOARCHIVELOG.
- For Recover: El seteo FOR RECOVER ha sido descontinuado y la sintaxis solo se
mantiene para compatibilidad anterior.
Cambiar el tamaño: Se puede agregar espacio sobre un tablespace agregando datafiles o
cambiando el tamaño de un datafile existente.
• Para agregar un nuevo datafile, haga click en ADD y llene la información sobre el datafile
a agregar sobre la página Add Data File.
• Para modificar el tamaño de un datafile existente, seleccione el datafile y edite el
tablespace haciendo click sobre el nombre de este. Se puede agrandar o achicar un
tablespace, sin embargo, no puede asignar un espacio menor al utilizado, si se intenta se
otiene el siguiente error:
ORA-03297: file contains used data beyond requested RESIZE value
Opciones de almacenamiento: haga click en STORAGE para modificar el comportamiento del
tablespace.
Thresholds: Haga Click en Thresholds para cambiar las alertas de criticidad de espacio usado
por el tablespace. Hay 3 opciones:
• Use Default Thresholds: Es la opcion por defecto y no hay opciones para setear los
valores.
• Specify Thresholds: Esta permite configurar thresholds para un tablespace particular.
• Disable Thresholds: Esto deshabilita el uso de alertas para este tablespace.
30
Instituto Profesional DuocUC
Escuela de Ingeniería
Acciones con Tablespaces
Acciones con Tablespaces
Con el menu Actions se puede ejecutar una variedad de tareas con los tablespaces. Selecione
un tablespace y la acción que se desea ejecutar:
• Add Datafile: Agrega datafiles al tablespace, lo que permite tener un tablespace mas
grande.
• Create Like: Crea otro tablespace usando este tablespace como plantilla.
• Generate DDL: Genera un sentencia DDL que crea el tablespace. Esta puede ser
copiada y pegada en un archivo de texto para ser usada como parte de un script o para
propositos de documentación.
• Make Locally Managed: Si el tablespace actualmente esta manejado por diccionario,
esto lo convierte a manejado Localmente.
• Make Readonly: Detiene todas las escrituras sobre el tablespace. Las transacciones
actuales, son permitidas pero ninguna nueva DML u otra actividad de escritura es
permitida sobre el tablespace.
• Make Writable: Permite DML y otras actividades de escritura sobre el tablespace.
31
Acciones con Tablespaces (continuación)
• Place Online: Si el tablespace esta actualmente offline, esta acción lo regresa a online.
• Reorganize: Esta acción inicia un Asistente de Reorganización, el que se utiliza para
mover objetos dentro de un tablespace para reclamar espacio que de otra manera no
puede ser recuperado. Esta tarea debe hacerse durante periodos no críticos en el uso
de los objetos dentro del tablespace. El asistente termina generando un script que
puede ser salvado en un archivo de texto, y finalmente deja un trabajo (JOB) dentro de
la base de datos que puede ejecutarse inmediatamente o en fecha y hora que indique
el DBA.
• Show Dependencies: Muestra los objetos que dependen de este tablespace.
• Run Segment Advisor: El Segment Advisor ayuda a determinar cuando un objeto
tiene espacio disponible para ser reclamado por fragmentación del espacio dentro del
objeto.
• Take Offline: Si el tablespace esta actualmente online, esto lo deja no disponible. El
tablespace no es borrado, solo no esta disponible.
Note: No todas las acciones esta disponible para cada tablespace. Dependiendo del tipo de
tablespace seleccionado, alguna acciones no pueden ser ejecutadas. Por ejemplo, no se
puede dejar offline el tablespace SYSTEM o no se puede dejar el tablespace de UNDO readOnly.
32
Instituto Profesional DuocUC
Escuela de Ingeniería
Borrando Tablespaces
Borrando Tablespaces
Se puede borrar un tablespace y su contenido (segmentos contenidos en el tablespace) desde
la base de datos, si el tablespace y su contenido ya no se necesitan. Se debe tener el privilegio
de DROP TABLESPACE para borrar un tablespace.
Cuando se borra un tablespace, los archivos de punteros en el archivo de control asocidado a
la base de datos son actualizados. Opcionalmente se pueden eliminar los archivos del sistema
operativo (datafiles) que constituian el tablespace. Sino se indica a Oracle que borre los
datafiles al mismo tiempo que borra el tablespace, usted debera eliminar dichos archivos
manualmente con comandos del sistema operativo asociado.
No se puede borrar un tablespace que contiene segmentos activos. Por ejemplo, si una tabla
en el tablespace esta siendo usada o el tablespace contiene data de UNDO que necesitan ser
rollbaqueadas sus transacciones, cualquiera sea el caso, no es posible borrar el tablespace.
El tablespace puede estar online o offline, pero la mejor forma es dejar offlie el tablespace
antes que sea borrado.
33
Instituto Profesional DuocUC
Escuela de Ingeniería
Viendo Información de un Tablespace
Viendo Información de un Tablespace
Haciendo click en View, se puede ver informacion sobre el tablespace seleccionado. En la
página View tambien se puede editar el tablespace para alterarlo.
Para obtener información del tablespace y datafile, se pueden consultar las siguientes vistas:
• Información de tablespaces:
- DBA_TABLESPACES
- V$TABLESPACE
• Información de datafiles:
- DBA_DATA_FILES
- V$DATAFILE
• Información de archivo Temp:
- DBA_TEMP_FILES
- V$TEMPFILE
34
Instituto Profesional DuocUC
Escuela de Ingeniería
Fin de la Lección
Jaime Amigo P. © 2006, Santiago - Chile
Descargar