Adatbázisok EA+GY -
Adatbázisok fizikai
tervezése, Indexek
--- --- --- --- --- ---
> 1.rész Metaadatbázis. Adatbázisbeli
objektumok
objektumok.txt
+ 01-DBA
nézetek.pdf
Adatszótár-nézetek:
Honnan kaphatunk információkat az
adatbázisban
tárolt dolgokról
és azok tulajdonságairól? -> Az
adatszótár nézetekből,
amelyeknek neve
általában
a köv.karakterláncok valamelyikével kezdődik:
USER (az adott user tulajdonában
lévő
objektumok) pl. USER_TABLES
ALL (amihez joga van az adott usernek)
pl. ALL_TABLES
DBA (az adatbázis
összes objektuma) pl.
DBA_TABLES
- Milyen dolgok vannak az
adatbázisban? Például
táblák,
nézetek, indexek,
stb.
- Minden fel van sorolva a
típusával együtt a DBA_OBJECTS
adatszótárban.
- Minden adatbázisbeli objektumnak van egy egyedi
objektum
azonosítója (OBJECT_ID),
és amelyikhez tartozik szegmens, annak egy
úgynevezett adatobjektum
azonosítója is van
(DATA_OBJECT_ID). Amelyik objektumhoz nem tartozik szegmens,
annak az adatobjektum
azonosítója NULL vagy 0, és
ezeknek csak a
definíciója van (szövegesen)
tárolva a
szótárban.
Ezen utóbbi objektumokra azt mondjuk, hogy
tényleges tárolást nem
igénylő
objektumok.
Feladatok:
1.01. Kérdezzük le a DBA_OBJECTS, ALL_OBJECTS
és
USER_OBJECTS nézeteket.
1.02. Kinek a tulajdonában van a DBA_TABLES nevű
nézet valamint a DBA_TABLES
nevű
szinonima? (A két
lekérdezés megmagyarázza, hogy
miért tudjuk elérni őket.)
1.03. Milyen típusú objektumai vannak az orauser
nevű
felhasználónak az adatbázisban?
(a
katalógustáblákban nagy betűvel vannak
az adatok
'orauser' helyett 'ORAUSER')
1.04. Hány különböző
típusú objektum van nyilvántartva az
adatbázisban? Melyek ezek a típusok?
1.05. 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)
1.06. 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
1.07. Kik azok a felhasználók, akiknek
több
mint 10 féle objektumuk van?
1.08. Kik azok a felhasználók, akiknek van
triggere
és nézete is?
1.09. Kik azok a felhasználók, akiknek van
nézete, de nincs triggere?
1.10. Kik azok a felhasználók, akiknek
több
mint 40 táblájuk, de maximum 37 indexük
van?
--- --- --- --- --- ---
> 2.rész Táblák
és
oszlopai, megszorítások
Táblák
létrehozása, oszloptípusok.txt
Mely táblák vannak egy adott
felhasználó tulajdonában?
- A DBA_TABLES adatszótár az
összes
táblát felsorolja, például
HR séma
táblái ezek:
SELECT table_name FROM dba_tables WHERE
owner='HR';
Mit tudhatunk a táblák
oszlopairól,
milyen nevű és típusú oszlopai vannak,
sorrendjük, stb.
- A DBA_TAB_COLUMNS adatszótár a
táblák
oszlopairól tartalmaz információt.
Feladatok:
2.01. Hozzunk
létre
táblákat, majd keressük
meg az
adatszótár
nézetekben,
hogy milyen
információkat találhatunk a
táblákról és a
táblák
oszlopairól.
Adatszótár
nézetek: DBA_OBJECTS,
DBA_TABLES
és
DBA_TAB_COLUMNS
2.02.
Hozzunk létre táblákat
megszorításokkal, majd nézzük
meg hogyan
jelennek meg
az oszlopok
és a
megszorítások a
DBA_CONSTRAINTS katalógustáblában is.
2.03. Hozzunk létre
nézettáblákat, majd
nézzük
meg a DBA_VIEWS katalógustáblában.
2.04. Hány oszlopa van a sila.emp
táblának?
2.05. Milyen típusú a sila.emp tábla
6.
oszlopa?
2.06. Adjuk meg azoknak a tábláknak a
tulajdonosát
és nevét, amelyeknek van 'Z' betűvel
kezdődő oszlopa.
2.07. Adjuk meg azoknak a tábláknak a
nevét,
amelyeknek
legalább 8 darab dátum
tipusú oszlopa
van.
2.08. Adjuk meg azoknak a tábláknak a
nevét,
amelyeknek
1. es 4. oszlopa
is VARCHAR2 tipusú.
--- --- --- --- --- ---
> 3.rész
Adattárolás
Táblák
létrehozása tárolási
paraméterek.txt
LogDB_Struct.pdf
+ Adattárolás.txt
+ 02-DBA
nézetek.pdf
DBA_TABLES,
DBA_DATA_FILES, DBA_TEMP_FILES,
DBA_TABLESPACES,
DBA_SEGMENTS,
DBA_EXTENTS, DBA_FREE_SPACE
Feladatok:
3.01. Melyik táblatéren van az ORAUSER
felhasználó dolgozo
táblája? (DBA_TABLES)
3.02. Adjuk meg az adatbázishoz tartozó
adatfile-ok
(és temporális fájlok)
nevét és méretét
méret szerint csökkenő sorrendben. (DBA_DATA_FILES, DBA_TEMP_FILES)
3.03. 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!
3.04. Mekkora a blokkok mérete a USERS
táblatéren? (DBA_TABLESPACES)
3.05. Melyik a legnagyobb méretű tábla szegmens
az
adatbázisban (a tulajdonost és
a szegmens
nevét is adjuk
meg) és
hány extensből áll? (DBA_SEGMENTS)
(A
particionált táblákat most ne
vegyük
figyelembe.)
3.06. Melyik a legnagyobb méretű index szegmens az
adatbázisban és hány
blokkból áll?
(A
particionált indexeket most ne vegyük
figyelembe.)
3.07. Adjuk meg adatfájlonként, hogy az egyes
adatfajlokban mennyi a foglalt hely összesen.
(Írassuk ki a fájlok
nevét és méretét is). (DBA_EXTENTS, DBA_DATA_FILES)
3.08. Melyik két felhasználó
objektumai
foglalnak összesen a legtöbb helyet az
adatbázisban?
3.09. Van-e valamelyik felhasználónak olyan
táblája, amelyik több
adatfájlban is foglal
helyet?
--- --- --- --- --- ---
> 4.rész
ROWID
18 karakteren írodik ki, a
következő
formában: OOOOOOFFFBBBBBBRRR
OOOOOO - az objektum
azonosítója
FFF -
fájl
azonosítója
(táblatéren belüli relativ
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
SELECT rowid, empno, ename,
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 sila.emp;
Feladatok:
4.01. Az SH
felhasználó CUSTOMERS
táblája hány blokkot foglal le az
adatbázisban?
(Vagyis azt
nézzük meg, hogy 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á?) (DBA_SEGMENTS)
Hasonlítsuk össze ezt azzal, hogy mennyi a foglalt
hely összesen? (DBA_EXTENTS)
4.02. Az SH
felhasználó CUSTOMERS
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ő, most a ROWID-et
használjuk!
4.03. Az egyes blokkokban hány sor van?
--- --- --- --- --- ---
> 5.rész Indextáblák
-- Molina-Ullman-Widom:
Adatbázisrendszerek
megvalósítása, Panem, 2001.
4.fejezete -> Indexstruktúrák.pdf -->>
Innen a fontosabb részletek:
Elsődleges indexek, Másodlagos
indexek, B-fák, Hasító
indexek
-->> lásd még
Molina-Ullman könyv: B-fák
és Hasító indexek.pdf
-- Oracle
Példák 1/10.lecke
és 2/1.lecke
SQL DDL (megszorítások,
indexek)
>>
OracleDoc:
SQL Language Reference
>> innen CREATE
INDEX
példák
>>
Alapfogalmak Oracle
Database Concepts
például Concepts
(11g) 3.fej. Indexek vagy Concepts
(10g) 5.fej.Indexek
Feladatok:
5.01. 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, lásd create index
példák.txt
Állapítsuk meg ezeknek az
indexeknek a
különböző tulajdonságait
az alábbi
katalógusokból:
DBA_INDEXES,
DBA_IND_COLUMNS, DBA_IND_EXPRESSIONS
5.02. Adjuk meg azoknak a
tábláknak a
nevét, amelyeknek van csökkenő
sorrendben
indexelt
oszlopa.
5.03. 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).
5.04. Adjuk meg az SH.SALES
táblára létrehozott bitmap indexek
nevét.
5.05. Adjuk meg azon kétoszlopos
indexek nevét és tulajdonosát,
amelyeknek
legalább az egyik
kifejezése függvény alapú.
Adjuk meg az
egyikükre,
például 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).