kategória | ||||||||||
|
||||||||||
|
||
Az interaktív adatbáziskezelö rendszerek használatakor a felhasználó párbeszédet folytat a számítógéppel. Vagyis a felhasználó megadja parancsait, vagy kérdéseit, amelyekre azonnali választ vár a számítógéptöl. Fontos, hogy a felhasználó elfogadható idön belül 959i89j választ kapjon kérdéseire. A megfelelö válaszidö 2-3 másodpercen belül van, de a fél percen belüli válasz még elfogadható. Nem lenne szerencsés például egy könyvtári nyilvántartási rendszernél, ha fél óra alatt derítené ki, hogy a Háború és béke bent van-e a könyvtárban. Az interaktív adatbáziskezelés egyik legnagyobb problémája az adatok olyan fizikai szervezésének kialakítása, amely nagy mennyiségü adat esetén is gyors válaszadást biztosít.
Az interaktív adatbáziskezelés során is adódhatnak olyan feldolgozási igények, melyek kielégítése hosszabb idöt vesz igénybe. Ezeket célszerü külön futtatni, például a kórházi statisztikákat rendelési idön kívül.
Egy adatbázis adataihoz általában egyszerre nem csak egy felhasználó szeretne hozzáférni. Gyakori, hogy egy idöben számos lekérdezési és módosítási igény érkezik az adatbázishoz. Az adatbázis-kezelö feladata, hogy összehangolja ezeket az igényeket. Tekintsük az elözö könyvtári példát! Tegyük fel, hogy két kölcsönzö helyen is a Háború és békét szeretnék kikölcsönözni. A könyvtárosok mindkét helyen megkérdezik az adatbázist, hogy bent van-e a könyv a könyvtárban. Mind a ketten azt a választ kapják, hogy egy példány van jelenleg bent. Ezután mindketten jelzik az adatbázisnak, hogy a könyvet kiadták. A probléma csak akkor derül ki, amikor a raktárból két kötetet kellene kihozni, pedig ott csak egy van.
Az adatbázis általában egy központi gépen található, amelyhez más gépek, vagy terminálok csatlakoznak. Ha ugyanazt az adatrekordot egyszerre több felhasználó is kiolvassa az adatbázisból, ez semmilyen problémát nem okoz. Ha azonban egyszerre két felhasználó szeretné módosítani ugyanazt a rekordot, akkor adatvesztés történhet. Mindketten kiolvassák az adatbázisból a rekordot, a saját gépük memóriájába kerül a rekord tartalma. Itt elvégzik a módosítást, majd visszaírják a rekord új tartalmát az adatbázisba. Csakhogy a második visszaírás felülírja az elsöt, így azok a módosítások, amelyeket az a felhasználó hajtott végre, aki elöbb visszaírta a rekordot, elvesznek.
Példaként tekintsünk egy hallgatói nyilvántartást. Az A felhasználó egy hallgató ösztöndíját kívánja módosítani, a B felhasználó pedig ugyanezen hallgató lakcímét.
Mivel az A felhasználó elöbb írta vissza a rekordot az adatbázisba, a B felhasználó rekordja felülírja azt, így az adatbázisba csak a lakcímmódosítás kerül be, az ösztöndíj összege változatlan marad. A hibát észre sem veszik, hiszen az A felhasználó úgy látta, hogy az ö módosítása rendben megtörtént.
Ezen problémák megelözésére vezették be a többfelhasználós adatbáziskezelö rendszerekben az egyes adatbázisok, vagy azok bizonyos részeinek zárolását (lock). A zárolást egy alkalmazás kezdeményezi, hogy a számára szükséges adatokat más alkalmazás ne módosíthassa. A zárolás lehet sor szintü (rekord szintü), ekkor csak a meghatározott sorra vonatkozik, a többi sor változatlanul használható a többi alkalmazás számára. Lehet tábla szintü, ekkor egy teljes tábla tartalma kerül elzárásra, vagy adatbázis szintü, ekkor az adatbázis teljes tartalma zárolva van a többi alkalmazás számára.
Ha valamely alkalmazás zárol egy sort, vagy egy adatbázist, akkor a zárolt rész adatait csak olvasni tudja egy másik alkalmazás. Ha a másik alkalmazás zárolni szeretné ezt a sort, illetve adatbázist, várnia kell addig, míg az elsö felhasználó a zárat fel nem oldja (unlock). Ha egy teljes adatbázis zárolva van, akkor más felhasználó sor szintü lockolást sem valósíthat meg benne. Könyvtári példánkban fölösleges lenne a teljes adatbázist zárolni, elegendö csak az adott könyvre vonatkozó adatokat, vagyis sor szintü lockolást megvalósítani. Így más könyvek adatait továbbra is lehet zárolni, így módosítani. A lockolás megvalósítása a konkrét adatbáziskezelötöl függ. Van amelyik ténylegesen csak a kívánt sort lockolja, van amelyik a sor környezetében lévöket is, mindazokat, amelyek egyszerre kerülnek a memóriában levö munkaterületre. (Az adatbázis valamilyen háttértáron, többnyire mágneslemezen található. Ha valamilyen adatra szükségünk van az adatbázisból, akkor be kell hozni a megfelelö rekordot a memóriába. Az adatbáziskezelö azonban általában nem egyetlen rekordot mozgat egyszerre, mert így nem lenne hatékony a müködése, hanem rekordcsoportokat, blokkokat.)
Amennyiben módosítani akarunk egy adatbázisban szereplö adatot, ha az új érték független a régitöl, akkor elég, ha csak a beírás idejére zároljuk az adatot tartalmazó sort, de ha az új érték a régi függvénye, akkor már a kiolvasás elött zárolnunk kell a sort, nehogy a kiolvasás és a beírás között más módosítsa azt. Könyvtári rendszerünkben is ezt az eljárást kell alkalmazni, ekkor nem fordulhat elö, hogy ketten kölcsönzik ki egyszerre ugyanazt a könyvet. Mivel egy adat módosítása sok ideig tarthat, például azért, mert a felhasználó közben telefonál, vagy akkor kezdi keresni, hogy mit kell begépelnie, amikor a rekordot már beolvasta, ezért egyes adatbáziskezelök a rekord beolvasás elötti zárolása helyett a visszaírás elött ellenörzik, hogy módosult-e az adatbázisban a rekord a kiolvasás óta. Csak akkor írják vissza a rekordot, ha nem történt módosítás a kiolvasás óta. Egyébként pedig a rekord új tartalmát jelenítik meg a felhasználónak, akinek újra el kell végeznie a módosítást. Ebben az esetben a rekordokat csak a visszaírás idejére zárolják.
A teljes adatbázis zárolására akkor lehet szükség, ha olyan müveletet akarunk végezni, amely az adatbázis teljes egészét érinti, ilyen például az adatbázis újraszervezése. Akkor azonban, ha olyan módosítást végzünk, amely minden rekordot érint, - például egy hallgatói ösztöndíj-nyilvántartásban minden ösztöndíjat 1000 Ft-tal emelni kell - nem érdemes a teljes adatbázist zárolni, mert a zárolást soronként is meg lehet tenni. Egy ciklus segítségével a program sorra veszi a sorokat, a sort zárolja, módosítja, majd a zárolást feloldja. Ennek az az elönye, hogy a módosítás idején mindig csak egy sor van elzárva a többi alkalmazás elöl.
A zárolások következtében elöállhat patt-helyzet, amikor a felhasználók egymásra várnak. Például, két felhasználó ugyanazt a két adatbázist szeretné használni. Az egyik felhasználó zárolja az A adatbázist a másik pedig a B-t. Ezután az elsö felhasználó zárolni szeretné a B adatbázist is, a második pedig az A-t. Ekkor mindketten a másikra várnak , egyik sem tud továbblépni. Az így kialakult helyzetet angol szakkifejezéssel deadlock-nak hívják. Ennek elkerülésének egyik módja, hogy a programozók úgy készítik az alkalmazásokat, hogy a használni kívánt adatbázisokat minden alkalmazás azonos sorrendben próbálja zárolni.
A szükséges rekordlockolásokat bizonyos adatbáziskezelök automatikusan végzik és az alkalmazás készítöjének csak speciális esetekben kell gondoskodnia róla, más adatbáziskezelöknél az alkalmazás készítöjének feladata a lockolások kiadása.
Találat: 1131