Rocío Contreras Águila Primer Semestre 2010

Slides:



Advertisements
Presentaciones similares
Rocío Contreras Aguila Primer Semestre 2010
Advertisements

SQL Y BASES DE DATOS A TRAVÉS DE LA WEB
Madrid, junio de 2009 Seguridad en bases de datos: SQL Server 2005 y Oracle 10g.
SQL Sigla del nombre “Structured Query Language”.
integridad referencial
Microsoft® SQL Server 2008 Usuarios, Roles, Encriptación y Back Up de la base de datos.
VISTAS (VIEWS) DEFINICIÓN Y OBJETIVO DE LAS VISTAS.
Se necesita un PA que muestre la información de todos los clientes registrados de la siguiente forma: Nombre1 Nombre2, Apellido1 Apellido2 bajo el título.
Ejercicios Solemne 2 Parte 1
Implementación de procedimientos almacenados
Procedimientos de Almacenado
Rocio Contreras Aguila Primer Semestre Para poder ejecutar esto SQL Server nos permite definir datos y nos entrega herramientas para poder exigir.
Base de Datos Orientada a Objetos (OODBMS)
Implementación de procedimientos almacenados. Introducción a los procedimientos almacenados Creación, ejecución, modificación y eliminación de procedimientos.
Administración de transacciones y bloqueos
Introducción a Transact-SQL
Implementación de la integridad de datos
Marzo de 2010Dos Ideas - La visión de Sistemas desde el Desarrollo Introducción a PL/SQL Conceptos básicos.
Maestría en Bioinformática Bases de Datos y Sistemas de Información SQL: DML Ing. Alfonso Vicente, PMP
4.3. Privilegios de usuarios
PL/SQL Francisco Moreno Universidad Nacional.
SQL SERVER APLICADO (SSA010) Ariel Alexis Fierro Sáez DuocUC.
SESIÓN 2. Completados por el tipo de objeto sobre el que actúan y el objeto concreto: CREATE DATABASE mibase ; Permite crear una base de datos llamada.
MySQL M.C. Pedro Bello López.
1 BD Activas: Motivación zLos SGBD convencionales son “pasivos”. Sólo ejecutan preguntas o transacciones realizadas por los usuarios o por los programas.
Bases de Datos Relacionales
16/04/ Sesión 11 Funciones y procedimientos Ing. Ricardo Inquilla.
PL/SQL Francisco Moreno Universidad Nacional.
Bases de datos en la Web n Las bases de datos permiten almacenar de una forma estructurada y eficiente toda la información de un sitio web n Ventajas –Proporcionar.
UNITA - IBARRA TRIGGERS
Lenguaje Estructurado de Consultas
1 Microcomputación II Unidad II Administración de datos con MS-SQL Server y Visual Basic Introducción a Transact – SQL: Select, Delete, Update. Tema:
Bases de Datos Relacionales
COMANDOS DML DML son las siglas de Data Manipulation Language y se refiere a los comandos que permiten a un usuario manipular los datos en un repositorio,
TRIGGERS EN ORACLE 8 J. Iriarte S. España
Diseñando la arquitectura de aplicaciones empresariales. Acceso al SQL Server.- Autenticación de usuario:
SQL (Structured Query Language / Lenguaje de consulta estructurado)‏
Mayo de 2009Dos Ideas - La visión de Sistemas desde el Desarrollo Manipulación de Datos Conceptos básicos.
Triggers(Disparadores)
Programación en Visual Basic Lección #8: SQL Por Antonio F. Huertas.
LENGUAJE SQL.
Structured Query Language (Lenguaje Estructurado de Consultas)
Lenguaje Estructurado de Consulta
Instrucciones para crear tablas My SQL. A nivel teórico, existen dos lenguajes para el manejo de bases de datos: DDL (Data Definition Language) Lenguaje.
SQL Sigla del nombre “Structured Query Language”.
COMANDOS DML DML son las siglas de Data Manipulation Language y se refiere a los comandos que permiten a un usuario manipular los datos en un repositorio,
INSTRUCCIONES Elaboración de la Presentación:
Para crear una vista debemos utilizar la sentencia CREATE VIEW, debiendo proporcionar un nombre a la vista y una sentencia SQL SELECT válida. CREATE.
1 -Instrucciones del Lenguaje de definición de datos (DDL) se utilizan para crear objetos en la base de datos. -Instrucciones del Lenguaje de control de.
SQL Lenguaje Estructurado de Consulta MATERIA: diseñar sistemas de información ALUMNO: sarmiento flores Liliana Guadalupe GRUPO: 4° “A” TURNO: matutino.
Comunicación y Auditoría en SQL Server
Diseña y administra base de datos avanzadas
Colegio de Bachilleres Plantel 13 Xochimilco - Tepepan
MSSQL SERVER CURSO BÁSICO 1. DESCRIPCIÓN DEL CURSO. Sesión 4: Sentencia Insert,Transacciones,Insert general, Insert Select * From, Sentencia Update,Update.
Comandos DDL Los comandos DDL son las siglas de Data Definition Language, y se corresponde con el conjunto de órdenes que permiten definir las estructuras.
DISPARADORES Y SISTEMAS DE GESTION DE BASE DE DATOS DE SQL
SQL es un estándar internacional para trabajar con bases de datos, que consta de dos partes: una parte para manipular datos y una parte para definir tipos.
INTEGRANTE: FLORES GODOY JUAN E. Grupo:308. Una tabla es una colección de datos sobre un tema específico, como productos o proveedores. Al usar una tabla.
Usuarios. Colocar el servidor en el modo de autenticación Windows/SqlServer. En SQL Server Management Studio, click derecho, Propiedades en la Instancia.
Lenguaje Estructurado de Consultas
6 Triggers ORACLE - II Bases de datos II I-2014 Universidad del Cauca Ing. Wilson Ortega Bases de datos II I-2014 Universidad del Cauca Ing. Wilson Ortega.
DLM Transact SQL Sesión I Introducción al SQL Server Uso de las herramientas de consultas del Transact SQL.
Bases de datos II Universidad del Cauca Ing. Wilson Ortega.
Querys a bases de datos con MS ACCESS. DEFINAMOS LOS TERMINOS: DML=Lenguaje de manipulación de datos Las sentencias DML permiten generar consultas para.
DML Transact SQL Sesión X Triggers. Duración 2 Horas.
DML Transact SQL Sesión IX Introducción a los procedimientos almacenados.
Implementación de funciones definidas por el usuario.
6 Triggers ORACLE Bases de datos II I-2014 Universidad del Cauca Ing. Wilson Ortega Bases de datos II I-2014 Universidad del Cauca Ing. Wilson Ortega.
6 Triggers ORACLE - III Bases de datos II I-2014 Universidad del Cauca Ing. Wilson Ortega Bases de datos II I-2014 Universidad del Cauca Ing. Wilson Ortega.
Crear una tabla (create table - sp_tables - sp_columns - drop table) Para ver las tablas existentes creadas por los usuarios en una base de datos usamos.
Transcripción de la presentación:

