Adatbázis-kezelés · Többfelhasználós rendszerek

Nézetek, szereplők és tranzakciók

Hogyan láthatják különböző felhasználók ugyanazokat az adatokat, és hogyan marad helyes a rendszer két egyidejű foglalásnál? Nézetek, felelősségek, tranzakciók és lépésenként követhető ütemezések.

Nézetek és jogosultságSzereplők és felelősségekTranzakció és egyidejűség14 önellenőrző feladat

01 · Többfelhasználós rendszerek

Nézetek: ugyanazok az adatok, eltérő felhasználói kép

AlapfogalomA nézet egy elnevezett lekérdezéssel meghatározott virtuális reláció. A szokásos, nem materializált nézet az alaptáblákból származtatja az eredményét; nem az eredménysorok külön tárolt másolata.

Egy többfelhasználós adatbázisban nem mindenkinek ugyanaz az információ kell. Egy műhelyfoglalkozásra jelentkező tanuló a címet, kezdési időt és szabad helyeket szeretné látni. A szervező ezenfelül a kapacitást, felelős elérhetőségét és belső költséget is kezeli. Az adatokat nem szükséges két egymástól független táblában megismételni: ugyanahhoz a logikai adathoz különböző nézetek rendelhetők.

A nézet kapcsolatot teremt a külső felhasználói kép és a teljes logikai séma között. A tervezésben ez egy felhasználói részséma, a megvalósításban például egy SQL CREATE VIEW utasítással létrehozott objektum. A nézet által biztosított információt az alaptáblák adataiból kell következetesen levezetni, nem kézzel fenntartott másolatból.

A hagyományos nézetnek van tárolt definíciója és egyéb metaadata, ezért nem teljesen hely nélküli objektum. Általában azonban nem tárolja önállóan az eredmény rekordjait. A materializált nézet eltérő fogalom: az eredmény fizikai tárolását és frissítését is kezelni kell. A további példák hagyományos nézetekről szólnak.

Egy nézet eredménye attól is függ, melyik tranzakciós pillanatképet látja a lekérdezés. Az „az alaptábla megváltozott, ezért a nézet is megváltozik” elv nem azt jelenti, hogy minden kapcsolat minden pillanatban ugyanazt a legújabb, még nem véglegesített állapotot olvassa. Az izoláció szabályai a nézet lekérdezésére is érvényesek.

Közös alaptábla: MUHELY
idcímkezdéskapacitásszabad helybelső költségfelelős e-mailállapot
101Robotépítés2026-11-06 14:00241848000robot@iskola.examplepublikus
102Digitális plakát2026-11-07 15:0020912000grafika@iskola.examplepublikus
1033D prototípus2026-11-10 14:00121235000labor@iskola.exampletervezet

Saját oktatási adatok. Az e-mail-címek szemléltető, fenntartott példadomainhez tartoznak.

02 · Többfelhasználós rendszerek

Oszlop- és sorszűrés a nézetben

AlapfogalomAz oszlopválasztás azt szabályozza, mely tulajdonságok láthatók; a sorszűrés azt, mely rekordok kerülnek a nézet eredményébe.

A tanulói nézet a MUHELY tábla cím, kezdés és szabad_hely oszlopát mutatja. Az azonosító megtartható technikai célra, például jelentkezési hivatkozás létrehozásához. A belso_koltseg és felelos_email nem tartozik a tanulói információhoz. Ez az oszlopok kiválasztásának, relációs megfogalmazásban projekciónak egy példája.

A WHERE allapot = 'publikus' feltétel a tervezett, még nem közzétett foglalkozásokat kizárja. Ez sorszűrés. Az oszlop- és sorszűrés egymástól független döntés: az oszlopok elhagyása nem rejti el automatikusan a tervezet sorát, és a sor kiszűrése sem rejti el a többi sor belső költségét.

A nézet további lekérdezések FROM részében használható. A nézet neve mögött álló definíció egységesíti az ismétlődő szűrést, így az alkalmazás több pontja ugyanazt a szabályt használhatja. A SELECT nem garantál eredménysorrendet ORDER BY nélkül; a megjelenítési sorrendet a használó lekérdezésben is megadjuk.

