19
E$IUDIODI CASOS ..-' '-, .. - - " , E- ' .'$ parte describe cómo los distintos sistemas de bases de datos integran :.:,,:.':::'105 diferentes conceptos descritos anteriormente eh el libro. Específica- , mente, en los capítulos 25, 26-y 27 se cubren tres sistemas de bases de -'. datos ampliamente utilizados: DB2 delBM, oraclé ySQL server de Microsoft. , cada uno de estos capítulos muestra características únicas de cada sístema de bases de datos, herramientas, variaciones y extensiones de SQL y la arquítcc- . turadel sistema, incluyendo organización del almacenamiento; procesamiento de consultas, contrcl de concurrencia y recuperación y réplicas. LOScapituloseubren solamente los aspectos.clave de los productos de bases :de datos que describen. y por consiguiente, no se deberíán utilizar tomo una ",~n ~ del producto. Además, puesto que los productos se mejo- ran pertódícemerse, los detaUesdel producto pueden cambiar. cuando se utl- liza una versión 'particular del producto hay que asegurarse de consultar lbs 'manuales de.Usuaiio para los detalles específicos . .'. Hay que considerar que tos capítulos en esta parte utilizan terminología jndustria] en lugar de académlca. Por ejemplo, se utiliza tabla en lugar de 'I'!'~i,lila en lugar de tupla y columna en lugar de atributo . . '--, . '. . . . , . , ;., - ... ,.-.

Oracle

Embed Size (px)

DESCRIPTION

 

Citation preview

Page 1: Oracle

E$IUDIODI CASOS..-''-, ..- - " ,

• E- ' .'$ parte describe cómo los distintos sistemas de bases de datos integran:.:,,:.':::'105 diferentes conceptos descritos anteriormente eh el libro. Específica-, mente, en los capítulos 25, 26-y 27 se cubren tres sistemas de bases de

-'. datos ampliamente utilizados: DB2 delBM, oraclé ySQL server de Microsoft., cada uno de estos capítulos muestra características únicas de cada sístema debases de datos, herramientas, variaciones y extensiones de SQL y la arquítcc-

. turadel sistema, incluyendo organización del almacenamiento; procesamientode consultas, contrcl de concurrencia y recuperación y réplicas.

LOScapituloseubren solamente los aspectos.clave de los productos de bases:de datos que describen. y por consiguiente, no se deberíán utilizar tomo una",~n ~ del producto. Además, puesto que los productos se mejo-

ran pertódícemerse, los detaUesdel producto pueden cambiar. cuando se utl-liza una versión 'particular del producto hay que asegurarse de consultar lbs'manuales de.Usuaiio para los detalles específicos .

.'. Hay que considerar que tos capítulos en esta parte utilizan terminologíajndustria] en lugar de académlca. Por ejemplo, se utiliza tabla en lugar de

'I'!'~i,lila en lugarde tupla ycolumna en lugar de atributo .. '--, . '. .

.. , .

,

;., -... ,.-.

Page 2: Oracle

eua~do se fund~- Grade en 1977 COtTI? Software Developmcnt Laborat~iies por LarryEllison, Bah Miner y Ed Dates no habla productos de bases de datos relacionales comer-ciales. La compañía, cuyo nombre cambió posteriormente a Oracle, se estableció para

construir un sistema de.gestión de bases de datos como producto comercial y fue la primera enlanzarlo al mercado. Desde entonces Oraclc ha mantenido una posición líder en el mercado delas bases de datos relacionales. pero con el paso de los años su producto y servicios ofrecidoshan crecido más allá del servicio de este 'campo. Aparte-de las herramientas directamente rela-cionadas con el desarrollo y gestión de bases de datos Oracle vende herramientas de inteligen-cia de negocio, incluyendo sistemas de gestión de bases de datos multidimensionales y un SCT-

vidor de aplicaciones con una integración cercana al servidor de la-base de datos.Aparte de los servidores y herramientas relacionados con las bases de datos, la compañía

ofrece software para la planificación empresarial de recursos y gestión de relaciones con elcliente, incluyendo áreas corno finanzas, recursos humanos, manufactura, márketing, ventas ygestión de cadenas de 'suministro. La unidad Business OnLine de Oracle ofrece servicios enestas áreas como un proveedor de servicios de aplicación.

Este capítulo cubre un subconjunto de características, opciones y funcionalidad de los pro-ductos Oracle. Continuamente se desarrollan nuevas versiones de; los productos, por lo que lasdescripciones dc los productos están sujetas a cambios. Este conjunto de caracrerísucas des-crito aquí está basado en la primera versión de Oracle9i. Antes de abordar a fondo cada uno de.los temas se resumirá la motivación de cada uno de estos tipos de datos y algunos problemasimportantes del trabajo con ellos.

Oracle proporciona una serie de herram icntas para eldiseño, consulta, generación de informes y análisis dedatos para bases de datos, incluyendo OLAP.

25,1.1.Herramientas para el diseño de basesde datos

La mayor parte de las herramientas de diseño de Ora-eleestán incluidas en Oracle Internet Developrnenr Sui-te. Se trata de una familia de herramientas para los dis-tintosaspectos de desarrollo de aplicaciones, incluyendoherramientas. para el desarrollo de formularios, mode-lado de datos, informes y consultas. La familia de pro-ductossoporta el estándar UML (véaseel Apartado 2,10)parael modelado. Proporciona modelado de clases paragenerar código para componentes de negocio para unentorno Java así como modelado de actividades para elmodelado del flujo de control de propósito general. Lafamilia también soporta XML para el intercambio dedatos con otras herramientas UML.

La principal herramienta de diseño de bases de dalasen la familia es Oracle Designer, que traduce la lógicadenegocio y el flujo dedatos en definiciones de esque-masy guiones procedimenrales para' la lógica de las apli-

cacioncs. Soporta varias técnicas de modelado talescomo diagramas E-R, ingeniería de información y aná-lisis y diseño de objetos. Oracle Dcsigner almacena eldiseño en Oracle Repository, que sirve como un únicopunto de meradaros para la aplicación.

Los metadaros se pueden entonces utilizar para gene-rar formularios e informes. Oracle Repository propor-ciona gestión de la configuración para objetos de basesde datos, formularios, clases Java, archivos XML y otrostipos de archivos.

La familia también contiene herramientas de de-sarrollo de aplicaciones para generar formularios, infor-mes, y herramientas para distintos aspectos de desa-rrollo basado en Java y XML. El componente deinteligencia de negocio proporciona JavaBeans pata fun-cionalidad analítica tal 'como visualización de datos,consultas y cálculos analíticos.

Oracle también posee una herramienta de desarrollóde aplicaciones para el almacén de datos. Oraele Ware-house Builder. warehouse Builder es una herramientapara el diseño e implantación de todos los aspectos deun almacén de datos, incluyendo el diseño del esque-ma, asignaciones de datos y transformaciones, proce-samiento de carga de datos y gestión de meradatos, Ora-

611

..:'~.

i

II

Page 3: Oracle

'1,

,.,111,;.

~l'oi.llItil~"""4.¡¡j;

FUNDAMENTOS DE BASES DE DATOS

ele warehouse Builder soporta los esquemas 3FN y enestrella y puede también importar diseños desde OracleDesigner.

25.1.2. Herramientas de consulta

Oracle proporciona herramientas de consulta, genera-ción de informes y análisis de datos ad hoc, incluyen-doOLAP.

Oracle Discoverer es una herramienta basada en Webpara realizar consultas, informes, análisis y publicaciónWeb ad hoc para usuarios finales y analistas de datos.Permite a los usuarios.abstraer y concretar conjuntos deresultados de datos pivote y almacenar cálculos comoinformes que se pueden publicar en una serie de forma-tos tales corno hojas de datos o HTML. Discoverer-con-tiene asistentes que ayudan a los usuarios finales a visua-lizar-los datos. corno gráficos. Orac1e9i soporta un amplioconjunto de funciones analíticas tales como la agrega-ción de clasificación y traslado en SQL. La interfaz deconsulta de Discoverer puede generar SQL del que se'puede aprovechar su funcionalidad y puede proporcio-nar a los usuarios finales una rica funcionalidad analíti-ca. Puesto que el procesamiento tiene lugar en el' sistemade gestión de.la base de daros relacional, Díscoverer norequiere un complejo motor de cálculo en el lado delcliente, y hay una versión de Discoverer con exploración.

Oracle Express Server es un 'servidor de bases dedatos multidimensionales. Soporta una amplia variedadde consultas analíticas, así como previsiones, modela-do y gestión del escenario. Puede utilizar un sistema degestión de bases de datos relacionales como un dorsalpara almacenamiento o utilizar su propio almacena-miento multidímensional de los daros.

Con la introducción de los servicios OLAPcn Ora-cly9i, Oracle está evitando un motor de almacenamien-to separado y trasladando la mayor parte de los cálculosa SQL. El resultado es un modelo donde todos los datosresiden en el sistema de gestión de la base de datos rela-cional, y les-cálculos que no se pueden realizar en SQLse realizan en un motor de, cálculo que se ejecuta en elservidor de la base de datos. El modelo también pro-porciona una interfaz para la programación de aplica-

ciones Java OLAP. Hay muchas razones para evitar unmotor de almacenamiento multidimerísional separado:

• Un motor relacional puede dimensionarse a con-juntos de datos mucho mayores.Se puede utilizar un modelo de seguridad comúnpara las aplicaciones analíticas y el almacén dedatos.El modelado multidimensional se puede integrarcon el modelado del almacén de datos.

• El sistema de gestión de la base de datos relacio-nal tiene un conjunto mayor de características yfuncionalidad en muchas áreas tales como alta dis-ponibilidad, copia de seguridad y recuperación ysoporte para herramientas de terceros.

No hay necesidad de formar administradores debases de datos para dos motores de bases de datos.

El principal reto al evitar un motor de bases de datosmultidimensional separado es proporcionar el mismorendimiento. Un sistema, de gestión de bases de datosmutidimensional que materializa todo o grandes partesde un cubo de datos puede ofrecer tiempos de respues-ta muy cortos para muchos cálculos. Oracle ha enfoca-do este problema de dos formas;

Oracle ha agregado soporte SQL para un amplierango de funciones analíticas, incluyendo cubos,abstracciones.conjuntos de agrupación, clasifica-ciones (tanks), agregación de traslado, funcionesíed y lag, cajones de histograma, regresión linealy desviación estándar, junto con la capacidad deoptimizar la ejecución de dichas funciones en elmotor de la base de datos.Oracle ha extendido las vistas materializadas parapermitir funciones analíticas, en particular los con-juntos de agrupación. La capacidad de materiali-zar partes o todo el 'cubo es primordial para el ren-dimiento de un sistema de gestión de bases de datosmultidimensionales y las, vistas materializadas pro-porcionan al sistema de gesñón de bases de datosrelacionales Ia.capaoidad de realizar lo mismo.

Oracle9i soporta todas las características principalesde SQL:1999. con algunas pequeñas excepciones talescomo, distintos tipos de datos. Además, Oracle sopor-ta un gran número de otras constructoras del lengua-je, algunas de las cuales éasan con SQL:1999, mien-tras que otras son específicas de Oracle en sintaxis ofuncionalidad. Por ejemplo Oracle soporta HlS opera-ciones OLAP descritas en el Apartado 22.2, inclu-yendo clasificación, agregación de traslado, cubos yabstracción. .

Algunos ejemplos de las extensiones SQL de Oracleson:

