+ All Categories
Home > Documents > proyecto final oracle.doc

proyecto final oracle.doc

Date post: 21-Jul-2016
Category:
Upload: mauricio-jose-casillas-ochoa
View: 141 times
Download: 1 times
Share this document with a friend
109
UNIVERSIDAD LA SALLE Maestría en Tecnologías de información Diseño de Base de Datos. Proyecto Final. RDBMS ORACLE Yolanda Estrada Hernández Mauricio Casillas - 1 -
Transcript
Page 1: proyecto final oracle.doc

UNIVERSIDAD LA SALLE

Maestría en Tecnologías de información

Diseño de Base de Datos.

Proyecto Final.

RDBMS ORACLE

Yolanda Estrada Hernández Mauricio Casillas

28/04/2023

- 1 -

Page 2: proyecto final oracle.doc

ÍNDICE

ORACLE..……………………………………… …………………… ……… …… ….3DESCRIPCIÓN GENERAL DEL RDBMS……… ………… …… …………………3REQUERIMIENTOS PARA SU INSTALACIÓN Y PLATAFORMAS EN LAS QUE SE PUEDE INSTALAR………………………… …… … … …… ………………….5ESTRUCTURA DE LA BD (LÓGICA Y FÍSICA)…… …… …… ……… ………… 7ESTRUCTURA DE LA MEMORIA………………… … … …………………… …12MÉTODOS DE INTEGRIDAD, CONCURRENCIA, CONSISTENCIA Y MANEJO DE TRANSACCIONES DE DATOS…………… …… … ……………………… .. 17INDIZACIÓN……………………………………………………………………………..20.IMPLEMENTACIÓN DEL DISEÑO CONCEPTUAL (MODELO ENTIDAD - RELACIÓN)…………………………………………………………………………… 25 .ADMINISTRACIÓN DE LA SEGURIDAD DE LA BASE DE DATOS…………… 27ADMINISTRACIÓN DE OBJETOS…………………………………………………….39UTILERIAS DE RDBMS ……………………………………………………………… 47DESCRIPCIÓN DE FRONTENDS Y BACKENDS…………………………………...57EJEMPLO PRÁCTICO DE UNA APLICACIÓN………………………………………63EXPLICAR SU LENGUAJE DE PROGRAMACIÓN NATIVO CON EJEMPLOS PRÁCTICOS EN EL CASO DE SQL LISTAR SUS EXTENSIONES Y AGREGADOS……………………………………………………………………………65BIBLIOGRAFÍA…………………………………………………………………………..78

Tecnología olap

ORACLE

- 2 -

Page 3: proyecto final oracle.doc

Oracle surge a finales de los 70 bajo el nombre de Relational Software a partir de un estudio sobre SGBD (Sistemas Gestores de Base De datos) de George Koch. Computer World definió este estudio como uno de los más completos jamás escritos sobre bases de datos. Este artículo incluía una comparativa de productos que erigía a Relational Software como el más completo desde el punto de vista técnico. Esto se debía a que usaba la filosofía de las bases de datos relacionales, algo que por aquella época era todavía desconocido.

Oracle es un sistema de administración de base de datos (o RDBMS por el acrónimo en inglés de Relational Data Base Management System), fabricado por Oracle Corporation. Se considera a Oracle como uno de los sistemas de bases de datos más completos, destacando su:

Soporte de transacciones. Estabilidad. Escalabilidad. Es multiplataforma.

Su mayor defecto es su enorme precio, que es de varios miles de euros (según versiones y licencias). Otro aspecto que ha sido criticado por algunos especialistas es la seguridad de la plataforma, y las políticas de suministro de parches de seguridad, modificadas a comienzos de 2005 y que incrementan el nivel de exposición de los usuarios. En los parches de actualización provistos durante el primer semestre de 2005 fueron corregidas 22 vulnerabilidades públicamente conocidas, algunas de ellas con una antigüedad de más de 2 años.Aunque su dominio en el mercado de servidores empresariales ha sido casi total hasta hace poco, recientemente sufre la competencia del Microsoft SQL Server de Microsoft y de la oferta de otros RDBMS con licencia libre como PostgreSQL, MySql o Firebird. Las últimas versiones de Oracle han sido certificadas para poder trabajar bajo Linux.

1. DESCRIPCIÓN GENERAL DEL RDBMS

ORACLE es un RDBMS (Sistema de Gestión de Bases de Datos Relacionales), y se basa en la tecnología cliente/servidor, para su utilización primero sería necesario la instalación de la herramienta servidor (Oracle 8i) y posteriormente podríamos atacar a la base de datos desde otros equipos con herramientas de desarrollo como Oracle Designer y Oracle Developer, que son las herramientas básicas de programación sobre Oracle. Para desarrollar en Oracle además del lenguaje SQL utilizamos el llamado PL/SQL un lenguaje de 5ª generación, bastante potente para tratar y gestionar la base de datos, también por norma general se suele utilizar SQL al crear un formulario. PL/SQL, que es propio de ORACLE prácticamente, en cualquier herramienta ORACLE donde se pueda usar SQL podemos también utilizar PL/SQL.

- 3 -

Page 4: proyecto final oracle.doc

Todas las aplicaciones ORACLE se ejecutan contra el motor ORACLE que interactúa directamente con la base de datos, y que debe estar activo en todo momento. El acceso a la base de datos está controlado por nombre de usuario y clave (normalmente distintos de los del sistema operativo). Las aplicaciones ORACLE se pueden ejecutar en el mismo servidor donde está instalada la base de datos y corre el motor ORACLE o en otro, conectado con el anterior, y que puede tener un sistema operativo distinto; por ejemplo, un PC (modo cliente/servidor). Algunas de las aplicaciones pueden funcionar sobre X-Window.

UtilizaciónLa utilización de las aplicaciones en modo cliente/servidor o en modo normal no varía apenas. La única diferencia es que en modo normal hay que conectarse al servidor lucano (con rlogin, rsh o telnet). Si además se van a ejecutar aplicaciones X-Window (OPEN LOOK o MOTIF) en modo normal, una vez conectado a lucano habrá que hacer: % setenv DISPLAY servidor:0 (C-Shell)donde "servidor" es el nombre de la computadora del usuario. Antes que nada, hay que cargar una serie de variables. Esto se hace de la siguiente manera (hay que estar en la C-Shell): % source /usr/app/oracle/oravar(Está pendiente hacer una versión para Bourne-Shell). Dentro de oravar se comprueba si la computadora del usuario es lucano. Si no lo es, se activa el modo cliente/servidor. Tras esto, y suponiendo que el motor ORACLE esté funcionando en el servidor lucano, ya se pueden ejecutar directamente las aplicaciones. Para comprobar si en el servidor lucano está activo el motor ORACLE, debe teclear lo siguiente: % ps -aux | grep oraDeben aparecer cuatro procesos con nombres ora_????_orac y el proceso orasrv, que permite la ejecución en modo cliente/servidor. Tal y como se ha explicado aquí, para la ejecución en modo cliente/servidor el servidor de usuario debe ser algún tipo de SUN 4. ORACLE incluye una gran cantidad de herramientas de programación y desarrollo de aplicaciones

RequerimientosEl motor de ORACLE y la base de datos reside en el servidor, pero las aplicaciones pueden ejecutarse en ese servidor o en otra computadora, en modo cliente/servidor.

Documentación ORACLE RDBMS Utilities User Guide. CASE Designer User's Guide and Tutorial. PL/SQL User's Guide and Reference. SQL*Menu User's Guide and Reference.

- 4 -

Page 5: proyecto final oracle.doc

SQL*ReporWriter Reference Manual. SQL Language and Reference. SQL*Plus User's Guide and Reference. SQL*Forms Designer's Reference. SQL*Forms Designer's Tutorial. PRO*C Supplement to the ORACLE Precompilers Guide.

2. REQUERIMIENTOS PARA SU INSTALACIÓN Y PLATAFORMAS EN LAS QUE SE PUEDE INSTALAR

Oracle posee igual interacción en todas las plataformas (Windows, Unix, Macintosh y Mainframes). Esto porque más del 80% de los códigos internos de Oracle son iguales a los establecidos en todas las plataformas de Sistemas Operativos.

Oracle soporta bases de datos de todos los tamaños, desde severas cantidades de bytes y gigabytes en tamaño. Oracle provee salvar con seguridad de error lo visto en el monitor y la información de acceso y uso.

Oracle soporta un verdadero ambiente cliente servidor. Este establece un proceso entre bases de datos del servidor y el cliente para la aplicación de programas. Una ventaja importante de tecnología del ORACLE sigue siendo su disponibilidad incomparable por el rango más ancho de plataformas y sistemas operativos. ORACLE tiene una arquitectura integrada. La misma tecnología de ORACLE que corre en PCs, corre inalterado en el SMPs más avanzado y MPPs.

ORACLE 7 es soportado en PC´s como en los sistemas masivos en paralelo, clusters y mainframes. Oracle 7 está disponible en más de 140 plataformas diferentes. El underlying de Oracle7 se adapta fácilmente a la arquitectura de las nuevas plataformas del hardware y sistemas operativos

Oracle sobre Linux.

La Base de Datos (BD) Oracle 9i ver. 2, pretende ofrecer a los desarrolladores de Linux no solo una plataforma de bajo costo, sino también una arquitectura de código abierto que puede ofrecer control sobre el performance, viabilidad y manejabilidad en el desarrollo en misiones criticas en el ambiente de la empresa. La versión Oracle 9i ver. 2 está disponible hoy en día en la liga de Oracle with Linux.

Orale 9i Server corre aplicaciones J2EE y servicios Web sobre Red Hat y SuSe de Linux, lo cual activa un gran performance a la BD por el uso de J2EE en servicios Web desarrollado para Linux.

- 5 -

Page 6: proyecto final oracle.doc

Oracle provee soporte técnico para Red Hat Linux Advanced Server Oracle, trabajando con Red Hat cerrado provee de soporte técnico directo para el software, incluyendo el sistema operativo. Los clientes de Oracle pueden observar la pronta respuesta y la resolución a casos críticos.La liga a FAQ es una estrategia de soporte de linux, el método es leer mientras que millones de desarrolladores están desarrollando con Oracle sobre Linux. Con el kernel de Red Hat Advanced Server, el shortcomings de la arquitectura de la memoria virtual de linux ha sido direccionada y el resultado es que Oracle y Linux ofrecen una combinación de gran performance y una plataforma altamente segura.La comparación funcional en la administración de volúmenes lógicos de Linux y el software metadisk de linux RAID para su uso con Oracle 9i en una aplicación real de clusters es viable y aplicable para aplicaciones en ambientes críticos.Existe ya una lista completa de productos certificados sobre las distribuciones populares de Linux, esa lista puede ser revisada en http://metalink.oracle.com

La introducción de la BD Oracle revoluciona la economía mundial en Tecnologías de Información, hay aplicaciones reales con una nueva arquitectura de compartir memoria cache que sobrepasas las limitaciones tradicionales de compartir memoria en sistemas de bases de datos.

Existen barios tópicos para el uso de la BD Oracle sobre la plataforma Linux, aunado a su respectiva documentación: iDevelop Online Training - Getting Started with Oracle9i Learn about the Oracle9i products Oracle9i Database Oracle9iAS Application Server See how Oracle9i supports application development Oracle9i JDeveloper Application Development on Oracle9i Oracle9i Development Platform: Java Oracle9i Development Platform: XML Business Components for Java

Oracle9iAS Best Practices white papers recomienda las mejores prácticas para Areas que utilizan Oracle 9i, lo cual incluye seguridad, performance y escalabilidad, globalización y aplicaciones de Java.La evolución de las BD en E-Business: A los desarrolladores de Oracle que regresan a la BD Oracle 9i se les hace mucho más fácil su administración y realizan ingenierías mas robustas de e-business.

Oracle 10gLa versión 10 g plantea un nuevo concepto, Grid computing, que consiste en utilizar la mayor cantidad de infraestructura disponible que tiene la empresa."La "g" del nombre, hace referencia a Grid, un concepto académico de larga data,

- 6 -

Page 7: proyecto final oracle.doc

que supone que varios recursos (especialmente computadoras) puedan ser utilizados como un todo, como uno sólo. Ya sea para dar servicios de base de datos o servidores de aplicaciones y se puede administrar como uno sólo también. Es decir, son varias computadoras agrupadas como si fueran una, por lo que se suma la memoria de cada una de ellas y la potencia de procesamiento de CPU. Así, son vistas por el consumidor como si fueran la potencia y memoria de una única computadora, no individualizando cada uno de los servidores como entidadesInstalacion de Oracle 10g Release 1 (10.1), Mac OS X Server para la versión 10.3.6 (Panther), las librerías de ese entonces utilizaban gcc versión 3.3 mientras que la versión 10.4 (Tiger) utiliza librerías gcc con la versión 4.0. Esta particularidad es la causante de una instalación errónea cuando se corre v10.4 o superior de Mac OS X Server. Por otro lado, Oracle ha certificado el Release 1 (10.1) únicamente para la versión Server del Mac OS X, sin embargo, siguiendo el mismo procedimiento descrito se ha podido instalar satisfactoriamente en un Mac OS X v10.4.3, es decir no-Server.Los requerimientos de hardware son los que simultáneamente se piden para el Sistema Operativo como para la Base de Datos; para efectos ilustrativos se puntualiza que se ha podido instalar en un iMac G5, en un PowerBook G4, en un Macintosh Server G4 y en un Xserve G5.En cuanto al software, como mínimo se necesita la versión 10.4 (Tiger) Server, salvando lo descrito en el párrafo anterior para las versiones no-Server.

3. ESTRUCTURA DE LA BD (LÓGICA Y FÍSICA)Niveles de Almacenamiento

La BD Oracle está constituida a nivel 1. físico: de archivos (al menos 1) 2. lógico: de tablespaces (al menos 1)

El tablespace SYSTEM se crea automáticamente al hacer la instalación de Oracle, o al crear una BD.

Este Tablespace contiene el diccionario de datos.

Tablespaces Unidad de accesibilidad a los datos. Uno o más tablespaces por BD. Uno o más archivos por tablespace. Puede quedarse offline debido a un fallo de disco, permitiendo que el SGBD

continúe funcionando. Pueden estar montados sobre dispositivos ópticos si son tablespaces de

sólo lectura. Permiten distribuir a nivel lógico/físico los distintos objetos de las

aplicaciones. Son una unidad lógica de almacenamiento, pueden usarse para aislar

completamente los datos de diferentes aplicaciones.

- 7 -

Page 8: proyecto final oracle.doc

Oracle permite realizar operaciones de backup/recovery a nivel de tablespace mientras la BD sigue funcionando.

Creación de un nuevo Tablespace Creación: Oracle se reserva una cantidad de espacio en disco para su

manejo, la utilice o no. svrmgr>create tablespace tbs1datafile 'nombre_archivo.dbf'size 10mdefault storage(initial 50knext 25kpctincrease 0) online;

Modificación: añadiendo otro archivo. svrmgr>alter tablespace tbs1 adddatafile 'otro_archivo.dbf'size 10m;

Crecimiento Automático de Archivos Usando las posibilidades del Sistema Operativo, Oracle puede gestionar el

crecimiento dinámico de los archivos de los tablespaces. Elimina la posibilidad de error en las aplicaciones por fallos de

dimensionamiento. Solo disponible para archivos montados sobre sistemas de archivos

gestionados por el SO. Problema: la no utilización del espacio reservado para un tablespace. Se

puede solucionar mediante el proceso export/import o de manera transparente svrmgr>alter database datafile 'archivo.dbf' resize 150m;

Introducción a los Segmentos Todos los datos de la BD están almacenados en Segmentos. Existen 5 tipos de segmentos:

de datos. de índices. de rollback. temporales. de bootstrap.

Se pueden almacenar más de un segmento por tablespace. Un segmento está contenido en su totalidad en un tablespace. Un segmento es un conjunto de extensiones de bloques Oracle que pueden

estar en varios archivos de un tablespace. Cuando se borra un segmento, el espacio es devuelto al tablespace. Oracle guarda una lista de bloques libres por segmento. El primer bloque asignado a un segmento contiene la cabecera del

segmento donde se almacena información de control para el kernel Oracle.

- 8 -

Page 9: proyecto final oracle.doc

Cada segmento tiene un conjunto de parámetros de almacenamiento que controla su crecimiento:

initial: tamaño de la extensión inicial (10k). next: tamaño de la siguiente extensión a asignar (10k). minextents: número de extensiones asignadas en el momento de la

creación del segmento (1). maxextents: número máximo de extensiones (99). pctincrease: Porcentaje en el que crecerá la siguiente extensión

antes de que se asigne, en relación con la última extensión utilizada (50).

pctfree: porcentaje de espacio libre para actualizaciones de filas que se reserva dentro de cada bloque asignado al segmento (10).

pctused: porcentaje de utilización del bloque por debajo del cual Oracle considera que un bloque puede ser utilizado para insertar filas nuevas en él.

tablespace: nombre del tablespace donde se creará el segmento. Segmentos de Datos

Tablas Las filas pueden extenderse en más de un bloque (filas encadenadas). create table t1 (...) tablespace tbs1; soportan los siguientes tipos de datos:

char: cadenas de caracteres de longitud fija (<255). varchar2: cadenas de caracteres de longitud variable (<2000) number: enteros y reales de hasta 38 dígitos. date: fecha y hora. long: cadena de caracteres de longitud variable (<2Gb). raw: versión binaria de varchar2. long raw: versión binaria de long (datos multimedia). rowid: dato interno (7 bytes) para direccionar filas.

Segmentos de Índices Acceso rápido a los datos dependiendo de la cantidad de los mismos

(árboles B) . Las consultas que sólo referencian a columnas indexadas se resuelven en

el índice. Control de unicidad (automáticos con clave primaria). Cada índice ocupa un segmento independiente del segmento de datos. Deberían estar en tablespace distinto al de los datos, para mejorar el

rendimiento. Segmentos de Rollback

Son objetos internos de la BD. Permiten efectuar la restauración de las transacciones no validadas. Aseguran la consistencia en lectura. Estructura de los registros:

Identificador de la transacción.

- 9 -

Page 10: proyecto final oracle.doc

Dirección del bloque. Número de fila. Número de columna. Valor del dato antiguo (antes de ser modificado).

Una BD no puede arrancar si no puede acceder al menos a un segmento de rollback.

Si la BD tiene múltiples tablespaces, deben existir al menos dos segmentos de rollback.

Cada segmento de rollback debe tener al menos dos extensiones, reutilizables de manera cíclica.

Los segmentos de rollback son un objeto compartido de la BD, aunque se puede asignar un segmento de rollback particular a una transacción dada.

Segmentos Temporales Creados por Oracle para un uso temporal cuando debe realizar una

ordenación que no le cabe en memoria, en las operaciones: create index, order by, group by, distinct, union, intersect, minus.

Son eliminados cuando la sentencia finaliza. Segmentos de Bootstrap

Se crea en SYSTEM. Contiene definiciones del Diccionario para sus tablas, que se cargan al abrir

la BD. No requiere ninguna acción por parte del DBA. No cambia de tamaño.

- 10 -

Page 11: proyecto final oracle.doc

Comando Truncate Permite borrar todas las filas de una tabla sin borrar la estructura del objeto. No requiere proceso de rollback ni redolog. Los índices son también truncados.

Comando Analize Permite recoger estadísticas sobre tablas, índices y otros objetos de la BD

que luego utilizará el optimizador. Almacena estadísticas en el Diccionario. Debe ser ejecutado periódicamente por el dba. Se pueden analizar todos los objetos de un usuario dado.

- 11 -

Page 12: proyecto final oracle.doc

4. ESTRUCTURA DE LA MEMORIA

Estructuras internas de memoriaLa base de datos Oracle utiliza dos tipos distintos de estructuras de memoria: Areas globales y Areas de proceso.