Rocío Contreras Águila Primer Semestre 2010 Desencadenadores Rocío Contreras Águila Primer Semestre 2010

Desencadenadores Un Desencadenador (Trigger) es un tipo especial de procedimiento almacenado que se activa de forma controlada por sucesos antes que por llamadas directas. Los desencadenadores (Triggers) están asociados a tablas.

Desencadenadores Son una gran herramienta para controlar las reglas de negocio más complejas que una simple integridad referencial, los desencadenadores (Triggers) y las sentencias que desencadenan su ejecución trabajan unidas como una transacción.

Desencadenadores El grueso de instrucciones de la definición del Desencadenador deben ser INSERT, UPDATE o DELETE, aunque se puede utilizar SELECT. No es recomendable ya que el usuario no espera que se le devuelva registros luego de agregar o modificar información.

Desencadenadores Los desencadenadores (Triggers) siempre toman acción después de que la operación fue registrada en el log.

Desencadenadores Bien en general cuando trabaja con desencadenadores (Triggers), tiene que recordar que los CONSTRAINTS se verifican primero, de cumplirse con los datos solicitados se ejecutará el Desencadenador. Un Desencadenador para inserción de registros genera automáticamente una tabla en el cache con la información que intenta añadir, esta tablita se denomina INSERTED y es a través de esta tabla que se pueden hacer comparaciones en otras tablas.

Desencadenadores Un Desencadenador para eliminación de registros genera automáticamente una tabla en el cache con la información que intenta eliminar, esta tablita se denomina DELETED y es a través de esta tabla que se pueden hacer comparaciones en otras tablas. Si se trata de un Desencadenador para actualización se generan ambas tablas INSERTED con los nuevos datos y DELETED con la información que será reemplazada.

Desencadenadores Para crear un Desencadenador puede utilizar el siguiente formato: CREATE TRIGGER<Nombre del Desencadenador> ON <Nombre de la Tabla> FOR <INSERT l UPDATE l DELETE> AS Sentencias…. GO