Az explicit oszloplista jobban követhető, mint a SELECT *. Ha később az alaptáblát új belső attribútummal bővítjük, meg kell vizsgálni a nézetdefiníciót és a jogosultságokat. Összekapcsolást vagy összesítést tartalmazó nézet is készíthető, de ezek módosíthatósága már külön kérdés.

Tanulói nézet létrehozása
CREATE VIEW tanuloi_muhely AS
SELECT muhely_id, cim, kezdes, szabad_hely
FROM MUHELY
WHERE allapot = 'publikus';

SELECT cim, kezdes, szabad_hely
FROM tanuloi_muhely
ORDER BY kezdes, muhely_id;
A tanuló számára megjelenő eredmény
címkezdésszabad hely
Robotépítés2026-11-06 14:0018
Digitális plakát2026-11-07 15:009

A tervezet kimarad, a költség és e-mail oszlop nem szerepel.

03 · Többfelhasználós rendszerek

Nézet és jogosultság: két együtt működő eszköz

AlapfogalomA nézet az információ formáját határozza meg, a jogosultság pedig azt, ki milyen műveletet végezhet az adatbázis objektumain.

A nézet önmagában nem akadályozza meg az alaptábla közvetlen elérését. Ha a tanulói szerepkör SELECT joggal rendelkezik a teljes MUHELY táblára, a nézetből elhagyott költséget is lekérdezheti az alaptáblából. Korlátozott hozzáféréshez a teljes jogosultsági láncot kell vizsgálni, nem csupán a tanulói képernyőt.

A felhasználókhoz szerepkörök rendelhetők, például tanulo, szervezo és adatbazis_admin. A szerepkörhöz kapcsolt jogosultságok megkönnyítik az egységes kezelést. A szükséges legkisebb jogosultság elve szerint a tanuló nem kap szervezői módosítási jogot, a szervező pedig nem feltétlenül kap jogot a teljes séma törlésére.

A nézet mögötti jogosultságok ellenőrzése adatbázis-kezelőtől és a nézet beállításaitól függ. Egyes megoldásokban a tulajdonos jogosultságával elérhető az alaptábla, más beállítás a használó jogosultságait követeli meg. A tényleges védelmet ezért próbafelhasználóval teszteljük. Sorbiztonsági szabályok és más védelmi eszközök is részt vehetnek a megoldásban.

Nem minden nézet írható. Egyszerű, egy alaptáblára épülő nézet sok rendszerben módosítható, összesítést vagy összetett kapcsolást tartalmazó nézet nem feltétlenül. Az írhatóság sem azonos az engedélyezettséggel: technikailag írható nézeten is kell módosítási jog. A tanulói nézetet ebben a példában csak olvasásra használjuk.

Szerepkörök szándékolt hozzáférése
szerepkörinformációmegengedett tevékenység
tanulóközzétett cím, időpont, szabad helyolvasás; jelentkezés ellenőrzött alkalmazásművelettel
szervezősaját foglalkozások teljes üzleti adataikarbantartás az alkalmazás szabályai szerint
adatbázis-felügyelőséma, jogosultságok, működési információfelügyelet és szabályozott adminisztráció

Kidolgozott példa · Miért nem elég a nézet?

A tanulói nézet elrejti a költséget, de a tanuló a teljes alaptáblát is olvashatja.

  1. A nézet alakja megfelelő, a közvetlen alaptábla-jog viszont megkerüli a korlátozást.
  2. Át kell tekinteni a közvetlen és örökölt jogokat, valamint a nézet végrehajtási szabályait.
  3. A próba ellenőrzése két kérdés: a nézet olvasható-e, és a belső költség jogosulatlanul lekérdezhető-e?

04 · Többfelhasználós rendszerek

Az adatbázis használói, tervezői és felügyelői

AlapfogalomAz adatbázisrendszer körüli szerepkörök különböző felelősségeket fednek le: a használatot, az üzleti adatok tervezését és az üzembiztos működtetést.

Az adatbázis-felügyelő, gyakran DBA, az erőforrások, hozzáférési jogosultságok és működési feltételek felügyeletével foglalkozik. Idetartozhat a mentési és helyreállítási eljárás, a teljesítményfigyelés és az üzemeltetési beállítások kezelése. A felügyelő nem feltétlenül maga találja ki az összes üzleti szabályt; ezeket a tervezőkkel és felhasználókkal egyezteti.