Area Global de SistemaSe iniciará ésta sección ejemplificándolo con la lectura de un libro: Una vez leído un capítulo ¿Cuál sería la forma más rápida de pasar esa información a otra persona?, se podría hacer que dicha persona leyera también ese capitulo, pero sería mas rápido si se pudiera conservar la información en la memoria y pasar después la información de la memoria a la segunda persona.El Area Global de Sistema (System Global Area: SGA) de una base de datos Oracle sirve para lo mismo (facilita la transferencia de información entre usuarios). También mantiene la información estructural más consultada sobre la base de datos.

Tamaño del SGASHARED_POOL_SIZE: tamaño en bytes del área dedicada a sentencias SQL y PL/SQL.DB_BLOCK_SIZE: tamaño en bytes del bloque Oracle.DB_BLOCK_BUFFER: el número de buffers, cada uno del tamaño de DB_BLOCK_SIZE, reservados para la SGA. El tamaño total de espacio “alocado” para el “database buffers caché” en la SGA es el producto de DB_BLOCK_SIZE por DB_BLOCK_BUFFERS.LOG_BUFFERS: El número de bytes reservados para los Redo Log Buffers.

La estructura del SGA es:

Los bufers del bloque de datos Los bufers del bloque de datos (data block buffers) son un caché del SGA que se utiliza para contener los bloques de datos que se leen de los segmentos de datos de la base de datos, tales como tablas, índices y grupos. El tamaño del caché del bufer del bloque de datos viene determinado por el parámetro DB_BLOCK_BUFFERS del archivo INI.ORA de dicho servidor de base de datos.

- 12 -

Buffers del Bufers del Caché AlmacénBloque registro del SQL

De datos de rehacer diccionario compartido

Page 13: proyecto final oracle.doc

La gestión del tamaño del caché del bufer del bloque de datos juega un importante papel en la gestión y ajuste de la base de datos.

Como éste tamaño es fijo, y suele ser inferior al espacio utilizado por los segmentos de la base de datos, no se pueden conservar todos los segmentos de la base de datos en memoria simultáneamente. Oracle gestiona el espacio disponible mediante un algoritmo de menos utilizado recientemente (LRU: Least Recently Used). Cuando se necesita espacio libre en el cache, se escriben al disco los bloques menos utilizados recientemente, siendo sustituidos por nuevos bloques de datos. De esta forma en la memoria se conservan los datos utilizados con mas frecuencia.

No obstante si el SGA no es lo suficientemente grande, distintos objetos competirán por el espacio del caché del bufer del bloque de datos. Esto es particularmente probable cuando varias aplicaciones comparten el mismo SGA. En dicho caso los segmentos más utilizados recientemente de cada aplicación compiten constantemente por el espacio del SGA con los segmentos más utilizados recientemente de otras aplicaciones. Como consecuencia de ello, las solicitudes de datos del caché del bufer del bloque de datos tendrán una baja relación de aciertos a fallos.

Caché del diccionarioLa información sobre los objetos de la base de datos se almacena en las tablas del diccionario de datos. En ésta información se incluyen los datos de las cuentas de usuario, los nombres de los archivos de dato, los nombres de los segmentos, la ubicación de las extensiones, las descripciones de las tablas y los privilegios. Cuando la base de datos necesita ésta información (por ejemplo para comprobar la autorización de un usuario para consultar una tabla), se leen las tablas de diccionario de datos y los datos devueltos se almacenan en el SGA, en el caché del diccionario (dictionary caché).

Este caché también se gestiona mediante un algoritmo LRU, el tamaño se establece mediante el parámetro SHARED_POOL_SIZE del archivo INIT.ORA de la base de datos.

Si el caché del diccionario es demasiado pequeño, la base de datos tendrá que consultar reiteradamente la información que necesita en las tablas del diccionario de datos. Estas consultas se llaman aciertos recursivos, y se resuelven mas lentamente que las consultas que pueden manejarse solo mediante el caché del diccionario de ésta memoria.

Bufer del registro de rehacerEn las entradas de rehacer se describen los cambios realizados en la base de datos. Se escriben en los archivos de registro de rehacer en línea de forma que pueden utilizarse en las operaciones de reconstrucción durante la operación de la base de datos. No obstante, antes de escribirse en los archivos de registro de rehacer en línea, se almacenan primero en el SGA, en un área llamada bufer de

- 13 -

Page 14: proyecto final oracle.doc

registro de rehacer (redo log buffer). La base de datos escribe después de forma periódica series de entradas de rehacer los archivos de registro de rehacer en línea, optimizando así ésta operación.

El tamaño en bytes de los bufers de registro de rehacer se define mediante el parámetro LOG_BUFFER del archivo INI.ORA.

Fondo común SQL compartidoEn el caché del diccionario se almacena un área denominada fondo común del SQL compartido (shared SQL pool). En ésta área de memoria también se incluye información sobre sentencias ejecutadas sobre la base de datos. Así, mientras que el bufer del bloque de datos y el caché del diccionario permiten la compartición de información estructural y de los datos entre los usuarios, el modo común SQL compartido permite compartir las sentencias SQL mas utilizadas

El fondo común SQL compartido contiene le plan de ejecución y el árbol de análisis de las sentencias SQL que se ejecutan sobre la base de datos. La segunda vez que cualquier usuario ejecuta una sentencia SQL idéntica, puede aprovecharse la información de análisis disponible en el fondo común SQL compartido para acelerar la ejecución.

Area Global del Programa

El área global del programa (PGA) es un área de la memoria utilizada por un único proceso de usuario de Oracle.

En las últimas versiones de Oracle parte del PGA puede almacenarse en el SGA. Esto ocurre cuando se utiliza el servidor multiproceso (multi-threaded). La arquitectura multiproceso del servidor permite que varios procesos de usuario utilicen el mismo proceso del servidor, reduciendo así los requisitos de memoria de la base de datos. Si se utiliza ésta opción, la información sobre la sesión del usuario se almacena en el SGA en lugar de en el PGA.

Las relaciones entre las estructuras físicas y de la memoria de la base de datos se mantienen y aplican mediante estructuras de proceso, que son los procesos de fondo propios de la base de datos, y cuyo número varía en función de la configuración de la base de datos. Estos procesos los gestiona la base de datos y apenas necesita trabajo administrativo.

Memoria de la InstanciaLa instancia la componen Procesos (programas ejecutables con interfaz o servicios) y recursos (estructuras de memoria RAM, buffers, datos). El mensaje devuelto por show SGA muestra el tamaño total de la memoria compartida SGA.

SVRMGR> show sgaTotal System Global Area 15077376 bytes

- 14 -

Page 15: proyecto final oracle.doc

Fixed Size 49152 bytesVariable Size 12906496 bytesDatabase Buffers 2048000 bytesRedo Buffers 73728 bytes

Estructuras de Memoria

SGA System Global Area

49Kb Área Fija. Información adicional sobre procesos

Contiene información sobre: Usuarios conectados Bloqueos Número máximo de bloqueos

para DDL y DML Colas de Entrada/Salida. Número de db_links permitidos

12Mb Área de memoria compartida. Shared Pool.Área Variable. (Shared SQL Area). Se dimensiona con el parámetro shared_pool_size en init<sid>.ora, por ejemplo shared_pool_size = 11534336

Contiene: Sentencias SQL

preanalizadas (parsed) Procedimientos,

librerías Diccionario de datos

Área compartida para sentencias SQL

Caché del diccionario (Dictionary Caché o Row Caché)

2 Mb Caché de datos (buffercaché) Buffers de BD.Database Buffers

Contiene los datos y bloques de rollback en uso.Se dimensiona con el parámetrodb_block_buffers en init<sid>.ora, por ejemplodb_block_buffers = 1000

73 Kb

Caché de redo logs (Redo log buffers)

Contiene los datos que son modificados para pasarlos a archivos históricos y mantener un histórico capaz de reconstruir la BD en caso de fallo

PGA Cursores (Áreas privadas para sentencias SQL)Pila de variables

Áreas de ordenación

Áreas de ordenación de sentencias. Sort Area

Ejecutables de Oracle

- 15 -

Page 16: proyecto final oracle.doc

Procesos de la Instancia Procesos Background

Estándar DBWR. DataBase Writer

Escribe en los archivos de la BD los buffers de datos modificados en memoria

LGWR. LoG Writer. Escribe en los archivos históricos de la BD (redo log files) cuando los redo log buffers se han llenado o cuando se produce un commit. Esto permite el recovery.

SMON. System MONitor.

Trata las recuperaciones en caso de fallo. Limpia los segmentos temporales cuando no están en uso. Realiza el Coalesce de tablespaces, uniendo en una sola extensión extensiones contiguas.

PMON. Process MONitor.

Recuperaciones en caso de fallo de un usuario. Libera recursos inactivos. En configuraciones Multi-Threaded Server restablece los procesos dispatcher y servidores caídos.

Puntos de Ruptura

CKPT Proceso de Apoyo al LGWR. Actualiza archivos de control y las cabeceras de archivos de datos agilizando puntos de ruptura. Este proceso se activa si indicamos en init<sid>.ora la linea checkpoin_process=true

Multithread Server

D000 – Dnnn Procesos encargados de distribuir las peticiones de usuarios de sentencias SQL entre los procesos compartidos.

S000 – Snnn Procesos Compartidos que resuelven sentencias SQL

Parallel Server

LCKn Procesos de sincronización de instancias.

LMON Soluciona problemas de procesos muertos o colgados en Parallel Server.

Parallel Query

P000 – Pnnn Ejecución de sentencias de forma paralela distribuyendo la carga entre distintas CPU.

Modo Archiver (archive log)

ARCH Proceso encargado de copiar los históricos (redo log files) en archivos aparte (archiver files) antes de que sean sobreescritos.

Opción Distribuida

RECO Proceso encargado del tratamiento de fallos y recuperaciones producidos en transacciones distribuidas debidos a fallos de la red o de la instancia.

SNP0 – SNPn Procesos para el mantenimiento y refresco de snapshotsen BD distribuidas.

- 16 -

Page 17: proyecto final oracle.doc

5. MÉTODOS DE INTEGRIDAD, CONCURRENCIA, CONSISTENCIA Y MANEJO DE TRANSACCIONES DE DATOS

El servidor Oracle también se encarga de la integridad de los datos. Si se produce cualquier tipo de fallo mientras un usuario está cambiando los datos en una base de datos, ésta tiene la capacidad de deshacer o cancelar cualquier transacción sospechosa. Con Oracle Server, nunca albergamos dudas en lo referente al estado de una determinada transacción. El servidor incluye también un bloqueo completo por filas de todos los datos almacenados.Por ejemplo, si estuviéramos trabajando en una aplicación de compra de acciones de bolsa, construida sobre Oracle, y dos usuarios desearan comprar el lote número 5, formado por 100 acciones de la empresa Database Technologies, la base de datos impediría que dicha acción tuviera lugar. Puesto que sólo hay un único lote, la base de datos sólo permitiría a uno de los usuarios acceder al procedimiento de compra, y el otro usuario se vería obligado a esperar. Cuando el segundo usuario recibiera finalmente la autorización para continuar, se encontraría con que el lote ha pasado al estado de vendido. Oracle Server gestiona de modo transparente estas situaciones, manteniendo la integridad de los datos.Las restricciones de la integridad hacen cumplir las reglas de las actividades en el nivel de la base de datos definiendo un conjunto de controles para las tablas el sistema de usuario. Estos controles se hacen cumplir automáticamente siempre que se emite una instrucción de insertar, actualizar o eliminar sobre la tabla. Si se viola cualquiera de las restricciones, se produce la anulación de la instrucción. Las demás instrucciones dentro de la transacción permanecen en un estado pendiente y pueden ser confirmadas o se pueden anular de acuerdo con la lógica de la aplicación. Debido a que las restricciones de la integridad son controladas en el nivel de la base de datos, son realizadas con independencia de donde se haya originado la instrucción de insertar, actualizar o eliminar, ya sea una herramienta Oracle o no. Definir controles que utilicen estas restricciones es también más rápido que realizar los mismos controles usando SQL. Además, la información proporcionada al declarar restricciones es utilizada por el optimizador de Oracle para tomar decisiones mejores sobre la forma de ejecutar una instrucción sobre la tabla. El producto Oracle Forms puede utilizar también restricciones para generar código automáticamente en los programas front-end para proporcionar al usuario un aviso temprano ante cualquier error.Los tipos de restricciones de integridad que se pueden establecer en una tabla son NOT NULL (no permitir valores nulos), PRIMARY KEY (clave primaria), UNIQUE (valor único), FOREIGN KEY (clave externa), CHECK(comprobar que se cumplen una serie de condiciones) y los índices.Integridad de datosPara garantizar la integridad de datos se deben modelar los datos.Se debe garantizar mediante el diseño de la base de datos que los datos son conformes a las restricciones de integridad definidas para ellos

- 17 -

Page 18: proyecto final oracle.doc

Integridad de dominiosSe aplica como reglas que definen los Valores válidos de los datos, tales como el tipo de dato

Integridad de transicionesSe define como los estados válidos por los que puede pasar válidamente un datoEjemplo: Edad Tipo: Numérico

Válido : 30Inválido : 180

Integridad de entidadesLa existencia de una clave principal es una restricción de entidad que impone la regla “Cada entidad debe estar identificada de forma única”

Integridad Referencial“Las claves externas no pueden quedar huérfanas”

- 18 -

Page 19: proyecto final oracle.doc

Personalización : dentro de los tres niveles de abstracción se refiere al de las vistas, que es la encargada de que los usuarios tengan acceso a solo una parte de la base de datos, que es la que les corresponde, para que los puedan manipular. Manejo de Transacciones : se aplica el requisito de todo o nada, es decir la atomicidad, que hace que las operaciones no se realicen por partes, y de esta manera se pueden evitar fallos en las mismas. Pueden ocurrir cuando se va la energía o se cae el sistema, y las transacciones quedan a la mitad de un proceso. Control de Concurrencia : controla la interacción entre las transacciones concurrentes para asegurar la consistencia de la base de datos. Este error puede ocurrir cuando más de dos personas quieren accesar o manipular el mismo dato en la base de datos. Seguridad : No todos los usuarios de un sistema de base de datos deberían poder acceder a todos los datos. Es aquí donde se determinan los "privilegios" que tendrá cada usuario con respecto a la base de datos, dichos privilegios corresponden también a las ligaduras de integridad que el administrador de la base de datos controlará. La seguridad se puede manejar en conjunto con la personalización e integración de la base de datos. Recuperación de la Información : Nos permite recuperar los datos en caso de que haya un error en el manejo de la base de datos; es decir, nos ayuda a que no se pierdan los datos de manera definitiva. Interacción con el Sistema de Archivos: Manipulado por el gestor de archivos que permite que los datos queden guardados en un espacio en el disco duro o en algún lugar predeterminado para su almacenamiento. Las funciones del DBA incluyen las siguientes: Definición del Esquema: El DBA crea el esquema original de la base de datos escribiendo un conjunto de definiciones que el compilador de DDL traduce a un conjunto de tablas que son almacenadas permanentemente en el diccionario de datos. Estructura de almacenamiento y definición del método de acceso: Los DBA crean estructuras de almacenamiento apropiadas y los métodos de acceso escribiendo un conjunto de definiciones, que son traducidas por el compilador del lenguaje de definición y almacenamiento de datos. Esquema y modificación de la organización física: Los programadores llevan a cabo las relativamente escasas modificaciones sobre el esquema de base de datos o la descripción de la organización de almacenamiento físico escribiendo un conjunto de definiciones que son usadas por el compilador del DDL o por el compilador de lenguaje de definición y almacenamiento de datos para generar las modificaciones en las tablas correspondientes del sistema interno. Concesión de la autorización para el acceso a los datos: La concesión de diferentes tipos de autorización permite al administrador de la base de datos determinar a qué partes de la base de datos pueden accesar los diferentes usuarios. La información se mantiene en una estructura del sistema especial que el sistema de base de datos consulta cuando se intenta el acceso a los datos de sistema. Especificación de las ligas de integridad: Los valores de los datos almacenados en la base de datos deben satisfacer ciertas ligas de integridad. Tales ligas deben ser especificadas por el DBA; dichas ligas se refieren a la validación de los datos.

- 19 -

Page 20: proyecto final oracle.doc

6. INDIZACIÓN

Un índice es una estructura de memoria secundaria que permite el acceso directo a las filas de una tabla (esté o no agrupada). El índice es un instrumento que aumenta la velocidad de respuesta de la consulta, mejorando su rendimiento y optimizando su resultado. El manejo de los índices en ORACLE se realiza de forma inteligente, donde el programador sólo crea los índices sin tener que especificar, explícitamente, cuál es el índice que va a usar. Es el propio sistema, al analizar la condición de la consulta, quien decide qué índice se necesita. ORACLE provee cinco tipos de índices:• Índices basados en B*-trees para tablas no agrupadas.• Índices basados en B*-trees para tablas agrupadas.• Índices basados en Hashing para tablas agrupadas.• Índices Bitmap.• Índice basados en B*-Trees para tablas organizadas por índices.En tablas que no están organizadas por índice, los índices son independientes de la estructura física de la tabla (o tablas agrupadas) y por lo tanto poseen requerimientos de espacio adicionales a los de la tabla sobre los que se encuentran definidos. La finalidad principal de un índice es la definir un camino de acceso a los datos que garantice una mejora en el rendimiento de las operaciones de búsqueda. ORACLE efectúa de manera automática el mantenimiento de la consistencia de los índices asociados a una tabla cada vez que se insertan y eliminan filas o se modifican valores de las columnas sobre las que se define un índice. Si bien es cierto que los índices aceleran las operaciones de consulta, también debe tomarse en cuenta que el mantenimiento de un índice tiene efecto sobre el rendimiento de las operaciones de eliminación, inserción y actualización ya que es doble el trabajo de manipulación de bloques de datos (debe almacenarse información en los bloques de datos de una tabla y de los diferentes índices sobre ella definidos).Los índices pueden definirse sobre una o múltiples columnas de una tabla (o “cluster”). Sin embargo ORACLE impone dos restricciones: • El número máximo de columnas para índices basados en B*-Tree es de 32 columnas, mientras que para índices bitmap es de 30 columnas.• El espacio requerido para almacenar una clave no puede exceder la mitad del espacio disponible para almacenar datos en un bloque ORACLE (recordemos que era tamaño de bloque menos el espacio libre para actualizaciones menos el “overhead” para información de control del bloque de datos). ORACLE permite la creación de índices que permitan albergar, para un mismo valor de la clave, una fila o varias filas. Los índices UNIQUE garantizan que en una tabla (o “cluster”) no puedan existir dos filas con el mismo valor. Por defecto (si no se especifica lo contrario) al crear un índice será considerado como de claves repetidas. Es importante destacar que ORACLE sólo genera en forma automática los siguientes índices cuando se crea una tabla:• Un índice UNIQUE basado en B*-tree para mantener las columnas que se hayan definido como clave primaria de una tabla utilizando el constraint PRIMARY KEY de una tabla no organizada por índice.

- 20 -

Page 21: proyecto final oracle.doc

• Un índice UNIQUE basado en B*-tree para mantener la restricción de unicidad de cada grupo de columnas que se haya declarado como único utilizando el constraint UNIQUE.• Un índice basado en B*-tree para mantener las columnas que se hayan definido como clave primaria y todas las filas de una tabla organizada por índice.• Un índice basado en hashing para mantener las filas de un grupo de tablas (“cluster”) organizado por hash. A estos índices (aquellos generados automáticamente) se les denominará Índices Primarios.El administrador de la base de datos podrá crear otros índices de acuerdo con el estudio de rendimiento de las aplicaciones y de la base de datos. A estos índices creados específicamente para resolver problemas particulares de degradación de rendimiento se les denominará Índices Secundarios.Una última variación permitida por ORACLE en los índices basados en B*-tree para tablas no agrupadas es el manejo de índices de claves invertidas. En un índice de claves invertidas el orden mantenido dentro de la estructura de árbol viene dado por el resultado de invertir el valor de cada columna que forma parte del índice. Esta política busca resolver el problema de degradación del rendimiento que ocurre cuando:• Se presentan inserciones en las que el orden de la inserción de filas es exactamente igual al orden parcial definido sobre los valores de las claves.• En bases de datos paralelas, donde múltiples instancias del DBMS acceden a un grupo de filas de una tabla ubicadas dentro de una rango de valores para sus claves.Si se invierten los valores de las claves el efecto producido será el de dispersar claves que antes debían estar consecutivas en el orden establecido por el índice. Al separar estas claves se reduce la contención sobre el bloque de datos ORACLE que antes debía contenerlas. Estos índices sirven sólo para realizar búsquedas de igualdad (“exact match queries”) por lo que no deben utilizar si la tabla sobre la que se definirá dará soporte a aplicaciones que hagan búsqueda por rango (“range match queries”).

