IV. Témakör: Adattárolás. Indexstruktúrák.

1.gyak.
>> Előzmények (HF - ismétlés)
>> 4.1. Feladatok a táblák oszlopaival
>> 4.2. Feladatok adatbázis objektumokkal  és az  1HF+
2.gyak.
>> 4.3. Egyéb objektumok (szinonima, szekvencia, adatbáziskapcsoló)
>> 4.4. Feladatok adattárolással kapcsolatos fogalmakra  és a 2HF+
3.gyak.
>> 4.5. Táblák (tárolási paraméterekkel) és indexek létrehozása
>> 4.6. Feladatok ROWID adattípusra  és a 3HF+
4.gyak.
>> 4.7. Előadáshoz kapcsolódó feladatok indexstruktúrákra  és a 4HF+
>> 4.8. Feladatok indexekre, klaszterekre és partíciókra
      Témakörök:
      >> 4.8A. Feladatok indexekre és bitmap indexekre
      >> 4.8B. Feladatok index szervezett (IOT) táblákra és a kötelező 5HF
5-6.gyak. (folyt.)
      >> 4.8C. Feladatok klaszterekre és az 6HF+
      >> 4.8D. Feladatok partíciókra

1. Feladatok a táblák oszlopaival
_______________________________________________________
1. gyak. (IX.9/11)  - Adatszótárnézetek lekérdezése. 

Gyakorlati követelmények és előzetes tematika ismertetése.
Az adatbázisok elérésének technikai kérdései. Kliens programok és azok beállítása.
Adatbázisbeli objektumok (tábla, nézet, index, ...), séma és nem séma objektumok.
A séma és a user fogalmak kapcsolata.
A rendszerkatalógus elemei. USER_, ALL_, DBA_
Melyik sémában vannak a katalógus elemei? A SYS és SYSTEM felhasználók.
Katalógus táblák megkeresése a katalógusban (DBA_OBJECTS),
és a dokumentációban (Reference). Egy tábla oszlopainak lehetséges típusai,
DEFAULT értékek. Mennyi helyet foglal el egy objektum, ha egyáltalán foglal?
DATA_OBJECT_ID oszlop jelentősége a DBA_OBJECTS katalógusban.
>> Előzmények (HF - ismétlés)
>> 4.1. Feladatok a táblák oszlopaival
>> 4.2. Feladatok adatbázis objektumokkal  és az  1HF+

Előzmények (HF. ismétlés)
>>  I.  Témakör: Lekérdezés: Rel.alg. SQL SELECT feladatok
>> II. Témakör: Relációs tervezés. SQL DDL, DML feladatok
>> III. Témakör: Adatbázis programozás. PL/SQL feladatok

Segédanyagok
Oracle® Database 10g (10.2)
-- SQL Reference  HTML     PDF
-- PL/SQL User's Guide and Reference HTML     PDF

Előkészítő feladatok:
40elő_01
   - Hozd létre az emp és dept táblákat, lásd Az órai mintapélda adatbázissémák

40elő_02
   - Katalógustáblák listázásánál csak az első 10 sort jelenítsük  meg!
   - Megj.: Felső-N analízis ("toplista"). ROWNUM pszeudooszlop, amely
      a kiválasztásra kerülő sorokhoz hozzárendeli a kiválasztásuk sorszámát,
      persze nem sorszám,  hanem a lekérdezés eredményének sorrendjét adja
      meg. Ezért egyenlőség nem állhat a where feltételben (csak <, <=, >, >= ).


4.1. Feladatok a táblák oszlopaival
DBA_TAB_COLUMNS

Feladatok - Nikovits Tibor Információkezelés gyakorlatai alapján.
Feladatok az adatszótárnézetek lekérdezésére
A rendszerkatalógus (rendszertábla, adatszótárnézet) maga is egy adatbázisnak
tekinthető, amit lekérdezve egyre többet tudhatunk meg az Oracle adatbázisban
tárolt dolgokról és azok tulajdonságairól. A rendszertáblák leírása, szerkezete:
Segédanyagok Oracle® Database 10g (10.2)
-- Reference   HTML     PDF

Az alábbi feladatokat egyszerű SQL SELECT-tel fejezd ki (nem PL/SQL-ben)
DBA_TAB_COLUMNS tábla lekérdezésével.

41col_01
   - Hány oszlopa van az emp táblának?

41col_02
   - Milyen típusú az emp tábla 6.oszlopa? 

41col_03
   - Adjuk meg azoknak a tábláknak a tulajdonosát és nevét, amelyeknek
      van 'Z' betűvel kezdődő oszlopa. 

