Sei sulla pagina 1di 78

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

07/03/2019

-1-
ÍNDICE

ORACLE..……………………………………… …………………… ……… …… ….3


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

ORACLE

-2-
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-
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ón
La 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 ora
Deben 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

Requerimientos
El 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-
 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-
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 10g
La 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-
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
entidades
Instalacion 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-
 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 tbs1
datafile 'nombre_archivo.dbf'
size 10m
default storage
(initial 50k
next 25k
pctincrease 0) online;
 Modificación: añadiendo otro archivo.
svrmgr>alter tablespace tbs1 add
datafile '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-
 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.

-9-
 Estructura de los registros:
 Identificador de la transacción.
 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 -
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 -
4. ESTRUCTURA DE LA MEMORIA

Estructuras internas de memoria


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

Area Global de Sistema


Se 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 SGA


SHARED_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:

Buffers del Bufers del Caché Almacén


Bloque registro del SQL

De datos de rehacer diccionario compartido

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 -
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 diccionario


La 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 rehacer


En 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 -
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 compartido


En 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 Instancia
La 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 sga


Total System Global Area 15077376 bytes

- 14 -
Fixed Size 49152 bytes
Variable Size 12906496 bytes
Database Buffers 2048000 bytes
Redo Buffers 73728 bytes
Estructuras SGA System 49Kb Área Fija. Información Contiene información sobre:
de Global Area adicional sobre procesos  Usuarios conectados
Memoria  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 Área compartida para sentencias
compartida. Shared Pool. SQL
Á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
Caché del diccionario (Dictionary
Caché o Row Caché)
2 Mb Caché de datos (buffer Contiene los datos y bloques de
caché) Buffers de BD. rollback en uso.
Database Buffers Se dimensiona con el parámetro
db_block_buffers en init<sid>.ora,
por
ejemplo
db_block_buffers = 1000
73 Caché de redo logs (Redo Contiene los datos que son
Kb log buffers) 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 Áreas de ordenación de
ordenación sentencias. Sort Area
Ejecutables
de Oracle

- 15 -
Procesos de la Instancia
Procesos Estándar DBWR. DataBase Escribe en los archivos de la BD los buffers de
Background Writer 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 Trata las recuperaciones en caso de fallo.
MONitor. 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 Recuperaciones en caso de fallo de un
MONitor. usuario. Libera recursos inactivos. En
configuraciones Multi-Threaded Server
restablece los procesos dispatcher y
servidores caídos.
Puntos de CKPT Proceso de Apoyo al LGWR. Actualiza
Ruptura 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 D000 – Dnnn Procesos encargados de distribuir las
Server peticiones de usuarios de sentencias SQL
entre los procesos compartidos.
S000 – Snnn Procesos Compartidos que resuelven
sentencias SQL
Parallel LCKn Procesos de sincronización de instancias.
Server
LMON Soluciona problemas de procesos muertos o
colgados en Parallel Server.
Parallel P000 – Pnnn Ejecución de sentencias de forma paralela
Query distribuyendo la carga entre distintas CPU.
Modo ARCH Proceso encargado de copiar los históricos
Archiver (redo log files) en archivos aparte (archiver
(archive files) antes de que sean sobreescritos.
log)
Opción RECO Proceso encargado del tratamiento de fallos y
Distribuida recuperaciones producidos en transacciones
distribuidas debidos a fallos de la red o de la
instancia.
SNP0 – SNPn Procesos para el mantenimiento y refresco de
snapshots
en BD distribuidas.

- 16 -
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 datos
Para 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 -
Integridad de dominios
Se aplica como reglas que definen los Valores válidos de los datos, tales como el
tipo de dato

Integridad de transiciones
Se define como los estados válidos por los que puede pasar válidamente un dato
Ejemplo: Edad Tipo: Numérico
Válido : 30
Inválido : 180

Integridad de entidades
La 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 -
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 -
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 -
• 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*-Tree


De 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 -
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 Bitmap


Un í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 -
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 índices


Una 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 -
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 índices
Las 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 almacenamiento
Las 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 llaves
Incremento de 24x7 en disponibilidad
Las 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 incremental
Las 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 -
De fácil uso y funcionalidad completa
La 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 tabla
Características del performance:
Soporta segmentos de OVERFLOW
Compresión de llaves
Nuevos indices secundarios de bitmaps sobre IOT’s no particionados
Nueva guía en linea para un DBA invitado reacondicionado sobre indices
secundarios
Opción a recolocación de columnas
Características de escalabilidad:
Rango de particiones
Nuevo particionamiento Hash
Nuevas columnas LOB particionadas en IOT’s
Querys paralelos
Nuevo DML paralelo
Soporte para vistas materializadas
Características de disponibilidad:
Movimiento en linea
Reorganización en linea
Indices secundarios lógicos
Nueva creación y reconstrucción de indices en linea
Nuevos índices de COALESCE en linea
Nuevos movimientos en linea de segmentos de flujo
Nueva 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 -
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 -
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ón
Oracle proporciona sofisticados procedimientos de realización de copias de
seguridad y recuperación de los datos. Las copias de seguridad permiten crear

