1 / 35

Transakce

Transakce. Lubom ír Andrle lubomir.andrle @ unicorn.eu 8 . přednáška 25 .1 1 .201 3. Obsah. Transakce obecně Deadlocky Zamykání v Oracle Flashback query. Transakce. Definice transakce. Množina operací s daty, které splňují podmínku ACID Atomicity Consistency Isolation Durability

alma
Download Presentation

Transakce

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Transakce Lubomír Andrle lubomir.andrle@unicorn.eu 8. přednáška 25.11.2013

  2. Obsah • Transakce obecně • Deadlocky • Zamykání v Oracle • Flashbackquery

  3. Transakce

  4. Definicetransakce • 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 • Nullvalues • Foreignkey • Uniqueconstraint • Konzistencetransakceznamená, žeizolovanátransakcezachovávákonzistencidatabá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 • Ipř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ý undotablespace, kam se ukládají změny pro možnost provedení rollbacku • Undoinformace obsahují staré hodnoty dat, které byly SQL příkazem v rámci transakce změněny • Má své číslo Tx ID

  11. Statement-LevelRollback • 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-LevelRollback • 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-LevelRollback II • Syntaktická chyba při parsingu neumožní spustit provádění příkazu, proto se nejedná o Statement-LevelRollback • 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-00060 • select * from publisher where pub_id = '0736' for update; • update publisher set name = 'AldataInfosystems' 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ří committimestamp • Zkontroluje se, že žádná jiná transakce T2 s committimestamp v intervalu [start timestamp, committimestamp] transakce T1 neměnila data, která chce T2 zapsat. • Pokud ano, je transakce T1 zrušena.

  21. Izolační úrovně – Isolationlevel • Microsoft • SET TRANSACTION ISOLATION LEVEL { READ UNCOMMITTED | READ COMMITTED | REPEATABLE READ | SNAPSHOT | SERIALIZABLE } • Oracle • ReadCommitted (Default) • Konzistence na úrovni příkazu • SerializableTransactions • 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 * fromauthorfor update nowait; • select * fromauthorfor update wait 10; • Číst jenom z neuzamčených oblastí • select * fromauthorskip locked; • Manuálně uzamknout tabulku • lock table table_name in {share | exclusive } mode[ wait [ numsecs ] | nowait ]

  23. Základy undotablespace • 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 • Undoretention • ORA-01555 SnapshotTooOld

  24. Data v undo • Data v undomohou 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 (systemchangenumber) = 10023 • 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. Flashbackquery

  31. SCN • SystemChangeNumber • 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 • selectdbms_flashback.get_system_change_numberfromdual;

  32. Flashback • Technologie Flashback využívá data z návratového prostoru • FlashbackQuery • 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. Flashbackquery • Od verze Oracle 9i2 je součástí dotazů • Klíčové slovo AS OF • SELECT * FROM T1 AS OF TIMESTAMP TO_TIMESTAMP('2012-11-26 13', 'YYYY-MM-DD HH')WHERE name = ‘Andrle'; • Pozor flashbackquery dělá vždy Hard parse!

  34. Flashback table • Neplést s flashbackquery • 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 <table_name> TO SCN <scnnumber>; • FLASHBACK TABLE test TO SCN 1833265; • FLASHBACK TABLE <table_name> TO TIMESTAMP <timestamp>; • ALTER TABLE employee ENABLE ROW MOVEMENT; • FLASHBACK TABLE employee TO TIMESTAMP TO_TIMESTAMP('2003-04-04 09:30:00', 'YYYY-MM-DD HH:MI:SS')

  35. Q&A

More Related