41col_04
   - Adjuk meg azoknak a tábláknak a nevét, amelyeknek legalább 8 darab
     dátum típusú oszlopa van. 

41col_05
   - Adjuk meg azoknak a tábláknak a nevét, amelyeknek 1. es 4. oszlopa is
     VARCHAR2 típusú.


4.2. Feladatok adatbázis objektumokkal
DBA_OBJECTS

Feladatok - Nikovits Tibor Információkezelés gyakorlatai alapján.
Az alábbi feladatokat egyszerű SQL SELECT-tel fejezd ki (nem PL/SQL-ben)
Katalógustáblák megkeresése a katalógusban (DBA_OBJECTS)
és az Oracle dokumentációban (Reference).

42obj_01
   - Kinek a tulajdonában van a DBA_TABLES nevű nézet (ill a DUAL nevű tábla)?

42obj_02
   - Kinek a tulajdonában van a DBA_TABLES nevű szinonima (ill a DUAL nevű)?
     (Az iménti két lekérdezés megmagyarázza, hogy miért tudjuk elérni őket.)

42obj_03
   - Milyen típusú objektumai vannak az orauser nevű felhasználónak az adatbázisban?

42obj_04
   - Hány különböző típusú objektum van nyilvántartva az adatbázisban?

42obj_05
   - Melyek ezek a típusok?

42obj_06
   - Kik azok a felhasználók, akiknek több mint 10 féle objektumuk van?

42obj_07
   - Kik azok a felhasználók, akiknek van triggere és nézete is?

42obj_08
   - Kik azok a felhasználók, akiknek van nézete, de nincs triggere?

42obj_09
   - Kik azok a felhasználók, akiknek több mint 40 táblájuk, de
      maximum 37 indexük van?

42obj_10
   - Melyek azok az objektum típusok, amelyek tényleges tárolást igényelnek,
      vagyis tartoznak hozzájuk adatblokkok?
     (A többinek csak a definíciója tárolódik adatszótárban)

42obj_11
   - Melyek azok az objektum típusok, amelyek nem igényelnek tényleges tárolást,
      vagyis nem tartoznak hozzájuk adatblokkok?
      (Ezeknek csak a definíciója tárolódik adatszótárban)
      Az utóbbi két lekérdezés metszete nem üres. Vajon miért?
                                                       -> lásd majd partícionálás

Házi feladat (beadandó +pontért)
Beküldése, lásd  Beadandók, géptermi ZH feladatok beküldése menüpontot
1HF (PL/SQL)
   - Írjunk meg egy plsql procedúrát, amelyik a paraméterül kapott karakterlánc
     alapján kiírja azoknak a tábláknak a nevét és tulajdonosát, amelyeknek neve
     az adott karakterlánccal kezdődik.
    (Ha a paraméter kisbetűs, akkor is működjön a procedúra!)
          PROCEDURE tabla_kiiro(p_kar VARCHAR2)
    A fenti procedúra segítségével írjuk ki a Z betűvel kezdődő táblák nevét
    és tulajdonosát.
_____________________________________________________
4.2. gyak. (IX.16/18)
 - Adattárolással kapcsolatos fogalmak.

Szinonimák (publikus és nem publikus), szekvenciák, adatbázis-kapcsolat.
Létrehozásuk, használatuk, és tulajdonságaik megkeresése a katalógusban.
Adattárolással kapcsolatos fogalmak: Blokk, Extens, Szegmens, Adatfájl,
Táblatér. Ezek egymáshoz való viszonya.
Szegmensek típusai: Tábla, Index, Cluster, Partíció, Rollback, Temporális stb.
Adattárolással kapcsolatos fogalmakra vonatkozó lekérdezések a katalógusból.
>> 4.3. Egyéb objektumok (szinonima, szekvencia, adatbáziskapcsoló)
>> 4.4. Feladatok adattárolással kapcsolatos fogalmakra  és a 2HF+

Segédanyagok Oracle® Database 10g (10.2)
-- SQL Reference  HTML     PDF
-- Concepts             HTML     PDF
-- Reference           HTML     PDF

4.3. Egyéb objektumok (szinonima, szekvencia, adatbáziskapcsoló)

Feladatok - Nikovits Tibor Információkezelés gyakorlatai alapján.
- lásd az 1-2 előadás anyagát: Abterv_NTea12.txt CREATE példáit és
  az SQL Reference példáit próbáljuk ki (az SQL Developer használatával)  
