Feladatok indexekre és bitmap indexekre
 
Segédanyagok: Indexek.txt +  KatalTablak

Lásd Indexek.txt CREATE INDEX és CREATE BITMAP INDEX példáit
(valamint az SQL Reference CREATE INDEX példáit)

   - 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ű, függvény alapú,
     fordított kulcsú (reverse), bitmap index, stb.

Állapítsuk meg ezeknek az indexeknek a különböző tulajdonságait a katalógusokból. 
DBA_INDEXES, DBA_IND_COLUMNS, DBA_IND_EXPRESSIONS

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

   - 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.)

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

   - 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.)

ROWID adattípus formátuma és jelentése
(lásd még DBMS_ROWID package)

18 karakteren irodik ki, a kovetkezo formaban: OOOOOOFFFBBBBBBRRR
OOOOOO -  az objektum azonositoja
FFF    -  fajl azonositoja (tablateren beluli relativ sorszam)
BBBBBB -  blokk azonosito (a fajlon beluli sorszam)
RRR    -  sor azonosito (a blokkon beluli sorszam)

A ROWID megjeleniteskor 64-es alapu kodolasban jelenik meg.
Az egyes szamoknak (0-63) a következo karakterek felelnek meg:
A-Z -> (0-25), a-z -> (26-51), 0-9 -> (52-61), '+' -> (62), '/' -> (63)

Pl. 'AAAAAB' -> 000001
      
Feladatok ROWID adattípusra
   
   - 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á?)

   - 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ő.

   - Az egyes blokkokban hány sor van?

   - Á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?

  - Az előző feladatban megadott sor melyik partícióban van?
     Mennyi az objektum azonosítója, és ez milyen objektum?
 
 
HÁZI FELADAT 1

Írjunk meg egy PL/SQL függvényt, amely a ROWID 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
maximum 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éldául az emp
tábla azon sorára, ahol a dolgozó neve 'KING'.

Ennek a kurzusnak az egyik célkitűzése az is, hogy az Oracle Database
Online Documentation könyvtárban otthonosan mozogjunk, lásd például 
PL/SQL Packages and Types Reference "DBMS_ROWID" fejezetét.
Gyakorlásként írjuk meg a fenti PL/SQL függvényt. A megírt függvényünk
működését könnyen ellenőrizhetjük az DBMS_ROWID csomagban
szereplő függvényekkel, az alábbi utasítással:

    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'


HÁZI FELADAT 2
 
   - Hozunk létre egy táblát az EXAMPLE táblatéren, amelynek szerkezete azonos
      a nikovits.cikk 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!)

   - 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.
 
 Vissza az AB2 gyakorlat oldalára             Vissza a Kezdőlapra