Ejemplo 1 Para graficar con un ejemplo la idea de un Desencadenador implementaremos uno, piense en la siguiente situación: Al agregar un nuevo pedido a la tabla de PEDIDOS se debe incrementar las ventas del representante que concreto el pedido, así como también debe reducirse el número de existencias.

Ejemplo 1 Use Ejemplo GO CREATE TRIGGER NuevoPedido ON Pedidos Para ello debe crear el siguiente Desencadenador: Use Ejemplo GO CREATE TRIGGER NuevoPedido ON Pedidos FOR INSERT AS UPDATE RepVentas SET VENTAS =VENTAS + INSERTED.IMPORTE FROM REPVENTAS INNER JOIN INSERTED ON REPVENTAS.NUM_EMPL = INSERTED.REP UPDATE PRODUCTOS SET EXISTENCIAS = EXISTENCIAS - INSERTED.CANT FROM PRODUCTOS INNER JOIN INSERTED ON PRODUCTOS.ID_FAB = INSERTED.FAB AND PRODUCTOS.ID_PRODUCTO = INSERTED.PRODUCTO

Ejemplo 1 Para comprobar la ejecución de este Desencadenador ejecute las siguientes sentencias: Antes de ejecutar un INSERT de prueba, mostraremos la información con respecto a un producto Select * From Productos Where Id_Fab= 'ACI' AND Id_Producto='41001' GO

Ejemplo 1 Ahora la de un representante de ventas Select nombre, cuota, ventas From RepVentas Where num_empl = 104 GO

Ejemplo 1 Ahora agregaremos un pedido Insert Pedidos Values (111000, '5/15/1996', 2101, 104, 'ACI', '41001', 5, 275) GO Verifique los resultados anteriores Select * From Productos Where Id_Fab= 'ACI' AND Id_Producto='41001'

Ejemplo 1 Select nombre, cuota, ventas From RepVentas Where num_empl = 104 GO

Ejemplo 1 Como se comprobó al agregar un nuevo pedido automáticamente el Desencadenador funciona y actualiza las ventas para el representantes de ventas y reduce el número de existencias en stock.

Desencadenadores SQL Server incluye tres tipos generales de desencadenadores: DML, DDL y de inicio de sesión. Los desencadenadores DDL se invocan cuando tiene lugar un evento de lenguaje de definición de datos (DDL) en el servidor o la base de datos

Desencadenadores Los desencadenadores de inicio de sesión activan procedimientos almacenados en respuesta a un evento LOGON. Este evento se genera cuando se establece una sesión de usuario con una instancia de SQL Server. Los desencadenadores DML se invocan cuando un evento de lenguaje de manipulación de datos (DML) tiene lugar en la base de datos

Desencadenadores DML Los eventos DML incluyen instrucciones INSERT, UPDATE o DELETE que modifican datos en una tabla o vista especificada. Un desencadenador DML puede consultar otras tablas e incluir instrucciones Transact-SQL complejas. El desencadenador y la instrucción que lo activa se tratan como una sola transacción, que puede revertirse desde el desencadenador. Si se detecta un error grave (por ejemplo, no hay suficiente espacio en disco), se revierte automáticamente toda la transacción.

Desencadenadores DML Pueden realizar cambios en cascada mediante tablas relacionadas de la base de datos; sin embargo, estos cambios pueden ejecutarse de manera más eficaz mediante restricciones de integridad referencial en cascada.

Desencadenadores DML Pueden proteger contra operaciones INSERT, UPDATE y DELETE incorrectas o dañinas, y exigir otras restricciones que sean más complejas que las definidas con restricciones CHECK. A diferencia de éstas, los desencadenadores DML pueden hacer referencia a columnas de otras tablas. Por ejemplo, un desencadenador puede utilizar una instrucción SELECT de otra tabla para comparar con los datos insertados o actualizados y para realizar acciones adicionales, como modificar los datos o mostrar un mensaje de error definido por el usuario.

Desencadenadores DML Pueden evaluar el estado de una tabla antes y después de realizar una modificación de datos y actuar en función de esa diferencia. Varios desencadenadores DML del mismo tipo (INSERT, UPDATE o DELETE) en una tabla permiten realizar distintas acciones en respuesta a una misma instrucción de modificación