- miután létrehoztuk, nézzük meg hogyan jelennek meg a katalógustáblákban:
DBA_SYNONYMS, DBA_VIEWS, DBA_SEQUENCES, DBA_DB_LINKS

43obj_01 (SQL Reference Doksi >> create synonym)
   - Adjuk ki az alábbi utasítást:
     SELECT * FROM szinonima1;
     majd derítsük ki, hogy kinek melyik tábláját kérdeztük le.
     (Ha esetleg nézettel találkozunk, azt is fejtsük ki, hogy az mit kérdez le.)

43obj_02 (SQL Reference Doksi >> create sequence)
   - Előkészítés: Az Oracle emp és dept alaptábláiból hozzuk létre (de üresen!)
      a dolg és oszt táblákat.
   - Hozzunk létre egy szekvenciát, amelyik az osztály azonosítókat fogja generálni
      a számunkra. Minden osztály azonosító a 10-nek többszöröse legyen.
     Vigyünk fel 3 új osztályt és osztályonként minimum 3 dolgozót a táblákba.
     Az osztály azonosítókat a szekvencia segítségével állítsuk elő, és ezt tegyük
     be a táblába. (Vagyis ne kézzel írjuk be a 10, 20, 30 ... stb. azonosítót.)
     A felvitel után módosítsuk a 10-es osztály azonosítóját a következő érvényes  
     generált osztály azonosítóra. (Itt is a szekvencia segítségével adjuk meg, hogy
     mi lesz a következő azonosító.) A 10-es osztály dolgozóinak az osztályazonosító
     értékét is módosítsuk az új értékre.

43obj_03 (SQL Reference Doksi >> create database link)
  -  Hozzunk létre adatbázis-kapcsolót az egyik adatbázisban, amelyik a másik
     adatbázisra mutat. Ennek segítségével adjuk meg olyan lekérdezést, amely
     több adatbázis tábláit használja, például  
     dolg (emp) táblát az ABLINUX adatbázisból,
     oszt (dept) táblát ORADB adatbázisból.


4.4. Feladatok adattárolással kapcsolatos fogalmakra

Feladatok - Nikovits Tibor Információkezelés gyakorlatai alapján.
- Az adatbázis fizikai és logikai szerkezete, 
   lásd az 1-2 előadás anyagát: Abterv_NTea12.txt 
- Adatszótárnézetek (rendszerkatalógusok)
DBA_TABLES, DBA_DATA_FILES, DBA_TEMP_FILES,
DBA_TABLESPACES, DBA_SEGMENTS, DBA_EXTENTS,
DBA_FREE_SPACE


44tab_01
   - Adjuk meg az adatbázishoz tartozó adatfájlok és temporális fájlok nevét és
      méretét méret szerint csökkenő sorrendben

44tab_02
   - Adjuk meg, hogy milyen táblaterek vannak létrehozva az adatbázisban,
      az egyes táblaterek hány adatfájlból állnak, és mekkora az összméretük.
      (tablater_nev, fajlok_szama, osszmeret)
      !!! Vigyázat, van temporális táblatér is.

44tab_03
    - Mekkora a blokkok mérete a USERS táblatéren?

44tab_04
    - Melyik a legnagyobb méretű tábla szegmens az adatbázisban (a tulajdonost is
       adjuk meg) és hány extensből áll? (A partícionált táblakat ne vegyük figyelembe)

44tab_05
   - Melyik a legnagyobb méretű index szegmens az adatbázisban és
      hány blokkból áll? (A partícionált indexeket most se vegyük figyelembe)

44tab_06
   - Adjuk meg adatfájlonként, hogy az egyes adatfájlokban mennyi a foglalt hely
      összesen, írassuk ki a fájlok méretét is.

44tab_07
   - Melyik két felhasználó objektumai foglalnak összesen a legtöbb helyet
      az adatbázisban?

44tab_08
   - Melyik táblatéren van az ORAUSER felhasználó dolgozo táblája?


