Prezentace se nahrává, počkejte prosím

Prezentace se nahrává, počkejte prosím

Transakce Lubomír Andrle 8. přednáška 25.11.2013.

Podobné prezentace


Prezentace na téma: "Transakce Lubomír Andrle 8. přednáška 25.11.2013."— Transkript prezentace:

1 Transakce Lubomír Andrle 8. přednáška

2 Obsah Transakce obecně Deadlocky Zamykání v Oracle Flashback query

3 TRANSAKCE

4 Definice transakce Množina operací s daty, které splňují podmínku ACID – Atomicity – Consistency – Isolation – Durability Transakce je logická část, která obsahuje jeden nebo více příkazů SQL Je atomickou jednotkou

5 Atomicity Změna musí být provedena celá (nebo vůbec) I v případě chyby hardware, chyby software, chyby aplikace, chyby operačního systému Uživatel musí být informován, zda se transakce uskutečnila a je ukončena Buď je provedena celá transakce, nebo žádná z databázových operací, které ji tvoří

6 Consistency Po konci transakce musí být všechny požadavky na konzistenci databáze splněny – Null values – Foreign key – Unique constraint Konzistence transakce znamená, že izolovaná transakce zachovává konzistenci databáze

7 Isolation Neukončené změny nejsou viditelné pro ostatní uživatele – Uživatel provádějící změnu vidí i vlastní nekomitované změny I při souběžném běhu transakcí RDBMS zajistí – Pro každou dvojici souběžných transakcí T1 a T2 se T1 jeví, že T2 skončila dříve, než T1 zahájila provádění nebo T2 zahájila provádění až poté, co T1 skončila

8 Durability Komitovaná data jsou trvale uložena v databázi – Komitovaná znamená, že uživatel dostal informaci o ukončení komitu Příkaz commit byl ukončen a server předal řízení uživateli – Transakce přežije jakoukoliv systémovou chybu Trvalost transakce znamená, že poté, co transakce úspěšně skončí, budou mít všechny změny v databázi, které transakce provedla, trvalý charakter a to i při výpadku systému

9 Transakce - Commit Potvrzení transakce znamená, že změny provedené transakcí se stávají trvalými – Explicitní potvrzení – příkazem COMMIT – Implicitní potvrzení – po normálním ukončení nějaké aplikace nebo provedením DDL operace Jakékoli příkazy DDL způsobí tedy ukončení aktivní transakce a implicitní vytvoření nové transakce Změny provedené příkazy obsaženými v transakci jsou viditelné pro ostatní uživatele až od okamžiku potvrzení transakce

10 Transakce - vytvoření Transakce je inicializována implicitně – Pokud je po dokončení transakce příkazem COMMIT následně vložen, aktualizován či odstraněn alespoň jeden řádek, je tím implicitně vytvořena nová transakce – Po zahájení transakce jí je přiřazen dostupný undo tablespace, kam se ukládají změny pro možnost provedení rollbacku – Undo informace obsahují staré hodnoty dat, které byly SQL příkazem v rámci transakce změněny Má své číslo Tx ID

11 Statement-Level Rollback Pokud během provádění SQL příkazu nastane nějaká chyba – Všechny změny provedené příkazem jsou odrolovány – Toto se nazývá Statement-Level Rollback Příklady takových chyb – Pokus o vložení řádku s duplicitní hodnotou primárního klíče – Narušení referenční integrity – Deadlock (pokus o současnou změnu shodných dat dvěma transakcemi)

12 Statement-Level Rollback II Syntaktická chyba při parsingu neumožní spustit provádění příkazu, proto se nejedná o Statement-Level Rollback Chyba při provádění příkazu nezpůsobí změny provedené předchozími příkazy v rámci dané transakce

13 Příkazy pro řízení transakcí COMMIT – Potvrzení transakce, zafixování stavu ROLLBACK – Odvolání celé transakce, návrat do původního/zafixovaného stavu Odvolat transakci je možné pouze uživatelem, který operaci provedl a jen do okamžiku jejich potvrzení příkazem COMMIT

14 Autonomní transakce Změna v datech mimo transakci – Například zápis do logu Nejedná se o paralelní transakci – Autonomní transakce je k dispozici pouze jedna – Sériový přístup k transakčnímu zpracování – Pouze stejná db session

15 Savepoint Každé napojení do databáze – maximálně jedna transakce Savepoint, rollback to savepoint V transakci se dají zrušit poslední provedené změny Nejdou zrušit pouze změny ze začátku transakce

16 DEADLOCKY

17 Deadlock Dvě transakce si navzájem blokují zdroje a čekají na jejich uvolnění Situace může nastat v kterémkoliv systému, kde se více uživatelů dělí o zdroje Řešení musí provést nějaká vnější autorita – Server dokáže deadlock identifikovat – Server zruší jednu z transakcí

18 Deadlock II select * from publisher where pub_id = '1389' for update; update publisher set name = 'New Age Books' where pub_id = '0736'; ORA select * from publisher where pub_id = '0736' for update; update publisher set name = 'Aldata Infosystems' where pub_id = '1389';

19 Předcházení deadlockům Krátké transakce Vždy přistupovat na zdroje ve stejném pořadí Co nejnižší granularita zamykání

20 Implementace pomocí snapshotů Transakce T1 vidí data ve stavu počátku transakce – Start Timestamp Pokud data někdo mění, udržuje server pro transakci původní obraz – Na serveru může existovat najednou mnoho obrazů stejných dat Transakce může měnit data Při příkazu commit se vytvoří commit timestamp – Zkontroluje se, že žádná jiná transakce T2 s commit timestamp v intervalu [start timestamp, commit timestamp] transakce T1 neměnila data, která chce T2 zapsat. – Pokud ano, je transakce T1 zrušena.