Az adatbázis-tervező összegyűjti a különböző csoportok információigényeit, kialakítja a fogalmi és logikai sémát, a kapcsolatokat és megszorításokat. A nézetek kialakításával a részsé­mákat a teljes rendszerhez kapcsolja. A fizikai hozzáférési döntésekben a felügyelővel és az alkalmazás fejlesztőivel is együttműködhet.

A végfelhasználók jelentős része előkészített műveleteket hajt végre: a szervező egy űrlapon létrehoz foglalkozást, a tanuló jelentkezik. Ehhez nem kell SQL-t írniuk. Más használók önálló elemzéseket, ad hoc lekérdezéseket és jelentéseket készítenek. Az eltérő tudásszint nem értékítélet: különböző feladatokat és hozzáférési igényeket jelent.

Ugyanaz a személy kisebb szervezetben több szerepet is betölthet, de a felelősségek akkor is különböznek. Egy tanári tartalomfeltöltő felület használója nem automatikusan adatbázis-felügyelő. A szerepek és jogok elkülönítése segít, hogy egy tartalmi hiba ne váljon a teljes rendszert érintő adminisztrációs hibává.

Közvetlen szereplők egy iskolai foglalkozási rendszerben
szerepkonkrét feladatfontos együttműködés
DBAmentés, jogosultság, terhelésfigyelésüzemeltető és tervező
adatbázis-tervezőMUHELY és JELENTKEZES kapcsolata, kulcsoktanárok, szervezők
előkészített műveletet használó végfelhasználójelentkezési űrlap kitöltésealkalmazás
önálló lekérdezést készítő használórészvételi statisztika elemzésetervező és jogosultságkezelő

05 · Többfelhasználós rendszerek

A háttérben dolgozó szereplők

AlapfogalomAz adatbázis-kezelő rendszer, a kiegészítő eszközök és a működtetési környezet fejlesztése nem ugyanaz, mint egy adott üzleti adatbázis megtervezése.

Az adatbázis-kezelő rendszer tervezői és fejlesztői a DBMS komponenseit készítik. Ilyen komponens lehet a lekérdezésfeldolgozó, optimalizáló, tároláskezelő és tranzakciókezelő. Ők azt a szoftvert fejlesztik, amelyre az adott iskola vagy vállalkozás adatbázisa épül, nem elsősorban az iskola tábláit definiálják.

Az eszközfejlesztők adatmodellező, adatbetöltő, tesztadat-előállító, migrációs vagy teljesítményelemző segédprogramokat készítenek. Egy diagramot rajzoló eszköz megkönnyítheti a tervezést, de a fogalmi modell szakmai helyességét önmagában nem garantálja. A tesztadat-generáló eszköznek a kulcsokra és megszorításokra is figyelnie kell.

Az operátorok és karbantartók biztosítják a napi működés infrastruktúráját: például a felügyeleti jelzések kezelését, rendszeres feladatok végrehajtását és a tárhely működési feltételeit. A feladatok szervezetenként eltérő neveken jelenhetnek meg. A felhőszolgáltatás bizonyos technikai feladatokat átvállalhat, de az üzleti séma, hozzáférési igény és helyreállítási követelmény attól még a használó szervezet kérdése.

Az alkalmazásfejlesztő további fontos összekötő szerep: az űrlapot, lekérdezési hívást és tranzakcióhatárokat az adatbázis szabályaival együtt tervezi meg. Egy képernyő működése nem igazolja automatikusan a többfelhasználós működés helyességét. Az egységes eljáráshoz a szereplőknek a hibakezelést és ütközéseket is egyeztetniük kell.

Háttérfeladatok elhatárolása
tevékenységjellemző felelős
SQL végrehajtómotor fejlesztéseDBMS-fejlesztő
ER-ábrát készítő program fejlesztéseeszközfejlesztő
Mentési feladat futásának felügyeleteoperátor / üzemeltető, a DBA eljárása szerint
Iskolai jelentkezési üzleti szabálytervező és érintett felhasználók
Jelentkezési művelet biztonságos végrehajtásaalkalmazásfejlesztő és adatbázis-tervező

06 · Többfelhasználós rendszerek

Tranzakció: összetett művelet egy logikai egységben

AlapfogalomA tranzakció adatbázis-műveletek olyan logikai egysége, amelynek hatását a rendszer együtt véglegesíti vagy – visszavonáskor – együtt elveti.