Estructura de un índice basado en B*-TreeDe acuerdo con la definición de la estructura B*-tree, un índice ORACLE de este tipo se estructura como un árbol cuya raíz contiene múltiples entradas y valores de claves que apuntan al siguiente nivel del árbol. Cada una de estas entradas mantiene un orden sobre las claves que están siendo almacenadas de forma tal que el apuntador a la izquierda de una clave C indicara el bloque de nivel siguiente en el árbol donde se ubican claves menores que C. De igual forma, el apuntador a la derecha de una clave C´ indicara la el bloque de nivel siguiente en el árbol donde se ubican claves mayores que C´. Todos los nodos internos del árbol tienen la misma estructura. Los nodos hoja contienen la entrada del índice con toda la información necesaria para localizar la(s) fila(s) que contienen un valor específico para la clave. Los nodos hoja se encuentran doblemente enlazados para facilitar el recorrido del índice en orden ascendente o descendente. Cada

- 21 -

Page 22: proyecto final oracle.doc

entrada en un nodo hoja representará las filas que posee el mismo valor para la clave y posee la siguiente estructura:• Un encabezado que almacena el número de columnas e información sobre el uso concurrente de la fila.• Una secuencia de valores de longitud de columna y valor de columna que permiten expresar el valor de la clave almacenada en dicha entrada.• El ROWID de la fila que posee el valor de la clave.Las siguientes convenciones son utilizadas para el almacenamiento en un índice basado en B*- Tree:• En caso de que un índice no sea UNIQUE, si múltiples filas poseen el mismo valor de la clave en la estructura del índice se repetirán los valores de dichas claves. Esto constituye una pequeña diferencia respecto a la definición original de B*-trees.• Si una fila posee para todas las columnas de la clave el valor NULL, en el índice no existirá una entrada correspondiente a dicha fila.• Si la tabla no está particionada, se utilizan ROWIDs restringidos para indicar la dirección de la fila. Esto se debe a que todas las filas de la tabla no se encuentran en un mismo segmento y con esta política el índice requiere de menos espacio en disco.

Estructura de un Indice BitmapUn índice bitmap también está organizado como un B*-Tree, pero la estructura de los nodos hoja cambia para almacenar un bitmap definido sobre los valores de la clave en lugar de ROWIDs. Cada bit en el bitmap corresponde a un posible ROWID, y si el bit está encendido esto significa que el ROWID en cuestión posee el valor indicado para la clave. ORACLE almacena de forma comprimida los “bitmap” asociados a cada entrada del índice utilizando para tal fin una técnica propietaria.Los índices de tipo bitmap son particularmente idóneos en escenarios en los que no se producen o se producen muy pocas actualizaciones sobre las columnas que conforman la clave. Una actualización en una de estas columnas trae implícita la modificación de dos o más entradas del índice (incluidos los bitmaps). De igual forma, la inserción de un nuevo valor de la clave trae implícita una reorganización masiva del índice, la cual es extremadamente costosa.Los índices de tipo bitmap permiten acelerar más consultas que utilicen el operador de disyunción sobre los atributos claves. Verificar si el valor de una columna de la clave está entre un grupo de valores es sencillo en un índice bitmap ya que sólo debe efectuarse el OR bit a bit de los bitmaps asociados a las entradas de los valores en el rango de búsqueda. En los índices basados en B*-Trees esta operación es más costosa.Como regla general, los índices basados en B*-Tree son mejores para ambientes de procesamiento de transacciones en línea (OLTP – On-Line Transaction Processing), en los que suelen existir tablas de alta volatilidad (gran número de operaciones de inserción y eliminación) y de alta frecuencia de actualización. Por otra parte los índices bitmap son muy útiles en ambientes donde se realizan consultas muy complejas sobre tablas muy poco volátiles y que prácticamente no

- 22 -

Page 23: proyecto final oracle.doc

sufren actualizaciones. Ambientes de este tipo son los derivados del uso de técnicas de “Data Warehousing” o en Sistemas de soporte a la decisión (DSS – Decisión Support Systems).

Oracle 9, Tablas organizadas por índicesUna Tabla organizada de Índices (Index-Organized Table IOT) es una organización de almacenamiento único del servidor Oracle, el cual provee de performance adicional, escalabilidad y disponibilidad sobre las tablas convencionales. Actualmente las tablas organizadas por índices están almacenadas en un nivel de índice B-tree, en donde las ordenes de búsqueda se basan en las llaves primarias de las tablas de tal forma que los cambios a los datos tales como agregar, modificar o borrar renglones requiere de modificar el índice solamente. Esta implementación activa en gran medida el acceso rápido a la tabla para todas las consultas basadas en llaves, haciendo que las tablas organizadas por índices sean ideales para una gran variedad de aplicaciones.¿Dónde se usan las tablas organizadas por índices?La demanda de rapidez en las consultas, alta disponibilidad y capacidad de almacenamiento reducido. Algunos ejemplos para la utilización de éste concepto de uso y manejo de índices son: 1. Proceso de ordenes electrónicas : una tabla organizada por índices es una

estructura de almacenamiento ideal para la tabla de ordenes, en donde el query y las operaciones DML (Data Management Language) que ocurren en éste tipo de aplicaciones fragmentan usualmente la tabla, requiriendo frecuentemente una reorganización de la tabla. Una tabla organizada en indices puede ser reorganizada fuera de los índices secundarios y su performance en línea elimina el tiempo fuera ("downtime") de la tala ordenes.

2. Catálogos electrónicos : Una tabla organizada en índices puede ser usada para almacenar cualquier tipo de catálogos que son usualmente indexados por producto de acuerdo a atributos basados en llaves primarias o bien recuperación de catálogos que pueden tener multicolumnas como llave primaria. Ambos casos se benefician con el uso de tablas organizadas en índices. La compresión de la llave puede ser usada sobre éstas tablas organizadas en índices para permitir valores repetidos en la columna incrementando el performance y reduciendo el almacenamiento.

3. Búsquedas en internet : Estas aplicaciones mantienen una lista de palabras llave (clave), usuarios o URL’s, para su almacenamiento en tablas organizadas en índices, en donde cada renglón mantiene una llave primaria con alguna información adicional. Una tabla organizada en índices almacenando URL’s y sus ligas asociadas puede incrementar considerablemente la rapidez en el tiempo de acceso a la consulta.

4. Portales Web : Este tipo de aplicaciones son nombres de usuarios de la BD con un subconjunto de la información del usuario disponible mas frecuentemente usada. La columna flexible puede ser reemplazada por una tabla organizada por índices lo que provee la opción a incrementar el performance de esa aplicación.

- 23 -

Page 24: proyecto final oracle.doc

5. Data Warehousing : La tabla organizada por índices soporta cosas como la carga, creación de índices y requerimientos de búsqueda para el manejo de grandes volúmenes de datos. Las tablas organizadas por índices particionadas son también soportadas, de tal forma que cada partición puede ser cargada concurrentemente. Las aplicaciones de Data Warehousing usan esquemas de inicio que también pueden obtener menor performance y escalabilidad con la implementación de tablas de hechos (“fact”) como tablas organizadas por índices para una ejecución mas eficiente de los querys de inicio. Todas éstas formas de tablas organizadas por índices proporcionan un manejo de datos a gran escala.

Rapidez en el acceso a índicesLas tablas organizadas en índices proveen de un acceso rápido a los renglones de las tablas por la llave primaria. De igual modo, desde que los renglones son almacenados en un orden de acuerdo a la llave primaria, el rango de acceso por la llave primaria involucra un acceso mínimo de bloques. De acuerdo a ésta organización se lleva a cabo un acceso mucho más rápido a aquellas columnas mas frecuentemente accesadas, la opción de almacenamiento de overflow de registros puede ser usada para sacar a las columnas no muy usadas frecuentemente del bloque B-tree como una opción de área de almacenamiento de overflow. Esto limita el tamaño y contenido de la porción de registros actualmente almacenados en el bloque leaf B-tree, resultando un B-tree mas pequeño y un acceso más rápido.Reducción de almacenamientoLas tablas organizadas por indices mantienen una estructura de almacenamiento sencillo, el índice B-tree. Los valores de las columnas que son llave primaria son almacenados únicamente en el índice B-tree y no son duplicados ni en la tabla ni en el índice, como pasa en un conjunto de tablas organizadas convencionalmente. El renglón de una tabla organizada por índices está ordenada con base a la llave primaria, y aunque cada índice generado ocupa espacio de almacenamiento, un significativo ahorro en el espacio para el almacenamiento se puede obtener a través del uso de compresión de llavesIncremento de 24x7 en disponibilidadLas tablas organizadas por indices utilizan ROWID’s lógicos basados en la llave primaria. El uso de ROWID activa la reorganización en linea y ese proceso no afecta los indices secundarios los cuales son revalidados después de una reorganización. Esta capacidad reduce o elimina el tiempo fuera que se generalmente se utiliza para la reorganización de indices secundario, haciendo una organización de índices por tablas beneficiando a 24x7 aplicaciones.Escalabilidad incrementalLas tablas organizadas por índices son altamente escalables por su soporte para particionar y realizar operaciones en paralelo. El rango de partición y la búsqueda de particiones en tablas organizadas por indices son como las columnas LOB en particiones, que son soportadas por las tablas organizadas por indices. Las consultas en paralelo y el DML paralelo también son soportadas, Las consultas sobre tablas organizadas por índices incluyen una partición basada en la optimización optima de flujos de ejecución.

- 24 -

Page 25: proyecto final oracle.doc

De fácil uso y funcionalidad completaLa manipulación de aplicaciones en tablas organizadas por indices solo son como una tabla ordinaria, manipuladas con sentencias estándar SQL. Todas las interfaces de programación, incluyendo PL/SQL, OCI y JDBC pueden accesar tablas organizadas por indices. Todos los complementos de Utilerias y herramientas de Oracle son soportadas por éste tipo de organización, incluyendo el SQL*Loader, IMPORT/EXPORT y el transporte de los tablespaces, específicamente par el punto de recuperación de operación usando el Oracle Recovery Manager (RMAN).Características de la llave:

Funcionalidad completa en la tablaCaracterísticas del performance:

Soporta segmentos de OVERFLOWCompresión de llavesNuevos indices secundarios de bitmaps sobre IOT’s no particionadosNueva guía en linea para un DBA invitado reacondicionado sobre indices secundariosOpción a recolocación de columnasCaracterísticas de escalabilidad:Rango de particionesNuevo particionamiento HashNuevas columnas LOB particionadas en IOT’sQuerys paralelosNuevo DML paraleloSoporte para vistas materializadas

Características de disponibilidad:Movimiento en lineaReorganización en lineaIndices secundarios lógicosNueva creación y reconstrucción de indices en lineaNuevos índices de COALESCE en lineaNuevos movimientos en linea de segmentos de flujoNueva creación y reconstrucción de indices de llave comprimida.

7. IMPLEMENTACIÓN DEL DISEÑO CONCEPTUAL (MODELO ENTIDAD - RELACIÓN)

El modelo Entidad/Relación (Chen 1976) es un modelo de datos semántico cuyo objetivo inicial era vencer algunas de las dificultades mostradas por el modelo relacional, al que pretendía sustituir. Concretamente, pretendía dotar de "significado" a las estructuras de datos, carentes del mismo, del modelo relacional.En la práctica, este modelo de datos no ha llegado a implementarse en ningún DBMS comercial, pero ha tenido una enorme repercusión como herramienta de modelado de bases de datos (paradójicamente, bases de datos relacionales), existiendo hoy en día herramientas de diseño conceptual que incorporan la

- 25 -

Page 26: proyecto final oracle.doc

totalidad de sus conceptos e incluso productos que transforman diagramas conceptuales E/R en bases de datos reales en diversos formatos. Consideramos que el modelado E/R se ha convertido en estándar para el diseño de bases de datos relacionales, por lo que lo utilizaremos para describir nuestra implementación. Esta aseveración se ve reforzada por la elección de este modelo de datos en proyectos importantes, nos referimos a Chen (1976,1983).En el modelo Entidad/Relación, el UoD/mundo/empresa/sección de la realidad se representa mediante un número muy reducido de conceptos semánticos básicos: el mundo está compuesto de entidades; una entidad es cualquier objeto distinguible relevante en el mundo en cuestión (los profesores y cursos en el mundo académico de nuestro ejemplo anterior). Estas entidades poseen un número indeterminado de propiedades, que son "trozos" de información que describen a las entidades de uno u otro modo. Cada una de las entidades tiene una identidad, esto es, son identificables de forma única. Grupos de entidades relacionadas mantienen relaciones con otros grupos de entidades. También existen subtipos de entidades: la entidad E2 es un subtipo de la entidad E1 si y sólo si cada E2 es también un E1.Se supone que mediante estos simples componentes se puede modelar cualquier "sección de realidad". Aplicando estos conceptos al submundo que nos proponemos modelar, el lexicón, podríamos considerar a los distintos lexemas como las entidades centrales que lo componen. Los lexemas tienen ciertas propiedades (morfológicas, sintácticas, semánticas) y mantienen ciertas relaciones con otros lexemas (sinonimia, hiperonimia). Esto es una enorme simplificación del asunto, pero nos puede servir para mostrar el modus operandi que el modelo nos impone.El modelo E/R aporta una herramienta de modelado para representar las entidades, propiedades y relaciones: los diagramas Entidad/Relación. Mediante éstos, el esquema conceptual abstracto puede ser mostrado gráficamente y mantener una independencia conceptual con respecto a la implementación propiamente dicha. En realidad, podemos hacer que los diagramas sean un reflejo fiel de las relaciones, interrelaciones y atributos del modelo relacional de datos o podemos englobar diversas relaciones en una sola entidad o conjunto de propiedades.

- 26 -

Page 27: proyecto final oracle.doc

8. ADMINISTRACIÓN DE LA SEGURIDAD DE LA BASE DE DATOS

Los sofisticados mecanismos de seguridad de Oracle controlan el acceso a los datos sensibles utilizando un conjunto de privilegios. En función del nombre con el que se conectan a la base de datos, a los usuarios se les conceden derechos para consultar, modificar y crear datos. Los clientes usan estos mecanismos para asegurarse de que ciertos usuarios pueden consultar los datos de carácter sensible, mientras que a otros se les niega dicha posibilidad.Realización de copias de seguridad y recuperaciónOracle proporciona sofisticados procedimientos de realización de copias de seguridad y recuperación de los datos. Las copias de seguridad permiten crear

- 27 -

Page 28: proyecto final oracle.doc

una copia secundaria de los datos de Oracle; los procedimientos de recuperación restauran los datos a partir de una copia de seguridad. La estrategia de copias de seguridad y recuperación de Oracle permite minimizar la pérdida de datos y el tiempo para cuando se produce un problema. Oracle Server también proporciona esquemas de copia de seguridad y recuperación que permiten un acceso ininterrumpido a los datos 7 días a la semana, 24 horas al día y 365 días al año.Rollback y Redo Fases en la ejecución de una sentencia

Cacheo de bloques de datos y rollback (si no lo estaban) Bloqueo de datos Copia del viejo valor en segmentos de rollback Copia del nuevo valor en buffers de redo log Modificación de los bloques de datos

Rollback RedoAlta (INSERT) Clave Registro completoBaja (DELETE) Registro completo ClaveModificación (UPDATE) Clave y valor modificado

anteriorClave y valor modificado posterior

Consulta (SELECT) - -

Efecto de la evolución de un bloque oracle de datos sobre un bloque oracle de rollback

Segmentos de rollback Deshacer cambios (SET TRANSACTION, SAVEPOINT, COMMIT,

ROLLBACK) Consistencia en lectura para otras transacciones Recuperación en un estado consistente en caso de fallo

Database log mode Montada no abierta SVRMGR>shutdown SVRMGR>startup mount SVRMGR>startup nomount + alter database mount; SVRMGR>alter database archivelog;

- 28 -

Page 29: proyecto final oracle.doc

SVRMGR>alter database noarchivelog; c:\orant\database\log1orcl.ora, ...

Automatic archival SVRMGR>archive log list SVRMGR>archive log start SVRMGR>archive log stop initsid.ora>log_archive_start = true log_archive_dest log_archive_format c:\orant\database\archive\

Usuarios de ORCLE Usuario Password por

defectosys change_on_installsystem managerscott tigerinternal oraclesys oracle

En una Base de Datos Oracle la confidencialidad puede ser relativa a:1. Los objetos de la Base de Datos física 2. Las operaciones sobre la instancia de Base de Datos, es decir, sobre

Procesos (servicios, listeners, demonios, programas residentes, ejecutables sin interfaz)

Recursos (estructuras de memoria RAM, buffers, datos) Cambio de passwords Cambiar la password del listener

c:\orant\bin>lsnrctl80.exe editar el archivo listener.ora set password vieja_password stop set password nueva_password start Nota: el password sólo se comprueba en el stop

Cambio de passwords de usuarios de la base de datosEn cuanto a la confidencialidad relativa a los objetos de la Base de Datos física, los nombres de los usuarios y sus passwords encriptadas se almacenan en la propia base de datos.

SQL>select * from dba_users;

Usuario

Comando

Sys alter user sys identified by change_on_install;

Syste alter user system identified by

- 29 -

Page 30: proyecto final oracle.doc

m manager;Scott alter user scott identified by tiger;

Métodos de autentificación para operaciones sobre la instancia En cuanto a la confidencialidad relativa a operaciones sobre la instancia, existen dos formas de autentificación. Los métodos de autentificación para operaciones sobre la instancia son:

1. Por sistema operativo2. Por archivo de passwords

Métodos recomendadosTipo de Administración ¿hay una conexión

segura?Método recomendado

Local si por archivo de passwords o por sistema operativo

Local no por archivo de passwords o por sistema operativo

Remota si por archivo de passwords o por sistema operativo

Remota no por archivo de passwords

Métodos de autentificación utilizadosSistema Operativo Método utilizadoUnix y VMS por sistema operativoNT por archivo de passwords

ConfiguraciónEn c:\orant\database\initorcl.ora

Autentificación por Sistema Operativo Autentificación por archivo de passwords

remote_login_passwordfile = none remote_login_passwordfile = exclusiveremote_login_passwordfile = shared

remote_login_passwordfile = shared indica que el archivo de passwords puede ser compartido por varias bases de datos, pero entonces los únicos usuarios permitidos serán SYS y INTERNALEn la autentificación por Sistema Operativo, Oracle comprueba que el usuario del Sistema Operativo posee los roles del Sistema Operativo:

OSDBA OSOPER

y los hace equivalentes a los modos de conexión de Oracle: SYSDBA SYSOPER SQL>connect scott/tiger@orcl as sysdbaSQL>connect scott/tiger@orcl as sysoper

Por ejemplo, sys no puede hacer shutdown conectandose como:SQL>connect sys/change_on_install

- 30 -

Page 31: proyecto final oracle.doc

pero sí como SQL>connect sys/oracle as sysdba

El rol del Sistema Operativo SuponeOSOPER Permiso para realizar las acciones

STARTUP, SHUTDOWN, ALTER DATABASE OPEN/MOUNT, ALTER DATABASE BACKUP, ARCHIVE LOG, RECOVER, y incluye el privilegio RESTRICTED SESSION

OSDBA Todos los privilegios con ADMIN OPTION, el OSOPER y el comando CREATE DATABASE

Cambio de la password del usuario internal1. Borrar o mover el archivo C:\orant\database\pwdorcl.ora 2. Ejecutar