Házi feladat (beadandó +pontért)
Beküldése, lásd  Beadandók, géptermi ZH feladatok beküldése menüpontot
2HF (PL/SQL)
  - Írjunk meg egy plsql procedúrát, amelyik a paraméterül kapott táblára kiírja  
    az őt létrehozó CREATE TABLE utasítást.
        PROCEDURE cr_tab(p_owner VARCHAR2, p_tabla VARCHAR2)
   Elég ha az oszlopok típusát és DEFAULT értékeit kíírja, és elég ha a következő
   típusú oszlopokra működik: CHAR, VARCHAR2, NCHAR, NVARCHAR2,
   BLOB, CLOB, NCLOB, NUMBER, FLOAT, BINARY_FLOAT,
   DATE, ROWID


  Teszteljétek a procedúrát az alábbi táblával.
  CREATE TABLE tipus_proba(
       c10 CHAR(10) DEFAULT 'bubu',
       vc20 VARCHAR2(20),
       nc10 NCHAR(10),
       nvc15 NVARCHAR2(15),
       blo BLOB,
       clo CLOB,
       nclo NCLOB,
       num NUMBER,
       num10_2 NUMBER(10,2),
       num10 NUMBER(10) DEFAULT 100,
       flo FLOAT, bin_flo binary_float DEFAULT '2e+38',
       bin_doub binary_double DEFAULT 2e+40,
       dat DATE DEFAULT TO_DATE('2007.01.01', 'yyyy.mm.dd'),
       rid ROWID);
 
_______________________________________________________
3. gyak. (IX.23/25)
 - Indexstruktúrák

Adattárolással kapcsolatos paraméterek megadása egy tábla létrehozásakor:
INITIAL, NEXT, MINEXTENTS, MAXEXTENTS, PCTUSED,
PCTFREE
… stb. További hely lefoglalása manuálisan a tábla számára.
Az adatblokk szerkezete (fejléc, sorok, mezők, túlcsordulási blokkok).
Az indexek felépítése és szerkezete. Indexek létrehozása Oracle-ben.
Egyoszlopos, többoszlopos, bitmap, függvény alapú indexek létrehozása
és ezek tulajdonságainak megkeresése az adatszótárban. 
A sorazonosító (ROWID) adattípus és pszeudo oszlop.
A Rowid részei: OOOOOOFFFBBBBBBRRR.
A DBMS_ROWID package legfontosabb függvényei.
DATA_OBJECT_ID, RELATIVE_FNO kinyerése a sorazonosítóból.
A tábla által lefoglalt hely és a táblabeli adatok által ténylegesen foglalt blokkok
vizsgálata és a kettő közötti különbség. 
>> 4.5. Táblák (tárolási paraméterekkel) és indexek létrehozása
>> 4.6. Feladatok ROWID adattípusra  és a 3HF+

Segédanyagok Oracle® Database 10g (10.2)
-- SQL Reference  HTML     PDF
-- Concepts             HTML     PDF
-- Reference           HTML     PDF

4.5. Objektumok, táblák, indexek létrehozása

Feladatok - Nikovits Tibor Információkezelés gyakorlatai alapján.
- lásd az 1-2 előadás anyagát: Abterv_NTea12.txt példáit, vagyis az
- SQL Reference CREATE TABLE és CREATE INDEX példáit
  próbáljuk ki (az SQL Developer használatával)  

45obj_01
   - Hozzunk létre táblákat a tárolási paraméterek megadásával!
      Nézzük meg a katalógusból a tulajdonságait!
 
45obj_02 
   - Hozzunk létre egy vagy több táblához több különböző indexet!
      Legyen köztük több oszlopos, csökkenő sorrendű, bitmap index,
      függvény alapú stb. Állapítsuk meg az iménti indexeknek mindenféle
      tulajdonságait a katalógusokból (folyt lent: 8. Feladatok indexekre)

4.6. Feladatok ROWID adattípusra

ROWID adattípus formátuma és jelentése

18 karakteren íródik ki, a következő formában:
OOOOOOFFFBBBBBBRRR, ahol
OOOOOO -  az objektum azonosítója
FFF    -  fájl azonosítója (táblatéren belüli relatív sorszám)
BBBBBB -  blokk azonosító (a fájlon belüli sorszám)
RRR    -  sor azonosító (a blokkon belüli sorszám)

A ROWID megjelenítéskor 64-es alapú kódolásban jelenik meg.
Az egyes számoknak (0-63) a következő karakterek felelnek meg:
A-Z -> (0-25), a-z -> (26-51), 0-9 -> (52-61), '+' -> (62), '/' -> (63)

Pl. 'AAAAAB' -> 000001

46row_01
   - Az SH felhasználó SALES táblája (sh.sales) hány blokkot foglal le az
     adatbázisban? (Vagyis hány olyan blokk van, ami ehhez a táblához van
     rendelve és így azok már más táblákhoz nem adhatók hozzá?)

46row_02
   - Az SH felhasználó SALES táblájának adatai hány blokkban helyezkednek el?
     (Vagyis a tábla sorai ténylegesen hány blokkban vannak tárolva?)
     !!! -> Ez a kérdés nem ugyanaz mint az előző.

46row_03
   - Az egyes blokkokban hány sor van?

