Adatbázis rendszerek II. I. előadás - SQL API felületek Előadó: Barabás Péter Dátum: 2008. 09.11
Követelmények
Tárgy lezárása: ◦ Aláírás + kollokvium
Aláírás feltétele: ◦ Gyakorlatok 67%-os teljesítése
Zárthelyi: nincs Egyéni feladatok:
◦ 6 önálló feladat (gyakorlaton is!)
Vizsga: ◦ Írásbeli + szóbeli (heti 1 vizsgalehetőség) SQL API felületek
2
Adatkezelés, ismétlés Megbízható, konzisztens adattárolás
DBMS
DB
Rugalmas, igény szerinti információkinyerés Adatbázis rendszerek I. SQL SQLPlus, iSQLPlus
Relációs DBMS
SQL API felületek
Oracle DB
3
Miről lesz szó?
Adatkezelés, SQL felületek Alkalmazói programok Kliens-szerver struktúratípusok Kliens-szerver generációk Hálózati komponensek Programfejlesztő környezetek API felületek SQL API logikai struktúrája CURSOR mechanizmus SQL API absztrakt adatkezelő parancsok SQL API felületek
4
SQL felületek
Hatékony: ◦ SQL parancsok kiadására ◦ Eredmények megtekintésére
Nehézkes: ◦ Nagyobb volumenű, rutintevékenységek esetén (minden paramétert meg kell adni)
Nem alkalmas, ha ◦ ◦ ◦ ◦ ◦
több adatot akarunk bevinni felhasználó nem jártas az SQL nyelvben előzetes előszámításokra van szükség felhasználóbarát adatmegjelenítést kell megvalósítani a bevitelre kerülő értékeket egy listából választjuk ki SQL API felületek
5
Megoldás
Testre szabott, rugalmasan működő alkalmazói program készítése
Adatérték, utasítás kijelölés
SQL utasítás
ALKALMAZÓI PROGRAM
Rács, lista, grafikon
DBMS
DB
Jellemzők: -rugalmas -emberközeli -több funkció SQL API felületek
6
Alkalmazói program feladatai 1. Kapcsolat felvétel 2. Utasítások elküldése ALKALMAZÓI PROGRAM
3. Eredmények fogadása
DBMS
4. Hiba fogadás, kezelés • •
•
•
Kapcsolat felvétel paraméterei: • host, port, adatbázis, felhasználónév, jelszó Utasítások elküldése: • SQL utasítások formájában • Lehet paraméteres is Eredmények fogadása: • Nemcsak DQL esetén van eredmény • Kurzor kezelési mechanizmus Hibakezelés: • Alkalmazás v. adatbázis rendszer hiba, kivételek SQL API felületek
7
Kliens – szerver működésmód Kliens oldal
Szerver oldal
DBMS parancs, művelet
Parancs fogadás alkalmazás
Parancs végrehajtás eredmény
Eredmény elküldése SQL API felületek
8
Kliens – szerver struktúratípusok PC környezet Központi gép buta terminálokkal File szerver struktúra Kétpólusú kliens-szerver Többpólusú kliens-szerver
SQL API felületek
9
PC környezet PC Lokális adatok
Adatkezelési rutinok
Alkalmazás logika
• egy felhasználós struktúra • minden feladatot a PC lát el • az összes kód ugyanazon futtatható programba epül be • elegendő egy egyszerűbb DB kezelő egység, mert nincs szükség • konkurens hozzáférést szabályzó modulra, • védelmet szabályzó modulra
SQL API felületek
10
Központi gép buta terminálokkal
Központi gép: ◦ Komponensei: Lokális adatok Adatkezelő komponens Alkalmazói program
◦ Feladatai: Osztott elérés biztosítása Adatok védelme
Terminálok: ◦ Csak megjelenítésre ◦ Helyi számítás nincs SQL API felületek
11
File szerver struktúra
Alkalmazás csomópont 2
Adat szerver csomópont
…
• Központi gép: • csak az adatokat tárolja • Alkalmazás csomópontok: • számítási műveletek • adatkezelés • minden egyéb művelet • Több gépes, rugalmasabb struktúra • Pl: Novell
Alkalmazás csomópont 1
Alkalmazás csomópont n
SQL API felületek
12
Kétpólusú klienskliens-szerver RPC, Üzenet alapú komm.
Központi gép Alkalmazás logika Megjelenítés Heterogenitás
DB
SQL API felületek
Adatkezelés
13
Többpólusú klienskliens-szerver Alkalmazás szerver 1
Központi gép Alkalmazás szerver 2
DB
Adatkezelés
… Alkalmazás szerver n
SQL API felületek
14
Többpólusú kliens szerver II. N-tier struktúra Több alkalmazás szerver:
◦ Alkalmazás modularizálható ◦ Terheltségfüggő optimalizáció
Kliens ◦ Kevesebb elem ◦ Csak megjelenítés
SQL API felületek
15
Kliens--szerver generációk Kliens
2. Generáció
1. Generáció • Kétpólusú modell • Procedurális szemlélet • RPC alapú adat kapcsolat • Osztott, párhuzamos adatelérés támogatás
• Többpólusú modell • Heterogén környezet • Komplex logika támogatása • Nagyfokú skálázhatóság • OO és üzenet-alapú kapcsolat
SQL API felületek
16
I. generáció
Lényeges a hálózat terhelése ◦ Hálózati forgalom minimalizálása
Megoldás: ◦ Az adatbázisban tárolunk le bizonyos modulokat ◦ Az alkalmazás csak meghívja ◦ Hálózatot csak az eredmény terheli
Aktív adatbázis objektumok Kétpólusú rendszerek esetén több alternatíva is létezik a feladatok szétosztására
SQL API felületek
17
1. Generáció II:
Szerver
Kliens
Fat client
Adatbázis kezelés
Procedurális logika, adatkezelés, megjelenítés
Client-server
Adatbázis kezelés, adatkezelés,
Procedurális logika, megjelenítés
Thin client
Adatbázis kezelés, adatkezelés, procedurális logika
Megjelenítés
SQL API felületek
18
2. generáció
RPC mellett újabb technológiák ◦ OO alapú ◦ Message alapú
Közvetlen kapcsolat mellett ◦ Közvetítőkön keresztüli üzenetváltások ◦ Üzenet közvetítő központ
Application server (3 pólusú rendszer) ◦ Tranzakció kezelés ◦ Heterogén források begyűjtése SQL API felületek
19
2. Generáció II. Adatbázis szerver
Adat
Fájl szolgáltatások
Alkalmazás szerver Üzleti logika Adatkezelés
megjelenítés SQL API felületek
20
2. Generáció III.
Többpólusú rendszerek: ◦ Alkalmazás szervert többszörözik
Feladatai: ◦ ◦ ◦ ◦ ◦ ◦
Tranzakciók kezelése Heterogén megjelenítési környezet kezelése Heterogén adatkörnyezet kezelése Terhelés kiegyenlítés Multiplex tranzakciók kezelése Hozzáférés védelmi funkciók SQL API felületek
21
Hálózati komponens Kliens-szerver architektúra fontos része DBMS-ek tartalmaznak hálózati komponenst Mind a kliens, mind a szerver oldalon telepítve kell legyenek
Kliens alkalmazás
Adatbázis szerver
Kliens oldali hálózati komponens
Szerver oldali hálózati komponens
SQL API felületek
DB
22
SQLNet Oracle hálózati komponense Több különböző hálózati protokollt is támogat heterogén kliens-szerver alkalmazások Két komponense van
◦ Kliens oldali ◦ Szerver oldali Figyel (listener)
SQL API felületek
23
SQLNet II.
Szerver oldali beállítások
Hálózati protokoll típusa
PROTOCOL = TCP
Szerver csomópont azonosítása
HOST = arrakis
Kommunikációs port
1521
Kapcsolódó adatbázis azonosítója
SID_NAME=ORCL
Kliens oldali beállítások (elérhető listener)
Hálózati protokoll típusa
PROTOCOL = TCP
Szerver csomópont azonosítása
HOST = arrakis
Kommunikációs port
1521
Kapcsolódó adatbázis azonosítója
CONNECT_DATA_SID=ORCL
SQL API felületek
24
Adatkezelő nyelv
DB alkalmazások jellemzői: ◦ Adatkezelő elemek ◦ Általános vezérlési elemek
Adatkezelő nyelv: SQL ◦ Egységes szabvány kezelő felület ◦ Minden relációs adatforrás támogatja
De! mégsem teljesen egységes az adatkezelő nyelv SQL API felületek
25
SQL parancsrendszerek
Relációs adatforrásonként különböző ◦ Ugyanazon SQL utasítás más hatást válthat ki különböző adatforrásokon ◦ Okok: szintaktikai, szemantikai eltérések
Nemcsak relációs DBMS-eket használnak ◦ Nem adatbázisban történő adattárolás ◦ Igény ezek elérésére az alkalmazásból ◦ E-mail adatok, táblázatkezelők adatai, WEB-en lévő információk SQL API felületek
26
Egységes adatkezelő felület
Probléma: adatkezelő felületek sokfélesége ◦ Egymástól eltérő parancsnyelvek ◦ Integrációja egy közös programban
Következmény: ◦ Lelassítja az alkalmazásfejlesztés menetét
Megoldás: ◦ Egységesíteni kell az adatkezelő felületeket ◦ 80-as években kezdődött ◦ SQL került ki győztesen SQL API felületek
27
Programfejlesztő környezetek
Nincs egységesség WEB-es környezet OO környezet
4GL környezet
• OO elvek • Objektum és eseményvezérelt elemek • Osztályok, csomagok • Paraméterezés
• Megjelenítő: böngésző • Egységes, elterjedt felület • Más programozási stílus • WEB szerveren keresztül • Aktív/passzív dokumentum • Új fejlesztő eszközök
• Egyszerűbb kódolás • Paraméterezésből áll • Generált kódrészletek • Fejlesztés során látható eredmények
3GL környezet • Procedurális nyelv • Szövegszerkesztővel készült forrás • Beágyazott SQL • Alacsony szintű programozási nyelv • Hosszadalmas fejlesztés
SQL API felületek
28
API felületek Beágyazott SQL CLI, ODBC OO-LI 4GL WEB-LI
SQL API felületek
29
Beágyazott SQL
• • • • •
SQL utasítások szinte változatlanul a gazdanyelv utasításai között az előzőekben csatlakoztatott adatbázishoz továbbítódnak egyidejűleg egy adatbázis felé él a kapcsolat statikus és dinamikus utasítások Probléma súlypontok: • • • •
SQL utasítás és gazdanyelv procedurális szemléletének illesztése Adatforgalom megvalósítása Adatforrás halmaz szemlélete – gazdanyelv rekordorientált szemlélete Hibaállapotok kezelése
SQL API felületek
30
Beágyazott SQL II. - Példa int aar; char[30] atip; EXEC SQL DECLARE auto_cursor CURSOR FOR SELECT tip, ar FROM auto WHERE tip LIKE 'FIAT%' OR tip LIKE 'LADA%' FOR UPDATE OF ar; EXEC SQL OPEN auto_cursor; EXEC SQL WHENEVER NOT FOUND GOTO vege; while (1) { EXEC SQL FETCH auto_cursor INTO :atip, :aar; if (aar < 0) continue; if (atip == 'F') { EXEC SQL UPDATE auto SET ar = ar*1.15 WHERE CURRENT OF auto_cursor; } else { EXEC SQL UPDATE auto SET ar = ar*1.12 WHERE CURRENT OF auto_cursor; } } vege: EXEC SQL CLOSE auto_cursor;
SQL API felületek
31
CLI, ODBC
A gazdanyelv szintaktikájához idomul Eljárások, függvények hívása a gazdanyelvi környezetben SQL utasítás, mint aktuális paraméter Kapcsolat definiálása is függvénnyel Dinamikus SQL parancsok rugalmasabban kezelhetők Egyidejűleg több adatbázissal történő kapcsolat Nagyobb programozási előkészítést igényel SQL API felületek
32
ODBC
Egységes API elérési felület biztosítása Oracle SQL Server Informix DB2 Postgres MySQL Sybase VFP Access Excel Txt
ODBC
SQL API felületek
33
CLI példa (PHP) SQL API felületek
34
OOOO-LI példányosítás
adatkapcsolat
Művelet végrahajtás
Csomagok, osztályok
objektumok
Eredmény feldolgozás
paraméterezés
Hibakezelés
Végrehajtandó utasítások
SQL API felületek
Beállítási paraméterek 35
OOOO-LI (JDBC példa) public OracleSQL(String host, String port, String db, String user, String pass) { try { DriverManager.registerDriver(new oracle.jdbc.driver.OracleDriver()); conn = DriverManager.getConnection("jdbc:oracle:thin:@"+host+":"+port+":"+db,user,pass); System.out.println("Kapcsolat az adatbázissal létrejött."); } catch(Exception e) { System.err.println(e.getMessage()); } } … public int insert(String query) { int count=0; try { stmt = conn.createStatement(); count = stmt.executeUpdate(query); stmt.close(); } catch(Exception e) { System.err.println(e.getMessage()); } return count; } SQL API felületek
36
4GL
RAD (Rapid Application Development) technológia ◦ Vizuális editorok ◦ Kódolás helyett paraméterezés ◦ Nagyfokú futtatási környezet függetlenség
Fejlesztés menete: ◦ Komponens editor használata Elemek kombinálása, paraméterezése
◦ Generált kód
Adatbázis kapcsolat és adatbázis objektum szerkesztők használata Adatelérési elemek objektumként, beágyazva v. CLI-ként SQL API felületek
37
4GL II.
SQL API felületek
38
WEB--LI WEB
Új szabványok: ◦ HTML, XML, … ◦ Java, Python, …
Változatos fejlesztési környezet Cél: weben való publikálás legyen közös Fejlesztési metódusok: ◦ 3GL nyelv + CLI ◦ OO nyelv + OO-LI ◦ Dokumentumba épített (v. külön) adatkezelő lépések
Kimenet: webdokumentum Új fejlesztő környezetek SQL API felületek
39
SQL API logikai struktúrája Kapcsolati struktúrák allokálása
Kapcsolat felvétel
Kétlépéses végrehajtásnál parancs előkészítése
Parancs paraméterezése
Parancs végrehajtása
Eredmény fogadása
Eredmény feldolgozása
Kapcsolat zárása
SQL API felületek
40
Kapcsolati struktúra, kapcsolat felvétel
Kapcsolati struktúra tárolja: ◦ ◦ ◦ ◦
Kapcsolódó elemek azonosítását Kapcsolat állapotát Kiadott utasításokat Fellépő hibakódokat.
Kapcsolatfelvétel során: ◦ Gazdaprogram bejelentkezik a DBMS-be ◦ Session-t hoz létre ◦ Időigényes folyamat
Memória allokálás Szerverszál indítás Metaadat lekérdezés Környezeti változók beállítása
◦ bejelentkezési alkalmak minimalizálása Perzisztens kapcsolatok kiépítése
SQL API felületek
41
Parancs kiadása, paraméterezése, végrehajtása
Direkt közvetlen végrehajtás ◦ Előzetes információközlés nélküli parancsküldés ◦ Feldolgozás a küldés után
Kétlépéses végrehajtás ◦ 1. lépés: a gazdaprogram elküldi az SQL parancs vázát DBMS felkészül a tényleges végrehajtásra előkészíti a futtatáshoz szükséges struktúrát (pl. QEP gráf)
◦ 2. lépés: gazdaprogram elküldi a teljes SQL parancsot rövidebb ideig tart az előkészítés miatt
Előnyök: Nyereség van-e? csak akkor, ha többször futtatjuk egymás után a parancsot
Nyelvtani ellenőrzés
SQL API felületek
42
Parancs kiadása, paraméterezése, végrehajtása II.
Paraméterezés = nincs minden érték megadva a parancs szövegében ◦ Helypótlók alkalmazása parancs = ‘SELECT * FROM DOLGOZOK WHERE fizetes > ?’;
? = paraméter Később, a futás előtt kap értéket Összetett SQL parancs futtatása parancs szövegének elküldése a DBMS-hez Eltérő végrehajtási módok (DQL vs. DML) SQL API felületek
43
Parancs végrehajtási problémák
DQL lekérdező parancs esetén ◦ Gondoskodni kell a válaszadatok fogadásáról ◦ Átküldött adatok gazdanyelvi változók
Probléma: a gazdaprogram és a DBMS adatkezelési szemlélete Adatbázis-kezelőkben:
◦ Tetszőleges méretű struktúra halmazok ◦ NULL érték értelmezése, üres érték fogalma ◦ Speciális adattípusok
Ellentmondás feloldása: ◦ Pl. CURSOR mechanizmus SQL API felületek
44
Halmaz- és rekordorientált Halmazadatkezelés halmazmód
Több rekord egyidejű kezelése esetén
rekordmód
Egyenként rekord feldolgozás esetén
• Rekordok törlése
• Egyedi módosítások
A felhasználó a rekordokat egységesen kezeli
A felhasználó egyesével lépkedhet a rekordok között
Nincs munkarekord
Mindig van munkarekord
Navigációs lépések Nincs navigációs lehetőség
• Ugrás a lista • Ugrás a lista • Ugrás a lista elemére • Ugrás a lista
SQL API felületek
elejére végére következő előző elemére
45
CURSOR mechanizmus
CURSOR létrehozása
Kezelő struktúra allokálása
CURSOR nyitása
CURSOR feldolgozása
CURSOR lezárása, felszabadítás
SQL API felületek
46
CURSOR létrehozása Alkalmazás Adatbázis
Adatbázis kapcsolat
CURSOR c1
B tábla A tábla
DECLARE CURSOR c1 AS SELECT…
C tábla
Előkészített utasítás
SQL API felületek
47
CURSOR feldolgozása Alkalmazás Adatbázis kapcsolat CURSOR c1
OPEN c1 Előkészített utasítás
v1 v2 v3
Adatbázis
FETCH c1 INTO v1,v2,v3,v4
Eredményhalmaz
v4
SQL API felületek
48
CURSOR lezárása Alkalmazás Adatbázis kapcsolat
CURSOR c1
Adatbázis
CLOSE c1
FREE c1
Eredményhalmaz
Előkészített utasítás
SQL API felületek
49
CURSOR típusok Statikus CURSOR Kulcsvezérelt CURSOR Dinamikus CURSOR Egyirányú CURSOR Kliens oldali CURSOR Szerver oldali CURSOR Módosítható CURSOR
SQL API felületek
50
Statikus CURSOR Eredmény értékek nem változnak Tartalma az induló lekérdezés eredménye Navigáció nem igényel újbóli lekérdezést Nem az aktuális tartalmat mutatja Fizikai megvalósítás:
◦ Másolat a kliensen ◦ Ideiglenes tábla a szerveren ◦ Zárolás a szerveren (vagy multiversion)
Módosítás problematikus SQL API felületek
51
Kulcsvezérelt CURSOR
Csak a rekordok kulcsértékei határozódnak meg ◦ Köztes törlések, módosítások nem változtatják meg a kulcshalmazt ◦ Nyitáskor a rekord azonosítók halmaza, sorrendje rögzül
Mezőértékek frissülnek menetközben Törölt, változtatott rekordok is benne maradnak
SQL API felületek
52
Dinamikus CURSOR Tartalma folyamatosan változhat Minden navigációs lépésnél újból végrehajtódik a lekérdezés Aktuális állapotot mutatja Költséges
SQL API felületek
53
Egyirányú, kliens és szerver oldali CURSOR--ok CURSOR
Egyirányú: ◦ A gazdaprogram csak előre tud lépkedni
Kliens oldali: ◦ A rekordlista a kliens gépen tárolódik
Szerver oldali: ◦ A rekordlista a szerveren tárolódik
SQL API felületek
54
Módosítható CURSOR Módosításra használjuk Rekord mellett logikai címet megadó pointer is jelen van Módosításkor az alaptáblában lévő adatot a pointer alapján kapjuk
SQL API felületek
55
CURSOR--ok összehasonlítása CURSOR Aktualitás
Konkurencia
Teljesítmény
Statikus
-
++
+
Kulcs-vezérelt
+
+
+
Dinamikus
++
-+
-+
SQL API felületek
56
SQL API absztrakt adatkezelő parancsai DB Adatbázis szimbólum T Reláció szimbólum C CURSOR szimbólum t Egy rekord szimbóluma O(DB,s) Kapcsolat kiépítés a DB felé, ahol s egy kapcsolat leíró paraméter c(DB) Kapcsolat zárása q(TDB,f) A T halmazból az f feltételt teljesítő rekord lekérdezése x=q(TDB1,TDB2,…,f) A T1, T2, … halmazok joinjából az f feltételt teljesítő rekord lekérdezése, ahol egy rekordot ad vissza a lekérdezés (most csak SPJ lekérdezések)
SQL API felületek
57
SQL API absztrakt adatkezelő parancsai II. C=q(TDB1,TDB2,…,f) A C CURSOR előállítása a T1,T2, … halmazokra vonatkozó lekérdezéssel i(TDB,t’) A t’ rekord felvitele a T halmazba a’(C,t’) A rekord hozzáfűzése a C lista végére d(TDB,f) A T halmazból az f feltételnek megfelelő rekordok törlése d’(C) A C listából az aktuális rekord törlése u(TDB,t’,f) A T halmazból az f feltételnek megfelelő rekordok módosítása a megadott értékre u’(C,t’) A T listából az aktuális rekord módosítása a megadott értékre n’(C,p) A T listában navigációs lépés a p iránynak megfelelően. Az alapértelmezett navigációs irányok: 0:eleje,1:vége,+1:előre lép egyet,-1:visszalép egyet. SQL API felületek
58
SQL API absztrakt adatkezelő parancsai III. Vezérlőelemek main(x,y,…) Főprogram x = y Értékadás x = input(‘prompt’) Érték beolvasása if (f) { … } Feltételes végrehajtás while (f) { … } Ciklus do { … } while (f) ciklus
SQL API felületek
59
Példa 1.
Minta adatbázis: ◦ DOLGOZO[kod,nev,beosztas,fizetes,ado] Feladat
Új dolgozórekord felvitele
Megoldás
main() { x = input(‘nev’); y = input(‘beosztas’); z = input(‘fizetes’); o(Db,s); k = q(DOLGOZO, max(kod))+1; i(DOLGOZO, (k,x,y,z)); c(DB); }
SQL API felületek
60
Példa 1I.
Minta adatbázis: ◦ DOLGOZO[kod,nev,beosztas,fizetes,ado] Feladat
X beosztásúak fizetésének növelése Y értékkel. X értéket olvassuk be.
Megoldás
main() { X = input(); s = input(); o(Db,s); u(DOLGOZO, fizetes = fizetes+Y, beosztas=X); c(DB); }
SQL API felületek
61
Példa III III..
Minta adatbázis: ◦ DOLGOZO[kod,nev,beosztas,fizetes,ado] Feladat
Számoljuk ki az adó értékét egy adoszam() fv. meghívásával! Aktualizáljuk a DOLGOZO táblát!
Megoldás
main() { s = input(); o(Db,s); Q = q(DOLGOZO,*); n’(Q,0); do { Y = adoszam(Q.fizetes); u’(Q,ado=Y); } while (n’(Q,+1)); c(DB); } SQL API felületek
62
Köszönöm a figyelmet!
SQL API felületek
63