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!
    
Fel a lap tetejére (mai gyak témakörei)      Vissza az AB2gyak kezdőlapjára  
   
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

         
Fel a lap tetejére (mai gyak témakörei)      Vissza az AB2gyak kezdőlapjára  
    
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.
    
Fel a lap tetejére (mai gyak témakörei)      Vissza az AB2gyak kezdőlapjára