46row_04
   - Hozunk létre egy táblát az EXAMPLE táblatéren, amelynek szerkezete azonos
      az sh.sales tábláéval és pontosan 128 KB helyet foglal az adatbázisban.
      Foglaljunk le manuálisan egy újabb 128 KB-os extenst a táblához.
      Vigyünk fel sorokat addig, amig az első blokk tele nem  lesz, és 1 további sora lesz
      még a táblának a második blokkban. (A felvitelt plsql programmal végezzük!)

46row_05
   - Próbáljuk ki az előzőt ismét, de most a PCTFREE értéket állítsuk 40-re.
     Mindkét esetben ellenőrizzük is, hogy a sorok tényleg két blokkban vannak,
     és a másodikban csak egyetlen sor van.

46row_06
   - Állapítsuk meg, hogy a sh.sales táblának a következő adatokkal azonosított sora
     (time_id='1999.04.10', prod_id=2860, cust_id=37280) melyik adatfájlban van,
     azon belül melyik blokkban, és a blokkon belül hányadik a sor?

Házi feladat (beadandó +pontért)
Beküldése, lásd  Beadandók, géptermi ZH feladatok beküldése menüpontot
3HF (PL/SQL)
  - Írjunk egy olyan  plsql függvényt, amely a ROWID részeit értelmezi,
    vagyis amely a fenti 64-es kódolásnak megfelelő számot adja vissza.
    A függvény paramétere egy karakterlánc, eredménye pedig a kódolt
    numerikus érték legyen. (Elég ha a függvény max 6 hosszú, helyesen
    kódolt karakterláncokra működik, hosszabb karakterláncra vagy
    rosszul kódolt paraméterre adjon vissza -1-et.)
  - Ennek a fv-nek a segítségével adjuk meg egy táblabeli sor pontos
     fizikai elhelyezkedését. (Melyik fájl, melyik blokk, melyik sora)
     Példaul az  emp tábla azon sorára, ahol a dolgozó neve 'KING'.

  - Ennek a kurzusnak az egyik célkitűzése az, hogy az Oracle Database
     Online Documentation könyvtárban otthonosan mozogjunk, lásd például:
     PL/SQL Packages and Types Reference  HTML     PDF  ("90 DBMS_ROWID")
  - mégis most gyakorlásként írjuk meg a fenti plsql függvényt és alkalmazzuk.
  - A megírt függvényünk működése ellenőrizhető az alábbi függvényekkel:      

  SELECT rowid, substr(rowid, 1, 6),
     DBMS_ROWID.rowid_object(ROWID),
     substr(rowid, 7, 3),
     DBMS_ROWID.rowid_relative_fno(ROWID),
     substr(rowid, 10, 6),
     DBMS_ROWID.rowid_block_number(ROWID),
     substr(rowid, 16, 3),
     DBMS_ROWID.rowid_row_number(ROWID)
  FROM emp
  WHERE ename='KING'

_______________________________________________________
4. gyak. (IX.30/X.02.)
 - Indexstruktúrák

Az indexek felépítése és szerkezete (papíros - vagyis táblás feladatok).
Index szervezett táblák. Objektumok azonosítója és adatobjektum azonosítója.
IOT részei (index, tábla) és ezek felderítése a katalógusban.
A klaszterek használata. Több tábla fizikailag egy helyen tárolva.
Mi a közös a táblákban? -> klaszter kulcs. Több oszlopos klaszterkulcs,
több tábla a klaszteren. Index klaszter és hash klaszter.
Táblák partícionálása. Range, hash és lista alapú partícionálás.
Összetett partícionálás, alpartíciók. Információk felderítése a katalógusban.
>> 4.7. Előadáshoz kapcsolódó feladatok indexstruktúrákra  és a 4HF+
>> 4.8. Feladatok indexekre, klaszterekre és partíciókra 
     Témakörök:
     >> 4.8A. Feladatok indexekre és bitmap indexekre
     >> 4.8B. Feladatok index szervezett (IOT) táblákra és a kötelező HF
     >> 4.8C. Feladatok klaszterekre és az 5HF+
     >> 4.8D. Feladatok partíciókra

4.7. Előadáshoz kapcsolódó elméleti feladatok a "zöldkönyvből" 

Feladatok - Molina-Ullman-Widom: Adatbázisrendszerek megvalósítása
                    a "zöld könyv" 4.1, 4.2, 4.3, 4.4 és 5.4 fejezetei alapján
                    A fogalmak: Oracle dokumentációkból - a "Concepts"  itt:
                    Part II. Oracle Database Architecture - 5. Schema Objects
                   
