Fakulta elektrotechniky a informatiky

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

Databázové systémy 2 Cvičení č. 8
Základy jazyka SQL Jan Tichava
Ladislav Hofman, Jan Slavík TUL Předmět databázové systémy
Databázové systémy 2 Cvičení č. 9 Ing. Tomáš Váňa Fakulta elektrotechniky a informatiky Univerzita Pardubice.
A5M33IZS – Informační a znalostní systémy Dotazovací jazyk SQL - I.
SQL: DDL v ORACLE CREATE TABLE jméno_tabulky (atribut datový_typ [DEFAULT][attribut_constraint] [, atribut datový_typ [DEFAULT] [attribut_constraint]],...
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.
Fakulta elektrotechniky a informatiky
Informační systémy Realizace uložených procedur a spouští, jejich praktické využití.
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
Fakulta elektrotechniky a informatiky
Architektury a techniky DS Tvorba efektivních příkazů I Přednáška č. 3 RNDr. David Žák, Ph.D. Fakulta elektrotechniky a informatiky
Databázové systémy 1 Cvičení č. 4 Fakulta elektrotechniky a informatiky Univerzita Pardubice.
Databázové systémy 1 Cvičení č. 2 Fakulta elektrotechniky a informatiky Univerzita Pardubice.
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.
Databázové systémy II Přednáška č. 5 RNDr. David Žák, Ph.D. Fakulta elektrotechniky a informatiky
Temporální databáze a TSQL
Uživatelé, Role, Schémata
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.
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 výhody a nevýhody Ing. Emilie Šeptáková
Databázové systémy II Přednáška č. 4, 5 RNDr. David Žák, Ph.D. Fakulta elektrotechniky a informatiky
Execution plans Lubomír Andrle 6. přednáška
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.
Fakulta elektrotechniky a informatiky
Databázové systémy teorie a návrh relačních databázových systémů část II.
Vypracoval: Ondřej Dvorský Třída: VIII.A
KIV/ZIS cvičení 6 Tomáš Potužák. Pokračování SQL Klauzule GROUP BY a dotazy nad více tabulkami Stáhnout soubor studenti_dotazy_sql.mdb.
Databázové systémy I Cvičení č. 6 Fakulta elektrotechniky a informatiky Univerzita Pardubice 2013.
SQL PVA Jan Hora. SQL „graficky“ Grafický vs. pravý SQL SELECT ORDED BY WHERE.
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 č. X Ing. Tomáš Váňa, Ing. Jiří Zechmeister Fakulta elektrotechniky a informatiky
Administrace Oracle Práva a role, audit Filip Řepka 2010.
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 II Cvičení č. 3 RNDr. David Žák, Ph.D. Fakulta elektrotechniky a informatiky
Databázové systémy I Cvičení č. 7 Fakulta elektrotechniky a informatiky Univerzita Pardubice 2013.
Databázové systémy 2 Zkouška – 8:00. Příklad I – Procedura – 5 bodů Vytvořte proceduru P_ZK2(p_table_name VARCHAR2, p_min_nuls NUMBER, p_drop.
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í
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.
Základní obeznámení s jazykem SQL Databázové systémy.
Databázové Aplikace Slidy ke cvičení DBI026, část 3 KSI MFF UK Verze
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.
Architektury a techniky DS Cvičení č. 6 RNDr. David Žák, Ph.D. Fakulta elektrotechniky a informatiky
1 Syntaxe a sémantika aktivních databází Databázové triggery Aktivní pravidla 10. listopadu 2004 Zuzana Reitermanová & Vojtěch Hlaveš.
Příkazy jazyka SQL ve VFP a na SQL Serveru
Databázové systémy I Cvičení č. 5 Fakulta elektrotechniky a informatiky Univerzita Pardubice 2013.
Databázové systémy II Přednáška č. VII Ing. Tomáš Váňa, Ing. Jiří Zechmeister Fakulta elektrotechniky a informatiky
Databázové systémy přednáška 6 – Indexy
Databázové systémy přednáška 8 – Transakce
Roman Danel Institut ekonomiky a systémů řízení 2016
Dotazovací jazyk SQL - III
Databázové systémy a SQL
Databázové systémy I Přednáška 11 Databázové systémy 1 – KIT/IDAS1
Dotazovací jazyk SQL I.
Databázové systémy a SQL
Šablona 32 VY_32_INOVACE_038.ICT.34
Databázové systémy a SQL
Přednáška 9 Triggery.
Databázové systémy a SQL
Transkript prezentace:

Fakulta elektrotechniky a informatiky david.zak@upce.cz Databázové systémy II Přednáška č. 8 RNDr. David Žák, Ph.D. Fakulta elektrotechniky a informatiky david.zak@upce.cz

Databázové systémy II - př. 6 Obsah Triggery pro databázové a klientské události. Příklady použití triggerů. Příklady využití triggerů a omezení pro dodržení integritních omezení. Databázové systémy II - př. 6

Triggery – deaktivace a aktivace (blokování a povolení) V určitých případech může být vhodné/požadované dočasně deaktivovat funkci triggeru, například při vkládání řádků odkazujících na neexistující objekty, importu větších objemů dat (obnova dat ze zálohy atd.) bez prodlevy. Pro konkrétní trigger: ALTER TRIGGER triggername DISABLE; ALTER TRIGGER triggername ENABLE; Pro všechny triggery svázané s konkrétní tabulkou: ALTER TABLE tablename DISABLE ALL TRIGGERS; ALTER TABLE tablename ENABLE ALL TRIGGERS; Databázové systémy II - př. 6

Triggery – pohled USER_TRIGGERS Příkaz pro zjištění triggerů v uživatelově schématu: SELECT Trigger_type, Triggering_event, Table_name FROM USER_TRIGGERS WHERE Trigger_name = 'REORDER'; TYPE TRIGGERING_STATEMENT TABLE_NAME ---------------- -------------------------- ------------ AFTER EACH ROW UPDATE INVENTORY Databázové systémy II - př. 6

Triggery – pohled USER_TRIGGERS Příkazy pro zjištění triggerů a jejich obsahu v uživatelově schématu: SELECT Trigger_body FROM USER_TRIGGERS WHERE Trigger_name = 'REORDER'; TRIGGER_BODY -------------------------------------------- DECLARE x NUMBER; BEGIN SELECT COUNT(*) INTO x FROM Pending_orders WHERE Part_no = :new.Part_no; IF x = 0 THEN INSERT INTO Pending_orders VALUES (:new.Part_no, :new.Reorder_quantity, sysdate); END IF; END; Databázové systémy II - př. 6

Databázové systémy II - př. 6 Triggery - auditování Triggery jsou obvykle použity k doplnění vestavěných auditovacích funkcí Oracle databáze. Ačkoli triggery mohou ukládat informace obdobně těm ukládaným příkazem AUDIT, používejte triggery jenom v případě, kdy jsou potřeba více podrobné auditovací informace - například pro value-based audit pro každý řádek. Občas se používaní příkazu AUDIT považuje za bezpečnostní audit, kdežto používání triggerů za finanční audit. DML a DDL audit: Standardní auditovací vlastnosti umožňují audit DML a DDL příkazů v souvislosti se všemi objekty a strukturami schématu Triggery umožňují audit DML příkazů nad tabulkami a audit DDL příkazů na úrovni SCHEMA nebo DATABASE. Více lze najít na: http://download.oracle.com/docs/cd/B28359_01/appdev.111/b28370/triggers.htm Databázové systémy II - př. 6

Triggery pro databázové události STARTUP SHUTDOWN DB_ROLE_CHANGE SERVERERROR Databázové systémy II - př. 6

Triggery pro klientské události Klientské události BEFORE / AFTER ALTER BEFORE / AFTER DROP BEFORE / AFTER ANALYZE BEFORE / AFTER ASSOCIATE STATISTICS BEFORE / AFTER AUDIT BEFORE / AFTER NOAUDIT BEFORE / AFTER COMMENT BEFORE / AFTER CREATE BEFORE / AFTER DDL BEFORE / AFTER DISASSOCIATE STATISTICS BEFORE / AFTER GRANT AFTER LOGON / BEFORE LOGOFF BEFORE / AFTER RENAME BEFORE / AFTER REVOKE AFTER SUSPEND BEFORE / AFTER TRUNCATE Příklad CREATE OR REPLACE TRIGGER On_Logon AFTER LOGON ON The_user.Schema BEGIN Do_Something; END; Databázové systémy II - př. 6

Triggery - LOGON a LOGOFF Vytváření LOGON a LOGOFF Triggerů , které monitorují uživatele databáze do logovací tabulky. Vytvořme tabulku hr_users_log pro ukládání informací o událostech LOGON a LOGOFF. Následně vytvoříme triggery note_hr_logon_trigger a note_hr_logoff_trigger pro zápis informací o těchto událostech do tabulky. CREATE TABLE hr_users_log (user_name VARCHAR2(30), activity VARCHAR2(20), event_date DATE); CREATE OR REPLACE TRIGGER note_hr_logon_trigger AFTER LOGON ON HR.SCHEMA BEGIN INSERT INTO hr_users_log VALUES (USER, 'LOGON', SYSDATE); END; CREATE OR REPLACE TRIGGER note_hr_logoff_trigger BEFORE LOGOFF INSERT INTO hr_users_log VALUES (USER, 'LOGOFF', SYSDATE); Databázové systémy II - př. 6

Databázové systémy II - př. 6 ROLLBACK in PL/SQL Následující příklad vkládá informace o zaměstnanci do třech různých databázových tabulek. Jestliže nějaký INSERT se pokouší uložit duplicitní číslo zaměstnance, je vyvolána předdefinovaná výjimka DUP_VAL_ON_INDEX. Pro zajištění integrity je třeba zajistit, že v případě vyvolání výjimky jsou změny ve všech tabulkách odvolány, k čemuž je použit příkaz ROLLBACK. NELZE použít v triggeru. CREATE TABLE emp_name AS SELECT employee_id, last_name FROM employees; CREATE UNIQUE INDEX empname_ix ON emp_name (employee_id); CREATE TABLE emp_sal AS SELECT employee_id, salary FROM employees; CREATE UNIQUE INDEX empsal_ix ON emp_sal (employee_id); CREATE TABLE emp_job AS SELECT employee_id, job_id FROM employees; CREATE UNIQUE INDEX empjobid_ix ON emp_job (employee_id); DECLARE emp_id NUMBER(6); emp_lastname VARCHAR2(25); emp_salary NUMBER(8,2); emp_jobid VARCHAR2(10); BEGIN SELECT employee_id, last_name, salary, job_id INTO emp_id, emp_lastname, emp_salary, emp_jobid FROM employees WHERE employee_id = 120; INSERT INTO emp_name VALUES (emp_id, emp_lastname); INSERT INTO emp_sal VALUES (emp_id, emp_salary); INSERT INTO emp_job VALUES (emp_id, emp_jobid); EXCEPTION WHEN DUP_VAL_ON_INDEX THEN ROLLBACK; DBMS_OUTPUT.PUT_LINE('Inserts were rolled back'); END; Databázové systémy II - př. 6

Triggery – vyvolání chyby Příklad demonstruje vyvolání chyb, která zamezí vložení trpaslíka do tabulky trpaslíků, pokud jich v této tabulce již bude 7: CREATE OR REPLACE TRIGGER omezeni_trpasliku BEFORE INSERT on TRPASLICI FOR EACH ROW DECLARE v_pocet_trpasliku NUMBER; BEGIN SELECT COUNT(*) INTO v_pocet_trpasliku FROM trpaslici; IF v_pocet_trpasliku >= 7 THEN RAISE_APPLICATION_ERROR(-20005,'Trpaslíků může být maximálně sedm'); END IF; END omezeni_trpasliku; Databázové systémy II - př. 6

Databázové systémy II - př. 6 Triggery - příklad Příklad CREATE OR REPLACE TRIGGER Print_salary_changes BEFORE DELETE OR INSERT OR UPDATE ON Emp_tab FOR EACH ROW WHEN (new.Empno > 0) DECLARE sal_diff number; BEGIN sal_diff := :new.sal - :old.sal; dbms_output.put('Old salary: ' || :old.sal); dbms_output.put(' New salary: ' || :new.sal); dbms_output.put_line(' Difference ' || sal_diff); END; Trigger bude aktivován pro příkazy: DELETE FROM Emp_tab; INSERT INTO Emp_tab VALUES ( ... ); INSERT INTO Emp_tab SELECT ... FROM ... ; UPDATE Emp_tab SET ... ; Databázové systémy II - př. 6

Triggery - kaskádování Databázové systémy II - př. 6

FOREIGN KEY – DML operace zajištěné omezeními DML příkaz V tabulce rodičů V tabulce potomků INSERT vždy OK, pokud je hodnota klíče unikátní OK pouze v případě, pokud je hodnota cizího klíče existuje v tabulce rodičů nebo je NULL UPDATE No Action (default, občas se označuje jako restrict) Dovoleno v případě, kdy žádná hodnota cizího klíče v tabulce potomků nezůstane bez vazby na tabulku rodičů Dovoleno, pokud nová hodnota cizího klíče existuje v tabulce rodičů (nebo je NULL) DELETE No Action Dovoleno v případě, kdy žádná hodnota v tabulce potomků se neodkazuje na vymazávaný řádek vždy OK DELETE Cascade vždy OK , ovlivněné řádky se automaticky odstraní DELETE Set Null vždy OK , hodnota cizího klíče v ovlivněných řádcích se změní na NULL Databázové systémy II - př. 6

FOREIGN KEY – DML operace s nutností zajištění triggery DML příkaz V tabulce rodičů V tabulce potomků UPDATE CASCADE vždy OK Dovoleno, pokud nová hodnota cizího klíče existuje v tabulce rodičů (nebo je NULL) UPDATE Set Null Vždy OK, hodnota cizího klíče v ovlivněných řádcích se změní na NULL, pozor na rozpad referenční integrity UPDATE Default Vždy OK, hodnota cizího klíče v ovlivněných řádcích se změní na default hodnotu, pozor na rozpad referenční integrity DELETE Set Default vždy OK , hodnota cizího klíče v ovlivněných řádcích se změní na default hodnotu Databázové systémy II - př. 6

Databázové systémy II - př. 6 Triggery Příklad create or replace Trigger Dodavatele_update_cascade after update of dodavatel_id on dodavatele for each row begin -- Změní hodnoty cizího klíče pokud hodnota v rodičovské tabulce byla změněna if (:old.dodavatel_id != :new.dodavatel_id) then update Produkty set dodavatel_id = :new.dodavatel_id where dodavatel_id = :old.dodavatel_id; end; end if; Databázové systémy II - př. 6

Databázové systémy II - př. 6 Omezení - constraint Při importu dat (většinou z jedné databáze do jiné) mohou nastat problémy s integritními omezeními. Příkladem je nevhodné pořadí vytvářených tabulek a dat do nich vkládaných (tj. například není vložen řádek do nadřízené tabulky, na níž se daný řádek v podřízené tabulce odkazuje). Řešením je vypnutí omezení během importu a poté je opět obnovit. Je třeba mít na paměti, že pokud data nebudou splňovat požadavky omezení, nebude možné již tato omezení obnovit. V takovém případě je nezbytné nejdříve data upravit a teprve poté aktivovat omezení, například: ALTER TABLE tablename DISABLE CONSTRAINT constraint_name; ALTER TABLE tablename ENABLE CONSTRAINT constraint_name; Databázové systémy II - př. 6

Databázové systémy II - př. 6 Omezení - constraint Jakékoli omezení zvyšuje náklady na práci s řádky tabulky (INSERT, UPDATE, DELETE) Zjednodušeně lze říci že nároky rostou v pořadí NOT NULL UNIQUE PRIMARY KEY FOREIGN KEY CHECK TRIGGERY Databázové systémy II - př. 6

Databázové systémy II - př. 6 Triggery Vytvoření triggeru v SQL developeru http://download.oracle.com/docs/cd/B28359_01/appdev.111/b28843/tdddg_triggers.htm#BABECIAE http://download.oracle.com/docs/cd/B28359_01/appdev.111/b28370/triggers.htm#i1007097 Databázové systémy II - př. 6