Upload
rlgarciaj
View
57
Download
0
Embed Size (px)
Citation preview
UN
Sistem
NIVERSIDA
mas
AD REGION
CLIE
T
NAL AUTÓ
Autor
DESA
ENTE
TUTOR
NOMA DE
r: Diego Sán
ARRO
E – SE
R: Ing. Os
LOS ANDE
nchez
OLLO
ERVID
scar Lleren
ES “UNIAND
O
DOR
na
DES” MANORAC
Pág
UAL CLE 9i
gina 1
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES” MANUAL ORACLE 9i
Sistemas Autor: Diego Sánchez Página 2
INDICE
INTRODUCCION ORACLE
SISTEMA GESTOR DE BASE DE DATOS (SGBD) ORACLE
ADMINISTRADOR DE BASES DE DATOS (DBA)
ANALISIS INICIAL DE UN SGBD ORACLE
TELEPROCESO
SERVIDOR DE ARCHIVOS
CLIENTE-SERVIDOR
CARACTERISTICAS DEL MODELO CLIENTE/SERVIDOR
TIPOS DE CLIENTES
TIPOS DE SERVIDOR
INSTALACIÓN DE ORACLE 9I
CÓMO INSTALAR ORACLE CLIENT EN WINDOWS
(CLIENTE DE ORACLE)
CONEXIÓN NATIVE- CONEXIÓN OBDC
HERRAMIENTA SQL PLUS
ESTRUCTURA DEL LENGUAJE SQL
ARQUITECTURA ORACLE
CREAR UN TABLESPACE
ALTERAR UN TABLESPACE
BORRAR UN TABLESPACE
FICHEROS
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES” MANUAL ORACLE 9i
Sistemas Autor: Diego Sánchez Página 3
INSTANCIAS
ESTRUCTURAS INTERNAS DE LA BD
TABLAS Y COLUMNAS
RESTRICCIONES DE TABLAS
USUARIOS
PROCEDIMIENTOS Y FUNCIONES
DISPARADORES, TRIGGERS
PRIVILEGIOS Y ROLES
SEGMENTOS, EXTENSIONES Y BLOQUES
FICHEROS DE LA BD
TIPOS DE SENTENCIAS
CREACIÓN TABLAS
TIPOS DE COLUMNAS
RESTRICCIONES
INSERCIÓN, ACTUALIZACIÓN Y BORRADO
BORRADO
SELECCIÓN
PRIVILEGIOS DEL SISTEMA
AUDITORÍA DE SEGURIDAD
PL/SQL
BLOQUE PL/SQL
TIPOS DE BLOQUES
FUNCIONES EN PL/SQL
TRIGGERS
EJECICIOS ORACLE 9i GENERAL
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES” MANUAL ORACLE 9i
Sistemas Autor: Diego Sánchez Página 4
INTRODUCCION ORACLE
SISTEMA GESTOR DE BASE DE DATOS (SGBD) ORACLE
Está concebido con el fin de manejar grandes cantidades de información, además de
admitir conexiones concurrentes de multitud de usuarios (entornos multi-usuario) hacia
los mismos datos.
Oracle aporta un SGBD que estará ubicado en un hardware específico y bajo un sistema
operativo determinado.
La elección del entorno de trabajo (hardware, S.O. y tipología de la estructura
cliente/servidor) será una decisión que estará acorde con las necesidades del propio
sistema de información.
Las principales funcionalidades aportadas por todo el SGBD Oracle son:
• Soporte y tratamiento de una gran cantidad de datos (Gbytes).
• Soporte de una gran cantidad de usuarios accediendo concurrentemente a los
datos.
• Seguridad de acceso a los datos, restringiendo dicho acceso según las
necesidades de cada usuario.
• Integridad referencial en su estructura de base de datos.
• Conectividad entre las aplicaciones de los clientes en sus puestos de trabajo y el
servidor de datos Oracle (estructura cliente/servidor.
• Conectividad entre bases de datos remotas (estructura de bases de datos
distribuidas)
• Portabilidad.
• Compatibilidad.
ADMINISTRADOR DE BASES DE DATOS (DBA):
Es el responsable para el buen funcionamiento de toda una estructura de datos y todo su
entorno de trabajo.
Esta persona deberá tener un alto conocimiento de todo el sistema que envuelve al
SGBD.
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES” MANUAL ORACLE 9i
Sistemas Autor: Diego Sánchez Página 5
Sobre este recae una alta responsabilidad, debido a las graves repercusiones que puede
traer una mala gestión de la información.
Las funciones que se le asignan a un DBA Oracle son las siguientes:
• Instalación y actualización del software del SGBD.
• Analizar e instalar en la base de datos las aplicaciones con las que van a
interactuar los usuarios. Esto, básicamente lleva consigo:
__ Asignación de espacios (tablespaces) en la base de datos y ubicación de los mismos
en los discos de la máquina.
__ Creación de todos los objetos (tablas, índices, vistas, etc.) requeridos por cualquiera
de las aplicaciones, así como su dimensionamiento dentro de la base de datos.
__ Actualización de los parámetros del sistema para el correcto funcionamiento de las
aplicaciones.
Creación de los usuarios y asignación de privilegios, con el fin de controlar la seguridad
de acceso de estos a la información de la base de datos.
Controlar y monitorizar los accesos de los usuarios a la base de datos. Excesivas
conexiones pueden provocar cuellos de botella en la red y bloqueos en algunos de los
recursos de la máquina.
Gestionar y optimizar el rendimiento de los procesos contra la base de datos. Esta será
una de las funciones más importantes del administrador, porque de nada sirve tener una
buena infraestructura montada si los colapsos son continuos y la lentitud en los accesos
es constante.
Planificación de los sistemas de backup y recuperación de los datos en caso de que sea
necesario.
Control del crecimiento de los archivos y procesos generados en el sistema por parte del
mismo SGBD.
ANALISIS INICIAL DE UN SGBD ORACLE:
Para establecer un entorno de trabajo en Oracle vamos a necesitar:
Software Oracle para servidor (Oracle Server Software): Obviamente, una versión
determinada específicamente diseñada para un sistema operativo concreto (UNIX,
Windows NT, etc.).
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES” MANUAL ORACLE 9i
Sistemas Autor: Diego Sánchez Página 6
Este software incluye los ejecutables para el funcionamiento del propio gestor de la base
de datos, un conjunto de herramientas para el tratamiento de la información y un
software específico (Net8) para que sean posibles las conexiones de los usuarios al
servidor en arquitecturas cliente/servidor.
Software Oracle para cliente (Oracle Cliente Software): Este software se ubicará en
los puestos de trabajo de los usuarios (también bajo un determinado sistema operativo-
Windows 95, NT, etc.), el cual estará formado por un conjunto de herramientas
específicas para cliente/servidor (Designar/2000, Developper/2000, etc.) y de su
correspondiente software (Net8) para el establecimiento de las conexiones al servidor.
Archivos de base de datos: La base de datos en sí, los cuales serán creados a través de
herramientas o comandos específicos de Oracle. La ubicación de la base de datos se
realizará sobre los discos del propio servidor donde se ha establecido el Oracle Server
Software.
Recursos suficientes en nuestro servidor: Previamente, habrá que realizar un estudio
de nuestro sistema de información para conocer el alcance del mismo. Posteriormente,
habrá que estimar la cantidad de memoria, discos y unidades centrales de proceso que
van a ser necesarias para un correcto funcionamiento.
TELEPROCESO
Las telecomunicaciones comenzaron en 1830 con la utilización del Telégrafo, que
permitió diversos tipos de comunicaciones digitales utilizando códigos como el Morse
inventado por Samuel F. B. Morse en 1820. Morse comenzó a estudiar las
comunicaciones en 1830 teniendo preparada una máquina en 1835 compuesta en el
emisor por un conjunto de piezas con dientes correspondientes a las letras y las cifras
que ensambladas para formar un mensaje y pasadas a través del correspondiente
dispositivo, provocaban las sucesivas aperturas y cierres de un interruptor que producía
la señal enviada por la línea. En el receptor, un electroimán recibía dicha señal y
producía el desplazamiento de un lápiz que escribía en el papel la forma de la señal con
la que se podía descifrar el mensaje recibido.
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES” MANUAL ORACLE 9i
Sistemas Autor: Diego Sánchez Página 7
Actualmente, en Telecomunicaciones se tiende al abaratamiento de la utilización de las
redes, así como a nuevas posibilidades de transmisión proporcionadas por las Redes
Digitales de Servicios Integrados de Banda Ancha que operan a gran velocidad.
Función de comunicaciones
Un sistema teleinformática básico consta de un Procesador Central (Host en la acepción
inglesa) auxiliado en las tareas de gestión de las comunicaciones por otro procesador de
menor capacidad denominado Unidad de Control de Comunicaciones o Procesador de
Comunicaciones (Front-en en la acepción inglesa). En el otro extremo se encuentra el
dispositivo que desea comunicar con el procesador central denominándose Terminal
Remoto y entre ambos se encuentra la Red de Telecomunicación en cuyo principio y fin
encontramos los convertidores-adaptadores para la comunicación denominados
Módems aunque pueden ser otro tipo de dispositivos según se transmita de una forma o
de otra.
Amplitud: La amplitud es la característica de las ondas sonoras que percibimos como
volumen. La amplitud es la máxima distancia que un punto del medio en que se propaga
la onda se desplaza de la posición de equilibrio; esta distancia corresponde al grado de
movimiento de las moléculas de aire en una onda sonora. Al aumentar su movimiento,
golpean el tímpano con una fuerza mayor, por lo que el oído percibe un sonido más
fuerte. Un tono con amplitudes baja, media y alta demuestra el cambio del sonido
resultante.
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES” MANUAL ORACLE 9i
Sistemas Autor: Diego Sánchez Página 8
Frecuencia: Sistema de transmisión de radio en el que la onda portadora se modula de
forma que su frecuencia varíe según la señal de audio transmitida. El primer sistema
operativo de comunicación radiofónica fue descrito por el inventor norteamericano
Edwin H. Armstrong en 1936.
Control de línea
Tipos de ruido: Considerando que el ruido puede provocar errores en la comunicación
de datos, se puede definir al ruido como "señales eléctricas indeseables que introducen
el equipo o las perturbaciones naturales y degradan el rendimiento de una línea de
comunicaciones".
Conceptos
Ancho de banda: en comunicaciones, la diferencia entre la frecuencia más alta y la más
baja de un canal de transmisión, por ejemplo un radiotransmisor, una antena parabólica
o el cableado que conecta las computadoras en una red local; se mide en ciclos por
segundo (hercios, Hz). También se denomina ancho de banda a la cantidad de datos que
se pueden transmitir en determinado periodo de tiempo por un canal de transmisión; así
considerado, el ancho de banda se expresa en bits por segundo (bps). Por ejemplo, un
módem de 56 Kbps es capaz, en teoría, de enviar alrededor de 56.000 bits de datos por
segundo, mientras que una conexión de red Ethernet con un ancho de banda de 100
Mbps (cien millones de bips por segundo), puede enviar casi 1.800 veces más datos en
el mismo periodo de tiempo.
Baudio: Velocidad de señalización de una línea. Es la velocidad de conmutación, o el
número de transiciones (cambios de voltaje o de frecuencia) que se realiza por segundo.
Sólo a velocidades bajas, los baudios son iguales a los bits por segundo; por ejemplo,
300 baudios equivalen a 300 bps. Sin embargo, puede hacerse que un baudio represente
más de un bit por segundo. Por ejemplo, el modem V.22bis genera 1,200 bps a 600
baudios.
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES” MANUAL ORACLE 9i
Sistemas Autor: Diego Sánchez Página 9
SERVIDOR DE ARCHIVOS
Un servidor en informática o computación es:
Una aplicación informática que realiza algunas tareas por parte de los usuarios. Esto se
divide normalmente en servicios de archivos, que permite a los usuarios almacenar y
acceder a los archivos de un ordenador común; y servicios de aplicaciones, en el que los
programas llevan a cabo instrucciones para realizar algunas tareas para los usuarios.
Este es el significado original del término.
El término se utiliza ahora para denominar al ordenador en el que se ejecutan los
programas. Al principio los programas del servidor se colocaban en un ordenador
central o miniordenador. Estos han sido remplazados por ordenadores construidos
utilizando una versión más robusta de la tecnología del microprocesador que la utilizada
en los ordenadores personales, y el término servidor fue adoptado para describir a los
ordenadores basados en esos microprocesadores.
Componentes del servidor
Un servidor comparte sus recursos (periféricos y almacenamiento de archivos) con los
ordenadores de los clientes en una red. Es posible que un ordenador sea cliente y
servidor simultáneamente, conectando a sí mismo otro ordenador por el mismo
procedimiento.
Muchos de los nuevos dispositivos vienen con funciones de servidor. El X-Internet,
Web Cervices y la iniciativa Microsoft NET pueden hacer que hasta el sistema más
pequeño funcione como servidor.
Muchas grandes empresas emplean numerosos servidores para cubrir sus necesidades.
Un conjunto de servidores en un sitio es conocido como torre de servidores.
Sistemas operativos de servidores
El aumento de los servidores basados en microprocesador fue facilitado por el
desarrollo de varias versiones de Unix para ser ejecutadas en la arquitectura del
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES” MANUAL ORACLE 9i
Sistemas Autor: Diego Sánchez Página 10
microprocesador Intel, como Solares, Linux y FreeBSD. Los sistemas operativos de la
familia Microsoft Windows incluyen versiones de servidores que soportan multitareas y
otras características necesarias para los servidores, comenzando por Windows NT.
Los ordenadores centrales y los miniordenadores se usaban en un principio a través de
falsos terminales que no podían realizan las tareas de procesamiento más importantes.
Esto tuvo como consecuencia el uso cada vez mayor de los ordenadores personales por
parte de los usuarios.
Que es un servidor de archivos
Tipo de servidor de red de ordenadores cuya función es permitir el acceso remoto a
archivos almacenados o directamente accesibles por este. En principio, cualquier
ordenador conectado a una red con un software apropiado, puede funcionar como
servidor de archivos. Desde el punto de vista del cliente de un servidor de archivos, la
localización de los archivos compartidos es transparente. O sea, normalmente no hay
diferencias perceptibles si un archivo esta almacenado en un servidor de archivos
remoto o en el disco de la propia máquina.
Algunos protocolos comúnmente utilizados en servidores de archivos:
SMB/CIFS (Windows, Samba en Unix) NFS (Unix)
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES” MANUAL ORACLE 9i
Sistemas Autor: Diego Sánchez Página 11
CLIENTE-SERVIDOR
QUE ES UN CLIENTE
Es el que inicia un requerimiento de servicio. El requerimiento inicial puede convertirse
en múltiples requerimientos de trabajo a través de redes LAN o WAN. La ubicación de
los datos o de las aplicaciones es totalmente transparente para el cliente.
QUE ES UN SERVIDOR
Es cualquier recurso de cómputo dedicado a responder a los requerimientos del cliente.
Los servidores pueden estar conectados a los clientes a través de redes LANs o WANs,
para proveer de múltiples servicios a los clientes y ciudadanos tales como impresión,
acceso a bases de datos, fax, procesamiento de imágenes, etc.
ELEMENTOS DE LA ARQUITECTURA CLIENTE/SERVIDOR
En esta aproximación, y con el objetivo de definir y delimitar el modelo de referencia de
una arquitectura Cliente/Servidor, debemos identificar los componentes que permitan
articular dicha arquitectura, considerando que toda aplicación de un sistema de
información está caracterizada por tres componentes básicos:
Presentación/Captación de Información
Procesos
Almacenamiento de la Información
Aplicaciones Cliente/Servidor
Y se integran en una arquitectura Cliente/Servidor en base a los elementos que
caracterizan dicha arquitectura, es decir:
Puestos de Trabajo
Comunicaciones
Servidores
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES” MANUAL ORACLE 9i
Sistemas Autor: Diego Sánchez Página 12
Arquitectura Cliente/Servidor
El Puesto de Trabajo o Cliente
Una Estación de trabajo o microcomputador (PC: Computador Personal) conectado a
una red, que le permite acceder y gestionar una serie de recursos» el cual se perfila
como un puesto de trabajo universal. Nos referimos a un microcomputador conectado al
sistema de información y en el que se realiza una parte mayoritaria de los procesos.
Se trata de un fenómeno en el sector informático. Aquellos responsables informáticos
que se oponen a la utilización de los terminales no programables, acaban siendo
marginados por la presión de los usuarios.
Debemos destacar que el puesto de trabajo basado en un microcomputador conectado a
una red, favorece la flexibilidad y el dinamismo en las organizaciones. Entre otras
razones, porque permite modificar la ubicación de los puestos de trabajo, dadas las
ventajas de la red.
Los Servidores o Back-end
Una máquina que suministra una serie de servicios como Bases de Datos, Archivos,
Comunicaciones,...).
Los Servidores, según la especialización y los requerimientos de los servicios que debe
suministrar pueden ser:
Mainframes
Miniordenadores
Especializados (Dispositivos de Red, Imagen, etc.)
Una característica a considerar es que los diferentes servicios, según el caso, pueden ser
suministrados por un único Servidor o por varios Servidores especializados.
Las Comunicaciones
En sus dos vertientes:
Infraestructura de redes
Infraestructura de comunicaciones
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES” MANUAL ORACLE 9i
Sistemas Autor: Diego Sánchez Página 13
Infraestructura de redes
Componentes Hardware y Software que garantizan la conexión física y la transferencia
de datos entre los distintos equipos de la red.
Infraestructura de comunicaciones
Componentes Hardware y Software que permiten la comunicación y su gestión, entre
los clientes y los servidores.
La arquitectura Cliente/Servidor es el resultado de la integración de dos culturas. Por un
lado, la del Mainframe que aporta capacidad de almacenamiento, integridad y acceso a
la información y, por el otro, la del computador que aporta facilidad de uso (cultura de
PC), bajo costo, presentación atractiva (aspecto lúdico) y una amplia oferta en productos
y aplicaciones.
CARACTERISTICAS DEL MODELO CLIENTE/SERVIDOR
En el modelo CLIENTE/SERVIDOR podemos encontrar las siguientes características:
1. El Cliente y el Servidor pueden actuar como una sola entidad y también pueden
actuar como entidades separadas, realizando actividades o tareas independientes.
2. Las funciones de Cliente y Servidor pueden estar en plataformas separadas, o en la
misma plataforma.
3. Un servidor da servicio a múltiples clientes en forma concurrente.
4. Cada plataforma puede ser escalable independientemente. Los cambios realizados en
las plataformas de los Clientes o de los Servidores, ya sean por actualización o por
reemplazo tecnológico, se realizan de una manera transparente para el usuario final.
5. La interrelación entre el hardware y el software están basados en una infraestructura
poderosa, de tal forma que el acceso a los recursos de la red no muestra la complejidad
de los diferentes tipos de formatos de datos y de los protocolos.
6. Un sistema de servidores realiza múltiples funciones al mismo tiempo que presenta
una imagen de un solo sistema a las estaciones Clientes. Esto se logra combinando los
recursos de cómputo que se encuentran físicamente separados en un solo sistema lógico,
proporcionando de esta manera el servicio más efectivo para el usuario final.
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES” MANUAL ORACLE 9i
Sistemas Autor: Diego Sánchez Página 14
También es importante hacer notar que las funciones Cliente/Servidor pueden ser
dinámicas. Ejemplo, un servidor puede convertirse en cliente cuando realiza la solicitud
de servicios a otras plataformas dentro de la red.
Su capacidad para permitir integrar los equipos ya existentes en una organización,
dentro de una arquitectura informática descentralizada y heterogénea.
7. Además se constituye como el nexo de unión mas adecuado para reconciliar los
sistemas de información basados en mainframes o minicomputadores, con aquellos
otros sustentados en entornos informáticos pequeños y estaciones de trabajo.
8. Designa un modelo de construcción de sistemas informáticos de carácter distribuido.
Su representación típica es un centro de trabajo (PC), en donde el usuario dispone de
sus propias aplicaciones de oficina y sus propias bases de datos, sin dependencia directa
del sistema central de información de la organización, al tiempo que puede acceder a los
Recursos de este host central y otros sistemas de la organización ponen a su servicio.
En conclusión, Cliente/Servidor puede incluir múltiples plataformas, bases de datos,
redes y sistemas operativos. Estos pueden ser de distintos proveedores, en arquitecturas
propietarias y no propietarias y funcionando todos al mismo tiempo. Por lo tanto, su
implantación involucra diferentes tipos de estándares: APPC, TCP/IP, OSI, NFS,
DRDA corriendo sobre DOS, OS/2, Windows o PC UNIX, en TokenRing, Ethernet,
FDDI o medio coaxial, sólo por mencionar algunas de las posibilidades.
TIPOS DE CLIENTES
"cliente flaco":
Servidor rápidamente saturado.
Gran circulación de datos de interface en la red.
"cliente gordo":
Casi todo el trabajo en el cliente.
No hay centralización de la gestión de la BD.
Gran circulación de datos inútiles en la red.
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES” MANUAL ORACLE 9i
Sistemas Autor: Diego Sánchez Página 15
TIPOS DE SERVIDOR
Servidores de archivos
Servidor donde se almacena archivos y aplicaciones de productividad como por ejemplo
procesadores de texto, hojas de cálculo, etc.
Servidores de bases de datos
Servidor donde se almacenan las bases de datos, tablas, índices. Es uno de los
servidores que más carga tiene.
Servidores de transacciones
Servidor que cumple o procesa todas las transacciones. Valida primero y recién genera
un pedido al servidor de bases de datos.
Servidores de Groupware
Servidor utilizado para el seguimiento de operaciones dentro de la red.
Servidores de objetos
Contienen objetos que deben estar fuera del servidor de base de datos. Estos objetos
pueden ser videos, imágenes, objetos multimedia en general.
Servidores Web
Se usan como una forma inteligente para comunicación entre empresas a través de
Internet.
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES” MANUAL ORACLE 9i
Sistemas Autor: Diego Sánchez Página 16
Este servidor permite transacciones con el acondicionamiento de un browser específico.
Estilos del modelo cliente servidor
Funciones de un programa servidor
Espera las solicitudes de los clientes.
Ejecuta muchas solicitudes al mismo tiempo.
Atiende primero a los clientes VIP.
Emprende y opera actividades de tareas en segundo plano.
Se mantiene activa en forma permanente.
INSTALACIÓN DE ORACLE 9I
CÓMO INSTALAR ORACLE CLIENT EN WINDOWS
(CLIENTE DE ORACLE)
Este artículo muestra paso a paso cómo instalar Oracle Cliente (utilidad de Oracle que
se ha de instalar en los PCs que queramos que tengan acceso al Servidor de Oracle):
En primer lugar necesitaremos disponer de los CDs de instalación que están disponibles
gratuitamente en la web: Oracle.
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES” MANUAL ORACLE 9i
Sistemas Autor: Diego Sánchez Página 17
Pulsaremos en "Siguiente" y seleccionamos el destino (carpeta) de instalación:
Seleccionaremos "Oracle9i Cliente”:
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES” MANUAL ORACLE 9i
Sistemas Autor: Diego Sánchez Página 18
Dependiendo de las utilidades que queramos instalar seleccionaremos "Administrador"
(instala todas las herramientas para administrar Oracle desde un PC Cliente), "Runtime"
(instala las herramientas básicas para acceso a Oracle, es la recomendada) ó
"Personalizada" (permite seleccionar las herramientas a instalar):
Dejaremos el puerto por defecto 2030 para "Oracle Services para Microsoft Transaction
Server". Este puerto no es relevante si no tenemos un Cluster de servidores:
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES” MANUAL ORACLE 9i
Sistemas Autor: Diego Sánchez Página 19
Una vez comprobadas las herramientas que se van a instalar pulsaremos en "Instalar":
Tras la instalación realizaremos la configuración de red de Oracle:
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES” MANUAL ORACLE 9i
Sistemas Autor: Diego Sánchez Página 20
Desmarcaremos la opción "Realizar una configuración típica" y pulsaremos en
"Siguiente".
Marcamos "No, deseo diferir la configuración" y pulsamos en "Siguiente".
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES” MANUAL ORACLE 9i
Sistemas Autor: Diego Sánchez Página 21
Pulsamos en "Siguiente".
Marcamos "Base de datos o servicio Oracle8i o posterior" y pulsamos en "Siguiente".
Introducimos el nombre del servicio que, normalmente, coincidirá con el nombre de la
base de datos a la que nos conectaremos:
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES” MANUAL ORACLE 9i
Sistemas Autor: Diego Sánchez Página 22
Seleccionamos el protocolo TCP y pulsamos en "Siguiente".
Introducimos el nombre o IP del PC que tiene la base de datos de Oracle (servidor de
Oracle) y pulsamos en "Siguiente".
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES” MANUAL ORACLE 9i
Sistemas Autor: Diego Sánchez Página 23
Si aparece algún error en la primera prueba de conexión es habitual pues utiliza el
usuario y contraseña que Oracle configura por defecto. Para probar la conexión
correctamente pulsaremos en "Cambiar Conexión" e introduciremos un usuario y
contraseña existentes en la Base de Datos. Si no hay problemas mostrará "Conectado...
Prueba realizada correctamente".
Introduciremos el nombre de red, que por defecto será el mismo que el nombre de la
base de datos y pulsamos en "Siguiente".
Pulsamos en "Siguiente".
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES” MANUAL ORACLE 9i
Sistemas Autor: Diego Sánchez Página 24
Pulsamos en "Siguiente".
Pulsamos en "Terminar".
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES” MANUAL ORACLE 9i
Sistemas Autor: Diego Sánchez Página 25
Pulsamos en "Salir".
Con esto habremos concluido la instalación de Oracle Cliente, ahora nos aparecerá un
nuevo Driver ODBC:
CONEXIÓN NATIVE- CONEXIÓN OBDC
TNSNAMES.ORA Network Configuration File:
E:\oracle\ora81\network\admin\tnsnames.ora
# Generated by Oracle configuration tools.
INST1_HTTP =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = colossus)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = SHARED)
(SERVICE_NAME = harolpiz)
(PRESENTATION = http://admin)
)
)
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES” MANUAL ORACLE 9i
Sistemas Autor: Diego Sánchez Página 26
EXTPROC_CONNECTION_DATA =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))
)
(CONNECT_DATA =
(SID = PLSExtProc)
(PRESENTATION = RO)
)
)
HAROLPIZ =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = colossus)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = harolpiz)
)
)
seta as la clase que tengo para la conexion:
import java.sql.*;
import java.sql.Connection;
public class OracleConecta {
public static void main(String args[]) {
String usuario = "system";
String password = "harolpiz";
String host = "localhost";
String puerto = "1521";
String sid = "XE";
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES” MANUAL ORACLE 9i
Sistemas Autor: Diego Sánchez Página 27
String driver = "oracle.jdbc.driver.OracleDriver";
String ulrjdbc = "jdbc:oracle:thin:@" + host + ":"+ puerto + ":" + sid +","+usuario + ","
+ password ;
Connection connection = null;
try {
Class.forName(driver).newInstance();
connection = DriverManager.getConnection(ulrjdbc);
// objeto connection creado
ResultSet result = connection.createStatement().executeQuery("SELECT 'carlos' FROM
USUARIOS");
result.next();
System.out.println(result.getString(1));
} catch (Exception e) {
e.printStackTrace();
} finally {
if (connection != null) {
try {
connection.close();
} catch (SQLException e) {
1.- Damos click en Inicio>Panel de Control >Herramientas administrativas
(Administrative Tools)> Data Sources (ODBC).
UN
Sistem
2.- N
dond
(Si p
acces
3
NIVERSIDA
mas
Nos vamos
de se proces
por ejemplo
so al ODBC
.- Buscamo
AD REGION
a la pestañ
sa la aplicac
o solo quer
C es en la pe
os el cliente
NAL AUTÓ
Autor
ña System D
ción puedan
remos que
estaña User
de Oracle q
NOMA DE
r: Diego Sán
DSN, para
n ocupar el O
el usuario
r DSN).
que se tiene
Finish.
LOS ANDE
nchez
que todos
ODBC, y da
que se log
instalado y
ES “UNIAND
los usuario
amos click
ggea en esa
y damos clic
DES” MANORAC
Págin
s de la ma
en el botón
a máquina
ck en el botó
UAL CLE 9i
na 28
quina
Add.
tenga
ón
UN
Sistem
4.- P
TNS
5.- P
TNS
cone
NIVERSIDA
mas
Posteriorme
NAME.ora
Ponemos lo
NAME, y
ctar. Damo
AD REGION
ente, debem
a que se encu
os datos de
elegimos e
s click en T
NAL AUTÓ
Autor
mos tener
uentra en la
el Data So
l TNS Serv
Test Connec
NOMA DE
r: Diego Sán
configurado
a carpeta de
ource Name
vice Name
ction.
LOS ANDE
nchez
o el usuari
instalación
e que es e
y el usuari
ES “UNIAND
io de la a
n de Oracle.
el SID de
io con el cu
DES” MANORAC
Págin
aplicación e
conexion
ual nos vam
UAL CLE 9i
na 29
en el
en el
mos a
UN
Sistem
6.- E
NIVERSIDA
mas
Especificamo
AD REGION
os el Passw
NAL AUTÓ
Autor
word y damo
NOMA DE
r: Diego Sán
os click en O
LOS ANDE
nchez
Ok
ES “UNIAND
DES” MANORAC
Págin
UAL CLE 9i
na 30
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES” MANUAL ORACLE 9i
Sistemas Autor: Diego Sánchez Página 31
HERRAMIENTA SQL PLUS
Historia del lenguaje SQL
El nacimiento del lenguaje SQL data de 1970 cuando E. F. Codd publica su libro: "Un
modelo de datos relacional para grandes bancos de datos compartidos". Ese libro
dictaría las direcrices de las bases de datos relacionales. Apenas dos años después IBM
(para quien trabajaba Codd) utiliza las directrices de Codd para crear el Standard
English Query Language (Lenguaje Estándar Inglés para Consultas) al que se
llamó SEQUEL. Más adelante se le asignaron las siglas SQL (aunque en inglés se
siguen pronunciando SEQUEL, en español se le llama esecuele).
Poco después se convertía en un estándar en el mundo de las bases de datos avalando
por los organismos ISO y ANSI. Aún hoy sigue siendo uno de los estándares más
importantes de la industria informática.
Actualmente el último estándar es el SQL del año 1999 que amplió el anterior estándar
conocido como SQL 92. El SQL de Oracle es compatible con el SQL del año 1999 e
incluye casi todo lo dictado por dicho estándar.
SQL*Plus
Para poder escribir sentencias SQL al servidor Oracle, éste incorpora la herramienta
SQL*Plus. Toda instrucción SQL que el usuario escribe, es verificada por este
programa. Si la instrucción es válida es enviada a Oracle, el cual enviará de regreso la
respuesta a la instrucción; respuesta que puede ser transformada por el programa
SQL*Plus para modificar su salida.
Para que el programa SQL*Plus funcione en el cliente, el ordenador cliente debe haber
sido configurado para poder acceder al servidor Oracle. En cualquier caso al acceder a
Oracle con este programa siempre preguntará por el nombre de usuario y contraseña.
Estos son datos que tienen que nos tiene que proporcionar el administrador (DBA) de la
base de datos Oracle.
Para conectar mediante SQL*Plus podemos ir a la línea de comandos y escribir el texto
sqlplus. A continuación aparecerá la pantalla:
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES” MANUAL ORACLE 9i
Sistemas Autor: Diego Sánchez Página 32
En esa pantalla se nos pregunta el nombre de usuario y contraseña para acceder a la base
de datos (información que deberá indicarnos el administrador o DBA). Tras indicar esa
información conectaremos con Oracle mediante SQL*Plus, y veremos aparecer el
símbolo:
SQL>
Tras el cual podremos comenzar a escribir nuestros comandos SQL. Ese símbolo puede
cambiar por un símbolo con números 1, 2, 3, etc.; en ese caso se nos indica que la
instrucción no ha terminado y la línea en la que estamos.
Otra posibilidad de conexión consiste en llamar al programa SQL*Plus indicando
contraseña y base de datos a conectar. El formato es:
slplus usuario/contraseña@nombreServicioBaseDeDatos
Ejemplo:
slplus usr1/[email protected]
En este caso conectamos con SQL*Plus indicando que somos el usuario usr1 con
contraseña miContra y que conectamos a la base de datos inicial de la red forempa.net.
El nombre de la base de datos no tiene porque tener ese formato, habrá que conocer
como es el nombre que representa a la base de datos como servicio de red en la red en la
que estamos.
Versión gráfica de SQL*Plus
Oracle incorpora un programa gráfico para Windows para utilizar SQL*Plus. Se puede
llamar a dicho programa desde las herramientas instaladas en el menú de programas de
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES” MANUAL ORACLE 9i
Sistemas Autor: Diego Sánchez Página 33
Windows, o desde la línea de programas escribiendo sqlplusw. Al llamarle aparece esta
pantalla:
.
Como en el caso anterior, se nos solicita el nombre de usuario y contraseña. La cadena
de Host es el nombre completo de red que recibe la instancia de la base de datos a la que
queremos acceder en la red en la que nos encontramos.
También podremos llamar a este entorno desde la línea de comandos utilizando la
sintaxis comentada anteriormente. En este caso:
slplusw usuario/contraseña@nombreServicioBaseDeDatos
Esta forma de llamar al programa permite entrar directamente sin que se nos pregunte
por el nombre de usuario y contraseña.
iSQL*Plus
Es un producto ideado desde la versión 9i de Oracle. Permite acceder a las bases de
datos Oracle desde un navegador. Para ello necesitamos tener configurado un servidor
web.
Oracle que permita la conexión con la base de datos. Utilizar iSQL*Plus es indicar una
dirección web en un navegador, esa dirección es la de la página iSQL*Plus de acceso a
la base de datos.
Desde la página de acceso se nos pedirá nombre de usuario, contraseña y nombre de la
base de datos con la que conectamos (el nombre de la base de datos es el nombre con el
que se la conoce en la red). Si la conexión es válida aparece esta pantalla:
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES” MANUAL ORACLE 9i
Sistemas Autor: Diego Sánchez Página 34
En esa pantalla en el apartado Introducir Sentencias, se escribe la sentencia que
deseamos enviar. El botón Ejecutar hace que se valide y se envíe a Oracle.
Se pueden almacenar sentencias SQL usando el botón Examinar y cargar sentencias
previamente guardadas mediante Cargar archivos de comandos.
ESTRUCTURA DEL LENGUAJE SQL
SELECT. Se trata del comando que permite realizar consultas sobre los datos de la
base de datos. Obtiene datos de la base de datos.
DML, Data Manipulation Language (Lenguaje de manipulación de datos). Modifica
filas (registros) de la base de datos. Lo forman las instrucciones
INSERT, UPDATE, MERGE y DELETE.
DDL, Data Definition Language (Lenguaje de definición de datos).
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES” MANUAL ORACLE 9i
Sistemas Autor: Diego Sánchez Página 35
Permiten modificar la estructura de las tablas de la base de datos. Lo forman las
instrucciones CREATE, ALTER, DROP, RENAME y TRUNCATE.
Instrucciones de transferencia. Administran las modificaciones creadas por las
instrucciones DML. Lo forman las instrucciones ROLLBACK, COMMIT y
SAVEPOINT
DCL, Data Control Language (Lenguaje de control de datos). Administran los
derechos y restricciones de los usuarios. Lo forman las instrucciones GRANT y
REVOKE.
Normas de escritura
En SQL no se distingue entre mayúsculas y minúsculas. Da lo mismo como se escriba.
El final de una instrucción lo calibra el signo del punto y coma
Los comandos SQL (SELECT, INSERT,...) no pueden ser partidos por espacios o saltos
de línea antes de finalizar la instrucción. El intérprete SQL plus indicas
Se pueden tabular líneas para facilitar la lectura si fuera necesario
Los comentarios en el código SQL comienzan por /* y terminan por */
Terminología
SQL
Structured Query Language o Lenguaje de Consultas Estructurado. Es el lenguaje que
permite la comunicación con el Sistema Gestor de Bases de Datos (Oracle en nuestro
caso).
El SQL es un lenguaje unificado
Lo utilizan todo tipo de usuarios, desde el administrador de la base de datos, DBA,
hasta el usuario final.
El SQL es un lenguaje no procedimental.
El usuario especifica Qué quiere, no Cómo ni Dónde conseguirlo.
El SQL es relacionalmente completo.
Permite la realización de cualquier consulta de datos.
SQL= DDL + DML
Las sentencias del SQL se clasifican como parte del DDL o del DML.
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES” MANUAL ORACLE 9i
Sistemas Autor: Diego Sánchez Página 36
Lenguaje de Definición de Datos, DDL sentencias del SQL que permiten definir los
objetos de la Base de Datos (create, revoke, grant, alter, etc.). Cuando se definen dichos
objetos se almacenan en el diccionario de datos.
Lenguaje de Manipulación de Datos, DML sentencias del SQL que se utilizan para
manejar los datos de la base de datos (select, insert, update, delete, etc).
commit/rollback cada vez que se realiza alguna operación en la base de datos se realiza
no sobre la tabla en sí, sino sobre una copia local de la misma. Así, si queremos que los
resultados de la modificación se trasladen a la base de datos y perduren en el tiempo hay
que confirmar dicha operación con el comando commit. También se puede impedir que
los últimos cambios lleguen a efectuarse con rollback, aunque existen algunas
sentencias SQL que se 'autoconfirman' y no se pueden volver atrás.
Diccionario de la Base de Datos
Guarda la definición de todos los objetos almacenados en la base de datos; sus
características, restricciones, privilegios, relaciones entre ellos, etc.
ARQUITECTURA ORACLE
Todo el mundo puede conducir un automóvil sin necesidad de conocer cómo funciona
un motor de combustión interna y todos los subsistemas asociados a él. Pero entonces
ciertos conceptos como aprovechamiento de la potencia, compresión, endurecimiento de
la suspensión, motricidad, etc., le serán ajenos y nunca podrá sacar lo mejor del
automóvil. Y si tiene algún problema se quedará tirado en la carretera.
De la misma manera, no podremos aspirar a que nuestras aplicaciones de BD funcionen
bien si no conocemos la arquitectura del motor de la BD, el servidor. Es indispensable
conocer los factores y parámetros que influyen en el funcionamiento de nuestro SGBD
para poder solucionar los problemas que se pueden plantear en cuanto nos salgamos de
las aplicaciones estándares y básicas de BD, o en cuanto tengamos algún problema.
El siguiente curso aborda la arquitectura del SGBD Oracle y da una visión lo
suficientemente profunda del mismo como para que podamos entender cómo funciona.
Si tienes cualquier sugerencia o encuentras una errata escondida dímelo.
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES” MANUAL ORACLE 9i
Sistemas Autor: Diego Sánchez Página 37
Bases de Datos e Instancias
Estos son dos conceptos fundamentales para entender la arquitectura de Oracle.
En términos sencillos, una instancia de BD es un conjunto de procesos del servidor
Oracle que tiene su propia área global de memoria y una base de datos asociada a ellos.
Base de Datos
Una Base de Datos Oracle es un conjunto de datos almacenado y accesible según el
formato de tablas relacionales. Una tabla relacional tiene un nombre y unas columnas,
su definición. Los datos están almacenados en las filas. Las tablas pueden estar
relacionadas con otras.
Una Base de Datos Oracle está almacenada físicamente en ficheros, y la
correspondencia entre los ficheros y las tablas es posible gracias a las estructuras
internas de la BD, que permiten que diferentes tipos de datos estén almacenados
físicamente separados. Está división lógica se hace gracias a los espacios de tablas,
tablespaces.
CREAR UN TABLESPACE
Un tablespace es el archivo donde se almacenarán las tablas y datos de usuario. No es
más que un archivo físico donde oracle almacenará esos datos
Ejemplo
CREATE TABLESPACE MD_DATA
DATAFILE
'mddata01.dbf' SIZE 1000M,
'mddata02.dbf' SIZE 1000M
AUTOEXTEND ON NEXT 5M MAXSIZE 200000M;
Sintaxis
CREATE TABLESPACE [DATAFILE clause] [MINIMUM EXTENT integer[K|M]]
[BLOCKSIZE integer [K]] [LOGGING|NOLOGGING] [DEFAULT storage_clause ]
[ONLINE|OFFLINE] [PERMANENT|TEMPORARY] where:tablespace is the name of
the tablespace to be created
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES” MANUAL ORACLE 9i
Sistemas Autor: Diego Sánchez Página 38
DATAFILE specifies the data file or data files that make up the tablespace
MINIMUM EXTENT
ensures that every used extent size in the tablespace is
a multiple of the integer. Use Kor M to specify this
size in kilobytes or megabytes.
specifies that, by default, all tables, indexes, and partitions
LOGGING
within the tablespace have all changes written to redo.
LOGGING is the default.
specifies that, by default, all tables, indexes, and partitions
NOLOGGING
within the tablespace do not have all changes written to redo.
NOLOGGING affects only some DML and DDL commands,
for example, direct loads.
specifies the default storage parameters for all objects created
DEFAULT
in the tablespace creation
makes the tablespace unavailable immediately after creation
OFFLINE
specifies that the tablespace can be used to hold permanent
PERMANENT
objects
specifies that the tablespace be used only to hold temporary
TEMPORARY
objects; for example, segments used by implicit sorts caused
by an ORDER BY clause extent_management_clause
specifies how the extents of the tablespace are managed. This
clause is discussed in a subsequent section of this lesson.
datafile_clause :== filename
[SIZE integer[K|M] [REUSE] | REUSE ] [ autoextend_clause ]
where: is the name of a data file in the tablespace
filename
specifies the size of the file. Use K or M to
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES” MANUAL ORACLE 9i
Sistemas Autor: Diego Sánchez Página 39
SIZE
specify the size in kilobytes or megabytes.
allows the Oracle server to reuse an existing file
REUSE
enables or disables the automatic extension of
autoextend_clause
the data file. This clause is discussed in a
subsequent section of this lesson.
ALTERAR UN TABLESPACE
Alterar el tamaño de un tablespace
ALTER DATABASE DATAFILE '/mi/tablespace/datafile.dbf' RESIZE 300M;
Alterar el tamaño máximo
alter database datafile 'mi/tablespace.dbf' autoextend on maxsize 1000M
Añadir un datafile a un tablespace
alter tablespace MI_TABLESPACE add datafile '/path/del/datafile.dbf' size 2048M
AUTOEXTEND ON NEXT 50M MAXSIZE 4096M;
BORRAR UN TABLESPACE
DROP TABLESPACE tablespace_name [INCLUDING CONTENTS [AND
DATAFILES]
[CASCADE CONSTRAINTS]];
Los Espacios de Tablas, Tablespaces
Un espacio de tablas es una división lógica de la BD. Cada BD tiene al menos uno
(SYSTEM). Un espacio de tablas puede pertenecer sólo a una BD. Los espacios de
tablas se utilizan para mantener juntos los datos de usuarios o de aplicaciones para
facilitar su mantenimiento o mejorar las prestaciones del sistema.
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES” MANUAL ORACLE 9i
Sistemas Autor: Diego Sánchez Página 40
De esta manera, cuando se crea una tabla se debe indicar el espacio de tablas al que se
destina. Por defecto se depositan en el espacio de tablas SYSTEM, que se crea por
defecto. Este espacio de tablas es el que contiene el diccionario de datos, por lo que
conviene reservarlo para el uso del servidor, y asignar las tablas de usuario a otro.
Lo razonable y aconsejable es que cada aplicación tenga su propio espacio de tablas.
Hay varias razones que justifican este modo de organización de las tablas en espacios de
tablas:
Un espacio de tablas puede quedarse offline debido a un fallo de disco,
permitiendo que el SGBD continúe funcionando con el resto.
Los espacios de tablas pueden estar montados sobre dispositivos ópticos si son
de sólo lectura.
Permiten distribuir a nivel lógico/físico los distintos objetos de las aplicaciones.
Son una unidad lógica de almacenamiento, pueden usarse para aislar
completamente los datos de diferentes aplicaciones.
Oracle permite realizar operaciones de backup/recovery a nivel de espacio de
tabla mientras la BD sigue funcionando.
Cuando se crean se les asigna un espacio en disco que Oracle reserva inmediatamente, e
utilice o no. Si este espación inicial se ha quedado pequeño Oracle puede gestionar el
crecimiento dinámico de los ficheros sobre los que se asientan los espacios de tablas.
Esto elimina la posibilidad de error en las aplicaciones por fallos de dimensionamiento
inicial. Los parámetros de crecimiento del tamaño de los espacios de tablas se
especifican en la creación de los mismos.
Se pueden ver los espacios de tablas definidos en nuestra BD con el comando SQL
siguiente:
SQL> select * from user_tablespaces;
Dentro de cada espacio de tabla se pueden almacenar objetos de distinta naturaleza:
tablas, índices, etc. Pero no se pueden mezclar si más. Necesitamos una manera de
separarlos, y eso son los segmentos.
Se pueden almacenar más de un segmento por espacio de tabla. Un segmento está
contenido en su totalidad en un espacio de tabla. Un segmento está constituido por un
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES” MANUAL ORACLE 9i
Sistemas Autor: Diego Sánchez Página 41
conjunto de extensiones, que no son más que grupos de bloques de disco ORACLE
contiguos. Cuando se borra un segmento, el espacio es devuelto al espacio de tabla.
Todos los datos de la BD están almacenados en segmentos. Y existen 5 tipos de
segmentos:
De datos: almacenan las tablas.
De índices: permiten un 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. Establecen un control de unicidad (los índices son automáticos
cuando se definen claves primarias). Cada índice ocupa un segmento independiente del
segmento de datos y deberían estar en un espacio de tablas distinto al de los datos, para
mejorar el rendimiento.
De rollback: son objetos internos de la BD que permiten efectuar la restauración de las
transacciones no validadas asegurando la consistencia en lectura. La estructura de los
registros de rollback es :
Identificador de la transacción.
Dirección del bloque donde está la tabla.
Número de fila.
Número de columna.
Valor del dato antiguo (antes de ser modificado).
Son tan importantes que una BD no puede arrancar si no puede acceder al menos a un
segmento de rollback. Si la BD tiene múltiples espacios de tablas, deben existir al
menos dos segmentos de rollback y cada segmento de rollback debe tener al menos dos
extensiones, reutilizables de manera cíclica. Esto segmentos son un objeto compartido
de la BD, aunque se puede asinar un segmento de rollback particular a una transacción
dada.
Temporales: son creados por Oracle para un uso temporal cuando debe realizar una
ordenación que no le cabe en memoria, y en las operaciones: create index, order by,
group by, distinct, union, intersect, minus. Son eliminados cuando la sentencia finaliza.
De bootstrap: Se crea en SYSTEM y 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.
La tabla que guarda la información de los segmentos de usuario es user_segments, y se
puede visualizar la información sobre los segmentos con la sentencia SQL siguiente:
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES” MANUAL ORACLE 9i
Sistemas Autor: Diego Sánchez Página 42
SQL> select * from user_segments;
FICHEROS
Cada espacio de tablas se compone de uno o más ficheros en disco. Un fichero puede
pertenecer sólo a un espacio de tablas. Los ficheros reciben un tamaño fijo en el
momento de su creación, y cuando se necesita más espacio se deben añadir más ficheros
a espacio de tablas.
Dividir los objetos de la BD entre múltiples espacios de tablas permiten que los objetos
sean almacenados físicamente en discos separados, dependiendo de donde estén los
ficheros sobre los que se asientan.
INSTANCIAS
Para permitir el acceso a los datos, Oracle utiliza un conjunto de procesos que son
compartidos por todos los usuarios. Además, existen estructuras de memoria que son
utilizadas para almacenar los datos más recientemente solicitados a la BD.
Una instancia de BD es el conjunto de estructuras de memoria y de procesos que
acceden a los ficheros de datos.
Los parámetros que determinan el tamaño y composición de una instancia están
almacenados en un fichero llamado init.ora. Este fichero es leido durante el arranque de
la BD y puede ser modificado por el DBA. Cualquier modificación de este fichero no
tiene efecto hasta la siguiente vez que se arranque la BD.
Las estructuras de la BD Oracle pueden ser divididas en tres clases:
Aquellas que son internas a la BD,
Aquellas que son internas a las áreas de memoria (incluidas la memoria compartida y
procesos),
Aquellas que son externas a la BD.
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES” MANUAL ORACLE 9i
Sistemas Autor: Diego Sánchez Página 43
ESTRUCTURAS INTERNAS DE LA BD
TABLAS Y COLUMNAS
Los datos son almacenados en la BD utilizando tablas. Cada tabla está compuesta por
un número determinado de columnas.
Las tablas propiedad del usuario SYS son llamadas tablas del diccionario de datos.
Proveen el catálogo del sistema que permite que la BD se gestione a sí misma.
Las tablas se pueden relacionar entre ellas a través de las columnas que las componen.
La BD se puede utilizar para asegurar el cumplimiento de esas relaciones a través de la
integridad referencial, que se concreta en las restricciones de tablas.
RESTRICCIONES DE TABLAS
Una tabla puede tener asociadas restricciones que deben cumplir todas las filas. Entre
las restricciones que se pueden fijar algunas reciben nombres especiales.: clave
primaria, clave ajena.
La clave primaria de una tabla está compuesta por las columnas que hacen a cada fila de
la tabla una fila distinta.
La clave ajena se utiliza para especificar las relaciones entre tablas. De modo que un
conjunto de columnas declaradas como clave ajena de una tabla deben tener valores
tomados de la clave primaria de otra tabla.
USUARIOS
Una cuenta de usuario no es una estructura física de la BD, pero está relacionada con los
objetos de la BD: los usuarios poseen los objetos de la BD. Existen dos usuarios
especiales: SYS y SYSTEM. El usuarios SYS posee las tablas del diccionario de datos;
que almacenan información sobre el resto de las estructuras de la BD. El usuario
SYSTEM posee las vistas que permiten acceder a las tablas del diccionario, para el uso
del resto de los usuarios de la BD.
Todo objeto creado en la BD se crea por un usuario, en un espacio de tablas y en un
fichero de datos determinado. Toda cuenta de la BD puede estár unida a una cuenta del
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES” MANUAL ORACLE 9i
Sistemas Autor: Diego Sánchez Página 44
S.O., lo que permite a los usuarios acceder a la cuenta de la BD sin dar la clave de
acceso.
Cada usuario puede acceder a los objetos que posea o a aquellos sobre los que tenga
derecho de acceso.
ESQUEMAS
El conjunto de objetos de un usuario es conocido como esquema.
ÍNDICES
Un índice es una estructura de la BD utilizada para agilizar el acceso a una fila de una
tabla. Cada fila tiene un identificador de fila, ROWID, que determina el fichero, bloque
y fila dentro del bloque donde está almacenada la fila.
Cada entrada del índice consite en un valor clave y una ROWID. Cada una de estas
entradas se almacena en un árbol B+.
Los índices se crean automáticamente cuando se define una restricción UNIQUE o
PRIMARY KEY.
Clusters
Las tablas que son accedidas juntas frecuentemente pueden ser almacenadas juntas. Para
ello se crea un cluster. De este modo se minimiza el número de E/S.
Las columnas que relacionan las tablas de un cluster se llaman clave del cluster.
Vistas
Conceptualmente, una vista puede considerarse como una máscara que se extiende
sobre una o más tablas, de modo que cada columna de la vista se corresponde con una o
más columnas de las tablas subyacentes. Cuando se consulta una vista, esta traspasa la
consulta a las tablas sobre las que se asienta. Las vistas no se pueden indexar.
Las vistas no generan almacenamiento de datos, y sus definiciones se almacenan en el
diccionario de datos.
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES” MANUAL ORACLE 9i
Sistemas Autor: Diego Sánchez Página 45
Secuencias
Las definiciones de secuencias se almacenan en el diccionario de datos. Son
mecanismos para obtener listas de números secuenciales.
PROCEDIMIENTOS Y FUNCIONES
Un procedimiento es un bloque de código PL/SQL, que se almacena en el diccionario
de datos y que es llamado por las aplicaciones. Se pueden utilizar para implementar
seguridad, no dando acceso directamente a determinadas tablas sino es a través de
procedimientos que acceden a esas tablas. Cuando se ejecuta un procedimiento se
ejecuta con los privilegios del propietario del procedimiento. La diferencia entre un
procedimiento y una función es que ésta última puede devolver valores.
Paquetes, Packages
Se utilizan para agrupar procedimientos y funciones. Los elementos dentro de los
paquetes pueden ser públicos o privados. Los públicos pueden ser llamados por los
usuarios, los privados están ocultos a los usuarios y son llamados por otros
procedimientos.
DISPARADORES, TRIGGERS
Son procedimientos que son ejecutados cuando se procude un determinado evento en la
BD. Se pueden utilizar para mejorar y reforzar la integridad y la seguridad de la BD.
Sinónimos
Para identificar completamente un objeto dentro de una BD se necesita especificar el
nombre de la máquina, el nombre del servidor, el nombre del propietario y el nombre
del objeto. Para hacer transparente todo esto al usuario se pueden utilizar los sinónimos.
Éstos apuntarán a los objetos y si el objeto cambia de lugar o propietario, sólo habrá que
modificar el sinónimo.
Existen sinónimos públicos y privados. Los públicos son conocidos por todos los
usuarios de una BD. Los privados son locales a un usuario.
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES” MANUAL ORACLE 9i
Sistemas Autor: Diego Sánchez Página 46
PRIVILEGIOS Y ROLES
Para que un objeto pueda ser accedido por un usuario debe de tener otorgado ese
privilegio. Ejemplos de privilegios son INSERT, SELECT, UPDATE, EXECUTE, etc.
Los roles son grupos de privilegios que pueden ser utilizados para facilitar la gestión de
los privilegios. Los privilegios se pueden otorgar a un rol, y los roles pueden ser
otorgados a múltiples usuarios.
SEGMENTOS, EXTENSIONES Y BLOQUES
Los segmentos son los equivalentes físicos de los objetos que almacenan datos. El uso
efectivo de los segmentos requiere que el DBA conozca los objetos que utiliza una
aplicación, cómo los datos son introducidos en esos objetos y el modo en que serán
recuperados.
Como los segmentos son entidades físicas, deben estar asignados a espacios de tablas en
la BD y estarán localizados en uno de los ficheros de datos del espacio de tablas. Un
segmento está constituido por secciones llamadas extensiones, que son conjuntos
contiguos de bloques Oracle. Una vez que una extensión existente en un segmento no
puede almacenar más datos, el segmento obtendrá del espacio de tabla otra extensión.
Este proceso de extensión continuará hasta que no quede más espacio disponible en los
ficheros del espacio de tablas, o hasta que se alcance un número máximo de extensiónes
por segmento.
Segmento de Rollback
Para mantener la consistencia en lectura y permitir deshacer las transacciones, Oracle
debe tener un mecanismo para reconstruir la imágen previa a una transacción
incompleta. Oracle utiliza los segmentos de rollback para esto.
Los segmentos de rollback pueden crecer tanto como sea necesario para soportar las
transacciones.
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES” MANUAL ORACLE 9i
Sistemas Autor: Diego Sánchez Página 47
Estructuras de Memoria Internas
Oracle mantiene dos estructuras principales de memoria: el Área Global de Programa,
Program Global Area, PGA; y el Área Global del Sistema, System Global Area o
también Shared Global Area, SGA.
El PGA es la zona de memoria de cada proceso Oracle. No está compartida y contiene
datos e información de control de un único proceso.
El SGA es la zona de memoria en la que la BD Oracle guarda información sobre su
estado. Esta estructura de memoria está disponible para todos los procesos, por eso se
dice que está compartida.
Área Global del Sistema, SGA
Sirve para facilitar la transferencia de información entre usuarios y también almacena la
información estructural de la BD más frecuentemente requerida.
La SGA se divide en varias partes:
Buffers de BD, Database Buffer Cache
Es el caché que almacena los bloques de datos leidos de los segmentos de datos de la
BD, tales como tablas, índices y clusters. Los bloques modificados se llamas bloques
sucios. El tamaño de buffer caché se fija por el parámetro DB_BLOCK_BUFFERS del
fichero init.ora.
Como el tamaño del buffer suele ser pequeño para almacenar todos los bloques de datos
leidos, su gestión se hace mediante el algoritmo LRU.
Buffer Redo Log
Los registros Redo describen los cámbios realizados en la BD y son escritos en los
ficheros redo log para que puedan ser utilizados en las operaciones de recuperación
hacia adelante, roll-forward, durante las recuperaciones de la BD. Pero antes de ser
escritos en los ficheros redo log son escritos en un caché de la SGA llamado redo log
buffer. El servidor escribe periódicamente los registros redo log en los ficheros redo
log.
El tamaño del buffer redo log se fija por el parámetro LOG_BUFFER.
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES” MANUAL ORACLE 9i
Sistemas Autor: Diego Sánchez Página 48
Área de SQL Compartido, Shared SQL Pool
En esta zona se encuentran las sentencias SQL que han sido analizadas. El analisis
sintáctico de las sentencias SQL lleva su tiempo y Oracle mantiene las estructuras
asociadas a cada sentencia SQL analizada durante el tiempo que pueda para ver si puede
reutilizarlas. Antes de analizar una sentencia SQL, Oracle mira a ver si encuentra otra
sentencia exactamente igual en la zona de SQL compartido. Si es así, no la analiza y
pasa directamente a ejecutar la que mantinene en memoria. De esta manera se premia la
uniformidad en la programación de las aplicaciones. La igualdad se entiende que es
lexicografica, espacios en blanco y variables incluidas. El contenido de la zona de SQL
compartido es:
Plan de ejecución de la sentencia SQL.
Texto de la sentencia.
Lista de objetos referenciados.
Los pasos de procesamiento de cada petición de análisis de una sentencia SQL
son:
Comprobar si la sentencia se encuentra en el área compartida.
Comprobar si los objetos referenciados son los mismos.
Comprobar si el usuario tiene acceso a los objetos referenciados.
Si no, la sentencia es nueva, se analiza y los datos de análisis se almacenan en la zona
de SQL compartida.
También se almacena en la zona de SQL compartido el caché del diccionario. La
información sobre los objetos de la BD se encuentra almacenada en las tablas del
diccionario. Cuando esta información se necesita, se leen las tablas del diccionario y su
información se guarda en el caché del diccionario de la SGA.
Este caché también se administra mediante el algoritmo LRU. El tamaño del caché está
gestionado internamente por el servidor, pero es parte del shared pool, cuyo manaño
viene determinado por el parámetro SHARED_POOL_SIZE.
Área Global de Programa
El Program Global Area es un área de memoria utilizada por un proceso Oracle. Esta
zona de memoria no se puede compartir.
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES” MANUAL ORACLE 9i
Sistemas Autor: Diego Sánchez Página 49
Estructuras de Proceso
El servidor se vale de una serie de procesos que son el enlace entre las estructuras
físicas y de memoria. A continuación se describen cada proceso y el papel que juega en
la gestión de laBD. Todo esto se puede ver en la siguiente figura.
System Monitor, SMON
El SMON es el supervisor del sistema y se encarga de todas las recuperaciones que sean
necesarias durante el arranque. Esto puede ser necesario si la BD se paró
inesperadamente por fallo físico, lógico u otras causas. Este proceso realiza la
recuperación de la instancia de BD a partir de los ficheros redo log. Además límpia los
segmentos temporales no utilizados y compacta los huecos libres contiguos en los
ficheros de datos. Este proceso se despierta regularmente para comprobar si debe
intervenir.
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES” MANUAL ORACLE 9i
Sistemas Autor: Diego Sánchez Página 50
Process Monitor, PMON
Este proceso restaura las transacciones no validadas de los procesos de usuario que
abortan, liberando los bloqueos y los recursos de la SGA. Asume la identidad del
usuario que ha fallado, liberando todos los recursos de la BD que estuviera utilizando, y
anula la transacción cancelada. Este proceso se despierta regularmente para comprobar
si su intervención es necesaria.
Database Writer, DBWR
El proceso DBWR es el responsable de gestionar el contenido de los buffers de datos y
del caché del diccionario. Él lee los bloques de los ficheros de datos y los almacena en
la SGA. Luego escribe en los ficheros de datos los bloques cuyo contenido ha variado.
La escritura de los bloques a disco es diferida buscando mejorar la eficiencia de la E/S.
Es el único proceso que puede escribir en la BD. Esto asegura la integridad. Se encarga
de escribir los bloques de datos modificados por las transacciones, tomando la
información del buffer de la BD cuando se valida una transacción. Cada validación no
se lleva a la BD física de manera inmediata sino que los bloques de la BD modificados
se vuelcan a los ficheros de datos periodicamente o cuando sucede algún checkpoint o
punto de sincronizaión: grabación diferida:
Los bloques del buffer de la BD (bloques del segmento de rollback y bloques de
datos) menos recientemente utilizados son volcados en el disco continuamente
para dejar sitio a los nuevos bloques.
El bloque del segmento de rollback se escribe SIEMPRE antes que el
correspondiente bloque de datos.
Múltiples transacciones pueden solapar los cambios en un sólo bloque antes de
escribirlo en el disco.
Mientras, para que se mantenga la integridad y coherencia de la BD, todas las
operaciones se guardan en los ficheros de redo log. El proceso de escritura es asíncrono
y puede realizar grabaciones multibloque para aumentar la velocidad.
Log Writer, LGWR
El proceso LGWR es el encargado de escribir los registros redo log en los ficheros redo
log. Los registros redo log siempre contienen el estado más reciente de la BD, ya que
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES” MANUAL ORACLE 9i
Sistemas Autor: Diego Sánchez Página 51
puede que el DBWR deba esperar para escribir los bloques modificados desde el buffer
de datos a los ficheros de datos.
Conviene tener en cuenta que el LGWR es el único proceso que escribe en los ficheros
de redo log y el único que lee directamente los buffers de redo log durante el
funcionamiento normal de la BD.
Coloca la información de los redo log buffers en los ficheros de redo log. Los redo log
buffers almacenan una copia de las transacciones que se llevan a cabo en la BD. Esto se
produce:
A cada validación de transacción, y antes de que se comunique al proceso que todo ha
ido bien,
Cuando se llena el grupo de buffers de redo log
Cuando el DBWR escribe buffers de datos modificados en disco.
Así, aunque los ficheros de DB no se actualicen en ese instante con los buffers de BD,
la operación queda guardada y se puede reproducir. Oracle no tiene que consumir sus
recursos escribiendo el resultado de las modificaciones de los datos en los archivos de
datos de manera inmediata. Esto se hace porque los registros de redo log casi siempre
tendrán un tamaño menor que los bloques afectados por las modificaciones de una
transacción, y por lo tanto el tiempo que emplea en guardarlos es menor que el que
emplearía en almacenar los bloques sucios resultado de una transacción; que ya serán
trasladados a los ficheros por el DBWR. El LGWR es un proceso único, para asegurar
la integridad. Es asíncrono. Además permite las grabaciones multibloque.
Checkpoint, CKPT
Este proceso escribe en los ficheros de control los checkpoints. Estos puntos de
sincronización son referencias al estado coherente de todos los ficheros de la BD en un
instante determinado, en un punto de sincronización. Esto significa que los bloques
sucios de la BD se vuelcan a los ficheros de BD, asegurándose de que todos los bloques
de datos modificados desde el último checkpoint se escriben realmente en los ficheros
de datos y no sólo en los ficheros redo log; y que los ficheros de redo log también
almacenan los registros de redo log hasta este instante. La secuencia de puntos de
control se almacena en los ficheros de datos, redo log y control. Los checkpoints se
producen cuando:
Un espacio de tabla se pone inactivo, offline,
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES” MANUAL ORACLE 9i
Sistemas Autor: Diego Sánchez Página 52
Se llena el fichero de redo log activo,
Se para la BD,
El número de bloques escritos en el redo log desde el último checkpoint alcanza el
límite definido en el parámetro LOG_CHECKPOINT_INTERVAL,
Cuando transcurra el número de segundos indicado por el parámetro
LOG_CHECKPOINT_TIMEOUT desde el último checkpoint.
Está activo si el parámetro CHECKPOINT_PROCESS tiene un valor verdadero.
Archiver, ARCH
El proceso archivador tiene que ver con los ficheros redo log. Por defecto, estos ficheros
se reutilizan de manera cíclica de modo que se van perdiendo los registros redo log que
tienen una cierta antiguedad. Cuando la BD se ejecuta en modo ARCHIVELOG, antes
de reutilizar un fichero redo log realiza una copia del mismo. De esta manera se
mantiene una copia de todos los registros redo log por si fueran necesarios para una
recuperación. Este es el trabajo del proceso archivador.
Recoverer, RECO
El proceso de recuperación está asociado al servidor distribuido. En un servidor
distribuido los datos se encuentran repartidos en varias localizaciones físicas, y estas se
han de mantener sincronizadas. Cuando una transacción distribuida se lleva a cabo
puede que problemas en la red de comunicación haga que una de las localizaciones no
aplique las modificaciones debidas. Esta transacción dudosa debe ser resuelta de algún
modo, y esa es la tarea del proceso recuperador. Está activo si el parámetro
DISTRIBUTED_TRANSACTIONS tiene un valor distinto de 0.
Lock, LCK
El proceso de bloqueo está asociado al servidor en paralelo.
ESTRUCTURAS EXTERNAS
Por estructuras externas se entienden los ficheros que utiliza el servidor de BD, de los
cuales ya se han ido contanto algunos aspectos, y otros se han ido intuyendo. Estos
ficheros guardan información tanto de los datos almacenados en la BD como la
necesaria para gobernar la propia BD.
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES” MANUAL ORACLE 9i
Sistemas Autor: Diego Sánchez Página 53
FICHEROS DE LA BD
En estos ficheros reside la información de la BD. Solo son modificados por el DBWR.
A ellos se vuelcan los bloques sucios de la SGA cuando se hace una validación o
cuando sucede un checkpoint. Las validaciones de las transacciones no producen un
volcado inmediato, sino lo que se conoce por un commit diferido. Toda actualización se
guarda en los ficheros de redo log, y se lleva a la BD física cuando tenemos una buena
cantidad de bloques que justifiquen una operación de E/S. Almacenan los segmentos
(datos, índices, rollback) de la BD. Están divididos en bloques (Bloque Oracle = c *
Bloque SO), cada uno de los cuales se corresponde con un buffer del buffer cache de la
SGA. En el bloque de cabecera no se guardan datos de usuario, sino la marca de tiempo
del último checkpoint realizado sobre el fichero.
Ficheros redo log
En ellos se graba toda operación que se efectue en la BD y sirven de salvaguarda de la
misma. Tiene que haber por lo menos 2, uno de ellos debe estar activo, online, y se
escribe en ellos de forma cíclica. Existe la posibilidad de almacenar los distintos
ficheros de redo log en el tiempo mediante el modo ARCHIVER. Así, se puede guardar
toda la evolución de la BD desde un punto dado del tiempo.
Una opción es la utilización de archivos redo log multiplexados:
Permite al LGWR escribir simultaneamente la misma información en múltiples archivos
redo log.
Se utiliza para protegerse contra fallos en el disco.
Da una alta disponibilidad a los archivos redo log activos u online.
Esto se hace definiendo el número de grupos y de miembros de archivos redo log que
van a funcionar en paralelo: grupos: funcionan como ficheros redo log normales, uno de
ellos está activo y el resto espera su turno.
Su nombre lleva incorporado una numeración.
Deben contener todo el mismo número de miembros.
Miembros: cada escritura de un registro redo log se lleva a cabo en todos los miembros
del grupo activo en ese momento. Los miembros deben:
Tener el mismo tamaño y el mismo número de secuencia.
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES” MANUAL ORACLE 9i
Sistemas Autor: Diego Sánchez Página 54
Deben tener nombres similares y estar en diferentes discos para proteger contra fallos de
una manera efectiva.
Cuando se produce algún fallo en los ficheros de redo log o en el proceso LGWR:
Si la escritura en un fichero redo log falla pero el LGWR puede escribir al menos en
uno de los miembros del grupo, lo hace , ignorando el fichero inaccesible y registrando
un fallo en un fichero de traza o alerta.
Si el siguiente grupo no ha sido archivado (modo ARCHIVELOG) antes del cambio de
grupo que lo pone activo, ORACLE espera hasta que se produzca el archivado.
Si fallan todos los miembros de un grupo mientras el LGWR trata de escribir, la
instancia se para y necesita recupeción al arrancar.
Se pueden visualizar los nombres y estado de los ficheros de redo log:
SVRMGR> select group#, status, substr(member,1,60) from v$logfile;
También se pueden visualizar estadísticas de los ficheros redo log:
SVRMGR> select group#, sequence#, bytes, members, archived,
2 status, first_change#, first_time from v$logfile;
Ficheros de control
Mantienen la información física de todos los ficheros que forman la BD, camino
incluido; así como el estado actual de la BD. Son utilizados para mantener la
consistencia interna y guiar las operaciones de recuperación. Son imprescindibles para
que la BD se pueda arrancar. Contienen:
Información de arranque y parada de la BD.
Nombres de los archivos de la BD y redo log.
Información sobre los checkpoints.
Fecha de creación y nombre de la BD.
Estado online y offline de los archivos.
Debe haber múltiples copias en distintos discos, mínimo dos, para progerlos de los
fallos de disco. La lista de los ficheros de control se encuentra en el parámetro
CONTROL_FILES, que debe modificarse con la BD parada.
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES” MANUAL ORACLE 9i
Sistemas Autor: Diego Sánchez Página 55
Se puede componer una sentencia SQL que nos muestre todos los ficheros asociados a
una BD. Esta es:
SQL> select 'control' tipo, substr(name,1,70) nombre from v$controlfile
2 unions all
3 select 'datos' tipo, substr(name,1,70) nombre from v$datafile
4 unions all
5 select 'redo log' tipo, substr(name,1,70) nombre from v$logfile
6 /
Hasta aquí los tipos de ficheros que se suelen considerar fundamentales en la
arquitectura del SGBD Oracle. Pero existen otros ficheros, que aunque no forman parte
de la arquitectura Oracle resultan importantes en el uso del SGBD.
El Fichero INIT.ORA
Como parte de la distribución software, Oracle provee de un fichero de parámetros de
inicialización llamado init.ora. Este fichero contiene los parámetros del sistema Oracle y
debe ser utilizado por el DBA para configurar el SGDB y adecuarlo a una determinada
explotación. Oracle lee este fichero durante el proceso de arranque para determinar el
tamaño de la SGA y encontrar los ficheros de control, entre otros menesteres.
Como el fichero init.ora es fundamental para el arranque de la BD, debería ser copiado
frecuentemente para protegerlo de posibles prédidas.
Ficheros de Traza
Oracle crea ficheros de texto llamados de traza para ayudar en la diagnosis de
problemas y en el ajuste del SGBD. Cada proceso del servidor escribe en un fichero de
traza asociado cuando es necesario. Los procesos de usuarios también pueden tener
asociados ficheros de traza. La situación de estos ficheros de traza del sistema se
especifica por el parámetro BACKGROUND_DUMP_DEST, y los de usuario por
USER_DUMP_DEST. Oracle crea ficheros de traza automáticamente cuando ocurre
algún error.
Un parámetro muy frecuentemente utilizado por los desarrolladores Oracle es el
SQL_TRACE, que cuando está puesto a TRUE produce que toda sentencia SQL
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES” MANUAL ORACLE 9i
Sistemas Autor: Diego Sánchez Página 56
ejecutada genere información en los ficheros de traza. Este parámetro se puede variar
con el siguiente comando:
SQL> alter session set SQL_TRACE=TRUE;
Session Altered.
El directorio donde se depositan los ficheros de traza debe de examinarse con
regularidad para controlar el tamaño de los fichero alli depositados.
Ciclo de Ejecución
Para ilustrar el funcionamiento del servidor Oracle vamos a ver el ciclo de ejecución de
una sentencia de lectura y otra de actualización.
Ciclo de Lectura
Las sentencias de lectura siguen el siguiente ciclo:
El proceso cliente pasa la sentencia SQL (SELECT) al proceso servidor por
medio de la SGA.
Los procesos del servidor buscan en la zona de SQL compartido una versión
ejecutable de la sentencia. Si la encuentran no tienen que procesarla.
Se procesa la sentencia SQL y su versión ejecutable se coloca en la zona de SQL
compartido.
El proceso del servidor intenta leer los bloques de datos de la SGA. Si no están,
se han de leer del fichero de datos. Si los bloques están en la SGA pero han sido
modificados por otro usuario y esa modificación no ha sido validada aún, el
proceso de servidor debe reconstruir la imagen de la fila a partir de los
segmentos de rollback, para conseguir consistencia en lectura.
El proceso servidor pasa los datos solicitados al proceso cliente.
Ciclo de Actualización
Las sentencias de actualización siguen el siguiente ciclo:
1. El proceso cliente pasa la sentencia SQL (UPDATE) al proceso servidor por
medio de la SGA.
2. Los procesos del servidor buscan en la zona de SQL compartido una versión
ejecutable de la sentencia. Si la encuentran no tienen que procesarla.
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES” MANUAL ORACLE 9i
Sistemas Autor: Diego Sánchez Página 57
3. Se procesa la sentencia SQL y su versión ejecutable se coloca en la zona de SQL
compartido.
4. El proceso del servidor intenta leer los bloques de datos de la SGA. Si no están,
se han de leer del fichero de datos.
5. Se registra el valor antiguo de los datos en un segmento de rollback y se crea un
registro redo log.
6. Se crea una copia de la transacción en un registro redo log.
7. Se ejecuta la sentencia SQL modificando los datos, y se crea un registro redo log
que así lo refleja.
8. El proceso usuario valida la transacción (COMMIT), registrandose en un
registro redo log.
9. El LGWR escribe los buffers del redo log en el disco.
10. El servidor indica al cliente que la operación ha sido completada de manera
satisfactoria.
11. Se registra la terminación de la transacción en un registro redo log.
12. Se libera la información del rollback, pues ya no va a necesitarse.
13. Si a partir del paso 6 el usuario cancela la transacción (ROLLBACK), se puede
utilizar la información de rollback para restablecer el valor original.
14. Si sucede algo que impida que la transacción validada por el usuario pueda
llevarse a cabo, se puede utilizar la información contenida en los registros redo
log para rehacer la transacción (a partir del paso 6).
15. Como ocurre con todas las transacciones, en algún momento el DBWR escribe
en el archivo de datos la copia de los bloques de datos modificados que se
encuentran en el buffer cache.
3 Configuración
3.1 El Código Oracle
Cuando el software Oracle se instala en un sistema, se crean subdirectorios y ficheros,
dependientes todos ellos del S.O. Por ejemplo, en el S.O. Unix, todo los subdirectorios
Oracle se encuentran colgando del directorio principal ORACLE_HOME. Todos estos
subdirectorios contienen ficheros ejecutables y scripts que son cruciales para el
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES” MANUAL ORACLE 9i
Sistemas Autor: Diego Sánchez Página 58
funcionamiento y la administración del SGBD, y es lo que se conoce por el código
Oracle. Entre ellos, una herramienta nos va a ser fundamental en las tareas de
adminstración y puesta en marcha de la BD: server manager, svrmgr. Con ella son
convertiremos en DBA, y para ejecutarla deberemos ser sus propietarios. La sentencia
es la siguiente:
SVRMGR> connect internal
Connected.
Todas las operaciones de administración deben comenzar por conectarse a la BD.
Arranque y Parada de la BD
Durante el arranque y parada de la BD se sucenden un conjunto de eventos que llevan a
la BD por diferentes estados.
Para que los usuarios puedan acceder a la BD el DBA necesita abrir la BD. El siguiente
es un ejemplo de apertura de una BD llamada test.
SVRMGR> startup open test
ORACLE instance started.
Total System Global Area 4512688 bytes.
Fixed Size 39732 bytes.
Variable Size 4055164 bytes.
Database Buffers 409600 bytes.
Redo Bufers 8192 bytes.
Database mounted.
Database opened.
cuando se ejecuta el comando startup open la BD pasa por tres estados (nomount, mount
y open) antes de estar disponible. El DBA puede arrancar la BD hasta uno de los
estados con el comando startup: startup nomount, startup mount. A continuación vamos
a describir cada uno de los estados por los que pasa la BD en el proceso de arranque.
nomount
SVRMGR> startup open test
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES” MANUAL ORACLE 9i
Sistemas Autor: Diego Sánchez Página 59
ORACLE instance started.
Total System Global Area 4512688 bytes.
Fixed Size 39732 bytes.
Variable Size 4055164 bytes.
Database Buffers 409600 bytes.
Redo Bufers 8192 bytes.
Oracle lee el fichero init.ora, localiza los ficheros de control, crea e inicializa la SGA, y
finalmente arranca todos los procesos Oracle. En este estado la instancia de BD está
arrancada. Se deberá llevar la BD al estado nomount cuando se esté creando la BD o
cuando se está restaurando un fichero de control después de haberlo perdido.
mount
SVRMGR> alter database mount;
Statement processed.
Oracle abre los ficheros de control para localizar los ficheros de datos y los redo log,
pero no se realizan ninguna comprobación en ellos en este momento. La instancia monta
la BD y la bloquea, verificando que ninguna otra instancia ha montado la misma BD.
Hay varias razones para querer tener la BD en el estado mount. En general, todas las
sentencias SQL del tipo alter database se deben ejecutar en esta etapa. Algunas de las
operaciones a realizar cuando la BD está montada son: efectuar recuperaciones, poner
online/offline un fichero de datos, recolocar los ficheros de datos y redo log, crear un
nuevo grupo o miembro redo log, o borrar un grupo o miembro redo log existente.
Open
SVRMGR> alter database open;
Statement processed.
Durante esta etapa, la instancia abre la BD, bloquea los ficheros de datos, y abre todos
los ficheros redo log. Si la instancia abre la BD después de una terminación anormal, o
después de una caida, se ejecutará automáticamente el proceso de recuperación
utilizando los ficheros redo log. Al final de esta etapa la BD está dispuesta para su uso
normal.
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES” MANUAL ORACLE 9i
Sistemas Autor: Diego Sánchez Página 60
Para parar la BD el comando base es shutdown como se puede ver en el siguiente
ejemplo:
SVRMGR> shutdown
Database closed.
Database dismounted.
ORACLE instance shut down.
Pero este comando se nos presenta con tres opciones: normal, immediate y abort.
shutdown normal
Se impide el acceso a la BD, espera a que todos los usuarios completen todas sus
peticiones y se desconecten del servidor. Purga todos los buffers de datos y cachés de
redo log, actualizando los ficheros de datos y de redo log, se eliminan los bloqueos de
ficheros, se completan las transacciones en marcha, se actualizan las cabeceras de
ficheros, elimina los threads, libera los bloqueos de la BD por parte de la instancia, y
sincroniza los ficheros de control y de datos. En resumen, la opción normal cierran la
BD, desmonta la BD y para la instancia con cuidado y es la opción recomendada para
parar la BD.
shutdown immediate
En ciertas ocasiones puede ser necesario parar la BD de modo inmediato. Si es así, las
sentencias en proceso son terminadas inmediatamente, cualquier transacción no
confirmada (uncommitted) es vuelta atrás (rolled back) y la BD es parada. La única
desventaja de utilizar esta opción es que Oracle no espera a que los usuarios se
desconecten. Sin embargo, la BD será consistenta y no se necesitará recuperación en el
siguiente arranque.
shutdown abort
En situaciones de emergencia, y cuando todo lo demás falla, se debe realizar una parada
de este tipo. Por ejemplo, cuando un proceso de la instancia muere y la BD no puede
pararse de modo normal o inmediato. Cuando se utiliza la opción abort las sentencias
SQL son terminadas bruscamente, y las transacciones no confirmadas no son vueltas
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES” MANUAL ORACLE 9i
Sistemas Autor: Diego Sánchez Página 61
atrás. Parar la BD con la opción abort requiere recuperación en la siguiente vez que
arranque la BD y esta opción debe ser utilizada sólo cuando no quede más remedio.
Almacenamiento de Datos
Los datos se almacenan en estacios de tablas, y un espacio de tabla es la entidad lógica
que se corresponde con uno o más ficheros físicos. La principal razón de esta
organización es el aumento de la flexibilidad a la hora de realizar operaciones con la
BD. En esta sección vamos a dar un repaso a las tareas de administración relacionadas
con los espacios de tablas y con los ficheros.
Espacios de Tablas y Ficheros
Los espacios de tablas se utilizan para realizar tareas de gestión de espacio, controlar la
disponibilidad de los datos y ejecutar copias de seguridad y recuperaciones parciales.
Gestión de Espacio
El primer espacio de tablas es el SYSTEM. Este espacio de tablas debe estar disponible
siempre durante el funcionamiento normal de la BD porque contiene el diccionario de
datos. Después de la creación de la BD, se recomienda la creación de otros espacios de
tablas para que los datos de los usuarios puedan ser separados de los del diccionario de
datos. Incluso, si varias apliaciones se van a ejecutar sobre la misma BD es
recomendable que sus datos estén separados. Para crear un espacio de tablas se puede
utilizar el comando create tablespace:
SVRMGR> create tablespace nombre_tablespace
2> datafile 'nombre_fichero' size 50M online;
En el ejemplo anterior se ha creado un espacio de tablas de 50 Mb. de tamaño. Cada
espacio de tabla 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
espacio de tablas (1).
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES” MANUAL ORACLE 9i
Sistemas Autor: Diego Sánchez Página 62
• maxextents: número máximo de extensiones.
• pctincrease: Porcentaje en el que crecerá la siguiente extensión antes de que se
asigne, en relación con la última extensión utilizada.
• optimal: Tamaño óptimo declarado para este espacio de tablas.
• 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.
• Si el espacio de tablas necesita más espacio después de su creación se puede
alterar para añadir uno o más ficheros. Para ello se puede utilizar el comando
alter tablespace:
SVRMGR> alter tablespace nombre_tablespace
2> add datafile 'nombre_fichero' size 30M;
Si se necesitara variar la localización de los ficheros asociados a un espacio de tablas se
puede hacer con los comandos alter tablespace (el espacio de tables debe estar offline) o
alter database (la BD debe estar montada pero no abierta). Antes de ejecutar los
anteriores comandos los ficheros asociados al espacio de tablas deben de haber sido
movidos a su nueva localización utilizando los comandos de los SO oportunos.
Poniendo los tablespaces offline
Llevar a un espacio de tablas al estado offline significa que se impide el acceso a los
datos que almacena. El espacio de tablas SYSTEM nunca puede estar offline. Las
razones para poner un espacio de tablas offline pueden ser varias: un error de escritura
en los ficheros que lo soportan, el mover los ficheros de sitio, etc. Depués de realizar
estas operaciones hay que poner otra vez disponible el espacio de tablas, esto es on line
Los espacios de tablas se pueden poner offline de tres modos: normal, temporary e
immediate. Si no existe ningún error lo recomendable es poner el espacio de tablas
offline usando el modo normal. Así, se colocará un checkpoint en el espacio de tablas
antes de ponerlo offline.
SVRMGR> alter tablespace nombre_tablespace offline normal;
Si alguno de los ficheros está corrupto, la opción normal fallará y se necesitará el modo
temporary. La opción immediate se utilizará sólo cuando la BD está en modo
ARCHIVELOG, ya que no se produce checkpoint alguno.
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES” MANUAL ORACLE 9i
Sistemas Autor: Diego Sánchez Página 63
Poniendo los ficheros offline
No es normal poner los ficheros offline/online. Si un determinado fichero de datos se
corrompe, se tendrá que pone offline, repararlo y ponerlo online de nuevo. Esta
operación puede suponer sustituirlo por su copia de seguridad, lo que implicará ejecutar
el comando recover datafile antes de poner el fichero online.
Segmentos, Extensiones y Bloques
Los datos en la BD son almacenados físicamente en bloques Oracle: la mínima unidad
de espacio físico, y es un múltiplo del bloque del SO (2 Kb usualmente). El tamaño del
bloque Oracle se fija por el parámetro DB_BLOCK_SIZE del fichero init.ora. Un
tamaño grande de bloque mejora la eficiencia del cache de E/S, pero el tamaño de la
SGA aumentará para contener los mismos DB_BLOCK_BUFFERS, lo que significa un
problema de memoria.
Una serie de bloques contiguos es una extensión, que es una unidad lógica de
almacenamiento. Una serie de extensiones es un segmento. Cuando un objeto es creado,
se reserva una extensión en su segmento. Cuando el objeto crezca, necesitará más
espacio y se reservarán más extensiones.
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 espacio de tablas donde se creará el segmento.
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES” MANUAL ORACLE 9i
Sistemas Autor: Diego Sánchez Página 64
Cuando se diseña una BD se ha de tener mucho cuidado a la hora de dimensionar la BD
y prever el crecimiento de las tablas. A continuación se hacen algunas consideraciones
sobre la gestión del espacio para los diferentes segmentos.
Segmentos de Datos
El espacio del diccionario de datos se suele mantener más o menos constante, aunque es
crítico que tenga suficiente espacio para crecer en el espacio de tablas SYSTEM. Así,
hay que tener cuidado de colocar las tablas de usuario, los índices, segmentos
temporales y los segmentos de rollback en otros espacios de tablas. Además, es
recomendable que el espacio de tablas SYSTEM esté al 50% o 75% de su espacio
disponible. Finalmente, asegurarse que los usuarios no tienen privilegios de escritura en
el espacio de tablas SYSTEM.
Las tablas crecen proporcionalmente con el número de filas, ya que se puede suponer
que la longitud de las filas es constante.
Segmentos de Índice
Los índices crecen en tamaño en mayor proporción que las tablas asociadas si los datos
en la tabla son modificados frecuentemente. La gestión del espacio es mejor si se
mantienen los índices de tablas grandes en espacios de tablas separados.
Segmentos de Rollback
Los segmentos de rollback almacenan la imagen anterior a una modificación de un
bloque. La información en el segmento de rollback se utiliza para asegurar la
consistencia en lectura, el rollback (el valor en el segmento de rollback se copia en el
bloque de datos) y la recuperación.
Es importante comprender cual es el contenido de un segmento de rollback. No
almacenan el bloque de datos modificado entero, sólo la imagen previa de la fila o filas
modificadas. La información del segmento de roolback consiste en varias entradas
llamadas undo. Por ejemplo, si se inserta una fila en una tabla, el undo necesitará sólo el
rowid de la fila insertada, ya que para volver atrás la insercion sólo hay que realizar un
delete. En las operación de actualización, se almacenará el valor antiguo de las
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES” MANUAL ORACLE 9i
Sistemas Autor: Diego Sánchez Página 65
columnas modificadas. El segmento de rollback asegura que la información undo se
guardan durante la vida de la transacción.
Un segmento de rollback como cualquier otro segmento consiste en una serie de
extensiones. Sin embargo, la mayor diferencia entre un segmento de datos y otro
rollback es que en este último las extensiones se utilizan de manera circular. Así, habrá
que tener cuidado a la hora de fijar el tamaño del segmento de rollback para que la
cabeza no pille a la cola.
Segmentos Temporales
Los segmentos temporales se crean cuando se efectuan las siguientes
operaciones:
Create Index
Select con distinct, order by, union, intersect y minus.
uniones no indexadas.
Ciertas subconsultas correlacionadas.
Si las tablas a ordenar son pequeñas la ordenación se realiza en memoria principal, pero
si la tabla es grande se realiza en disco. El parámetro SORT_AREA_SIZE determina el
lugar donde se hace la ordenación. Incrementándole se reduce la creación de segmentos
temporales.
Configuración de la BD
Mientras se diseña la BD hay que considerar la posible recuperación de una caida, y las
prestaciones de la BD, relacionando todo esto con las necesidades de la implantación y
los medios disponibles. La configuración de la BD está relacionada con los ficheros de
control, los ficheros redo log activos y los archivados.
Gestionando los Ficheros de Control
Los ficheros de control contienen el esquema de la BD. Es uno de los más importantes
ficheros e imprescindible para el uso normal de la BD. Así que daremos alguna pista
para su gestión.
El parámetro CONTROL_FILES del fichero init.ora contiene la lista de todos los
ficheros de control. Cuando se arranca la BS, Oracle lee el fichero init.ora para
determinar cuántos ficheros de control se usan en la BD y dónde están. Durante la fase
de montaje, se abren los ficheros de control para leer el esquema de la BD. Aunque
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES” MANUAL ORACLE 9i
Sistemas Autor: Diego Sánchez Página 66
Oracle escribe en todos los ficheros de control, sólo lee el primero listado en el
parámetro CONTROL_FILES.
Para protegerlos contra fallos de almacenamiento, se sugiere que al menos existan dos
ficheros de control, cada uno en un disco diferente, aunque es buena idea mantener más
copias en diferentes discos. Esto es una política de espejado que protege frente a fallos
en disco. Si un disco falla y se pierden todos los ficheros en él, se puede seguir
utilizando los ficheros de control de otros discos. Esto supone una pequeña sobrecarga
al sistema, ya que cada vez que se porduce un checkpoint o cambia el esquema de la
BD, todos los ficheros de control son actualizados.
Cuando se produce un fallo en algún disco y algún fichero de control se pierde hay que
parar la BD con la opción abort, copiar el fichero de control que queda en otro disco,
editar el fichero init.ora para reflejar este cambio, y volver a levantar la BD.
Si un fallo ha producido la pérdida de todas las copias de los ficheros de control habrá
que recrearlos con el comando create controlfile. Si algunos de los parámetros
MAXLOGFILES, MAXLOGMEMBERS, MAXLOGHISTORY, MAXDATAFILES y
MAXINSTANCES varía habrá que utilizar también el comando CREATE
CONTROLFILE.
Gestionando los Ficheros Redo Log Activos
Oracle proporciona la posibilidad de espejar los ficheros redo log activos. Mecanismo
conocido como ficheros redo log multiplexados. Oracle necesita al menos dos grupos de
fricheros redo log, cada uno con un miembro como mínimo. Oracle efectua escrituras
en paralelo a cada miembro, pero si están en el mismo disco, realmente la escritura se
serializa.
Otro aspecto a tener en cuenta es el tamaño de los ficheros redo log. Si son muy
pequeños, el LGWR deberá cambiar de ficheros demasiado frecuentemente, lo que
reduce su rendimiento. Por otro lado, si los ficheros redo log son demasiado grandes, se
necesitará mucho tiempo en las recuperaciones, ya que se tendrán que recuperar muchas
transacciones.
Otro aspecto muy importante es la elección del número correcto de grupos, ya que
disponer de demasiados pocos grupos puede acarrear problemas cuando estámos en
modos ARCHIVELOG y tenemos una tasa de transacciones muy alta. Esto puede
suponer que un grupo que todavía está archivando por el proceso ARCH se convierta en
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES” MANUAL ORACLE 9i
Sistemas Autor: Diego Sánchez Página 67
el grupo en el que el LGWR necesite escribir, lo que produciría que la BD se parara, ya
que el LGWR tienen que esperar a que el grupo esté disponible, una vez que su
contenido ha sido archivado. Para la mayoría de las implantaciones, tener entre 2 y 10
grupos puede ser suficiente. El número de grupos no puede exceder de
MAXLOGFILES, ni el número de miembros puede ser mayor que
MAXLOGMEMBERS.
TIPOS DE SENTENCIAS
Las sentencias SQL pertenecen a dos categorías principales: Lenguaje de Definición de
Datos, DDL y Lenguaje de Manipulación de Datos, DML. Estos dos lenguajes no son
lenguajes en sí mismos, sino que es una forma de clasificar las sentencias de lenguaje
SQL en función de su cometido. La diferencia principal reside en que el DDL crea
objetos en la base de datos y sus efectos se pueden ver en el diccionario de la base de
datos; mientras que el DML es el que permite consultar, insertar, modificar y eliminar la
información almacenada en los objetos de la base de datos.
Cuando se ejecutan las sentencias DDL de SQL, el SGBD confirma la transacción
actual antes y después de cada una de las sentencias DDL. En cambio, las sentencias
DML no llevan implícito el commit y se pueden deshacer. Existe pues un problema al
mezclar sentencias DML con DDL, ya que estas últimas pueden confirmar las primeras
de manera involuntaria e implicita, lo que en ocasiones puede ser un problema.
A continuación se presenta una tabla con las sentencias SQL más comunes, clasificadas
según el lenguaje al que pertenecen.
Sentencia
DDL Objetivo
Alter
procedure Recompilar un procedimiento almacenado.
Alter Table Añadir o redefinir una columna, modificar la asignación de
almacenamiento.
Analyze Recoger estadísticas de rendimiento sobre los objetos de la BD
para utilizarlas en el optimizador basado en costes.
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES” MANUAL ORACLE 9i
Sistemas Autor: Diego Sánchez Página 68
Create Table Crear una tabla.
Create Index Crear un índice.
Drop Table Eliminar una tabla.
Drop Index Eliminar un índice.
Grant Conceder privilegios o papeles, roles, a un usuario o a otro rol.
Truncate Eliminar todas las filas de una tabla.
Revoke Retirar los privilegios de un usuario o rol de la base de datos.
Sentencia
DML Objetivo
Insert Añadir filas de datos a una tabla.
Delete Eliminar filas de datos de una tabla.
Update Modificar los datos de una tabla.
Select Recuperar datos de una tabla.
Commit Confirmar como permamentes las modificaciones realizadas.
Rollback Deshacer todas las modificaciones realizadas desde la última
confirmación.
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.
Antes de ver la manera de conectarse a SQL*Plus, conviene 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.
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES” MANUAL ORACLE 9i
Sistemas Autor: Diego Sánchez Página 69
Posibilidades de Edición
SQL*Plus almacena en un buffer la última sentencia SQL introducida. El buffer
mantiene sólo una sentencia cada vez, y si se introduce una nueva sentencia se
sobreescribe sobre la anterior.
La sentencia en el buffer puede ser recuperada para ejecutarla de nuevo con los
comandos:
RUN que visualiza la sentencia en el buffer antes de ejecutarla;
/ que ejecuta la sentencia sin visualizarla.
SQL*Plus también nos permite editar la sentencia SQL alamacenada en el buffer
mediante un sencillo (y limitado) editor en línea, cuyos comandos se enumeran a
continuación:
Comando Abreviatura Descripción
APPEND texto A texto Añade texto al final de la línea.
CHANGE/fuente/destino C/fuente/destino Cambia el contenido 'fuente' por el
'destino'
CHANGE/texto C/texto Quita 'texto' de una línea.
CLEAR BUFFER CL BUFF Borra el buffer
DEL DEL Borra una línea.
INPUT I Inserta una o más líneas.
INPUT texto I texto Inserta una línea con 'texto'.
LIST L Lista las líneas del buffer
LIST n L n ó n Lista la línea n-ésima.
LIST * L * Lista la línea actual.
LIST LAST L LAST Lista la última línea.
LIST m n L m n Lista las líneas desde la m-ésima a
la n-ésima.
Al contenido del buffer también se puede acceder desde el editor del Sistema Operativo.
Así, el buffer podrá ser manipulado con las posibilidades del editor con el que estemos
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES” MANUAL ORACLE 9i
Sistemas Autor: Diego Sánchez Página 70
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
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. Pero antes
de ver este tipo de cosas, es mejor que sigamos profundizando en el conocimiento del
lenguaje SQL. Al final del curso se puede se encuentra un capítulo con algunas de las
cosillas que quedan por contar del SQL*Plus.
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES” MANUAL ORACLE 9i
Sistemas Autor: Diego Sánchez Página 71
CREACIÓN
La primera fase de cualquier base de datos comienza siempre con sentencias DDL, ya
que antes de poder almacenar información debemos definir los objetos básicos donde
agrupar la información. Los objetos básicos con que trabaja SQL son las tablas. Una
tabla es un conjunto de celdas agrupadas en filas y columnas donde se almacenan
elementos de información.
Antes de llevar a cabo la creación de una tabla conviene planificar:
nombre de la tabla,
nombre de cada columna,
tipo y tamaño de los datos almacenados en cada columna,
información adicional, restricciones, etc.
Hay que tener en cuenta también ciertas restricciones en la formación de los nombres de
las tablas: longitud máxima de 30 caracteres, no puede haber nombres de tabla
duplicados, deben comenzar con un carácter alfabético, permitir caracteres
alfanuméricos y el guión bajo '_', y Oracle no distingue entre mayúsculas y minúsculas.
La sintaxis del comando que permite crear una tabla es la siguiente:
Examen de la sintaxis de la sentencia Create Table se pueden concluir que necesitamos
conocer los distintos tipos de columna y las distintas restricciones que se pueden
imponer al contenido de las columnas. Vayamos por partes.
TIPOS DE COLUMNAS
Existen varios tipos de datos en SQL. De esta manera, cada columna puede albergar una
información de naturaleza distinta. Los tipos de datos más comunes y sus características
se resumen en la siguiente tabla.
Tipo de Dato Descripción
VARCHAR2(tamaño) Almacena datos de tipo carácter alfanumérico de
longitud variable, con un tamaño máximo de 2.000.
CHAR(tamaño) Almacena datos de tipo carácter alfanumérico de
longitud fija, con un tamaño máximo de 255.
LONG Almacena datos de tipo carácter alfanumérico de
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES” MANUAL ORACLE 9i
Sistemas Autor: Diego Sánchez Página 72
longitud variable con un tamaño máximo de hasta 2 Gb.
NUMBER(dig,dec) Almacena datos numéricos de dig dígitos, de los cuales
dec son decimales. El tamaño máximo es de 38 dígitos.
DATE Almacena fechas desde el 1-Ene-4712 AC hasta el 31-
Dic-4712 DC.
RAW(tamaño) Almacena datos de longitud variable, con un tamaño
máximo de 255 bytes.
LONG RAW Almacena datos de longitud variable, con un tamaño
máximo de 2 Gb.
RESTRICCIONES
Las restricciones de los datos se imponen para asegurarnos que los datos cumplen con
una serie de condiciones predefinidas para cada tabla. Estas restricciones ayudan a
conseguir la integridad de referencia: todas las referencias dentro de una BD son válidas
y todas las restricciones se han cumplido.
Las restricciones se van a definir acompañadas por un nombre, lo que permitirá
activarlas o desactivarlas según sea el caso; o también mezcladas en la definiciones de
las columnas de la tabla. A continuación vamos a describir cada una de las restricciones
mencionadas.
NOT NULL
Establece la obligatoriedad de que esta columna tenga un valor no nulo. Se debe
especificar junto a la columna a la que afecta. Los valores nulos no ocupan espacio, y
son distintos a 0 y al espacio en blanco. Hay que tener cuidado con los valores nulos en
las operaciones, ya que 1 * NULL es igual a NULL.
UNIQUE
Evita valores repetidos en una columna, admitiendo valores nulos. Oracle crea un índice
automáticamente cuando se habilita esta restricción y lo borra al deshabilitarse.
DEFAULT
Establece un valor por defecto para esa columna, si no se le asigna ninguno.
CHECK
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES” MANUAL ORACLE 9i
Sistemas Autor: Diego Sánchez Página 73
Comprueba que se cumpla una condición determinada al rellenar esa columna. Esta
condición sólo debe estar construida con columnas de esta misma tabla.
PRIMARY KEY
Establece el conjunto de columnas que forman la clave primaria de esa tabla. Se
comporta como única y obligatoria sin necesidad de explicitarlo. Sólo puede existir una
clave primaria por tabla. Puede ser referenciada como clave ajena por otras tablas. Crea
un índice automáticamente cuando se habilita o se crea esta restricción. En Oracle, los
índices son construidos sobre árboles B+.
FOREIGN KEY
Establece que el contenido de esta columna será uno de los valores contenidos en una
columna de otra tabla maestra. Esta columna marcada como clave ajena puede ser
NULL. No hay límite en el número de claves ajenas. La clave ajena puede ser otra
columna de la misma tabla. Se puede forzar que cuando una fila de la tabla maestra sea
borrada, todas las filas de la tabla detalle cuya clave ajena coincida con la clave borrada
se borren también. Esto se consigue añadiendo la coletilla ON DELETE CASCADE en
la definición de la clave ajena.
Seguidamente se presenta un ejemplo en el que se crean dos tablas, una de
departamentos y otra de empleados:
REM
REM tabla departamento con un código de departamento, un nombre y una
REM localización.
REM
create table dep (
cod_dep number(3),
nombre varchar2(15) not null,
loc varchar2(10),
constraint dep_pk primary key (cod_dep),
constraint dep_loc check
(loc in ('Valladolid', 'Boecillo', 'Cigales'))
);
REM
REM tabla empleado con un código de empleado, un nombre, un oficio, un
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES” MANUAL ORACLE 9i
Sistemas Autor: Diego Sánchez Página 74
REM jefe, una fecha de alta en la empresa, un salario mensual, una
REM comisión y el código del departamento donde trabaja.
REM
create table emp (
cod_emp number(3),
nombre varchar2(10) not null,
oficio varchar2(11),
jefe number(3),
fecha_alta date,
salario number(10),
comision number(10),
cod_dep number(3),
constraint emp_pk primary key (cod_emp),
constraint emp_fk foreign key (cod_dep) references dep(cod_dep)
on delete cascade,
constraint emp_ck check (salario > 0)
);
Comando Describe
Oracle nos proporciona un comando que resulta muy útil cuando queremos conocer la
estructura de una tabla, las columnas que la forman y su tipo y restricciones. Este
comando toma una mayor importancia según nos alejemos del momento de creación de
una tabla.
La sintásis es la siguiente
DESCRIBE tabla
Y un ejemplo de su utilización se puede ver al describir la definición de las dos tablas
creadas antes. Como no es una sentencia SQL no necesita el ';' al final. También se
puede abreviar como DESC.
SQL> describe dep
Name Null? Type
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES” MANUAL ORACLE 9i
Sistemas Autor: Diego Sánchez Página 75
------------------------------- -------- ----
COD_DEP NOT NULL NUMBER(3)
NOMBRE NOT NULL VARCHAR2(15)
LOC VARCHAR2(10)
SQL> desc emp
Name Null? Type
------------------------------- -------- ----
COD_EMP NOT NULL NUMBER(4)
NOMBRE NOT NULL VARCHAR2(10)
OFICIO VARCHAR2(10)
JEFE NUMBER(4)
FECHA_ALTA DATE
SALARIO NUMBER(10)
COMISION NUMBER(10)
COD_DEP NUMBER(3)
Modificación
Después de crear una tabla, a veces nos encontramos con que se necesita añadir una
columna adicional o modificar la definición de una columna existente. Esta operación se
puede realizar con el comando ALTER TABLE.
Hay que tener en cuenta varios puntos:
No es posible disminuir el tamaño de un columna.
En las modificaciones, los tipos anterior y nuevo deben ser compatibles, o la
tabla debe estar vacía.
La opción ADD ... NOT NULL sólo será posible si la tabla está vacía.
La opción MODIFY ... NOT NULL sólo podrá realizarse cuando la tabla no
contenga ninguna fila con valor nulo en la columna en cuestión.
Por ejemplo la sentencia siguiente añade la fecha de nacimiento a la tabla de empleados.
SQL> alter table emp add (fecha_nac date not null);
También se puede querer modificar una tabla añadiendo o eliminando restricciones. En
este caso el comando a utilizar será
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES” MANUAL ORACLE 9i
Sistemas Autor: Diego Sánchez Página 76
ALTER TABLE tabla {ADD | DROP} CONSTRAINT restricción;
INSERCIÓN, ACTUALIZACIÓN Y BORRADO
Una vez que tenemos definida la estructura de una tabla se pueden insertan los datos,
modificarlos o borrarlos de la tabla.
Esta tarea entra dentro de las operaciones que se realizan con el lenguaje DML. Este
lenguaje permite manipular los objetos de la base de datos, insertando, modificando y/o
borrando el contenido de las tablas. Hay que recordar que estas sentencias no son
'autoconfirmadas' y requieren de la sentencia COMMIT para que sus efectos perduren
en el tiempo, o de la sentencia ROLLBACK para deshacer los cambios efectuados.
A continuación vamos a estudiar tres de las sentencias DML más comunes.
Inserción
El comando que permite insertar filas en las tablas es el siguiente.
INSERT INTO tabla [({columna,}*)] VALUES ({expresión,}+);
Sólo especificaremos las columnas donde insertar y su orden cuando no insertemos
datos en todas ellas o no lo hagamos en el mismo orden en que definimos la tabla. La
asociación columna-valor es posicional. Los valores deben cumplir con los tipos de
datos definidos. Los valores de tipo caracter y fecha deben ir encerrados entre comillas
simples, ('').
A continuación se puede ver la inserción de filas en las tablas de ejemplo.
REM insertar filas en la tabla dep
insert into dep values (100,'Administracion','Valladolid');
insert into dep values (200,'I+D','Boecillo');
insert into dep values (300,'Produccion','Cigales');
REM insertar filas en la tabla emp
insert into emp values
(101,'Cano','Presidente',null,'3-FEB-96',450000,null,100);
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES” MANUAL ORACLE 9i
Sistemas Autor: Diego Sánchez Página 77
insert into emp values
(102,'Roncal','Director',101,'3-FEB-96',350000,null,100);
insert into emp values
(103,'Rueda','Secretario',102,'17-MAR-96',175000,null,100);
insert into emp values
(104,'Martin','Contable',102,'17-MAR-96',235000,null,100);
insert into emp values
(105,'Sanz','Comercial',101,'17-MAR-96',150000,10,100);
insert into emp values
(106,'Lopez','Comercial',101,'21-MAR-96',150000,15,100);
insert into emp values
(201,'Perez','Director',101,'4-JUN-96',350000,null,200);
insert into emp values
(202,'Sastre','Analista',201,'8-JUN-96',300000,null,200);
insert into emp values
(203,'Garcia','Programador',202,'8-JUN-96',225000,null,200);
insert into emp values
(204,'Mateo','Programador',202,'8-JUN-96',200000,null,200);
insert into emp values
(301,'Yuste','Director',101,'3-OCT-96',350000,null,300);
insert into emp values
(302,'Recio','Analista',301,'4-FEB-97',300000,null,300);
insert into emp values
(303,'Garcia','Programador',302,'4-FEB-97',210000,null,300);
insert into emp values
(304,'Santana','Programador',302,'4-FEB-97',200000,null,300);
Actualización
Otra de las operaciones más comunes es la modificación de la información almacenada
en las tablas. Para ello se utiliza el comando UPDATE cuya sintaxis se muestra a
continuación.
UPDATE tabla SET {columna = expresión,}+ [WHERE condición];
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES” MANUAL ORACLE 9i
Sistemas Autor: Diego Sánchez Página 78
Se especificará en la cláusula SET las columnas que se actualizarán y con qué valores.
La cláusula WHERE indica las filas con las que se va a trabajar. Si se omite la
actualización afectará a todas las filas de la tabla.
BORRADO
Con insertar y modificar, la otra operación que completa el trio es la de borrado de filas.
La sintaxis es la que sigue:
DELETE FROM tabla [WHERE condición];
Borrará todas las filas que cumplan la condición especificada en la cláusula WHERE. Si
esta cláusula no se fija, se borrarán todas las filas de la tabla. Aquí cabe decir que
aunque con DELETE borremos todas las filas de una tabla, no borramos la definición de
la tabla del diccionario y podemos insertar datos posteriormente en la tabla. Esta es una
diferencia con la sentencia DROP TABLE, que produce la eliminación tanto del
contenido de la tabla como de la definición de la misma.
SELECCIÓN
La recuperación de los datos en el lenguaje SQL se realiza mediante la sentencia
SELECT, seleccionar. Esta sentencia permite indicar al SGBD la información que se
quiere recuperar. Esta es la sentencia SQL, con diferencia, más habitual. La sentencia
SELECT consta de cuatro partes básicas:
1. La cláusula SELECT seguida de la descripción de lo que se desea ver, los
nombres de las columnas a seleccionar. Esta parte es obligatoria.
2. La cláusula FROM seguida de la especificación de las tablas de las que se han
de obtener los datos. Esta parte es obligatoria.
3. La cláusula WHERE seguida por un criterio de selección, una condición. Esta
parte es opcional.
4. La cláusula ORDER BY seguida por el criterio de ordenación. Esta parte es
opcional.
5. Una primera aproximación a la sintaxis de la sentencia SELECT puede
mostrarnos la siguiente expresión:
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES” MANUAL ORACLE 9i
Sistemas Autor: Diego Sánchez Página 79
Como una primera utilización de la sentencia SELECT podemos utilizarla para ver
todas las tablas que tenemos en la base de datos.
SQL> select table_name from user_tables;
TABLE_NAME
------------------------------
DEP
EMP
Un breve análisis de la sentencia anterior nos permite observar que hemos consultado
sobre la columna llamada table_name almacenada en la tabla user_tables, que es la tabla
que guarda la información sobre todas las tablas de cada usuario.
Selección de Columnas
Las columnas a seleccionar se enumeran sin más en la cláusula SELECT. Si se desea
seleccionar todas las columnas de una tabla se puede hacer enumerando a todas las
columnas o colocando un asterisco, *, en su lugar.
Cuando se consulta una base de datos, los nombres de las columnas se usan como
cabeceras de presentación. Si éste resulta demasiado largo, corto o críptico, puede
cambiarse con la misma sentencia SQL de consulta, creando un alias de columna.
SQL> select nombre "Departamento", loc "Está en" from dep;
Departamento Esta en
--------------- ----------
Administracion Valladolid
I+D Boecillo
Produccion Cigales
Cláusula FROM
La cláusula FROM define las tablas de las que se van a seleccionar las columnas.
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES” MANUAL ORACLE 9i
Sistemas Autor: Diego Sánchez Página 80
Se puede añadir al nombre de las tablas el usuario propietario de las mismas de la forma
usuario.tabla. De esta manera podemos distinguir entre las tablas de un usuario y otro.
Oracle siempre considera como prefijo el nombre del propietario de las tablas, aunque
no se lo indiquemos. De esta forma dos o más usuarios pueden tener tablas que se
llamen igual sin que surjan conflictos. Si quisiéramos acceder a las filas de la tabla dep
del usuario jperez, (ademas de tener privilegios de lectura sobre esa tabla) deberíamos
escribir la siguiente sentencia SQL:
SQL> select * from jperez.dep;
También se puede asociar un alias a las tablas para abreviar los nombres de las tablas.
Un ejemplo se puede ver en la sentencia SQL siguiente:
SQL> select d.nombre from dep d;
Cláusula WHERE
Hasta ahora hemos visto como puede utilizarse la sentencia SELECT para recuperar
todas las columnas o un subconjunto de ellas de una tabla. Pero este efecto afecta a
todas las filas de la tabla, a menos que especifiquemos algo más en la cláusula WHERE.
Es aquí donde debemos proponer la condición que han de cumplir todas las filas para
salir en el resultado de la consulta. La complejidad del criterio de búsqueda es
prácticamente ilimitada, y en él se pueden conjugar operadores de diversos tipos con
funciones de columnas, componiendo expresiones más o menos complejas.
Operadores de Comparación
Operador Operación Ejemplo
= Igualdad select * from emp where
cod_dep = 100;
!=, <>, ^= Desigualdad select * from emp where
cod_dep != 100;
< Menor que select * from emp where
cod_dep < 200;
> Mayor que select * from emp where
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES” MANUAL ORACLE 9i
Sistemas Autor: Diego Sánchez Página 81
cod_dep > 200;
<= Menor o igual que select * from emp where
cod_dep <= 200;
>= Mayor o igual que select * from emp where
cod_dep >= 200;
in Igual a cualquiera de los miembros
entre paréntesis
select * from emp where
cod_dep in (100, 300);
not in Distinto a cualquiera de los miembros
entre paréntesis
select * from emp where
cod_dep not in (200);
between Contenido en el rango
select * from emp where
cod_emp between 100 and
199;
not
between Fuera del rango
select * from emp where
cod_emp not between 100
and 199;
like
'_abc%'
Contiene la cadena 'abc' a partir del
segundo carácter y luego cualquier
cadena de caracteres
select * from emp where
nombre like 'Ma%';
Operadores de Aritméticos
Operador Operación Ejemplo
+ Suma select nombre, salario+comision from emp where
oficio='VENDEDOR';
- Resta select nombre from emp where sysdate-fecha_alta >
365;
* Producto select nombre, salario*12 from emp;
/ División select nombre, salario/31 from emp;
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES” MANUAL ORACLE 9i
Sistemas Autor: Diego Sánchez Página 82
Operadores de Cadenas de Caracteres
Operador Operación Ejemplo
|| Concatenación select nombre||oficio from emp;
Cláusula ORDER BY
Se utiliza para especificar el criterio de ordenación de la respuesta a la consulta. Por
defecto la ordenación es ascendente, aunque se puede especificar un orden descendente.
La ordenación se puede establecer sobre el contenido de columnas o sobre expresiones
con columnas. A continuación se puede ver un ejemplo de uso de la cláusula ORDER
BY en la que quiere obtener un listado de los empleados ordenado de manera
descendente por su salario y en caso de igualdad de salario, ordenado ascendentemente
por su nombre.
SQL> select nombre, salario from emp order by salario desc, nombre;
NOMBRE SALARIO
---------- ----------
Cano 450000
Perez 350000
Roncal 350000
Yuste 350000
Recio 300000
Sastre 300000
Martin 235000
Garcia 225000
Garcia 210000
Mateo 200000
Santana 200000
Rueda 175000
Lopez 150000
Sanz 150000
14 rows selected.
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES” MANUAL ORACLE 9i
Sistemas Autor: Diego Sánchez Página 83
Cláusula DISTINCT
Cuando se realiza una consulta sobre una tabla en la que se extrae información de varias
columnas, puede ocurrir que, si no incluimos la/s columna/s que forman la clave
principal, obtengamos filas repetidas en la respuesta.
Si este comportamiento no nos resulta satisfactorio podemos utilizar la cláusula
DISTINCT para eliminar las filas duplicadas obtenidas como respuesta a una consulta.
Podemos ver como funciona en el siguiente ejemplo, en el que preguntamos por los
distintos oficios de nuestros empleados.
SQL> select oficio from emp;
Sin utilizar la cláusula DISTINCT obtendremos la siguiente respuesta
Funciones
Existen en SQL muchas funciones que pueden complementar el manejo de los datos en
las consultas. Se utilizan dentro de las expresiones y actuan con los valores de las
columnas, variables o constantes.
Se pueden incluir en las clásulas SELECT, WHERE y ORDER BY.
Pueden anidarse funciones dentro de funciones. Y existe una gran variedad de funciones
para cada tipo de datos:
Aritméticas, de cadenas de caracteres, de manejo de fechas, de conversión, otras, de
grupo.
Funciones Aritméticas
Función Cometido Ejemplo Resultado
ABS(n) Calcula el valor absoluto de n. select abs(-15) from
dual; 15
CEIL(n)
Calcula el valor entero
inmediatamente superior o
igual a n.
select ceil(15.7)
from dual; 16
FLOOR(n) Calcula el valor entero
inmediatamante inferior o igual
select floor(15.7)
from dual; 15
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES” MANUAL ORACLE 9i
Sistemas Autor: Diego Sánchez Página 84
a n.
MOD(m,n) Calcula el resto resultante de
dividir m entre n.
select mod(11,4)
from dual; 3
POWER(m,n) Calcula la potencia n-esima de
m.
select power(3,2)
from dual; 9
ROUND(m,n)
Calcula el redondeo de m a n
decimales. Si n<0 el redondeo
se efectua a por la izquierda del
punto decimal.
select
round(123.456,1)
from dual;
123.5
SQRT(n) Calcula la raíz cuadrada de n. select sqrt(4) from
dual; 2
TRUNC(m,n)
Calcula m truncado a n
decimales (n puede ser
negativo).
select
trunc(123.456,1)
from dual;
123.4
SIGN(n)
Calcula el signo de n,
devolviendo -1 si n<0, 0 si n=0
y 1 si n>0.
select sign(-12)
from dual; -1
Funciones de Cadenas de Caracteres
Función Cometido Ejemplo Resultado
CHR(n)
Devuelve el
carácter
cuyo valor
codificado
es n.
select chr(65) from
dual; A
ASCII(cad)
Devuelve el
valor ascii
de cad.
select ascii('A') from
dual; 65
CONCAT(cad1,cad2) Devuelve
cad1
select
concat(concat(nombre,'
Cano es
Presidente, etc.
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES” MANUAL ORACLE 9i
Sistemas Autor: Diego Sánchez Página 85
concatenada
con cad2.
Esta
función es
esquivalente
al operador
||.
es '),oficio) from emp;
LOWER(cad)
Devuelve la
cadena cad
con todas
sus letras
convertidas
a
minúsculas.
select
lower('MinUsCulAs')
from dual;
minusculas
UPPER(cad)
Devuelve la
cadena cad
con todas
sus letras
convertidas
a
mayúsculas.
select
upper('maYuSCulAs')
from dual;
MAYUSCULAS
INITCAP(cad)
Devuelve
cad con el
primer
caracter en
mayúsculas.
select initcap('isabel')
from dual; Isabel
LPAD(cad1,n,cad2)
Devuelve
cad1 con
longitud n,
y ajustada a
la derecha,
rellenando
select lpad('P',5,'*')
from dual; ****P
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES” MANUAL ORACLE 9i
Sistemas Autor: Diego Sánchez Página 86
por la
izquierda
con cad2.
RPAD(cad1,n,cad2)
Devuelve
cad1 con
longitud n,
y ajustada a
la izquierda,
rellenando
por la
derecha con
cad2.
select rpad('P',5,'*')
from dual; P****
REPLACE(cad,ant,nue)
Devuelve
cad en la
que cada
ocurrencia
de la cadena
ant ha sido
sustituida
por la
cadena nue.
select
replace('digo','i','ie')
from dual;
diego
SUBSTR(cad,m,n)
Devuelve la
sudcadena
de cad
compuesta
por n
caracteres a
partir de la
posicion m.
select
substr('ABCDEFG',3,2)
from dual;
CD
LENGTH(cad)
Devuelve la
longitud de
cad.
select length('cadena')
from dual; 6
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES” MANUAL ORACLE 9i
Sistemas Autor: Diego Sánchez Página 87
Funciones de Manejo de Fechas
Función Cometido Ejemplo Resultado
SYSDATE
Devuelve la
fecha y hora
actuales.
select sysdate from dual; 14-MAR-
97
ADD_MONTHS(d,n)
Devuelve la
fecha d
incrementada
en n meses.
select add_months(sysdate,4)
from dual; 14-JUL-97
LAST_DAY(d)
Devuelve la
fecha del
último día
del mes de d.
select last_day(sysdate) from
dual;
31-MAR-
97
MONTHS_BETWEEN(d1,
d2)
Devuelve la
diferencia en
meses entre
las fechas d1
y d2.
select
months_between(sysdate,'01-
JAN-97') from dual;
2.43409424
NEXT_DAY(d,cad)
Devuelve la
fecha del
primer día de
la semana
cad después
de la fecha d.
select next_day(sysdate,
'sunday') from dual;
16-MAR-
97
Funciones de Conversión de Tipos
Función Cometido Ejemplo Resultado
TO_NUMBER(cad,fmto) Convierte la
cadena cad a un
select
to_number('12345') 124345
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES” MANUAL ORACLE 9i
Sistemas Autor: Diego Sánchez Página 88
número,
opcionalmente de
acuerdo con el
formato fmto.
from dual;
TO_CHAR(d, fmto)
Convierte la fecha
d a una cadena de
caracteres,
opcionalmente de
acuerdo con el
formato fmto.
select
to_char(sysdate)
from dual;
'14-MAR-
97'
TO_DATE(cad,fmto)
Convierte la
cadena cad de tipo
varchar2 a fecha,
opcionalmente de
acuerdo con el
formato fmto.
select to_date('1-
JAN-97') from dual;
01-JAN-
97
Con las fechas pueden utilizarse varios formatos. Estos formatos permiten modificar la
presentación de una fecha. En la siguiente tabla se presentan algunos formatos de fecha
y el resultado que generan.
Máscaras de Formato Numéricas
Formato Cometido Ejemplo Resultado
cc ó scc Valor del siglo. select to_char(sysdate,'cc')
from dual; 20
y,yyy ó
sy,yyy
Año con coma, con o
sin signo.
select
to_char(sysdate,'y,yyy') from
dual;
1,997
yyyy ó yyy
ó yy ó y
Año sin signo con
cuatro, tres, dos o un
dígitos.
select to_char(sysdate,'yyyy')
from dual; 1997
q Trimestre. select to_char(sysdate,'q') 1
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES” MANUAL ORACLE 9i
Sistemas Autor: Diego Sánchez Página 89
from dual;
ww ó w Número de la semana
del año o del mes.
select to_char(sysdate,'ww')
from dual; 11
mm Número del mes. select to_char(sysdate,'mm')
from dual; 03
ddd ó dd ó d Número del día del año,
del mes o de la semana.
select to_char(sysdate,'ddd')
from dual; 073
hh ó hh12 ó
hh24
La hora en formato 12h.
o 24h.
select to_char(sysdate,'hh')
from dual; 12
mi Los minutos de la hora. select to_char(sysdate,'mi')
from dual; 15
ss ó sssss
Los segundos dentro del
minuto, o desde las 0
horas.
select to_char(sysdate,'sssss')
from dual; 44159
Máscaras de Formato de Caracteres
Formato Cometido Ejemplo Resultado
syear ó
year Año en Inglés
select
to_char(sysdate,'syear) from
dual;
nineteen
ninety-seven
month o
mon
Nombre del mes o su
abreviatura de tres
letras.
select
to_char(sysdate,'month')
from dual;
march
day ó dy
Nombre del día de la
semana o su abreviatura
de tres letras.
select to_char(sysdate,'day')
from dual; friday
a.m. ó
p.m. El espacio del día.
select to_char(sysdate,'a.m.')
from dual; p.m.
b.c. ó a.d. Indicador del año
respecto al del
select to_char(sysdate,'b.c.')
from dual; a.d.
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES” MANUAL ORACLE 9i
Sistemas Autor: Diego Sánchez Página 90
nacimiento de Cristo.
Otras Funciones
Función Cometido Ejemplo Resultado
DECODE(var, val1,
cod1, val2, cod2, ...,
defecto)
Convierte el
valor de var, de
acuerdo con la
codificación.
select decode(oficio,
'Presidente', 'P', 'Director',
'D', 'X') from emp;
P, D, X, ...
GREATEST(exp1,
exp2, ...)
Devuelve el
mayor valor de
una lista.
sin ejemplo. sin
ejemplo.
LEAST(cad,fmto)
Devuelve el
menor valor de
una lista.
sin ejemplo. sin
ejemplo.
NVL(val, exp)
Devuelve la
expresión exp si
val es NULL, y
val si en otro
caso.
select
salario+nvl(comision,0)
from emp;
450000,
350000, ...
Cláusula GROUP BY
SQL nos permite agrupar las filas resultado de una consulta en conjuntos y aplicar
funciones sobre esos conjuntos de filas.
La sintaxis es la siguiente:
En la cláusula GROUP BY se colocan las columnas por las que vamos a agrupar. Y en
la cláusula HAVING se especifica la condición que han de cumplir los grupos para
pasar al resultado.
La evaluación de las diferentes cláusulas en tiempo de ejecución se efectúa en el
siguiente orden:
WHERE filtra las filas
GROUP BY crea una tabla de grupo nueva
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES” MANUAL ORACLE 9i
Sistemas Autor: Diego Sánchez Página 91
HAVING filtra los grupos
ORDER BY clasifica la salida
Un ejemplo de utilización de la selección de grupos puede ser seleccionar los empleados
agrupados por su oficio. Un primer intento de consulta es el siguiente:
SQL> select nombre, oficio from emp group by oficio;
select nombre, oficio from emp
*
ERROR at line 1:
ORA-00979: not a GROUP BY expression
Se presenta un error debido a que cuando se utiliza GROUP BY, las columnas
implicadas en el SELECT y que no aparezcan en la cláusula GROUP BY deben tener
una función de agrupamiento. En otras palabras, la columna nombre debe tener una
función de agrupamiento que actue sobre ella (max, min, sum, count, avg). Si no puede
ser así, deberá llevar dicha columna a la cláusula GROUP BY.
De nuevo, el ejemplo quedará así:
SQL> select count(nombre), oficio from emp group by oficio;
Las funciones de agrupamiento que se pueden utilizar son las siguientes.
Funciones de Agrupamiento
Función Cometido Ejemplo
COUNT(col) Cuenta el número de filas
agrupadas.
select count(nombre),oficio
from emp group by oficio;
AVG(col)
Calcula el valor medio de
todos los valores de la
columna col.
select avg(salario),oficio
from emp group by oficio;
MAX(col)
Calcula el valor máximo de
todos los valores de la
columna col.
select max(salario),oficio
from emp group by oficio;
MIN(col) Calcula el valor mínimo de
todos los valores de la
select min(salario),oficio
from emp group by oficio;
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES” MANUAL ORACLE 9i
Sistemas Autor: Diego Sánchez Página 92
columna col.
SUM(col) Calcula la suma de los valores
de la columna col.
select sum(salario), oficio
from emp group by oficio;
STDDEV(col)
Calcula la desviación típica de
los valores de la columna col
sin tener en cuenta los valores
nulos.
select stddev(salario), oficio
from emp group by oficio;
VARIANCE(col)
Calcula la varianza de los
valores de la columna col sin
tener en cuenta los valores
nulos.
select variance(salario),
oficio from emp group by
oficio;
Hay que tener en cuenta que los valores nulos no participan en el cálculo de las
funciones de conjuntos. Estas funciones se pueden utilizar con las cláusulas DISTINCT
y ALL. También se pueden utilizar aunque no realicemos agrupación alguna en la
consulta, considerando a toda la tabla como un grupo.
SQL> select count(*) from emp;
COUNT(*)
Expresiones con Sentencias Select
El resultado de cada consulta es un conjunto de filas. Y con conjuntos se pueden realizar
tres operaciones típicas: la unión, la intersección y la diferencia.
Unión, UNION
Combina todas las filas del primer conjunto con todas las filas del segundo. Cualquier
fila duplicada se reducirá a una sóla.
Intersección, INTERSECT
Examinará las filas de los conjuntos de entrada y devolverá aquellas que aparezcan en
ambos. Todas las filas duplicadas serán eliminadas antes de la generación del conjunto
resultante.
Diferencia, MINUS
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES” MANUAL ORACLE 9i
Sistemas Autor: Diego Sánchez Página 93
Devuelve aquellas filas que están en el primer conjunto pero no en el segundo. Las filas
duplicadas del primer conjunto se reducirán a una fila única antes de empezar la
comparación con el segundo conjunto.
Reglas para el Manejo de los Operadores de Conjuntos:
Pueden ser encadenados en cualquier combinación, siendo evaluados de izquierda a
derecha.
• No existe jerarquía de precedencia en el uso de estos operadores, pero puede ser
forzada mediante paréntesis.
• Pueden ser empleados con conjuntos de diferentes tablas siempre que se
apliquen las siguientes reglas:
• Las columnas son relacionadas en orden, de izquierda a derecha.
• Los nombres de las columnas son irrelevantes.
Los tipos de datos deben coincidir.
Como ejemplo podemos consultar sobre todos los nombres de empleado que trabajan
para los departamentos 100 o 300. Esto se consigue restando a todos los nombres de
empleados, aquellos que están en el departamento 200.
SQL> select nombre from emp
2 minus
3 select nombre from emp where cod_dep=200;
Eliminación
Cuando una tabla ya no es útil y no vamos a volver a necesitarla debe ser borrada. Esta
operación se puede realizar con el comando DROP TABLE.
DROP TABLE tabla [CASCADE CONSTRAINTS];
Se borra la tabla de la base de datos, borrando toda la información contenida en la tabla,
es decir, todas las filas. También se borrará toda la información que sobre la tabla
existiera en el diccionario.
Puede que si alguna columna de esta tabla a borrar sirva como clave ajena de alguna
tabla detalle, impida la eliminación de la tabla, ya que existe una restricción que
requiere de la existencia de la tabla maestra. Esto se puede areglar colocando la coletilla
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES” MANUAL ORACLE 9i
Sistemas Autor: Diego Sánchez Página 94
CASCADE CONSTRAINTS. Esto produce que las restricciones de la tabla detalle se
borren antes de borrar la tabla maestra.
La siguiente sentencia produce la eliminación de la tabla de departamentos.
SQL> drop table dep cascade constraints;
Table dropped.
Vistas
Una vista es como una ventana a través de la cual se puede consultar o cambiar
información de la tabla a la que está asociada.
Las vistas tienen la misma estructura que una tabla: filas y columnas. La única
diferencia es que sólo se almacena de ellas la definición, no los datos. Los datos que se
recuperan mediante una consulta a una vista se presentarán igual que los de una tabla.
De hecho, si no se sabe que se está trabajando con una vista, nada hace suponer que es
así. Al igual que sucede con una tabla, se pueden insertar, actualizar, borrar y
seleccionar datos en una vista. Aunque siempre es posible seleccionar datos de una
vista, en algunas condiciones existen restricciones para realizar el resto de las
operaciones sobre vistas.
¿Por qué utilizar vistas?
Las vistas pueden proporcionar un nivel adicional de seguridad. Por ejemplo, en la tabla
de empleados, cada responsable de departamento sólo tendrá acceso a la información de
sus empleados. La siguiente sentencia produce la creación de la vista de los empleados
del departamento de administración (cod_dep=100).
SQL> create view ampAdmin as
2 select * from ep where cod_dep=100;
View created.
Las vistas permiten ocultar la complejidad de los datos. Una BD se compone de muchas
tablas. La información de dos o más tablas puede recperarse utilizando una combinación
de dos o más tablas, y estas combinaciones pueden llegar a ser muy confusas. Creando
una vista como resultado de la combinación se puede ocultar la complejidad al usuario.
Las vistas ayudan a mantener unos nombres razonables.
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES” MANUAL ORACLE 9i
Sistemas Autor: Diego Sánchez Página 95
Creación de una Vista
CREATE VIEW vista [({columna ,}+] AS consulta ;
La vista se crea con las columnas que devuelve una consulta. Si no nos importa que las
columnas de la vista hereden los nombres de las columnas recuperadas en la consulta no
tenemos que especificarlos.
Borrado de una Vista
DROP VIEW vista ;
Operaciones sobre Vistas
Consultas
Las consultas sobre las vistas se tratan de igual modo que sobre las tablas.
Actualizaciones
La información puede ser actualizada en las vistas directamente o a través de las tablas
sobre las que se definen.
Existen algunas restricciones:
Borrado de filas de una tabla a través de una vista
La vista se debe crear con filas de una sola tabla; sin utilizar las cláusulas GROUP BY y
DISTINCT; y sin utilizar funciones de grupo o referencias a pseudocolumnas
(ROWNUM).
Actualización de filas a través de una vista
La vista ha de estar definida según las restricciones anteriores y además ninguna de las
columnas a actualizar debe haber sido definida como una expresión.
Inserción de filas en una tabla a través de una vista
Todas las restricciones y además todas las columnas obligatorias de la tabla asociada
deben estar presentes en la vista.
Vistas de más de una Tabla
Se pueden definir vistas sobre más de una tabla. Por ejemplo, sobre la combinación de
dos tablas.
Podemos querer ver todos los datos de los empleados del departamento Administración.
SQL> create view depAdmin (cod_emp, nombre_emp, nombre_dep, dir)
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES” MANUAL ORACLE 9i
Sistemas Autor: Diego Sánchez Página 96
2 as select e.cod_emp, e.nombre, d.nombre, d.loc
3 from emp e, dep d
4 where e.cod_dep=d.cod_dep and d.nombre='Administracion';
SQL> select * from depAdmin;
COD_EMP NOMBRE_EMP NOMBRE_DEP DIR
---------- ---------- --------------- ----------
101 Cano Administracion Valladolid
102 Roncal Administracion Valladolid
103 Rueda Administracion Valladolid
104 Martin Administracion Valladolid
105 Sanz Administracion Valladolid
106 Lopez Administracion Valladolid
6 rows selected.
Lo Más SQL*Plus
En este apartado vamos a profundizar un poco en las otras posibilidades que nos brinda
SQL*Plus en los:
• ficheros de comandos, y
• generación de informes,
Ficheros de Comandos
Aunque ya vimos una introducción a los ficheros de comandos en anteriormente, vamos
ahora a profundizar un poco en las posibilidades que nos ofrece SQL*Plus.
En un fichero de comandos se pueden incluir:
• líneas de comentarios,
• líneas de ejecución,
• líneas de comandos SQL, y
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES” MANUAL ORACLE 9i
Sistemas Autor: Diego Sánchez Página 97
• líneas de comandos SQL*Plus.
Líneas de Comentarios
Se pueden introducir comentarios en una archivo de comandos de tres maneras:
• Utilizando del comando REM del SQL*Plus.
• Utilizando los delimitadores de comentario de SQL /* y */.
• Utilizando los símbolos de comentario PL/SQL "__".
Líneas de Ejecución
Constan de una única barra inclinada, "/", y se introducen a continuación de cada
sentencia SQL indicando su ejecución.
Sustituyen al punto y coma, ";" al final de las sentencias SQL.
Líneas de Comandos SQL
Se puede introducir cualquiera de los comandos SQL enumerados en este curso, y se
ejecutarán de manera secuencial.
Se permite el anidamiento de los ficheros de comandos.
Líneas de Comandos SQL*Plus
SQL*Plus aporta una serie de posibilidades al lenguaje SQL que le acerca un poco mas
a lo que entendemos como un lenguaje de programación.
Se pueden definir constantes y variables, capturar datos del teclado, introducir
parámetros en la llamada de un archivo de comandos, y alguna cosa más.
Variables de Usuario
Se pueden definir Variables de usuario con el comando DEFINE
DEFINE Variable = valor
Para borrar una variable se utiliza el comando UNDEFINE
UNDEFINE variable
Como ejemplo se puede definir la variable OFICIO
SQL> define oficio=analista
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES” MANUAL ORACLE 9i
Sistemas Autor: Diego Sánchez Página 98
Variables de Sustitución
Las variables de sustitución son un nombre de variable de usuario con el símbolo &
delante. Cuando SQL*Plus detecta una variable de sustitución en un comando, ejecuta
el comando tomando el valor de la variable.
Esto se puede ver en el ejemplo, donde preguntamos por los empleados que son
analistas:
SQL> define oficio=Analista
SQL> define tabla=emp
SQL> select nombre, oficio from &tabla where oficio='&oficio';
old 1: select nombre, oficio from &tabla where oficio='&oficio'
new 1: select nombre, oficio from emp where oficio='Analista'
NOMBRE OFICIO
---------- -----------
Sastre Analista
Recio Analista
Captura de Datos desde el Terminal
En muchas ocasiones es necesario recoger datos desde un terminal, que luego serán
utilizados en el archivo de comandos. Para realizarlo se pueden utilizar dos medios: las
variables de sustitución o los parámetros en la línea de comandos.
Cuando SQL*Plus reconoce una variable de sustitución sin valor asignado se lo pide al
usuario:
SQL> select * from dep where nombre='&nombredep';
Enter value for nombredep: I+D
old 1: select * from dep where nombre='&nombredep'
new 1: select * from dep where nombre='I+D'
COD_DEP NOMBRE LOC
---------- --------------- ----------
200 I+D Boecillo
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES” MANUAL ORACLE 9i
Sistemas Autor: Diego Sánchez Página 99
Si se desea que SQL*Plus pregunte por el valor de la variable al usuario sólo la primera
vez que se encuentra con ella, se colocará "&&" delante de la variable de usuario.
También se pueden utilizar hasta nueve parámetros en la línea de comandos cuando se
llama a la ejecución de un archivo de comandos.
En el archivo de comandos nos referiremos a los parámetros con las variables &1, &2,
... ,&9 que se corresponden posicionalmente con ellos.
Desde el archivo de comandos se puede hacer referencia a los parámetros cualquier
número de veces y en cualquier orden.
Comandos de Comunicación con el Usuario
Los siguientes comandos proporcionan un medio de comunicación con el usuario:
• PROMPT: presenta un mensaje en la pantalla.
• ACCEPT: Solicita un valor y lo almacena en la variable de usuario que se
especifíque.
• PAUSE: Obliga al usuario a pulsar Return despué de leer un mensaje.
Para ver cómo funcionan sirve el siguiente ejemplo:
prompt Buscar los datos de un empleado.
Pause Pulse Return.
Accept nombremp prompt 'Empleado? '
Select * from emp where nombre='&nombremp';
Otros Comandos
Los siguientes comandos también se pueden incluir en un archivo de comandos:
• CONNECT: para conectarse como otro usuario.
• HELP: para obtener ayuda en línea.
• EXIT: para dejar SQL*PLus y salir al Sistema Operativo.
• DESCRIBE ó DESC: para obtener información sobre la estructura de una tabla.
• HOST o !: para ejecutar un comando del Sistema Operativo.
PRIVILEGIOS DEL SISTEMA
Los roles de sistema se utilizan para distribuir la disponibilidad de los comandos del
sistema utilizados para gestionar la BD. Los privilegios más comunes están en la
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES” MANUAL ORACLE 9i
Sistemas Autor: Diego Sánchez Página 100
siguiente tabla. En ella se distinguen entre privilegios de manejo de objetos y de gestión
de la BD. La palabra clave ANY significa que ese usuario tiene el privilegio para todos
los esquemas en la BD. Hay que hacer notar que ANY y PUBLIC no son sinónimos.
Privilegio Capacidades
Manejo de Objetos ...
CREATE ANY
INDEX Crear cualquier índice.
CREATE [PUBLIC]
SYNONYM Crear sinónimos [públicos].
CREATE [ANY]
TABLE
Crear tablas. El usuario debe tener cuota en el espacio de
tablas, o ha de tener asignado el privilegio UNLIMITED
TABLESPACE.
CREATE [ANY]
VIEW Crear vistas.
ALTER ANY INDEX Alterar cualquier índice.
ALTER ANY TABLE Alterar cualquier tabla
DROP ANY INDEX Borrar cualquier índice.
DROP ANY
SYNONYM Borrar cualquier sinónimo.
DROP PUBLIC
SYNONYM Borrar sinónimos públicos.
DROP ANY VIEW Borrar cualquier vista.
DROP ANY TABLE Borrar cualquier tabla.
SELECT ANY
TABLE Efectuar selecciones de cualquier tabla o vista.
INSERT ANY TABLE Insertar en cualquier tabla o vista.
DELETE ANY
TABLE Borrar filas de cualquier tabla o vista, y también truncar.
ALTER SESSION Alterar los parámetros de la sesión.
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES” MANUAL ORACLE 9i
Sistemas Autor: Diego Sánchez Página 101
CREATE SESSION Conectarse a la BD.
Gestión de la BD ...
CREATE PROFILE Crear perfiles de usuario.
CREATE ROLE Crear roles.
CREATE
ROLLBACK
SEGMENT
Creación de segmentos de rollback.
CREATE
TABLESPACE Crear espacios de tablas.
CREATE USER Crear usuarios.
ALTER PROFILE Alterar perfiles existentes.
ALTER ANY ROLE Alterar cualquier rol.
ALTER ROLLBACK
SEGMENT Alterar segmentos de rollback.
ALTER
TABLESPACE Alterar espacios de tablas.
ALTER USER Alterar usuarios.
DROP PROFILE Borrar un perfil existente.
DROP ANY ROLE Borrar cualquier rol.
DROP ROLLBACK
SEGMENT Borrar un segmento de rollback existente.
DROP TABLESPACE Borrar un espacio de tablas.
DROP USER Borrar un usuario. Añadir CASCADE si el usuario posee
objetos.
ALTER DATABASE Permite una sentencia ALTER DATABASE.
GRANT ANY
PRIVILEGE Otorgar cualquiera de estos privilegios.
GRANT ANY ROLE Otorgar cualquier rol a un usario.
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES” MANUAL ORACLE 9i
Sistemas Autor: Diego Sánchez Página 102
UNLIMITED
TABLESPACE Puede usar una cantidad de almacenamiento ilimitada.
DROP PROFILE Borrar un perfil existente.
Los privilegios se pueden agrupar en roles, para así satisfacer a distintos tipos de
usuarios. En la instalación se crea un rol llamado OSOPER que sirve para los operarios
de la máquina donde está la BD y permite realizar copias de seguridad en frio y en
caliente. Los privilegios de OSOPER son STARTUP, SHUTDOWN, ALTER
DATABASE OPEN/MOUNT, ALTER DATABASE BACKUP, ARCHIVE LOG,
RECOVER y RESTRICTED SESSION.
Se pueden crear nuevos roles. Por ejemplo, podemos crear un rol llamado
creadorCuentas que sólo pueda crear usuarios y no pueda realizar ninguna otra
operación de DBA. Las sentencias que permiten hacer esto son las siguientes:
SVRMGR> create role creadorCuentas;
Statement processed.
SVRMGR> grant create session, create user to creadorCuentas;
Statement processed.
Oracle incluye otros tres roles de sistema: CONNECT, RESOURCE y DBA, cuyos
privilegios son:
Rol Privilegios
CONNECT alter session, create session, create cluster, create table, create
view, create synonym, create sequence, create database link
RESOURCE create cluster, create table, create procedure, create sequence,
create trigger
DBA todos los privilegios de sistema con la opcion with admin option
Protegidos por passwords
Los passwords puede proteger tanto cuentas como roles. Los passwords se fijan a la
hora de la creación de ambos y se pueden modificar con los comandos ALTER USER y
ALTER ROLE, respectivamente.
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES” MANUAL ORACLE 9i
Sistemas Autor: Diego Sánchez Página 103
No es necesario asignar un password a un rol, pero si tiene uno debe ser especificado
por el usuario cuando se asigna ese rol.
Gestionando Privilegios
Los privilegios dan acceso a los usuarios a los datos que no poseen. Los roles con
grupos de privilegios que facilitan la administración de los privilegios. Pero los
privilegios se pueden manejar de manera explícita en algunas circunstancias.
Los privilegios se crean via el comando GRANT y son registrados en el diccionario de
datos.
Los privilegios que pueden otorgarse sobre objetos son los siguientes:
Privilegio Capacidades Otorgadas
SELECT Puede consultar a un objeto.
INSERT
Puede insertar filas en una tabla o vista. Puede especificarse
las columnas donde se permite insertar dentro de la tabla o
vista.
UPDATE
Puede actualizar filas en una tabla o vista. Puede especificarse
las columnas donde se permite actualizar dentro de la tabla o
vista.
DELETE Puede borrar filas dentro de la tabla o vista.
ALTER Puede alterar la tabla.
INDEX Puede crear índices de una tabla.
REFERENCES Puede crear claves ajenas que referencie a esta tabla.
EXECUTE Puede ejecutar un procedimieto, paquete o función.
Haciendo un privilegio PUBLIC lo hace disponible a todos los usuarios de la BD.
Aunque los privilegios se puedan otorgar individualmente, no resulta razonable basar la
gestión de los privilegios en su asignación individual. La gestión de los privilegios se
facilita con la utilización de los roles. A continuación se puede ver como se crean dos
roles, el ALUMNOS que permite establecer una sesión, y el rol INSERTA_PEREZ que
permite insertar y seleccionar en la tabla emp de perez:
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES” MANUAL ORACLE 9i
Sistemas Autor: Diego Sánchez Página 104
SVRMGR> create role alumnos;
Statement processed.
SVRMGR> grant create session to alumnos;
Statement processed.
SVRMGR> create role inserta_perez;
Statement processed.
SVRMGR> grant select, insert on perez.emp to inserta_perez;
Statement processed.
Se pueden asignar roles a roles:
SVRMGR> grant usuarios to inserta_perez;
Los roles pueden asignarse a los usuarios. Así, podemos asignar el rol
INSERTA_PEREZ al usuario alu20:
SVRMGR> grant inserta_perez to alu20;
Los roles se pueden denegar con el comando REVOKE.
Listar Privilegios Otorgados
La información de los privilegios otorgados se almacena en el diccionario de datos.
Estos datos son accesibles a través de las siguientes vistas del diccionario de datos:
Vista Contenidos
DBA_ROLES Nombres de los roles y su estado del password.
DBA_ROLES_PRIVS Usuarios a los que han sido otorgados roles.
DBA_SYS_PRIVS Usuarios a los que han sido otorgados privilegios del
sistema.
DBA_TAB_PRIVS Usuarios a los que han sido otorgados privilegios sobre
objetos.
DBA_COL_PRIVS Usuarios a los que han sido otorgados privilegios sobre
columnas de tablas.
ROLE_ROLE_PRIVS Roles que han sido otorgados a otros roles.
ROLE_SYS_PRIVS Privilegios de sistema que han sido otorgados a roles.
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES” MANUAL ORACLE 9i
Sistemas Autor: Diego Sánchez Página 105
ROLE_TAB_PRIVS Privilegios de tabla que han sido otorgados a roles.
AUDITORÍA DE SEGURIDAD
El SGBD Oracle tiene la capacidad de auditar todas las acciones que tienen lugar en la
BD. Se pueden auditar tres tipos de acciones:
• intentos de entrada en cuentas de la BD.
• accesos a los objetos de la BD.
• acciones sobre la BD.
La BD registra todos los intentos de acción, tanto los exitosos como los infructuosos,
aunque es un parámetro configurable.
Para habilitar la capacidad de auditoría, se debe fijar el parámetro AUDIT_TRAIL en el
fichero init.ora. Los registros de auditoría se almacenan en la tabla SYS.AUD$ o bien
su gestión se deja al SO. Cuando se decide utilizar la tabla SYS.AUD$ esta debe
revisarse periódicamente, por si hiciera falta truncarla debido a que su aumento de
tamaño puede causar problemas de espacio en el tablespace SYSTEM. Los valores del
parámetro AUDIT_TRAIL son los que se exponen en la siguiente tabla:
Valor Descripción
NONE Deshabilita la auditoría
BD Habilita la auditoría, escribiendo en la tabla SYS.AUD$.
OS Habilita la auditoría, dejando al SO su gestión.
PL/SQL
Lenguaje de programación incrustado en Oracle y PostgreSQL.
El PL/SQL soporta todas las consultas y manipulación de datos que se usan en SQL,
pero incluye nuevas características:
• El manejo de variables.
• Estructuras modulares.
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES” MANUAL ORACLE 9i
Sistemas Autor: Diego Sánchez Página 106
• Estructuras de control de flujo y toma de decisiones.
• Control de excepciones.
• El lenguaje PL/SQL está incorporado en:
• Servidor de la base de datos.
• Herramientas de Oracle (Forms, Reports, ...).
En un entorno de base de datos los programadores pueden construir bloques PL/SQL
para utilizarlos como procedimientos o funciones, o bien pueden escribir estos bloques
como parte de scripts SQL*Plus.
Los programas o paquetes de PL/SQL se pueden almacenar en la base de datos como
otro objeto, y todos los usuarios que estén autorizados tienen acceso a estos paquetes.
Los programas se ejecutan en el servidor para ahorrar recursos a los clientes.
Tipos de datos Oracle/PLSQL
A continuación se muestra un listado de los tipos de datos disponibles en Oracle y
PLSQL. Hemos tratado de diferenciar los tipos de datos entre las versiones de Oracle 8i
y Oracle 9i.
Tipo de dato / Sintaxis
Oracle 8i Oracle 9i Descripción
dec(p, e) La precisión máxima es de 38 dígitos.
Donde p es la precisión y e la escala.
Por ejemplo: dec(3,1) es un número que tiene 2 dígitos antes del decimal y un dígito después del decimal.
decimal(p, e) La precisión máxima es de 38 dígitos.
Donde p es la precisión y e la escala.
Por ejemplo: decimal(3,1) es un número que tiene 2 dígitos antes
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES” MANUAL ORACLE 9i
Sistemas Autor: Diego Sánchez Página 107
del decimal y un dígito después del decimal.
double precision
float La precisión máxima es de 38 decimales.
int
integer
numeric(p, e) La precisión máxima es de 38 dígitos.
Donde p es la precisión y e la escala.
Por ejemplo: numeric(7,2) es un número que tiene 5 dígitos antes del decimal y 2 dígitos después del decimal.
number(p, e) La precisión máxima es de 38 dígitos.
Donde p es la precisión y e la escala.
Por ejemplo: number(7,2) es un número que tiene 5 dígitos antes del decimal y 2 dígitos después del decimal.
real
smallint
char (tamaño) Hasta 32767 bytes en PLSQL.
Hasta 2000 bytes en Oracle 8i/9i.
Donde tamaño es el número de caracteres a almacenar. Son cadenas de ancho fijo. Se rellena con espacios.
varchar2 (tamaño)
Hasta 32767 bytes en PLSQL.
Hasta 4000 bytes en Oracle 8i/9.i
Donde tamaño es el número de caracteres a almacenar. Son cadenas de ancho variable.
long Hasta 2 gigabytes. Son cadenas de ancho variable.
raw Hasta 32767 bytes en PLSQL. Son cadenas binarias de ancho
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES” MANUAL ORACLE 9i
Sistemas Autor: Diego Sánchez Página 108
Hasta 2000 bytes en Oracle 8i/9i. variable.
long raw Hasta 2 gigabytes. Son cadenas binarias de ancho variable.
date Una fecha entre el 1 de Enero de 4712 A.C. y el 31 de Diciembre de 9999 D.C.
timestamp (fractional seconds precision)
No soportado por Oracle 8i.
fractional seconds precision debe ser un número entre 0 y 9. (El valor por defecto es 6)
Incluye año, mes día, hora, minutos y segundos.
Por ejemplo: timestamp(6)
timestamp (fractional seconds precision) with time zone
No soportado por Oracle 8i.
fractional seconds precision debe ser un número entre 0 y 9. (El valor por defecto es 6)
Incluye año, mes día, hora, minutos y segundos; con un valor de desplazamiento de zona horaria.
Por ejemplo: timestamp(5) with time zone
timestamp (fractional seconds precision) with local time zone
No soportado por Oracle 8i.
fractional seconds precision debe ser un número entre 0 y 9. (El valor por defecto es 6)
Incluye año, mes día, hora, minutos y segundos; con una zona horaria expresada como la zona horaria actual.
Por ejemplo: timestamp(4) with local time zone
interval year (year precision) to month
No soportado por Oracle 8i.
year precision debe ser un número entre 0 y 9. (El valor por defecto es 2)
Período de tiempo almacenado en años y meses.
Por ejemplo: interval year(4) to month
interval day (day precisionel
Datos binarios de ancho fijo.
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES” MANUAL ORACLE 9i
Sistemas Autor: Diego Sánchez Página 109
bloque en el fichero de la base de datos;
RRRR es la fila del bloque; FFFFF es el fichero de la base de datos.
Cada registro de la base de datos tiene una dirección física o rowid.
urowid [tamaño]
Hasta 2000 bytes. Rowid universal. Donde tamaño es opcional.
boolean Válido en PLSQL, este tipo de datos no existe en Oracle 8i/9i.
nchar (tamaño)
Hasta 32767 bytes en PLSQL. Hasta 2000 bytes en Oracle 8i/9i.
Donde tamaño es el número de caracteres a almacenar. Cadena NLS de ancho fijo.
nvarchar2 (tamaño)
Hasta 32767 bytes en PLSQL. Hasta 4000 bytes en Oracle 8i/9i.
Donde tamaño es el número de caracteres a almacenar. Cadena NLS de ancho variable.
bfile Hasta 4 gigabytes. Localizadores de archivo apuntan a un objeto binario de sólo lectura fuera de la base de datos.
blob Hasta 4 gigabytes. Localizadores LOB apuntan a un gran objeto binario dentro de la base de datos.
clob Hasta 4 gigabytes. Localizadores LOB apuntan a un gran objeto de caracteres dentro de la base de datos.
nclob Hasta 4 gigabytes. Localizadores LOB apuntan a un gran objeto NLS de caracteres dentro de la base de datos.
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES” MANUAL ORACLE 9i
Sistemas Autor: Diego Sánchez Página 110
Identificadores
Un identificador es un nombre que se le pone a un objeto que interviene en un
programa, que puede ser variable, constante, procedimientos, excepciones, cursores...
Debe tener un máximo de 30 caracteres que empiece siempre por una letra, y puede
contener letras, números, los símbolos $, #, _, y mayúsculas y minúsculas
indiferentemente. Los identificadores no pueden ser palabras reservadas (SELECT,
INSERT, DELETE, UPDATE, DROP).
Operadores
(suma) - (resta)
• (multiplicación)
/ (división)
• o (exponente)
Operador de asignación := (dos puntos + igual)
Operadores aritméticos
Operadores relacionales o de comparación
= (igual a)
<>, != (distinto de)
< (menor que)
> (mayor que)
>= (mayor o igual a)
<= (menor o igual a)
Operador de concatenación
||
Comentarios /* comentario de dos o más líneas */
-- comentario de una línea
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES” MANUAL ORACLE 9i
Sistemas Autor: Diego Sánchez Página 111
Variables Las variables son nombres para procesar los elementos de los datos. Declaración:
Nombre_variable tipo [NOT NULL] [:= valor | DEFAULT valor]
:= y DEFAULT son lo mismo. Si ponemos NOT NULL es obligatorio inicializar la
variable.
Ejemplos:
num_dep NUMBER(2) NOT NULL :=20
num_emple VARCHAR2(15) DEFAULT ‘Pedro’
También se puede definir una variable a partir de un campo mediante los atributos
%TYPE y %ROWTYPE, con esto damos el tipo y longitud a la variable de otra
variable u objeto ya definido.
%TYPE es la que se utiliza normalmente, %ROWTYPE es para claves de registro. El
NOT NULL y el valor inicial no se heredan, sólo el tipo de dato y longitud de ese dato.
Por ejemplo:
num_dep emple.dept_no%TYPE
Constantes
Las constantes son como las variables pero no puede modificarse su valor. Se declaran
de la siguiente manera:
nombre_constante CONSTANT tipo_de_dato := valor
Por ejemplo, el IVA es un valor fijo, y para declararlo lo haríamos de la siguiente
manera:
Imp_iva constant number(2,2) := 12,5
BLOQUE PL/SQL
Bloque es la unidad de estructura básica en los programas PL/SQL. Supone una mejora
en el rendimiento, pues se envían los bloques completos al servidor para ser procesados
en lugar de enviar cada secuencia SQL.
Partes de un bloque:
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES” MANUAL ORACLE 9i
Sistemas Autor: Diego Sánchez Página 112
• Zona de declaraciones: zona opcional. Se declaran los objetos locales (variables,
constantes...).
• Zona de instrucciones: zona obligatoria.
• Zona de tratamiento de excepciones: zona opcional. Se tratan excepciones en el
programa.
Forma de crear un bloque:
[ DECLARE | IS / AS ]
<declaraciones>
BEGIN
<instrucciones>
[ EXCEPTION ]
<tratamiento de excepciones>
END;
/
La barra "/" siempre se pone al final para ejecutar el bloque.
TIPOS DE BLOQUES
• Anónimo (sin nombre)
Siempre comienza con DECLARE o directamente con BEGIN.
Ejemplo 1:
BEGIN
DBMS_OUTPUT.PUT_LINE (‘Hola’);
END;
/
DBMS_OUTPUT es un depurador de Oracle que sirve para visualizar cualquier cosa,
pero antes lo debemos tener activado:
SET SERVEROUTPUT ON;
Ejemplo 2:
DECLARE
v_precio number;
BEGIN
select pvp into v_precio
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES” MANUAL ORACLE 9i
Sistemas Autor: Diego Sánchez Página 113
from tarticulos
where codigo=100;
dbms_output.put_line (v_precio);
END;
/
Ejemplo 3:
El siguiente bloque anónimo nos muestra la fecha actual con el formato “Martes, 18 de
marzo de 1998, a las 13:04:55”.
DECLARE
fecha date;
BEGIN
select sysdate into fecha from dual;
dbms_output.put_line (to_char(fecha,
'day", "dd" de "month" de "yyyy", a las "hh24:mi:ss'));
END;
/
• Subprogramas (tienen nombre)
Se pueden almacenar en la base de datos.
Existen dos tipos de subprogramas: Procedimientos (PROCEDURE) y Funciones
(FUNCTION)
• Procedimientos en PLSQL
Los procedimientos tienen la utilidad de fomentar la reutilización de programas que se
usan comúnmente. Una vez compilado, queda almacenado en la base de datos (por eso
es también llamado 'Procedimietno almacenado') y puede ser utilizado por múltiples
aplicaciones.
La sintaxis es la siguiente
CREATE [OR REPLACE] PROCEDURE nombre_procedimiento
[nombre_parametro modo tipodatos_parametro ]
IS | AS
bloque de código
Donde "modo" puede contener los valores IN, OUT, IN OUT. Por defecto tiene el valor
IN si no se pone nada. IN indica que el parámetro es de entrada y no se podrá modificar.
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES” MANUAL ORACLE 9i
Sistemas Autor: Diego Sánchez Página 114
OUT indica que el parámetro es de salida con lo que el procedimiento devolverá un
valor en él. IN OUT indica que el parámetro es de entrada/salida. Con lo que al llamar
al procedimiento se le dará un valor que luego podrá ser modificado por el
procedimiento y devolver este nuevo valor.
"tipodatos_parametro indica el tipo de datos que tendrá el parámetro según lo indicado
en Tipos de datos Oracle/PLSQL
Para borrar un procedimiento almacenado de la base de datos
DROP PROCEDURE nombre_procedimiento
Para utilizar un procedimiento almacenado de la base de datos
Simplemente se lo llama desde un bloque anónimo (desde la línea de comandos),
previamente habiendo inicializado el/los parametro/s (en caso que existan).
DECLARE
nombre_parametro tipodatos_parametro;
BEGIN
nombre_parametro tipodatos_parametro := valor_de_inicializacion;
nombre_procedimiento (nombre_parametro => nombre_parametro);
END;
/
FUNCIONES EN PL/SQL
Una función es un bloque de código PL/SQL que tiene las mismas características que
un procedimiento almacenado. La diferencia estriba que una función devuelve un valor
al retornar. Al devolver un valor puede ser llamada como parte de una expresión.
La sintaxis sería
CREATE [OR REPLACE] FUNCTION nombre_función
[nombre_parámetro modo tipodatos_parametro ]
RETURN tipodatos_retorno IS | AS
bloque de código
Donde "modo" puede contener los valores IN, OUT, IN OUT. Por defecto tiene el valor
IN si no se pone nada. IN indica que el parámetro es de entrada y no se podrá modificar.
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES” MANUAL ORACLE 9i
Sistemas Autor: Diego Sánchez Página 115
OUT indica que el parámetro es de salida con lo que el procedimiento devolverá un
valor en él. IN OUT indica que el parámetro es de entrada/salida. Con lo que al llamar
al procedimiento se le dará un valor que luego podrá ser modificado por el
procedimiento y devolver este nuevo valor. Sin embargo, en este caso solo tendría
sentido (por el concepto de función en sí mismo) declarar parámetros del tipo IN y
devolver el valor como retorno de la función.
"tipodatos_parametro" y "tipodatos_retorno" indican el tipo de datos que tendrá el
parámetro y el valor de retorno de la función respectivamente según lo indicado en
Tipos de datos Oracle/PLSQL
Para borrar una función de la base de datos
DROP FUNCTION nombre_función
Los procedimientos y funciones se pueden agrupar en unas estructuras llamadas
Paquetes.
TRIGGERS
Un trigger o disparador se ejecuta ante un determinado evento de manera automática.
Generalmente se utilizan para garantizar que una determinada acción siempre se realiza
después de realizar una tarea determinada. Se debe tener cuidado con este tipo de
estructuras puesto que un uso excesivo puede dar lugar a dependencias difíciles de
mantener. Además se deben tener muy claros las restricciones de integridad para evitar
problemas.
La sintaxis sería
A nivel de sentencia:
CREATE [OR REPLACE] TRIGGER nombre_trigger
momento_ejecución evento [evento] ON nombre_tabla
bloque PLSQL;
A nivel de registro:
CREATE [OR REPLACE] TRIGGER nombre_trigger
momento_ejecución evento [evento] ON nombre_tabla
[REFERENCING OLD AS old | NEW AS new]
FOR EACH ROW
[WHEN condición]
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES” MANUAL ORACLE 9i
Sistemas Autor: Diego Sánchez Página 116
bloque PLSQL;
Donde "momento_ejecución" indica cuando se ejecuta el trigger automáticamente.
Puede contener los valores BEFORE ó AFTER.
"evento" indica la operación que provoca la ejecución de este bloque. Puede contener
los valores INSERT, UPDATE ó DELETE.
"old" indica el nombre que se le da al registro con los valores antiguos que se tenían
antes de la ejecución de la operación que activó el trigger. Mientras que "new" indica el
valor que tiene actualmente después de dicha operación.
Con la cláusula "WHEN" se puede indicar una restricción que haga que el trigger se
ejecute o no. Por ejemplo se puede indicar que el trigger se ejecute solo si el campo
"campo1" de la tabla tiene un valor mayor que 50.
La cláusula "FOR EACH ROW" indica que el trigger es a nivel de registro.
Para eliminar un trigger:
DROP TRIGGER nombre_trigger
EJECICIOS ORACLE 9i
Ejercitico N.-1
CREACIÓN DE USUARIOS
SQL> CREATE USER DSANCHEZ
2 IDENTIFIED BY DIEGO
3 DEFAULT TABLESPACE SEPTIMO3;
Usuario creado.
SQL> GRANT CONNECT, RESOURCE TO DSANCHEZ;
SQL> CONNECT DSANCHEZ/DIEGO@SEPTIMO
Conectado
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES” MANUAL ORACLE 9i
Sistemas Autor: Diego Sánchez Página 117
CREACIÓN DE TABLAS
SQL> CREATE TABLE UNO
2 (A NUMBER(3)
3 , B VARCHAR (30));
Tabla creada.
INSERTAR DATOS A LAS TABLAS
SQL> INSERT INTO UNO VALUES (1,'LUIS');
SQL> INSERT INTO UNO VALUES (2,'CARLOS');
SQL> COMMIT;
CONSULTAS A LA TABLA
SQL> SELECT * FROM UNO;
A B
--------- ------------------------------
1 LUIS
2 CARLOS
Ejercicio N.- 2
CREACIÓN DE USUARIOS
SQL> CREATE USER US2
2 IDENTIFIED BY PUS2
3 PASSWORD EXPIRE
4 ACCOUNT LOCK;
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES” MANUAL ORACLE 9i
Sistemas Autor: Diego Sánchez Página 118
Usuario creado.
MODIFICAR USUARIO
SQL> ALTER USER US2
2 ACCOUNT UNLOCK;
Usuario modificado.
INGRESAR DEL USUARIO
SQL> CONNECT US2/DIEGO@SEPTIMO;
Conectado.
Ejercicio N. - 3
CREAR USUARIO
SQL> CREATE USER INVENTARIO2
2 IDENTIFIED BY US2
3 DEFAULT TABLESPACE SEPTIMO2
4 ACCOUNT UNLOCK;
Usuario creado.
INGRESAR AL USUARIO
CONNECT SYSTEM/MASTER@SEPTIMO;
Conectado.
SQL> CONNECT INVENTARIO2/US2@SEPTIMO;
Conectado.
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES” MANUAL ORACLE 9i
Sistemas Autor: Diego Sánchez Página 119
CREAR TABLAS
SQL> CREATE TABLE PROVEEDORES (
2 COD_PROV NUMBER(5) CONSTRAINT PK_PROVEEDOR PRIMARY KEY,
3 NOM_PROV VARCHAR(40) NOT NULL,
4 DIR_PROV VARCHAR(50),
5 TEL_PROV CHAR(9),
6 RUC_PROV CHAR(13));
Tabla creada.
SQL> CREATE TABLE CLIENTES(
2 COD_CLI NUMBER(5) CONSTRAINT PK_CLIENTES PRIMARY KEY,
3 NOM_CLI VARCHAR(40) NOT NULL,
4 DIR_CLI VARCHAR(50),
5 TEL_CLI CHAR(9),
6 RUC_CLI CHAR(13));
Tabla creada.
SQL> CREATE TABLE CATEGORIAS(
2 COD_CAT NUMBER(3) CONSTRAINT PK_CATEGORIAS PRIMARY KEY,
3 NOM_CAT VARCHAR(30) NOT NULL);
Tabla creada.
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES” MANUAL ORACLE 9i
Sistemas Autor: Diego Sánchez Página 120
SQL> CREATE TABLE PRODUCTOS(
2 COD_PROD NUMBER(10) CONSTRAINT PK_PRODUCTO PRIMARY KEY,
3 NOM_PROD VARCHAR(200) NOT NULL,
4 EXIS_PROD NUMBER(10) CONSTRAINT CH_EXIST CHECK(EXIS_PROD>0),
5 COST_PROD NUMBER(10,2) NOT NULL,
6 PRE_VENT NUMBER (10,2) NOT NULL,
7 COD_CAT NUMBER(3) CONSTRAINT FK_CATEGORIA REFERENCES CATEGORIAS);
Tabla creada.
SQL> CREATE TABLE COMPRAS(
2 NUM_COM NUMBER(10) CONSTRAINT PK_COMPRAS PRIMARY KEY,
3 FECH_COM DATE DEFAULT SYSDATE,
4 TOT_COM NUMBER (10,2),
5 COD_PROV NUMBER(5) CONSTRAINT FK_PROVEEDOR REFERENCES PROVEEDORES
6 );
Tabla creada.
SQL> CREATE TABLE VENTAS(
2 NUM_FAC NUMBER(10) CONSTRAINT PK_VENTAS PRIMARY KEY,
3 FECH_VEN DATE DEFAULT SYSDATE,
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES” MANUAL ORACLE 9i
Sistemas Autor: Diego Sánchez Página 121
4 SUBT_VEN NUMBER (10,2) NOT NULL,
5 DES_VEN NUMBER (10,2) NOT NULL,
6 IVA_POR NUMBER (10,2) NOT NULL,
7 IVA_VAL NUMBER (10,2) NOT NULL,
8 TOT_VEN NUMBER (10,2) NOT NULL,
9 COD_CLI NUMBER(5) CONSTRAINT FK_CLIENTES REFERENCES CLIENTES
10 );
Tabla creada.
SQL> CREATE TABLE DETALLE_COMPRAS(
2 COD_DET_COM NUMBER (10) CONSTRAINT PK_DET_COM PRIMARY KEY,
3 CANT_COM NUMBER (10) CONSTRAINT CH_CANTCONP CHECK (CANT_COM >0),
4 COST_COM NUMBER (10,2) CONSTRAINT CH_COSTCOM CHECK (COST_COM >0),
5 NUM_COM NUMBER (10) CONSTRAINT FK_COMPRAS REFERENCES COMPRAS,
6 COD_PROD NUMBER (10) CONSTRAINT FK_PROCOMP REFERENCES PRODUCTOS
7 );
Tabla creada.
SQL> CREATE TABLE DETALLE_VENTAS (
2 COD_DET_VEN NUMBER (10) CONSTRAINT PK_DET_VEN PRIMARY KEY,
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES” MANUAL ORACLE 9i
Sistemas Autor: Diego Sánchez Página 122
3 CANT_VEN NUMBER (10) CONSTRAINT CH_CANTVEN CHECK (CANT_VEN >0),
4 COST_VEN NUMBER (10,2) CONSTRAINT CH_COSTVEN CHECK (COST_VEN >0),
5 PRE_VEN NUMBER (10,2) CONSTRAINT CH_PREVEN CHECK (PRE_VEN >0),
6 NUM_FAC NUMBER (10) CONSTRAINT FK_VENTAS REFERENCES VENTAS,
7 COD_PROD NUMBER (10) CONSTRAINT FK_PROVEN REFERENCES PRODUCTOS
8 );
Tabla creada.
CONSULTAS DE TABLAS
SQL> SELECT * FROM TAB;
TNAME TABTYPE CLUSTERID
------------------------------ ------- ---------
CATEGORIAS TABLE
CLIENTES TABLE
COMPRAS TABLE
DETALLE_COMPRAS TABLE
DETALLE_VENTAS TABLE
PRODUCTOS TABLE
PROVEEDORES TABLE
VENTAS TABLE
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES” MANUAL ORACLE 9i
Sistemas Autor: Diego Sánchez Página 123
CREACIÓN DE TRIGGER O DISPARADOR
SQL> CREATE OR REPLACE TRIGGER TRGAUTONCLIENTES
2 BEFORE INSERT ON CLIENTES
3 FOR EACH ROW
4 DECLARE
5 X NUMBER;
6 BEGIN
7 SELECT SEQCLIENTES.NEXTVAL INTO X FROM DUAL;
8 :NEW.COD_CLI:=X;
9 END;
10 /
Disparador creado.
CREATE OR REPLACE TRIGGER TRGAUTONPRODUCTOS
BEFORE INSERT ON PRODUCTOS
FOR EACH ROW
DECLARE
X NUMBER;
BEGIN
SELECT SEQPRODUCTOS.NEXTVAL INTO X FROM DUAL;
:NEW.COD_PROD:=X;
END;
/
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES” MANUAL ORACLE 9i
Sistemas Autor: Diego Sánchez Página 124
SQL> CREATE OR REPLACE TRIGGER TRGAUTONDETALLECOMPRA
2 BEFORE INSERT ON DETALLE_COMPRAS
3 FOR EACH ROW
4 DECLARE
5 X NUMBER;
6 BEGIN
7 SELECT SEQDETALLECOMPRA.NEXTVAL INTO X FROM DUAL;
8 :NEW.COD_DET_COM:=X;
9 END;
10 /
Disparador creado.
SQL> CREATE SEQUENCE SEQDETALLEVENTA
2 START WITH 1
3 INCREMENT BY 1;
Secuencia creada.
SQL> CREATE OR REPLACE TRIGGER TRGAUTONDETALLEVENTA
2 BEFORE INSERT ON DETALLE_VENTAS
3 FOR EACH ROW
4 DECLARE
5 X NUMBER;
6 BEGIN
7 SELECT SEQDETALLEVENTA.NEXTVAL INTO X FROM DUAL;
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES” MANUAL ORACLE 9i
Sistemas Autor: Diego Sánchez Página 125
8 :NEW.NUM_FAC:=X;
9 END;
10 /
Disparador creado.
CREACIÓN DE PL/SQL
1.-
SQL> DECLARE
2 A NUMBER;
3 B NUMBER;
4 C NUMBER;
5 BEGIN
6 A:=5;
7 B:=&VALORB;
8 C:=A+B;
9 DBMS_OUTPUT.PUT_LINE('LA SUMA ES:'||C);
10 END;
11 /
Introduzca un valor para valorb: 5
antiguo 7: B:=&VALORB;
nuevo 7: B:=5;
LA SUMA ES:10
2.-
SQL> DECLARE
2 CONTADOR NUMBER:=0;
3 BEGIN
4 LOOP
5 DBMS_OUTPUT.PUT(CONTADOR||'');
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES” MANUAL ORACLE 9i
Sistemas Autor: Diego Sánchez Página 126
6 CONTADOR:=CONTADOR+1;
7 EXIT WHEN CONTADOR =10;
8 END LOOP;
9 DBMS_OUTPUT.PUT_LINE('FIN DE CICLO');
10 END;
11 /
0123456789FIN DE CICLO
3.-
SQL>
SQL> DECLARE
2 CONTADOR NUMBER:=0;
3 BEGIN
4 WHILE CONTADOR <10 LOOP
5 DBMS_OUTPUT.PUT(CONTADOR||'');
6 CONTADOR:=CONTADOR+1;
7 END LOOP;
8 DBMS_OUTPUT.PUT_LINE('FIN DE CICLO');
9 END;
10 /
01234567890123456789FIN DE CICLO
4.-
SQL> DECLARE
2 X NUMBER;
3 BEGIN
4 X:= &VALORX;
5 IF (X MOD 2=0) THEN DBMS_OUTPUT.PUT('MULTIPLO/2 ');
6 ELSIF X MOD 3=0 THEN DBMS_OUTPUT.PUT('MULTIPLO/3 ');
7 ELSIF X MOD 5=0 THEN DBMS_OUTPUT.PUT('MULTIPLO/5 ');
8 ELSE DBMS_OUTPUT.PUT('MULTIPLO DE OTRO NUMERO');
9 END IF;
10 DBMS_OUTPUT.PUT_LINE ('FIN');
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES” MANUAL ORACLE 9i
Sistemas Autor: Diego Sánchez Página 127
11 END;
12 /
Introduzca un valor para valorx: 6
antiguo 4: X:= &VALORX;
nuevo 4: X:= 6;
MULTIPLO/2 FIN
EJERCICIO N.- 4
CREAR TABLA SUELDOS
SQL>
SQL> CREATE TABLE SUELDOS (
2 NUM_EM NUMBER (10) CONSTRAINT PK_SUELDO PRIMARY KEY,
3 NOMBRE VARCHAR(200) NOT NULL,
4 NHORAS NUMBER(10) NOT NULL,
5 VHORA NUMBER(10,2));
INGRESO DE DATOS
SQL> INSERT INTO SUELDOS VALUES ('1','DIEGO SANCHEZ','30','4');
SQL> INSERT INTO SUELDOS VALUES ('2','JUAN PEREZ','50','2');
SQL> INSERT INTO SUELDOS VALUES ('3','RODOLFO VELASCO','25','5');
CREAR PROCEDIMENTO PL/SQL
SQL> DECLARE
2 MCODIGO CHAR(5);
3 MNOMB VARCHAR2(30);
4 MNUMHORAS NUMBER;
5 MVALHORA NUMBER;
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES” MANUAL ORACLE 9i
Sistemas Autor: Diego Sánchez Página 128
6 MSUELDO NUMBER;
7 BEGIN
8 MCODIGO:=&CODIGO;
9 SELECT NOMBRE INTO MNOMB FROM SUELDOS
10 WHERE NUM_EM = MCODIGO;
11 SELECT NHORAS INTO MNUMHORAS FROM SUELDOS
12 WHERE NUM_EM = MCODIGO;
13 SELECT VHORA INTO MVALHORA FROM SUELDOS
14 WHERE NUM_EM = MCODIGO;
15 MSUELDO:= MNUMHORAS * MVALHORA;
16 DBMS_OUTPUT.PUT_LINE (MNOMB||'SU SUELDO ES:'||MSUELDO);
17 END;
18 /
Introduzca un valor para codigo: 1
antiguo 8: MCODIGO:=&CODIGO;
nuevo 8: MCODIGO:=1;
DIEGO SANCHEZSU SUELDO ES:120
EJERCICIO N.-5
DECLARE
MCODIGO CHAR(5);
MNOMB VARCHAR2(30);
MNUMHORAS NUMBER;
MVALHORA NUMBER;
MSUELDO NUMBER;
MTRANS NUMBER;
MBONO NUMBER;
MIESS NUMBER;
MMULTAS NUMBER;
MTOTAL NUMBER;
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES” MANUAL ORACLE 9i
Sistemas Autor: Diego Sánchez Página 129
BEGIN
MCODIGO:=&CODIGO;
SELECT NOMBRE INTO MNOMB FROM SUELDOS
WHERE NUM_EM = MCODIGO;
SELECT NHORAS INTO MNUMHORAS FROM SUELDOS
WHERE NUM_EM = MCODIGO;
SELECT VHORA INTO MVALHORA FROM SUELDOS
WHERE NUM_EM = MCODIGO;
SELECT TRANSPORTE INTO MTRANS FROM SUELDOS
WHERE NUM_EM = MCODIGO;
SELECT BONO INTO MBONO FROM SUELDOS
WHERE NUM_EM = MCODIGO;
SELECT IESS INTO MIESS FROM SUELDOS
WHERE NUM_EM = MCODIGO;
SELECT MULTAS INTO MMULTAS FROM SUELDOS
WHERE NUM_EM = MCODIGO;
MSUELDO:=MNUMHORAS * MVALHORA;
MTOTAL:=MSUELDO+MTRANS+MBONO-MIESS-MMULTAS;
DBMS_OUTPUT.PUT_LINE(MNOMB || ' SU SUELDO A PAGAR ES:'||MTOTAL);
END;
/
EJERCICIO N.- 6
SENTENCIA SELECT
1. SELECCIONAR LOS NOMBRES Y EL RUC DE TODOS LOS PROVEEDORES
SELECT PROVEEDORES.NOM_PROV, PROVEEDORES.RUC_PROV
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES” MANUAL ORACLE 9i
Sistemas Autor: Diego Sánchez Página 130
FROM PROVEEDORES;
2. SELECCIONAR LOS NOMBRES Y LA DIRECCION DE TODOS LOS
CLIENTES
SELECT CLIENTES.NOM_CLI, CLIENTES.DIR_CLI
FROM CLIENTES;
3. SELECCIONAR TODAS LAS COMPRAS > A 500 DOLARES SELECT TOT_COM FROM COMPRAS WHERE TOT_COM>500;
4. SELECCIONAR TODAS LAS VENTAS DEL 01 AL 30 DE ENERO DEL 2009 SELECT VENTAS.FECHA_VEN FROM VENTAS WHERE FEC_FACT BETWEEN (TO_DATE (‘#01/01/2009#’), TO_DATE (‘#30/01/2009#’,)) ;
5. SELECCIONAR EL NOMBRE DE TODOS LOS PRODUCTOS QUE NO TENGAN EXISTENCIA
SELECT NOMBRE_PRODUCTO FROM PRODUCTO WHERE STOCK=0;
6. SELECCIONAR: EL NOMBRE DEL CLIENTE,EL N:_FACTURA,EL SUBTOTAL,EL DESCUENTO,EL VALOR DEL IVA Y EL TOTAL DE LA FACTURA DE TODAS LAS VENTAS QUE TENGAN DESCUENTOS SELECT CLIENTES.NOMBRE, CLIENTES.APELLIDO,NUMERO_FAC VENTAS.SUB_TOTAL_VENTAS, VENTAS.IVA_VALOR, VENTAS.DESCUENTO_VENTAS, VENTAS.TOTAL_VENTAS FROM VENTAS INNER JOIN CLIENTES ON VENTAS.ID_CLIENTES = CLIENTES.ID_CLIENTES WHERE (VENTAS.DESCUENTO_VENTAS > 0);
7. SELECCIONAR LA FECHA/FACTURA, LA SUMA DE SUBTOTAL, LA SUMA DE DESCUENTOS, LA SUMA DE VALLOR IVA, LA SUMA DE
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES” MANUAL ORACLE 9i
Sistemas Autor: Diego Sánchez Página 131
TOTAL, AGRUPADO X FECHAS, DESDE UNA FECHA INICIAL HASTA UNA FECHA FINAL. SELECT FECHA_FAC, SUM (SUBTOTAL); SUM (DESC), SUM (IVA).SUM (TOTAL) FROM VENTAS WHERE FEC_FACT BETWEEN (TO_DATE (‘#01/01/2009#’), TO_DATE (‘#31/10/2009#’,)) GROUP BY FECHA_FACT;
8. SELECCIONAR EL NOMBRE DE LOS PRODUCTOS QUE NO SE HAN VENDIDO EN UN RANGO DE FECHAS (DESDE, HASTA) SELECT DISTINCT PRODUCTO.ID_PRODUCTO, PRODUCTO.NOMBRE_PRODUCTO FROM DETALLE_VENTAS RIGHT OUTER JOIN PRODUCTO ON DETALLE_VENTAS.ID_PRODUCTO = PRODUCTO.ID_PRODUCTO WHERE (DETALLE_VENTAS.ID_PRODUCTO IS NULL);
BIBLOGRAFÍA
http/www/oracle%20trabajo/tablespace0.htm%20esto%20es%20muy%20bien.htm http/www /oracle%20trabajo/tablespaces-en-oracle.htm http/www/oracle%20trabajo/ORACLE%20SQL%20Plus%20%20An%20Introduct
ion%20and%20Tutorial.htm. http/www/ oracle%20trabajo/orarq.html%20%20arquitectura.htm http/www/oracle%20trabajo/Controlar%20espacio%20de%20los%20tablespaces%
20en%20Oracle%20%C2%AB%20Base%20de%20Datos%20y%20Technolog%C3%ADa%20en%20la%20Web.htm