Cviceni 9
-- Transakce je posloupnost (zalezi na poradi) prikazu, ktere tvori logicky celek.
-- Vlastnosti transakci ACID.
--
-- Transakce zacina provadenim SQL prikazu (typicky prvni DML prikaz). 
-- Transakce konci uspesne prikazem COMMIT, kdy jsou provedene zmeny 
-- potvrzeny a objevi se v databazi (pri normalnim odhlaseni klienta je proveden 
-- COMMIT).
--
-- Pri chybovem stavu lze zmeny provedene transakci vratit zpet prikazem ROLLBACK.
-- Prikazem SAVEPOINT <nazev> je mozne ulozit stav v
-- rozpracovane transakci a prikazem ROLLBACK TO <nazev> je mozne
-- obnovit stav v bode SAVEPOINT.


-- Ukol c.1: Viditelnost zmen jinymi klienty
-- Otevrete si jeste jedno spojeni k Oracle (nove putty)
-- Prvni okno budeme oznacovat "SQL1>" a nove okno "SQL2>"

-- SQL1> Nastavte datum vydani knihy Profesional (isbn 978-80-7461-086-8) na 29.2.2012.
-- Tip: DATE '2012-02-29'

-- SQL1> Zobrazte si tento zaznam.

-- SQL2> Zobrazte si zaznam knihy Profesional





-- Ukol c.2: Zruseni provedenych zmen
-- Zobrazte si obsah tabulky vytisky

-- Zkuste si znovu naimportovat obsah tabulky xdohnal.katalog.

-- Provedene zmeny si zobrazte a pak je zruste.





-- Ukol c.3: Aktualizace stejnych zaznamu
-- Zvyseni osobniho hodnoceni u uvazku id 101 zamestnance s id 10 o 100 Kc.
-- Provedte v SQL1> a pak hned v SQL2>

-- Co se stalo?
-- Potvrdte zmeny v SQL1>

-- Potvrdte zmeny v SQL2>




-- Ukol c.3b: Aktualizace stejnych zaznamu
-- Provedte v SQL1>
--   Zvyseni osobniho hodnoceni u uvazku id 101 zamestnance s id 10 o 100 Kc.

-- Provedte v SQL2>
--   Zvyseni osobniho hodnoceni u uvazku id 102 zamestnance s id 10 o 100 Kc.

-- Co se stalo?
-- Potvrdte zmeny v SQL1>

-- Potvrdte zmeny v SQL2>








-- Ukol c.4: Deadlock...
-- Zmeny budeme provadet nad tabulkou knihy:
-- Mame transakci zmeny vydavatele a zmeny ISBN ve dvou zaznamech...
-- Dva uzivatele je budou provadet postupne v obracenem poradi...

-- SQL1> Nastavte vydavatele u knihy 'SQL pro seniory' na 'ALPRESS'.
-- SQL2> Nastavte isbn knihy 'Divka za zrcadlem' na '978-80-7461-052-3'

-- SQL1> Nastavte isbn knihy 'Divka za zrcadlem' na '978-80-7461-052-3'
-- SQL2> Nastavte vydavatele u knihy 'SQL pro seniory' na 'ALPRESS'.



-- Implicitni chovani transakce v Oracle cti potvrzena data
--    READ COMMITTED

-- Zmena nastaveni transakce
SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;

SET TRANSACTION READ ONLY;
SET TRANSACTION READ WRITE;




-- Zaznamy lze zamknout rucne:
SELECT ...    FOR UPDATE;
LOCK TABLE ... IN EXCLUSIVE MODE;


-- Lze nastavit cas cekani...
SELECT ....   FOR UPDATE [NOWAIT | WAIT cas]
LOCK TABLE ... IN EXCLUSIVE MODE [NOWAIT | WAIT cas]



-- Ukol c.5: Vyhnuti se deadlocku zamykanim...
-- Stejne operace jako v ukolu c.4, ale nejdrive se menene zaznamy zamknete.