- 27 -
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 Redo
Alta (INSERT) Clave Registro completo
Baja (DELETE) Registro completo Clave
Modificación (UPDATE) Clave y valor modificado Clave y valor modificado
anterior 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;

- 28 -
 SVRMGR>alter database archivelog;
 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
defecto
sys change_on_install
system manager
scott tiger
internal oracle
sys 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 datos
En 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;

Usuari Comando
o
Sys alter user sys identified by

- 29 -
change_on_install;
Syste alter user system identified by
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 operativo
2. Por archivo de passwords
Métodos recomendados
Tipo de Administración ¿hay una conexión Método recomendado
segura?
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 utilizados


Sistema Operativo Método utilizado
Unix y VMS por sistema operativo
NT por archivo de passwords

Configuración
En c:\orant\database\initorcl.ora
Autentificación por Sistema Operativo Autentificación por archivo de
passwords
remote_login_passwordfile = none remote_login_passwordfile = exclusive
remote_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 INTERNAL
En 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 sysdba
SQL>connect scott/tiger@orcl as sysoper

- 30 -
Por ejemplo, sys no puede hacer shutdown conectandose como:
SQL>connect sys/change_on_install
pero sí como
SQL>connect sys/oracle as sysdba
El rol del Sistema Operativo Supone
OSOPER 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 internal


1. Borrar o mover el archivo C:\orant\database\pwdorcl.ora
2. Ejecutar
c:\orant\bin>orapwd80.exe
file=c:\orant\database\pwdorcl.ora
password=oracle
Suplantación de un usuario
1. 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

- 31 -
Conceptos de gestión de privilegios y recursos

Concepto Significado
Privilegio 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 Se utilizan los comandos


de
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)

- 32 -
GRANT (conceder un permiso o un rol a un rol)
REVOKE (denegar un permiso o un rol a un rol)
Usuarios CREATE USER (crear)
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 CREATE PROFILE (crear)
Recursos 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 Acción


Datos
Base de Datos Parada RESOURCE_LIMIT = TRUE en
c:\orant\database\initorcl.ora
Base de Datos ALTER SYSTEM SET RESOURCE_LIMIT = TRUE;
Arrancada

Vistas más relevantes


Significado
Usuarios dba_users user_users all_users
Roles dba_roles
Roles asignados a roles o dba_role_privs user_role_privs
usuarios
Privilegios asignados a dba_sys_privs
roles o usuarios
Permisos sobre tablas dba_tab_privs
asignados a roles o
usuarios
Roles asignados a role_role_privs
roles
Privilegios de cada rol role_sys_privs
Límites de recursos user_resource_limits
Perfiles y sus límites de dba_profiles
recursos asociados
Límites de recursos en user_password_limit
cuanto a restricciones en s
claves
Límites de recursos en dba_ts_quotas user_ts_quotas
cuanto a espacio máximo
en tablespaces

- 33 -
Oracle 9i Advanced Security Release 2
Enterprise User Security
Passwords basados en Enterprise User Security
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 Utility


En 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 Security


Oracle 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.

- 34 -
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
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.

Kerberos
Kerberos 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 RADIUS


Lo 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.

- 35 -
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
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 Security
Los 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.

- 36 -
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.

Administración de políticas flexibles y altamente customizables


Las 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 9i


Oracle9i 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 datos


Las 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

- 37 -
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.

Redes, Replicación y Ambientes de Distribución


Las 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.

Auditorias
Para 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.

Export
Oracle9i Label Security tiene la capacidad de hacer exportaciones al worldwide.

Evaluaciones
Oracle9i 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.

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

- 38 -
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
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
tablespace
nombre_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.

- 39 -
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.

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á la
dirección) y datos binarios.

- 40 -
vistas-objeto. Permiten crear objetos a partir de las tablas de datos.

Vistas
Una 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 AS
SELECT columna1, columna2, ...
FROM tabla1, ...
WHERE columna > valor ;

Secuencias
A 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_secuencia
INCREMENT BY número

- 41 -
START WITH número
MINVALUE 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.
 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)

