Deklarativní IO shrnutí minulé přednášky

Podobné dokumenty
Vkládání, aktualizace, mazání

Integritní omezení (IO)

7. Integrita a bezpečnost dat v DBS

7. Integrita a bezpečnost dat v DBS

Databázové systémy II. KIV/DB2 LS 2007/2008. Zadání semestrální práce

Text úlohy. Systémový katalog (DICTIONARY):

Informační systémy 2008/2009. Radim Farana. Obsah. Jazyk SQL

Jazyk SQL 3 - DML, DDL, TCL, DCL

PL/SQL. Jazyk SQL je jazykem deklarativním, který neobsahuje procedurální příkazy jako jsou cykly, podmínky, procedury, funkce, atd.

PRŮBĚHOVÝ TEST Z PŘEDNÁŠEK

2. blok část B Základní syntaxe příkazů SELECT, INSERT, UPDATE, DELETE

Databázové systémy. - SQL * definice dat * aktualizace * pohledy. Tomáš Skopal

Databáze II. 1. přednáška. Helena Palovská

Základy jazyka SQL. 87 Jazyk SQL SQL je dotazovací jazyk, takže přes propojenou aplikaci se serveru odevzdá dotaz

Databáze I. 5. přednáška. Helena Palovská

SQL - trigger, Databázové modelování

Databázové systémy, MS Access. Autor: Ing. Jan Nožička SOŠ a SOU Česká Lípa VY_32_INOVACE_1130_Databázové systémy, MS Access_PWP

Optimalizace dotazů a databázové transakce v Oracle

Obsah. Kapitola 1. Kapitola 2. Kapitola 3. Kapitola 4. Úvod 11. Stručný úvod do relačních databází 13. Platforma 10g 23

Jazyk SQL databáze SQLite. připravil ing. petr polách

Stored Procedures & Database Triggers, Tiskové sestavy v Oracle Reports

Databázové systémy. Cvičení 6: SQL

Databáze 2011/2012 SQL DDL (CREATE/ALTER/DROP TABLE), DML (INSERT/UPDATE/DELETE) RNDr.David Hoksza, Ph.D.

Kurz Databáze. Obsah. Dotazy. Zpracování dat. Doc. Ing. Radim Farana, CSc.

Databáze II. 2. přednáška. Helena Palovská

2-3 hodiny. Při studiu tohoto bloku se předpokládá, že čtenář je obeznámen s jazykem SQL a zná základy jazyka PL/SQL.

4IT218 Databáze. 4IT218 Databáze

Databáze SQL SELECT. David Hoksza

InnoDB transakce, cizí klíče, neumí fulltext (a nebo už ano?) CSV v textovém souboru ve formátu hodnot oddělených čárkou

Fakulta elektrotechniky a informatiky Databázové systémy 2. Leden 2010 souhrn. Červené dobře (nejspíš), modré možná

Databáze I. 1. přednáška. Helena Palovská

Funkce pro práci s jednotlivými řádky

Virtual private database. Antonín Steinhauser

Dotazy v SQL. Výraz relační algebry R1( )[A1,A2,...,Aj] lze zapsat takto: SELECT A1,A2,...,Aj FROM R1 WHERE. Výraz (R1, R2... Rk)( )[A1,A2,...

Administrace Oracle. Práva a role, audit

Verzování a publikace dat na webu za pomoci PostgreSQL

SQL. strukturovaný dotazovací jazyk. Structured Query Language (SQL)

Oracle XML DB. Tomáš Nykodým

Transakce a zamykání. Administrace MS SQL Serveru (NDBI039) Pavel Hryzlík

Kód v databázi. RNDr. Ondřej Zýka

Administrace Oracle Práva a role, audit. Kukhar Maria

Databázové systémy a SQL

Ukázka knihy z internetového knihkupectví

8. Zpracování dotazu. J. Zendulka: Databázové systémy 8 Zpracování dotazu 1

Semestrální práce z DAS2 a WWW

Replikace je proces kopírování a udržování databázových objektů, které tvoří distribuovaný databázový systém. Změny aplikované na jednu část jsou

10. Architektura klient/server a třívrstvá architektura

Databázové systémy Cvičení 5.2

RELAČNÍ DATABÁZOVÉ SYSTÉMY

10. Architektura klient/server a třívrstvá architektura

SQL v14. 4D Developer konference. 4D Developer conference 2015 Prague, CZ Celebrating 30 years

B Organizace databáze na fyzické úrovni u serveru Oracle

01. Kdy se začala formovat koncept relačních databází (Vznik relačního modelu, první definice SQL)? a) 1950 b) 1960 c) 1970 d) 1980

