Professional Documents
Culture Documents
cambio en las polticas de almacenamiento del DBMS. En la versin 7 y sus anteriores, el nmero de archivo de datos era nico en toda la base de datos, imponiendo as una mayor restriccin en el espacio mximo de la misma. En ORACLE8 esta restriccin fue eliminada y el numero de archivo de datos es relativo al tablespace al que pertenece por lo que se permite que el nmero de archivos de datos exceda a los 1022, restriccin anterior del DBMS. El almacenamiento fsico de un ROWID extendido requiere de 10 bytes. Recordemos que si bien las filas de una tabla no poseen explcitamente la columna ROWID, este valor se almacena como parte de los bloques de datos (en el directorio de filas) y adicionalmente si una fila est encadenada se almacenar el ROWID de su prximo row piece. En cuanto a la estructura, un ROWID posee cuatro componentes: DON (Data Object Number): Es un nmero unvoco que el DBMS asigna a cada objeto (tabla o ndice, por ejemplo) dentro de la base de datos. RFN (Relative File Number): Es el nmero del archivo de datos en el que se encuentra el bloque de datos que contiene la fila. Este nmero de archivo de datos es relativo al tablespace que lo incluye en la estructura de memoria secundaria de ORACLE. BN (Block Number): Indica el nmero de bloque de datos relativo al archivo de datos que contiene el row piece . RN (Row Number): Indica la posicin de la fila dentro del directorio de filas almacenadas en el bloque de datos ORACLE referenciado. Aunque internamente el campo DON se almacena en 32 bits, el RFN en 10 bits, el BN en 22 bits y el RN en 16 bits, al desplegar un ROWID el DBMS utiliza un esquema de codificacin de base 64 en el cual se utilizan seis posiciones para el DON, tres posiciones para el RFN, seis posiciones para el BN y tres posiciones para el RN. En tal sentido, un ROWID tiene la forma OOOOOOFFFBBBBBBRRR (O significa informacin del DON, F indica posicin del RFN, B indica posicin del BN y R indica RN). El alfabeto de codificacin base 64 utilizado por ORACLE para el despliegue del rowid posee los smbolos (enumerados en orden en la base) A-Z, a-z, 0-9, + y /. Por ejemplo, si al ejecutar el query SELECT SUBSTR(ROWID,1,6) DAO, SUBSTR(ROWID,7,3) RFN, SUBSTR(ROWID,10,6) BN SUBSTR(ROWID,16,3) RN FROM EMPLEADO WHERE NRO_EMP = 1; se obtiene que el ROWID del empleado con nmero de ficha 1 es AAAAASAABAAAGF1AAV entonces se tiene que: El objeto al que pertenece dicha fila es el AAAAAS (objeto con identificador 18 en decimal, o dcimo octavo objeto creado en el DBMS). La fila se encuentra en el archivo de datos nmero AAB (1 en decimal) asociado al tablespace en el que se encuentra almacenada la tabla EMPLEADO.
Pgina 2 de 16
La fila se encuentra almacenada en el bloque de datos ORACLE AAAGF1 (bloque nmero 24949 decimal) del archivo de datos en cuestin. La fila en cuestin es la fila AAV-sima (vigsimo segunda fila) que se ha almacenado en el bloque de datos ORACLE en cuestin.
Para localizar una fila, el DBMS utiliza el DON para obtener el nmero interno asignado al tablespace que contiene tal fila. Posteriormente, el RFN se utiliza para determinar el archivo de datos que contiene la fila, y el BN para determinar qu bloque de datos ORACLE almacena la fila. Finalmente, el RN permite indicar cul de las entradas del directorio de filas del bloque de datos ORACLE8 contiene el desplazamiento en el bloque de datos donde se ubica el row piece de la fila a ser leda.
Encadenamiento y Migracin
Como se mencion anteriormente, uno de los posibles efectos perniciosos que se generan durante la vida de una tabla es el encadenamiento de filas. Otro de los fenmenos que se puede producir es la migracin de filas. Cuando una instruccin de UPDATE incrementa la cantidad de espacio requerida por una fila pueden suceder dos cosas: 1. El DBMS no logra conseguir el espacio necesario para almacenar la fila en el bloque. En este caso se tratar de conseguir otro bloque que posea el espacio requerido. Si tal bloque existe, la fila se mover de bloque de datos y se hablar de migracin de una fila. 2. Si el DBMS no logra conseguir ningn bloque que permita albergar la fila completa, el DBMS separar la fila en varias row pieces, y como se mencion anteriormente ocurrir un encadenamiento de fila. Este fenmeno puede ocurrir tambin al insertar una fila si no se logra conseguir un bloque que permita albergarla por completo. La migracin y el encadenamiento van en detrimento del rendimiento de la base de datos porque: Las instrucciones de UPDATE requerirn de ms operaciones de E/S para poder cambiar los bloques de datos ORACLE que se han cambiado como resultado de la operacin. Las consultas que seleccionan filas que han sido migradas o encadenadas realizarn ms operaciones de lectura de disco para obtener todos los bloques de datos, si las de un mismo objeto lgico se encuentran ahora dispersas en varios bloques de datos. En general, se produce fragmentacin en los bloques de datos. El administrador de la base de datos tiene mecanismos para identificar cuales de las filas de una tabla se encuentran encadenadas o han sufrido migracin. Para tal fin ORACLE provee una operacin especial del comando ANALYZE que efecta procesos de medicin sobre los objetos gestionados por el DBMS. En nuestro caso particular, el comando ANALYZE TABLE <tabla> LIST CHAINED ROWS Permite obtener informacin sobre filas encadenadas y migradas de la tabla <tabla>. Pgina 3 de 16
Para poder utilizar el comando se necesita de una tabla especial llamada CHAINED_ROWS la cual puede ser creada a travs del siguiente comando: create table CHAINED_ROWS ( owner_name varchar2(30), table_name varchar2(30), cluster_name varchar2(30), partition_name varchar2(30), head_rowid rowid, analyze_timestamp date ); Suponiendo la existencia de la tabla CHAINED_ROWS, para reducir el nmero de filas encadenadas y/o migradas de una tabla X de un usuario Y puede aplicarse el siguiente procedimiento: 1. Utilizar el comando ANALYZE para obtener las filas encadenadas y/o migradas de la tabla en estudio. ANALYZE TABLE X LIST CHAINED_ROWS 2. Verificar si existen filas encadenadas o migradas en la tabla X del usuario Y SELECT COUNT(*) FROM CHAINED_ROWS WHERE OWNER_NAME = Y AND TABLE_NAME = X 3. Si existen filas (el query devuelve un valor mayor que 0) existirn filas encadenadas o migradas en la tabla X del usuario Y. Para eliminar el efecto se puede seguir el siguiente procedimiento a. Crear una tabla temporal que posea la misma estructura que la tabla en estudio pero slo aquellas filas que presentan encadenamiento o migracin: CREATE TABLE X_TEMP AS SELECT * FROM Y.X WHERE ROWID IN ( SELECT HEAD_ROWID FROM CHAINED_ROWS WHERE OWNER_NAME = Y AND TABLE_NAME = X) b. Eliminar de la tabla original aquellas filas que presentan encadenamiento o migracin DELETE FROM Y.X Pgina 4 de 16
WHERE ROWID IN ( SELECT HEAD_ROWID FROM CHAINED_ROWS WHERE OWNER_NAME = Y AND TABLE_NAME = X) c. Insertar en la tabla original las filas que antes presentaban problemas: INSERT INTO Y.X SELECT * FROM X_TEMP d. Borrar la tabla temporal creada para resolver el problema DROP TABLE X_TEMP 4. Eliminar las filas de la tabla de anlisis de migracin y encadenamiento. DELETE FROM CHAINED_ROWS 5. Volver a ejecutar el comando de anlisis de filas encadenadas o migradas en la tabla bajo estudio. ANALYZE TABLE X LIST CHAINED_ROWS 6. Si vuelven a aparecer filas de la tabla que se encuentran encadenadas, esto se deber estrictamente a que la operacin de insercin de filas problemticas realizado en el paso 3.d genera encadenamiento. En este caso el encadenamiento se producir porque la fila no puede ser almacenada en un bloque de datos ORACLE8 con los valores de PCTFREE y PCTUSED asignados a la creacin de la tabla en estudio. Pueden ocurrir dos cosas: a. Que bajo ninguna circunstancia (colocando inclusive 0 como valor del PCTFREE) pueda evitarse el encadenamiento, ya que el tamao de una nica fila sobrepase el tamao mximo permitido para datos (tamao de bloque de datos DB_BLOCK_SIZE menos el overhead del bloque de datos). En este caso se requiere de un estudio mucho mayor ya que es posible que la configuracin de la instancia no se haya realizado tomando en cuenta esta tabla o que no sea posible. Este proceso involucrara recrear toda la base de datos y requiere de mayor experticia de la que hasta ahora poseemos (implica hacer backup y/o exportar la base de datos, replanificacin de la instancia y regeneracin de la base de datos). En general, un bloque de datos ORACLE de tamao 4K u 8K reduce considerablemente este tipo de escenarios. b. Que bajo un estudio detallado, se logre determinar un mejor valor para los parmetros PCTFREE y PCTUSED. En tal caso ser necesario cambiar los parmetros de almacenamiento de la tabla para evitar el problema. En prximas clases estudiaremos la estructura completa del comando CREATE TABLE y sabremos como realizar este proceso.
Un aspecto importante a tener en cuenta es el hecho de que resolver encadenamiento y migracin trae implcito borrar temporalmente filas de una tabla, y que pueden existir Pgina 5 de 16
restricciones de integridad referencial y triggers asociados a la tabla en anlisis o a vecindad (tablas relacionadas con ella). En tal sentido: 1. Este proceso debe realizarse slo cuando la base de datos no est operativa para los usuarios de la misma, de manera de evitar operaciones sobre las tablas que estn relacionadas con la tabla en estudio o sobre la misma tabla. 2. Es necesario deshabilitar todas las restricciones de integridad referencial hacia la tabla en cuestin y de la tabla en cuestin hacia otras tablas (particularmente para evitar borrados en cascada) antes del proceso y habilitarlas posteriormente al proceso. 3. Es altamente recomendable ir elaborando scripts de anlisis de migracin y encadenamiento a medida que se reciben solicitudes de creacin de esquemas por parte de los usuarios. Como DBA, mantener al da el estado y rendimiento de la base de datos es importantsimo para la supervivencia de las aplicaciones y resulta ms prctico desarrollar los scripts al momento del anlisis de los esquemas que una vez que estos se hayan puesto en produccin.
ndices
Un ndice es una estructura de memoria secundaria que permite el acceso directo a las filas de una tabla (est o no agrupada). ORACLE provee cinco tipos de ndices: Indices basados en B*-trees para tablas no agrupadas. Indices basados en B*-trees para tablas agrupadas. Indices basados en Hashing para tablas agrupadas. Indices Bitmap. Indice basados en B*-Trees para tablas organizadas por ndices. En tablas que no estn organizadas por ndice, los ndices son independientes de la estructura fsica de la tabla (o tablas agrupadas) y por lo tanto poseen requerimientos de espacio adicionales a los de la tabla sobre los que se encuentran definidos. La finalidad principal de un ndice es la definir un camino de acceso a los datos que garantice una mejora en el rendimiento de las operaciones de bsqueda. ORACLE efecta de manera automtica el mantenimiento de la consistencia de los ndices asociados a una tabla cada vez que se insertan y eliminan filas o se modifican valores de las columnas sobre las que se define un ndice. Si bien es cierto que los ndices aceleran las operaciones de consulta, tambin debe tomarse en cuenta que el mantenimiento de un ndice tiene efecto sobre el rendimiento de las operaciones de eliminacin, insercin y actualizacin ya que es doble el trabajo de manipulacin de bloques de datos (debe almacenarse informacin en los bloques de datos de una tabla y de los diferentes ndices sobre ella definidos). Los ndices pueden definirse sobre una o mltiples columnas de una tabla (o cluster). Sin embargo ORACLE impone dos restricciones: El nmero mximo de columnas para ndices basados en B*-Tree es de 32 columnas, mientras que para ndices bitmap es de 30 columnas.
Pgina 6 de 16
El espacio requerido para almacenar una clave no puede exceder la mitad del espacio disponible para almacenar datos en un bloque ORACLE (recordemos que era tamao de bloque menos el espacio libre para actualizaciones menos el overhead para informacin de control del bloque de datos).
ORACLE permite la creacin de ndices que permitan albergar, para un mismo valor de la clave, una fila o varias filas. Los ndices UNIQUE garantizan que en una tabla (o cluster) no puedan existir dos filas con el mismo valor. Por defecto (si no se especifica lo contrario) al crear un ndice ser considerado como de claves repetidas. Es importante destacar que ORACLE slo genera en forma automtica los siguientes ndices cuando se crea una tabla: Un ndice UNIQUE basado en B*-tree para mantener las columnas que se hayan definido como clave primaria de una tabla utilizando el constraint PRIMARY KEY de una tabla no organizada por ndice. Un ndice UNIQUE basado en B*-tree para mantener la restriccin de unicidad de cada grupo de columnas que se haya declarado como nico utilizando el constraint UNIQUE. Un ndice basado en B*-tree para mantener las columnas que se hayan definido como clave primaria y todas las filas de una tabla organizada por ndice. Un ndice basado en hashing para mantener las filas de un grupo de tablas (cluster) organizado por hash. A estos ndices (aquellos generados automticamente) se les denominar Indices Primarios. El administrador de la base de datos podr crear otros ndices de acuerdo con el estudio de rendimiento de las aplicaciones y de la base de datos. A estos ndices creados especficamente para resolver problemas particulares de degradacin de rendimiento se les denominar Indices Secundarios. Una ltima variacin permitida por ORACLE en los ndices basados en B*-tree para tablas no agrupadas es el manejo de ndices de claves invertidas. En un ndice de claves invertidas el orden mantenido dentro de la estructura de rbol viene dado por el resultado de invertir el valor de cada columna que forma parte del ndice. Esta poltica busca resolver el problema de degradacin del rendimiento que ocurre cuando: Se presentan inserciones en las que el orden de la insercin de filas es exactamente igual al orden parcial definido sobre los valores de las claves. En bases de datos paralelas, donde mltiples instancias del DBMS acceden a un grupo de filas de una tabla ubicadas dentro de una rango de valores para sus claves. Si se invierten los valores de las claves el efecto producido ser el de dispersar claves que antes deban estar consecutivas en el orden establecido por el ndice. Al separar estas claves se reduce la contencin sobre el bloque de datos ORACLE que antes deba contenerlas. Estos ndices sirven slo para realizar bsquedas de igualdad (exact match queries) por lo que no deben utilizar si la tabla sobre la que se definir dar soporte a aplicaciones que hagan bsqueda por rango (range match queries).
Pgina 7 de 16
Para el momento de creacin de la tabla existen 19 filas con ROWIDs restringidos ubicados en el rango 00000010.0001.0004 a 00000012.0009.0004. Cada entrada del ndice poseer un bitmap de tamao 19 bits con la informacin de las filas que poseen cierto valor de la clave.
SOSPECHOSO
CI 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 Nombre A B C D E F G H I J K L M N O P Q R S
Fec_Nac 12/12/64 01/28/44 11/07/68 12/03/71 03/19/40 10/21/75 05/05/43 02/28/57 06/30/80 04/01/61 08/02/61 09/05/65 08/16/44 12/31/75 02/15/84 08/30/59 07/07/78 09/28/80 01/19/69
Ojos 1 2 1 3 2 4 4 4 1 1 2 2 2 4 4 1 3 1 3
Ult_ing
Otros
INDICE BITMAP
Clave <4,
Start ROWID
End ROWID
Bitmap
<3,
<2,
<1,
Figura 4.1: Ejemplo de un ndice bitmap Al decidir entre los dos tipos de ndices: basados en B*-Tree e ndice bitmap se debe tener en cuenta que: Los ndices de tipo bitmap son particularmente eficientes cuando el universo de valores posibles para las columnas del ndice tiene una baja cardinalidad. Al existir un gran universo de posibles valores para la columna aumenta el nmero de posibles claves y adicionalmente el tamao de los bitmaps a ser mantenidos en las entradas del ndice. En
Pgina 9 de 16
escenarios donde el universo de valores de las claves es muy grande, los ndices basados en B*-Tree son ms adecuados que los ndices bitmap. Los ndices de tipo bitmap son particularmente idneos en escenarios en los que no se producen o se producen muy pocas actualizaciones sobre las columnas que conforman la clave. Una actualizacin en una de estas columnas trae implcita la modificacin de dos o ms entradas del ndice (incluidos los bitmaps). De igual forma, la insercin de un nuevo valor de la clave trae implcita una reorganizacin masiva del ndice, la cual es extremadamente costosa. Los ndices de tipo bitmap permiten acelerar ms consultas que utilicen el operador de disyuncin sobre los atributos claves. Verificar si el valor de una columna de la clave est entre un grupo de valores es sencillo en un ndice bitmap ya que slo debe efectuarse el OR bit a bit de los bitmaps asociados a las entradas de los valores en el rango de bsqueda. En los ndices basados en B*-Trees esta operacin es ms costosa. Como regla general, los ndices basados en B*-Tree son mejores para ambientes de procesamiento de transacciones en lnea (OLTP On-Line Transaction Processing), en los que suelen existir tablas de alta volatilidad (gran nmero de operaciones de insercin y eliminacin) y de alta frecuencia de actualizacin. Por otra parte los ndices bitmap son muy tiles en ambientes donde se realizan consultas muy complejas sobre tablas muy poco voltiles y que prcticamente no sufren actualizaciones. Ambientes de este tipo son los derivados del uso de tcnicas de Data Warehousing o en Sistemas de soporte a la decisin (DSS Decisin Support Systems).
Manipulacin de ndices
Como se mencion anteriormente, ORACLE mantiene de forma automtica tanto los ndices primarios como los secundarios que se hayan definido sobre las tablas de un esquema. Los parmetros de almacenamiento fsico que pueden definirse sobre un ndice son los mismos definibles para una tabla excepto el parmetro PCTUSED. Las operaciones del DML trabajan sobre los ndices de la siguiente forma: Cuando se crea un ndice (utilizando el comando del DDL CREATE INDEX que veremos posteriormente), ORACLE automticamente asigna un segmento de ndice para almacenar la estructura del ndice a crear. Los parmetros de configuracin del segmento seguirn los valores por defecto o los indicados por el usuario en el comando CREATE INDEX. Los bloques de datos en los extents del ndice se irn llenando de acuerdo con los valores de la clave de la tabla hasta ocupar el espacio indicado por el parmetro PCTFREE (bien sea el valor por defecto o el indicado por el usuario en el comando CREATE INDEX). Esto quiere decir que de cada bloque se dejar un espacio equivalente al PCTFREE % del tamao disponible en el bloque (tamao de bloque de datos ORACLE menos el overhead del bloque). Este espacio se dejar para cuando se efecten inserciones en la tabla (se ejecute el comando INSERT del DDL). Crear un ndice sobre una tabla sin filas tendr como efecto generar la estructura de ndice sin claves pero con el segmento de ndices reservado y vaco. Cuando ocurre una operacin de insercin de una fila en la tabla, cada ndice es actualizado siguiendo el siguiente procedimiento:
Pgina 10 de 16
Se buscar la posicin de insercin en la estructura del ndice de acuerdo con los algoritmos de insercin de la estructura. o La clave a ser insertada ser almacenada como entrada en el mismo bloque de datos ORACLE donde se encuentra el nodo intermedio en el que debe almacenarse la clave en la estructura, para tal fin se utilizar el espacio reservado a travs del parmetro PCTFREE. o En caso de splits de nodos intermedios, stos se almacenarn preferentemente en el mismo bloque de datos ORACLE, utilizando el espacio reservado a travs del parmetro PCTFREE. o En cualquier caso slo se recurrir a un nuevo bloque de datos ORACLE cuando no sea posible aprovechar el espacio que se haba reservado a travs del parmetro PCTFREE. Cuando ocurre una eliminacin, esta se refleja slo lgicamente en la estructura de bloques de datos ORACLE que almacenan el ndice. Esto quiere decir que el espacio liberado por la eliminacin no se har realmente efectivo hasta que todas las entradas almacenadas en un bloque de datos ORACLE hayan sido eliminadas. Esto implica que el uso de espacio en operaciones entrelazadas de inserciones y eliminaciones no se aprovecha mientras un bloque de datos ORACLE por completo posee entradas de ndice y bloques intermedios que hayan sido eliminados. El mismo criterio aplica para la concatenacin de los nodos intermedios en la estructura del ndice basado en B*-Tree. Las actualizaciones se manejan como dos operaciones atmicas de eliminacin de clave e insercin de clave. Ntese que por lo tanto una actualizacin trae implcito un uso de espacio mucho mayor que la mera extensin del espacio para almacenar el nuevo valor de la clave, ya que la entrada del ndice no ser devuelta como espacio disponible de acuerdo con el procedimiento de eliminacin.
Es importante destacar que: El parmetro PCTFREE slo tiene efecto cuando se crea el ndice. Posteriormente el espacio que se haba declarado como libre es utilizado en las operaciones de insercin de filas y actualizacin de claves. Las operaciones de modificacin de columnas NO afectarn aquellos ndices en los que estas no formen parte de la clave. Esto se debe a las polticas de asignacin de ROWID de ORACLE. An cuando ocurra migracin o encadenamiento de una fila, sta no perder el ROWID inicial que le fue asignado y por lo tanto la entrada de la fila en los ndices definidos sobre la tabla que la incluye no se ven modificados tras este tipo de operaciones.
Pgina 11 de 16
ndice. En tal sentido, las filas de una tablas organizada por ndice no poseen ROWID y slo se necesita un segmento para almacenar toda la tabla. Una tabla organizada por ndice difiere de una tabla en las siguientes caractersticas: Como las filas no poseen ROWID, la identificacin de una fila de una tabla organizada por ndice viene dada por el valor de las columnas que forman la clave primaria de la tabla. Sobre una tabla comn pueden mantenerse diferentes ndices. Al no existir ROWIDs en una tabla organizada por ndice no es posible crear ndices secundarios sobre la tabla. Cuando se efecta un barrido global (se devuelven o procesan todas las filas) de una tabla regular, el orden con el que se recorren las filas no es predecible para el usuario ya que depende de cmo fueron almacenadas stas a lo largo de la vida de la tabla. En una tabla organizada por ndice el orden de recorrido es estrictamente dirigido por el orden establecido sobre los valores de la clave primaria de las filas que posee la tabla. Sobre una tabla organizada por ndice no es posible definir constraints de tipo UNIQUE. Esto se debe a que todo constraint de tipo UNIQUE trae implcita la generacin automtica de un ndice secundario sobre la(s) columna(s) que (en conjunto) se declara(n) como nicas. Esta restriccin tiene, desde luego, impacto en lo que estamos acostumbrados a hacer cuando representamos claves alternas en un diseo relacional. En un escenario en el cual el diseo lgico relacional de una base de datos incluye tablas donde existan claves alternas que luego se modelan a nivel de diseo fsico en ORACLE como tablas organizadas por ndice, debern crearse tantos triggers sobre la tabla organizada por ndice como claves alternas posea la tabla. Cada trigger deber especificar la semntica de la unicidad requerida por el concepto de clave primaria toda vez que se inserte una fila o modifique alguno de los campos de la clave alterna cuya semntica preserva el trigger. Una tabla organizada por ndice no puede participar en una transaccin distribuida, no puede ser particionada y tampoco replicada. En este curso no estudiaremos los aspectos relativos a bases de datos distribuidas por lo que a nuestro nivel no es de relevancia para el diseo este tipo de restricciones que imponen las tablas organizadas por ndice. Un aspecto de entonacin interesante en las tablas organizadas por ndice es diseo fsico de este tipo de tablas utilizando ROAs (Row Overflow Areas). La motivacin principal para la definicin de este tipo de estructura anexa, e intrnsicamente relacionada con las tablas organizadas por ndice, radica en el hecho de que una tabla organizada por ndice puede poseer columnas que sean de tipos de datos con grandes requerimientos de espacio, o filas cuyo tamao promedio requiera mucho espacio (por ejemplo el de una tabla con muchas columnas). En este tipo de escenarios el almacenamiento de las entradas del ndice podra ser tal que existiera una entrada del ndice por bloque de datos lo cual degenerara enormemente el rendimiento de las operaciones de consulta de datos. Cuando se crea una tabla organizada por ndice con ROA: El DBMS crea una tabla lgica (para el usuario el manejo de una tabla organizada por ndice es transparente) con el nombre definido en la instruccin CREATE TABLE. La informacin de dicha tabla se almacena en el diccionario de datos de igual forma que sucede con las tablas comunes. Pgina 12 de 16
Se genera un segmento de ndice cuyo nombre es el nombre del constraint de clave primaria definido (o un nombre automtico en el caso de que no se le asigne nombre a tal constraint). Los parmetros de almacenamiento y el tablespace donde residir este segmento sern los indicados en el comando o en la configuracin del usuario que crea la tabla. Se crea un segmento de tablas correspondiente a la ROA. En este segmento se almacenarn las row pieces de aquellas filas con gran requerimiento de espacio. El nombre de este segmento de tabla es SYS_IOT_OVER_n, donde n es el object_id de la tabla organizada por ndice que fue generado internamente por el DBMS en el primer paso de este procedimiento.
Adicionalmente a los parmetros de entonacin propios de una tabla comn, las tablas organizadas por ndice permiten indicar cierta informacin de control sobre el ROA. Estos parmetros estn estrechamente relacionados y son: PCTTHRESHOLD: Este parmetro permite establecer el denominado umbral de overflow. Este parmetro (con valores permitidos entre 0 y 50) permite indicar qu porcentaje del espacio reservado en todo bloque de ndice para una tabla no organizada puede ser utilizado por una fila de la tabla. Si el espacio requerido por una fila excede al espacio calculado en base al tamao de la zona reservada y el umbral de overflow, entonces todas las columnas de la tabla que vengan despus de la indicada en la clusula INCLUDING (tomando como orden el establecido en el comando CREATE TABLE) se colocarn como un row piece en el ROA. Por el contrario, si la clusula OVERFLOW no se especifica, toda fila que exceda el umbral de overflow no podr ser insertada. INCLUDING: Permite indicar el punto de divisin entre las columnas que sern almacenadas en la porcin de ndice y en el ROA. Este punto de divisin consiste en una de las columnas de la tabla, de acuerdo con el orden en el que se especifican en el CREATE TABLE. Si este parmetro no se especifica y una fila excede el umbral de overflow, entonces todas las columnas que no forman parte de la clave primaria sern almacenadas en el ROA. Son aceptables como puntos de divisin la ltima columna que forma parte de la clave primaria o cualquier columna que no forma parte de la clave primaria. OVERFLOW: especifica la informacin de ubicacin y parmetros de entonacin del segmento donde se almacenar el ROA. La informacin incluye el nombre de un tablespace y sus parmetros de almacenamiento y utilizacin de bloques (PCTFREE; PCTUSED, PCTINCREASE, MINEXTENT, MAXEXTENTS, etc.). La figura 4.2 muestra la estructura de una tabla organizada por ndice con ROA.
Pgina 13 de 16
Figura 4.2 Relaciones entre segmentos de una tabla organizada por ndice
Pgina 14 de 16
Validar la integridad de las estructuras de memoria secundaria que se utilizan para representar un objeto a nivel fsico. Por ejemplo, en situaciones no comunes (principalmente debidas a fallas en el hardware o en el sistema) un ndice puede corromperse y no realizar su trabajo correctamente. Cuando se valida un ndice se puede confirmar que cada entrada en el mismo apunte a la fila correcta en la tabla asociada al ndice. Identificar las filas encadenadas o migradas en una tabla o cluster. En particular este comando y su uso se discutieron anteriormente.
Para Tablas: o Nmero de filas. o Nmero de bloques de datos ORACLE que para los momentos del clculo (computo exacto o estimacin) contienen datos de la tabla. o Nmero de bloques de datos ORACLE que para el momento del clculo (cmputo o estimacin) no se han utilizado. o Espacio promedio disponible en los bloques de datos donde se almacenan las filas de la tabla. o Filas de la tabla que se encuentran encadenadas o migradas. o Longitud promedio de una fila de la tabla incluyendo el overhead impuesto por ORACLE para su almacenamiento. Estas estadsticas se almacenan en las vistas XXX_TABLES (XXX es DBA, USER u ALL) que mantiene el diccionario de datos. Para Indices: o Profundidad del ndice. o Nmero de hojas en el ndice. o Nmero de claves indizadas. o Nmero promedio de bloques hoja por clave indizada. o Nmero promedio de bloques de datos por clave indizada. o Factor de agrupacin, es decir cuan bien ordenadas se encuentran las filas sobre los posibles valores de claves indexadas. Estas estadsticas se almacenan en las vistas XXX_INDEXES (XXX es DBA, USER u ALL) que mantiene el diccionario de datos. Para Columnas de una tabla: El cmputo de estadsticas para columnas se basa en el uso de histogramas de valores que representan informacin estadstica sobre los valores utilizados en las columnas de una tabla. Las estadsticas computadas incluyen: o Nmero de valores diferentes para las columnas o Valor mximo y mnimo para cada categora de valores presente en el histograma. Este tipo de cmputos sale del alcance de esta asignatura y por lo tanto no se discutir su utilizacin en el diseo fsico y entonacin de la base de datos.
Pgina 15 de 16
Para Tablas Agrupadas: Para un conjunto de tablas agrupadas indexadas ORACLE permite obtener estadsticas: o En el caso de que el ndice se base en B*-Trees se podr obtener el nmero promedio de bloques de datos ORACLE que cada clave requiere para almacenar todas las filas del cluster. o En el caso de ndices basados en hashing se podr obtener el nmero promedio de bloques de datos ORACLE que cada clave en el hashing requerir para almacenar las filas que posean dicho valor para la clave. Las estadsticas anteriores pueden ser obtenidas consultando las vistas XXX_CLUSTERS (XXX puede ser USER o DBA).
Alguna de las variaciones para el comando ANALYZE son las siguientes: ANALYZE TABLE <tabla> COMPUTE STATISTICS que permite efectuar el cmputo de las estadsticas de la tabla indicada. ANALYZE TABLE <tabla> ESTIMATE STATISTICS que permite estimar estadsticas de la tabla indicada. Adicionalmente se puede indicar el tamao de la muestra (utilizando la clusula SAMPLE <numero> ROWS) o el porcentaje de la tabla a muestrear (utilizando la clusula SAMPLE <numero> PERCENT). ANALYZE TABLE <tabla> DELETE STATISTICS que eliminar las estadsticas computadas o estimadas anteriormente sobre la tabla indicada.
Las variaciones antes mencionadas aplican para ndices y clusters. En lo que respecta a validacin de estructuras, la opcin VALIDATE STRUCTURE del comando ANALYZE permite realizar esta funcin. Si la estructura no presenta corrupciones no se retornar ningn error. En caso contrario la instruccin devolver error en la estructura y ser necesario regenerar la misma (utilizando una secuencia de comandos DROP del objeto y CREATE del objeto). De igual forma, si se desea evaluar un objeto ms todas aquellas estructuras directamente asociadas a l se puede utilizar la clusula CASCADE. Por ejemplo el comando ANALYZE TABLE EMPLEADO VALIDATE STRUCTURE CASCADE; analizar la estructura de la tabla EMPLEADO y la de todos los ndices que sobre ella se hayan definido.
Pgina 16 de 16