IV.
Témakör: Adattárolás.
Indexstruktúrák.
1.gyak.
>> Előzmények
(HF - ismétlés)
>> 1. Feladatok a
táblák
oszlopaival
>>
2.
Feladatok adatbázis
objektumokkal és az 1HF+
2.gyak.
>>
3.
Egyéb objektumok (szinonima,
szekvencia, adatbáziskapcsoló)
>>
4. Feladatok
adattárolással
kapcsolatos
fogalmakra és a 2HF+
3.gyak.
>>
5. Táblák
(tárolási paraméterekkel)
és indexek
létrehozása
>>
6. Feladatok ROWID adattípusra
és a 3HF+
4.gyak.
>> 7.
Előadáshoz
kapcsolódó feladatok
indexstruktúrákra
és a 4HF+
>> 8. Feladatok indexekre,
klaszterekre és partíciókra
Témakörök:
>> 8A.
Feladatok indexekre és bitmap indexekre
>> 8B.
Feladatok index szervezett (IOT) táblákra és
a kötelező 5HF
5-6.gyak. (folyt.)
>> 8C.
Feladatok klaszterekre és az 6HF+
>> 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)
>> 1.
Feladatok a
táblák
oszlopaival
>>
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 <,
<=, >, >=
).
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ú.
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.
_____________________________________________________
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.
>>
3.
Egyéb objektumok (szinonima,
szekvencia, adatbáziskapcsoló)
>>
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
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.
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.
>>
5.
Táblák
(tárolási paraméterekkel)
és indexek
létrehozása
>>
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
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)
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.
>>
7.
Előadáshoz
kapcsolódó feladatok
indexstruktúrákra
és a 4HF+
>> 8.
Feladatok indexekre,
klaszterekre és partíciókra
Témakörök:
>> 8A.
Feladatok indexekre és bitmap indexekre
>> 8B.
Feladatok index szervezett (IOT) táblákra és
a kötelező HF
>> 8C.
Feladatok klaszterekre és az 5HF+
>> 8D.
Feladatok partíciókra
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?
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:
>> 8A.
Feladatok indexekre és bitmap indexekre
>> 8B.
Feladatok index szervezett (IOT) táblákra és
a kötelező HF
>> 8C.
Feladatok klaszterekre és az 5HF+
>> 8D.
Feladatok partíciókra
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.)
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.
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.)
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)