J. Zendulka: Databázové systémy 8 Zpracování dotazu Podstata optimalizace zpracování dotazu

Návrh a tvorba WWW stránek 1/14. PHP a databáze

O Apache Derby detailněji. Hynek Mlnařík

Databázové systémy I

Databázové systémy úvod

Stručný obsah. část III Aktualizace dat Kapitola 10: Aktualizace databáze 257 Kapitola 11: Integrita dat 275 Kapitola 12: Zpracování transakcí 307

Transakce. Ing. Marek Sušický, RNDr. Ondřej Zýka

Transakce a zamykání Jiří Tomeš

Administrace Oracle - Správa zdrojů

Marian Kamenický. Syntea software group a.s. marian.kamenicky. MFFUK Praha 2012/13

Zápisování dat do databáze

Jaký je rozdíl v definicicíh VARCHAR2(20 BYTE) a VARCHAR2(20 CHAR):

RNDr. Michal Kopecký, Ph.D. Department of Software Engineering, Faculty of Mathematics and Physics, Charles University in Prague

Operátory ROLLUP a CUBE

6. SQL složitější dotazy, QBE

Novinky v PostgreSQL 9.4. Tomáš Vondra, 2ndQuadrant

Informační systémy 2008/2009. Radim Farana. Obsah. Dotazy přes více tabulek

Západočeská univerzita v Plzni Katedra informatiky a výpočetní techniky. 9. června krovacek@students.zcu.cz

Primární klíč (Primary Key - PK) Je právě jedna množina atributů patřící jednomu z kandidátů primárního klíče.

Databázové systémy I

Databázové systémy a SQL

RNDr. Michal Kopecký, Ph.D. Department of Software Engineering, Faculty of Mathematics and Physics, Charles University in Prague

Kapitola 6: Omezení integrity. Omezení domény

6. blok část B Vnořené dotazy

2. blok Zabezpečení a ochrana dat

Kapitola 1: Úvod. Systém pro správu databáze (Database Management Systém DBMS) Účel databázových systémů

Tabulka fotbalové ligy

Virtual Private Database (VPD) Jaroslav Kotrč

Databáze I. Přednáška 4

Využití XML v DB aplikacích

SQL. Pohledy, ochrana dat,... Pavel Tyl

4. lekce Přístup k databázi z vyššího programovacího jazyka

Jazyk PL/SQL Úvod, blok

Sada 1 - PHP. 14. Úvod do jazyka SQL

Inovace a zkvalitnění výuky prostřednictvím ICT. Základní seznámení s MySQL Ing. Kotásek Jaroslav

PG 9.5 novinky ve vývoji aplikací

řízení transakcí 2-3 hodiny

Databázové systémy. Datová integrita + základy relační algebry. 4.přednáška

KIV/ZIS cvičení 6. Tomáš Potužák

Obchodní akademie a Jazyková škola s právem státní jazykové zkoušky Jihlava

Práva a role. Martin Polák. NDBI013 Administrace Oracle

8.2 Používání a tvorba databází

Inovace a zkvalitnění výuky prostřednictvím ICT Databázové systémy MySQL základní pojmy, motivace Ing. Kotásek Jaroslav

Maturitní témata z předmětu PROGRAMOVÉ VYBAVENÍ pro šk. rok 2012/2013

FIREBIRD relační databázový systém. Tomáš Svoboda

Databázové systémy I. 7. Přednáška

Embedded SQL v C/C++ III - pole, struktury. Jindřich Vodrážka

Transkript:

Deklarativní IO shrnutí minulé přednášky Existují následující typy omezení: NOT NULL UNIQUE Key PRIMARY KEY FOREIGN KEY CHECK Pro zobrazení všech definic a názvů IO se použije dotaz na pohledy data dictionary (USER_CONSTRAINTS, USER_CONS_COLUMS,...)

Program přednášky: ošetření IO pomocí triggerů procedurální ošetření IO bezpečnost dat pohledy uživatelská schémata a privilegia databázové role transakční zpracování

Procedurální IO na straně serveru můžeme využít rozšíření funkcionality DB stroje o uložené programové jednotky a triggery příklady Oracle, Postgresql procedury, funkce, balíky (packages), triggery složitější IO lze implementovat pomocí triggerů příklad Oracle, jazyk PL/SQL

Triggery PL/SQLvázaný na konkrétní objekt (tabulku) a akci (insert, update, delete,...) Triggery databázové a aplikační

