Dictionarul de date

Fiecare baza de date poseda un dictionar de date. Acesta reprezinta un set de tabele si vederi folosite drept referinta read-only despre baza de date. Ele se gasesc in schema utilizatorului "sys". Principala diferenta dintre vederile dictionarului de date si vederile create de utilizatori consta in aceea ca vederile dictionarului de date sunt gestionate de userul SYS si rezultatele afisate de acestea sunt diferite functie de user-ul care le  acceseaza.
Un dictionar  stocheaza date  atât despre structura logica cât si despre cea fizica a bazei de date. Se urmaresc:
-utilizatorii valizi ai bazei de date;
- aspecte legate de securitate;
-informatii despre constrângerile de integritate definite pentru tabelele din baza de date;
-cantitatea de spatiu alocat pentru un obiect schema si cât din el este folosit;
- alte informatii p ersistente despre baza de date.
Un dictionar de date este creat când e creata baza de date. Pentru a reflecta cu acuratete starea bazei de date în fiecare moment, dictionarul de date este actualizat automat de Oracle ca raspuns la diferitele actiuni, cum ar fi de exemplu modificarea structurii bazei de date. Baza de date se bazeaza pe dictionarul de date pentru a înregistra, verifica si dirija procesele exterioare.

Vederile dictionarului de date au unul din urmatoarele prefixuri:
USER_  - afiseaza informatii despre structurile proprii utilizatorilor (din schema user-ilor). Sunt accesibile  tuturor userilor si  nu au o coloana OWNER.
ALL_     - arata informatii referitoare la toate obiectele la care are acces utilizatorul inclusiv la acele obiecte care nu sunt proprietatea userului respectiv, dar pentru care i-au fost acordate  privilegii de acces. Sunt accesibile tuturor\ utilizatorilor dar au in structura o coloana OWNER.
DBA_    - ofera informatii despre toate structurile din baza de date - arata ce exista in  toate schemele utilizatorilor. Sunt accesibile  administratorilor  bazei de date, furnizeaza informatii despre toate obiectele din baza de date si au coloana OWNER.

O parte  din dictionarul de date  este utilizat atat de dezvoltatori cat si de DBA pentru a regasi informatii despre tabele, coloane, indecsi sau alte obiecte din baza de date. Acestea sunt vederile comune ale dictionarului.
 

O parte dintre informatii se gasesc în tabelul  sistem  USER_TABLES. De aici se pot  afla numele tabelelor create de utilizator folosind comanda:
 
SELECT table_name FROM  user_tables;

Un alt tabel virtual al dictionarului din care pot  fi extrase numele tabelelor este USER_OBJECTS, cu structura urmatoare:


 

Se va folosi interogarea urmatoare:
SELECT  object_name
           FROM user_objects
           WHERE object_type =’TABLE’;

Pentru a afla detalii despre atributele  unui tabel, este necesara consultarea unui alt tabel al dictionarului de date: USER_TAB_COLUMNS, cu structura:


 

 
Dictionarul  bazei de date  pastreaza informatii  despre restrictii într-un tabel virtual special, numit  USER_CONSTRAINTS. Structura acesteia este urmatoarea:

 
Pentru a afla daca un tabel are declarata cheie primara, respectiv  chei alternative (candidate),  se poate folosi atributul constraint_type (care are valorile  ‘P’ pentru  cheia primara respectiv ‘U’ pentru cheile alternative).   Utilizarea clauzei CONSTRAINT  face posibila atribuirea unui nume explicit  fiecarei restrictii.
 
Tabelul  USER_CONSTRAINTS  din dictionarul de date  ofera informatii  cu privire la  restrictiile  definite pentru fiecare tabel din  baza. Pentru a afla care sunt  atributele care fac parte din cheile primare sau alternative  se foloseste un alt tabel din dictionarul de date USER_CONS_COLUMNS, a carui structura este:

Aflarea atributelor declarate în toate restrictiile  este posibila prin urmatoarea fraza SELECT:

SELECT constraint_name, column_name, position
            FROM  user_cons_columns
            WHERE table_name = ‘nume_tabel_vizat’;

 
Daca se doreste  aflarea componentei cheii primare a unui tabel al carui nume este  cunoscut (fie acesta pk_tabel) se poate recurge la interogarea urmatoare:


SELECT constraint_name, column_name, position
           FROM  user_cons_columns

           WHERE constraint_name =’pk_tabel’;
 
 
In dictionarul de date informatiile despre restrictiile  referentiale  sunt pastrate tot în tabelul  USER_CONSTRAINTS si USER_CONS_COLUMNS, si se pot obtine prin fraza:
SELECT constraint_name, table_name, r_constraint_name
            FROM user_constraints
            WHERE  constraint_type =’R’;