• connect by, que es una forma de recorrido de érbo-les que permite cálculos al estilo del cierre transi-tivo en una única instrucción SQL. Es una sinta--xis específtca de Oracle para una característica queOracle tenía desde' los años 80.

• Upsert e insércíones en varias tablas. La opera-ción upsert combina una actualización y una inser-

612

Page 4: Oracle

ción y es útil para combinar datos nuevos con anti-guos en aplicaciones de almacén de datos. Si unanueva fila tiene el mismo valor de clave 'que unafila antigua se actualiza la fila antigua (por ejem-plo agregando los valores desde la nueva fila), enotro caso se inserta la nueva fila en la tabla. Lasinserciones 'en varias tablas permiten actualizarvarias tablas basándose en una única exploraciónde los nuevos datos.

cláusula with, que se describe en el Ap~d04.8.2.

25.2~1.Características relacionales orientadasa objetos

Oracle tiene soporte extensivo para constructores rela-cionales orientados a objetos, incluyendo:

• Tipos de objetos. Se soporta un único modelo deherencia para las jerarquías- de tipos.

• Tipos de colecciones . Oracle soporta varrays, queson arrays de longitud variable, y tablas anidadas.

Tablas de objetos. Se utilizan para almacenar obje-tos mientras se proporciona una vista relacional delos atributos de los objetos.

Funciones de tablas. Son funciones que produ-cen conjuntos de filas como salida y se pueden uti-lizaren la cláusula from de una consulta. Las fun-ciones de tablas se pueden anidaren Oracle: Si unafunción de tablas se utiliza para expresar algún for-mulario de transformación de datos, el anidamientode varias funciones permite que se expresen variastránsformacíones en una única instrucción.

• Vistas de objetos. Proporcionan una vista tíe.tablasde objetos virtuales de datos almacenados en unatabla relacional normal. Permite acceder o ver losdatos en un estilo orientado a objetos.incluso si losdatos están realmente almacenados en un formatorelacional tradicional.

Métodos. Se pueden escribir en PLlSQL, Java o C.

• Funciones de agregación definida-s por el usua-rio. Se pueden utilizar en instrucciones SQL de lamisma forma que las funciones incorporadas talescomo sum y count.

Tipos de datos XML. Se pueden utilizar paraalmacenar e indexar documentos XML.

Oracle tiene dos lenguajes procedimentalespríncí..pales PL/SQL y Java. PL/SQL fue el lenguaje original

caerrecc 25 ORACU:

de Oraele para los procedimientos almacenados y tieneuna sintaxis similar al utilizado en ellenguaje Ada. Javase soporta mediante una máquina virtual Java dentrodel motor de, la base de datos. Oracle proporciona unpaquete para encapsular procedimientos, funciones yvariables relacionarlas en unidades únicas. Oracle sopor-ta SQLJ (SQL incorporado en Java) y IDBe y propor-ciona una herramienta para generar las definiciones declases Java correspondientes a tipos de la base de datosdefinidos por el usuario.

25,2.2.Disparadores

Oracle Proporciona varios tipos de disparadores yvarias opciones pata el momento y forma en que seinvocan (véase el Apartado 6.4 para una introduccióna los disparadores en SQL). Los disparadores se pue-den escribir en PL/SQL-o Java o como llamadas a C.Para los disparadores que se ejecutan sobre instruc-ciones LMD tales como insert, update y delete, Ora-ele soporta disparadores de filas (row) y disparadoresde instrucciones (statement). Los disparadoreg de filasse pueden ejecutar una vez por cada fila que se veaafectada (actualización o borrado, por ejemplo) por laoperación LMD. Un disparador de instrucciones seejecuta solamente una vez por instrucción. En cada-caso, el disparador se puede definir tanto corno un dis-parador befare o after dependiendo de si se va a invo-car antes o después de que se lleva a cabo la operaciónLMD.

Oraele permite la creación de disparadores insteadof para las vistas que no pueden estar sujetas a opera-ciones LMD. Dependiendo de la definición de la 'Vistapuede no ser Posible para Orac1e traducir una instruc-ción LMD en una vista a modificaciones de las labiasbase subyacentes sin ambigüedad. Por ello las opera-cienes LMD sobre vistas están sujetas a numerosas res-tricciones. Se puede crear un disparador lnstead of'sobre una vista para especificar manualmente las ope-raciones sobre las tablas base que van a ocurrir en res-puesta ala operación LMD sobre la vista. Oracle eje-cura el disparador en lugar de la operación LMD y porconsiguiente proporciona un mecanismo de rodeo delas restricciones sobre las operaciones LMD sobre lasvistas'.

Oracle también tiene disparadores que ejecutan otroseventos, tales como el inicio o finalización pe la basede datos, mensajes de error del servidor, inicio o finali-zación de sesión de un usuario e instrucciones LOD talescomo las instrucciones create, alter o drop.

613

Page 5: Oracle

FUNDAMENTOS' DE BASES DE DATOS

.e~;~:¡;~AC&NAMl~TO&·IND&XACIÓ~

En la jerga de Oracle, una base de datos consiste eninformación almacenada en archivos y se accede a tra-vés de un ejemplar, que es un área de memoria com-partida y un conjunto de procesos que interactúa conlos-datos en los archivos.

25.3.1. Espacios de tablas

Una base de dalas consiste en una o más unidades dealmacenamiento, lógicas denominadas espacios detablas. Cada espacio de tablas, a su vez, consiste en unao más estructuras físicas denominadas arctiivos dedatos. Éstos pueden ser ~chivos gestionados por el sis-tema operativo o dispositi vos en bruto.

Normalmente una base.de datos Oracle tendrá lossiguientes espacios de tablas:

• El espacio de tablas del sistema, que siempre secrea. Contiene las tablas diccionario de datos yalmacenamiento para los disparadores y los pro-cedimientos almacenados.Espacios de tablas creados para almacenar los datosde usuario. Aunque los datos de usuario se puedenalmacenar en el espacio de tablas del sistema esfrecuentemente deseable separar los datos de usua-rio de los datos del sistema. Normalmentela deci-sión sobre los otros espacios de tablas que se debencrear está basada en el rendimiento, dísponibili-dad" capacidad de mantenimiento y facilidad deadministración. Por ejemplo, puede ser útil tenervarios espacios de tablas para las operaciones ticcopia de seguridad parcial y recuperación.

Los espacios de tablas temporales. Muchas ope-raciones de base de datos requieren la ordenaciónde los datos y la rutina de ordenación puede tenerque almacenar éstos temporalmente en el disco sila ordenación no se puede realizar en memoria. Seasignan espacios de tablas temporales a la orde-nación, para realizar las operaciones de gestión deespacio involucradas en un volcado a disco máseficiente.

ln •OII;;~lid.

b'",,"11.;"~il~"',h"

Los espacios de tablas también se pueden utilizartomo un medio para trasladar dalas entre las bases dedatos. Por ejemplo; es común trasladar los datos desdeun sistema .transaccional a un almacén de datos a inter-valos regulares. Grade permite trasladar todos los datosen un espacio de tablas de un sistema a otro sencilla-mente copiando los -archivos y exportando e importan-do una pequeña cantidad de metadatos del diccionariode datos. Estas operaciones pueden ser mucho más rápi-das que descargar los datos de una base de datos y des-pués usar un descargador para insertarlas en la otra. Unrequisito para esta característica es que ambos sistemasutilicen el mismo sistema operativo.

...' ...,..-.,.., '··"_i'(-'

25.3.2. SegmentosEl espacio en un espacio de tablas se divide en unida-des, denominadas segmentos, cada una de las cualescontiene datos para una estructura de datos especifica.Hay cuatro tipos de segmentos

• Segmentos de datos, Cada tabla en un espacio detablas tiene su propio 'segmento de datos donde sealmacenan los datos de la tabla a menos que éstase encuentre dividida; si esto ocurre, existe un seg-mento de datos por división (l~ división CIl Oraclcse describe en el Apartado. 25.;}.IQ).Segmentos de índices. Cada índice en un espaciode tablas posee su propio segmento de índices,excepto los índices divididos, los cuales mantie-nen un segmento de índices por división.Segmentos temporales; Son segmentos utilizadoscuando una operación de ordenación necesita-cscri-bir datos al disto o cuando éstos se insertan en unatabla temporal.Segmentos de retroceso. Se:trata de segmentos quecontienen información para deshacer los cambiosde las transacciones de forma que se pucdadesha-cer una copia no terminada. También juegan unpapel importante en el modelo de control de con-currencia en Oraclc y para la recuperación de la basede datos, descrito en los Apartados 25.5.1 y 25.5.2.

Debajo del nivel de segmentos se asigna espacio aun nivel de granularidad, denominado extensión. Cadaextensión consiste en un conjunto de bloques contiguosde la base de daros. Un bloque de la base de datos es elnivel más bajo de granularidad en el cual Oracle ejecu-ta E/S a: disco. Un bloque de hase de la base de datosno tiene que tener el mismo tamaño que un bloque deun sistema: operati.vo. pero debería ser un múltiplo.

Oraele proporciona parámetros de almacenamientoque permiten un control detallado de cómo sé asigna ygestiona el espacio, tales como:

El tamaño de una extensión nueva que se va aasig-nar para proporcionar espacio a las filas que seinsertan en una tabla.

• El porcentaje dé utilización de espacio COl) el cualun bloque de la base de datos se considera lleno ycon el cual no se introducirán más filas en ese blo-que (dejando algo de espado libre en un bloque sepuede permitir que las filas existentes aumenten sutamaño cuando se realizan actualizaciones sin que-damos sin espacio en el bloque).

25.3.3.TablasUna tabla estándar en Orac1e está organizada en mon-tículo; esto es, la ubicación de almacenamiento de una

614

Page 6: Oracle

fila en una tabla no esté basada cn los valores conteni-dos en la fila y 'se lija cuando fa lila se inserta. Sin embar-go, si la tabla se divide. el contexto de la fila afecta a lapartición en la cual ésta almacenada. Hay varias carac-terísticas y variaciones. Oracle soporta las tablas 'ani-dadas: esto es, una tabla puede tener una columna cuyotipo de datos sea otra tabla. La tabla anidada no se alma-cena en línea en la tabla padre sino que se almacena enuna tabla separada.

Oracle soporta tablas temporales donde la duraciónde los datos es la dc la transacción en la cual se inser-tan los datos o la sesión de usuario. Los datos son pri-vados a la sesión y se eliminan automáticamente al fina!de su duración.

Una agrupación es otra forma de organización de losdatos de la tabla (véase el Apartado l l :7). El concepto.en este contexto, no se debería confundir con otros sig-nificados de la palabra agrupación, tales como los rela-cionados con la arquitectura del ordenador. En una agru-pacién las filas de tablas diferentes se almacenan juntasen el mismo bloque según algunas columnas comunes.Por ejemplo, una tabla de departamento y una tabla deempleados se podrían agrupar de fonna que cada fila enla tabla departamento se almacene junto con todas lasfilas de los empleados que trabajan en ese depanamen-10.Los valores de la clave principal o clave externa se.utilizan para determinar la ubicación de almacenamíen-io. Esta organización mejora el rendimiento cuando lasdos tablas están combinadas pero sin un aumento deespacio de un esquema desnormalizado puesto que losvalores en la tabla de departarnento no están repetidospara cada empleado. Como compromiso, una consultaque involucra solamente' la tabla departamento puedetener que involucrar un número sustancialmente masgrande de.bloques qUe si la' tabla se almacenara sola.