c:\orant\bin>orapwd80.exefile=c:\orant\database\pwdorcl.orapassword=oracle

Suplantación de un usuario1. Obtener y copiar la password encriptada

SQL>select password from dba_users where username='SCOTT';2. Modificar la password

SQL>alter user scott identified by nueva;3. Realizar las acciones deseadas 4. Restaurar la password

SQL>alter user scott identified by values 'F894844C34402B67';

Gestión de privilegios y recursos

Conceptos de gestión de privilegios y recursos

- 31 -

Page 32: proyecto final oracle.doc

Concepto SignificadoPrivilegio Permiso para realizar una acción, asignable a un usuario o un rol.Rol Conjunto de privilegios, asignables a un usuario o un rol.Usuario Colección de objetos y privilegios identificado con un nombre y

password.Perfil Conjunto de restricciones relativas al uso de recursos, y asignable

a usuarios. Un usuario sólo puede tener un perfil.Recurso Uso susceptible de ser restringido, asignable a un perfil.

Roles Predefinidos por Oracle (select * from dba_roles;)

CONNECT RESOURCE DBA EXP_FULL_DATABASE IMP_FULL_DATABASE DELETE_CATALOG_ROLE EXECUTE_CATALOG_ROLE SELECT_CATALOG_ROLE

Recursos en Oracle (select * from user_resource_limits;) COMPOSITE_LIMIT SESSIONS_PER_USER CPU_PER_SESSION CPU_PER_CALL LOGICAL_READS_PER_SESSION LOGICAL_READS_PER_CALL IDLE_TIME CONNECT_TIME PRIVATE_SGA

Limites en uso del espacio en disco (select * from dba_ts_quotas;) ALTER USER SCOTT QUOTA UNLIMITED ON USER_DATA; ALTER USER SCOTT QUOTA 5M ON TEMPORARY_DATA; ALTER USER SCOTT QUOTA 0 ON SYSTEM;

Para la gestión de

Se utilizan los comandos

Privilegios GRANT (conceder un privilegio a un usuario o a un rol)REVOKE (denegar un privilegio a un usuario o a un rol)

Roles CREATE ROLE (crear)ALTER ROLE (modificar)DROP ROLE (borrar)SET ROLE (activar, desactivar)GRANT (conceder un permiso o un rol a un rol)REVOKE (denegar un permiso o un rol a un rol)

Usuarios CREATE USER (crear)

- 32 -

Page 33: proyecto final oracle.doc

ALTER USER (modificar)DROP USER (borrar)GRANT (conceder un permiso o un rol a un usuario)REVOKE (denegar un permiso o un rol a un usuario)

Perfiles y Recursos

CREATE PROFILE (crear)ALTER PROFILE (modificar)DROP PROFILE (borrar)ALTER USER ... PROFILE (asignar a un usuario)CREATE USER ... PROFILE (asignar a un usuario)

Activación de perfiles Estado de la Base de Datos

Acción

Base de Datos Parada RESOURCE_LIMIT = TRUE en c:\orant\database\initorcl.ora

Base de Datos Arrancada

ALTER SYSTEM SET RESOURCE_LIMIT = TRUE;

Vistas más relevantesSignificadoUsuarios dba_users user_users all_usersRoles dba_rolesRoles asignados a roles o usuarios

dba_role_privs user_role_privs

Privilegios asignados aroles o usuarios

dba_sys_privs

Permisos sobre tablasasignados a roles o usuarios

dba_tab_privs

Roles asignados a roles

role_role_privs

Privilegios de cada rol role_sys_privsLímites de recursos user_resource_limitsPerfiles y sus límites derecursos asociados

dba_profiles

Límites de recursos en cuanto a restricciones en claves

user_password_limits

Límites de recursos en cuanto a espacio máximo en tablespaces

dba_ts_quotas user_ts_quotas

Oracle 9i Advanced Security Release 2Enterprise User SecurityPasswords basados en Enterprise User Security

- 33 -

Page 34: proyecto final oracle.doc

La administración de cuentas consumen tiempo y representa una actividad costosa en muchas organizaciones. Por ejemplo, los usuarios pueden perder su password, cambiar de roles o dejar la compañía. Además de tiempo que se utiliza para la administración de usuarios, los campos están abiertos para el manejo de datos perdidos. Para implementar los password basados en autenticación, Oracle Advanced security provee de un ambiente para configuración de usuarios de fácil uso y simplificado, con una interfaz de administración amigable. Este tipo de administración reduce los problemas de overhead no solo para los usuarios sino también para los certificados emitidos por cada usuario, reduciendo asi el costo que implica el tiempo utilizado por el administrador para esa tarea que normalmente se hacía manualmente. Para comunidades de muchos usuarios, se puede accesar a multiples aplicaciones en ambientes heterogéneos usando passwords basados en autenticación. Además, las aplicaciones que usen versiones de la BD Oracle cliente puede tomar ventaja de ésta característica, ya que puede no hacer cambios al código en cualquier actualización del software en el cliente. Debido a que los usuarios y sus credenciales son almacenados en el directorio Internet de Oracle, ese directorio en el servidor disfruta del mismo nivel de protección y seguridad tal como si estuviera almacenado en la BD. La comunicación entre el directorio Internet de Oracle y la BD continua siendo rigurosamente segura por el SSL como medida de seguridad para el usuaro final.

User Migration UtilityEn Oracle 9i Advanced Security Release 2, la administración de los usuarios es simplicada con las herramientas y utilerias de la migración de usuarios. Estas permiten al administrador migrar los usuarios definidos en la BD para el directorio Internet de Oracle. Esta migración de usuarios ahora es referenciada como “password authenticated enterprise users”. El administrador y el usuario final disfrutan de los beneficios de la administración de usuarios centralizados y un login/password sencillo para la BD respetivamente.

Three-Tier Enterprise User SecurityOracle 9i Advanced Security Release 2 continua con el soporte para la seguridad de usuarios en la empresa en un ambiente de 3 hilos. La identidad del usuario ahora podrá ser intercambiada a través del tercer hilo, lo que significa un certificado de X.509, un Distinguished Name(DN), o nombre de usuario y password. La autenticación y las caracterírsticas del control de acceso son implementadas en un repositorio sencillo que permite a las aplicaciones liberar los beneficios de una identidad de usuario sencilla. Manteniendo la identidad del usuario a través de los hilos de una aplicación, permite a la empresa escribir aplicaciones escalables mientras se provee de los beneficios de auditorias de acceso simplificadas y políticas de control de acceso.

Advanced Encryption Standard Advanced Encryption Standard es un nuevo estándar para procesar información suceptible a ser publicada (Federal Information Processing Standard (FIPS)), puede ser usado como medida de protección en las organizacones gubernamentales. Oracle 9i Advanced Security Release 2 le proporciona a las

- 34 -

Page 35: proyecto final oracle.doc

agencias de gobierno y de negocio la oportunidad de utilizar un fuerte algoritmo de encripción para proteger la información clave.

Strong Authentication with Flexibility La autenticación se adpata como en RADIUS, Entrust, Cybersafe y Kerberos que son cargados dinámicamente. Los administradores no necesitan hacer grandes tomas de desiciones para el servicio de autenticación, un administrador puede seleccionar y decidir el servicio de autenticación como en RADIUS, Entrust, Cybersafe o Kerberos en cualquier momento. Oracle Advanced Security carga dinamicamente los adaptadores de autenticación apropiados, eliminando la recompilación compleja o la tarea de religar las librerias.

KerberosKerberos goza de mucha popularidad, ahora en varios sistemas operativos se incluye Kerberos Security Server. Oracle 9i Advanced Security continua proporcionando un cliente de Oracle que puede ser usado bajo la V5 de Kerberos autenticado para la BD. La version 2 de Oracle 9i Advanced Security, hace una adaptación de Kerberos, el cual puede ser usado en la capa media entre el servidor y la BD (middle tier), de tal forma que provee seguridad end-to-end con el servicio de seguridad de Kerberos en el ambiente de 3 capas (3 tier environment). Como las credenciales de kerberos pueden ser liberadas para activar la capacidad que tiene de firmas sencillas, ésta versión continúa propiorcionando la firma sencilla en el ambiente (arquitectura) de 3 capas.

Soporte para RADIUSLo nuevo en la versi´no 2 de Oracle 9i Advanced Security, es el soporte para autorizaciones externas de RADIUS, además de los roles de conexión en la BD Oracle para usuarios RADIUS. Se utilizan 2 modos de autenticación en RADIUS:1. Public Key Infrastructure (PKI) Oracle 9i Advanced Security versión 2 puede ser usado para autenticar usuarios con certificados digitales en un ambiente de PKI. Esto continúa permitiendo a los clientes y servidores autenticar sobre SSL utilizando certificados 509v3. Las llaves primarias y los certificados son almacenados en un Oracle Wallet, que es un contenedor seguro para salvaguardar la identidad de los clientes y/o los servidores.

SSL Hardware Acceleration Oracle 9i Advanced Security versión 2 permite a la empresa delegar operaciones criptográficas de llaves públicas complejas para acelerar la rapidez en los dispositivos del hardware en transacciones SSL.

Oracle Wallet Manager Oracle Wallet Manager es una herramienta GUI que permite al administrador crear wallets para usuarios en su empresa. Usando ésta herramienta, el administrador y/o usuario puede almacenar y recuperar de manera opcional wallets desde el Directorio de Internet de Oracle (Oracle Internet Directory). Los usuarios tiene la posibilidad de almacenar múltiples certificados en un wallet. La herramienta de adminsitración del wallet, proporcionan un fuerte algoritmo de encripcion uasndo el

- 35 -

Page 36: proyecto final oracle.doc

algoritmo Triple-DES (3DES) para seguridad de wallets. Existe un soporte para cada wallet de múltiples certificados a través del Oracle Wallet Manager y el Oracle Enterprise Login Assistant, que inclye: S/MIME signing certificate, S/MIME encryption certificate y code-signing certificate. Esto permite interactuar con otras aplicaciones de Oracle Corporation, tales como Oracle9iAS Email y Oracle 9iAS Unified Messaging, para diferenciar los certificados utilizando un código de firma y encripción. La fortaleza de encripción de un wallet se debe a el uso de llaves privadas asociadas con certificados X.509 y encriptadas con 3 llaves Triple-DES (3DES), el cual es un estándar industrial fuerte de algoritmos de encripción que provee la mejor seguridad para Oracle wallets. El módulo de administración de los passwords forza a utilizar las las guías de políticas para generación de passwords seguros y fuertes.Se tiene un soporte para múltiples formatos de Wallet en el stack de SSL, Oracle 9i Advanced Security puede almacenar múltiples formatos de wallet incluyendo los certificados X509v3, Entrust Profiles y Microsoft Certificate Store en Oracle Wallets. Esto permite a la organización liberar su infraestructura existente de PKI miientras se incorpora el íltimo estándar Oracle9i Label SecurityLos sistemas de información tradicionales no permiten que los datos sean separados en diferentes sensitivities dentro de una BD sencilla. Como resultado de ello, muchas organizaciones se ven forzadas a separar físicamente los datos en diferentes maquinas, construyendo código de aplicación muy complejo.Oracle9i Label Security es una opcion de seguridad para Oracle9i Enterprise Edition y reduce de una forma dramática las necesidades de información integrada, reduce la complejidad en el código de las aplicaciones y proporciona un control manual o físico para proteger los datos . Oracle9i Label Security accesa a los datos mediante comparaciones de etiquetas sensitivas asignadas a una parte del dato con la autorización de la etiqueta asignada para una aplicación del usuario. Este tipo de acceso permite que los datos sean separados en diferentes sensitivities en una BD sencilla. Las aplicaciones en el hist, la consolidación de la BD, la seguridad nacional y la privacidad solo son algunas de las áreas que se ven beneficiadas por el Oracle9i Label Security. La versión 2 de Oracle9i Label Security, ahora proporciona más flexibilidad y capacidad de control de acceso.Access Control El control de acceso discresional (Discretionary access control (DAC)), es utilizado para darle el acceso de los datos a los usuarios, a través de privilegios de la BD tales como SELECT, INSERT, UPDATE y DELETE. El acceso a los datos es controlado en base a la identidad del usuario ya sus privilegios de acceso. Standard Oracle9i soporta la extensión DAC y la encripción de datos en un nivel fino de granulidad, mas la satisfacción de los requerimientos de seguridad. Oracle9i Enterprise Edition con Oracle9i Label Security soportan ambos DAC y etiquetas basadas en control de acceso usando etiquetas sensitivas, provee de un control de acceso multidimensional a través de niveles sensitivos jerárquicos, información compartamentalizada y grupos/organizaciones jerárquicas.

- 36 -

Page 37: proyecto final oracle.doc

Administración de políticas flexibles y altamente customizablesLas políticas de Oracle9i Label Security son colecciones de etiquetas sensitivas, autorizaciones de etiquetas de usuario y opciones de forzar a grupos juntos y dar un nombre único. El nombre de la política asignada por el administrador de la aplicación o el oficial en seguridad, permite que las políticas de seguridad sean facilmente administrables y aplicadas a las tablas de la aplicación o a los esquemas de la BD. Una vez aplicados a una tabla de la aplicación, la política de seguridad puede ser facilmente afinada con Oracle9i Policy Manager (OPM), de acuerdo al nivel de forzamiento o rigidez que se quiera tener de la política declarada. La opción de encripción de Oracle Advanced Security es utilizada para encriptar todoel tráfico que fluye entre el Oracle9i Policy Manager y la BD Oracle.

Administración de políticas Oracle 9iOracle9i Policy Manager es un uevo GUI de Java para la administración de políticas Oracle Label Security tales como definición de políticas de usuario Virtual Private Database (VPD). Utilizando Oracle9i Policy Manager se pueden crear políticas, definir componentes de etiquetas, crear etiquetas, establecer autorizaciones de etiquetas por usuario, customizar las opciones de forzamiento, apicar políticas a los esquemas y a las tablas, borrar políticas desde los esquemas y las tablas, desactivar políticas, definir un contexto de aplicación y crear grupos de políticas VPD. Oracle9i Policy Manager es la herrmienta de administración para manipular políticas de protección de información a nivel renglon.

Administración de etiquetas y etiquetando datosLas etiquetas de Oracle9i Label Security son manipuladas utilizando Oracle9i Policy Manager o los comandos en linea API de Oracle9i Label Security. Las definiciones de etiquetas son almacenadas en la BD Oracle9i para un fácil mantenimiento y seguridad. Oracle Label Security proporciona numerosos métodos para etiquetar datos dependiendo de las opdiones de forzamiento especificadas. Esto inlcuye la opcion de forzamiento de DEFAULT_LABEL, la cual se usa como una etiqueta default asociada con el usuario. La etiqueta puede estar dentro del rango de autorización de etiquetas del usuario. La funcion LABEL tiene la opción de referencia a funciones PL/SQL, las cuales calculan la etiqueta con base a valores contenidos en datos u otros factores.

- 37 -

Page 38: proyecto final oracle.doc

Redes, Replicación y Ambientes de DistribuciónLas políticas de Oracle9i Label Security se forzan en la BD. Las políticas son via the Internet, cliente/servidor, n-tier, localmente o atravéz de la liga a la BD. Oracle9i Label Security soporta el estándar de replicación y replicación avanzada, incluyendo la replicación multimaster y la vistas materializadas (snapshots).Las BD distribuídas tienen el estándar de Oracle9i Label Security: El usuario final local conectado es un usuario remoto particular. Con la protección etiquetada de los datos de Oracle9i Label Security, se puede conectar local o remotamente. Si el usuario remoto tiene la etiqueta apropiada, puede accesar a los datos, si no, no podrá accesar a los datos. El conjunto de ligas a la BD, la conexión a la bD remota y los identificadores de usuario pueden ser asociados con la sesion remota. Las autorizaciones de Oracle9i Label Security sobre la BD remota están basadas en la identificación de usuarios remotos y en la liga a la BD.

AuditoriasPara aplicar una auditoria por tracking, Oracle9i Label Security utiliza las operaciones administrativas propias y los privilegios definidos en las políticas. Cuando se crea una nueva política, la columna etiquetada para esa polítc se agrega a la audit trail de la BD. La etiqueta de la columna es creada, independientemente de que en una auditoria se active o desactive en una auditoria del sistema operativo. En cualquier caso un registro se escribe a la tabla de auditoria, cada política provee de una etiqueta para cada registro que indica la etiqueta de sesion. El administrador puede crear vistas de auditoria utilizando un paquete API para desplegar esas etiquetas.

ExportOracle9i Label Security tiene la capacidad de hacer exportaciones al worldwide.

EvaluacionesOracle9i Label Security puede ser evaluado sobre el ISO/IEC 15408 Common Criteria, que son evaluaciones de seguridad que aseguran una independencia entre los mecanismo de protección de seguridad con Oracle9i Label Security.

PerformanceOracle9i Label Security es altamente optimizable para seguridad a nivel de renglon.

9. ADMINISTRACIÓN DE OBJETOS

Usuarios: La unidad básica de almacenamiento de una base de datos Oracle es la Tabla, sin embargo, para tener una mejor estructuración de la información dentro de la base de datos Oracle, las tablas se agrupan a su vez dentro de los Usuarios, llamados también Esquemas. Por lo tanto, un usuario puede tener cero

- 38 -

Page 39: proyecto final oracle.doc

o muchas tablas y se dice que es el propietario de dichas tablas. Además, una tabla pertenece a un solo usuario o esquema. Cada vez que se crea una base de datos nueva, hay una serie de elementos que no pueden faltar en ella y siempre se crean. Los dos principales elementos que se crean son el usuario SYS y el usuario SYSTEM. Toda base de datos Oracle tiene siempre estos dos usuarios. ¿Por qué se crean estos dos usuarios automáticamente?. Para poder gestionar la base de datos recién creada, el sistema Oracle necesita tener información sobre las tablas que existen en la base de datos, los usuarios que existen, los índices que se van creando y borrando, la cantidad de datos que hay en cada tabla, etc. Por lo tanto, necesita unas tablas en las que ir almacenando toda esta información. A este conjunto de tablas se le llama diccionario de la base de datos y, como hemos dicho, toda tabla de una base de datos Oracle debe pertenercer a un usuario, por eso se crean siempre estos dos usuarios especiales, SYS y SYSTEM que son los propietarios de las tablas del diccionario de la base de datos y, por lo tanto, son lo más importante para que funcione correctamente la base de datos. Si por algún error se borraran tablas de alguno de estos usuarios especiales, se podría corromper toda la base de datos. Lo normal en los proyectos informáticos es que, una vez que se crea una base de datos Oracle vacía, es decir, solamente existen estos dos usuarios con sus tablas, se crean nuevos usuarios y en cada uno de esos usuarios se van creando las tablas necesarias para cada proyecto. Para crear un nuevo usuario, se le debe indicar un nombre, un password o contraseña, un tablespace por defecto en el que se crearán todas las tablas de dicho usuario y un tablespace temporal en el que se ejecutarán las select que necesitan de ordenaciones. Estos conceptos se irán aclarando en los siguientes capítulos. La sentencia podría ser como la que sigue: Create user nombre_de_usuario identified by pasword_de_usuario default tablespacenombre_tablespace_default temporary tablespace nombre_tablespace_temporal;Si por cualquier motivo queremos borrar un usuario deberemos usar el comando drop, pero si ya hemos creado tablas en este usuario, Oracle no nos dejará, nos indicará este hecho y, si queremos borrar el usuario y todas sus tablas debemos añadir la coletilla "cascade" a la sentencia. Drop user nombre_de_usuario; Cada vez que el servidor Oracle es arrancado, la SGA/System Global Area) es colocada en memoria. Si múltiples usuarios están conectados a la misma SGA, ésta es compartida entre estos. La SGA es a veces llamada Shared Global Área.Una sentencia SQL es colocada en un área SQL compartida basándose en un algoritmo “hash” aplicado a este comando, por lo tanto, sólo los comandos que son completamente idénticos serán dirigidos a la misma ubicación en memoria.Los tipos de datos almacenados en el cache del D.D. son los siguientes:Nombres de todas las vistas y tablas de la B.D.Nombres y tipos de datos de todas las columnas en las tablas.Privilegios de todos los usuarios oracle.