- 42 -
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:
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 Multiplexados
La 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 RECOVER
Cambio 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 instantancia
Ejecutar el server manager (svrmgrl)
Conenect internal /password.
Startup NOMOUNT/ MOUNT/ OPEN

- 43 -
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 instancia
ejecutar server manager
connet internal /password
Shutdown NORMAL/IMMEDIATE/ABORT donde.

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 Rollback
Es 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 Storage
Initial - 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

- 44 -
 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.
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 Oracle
Un 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 bloques
La pieza inicial del registro permanece en el bloque al que fue dirigido
originalmente.

- 45 -
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.
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.
Disparadores
El 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.

- 46 -
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

CONOCIENDO DEVELOPER
Developer 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 formulario
Arquitectura Three-tiered architecture
En 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 Hardware
front-end any number of client desktop machines
middle one or more application servers
back-end one or more database servers

- 47 -
Arquitectura Cliente/Servidor contra Arquitectura Web
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 DESIGNER


Oracle 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.

- 48 -
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
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 Requirements
Las 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 Designs
Utiliza el transformador para el diseño preeliminar generado desde el modelo
creado con anterioridad.
Designing and Generating
Utiliza 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
repositorio
Repository Tools
El 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

- 49 -
 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 fuentes
3. Herramientas de desarrollo Oracle
 Oracle * Forms »» Developer (Forms, Reports Graphics). Herramienta muy
potente y compleja para el desarrollo de aplicaciones.
 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)

- 50 -
ACERCA DE SQL LOADER
SQL*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:
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.

- 51 -
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.
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

- 52 -
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:

Comando Abreviatura
Descripción
APPEND texto A texto Añade texto al final de la línea.
Cambia el contenido 'fuente' por el
CHANGE/fuente/destino C/fuente/destino
'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 Lnón Lista la línea n-ésima.
LIST * L* Lista la línea actual.
LIST LAST L LAST Lista la última línea.
Lista las líneas desde la m-ésima a la n-
LIST m n Lmn
é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=vi
SQL> edit
Utilizació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

- 53 -
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.
 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.

- 54 -
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.
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.

IMPORT
La 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.

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

ACERCA DE PROJECT BUILDER


Para 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ón
2. Automatiza las acciones basadas en tipos de archivos
3. 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ódulos
5. Designa que módulos serán incluidos en el conjunto final instalable
6. Comparte los proyectos y subproyectos entre los miembros del equipo
7. Invoca a otros desarrollos en Develper desde la interfaz de Project Builder

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. Desarrolladores
2. Control de administración del código fuente
3. Testers (QA)
4. Controlador de versiones
Obviamente 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 UTILERIAS
Existen 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

- 56 -
 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

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

- 57 -
 VISUAL BASIC
 DELPHI
Y los Backend con los que con los que puede interactuar Oracle, son por ejemplo
 SQL SERVER
 SYBASE
 PROGRESS
 DB2

JAVA
Java 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.
 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

- 58 -
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

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.

PHP
PHP 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

- 59 -
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
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 BASIC
Visual 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:

- 60 -
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
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=tiger
donde 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 fuente
A continuación se muestra el código de los ficheros que componen el proyecto
rdo_ora.vbp
Type=Exe
Reference=*\G{EE008642-64A8-11CE-920F-
08002B369A33}#2.0#0#C:\WINNT\System32\msrdo20.dll#Microsoft Remote Data
Object 2.0
Module=bas_rdo_ora; rdo_ora.bas
Startup="Sub Main"
HelpFile=""
Command32=""
Name="rdo_ora"
HelpContextID="0"
CompatibleMode="0"
MajorVer=1
MinorVer=0
RevisionVer=0
AutoIncrementVer=0

- 61 -
ServerSupportFiles=0
VersionCompanyName="Universidad de Deusto"
CompilationType=0
OptimizationType=0
FavorPentiumPro(tm)=0
CodeViewDebugInfo=0
NoAliasing=0
BoundsCheck=0
OverflowCheck=0
FlPointCheck=0
FDIVCheck=0
UnroundedFP=0
StartMode=0
Unattended=0
ThreadPerObject=0
MaxNumberOfThreads=1
rdo_ora.bas
Attribute VB_Name = "bas_rdo_ora"
Option Explicit
Global rdoEnvironment1 As rdoEnvironment
Global rdoConnection1 As rdoConnection
Sub 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)
End
End Sub

- 62 -
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
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 VAJILLAS


La 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).

- 63 -
El Modelo Entidad-Relación es el siguiente:

El Prototipo de Pantalla de Pedidos es el siguiente:


