3.gyak. Instancia, V$-nézetek, ROWID
 
>> 5. témakör: Instancia, V$-nézetek
>> 6. témakör: Feladatok ROWID adattípussal
   

A gyakorlati foglalkozás és az előadások anyagára épül.
2.EA: -- az előző előadásnak az a része, ami a mai gyakorlatra kell:
Oracle példány, folyamatok, memóriaterületek Oracle.ppt (KA) (1-38.o.)
Oracle Enterprise Manager lehetőségei (KA AB2EA oldalán)
Instancia.pptinstancia.pdf,  instancia_inditas.pdf (NT)
OracleConcepts11g.pdf  (KA széljegyzetével) (uez)
(...)
3.EA: DBA feladatok. Fizikai fájlszervezés, indexelés alapjai
Az Oracle adatbázissal kapcsolatos DBA feladatok Less01-hu.ppt (KA)
Az Oracle telepítése Less02-hu.ppt (KA)
A fizikai fájlszervezés (kupac, hasítóindex)  fizika.ppt (KA) (1-20 oldal)
   
-- előadáshoz kapcsolódó további olvasmány:
Molina-Ullman-Widom: Adatbázisrendszerek megvalósítása, Panem, 2001.
4.4.fej. Tördelőtáblázatok (hasítóindex szervezés, lineáris, kiterjeszthető)
         

5.témakör: Instancia, V$-nézetek
    
Segédanyagok: InstanciaMan.pdf  + init_param.txt  + OracleDoc: Reference
Adjuk meg az alábbi információkat a tomx adatbázisra vonatkozóan.
   
5.01. Adjuk meg, hogy mikor indult el a jelenleg futó instancia.
 
5.02. Az instancia elindulása óta hány felhasználói bejelentkezés történt a rendszerbe?
         Hány tranzakciót hagytak jóvá (commit) es hányat vontak vissza (rollback) ?
         (V$SYSSTAT)
 
5.03. Mely háttérfolyamatok futnak jelenleg az alábbiak közül?
         (ARC0, DBW0, PMON, SMON, FMON, LMON)
 
5.04. Mekkora a log puffer mérete?
         Mekkora a shared pool mérete?
   
5.05. Maximum hány nyitott kurzort tarthatnak fenn az egyes sessionok?
         Mekkora lehet maximálisan az SGA terület mérete a jelenleg futó instanciánál?
         Hány konkurrens tranzakció futását engedi meg egyidejüleg az adatbáziskezelő?
         (V$PARAMETER)
   
5.06. Kik vannak jelen pillanatban bejelentkezve az adatbázis-kezelőbe?
         Melyik felhasznaló van legrégebben bejelentkezve és hány másodperce?
         Kik azok, akik SQL Developer programmal jelentkeztek be?
   
5.07. Mi a tomx gépen levő adatbázis neve es mikor lett létrehozva?
   
5.08. Melyik adatfájlra vonatkozóan történt a legtöbb blokk-olvasási
         müvelet (PHYBLKRD oszlop) az instancia elindulása óta?
 
5.09. Melyek az adatbázishoz tartozó log fájlok?
         Melyik az amelybe jelenleg is ír a rendszer?
         Melyek az adatbazishoz tartozo control fájlok?
   
5.10. A jelenleg telepített adatbázisban hasznalható-e a Particionálási opció,
         a Bitmap index opció illetve a Real Application Clusters opció?
 

6.témakör: Feladatok ROWID adattípusra  

Segédanyagok: Táblák létrehozása tárolási paraméterek.txt
   
ROWID adattípus formátuma és jelentése
(lásd még DBMS_ROWID package)

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
      
6.01. A NIKOVITS felhasználó CIKK 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)
   
6.02. A NIKOVITS felhasználó CIKK 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!
 
6.03. Az egyes blokkokban hány sor van?
     
6.04. Hozunk létre egy olyan táblát (lásd tárolási paraméterek.txt) 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.
   
HF05.  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 és ne kézzel, mert úgy kicsit sokáig tartana.)
 
6.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.
 
6.06. Állapítsuk meg, hogy a SH.SALES táblának a következő adatokkal azonosított sora
         (time_id='1998.01.10', prod_id=13, cust_id=2380) melyik adatfájlban van,
         azon belül melyik blokkban, és a blokkon belül hányadik a sor?
 
6.07. Az előző feladatban megadott sor melyik partícióban van?
         Mennyi az objektum azonosítója, és ez milyen objektum?  
   
HF06. Í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'.
 
Megjegyzés: A gyakorlatok 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, írjuk be a függvényünket
minden substr(...)-hoz egészítsük ki a sajátfvnév(substr(...))-el.

       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 orauser.emp
    WHERE ename='KING';


 Vissza az AB2 gyakorlat oldalára             Vissza a Kezdőlapra