- 39 -

Page 40: proyecto final oracle.doc

Tablas: La forma en que se almacenan los datos en las tablas está estructurada de manera que resulte muy sencillo su acceso y en cada tabla guardaremos los datos que tienen relación o que definen una idea del mundo real. Cuando creamos una tabla de Oracle, hay que indicar su nombre, qué información y de qué tipo vamos a guardar en ella. Cuando creamos una tabla, ésta se crea vacía, es decir, no contiene datos. Para crear los datos se deben ir ejecutando sentencias de manipulación de datos. La instrucción básica para crear un nuevo registro es la INSERT, Existen 3 operaciones básicas más que se pueden realizar sobre las tablas. La sentencia UPDATE se utiliza para modificar los valores de algún registro o fila ya existente, Para borrar registros de una tabla se utiliza la sentencia DELETE y finalmente, para consultar datos de nuestra tabla la sentencia utilizada es la SELECT, con ella podremos hacer todas las preguntas que se nos ocurran a nuestra base de datos. Hay una serie de bases de datos llamadas orientadas a objetos, donde el elemento de trabajo en lugar de la tabla es el objeto, que incorpora datos y procedimientos. Pero este enfoque todavía está en estudio y no parece clara su ventaja sobre el enfoque relacional.Oracle aprovecha un nuevo enfoque, el objeto-relacional. Es un punto medio entre los dos anteriores, permite a los usuarios utilizar la base de datos de forma relacional, pero incorpora extensiones de las bases de datos orientadas a objetos.Oracle incluso soporta el enfoque orientado a objetos. El hecho que de permite los tres objetos hace que se pueda trabajar de forma relacional y añadir cualquier mejora orientada a objetos. Pero el núcleo de Oracle sigue estando pensado para el enfoque relacional.Mejoras procedentes del enfoque orientado a objetos Tipos abstractos. Permiten crear dominios complejos para almacenar datos en los atributos de las tablas. Tablas anidadas. Permiten seleccionar valores dentro de una lista para un atributo. Representan relaciones uno a varios, donde el contenido de la tabla representa la tabla relacionada con la actual. Sirven por ejemplo para elegir un mes de una lista con los doce meses. varrays. Es una colección de valores que permite seleccionar varios valores relacionados con un atributo de una tabla. Por ejemplo permitiría elegir varias asignaturas en el mismo alumno (lo que está en desacuerdo con el modelo relacional, pero es que en realidad la información del varray se almacena aparte) Objetos grandes. Se trata de los llamados LOB (large object binary). Permiten almacenar textos larguísimos, archivos externos (de los que sólo se almacenará ladirección) y datos binarios. vistas-objeto. Permiten crear objetos a partir de las tablas de datos.

- 40 -

Page 41: proyecto final oracle.doc

VistasUna vista es una especie de ventana dentro de una tabla. Es una estructura lógica que tiene la apariencia de una tabla, sin llegar a serla. El objetivo de crear vistas es el de tener que prescindir de la tabla cuando se desea permitir la manipulación de datos a otros usuarios; así como también de prevenir que se altere de manera involuntaria el contenido de la información más sensible que pudiera encontrarse en ciertas tablas.Las vistas se forman haciendo una selección de campos de una o varias tablas. También se puede reemplazar una vista que ya existe con una sintaxis diferente, manteniendo su nombre.La sintaxis de la creación de vistas es:CREATE [OR REPLACE] VIEW nombre_vista ASSELECT columna1, columna2, ...FROM tabla1, ...WHERE columna > valor ;

SecuenciasA menudo es preciso generar números en forma ordenada para implementar, por ejemplo, una clave primaria en una tabla o garantizar que esos números no se repiten y van siempre en un orden predefinido por el desarrollador (no necesariamente secuenciales).La forma tradicional de efectuar lo anterior sería almacenar el último número utilizado en un registro especial, bloquearlo, obtener el próximo valor, actualizar el registro, desbloquearlo y utilizar el número. Sin embargo, para eso Oracle implementa los objetos denominadas secuencias, que permiten hacer lo anterior de manera transparente para el usuario.Cuando se define una secuencia se deben indicar, como mínimo, el valor de partida (valor mínimo) y el incremento.La sintaxis de creación de una secuencia es la siguiente:CREATE SEQUENCE nombre_secuenciaINCREMENT BY númeroSTART WITH númeroMINVALUE número [o NOMINVALUE]MAXVALUE número [o NOMAXVALUE]NOCYCLE [o CYCLE] ;Los parámetros significan lo siguiente:

Increment by: Indica la cantidad de incremento de la secuencia. Start with: Es el valor de partida de la secuencia. Minvalue: Indica cuál será el valor mínimo de la secuencia.

- 41 -

Page 42: proyecto final oracle.doc

Maxvalue: Corresponde al valor máximo que puede tomar la secuencia. Nocycle: Es el valor por defecto para establecer si la secuencia deberá

comenzar nuevamente a generar valores una vez que ha alcanzado el máximo.

Procedimientos almacenados:

Database Buffer Cache: El DBC almacena copias de los bloques de datos leídos del disco. Su acceso es compartido por todos los usuarios conectados a la Base de Datos. Cache miss: la primera vez que un usuario oracle accesa un dato, el proceso debe copiarlo del disco al cache antes de accesarlo.Cache hit: cuando el proceso accesa un dato que ya se encuentra en el cache este puede leerlo directamente en memoria.Accesar un dato a través de un cache hit es más rápido que a través de un cache miss. Debido a que el cache tiene un tamaño limitado, toda la data del disco no puede ser colocada en memoria. Cuando el cache está lleno, Oracle escribe datos que ya se encuentran en este, al disco para hacer espacio para los nuevos datos. La próxima vez que estos datos escritos a disco sean requeridos originarán un cache miss.De cada 10 bloques requeridos 8 deben originar un cache hit.Redo log. Buffer: Es un buffer circular que contiene la información de todos los cambios realizados a los datos. Sus funciones: Registrar todos los cambios de datos.Reconstruye cambios hechos a la B.D. y segmentos de Rollback, cuando es necesaria una recuperación.Puede ser “bypaseada” usando la cláusula UNRECOVERABLE.Puede ser “bypaseada” por el Oracle Data Loader.Para maximizar el rendimiento y alojar muchos usuarios, Oracle usa múltiples procesos llamados “Background Processes”.La cantidad de Procesos en Background corriendo depende de la configuración de la B.D. que se use, los nombres de éstos procesos son:* Database Writer (DBWR) * Recoverer (RECO)* Log Writer (LGWR) * Lock (LCKn)* Checkpoint (CKPT) * Snap Shot Refresh (SNPn)* System Monitor (SMON) * Shared Server (Snnn)* Process Monitor (PMON) * Dispatcher (Dnnn)* Archiver (ARCH) * Paralell Query (Pnnn)

PMON Y SMON: Reclaman recursos que ya no son requeridos por un usuario.PMON:Limpia conexiones terminadas de forma anormal.Hace “rollback” de transacciones sin “commit”Libera bloqueos dejados por procesos terminados.Libera recursos de la SGA usados por procesos que fallaron.Rearranca “shared servers” y procesos de “dispatcher fallidos”SMON:

- 42 -

Page 43: proyecto final oracle.doc

Realiza recuperación automática de la instancia.Reclama espacio usado por segmentos temporales ya no usados.Une áreas continuas de espacio libre en los datafiles.PMON, SMON, LGWR, DBWR. Son procesos obligatorios para levantar y mantener una instancia oracle, estos procesos no pueden ser controlados modificando parámetros de inicialización. Los demás procesos son opcionales.Si alguno de estos cuatro procesos se cae, la instancia también lo hace y debe ser rearrancada.Redo Log Files: Mantiene un registro de todos los cambios realizados a los datos para propósitos de recuperación:Son escritos en forma circular.Deben haber al menos dos grupos de redo log.Los redo log files deberían ser colocados en los discos más rápidos y menos cargados (I/O). RAID no recomendado.Redo log Files MultiplexadosLa configuración recomendada de redo log files, es tener al menos dos miembros de redo log files por grupo, con cada uno de los miembros en discos diferentes.Esta configuración protege de la perdida de un redo log file.Todos los miembros de un grupo de log files contienen la misma información y son del mismo tamaño.Los miembros del mismo grupo son actualizados simultáneamente.Cada grupo debería tener el mismo número de miembros que los otros.Trace Files y Alert File: En los directorios especificados en los parámetros BACKGROUND_DUMP_DEST y USER_DUMP_DEST se generan archivos que contienen información de los errores ocurridos en la B.D. el alert file es uno de estos archivos. En este se registran, entre otros, los siguientes eventos:Internal errors (ORA – 600), block corruption (ORA –1578)Operaciones administrtivas (DDL: data definition Language) como renombrar o crear datafiles, etc.STARTUP, SHUTDOWN, ARCHIVE LOG Y RECOVERCambio de secuencia de los Redo Log Files.Es importante chequear el alert diariamente para detectar problemas antes de que estos se vuelvan más serios y mientras disponemos de un respaldo válido.Arrancando una instantanciaEjecutar el server manager (svrmgrl)Conenect internal /password.Startup NOMOUNT/ MOUNT/ OPEN Una vez que se ha arrancado una instancia en NOMOUNT o MOUNT se usa el comando ALTER DATABASE MOUNT / OPEN para pasar a un modo superior al actual.

Bajando una instanciaejecutar server managerconnet internal /passwordShutdown NORMAL/IMMEDIATE/ABORT donde.

- 43 -

Page 44: proyecto final oracle.doc

NORMAL: No se admiten nuevas conexiones, oracle server espera que se haya desconectado el último usuario para cerrar la base de datos. El siguiente “Startup” no requerirá recuperación.IMMEDIATE: Las conexiones actuales de clientes y sus procesos son terminados, a cualquier transacción sin “commit” se le hace “rollback”. Shutdown immediate cierra y desmonta la base de datos limpiamente, el siguiente “Startup” no requerirá recuperación.ABORT: Aborta los clientes y sesiones activos, a las transacciones sin commit no se le hace “rollback”. Esta opción no cierra ni desmonta la B.D. pero si baja la instancia (equivale a una falla de la instancia) el siguiente startup requerirá recuperación (la cual es automática).Manejando la estructura de una B.D.Segmentos de RollbackEs una porción de la B.D. que registra los datos antes que fueran modificados por las transacciones, permitiendo que estos cambios pueden ser reversados (rollback) bajo ciertas circunstancias.Una transacción es una unidad de trabajo que ocasiona cambios a la Base de Datos, o bloqueos de registros. A cada transacción le es asignado un Id único, y es relacionada a uno y sólo un segmento de rollback. Un segmento de rollback es un objeto circular y cada transacción puede tener muchas entradas. Una transacción puede usar el próximo extents si no hay entradas activas en este. Si el próximo extents a ser usado contiene entradas activas, nuevos extents serán agregados al segmento de rollback previendo que no se haya llegado al máximo de extents permitidos.Parametros de StorageInitial - tamaño en bytes. Por defecto 5, bloques oracle.Next – tamaño en bytes. Por defecto 5, bloques oracle.Maxextents – Máximo # de extents para un objeto. El valor por default depende del Sistema Operativo y el bloque oracle.Minextents – Cantidad de extents alocado al crear un objeto default 1, RBS = 2.PCTINCREASE – Default 50 excepto RBS que no lo usan.OPTIMAL – solo RBS – Default es null.FREELISTS - # de listas de bloques libres para inserts en tablas. Default = 1.FREELISTS GROUPS - Igual que el anterior pero para diferentes instancias usando parallel server Def= 1.Estos parámetros se aplican a:

Tablas Clusters Indices Segmentos de Rollback Tablespaces (valores por defecto solamente)

Reglas de Precedencia.1. Cualquier parámetro asignado explícitamente a un objeto

sobreescribe al asignarlo por defecto en el tablespace que lo contiene.

- 44 -

Page 45: proyecto final oracle.doc

2. Cuando no se especifican parámetros explícitamente a un objeto, se usan los predeterminados del tablespace; en caso de que estos tampoco existan se usan los predeterminados de Oracle Server.

3. Si los parámetros de Storage son cambiados, los nuevos valores afectan solo a los nuevos extents alocados.

4. El parámetro OPTIMAL aplica solamente a segmentos de rollback.5. Freelists y Freelists Groups no pueden ser especificados como

predeterminados en el tablespace.El Bloque OracleUn bloque oracle es la mínima unidad de almacenamiento usado por la Base de Datos. Sus propiedades son:

1. Los bloques oracle corresponden a uno o más bloques S.O.2. Su tamaño es determinado al momento de crear la B.D. mediante el

parámetro DB_BLOCK_SIZE, y es constante en todos los datafiles.3. El parámetro DB_BLOCK_SIZE, también define el tamaño de cada buffer

en la S.G.A.4. Una vez que la B.D. es creada el parámetro DB_BLOCK_SIZE, no puede

ser cambiado.5. El tamaño por defecto del bloque oracle depende del S.O. 6. Se recomienda que el tamaño del bloque oracle sea igual a, o multiplo del

tamaño del bloque de S.O.7. En algunas plataformas el tamaño del bloque oracle puede ser muy grande

(por ejemplo 32 K). Este es conocido como grandes bloques oracle.8. Toda operación de I/O es realizada usando bloques. Oracle Server

mantiene los bloqueos a nivel de registros.

Partes de un bloque oracle:Header Información general como dirección del bloque

y tipo de segmento.Table Directores Información de las tablas en el bloque (clusters)Row Directores Información de las filas en el bloque.Free Space Bytes aun disponibles en el bloque para inserts o

updates.RowData Datos de tablas o índices

Encadenamiento de Registros.Un registro que no cabe en un bloque es encadenado en múltiples bloquesLa pieza inicial del registro permanece en el bloque al que fue dirigido originalmente.Cada pieza adicional del registro es colocada en bloques encadenados.Migración de Registros.La migración de registros ocurre cuando un registro de una tabla es actualizado (update) y su nuevo tamaño es mayor al espacio libre que quedaba en el bloque. Entonces el registro completo es migrado a un nuevo bloque, asumiendo que este registro cabe en este nuevo bloque.

- 45 -

Page 46: proyecto final oracle.doc

El header del bloque permanece en el bloque al que fue dirigido el registro inicialmente. Es recomendable usar un PCTFREE, suficientemente altos para evitar excesiva migración. El performance baja cuando se leen registros migrados o encadenados, ya que Oracle Server debe leer más de un bloque para leer un solo registro. DisparadoresEl módulo SQL*Forms tiene incorporado una colección de procedimientos y funciones llamados "empaquetados" que se pueden incluir en el código de procedimientos o disparadores definidos por el usuario.El disparador es un bloque de código que se activa cuando se pulsa una determinada tecla u ocurre cierto evento, como puede ser:

1. Mover el cursor hacia o desde un campo, registro, bloque o forma.2. Realizar una consulta.3. Validar un dato.4. Hacer una transacción al insertar, modificar o eliminar registros de la base

de datos.Oracle asocia a cada tecla de función un procedimiento empaquetado, pudiendo el usuario redefinir esta asignación o capturar el disparador para ampliarlo o modificarlo con su propio código. A partir de la versión 7 de Oracle el usuario puede almacenar, en forma independiente, sus funciones y procedimientos sin tener que escribirlos repetidamente para cada forma, y pudiendo compilarlos independientemente de las formas que lo usen. Pero, además, las funciones y procedimientos se pueden agrupar en un paquete para compartir definiciones, variables globales, constantes, cursores y excepciones, así como garantizar y revocar los permisos a nivel de paquete.En el caso que sea necesario modificar el contenido del paquete, como el mismo se encuentra almacenado separadamente, no es necesario recompilar nada que use ese paquete, lo que facilita la gestión y mantenimiento de todos los procedimientos almacenados como una sola entidad para una determinada aplicación.Además, en la versión 7, existe un nuevo tipo de disparador llamado de base de datos, que es un procedimiento asociado a una tabla que se activa cuando se produce un suceso que afecta a esa tabla. Su uso más común consiste en la definición de restricciones complejas de integridad.

10. UTILERIAS DE RDBMS

Oracle cuenta con una gran diversidad de herramientas y utilerías que facilitan al administrador y al desarrollador sus tareas. A continuación se mencionan las más importantes

- 46 -

Page 47: proyecto final oracle.doc

CONOCIENDO DEVELOPERDeveloper es una herramientas de desarrollo de Oracle, en donde además se implementan el desarrollo de aplicaciones nuevas o ya existentes sobre el Worl Wide Web. Ya sea para Intranet o Internet, el Developer aprovecha las ventajas del fácil acceso al Web y es capaz de manejar desde la publicación de información estática hasta ambientes que soporten aplicaciones dinámicas complejas.El Developer 2000 proporciona soluciones que aprovechan los beneficios del Web mientras que mantiene la rigidez del cliente/servidor. El Web reduce gradualmente el costo de administración y mantenimiento de las aplicaciones, mientras que sigue manteniendo el bajo costo de cliente/servidor. Al mismo tiempo permite liberar las aplicaciones cliente/servidor existentes, las cuales pueden ser aplicaciones de misión critica que soportan y muy frecuentemente manejan las practicas de su negocio. Estas aplicaciones deben ser escalables al número de usuarios y abiertas a cualquier ambiente.El Developer es una herramienta que nos permite crear formularios en local, es decir, mediante esta herramienta nosotros podemos crear formularios, compilarlos y ejecutarlos, pero si queremos que los otros trabajen sobre este formulario deberemos copiarlo regularmente en una carpeta compartida para todos, de modo que, cuando quieran realizar un cambio, deberán copiarlo de dicha carpeta y luego volverlo a subir a la carpeta. Este sistema como podemos observar es bastante engorroso y poco fiable pues es bastante normal que las versiones se pierdan y se machaquen con frecuencia. La principal ventaja de esta herramienta es que es bastante intuitiva y dispone de un modo que nos permite componer el formularioArquitectura Three-tiered architectureEn muchas aplicaciones actuales cliente/servidor, se corren aplicaciones con procesos altamente intensos en el cliente. Los datos extraídos desde el servidor de BD remotamente hacia la máquina cliente, puede verse limitada por su poder de procesamiento y capacidad de memoria.El Developer/2000 Server soporta una arquitectura three-tiered, la cual aprovecha los beneficios de ambas implementaciones (cliente/servidor, Web) en una aplicación sencilla. En la implementación Web, las aplicaciones lógicas y de procesamiento están enfocadas a la capa de en medio anidadas en los servidores de aplicación de una máquina cliente de escritorio.

Tier Hardwarefront-end any number of client desktop machinesmiddle one or more application serversback-end one or more database servers

Arquitectura Cliente/Servidor contra Arquitectura Web

- 47 -

Page 48: proyecto final oracle.doc

Hay 2 grandes diferencias entre el desarrollo de aplicaciones cliente/servidor y las implementaciones en Web.Cliente/Servidor. Las formas que corren en el servidor (y todas las aplicaciones lógicas) son instaladas en las máquinas de escritorio de los usuarios. A través de la aplicación puede ser incluida la BD, los triggers y las operaciones lógicas, típicamente todo el procesamiento de las interfaces de usuario y triggers ocurren en la máquina del cliente.

Web. Las formas que corren en el servidor (y todas las aplicaciones lógicas) son instaladas sobre el servidor de aplicaciones, no sobre las máquinas cliente. Todo el procesamiento de triggers ocurre en la BD y en el servidor de aplicaciones mientras que el procesamiento de las interfaces de usuario ocurren en las formas del cliente.

