Stáhnout prezentaci
Prezentace se nahrává, počkejte prosím
1
Lubomír Andrle lubomir.andrle@unicorn.eu 8. přednáška 25.11.2013
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-00060 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) = 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
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 <table_name> TO SCN <scn number>; FLASHBACK TABLE test TO SCN ; FLASHBACK TABLE <table_name> TO TIMESTAMP <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
Podobné prezentace
© 2024 SlidePlayer.cz Inc.
All rights reserved.