E16 - Diseño de Sistemas de Bases de Datos Boletín 3



Documentos relacionados
Administración Básica de Oracle9i.

Administración Básica de Oracle 10g. Prácticas sobre trabajos.

Uso de Jobs en Oracle. Establecer los lineamientos necesarios para el manejo de tareas programadas jobs en la Base de Datos Oracle.

Procedimientos, Funciones, Trigger y Cursores en ORACLE

Enlaces relacionados:

Si queremos modificar la contraseña de sys, una vez que accedamos al sistema como sys, escribiremos la sentencia:

Diseño de bases de datos

Lo primero que se llevó a cabo fue la creación del entorno. Esto se llevó a cabo por medio de un usuario con privilegios DBA:

Tema 4. Manipulación de datos con SQL

Disparadores en ORACLE

Disparadores en Oracle (Ejemplos Prácticos)

Lic. Vladimir Cotaquispe Gutierrez PROGRAMACIÓN PL/SQL I - 1. Copyright 2008, Oracle. All rights reserved.

Otros objetos de Base de Datos

T12 Vistas y tablas temporales

CREATE USER ADMINISTRADOR IDENTIFIED BY ADMIN DEFAULT TABLESPACE USERS TEMPORARY TABLESPACE TEMP QUOTA 500K ON USERS;

Oracle 12c DISEÑO Y PROGRAMACIÓN

Oracle básico (IV): Programación en PL/SQL

Bases de datos relacionales y el modelo entidad-relación

SQL PROCEDURAL Triggers y Stored Procedures. Ing. Gustavo A. Correa Reina UNCPBA 2008

El Lenguaje PL/SQL. Un lenguaje de propósito general orientado a la inclusión de sentencias SQL. Estructura del código PL/SQL.

CONCEPTOS DE PROCESAMIENTO DE TRANSACCIONES

sql*plus es un programa de linea de comandos de oracle que puede ejecutar comandos sql y pl/sql de forma interactiva o mediante un script.

Aplicaciones de las vistas Concepto de vista Vistas en SQL Vistas en SQL.

Iniciando con Oracle. Índice de contenido. Ingresando a Oracle. Cambiando Su Contraseña. Ingresando un Comando SQL en SQL*Plus

Tema: Auditoria de Base de datos. Objetivo Especifico

Tema: Auditoria de Base de datos. Parte I

MANUALITO MS-SQL SERVER

SQL (Structured Query Language)

Tutorial Oracle SQL Developer 1.2.1

Base de Datos Oracle 10g: Introducción a SQL Código: D Duración: 5 días (40 horas)

Un ejemplo teórico de trigger podría ser éste:

PHP Y BASES DE DATOS. Introducción a SQL

Usuarios y Seguridad

Tema 1. Bases de datos activas

BASE DE DATOS QUÉ ES UNA BASE DE DATOS?

Creación y Gestión de Tablas. Copyright Oracle Corporation, All rights reserved.

Los paquetes tienen dos partes: una especificación y un cuerpo que están almacenados por separado en la base de datos.

Seguridad de la Información Permisos. Sistemas de Bases de Datos II - ITS EMT - CETP

APUNTES: APLICACIONES WEB BASADAS EN PHP Y MYSQL Página 1 de 5

Seguridad en SQL Server 2005

ADMINISTRACIÓN DE BASE DE DATOS

1

OBJETIVOS METODOLOGÍA PROCEDIMIENTO 1.- Trabajo con el servidor de bases de datos Sybase

Consultas con combinaciones

Select table data Insert table data Update table data Delete table data Create table

Administración Básica de Oracle9i

BASES DE DATOS AVANZADAS Transacciones en MYSQL

Dependiendo de las tareas, podemos clasificar las sentencias SQL en dos tipos:

SQL Los fundamentos del lenguaje

PHPMYADMIN Y MYSQL. Para gestionar la base de datos MySQL, lo haremos desde la aplicación PhpMyAdmin.

6 - Recuperar algunos registros (where)

UNIVERSIDAD DEL ISTMO CAMPUS IXTEPEC LIC. INFORMATICA GRUPO 508 PROCEDIMIENTOS ALMACENADOS EN SQL SERVER 2000

Base de datos relacional

Permite definir cada relación que pertenece a la base de datos relacional, incluyendo:

Programación SQL. Lucio Salgado Diciembre 2008

Bibliografía. Fundamentos de Sistemas de Bases de Datos (3. edición) Elmasri, Navathe Addisson Wesley 2002

CONTROL DE ACCESO. curso 2008

Bibliografía Oracle Database Concepts - 10g Release 2 (10.2) (Octubre 2005)

Programación de Consultas SQL ADO.Net LDP / DUOC-AV

PRÁCTICA III. DISPARADORES EN SQL (II)

ÍNDICE INTRODUCCIÓN...13

PL/SQL. Con PL/SQL vamos a poder programar las unidades de programa de la base de datos Oracle:

GUIA DE LABORATORIO N 9 B. (000Webhost Php- Para desarrollar en casa)

GALA CONCEPTO COMMIT, ROOLBACK SAVEPOINTS (SAVE TRANSACTION) No Consultas. Definiciones Transacciones ( L33 )