Egy jelentkezésnél nem elég csökkenteni a szabad helyet: a jelentkező rekordját is rögzíteni kell. Ha az első lépés megtörténik, a második pedig hibát jelez, a két adat ellentmondhat egymásnak. A tranzakció határainak kijelölése azt fejezi ki, hogy ezek a módosítások egy üzleti művelethez tartoznak.

A műveletsor elindul, ellenőrzi a feltételeket, módosítja az adatokat, majd siker esetén COMMIT zárja. Hiba vagy elutasított üzleti feltétel esetén ROLLBACK visszavonja a tranzakció módosításait. Az alkalmazásnak a sikertelen műveletre valóban visszavonási vagy megszakítási úton kell válaszolnia; a BEGIN leírása önmagában nem helyettesíti a hibakezelést.

Négy klasszikus tulajdonság az ACID: atomicitás, konzisztencia, izoláció és tartósság. Az atomicitás a teljes vagy semmi jelleg. A konzisztencia azt jelenti, hogy az érvényes állapotból az üzleti és adatbázis-szabályok szerinti érvényes állapotba jutunk; ehhez a helyes program és megszorítások is szükségesek. Az izoláció az egymás mellett végzett műveletek megfigyelhető kapcsolatát szabályozza. A tartósság a sikeresen véglegesített változások megőrzését jelenti a rendszer garanciái szerint.

A tranzakció nem mindig egyetlen SQL utasítás, és nem mindig egyezik egyetlen felhasználói kattintással. Egyetlen kattintás több adatbázis-műveletet és külső tevékenységet is indíthat. Az e-mail elküldése például nem válik automatikusan visszavonhatóvá attól, hogy az adatbázisban ROLLBACK történt. Az ilyen külső hatásokat külön, összehangolt eljárás szerint kezeljük.

ACID a jelentkezési példában
tulajdonságkövetelmény
AtomicitásHelycsökkentés és jelentkezésrögzítés együtt sikerül vagy együtt visszavonódik.
KonzisztenciaA szabad hely nem negatív, a jelentkező és műhely azonosítója érvényes.
IzolációEgy másik foglalás nem írja felül elveszett módosításként az eredményt.
TartósságA véglegesített jelentkezést a rendszer a vállalt hibatűrés szerint megőrzi.

07 · Többfelhasználós rendszerek

COMMIT, ROLLBACK és helyes hibakezelés

AlapfogalomA COMMIT véglegesíti a tranzakciót; a ROLLBACK elveti annak még nem véglegesített, visszavonható adatbázis-módosításait.

Új mintapéldánkban két eszközraktár között hét készletelemet vezetünk át. Az A raktárban 20, B-ben 5 darab van. Sikeres átvezetés után A=13 és B=12, az összes darabszám továbbra is 25. Ha A csökkentése után B módosítása nem sikerül, A=13 és B=5 hibás, hiányzó készletet mutató állapot lenne.

Az alábbi pszeudokód nem egy konkrét SQL nyelvjárás futtatható tárolt eljárása. A vezérlési logikát mutatja: ellenőrizzük a mennyiséget és a két raktár létezését, megfelelően védjük a módosított sorokat, ellenőrizzük a forráskészletet, majd mindkét oldalt módosítjuk. Siker csak a COMMIT után jelenthető. Az alkalmazás és az adatbázis-kezelő hibakezelési együttműködése nélkül a pszeudokód nem teljes implementáció.

Az üzleti hiba például a nem létező raktár vagy az elégtelen készlet. Technikai hiba lehet kapcsolatvesztés, lemezhiba vagy ütközés miatti tranzakciómegszakítás. Az alkalmazásnak meg kell különböztetnie az elutasítást a bizonytalan kimeneteltől: ha a kapcsolat éppen a COMMIT válasza előtt szakad meg, nem feltétlenül tudjuk, sikerült-e a véglegesítés. Az újrapróbálkozáshoz azonosítható művelet és ellenőrzés szükséges, hogy ne vezessük át kétszer a készletet.

A ROLLBACK a saját tranzakció módosításait vonja vissza, nem az egész adatbázist állítja egy globális múltbeli pillanatra. Más felhasználó szabályosan véglegesített, független változásait nem töröljük el. Már sikeresen véglegesített üzleti művelet helyesbítéséhez általában új, kompenzáló tranzakciót indítunk; egy újonnan kiadott ROLLBACK nem időgép.

