AB2gyak (főmenü)    Gyak.köv.    AB2ea    ABelérése     2.gyak    OracleDoc  
1.gyak. Adatbázis objektumok, táblák oszlopai és megszorítások
   
Követelmények ismertetése, lásd Gyakorlati követelmények és ZH infó
G (gépes feladatok)
> G1. Adatbázis objektumok, tábla, nézet, index, stb (DBA_OBJECTS)   
> G2. Táblák és oszlopai (DBA_TABLES, DBA_TAB_COLUMNS) 
   

A félév során a gyakorlatok Kiss Attila AB2EA előadás anyagára épülnek,
kérem, hogy az előadások anyagból felkészülten jöjjön minden gyakorlatra!
A legjobb felkészülés: ha bejár az előadásokra és átnézi az előadás slide-okat!
További hasznos olvasmányok:
  > Tankönyv: Molina-Ullman-Widom: Adatbázisrendszerek megvalósítása, 2001.
  > Oracle Dokumentáció >> ConceptsReferencePerformance Tuning Guide 
Gépes gyakorlathoz >> Oracle adatbázis elérhetősége
    

G1. Adatbázis objektumok
(DBA_OBJECTS)
 
Segédanyag: Adatbázis objektumok.txt + 01-DBA nézetek.pdf
> OracleDoc: Concepts  >> 2 Introduction to Schema Objects
   
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 a neve általában a következő 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
- A rendszerkatalógus 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.
Milyen dolgok vannak az adatbázisban?
- Például táblák, nézetek, indexek, procedúrák stb.
  Minden fel van sorolva a típusával együtt a DBA_OBJECTS adatszótárban.
  SELECT object_name, object_type FROM DBA_OBJECTS WHERE owner='SILA';
Mely objektumokhoz tartozik és melyekhez nem tartozik szegmens? (igényel-e tényleges tárolást)
- 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?
   

G2. Táblák oszlopai és megszorítások
(DBA_TABLES, DBA_VIEWS, DBA_TAB_COLUMNS, DBA_CONSTRAINTS)
   
Segédanyag: Táblák létrehozása, oszloptípusok.txt  + 01-DBA nézetek.pdf
>> OracleDoc: Concepts  >> 2 Overview of Tables
    
Mely táblák vannak például 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';
Milyen nevű és típusú oszlopai vannak egy táblának, melyik az első, második oszlopa stb.?
- A DBA_TAB_COLUMNS adatszótár a táblák oszlopairól tartalmaz minden fontos információt.
   
Feladatok:
2.01. Táblák létrehozása: a fenti oszloptípusok (segédlet) alapján hozzunk létre táblákat,
         majd keressük meg milyen információt találunk a tábláinkról és a táblák oszlopairól
         a DBA_OBJECTS, DBA_TABLES és DBA_TAB_COLUMNS katalógustáblákban.
2.02. Hozzunk létre táblákat megszorításokkal, majd nézzük meg hogyan jelennek meg
         a megszorítások a DBA_CONSTRAINTS katalógustáblában.
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 isVARCHAR2 tipusú.
   

Házi feladat: köv.gyakorlatra átnézni a PL/SQL ismereteket, mert ezzel folytatjuk:
   
2.09. Írjunk meg egy plsql blokkot, amelyik egy karakterlánc beolvasása alapján
         kiírja azoknak a tábláknak a nevét és tulajdonosát, amelyek az adott karakterlánccal
         kezdődnek. (Ha kisbetűkkel adjuk meg a karakterláncot, akkor is működjön!)
   
2.10. Í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 create_table_ut(p_owner VARCHAR2, p_tabla VARCHAR2)
         Elég ha az oszlopok típusát és DEFAULT értékeit kiírja, és elég ha a következő típusú
         oszlopokra működik: CHAR, VARCHAR2, NCHAR, NVARCHAR2,
                                         NUMBER, FLOAT, BINARY_FLOAT, DATE, ROWID
         Teszteljétek a procedúrát az alábbi táblával.
         CREATE TABLE tipus1_proba
                  (c10 CHAR(10) DEFAULT 'bubu', vc20 VARCHAR2(20),
                    nc10 NCHAR(10), nvc15 NVARCHAR2(15),
                    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);
   
Fel a lap tetejére (mai gyak témakörei)      Vissza az AB2gyak kezdőlapjára