UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”
MANUAL ORACLE 9i
DESARROLLO CLIENTE – SERVIDOR
TUTOR:
Ing. Oscar Llerena
INDICE
Sistemas
Autor: Diego Sánchez
Página 1
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”
MANUAL ORACLE 9i
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 INSTANCIAS ESTRUCTURAS INTERNAS DE LA BD TABLAS Y COLUMNAS RESTRICCIONES DE TABLAS
Sistemas
Autor: Diego Sánchez
Página 2
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”
MANUAL ORACLE 9i
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 INTRODUCCION ORACLE SISTEMA GESTOR DE BASE DE DATOS (SGBD) ORACLE
Sistemas
Autor: Diego Sánchez
Página 3
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”
MANUAL ORACLE 9i
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. 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:
Sistemas
Autor: Diego Sánchez
Página 4
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”
MANUAL ORACLE 9i
__ 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.). 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-
Sistemas
Autor: Diego Sánchez
Página 5
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”
MANUAL ORACLE 9i
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. 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
Sistemas
Autor: Diego Sánchez
Página 6
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”
MANUAL ORACLE 9i
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.
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 Sistemas
Autor: Diego Sánchez
Página 7
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”
MANUAL ORACLE 9i
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.
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.
Sistemas
Autor: Diego Sánchez
Página 8
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”
MANUAL ORACLE 9i
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 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.
Sistemas
Autor: Diego Sánchez
Página 9
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”
MANUAL ORACLE 9i
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)
Sistemas
Autor: Diego Sánchez
Página 10
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”
MANUAL ORACLE 9i
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
Sistemas
Autor: Diego Sánchez
Página 11
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”
MANUAL ORACLE 9i
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 Infraestructura de redes
Sistemas
Autor: Diego Sánchez
Página 12
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”
MANUAL ORACLE 9i
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. 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.
Sistemas
Autor: Diego Sánchez
Página 13
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”
MANUAL ORACLE 9i
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.
Sistemas
Autor: Diego Sánchez
Página 14
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”
MANUAL ORACLE 9i
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.
Sistemas
Autor: Diego Sánchez
Página 15
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”
MANUAL ORACLE 9i
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.
Sistemas
Autor: Diego Sánchez
Página 16
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”
MANUAL ORACLE 9i
Pulsaremos en "Siguiente" y seleccionamos el destino (carpeta) de instalación:
Seleccionaremos "Oracle9i Cliente”:
Sistemas
Autor: Diego Sánchez
Página 17
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”
MANUAL ORACLE 9i
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:
Sistemas
Autor: Diego Sánchez
Página 18
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”
MANUAL ORACLE 9i
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:
Sistemas
Autor: Diego Sánchez
Página 19
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”
MANUAL ORACLE 9i
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".
Sistemas
Autor: Diego Sánchez
Página 20
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”
MANUAL ORACLE 9i
Pulsamos en "Siguiente".
Marcamos "Base de datos o servicio Oracle8i o posterior" y pulsamos en "Siguiente".
Sistemas
Autor: Diego Sánchez
Página 21
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”
MANUAL ORACLE 9i
Introducimos el nombre del servicio que, normalmente, coincidirá con el nombre de la base de datos a la que nos conectaremos:
Seleccionamos el protocolo TCP y pulsamos en "Siguiente".
Sistemas
Autor: Diego Sánchez
Página 22
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”
MANUAL ORACLE 9i
Introducimos el nombre o IP del PC que tiene la base de datos de Oracle (servidor de Oracle) y pulsamos en "Siguiente".
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".
Sistemas
Autor: Diego Sánchez
Página 23
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”
MANUAL ORACLE 9i
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".
Sistemas
Autor: Diego Sánchez
Página 24
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”
MANUAL ORACLE 9i
Pulsamos en "Siguiente".
Pulsamos en "Terminar".
Sistemas
Autor: Diego Sánchez
Página 25
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”
MANUAL ORACLE 9i
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. Sistemas
Autor: Diego Sánchez
Página 26
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”
MANUAL ORACLE 9i
INST1_HTTP = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = colossus)(PORT = 1521)) ) (CONNECT_DATA = (SERVER = SHARED) (SERVICE_NAME = harolpiz) (PRESENTATION = http://admin) ) ) 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) ) )
Sistemas
Autor: Diego Sánchez
Página 27
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”
MANUAL ORACLE 9i
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"; 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).
Sistemas
Autor: Diego Sánchez
Página 28
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”
MANUAL ORACLE 9i
2.- Nos vamos a la pestaña System DSN, para que todos los usuarios de la maquina donde se procesa la aplicación puedan ocupar el ODBC, y damos click en el botón Add. (Si por ejemplo solo queremos que el usuario que se loggea en esa máquina tenga acceso al ODBC es en la pestaña User DSN).
Sistemas
Autor: Diego Sánchez
Página 29
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”
MANUAL ORACLE 9i
3.- Buscamos el cliente de Oracle que se tiene instalado y damos click en el botón Finish.
Sistemas
Autor: Diego Sánchez
Página 30
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”
MANUAL ORACLE 9i
4.- Posteriormente, debemos tener configurado el usuario de la aplicación en el TNSNAME.ora que se encuentra en la carpeta de instalación de Oracle.
5.- Ponemos los datos del Data Source Name que es el SID de conexion en el
Sistemas
Autor: Diego Sánchez
Página 31
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”
MANUAL ORACLE 9i
TNSNAME, y elegimos el TNS Service Name y el usuario con el cual nos vamos a conectar. Damos click en Test Connection.
6.- Especificamos el Password y damos click en Ok
Sistemas
Autor: Diego Sánchez
Página 32
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”
MANUAL ORACLE 9i
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 Sistemas
Autor: Diego Sánchez
Página 33
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”
MANUAL ORACLE 9i
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:
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
Sistemas
Autor: Diego Sánchez
Página 34
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”
MANUAL ORACLE 9i
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 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
Sistemas
Autor: Diego Sánchez
Página 35
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”
MANUAL ORACLE 9i
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:
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.
Sistemas
Autor: Diego Sánchez
Página 36
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”
MANUAL ORACLE 9i
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). 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
Sistemas
Autor: Diego Sánchez
Página 37
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”
MANUAL ORACLE 9i
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. 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
Sistemas
Autor: Diego Sánchez
Página 38
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”
MANUAL ORACLE 9i
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.
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,
Sistemas
Autor: Diego Sánchez
Página 39
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”
MANUAL ORACLE 9i
'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 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
Sistemas
Autor: Diego Sánchez
Página 40
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”
MANUAL ORACLE 9i
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 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
Sistemas
Autor: Diego Sánchez
Página 41
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”
MANUAL ORACLE 9i
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. 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;
Sistemas
Autor: Diego Sánchez
Página 42
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”
MANUAL ORACLE 9i
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 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.
Sistemas
Autor: Diego Sánchez
Página 43
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”
MANUAL ORACLE 9i
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: 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.
Sistemas
Autor: Diego Sánchez
Página 44
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”
MANUAL ORACLE 9i
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
Sistemas
Autor: Diego Sánchez
Página 45
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”
MANUAL ORACLE 9i
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 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.
Sistemas
Autor: Diego Sánchez
Página 46
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”
MANUAL ORACLE 9i
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.
Sistemas
Autor: Diego Sánchez
Página 47
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”
MANUAL ORACLE 9i
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.
Sistemas
Autor: Diego Sánchez
Página 48
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”
MANUAL ORACLE 9i
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.
Sistemas
Autor: Diego Sánchez
Página 49
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”
MANUAL ORACLE 9i
Á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. Estructuras de Proceso
Sistemas
Autor: Diego Sánchez
Página 50
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”
MANUAL ORACLE 9i
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. Process Monitor, PMON
Sistemas
Autor: Diego Sánchez
Página 51
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”
MANUAL ORACLE 9i
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 puede que el DBWR deba esperar para escribir los bloques modificados desde el buffer de datos a los ficheros de datos.
Sistemas
Autor: Diego Sánchez
Página 52
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”
MANUAL ORACLE 9i
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, Se llena el fichero de redo log activo, Se para la BD,
Sistemas
Autor: Diego Sánchez
Página 53
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”
MANUAL ORACLE 9i
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. FICHEROS DE LA BD
Sistemas
Autor: Diego Sánchez
Página 54
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”
MANUAL ORACLE 9i
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. 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:
Sistemas
Autor: Diego Sánchez
Página 55
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”
MANUAL ORACLE 9i
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. 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
Sistemas
Autor: Diego Sánchez
Página 56
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”
MANUAL ORACLE 9i
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 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.
Sistemas
Autor: Diego Sánchez
Página 57
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”
MANUAL ORACLE 9i
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. 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.
Sistemas
Autor: Diego Sánchez
Página 58
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”
MANUAL ORACLE 9i
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 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.
Sistemas
Autor: Diego Sánchez
Página 59
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”
MANUAL ORACLE 9i
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 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á
Sistemas
Autor: Diego Sánchez
Página 60
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”
MANUAL ORACLE 9i
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. 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
Sistemas
Autor: Diego Sánchez
Página 61
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”
MANUAL ORACLE 9i
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 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
Sistemas
Autor: Diego Sánchez
Página 62
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”
MANUAL ORACLE 9i
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).
•
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;
Sistemas
Autor: Diego Sánchez
Página 63
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”
MANUAL ORACLE 9i
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. 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
Sistemas
Autor: Diego Sánchez
Página 64
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”
MANUAL ORACLE 9i
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.
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.
Sistemas
Autor: Diego Sánchez
Página 65
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”
MANUAL ORACLE 9i
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 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.
Sistemas
Autor: Diego Sánchez
Página 66
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”
MANUAL ORACLE 9i
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 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
Sistemas
Autor: Diego Sánchez
Página 67
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”
MANUAL ORACLE 9i
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 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
Sistemas
Autor: Diego Sánchez
Página 68
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”
MANUAL ORACLE 9i
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 Alter procedure Alter Table Analyze
Objetivo Recompilar un procedimiento almacenado. Añadir o redefinir una columna, modificar la asignación de almacenamiento. Recoger estadísticas de rendimiento sobre los objetos de la BD
para utilizarlas en el optimizador basado en costes. 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 Objetivo DML 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. Deshacer todas las modificaciones realizadas desde la última Rollback confirmación. SQL*Plus
Sistemas
Autor: Diego Sánchez
Página 69
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”
MANUAL ORACLE 9i
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. 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 APPEND texto
Abreviatura A texto
CHANGE/fuente/destino C/fuente/destino CHANGE/texto CLEAR BUFFER DEL INPUT INPUT texto LIST LIST n LIST * LIST LAST LIST m n
Sistemas
C/texto CL BUFF DEL I I texto L Lnón L* L LAST Lmn
Descripción Añade texto al final de la línea. Cambia el contenido 'fuente' por el 'destino' Quita 'texto' de una línea. Borra el buffer Borra una línea. Inserta una o más líneas. Inserta una línea con 'texto'. Lista las líneas del buffer Lista la línea n-ésima. Lista la línea actual. Lista la última línea. Lista las líneas desde la m-ésima a
Autor: Diego Sánchez
Página 70
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”
MANUAL ORACLE 9i
la n-ésima. Al contenido del buffer también se puede acceder desde el editor del Sistema Operativo. Así, el buffer podrá ser manipulado con las posibilidades del editor con el que estemos acostumbrados a trabajar. Al salir del editor se devuelve el control al SQL*Plus. Para conseguir trabajar con el editor del Sistema Operativo basta con colocar la variable DEFINE_EDITOR y luego llamar al editor. SQL> define_editor=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.
Sistemas
Autor: Diego Sánchez
Página 71
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”
MANUAL ORACLE 9i
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 VARCHAR2(tamaño) CHAR(tamaño) LONG Sistemas
Descripción Almacena datos de tipo carácter alfanumérico de longitud variable, con un tamaño máximo de 2.000. Almacena datos de tipo carácter alfanumérico de longitud fija, con un tamaño máximo de 255. Almacena datos de tipo carácter alfanumérico de Autor: Diego Sánchez
Página 72
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”
NUMBER(dig,dec) DATE RAW(tamaño) LONG RAW
MANUAL ORACLE 9i
longitud variable con un tamaño máximo de hasta 2 Gb. Almacena datos numéricos de dig dígitos, de los cuales dec son decimales. El tamaño máximo es de 38 dígitos. Almacena fechas desde el 1-Ene-4712 AC hasta el 31Dic-4712 DC. Almacena datos de longitud variable, con un tamaño máximo de 255 bytes. 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 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
Sistemas
Autor: Diego Sánchez
Página 73
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”
MANUAL ORACLE 9i
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 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 (
Sistemas
Autor: Diego Sánchez
Página 74
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”
MANUAL ORACLE 9i
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
------------------------------- -------- ---COD_DEP
NOT NULL NUMBER(3)
NOMBRE
NOT NULL VARCHAR2(15)
LOC
Sistemas
VARCHAR2(10)
Autor: Diego Sánchez
Página 75
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”
MANUAL ORACLE 9i
SQL> desc emp Name
Null?
Type
------------------------------- -------- ---COD_EMP
NOT NULL NUMBER(4)
NOMBRE
NOT NULL VARCHAR2(10)
OFICIO JEFE
VARCHAR2(10) NUMBER(4)
FECHA_ALTA SALARIO
DATE 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á ALTER TABLE tabla {ADD | DROP} CONSTRAINT restricción;
INSERCIÓN, ACTUALIZACIÓN Y BORRADO
Sistemas
Autor: Diego Sánchez
Página 76
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”
MANUAL ORACLE 9i
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); 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);
Sistemas
Autor: Diego Sánchez
Página 77
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”
MANUAL ORACLE 9i
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]; 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
Sistemas
Autor: Diego Sánchez
Página 78
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”
MANUAL ORACLE 9i
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: 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 ------------------------------
Sistemas
Autor: Diego Sánchez
Página 79
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”
MANUAL ORACLE 9i
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 Produccion
Boecillo Cigales
Cláusula FROM La cláusula FROM define las tablas de las que se van a seleccionar las columnas. 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;
Sistemas
Autor: Diego Sánchez
Página 80
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”
MANUAL ORACLE 9i
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 =
Igualdad
!=, <>, ^= Desigualdad <
Menor que
>
Mayor que
<=
Menor o igual que
>=
Mayor o igual que
in not in
between not
Sistemas
Ejemplo select * from emp where cod_dep = 100; select * from emp where cod_dep != 100; select * from emp where cod_dep < 200; select * from emp where cod_dep > 200; select * from emp where cod_dep <= 200; select * from emp where
cod_dep >= 200; Igual a cualquiera de los miembros select * from emp where entre paréntesis cod_dep in (100, 300); Distinto a cualquiera de los miembros select * from emp where entre paréntesis
cod_dep not in (200); select * from emp where
Contenido en el rango
cod_emp between 100 and
Fuera del rango
199; select * from emp where
Autor: Diego Sánchez
Página 81
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”
cod_emp not between 100
between
and 199;
like '_abc %'
MANUAL ORACLE 9i
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 select nombre, salario+comision from emp where + Suma oficio='VENDEDOR'; select nombre from emp where sysdate-fecha_alta > Resta 365; * Producto select nombre, salario*12 from emp; / División select nombre, salario/31 from emp;
Operadores de Cadenas de Caracteres Operador ||
Operación Concatenación
Ejemplo 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
Sistemas
Autor: Diego Sánchez
Página 82
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES” Roncal
350000
Yuste
350000
Recio
300000
Sastre
300000
Martin
235000
Garcia
225000
Garcia
210000
Mateo
200000
Santana
200000
Rueda
175000
Lopez
150000
Sanz
MANUAL ORACLE 9i
150000
14 rows selected. 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:
Sistemas
Autor: Diego Sánchez
Página 83
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”
MANUAL ORACLE 9i
Aritméticas, de cadenas de caracteres, de manejo de fechas, de conversión, otras, de grupo. Funciones Aritméticas Función
Cometido
Ejemplo Resultado select abs(-15) from ABS(n) Calcula el valor absoluto de n. 15 dual; Calcula el valor entero select ceil(15.7) CEIL(n) inmediatamente superior o 16 from dual; igual a n. Calcula el valor entero select floor(15.7) FLOOR(n) inmediatamante inferior o igual 15 from dual; a n. Calcula el resto resultante de select mod(11,4) MOD(m,n) 3 dividir m entre n. from dual; Calcula la potencia n-esima de select power(3,2) POWER(m,n) 9 m. from dual; Calcula el redondeo de m a n select decimales. Si n<0 el redondeo ROUND(m,n) round(123.456,1) 123.5 se efectua a por la izquierda del from dual; punto decimal. select sqrt(4) from SQRT(n) Calcula la raíz cuadrada de n. 2 dual; Calcula m truncado a n select TRUNC(m,n) decimales
(n
negativo). Calcula el SIGN(n)
puede
ser trunc(123.456,1)
123.4
from dual; 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 Devuelve el carácter
CHR(n)
cuyo
valor
codificado
select dual;
Resultado
chr(65)
from
A
es n. Sistemas
Autor: Diego Sánchez
Página 84
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES” Devuelve el ASCII(cad)
valor
ascii
de cad. Devuelve
select ascii('A') from dual;
MANUAL ORACLE 9i
65
cad1 concatenada con CONCAT(cad1,cad2)
cad2. select
Esta función concat(concat(nombre,' es
es '),oficio) from emp;
Cano
es
Presidente, etc.
esquivalente al operador ||. Devuelve la cadena cad LOWER(cad)
con
todas select
sus
letras lower('MinUsCulAs')
minusculas
convertidas from dual; a minúsculas. Devuelve la cadena cad UPPER(cad)
con
todas select
sus
letras upper('maYuSCulAs') MAYUSCULAS
convertidas from dual; a mayúsculas. Devuelve cad con el INITCAP(cad)
primer caracter
LPAD(cad1,n,cad2)
en
select
initcap('isabel')
from dual;
mayúsculas. Devuelve select cad1
Isabel
lpad('P',5,'*') ****P
con from dual;
longitud n, y ajustada a la
Sistemas
Autor: Diego Sánchez
Página 85
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”
MANUAL ORACLE 9i
derecha, rellenando por
la
izquierda con cad2. Devuelve cad1
con
longitud n, y ajustada a la RPAD(cad1,n,cad2)
izquierda,
rpad('P',5,'*')
from dual;
rellenando por
select
P****
la
derecha con cad2. Devuelve cad en que
la
cada
ocurrencia
select
REPLACE(cad,ant,nue) de la cadena replace('digo','i','ie')
diego
ant ha sido from dual; sustituida por
la
cadena nue. Devuelve la sudcadena de SUBSTR(cad,m,n)
cad
compuesta por
n
caracteres a
select substr('ABCDEFG',3,2 CD ) from dual;
partir de la posicion m. Devuelve la LENGTH(cad)
longitud de cad.
Sistemas
select
length('cadena')
from dual;
6
Autor: Diego Sánchez
Página 86
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”
MANUAL ORACLE 9i
Funciones de Manejo de Fechas Función
Cometido Ejemplo Devuelve la
Resultado
SYSDATE
fecha y hora select sysdate from dual; actuales. Devuelve la fecha
ADD_MONTHS(d,n)
97
d select
incrementad add_months(sysdate,4) a
14-MAR-
en
14-JUL-97
n from dual;
meses. Devuelve la LAST_DAY(d)
fecha
del
último
día
del mes de
select
last_day(sysdate) 31-MAR-
from dual;
97
d. Devuelve la diferencia MONTHS_BETWEEN(d en 1, d2)
meses
entre
las
fechas d1 y
select months_between(sysdate,'0 1-JAN-97') from dual;
2.4340942 4
d2. Devuelve la
NEXT_DAY(d,cad)
fecha
del
primer
día
de la semana cad después
select
next_day(sysdate, 16-MAR-
'sunday') from dual;
97
de la fecha d.
Funciones de Conversión de Tipos Función Cometido Ejemplo TO_NUMBER(cad,fmto) Convierte la cadena select
Resultado 124345
cad a un número, to_number('12345')
Sistemas
opcionalmente
de from dual;
acuerdo
el
con
Autor: Diego Sánchez
Página 87
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”
MANUAL ORACLE 9i
formato fmto. Convierte la fecha d a una cadena de caracteres,
TO_CHAR(d, fmto)
opcionalmente
de
acuerdo
el
con
select to_char(sysdate) from dual;
'14-MAR97'
formato fmto. Convierte la cadena cad TO_DATE(cad,fmto)
de
tipo
varchar2 a fecha, select
to_date('1- 01-JAN-
opcionalmente
de JAN-97') from dual; 97
acuerdo
el
con
formato fmto. 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
cc ó scc
Valor del siglo.
y,yyy
ó Año con coma, con o
sy,yyy yyyy ó yyy ó yy ó y q ww ó w mm ddd ó dd ó d
sin signo. Año
sin
Ejemplo Resultado select to_char(sysdate,'cc') 20 from dual; select to_char(sysdate,'y,yyy') from 1,997 dual;
signo
con
cuatro, tres, dos o un dígitos. Trimestre.
select to_char(sysdate,'yyyy') from dual; select
to_char(sysdate,'q')
from dual; Número de la semana select to_char(sysdate,'ww') del año o del mes. Número del mes.
from dual; select to_char(sysdate,'mm')
from dual; Número del día del año, select to_char(sysdate,'ddd')
del mes o de la semana. from dual; hh ó hh12 ó La hora en formato 12h. select to_char(sysdate,'hh') hh24 Sistemas
o 24h.
from dual; Autor: Diego Sánchez
1997
1 11 03 073 12
Página 88
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”
mi
select
Los minutos de la hora.
from dual;
Los segundos dentro del ss ó sssss
minuto, o desde las 0 horas.
to_char(sysdate,'mi')
select to_char(sysdate,'sssss') from dual;
MANUAL ORACLE 9i
15
44159
Máscaras de Formato de Caracteres Formato Cometido Ejemplo Resultado syear ó select to_char(sysdate,'syear) nineteen Año en Inglés year from dual; ninety-seven Nombre del mes o su select month o abreviatura de tres to_char(sysdate,'month') march mon letras. from dual; Nombre del día de la select to_char(sysdate,'day') day ó dy semana o su abreviatura friday from dual; de tres letras. a.m. ó select to_char(sysdate,'a.m.') El espacio del día. p.m. p.m. from dual; Indicador del año select to_char(sysdate,'b.c.') b.c. ó a.d. respecto al del a.d. from dual; nacimiento de Cristo. Otras Funciones Función DECODE(var, val1, cod1, val2, cod2, ..., defecto) GREATEST(exp1, exp2, ...)
Cometido Convierte
Ejemplo el
valor de var, de acuerdo con la codificación. Devuelve
select
Resultado decode(oficio,
'Presidente', 'P', 'Director', P, D, X, ... 'D', 'X') from emp;
el
mayor valor de sin ejemplo. una lista. Devuelve
el
LEAST(cad,fmto)
menor valor de sin ejemplo.
NVL(val, exp)
una lista. Devuelve
la select
expresión exp si salario+nvl(comision,0)
sin ejemplo. sin ejemplo. 450000, 350000, ...
val es NULL, y from emp; Sistemas
Autor: Diego Sánchez
Página 89
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”
MANUAL ORACLE 9i
val si en otro caso.
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 ➢ 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;
Sistemas
Autor: Diego Sánchez
Página 90
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”
MANUAL ORACLE 9i
Las funciones de agrupamiento que se pueden utilizar son las siguientes. Funciones de Agrupamiento Función COUNT(col)
AVG(col)
MAX(col)
MIN(col)
SUM(col)
STDDEV(col)
Cometido Ejemplo Cuenta el número de filas select count(nombre),oficio agrupadas. from emp group by oficio; Calcula el valor medio de select avg(salario),oficio todos los valores de la from emp group by oficio; columna col. Calcula el valor máximo de select max(salario),oficio todos los valores de la from emp group by oficio; columna col. Calcula el valor mínimo de select min(salario),oficio todos los valores de la from emp group by oficio; columna col. Calcula la suma de los valores select sum(salario), oficio de la columna col. from emp group by oficio; Calcula la desviación típica de los valores de la columna col select stddev(salario), oficio sin tener en cuenta los valores from emp group by oficio; nulos. Calcula la varianza de los
VARIANCE(col)
valores de la columna col sin tener en cuenta los valores
select
variance(salario),
oficio from emp group by
oficio; nulos. 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
Sistemas
Autor: Diego Sánchez
Página 91
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”
MANUAL ORACLE 9i
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 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];
Sistemas
Autor: Diego Sánchez
Página 92
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”
MANUAL ORACLE 9i
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 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.
Sistemas
Autor: Diego Sánchez
Página 93
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”
MANUAL ORACLE 9i
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. 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
Sistemas
Autor: Diego Sánchez
Página 94
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”
MANUAL ORACLE 9i
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) 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:
Sistemas
Autor: Diego Sánchez
Página 95
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES” •
líneas de comentarios,
•
líneas de ejecución,
•
líneas de comandos SQL, y
•
líneas de comandos SQL*Plus.
MANUAL ORACLE 9i
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
Sistemas
Autor: Diego Sánchez
Página 96
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”
MANUAL ORACLE 9i
SQL> define oficio=analista 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
Sistemas
Boecillo
Autor: Diego Sánchez
Página 97
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”
MANUAL ORACLE 9i
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 siguiente tabla. En ella se distinguen entre privilegios de manejo de objetos y de gestión
Sistemas
Autor: Diego Sánchez
Página 98
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”
MANUAL ORACLE 9i
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 Crear cualquier índice. INDEX CREATE [PUBLIC] Crear sinónimos [públicos]. SYNONYM Crear tablas. El usuario debe tener cuota en el espacio de CREATE [ANY] tablas, o ha de tener asignado el privilegio UNLIMITED TABLE TABLESPACE. CREATE [ANY] Crear vistas. VIEW ALTER ANY INDEX Alterar cualquier índice. ALTER ANY TABLE Alterar cualquier tabla DROP ANY INDEX Borrar cualquier índice. DROP ANY Borrar cualquier sinónimo. SYNONYM DROP PUBLIC Borrar sinónimos públicos. SYNONYM DROP ANY VIEW Borrar cualquier vista. DROP ANY TABLE Borrar cualquier tabla. SELECT ANY Efectuar selecciones de cualquier tabla o vista. TABLE INSERT ANY TABLE Insertar en cualquier tabla o vista. DELETE ANY Borrar filas de cualquier tabla o vista, y también truncar. TABLE ALTER SESSION Alterar los parámetros de la sesión. CREATE SESSION Conectarse a la BD. Gestión de la BD ... CREATE PROFILE Crear perfiles de usuario. CREATE ROLE Crear roles. CREATE ROLLBACK Creación de segmentos de rollback. SEGMENT CREATE Crear espacios de tablas. TABLESPACE CREATE USER Crear usuarios. ALTER PROFILE Alterar perfiles existentes. ALTER ANY ROLE Alterar cualquier rol. ALTER ROLLBACK Alterar segmentos de rollback.
Sistemas
Autor: Diego Sánchez
Página 99
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”
MANUAL ORACLE 9i
SEGMENT ALTER
Alterar espacios de tablas. TABLESPACE ALTER USER Alterar usuarios. DROP PROFILE Borrar un perfil existente. DROP ANY ROLE Borrar cualquier rol. DROP ROLLBACK Borrar un segmento de rollback existente. SEGMENT DROP TABLESPACE Borrar un espacio de tablas. Borrar un usuario. Añadir CASCADE si el usuario posee DROP USER objetos. ALTER DATABASE Permite una sentencia ALTER DATABASE. GRANT ANY Otorgar cualquiera de estos privilegios. PRIVILEGE GRANT ANY ROLE Otorgar cualquier rol a un usario. UNLIMITED Puede usar una cantidad de almacenamiento ilimitada. TABLESPACE 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
Sistemas
Privilegios
Autor: Diego Sánchez
Página 100
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”
CONNECT RESOURCE DBA
MANUAL ORACLE 9i
alter session, create session, create cluster, create table, create view, create synonym, create sequence, create database link create cluster, create table, create procedure, create sequence, create trigger 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. 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 SELECT
Capacidades Otorgadas Puede consultar a un objeto. Puede insertar filas en una tabla o vista. Puede especificarse
INSERT
las columnas donde se permite insertar dentro de la tabla o vista. Puede actualizar filas en una tabla o vista. Puede especificarse
UPDATE
las columnas donde se permite actualizar dentro de la tabla o
DELETE ALTER INDEX REFERENCES EXECUTE
vista. Puede borrar filas dentro de la tabla o vista. Puede alterar la tabla. Puede crear índices de una tabla. Puede crear claves ajenas que referencie a esta tabla. 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
Sistemas
Autor: Diego Sánchez
Página 101
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”
MANUAL ORACLE 9i
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: 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. Usuarios a los que han sido otorgados privilegios del DBA_SYS_PRIVS sistema. Usuarios a los que han sido otorgados privilegios sobre DBA_TAB_PRIVS objetos. Usuarios a los que han sido otorgados privilegios sobre DBA_COL_PRIVS 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. ROLE_TAB_PRIVS Privilegios de tabla que han sido otorgados a roles.
Sistemas
Autor: Diego Sánchez
Página 102
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”
MANUAL ORACLE 9i
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 NONE BD OS
Descripción Deshabilita la auditoría Habilita la auditoría, escribiendo en la tabla SYS.AUD$. 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.
•
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.
Sistemas
Autor: Diego Sánchez
Página 103
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES” •
MANUAL ORACLE 9i
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 Donde p es la precisión y e la escala.
dec(p, e)
La precisión máxima es de 38 dígitos.
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. Donde p es la precisión y e la escala.
decimal(p, e)
La precisión máxima es de 38 dígitos.
Por ejemplo: decimal(3,1) es un número que tiene 2 dígitos antes del decimal y un dígito después del decimal.
double precision float
Sistemas
La precisión máxima es de 38
Autor: Diego Sánchez
Página 104
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”
MANUAL ORACLE 9i
decimales. int integer Donde p es la precisión y e la escala. numeric(p, e)
La precisión máxima es de 38 dígitos.
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. Donde p es la precisión y e la escala.
number(p, e)
La precisión máxima es de 38 dígitos.
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 Donde tamaño es el número de Hasta 32767 bytes en PLSQL. caracteres a almacenar. Son char (tamaño) cadenas de ancho fijo. Se rellena Hasta 2000 bytes en Oracle 8i/9i. con espacios. Donde tamaño es el número de caracteres a almacenar. Son Hasta 4000 bytes en Oracle 8i/9.i cadenas de ancho variable.
varchar2 (tamaño)
Hasta 32767 bytes en PLSQL.
long
Hasta 2 gigabytes.
Son cadenas de ancho variable.
Hasta 32767 bytes en PLSQL.
Son cadenas binarias de ancho variable.
raw
Hasta 2000 bytes en Oracle 8i/9i.
Son cadenas binarias de ancho variable.
long raw
Hasta 2 gigabytes.
date
Una fecha entre el 1 de Enero de 4712 A.C. y el 31 de Diciembre de 9999 D.C.
Sistemas
Autor: Diego Sánchez
Página 105
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”
timestamp (fractional seconds precision)
No soportado por Oracle 8i.
MANUAL ORACLE 9i
fractional seconds precision debe Incluye año, mes día, hora, ser un número minutos y segundos. entre 0 y 9. (El Por ejemplo: timestamp(6) valor por defecto es 6)
timestamp (fractional No soportado seconds por Oracle 8i. precision) with time zone
fractional seconds precision debe ser un número entre 0 y 9. (El valor por defecto es 6)
timestamp (fractional No soportado seconds por Oracle 8i. precision) with local time zone
fractional seconds precision debe ser un número entre 0 y 9. (El valor por defecto es 6)
interval year No soportado (year precision) por Oracle 8i. to month
year precision debe ser un número entre 0 y 9. (El valor por defecto es 2)
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 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
Período de tiempo almacenado en años y meses. Por ejemplo: interval year(4) to month
interval day (day precisionel bloque en el fichero de la base de datos;
Datos binarios de ancho fijo. Cada registro de la base de datos tiene una RRRR es la fila dirección física del bloque; o rowid. FFFFF es el fichero de la base de datos.
Sistemas
Autor: Diego Sánchez
Página 106
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”
MANUAL ORACLE 9i
urowid [tamaño]
Hasta 2000 bytes.
boolean
Válido en PLSQL, este tipo de datos no existe en Oracle 8i/9i.
nchar (tamaño)
Donde tamaño es el número de Hasta 32767 bytes en PLSQL. caracteres a almacenar. Cadena Hasta 2000 bytes en Oracle 8i/9i. NLS de ancho fijo.
nvarchar2 (tamaño)
Donde tamaño es el número de Hasta 32767 bytes en PLSQL. caracteres a almacenar. Cadena Hasta 4000 bytes en Oracle 8i/9i. NLS de ancho variable.
bfile
blob
clob
nclob
Rowid universal. Donde tamaño es opcional.
Hasta 4 gigabytes.
Localizadores de archivo apuntan a un objeto binario de sólo lectura fuera de la base de datos.
Hasta 4 gigabytes.
Localizadores LOB apuntan a un gran objeto binario dentro de la base de datos.
Hasta 4 gigabytes.
Localizadores LOB apuntan a un gran objeto de caracteres dentro de la base de datos.
Hasta 4 gigabytes.
Localizadores LOB apuntan a un gran objeto NLS de caracteres dentro de la base de datos.
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)
Sistemas
Autor: Diego Sánchez
Página 107
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES” •
MANUAL ORACLE 9i
(multiplicación)
/ (división) • ○
(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
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:
Sistemas
Autor: Diego Sánchez
Página 108
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”
MANUAL ORACLE 9i
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: •
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
[ EXCEPTION ] END; / La barra "/" siempre se pone al final para ejecutar el bloque.
Sistemas
Autor: Diego Sánchez
Página 109
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”
MANUAL ORACLE 9i
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 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)
Sistemas
Autor: Diego Sánchez
Página 110
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”
MANUAL ORACLE 9i
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. 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;
Sistemas
Autor: Diego Sánchez
Página 111
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”
MANUAL ORACLE 9i
/ 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. 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
Sistemas
Autor: Diego Sánchez
Página 112
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”
MANUAL ORACLE 9i
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] 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
Sistemas
Autor: Diego Sánchez
Página 113
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”
MANUAL ORACLE 9i
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
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; AB
Sistemas
Autor: Diego Sánchez
Página 114
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”
MANUAL ORACLE 9i
--------- -----------------------------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; 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
Sistemas
Autor: Diego Sánchez
Página 115
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”
MANUAL ORACLE 9i
4 ACCOUNT UNLOCK; Usuario creado. INGRESAR AL USUARIO CONNECT SYSTEM/MASTER@SEPTIMO; Conectado. SQL> CONNECT INVENTARIO2/US2@SEPTIMO; Conectado.
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));
Sistemas
Autor: Diego Sánchez
Página 116
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”
MANUAL ORACLE 9i
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.
SQL> CREATE TABLE PRODUCTOS( 2 COD_PROD KEY, 3 NOM_PROD
NUMBER(10) CONSTRAINT PK_PRODUCTO PRIMARY VARCHAR(200) NOT NULL,
4 EXIS_PROD CHECK(EXIS_PROD>0),
NUMBER(10)
CONSTRAINT
CH_EXIST
5 COST_PROD NUMBER(10,2) NOT NULL, 6 PRE_VENT NUMBER (10,2) NOT NULL, 7 COD_CAT CATEGORIAS);
NUMBER(3) CONSTRAINT FK_CATEGORIA REFERENCES
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 Sistemas
Autor: Diego Sánchez
Página 117
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”
MANUAL ORACLE 9i
6 );
Tabla creada.
SQL> CREATE TABLE VENTAS( 2 NUM_FAC NUMBER(10) CONSTRAINT PK_VENTAS PRIMARY KEY, 3 FECH_VEN DATE DEFAULT SYSDATE, 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 CLIENTES
NUMBER(5) CONSTRAINT FK_CLIENTES REFERENCES
10 );
Tabla creada.
SQL> CREATE TABLE DETALLE_COMPRAS( 2 COD_DET_COM NUMBER (10) CONSTRAINT PK_DET_COM PRIMARY KEY, 3 CANT_COM (CANT_COM >0),
NUMBER (10)
4 COST_COM (COST_COM >0),
NUMBER (10,2) CONSTRAINT CH_COSTCOM
5 NUM_COM COMPRAS,
CONSTRAINT CH_CANTCONP CHECK CHECK
NUMBER (10) CONSTRAINT FK_COMPRAS REFERENCES
6 COD_PROD NUMBER (10) CONSTRAINT FK_PROCOMP REFERENCES PRODUCTOS
Sistemas
Autor: Diego Sánchez
Página 118
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”
MANUAL ORACLE 9i
7 );
Tabla creada.
SQL> CREATE TABLE DETALLE_VENTAS ( 2 COD_DET_VEN NUMBER (10) CONSTRAINT PK_DET_VEN PRIMARY KEY, 3 CANT_VEN (CANT_VEN >0),
NUMBER (10) CONSTRAINT CH_CANTVEN
CHECK
4 COST_VEN NUMBER (10,2) CONSTRAINT CH_COSTVEN (COST_VEN >0),
CHECK
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
Sistemas
TABLE
Autor: Diego Sánchez
Página 119
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES” CLIENTES
TABLE
COMPRAS
TABLE
DETALLE_COMPRAS
TABLE
DETALLE_VENTAS
TABLE
PRODUCTOS
TABLE
PROVEEDORES VENTAS
MANUAL ORACLE 9i
TABLE TABLE
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 Sistemas
Autor: Diego Sánchez
Página 120
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”
MANUAL ORACLE 9i
X NUMBER; BEGIN SELECT SEQPRODUCTOS.NEXTVAL INTO X FROM DUAL; :NEW.COD_PROD:=X; END; /
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
Sistemas
Autor: Diego Sánchez
Página 121
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”
MANUAL ORACLE 9i
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; 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
Sistemas
Autor: Diego Sánchez
Página 122
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”
MANUAL ORACLE 9i
2.SQL> DECLARE 2 CONTADOR NUMBER:=0; 3 BEGIN 4 LOOP 5 DBMS_OUTPUT.PUT(CONTADOR||''); 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;
Sistemas
Autor: Diego Sánchez
Página 123
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”
MANUAL ORACLE 9i
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'); 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
Sistemas
Autor: Diego Sánchez
Página 124
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”
MANUAL ORACLE 9i
SQL> DECLARE 2 MCODIGO CHAR(5); 3 MNOMB VARCHAR2(30); 4 MNUMHORAS NUMBER; 5 MVALHORA NUMBER; 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; Sistemas
Autor: Diego Sánchez
Página 125
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”
MANUAL ORACLE 9i
MBONO NUMBER; MIESS NUMBER; MMULTAS NUMBER; MTOTAL NUMBER; 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
Sistemas
Autor: Diego Sánchez
Página 126
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”
MANUAL ORACLE 9i
SENTENCIA SELECT 1. SELECCIONAR LOS NOMBRES Y EL RUC DE TODOS LOS PROVEEDORES
SELECT PROVEEDORES.NOM_PROV, PROVEEDORES.RUC_PROV 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);
Sistemas
Autor: Diego Sánchez
Página 127
UNIVERSIDAD REGIONAL AUTÓNOMA DE LOS ANDES “UNIANDES”
MANUAL ORACLE 9i
7. SELECCIONAR LA FECHA/FACTURA, LA SUMA DE SUBTOTAL, LA SUMA DE DESCUENTOS, LA SUMA DE VALLOR IVA, LA SUMA DE 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 %20Introduction%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
Sistemas
Autor: Diego Sánchez
Página 128