Databázové triggery Aktivní pravidla Jan Plonka. Přehled Co jsou to triggery? Historie Pojmy a členění triggerů Jednotlivé realizace + příklady Známé.

Slides:



Advertisements
Podobné prezentace
Databázové systémy Zabezpečení DBS. Cíle, které je třeba vzít v úvahu při návrhu databázové aplikace z pohledu bezpečnosti: •Důvěrnost - informace by.
Advertisements

Základy jazyka SQL Jan Tichava
Ladislav Hofman, Jan Slavík TUL Předmět databázové systémy
Přednáška č. 1 Úvod, Historie zpracování dat, Základní pojmy
Aplikační a programové vybavení
Jazyk SQL Ing. Zdena DOBEŠOVÁ. SQL Structured Query Language 1974 SEQUEL (Structured English Query Language) neprocedurální relační dotazovací jazyk norma.
 Informací se data a vztahy mezi nimi stávají vhodnou interpretací pro uživatele, která odhaluje uspořádání, vztahy, tendence a trendy  Existuje celá.
Přednáška č. 5 Proces návrhu databáze
Fakulta elektrotechniky a informatiky
Informační systémy Realizace uložených procedur a spouští, jejich praktické využití.
Další dotazy SQL Structured Query Language. Některé SQL příkazy mohou mít v sobě obsaženy další kompletní příkazy SELECT. Využijeme je tam, kde potřebujeme.
Informatika pro ekonomy II přednáška 11
Databázové systémy II Přednáška č. 6 RNDr. David Žák, Ph.D. Fakulta elektrotechniky a informatiky
Databázové systémy II Přednáška č. 6 RNDr. David Žák, Ph.D. Fakulta elektrotechniky a informatiky
Databázové systémy 2 Cvičení č. 6 Ing. Tomáš Váňa Fakulta elektrotechniky a informatiky Univerzita Pardubice.
Fakulta elektrotechniky a informatiky
Databázové systémy II Přednáška č. 5 RNDr. David Žák, Ph.D. Fakulta elektrotechniky a informatiky
PROGRAMOVACÍ JAZYKY (c) Tralvex Yeap. All Rights Reserved.
Temporální databáze a TSQL
Možnosti implementace temporálních Databází v Caché Lukáš Rychnovský
SQL Lukáš Masopust Historie  Předchůdcem databází byly papírové kartotéky  děrný štítek  1959 konference  1960 – vytvořen jazyk COBOL.
SQL Lukáš Masopust Historie  Předchůdcem databází byly papírové kartotéky  děrný štítek  1959 konference  1960 – vytvořen jazyk COBOL.
Temporální Databáze Jaroslav Dražan. Čím se budeme zabývat Proč je čas v DB důležitý Práce s časem pomocí klasického SQL Reprezentace časové domény Spojování.
AKTIVNÍ DATABÁZE Milan Plachý Dan Kobr 2010/2011.
Aktivní databáze Šípek, Chudoba Obsah ●Zdroj ●Aktivní databáze - definice ●Reálné systémy ○ Starburst ○ Oracle ○ DB2 ○ Chimera ●Příklady použití.
Ladislav Novák Dotazovací jazyky I - NDBI001
Vítězslav Čížek, Roman Kučera.  Advanced Database Systems by Zaniolo, Ceri, Faloutsos, Snodgrass, Subrahmanian and Zicari Morgan Kaufmann,
PL/SQL Jazyk SQL je jazykem deklarativním, který neobsahuje procedurální příkazy jako jsou cykly, podmínky, procedury, funkce, atd. Rozšířením jazyka SQL.
1IT Relační datový model
MySQL - Vytvoření nové tabulky  create table jméno_tabulky (jméno_položky typ_položky,... ) Přehled nejběžnějších datových typů Přehled nejběžnějších.
Databáze Úvod.
Databázové systémy II Přednáška č. 8 – Pohledy (Views)
BEZPEČNOST DAT 2 Složky bezpečnosti dat  Integrita dat (Integrity)  Ochrana dat (Security)  Zotavení z chyb (Recovery)  Paralelní zpracování (Concurrency)
Školení správců II. Petr Pinkas RNDr. Vít Ochozka.
Procedurální rozšíření Transact SQL Michal Kopecký Výběr ze slajdů k 3. přednášce předmětu Databázové Aplikace (DBI026) na MFF UK.
Relační databáze.
Vypracoval: Ondřej Dvorský Třída: VIII.A
Informatika pro ekonomy II přednáška 10
Databázové systémy Přednáška č. 6.
SQL PVA Jan Hora. SQL „graficky“ Grafický vs. pravý SQL SELECT ORDED BY WHERE.
Rauer Luboš Kopic Petr Blažek Tomáš. Structured Query Language - dotazovací jazyk -> pracuje s dotazy - neprocedurální jazyk - mocný, ale přitom jednoduchý.
Databázové systémy 2 Cvičení č. 6 Ing. Tomáš Váňa Fakulta elektrotechniky a informatiky Univerzita Pardubice.
Databázové systémy II Přednáška V Ing. Tomáš Váňa, Ing. Jiří Zechmeister Fakulta elektrotechniky a informatiky
Architektury a techniky DS Cvičení č. 9 RNDr. David Žák, Ph.D. Fakulta elektrotechniky a informatiky
Databázové systémy II Přednáška č. 9. Transakce je logická jednotka práce sestávající z jednoho nebo více SQL příkazů, které jsou atomické z hlediska.
Transakční zpracování v SQL P. Částek. Transakce Transakce = logická jednotka práce Podaří-li se všechny části transakce, potvrdíme je. COMMIT Jestliže.
Databázové systémy I Cvičení č. 10 Fakulta elektrotechniky a informatiky Univerzita Pardubice 2013.
7. Typ soubor Souborem dat běžně rozumíme uspořádanou množinu dat, uloženou mimo operační paměť počítače (na disku). Pascalský soubor je abstrakcí skutečného.
Informatika II PAA DOTAZOVACÍ JAZYKY
Dynamic SQL P. Částek. Dynamic SQL Embedded SQL je překládaný preprocesorem => za běhu nelze nechat uživatele rozhodovat o vzhledu samotných SQL příkazů.
Aplikační a programové vybavení
Databázové systémy Informatika pro ekonomy, př. 18.
Obchodní akademie, Ostrava-Poruba, příspěvková organizace Vzdělávací materiál/DUM VY_32_INOVACE_01B13 Autor Ing. Jiří Kalousek Období vytvoření březen.
Databázové systémy 2 Cvičení č. 5 Fakulta elektrotechniky a informatiky Univerzita Pardubice.
Databázové systémy SQL Výběr dat.
TEMPORÁLNÍ DATABÁZE A TSQL2
Aktivní databáze Michal Ficek Tomáš Pop
Databázové systémy Zabezpečení DBS. Cíle, které je třeba vzít v úvahu při návrhu databázové aplikace z pohledu bezpečnosti: Důvěrnost - informace by neměly.
Vnořené SQL (embedded SQL) Dotazovací jazyky I
Teorie zpracování dat RELAČNÍ DATOVÝ MODEL.
1 Syntaxe a sémantika aktivních databází Databázové triggery Aktivní pravidla 10. listopadu 2004 Zuzana Reitermanová & Vojtěch Hlaveš.
Databázové systémy Úvod, Základní pojmy. Úvod S rozvojem lidského poznání roste prudce množství informací. Jsou kladeny vysoké požadavky na ukládání,
Databázové systémy přednáška 8 – Transakce
Roman Danel Institut ekonomiky a systémů řízení 2016
Databázové systémy I Přednáška 11 Databázové systémy 1 – KIT/IDAS1
Informatika pro ekonomy přednáška 8
Příkazy cyklu (1) Umožňují vícekrát (nebo ani jednou) pro-vést určitý příkaz Jazyk C rozlišuje příkaz cyklu: s podmínkou na začátku: obecný tvar: while.
Databázové systémy a SQL
Přednáška 9 Triggery.
Cyklus for (1) Obecný tvar: for (výraz1; výraz2; výraz3) příkaz
Transkript prezentace:

Databázové triggery Aktivní pravidla Jan Plonka

Přehled Co jsou to triggery? Historie Pojmy a členění triggerů Jednotlivé realizace + příklady Známé problémy

Co je to trigger? Příkaz (příp. procedura), kterou db systém automaticky vykoná při výskytu specifikované události. Významné rozšíření kontroly integritních omezení poskytovaných SŘBD. Řešení je v současnosti spojeno s operacemi INSERT, DELETE, UPDATE. Svázán s definicí tabulky. V architektuře klient-server je vykonáván na serveru.

Historie konec 80. let – snaha o standardizaci ’92 standard SQL92 je neobsahuje  Mnoho otevřených otázek  Zvláště oblast předcházení vzájemného vyvolávání triggerů  Snaha výrobců zachovávat standard x mnoho nejasností => rozdíly v implementacích Standardizace v SQL:1999 (příkaz CREATE TRIGGER)

Pojmy Události – primitiva ve změně stavu db  Některé systémy navíc monitorují: Výběry dat Časově závislé události (např. 17hod každý Pátek) Externí události explicitně vyvolané jinou aplikací Podmínka – buď db predikát nebo dotaz  Vrací pravdivostní hodnotu.  V případě dotazu: TRUE = výsledek dotazu je neprázdný, FALSE jinak.