Conectar Flash con Access usando MDM Zinc

Trabajos de Ampliación. Bases de datos NoSQL.

Sistema Gestor de Bases de Datos Relacionales (SGBDR), que maneja distintos tipos de datos:

REQUISITOS DEL SISTEMA. Software Servidor. Cliente. Hardware Servidor. Cliente

INSTALACIÓN DE MySQL SERVER EN WINDOWS

3. El catálogo 26. Laboratorio de Bases de Datos

Oracle Básico PL/SQL

LENGUAJE DE CONSULTA ESTRUCTURADO - SQL CONTENIDO

Ejercicios - Persistencia en Android: ficheros y SQLite

Tema 33. El lenguaje SQL

6- Combinación de tablas

CURSORES EN SQL SERVER

Tema: Mineria de datos.

Sistemas de Datos Curso: Ernesto Chinkes. Subconsultas Stored Procedures - Triggers

Descripción de la BBDD para las prácticas

Guía Taller I Conexión con la Base de Datos Introducción a PostgreSQL

Bases de Datos / Elementos de Bases de Datos Que es un Stored Procedure? Stored Procedures: Ventajas

Curso de MySQL y Java

Los disparadores pueden ser utilizados para cumplir con alguna de las siguientes tareas:

UNIVERSIDAD NACIONAL EXPERIMENTAL POLITÉCNICA DE LA FUERZA ARMADA NACIONAL EXTENSIÓN BARQUISIMETO BARQUISIMETO ESTADO. LARA

APÉNDICE SQL (Structures Query Language)

- Bases de Datos - - Diseño Físico - Luis D. García

BASE DE DATOS - CURSO 02/03 PRÁCTICA 2: SQL: Lenguaje de definición de datos (DDL)

El lenguaje de manipulación de datos (DML) es una parte fundamental de SQL.

ESCUELA DE CIENCIAS BASICAS TECNOLOGIA E INGENIERIA Programación de sitios web Act 11: Reconocimiento de la unidad 3

TRANSACT-SQL, DISEÑO Y PROGRAMACIÓN DE BASES DE DATOS EN SQL SERVER 2008

Microsoft SQL Server 2005

Ampliación de Bases de Datos Práctica 1: El lenguaje PL/SQL de Oracle Sesión 1: Introducción al PL/SQL

Grupo Kybele, Pág. 1

Bases de Datos SQL 1 SQL. Jorge Pérez R. Universidad de Talca, II Semestre 2006

Ejercicios: Administración de Bases de Datos en ORACLE

LENGUAJE ESTRUCTURADO DE CONSULTAS SQL (2)

Un nombre de usuario de 30 caracteres o menos, sin caracteres especiales y que inicie con una letra.

Estructura de una BD Oracle. datafiles redo log controlfiles tablespace objetos Estructura lógica. Tablespaces tablespace SYSTEM

INTRODUCCIÓN INTRODUCCIÓN INTRODUCCIÓN INTRODUCCIÓN INSTRUCCIONES DE DEFINICIÓN DE TABLAS E ÍNDICES INSTRUCCIONES DE DEFINICIÓN DE TABLAS E ÍNDICES

Formato para prácticas de laboratorio

Transcripción:

E16 - Diseño de Sistemas de Bases de Datos Boletín 3 Nombre: 1. Esta práctica está dedicada a la creación de disparadores sobre sentencias DDL (lenguaje de definición de datos) y sobre eventos de la Base de Datos. También veremos la ejecución de trabajos de forma periódica. A continuación se detallan los eventos que pueden se capturados, así como los procedimientos del paquete DBMS_JOB: Sobre sentencias DDL Sobre eventos de la BD DBMS_JOB ALTER SERVERERROR SUBMIT ANALYZE LOGON REMOVE ASSOCIATE STATISTICS LOGOFF CHANGE AUDIT STARTUP WHAT COMMENT SHUTDOWN NEXT_DATE CREATE SUSPEND INSTANCE DISASSOCIATE STATISTICS INTERVAL DROP BROKEN GRANT RUN NOAUDIT USER_EXPORT RENAME REVOKE TRUNCATE DDL La documentación en línea con todos los detalles puede ser consultada en http:anubis~oraclemanuales 2. Esta sesión se realizará sobre Oracle9i. Para acceder a esta versión hay que entrar en SQL*Plus con el siguiente nombre de usuario, sustituyendo las X por el número correspondiente: alxxxxxxalxxxxxx@pc Es necesario volver a crear las tablas utilizadas en el Boletín 1, ejecutando SQL> start homeinfdbapublice16crea_tablas.sql 3. Vamos a empezar definiendo 2 disparadores para poder controlar quien se conecta a la base de datos y cuánto tiempo permanece conectado. Para ello, crearemos un disparador sobre el evento LOGON y otro sobre LOGOFF que actualice la fila del LOGON correspondiente. Para realizar este punto, teclearemos el siguiente código en un fichero llamado trg_bd_1.sql create or replace trigger al000000_01 after logon on schema insert into p_logins (owner, f_inicio, ip, session_id) values (ora_login_user, sysdate, nvl(ora_client_ip_address,'desconocida'), dbms_session.unique_session_id);

