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

Slides:



Advertisements
Podobné prezentace
Orbis pictus 21. století Tato prezentace byla vytvořena v rámci projektu.
Advertisements

SQL Trace, Profiling, …a Tuning Lubomír Andrle
Zpracování SQL Lubomír Andrle 5. přednáška
SQL: DDL v ORACLE CREATE TABLE jméno_tabulky (atribut datový_typ [DEFAULT][attribut_constraint] [, atribut datový_typ [DEFAULT] [attribut_constraint]],...
Přednáška č. 3 Normalizace dat, Datová a funkční analýza
Aplikační a programové vybavení
Jazyk SQL Ing. Zdena DOBEŠOVÁ. SQL Structured Query Language 1974 SEQUEL (Structured English Query Language) neprocedurální relační dotazovací jazyk norma.
 Informací se data a vztahy mezi nimi stávají vhodnou interpretací pro uživatele, která odhaluje uspořádání, vztahy, tendence a trendy  Existuje celá.
Přednáška č. 5 Proces návrhu databáze
Fakulta elektrotechniky a informatiky
Další dotazy SQL Structured Query Language. Některé SQL příkazy mohou mít v sobě obsaženy další kompletní příkazy SELECT. Využijeme je tam, kde potřebujeme.
Informatika pro ekonomy II přednáška 11
Databázové systémy II Přednáška č. 6 RNDr. David Žák, Ph.D. Fakulta elektrotechniky a informatiky
Architektury a techniky DS Tvorba efektivních příkazů I Přednáška č. 3 RNDr. David Žák, Ph.D. Fakulta elektrotechniky a informatiky
Databázové systémy 1 Cvičení č. 2 Fakulta elektrotechniky a informatiky Univerzita Pardubice.
Databázové systémy II Přednáška č. 6 RNDr. David Žák, Ph.D. Fakulta elektrotechniky a informatiky
Fakulta elektrotechniky a informatiky
Architektura databáze Oracle
Temporální databáze a TSQL
SQL Lukáš Masopust Historie  Předchůdcem databází byly papírové kartotéky  děrný štítek  1959 konference  1960 – vytvořen jazyk COBOL.
SQL Lukáš Masopust Historie  Předchůdcem databází byly papírové kartotéky  děrný štítek  1959 konference  1960 – vytvořen jazyk COBOL.
Radek Špinka Přepínače MSSQL výběr.
Úvod do databází Databáze.
Databáze Jiří Kalousek.
Databázové systémy 2 Přednáška č. 2 RNDr. David Žák, Ph.D. Fakulta elektrotechniky a informatiky
MySQL - Vytvoření nové tabulky  create table jméno_tabulky (jméno_položky typ_položky,... ) Přehled nejběžnějších datových typů Přehled nejběžnějších.
Databáze Úvod.
Execution plans Lubomír Andrle 6. přednáška
Databázové systémy Mgr. Lenka Švancarová. Úvod Doposud jsme uvažovali jen o modelu databázového systému, kde jsou veškerá data a systém řízení báze dat.
Školení správců II. Petr Pinkas RNDr. Vít Ochozka.
Jan Trčka Dne: Obsah Zadání Pojmy Replikace databází Verzování Reconciling, reconcile Posting, post Scénáře při verzování v ArcSDE PostgreSQL.
Architektura databází Ing. Dagmar Vítková. Centrální architektura V této architektuře jsou data i SŘBD v centrálním počítači. Tato architektura je typická.
Databázové systémy teorie a návrh relačních databázových systémů část II.
Relační databáze.
Vypracoval: Ondřej Dvorský Třída: VIII.A
KIV/ZIS cvičení 6 Tomáš Potužák. Pokračování SQL Klauzule GROUP BY a dotazy nad více tabulkami Stáhnout soubor studenti_dotazy_sql.mdb.
Informatika pro ekonomy II přednáška 10
Databázové systémy Přednáška č. 6.
Databázové systémy II Přednáška V Ing. Tomáš Váňa, Ing. Jiří Zechmeister Fakulta elektrotechniky a informatiky
Architektury a techniky DS Cvičení č. 9 RNDr. David Žák, Ph.D. Fakulta elektrotechniky a informatiky
Databázové systémy II Přednáška č. 9. Transakce je logická jednotka práce sestávající z jednoho nebo více SQL příkazů, které jsou atomické z hlediska.
Transakční zpracování v SQL P. Částek. Transakce Transakce = logická jednotka práce Podaří-li se všechny části transakce, potvrdíme je. COMMIT Jestliže.
Transakce Roman Špánek TU v Liberci Transakce Transakce = série příkazů čtení a zápisu do databáze A Atomic C Consistency I Isolation D Durability.
ADO.NET – Transakce Centrum pro virtuální a moderní metody a formy vzdělávání na Obchodní akademii T.G. Masaryka, Kostelec nad Orlicí.
Access Vysvětlení pojmu databáze - 01
Dynamic SQL P. Částek. Dynamic SQL Embedded SQL je překládaný preprocesorem => za běhu nelze nechat uživatele rozhodovat o vzhledu samotných SQL příkazů.
Aplikační a programové vybavení
Databázové systémy Informatika pro ekonomy, př. 18.
Obchodní akademie, Ostrava-Poruba, příspěvková organizace Vzdělávací materiál/DUM VY_32_INOVACE_01B13 Autor Ing. Jiří Kalousek Období vytvoření březen.
Databázové systémy 2 Cvičení č. 5 Fakulta elektrotechniky a informatiky Univerzita Pardubice.
Základní obeznámení s jazykem SQL Databázové systémy.
Administrace Oracle Paralelní zpracování.
Databázové systémy Úvod, Základní pojmy. Úvod S rozvojem lidského poznání roste prudce množství informací. Jsou kladeny vysoké požadavky na ukládání,
24 Používání relačních databází (základní pojmy a principy z oblasti relačních databází, struktura databáze,oblasti použití relačních databází, vkládání.
Architektury a technika databázových systémů Jiří Zechmeister 7. přednáška
Databázové systémy II Přednáška I Ing. Tomáš Váňa, Ing. Jiří Zechmeister Fakulta elektrotechniky a informatiky
Databázové systémy 2 Přednáška č. 2 RNDr. David Žák, Ph.D. Fakulta elektrotechniky a informatiky
Import dat Access (16). Projekt: CZ.1.07/1.5.00/ OAJL - inovace výuky Příjemce: Obchodní akademie, odborná škola a praktická škola pro tělesně.
Optimistic and pessimistic offline lock. Naivní přístup:  Uživatel A načte data  Uživatel B načte (stejná) data  Uživatel A upraví data a uloží je.
Databázové systémy přednáška 8 – Transakce
A5M33IZS – Informační a znalostní systémy
Databázové systémy I Přednáška 11 Databázové systémy 1 – KIT/IDAS1
Informatika pro ekonomy přednáška 8
Databázové systémy a SQL
Paralelní přístup k databázi
Přednášky z distribuovaných systémů
Přednáška 9 Triggery.
Přednášky z distribuovaných systémů
Unit of Work vzor z P of EAA (Fowler) 1.
Transkript prezentace:

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

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 Transakce je logická část, která obsahuje jeden nebo více příkazů SQL Je atomickou jednotkou

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ří

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

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

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

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

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

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)

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

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

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

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

Deadlocky

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í

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';

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

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.

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;

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 ]

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-01555 Snapshot Too Old

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

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

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

Zamykání

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í

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í

Flashback query

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;

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

Flashback query 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 flashback query dělá vždy Hard parse!

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 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')

Q&A