Desencadenadores DDL Los desencadenadores DDL son un tipo especial de desencadenador que se activa en respuesta a instrucciones del lenguaje de definición de datos (DDL). Se pueden usar para realizar tareas administrativas en la base de datos, como auditar y regular las operaciones de base de datos. No se puede revertir un evento ALTER DATABASE producido dentro del cuerpo de un desencadenador DDL.

Desencadenadores DDL Los desencadenadores DDL, al igual que los desencadenadores habituales, activan procedimientos almacenados como respuesta a un evento. Sin embargo, a diferencia de los desencadenadores DML, no se activan como respuesta a las instrucciones UPDATE, INSERT o DELETE de una tabla o vista. En cambio, sí se activan en respuesta a diversos eventos del lenguaje de definición de datos (DDL). Estos eventos corresponden principalmente a instrucciones Transact-SQL que comienzan por las palabras clave CREATE, ALTER y DROP. Determinados procedimientos almacenados del sistema que realizan operaciones de estilo DDL también pueden activar desencadenadores DDL.

Desencadenadores DDL Los desencadenadores DDL pueden utilizarse para tareas administrativas como auditar y regular las operaciones de base de datos. Utilice los desencadenadores DDL cuando: Desee evitar determinados cambios en el esquema de base de datos. Desee que ocurra algún evento en la base de datos como respuesta a un cambio realizado en el esquema de base de datos. Desee registrar cambios o eventos del esquema de base de datos.

Ejemplo: Desencadenadores DDL CREATE TRIGGER safety ON DATABASE FOR DROP_TABLE, ALTER_TABLE AS PRINT ‘debe desactivar el trigger de seguridad para eliminar o modificar las tablas’ ROLLBACK ;

Desencadenadores LOGON Los desencadenadores logon activan procedimientos almacenados en respuesta a un evento LOGON. Este evento se genera cuando se establece una sesión de usuario con una instancia de SQL Server. Los desencadenadores logon se activan después de que termine la fase de autenticación del inicio de sesión, pero antes de que se establezca la sesión de usuario realmente.

Desencadenadores LOGON Todos los mensajes que se originan dentro del desencadenador que alcanzaría normalmente el usuario, como los mensajes de error y los mensajes de la instrucción PRINT, se desvían al registro de errores de SQL Server. Los desencadenadores logon no se activan si se produce un error en la autenticación.

Desencadenadores LOGON Puede utilizar desencadenadores logon para realizar auditorías y controlar sesiones de servidor, como el seguimiento de la actividad de inicio de sesión, la restricción de inicios de sesión en SQL Server o la limitación del número de sesiones para un inicio de sesión específico.

Ejemplo: Desencadenadores LOGON En el siguiente código, el desencadenador logon rechaza los intentos de iniciar sesión en SQL Server iniciados por el inicio de sesión login_test si ya hay tres sesiones de usuario creadas por dicho inicio de sesión.

Ejemplo: Desencadenadores LOGON USE master; GO CREATE LOGIN login_test WITH PASSWORD = '3KHJ6dhx(0xVYsdf' MUST_CHANGE, CHECK_EXPIRATION = ON; GO GRANT VIEW SERVER STATE TO login_test; GO CREATE TRIGGER connection_limit_trigger ON ALL SERVER WITH EXECUTE AS 'login_test' FOR LOGON AS BEGIN IF ORIGINAL_LOGIN()= 'login_test' AND (SELECT COUNT(*) FROM sys.dm_exec_sessions WHERE is_user_process = 1 AND original_login_name = 'login_test') > 3 ROLLBACK; END;

Diferencias entre desencadenadores DML y DDL Los desencadenadores DDL y DML se utilizan con finalidades distintas. Los desencadenadores DML funcionan con las instrucciones INSERT, UPDATE y DELETE, y permiten exigir las reglas de negocios y extender la integridad de los datos cuando se modifican datos en tablas o vistas.

Diferencias entre desencadenadores DML y DDL Los desencadenadores DDL funcionan en instrucciones DDL CREATE, ALTER, DROP entre otras, y en procedimientos almacenados que realizan operaciones similares a DDL. Se utilizan para realizar tareas administrativas y exigir las reglas de negocios que afectan a las bases de datos. Se aplican a todos los comandos de un solo tipo en toda una base de datos o todo un servidor. Los desencadenadores DDL y DML se crean, modifican y quitan con una sintaxis Transact-SQL similar y tienen un comportamiento parecido.