Molina-Ullman 4.1. fejezete: Indexek szekvenciális fájlokon:

47ea_01
   - Minden blokkba 3 rekord, vagy 10 indexrekord (érték-mutató pár) fér.
     Összesen n rekordunk van. Hány blokkos az adatfájl, a sűrű index és
     a ritka index? 

47ea_02
   - Minden blokkba 30 rekord, vagy 200 indexrekord (érték-mutató pár) fér.
     Összesen n rekordunk van. Egyik blokk telítettsége sem lehet több, mint 80%.
     Hány blokkos az adatfájl, a sűrű index és a ritka index?

47ea_03
   - Minden blokkba 3 rekord, vagy 10 indexrekord (érték-mutató pár) fér.
     Összesen n rekordunk van. Többszintű indexünk legfelső szintje csak
     1 blokkból áll. Hány blokkos az indexfájl, ha az első szinten sűrű az index,
     és ha az első szinten ritka az index? 

Papíros házi feladatok (3 db papíron beadandó feladat +pontért)
Beküldése/vagyis beadása az 5.gyakorlaton
47ea_04 * HF
   - Minden blokkba 3 rekord, vagy 10 indexrekord (érték-mutató pár) fér.
      Hány adatblokkot kell átlagosan beolvasni az összes adott értékű rekord
      eléréséhez, ha rendezett állományunk van, egy érték 1,2 vagy 3-szor
      szerepelhet 1/3, 1/3, 1/3 valószínűségekkel, és olyan sűrű indexünk van,
      amelyben csak az első előforduláshoz tartozik indexrekord?
    - Feltesszük, hogy tudjuk előre, hogy mennyi előfordulásunk van
      az adott értékből.

47ea_05 *HF
   - Minden blokkba 3 rekord, vagy 10 indexrekord (érték-mutató pár) fér.
      Hány blokkot kell átlagosan beolvasni az összes adott értékű rekord
      eléréséhez, ha egy érték 1,2 vagy 3-szor szerepelhet 1/3, 1/3, 1/3
      valószínűségekkel, és olyan sűrű indexünk van, amelyben minden
      előforduláshoz tartozik indexrekord?
    - Feltesszük, hogy már kiszámoltuk, hogy melyik indexblokkban van
      az első keresett indexérték, és tudjuk, hogy hány van belőle.

Molina-Ullman 4.2. fejezete: Másodlagos indexek

47ea_06 * HF
   - Az adatfájlba történő beszúrás és törlés esetén a másodlagos indexfájlnak
      változnia kell. Javasoljunk néhány módszert arra, hogy lehet naprakészen
      tartani a másodlagos indexet az adatfájlok változásaival szinkronban.

47ea_07
   - Minden blokkba 3 rekord, vagy 10 indexrekord (érték-mutató pár), vagy
     50 mutató fér. Tegyük fel, hogy átlagosan 10-szer szerepel minden indexérték.
     Összesen 3000 rekordunk van. Másodlagos indexet készítünk, úgy, hogy az
     egy indexértékhez tartozó mutatókat kosarak blokkjaiban tároljuk. Mekkora
     az állomány mérete összesen, beleértve az adatokat, indexeket és mutatókat
     tartalmazó blokkokat?  

Molina-Ullman 4.3. fejezete: B-fák

47ea_08
   - Legyen a rekordok száma 1 000 000, és az indexelt oszlopban minden érték
      különböző. Sűrű indexre készítünk B-fát. Egy blokkba 10 rekord vagy
      (99 kulcs és 100 mutató) fér. Legyen a telítettség 70%, azaz legalább
      69 kulcs és 70 mutató szerepel az indexblokkban. Mekkora az adatfájl és
      az index együttes mérete? Mennyi a keresés blokkolvasási költsége?

4.8. Feladatok indexekre, klaszterekre és partíciókra

Segédanyagok Oracle® Database 10g (10.2)
-- SQL Reference  HTML     PDF
-- Concepts             HTML     PDF
-- Reference           HTML     PDF
és a segédlet:  Abterv_NTea12.txt  (Nikovits Tibor 1-2 előadás.doc-ból)

Témakörök:
>> 4.8A. Feladatok indexekre és bitmap indexekre
>> 4.8B. Feladatok index szervezett (IOT) táblákra és a kötelező HF
>> 4.8C. Feladatok klaszterekre és az 5HF+
>> 4.8D. Feladatok partíciókra

4.8A. Feladatok indexekre és bitmap indexekre