Databázový trigger - příklad Application SQL> INSERT INTO EMP 2...; EMP table CHECK_SAL trigger EMPNO ENAME JOB SAL 7838 KING PRESIDENT 5000 7698 BLAKE MANAGER 2850 7369 SMITH CLERK 800 7788 SCOTT ANALYST 3000

Triggery - vlastnosti časování nad tabulkou: BEFORE, AFTER nad pohledem: INSTEAD OF událost: INSERT, UPDATE, or DELETE jméno objektu typ triggeru: Row nebo statement omezující podmínka: When tělo triggeru tvoří PL/SQL blok

posloupnost spuštění triggerů DML příkazj se týká pouze jednoh řádku. DML Statement SQL> INSERT INTO dept (deptno, dname, loc) 2 VALUES (50, 'EDUCATION', 'NEW YORK'); Triggering Action DEPTNO 10 20 30 40 DNAME ACCOUNTING RESEARCH SALES OPERATIONS LOC NEW YORK DALLAS CHICAGO BOSTON 50 EDUCATION NEW YORK BEFORE statement trigger BEFORE row trigger AFTER row trigger AFTER statement trigger

Posloupnost spouštění triggerů DML příkaz ovlivní více řádků. SQL> UPDATE emp 2 SET sal = sal * 1.1 3 WHERE deptno = 30; EMPNO 7839 7698 7788 ENAME KING BLAKE SMITH DEPTNO 30 30 30 BEFORE statement trigger BEFORE row trigger AFTER row trigger BEFORE row trigger AFTER row trigger BEFORE row trigger AFTER row trigger AFTER statement trigger

Trigger - syntaxe CREATE [OR REPLACE] TRIGGER trigger_name timing event1 [OR event2 OR event3] ON table_name trigger_body

Příklad triggeru SQL> CREATE OR REPLACE TRIGGER secure_emp 2 BEFORE INSERT ON emp 3 BEGIN 4 IF (TO_CHAR (sysdate,'dy') IN ('SAT','SUN')) OR 5 (TO_CHAR(sysdate,'HH24') NOT BETWEEN 6 '08' AND '18') 7 THEN RAISE_APPLICATION_ERROR (-20500, 8 'You may only insert into EMP during business hours.'); 9 END IF; 10 END; 11 /

Chování triggeru SQL> INSERT INTO emp (empno, ename, deptno) 2 VALUES (7777, 'BAUWENS', 40); INSERT INTO emp (empno, ename, deptno) * ERROR at line 1: ORA-20500: You may only insert into EMP during normal hours. ORA-06512: at "A_USER.SECURE_EMP", line 4 ORA-04088: error during execution of trigger 'A_USER.SECURE_EMP'

Procedurální IO na straně serveru alternativa k použití triggerů založeno na procedurálním rozšíření kód je skryt v procedurách na serveru procedury hlídají (složitější) IO aplikace pracuje jako front end DML je nahrazeno voláním procedur dotazy se realizují nad pohledy aplikace přístupových práv a rolí Poznámka: Existují i jiné alternativy architektury IS, které tuto problematiku řeší.

Procedura - syntaxe CREATE [OR REPLACE] PROCEDURE procedure_name [(parameter1 [mode1] datatype1, parameter2 [mode2] datatype2,...)] IS AS PL/SQL Block;

Příklad použití procedur vyrobíme procedury pro vložení / změnu / smazání produktu procedury později sdružíme do balíku (package) pro čtení vytvoříme pohledy pomocí SQL DCL zajistíme bezpečnost aplikace

Create or Replace Procedure DEL_PROD(v_ProdId PRODUCT.PRODID%Type) As Begin Delete PRODUCT Where Prodid = v_prodid; If Sql%NotFound Then Raise_Application_Error (-20203, 'Výrobek zadaného čísla ' v_prodid ' neexistuje'); End If; End DEL_PROD; /

Create or Replace Procedure UPD_PROD(v_Prodid PRODUCT.PRODID%Type, v_descrip PRODUCT.DESCRIP%Type) As Begin Update PRODUCT Set DESCRIP = v_descrip Where Prodid = v_prodid; If Sql%NotFound Then Raise_Application_Error (-20203, 'Výrobek zadaného čísla ' v_prodid ' neexistuje'); End If; End UPD_PROD; /

Create or Replace Procedure ADD_PROD(v_ProdId PRODUCT.PRODID%Type, v_descrip PRODUCT.Descrip%Type) As Cons_vio Exception ; Pragma Exception_Init (Cons_vio, -1); begin Insert Into PRODUCT (Prodid, Descrip) Values(v_ProdId, v_descrip); Exception When Cons_vio Then Raise_Application_Error (-20203,'Zadané číslo má již jiný výrobek'); End ADD_PROD; /