La organización en agrupación implica que una filapertenece a un lugar especíñco: por 'ejemplo, una nue-va fila de empleado 'se debe insertar con las otras filaspara el mismo departamento, Por consiguiente. es óbli-gatorio un índice en la columna de agrupación. Unaorganización alternativa es una agrupación asociativa.Aquí; Oracle calcula la localización de una fila apli-cando una función asociativa al valor para la columnadeagrupación. La función asociativa asigna la fila a unbloque específico en la agrupación asociativa. Puestoque no es necesario el recorrido del índice para accederauna fila según su valor de columna de agrupación, estaorganización puede ahorrar cantidades significativas deE/S a disco. Sin embargo, el número de cajones aso-ciativos y otros parámetros de almacenamiento se debenestablecer cuidadosamente para evitar problemas de ren-dimiento debido a demasiadas colisiones o malgasto deespacio debido a cajones asociativos vacíos.

La organización según agrupación asociativa y segúnagrupación normal se puede aplicar a una única tabla. Elalmacenamiento de una tabla como una agrupación ase-ciativacon la columna de.la clave principal corno la cla-vede la agrupación puede permitir un acceso basado en

CAPiTULO 25 ORACLE

un valor de clave principal con una unica B'S a disco siem-pre que no haya desbordamiento para ese bloque de datos.

25.3.4. Tablas organizadas con índices

En una tabla organizada con índices los registros se alma-cenan en un índice de árbol B en lugar de en un mon-tículo. Una .tabla organizada con 'índices requiere que seidentifique una clave única para su uso como la clave delíndice. Aunque una entrada en un índice normal contie-ne el valor de la clave y el identificador de fila de la filaindexada, una-tabla organizada con índices reemplaza elidentificador de tila con los valores .de la columna parael resto de columnas en la tabla, Comparado con el alma-cenamiento de los datos en una tabla en montículo nor-mal y la creación de, un índice según las columnas clave,una tabla 'Organizada con Indices puede mejorar el ren-dimiento y el espacio. Consideremos la lectura de todoslos valores de columna de una fila, dado su valor de cla-ve principal. Para una tabla en montículo se.requerirla unexamen del Índice seguido por un acceso a tabla median-te identificador de fila. Para una tabla organizada coníndices solamente es necesario el examen del Índice.

Los índices secundarios sobre columnas que no seanclave de una tabla organizada con índices son distintosde los índices en una tabla en montículo normal. En unatabla en montfculo cada fila posee un identificador defila fijó que no cambia. Sin embargo, un árbol B se reor-ganiza al crecer o disminuir cuando se insertan o borranlas entradas, y no hay garantía de que una fila penna-nczca en una ubicación dentro de una tabla organizadacon índices. Por ello, un Índice secundario en una tablaorganizada con índices no contiene identificadores defila normales, sino identificadores téglcos de fila. Unidentificador lógico de lila se compone de dos partes; unidentificador de tila física correspondiente a donde la filaestaba cuando se creó el índice o la última reconsuuc-ción y' un valor para la clave única. El identificador defila física se conoce como una «suposición», puesto quesería incorrecto si la fila se ha trasladado. En este caso,la otra parte' del identificador lógico de fila. el valor dela clave para la fila, se utiliza para .accedér a la misma;sin embargo. este acceso es más lento que si la suposi-ción hubiera sido correcta, puesto que involucra un reco-rrido del árbol B para la tabla-organizada con índicesdesde la raíz hasta los nodos hoja. incurriendo poten-cialrnentc en varias operaciones E/S de disco. Sin embar-go, si una tabla es altamente volátil y es probable que unbuen porcentaje de suposiciones sean incorrectas, pue-de ser mejor crear un índice secundario con solamentevalores clave. puesto LJueel uso de una suposición inco-rrecta puede producir una E/S a disco malgastada.

25.3.5'. índices

Oracle soporta varios tipos distintos de índices. El tipomás comúnmente utilizado es un índice de árbol B,creado en una ° varias columnas. (Nota: En la tcrmi-

615

Page 7: Oracle

FUNDAMENTOS DE BASES DE DATOS

nología de Oracle, como también en varios' otros siste-mas de bases de datos, un índice de árbol B es lo que sedenomina un índice dé árbol 8+ en el Capítulo 12.) Lasentradas de los índices tienen el siguiente formato: paraun índice en las columnas cot., coí, y coi); cada fila enla tabla en donde al menos una columna tenga un valorno nulo resultaría en la entrada de índice

<col] > < col, > < col, > < id-fila >

donde < cot, > denota el valor para la columna i e < id-fua > es la identificador de fila para la fila. Oracle pue-de opcionalmente comprimir el prefijo de la entrada paraahorrar espacio. Por ejemplo, si hay muchas combina-ciones repetidas de valores < col, > < col, >, la repre-sentación de cada prefijo < col, > < col! > distinto sepuede compartir entre las entradas que tienen esa com-binación de valores, en lugar de almacenarlo explícita-mente para cada entrada. La compresión de prefijos pue-de llevar a ahorros de espacio sustanciales.

25.3.6. Índices de mapas de bits