Pojmy(2) Akce – libovolný program manipulující s daty.  Může dále obsahovat: Transakční příkazy (např. ROLLBACK WORK) Příkazy manipulující s triggery (aktivace, deaktivace jednoho či skupiny triggerů.  Může aktivovat i externě definované procedury.

Stavy pravidla (triggeru) Pravidlo je:  Spuštěno (triggered) – pokud dojde k relevantní události  Vyhodnoceno (considered) – po vyhodnocení podmínky  Vykonáno (executed) – po provedení akce

Poté, co příkazy definované uživatelem spustí zpracování pravidel (rule processing)  Samostatné V kontextu oddělené transakce, která je vytvořena původní transakcí poté, co nastane sledovaná událost. Členění  Okamžité – vyhodnocení akce: Před tím, než je událost monitorována Poté, co událost nastane Namísto události  Odložené Na konci transakce Na konci uživatelsky definovaných příkazů Podle vyhodnocení triggeru monitorované události:

Členění(2) Podle vykonání akce vzhledem k vyhodnocení:  Okamžité – akce se vykoná okamžitě po vyhodnocení podmínky – nejčastější případ  Odložené – odloží vykonání akce na konec transakce nebo uživatelem definovaného příkazu zpracování pravidel  Samostatné – v kontextu oddělené transakce vytvořené z původní po vyhodnocení podmínky

Členění(3) Podle úrovně granularity sledovaných změn:  Na úrovni instance – tj. změny ovlivňující jednotlivé řádky v tabulce (příp. objekty tříd)  Na úrovni příkazů – příkazy manipulující s daty jsou považovány za události. Pozn. Úroveň granularity ovlivňuje obsah transakčních hodnot – dočasných dat popisujících změny stavu provedených transakcí.

Členění (4) Podle priority výběru triggerů z konfliktní množiny: Konfliktní množina – množina triggerů, které mohou být spuštěny současně.  Úplné uspořádání – každý z triggerů má jednoznačnou číselnou prioritu  Částečné uspořádání – priority jsou specifikovány číselně nebo relativně. Systém vytvoří úplné uspořádání konzistentní s částečným Triggery jsou vybírány nedeterministicky  Systém neobsahuje prioritní mechanismus Systém používá vnitřní úplné uspořádání Triggery jsou vybírány nedeterministicky

Další rysy a vlastnosti Opakovatelnost vykonávání  V prostředí se systémově definovanými prioritami  Za stejných podmínek a stavu db je posloupnost vykonávání triggerů vždy stejná. Aktivace / deaktivace triggerů  podléhá autorizaci (možné porušení kontroly IO) Sdružování do skupin  Hromadné zpracování, aktivace, deaktivace

Některé relační systémy podporující triggery Starburst (IBM) Oracle DB2 Informix Sybase Illustra Reach – základ Open OODB Ode NAOS – rozšíření O2 Chimera

Starburst Triggery založeny na schématu Událost-Podmínka-Akce (ECA)  Událost – příkaz SQL pro manipulaci s daty (INSERT, DELETE, UPDATE)  Podmínka – predikát nad stavem databáze, vyjádřen příkazy SQL  Akce – libovolný SQL dotaz ( včetně SELECT, INSERT, DELETE, UPDATE); navíc mohou obsahovat příkazy pro manipulaci s triggery a transakční instrukci ROLLBACK WORK Intuitivní sémantika – když událost nastane, pokud je podmínka platná, proveď akci.

Triggery jsou přidány do schématu a sdíleny všemi aplikacemi Transakce mohou dynamicky aktivovat/deaktivovat existující triggery Triggery mohou být seskupovány Vlastnosti triggeru Starburst

Příklad CREATE RULE KontrolaMezd ON Zam WHEN INSERTED, DELETED, UPDATED (Mzda) IF (SELECT AVG(Mzda) FROM Zam) > 100 THEN UPDATE Zam SET Mzda =.9 * Mzda Starburst Trigger kontroluje modifikace v platech zaměstnanců. Pokud průměrný plat překročí danou hodnotu (100), jsou všechny platy příslušně redukovány.

Vytvoření triggeru := CREATE RULE ON WHEN [ IF ] THEN [ PRECEDES ] [ FOLLOWS ] := INSERTED | DELETED | UPDATED [( )] Starburst

Sémantika triggerů Odložené vykonávání  triggery jsou prováděny v kontextu dané transakce  implicitní inicializace probíhá po provedení COMMIT WORK  provádění triggerů lze explicitně vyvolat příkazem PROCESS RULES. Stavy triggeru  Nespuštěn (untriggered) – na začátku transakce  Spuštěn – objeví-li se spouštějící událost (triggering event) Konfliktní množina - tvořena aktuálně spuštěnými triggery Starburst

Algoritmus provádění pravidel z konfliktní množiny WHILE ( konfliktní množina ≠ Ø ) { 1. Vyber nějaký trigger T z konfliktní množiny z triggerů s nejvyšší prioritou; změn stav T na „nespuštěn“. 2. Vyhodnoť podmínku v T. 3. Pokud je podmínka v T splněna, proveď akci danou T. } Opakovatelnost vykonání – systém vytváří úplné uspořádání kompatibilní s uživatelským částečným pomocí údaje o čase vytvoření triggeru. Starburst

Další příkazy triggeru Aktivace triggeru := ACTIVATE RULE ON Deaktivace triggeru := DEACTIVATE RULE ON Smazání triggeru:= DROP RULE ON Starburst

Příkazy skupiny triggerů Vytvoření skupiny := CREATE RULESET Modifikace skupiny := ALTER RULESET [ ADDRULES ] [ DELRULES ] Smazání skupiny := DROP RULESET Starburst

Uvažujme transakci, která přidá n-tice (Rick, 150) a (John, 200). Vložení spustí trigger KontrolaMezd, proběhne vyhodnocení podmínky, tato je splněna (AVG(Mzda) = 112) a akce je vykonána. Nový stav vypadá takto: Příklad – provedení triggeru CREATE RULE KontrolaMezd ON Zam WHEN INSERTED, DELETED, UPDATED (Mzda) IF (SELECT AVG(Mzda) FROM Zam) > 100 THEN UPDATE Zam SET Mzda =.9 * Mzda Původní tabulka: ZaměstnanecMzda Stefano81 Patrick81 Michael99 Rick135 John108 Starburst ZaměstnanecMzda Stefano90 Patrick90 Michael110

Příklad(2) Operace UPDATE znovu spustí trigger Podmínka je vyhodnocena, splněna (AVG(Mzda) = 101) a akce je znovu provedena: Starburst ZaměstnanecMzda Stefano73 Patrick73 Michael89 Rick121 John97 Trigger je UPDATEm znovu spuštěn Podmínka je vyhodnocena, nyní vrací FALSE Provádění je ukončeno klidovým stavem (quiescent state). Provádění akce triggeru tedy konverguje ke klidovému stavu. Správný návrh konvergujících akcí je obvykle zodpovědností autora triggeru

Příklad (3) CREATE RULE DobřePlacení ON Zam WHEN INSERTED IF EXISTS (SELECT * FROM INSERTED WHERE Mzda > 100) THEN INSERT INTO DobřePlaceníZam (SELECT * FROM INSERTED WHERE Mzda > 100) FOLLOWS PrumernaMzda Starburst

Oracle Podpora obecně použitelných triggerů dle předběžné specifikace k SQL:1999 Akce mohou obsahovat libovolný PL/SQL kód Události jsou operace manipulující s daty (INSERT, DELETE, UPDATE) na dané cílové tabulce Podpora dvou granularit:  Řádková – spouštění triggeru se projeví na každém řádku, který byl ovlivněn operací  Příkazová – podobná jako u Starburst.

Vlastnosti a typy triggerů Triggery jsou okamžité – vyhodnocení je úzce spjato s provedením spouštěcí operace – srovnej Starburst (opožděné spouštění) Triggery mohou být vyhodnoceny a vykonány před a po spouštěcí operaci. Kombinací granularit a časů vyvolání dostáváme tyto možnosti: 1. Řádková granularita a spouštění před operací 2. Příkazová granularita a spouštění před operací 3. Řádková granularita, spouštění po operaci 4. Příkazová granularita, spouštění po operaci

Syntaxe :=CREATE TRIGGER { BEFORE | AFTER } ON [ [ REFERENCING ] FOR EACH ROW [ WHEN ( ) ] ] := INSERT | DELETE | UPDATE [ OF ] := OLD AS | Nový AS

Příklad CREATE TRIGGER Přeobjednej AFTER UPDATE OF DílPoRuce ON Sklad WHEN (Nový.DílPoRuce < Nový.HraniceNovéObjednávky) FOR EACH ROW DECLARE NUMBER X BEGIN SELECT COUNT(*) INTO X FROM NevyřízenéObjednávky WHERE Díl = Nový.Díl; IF X = 0 THEN INSERT INTO NevyřízenéObjednávky VALUES(Nový.Díl, Nový.ObjednávanéMnožství, SYSDATE) END IF; END;

Stav tabulky Sklad: Předpokládejme, že tabulka NevyřízenéObjednávky je na počátku prázdná. Příklad (2) DílDílPoRuceHraniceNovéObjed návky PřeobjednávanéMnožství

Příklad (3) Vezměme následující transakci (provedenou 10. října 1996) T1: UPDATE Sklad SET DílPoRuce = DílPoRuce – 70 WHERE Díl = 1 Způsobí vykonání triggeru Přeobjednej, který do tabulky NevyřízenéObjednávky zapíše n-tici (1, 100, ). Dále předpokládejme následující transakci provedenou týž den: T2:UPDATE Sklad SET DílPoRuce = DílPoRuce – 60 WHERE Díl >= 1 Zde je trigger vykonán nad všemi n-ticemi a podmínka je splněna pro části 1 a 3. Zapsána je však jen n-tice (3, 120, ), neboť n- tice s částí 1 již v tabulce je. Pozn. Přestože T1 a T2 jsou potvrzeny odděleně, výsledky T1 jsou v T2 viditelné.