Create or Replace Package Prod_Pack -- specifikace modulu As Procedure ADD_PROD( v_prodid PRODUCT.PRODID%Type, v_descrip PRODUCT.Descrip%Type); Procedure UPD_PROD(v_Prodid PRODUCT.PRODID%Type, v_descrip PRODUCT.DESCRIP%Type); Procedure DEL_PROD (v_prodid PRODUCT.PRODID%Type); End Prod_Pack; / Create or Replace Package Body Prod_Pack As Procedure ADD_PROD( v_prodid PRODUCT.PRODID%Type, v_descrip PRODUCT.Descrip%Type) Is...

Pohled EMPVU10 Co je pohled? Tabulka EMP EMPNO EMPNO ENAME ENAME JOB JOB MGR HIREDATE MGR HIREDATE SAL SAL COMM COMM DEPTNO DEPTNO ----- -------- ------- --------- --------- --------- --------- ----------- ----- ----- ------- ------- 7839 KING 7839 KING PRESIDENT PRESIDENT 17-NOV-81 17-NOV-81 5000 5000 10 10 7782 CLARK 7698 BLAKE MANAGER MANAGER 7839 09-JUN-81 7839 01-MAY-81 1500 2850 300 10 30 7934 MILLER 7782 CLARK CLERK MANAGER 7782 23-JAN-82 7839 09-JUN-81 1300 2450 10 10 7566 JONES 7566 JONES MANAGER MANAGER 7839 02-APR-81 7839 02-APR-81 2975 2975 20 20 7788 SCOTT 7654 MARTIN ANALYST SALESMAN 7566 09-DEC-82 7698 28-SEP-81 3000 1250 1400 20 30 7876 ADAMS 7499 ALLEN CLERK SALESMAN 7788 12-JAN-83 7698 20-FEB-81 1100 1600 300 20 30 7369 SMITH 7844 TURNER CLERK SALESMAN 7902 17-DEC-80 7698 08-SEP-81 800 1500 0 20 30 7902 FORD 7900 JAMES ANALYST CLERK 7566 03-DEC-81 7698 03-DEC-81 3000 JOB 950 20 30 7698 BLAKE 7521 WARD MANAGER SALESMAN 7839 01-MAY-81 7698 22-FEB-81 2850 1250 500 30 30 7654 MARTIN 7902 FORD SALESMAN ANALYST 7698 28-SEP-81 7566 03-DEC-81 1250 3000 1400 30 20 7499 ALLEN 7369 SMITH SALESMAN CLERK 7698 20-FEB-81 7902 17-DEC-80 1600 800 300 30 20 7844 TURNER 7788 SCOTT SALESMAN ANALYST 7698 08-SEP-81 7566 09-DEC-82 1500 3000 0 30 20 7900 JAMES 7876 ADAMS CLERK CLERK 7698 03-DEC-81 7788 12-JAN-83 950 1100 30 20 7521 WARD 7934 MILLER SALESMAN CLERK 7698 22-FEB-81 7782 23-JAN-82 1250 1300 500 30 10 EMPNO ENAME ------ -------- ----------- 7839 KING PRESIDENT 7782 CLARK MANAGER 7934 MILLER CLERK

Proč používat pohledy? Pro omezení přístupu do databáze Pro zjednodušení složitých dotazů Pro prezentaci různých pohledů na stejná data

Vytváření pohledu Do příkazu CREATE VIEW můžete vložit poddotaz. CREATE [OR REPLACE] [FORCE NOFORCE] VIEW pohled [(alias[, alias]...)] AS poddotaz [WITH CHECK OPTION [CONSTRAINT omezení]] [WITH READ ONLY] Poddotaz může obsahovat komplexní syntaxi SELECT. Poddotaz nemůže obsahovat klauzuli ORDER BY.

Vytváření komplexního pohledu Komplexní pohled obsahuje skupinové funkce, spojení, výrazy atd. Z principu věci nepodporuje DML. Lze ale použít INSTEAD- OF triggery. SQL> CREATE VIEW dept_sum_vu 2 (name, minsal, maxsal, avgsal) 3 AS SELECT d.dname, MIN(e.sal), MAX(e.sal), 4 AVG(e.sal) 5 FROM emp e, dept d 6 WHERE e.deptno = d.deptno 7 GROUP BY d.dname; View created.