UN POCO ACERCA DE DESIGNEROracle Designer es una herramienta de software para analizar requerimientos de negocio y para diseñar y generar sistemas cliente/servidor que satisfagan éstos requerimientos. Oracle Designer incorpora soporte para el modelado de procesos de negocio, análisis de sistemas, diseño de software y generación del sistema.Oracle designer proporciona un repositorio multiusuario y una integración cerrada con Oracle Developer como conjunto de herramientas de desarrollo cliente/servidor de Oracle. En éste sentido, Oracle Designer permite a las organizaciones diseñar y liberar rápidamente sistemas cliente/servidor que pueden adaptarse a los cambios constantes de los procesos del negocio.Designer es una herramienta que se conecta a la base de datos y por tanto creamos los formularios en ella, de esta manera todo el mundo se conecta mediante Designer a la aplicación que contiene todos los formularios y no hay problemas de diferentes versiones, esto es muy útil y perfecto para evitar machacar el trabajo de otros. Pero el principal y más notable problema es la falta

- 48 -

Page 49: proyecto final oracle.doc

de un entorno visual para diseñar el formulario, es decir, nos aparece una estructura como de árbol en la cual insertamos un formulario, a la vez dentro de éste insertamos bloques o módulos que son las estructuras que contendrán los elementos del formularios, que pueden estar basados en tablas o no.

Los componentes de Oracle Designer

Las herramientas de Oracle Designer están agrupadas por áreas que reflejan las necesidades primarias de diferentes tipos de usuarios:Modeling System RequirementsLas herramientas de ésta área se utilizan para: modelar procesos de negocio, re-examinar los métodos usados para alcanzar las metas de la organización, crear representaciones diagramáticas del proceso de negocio, detalles del registro de la organización, descripción de requerimientos del negocio a detalle, crea modelos diagramáticos de las entidades, funciones y flujos de datos en el sistema que le dan vida a la organización.Transforming Preliminary DesignsUtiliza el transformador para el diseño preeliminar generado desde el modelo creado con anterioridad.Designing and GeneratingUtiliza el editor de diseño en ésta área para diseñar sistemas que conozcan los requerimientos del negocio de una organización, provee de un ambiente de desarrollo para diseño e ingeniería de sistemas, crea los componentes del lado del servidor y las aplicaciones del lado del cliente desde la definición de registros en el repositorioRepository ToolsEl uso de herramientas en ésta área son para: Entrar y editar información en el repositorio, muestra relaciones entre los elementos en el repositorio, genera reportes predefinidos y customizados sobre el contenido del repositorio, administra el repositorio.Ya en un ambiente de desarrollo, Oracle Designer ofrece alternativs de instalación flexibles, por ejemplo, se puede instalar la suite de Oracle Designer en un cliente PC que proporcione operaciones sencillas, o se pueden instalar los componentes de Oracle Designer separadamente. Cada uno de los generadores puede ser instalado por separado.Principales productos Oracle y relacionados 1. Servidor SGBDR Oracle Import/Export: Permite extraer/reincorporar datos de la base de datos. Es el mecanismo habitual para copias de seguridad.2. Cliente SQL*Plus: Interprete interactivo del lenguaje SQL SQL*Loader: Se utiliza para cargar datos provenientes de diversas fuentes3. Herramientas de desarrollo Oracle Oracle * Forms »» Developer (Forms, Reports Graphics). Herramienta muy potente y compleja para el desarrollo de aplicaciones.

- 49 -

Page 50: proyecto final oracle.doc

SQL*Menu: Es una herramienta más sencilla que SQL*Forms para generar aplicaciones. SQL*ReportWriter: Herramienta muy potente para generar informes. SQL*Calc: Una hoja electrónica conectada con la base de datos. Oracle * CASE »» Designer OWS 2.0 »» OWAS 3.0 »» OAS 4.0 WebDB Jdeveloper Easy*SQL: Una aplicación basada en ventanas que permite ejecutar y almacenar sentencias SQL de forma sencilla.4. Herramientas de desarrollo de terceros Microsoft Visual Basic PowerBuilder C++ Borland Jbuilder Proc*C, Pro*Cobol, Pro*Fortran, Pro*ADA: Precompiladores para SQL inmerso en esos lenguajes de programación. Con esto podemos crear programas ejecutables independientes, al contrario que SQL*Forms, en cuyo caso se necesita un módulo run-time para la ejecución de las aplicaciones creadas. Oracle*CASE: Es un conjunto de herramientas CASE (Computer Aided Software Engineering). Entre ellas existe una que funciona en entorno X-Window, y que se utiliza para el diseño de distintos tipos de diagramas. Permite generar programas fuente en lenguajes precompilados, Forms e informes.Los comandos de ejecución de las aplicaciones más usuales son: SQL*Plus: sqlplus SQL*Menu: sqlmenu50 -c vt220:vt220 (Si estamos en un Terminal en emulación vt220) olsqlmenu50 -c oloraterm:sun (Version OPEN LOOK) msqlmenu50 -c moraterm:sun (Version MOTIF) SQL*Forms: sqlforms30 -c vt220:vt220 olsqlforms30 (Version OPEN LOOK) msqlforms30 (Versión MOTIF) Easy*SQL: easysql (El valor de la variable TERM debe ser alguno de los configurados) Pro*C: proc (Al ejecutarlo sin argumentos, da ayuda)

ACERCA DE SQL LOADERSQL*Loader es una potente utilidad de importación de datos que posibilita la carga automática de datos externos (residentes en ficheros del sistema operativo) en tablas de la base de datos. Los datos pueden cargarse en una o varias tablas que previamente deben estar creadas y que pueden o no tener contenido previo. Los nuevos datos podrán sustituir a los que ya existieran en las tablas o bien añadirse como nuevas filas. Es posible la carga de datos almacenados en forma de ficheros de texto (lo más corriente) o binarios. La entrada del programa consiste en:

- 50 -

Page 51: proyecto final oracle.doc

Uno o varios ficheros de datos, con nombres por defecto terminados en .DAT, conteniendo los datos a importar. Un fichero (texto) de control, con nombre por defecto terminado en .CTL, que contiene órdenes que permiten guiar y particularizar el proceso de carga de datos. En este fichero se especifican los atributos de las tablas de la base de datos en los que se van a insertar los valores contenidos en el fichero de datos. Como salida se generan hasta tres ficheros de texto: Un fichero de resultados, con nombre por defecto terminado en .LOG, que contiene diversos informes sobre la realización del proceso de carga de datos. Un fichero de errores, con nombre por defecto terminado en .BAD, que contiene aquellos datos del fichero de entrada que no han podido ser cargados en la base de datos por diversos errores. Si la carga se ha realizado sin errores entonces no se genera este fichero. Un fichero de descartados, con nombre por defecto terminado en .DSC, que contiene aquellos datos del fichero de entrada que no han sido cargados en la base de datos porque así se había especificado en el fichero de control. Si no se ha descartado ningún dato durante el proceso de carga no se genera este fichero. La diferencia entre los datos erróneos y los descartados es que los primeros son aquellos datos que no han sido insertados en las tablas de la base de datos porque no han podido ser leídos correctamente desde el fichero de datos de entrada o bien su inserción causa errores de incumplimiento de restricciones definidas en las tablas, mientras que los datos descartados no se insertan en la base de datos porque no verifican una determinada condición que puede imponerse en el fichero de control, de manera que tan solo se inserten los datos que satisfacen dicha condición. Un concepto importante a la hora de trabajar con SQL*Loader es el de registro físico y registro lógico. Suponiendo que el fichero de datos es de texto, un registro físico es una línea del fichero. Un registro lógico se corresponde con una fila o tupla de una tabla. La equivalencia entre estos dos tipos de registros puede ser cualquiera. Un registro físico puede dar lugar a varios registros lógicos de manera que cada lectura de una línea del fichero de entrada produce la escritura de varias filas en las tablas. Si por el contrario se necesitan varios registros físicos para formar un registro lógico, se necesitará leer varias líneas del fichero de datos antes de proceder a la inserción de una fila. El caso más sencillo y conveniente es cuando se produce la identidad entre ambos tipos de registro, en el cual cada lectura de una línea del fichero de datos puede generar una inserción en la base de datos. Mediante la adecuada especificación del fichero de control puede programarse en cierta medida el proceso de carga de datos ya que se dispone de una cierta capacidad de especificación de condiciones para determinar si los datos leídos han de insertarse o no en la base de datos. La estructura del fichero de datos de entrada puede ser fija o secuencial. Es fija si los valores están dispuestos de forma invariable en posiciones determinadas del fichero de datos y secuencial si simplemente los valores están colocados uno a continuación del otro en cada línea del fichero y separados por un carácter determinado. En la práctica pueden existir ficheros cuya estructura presente características de los dos tipos.

- 51 -

Page 52: proyecto final oracle.doc

No es obligatorio que los valores de todos los atributos o columnas del registro lógico aparezcan especificados en los campos del registro físico; se pueden leer todos o tan solo parte de los atributos. Los atributos cuyos valores no aparecen en el fichero de datos se insertan en las tablas con valores nulos. Aunque el fichero de control permite una amplia gama de posibilidades para particularizar la carga de datos a las características del fichero de entrada, puede ser necesario o conveniente preprocesar los datos (por ejemplo, en un editor de texto) eliminando datos innecesarios, contenidos redundantes, etc. Si los datos a ser cargados están ordenados según algún atributo o combinación de atributos entonces se puede aprovechar esta circunstancia para acelerar el proceso. Es muy interesante la posibilidad de insertar valores a determinados atributos de las tablas automáticamente, sin necesidad de especificar dichos valores en el fichero de datos. Por ejemplo se puede tener un atributo en una tabla cuyo valor se vaya incrementando en una cantidad fija cada vez que se inserta una fila en esa tabla, o bien el valor a insertar para ese atributo es constante para cada fila insertada. Para ejecutar SQL*Loader se necesita especificar el nombre y palabra clave en el sistema Oracle de un usuario (usualmente el propietario) que disponga de permiso de inserción (INSERT) sobre las tablas en las que se van a cargar los datos. En la invocación del programa se ha de especificar el fichero de datos a procesar y el fichero de control, de la siguiente manera:sqlload usuario/palabra_clave CONTROL=fichero_control, DATA=fichero_datos ACERCA DE SQL*Plus La herramienta que nos proporciona ORACLE para interactuar con la base de datos se llama SQL*Plus. Básicamente, es un intérprete SQL con algunas opciones de edición y formateo de resultados.

SQL*Plus, se debe tener claros algunos conceptos: Usuario/Clave

Para poder acceder a una base de datos gestionada por ORACLE debemos ser un usuario autorizado de la misma y conocer la palabra clave, password, asociada al usuario.

Variable de ambiente ORACLE_SID Indica la base de datos con la que vamos a trabajar.

Posibilidades de Edición SQL*Plus almacena en un buffer la última sentencia SQL introducida. El buffer mantiene sólo una sentencia cada vez, y si se introduce una nueva sentencia se sobreescribe sobre la anterior. La sentencia en el buffer puede ser recuperada para ejecutarla de nuevo con los comandos:

RUN que visualiza la sentencia en el buffer antes de ejecutarla;

/ que ejecuta la sentencia sin visualizarla.

SQL*Plus también nos permite editar la sentencia SQL alamacenada en el buffer mediante un sencillo (y limitado) editor en línea, cuyos comandos se enumeran a continuación:

- 52 -

Page 53: proyecto final oracle.doc

Comando Abreviatura Descripción APPEND texto A texto Añade texto al final de la línea.

CHANGE/fuente/destino C/fuente/destino Cambia el contenido 'fuente' por el 'destino'

CHANGE/texto C/texto Quita 'texto' de una línea. CLEAR BUFFER CL BUFF Borra el buffer DEL DEL Borra una línea.

INPUT I Inserta una o más líneas.

INPUT texto I texto Inserta una línea con 'texto'. LIST L Lista las líneas del buffer LIST n L n ó n Lista la línea n-ésima. LIST * L * Lista la línea actual. LIST LAST L LAST Lista la última línea.

LIST m n L m n Lista las líneas desde la m-ésima a la n-ésima.

Al contenido del buffer también se puede acceder desde el editor del Sistema Operativo. Así, el buffer podrá ser manipulado con las posibilidades del editor con el que estemos acostumbrados a trabajar. Al salir del editor se devuelve el control al SQL*Plus. Para conseguir trabajar con el editor del Sistema Operativo basta con colocar la variable DEFINE_EDITOR y luego llamar al editor. SQL> define_editor=viSQL> editUtilización de Ficheros SQL*Plus considera dos tipos de ficheros: de spool y de comandos.

Un fichero de spool almacena los resultados de una consulta (o varias) en un fichero con la extensión .lst (o lo manda a la impresora).

Los comandos asociados con los ficheros spool son SPOOL fichero

Manda el resultado de las consultas al fichero. SPOOL OUT

Manda el resultado de las consultas a la impresora. SPOOL OFF

Cierra el fichero de spool. EXIT

Al salir de SQL*Plus se cierran los ficheros de spool. Los archivos de comandos almacenan comandos SQL y SQL*Plus para ser editado, almacenado y/o ejecutado; y tienen por defecto la extensión .sql :

Para editarlo se puede utilizar el comando edit fichero.

- 53 -

Page 54: proyecto final oracle.doc

Para ejecutarlo se utilizará el comando START fichero o @fichero

El SQL*Plus nos proporciona más posibilidades en relación con los ficheros de comandos, la comunicación con el usuario final y la generación de informes.

EXPORT La utilería EXPORT provee de una forma simple para transferir objetos de datos entre bases de datos de Oracle, inclusive si estas rediden en diferentes plataformas, con diferente hardaware y diferente configuración de software.Cuando se ejecuta el EXPORT sobre una base de datos, objetos tales como las entidades son extraídas, seguidas por sus objetos relacionados tales como: Indices, comentarios, accesos, como se ilustra en la figura.

Un Export file es un archivo de Oracle en formato binario Dump file que son normalmente ubicados en disco o cinta. Los Dump files pueden ser transferidos utilizando FTP o físicamente transportados a diferentes lugares.

Los archivos pueden entonces ser usados con la utilería IMPORT para transferir datos entre bases de datos que no se encuentran conectadas en línea o por red. Los archivos tambien pueden ser usados como respaldos, además de los respaldos normales.Los Dump flies de EXPORT solo pueden ser leidos por la utilería IMPORT de Oracle, la versión del IMPORT no debe ser mas reciente que la versión del EXPORT usado para crear los Dump file.

- 54 -

Page 55: proyecto final oracle.doc

Pueden desplegarse también los contenidos de un archivo de EXPORT sin realizar el proceso de importar datos. Para hacer esto se debe usar el parámetro SHOW.

IMPORTLa utilería IMPORT lee la definición de objetos de la entidad que se encuentra dentro de un archivo de EXPORT (Dump file), Para luego cual insertar los objetos en una base de datos de Oracle.

A continuación se ilustra el proceso de importación desde un dump file: DUMP FILE

Los Dump flies de EXPORT solo pueden ser leidos por la utilería IMPORT de Oracle, la versión del IMPORT no debe ser mas reciente que la versión del EXPORT usado para crear los Dump file.

Import puede leer archivos de EXPORT creados por versiones 5.1.22 en adelante.

Para leer datos de un archivo con formato ASCII o delimitado debe usar la utilería SQL LOADER.

ACERCA DE PROJECT BUILDERPara ayudar a simplificar las tareas de administración del software, Project Builder es utilizado para:1. Asocia los módulos con una aplicación o componentes de una aplicación2. Automatiza las acciones basadas en tipos de archivos3. Crea dependencias entre los módulos e indica como son los cambios en

cascada, en otras palabras, muestra cual de los módulos necesita ser recompilado con base en los cambios de otros módulos

4. Asigna cadenas de conexión por default para los módulos5. Designa que módulos serán incluidos en el conjunto final instalable6. Comparte los proyectos y subproyectos entre los miembros del equipo7. Invoca a otros desarrollos en Develper desde la interfaz de Project Builder

- 55 -

Page 56: proyecto final oracle.doc

El administrador del proyecto carga la creación del proyecto haciéndolo disponible al equipo de desarrolladores. El project administrator mantiene el Registro Global y las modificaciones por si son necesarias, exportando los cambios hacia el equipo de desarrolladores. Los desarrolladores de igual forma pueden exportar la información del proyecto para diferentes ambientes, como un test de ambientes o desarrollo a la par en otras plataformas.El trabajo del administrador del proyecto es darle roles a los miembros del equipo:1. Desarrolladores2. Control de administración del código fuente3. Testers (QA)4. Controlador de versionesObviamente las actividades precisas de cada miembro del equipo varían de un equipo de desarrollo a otro. Los miembros del equipo pueden también tomar uno o mas role, por ejemplo el líder del proyecto puede ser también el administrador, o un desarrollador puede ser también el que controle el código fuente.

ORACLE9I WAREHOUSE BUILDER El mismo posee tecnología OLAP ( Procesamiento Analítico en Línea ), lider en la industria en software para soporte de desiciones y análisis en general. Así, los clientes pueden administrar y desempeñar análisis multidimensionales complejos sobre grandes volúmenes de información, que van desde GBs hasta TBs de datos.

OTRAS UTILERIASExisten muchas otras utilerías propias de Oracle, asi como también de otras marcas de Software que solo se mencioaran a continuación:

 Terminating Threads with orakill Viewing Errors with the oerr Utility Memory Utilities Utilities for Starting and Stopping Databases Starting and Stopping on Windows oraenv and coraenv Utilities Using orapwd to Connect Remotely as SYSDBA Package Utilities UNIX Utilities and Shell Scripts The dbms_alert Utility The utl_smtp Utility The OEMCTL Utility The dbme_xplan Utility The dbms_repair Utility TOAD

11. DESCRIPCIÓN DE FRONTENDS Y BACKENDS

- 56 -

Page 57: proyecto final oracle.doc

Los dos principales componentes de una aplicación son el frontend (ejecutandose en el cliente) y backend (ejecutandose en el servidor). El backend juega diferentes roles pero puede ser implementados por el mismo ejecutable.Un frontend envía un paquete de inicio al postmaster. Este incluye los nombres del usuario y base de datos a la que el usuario quiere conectarse. El postmaster entonces utiliza esto, y la información en el archivo pg_hba.conf(5) para determinar que información adicional de autentificación necesita del frontend (si existe) y responde al frontend en concordancia.El frontend envía entonces cualquier información de autentificación requerida. Una vez que el postmaster valida esta información responde al frontend que está autentificado y entrega una conexión a un backend. El backend entonces envía un mensaje indicando arranque correcto (caso normal) o fallo (por ejemplo, un nombre de base de datos inválido).Las subsiguientes comunicaciones son paquetes de consulta y resultados intercambiados entre el frontend y backend. El postmaster no interviene ya en la comunicación ordinaria de cosultas/resultados. Sin embargo el postmaster se involucra cuando el frontend desea cancelar una consulta que se esté efectuando en su backend.Cuando el frontend desea desconectar envía un paquete apropiado y cierra la conexión sin esperar una respuesta del backend.Los paquetes son enviados como un flujo de datos. El primer byte determina que se debería esperar en el resto del paquete. La excepción son los paquetes enviados desde un frontend al postmaster, los cuales incluyen la longitud del paquete y el resto de él. Esta diferencia es histórica.En general, cualquier lenguaje de programación que se pueda conectar a una BD Oracle mediante ODBC, JDBC o con un conector propietario es frontend de Oracle.

C C++ PHP JAVA .NET VISUAL BASIC DELPHI

Y los Backend con los que con los que puede interactuar Oracle, son por ejemplo SQL SERVER SYBASE PROGRESS DB2

JAVAJava es una plataforma virtual de software desarrollada por Sun Microsystems, de tal manera que los programas creados en ella puedan ejecutarse sin cambios en diferentes tipos de arquitecturas y dispositivos computacionales ( "Diferentes plataformas").La plataforma Java consta de las siguientes partes:

El lenguaje de programación, mismo.

- 57 -

Page 58: proyecto final oracle.doc

La máquina virtual de Java o JRE, que permite la portabilidad en ejecución. El API Java, una biblioteca estándar para el lenguaje.

