maniu@securebrain.com:~# vi oracle



RDBMS = Relational Database Management System
dal punto di vista abstract consente di fare delle relazioni fra entita'.
un'entita' e' una tabella che contiene le caratteristiche di un certo oggetto.
possono esistere anche dei sub-oggetti

una pk= primary key e' un campo con le seguenti caratteristiche
- non nullo
- ha un valore univoco

RDBMS ha la possibilita' di definire dei campi con il valore FK (foreign key)
questa dev'essere:
- indicizzata (index field)
- puo' essere nulla (non dev'esserci per forza il riferimento all'altra tabella)
le FK che definiscono che in un campo si puo' inserire 1 valore in riferimento alla PK

Le relazioni fra le tabelle con FK sono ovviamente 1:n
(se la relazione fosse 1:1 non ci sarebbe bisogno di usare la FK, basterebbe mettere il campo direttamente sulla tabella)

--------------------------------------------------------------------------------------------------------------------------

Oracle si puo' definire come:
- un insieme di raw devices
Oracle gestisce direttamente il disco in modo che le I/O non passano dal SO
ma vengono effettuate in modo delay, a livello applicativo.
Oracle ha un suo FS di tipo Journaled.
- un file
Per operazioni I/O si ha bisogno di interagire con il SO

Oracle organizza il contenuto in file con una dimensione.
A livello applicativo i dati si organizzano in TABLE SPACE (es. un FS pulito in cui mettere i dati)
Questi a loro volta di suddividono in SCHEMI

TABLE SPACE
- schema - oggetti applicativi (tabelle, indici, procedure, function, package, synonym...)

- schema (es. di sistema)
- schema (es. amministrativo)

Ogni utente ha solamente 1 schema, con una size definita (anche unlimited).
Gli schemi possono condividere qualcosa verso gli altri schemi:
Infatti ogni schema ha un OWNER e delle GRANTS (select, create, update, execute)

Il sysnonym e' un link simbolico che ti redirige verso un oggetto di un altro schema.
(il syn fra database e' possibile e si chiama DBLink)

--------------------------------------------------------------------------------------------------------------------------

Oracle e' un processo identificato come una macchina definita HOST, avente un determinato SID (System ID).
Per comunicare con l'istanza si utilizza il LISTENER (Socket TCP/IP) in ascolto di defaults sulla 1521 che ascolta.

Dal punto di vista dei processi, la SGA (System Global Area) si occupa di referenziare due sottoprocessi:
- DB Writer che si occupa di scrivere i dati
- DB Reader che si occupa di leggere i dati
- REDO (w/r) : collezione di tutte le istruzioni che sono attivate al DB (questo permette di ricostruire il DB)

La SGA ha una cache formata da:
- Pinned Code
- Shared Area : che contiene i dati utilizzati - fa uso della shared memory del systema
- area di ottimizzazione - adatta le richieste al DB per ottimizzare gli accessi al dato fisico
conservando le statistiche dei dati (comando: compute statistic)


L'ottimizzazione puo' essere effettuata secondo piu' modalita' (da scegliere per es. in fase d'installazione)
- rule opt (oculata)
- stat opt (in funzione delle statistiche)
- choose opt (riesce a pesare l'impatto dello statment sul DB)
- star opt (dalla 8i, riesce a capire qual e' la modalita' migliore)

--------------------------------------------------------------------------------------------------------------------------

Operazioni
Lo standard utilizzato e' SQL89

- DDL: Data Definition Language (insieme di istruzioni che crea o distrugge oggetti)
- create
- drop
- alter
- richieste di GRANTS
- ....

- DML: Data Manipulation Language (istruzioni di manipolazioni del dato)
- select
- delete
- update
- ....

- Istruzioni non definite
- truncate (mantinene la struttura (definizione) ma senza i dati (buckets=slot))




:q!