Dotaz na pohled SQL*Plus SELECT * FROM empvu10; 7839 KING PRESIDENT 7782 CLARK MANAGER 7934 MILLER CLERK USER_VIEWS EMPVU10 SELECT empno, ename, job FROM emp WHERE deptno = 10; EMP

Řízení přístupu uživatelů Administrátor databáze Uživatelské jméno a heslo práva Uživatelé

Práva Zabezpečení databáze zabezpečení systému zabezpečení dat Systémová práva: získání přístupu do databáze Objektová práva: manipulace s obsahem objektů databáze Schéma: sada objektů, jako jsou tabulky, pohledy a sekvence

Systémová práva Administrátor databáze má systémová práva vysoké úrovně. vytváření nových uživatelů odstraňování uživatelů odstraňování tabulek zálohování tabulek

Systémová práva uživatele Jakmile je uživatel vytvořen, administrátor mu může přidělit specifická systémová práva. GRANT právo [, právo...] TO uživatel [, uživatel...]; Tvůrce aplikace má následující systémová práva: CREATE SESSION CREATE TABLE CREATE SEQUENCE CREATE VIEW CREATE PROCEDURE

Přidělování systémových práv Admistrátor může přidělit uživateli specifická systémová práva. SQL> GRANT create table, create sequence, create view 3 TO scott; Grant succeeded.

Objektová práva Objektová práva se liší objekt od objektu. Vlastník má k objektu všechna práva. Vlastník může přidělit určitá práva ke svému objektu. GRANT objektové_právo [(sloupce)] ON objekt TO {uživatel role PUBLIC} [WITH GRANT OPTION];

Přidělování objektových práv Přidělíme práva dotazů pro tabulku EMP. SQL> GRANT select 2 ON emp 3 TO sue, rich; Grant succeeded. Přidělíme práva pro aktualizaci určitých sloupců uživatelům a rolím. SQL> GRANT update (dname, loc) 2 ON dept 3 TO scott, manager; Grant succeeded.

Použití klíčových slov WITH GRANT OPTION a PUBLIC Umožníme uživateli předávat práva dále. SQL> GRANT select, insert 2 ON dept 3 TO scott 4 WITH GRANT OPTION; Grant succeeded. Umožníme všem uživatelů provádět dotazy v tabulce DEPT uživatele Alice. SQL> GRANT select 2 ON alice.dept 3 TO PUBLIC; Grant succeeded.

Co je role? Uživatelé Manager Práva Přidělování práv bez rolí Přidělování práv s použitím rolí

Vytváření role SQL> CREATE ROLE manager; Role created. SQL> GRANT create table, create view 2 to manager; Grant succeeded. SQL> GRANT manager to BLAKE, CLARK; Grant succeeded.

Práva a role - shrnutí CREATE USER GRANT CREATE ROLE ALTER USER REVOKE Umožňuje administrátoru vytvořit uživatele Umožňuje uživateli přidělit jiným uživatelům práva pro přístup ke svým objektům Umožňuje administrátoru vytvořit sadu práv Umožňuje uživatelům měnit jejich hesla Odnímá uživatelům práva pro objekt

Řízení transakcí příkazy COMMIT a ROLLBACK COMMIT a ROLLBACK zajišťují konzistenci dat. Uživatel vidí změněná data pouze v relaci (session), ve které je měnil. Seskupení logicky souvisejících operací. Implicitní commit : DDL příkaz ( CREATE,... ). DCL příkaz ( GRANT, REVOKE ). Normální ukončení klienta (SLQ*'Plus. Implicitní rollback abnornální ukončení klienta

Řízení transakce Čas COMMIT Transakce DELETE SAVEPOINT A INSERT UPDATE SAVEPOINT B INSERT ROLLBACK to SAVEPOINT B ROLLBACK to SAVEPOINT A ROLLBACK

Implemtace konzistentího čtení UPDATE employee SET salary = 7000 WHERE last_name = Fay'; Data blocks uživatel A Rollback segments SELECT * FROM usera.employee; uživatel B Read consistent image Changed and unchanged data Old data before change

Konzistentní čtení - příklad výstup Time Session 1 Session 2 24000 t1 t2 SELECT salary FROM employee WHERE last_name='king'; UPDATE employee SET salary=salary+10000 WHERE last_name='king'; 24000 34000 t3 t4 t5 SELECT salary FROM employee WHERE last_name='king'; SELECT salary FROM employee WHERE last_name='king'; COMMIT;

Vlastnosti transakcí Atomicity Consistency Independence (Isolation) Durability