Sistema de Control de Vajillas

No. Pedido: Fecha:

No. de Cliente:

Nombre del Cliente:

Cve. Producto Descripción Cantidad Costo Unitario Total

Total del Pedido: $

Grabar Borrar Cancelar

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.

- 64 -
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.
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

- 65 -
informático controla la base de datos y recibe el nombre de Sistema Manejador de
Bases de Datos (Data Base Management System) o DBMS.

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

- 66 -
2 FROM TIPOBIEN;
CVE DESCRIPCION
------------ ----------------------------------------
5402247 FERMENTADOR
5402248 BORRADORA DE CINTAS
5402253 CAMARA DE PRESION
5402254 FLAMOMETRO
5402256 EVALUADOR
5402259 EQUIPO PARA ENTRENAMIENTO
5402260 DEMULADOR
5402262 EQ, PARA PRUEBA DE ABLANDAMIENTO
5402266 MAQ. PARA DETERMINAR OCTANAJE
5402267 EQ. P/ DETERM. CONTAMINACION ATMOSFERICA
5402268 COLUMNA DE ENFRIAMIENTO
5402270 TRAMPAS
5402271 CAPACITORES
5402272 SENSORES
5402273 REFRIGERADOR
14 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 -
 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-ELSE
La 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 -
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.
BUCLES
PL/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éricos
El 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_órdenes
END 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.

- 69 -
Procedimientos y Funciones.
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 procedimiento
La 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 Funciones


La 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

- 70 -
función y cuerpo_función es un bloque PL/SQL que contiene el código de la
función.
Cursores
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 cursores
El 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 cursor
La 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 paquete

- 71 -
La 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.
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 paquete
El 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 is
Procedure 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);

- 72 -
htp.print('<font face="Arial, Helvetica, sans-serif" color="#000000"
size=2>');
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));

- 73 -
insert into persona values ('pepe');
insert into persona values ('rosa');
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 off
set feedback off
spool c:\ejemplo0001.sql
select 'create user ' || nombre || ' identified by ' || nombre || ';' from persona;
select 'grant connect, resource to ' || nombre || ';' from persona;
spool off
set feedback on
set 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ámetro
CREATE OR REPLACE FUNCTION duplicador(valor number) RETURN
number IS
BEGIN
return (valor * 2);
END;
/
show errors
var 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úmero
CREATE OR REPLACE FUNCTION factorial (pNum number ) RETURN
number IS
BEGIN
if pNum = 0 then
return 1;
else
return pNum * factorial(pNum - 1);
end if;
END;

- 74 -
/
show errors
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 parametro
CREATE OR REPLACE PROCEDURE mostrarNumeros1Ub (Ub number )
IS
vCont number;
BEGIN
-- vContamos de 1 a Ub
vCont := 0;
loop
vCont := vCont + 1;
exit when vCont > Ub;
dbms_output.put_line('Iteración número ' || vCont);
end loop;
END;
/
show errors
set 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 salto
CREATE OR REPLACE PROCEDURE mostrarNumerosLbUbStep (pLb
IN number,
pUb IN number, pStep IN number DEFAULT 1) IS
vCont number;
BEGIN
-- contamos de pLb a pUb
vCont := 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 errors
set serveroutput on;

- 75 -
EXEC mostrarNumerosLbUbStep(1990,1995,0.5);
EXEC mostrarNumerosLbUbStep(1990,1995,0.1);
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 objetos
create 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 parametro
CREATE OR REPLACE PROCEDURE mostrarNumeros1Ub (Ub number)
IS
vCont number;
BEGIN
-- vContamos de 1 a Ub
vCont := 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 errors
set 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ámetro
CREATE OR REPLACE PROCEDURE recorreNumeros1 (pUb IN number
DEFAULT 100) is
vNum 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;

- 76 -
/
show errors
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ámetro
CREATE OR REPLACE PROCEDURE recorreNumeros2 (pUb IN number
DEFAULT 100) is
CURSOR 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 errors
set serveroutput on;
delete from numeros;
EXEC insertaNumerosLbUbStep(1,10);
select * from numeros;
EXEC recorreNumeros2(5);

- 77 -
BIBLIOGRAFÍA Y FUENTES DE INFORMACIÓN

“Guia para Desarrolladores de Oracle “


Autor Carol McCullough-Dieter
Edit. Anaya Multimedia

"Oracle Manual de administrador"


Autor: Kevin Loney
Edit.: Mc. Graw Hill

“Oracle 7 Manual de Referencia”


Autor: George Koch
Edit.: Mc. Graw-Hill

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

- 78 -

Potrebbero piacerti anche