Java ofrece toda la funcionalidad de un lenguaje potente, pero sin las características menos usadas y más confusas de éstos. C++ es un lenguaje que adolece de falta de seguridad, pero C y C++ son lenguajes más difundidos, por ello Java se diseñó para ser parecido a C++ y así facilitar un rápido y fácil aprendizaje.Java elimina muchas de las características de otros lenguajes como C++, para mantener reducidas las especificaciones del lenguaje y añadir características muy útiles como el garbage collector (reciclador de memoria dinámica). No es necesario preocuparse de liberar memoria, el reciclador se encarga de ello y como es un thread de baja prioridad, cuando entra en acción, permite liberar bloques de memoria muy grandes, lo que reduce la fragmentación de la memoria.Java reduce en un 50% los errores más comunes de programación con lenguajes como C y C++ al eliminar muchas de las características de éstos, entre las que destacan: aritmética de punteros no existen referencias registros (struct) definición de tipos (typedef) macros (#define) necesidad de liberar memoria (free) Aunque, en realidad, lo que hace es eliminar las palabras reservadas (struct, typedef), ya que las clases son algo parecido.Además, el intérprete completo de Java que hay en este momento es muy pequeño, solamente ocupa 215 Kb de RAM.

Oracle9i JDeveloper introduce Oracle ADF que ayudará a obtener mayor productividad al permitir que los desarrolladores se concentren en definir la lógica del negocio para su aplicación, en contraposición con la escritura manual del código de nivel bajo para implementar la aplicación. Adicionalmente, genera en forma automática el código de infraestructura e implementa las mejores prácticas para ayudar a los desarrolladores a diseñar y crear aplicaciones J2EE y servicios Web optimizados y seguros para la empresa

- 58 -

Page 59: proyecto final oracle.doc

Con JDeveloper podrán definir su Alcance tecnológico especificando la combinación de tecnologías que quieran incorporar en sus aplicaciones y eligiendo su método preferido para desarrollar la aplicación. Por ejemplo, para crear un servicio web con el que los usuarios puedan interactuar a través de una interface de portal, un desarrollador podría especificar que quiere usar Enterprise JavaBeans, Oracle9iAS TopLink, Struts y las herramientas relacionadas para desarrollar visualmente con Java, XML, SOAP, WSDL y portlets. Además, podrá elegir su método preferido de desarrollo, como la generación de códigos controlados por wizards, modelado visual UML, etc. Una vez que el desarrollador haya definido el alcance de tecnología para un proyecto dado, Oracle9i JDeveloper se reconfigurará dinámicamente para incorporar las tecnologías preferidas e implementar las opciones y herramientas que el desarrollador haya seleccionado. La configuración resultante, llamada MyJDeveloper, permitirá a las empresas estandarizarse en un único entorno de desarrollo que cumpla con los requerimientos de una amplia gama de desarrolladores con diferentes habilidades y métodos de desarrollo.

PHPPHP es un lenguaje de programación usado generalmente para la creación de contenido para sitios web. PHP es el (acrónimo recursivo de "PHP: Hypertext Preprocessor", inicialmente PHP Tools, o, Personal Home Page Tools) es un lenguaje interpretado usado para la creación de aplicaciones para servidores, o creación de contenido dinámico para sitios web, y últimamente también para la creación de otro tipo de programas incluyendo aplicaciones con interfaz gráfica usando la librería GTK+.Su interpretación y ejecución se da en el servidor, en el cual se encuentra almacenado el script, y el cliente sólo recibe el resultado de la ejecución. Cuando

- 59 -

Page 60: proyecto final oracle.doc

el cliente hace una petición al servidor para que le envíe una página web, generada por un script PHP, el servidor ejecuta el intérprete de PHP, el cual procesa el script solicitado que generará el contenido de manera dinámica, pudiendo modificar el contenido a enviar, y regresa el resultado al servidor, el cual se encarga de regresárselo al cliente. Además es posible utilizar PHP para generar archivos PDF, Flash, así como imágenes en diferentes formatos, entre otras cosas.Permite la conexión a diferentes tipos de servidores de bases de datos tales como MySQL, Postgres, Oracle, ODBC, IBM DB2, Microsoft SQL Server y SQLite; lo cual permite la creación de Aplicaciones web muy robustas.PHP también tiene la capacidad de ser ejecutado en la mayoría de los sistemas operativos tales como UNIX (y de ese tipo, como Linux), Windows y Mac OS X, y puede interactuar con los servidores de web más populares ya que existe en versión CGI, módulo para Apache, e ISAPI.El modelo PHP puede ser visto como una alternativa al sistema de Microsoft que utiliza ASP.NET/C#/VB.NET, a ColdFusion de la compañía Macromedia, a JSP/Java de Sun Microsystems, y al famoso CGI/Perl. Aunque su creación y desarrollo se da en el ámbito de los sistemas libres, bajo la licencia GNU, existe además un compilador comercial llamado Zend Optimizer.

VISUAL BASICVisual Basic es uno de los tantos lenguajes de programación que podemos encontrar hoy en día. Dicho lenguaje nace del BASIC (Beginner´s All-purpose Symbolic Instruction Code) que fue creado en su versión original en el Dartmouth College, con el propósito de servir a aquellas personas que estaban interesadas en iniciarse en algún lenguaje de programación. Luego de sufrir varias modificaciones, en el año 1978 se estableció el BASIC estándar. La sencillez del lenguaje ganó el desprecio de los programadores avanzados por considerarlo "un lenguaje para principiantes".Primero fue GW-BASIC, luego se transformó en QuickBASIC y actualmente se lo conoce como Visual Basic y la versión más reciente es la 6 que se incluye en el paquete Visual Studio 6 de Microsoft. Esta versión combina la sencillez del BASIC con un poderoso lenguaje de programación Visual que juntos permiten desarrollar robustos programas de 32 bits para Windows. Esta fusión de sencillez y la estética permitió ampliar mucho más el monopolio de Microsoft, ya que el lenguaje sólo es compatible con Windows, un sistema operativo de la misma empresa. Visual Basic ya no es más "un lenguaje para principiantes" sino que es una perfecta alternativa para los programadores de cualquier nivel que deseen desarrollar aplicaciones compatibles con Windows.Este ejemplo realiza una consulta a una base de datos oracle mediante RDO (Microsoft Remote Data Object 2.0) y ODBC. Para ejecutarlo correctamente se deben seguir los siguientes pasos:

1. Guardar todos los archivos de este programa ejemplo (*.vbp, *.frm, *.bas) en alguna carpeta del disco duro

2. Instalar en el cliente los drivers de ODBC de Oracle, por ejemplo instalando un cliente oracle (SQL * Plus...)

3. Ir al panel de control

- 60 -

Page 61: proyecto final oracle.doc

4. Ira ODBC 5. En la pestaña DSN de sistema, pulsar "Agregar" 6. Seleccionar "Oracle ODBC Driver" y pulsar "Finalizar" 7. Escribir algún identificativo en "Data Source Name" y pulsar "OK" 8. Ejecutar el proyecto Visual Basic 9. Si la conexión es a la base de datos por defecto, el parámetro "Connect" del OpenDatabase puede

especificarse como: DSN=oracle;odbc;uid=scott;pwd=tiger

10. Si la conexión es a una base de datos remota, el parámetro "Connect" del OpenDatabase puede especificarse como:

DSN=oracle;odbc;database=ORCL@tcp-loopback;uid=scott;pwd=tigerdonde tcp-loopback es un identificativo de cadena de conexión del fichero tnsnames.ora

Tcp-loopback.world = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP) (Host = 127.0.0.1) (Port = 1521) ) ) (CONNECT_DATA = (SID = ORCL) ) )

Código fuenteA continuación se muestra el código de los ficheros que componen el proyecto rdo_ora.vbp Type=ExeReference=*\G{EE008642-64A8-11CE-920F-08002B369A33}#2.0#0#C:\WINNT\System32\msrdo20.dll#Microsoft Remote Data Object 2.0Module=bas_rdo_ora; rdo_ora.basStartup="Sub Main"HelpFile=""Command32=""Name="rdo_ora"HelpContextID="0"CompatibleMode="0"MajorVer=1MinorVer=0RevisionVer=0AutoIncrementVer=0ServerSupportFiles=0VersionCompanyName="Universidad de Deusto"CompilationType=0OptimizationType=0FavorPentiumPro(tm)=0CodeViewDebugInfo=0

- 61 -

Page 62: proyecto final oracle.doc

NoAliasing=0BoundsCheck=0OverflowCheck=0FlPointCheck=0FDIVCheck=0UnroundedFP=0StartMode=0Unattended=0ThreadPerObject=0MaxNumberOfThreads=1rdo_ora.bas Attribute VB_Name = "bas_rdo_ora"Option ExplicitGlobal rdoEnvironment1 As rdoEnvironmentGlobal rdoConnection1 As rdoConnectionSub main() Dim rs1 As rdoResultset Set rdoEnvironment1 = rdoEngine.rdoEnvironments(0) Set rdoConnection1 = rdoEnvironment1.OpenConnection("oracle", False, True, "DSN=oracle;odbc;database=ORCL@tcp-loopback;uid=scott;pwd=tiger") 'Set rdoConnection1 = rdoEnvironment1.OpenConnection("oracle", False, True, "DSN=oracle;odbc;uid=scott;pwd=tiger") Set rs1 = rdoConnection1.OpenResultset("select * from emp") ' por defecto es forward-only MsgBox rs1(0) & "-" & rs1(1) & "-" & rs1(2) rs1.MoveNext MsgBox rs1("EMPNO") & "-" & rs1("ENAME") & "-" & rs1("JOB") 'rs1.MovePrevious 'Esta instruccion produciría un error porque el tipo de rs1 es forward-only Set rs1 = rdoConnection1.OpenResultset("select * from emp", rdOpenStatic) MsgBox rs1(0) & "-" & rs1(1) & "-" & rs1(2) rs1.MoveNext MsgBox rs1(0) & "-" & rs1(1) & "-" & rs1(2) rs1.MovePrevious MsgBox rs1(0) & "-" & rs1(1) & "-" & rs1(2) Set rs1 = rdoConnection1.OpenResultset("select * from emp", rdOpenKeyset) MsgBox rs1(0) & "-" & rs1(1) & "-" & rs1(2) EndEnd Sub

SQL SERVER Microsoft SQL Server 7.0 constituye un lanzamiento determinante para los productos de bases de datos de Microsoft, continuando con la base sólida establecida por SQL Server 6.5. Como la mejor base de datos para Windows NT, SQL Server es el RDBMS de elección para una amplia gama de clientes corporativos y Proveedores Independientes de Software (ISVs) que construyen aplicaciones de negocios. Las necesidades y requerimientos de los clientes han

- 62 -

Page 63: proyecto final oracle.doc

llevado a la creación de innovaciones de producto significativas para facilitar la utilización, escalabilidad, confiabilidad y almacenamiento de datos.

12. MOSTRAR UN EJEMPLO PRÁCTICO DE UNA APLICACIÓN

El ejemplo que se va a desarrollar es el Sistema de Control de Vajillas, se va a diseñar en Designer, el case de Oracle y se utilizará el Developer para desarrollar la aplicación.La descripción del Ejemplo es el siguiente:

SISTEMA CONTROL DE VAJILLASLa alquiladora de vajillas “Nava”, requiere de un sistema de cómputo. Este sistema debe de incluir los módulos para el control de inventarios, pedidos y facturación. Para tal efecto se deben de tomar en cuenta las siguientes consideraciones:

Un pedido puede contener uno o varios productos. Una factura puede tener uno o varios productos correspondientes a uno o

varios pedidos. Un cliente puede rentar uno o varios productos. Un producto puede ser rentado a varios clientes.

Por lo que las entidades originales a considerar, junto con sus atributos son los siguientes:

PRODUCTO, con atributos cveprod, costorentaprod, existenciaprod, cantidadprod, descprod y colorprod.

CLIENTE, con atributos cvecte, nombrecte, domcte, telcte y nombreadicional.

PEDIDO, con atributos cvepedido y fechapedido. FACTURA, con atributos cvefact, fechafact y montofact.

Con base en los argumentos y en las entidades descritas, realiza las siguientes actividades:a. Diseña el MER, considerando la siguiente característica: Un producto (en su totalidad) o diferentes productos, pueden facturarse en una sola factura o en varias facturas. Por ejemplo un pedido puede contener los siguientes productos: 100 sillas, 20 mesas y 20 manteles, y este puede facturarse de la siguiente manera: factura 1 (F1) 100 sillas, factura 2 (F2) 20 mesas y 20 manteles. Es decir, el total de cada producto NECESARIAMENTE debe estar en una factura, y esta a su vez puede contener adicionalmente más productos (en su totalidad).

El Modelo Entidad-Relación es el siguiente:

- 63 -

Page 64: proyecto final oracle.doc

El Prototipo de Pantalla de Pedidos es el siguiente:

Alcance:La aplicación a desarrollar comprenderá la captura de los pedidos y la elaboración de las facturas.Consideraciones y Validaciones:Se generará en automático el No. de Pedido y se pondrá en automático la fecha del pedido, al introducir el número de cliente, se va a desplegar el nombre del cluente.Al seleccionar una clave de producto, se desplegará su descripción y el costo unitario de la renta. Se capturará la cantidad a rentar y se desplegará en automático el total de la renta del producto. El total del pedido se va a ir actualizando automáticamente cuando se dé la alta de un producto.Un pedido no se podrá borrar si existe una factura ligada a él.13. EXPLICAR SU LENGUAJE DE PROGRAMACIÓN NATIVO CON EJEMPLOS PRÁCTICOS EN EL CASO DE SQL LISTAR SUS EXTENSIONES Y AGREGADOS

PL/SQL es una extensión procedural de Oracle para el estándar SQL. PL/SQL es naturalmente eficiente con el uso y manipulación de SQL. Es una herramienta que trabaja del lado del servidor y se almacena en un lenguaje procedural, es fácil de usar y al igual que SQL es robusto, portable y seguro.

- 64 -

Page 65: proyecto final oracle.doc

Del lado del servidor PL/SQL no necesita de instalaciones explicitas, es una parte implícita en la BD Oracle y en los documentos tales como Furthermore, el compilador PL/SQL y el interprete están integrados en el Oracle Developer, lo cual proporciona a los desarrolladores un modelo consistente de desarrollo liberable tanto en el cliente como en el servidor. Adicionalmente PL/SQL almacena procedimientos que pueden ser llamados desde un número de clientes Oracle tales como Pro*C™ o Oracle Call Interface, y también desde Oracle Reports y Oracle Forms (Developer).

Lenguaje SQL y PL/SQL.

Características de SQL.El lenguaje SQL es una abreviatura de Structured Query Language (Lenguaje de Estructuras de Consultas) y es una herramienta que se utiliza para organizar, gestionar y recuperar datos que se encuentran almacenados en una base de datos y que también se utiliza para poder interaccionar con estas y que trabaja con las bases de datos relacionales, que fue propuesto por el Dr. E.F. Codd, quien propuso el modelo relacional para los sistemas de bases de datos en 1970.

El modelo relacional contiene los siguientes componentes: Una colección de objetos o relaciones. Poner las operaciones para actuar en las relaciones. Integridad de los datos con precisión y consistencia.

Oracle fue el primer fabricante que ofreció un producto que usaba el lenguaje de consulta estructurado (SQL), basado en el inglés, esto permite a los usuarios finales extraer su información por si mismos.El servidor ORACLE 7 soporta el estándar ANSI para SQL, y contiene las extensiones, SQL es el lenguaje empleado para comunicarse con el servidor para acceder, manipular y controlar los datos de acceso.El lenguaje de consultas de Oracle es un lenguaje estructurado, tiene reglas de gramática y de sintaxis, pero son parecidas a las del idioma inglés. Por lo tanto Oracle es capaz de responder a cuestiones como: ¿cuál es el nombre? de la persona que tiene el número de Clave = 3; de una manera rápida y sencilla, utilizando palabras clave como son select (seleccionar), from (de), where (donde), cuyas palabras ayudan a Oracle a comprender la petición y lograr una respuesta correcta.En la siguiente figura podemos ver cómo funciona SQL, el sistema informático tiene una base de datos que almacena información importante, este programa informático controla la base de datos y recibe el nombre de Sistema Manejador de Bases de Datos (Data Base Management System) o DBMS.

- 65 -

Page 66: proyecto final oracle.doc

Cuando requerimos de recuperar datos de alguna base de datos, hacemos uso del lenguaje SQL para realizar nuestras peticiones. El DBMS procesa las peticiones SQL, entonces recupera los datos solicitados y los envía de nuevo, a este proceso de solicitar datos y recibir los resultados de la base de datos se le denomina consulta (query) a la base de datos, de ahí que el lenguaje SQL signifique Structured Query Language. Lo que hace que SQL sea un lenguaje que es fácil de comprender y una herramienta completa para poder gestionar datos, y podemos mencionar algunas de las principales características de SQL:

Su portabilidad a través de los sistemas informáticos. Los datos que provienen de bases de datos basadas en SQL pueden ser extraídas ó remitidas de bases de datos institucionales o personales.

Los estándares SQL. Ha sido publicado un estándar oficial para SQL por El American National Standards Institute (ANSI) y la international Standards Organization (ISO), que le sirven como sello oficial de aprobación debido a su aceptación en el mercado.

Fundamento relacional. El lenguaje SQL se utiliza para bases de datos relacionales y que han tenido una gran difusión justamente por el fundamento teórico en el que se basa el modelo relacional de bases de datos, por lo cual SQL se ha convertido en el lenguaje de bases de datos para las bases de datos relacionales.

Estructura. Las sentencias en SQL son frases sencillas en inglés que lo hacen fácil de comprender y aprender.

Arquitectura cliente-servidor. Una de las grandes ventajas del SQL es que se puede implementar en una arquitectura cliente-servidor.

A continuación se dará una perspectiva general del lenguaje, así como su funcionamiento e ilustrando algunas de sus características importantes, cabe mencionar que hay muchos comandos disponibles en SQL.

Sentencias Manipulación de datos:SELECT: Esta sentencia recupera los datos en la base de datos que se desee. SQL> SELECT CVE,DESCRIPCION 2 FROM TIPOBIEN;CVE DESCRIPCION------------ ----------------------------------------

- 66 -

Page 67: proyecto final oracle.doc

5402247 FERMENTADOR5402248 BORRADORA DE CINTAS5402253 CAMARA DE PRESION5402254 FLAMOMETRO5402256 EVALUADOR5402259 EQUIPO PARA ENTRENAMIENTO5402260 DEMULADOR5402262 EQ, PARA PRUEBA DE ABLANDAMIENTO5402266 MAQ. PARA DETERMINAR OCTANAJE5402267 EQ. P/ DETERM. CONTAMINACION ATMOSFERICA5402268 COLUMNA DE ENFRIAMIENTO5402270 TRAMPAS5402271 CAPACITORES5402272 SENSORES5402273 REFRIGERADOR14 rows selected. La sentencia select, pide dos datos, que son, la clave (CVE) del bien así como la descripción de éste, que se encuentran en una tabla llamada TIPOBIEN.INSERT: Añade nuevas filas de datos a la base de datos.DELETE: Suprime filas de datos de la base de datos.UPDATE: Modifica datos existentes en la base de datos.Definición de datos:CREATE TABLE: Añade una nueva tabla a la base de datos.DROP TABLE: Suprime una tabla de la base de datos.ALTER TABLE: Modifica la estructura de una tabla existente.CREATE VIEW: Añade una nueva vista a la base de datos.DROP VIEW: Suprime una lista de la base de datos.CREATE INDEX: Construye un índice para una columna.DROP INDEX: Suprime el índice para una columna.CREATE SYNONYM: Define un alias para un nombre de tabla.DROP SYNONYM: Suprime un alias para un nombre de tabla.LABEL: Define el título de una columna. Control de transacciones:COMMIT: Finaliza la transacción actual.ROLLBACK: Aborta la transacción actual.

Características de PL/SQL.El PL/SQL es un lenguaje de procedimientos para SQL para escribir aplicaciones lógicas y para poder manipular los datos fuera de la base de datos. En la siguiente figura se muestra el bloque de una estructura en PL/SQL y que está formado por:

- 67 -

Page 68: proyecto final oracle.doc