Feladatok - Nikovits Tibor Információkezelés gyakorlatai alapján.
- lásd az 1-2 előadás anyagát: Abterv_NTea12.txt példáit, például
  CREATE INDEX és CREATE BITMAP INDEX példáit
  próbáljuk ki (az SQL Developer használatával)  

További feladatok az adatszótárnézetek lekérdezésére
DBA_INDEXES, DBA_IND_COLUMNS, DBA_IND_EXPRESSIONS

48A_ind_01
   - Adjuk meg azoknak a tábláknak a nevét, amelyeknek van csökkenő
      sorrendben indexelt oszlopa.

48A_ind_02
   - Adjuk meg azoknak az indexeknek a nevét, amelyek legalább 9 oszloposak.
     (Vagyis a táblának legalább 9 oszlopát vagy egyéb kifejezését indexelik.)

48A_ind_03
   - Adjuk meg az SH.SALES táblára létrehozott bitmap indexek nevét.

48A_ind_04
   - a.) Adjuk meg azon kétoszlopos indexek nevét és tulajdonosát, amelyeknek
      legalább az egyik kifejezése függvény alapú .
   - b.) Adjuk meg az egyikükre, pl. az OE tulajdonában lévőre, hogy milyen
      kifejezések szerint  vannak indexelve a soraik. (Vagyis mi a függvény,
      ami alapján a bejegyzések készülnek.)

4.8B. Feladatok index szervezett (IOT) táblákra

Feladatok - Nikovits Tibor Információkezelés gyakorlatai alapján.
- lásd az 1-2 előadás anyagát: Abterv_NTea12.txt példáit,  például
  CREATE TABLE cikk_iot... ORGANIZATION INDEX
  példáit próbáljuk ki (az SQL Developer használatával)  

További feladatok az adatszótárnézetek lekérdezésére
DBA_TABLES, DBA_OBJECTS,
DBA_INDEXES, DBA_IND_COLUMNS

48B_iot_01
   - Adjuk meg a NIKOVITS felhasználó tulajdonában levő index-szervezett  (IOT)
     táblák nevét. (Melyik táblatéren vannak ezek a táblák? -> miért nem látható?)

48B_iot_02
   - Adjuk meg a fenti táblák index részét, és azt, hogy ezek az index részek
     (szegmensek) melyik táblatéren vannak?

48B_iot_03
   - Keressük meg a szegmensek között az előző táblákat illetve indexeket,
      és adjuk meg a méretüket.

48B_iot_04
   - Keressük meg az adatbázis objektumok között a fenti táblákat és indexeket,
     és adjuk meg az objektum azonosítójukat és adatobjektum azonosítójukat
     (DATA_OBJECT_ID).

48B_iot_05
   - Adjuk meg a fenti táblák túlcsordulási részeit (ha van).

48B_iot_06
   - Keressük meg a túlcsordulási részeket a szegmensek között és adjuk meg
     a méretüket.

48B_iot_07
   - Keressük meg az objektum azonosítóikat és az adatobjektum azonosítóikat is.

48B_iot_08
   - Adjuk meg azokat az index szervezett táblákat, amelyeknek pontosan
     egy dátum típusú oszlopa van.

Házi feladat (Ez mindenkinek kötelező házi feladat!)
Beküldése: 
Beadandók, géptermi ZH feladatok beküldése (ablinux-ra ftp-vel).
Határidő: az 5.gyakorlatra, legkésőbb 2008. október 9 csütörtök éjfélig beküldve.
Segédletek: Abterv_NTea12.txt  (Nikovits Tibor 1-2 előadás.doc) IOT része
Oracle dokumentációkból >> Concepts >> Part II. Oracle Database Architecture
>> 5. Schema Objects >> Overview of Index-Organized Tables része, valamint
előtte jobb megoldani a 8B. Feladatok index szervezett (IOT) táblákra feladatait.
KÖTELEZŐ 5HF (PL/SQL)
    - Írjunk meg egy plsql procedúrát, amelyik a paraméterül kapott index szervezett
      tábláról kiírja a tábla méretét.
      PROCEDURE iot_meret(p_owner VARCHAR2, p_tabla VARCHAR2)
      Vigyázzunk, mert a táblának lehet index és túlcsordulási szegmense is.

4.8C. Feladatok klaszterekre

Feladatok - Nikovits Tibor Információkezelés gyakorlatai alapján.
- lásd az 1-2 előadás anyagát: Abterv_NTea12.txt példáit,  például
  CREATE CLUSTER, CREATE TABLE... CLUSTER
  példáit próbáljuk ki, hasonló példa lesz a _cls_01 és a 6HF is!
