Adatbázisrendszerek megvalósítása

Slides:



Advertisements
Hasonló előadás
Adatbázis-kezelés Készítette: Asztalos Péter január 12.
Advertisements

Lekérdezések SQL-ben Relációs algebra A SELECT utasítás
ADATBÁZISOK.
© Kozsik Tamás Adatbáziskezelés •Relációs adatbáziskezelők •Noha a Java objektum-elvű, egyelőre nem az objektum-elvű adatbáziskezelőket támogatja.
A normalizálás az adatbázis-tervezés egyik módszere
ADATBÁZIS KEZELÉS – Alapfogalmak
Anyagadatbank c. tárgy gyakorlat
Adatbázisok SQL. TARTALOM Szijártó M.2 Témakörök  Az SQL tulajdonságai  A műveletek fajtái  Objektum-műveletek  Lekérdezések Tulajdonságok és műveletek.
Adatbázis-kezelés.
Delphi programozás alapjai
SQL Structured Query Language
Funkcionális függés Redundancia 1NF, 2NF, 3NF
Adatbázis kezelés. Hierarchikus modell Legrégebbi modell, ma már nem használatos. Az adatokat fákban tároljuk, ahol minden pont a szegmens adatokat, és.
5. GYAKORLAT SQL CREATE TABLE, aktualizálás. S QL Structured Query Language A relációs adatbáziskezelés szabványos nyelve Nem algoritmikus, de beépíthető.
– SQL 2: Adatok kezelése – Tarcsi Ádám, január 30. Adatbázis gyakorlat.
– Adattáblák & adatok kezelése – Tarcsi Ádám január Adatbázis gyakorlat.
Microsoft Access V. Készítette: Rummel Szabolcs Elérhetőség:
Adatbázis-kezelés.
Adatbázis rendszerek II.
az MSAccess programmal
Delphi programozás alapjai Nagyváradi Anett PTE PMMK MIT.
2006. október 9.Markó Tamás, PTE TTK1 Az Oracle SQL 7. Kényszerek megadása. Indexek kezelése.
Adattáblák létrehozása, módosítása, tranzakciók, megszorítások Rózsa Győző.
Kényszerek megadása. Indexek kezelése.
Relációs algebra. A relációs adatbáziskezelő nyelvek lekérdező utasításai a relációs algebra műveleteit valósítják meg. A relációs algebra a relációkon.
- adatbázisséma definiálása (DDL) Data Definition Languages, - adatok aktualizálása (DML),Data Maniputaion Language - lekérdezési lehetőségek (DML) Data.
SQL. SQL = Structured Query Language (= struktúrált lekérdező nyelv). A relációs adatbázis-kezelés szabványos nyelve. Nem algoritmikus nyelv, de algoritmikus.
Az SQL nyelv alapjai.
DML. Új rekord beszúrása: INSERT INTO tábla (oszlop1,oszlop2,…) VALUES (érték1,érték2,…); Rekord módosítása: UPDATE tábla SET oszlop = érték WHERE feltétel;
szakmérnök hallgatók számára
Tervezés, Normalizálás
Dr. Krauszné Dr. Princz Mária Adatbázis rendszerek I.
DDL – Adatdefiníciós nyelv
Adattáblák létrehozása, módosítása, tranzakciók, megszorítások Rózsa Győző.
2012. tavaszi félév Vitéz Gergely. A diasor ismerete nem helyettesíti a tankönyvet, és a példatárat. A diasor ismerete szükséges, de nem elégséges feltétele.
A diasor ismerete nem helyettesíti a tankönyvet, és a példatárat. A diasor ismerete szükséges, de nem elégséges feltétele a minimum elégséges érdemjegynek!
Adatbázis-kezelés SQL-lel
SQL DDL DATA DEFINITION LANGUAGE. Táblák létrehozása CREATE TABLE táblanév ( oszlopnév1 típus(méret) /DEFAULT érték/ /NOT NULL/, oszlopnév2 típus(méret)
Készítette: Tóth Ervin
Az SQL nyelv. SQL Az SQL utasításait két fő csoportba szokták sorolni: DDL (= Data Definition Language): adatstuktúra definiáló utasítások. DML (= Data.
Adatbázis-kezelés JAG,
SQL-Structured Query Language. Parancs(utasítás) csoportok CREATE - táblák létrehozása ALTER – táblák módosítása DROP – táblák törlése DDL –Data Definition.
SQL.
Adatbázis kezelés.
Adatbázis-kezelés.
1 Sramó András Adatbázis-technológia V. előadás Adatbázis-technológia 5. előadás Az SQL.
– SQL 3: SELECT - 1. – Tarcsi Ádám, január 31. Adatbázis gyakorlat.
Tarcsi Ádám, Adatbázis gyakorlat – Adattáblák – Tarcsi Ádám, január.
Bevezetés A MYSQL szintaxisa Táblák, adatok kezelésének alapjai
Adatbázisok Fleiner Rita, Tankönyv:
Adatbázis-kezelés Készítette: Asztalos Péter január 12.
Adatbázis alapfogalmak
5. gyakorlat Fleiner Rita.
Webprogramozó tanfolyam
Relációs algebra Relációs sémák tervezése
Normálformák Takács Gábor mérnök informatikus, okl. mérnöktanár
SQL. SQL jellemzői Nem algoritmikus (nem tartalmaz algoritmikus szerkezeteket: ciklus, eljárás, elágazás) Nem rekurzív (önmagát nem hívhatja) Halmazorientált.
Adatbázis-kezelés 3-4. Adatok lekérdezése utasítás általános formája SELECT [ALL/DISTINCT] {*/, …, } FROM [ ], …, [ ] [WHERE GROUP BY, …, HAVING ORDER.
– SELECT - 1. – Tarcsi Ádám január Adatbázis gyakorlat.
Adatbáziskezelés. Adat és információ Információ –Új ismeret Adat –Az információ formai oldala –Jelsorozat.
 Adatbázis:  Valamilyen szempont szerint rendszerezett adathalmaz.  Adatbázis kezelés:  Adatok tárolása  Műveletek végzése az adatbázison; (Adatok.
Adatbázis-kezelés 1-2. adatbázis-kezelő rendszer 1.új adatbázisokat hozhassanak (adat definició 2.lekérdezések és módosítások (adat manipuláció) 3.Támogassa.
Adatbázisszintű adatmodellek
Gazdasági informatika II (SZIE GTK GVAM 1. évfolyam) 2009/2010. tanév 2. félév.
Alapfogalmak Adat: rögzített ismeret
Adatbázisok SQL.
Logisztikai projekt - gyakorlat Adatbázis-elmélet
Relációs adatmodell, normálformák
Adatbázis-kezelés 2. Relációs adatbázisok.
Adatbázis-kezelés.
Előadás másolata:

Adatbázisrendszerek megvalósítása Vegera József

Adatbázis fogalma Adatbázison köznapi értelemben valamely rendezett, valamilyen szisztéma szerint tárolt adatokat értünk, melyek nem feltétlenül számítógépen kerülnek tárolásra. Az adathalmaz csak akkor válik adatbázissá, ha az valamilyen rend szerint épül fel, mely lehetővé teszi az adatok értelmes kezelését. Természetesen ugyanazon adathalmazból többféle rendszerezés alapján alakíthatunk ki adatbázist.

Adatbáziskezelő rendszer Az adatbázisok mellé egy adatbáziskezelő rendszer (DBMS) is járul, mely az adatbázis vagy adatbázisok üzemeltetését biztosítja. Hagyományos adatbázis esetén ez a kezelő személyzet intelligenciájának része, elektronikus adatbázisok esetén pedig valamilyen szoftver. Példák?

Az adatbáziskezelők feladatköre Függetlenség az aktuális hardver konfigurációtól Függetlenség az adatelérés módjától Függetlenség az adatstruktúráktól

Adatbázis modellek Hierarchikus adatbázis modell Csak 1:n típusú kapcsolatok képezhetők le segítségével. Hálós adatbázis modell Ebben a modellben n:m típusú adatkapcsolatok is leírhatók. Az adat visszakeresése csak a tárolt kapcsolatok segítségével bejárható.

Adatbázis modellek Relációs adatbázis modell Az adatokat táblázatok soraiban képezzük le. Objektum-orientált modell Az egyes adatbázis elemek (objektumok) "tudják", hogy kik ők, mire használhatók, s miként kapcsolódnak a többi adatbázis-elemhez.

Relációk A reláció nem más mint egy táblázat, a táblázat soraiban tárolt adatokkal együtt. Személy Személyi szám Név Város Foglalkozás 1 650410 1256 Kiss lászló Győr kőműves 2 781117 0131 Nagy Ágnes Szeged tanuló 1 610105 1167 Kiss László Budapest lakatos Az előző relációból a személyi szám oszlopot elhagyva relációnak tekinthető-e a táblázat? Mivel nem zárható ki, hogy két azonos nevű és szakmájú személy éljen egy településen belül a személyi szám nélkül két azonos sor is szerepelhetne, mely a relációban nem megengedett.

Funkcionális kapcsolat Egy vagy több adat konkrét értékéből más adatok egyértelműen következnek. Például a személyi szám és a név között funkcionális kapcsolat áll fenn, mivel minden embernek különböző személyi száma van. Ezt a SZEMÉLYI_SZÁM -> NÉV kifejezéssel jelölhetjük.

Funkcionális függőség A funkcionális függőség bal oldalát a függőség meghatározójának nevezzük. A NÉV -> SZÜLETÉSI_ÉV állítás nem igaz, mert több személynek lehet azonos neve, akik különböző időpontokban születtek.

Függőség több attribútumnál A funkcionális függőség jobb oldalán több attribútum is állhat. Például az AUTÓ_RENDSZÁM -> TIPUS, TULAJDONOS funkcionális függőség azt fejezi ki, hogy az autó rendszámából következik a típusa és a tulajdonos neve, mivel minden autónak különböző a rendszáma, minden autónak egy tulajdonosa és típusa van.

Kölcsönös függőség például a házastársak esetén FÉRJ_SZEM_SZÁMA -> FELESÉG_SZEM_SZÁMA, illetve FELESÉG_SZEM_SZÁMA <- FÉRJ_SZEM_SZÁMA. Mindkét funkcionális kapcsolat igaz és ezt a FÉRJ_SZEM_SZÁMA <-> FELESÉG_SZEM_SZÁMA jelöléssel fejezzük ki. (Többnejűség..)

Teljes funkcionális függőség A meghatározó oldalon nincsen felesleges attribútum. A RENDSZÁM, TÍPUS -> SZÍN funkcionális függőség nem teljes funkcionális függőség, mivel a rendszám már egyértelműen meghatározza a kocsi színét, ehhez nincs szükség a típusra is.

Relációk leírása reláció_név=({attribútumok}, {funkcionális függőségek listája}) Pl: SZEMÉLYEK=({SZEMÉLYI_SZÁM,NÉV, MUNKAHELY}, {SZEMÉLYI_SZÁM -> NÉV, SZEMÉLYI_SZÁM -> MUNKAHELY})

Többértékű függőség Az egyik attribútumhoz egy másik attribútum csoportja, halmaza kapcsolódik. Például minden embernek lehet több szakmája. Jelölése: SZEMÉLYI_SZÁM ->> SZAKMA Egy attribútum értékéből egynél több további attribútum értéke is következhet: SZEMÉLYI_SZÁM ->> SZAKMA, OKLEVÉL_KELTE

Reláció kulcs A reláció kulcs a reláció egy sorát azonosítja egyértelműen. A reláció - definíció szerint- nem tartalmazhat két azonos sort, ezért minden relációban létezik kulcs. Jellemzői: az attribútumok egy olyan csoportja, melyek csak egy sort azonosítanak (egyértelműség) a kulcsban szereplő attribútumok egyetlen részhalmaza sem alkot kulcsot a kulcsban szereplő attribútumok értéke nem lehet definiálatlan (NULL)

Összetett kulcsok, idegen kulcsok A kulcs több attribútum érték összekapcsolásával állítható elő. A relációban külső kulcsot vagy kulcsokat is megkülönböztethetünk. Ezek az attribútumok nem az adott relációban, hanem az adatbázis másik relációjában alkotnak kulcsot.

Redundancia Ha valamely tényt vagy a többi adatból levezethető mennyiséget ismételten (többszörösen) tároljuk az adatbázisban. Könnyen az adatbázis inkonzisztenciáját okozhatja, a felesleges terület lefoglalásán túl.

Elsődleges attribútum Azokat az attribútumok, melyek legalább egy reláció kulcsban szerepelnek. A többi attribútumot nem elsődlegesnek (másodlagosnak) nevezzük.

Első normál forma (1NF) Egy reláció első normál formában van, ha minden attribútuma egyszerű, nem összetett adat. Annak eldöntése, hogy egy attribútumot egyszerűnek vagy összetettnek tekintünk nem mindig egyértelmű, az adatok felhasználásától is függ.

Második normál forma (2NF) A reláció első normál formában van A reláció minden nem elsődleges attribútuma teljes funkcionális függőségben van az összes reláció kulccsal Terem Időpont Előadás Férőhely B 10:00 Mitológia 250 A 8:30 Irodalom 130 11:30 Szinház 11:00 Festészet 13:15 Régészet

Harmadik normál forma (3NF) A reláció második normál formában van. A reláció nem tartalmaz funkcionális függőséget a nem elsődleges attribútumok között. Szakkörök Szakkör Tanár Születési év Képzőművész Sár Izodor 1943 Iparművész Karate Erős János 1972

Boyce/Codd normál forma (BCNF) Több kulccsal rendelkező relációk esetén minden elsődleges attribútum teljes funkcionális függőségben van azokkal a kulcsokkal, melyeknek nem része.

Példa BCNF szükségességére Tantárgyak Tanár Időpont Tantárgy Félév Diák_szám Kiss Pál 93/1 Adatbázis 1 17 Jó Péter Unix 21 93/2 2 32 19 KissPál 3 25 A relációnak két kulcsa van, a (Tanár, Időpont, Félév) és a (Tantárgy, Időpont, Félév). A tanár attribútum az őt nem tartalmazó reláció kulcs (Tantárgy, Időpont, Félév) csak egy részétől (Tantárgy, Félév) függ.

Negyedik normál forma (4NF) A többértékű függőségekből adódó redundancia kiszűrését szolgálja. Harmadik normál formában van. Egy X->>Y többértékű függőséget tartalmazó relációban csak az X és Y-ban megtalálható attribútumokat tartalmazza.

Példa 4NF szükségességére Barátok-hobbik Személy Barát Hobbi Nagy József Elek Attila foci Varga Attila Kiss Péter Kiss Pál sakk video Az eredeti reláció kulcsa valamennyi attribútumot tartalmazza, mégis tartalmaz redundanciát, ugyanaz a személy-barát illetve személy-hobby kapcsolat többször is szerepelhet.

Ötödik normál forma (5NF) Tanár-Tanfolyam-Helyszín Tanár Tanfolyam Helyszín Nagy Éva Adatbázis I. Szeged Kiss Pál Győr Adatbázis II. Pécs A többértékű függőségek külön relációkban tárolásával információt veszthetünk. Tanár->>Tanfolyam, Tanfolyam->>Helyszín

Példa 5NF szükségességére Tanfolyam-Helyszín Tanár_Tanfolyam Tanfolyam Helyszín Adatbázis I. Szeged Győr Adatbázis II. Pécs Tanár Tanfolyam Nagy Éva Adatbázis I. Kiss Pál Adatbázis II. Előzőek szerinti felbontás után információt vesztünk. Hol? Megoldás?

Indexek fogalma és felépítése A relációkhoz kapcsolt indexek segítségével az index kulcs ismeretében közvetlenül megkaphatjuk a kulcsot tartalmazó sor fizikai helyét az adatbázisban. Az indexek képzésére két módszer terjedt el, a hash kódok és a bináris fák.

Hash kód egy számítási algoritmus alapján magából az index kulcsból alakul ki a hash kód, mely alapján egy táblázatból kiolvasható a keresett értéket tartalmazó sor fizikai címe. A hash kód számítási algoritmusa nem mindig ad különböző értékeket az index kulcsokra. Az azonos kódot adó kulcsokat összeláncolják egy listában.

Bináris fák Ehhez az index kulcsokat növekvő vagy csökkenő sorrendbe kell rendezni. A keresés mindig a gyökértől kezdődik, a megfelelő ág felé folytatódik, és akkor ér véget, ha egy levélhez érünk. Ha a levélben tárolt index kulcs azonos a keresettel, akkor megtaláltuk a keresett értéket, ellenkező esetben sikertelen volt a keresés.

Bináris fák Felépítésénél arra törekszenek, hogy a fa valamennyi ága azonos hosszúságú legyen (kiegyensúlyozott fa). A gyakorlati megoldásokban a hatékonyság kedvéért a csomópontokban nem csak egy index kulcs értéket tárolnak, hanem a háttértár tárolási egység (blokk) méretének megfelelő számút. A reláció sorait az index kulcs szerinti növekvő vagy csökkenő sorrendben is végigjárhatjuk.

Relációs algebra műveletei Szelekció Projekció Descartes szorzat Összekapcsolás Halmaz műveletek (unió, metszet, különbség)

Az SQL lekérdező nyelv adatdefiníciós nyelv, DDL adatmanipulációs nyelv, lekérdező nyelv adatvezérlő nyelv

Az SQL lekérdező nyelv adatdefiníciós nyelv, DDL adatmanipulációs nyelv, DML lekérdező nyelv, QL adatvezérlő nyelv, DCL Az SQL halmaz orientált nyelv, mely a relációkon dolgozik. Nem kell definiálni a művelet végrehajtásának lépéseit. A művelet végrehajtásához optimális megoldás megtalálása a nyelvi processzor feladata, nem a programozóé. (Elvileg..)

Az adatdefiniciós nyelv Segítségével hozhatjuk létre (CREATE), illetve szüntethetjük meg (DROP) a relációkat, az indexeket illetve a nézet táblázatokat. Pl: CREATE TABLE Tanarok (Tanar_azonosito NUMERIC (4) PRIMARY KEY, Nev CHAR (30) NOT NULL, Cim CHAR (40) NOT NULL, Telefon CHAR (15));

CREATE TABLE általános alakja CREATE TABLE reláció_név (attribútum_név adattípus [(szélesség)] [CONSTRAINT megszorítás_név] [oszlop_megszorítás],.. ) [CONSTRAINT megszorítás_név] [tábla_megszorítás];

Oszlop megszorítás NULL az attribútum definíciójában arra utal, hogy az adat megadása nem kötelező (alapértelmezett). NOT NULL az attribútum definíciójában arra utal, hogy az adat megadása kötelező, azaz nem vihető be olyan sor a relációban, ahol az így definiált adat nincs kitöltve. PRIMARY KEY ez az oszlop a tábla elsődleges kulcsa. UNIQUE ez az oszlop a tábla kulcsa. CHECK(feltétel) csak feltételt kielégítő értékek kerülhetnek be az oszlopba. [FOREIGN KEY] REFERENCES tábla [ (oszlop) ], ez az oszlop külső kulcs.

Tábla megszorítás A tábla megszorításban több oszlopra vonatkozó korlátozásokat adhatunk meg. PRIMARY KEY(oszlop1[, oszlop2, ...]) ezek az oszlopok együtt alkotják az elsődleges kulcsot. UNIQUE(oszlop1[, osylop2, ...]) ezek az oszlopok együtt kulcsot alkotnak. CHECK(feltétel) csak feltételt kielégítő sorok kerülhetnek be a táblába. FOREIGN KEY (oszlop1[, oszlop2, ...]) REFERENCES tábla(oszlop1[, oszlop2, ...]), az oszlopok külső kulcsot alkotnak a megadott tábla oszlopaihoz.

Reláció módosítása ALTER paranccsal ALTER TABLE reláció_név ADD (bővítés) ALTER TABLE reláció_név MODIFY (változtatás) ALTER TABLE reláció_név DROP (szűkítés) Pl: ALTER TABLE Diakok MODIFY nev CHAR (40) NOT NULL;

Az adatmanipulációs nyelv A relációk feltöltését (INSERT), az attribútumok módosítását (UPDATE) és a sorok törlését (DELETE) biztosítja. Pl: INSERT INTO Diakok (Diak_azonosito, Nev, Cim, Osztaly) VALUES (435, 'Nagy Istvan', 'Budapest O utca 3.', '3.b');

Általános szintaktikájuk INSERT INTO reláció [(attribútum_név, attribútum_név, ...)] VALUES (érték, érték, ...); UPDATE reláció_név SET attribútum_név = érték, attribútum_név = érték, ... [WHERE feltétel]; DELETE FROM reláció_név [WHERE feltétel];

A lekérdező nyelv Projekció: SELECT [DISTINCT] attribútum_név, attribútum_név, ... FROM reláció_név; Szelekció: SELECT attribútum_név, attribútum_név, ... FROM reláció_név WHERE feltétel; Pl: SELECT idopont, tantargy FROM orarend WHERE osztaly = '3/b';

Összehasonlító operátorok SELECT operátorai Összehasonlító operátorok Operátor Értelmezés = egyenlő != <> ^= nem egyenlő > nagyobb >= nagyobb egyenlő "<" kisebb "<=" kisebb egyenlő Logikai operátorok Operátor Értelmezés NOT Logikai tagadás AND Logikai és OR Logikai vagy

Összehasonlító operátorok halmazokra SELECT operátorai Összehasonlító operátorok halmazokra Operátor Értelmezés BETWEEN x AND y adott értékek közé esik IN (a, b, c, ...) az értékek között található LIKE minta hasonlít a mintára SELECT Diak_azonosito FROM Osztalyzatok WHERE Osztalyzat BETWEEN 3 AND 5 AND tantargy = 'matematika';

Lekérdezések csoportosítása A lekérdezés eredményét csoportosíthatjuk és a csoportok között is további szelekciót alkalmazhatunk a GROUP BY és HAVING alparancsokkal. SELECT attribútumok FROM reláció [WHERE feltétel] GROUP BY attribútum [HAVING csoport_feltétel];

Csoportfüggvények AVG (attribútum) COUNT (attribútum) COUNT (*) MAX (attribútum) MIN (attribútum) SUM (attribútum) STDDEV(attribútum)

Példa csoportfüggvényre SELECT Osztály, COUNT (*) FROM Diakok GROUP BY Osztaly HAVING COUNT (*) > 5

Konverziós függvények Karakteres (LENGTH, UPPER, SUBSTR..) Numerikus (ROUND, TRUNC, SQRT..) Dátum (TO_CHAR, MONTH_BETWEEN)

Összekapcsolások Belső (INNER JOIN) Külső (OUTER JOIN) LEFT JOIN RIGHT JOIN

Halmazműveletek Unió Metszet Különbség SELECT .... UNION SELECT ... SELECT ... INTERSECT SELECT ... SELECT ... MINUS SELECT ... A MINUS kulcsszó helyett az EXCEPT használandó néhány adatbáziskezelőben

A vezérlő nyelv Felhasználók jogosultságkezelése (GRANT, REVOKE,..) Tranzakciókezelés (COMMIT, ROLLBACK,..)

Tárolt rutinok Egy tárolt eljárás olyan SQL nyelven írt parancsok összessége,amelyet az adatbázis-kiszolgálón rögzítünk, s utána a programozásban használatos módon meghívhatjuk.

Tárolt rutinok előnyei Az adatbázissal kapcsolatos logika valóban az adatbázis szintjére kerülhet, nem teszi nehezen érthetővé a programkódot. Az itt elvégzett műveletekben szereplő rekordok nem hagyják el az adatbázis-kiszolgálót, hanem ott helyben történik meg a feldolgozásuk. (hálózati terhelés, késleltetés)

Tárolt rutinok Tárolt eljárások Tárolt függvények: van valódi visszatérési értéke

Felhasználói változók Értékek tárolására, hivatkozására Globálisak az adott kapcsolaton belül (bármely adatbázisban látszódhat, de mások nem látják) Beállítása: SET @változónév = érték Kiolvasása: SELECT @változónév Tárolt rutinok hívásánál, vagy kiértékelésénél hasznos.

Tárolt eljárások paramétereinek típusai Bemeneti, IN (konstans, vagy változó) Kimeneti, OUT (felhasználói változó) Be- és kimeneti, INOUT Tárolt függvényeknél nem megadható, ott automatikusan IN lesz!

Tárolt eljárások Létrehozása: CREATE PROCEDURE eljárásnév( paraméterek) BEGIN … END DELIMITER átírása pl. // Hívása: CALL eljárásnév(paraméterek); CREATE PROCEDURE negyzet(IN szam INT,OUT negyzete INT) BEGIN SELECT szam*szam into negyzete; END // CALL negyzet(4,@a);

Tárolt függvények Hívásuk kifejezésben lehetséges: SELECT funcdemo(4); CREATE FUNCTION funcdemo(szam int) RETURNS INT BEGIN RETURN szam*szam; END Hívásuk kifejezésben lehetséges: SELECT funcdemo(4);

Tárolt rutinok utasításai DDL utasítások (CREATE, DROP…) használhatók Eljárásokban tranzakciós utasítások (függvényekben nem) Ne használjunk önmagában eredményt adó utasításokat (can't return a result set in the given context hiba) pl. SELECT 3 helyett SELECT 3 INTO valtozo

Jogosultságok A felhasználónak EXECUTE jog szükséges. Pl: GRANT EXECUTE ON FUNCTION db.func  TO user@host (Procs_priv-be kerül) Természetesen a rutinokban lévő SQL utasítások futtatására is jogosult kell legyen a felhasználó. SECURITY TYPE= Definer | Invoker A Definer meghatározható deklaráláskor: CREATE DEFINER = 'admin'@'localhost' PROCEDURE … Alapértelmezett a CURRENT_USER

Vezérlési szerkezetek Ciklusok: REPEAT utasítások; UNTIL feltétel END REPAT WHILE feltétel DO utasítások END WHILE LOOP utasítások END LOOP (LEAVE) Feltételek: IF feltétel THEN utasítások; ELSE utasítások END IF

DECLARE Lokális változók Feltételek (CONDITION) Hibakezelők (HANDLER) Kurzorok létrehozására

Hibakezelők (Handler) DECLARE handler_típus HANDLER FOR feltétel[,...] utasítás (általában SET) Handler típusa: CONTINUE folytatódik a rutin EXIT kilép UNDO tranzakció rollback

Hibakezelők Feltétel lehet: SQLSTATE érték Saját feltétel SQLWARNING (01 kezdetű SQLSTATE-ek) NOT FOUND (02 kezdetű SQLSTATE-ek) SQLEXCEPTION (minden SQLSTATE, ami nem 00,01,02-vel kezdődik) MySQL Hibakód

Feltételek (condition) Handlerekhez saját feltételek készítése (SQLSTATE-ekből, hibakódokból) pl: declare not_null condition for 1048; declare continue handler for not_null SET @error = ’not_null Error’;

Kurzorok Egy lekérdezés eredményének átmeneti tárolási lehetősége, ahonnan akár rekordonként visszahozhatók az adatok. DECLARE OPEN FETCH CLOSE

Kurzorok példa DECLARE cur1 CURSOR FOR SELECT id,data FROM test.t1; DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1; OPEN cur1; read_loop: LOOP FETCH cur1 INTO a, b; IF done THEN LEAVE read_loop; END IF; END LOOP; CLOSE cur1;

Az Oracle rendszer komponensei Az Oracle szerver felépítésének és fő komponenseinek megismerése Egy felhasználó Oracle példányhoz (instance) kapcsolódása hogyan történik A következő feladatok végrehajtásának állapotai: Lekérdezések DML utasítások Commit utasítások Az állományok, folyamatok és az ORACLE szerver által használt memóriarészek bemutatása

Az Oracle adatbázis két fő része Az adatbázis vagyis a fizikai struktúrák rendszere A példány (instance) vagyis a memória struktúrák és folyamatok rendszere

1. Az adatbázis vagyis a fizikai struktúrák rendszere A vezérlő fájl (control file), mely az adatbázis konfigurációját tárolja A helyrehozó napló fájlok (redo log files), amikben a helyreállításhoz szükséges információkat tároljuk Az adatfájlok, amelyekben az összes tárolt adat szerepel Paraméterfájl, amelybe olyan paramétereket tárolunk, amelyek befolyásolják egy példány méretét és tulajdonságait Jelszófájl

2. A memória struktúrák és folyamatok rendszere /instance A memóriában lefoglalt System Global Area (SGA) terület Azok a szerverfolyamatok, amelyek az adatbázis-műveletek végrehajtásáért felelősek.

Oracle instance állapotai Closed consistently Crash closed Started (init.ora, vagy spfile beolvasása, SGA lefoglalás) Mounted (vezérlő fájlok beolvasása, egy adatbázist egyszerre több példány is csatolhat) Opened (normál üzem, online database fájlok, redo log fájlok nyitva) Restricted mode (csak a restricted session system priv-vel rendelkezők használhatják)

A vezérlő fájlok (Control files) A példány indításakor az adatbázis rákapcsolásához (mount) be kell olvasni a vezérlő fájlokat. Az adatbázist alkotó fizikai fájlokat határozza meg. Ha új fájlt adunk az adatbázishoz, akkor automatikusan módosulnak. A vezérlő fájlok helyét az inicializálási paraméterben adjuk meg. Adatvédelmi szempontból legalább három különböző fizikai eszközön legyen másolata (multiplex the control files). Ez is inicializálási paraméterrel adható meg. Az Oracle szerver elvégzi a többszörös másolatok szinkronizációját.

Napló állományok (Redo Log Files) Az adatbázis változtatásait rögzíti Konzisztens állapot visszaállításhoz szükséges rendszerhiba, áramszünet, lemezhiba, stb. esetén Adatvédelmi okokból különböző lemezeken többszörös másolatokat kell belőle szinkronizáltan kezelni. A REDO napló REDO fájlcsoportokból áll. Egy csoport egy naplófájlból és annak multiplexelt másolataiból áll. Minden csoportnak van egy azonosítószáma.

Naplóírás REDO csoportokba A naplóíró folyamat (log writer process -LGWR) írja ki a REDO rekordokat a pufferből egy REDO csoportba, amíg vagy tele nem lesz a fájl, vagy nem érkezik egy direkt felszólítás, hogy a következő REDO csoportba folytassa a kiírást. A REDO csoportok feltöltése körkörösen történik.

Táblaterek (tablespaces) és adatfájlok A legnagyobb tárolási egység (azonosító neve van), logikailag összetartozó adatelemeket tartalmaz, egy vagy több állományból állhat, de egy állomány csak egy tablespace része Állapota lehet: on-line vagy off-line (kivéve a SYSTEM tablespace) illetve: read-write vagy read-only

Szegmensek Egy táblatér több szegmensből állhat, azonos tárolási szerkezetű adatok tárolására alkalmas. Néhány szegmenstípus: normál tábla: mezők és rekordok egymás után vannak ömlesztve (beszúrás sorrendjében helyezi el) cluster tábla: a rekordok kulcs/idegen kulcs szerint rendezve helyezkednek el rollback szegmens temporary szegmens, stb.

Területek (extents) Egy szegmens több kiterjesztésből áll (extent) Több, egymásután folyamatosan elhelyezkedő blokk együttese, folytonos tárterület, allokációs egység, túl sok extent fregmentációt jelent.

Adatblokkok A területek (extents) folytonos adatblokkok halmazai. Az adatblokkok az adatbázis legkisebb írható/olvasható egységei. Az adatblokkok operációs rendszerbeli blokkokra képezhetők le. Egy blokk az adatok IO, olvasási, írási egysége, rendszerint nagyobb, mint a lemez blokk (annak többszörösei 4x, 8x,..)

A memóriaszerkezet részei System Global Area (SGA): Az összes szerverfolyamat és háttérfolyamat osztozik rajta Program Global Area (PGA): Minden szerverfolyamatnak és háttérfolyamatnak saját memóriaterülete (PGA-ja) is van.

SGA Osztott memória terület, elemei: shared pool: SQL utasítások nyilvántartása, adatszótár és kurzor adatokat tárol data buffer: feldolgozás alatt álló adatelemek redo log area: elvégzett műveletek naplója rollback area: induló adatállapotok értékei

PGA A PGA (Program Global Area) jellemzése: rendezési terület: az SQL végrehajtáshoz szükséges rendezéseket, segédszámításokat végzi el session leíró: a felhasználói munkakörnyezet paramétereit tárolja kurzor terület: az SQL utasítások adatai, műveleti fái verem terület: egyéb adatok tárolása

Folyamatok Amikor egy alkalmazás elindul, akkor az Oracle szerver elindít egy szerverfolyamatot, amely lehetővé teszi az alkalmazás utasításainak végrehajtását. Az Oracle egy példány indításakor háttérfolyamatokat is elindít, amelyek kommunikálnak egymással és az operációs rendszerrel. A háttérfolyamatok kezelik a memóriát, puffereket, végrehajtják az írási, olvasási műveleteket a lemezen, karbantartásokat végeznek.

Háttérfolyamatok System monitor (SMON): Katasztrófa utáni indításkor elvégzi a helyreállítást Process monitor (PMON): Ha egy felhasználói folyamat megszakad, akkor elvégzi a szükséges takarítást, karbantartást Database writer (DBWn): Az adatpufferből kiírja lemezre, egy fájlba a módosított blokkokat Checkpoint (CKPT): Ellenőrzési pontok esetén elindítja a DBWn folyamatokat és frissíti az adatbázis összes adatállományát és vezérlő állományát Log writer (LGWR): A REDO napló bejegyzéseit írja ki a lemezre Archiver (ARCn): A REDO napló állomány másolatait a mentésre kijelölt lemezekre írja ki

Az adatbázishoz nem tartozó fájlok 1. A paraméterfájl az Oracle példány jellemzőit határozza meg, például az SGA memóriarészeinek méretét. 2. A jelszófájlból derül ki, hogy melyek azok a felhasználók, akik elindíthatnak vagy lekapcsolhatnak egy Oracle példányt. 3. Az archivált REDO naplófájlok a naplófájl másolatai, amelyeket lemezhiba után lehet helyreállításhoz használni

Egy SQL utasítás végrehajtásának folyamata Egy példányhoz kapcsolódáshoz (Connect) szükséges: Felhasználói folyamat Szerverfolyamat Az SQL utasítás típusától függ, hogy az Oracle szerver milyen komponenseire lesz szükség: A lekérdezések olyan folyamatokat indítanak, amelyek ahhoz kellenek, hogy megkapjuk a kívánt sorokat Az adatmódosító (DML) utasítások naplózó folyamatokat is indítanak, hogy elmentsék a változásokat A véglegesítés (Commit) biztosítja a tranzakciók helyreállíthatóságát

Kapcsolódás az adatbázishoz Háromféleképp lehet egy Oracle szerverhez kapcsolódni: Operációs rendszeren keresztül Kliens-szerver kapcsolaton keresztül Háromrétegű kapcsolaton keresztül

Munkaszakasz (session) Kapcsolódáskor egy munkaszakasz (session) kezdődik. A munkaszakasz a felhasználó érvényesítése (validálásakor) esetén kezdődik és a kilépéséig vagy egy abnormális megszakításig tart. Egy felhasználó több munkaszakaszt is nyithat. Ehhez szükséges, hogy az Oracle szerver elérhető, használható legyen.

Lekérdezések végrehajtása 1. Elemzés (Parse): A közös SQL pufferben (shared pool) megnézi, hogy szerepel-e ez az utasítás Szintaktikus ellenőrzés, léteznek-e az objektumok, rendelkezik-e a megfelelő jogokkal Az elemzés alatt zárolja (lock) az objektumokat Elkészíti és tárolja az optimális végrehajtási tervet 2. Végrehajtás (Execute): Előállítja a keresett sorokat 3. Visszaadás (Fetch): Visszaadja a sorokat a felhasználói folyamatnak