Készletátvezetés – szemléltető pszeudokód
tranzakció indítása
ha mennyiség ≤ 0: visszavonás, elutasítás
forrás és cél szükséges sorainak védett elérése
ha forrás vagy cél hiányzik: visszavonás, elutasítás
ha forráskészlet < mennyiség: visszavonás, elutasítás
forráskészlet csökkentése
célkészlet növelése
ha bármely lépés hibás: ROLLBACK, hibajelzés
különben: COMMIT, sikerjelzés

Kidolgozott példa · Hiba a második módosításnál

A=20, B=5; hét darabot vezetnénk át, de a célraktár módosítása meghiúsul.

  1. A csökkentése még nem végleges: a tranzakció saját köztes értéke 13.
  2. A hibakezelés visszavonja a tranzakciót. A végleges adatbázis-állapot A=20, B=5 marad.
  3. Siker esetén ehelyett A=13, B=12 lenne. Mindkét helyes ágban az összkészlet 25.

08 · Többfelhasználós rendszerek

Naplózás és helyreállítás

AlapfogalomA tranzakciós napló a végrehajtás és helyreállítás szempontjából lényeges információkat rögzíti. A napló nem azonos a felhasználói képernyőn megjelenő üzenetekkel.

Az adatbázisnak egy hiba után is el kell tudnia különíteni a sikeresen véglegesített és megszakadt műveleteket. A napló ezért tranzakcióazonosítókat, módosítási információkat és lezárási állapotokat rögzíthet. A konkrét rekordformátum adatbázis-kezelőnként eltér; az alábbi táblázat csak az elv megértésére szolgál.

Egy szemléltető napló tartalmazhatja a tranzakció azonosítóját, az érintett adatot és régi/új értéket. A valós rendszerek alkalmazhatnak fizikai vagy logikai naplórekordokat, több verziót és különböző visszaállítási eljárásokat. Nem helyes azt állítani, hogy minden rendszer szó szerint azonos régi/új értékű rekordot ír minden olvasásról.

A write-ahead logging elve szerint a helyreállításhoz szükséges naplóinformációt megfelelően tartóssá kell tenni a módosított adatlap tartós kiírása előtt. Ez lehetővé teszi, hogy az adatlapok kiírását és a tranzakció sikerének rögzítését összehangolt módon kezeljük. A pontos véglegesítési garanciát a rendszer és beállításai határozzák meg.

A tranzakciós napló nem helyettesíti a teljes mentési és helyreállítási tervet. Lehet szükség alapmentésre, naplóarchívumra és tényleges visszaállítási próbára is. A COMMIT, a naplózás és a mentés három kapcsolódó, de eltérő célú fogalom: üzleti lezárás, helyreállítási információ, illetve visszaállítható másolat és eljárás.

Szemléltető változásnapló
tranzakcióeseményérintett adatrégiúj
T41kezdés–––
T41módosításA raktár készlete2013
T41módosításB raktár készlete512
T41véglegesítés–––

Fogalmi példa, nem egy konkrét DBMS naplófájl-formátuma.

09 · Többfelhasználós rendszerek

Elveszett módosítás: amikor két helyes részszámítás hibás egészet ad

AlapfogalomElveszett módosítás akkor keletkezik, ha egy művelet egy korábban olvasott, elavult értékből kiszámított új értékkel felülírja egy másik művelet módosítását.

A Robotépítés foglalkozáson 18 szabad hely van. T1 négy, T2 hat helyet foglalna. Ha mindkét művelet 18-at olvas, T1 helyileg 14-et, T2 helyileg 12-t számol. Mindkét kivonás önmagában helyes. A teljes műveletsor viszont csak akkor helyes, ha a két foglalás után 18−4−6=8 hely marad.

Hibás egymásba fűzésben T1 beírja a 14-et, majd T2 a régi 18-ból számolt 12-t írja a közös adat helyére. A végső érték 12, így T1 négyhelyes foglalása elveszik a szabadhely-számításból. Ha két jelentkezési rekord közben ténylegesen létrejött, a foglalások és a szabad helyek már ellentmondanak egymásnak.