create or replace trigger al000000_02 before logoff on schema update p_logins set f_fin = sysdate where owner = ora_login_user and session_id = dbms_session.unique_session_id; Una vez creado el fichero, lo ejecutaremos desde el prompt del SQL*Plus: SQL> start trg_bd_1 4. Una vez creados los 2 disparadores, procedemos a realizar las correspondientes pruebas: SQL> connect alxxxxxx********@pc SQL> connect alxxxxxx********@pc Cada connect implica el cierre de la conexión anterior. Para ver si realmente se ha almacenado las conexiones, realizaremos la consulta siguiente: select owner, to_char(f_inicio, 'dd-mm-yyyy hh24:mi:ss'), to_char(f_fin, 'dd-mm-yyyy hh24:mi:ss') from p_logins; Se obtiene la información esperada?... 5. El siguiente disparador que vamos a definir, va a permitir registrar todos los errores que produzcamos. Para ello lo dispararemos sobre el evento SERVERERROR y restringido a nuestro esquema (SCHEMA). Para realizar este punto, teclearemos el siguiente código en un fichero llamado trg_bd_2.sql create or replace trigger al000000_03 after servererror on schema insert into p_errores (fecha, error_texto) values (sysdate, dbms_utility.format_error_stack); Una vez creado el fichero, lo ejecutaremos desde el prompt del sqlplus: SQL> start trg_bd_2 6. Para realizar las pruebas sobre el disparador anterior, podemos lanzar alguna sentencia simple, o incluso alguna sentencia de la sesión anterior. desc patata drop table patata; insert into p_puntuaciones (usu_usuario, ite_id, puntuacion) values ( al000000, 3, 7);

Qué consulta haríamos para comprobar su funcionamiento?... 7. A continuación, vamos a proceder a la creación de un trabajo que guardaremos en la cola de trabajos. Este trabajo, lanzará un procedimiento, que conectándose a anubis, nos mandará un e-mail con un listado de las conexiones que se han realizado. El procedimiento se encuentra en un fichero que hay que ejecutar: SQL> start homeinfdbapublice16crea_proc_mail.sql 8. Una vez creado el procedimiento, teclearemos el bloque PLSQL siguiente. El trabajo almacenado se ejecutará según el campo NEXT_DATE (tercer parámetro), y se ejecutará periódicamente según formula definida en INTERVAL (cuarto parámetro). declare job number; dbms_job.submit(job, 'manda_mail;', sysdate, 'sysdate + 1(24*12)'); commit; Se ha ejecutado el trabajo?... 9. Para comprobar que se ha almacenado correctamente y cuales son sus parámetros, podemos realizar la siguiente consulta: select job, to_char(next_date,'dd-mm-yyy hh24:mi:ss'), interval, what from user_jobs; Se obtiene la fila con los datos previstos?... 10. El trabajo que hemos creado, se ejecutará a intervalos de 5 minutos, lo cual puede ser un poco engorroso, por lo que procederemos a modificar su frecuencia de disparo para situarla a sólo una vez al día. El <número de job> que hay que indicar, es el obtenido en la consulta anterior (JOB). dbms_job.interval(<número de job>, 'trunc(sysdate) + 1'); Sabrías eliminar el trabajo de la cola?...

ANEXO A ANEXO B: DBMS_JOB.SUBMIT ( job OUT BINARY_INTEGER, what IN VARCHAR2, next_date IN DATE DEFAULT sysdate, interval IN VARCHAR2 DEFAULT 'null', no_parse IN BOOLEAN DEFAULT FALSE, instance IN BINARY_INTEGER DEFAULT any_instance, force IN BOOLEAN DEFAULT FALSE); DBMS_JOB.INTERVAL ( job IN BINARY_INTEGER, interval IN VARCHAR2); DBMS_JOB.REMOVE ( job IN BINARY_INTEGER);

ANEXO C create or replace procedure manda_mail is conn utl_tcp.connection; len number(6); res varchar2(3); usuario varchar2(30); cuerpo varchar2(2000); cursor cur is select rpad(owner,20) rpad('conexiones: ' to_char(count(*)),30) 'Minutos: ' to_char(round(sum((f_fin-f_inicio)*60*24))) linea from p_logins group by owner; select user into usuario from dual; cuerpo := ''; for r in cur loop cuerpo := cuerpo r.linea chr(10); end loop; cuerpo := cuerpo '.' chr(10); conn := utl_tcp.open_connection ('anubis.uji.es', 25); len := utl_tcp.write_line(conn, 'HELO anubis.uji.es'); len := utl_tcp.write_line(conn, 'MAIL FROM: job_oracle@anubis.uji.es'); len := utl_tcp.write_line(conn, 'RCPT TO: ' usuario '@alumail.uji.es'); len := utl_tcp.write_line(conn, 'DATA'); len := utl_tcp.write_line(conn, cuerpo); len := utl_tcp.write_line(conn, 'QUIT'); utl_tcp.close_connection(conn);