Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Vypracovan okruhy k zapoctu.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
254.46 Кб
Скачать
  • Vysvětlete, co je transakční zpracování (begin transaction, rollback, transaction end – commit)

Základní myšlenkou transakčního zpracování je rozdělit úlohu na malé úseky, které by měly buď proběhnout celé nebo by měla být data ve stavu, jako by zpracování úseku vůbec nebylo zahájeno.

Prakticky to probíhá tak, že při práci s daty se automaticky v dočasných souborech zapamatovává původní obsah měněných záznamů. Pokud vše proběhne dobře, původní obsah se v dočasných souborech smaže. Pokud dojde k přerušení programu, je po restartu automaticky z těchto změn obnoven stav před zahájením zpracování úseku.

V databázích je obvyklé označit zahájení transakce označit vhodným příkazem (např. BEGIN TRANSACTION). Dokončení transakce se oznámí databázovému systému jiným příkazem (téměř standardně COMMIT). Navíc dostává programátor do rukou nástroj, jak transakci programově přerušit a vrátit data do původního stavu (ROLLBACK).

  • Vysvětlete hlavní problémy víceuživatelského zpracování a metody zamezení poškození dat kolizí uživatelů (organizační, programátorské, zamykání, detekce kolise)

Organizační opatření

Většinou lze zajistit, aby si při víceuživatelském přístupu uživatelé rozdělili kompetence (jeden skladník vydává šrouby a druhý hřebíky). Toto řešení však sníží možnost kolizí, ale nemůže je zcela vyloučit (nemožnost rozdělení, chyba uživatele).

Zamykání záznamů

V okamžiku, kdy je proveden dotaz a očekává se změna dat, tak se všechny záznamy, které vstupují do dotazu zamknou. Další pokusy jiných uživatelů pracovat nad stejnými záznamy se buď odmítnou a těmto uživatelům se zobrazí zpráva, že data jsou uzamčená, nebo další uživatelé musí čekat na odemčení bez zprávy. Až je dokončeno zpracování pro uživatele, který data požadoval jako první, jsou příslušné datové záznamy odemčeny.

Zamykání záznamů může mít dva nepříjemné důsledky:

  • Uživatel si data zamkne, odejde od terminálu a tím zablokuje práci ostatních.

  • V horším případě uživatel X uzamkne část dat A později se pokusí o uzamčení části dat B. Uživatel Y nejdříve zamkne část dat B a později se pokusí zamknout část dat A. Ta je již uzamčena uživatelem X. Došlo tzv. zablokování (deadlock, deadly embrace). Moderní databáze umí tento problém řešit.

Obecně by se mělo provádět uzamčení jen na nezbytně dlouhou dobu. Ideální je pouze na provádění změny počítačem. V případě rezervace letenek např. po dobu, kdy zákazník hovoří s prodejcem.

Detekce kolize

V tomto případě se záznamy nezamykají. Každý záznam je interně označen tzv. časovým razítkem (může to být i čítač, kolikrát byl daný záznam změněn). V okamžiku, kdy se má zapisovat do databáze, program se pokusí celou databázi zamknout. Pokud se to nepodaří čeká (uzamčení trvá jen po dobu zápisu dat, typicky zlomky sekundy - není v něm zahrnuta doba, kdy uživatel si prohlíží databázi). Jakmile databázi zamkne, provede se opětné interní čtení a porovnává se, zda se nezměnilo časové razítko. Pokud ne, data se zapíší, jinak se vydá uživateli zpráva, že má kolizi s někým jiným a že musí svůj dialog zopakovat. Protože je velmi málo pravděpodobné, že dva uživatelé pracují nad stejnými záznamy, dochází ke kolizi jen velice zřídka, kolize se nepromítne do dat a mechanismus zabezpečení zaručuje integritu dat.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]