A jelenség nem csak valódi egyidejű processzorvégrehajtásnál fordulhat elő. Egyetlen processzor is felváltva hajthatja végre a két program részlépéseit. Ez a lépések egymásba fűzése. Az ütemezés azt írja le, milyen sorrendben szerepelnek a különböző tranzakciók olvasásai és írásai.

Az alábbi szemléltetés szándékosan a régi értékből számoló, külön olvasás–számolás–felülírás mintát mutatja. Nem azt állítja, hogy minden adatbázis-kezelő minden UPDATE-je így működik. A szabad_hely = szabad_hely − mennyiseg alakú, megfelelően ellenőrzött atomi adatbázis-módosítás és a konkurenciakezelés más viselkedést adhat. A konkrét megoldásnál a rendszer ütközési és izolációs szabályai számítanak.

Hibás ütemezés – elavult értékből történő felülírás
lépésT1: 4 helyT2: 6 helyközös érték
118 olvasása–18
2–18 olvasása18
318−4=14 számítása–18
4–18−6=12 számítása18
514 beírása–14
6–12 beírása12

Elvárt eredmény 8, hibás eredmény 12: négy hely levonása elveszett.

Próbáld ki: két foglalás, egy közös helyszám

Kezdetben 18 hely. T1 foglalása 4, T2 foglalása 6. Elvárt végeredmény: 8.

Modelltároló

18

Végrehajtás közbeni, szemléltető érték.

T1 · négy hely

Olvasott: még nincs

Kiszámított: még nincs

T2 · hat hely

Olvasott: még nincs

Kiszámított: még nincs

0. lépés · Kezdőállapot

T1 négy, T2 hat helyet szeretne lefoglalni. Mindkettő sikerénél 8 szabad helynek kell maradnia.

Lépésmodell, nem futó SQL-adatbázis. A modelltároló a köztes módosításokat is szemlélteti; ez nem állítás arról, mit láthat egy külső olvasó. A tényleges láthatóságot az izoláció és a DBMS szabályai határozzák meg.

10 · Többfelhasználós rendszerek

Soros és sorosítható ütemezés, védelem az ütközések ellen

AlapfogalomSoros ütemezésben az egyik tranzakció befejeződik, mielőtt a másik megkezdi az adatbázis-műveleteit. Sorosítható végrehajtás egymásba fűzve is valamely helyes soros végrehajtással egyenértékű lehet.

A legegyszerűbb helyes megoldásban T1 elvégzi a teljes négyhelyes foglalást és véglegesít. T2 ezt követően már 14-et olvas, abból hatot levon és 8-at ír be. A fordított soros sorrend ugyanerre a készleteredményre vezet: előbb 12, aztán 8. A soros futtatás fogalmilag egyszerű, de minden tranzakció teljes elkülönítése szükségtelenül csökkentheti a rendszer áteresztőképességét.

A cél általában nem minden felhasználó leállítása, hanem az egymással konfliktusban álló műveletek megfelelő összehangolása. Sorzárolásnál a módosítani kívánt rekordot a tranzakció védheti; egy másik módosító várhat, majd az aktuális állapotból folytat. A zárolás pontos hatása és időtartama rendszerfüggő, és egy közönséges SELECT nem minden rendszerben ugyanazt a zárat veszi fel, mint egy védett módosító olvasás.

Optimista megoldásnál verziószámmal ellenőrizhetjük, hogy az olvasás óta változott-e a rekord. A módosítás például csak a korábban látott verzió mellett hajtható végre; nulla módosított sor ütközést jelezhet. Ekkor nem írunk vakon a régi állapotból, hanem a teljes üzleti műveletet megfelelően újraértékeljük. Sorosítható izolációnál a rendszer is elutasíthat konfliktusos tranzakciót, amelyet az alkalmazásnak szükség szerint újra kell futtatnia.

Az alábbi SQL-minta fogalmi megoldásként egyetlen feltételes UPDATE-ben csökkenti a helyet. Az alkalmazásnak ellenőriznie kell a módosított sorok számát: ha nem pontosan egy, a foglalás elutasítandó. A jelentkezési rekord létrehozása ugyanahhoz a tranzakcióhoz tartozik. Az izoláció, megszorítások és motor tranzakciós képessége együtt biztosítják a tényleges működést; egy helyesnek látszó kódsor nem helyettesíti a többkapcsolatos tesztet.

