Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Proyecto Final.
RDBMS ORACLE
07/03/2019
-1-
ÍNDICE
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.
-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.
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.
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
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.
-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
- 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.
- 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 á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.
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.
- 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
- 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
- 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”).
- 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.
- 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).
- 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.
- 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
- 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) - -
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
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;
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
- 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
- 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.
- 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
- 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.
- 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.
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.
- 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.
- 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.
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
- 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.
- 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.
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.
- 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.
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.
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.
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
- 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.
- 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
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.
- 63 -
El Modelo Entidad-Relación es el siguiente:
No. de Cliente:
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
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.
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.
- 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;
- 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
- 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;
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
- 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);
- 77 -
BIBLIOGRAFÍA Y FUENTES DE INFORMACIÓN
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 -