AB2gyak
(főmenü) Gyak.köv.
AB2ea
9.gyak
11.gyak
OracleDoc
10.gyak.
Bevezetés
a költség alapú
tervválasztásba III.
Végrehajtási tervek az Oracle demo
táblái alapján
Új
témakör: Feladatok
naplózásra és
helyreállításra
C (gépes
feladatok)
> C4.
Végrehajtási tervek az Oracle demo
táblái alapján
> C5.
SQL utasítás rekonstruálása
a végrehajtási terv alapján
P (papíros feladatok)
> P4.
Rendszerhibák kezelése, UNDO
naplózás és
helyreállítás
C4.
Végrehajtási
tervek az Oracle demo táblái alapján
A zh és
beküldendő
feladatoknál egy
szöveges állományba
bemásolva
beküldendő:
1.) SELECT
/*+ tipp lista */ ... vagyis
a lekérdezés
(hintekkel együtt),
2.) lekérdezés
outputja
("SCIPT OUTPUT"-ból az
eredménytábla első
5
sorát),
3.) végrehajtási
tervek
szöveges
megjelenítése ("EXPLAIN
PLAN OUTPUT"-ból)
-- Ehhez az
1.lépés:
Készítsük el az
utasítások végrehajtási
tervét:
EXPLAIN
PLAN FOR SELECT ...
--
2.lépés: A
végrehajtási tervek
megjelenítése a
dbms_xplan package
segítségével:
SELECT
plan_table_output FROM table(dbms_xplan.display);
_______________________________________________________________
Segédanyagok:
- Oracle Database Documentation Library: Sample
Schemas HTML
PDF
HR
- Human Resource: Figure
4-1 HR and OE Schemas
SH
-Sales History: Figure
4-3 SH Schema
- Oracle 11g Doc. Performance Tuning
Guide 11-21.fejezetek HTML
PDF
Emlékeztető: Hintekről: 19.
Using Optimizer Hints
>> hintek.txt (Nikovits T.)
_______________________________________________________________
Feladatok:
- A
lekérdezésekhez az Oracle demo
tábláit, a HR és SH
sémához
tartozó táblákat
használjuk, vagyis most ne hozzunk
létre saját
példányokat, hanem egy adott séma
tábláit használjuk
a
lekérdezéseknél, a
táblák
elérése: HR.<táblanév>,
SH.<táblanév>
- A táblákhoz
különböző
indexek is vannak
létrehozva, ezek tulajdonságait a
katalógusokból
(dba_ind_columns)
nézhetjük meg, amikor
szükségünk van rá.
4.1.feladat:
- Adjuk meg azoknak a vevőknek a nevét
(SH.CUSTOMERS),
akik
nőneműek (cust_gender =
'F') és szinglik
(cust_marital_status =
'single'),
vagy 1917 és 1920
között
születtek.
a) Vegyük rá az
Oracle-t, hogy a
meglévő bitmap indexek alapján érje el
a
tábla sorait.
b) Vegyük rá, hogy
ne használja ezeket az indexeket.
4.2.feladat:
- Adjuk meg egy féléves
időszakra
(illetve egy másik féléves időszakra)
vonatkozóan az
eladások (SH.SALES)
összmennyiségét, úgy,
hogy az
Oracle ne
használjon indexet és
a) pontosan
2 partíciót olvasson a
táblából, illetve
b) pontosan
3 partíciót olvasson a
táblából.
Lásd partition_start
és partition_stop
oszlopokat a PLAN_TABLE-ben!
- Lásd még a tervek4.txt
és a hint_peldak.txt
(Nikovits Tibor) példáit!
C5.
SQL
utasítás rekonstruálása a
végrehajtási terv alapján
Feladatok: Adjunk meg olyan
lekérdezéseket az SH
tábláira (és indextábláira)
(hintekkel együtt, ha
szükséges), aminek az alábbi lesz a
végrehajtási terve:
5.1. (a)-(c) feladat
TERV (OPERATION + OPTIONS + OBJECT_NAME)
----------------------------------------
SELECT STATEMENT + +
HASH JOIN + +
TABLE ACCESS + FULL + COUNTRIES
TABLE ACCESS + FULL + CUSTOMERS
SELECT STATEMENT + +
NESTED LOOPS + +
TABLE ACCESS + FULL + COUNTRIES
TABLE ACCESS + FULL + CUSTOMERS
SELECT STATEMENT + +
MERGE JOIN + +
TABLE ACCESS + BY INDEX ROWID + COUNTRIES
INDEX + FULL SCAN + COUNTRIES_PK
SORT + JOIN +
TABLE ACCESS + FULL + CUSTOMERS
5.2. (a)-(b) feladat:
TERV (OPERATION + OPTIONS + OBJECT_NAME)
----------------------------------------
SELECT STATEMENT + +
HASH + GROUP BY +
HASH JOIN + +
TABLE ACCESS + FULL + COUNTRIES
TABLE ACCESS + FULL + CUSTOMERS
SELECT STATEMENT + +
HASH + GROUP BY +
HASH JOIN + +
TABLE ACCESS + FULL + COUNTRIES
TABLE ACCESS + BY INDEX ROWID + CUSTOMERS
BITMAP CONVERSION + TO ROWIDS +
BITMAP INDEX + SINGLE VALUE + CUSTOMERS_YOB_BIX
5.3.feladat:
TERV (OPERATION + OPTIONS + OBJECT_NAME)
--------------------------------------------------------------
SELECT STATEMENT + +
SORT + ORDER BY +
TABLE
ACCESS + BY INDEX ROWID + CUSTOMERS
BITMAP CONVERSION + TO ROWIDS +
BITMAP AND + +
BITMAP INDEX + SINGLE VALUE + CUSTOMERS_MARITAL_BIX
BITMAP OR + +
BITMAP INDEX + SINGLE VALUE + CUSTOMERS_YOB_BIX
BITMAP INDEX + SINGLE VALUE
+ CUSTOMERS_YOB_BIX
BITMAP INDEX + SINGLE VALUE + CUSTOMERS_YOB_BIX
5.4.feladat:
TERV
(OPERATION + OPTIONS + OBJECT_NAME)
-------------------------------------------------------------
SELECT
STATEMENT + +
HASH + GROUP BY +
HASH JOIN + +
INLIST ITERATOR + +
TABLE ACCESS + BY
INDEX ROWID + CUSTOMERS
BITMAP
CONVERSION + TO ROWIDS +
BITMAP INDEX + SINGLE VALUE + CUSTOMERS_YOB_BIX
PARTITION RANGE + ALL +
TABLE ACCESS + FULL
+ SALES
5.5.feladat:
TERV
(OPERATION + OPTIONS + OBJECT_NAME)
------------------------------------------------------------
SELECT
STATEMENT + +
SORT + AGGREGATE +
HASH JOIN + +
TABLE ACCESS + FULL + PRODUCTS
HASH JOIN + +
TABLE ACCESS + BY INDEX ROWID +
CUSTOMERS
BITMAP CONVERSION + TO ROWIDS
+
BITMAP INDEX +
SINGLE VALUE + CUSTOMERS_YOB_BIX
PARTITION RANGE + ALL +
TABLE ACCESS + FULL + SALES
5.6.feladat:
TERV (OPERATION + OPTIONS + OBJECT_NAME)
-------------------------------------------------------------
SELECT
STATEMENT + +
SORT + ORDER BY +
HASH + GROUP BY +
HASH JOIN + ANTI +
PARTITION RANGE + SINGLE +
TABLE ACCESS + BY LOCAL INDEX ROWID + SALES
BITMAP CONVERSION + TO ROWIDS +
BITMAP INDEX + SINGLE VALUE + SALES_TIME_BIX
TABLE
ACCESS + FULL + CHANNELS
P4.
Rendszerhibák kezelése, UNDO
naplózás és
helyreállítás
Feladatok (Papíron
oldjuk meg!)
- Molina-Ullman-Widom:
Adatbázisrendszerek
megvalósítása
a "zöld könyv" 8.fej. A
rendszerhibák
kezelése, naplózás
alapján.
Segédanyagok: Kiss
Attila Adatbázisok-2 -> 8.előadás naplo.ppt (1-72
o.)
Molina-Ullman
8. fejezete: A
rendszerhibák kezelése
8.1.1.
Feladat
- A tranzakciók korrekt
végrehajtása, lásd naplo.ppt (3-11.oldal)
Tegyük fel, hogy az adatbázisra
vonatkozó konzisztenciamegszorítás: 0
<= A <= B.
Állapítsuk meg, hogy a következő
tranzakciók megőrzik-e az adatbázis
konzisztenciáját.
T1: A := A + B; B := A + B;
T2: B := A + B; A := A + B;
T3: A := B + 1; B := A + 1;
8.1.2. Feladat
- A tranzakciók alaptevékenységei,
hasonló
példa: naplo.ppt (43.oldal)
(Adjuk meg néhány, konkrét művelettel
megadott tranzakció esetén az
adatbáziselemek
memóriabeli és lemezen levő
értékét az
egyes műveletek után.) Az előző 8.1.1 feladat
T1: A := A + B; B := A + B; tranzakciójához a
számításokon kívül
tegyük hozzá a
beolvasó-kiíró
tevékenységeket is, és mutassuk be a
tranzakció lépésenkénti
hatását
a memóriában
és a lemezen tárolt adatokra. Tegyük
fel, hogy kezdetben A = 5
és B = 10.
Molina-Ullman
8.2. fejezete:
Undo naplózás és
helyreállítás
8.2.1.
Feladat
- UNDO naplóbejegyzések, hasonló
példa: naplo.ppt (50-52.oldal)
-- EA alapján: UNDO naplózás szabályai:
-- 1. naplóbejegyzések kiírása
-- 2. módosított elemek kiírása
(-> a gond, hogy túl sokszor kell lemezre írni)
-- 3. COMMIT naplóbejegyzés kiírása
Adjuk meg az előző 8.1.2 feladathoz a tranzakció UNDO
típusú naplóbejegyzéseit!
8.2.4.
Feladat
- Helyreállítás UNDO
naplóból, hasonló
példa: naplo.ppt (58-62.oldal)
-- Helyreállítás: A Commit-tal nem rendelkező
tranzakciók műveleteit fordított sorrendben
-- (hátulról
előre) megsemmisítjük, vissza írjuk a
régi értéket az elembe.
-- A végén <ABORT T>-t írunk a
naplóba és kiírjuk lemezre a naplót FLUSH
LOG.
A következő naplóbejegyzés-sorozat a T
és U két tranzakcióra vonatkozik:
<START T>
<T, A, 10>
<START U>
<U, B, 20>
<T, C, 30>
<U, D, 40>
<COMMIT U>
<T, E, 50>
<COMMIT T>
--
Adjuk meg a helyreállítás-kezelő
tevékenységeit, ha az utolsó lemezre
került naplóbejegyzés:
a) <START U>
b) <COMMIT U>
c) <T, E, 50>
d) <COMMIT T>
8.2.7. Feladat
- UNDO naplózás
ellenőrzőponttal, hasonló
példa: naplo.ppt (63-72.oldal)
-- Ellenőrzőpont képzés
-- Egyszerű:
-- megvárni az aktív tranzakciók
befejeződését, addig újat nem engedni,
-- majd <CKPT> írása a naplóba + FLUSH LOG
-- Működés közbeni:
-- <START CKPT(T1, T2 ... Tk)> a naplóba majd FLUSH
LOG
-- megvárni az aktív tranzakciók
befejeződését, közben indulhatnak újak
-- majd <END CKPT> a naplóba + FLUSH LOG
--
-- A helyreállításhoz elég
visszafelé a legutóbbi <END CKPT> előtti <START
CKPT>-ig
-- visszamenni. Ha visszafelé haladva <START CKPT(Ti)>
-vel találkozunk előbb, akkor
-- elég a legkorábbi <Start Ti>-ig visszamenni.
(Vagy egy olyan <START CKPT>-ig,
-- amelyhez tartozó <END CKPT> is a naplóban van,
mert ez biztosan megelőzi
-- a legkorábbi <Start Ti>-t.)
--
Tegyük fel, hogy a napló a következő
bejegyzéssorozatot tartalmazza:
<START S>
<S,A,60>
<COMMIT S>
<START T>
<T,A,10>
<START U>
<U,B,20>
<T,C,30>
<START V>
<U,D,40>
<V,F,70>
<COMMIT U>
<T,E,50>
<COMMIT T>
<V,B,80>
<COMMIT V>.
--
Tegyük fel továbbá, hogy a
működés
közbeni ellenőrzőpont-képzést
kezdjük
alkalmazni,
közvetlenül az alábbi
naplóbejegyzések
(memóriában való)
megjelenésétől
kezdve:
a) <S,A,60>.
b) <T,A,10>.
c) <U,B,20>.
d) <U,D,40>.
e) <T,E,50>.
--
Mindegyik fenti esetre adjuk meg, hogy:
i) Mikor íródik fel az <END
CKPT>
naplóbejegyzés, és
ii) Bármelyik lehetséges pillanatban, ha hiba
lép
fel, meddig kell a naplóban
visszafelé tekinteni
ahhoz, hogy minden befejezetlen
tranzakciókra
vonatkozó bejegyzést megtaláljunk.