Feltételes helycsökkentés – a tranzakció része
BEGIN;

UPDATE MUHELY
SET szabad_hely = szabad_hely - 4
WHERE muhely_id = 101
  AND szabad_hely >= 4;

-- Alkalmazás: pontosan 1 módosított sor?
-- Ha nem: ROLLBACK és elutasítás.
-- Ha igen: jelentkezési rekord rögzítése.
-- Ha az is sikeres: COMMIT.
-- Bármely hiba esetén: ROLLBACK.
Három védekezési irány
módszeralapelvkezelendő következmény
soros / védett végrehajtása konfliktusos műveletek nem írnak egymás régi eredményérevárakozás és zárolási konfliktus
verzióellenőrzéscsak a várt előzményállapotból engedünk módosítaniütközés felismerése, újrapróbálás
sorosítható izolációsoros végrehajtással egyenértékű eredmény a rendszer szabályai szerintszükség esetén teljes tranzakció újrafuttatása

11 · Önellenőrzés

Önellenőrzés és tranzakciótervezés

Először önállóan válaszolj, és indokold meg a döntésedet! A kérdés megnyitásakor megjelenik a megoldás és a magyarázat. A tervezési feladatban kapcsolj össze egy tanulói nézetet, jogosultsági szabályokat és helyesen kezelt foglalási tranzakciót.

1. Mi a különbség egy alaptábla és egy hagyományos nézet között?

Az alaptábla önállóan tárolt üzleti adatokat tartalmaz; a hagyományos nézet tárolt lekérdezésdefinícióból származtatja eredményét. A nézet metaadatai tárolódnak, de az eredménysorok nem szükségképpen alkotnak külön fizikai másolatot.

2. A tanulói nézetből elhagyjuk a költséget. Ezzel biztosan megvédtük az adatot?

Nem. Ha a tanuló közvetlen vagy örökölt joggal olvashatja az alaptáblát, a nézet megkerülhető. A nézet végrehajtási szabályait és a teljes jogosultsági rendszert együtt kell ellenőrizni.

3. Mi választja ki az oszlopokat és mi a sorokat a tanulói nézetben?

A SELECT oszloplistája választja ki az attribútumokat, a WHERE allapot = publikus feltétel a sorokat. A két szűrés külön feladat.

4. Ki tervezi a MUHELY és JELENTKEZES kapcsolatát, és ki fejleszti a DBMS tranzakciókezelőjét?

Az első feladat az üzleti adatbázis tervezőjéé az érintettekkel együtt; a második az adatbázis-kezelő rendszer fejlesztőjéé. Egy konkrét séma és a sémát kezelő általános szoftver különböző tervezési szint.

5. Egy tanuló űrlapon jelentkezik SQL nélkül. Részt vesz az adatbázis használatában?

Igen. Előkészített alkalmazásműveletet használó végfelhasználó. Az SQL ismerete nem feltétele annak, hogy adatbázison alapuló tranzakciót kezdeményezzen.

6. Miért kell a szabad hely csökkentését és a jelentkezés rögzítését együtt kezelni?

Ha csak az egyik sikerül, a foglalások és helyek eltérhetnek. Egy tranzakcióban a két kapcsolódó módosítás együtt véglegesíthető vagy együtt elvethető.

7. A forrásból levontunk 7 darabot, de a cél módosítása hibás. Mit kell tennünk?

A teljes átvezetési tranzakciót visszavonjuk, így a végleges forrás 20, cél 5 marad. Nem véglegesítjük a sikeres első részműveletet külön.

8. Egy új ROLLBACK visszavon egy tegnap sikeresen véglegesített jelentkezést?

Nem. A ROLLBACK a folyamatban lévő tranzakció még nem véglegesített módosításait vonja vissza. Egy korábbi üzleti művelet helyesbítéséhez új, megfelelő kompenzáló művelet szükséges.

9. 18 helyből T1 négyet, T2 hatot foglal. Mindkettő 18-at olvas, végül T2 ír utoljára. Mi a hibás és helyes végérték?

Hibás: 12, mert T2 a régi 18-ból hatot von le, felülírva a 14-et. Helyes: 8. A különbség négy hely, T1 levonása elveszett.

10. Soros ütemezésnél T1 után milyen értéket olvas T2?