Los índices de nUipas de bits (descritos en el Apartado12.9.4) utilizan una representación de mapa de bits paraentradas de índice que pueden llevar a un ahorro sus-tancial de espacio (y, por consiguiente, ahorro de E/S adisco), cuando la columna indexada tiene un númeromoderado de valores distintos. Los índices de mapas debits en Oracle utilizan la misma clase de estructura deárbol B para almacenar las entradas que un índice nor-mal. Sin embargo, donde un índice normal en una colum-na tuviera entradasde la fonna < col] > < id~fi{(l>, unaentrada de índice de mapa de bits tendría la forma

< coi, > < id-füainiciat > < id-filafi1l{l1 »-c mapabirscomprímido >.

El mapa de bits conceptualmente representa el espaciode todas las filas posibles en la tabla entre los, identifi-cadores de la fila inicial y final. El número de tales filasposibles en un bloque depende de' cuántas de ellas sepueden alojar en un bloque, lo cual va en [unción delnúmero de columnas en la tabla y sus tipos de datos.Cada bit en el mapa de bits representa una fila posibleen un bloque. Si el valor de la columna de esa fila es elde la entrada de índice, el bit se establece a 1. Sí la filatiene algún otro valor o la fila no existe realmente en latabla. el bit se establece a O (es posible que la fila noexista realmente porque up bloque de la tabla puedatener un número más pequeño de filas que el númeroque se calcule como el máximo posible). Si la diferen-cia es grande.el resultado pueden ser .grandes cadenasde ceros consecutivos en el mapa de bits, pero el algo-ritmo de compresión.trata dichas cadenas de ceros, porlo que el efecto negativo se limita.

El algoritmo de compresión es una-variación de unatécnica de compresión denominada compresión de

mapas de bits alineados (Byre-Aligned Bitmap Com-pression, BBC). Esencialmente, una sección .del mapade bits donde la distancia entre dos unos consecutivos essuficientemente pequeña se almacena como mapas debits. Si la distancia entre dos unos es suficientementegrande (esto es, hay un número suficiente de ceros entreellos) se almacena el número de ceros.

Los índices de mapas de bits permiten varios índi-ces en la misma tabla para combinarse en la misma rutade acceso si hay varias condiciones sobre las columnas'indexadas en la cláusula where de una consulta. Porejemplo, para la condición

(caí, == 1 or col] == 2J and coí; > 5 and col, < > 10

Oracle podría calcular las filas que coinciden con la con-dición ejecutando operaciones booleanas sobre losmapa's de bits a partir los mapas de bits de índices sobrelas tres columnas. En este case, estas operaciones serealizarían para cada índice:

• Para el índice en col., se realizaría la disyunciónde los valores de clave 1 y 2.Para el índice en col2, todos los rnapas de bits paralos valores de la clave> 5 se mezclarían en unaoperación que corresponde a una disyunción.

• Para el 'índice en cot ; se obtendrían los mapas debits para los valores 10 y nuU. Entonces, se apli-caría, una conjunción sobre los resultados de losdos primeros índices, seguido por dos operacionesmenos booleanas de los mapas de bits para losvalores 10 y null para col'»

Todas las operaciones se realizan directamente sobre larepresentación comprimida de los mapas de bits (no esnecesaria la descompresión} y el mapa de bits resultan-te (comprimido) representa las filas que cumplen todaslas condiciones lógicas.

La capacidad de utilizar las operaciones booleanaspara combinar varios índices no está limitada a los índi-ces de mapas de bits. Oracle puede convertir identifi-cadores de filas a la representación de mapa de bits com-primidos, por lo.que se puede utilizar un índice de árbolB normal en cualquier lugar de un 'árbol binario u ope-ración de mapa de bits simplemente poniendo un ope-rador id-fila-a-mapa-de-bits en la parte superior del 'acce-so a índices del plan de ejecución.

Como regla nemotécnica, los índices de mapas debits tienden a ser más eficientes en el espacio que losíndices de árbol B si el número de valores distintos dela clave es menor que la mitad del número de filas enuna tabla. Por ejemplo, en una tabla con un millón defilas, un índice en una columna con menos de 500.000valores distintos probablemente sería menor si se crea-ra como un índice de mapa de bits. Para las columnascon un número muy pequeño de valores distintos (porejemplo, las columnas que sé refieren a propiedadestales como país, estado; género, estado marital y varios

616

Page 8: Oracle

estados indi<:;adore,s) un índice mapa de bits podríarequerir solamente una pequeña fracción del espacionormal de Un índice de árbol B nonnal. Cualquier ven-laja en el espacio también puede dar lugar a mejoras enel rendimiento en la forma de menos operaciones E/S adisco cuando se explora el índice.

25.3.7. Índices basados en funciones

Además de crear índices sobre una o varias columnasde una tabla, Oracle permite crear Indicés sobre expre-siones que involucran unao más columnas, tales comocol, + cot, * 5. Por ejemplo, la creación de un 'índicesobre la expresión upperínombres, donde upper es unafunción que devuelve la Versión eh mayúsculas de unacadena y nombre es una columna. es posible realizarbúsquedas independientes de la caja (mayúsculas ominúsculas) sobre la columna nombre, Con el fin debuscar todas las filas con el nombre «van Gogh» de unaforma eficiente se puede utilizar la condición

upper(nomhre)= 'VAN GOGH'

en la cláusula where de la Consulta. Oracle entoncescasa la condición con la definición de índice y conclu-ye que se puede utilizar el índice para recuperar todaslas filas que coincidan con «van Gogh» sin considerarlas mayúsculas y minúsculas del nombre cuando sealmacenó en la base de datos. Se puede crear un índicebasado en función como un mapa de bits o como uníndice de árbol B.

25.3.8. índices de reuníón

Un índice de reunión es un índice donde las columnas'clave no están en la, tabla que se referencia mediante los,identificadores de filas en el índice. Oraele soporta losíndices de reunión mapa de bits principalmente para suuso con esquemas en estrella (véase el Apartado 22.4.2).Por ejemplo, si hay una columna para 'los nombres delos productos en una tabla dé la dimensión productossepodría utilizar un índice de reunión de mapas de bitssobre la tabla de hechos con esta columna clave pararecuperar las filas de la tabla de hechos que correspon-den a un producto con un nombre específico, aunque elnombre no esté almacenado en la tabla. de hechos. Laforma en la que las filas en las tablas de hechos y de ladimensión correspondientes está basada en una condi-ción de reunión se especifica cuando se crea el índice yse convierte en parte de los [os rncradatos de índices.Cuando se procesa una consulta el optimizador busca-rá la misma condición de reunión en la cláusula wherede la consulta con el fin de determinar si es aplicable elíndice de reunión.

Oraele permite índices de reunión de mapa de bitspara tener más de una columna clave y estas columnaspueden estar en tablas diferentes. En todos los casos lascondiciones de reunión entre la tabla de hechos donde

CAPITULO 2~ ORACLF.

se construye el índice y las tablas dimensionales sedeben referir a claves únicas en las tablas dimensiona-les; esto es, una fila.indexada en la tabla de hechos debecorresponder a una única fila en cada una de las tablasde dimensión.

Oracle puede combinar un índice dé reunión de mapade bits en una tabla de hechos con otros 'índices en lamisma tabl'a (tanto si hay índices de reunión o no)mediante el uso de operadores para las operaciones boo-leanas del mapa-de bits. Por ejemplo, consideremos unesquema con una tabla de hechos para las ventas y tablasdimensionales para los clientes, productos y fechas.Supongamos que una consulta: solicita infonnaciónsobrelas ventas a los clientes en un cierto código postal quecompraron productos de una cierta categoría de pro-ducto durante un cierto periodo de tiempo. Si existe uníndice de reunión de mapa de bits sobre varias colum-nas donde las, columnas clave son las columnas de latabla de dimensión restringidas (código postal, catego-ría de producto y fecha), Oracle, puede utilizar el iñdi-ce de reunión para buscar las filas en la tabla de hechosque coinciden con las condiciones de restricción. Sinembargo, si existen índices individuales sobre una úni-ca columna para las columnas clave (o un subconjuntode ellas), Oracle puede recuperar los mapas de bits delas filas de la tabla de hechos que coinciden con cadacondición individual y utiliza la operación and boo-leana para generar un mapa de bits de la tabla de hechospara aquellas filas que satisfacen todas las condiciones.Si la consulta contiene condióones sobre algunas colum-nas de la tabla de, hechos, los Indices.de aquellas colum-nas-se podrian incluir en la misma ruta de acceso, inclu-so si fueran índices normales de árbol B o índices dedominio (Jos índices de dominio se describen poste-riormente en el Apartado 25.3.9).

25.3.9. Índices de dominio

Oracle permite que las tablas sean indexadas por estruc-turas de índices que no sean propias de Oracle. Estacaracterística de extensibilidad del servidor Oraclc per-mite a los fabricantes de software desarrollar los lla-mados cartuchos-con funcionalidad para domíniós deaplicación específicos, tales como texto, datos espacia-les, e imágenes, con la funcionalidad de indexado masallá de la proporcionada por los tipos de índice Oracleestándar. Para implementar la' lógica para crear, mante-ner y buscar en el índice, el diseñador de índices debeasegurar que se adhiere a un protocolo específico en Suinteracción con el servidor Oracle.

Un índice de dominio se debe registrar en el diccio-nario de datos junto con los operadores que soporta. Eloptimizador de Oracle considera los índices de domi-nio como una de las posibles rutas de acceso para unatabla. Oracle permite a las funciones de coste registrar-se con [os operadores de forma que el optimizador pue-da comparar el coste del usa del índice de dominio conlos de otras rutas de acceso.

Page 9: Oracle

FUNDAMENTOS DE BAS:ES DE DATOS

Por ejemplo, un índice de dominio para búsquedasde texto avanzadas puede soportar un operador coniains(contiene). Una vez que se ha registrado este operador,el índice de dominio se considerará como una ruta deacceso para una consulta como

select *from empleadoswhere containstresumen. 'LINUX')

donde resumen es una columna de texto en la tablaempleados. El índice de dominio se puede almacenarenun archivo de datos externo o dentro de una tabla Ora-ele organizada con índices. Un índice de dominio se pue-de combinar con otros índices (mapa de bits o de árbolB) en la misma ruta de acceso con la conversión entrela representación de mapa de bits y el identificador defila y usando operaciones booleanas del mapa de bits.

25.3,.10. División en particiones

Oracle soporta varias clases de división horizontal detablas e índices y esta característica tiene Una funciónprincipal en la capacidad de Oracle de soportar basesde datos muy grandes; La capacidad de dividir una tablao índice tiene ventajas en muchas 'áreas.

La copia de seguridad y recuperación es más sen-cilla y rápida, puesto que se puede realizar sobreparticiones individuales en lugar de sobre toda latabla.Las operaciones de carga en un entorno de alma-cén de datos son menos intrusivas: se pueden agre-gar datos a una partición y entonces agregar lapartición a una tabla, lo que es una operación ins-tantánea. De igual forrna, eliminar una particióncon datos obsoletos desde una tabla es muy. senci-llo en un almacén de dalas que mantenga una ven-tana de datos históricos.

• El.rendirniento de la consulta se mejora sustan-cialmente, puesto que el optimizador puede reco-nocer que solamente se tiene qu~ acceder a un sub-conjunto de las particiones de una tabla con el finde resolver I¡;¡.consulta (poda de particiones). Tam-bién el optimizador puede reconocer que en unareunión no es necesario intentar hacer correspon-der todas las tilas en una tabla con todas las filasen la otra, pero que las reuniones se necesitan rea-lizar solamente entre pares coincidentes de divi-siones (reunión por particiones).

Cada fila en una tabla dividida está asociada con unapartición específica. ESta asociación está basada en lacolumna o columnas de la división que son parle de ladefinición de una, tabla dividida. Hay varias formas parahacer corresponder valores de columna a divisiones,dando lugar a varios tipos de divisiones, cada una condistintas características: divisiones por rangos, asocia-tivas, compuestas y por listas.

"lIlI~!'~••'1,

'. "jo;

,:i\

25.3.10.1. División por rangosEn la división por rangos los, criterios de división sonrangos de valores. Este tipo de división está especial-mente indicado para columnas de fechas, en cuyo casotodas las filas en el mismo rango de fechas, digamos undía o un mes; pertenecen a la misma partición. En unalmacén de daros donde los datos se cargan desdesis-temas transaccionales a intervalos regulares, la divisiónpor rangos se puede utilizar para implementar eficien-temente una ventana de datos históricos.

Cada carga de datos obtiene su nueva propia parti-ción, haciendo que el proceso' de carga sea más rápidoy eficiente. El sistema realmente carga los datos en unatabla separada con la misma definición de columna queen una tabla dividida. Se puede entonces verificar laconsistencia de los datos, arreglarlos e Indexarlos. Des-pués de eso el sistema puede hace de la tabla separadauna nueva partición de la tabla partida mediante un sen-cillo, cambio de los metadatos en el diccionario de datos(una operación casi instantánea).

Mientras no cambien los metadatos, el proceso decarga no afecta a los datos existentes en la tabla dividi-da en ningún caso. No hay necesidad dc realizar ningúnmantenimiento de los índices existentes C9tI1() parte dela carga. Los datos antiguos se pueden eliminar de unatabla sencillamente eliminando su partición; esta ope-ración no afecta al resto de particiones. Además, las con-sultas en un entorno de almacén de datos frecuentemente;contienen condiciones que los restringen a un ciertoperiodo de tiempo, tal como una quincena o mes. Si Se.uti liza la división de datos por rangos el optimizador deconsulta puede restringir el acceso a los datos de aque-llas particiones que son relevantes a la consulta y evi-tar una exploración de toda Ta tabla.

25.3.10.2. División asociativaEn la división asociativa, una función asociativa hacecorresponder filas con divisiones según los valores enlas columnas de, la división. Este tipo dé división resul-ta útil principalmente cuando es importante distribuirlas tilas equitativamente entre las particiones o cuandolas reuniones por particiones son importantes para elrendimiento de la-consulta.

25.3.10.3. División compuestaEnla división compuesta la tabla se divide por rangos,pero cada panición tiene subpaniciones mediante eluso. de división asociativa. Este tipo de división com-bina las ventajas de la división por rangos y la divisiónasociativa.

25.3.10.4. "División por listasEn la división por listas los valores asociados con una,partición panicular están en una lista; Este tipo de divi-sión es útil si los datos en la columna de división tienenun conjunto relativamente pequeño de valores discre-tos. Por ejemplo, una tabla con una columna provincia

6"

Page 10: Oracle

se puede partir implícitamente por región geográfica sic-ada lista de particiones tiene las provincias 'que perte-necen-a Ia misma región.

25.3.11. Vistas materializadas

La caractenstíca de la vista materializada (véase el Apar-tado' 3.5.1) permite almacenar el resultado de una Con-sulta SQL y utilizarlo en un procesamiento posterior.Además, Oracle mantiene el resultado materializado,actualizándolo cuando se actualizan las tablas a las quese hicieron referencia en la consulta. Las vistas mate-rializadas se utilizan en el almacén de datos para acc-lerar el procesamiento de la consulta, pero esta tecno-logía también se utiliza pata la réplica en entornosdistribuidos y móviles.

En el almacén de datos, un uso común de vistas mate-rializadas es, resumir los datos. Por ejemplo, un tipocomún de consulta solicita «la suma dc las ventas de cadacuatrimestre durante lbs últimos dos años». El precalcu-lo de los resultados, o algún resultado parcial. de dichaconsulta puede acelerar drásticamente el procesamientode la consulta comparado a calcularlo desde cero con laagregación de todos los registros de ventas por detalle.

Oracle soporta' reescrituras automáticas de las con-sultas que' aprovechan cualquier vista materializada útilcuandose.resuelve una consulta. La reescritura consis-te en cambiar la consulta para utilizar la vista materia-lizada en lugar de las tablas originales en la consulta.Además, la reescritura puede agregar reuniones adicio-nales o procesamiento de 'agregación si SOn necesariaspara obtener el resultado correcto. Por ejemplo, si unaconsulta necesita las ventas por cuatrimestre, la rees-critura puede aprovechar una vista que materializa lasventas por mes, añadiendo agregación adicional paraabstraer los meses a cuatrimestres. Oracle tiene un tipode objeto de metadaros denominado dimension que per-mite las relaciones jerárquicas en las tablas a definir.Por ejemplo, una tabla de la dimensión temporal en unesquema en estrella Oraele puededefinir un objeto de

CAPiTULO 25 Ol'AC-:IE

metadatos.qhi¡ension para especificar cómo se abstraenlos días a meses, los meses a Cuatrimestres, los cuatri-mestres a 'años y así sucesivamente. De igual forma sepueden especificar las propiedades jerárquicas relacio-nadas con la geografía, por ejemplo, cómo los distritosde ventas. se abstraen a regiones. La lógica de la rees-critura de la consulta examina estas relaciones puestoque permite utilizar una vista materializada para clasesmás amplias de consultas.

El objeto contenedor para una vista materializada esuna tabla, lo que significa que una vista materializadase puede indexar, dividir o estar sujeta.a otros contro-les para mejorar el rendimiento de la consulta.

Cuando hay cambios en los datos de las tablas refe-renciadas en la consulta que define una vista materiali-zada se debe actualizar la vista materializada para reffc-jar dichos cambios. Oracle soporta tanto la actualizacióncompleta de una vista materializada como una actuali-zación rápida incremental. En una actualización com-pleta Oracle vuelve a calcular la vista materializada des-de Cero, lo cual puede ser la mejor opción si las tablassubyacentes han tenido cambios significativos, pcr ejem-plo, debidos a una carga masiva. En una-actualizaciónincremental Oracle actualiza la vista utilizando regis-tros que fueron cambiados en las tablas subyacentes: laactualización de la vista es inmediata, esto es, se eje-cuta como parte de la transacción que cambió las tablassubyacentes. La actualización incremental puede sermejor si el número de filas que se han cambiado espequeño. Hay algunas restricciones sobre las clases deconsultas según las que una vista materializada se pue-de actualizar de forma incremental (y otras que indicansi una vista materializada siquiera se puede crear).

Una vista materializada es similar a un índice en elsentido que, aunque puede mejorar el rendimiento de laconsulta, usa espacio, y su creación y inantenimiento con-sume recursos. Para ayudar a resolver este compromisoOracle proporciona un paquete que puede aconsejar alusuario de las vistas materializadas más efectivas en elcoste, dada una carga de trabajo particular como-entrada.

Oracle soporta una gran variedad de técnicas de proce-samiento en su motor de procesamiento de consultas.Algunas de las más importantes se describen aquí bre-vemente.

25.4.1. Métodos de ejecución

Los datos se pueden acceder mediante una serie demétodos' de acceso:

Exploración de tabla completa. El procesador dela consulta explora toda la tabla y obtiene infor-

mación sobre los bloques que forman la tabla delmapa de extensión y explorando esos bloques.

• Exploración de índices. El procesador crea unaclave de comienzo y/o finalización a partir de lascondiciones en la consulta y la utiliza para explo-rar una parte relevante del índice. Si hay colum-nas que se tienen que recuperar, que no son partedel índice, la exploración del índice sería seguidapor un acceso a la tabla mediante el índice del iden-tificador de fila. Si no hay disponible ninguna cla-ve de inicio o parada la exploración sería unaexploración de índice completa.

619

Page 11: Oracle

FUNDAMENTOS DE BASES DE OATOS

Exploración rápida completa de Índices. El pro-cesador explora las extensiones.de la misma for-ma que la extensión de tabla en una exploraciónde tabla completa. Si el Índice contiene todas lascolumnas que se necesitan en el Índice y no haybuenas claves de inicio y parada que puedan redu-cir significativamente esa porción del índice quese exploraría en una exploración de índices nor-mal. este método puede ser la forma más rápida deacceder a los datos. Esto es porque la exploraciónrápida completa aprovecha de forma completa laEIS de disco de varios bloques. Sin embargo. adiferencia de' una exploración completa normal,que recorre los bloques hoja del índice en orden,una exploración rápida completa no garantiza quela salida preserve el orden del indice.

• Reunión de Índices. Si una consulta necesitasolamente un pequeño subconjunto de columnasde una tabla ancha. pero ningún 'índice contienetodas estas columnas. el procesador puede utilizaruna reunión de índices para generar la informaciónrelevante sin acceder a la tabla, reuniendo variosíndices que contienen en conjunto las columnasnecesarias. Ejecuta las reuniones como reunión porasociación sobre los identificadores de filas desdelos distintos índices.Acceso a agrupaciones y agrupaciones asocia-das. El procesador accede a los datos utilizando laclave de 'a&rupaciói1.

Oracle.tiene diversas formas de combinar informa-ción desde varios índices en una única ruta de acceso.Esta posibilidad permite varias condiciones en la cláu-sula where que se pueden utilizar conjuntamente paracalcular el conjunto de resultados de la forma más efi-cientemente posible. La funcionalidad incluye la capa-cidad de ejecutar las operaciones booleanas conjunción.disyunción y diferencia sobre mapas de bits que repre-sentan los identificadores de filas. Hay también opera-dores que hacen corresponder una lista de identificado-res de filas con mapas de bits y viceversa, lo que permiteque los índices de árbol B normales y los índices demapas de bits utilicen la misma ruta de acceso. Además,para muchas consultas que involucran count (*) enselecciones sobre una tabla el resultado se puede cal-cular simplemente contando los bits activados en elmapa de bits generado mediante la aplicación de lascondiciones de la cláusula where sin acceder a la tabla.

Oracle soporta varios tipos de-reuniones en el motorde ejecución: reuniones internas, externas, semireunio-nes y antirreuníones (una antirreunión en Oracle devuel-ve las filas de la parte izquierda de la entrada que nocoinciden con ninguna fila en la parte derecha de la entra-da; esta operación-sedenominaentisemirreunión en otroslibros). Evalúa cada tipo de reunión mediante uno de lostres métodos: reunión por asociación, reunión por mez-cla-ordenación o reunión en bucle. anidado.

25.4.2. Optimización

En el Capítulo 14 se ha discutido el tema general de laoptimización de la consulta. Aquí discutimos la opti-mización en el contexto de Orácle.

25.4~2.1.Transformaciones de consultasOracle realiza la optimización de consultas en variospasos. La mayoría de las técnicas relacionadas con lasrransformaciones.de consultasy reescritura tienen lugarantes de la selección de la ruta de acceso, pero Oracletambién soporta varios tipos de transformaciones deconsultas basadas en el costo que generan un plan com-pleto y devuelven una estimación del costo para-la ver-sión estándar de la consulta y otra que,ha sufrido trans-formaciones avanzadas. No todas las técnicas detransformación de consultas tienen garantizado su bene-ficio para cada consulta, pero mediante la generaciónde una estimación del coste para el mejor plan sin y conla transformación aplicada. Oracle puede adoptar unadecisión inteligente.

Algunos de los tipos principales de transformacionesy reescrituras soportados por Oracle son los siguientes:

• Mezcla de vistas. La referencia deja vista en unaconsulta es reemplazada por la definición de la vis-ta. Esta transformación no es aplicable a todas lasvistas.Mezcla compleja de vistas. Oracle ofrece estacaracterística para ciertas clases de' vistas que noestén sujetas a la mezcla normal de vistas puestoque tienen un group by osejeet distinct en ladefi-nición de la vista. Si dicha vista se combina conotras tablas, Oracle puede conmutar las reunionesy la operación de ordenación utilizada por groupby o distinct.

• Subconsultas planas. Oracle tiene una serie detransformaciones que convierten varias. clases desubconsultas en reuniones, semirreunioúes o anti-rreuniones.Reescritura' de vistas materializadas; Oracle tie-ne la capacidad de reescribir una consulta auto-máticamente para aprovechar las vistas materia-lizadas. 'Si alguna parte de la consulta se puedecasar con una vista materializada existente. Ora-ele puede remplazar esta parte de la consulta conuna referencia a la tabla en la cual la vista estámaterializada. Si es necesario, Grade agrega con-diciones de reunión u operaciones group by parapreservar la semántica de la consulta. Si son apli-cables varias vistas materializadas. Oracle reco-ge la que reduce la mayor cantidad de datos quese tienen que procesar. Además. Oracle somete laconsulta reescrita y la versión original al procesocompleto de optimización produciendo un plan deejecución y un coste asociado estimado para cadauna. Oracle entonces decide si ejecutar la versión

620

Page 12: Oracle

original o la reescrita de la consulta según la esti-mación del coste.Transformación en estrella. OracIe soporta unatécnica para evaluar las consultas en esquemas enestrella, conocidas como transformación en estre-lla. Cuando una consulta contiene una reunión deuna' tabla de hechos con tablas dimensionales yselecciones sobre los atributos de las tablas dimen-sionales.Ia consulta se transfonnaborrando la con-dición de la reunión entre la tabla de hechos y lastablas dimensionales y remplazando la condiciónde selección en cada tabla dimensional por unasubconsulta del formulario:

tabla_de _hechos.th, in(select cp Irom tabla_dimensional¡where <condiciones sobretabla_dimensional, »

Se genera dicha subconsulta para cada 'tabla dimen-sional que tiene algún predicado restrictivo. Si ladimensión tiene un esquema en copo de nieve (véa-se el Apartado 22.4), la subconsulta contendrá unareunión de las rablas aplicables que forman ladimensión.

Oracle utiliza los valares que son devueltos des-de ceda.subconsulta para probar un índice sobre lacolumna de la tabla de hechos correspondiente,obteniendo un mapa de bits como resultado. Losmapas de bits generados desde distintas subcon-sultasse combinan con una operación and demapas de bits. El mapa de bits resultante se pue-de utilizar pata acceder a las 'tilas de las tablas dehechos coincidentes. Por ello, solamente se acce-derá a las filas en la tabla de hechos que coincidensimultáneamente en las condiciones de las dimen-siones restringidas.

Tanto la decisión de si el uso de una subcon-sulta para una dimensión particular es ventajoso yla decisión de-si la consulta reeserita es mejor quela original están basadas en la estimación de cos-te del optimizador.

25.4.2.2.Selección de la ruta de accesoOracle tiene un optimizador basado en el casto quedetermina el orden de la reunión, métodos de reunión yrutasde acceso. Cada operación que el optimizador con-sidera tiene una función de coste asociada y el optimi-zador intenta generar la combinación de operacionesque tiene' el coste global menor.

Para estimar-el coste de una operación, el optimiza-dorconsidera las estadísticas que.se han calculado paralosobjetos del esquema tales como tablas e índices. Laestadística contiene información sobre el tamaño del'objeto, la cardinalidad. la distribución de datos de lascolumnas de la tabla y cosas similares. Para la estadís-tica de columnas, OracIe soporta histogramas equili-bradosen altura e histogramas de frecuencia. Para faci-

CAPITlJLO 25 ORACLE,

litar la recogida de las estadísticas del optimizador, Ora-de puede supervisar la actividad de la modificaciónsobre tablas y sigue la pista de aquellas tablas que hansido objeto de suficientes cambios como para que pue-da ser apropiado un nuevo cálculo de las estadísticas.Oracle también sigue las columnas que se utilizan enlas cláusulas where de las consultas, 10 que hace quesean candidatas potenciales para la creación del histo-grama. Con una única orden un usuario puede decir aOracle ,queactualice las estadísticas para aquellas tablasque han sido suficientemente cambiadas. Oracle utilizaun muestreo para acelerar el proceso de recoger la nue-va estadística y elige de forma automática el menor por-centaje de la muestra. que sea adecuado. También deter-mina si la distribución de las columnas marcadas merecela creación de histogramas: si la distribución está cercade ser uniforme Oracle utiliza una representación mássencilla de la estadística de columnas.

Oracle utiliza el coste de CPU y E/S en disco en elmodelo de coste en el optimizador. Pata equilibrar losdos componentes almacena las,medidas sobre la velo-cidad de CPU y rendimiento de E/S de disco como par-te de la estadística del optimizador; El paquete de Ora-ele para recoger la estadística del optimizador calculaestas medidas.

Para consultas que involucran un número no trivialde reuniones. el espacio de búsqueda es un tema parael optimizador de consultas. Orac1e soluciona este temade, varias fonnas. El optimizador genera un orden ini-cial de la reunión y entonces decide sobre los mejoresmétodos de la reunión y rutas de acceso.para ese ordende la reunión. Entonces cambia el orden de las tablas ydetermina los mejores métodos de reunión y rutasdeacceso para el nuevo orden y así sucesivamente, guar-dando el mejor plan que 'se ha encontrado hasta enton-ces. Oracle mantiene pequeña la optimizacióIí si elnúmero de (os distintos órdenes de la reunión que sehan considerado es tan grande que el tiempo gastado enel optimizador puede ser grande comparado con el quese gastaría para ejecutar el mejor plan encontrado has-ta entonces. Puesto que este corte depende del coste esti-mado para el mejor plan encontrado hasta entonces, esimportante encontrar un buen plan pronto. de forma queel optimizador se pueda parar después de un pequeñonúmero de órdenes de la reunión. resultando un mejortiempo de respuesta. Oracle utiliza varias heurísticaspara el orden inicial para. aumentar la probabilidad deque el primer orden de reunión se considere bueno.

Por cada orden de reunión que se considera, el opti-mizador puede hacer pasadas adicionales por las tablaspara decidir los métodos de reunión y las rutas.de acce-so. Tales pasadas adicionales capturarían efectos glo-bales colaterales específicos sobre la selección de la rutade acceso. Por ejemplo. una combinación específica demétodos de reunión y rutas de' acceso pueden eliminarla necesidad de ejecutar una ordenaciÓn orden by. Pues-to que tal efecto lateral global puede.no ser obvio cuan-do se consideran Localmente los costes de los distintos

621

Page 13: Oracle

.,.

FUNDA.MENTOS DE BASES DE DATOS

métodos de reunión y de rutas de acceso, se utiliza unapasada separada que capture un erecto colateral espe-cffico para encontrar un posibleplan de ejecución conun mejor coste conjunto.

25.4.2.3. Poda de particionesPara tablas divididas el optimizador intenta ajustar lascondiciones en la cláusula where de una consulta conel criterio de división de la tabla con el fin de evitar acce-der a:particiones que no son necesarias para el resulta-do. Por ejemplo, si una tabla se divide por el rango defechas y la consulta se restringe a datos entre dos fechasespecíficas, el optimizador determina las particiones-quecontienen los daros entre las fechas específicas y ase-gura que solamente se accede a dichas particiones. Esteescenario es muy común y la aceleración puede ser dra-mática si solamente es necesario un pequeño subcon-junto de particiones.

25.4.3. Ejecución en paralelo

Oraele permite ejecutar en paralelo una única instruc-ción SQL mediante la división del trabajo entre variosprocesos en una computadora multiprocesadora. Estacaracterística es especialmente útil para operacionesintensivas en cómputo que de.otra forma se ejecutaríanen un tiempo inaceptablemente largo. Ejemplos repre-senrativos son las consultas de apoyo para la toma dedecisiones que necesitan procesar grandes cantidadesde datos. cargas de datos en un almacén de datos ycreación o reconstrucción de Índices.

Con el fin de lograr una buena aceleración median-te el paralelismo es importante que el trabajo involu-crado en la ejecución de la instrucción se divida en grá-nulos que se pueden procesar de forma independientemediante tos distintos procesadores en paralelo. Depen-diendo del tipo de'operación Oracle tiene diversas for-mas de dividir el trabajo.

Para operaciones que acceden a objetos base Xtablase índices) Oracle puede dividir el trabajo mediante tro-zos Horizontalesde datos. Para alguna s operaciones talescomo una exploración completa de una tabla, cada unode dichos trozos puede ser un rango de bloques (cadaproceso de consulta en paralelo explora la tabla desdeel bloque a:1comienzo del rango hasrael bloque al final).Para otras operaciones en una tabla dividida. come laactualización y borrado, el trozo podría ser una parti-ción. Para inserciones eh una tabla no dividida los datosa insertar se dividen de forma aleatoria entre los proce-sos en paralelo.

Las reuniones se pueden realizar en paralelo de dis-tintas formas. Una forma es dividir una de las entradasa la reunión entre procesos paralelos y permitir que cadaproceso reúna su trozo con la otra entrada de la reunión;éste es el método de reunión con fragmentos, y réplicasdel Apartado 20.5.2. Por ejemplo, si una tabla grandese reúne con una pequeña mediante una reunión por aso-elación, Oracle divide' la tabla grande entre los proce-

sos y envía: una copia de la: tabla pequeña a cada pro--ccso, la cual entonces reúne su trozo.con la-tabla menor.Si ambas tablas son grandes, sería próhibitivamente cos-toso enviar una de ellas a rodoslos procesos. En esecaso Oracle logra el paralelismo mediante la: divisiónde los datos entre los procesos mediante la asociaciónde los valores de-las columnas dc la reunión (el méto-do de reunión por asociación dividida del Apartado20.5.2.1). Cada tabla se explora en paralelo mediante-un conjunto de procesos y cada fila en la salida se pasaa un proceso de, un conjunto de procesos 'que van a eje-cutar la reunión. El proceso que obtiene la fila sedeter-mina mediante una función de asociación sobre los valo-res de .la columna de reunión. Por ello, cada proceso dereunión obtiene solamente las filas que podrían poten-cialmente coincidir y filas correspondientes no podríanir a parar .a diferentes procesos.

Orade organiza eh paralelo las operaciones de orde-nacióri mediante Jos rangos de valores de la columna enla cual se ejecuta la ordenación (esto es, usando la orde-nación de división por rangos del Apartado 20.5.\).A cada proceso que participa en la ordenación se le en-vían filas con los valores en este rango y ordena las filasen su rango. Para maximizar las ventajas del paralelis-mo las filas se tienen que dividir lo más equitativamenteposible entre los procesos en paralelo y entonces surgeel problema de determinar las fronteras de rango quegeneran una buena distribución. Oracfe soluciona el pro-blema mediante un muestreo dinámico de un subcon-junto de las titas en la entrada a la ordenación antes dedecidir las fronteras del rango.

25.4.3.1. Estructura del procesoLbs procesos involucrados en la ejecución en paralelode 11Ii'a instrucción SQLconsistén en un proceso. coor-dinador y una serie de procesos servidores en paralelo.El coordinador es responsable de asignar trabajos a losservidores en paralelo y de recoger y devolver los datosa los procesos del usuario que enviaron la instrucción.El grado de paralelismo es el número de procesos ser-vidores en paralelo que se asignan para ejecutar unaoperación primitiva como parte de la instrucción. El gra-do de paralelismo se determina mediante el optimiza-dor. pero se puede reducir dinámicamente si la:carga enel sistema aumenta.

Los-servidores en paralelo operan sobre un modeloproductor/consumidor. Cuando es necesario una secuen-cia de operaciones para procesar una instrucción. elconjunto productor de servidores ejecuta la primera ope-ración y pasa los datos resultantes al conjunto de con-sumidores. Por ejemplo, si una exploración de tablacompleta es seguida por una ordenación y el grado deparalelismo es 12, habría 12 servidores productores queejecutan la exploración de la tabla y pasan el resultadoa 12 servidores consumidores que ejecutan la ordena-ción. Si es necesaria una operación posterior, como otraordenación, las funciones de los dos conjuntos de ser-vidores se cambian. Los servidores, que originalmente

622

Page 14: Oracle

ejecutaban la exploración de la tabla adoptan la funciónde consumidores de la salida producida por la primeraordenación y lo utilizan para ejecutar la segunda orde-nación. Por ello se realizan una secuencia de operacio-nes pasando los datos entre dos conjuntos de servido-res que alternan sus funciones como productores Sconsumidores. Los servidores se comunican entre símediante las memorias' intermedias sobre hardware dememoria compartida y mediante las conexiones de redde alta velocidad sobre configuraciones MPP (sin com-partimiento) y sistemas agrupados (discos compartidos).

CAPITULO 25 0RACLE

Para sistemas sin compartimiento el coste para acce-der a los datos en el disco no es uniforme entre los pro-cesos. Un proceso que se ejecuta en un nodo qlle tieneacceso directo a un dispositivo puede procesar los datossobre ese dispositivo más rápidamente que un procesoque tiene que recuperar los datos a través de la red.Oraele utiliza el conocimiento sobre la añnidad dispo-sitivo a nodo y dispositivo a proceso (esto es, la capa-cidad de acceder a los dispositivos directamente) cuan-do distribuye el trabajo entre servidores en ejecuciónparalela.

"c., '." Jt<;OJlCUllBENCIA y RECUPERACiÓN

Orácle soporta técnicas de control de concurrencia yrecuperación que proporcionan una Serie de caracterís-ticas útiles.

25.5.1.Control de concurrencia

El control de concurrencia multiversíón de Oracle difie-re de los mecanismos de Concurrencia utilizados por lamayoría de los fabricantes de bases de datos. Para lasconsultas de sólo lectura se proporcionan instantáneasconsistentes en lectura, que son vistas de la 'base de datostal como existía en un cierto momento, conteniendotodas las actualizaciones que se comprometieron hastaese momento y no el resto. Por ello no se utilizan lQSbloqueos de lectura y las consultas de sólo lectura nointerfieren con otra actividad de la base de datos en tér-minos de bloqueos (esto es básicamente el protocolo debloqueo multiversión en dos' fases descrito en el Apar-tado 16.5.2).

Oraclesoporta la consistencia de lectura en un nivelde instrucción y de transacción. Al comienzo-de la eje-cución de una instrucción o transacción (dependiendodel nivel de consistencía que se utilice) Oracle deter-mina el número de cambio del sistema'(System Chan-ge Number, SCN) actual. El SCN esencialmente actúacomo una marca temporal donde el tiempo 'se mide entérminos de compromisos de la base de datos en lugardel tiempo de reloj.

Si en el curso de una consulta se encuentra que unbloque de datos tiene un SCN mayor que el que está sien-do asociado con la consulta, es evidente que se ha modi-ficado el bloque de datos después del SCN de la con-sulta original mediante alguna aira transacción y puedeano haberse comprometido. Por ello los datos en el blo-que no se pueden incluir en una vista consistente de labase de datos como existía a la hora del SCN de la con-sulta. En su lugar, se debe utilizar una versión anteriorde los datos en el bloque; específicamente aquel que ten-ga el SCN mayor que no exceda el SCN de la consulta.Orac1erecupera la versión de los datos desde el segmentode retroceso (los segmentos de retroceso se describen enelApartado 25.5.2). Por ello, supuesto que el segmento

de retroceso es lo suñciénremente grande, Oracte puededevolver un resultado consistente de la consulta inclusosi los datos se han modificado varias veces desde quecomenzara la ejecución de la consulta. Sie! bloque conel SCN deseado ya no existe en el segmento de retroce-so, la consulta devolverá un error. Habría una indicaciónde que el segmento de retroceso no se ha dimensionadoadecuadamente, dada la actividad del sistema.

En el modelo de concurrencia de' Oracle las opera-ciones de lectura no bloquean las operaciones de escri-tura y las operaciones de escritura no bloquean las ope-raciones de lectura. una propiedad que permite un altogrado de concurrencia. -En particular, el esquema per-mite consultas largas (por ejemplo consultas de infor-mes) para ejecutar en un Sistema con una gran cantidadde actividad transaccional. Esta clase de escenario esnormalmente problemático para sistemas de bases dedatos donde las consultas utilizan bloqueos de lectura,puesto que la.consulta puede, fallar al adquirirlos o blo-quear grandes cantidades de datos por mucho tiempoevitando, por consiguiente. la actividad transaccionalde los datos y reduciendo la concurrencia (una alterna-tiva que se utiliza en algunos sistemas es utilizar un gra-do inferior de consistencia, tal como la consistencia engrado dos, pero eso podría producir resultados incon-sistentes eh la consulta).

El modelo de concurrencia de Orecle se utiliza comobase para la característica Flashback Query. Esta carac-terística permite a un usuario establecer un cierto núme-ro SCN o tiempo de reloj en su sesión y ejecutar con-sultas sobre los datos que existían en esa fecha (supuestoque los datos todavía existían en el segmento de retro-cese]. Normalmente en un sistema de bases de datos.una vez que se ha realizado el cambio no hay forma deretroceder al estado anterior de los datos a menos quese realicen restauraciones desde copias dc seguridad.Sin embargo, la recuperación de una base de datos muygrande puede ser muy costosa, especialmente si el obje-tivo es solamente recuperar algunos datos que han sidoborrados inadvertidamente por Un usuario. La caracte-rística Flashback Que¡-)' proporciona un mecanismomucho más sencillo para tratar los errores del usuario.

623

Page 15: Oracle

I[

rUNDAME'NTOS DE BASES DE DATOS

Oracle soporta dos niveles de aislamiento ANSI/ISO«con compromiso de lectura» y «secuenciable». No haysoporte para lecturas no actualizadas. puesto que noexiste necesidad. Los dos niveles de aislamiento corres-ponden a si se utiliza la consistencia de la lectura-en elnivel de instrucción o en el nivel de transacción. El nivelse puede establecer para una sesión o una transacciónindividual. La consistencia de lectura en el nivel de lainstrucción es el predeterminado.

Oracle utiliza un bloqueo en el nivel de las tilas. Lasactualizaciones de distintas filas no entran en conflicto.Si dos escritores intentan modificar la misma fila, unoespera hasta que el otro comprometa o retroceda y enton-ces puede devolver.un 'error de conflicto de escritura oseguir y modificar la fila. Los bloqueos se manLienenmientras dure la transacción,

Además de los bloqueos en el nivel de las filas queevitan las inconsistencias debido a la actividad, el LMDde Oracle utiliza los bloqueos de tabla para evitar lasinconsistencias debido a la actividad LDO. Estos blo-queos evitan que, por ejemplo, un usuario elimine unatabla mientras otro usuario tiene una transacción aún no'comprometida que está accediendo a la tabla, Orade noutiliza el dimensionamiento de bloqueos para convertirlos bloqueos de filas a bloqueos de tabla con el propó-sito de su control de concurrencia normal.

Oracle detecta los interbloqueos automáticamente ylos resuelve retrocediendo una de las transacciones invo-lucradas en el interbloqueo.

Oracle soporta transacciones autónoma" que son tren-secciones independientes generadas con otras transac-ciones. Cuando Oracle invoca a una transacción autó-noma genera una nueva transacción en un contextoseparado. La nueva transacción se puede comprometero retroceder antes de que el control vuelva a la transac-ción llamadora. Oracle soporta varios niveles de anida-miento de transacciones autónomas.

25.5.2. Estructuras básicps de recuperación

Con el fin de comprender cómo se recupera Oracle deun fallo, tal como una caída del disco. es importantecomprender las características básicas que están invo-lucradas. Además de, los archivos de datos que contie-nen las tablas e índices hay archivos de control, regis-tros históricos rehacer, registros históricos rehacerarchivados y segmentos de retroceso.

El archivo de control contiene varios meradatos queson necesarios para operar en la base de datos, inclu-yendo la información sobre las copias de seguridad.

Oracle registra cualquier modificación transaccionalde una memoria intermedia de la base de datos en elregistro histórico' rehacer, que consiste en dos o másarchivos. Registra la modificación como parte de la ope-ración que la causa y sin considerar si la transacciónfinalmente se produce. Registra los cambios de los índi-ces y segmentos de retroceso así como los cambios a latabla de datos. Cu_ando se llenan los registros históricos

rehacer se archivan mediante uno o varios procesos ensegundo plano (si la base de datos se ejecuta en modoarchivelcg).

El segmento de retroceso contiene información sobreversiones anteriores de los datos (esto es, informaciónpara deshacer). Además de esta función en el modelode 'COnsistencia de Oracle, la información se utiliza pararestaurar la versión anterior de los datos cuando se des-hace una transacción que ha modificado los datos.

Para poder recuperar un fallo de almacenami-ento sedebería realizar una copia de seguridad de 10$ archivosde datos y archivos de control periódicamente. La fre-cuenéia de la copia de seguridad determina el tiempomayor de recuperación, puesto que lleva mas tiempola recuperación si la copia de seguridad es antigua. Ora-ele soporta copias de seguridad en caliente (copias deseguridad ejecutadas en una base de datos en línea queestá sujeta a una actividad transaccional). Durante larecuperación de una copia de seguridad, Oracle ejecu-la dos pasos para alcanzar un estado consistente de labase de datos como existía antes del fallo. En primerlugar Oraclc rehace las transacciones aplicando losarchivos históricos rehacer (archivados) a la copia deseguridad. Esta acción lleva a la base de datos a un esta-do que existía en la fecha del fallo, pero no necesaria-mente un estado consistente, puesto que los registroshistóricos deshacer incluyen datos no comprometidos.En segundo lugar. Oracle deshace las transacciones [10

comprometidas mediante el uso del segmento de retro-ceso. La base de datos está ahora en.un estado consis-tente.

La 'recuperación en una base de datos que ha sido,objeto de una actividad transaccional grande debido ala ultima copia de 'segundad puede ser costosa en tiem-po. Oracle soporta recuperación en paralelo en la cualse utilizan 'varios procesos para aplicar información derehacer simulténeamenre. 'Oracle proporciona una herra-mienta GUI, el gestor de recuperación, que automatizala mayor parte de las tareas asociadas con copias deseguridad y recuperación.

25.5.3.• Bases de datos en espera gestionadas

Para asegurar una alta disponibilidad. Oracle propor-ciona la característica bases de datos en espera gestio-nadas (esta característica e,s la misma que las copias deseguridad remotas, descrita en -el Apartado 17.10). Unabase de datos en espera es una copia de la base de datosnormal que se instala en un sistema separado. Si ocurreun fallo catastrófico en el sistema principal el sistemaen espera se activa y asume el control, minimizando elefecto del fallo en la disponibilidad. Oracle mantíene laba-se de datos en espera actualizada mediante la aplica-ción constante de archivos históricos rehacer archiva-dos que se envían desde la base de datos principal. Labase de datos de seguridad se puede usar en línea enmodo sólo lectura y utilizarla para informes y consul-tas para el apoyo a la toma de decisiones.

624

Page 16: Oracle

ar

'se,.a-os>s.noro-.is-

idolo aem-cualn deerra-atizars de

las

opor-;estio-nas de).Una~datosocurre:istemaando eltiene laaplica-

u-chiva-Ipal. Lalínea enconsul-

CAPiTULO Z~ ORACLE

Siempre que una aplicación de base de datos ejecuta unainstrucción SQL hay un proceso del sistema operativoque ejecuta código en el servidor de bases de datos. Ora-ele se puede configurar de forma que el proceso del sis-tema operativo esté dedicada exclusivamente a la i05-

truccion que se está procesando o de forma que el procesose pueda compartir entre varias instrucciones. La-ultimaconfiguración, conocida como servidor muitienhebra-do, tiene propiedades diferentes respecto a la arquitec-tura del proceso y memoria. Se discutirá la arquitecturadel servidor dedicado en primer lugar y posteriormentela arquitectura del servidor multíenhebrado.

25.6.1. Servidor dedicado: estructurasde memcrtc

La memoria utilizada por Oracle se divide principal-mente en tres categorías: áreas de código software. áreaglobal del sistema (System Global Afea, SGA) y.el áreaglobal del programa (Program Global Afea, PGA),

Las áreas de código del sistema son las partes de lamemoria donde reside el 'código del servidor Oracle. Seasigna un PGA para cada proceso para albergar sus datoslocales e, información de control. Esta área contieneespació en pilas para diversos datos de la sesión y lamemoria privada para la instrucción SQL que se estáejecutando. También contiene memoria para operacio-nes de ordenación y asociación que pueden ocurrirdurante la evaluación de la instrucción.

SGA es un área de memoria para estructuras que soncompartidas entre los usuarios. Está fonnadapor variasestructuras principales) incluyendo:

Caché de ni~moria intermedia: Esta caché man-tiene bloques de 'datos a los que se accede fre-'cuentemente (tablas e índices) en memoria parareducir la necesidad de ejecutar E/S a disco físico.Se usa una política menos actualizada excepto parabloques accedidosdurante una-exploración de tablacompleta. Sin embargo, Oracle pennitecrear variascolas de memoria intermedia que tienen distintoscriterios para la datación de los datos. Algunas-ope-raciones Oracle omiten la caché de memoria inter-media y leen los datos directamente del disco.

• Memoria intermedia de registro histórico reha-cer. Esta memoria intermedia contiene la parte delregistro histórico rehacer que no se ha escrito toda-vía en el disco.

• Cola compartida. Oracle busca maximizar elnúmero de usuarios que pueden utilizar la base dedatos concurrentemente minimizando la cantidadde memoria que es necesaria para cada usuario.Un concepto importante en este contexto es lacapacidad de compartir la representación interna

de instrucciones SQL y ~I código procedimentalescrito en PL/SQL. Cuando varios usuarios eje-cutan la misma instrucción SQL pueden compar-tir la mayoría de estructuras de datos que repre-sentan el plan de ejecución de la instrucción.Solamente los dates que son locales a cada invo-cación específica de la instrucción necesitan man-tenerse en una memoria privada.

Las partes que se pueden compartir de las estructu-ras de datos que representan la instrucción SQL se alma-cenan en la cola compartida, incluyendo el texto de lainstrucción. El almacenamiento en caché de instruc-ciones SQLen la cola compartida también se guarda entiempo eJe compilación, puesto que una nueva invoca-ción de la instrucción que ya está almacenada en cachéno tiene que pasar por el proceso de compilación com-pleto. La determinación de si una instrucción SQLes lamisma qQe la existente en la cola compartida se basa enla coincidencia exacta del texto y el establecimiento deciertos parámetros de sesión. Oraclc puede remplazarautomáticamente las constantes en una instrucción SQLcon variables vinculadas; las consultas futuras que soniguales "excepto por los valores de constantes coincidi-rán con la consulta anterior en la cola compartida. Lacola compartida también contiene cachés para infor-mación de diccionario y diversas estructuras de control.

25.6.2. Servidor dedicado: estructurasde proceso

Hay dos tipos de procesos que ejecutan código servi-dor' Oracle: procesos servidor que procesan instruc-ciones SQL y procesos en segundo plano que ejecutandiversas tareas administrativas relacionadas con el ren-dimiento. Algunos de estos procesos son opcionales yen algunos casos se pueden utilizar varios procesos delmismo tipo por razones del rendimiento. Algunos delos tipos más importantes de procesos en segundo pla-no son:

Escritor de la base de datos. Cuando una memo-ria intermedia se elimina de la caché de la memo-ria Intermedia se debe volver a escribir en el dis-co si se ha modificado desde que se introdujo enla caché.

Los procesos del escritor de la base de datosejecutan esta tarea, lo que ayuda al rendimientodel sistema liberando espacio en la caché de lamemoria intermedia.Escritor del registro histórico. El escritor delregistro histórico procesa las entradas de escritu-ra de la memoria intermedia del registro históricorehacer al archivo del registro histórico rehacer eh

625

Page 17: Oracle

F:U'U~AMENTOS DE BASES DE DATOS

el disco. También escribe un registro de compro-miso al disco-siempre que.se compromete una tran-sacción.

• Punto de revisión. El proceso punto de revisiónactualiza las cabeceras del archivo de datos cuan-do ocurre un punto de revisión.Monitor del sistema. Este proceso realiza la recu-peración ante una caída en caso necesario. Tam-bién ejecuta cierta administración del espacio parareclamar espacio no utilizado en espacios tempo-rales.

• Monitor de procesos. Este proceso ejecuta recu-peración de procesos para procesos del servidorque fallan, liberando recursos y ejecutando diver-sas operaciones de limpieza.

• Recuperador, El proceso recuperador resuelve losfallos y dirige la limpieza de transacciones distri-buidas.

• Archivador. El-archivador copia el archivo deregistro histórico rehacer en línea a un registro his-tórico rehacer cada vez que se llena el archivo deregistro histórico en línea.

25.&.3. Servídcr multienhebrado

La configuración de servidor mulrienhebrado aumentael número de usuarios que un número dado de procesosservidor pueden soportar compartiendo los procesos ser-vidor entre las instrucciones. Difiere de la arquitecturade servidor dedicado en los siguientes aspectos princi-pales:

" Un proceso de envío en segundo plano ericaminalas solicitudes de usuarios-al siguiente proceso ser-vidor disponible. Al realizar esto utiliza una colade solicitudes y una cola de respuestas en el SGA.El distribuidor pone una nueva solicitud en la colade solicitudes donde será recogida por un procesoservidor. Un proceso servidor completa una soli-citud, pone el resultado en la cola de respuestaspara ser recogida por el distribuidor y ser devuel-ta al usuario.Puesto que W1 proceso servidor se comparte entrevarias instrucciones SQL Oraele no mantiene datos

1,

privados en el PGA. Almacena los datos específi-cos de la sesión en el SGA.

25.&.4. Agrupaciones de aplicaciones realesde Orac1e9i

Las agrupaciones de aplicaciones reales de Oracle9i(Orac1e9i Real Application Clusters) es una Caracterís-tica que permite que varios ejemplares de Orade se eje-cuten en la misma base de datos (recuérdese que, en ter-minología de Oracle, W1 ejemplar es la combinación deprocesos en segundo plano y áreas de memoria). ESta'característica permite a Oraole ejecutarse en arquitec-turas,de hardware agrupadas 'YMPP (disco compartidoy sin compartimiento). Esta característica se denominóservidor paralelo de Grade (Orac1e Parallel Server) enversiones anteriores de Oracle. La capacidad de agru-par varios nodos tiene importantes ventajas en la dimen-sionabilidad y disponibilidad que son útiles en entornosOLTP y de almacén de datos.

Las ventajas de dimensionabilidad de la caracterfs-tica son obvias, puesto que más nodos significa máspotencia de procesamiento. Oracle optimiza más toda-vía el uso del hardware a través de las característicastales como las reuniones por afinidad y por particiones.

Las agrupaciones de aplicaciones reales de Oracle9itambién se-pueden utilizar para lograr una alta disponi-bilidad. Si un nodo falla, los restantes todavía están dis-ponibles para que la aplicación acceda a la base de datos.Las instancias restantes automáticamente retroceden lastransacciones sin compromiso que están siendo proce-sadas en el nodo que 'falló con el fin de evitar un blo-queo de la actividad en el resto de nodos.

La ejecución de varias instancias en la misma basede datos da lugar a varios temas técnicos que no exis-ten. en un único ejemplar. Mientras que algunas veceses posible dividir una aplicación entre los nodos de for-ma que los nodos raramente accedan a los mismos datos,siempre hay posibilidad de solapamiento, que afecta ala gestión de los bloqueos y de la caché. Para.solucio-nar esto Oracle soporta un gestor de bloqueos distri-buidos y la característica mezcla de caches, que penni-te a los bloques de datos fluir directamente entre lascachés de distintos ejemplares mediante el uso de lainterconexión. sin ser escritas a disco.

Oracle proporciona soporte para las réplicas y transac-ciones distribuidas con compromiso de dos fases.

25.7.1. Réplica

Oracle soporta varios tipos de réplicaj véase el Aparta-do 19.2.1 para una introducción a las replicas). En su

forma más sencilla los datos en un sitio maestro se dupli-can en otros sitios en forma de instantáneas (el término«instantánea» en este contexto no se debería confundircon él concepto de instantánea consistente en lectura enel contexto del modelo de concurrencia). Una instantá-nea no tiene que.contener todos los datos maestros (pue-de, por ejemplo, excluir ciertas columnas de una tabla

626

Page 18: Oracle

por razones de seguridad). Oraele soporta dos tipos deinstantáneas: sólo lectura y actualizable. Una instantá-nea actualizable se puede modificar en el sitio esclavoy las modificaciones se propagan hasta la tabla maes-tra. Sin embargo.Jas instanténeas sólo lectura permitenun rango más amplio de definiciones de instantánea. Porejemplo, una instantánea de sólo lectura se puede defi-nir en términos de conjuntos de operaciones-sobre tablasen el sitio maestro. Oracle también soporta varios sitiosmaestros para los-mismos datos, donde todos los sitiosmaestros actúan como pares. Se puede actualizar unatabla replicada en cualquiera de los sitios maestro y laactualización se propaga al resto de sitios. Las aetuali-zaciones se pueden propagar de forma asfncrona o sin-crónica.

Para la réplica asíncrona la información de actua-lización se envía mediante procesos por lores- al restode sitios maestros y entonces se aplican. Puesto quelos mismos datos podrían estar sujetos 'a modificacio-nes conflictivas en sities diferentes, se podría necesi-tar una resolución del conflicto basada en algunasreglas del negocio. Oracle proporciona una serie demétodos de resolución de conflictos incorporados ypennitea 'los usuarios escribir el suyo propio si fueranecesario.

Con la: réplica asíncrona, una actualización de unsitio maestro se propaga de forma inmediata al resto desitios. Si falla la transacción de actualización en cual-quier sitio maestro, la actualización se deshace en todoslos sitios.

25.7.2. Bases de dotes distribuidas

Oracle soporta consultas y transacciones sobre variasbases de datos en distintos sistemas, Con el uso depasarelas los sistemas remotos pueden incluir bases dedatos que no sean de Oracle. Oracle tiene capacidadesincorpor:adas para optimizar una consulta que incluyatablas en distintos sitios, recuperar los datos relevan-tes y devolver los resultados como si hubiera sido unaconsulta normal local. Oraele también soporta la emi-sión transparente de transacciones a varios sitiosmediante un protocolo de compromiso en dos fasesincorporado.

cAPirULO 2~ ORACLE

25.7.3. Orígenes de datos externos

Oracle 'tiene varios mecanismos para soportar orígenesde datos externos. El uso más común es el almacén dedatos cuando se cargan normalmente grandes cantida-des de datos desde un 'sistema transaccional.

25.7.3.1. SQL "'LoaderOraele tiene una utilidad de carga directa, SQL "Loader,que soporta cargas rápidas en paralelo de grandes canti-dades de datos desde archivos externos. Soporta una seriede formatos de datos y puede ejecutar varias operacio-nes de filtrado sobre los daros que se estén cargando.

25.7.3.2. Tablas externasOracle permire hacer referencia a los orígenes de datosexternos, tales como archivos planos, en la cláusulafrom de una consulta corno si fueran tablas normales,Una tabla externa se define mediante meradatos que des-criben los tipos de columna Oracle y la corresponden-cia entre los datos externos y dichas columnas .. Tam-bién es necesario un controlador efe acceso para accedera los datos externos. Oracle proporciona un controladorpredeterminado para archivos planos.

La característica de tabla: externa tiene el objetivoprincipal de operaciones de extracción, transformacióny carga (ETL) en un entorno de almacén de datos. Losdatos se pueden cargar en-el almacén de datos, desde unarchivo plano mediante el llSO de

create table tabla asselect •.• from < tabla 'externa>where ...

Mediante la agregación de, operaciones sobre losdatos en la lista select o cláusula where, se pueden rea-lizar transformaciones y filtrados como parte de la mis-ma instrucción SQL. PueS{Q que estas operaciones sepueden expresar en-SQL nativo o en funciones escritasen PL/SQL o Java, la característica dc tabla externa pro-porciona un mecanismo potente para expresar todas fasclases de operaciones de transformación y filtrado delos datos. Para la dimensionabilidadse puede realizaren paralelo el acceso a la tabla externa mediante la Carac-terística de ejecución en paralelo de OracIe.

Oraclc-proporciona a los usuarios una serie dc herra-mientas para la gestión del sistema y desarrollo de apli-caciones.

25.8.1.Gestor corporativo de Oracle

El gestor corporativo de Oracle (Oracle EnterpriseManager) es la principal característica de Oracle para

la gestión de sistemas de bases de datos. Proporcionauna interfaz de usuario gráfica (GUn sencilla de utili-zar y una serie de asistentes para la administración dcIesquema, de la seguridad, de los ejemplares, del alma-cenamiento y de la planificación de tareas. También pro-porciona la supervisión del rendimiento y herramientaspara ayudar a los administradores a ajustar la aplicaciónSQL, rutas de acceso y parámetros de almacenamiento

627

Page 19: Oracle

FUNDAMENTOS DE BASES DE DATO,S

de ejemplares y datos. Por ejemplo, incluye un asisten-te que puede sugerir [os índices que son los más efecti-vos de crear bajo lila carga de trabajo dada.

25.8.2~Gestión de los recursos de la basede datos

Un administrador dela base de datos necesita poder con-trolar cómo se divide la potencia de procesamiento entrelos usuarios y grupos de usuarios. Algunos grupos pue-den ejecutar 'consultas interactivas donde el tiempo de-respuesta es crítico; otros pueden ejecutar informes lar-gos que se pueden ejecutar como tareas de procesos porlotes en segundo plano cuando la carga del sistema seabaja. También es importante poder evitar que un usua-rio envíe inadvertidamente una consulta ad hoc extre-madamente costosa que retrasará demasiado al resto.

La característica de gestión de los recursos de la basede datos de Oracle permite al administrador de la basede datos dividir los usuarios entre grupos consumido-res de recursos con distintas prioridades y propiedades.

Por ejemplo, un grupo de usuarios interactivos de altaprioridad pueden tener garantizado al menos UD 60porciento de UCP. El resto, más alguna parte del 60 porciento no utilizado por el grupo de alta prioridad. seasignaría entre los grupos de consumidores de recursoscon baja prioridad, Un grupo de realmente baja priori-dad podría tener asignado un O por ciento. [o que sig-nificaría que las consultas enviadas por este grupo seejecutarían solamente cuando hubiera disponibles ciclosde CPU no utilizados. Se pueden establecer para cadagrupo límites para el grado de paralelismos para la eje-cución en paralelo. El administrador de la base de datostambién puede establecer límites de tiempo sobre cuán-to tiempo máximo de ejecución se permite a una ins-trucción SQL Cuando un usuario envía una instrucción,el gestor. de recursos 'estima cuánto tiempo lardaría enejecutarse y devuelve un error si la instrucción viola ellímite. El gestor de recursos también puede limitar elnúmero de. sesiones de usuario que se pueden activarsimultáneamente, para cada grupo de consumidores derecursos.

Se puede encontrar información actualizada, inclu-yendo documentación, sobre productos Oracle enhttp://www.oracle.comyhttp://technet.oracle.com.Laindexación extensible en Oracle8i se describe en Sri-nivasan et al. [2ooob], mientras que Srinivasan er al.[2000a] describe las tablas organizadas con índices enOraclexi. Banerjee et al. [2000] describe soporte XMLen Oracle8i. Bello et al. [1998J describe las vistas mate-

ríalizadas en Oracle. Antoshenkov [1995] describe latécnica de compresión de mapas dc bits alineadas porbytes utilizada en Oracle; véase también lohnson[1999b]. Oracle Parallel Server se describe en Bam-ford et al. [1998]. La recuperación en Oracle viene des-crita por loshi et al. [1998] y Lahiri el al. [2001]. Lamensajería y las colas en Oracle se describen en Gaw-lick [1998].

628