Diferencias entre desencadenadores DML y DDL Al igual que los desencadenadores DML, se pueden crear varios desencadenadores DDL en la misma instrucción Transact-SQL. Asimismo, un desencadenador DDL y la instrucción que lo activa se ejecutan en la misma transacción. Esta transacción se puede revertir desde el desencadenador. Los errores graves pueden hacer que se revierta automáticamente la totalidad de una transacción. Si se ejecutan desencadenadores DDL desde un lote y se incluye explícitamente la instrucción ROLLBACK TRANSACTION, se cancelará todo el lote.

Diferencias entre desencadenadores DML y DDL Para crear un trigger DML, es necesario contar con permiso ALTER sobre la tabla o vista en la que se crea el trigger. Para crear un trigger DDL con ámbito en el servidor (ON ALL SERVER) es necesario un permiso CONTROL SERVER sobre el servidor. Para crear un trigger DDL con ámbito en la base de datos (ON DATABASE) es necesario un permiso ALTER ANY DATABASE DDL TRIGGER en la base de datos actual

Ejemplo 2 Utilizar un trigger DML con un mensaje de aviso. El siguiente trigger DML imprime un mensaje en el cliente cuando alguien intenta agregar o cambiar datos en la tabla Customer. CREATE TRIGGER recordatorio1 ON Sales.Customer AFTER INSERT, UPDATE AS RAISERROR ('Notify Customer Relations', 16, 10) GO

Ejemplo 3 Utilizar un trigger DML con un mensaje de correo electrónico de aviso. Este ejemplo envía un mensaje de correo electrónico a una persona especificada (YO) cuando cambia la tabla Customer. CREATE TRIGGER recordatorio ON Sales.Customer AFTER INSERT, UPDATE, DELETE AS    EXEC msdb.dbo.sp_send_dbmail         @profile_name = ‘Profesora Base datos',         @recipients = ‘rocio.contreras@gmail.com',         @body = ‘NO olvidar revisar las solemnes',         @subject = ‘Recordatorio'; GO

Ejemplo 3 Utilizar un trigger DML AFTER para exigir una regla de negocio entre las tablas PurchaseOrderHeader y Vendor Debido a que las restricciones CHECK sólo pueden hacer referencia a las columnas en que se han definido las restricciones de columna o de tabla, cualquier restricción de referencias cruzadas, en este caso, reglas de negocio, debe definirse como triggers.   En este ejemplo se crea un trigger DML. El trigger comprueba que la solvencia del proveedor es satisfactoria cuando se intenta insertar un nuevo pedido de compra en la tabla PurchaseOrderHeader. Para obtener la solvencia del proveedor, debe hacerse referencia a la tabla Vendor. Si la solvencia no es satisfactoria, se muestra un mensaje y no se ejecuta la inserción.

Ejemplo 3 CREATE TRIGGER LowCredit ON Purchasing.PurchaseOrderHeader AFTER INSERT AS DECLARE @creditrating tinyint,    @vendorid int SELECT @creditrating = v.CreditRating, @vendorid = p.VendorID FROM Purchasing.PurchaseOrderHeader p INNER JOIN inserted i      ON p.PurchaseOrderID = i.PurchaseOrderID            JOIN Purchasing.Vendor v on v.VendorID = i.VendorID IF @creditrating = 5 BEGIN    RAISERROR ('This vendor''s credit rating is too low to accept new       purchase orders.', 16, 1) ROLLBACK TRANSACTION END

Ejemplo 4 Utilizar un trigger DDL con ámbito en la base de datos. En el ejemplo siguiente se utiliza un trigger DDL para impedir que se quiten sinónimos en una base de datos IF EXISTS (SELECT * FROM sys.triggers WHERE parent_class = 0 AND name = 'safety')      DROP TRIGGER safety ON DATABASE GO CREATE TRIGGER safety FOR DROP_SYNONYM AS    RAISERROR ('You must disable Trigger "safety" to drop synonyms!',10, 1)    ROLLBACK

Ejemplo 5 Utilizar un trigger DDL con ámbito en el servidor . En el ejemplo siguiente se utiliza un trigger DDL para imprimir un mensaje si se produce un evento CREATE DATABASE en la instancia actual del servidor, y se utiliza la función EVENTDATA para recuperar el texto de la instrucción Transact-SQL correspondiente. IF EXISTS (SELECT * FROM sys.server_triggers     WHERE name = 'ddl_trig_database') DROP TRIGGER ddl_trig_database ON ALL SERVER GO CREATE TRIGGER ddl_trig_database FOR CREATE_DATABASE AS     PRINT 'Database Created.'     SELECT EVENTDATA().value('(/EVENT_INSTANCE/TSQLCommand/CommandText)[1]','nvarchar(max)')