Header . Contiene los nombres de los subprogramas, tipos y argumentos, sólo usados por los subprogramas.

Declaration . Contiene los identificadores locales para el bloque. Executable . Contiene las sentencias SQL y las sentencias de control

PL/SQL. Exception . La sección EXCEPTION de un bloque PL/SQL es el punto al

que se transfiere el control del programa siempre que se active un indicador de excepción. Los indicadores de excepción son definidos por el usuario o excepciones del sistema activadas automáticamente por PL/SQL.

PL/SQL significa Procedural Language/SQL, es un lenguaje de programación que se utiliza para acceder a bases de datos ORACLE. PL/SQL está integrado con el servidor de bases de datos, de modo que el código PL/SQL, puede ser procesado de forma rápida y eficiente. Como su nombre lo indica, PL/SQL amplía la funcionalidad de SQL añadiendo estructuras de las que pueden encontrarse en otros lenguajes procedimentales, como:

Variables y tipos (tanto predefinidos como definidos por el usuario). Estructuras de control, como bucles y órdenes IF-Then-Else. Procedimientos y funciones. Tipos de objetos y métodos(en PL/SQL versión 8 o superior).

Estructuras de Control PL/SQL.PL/SQL, como otros lenguajes de tercera generación, tiene diversas

estructuras de control que permiten controlar el comportamiento del bloque a medida que éste se ejecuta. Estas estructuras incluyen las órdenes condicionales y los bucles.IF-THEN-ELSELa sintaxis para una orden IF-THEN-ELSE es:

IF expresión_booleana1 THEN secuencia_de_órdenes1;[ ELSIF expresión_booleana2 THEN secuencia_de_órdenes2; ][ ELSE secuencia_de_órdenes3; ]END IF;

Donde las Expresiones booleanas son:

- 68 -

Page 69: proyecto final oracle.doc

Todas las estructuras de control PL/SQL (excepto GOTO) incluyen expresiones booleanas, también denominadas condiciones. Una expresión booleana es una expresión que tiene como resultado un valor booleano (TRUE, FALSE o NULL).Así que de la sintaxis de IF-THEN-ELSE, la expresión_booleana es cualquier expresión que dé como resultado un valor booleano. Las cláusulas ELSIF y ELSE son opcionales, y puede haber tantas cláusulas ELSIF como se desee. Y finalmente se termina la condición IF con un END IF.BUCLESPL/SQL permite ejecutar órdenes de forma repetida, utilizando los bucles. Existen cuatro tipos de bucles: bucles simples, bucles WHILE y bucles FOR numéricos.

Bucles simples Son el tipo de bucle más básico. Su sintaxis es:LOOP secuencia_de_órdenes;END LOOP;

Para este caso la secuencia_de_órdenes se ejecutará indefinidamente, puesto que este bucle no tiene ninguna condición de parada, pero para poder finalizar este bucle se puede agregar la condición EXIT, cuya sintaxis es:EXIT [ WHEN condición ];

Bucles WHILE La sintaxis de un bucle WHILE es:WHILE condición LOOP secuencia_de_órdenes;END LOOP;

La condición se evalúa antes de cada iteración del bucle. Si es verdadera, se ejecuta la secuencia_de_órdenes. Si la condición es falsa o nula, el bucle termina y el control se transfiere a lo que esté a continuación de la orden END LOOP.Bucles FOR numéricosEl número de iteraciones de los bucles simples y de los bucles WHILE no se conoce de antemano, sino que depende la condición de bucle. Los bucles FOR numéricos, por el contrario, tienen un número de iteraciones definido. La sintaxis es:

FOR contador_bucle IN [ REVERSE ] límite_inferior … límite_superior LOOP secuencia_de_órdenesEND LOOP;

Donde contador_bucle es la variable de índice declarada de modo explícito, límite_inferior y límite superior especifican el número de iteraciones y secuencia_de_órdenes es el contenido del bucle.Los límites del bucle sólo se evalúan una vez. Dichos valores determinan el número total de iteraciones, en las que contador_bucle varía entre los valores límite_inferior y límite_superior incrementándose en una unidad cada vez más, hasta que el bucle se completa.Si se incluye la palabra clave REVERSE en el bucle FOR, el índice del bucle realizará las iteraciones desde el límite superior al límite inferior.Procedimientos y Funciones.

- 69 -

Page 70: proyecto final oracle.doc

Los procedimientos y funciones de PL/SQL, se comportan de manera muy similar a los procedimientos y funciones de otros lenguajes de tercera generación. A los procedimientos y funciones se les denomina también colectivamente subprogramas.Creación de un procedimientoLa sintaxis para la orden CREATE OR REPLACE PROCEDURE es:

CREATE [ OR REPLACE ] PROCEDURE nombre_procedimiento [ (argumento [ { IN | OUT | IN OUT } ] tipo, ……. argumento [ { IN | OUT | IN OUT } ] tipo ) ] { IS | AS } cuerpo_procedimiento

Donde nombre_procedimiento es el nombre del procedimiento que se quiere crear, argumento es el nombre de un parámetro del procedimiento, tipo es el tipo del parámetro asociado y cuerpo_procedimiento es un bloque PL/SQL, que contiene el código del procedimiento. Los parámetros formales pueden tener tres modos: IN, OUT o IN OUT, si no se especifica el modo de un parámetro formal, se adopta, por defecto, el modo IN.

IN . El valor del procedimiento real se pasa al procedimiento cuando éste es invocado. Cuando termina el procedimiento, y se devuelve el control al entorno que realizó la invocación, el parámetro real no sufre cambios.

OUT . Se ignora cualquier valor que tenga el parámetro real cuando se llama al procedimiento . Dentro del procedimiento, el parámetro formal se considera como de sólo escritura, no puede ser leído, sino que tan sólo pueden asignársele valores. Cuando termina el procedimiento y se devuelve el control al entorno que realizó la llamada, los contenidos del parámetro formal se asignan al parámetro real.

IN OUT. Este modo es una combinación de IN y OUT. El valor del parámetro real se pasa al procedimiento cuando éste es invocado. Dentro del procedimiento, el parámetro formal puede ser tanto leído como escrito. Cuando termina el procedimiento y se devuelve el control al entorno que realizó la llamada, los contenidos del parámetro formal se asignan al parámetro real.

Sintaxis de las FuncionesLa sintaxis para crear una función almacenada es muy similar a la de un procedimiento:

CREATE [ OR REPLACE ] FUNCTION nombre_función [ (argumento [ { IN | OUT | IN OUT } ] tipo, argumento [ { IN | OUT | IN OUT } ] tipo ) ] RETURN tipo_retorno { IS | AS } cuerpo_función

Donde nombre_función es el nombre de la función, argumento y tipo son iguales que para un procedimiento, tipo_retorno es el tipo del valor que devuelve la función y cuerpo_función es un bloque PL/SQL que contiene el código de la función. Cursores

- 70 -

Page 71: proyecto final oracle.doc

Para procesar una orden SQL. ORACLE asigna un área de memoria que recibe el nombre de área de contexto. Esta área contiene las informaciones necesarias para completar el procesamiento, incluyendo el número de filas procesadas por la orden, un puntero a la versión analizada de la orden y, en el caso de consultas, el conjunto activo, que es el conjunto de filas resultado de la consulta.Un cursor es un puntero al área de contexto, mediante el cursor, un programa PL/SQL puede controlar el área de contexto y lo que en ella suceda a medida que se procesa la orden.Manejo de cursoresEl conjunto de filas resultantes de una consulta con la sentencia SELECT, como vimos anteriormente, puede estar compuesto por ninguna, una o varias filas, dependiendo de la condición que define la consulta. Para poder procesar individualmente cada fila de la consulta debemos definir un cursor (que es un área de trabajo de memoria) que contiene los datos de las filas de la tabla consultada por la sentencia SELECT.Los pasos para el manejo de cursores, tema novedoso en la programación de Oracle con PL/SQL, son:

- Definir el cursor, especificando la lista de parámetros con sus correspondientes tipos de datos y estableciendo la consulta a realizar con la sentencia SELECT.

- Abrir el cursor para inicializarlo, siendo éste el momento en que se realiza la consulta.

- Leer una fila del cursor, pasando sus datos a las variables locales definidas a tal efecto.

- Repetir el proceso fila a fila hasta llegar a la última.- Cerrar el cursor una vez que se terminó de procesar su última fila.

Declaración de un cursorLa declaración de un cursor define su nombre, y asocia el cursor con una orden SELECT. La sintaxis es:

CURSOR empleados IS select * from VistaEmpleado where to_number(Expe) = to_number(vClave);

De donde empleados es el nombre del cursor y a partir del SELECT es la consulta que el cursor procesará.Paquetes.Es una estructura PL/SQL que permite almacenar juntos una serie de objetos relacionados. Un paquete tiene dos partes diferenciadas, la especificación y el cuerpo del paquete, cada una de ellas se almacena por separado en el diccionario de datos. a diferencia de los procedimientos y funciones, que pueden ser almacenados en la base de datos, un paquete no puede ser local, sólo puede almacenarse. Especificación de un paqueteLa especificación o cabecera del paquete contiene información, acerca del contenido del paquete y no contiene el código de los procedimientos. La sintaxis general para la creación de una cabecera es la siguiente.

- 71 -

Page 72: proyecto final oracle.doc

Create or replace package bienN is GsRutaMenu varchar2(200):='http://gtid.imp.mx:8025/hard/plsql/inventario.'; GsRutaMenuVar varchar2(200); GsRutaProc varchar2(200):='http://gtid.imp.mx:8025/hard/plsql/procGeneralN.'; GsRutaBien varchar2(200):='http://gtid.imp.mx:8025/hard/plsql/bienN.'; GnClaveInv1 number(6):= 6420; GnClaveInv2 number(6) := 13767; Procedure PideInv(vClave in varchar2, vPw in varchar2, vClaveSU in VARCHAR2 default '0'); Procedure AsignaAUsuario(vNoInv in varchar2,vClave in varchar2, vPw in varchar2, vClaveSU in VARCHAR2 default '0'); Procedure confirmaAsignacion(vClave in varchar2,vNoInv in varchar2,vPw in varchar2, vClaveSU in VARCHAR2 default '0'); Procedure RegresaAVerifica(vNoInv IN VARCHAR2);end;

De donde bienN es el nombre del paquete y los elementos del paquete esta conformado por especificaciones de procedimientos y funciones, variables, etc. y finalmente se termina la cabecera del paquete con un end. Cuerpo del paqueteEl cuerpo del paquete es un objeto del diccionario de datos distinto de la cabecera. El cuerpo no puede ser compilado a menos que se haya previamente compilado la cabecera correspondiente.

create or replace package body bienN isProcedure PideInv(vClave in varchar2, vPw in varchar2, vClaveSU in VARCHAR2 default '0') is CURSOR empleados IS select * from VistaEmpleado where to_number(Expe) = to_number(vClave); si_hay number; usuario varchar2(40); BEGIN procGeneralN.IniFor; si_hay:=0; for reg in empleados loop si_hay := si_hay + 1; usuario := reg.Nomb; end loop; if si_hay = 0 then procGeneralN.MError('Usted no es empleado activo en el IMP'); else htp.formopen(GsRutaBien||'AsignaAUsuario','post'); htp.print('USUARIO AUTORIZADO '||usuario); htp.print('<font face="Arial, Helvetica, sans-serif" color="#000000" size=2>');

- 72 -

Page 73: proyecto final oracle.doc

htp.print('N'||procGeneralN.ce('u')||'mero de inventario del Bien que desea asignarse'); htp.br; htp.p('<font color="blue"><B>No. de Inventario :</B></font>'); htp.formtext('vNoInv','7','7'); htp.formhidden('vClave',vClave); htp.formhidden('vPw',vPw); htp.formhidden('vClaveSU',vClaveSU);htp.formSubmit('','ACEPTAR'); htp.formReset('CANCELAR','OnClick="history.go(-1)"'); htp.print('<font color="red"><B>NOTA:</B></font> El n'||procGeneralN.ce('u')||'mero de inventario es el que aparece en la placa que tiene el c'||procGeneralN.ce('o')||'digo de barras.'); htp.br; htp.print('Si su bien no lo tiene, favor de reportarlo a la Coordinaci'||procGeneralN.ce('o')||'n de Almacenes e Inventarios, indicando su ubicaci'||procGeneralN.ce('o')||'n.'); htp.br; procGeneralN.eMail_Inventarios; htp.formClose; end if;GsRutaMenuVar:=GsRutaMenu||'menu?vClave='||vClave||chr(38)||'vPw='||vPw||chr(38)||'vClaveSU='||vClaveSU; procGeneralN.FinFor(GsRutaMenuVar);end;

El cuerpo del paquete contiene el código correspondiente a las declaraciones formales incluidas en la cabecera. Cualquier declaración formal de la cabecera del paquete debe estar en el cuerpo del paquete. La especificación del procedimiento o función debe ser la misma en ambos sitios, incluyendo el nombre del subprograma, los nombres de sus parámetros y los modos de éstos.

Programación PL/SQL.Oracle es un producto que usa el lenguaje de consulta estructurado (SQL), y una de los lenguajes nativos con los que cuenta Oracle es PL/SQL, lo que permite una trasparencia entre el Servidor Oracle, la herramienta PL/SQL , otras herramientas como son Designer ó Developer y el propio Web-Server. El programar con PL/SLQ permite generar aplicaciones muy diversas, eficaces y rápidas, por ser un lenguaje embebido de Oracle que soporta SQL de una forma muy transparente.Ejemplos del uso de SQL dinámicos, Funciones y Procedimientos PL/SQL y Cursores en Oracle.SQL dinámico Ejemplos de generación de SQL mediante SQL

create table persona (nombre varchar2 (20));insert into persona values ('pepe');insert into persona values ('rosa');

- 73 -

Page 74: proyecto final oracle.doc

insert into persona values ('juan');select nombre from persona;select 'hola ' || nombre from persona;select nombre, nombre from persona;select nombre || ' es ' || nombre "Algunas tautologías" from persona;select nombre from persona;create user begoña identified by begoña;grant connect, resource to begoña;select 'create user ' || nombre || ' identified by ' || nombre || ';' from persona;select 'grant connect, resource to ' || nombre || ';' from persona;set heading offset feedback offspool c:\ejemplo0001.sqlselect 'create user ' || nombre || ' identified by ' || nombre || ';' from persona;select 'grant connect, resource to ' || nombre || ';' from persona;spool offset feedback onset heading on

Funciones PL/SQL Ejercicio 1. Crear una función pl/sql que duplica la cantidad recibida como parámetro

--Función que duplica la cantidad recibida como parámetroCREATE OR REPLACE FUNCTION duplicador(valor number) RETURN number ISBEGIN

return (valor * 2);END;/show errorsvar x number;EXEC :x := duplicador(5);print x

Ejercicio 2. Crear una función pl/sql llamada factorial que devuelva el factorial de un número, por ejemplo 5! = 1 * 2 * 3 * 4 * 5 = 120

--Cálculo del factorial de un númeroCREATE OR REPLACE FUNCTION factorial (pNum number ) RETURN number ISBEGIN

if pNum = 0 thenreturn 1;

else return pNum * factorial(pNum - 1);

end if;END;/show errors

- 74 -

Page 75: proyecto final oracle.doc

var x number;EXEC :x := factorial(5);print x;

Procedimientos PL/SQL

Ejercicio 1. Crear un procedimiento pl/sql que muestra los números desde el 1 hasta el valor pasado como parámetro.

--Mostrar los números del 1 al parametroCREATE OR REPLACE PROCEDURE mostrarNumeros1Ub (Ub number ) ISvCont number;BEGIN

-- vContamos de 1 a UbvCont := 0;loop

vCont := vCont + 1;exit when vCont > Ub;dbms_output.put_line('Iteración número ' || vCont);

end loop;END;/show errorsset serveroutput on;EXEC mostrarNumeros1Ub(5);

Ejercicio 2. Modificar el procedimiento del Ejercicio 1 para que muestre números desde un valor inferior hasta uno superior con cierto salto.

--Mostrar los números del Lb a Ub con un saltoCREATE OR REPLACE PROCEDURE mostrarNumerosLbUbStep (pLb IN number, pUb IN number, pStep IN number DEFAULT 1) ISvCont number;BEGIN

-- contamos de pLb a pUbvCont := pLb-pStep;loop

vCont := vCont + pStep;exit when vCont > pUb;dbms_output.put_line('Iteración número ' || to_char((vCont-

pLb+pStep)/pStep));end loop;

END;/show errorsset serveroutput on;EXEC mostrarNumerosLbUbStep(1990,1995,0.5);EXEC mostrarNumerosLbUbStep(1990,1995,0.1);

- 75 -

Page 76: proyecto final oracle.doc

EXEC mostrarNumerosLbUbStep(1990,1995,2);Ejercicio 3. Modificar el procedimiento del Ejercicio 1 para que inserte los números en una tabla.

--creación de objetoscreate table numeros(numero number);delete from numeros;insert into numeros values(1);insert into numeros values(2);insert into numeros values(3);--Mostrar los números del 1 al parametroCREATE OR REPLACE PROCEDURE mostrarNumeros1Ub (Ub number) ISvCont number;BEGIN

-- vContamos de 1 a UbvCont := 0;loop

vCont := vCont + 1;exit when vCont > Ub;insert into numeros values(vCont);--dbms_output.put_line('Iteración número ' || vCont);

end loop;END;/show errorsset serveroutput on;EXEC mostrarNumeros1Ub(5);

Cursores SQL Ejemplo de cursor SQL--Este procedimiento contiene un cursor SQL que recorre y muestra --los números de la tabla NUMEROS que sean menores o iguales al parámetroCREATE OR REPLACE PROCEDURE recorreNumeros1 (pUb IN number DEFAULT 100) isvNum number;CURSOR cNumeros IS

SELECT numero FROM NUMEROS WHERE NUMEROS.numero <= pUb;BEGIN

OPEN cNumeros;loop

FETCH cNumeros INTO vNum;exit when cNumeros%NOTFOUND;dbms_output.put_line('Número ' || vNum);

end loop;CLOSE cNumeros;END;/show errors

- 76 -

Page 77: proyecto final oracle.doc

set serveroutput on;delete from numeros;EXEC insertaNumerosLbUbStep(1,10);select * from numeros;EXEC recorreNumeros1(5);

Otra forma de codificarlo es: --Este procedimiento contiene un cursor SQL que recorre y muestra --los números de la tabla NUMEROS que sean menores o iguales al parámetroCREATE OR REPLACE PROCEDURE recorreNumeros2 (pUb IN number DEFAULT 100) isCURSOR cNumeros IS

SELECT numero, texto FROM NUMEROS WHERE NUMEROS.numero <= pUb;

regNum cNumeros%ROWTYPE;BEGIN

OPEN cNumeros;loop

FETCH cNumeros INTO regNum;exit when cNumeros%NOTFOUND;dbms_output.put_line('Número ' || regNum.numero || ' ' || regNum.texto);end loop;CLOSE cNumeros;

END;/show errorsset serveroutput on;delete from numeros;EXEC insertaNumerosLbUbStep(1,10);select * from numeros;EXEC recorreNumeros2(5);

- 77 -

Page 78: proyecto final oracle.doc

BIBLIOGRAFÍA Y FUENTES DE INFORMACIÓN

“Guia para Desarrolladores de Oracle “Autor Carol McCullough-DieterEdit. Anaya Multimedia

"Oracle Manual de administrador"Autor: Kevin LoneyEdit.: Mc. Graw Hill

“Oracle 7 Manual de Referencia”Autor: George KochEdit.: Mc. Graw-Hill

http://otn.oracle.com/tech/linux/content.htmlhttp://www.redcientifica.com/oraclehttp://otn.oracle.com/products/oracle9i/datasheets/iots/iot_ds.htmlhttp://otn.oracle.com/products/oracle9i/datasheets/advanced_security/aso_rel2.htmlhttp://otn.oracle.com/products/oracle9i/datasheets/ols/OLS9iR2_ds.htmlhttp://otn.oracle.com/tech/pl_sql/content.html

- 78 -


Recommended