Lásd
Indexek.txtCREATE
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:
- 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.