21 Izolační úrovně – Isolation level Microsoft – SET TRANSACTION ISOLATION LEVEL { READ UNCOMMITTED | READ COMMITTED | REPEATABLE READ | SNAPSHOT | SERIALIZABLE } Oracle – Read Committed (Default) Konzistence na úrovni příkazu – Serializable Transactions konzistence na úrovni transakce – Read-only SET TRANSACTION ISOLATION LEVEL READ COMMITTED; SET TRANSACTION ISOLATION LEVEL SERIALIZABLE; SET TRANSACTION ISOLATION LEVEL READ ONLY;

22 Speciální konstrukce Nečekat na uvolnění zámku nebo čekat maximálně určenou dobu – select * from author for update nowait; – select * from author for update wait 10; Číst jenom z neuzamčených oblastí – select * from author skip locked; Manuálně uzamknout tabulku – lock table table_name in {share | exclusive } mode [ wait [ numsecs ] | nowait ]

23 Základy undo tablespace Návratové tabulkové prostory (undo) zajišťují vrácení změn provedených transakcemi Kromě toho zajišťují další funkce, například – Zajištění konzistence dat s ohledem na čtení – Provádění operací souvisejících s obnovou dat databáze Undo retention – ORA Snapshot Too Old

24 Data v undo Data v undo mohou být ve 3 stavech – Aktivní (platná, unexpired) Vyžadována pro zachování konzistence pro čtení nebo pro dokončení transakce, případně nevypršela doba platnosti návratových dat – Neplatná (expired) Po dokončení všech dotazů, které vyžadovaly platná návratová data a pokud bylo dosaženo doby platnosti návratových dat (Pro podporu technologie Flashback) – Nepoužitá Veškeré volné místo v návratovém tabulkovém prostoru

25 Konzistentní čtení Příklad pro čtení dat z tabulky – Příkaz SELECT je spuštěn v okamžiku SCN (system change number) = – Pokud se při čtení narazí na bloky dat změněné po tomto „čase“ (SCN je vyšší), budou pro výsledek dotazu vstupní data rekonstruována s využitím informací uložených v návratovém segmentu – Tím je zajištěna konzistence vstupních dat pro zpracování dotazu a tím platnost výsledku SCN se při každé transakci zvyšuje o 1

26 Konzistentní čtení – SQL dotaz Oracle vždy zajišťuje konzistenci pro čtení na úrovni dotazu – Potvrzení jiné transakce příkazem COMMIT během zpracování dotazu neovlivní jeho výsledek Vždy je důležitý stav při zahájení dotazu Konzistence je zajištěna automaticky bez účasti uživatele Vztahuje se i na vnořené dotazy – Toto ovšem také znamená, že daný dotaz nevidí změny vyvolané jím samotným, ale vždy pracuje s daty ve stavu při jeho spuštění! Problém by mohl nastat, pokud by příkaz SELECT spouštěl funkci, která by opět obsahovali jiný SELECT (ta by ovšem měla jiné SCN začátku) a uvažovala by již změněná data

27 ZAMYKÁNÍ

28 Módy zamykání a typy zámků Oracle používá 2 módy zamykání – Exkluzivní Uzamčený zdroj nemůže být sdílen – Sdílený Zamčený zdroj může být sdílen, což umožňuje zejména více přístupů pro čtení, ale zabraňuje konkurenčním zápisům Kategorie zámků – DML zámky Např. uzamykání celých tabulek či vybraných řádků – DDL zámky Chrání např. strukturu tabulek či pohledů – Interní zámky Chrání interní databázové struktury, jako například datové soubory (latch, mutex) Uzamykání a odemykání probíhá automaticky dle požadavků transakcí

29 Auto zamykání Slouží pro řešení sdíleného (konkurenčního) přístupu více klientů k datům v tabulkách K nepotvrzeným změnám, které provedl jeden uživatel ostatní uživatelé nemají přístup – Databázový systém zajišťuje konzistentní pohled na data v každém okamžiku – Ostatní uživatelé kromě autora změn vidí data ve stavu před provedením změn až do okamžiku potvrzení

30 FLASHBACK QUERY

31 SCN System Change Number – Neustále se zvyšující číslo, které jednoznačně identifikuje potvrzenou verzi databáze – Po každém příkazu COMMIT se zvýší SCN Oracle používá SCN v řídících souborech, návratových souborech, apod. Zjištění SCN – select dbms_flashback.get_system_change_number from dual;

32 Flashback Technologie Flashback využívá data z návratového prostoru – Flashback Query Umožní zobrazit obsah tabulky k danému systémovému bodu změny SCN nebo danému časovému okamžiku v minulosti Podpora procedur z balíčku DBMS_Flashback – Rozhraní pro provádění operací typu Flashback

33 Flashback query Od verze Oracle 9i2 je součástí dotazů – Klíčové slovo AS OF – SELECT * FROM T1 AS OF TIMESTAMP TO_TIMESTAMP(' ', 'YYYY-MM-DD HH') WHERE name = ‘Andrle'; Pozor flashback query dělá vždy Hard parse!

34 Flashback table Neplést s flashback query – Využívá flashback logy, ne undo – Používá se pro účely zálohování Možnost obnovit řádky tabulky k určitému datu FLASHBACK TABLE TO SCN ; – FLASHBACK TABLE test TO SCN ; FLASHBACK TABLE TO TIMESTAMP ; – ALTER TABLE employee ENABLE ROW MOVEMENT; – FLASHBACK TABLE employee TO TIMESTAMP TO_TIMESTAMP(' :30:00', 'YYYY-MM-DD HH:MI:SS')

35 Q&A


Stáhnout ppt "Transakce Lubomír Andrle 8. přednáška 25.11.2013."

Podobné prezentace


Reklamy Google