T1 véglegesített értékét, a 14-et. Ebből hatot levonva 8-at kap, nem a régi 18-ból számol újra.

11. Lehet egymásba fűzött végrehajtás helyes?

Igen. A tranzakciók lépései megfelelő konkurenciakezeléssel egymásba fűzhetők úgy, hogy a végrehajtás soros végrehajtással egyenértékű legyen. A puszta váltakozás nem azonos a hibával.

12. Miért nem bizonyítja az egyfelhasználós siker a párhuzamos helyességet?

Egy kapcsolatban nem feltétlenül jelenik meg a régi állapotot olvasó másik művelet. Legalább két kapcsolattal, különböző ütemezésekkel és hibás ágakkal is vizsgálni kell a műveletet.

13. A feltételes UPDATE nulla sort módosít. Jelenthetünk foglalási sikert?

Nem. Hiányzó műhely vagy elégtelen hely miatt is lehet nulla a sorszám. Az alkalmazás ellenőrzi az eredményt, és elutasítja/visszavonja a tranzakciót.

14. A COMMIT egyenlő a teljes adatbázis biztonsági mentésével?

Nem. A COMMIT véglegesít egy tranzakciót. A mentés és visszaállítás külön eljárás. A naplózás ehhez helyreállítási információt adhat, de nem helyettesít minden mentési feladatot.

Összetett feladat: műhelyjelentkezés megtervezése

Egy iskolai rendszerben a MUHELY rekord kapacitása 24, szabad helye 18. Négy és hat tanulóból álló csoport jelentkezne. A tanuló csak közzétett címet, időpontot és helyet láthat; a szervező belső költséget és kapcsolattartói adatot is kezel. A jelentkezésnek egyszerre kell a helyszámot és a jelentkezési rekordot karbantartania.

  1. Nevezd meg a tanulói nézet oszlopait és sorfeltételét.
  2. Sorold fel, milyen jogokat és megkerülési lehetőségeket kell ellenőrizni.
  3. Tervezd meg a sikeres és hibás tranzakcióágat; mi maradjon a végleges állapot, ha a jelentkezési rekord rögzítése nem sikerül?
  4. Számítsd ki a hibás és helyes kétfoglalásos eredményt; adj legalább két védekezési módszert.
  5. Írj három többfelhasználós vagy hibakezelési tesztesetet, elvárt eredménnyel.
Részletes mintamegoldás és indoklás
  1. Oszlopok: muhely_id, cim, kezdes, szabad_hely. Feltétel: allapot = publikus. A költség és felelős e-mail nem kerül a tanulói nézetbe. A tervezet sorokat a WHERE zárja ki.
  2. A tanuló a nézetet olvashatja; belső oszlopokat alaptáblán, más nézeten vagy örökölt jogon sem érhet el jogosulatlanul. A végrehajtási jogosultságot a használt DBMS-ben ellenőrizzük. A jelentkezést az alkalmazás ellenőrzött művelete végzi, nem korlátlan táblamódosítás.
  3. Ellenőrzés és védett helycsökkentés után jelentkezésrögzítés történik ugyanazon tranzakcióban. Mindkettő sikere esetén COMMIT. Rögzítési hibánál ROLLBACK: az adott sikertelen foglalás levonása nem marad meg. Másik már véglegesített tranzakció változását nem vonjuk vissza.
  4. Elavult értékek felülírásakor az utolsó T2 12-t ír, helyesen 8 marad. Védett sorhozzáférés, megfelelő feltételes atomi frissítés, verzióellenőrzés vagy sorosítható végrehajtás használható a konkrét rendszerben; az ütközési/újrapróbálási ágat is megtervezzük.
  5. 1. Két kapcsolat 4 és 6 helyet foglal: mindkettő sikere után 8 szabad hely és két érvényes jelentkezés. 2. A második módosítás szándékosan hibázik: az adott tranzakció nem hagy levont helyet. 3. Csak 3 hely van, 4-et kérünk: a foglalás elutasított, a helyszám 3, nincs új jelentkezés. Bónusz: kapcsolatvesztés a véglegesítés körül esetén a műveletazonosító alapján ellenőrizzük a kimenetelt az ismétlés előtt.

A fejezet végére külön tudod választani a nézetet a jogosultságtól, a COMMIT-ot a mentéstől, és meg tudod magyarázni az elveszett módosítás okát.