- Oracle dokumentációkból >> Concepts >> Part II. Architecture
   >> 5. Schema Objects >> Overview of Clusters / Hash Clusters

További feladatok az adatszótárnézetek lekérdezésére
DBA_CLUSTERS, DBA_CLU_COLUMNS, DBA_TABLES,
DBA_CLUSTER_HASH_EXPRESSIONS


48C_cls_01
   - Hozzunk létre egy DOLGOZO(dazon, nev, beosztas, fonoke, fizetes, oazon)
     és egy OSZTALY(oazon, nev, telephely) nevű táblát.
    A két táblának az osztály azonosítója (oazon) lesz a közös oszlopa. A két táblát
    egy CLUSTEREN hozzuk létre. (Előbb persze létre kell hozni a clustert is.)

48C_cls_02
   - Adjunk meg egy olyan clustert az adatbázisban (ha van ilyen), amelyen még
     nincs egy tábla sem.

48C_cls_03
   - Adjunk meg egy olyant, amelyiken legalább 6 darab tábla van.

48C_cls_04
   - Adjunk meg egy olyan clustert, amelynek a cluster kulcsa 3 oszlopból áll.
     (Vigyázat!!! Több tábla is lehet rajta)

48C_cls_05
   - Hány olyan hash cluster van az adatbázisban, amely nem az oracle
     alapértelmezés szerinti hash függvényén alapul?

48C_cls_01.._05 feladatok megoldása, például 48C_cluster.txt (jelszóval) 

Házi feladat (beadandó +pontért)
Beküldése, lásd  Beadandók, géptermi ZH feladatok beküldése menüpontot
6HF (SQL)
   - Hozzunk létre egy hash clustert és rajta két táblát, majd szúrjunk be a
     táblákba sorokat úgy, hogy a két táblának 2-2 sora ugyanabba a blokkba
     kerüljön. Ellenőrizzük is egy lekérdezéssel, hogy a 4 sor valóban
     ugyanabban a blokkban van-e. (A ROWID lekérdezésével)
     (A sorok elhelyezését befolyásolni tudjuk a HASH IS megadásával.)

4.8D. Feladatok partíciókra

Feladatok - Nikovits Tibor Információkezelés gyakorlatai alapján.
- lásd az 1-2 előadás anyagát: Abterv_NTea12.txt példáit, például
  CREATE TABLE... PARTITION BY RANGE/HASH/LIST
 SUBPARTITION 
TEMPLATE/BY RANGE/HASH/LIST
   vagyis cr_part_table.txt példákat próbáljuk ki (SQL Developerrel)  
- Oracle dokumentációkból >> Concepts >> Part III. Features >>
   >> 18. Partitioned Tables, Partitioning Methods, Partitioned Indexes

További feladatok az adatszótárnézetek lekérdezésére
DBA_PART_TABLES, DBA_PART_INDEXES,
DBA_TAB_PARTITIONS, DBA_IND_PARTITIONS,
DBA_TAB_SUBPARTITIONS, DBA_IND_SUBPARTITIONS,
DBA_PART_KEY_COLUMNS

48D_prt_01
   - Adjuk meg az SH felhasználó tulajdonában levő partícionált táblák nevét  
      és a particionálás típusát.

48D_prt_02
   - Soroljuk fel az SH.COSTS tábla partícióit valamint, hogy hány blokkot
      foglalnak az egyes partíciók.
      (Vigyázat! Különböző értéket kaphatunk a különböző adatszótárakban.
        Ennek magyarázatát lásd később az ANALYZE parancsnál)

48D_prt_03
   - Adjuk meg, hogy az SH.COSTS tábla mely oszlop(ok) szerint van particionálva.

48D_prt_04
   - Adjuk meg, hogy a NIKOVITS.ELADASOK3 illetve az SH.COSTS táblák
      második partíciójában milyen értékek szerepelhetnek.

48D_prt_05
   - Adjuk meg egy partícionált tábla logikai és fizikai részeit! 
     (pl. NIKOVITS.ELADASOK).
     Maga a tábla most is logikai objektum, a partíciói vannak fizikailag tárolva.
     Nézzük meg az objektumok és a szegmensek között is.
   - Illetve ha alpartíciói is vannak (pl. NIKOVITS.ELADASOK4),
     akkor csak az alpartíciók vannak tárolva.
     Nézzük meg ezt is az objektumok és a szegmensek között is.

48D_prt_06
   - Melyik a legnagyobb méretű partícionált tábla az adatbázisban a partíciók
     összméretét tekintve? (az alpartícióval rendelkező táblákat is vegyük figyelembe)