ORACLE 8i
Oracle 8i è una soluzione integrata e completa per lo sviluppo di
applicazione di gestioni di dati in rete.
• DBMS relazionale a oggetti: permette di creare database contenenti
relazioni e tipi di dati astratti.
Il DBMS
ORACLE 8i
• Possibilità di sviluppo a oggetti: è dotato di un linguaggio procedurale
a oggetti.
• Ambiente di sviluppo integrato: diversi tool integrati nel sistema
consentono lo sviluppo di applicazioni complesse.
• Logica client-server a tre livelli
Oracle
1
Oracle
2
L’architettura
I
L’architettura di Oracle 8i è centrata sul concetto di istanza e di database.
Un database è composto da un insieme di file in cui vengono memorizzati i
dati.
Un server di database, detto istanza, è costituito da una serie di strutture in
memoria e di processi eseguiti in background che accedono ai file del
database.
L’architettura
II
Ogni host può ospitare più database a ognuno dei quali corrisponderà un
server.
HOST I
Server I
Server II
SGA
SGA
Processi in
background
Processi in
background
Server
SGA (System Global Area)
Processi in background
Database I
Database II
File del
database
Database
File del
database
File del database
Le due istanze saranno percepite come completamente indipendenti e
potranno comunicare mediante i medesimi protocolli utilizzati da istanze
residenti su host separati.
Per ogni database attivo su un host esistono un insieme di servizi che ne
gestiscono tutte le funzionalità.
Oracle 8i non è percepito come un sistema centralizzato dotato di un
processo che controlla tutti i dati e gli utenti ma piuttosto come una
federazione di sistemi ognuno dei quali controlla un singolo database con i
propri utenti e le proprie applicazioni.
Oracle
3
Oracle
4
L’architettura
III
L’architettura di Oracle 8i permette di realizzare molteplici tipologie di
connessione in rete a seconda dell’obiettivo che deve essere raggiunto:
•
•
•
•
•
•
•
•
HOST I
Reti di database utilizzati per query remote
Database distribuiti
Server di database in parallelo che accedono allo stesso database
Query parallele in cui più CPU eseguono la stessa operazione
Database client/server a 2 e 3 livelli
Database accedibili tramite web
Database replicati
…………..
HOST II
Server I
Processi in
background
Database I
Pool SQL
condiviso
• Cache per i blocchi di disco (Data Block Buffer Cache): utilizzata per
contenere i blocchi dati letti dal database (es. tabelle, indici, ecc.)
gestiti con politica LRU (Least Recently Used).
• Cache del dizionario dati: contiene le informazioni sugli elementi del
database memorizzate su disco in apposite tabelle che nel loro
complesso formano il dizionario dei dati. È gestita con politica LRU.
Processi in
background
• Buffer del registro di REDO: contiene le informazioni relative al
REDO non ancora salvati nell’apposito file in linea.
• Pool SQL condiviso: contiene le informazioni relative alle istruzioni
SQL utilizzate più di frequente. Il buffer è condiviso da tutti gli utenti e
permette di evitare il calcolo dei piani di esecuzioni delle
interrogazioni effettuate con maggiore frequenza. È gestita con politica
LRU.
Database II
File del
database
Cache del
dizionario
SGA
SGA
NET 8
L’area di memoria SGA (System Global Area) è la principale area di
memoria utilizzata da un server ORACLE, essa conserva le informazioni più
utili sulla struttura del database, sulle operazioni che vengono effettuate
dagli utenti e viene utilizzata come blackboard per lo scambio di
informazioni.
Buffer dei Buffer del
blocchi dati redo log
Server II
SGA
Istanza di database: la memoria
File del
database
Ogni utente ha a disposizione una area di memoria separata denominata
PGA (Program Global Area).
Client equipaggiati
con NET 8
Oracle
5
Oracle
6
Istanza di database: i processi
Istanza di database
Le relazioni fra le strutture fisiche e di memoria del database vengono gestite
e guidate da processi eseguiti in background. Questi processi appartengono
al database e il loro numero può variare a seconda delle configurazioni, i più
importanti sono elencati di seguito:
La figura mostra alcuni dei legami tra i principali elementi che costituiscono
una istanza di database.
Processi Utente
SMON (System Monitor): all’avvio dell’istanza esegue il ripristino
dell’istanza mediante il registro di REDO. Al processo è inoltre demandato il
compito di deframmentare le aree di disco occupate dal database.
PMON (Program Monitor): libera le risorse occupate dagli utenti quando un
loro processo fallisce.
DBWR(Database Writer): gestisce la cache dei blocchi e del dizionario.
LGWR(Log Write): gestisce la scrittura sul file in linea del registro di REDO
del relativo buffer in memoria.
CKPT (checkpoint): si occupa di inserire nei file dati e nel dizionario dati i
checkpoint: marcatori che garantiscono la sicurezza degli aggiornamenti
effettuati prima di un dato istante. In questo modo il ripristino di un database
sarà necessario solo per le operazioni eseguite dopo l’ultimo checkpoint.
PGA
SGA
Cache
blocchi
disco
Buffer
registro
REDO
Cache
dizionario
dati
Pool SQL
PGA
Utente I
SMON
PGA
Utente II
PMON
CHKPT
RECO
ARCH
DBWR
ARCH: se il sistema funziona in modalità ARCHIVELOG il processo si
occupa di creare un backup dei file creati da LGWR prima che quest’ultimo
li sovrascriva.
LGWR
RECO: risolve i fallimenti delle transazioni sui database distribuiti
File dati
Oracle
7
Oracle
File dizionario
File registri
REDO in linea
File backup
registri REDO
8
Struttura interna dei dati
I
L’elemento principale di suddivisione logica dei dati memorizzati all’interno
di un database è il tablespace.
Ogni database ha almeno un tablespace SYSTEM; ogni tablespace è
costituito da uno o più file che possono appartenere a un solo tablespace.
È consigliabile memorizzare gli oggetti di un database in più tablespace per:
•
•
•
•
Rispettare la separazione logica delle informazioni memorizzate
Ridurre le dimensioni dei singoli tablespace
Ridurre il carico di I/O dei singoli dispositivi di disco
Ridurre il rischio di perdite di dati causate da guasti
Tablespace
SYSTEM
Secondo
Tablespace
Struttura interna dei dati
II
Una corretta suddivisione degli oggetti del DB potrebbe essere la seguente:
Tablespace SYSTEM
• Tabelle del dizionario dati (appartenenti all’utente SYS)
• Segmento di rollback
Tablespace DATA
• Tabelle dei dati degli utenti
Tablespace INDEXES
• Indici relativi ai dati memorizzati nel tablespace DATA
Tablespace TOOLS
• Tabelle contenti il codice delle applicazioni: trigger e stored procedure
Terzo
Tablespace
Tablespace TEMP
• Informazioni, dinamiche e temporanee, utilizzate durante l’esecuzione
di operazioni sui dati del database (es. join, ordinamenti, select distinct,
union, ecc.)
Data file
Altri tablespace che potrebbero essere aggiunti modificando la precedente
suddivisione sono:
Tablespace RBS
• Informazioni che permettono di gestire le operazioni di rollback delle
transazioni (non più memorizzate nel tablespace SYSTEM).
Tablespace USERS
• Oggetti degli utenti nei database di sviluppo.
Oracle
9
Oracle
10
NET8
I
NET 8 (chiamato in versioni precedenti SQL*Net) è lo strumento utilizzato
dai database ORACLE per comunicare in rete ed è utilizzato sia per le
connessioni server-server che client-server.
NET8
II
Il collegamento a una istanza è gestito tramite processi LISTENER che
risiedono su ogni HOST e gestiscono il collegamento alle istanze:
• La connessione tramite NET 8 è basata su TNS (Transparent Network
Substrate) che risolve tutti i problemi di connessione a livello server.
Istanza
A
• NET 8 è indipendente dal protocollo di comunicazione utilizzato (es.
TCP/IP, TCP/IP with SSL, SPX).
Istanza
B
Istanza
C
• Ogni oggetto in una rete ORACLE è individuato da un nome univoco
(FQON Fully Qualified Object Name) composto da:
Istanza
D
listener.ora
Nome dell’host - Nome dell’istanza - Proprietario - Nome dell’oggetto
Listener I
Listener II
Le parti relative al server e all’istanza del nome FQON vengono identificate
per mezzo di un descrittore di connessione (identificato tramite un sinonimo
detto nome di servizio) che specifica:
• Il protocollo di comunicazione
• Il nome dell’host
• Il nome dell’istanza da utilizzare (SID System IDentifier)
• Parametri aggiuntivi di configurazione
####################################
# TNSNAMES.ORA Configuration File:
# F:\oracle\ora81\NETWORK\ADMIN\tnsnames.ora
####################################
DB1 =
(DESCRIPTION =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = gora)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = gora)(PORT = 1521))
)
)
(CONNECT_DATA = (SERVICE_NAME = DB1))
(CONNECT_DATA = (SERVICE_NAME = DB1))
)
)
Nome di
servizio
Descrittore di
servizio
OMERO_BACCO08.CSR.UNIBO.IT =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = bacco.csr.unibo.it)(PORT = 1521))
)
(CONNECT_DATA = (SID = omero)(SERVER = DEDICATED))
)
Oracle
11
Ogni LISTENER si pone in ascolto per le connessioni relative a un insieme
di istanze. Quando un client o un altro HOST provano a connettersi a una
istanza il listener preposto gestisce la connessione. L’insieme dei processi
listener attivi su un host e l’insieme delle istanze che ognuno gestisce sono
specificati nel file listener.ora. che contiene:
• L’elenco dei listener attivi sull’host e i parametri per la connesione.
• L’associazione delle istanze ai listener.
• Altre informazioni relative all’ottimizzazione dei collegamenti (es.
bilanciamento del carico dei listener).
Oracle
12
NET8
II
I file del database
I principali file in cui sono mantenute informazioni relativamente a uno
specifico database (DB) sono:
Nel seguito è riportato un esempio per il file listener.ora
# LISTENER.ORA Network Configuration File: F:\oracle\ora81\network\admin\listener.ora
# Generated by Oracle configuration tools.
I file di controllo: gestiscono l’architettura fisica del db. Memorizzano le
informazioni di controllo sui file del db e vengono utilizzati per gestirne
la coerenza interna. Vista l’importanza di questi file ne vengono
conservate più copie che dovrebbero essere memorizzate in dischi distinti.
LISTENER1 =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = gora)(PORT = 1521))
)
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))
)
)
)
SID_LIST_LISTENER1 =
(SID_LIST =
(SID_DESC =
(SID_NAME = PLSExtProc)
(ORACLE_HOME = F:\oracle\ora81)
(PROGRAM = extproc)
)
(SID_DESC =
(GLOBAL_DBNAME = DB1)
(ORACLE_HOME = F:\oracle\ora81)
(SID_NAME = DB1)
)
(SID_DESC =
(GLOBAL_DBNAME = DW1)
(ORACLE_HOME = F:\oracle\ora81)
(SID_NAME = DW1)
)
)
Oracle
I
F:\oracle\oradata\DB\Controlxx.ctl
I file dati: i dati del db vengono memorizzati in appositi file con
estensione .dbf. I nomi dei file riportano il nome del tablespace a cui
appartengono:
F:\oracle\oradata\DB\Systemxx.dbf
Il file di configurazione: contiene i parametri di configurazione del db e
viene letto in fase di inizializzazione dei processi ad esso correlati.
Lista listener
attivi sull’host
F:\oracle\admin\DB\pfile\init.ora
Lista istanze
associate a
LISTENER1
I file relativi ai parametri NET 8: contengono i parametri relative alle
informazioni per gestire il protocollo NET 8; in particolare i nomi dei
listener attivi sull’host e i SID dei diversi db
D:\oracle\ora81\network\ADMIN\tnsnames.ora
D:\oracle\ora81\network\ADMIN\listener.ora
13
Oracle
14
I file del database
II
Per semplificare la gestione del database tutti i file ad esso associati
dovrebbero essere memorizzati in directory create appositamente per quel
db:
I tool di accesso
ORACLE 8i propone un’ampia suite di tool per l’accesso ai dati,
l’amministrazione del sistema e lo sviluppo di applicazioni. In particolare:
F:\oracle\
• DBA Studio: amministrazione e controllo delle caratteristiche dei
database.
• Database Configuration Assistent: creazione e configurazione
assistita dei database.
F:\oracle\admin\DB
F:\oracle\oradata\DB
• SQLPlus Worksheet: interrogazione dei database.
F:\oracle\admin\DB\pfile
Anche la struttura delle directory del DBMS segue una precisa struttura
ereditata dalle prime versioni nate per sistemi UNIX.
Oracle
D:\oracle\ora81\Ora81
\ODBC
• NET8 Configuration Assistent: configurazione
caratteristiche di rete.
guidata
delle
• SQLLoader: caricamento, importazione, esportazione dati.
D:\oracle\ora81
D:\oracle\ora81\Or
a81\bin
• NET8 Assistent: amministrazione e controllo delle caratteristiche di
rete.
D:\oracle\ora81\Net
work\ADMIN
15
Oracle
16
Lo schema di un database
I
L’insieme degli oggetti che appartengono a un utente si chiama schema:
Lo schema di un database
II
L’insieme degli oggetti che appartengono a un utente si chiama schema:
• Tabelle: sono i principali contenitori dei dati del database.
• Viste: forniscono una visione parziale dei dati contenuti in una o più
tabelle e possono essere pensate come delle interrogazioni sulle tabelle
stesse.
• Viste materializzate: memorizzano dati ridondanti ottenuti dai dati
presenti nel database stesso. Vengono utilizzate principalmente in
applicazioni di data warehousing, database distribuiti e mobile
computing per memorizzare i dati maggiormente richiesti dalle
applicazioni.
• Dimensioni: codificano delle relazioni gerarchie tra coppie di attributi.
• Indici: sono lo strumento di base per il miglioramento delle
performance. Tra quelli messi a disposizione da ORACLE i più
comunemente utilizzati sono i B+-Tree e i Bitmap.
• Cluster: indicano insiemi di tabelle memorizzate assieme per motivi
prestazionali.
• Procedure: sono blocchi di istruzioni PL/SQL memorizzatoe nel
dizionario dei dati e richiamabili dalle applicazioni. Le procedure
permettono di memorizzare in un database le logiche applicative
utilizzate frequentemente.
• Funzioni: come le procedure sono composte da blocchi di istruzioni
PL/SQL. A differenza delle prime possono restituire dei valori al
programma chiamante.
• Package: riuniscono le funzioni e le procedure in raggruppamenti
logici.
• Trigger: sono procedure che si eseguono al verificarsi di un evento
nel database.
• Sinonimi: semplificano l’identificazione degli oggetti (es. nei database
distribuiti) e vengono utilizzati per motivi di sicurezza (rendono
trasparente la locazione di un oggetto o il suo proprietario.
• Privilegi e ruoli: definiscono le modalità di accesso di un utente a un
oggetto del db.
• Sequenze: vengono utilizzate per semplificare il lavoro del
programmatore e forniscono un elenco sequenziale di valori univoci.
Oracle
17
Oracle
18
Gli utenti
I
I privilegi
L’accesso a un database ORACLE è basato sul concetto di utente
identificato da un username e da una password.
Per ogni utente è definito un insieme di parametri che ne definiscono le
caratteristiche:
Username: definisce univocamente l’utente all’interno del sistema.
Password: realizza il principale meccanismo di verifica dell’identità
dell’utente.
Tablespace di default: è il tablespace in cui vengono salvati gli oggetti
creati nello schema.
I
Avere un account (essere un utente) su un database non è di per se
sufficiente a eseguirvi operazioni poiché questa possibilità varia in base
all’insieme di privilegi che l’utente possiede.
Un privilegio definisce la possibilità di eseguire un certo tipo di operazione.
I privilegi possono essere definiti:
• A livello di sistema: vale per tutti gli oggetti del tipo indicato. Per
concedere un privilegio di sistema è necessario avere abilitato il
privilegio WITH ADMIN OPTION.
• Su uno specifico oggetto: vale per lo specifico oggetto indicato. Per
concedere un privilegio di sistema è necessario avere abilitato il
privilegio WITH GRANT OPTION.
Tablespace temporaneo: è il tablespace in cui vengono salvati i
segmenti temporanei utilizzati durante le transazioni.
grant select on Impiegato to
GOLFARELLI with grant option;
Quota: limita la dimensione massima occupabile dagli oggetti creati
dall’utente.
Profilo: specifica il profilo dell’utente.
grant select on Impiegato to ROSSI;
Ruolo: definisce i ruoli dell’utente.
Le caratteristiche e i privilegi di un utente sono validi solo per il database a
cui l’utente appartiene. Esistono però degli utenti, detti Enterprise User, le
cui caratteristiche e i cui privilegi sono validi in tutti i database del sistema. I
privilegi di un Enterprise User vengono definiti in modo centralizzato in una
specifica directory. In questo modo si evita confusione nella confusione delle
caratteristiche di questi utenti.
Oracle
19
In un database, tutti gli oggetti su cui un utente ha dei privilegi formano lo
schema dell’utente.
Oracle
20
I privilegi
II
La tabella mostra alcuni dei privilegi di sistema assegnabili in base al tipo di
oggetto.
Privilegio
Consente di…
Indici
CREATE INDEX
CREATE ANY
INDEX
DROP ANY INDEX
Procedure
CREATE
PROCEDURE
CREATE ANY
PROCEDURE
ALTER ANY
PROCEDURE
Profili
CREATE PROFILE
ALTER ANY ROLE
Ruoli
CREATE ROLE
ALTER ANY ROLE
Tabelle
CREATE ANY
TABLE
ALTER ANY
TABLE
SELECT ANY
TABLE
Altre
SYSDBA
SYSOPER
Oracle
Creare nello schema di colui che assegna il privilegio un indice
sulle proprie tabelle.
Creare in ogni schema, ad eccezione di quello di SYS un indice
di dominio o un indice su qualsiasi tabella.
Cancellare gli indici di ogni schema ad eccezione di SYS.
Creare nello schema di colui che assegna il privilegio una
procedura o funzione.
Creare nello schema di colui che assegna il privilegio una
procedura o funzione.
Modificare procedure e funzioni in qualsiasi schema a
esclusione di quello di SYS.
Creare dei profili.
Alterare i profili.
Creare i ruoli.
Modificare i ruoli.
Creare tabelle in ogni schema ad eccezione di SYS.
Modificare una tabella o una vista dello schema.
Eseguire interrogazioni su tabelle o viste in qualsisi schema ad
eccezione di SYS.
Eseguire le operazioni di STARTUP e SHUTDOWN.
Eseguire le operazioni di STARTUP, SHUTDOWN,
ALTERDATABASE OPEN/MOUNT/BACKUP.
21
I privilegi
II
La tabella mostra i privilegi assegnabili agli oggetti e i tipi di oggetti per cui essi hanno senso. L’unico utente ad
avere sempre tutti i privilegi su un oggetto è il proprietario.
Privilegio
ALTER
DELETE
EXECUTE
INDEX
INSERT
READ
REFERENCES
SELECT
UPDATE
Oracle
Tabelle Viste Sequenze Procedure
•
•
Viste
Directory Librerie Tipi definiti
materializ.
dall’utente
•
•
•
•
•
•
•
•
•
•
Tipi
Indici
•
•
•
•
•
Operatori
•
•
•
•
•
22
•
I Ruoli
Profili
Per semplificare la gestione dei privilegi è possibile definire dei ruoli ossia
degli insiemi di privilegi che definiscono un tipo di utente.
I profili vengono utilizzati per limitare le quantità di risorse del sistema e del
database utilizzabili da un utente.
I ruoli sono definibili in modo personalizzato ma ORACLE ne fornisce
alcuni di default.
Risorsa
SESSIONS_PER_USER
RUOLO
CONNECT, RESOURCE e DBA
DELETE_CATALOG_ROLE
EXECUTE_CATALOG_ROLE
SELECT_CATALOG_ROLE
EXP_FULL_DATABASE
IMP_FULL_DATABASE
AQ_USER_ROLE
AQ_ADMINISTRATOR_ROLE
SNPAGENT
RECOVERY_CATALOG_OWNER
HS_ADMIN_ROLE
SCOPO
Vengono utilizzati per compatibilità con le
precedenti
versioni.
Potrebbero
essere
abbandonati nelle versioni future quindi è
conveniente sostituirli con ruoli più specifici.
Consentono di accedere alle viste esportate del
dizionario dati e ai pacchetti.
Consentono di fruire delle funzionalità
importazione ed esportazione.
Utilizzati per sfruttare le modalità avanzate
interrogazione.
È il ruolo utilizzato da OEM.
Consente di utilizzare un utente che possieda
catalogo di ripristino.
Utilizzato da amministratori per sfruttare
funzionalità Oracle Heterogeneous Services.
di
di
un
le
Come nel caso degli utenti è possibile definire dei ruoli le cui caratteristiche
sono valide per tutti i database del sistema, si parlerà in questo caso di
Enterprise Role. La definizione di un Enterprise Role viene fatta definendo i
parametri in una specifica directory.
Descrizione
Il numero di sessioni simultanee che un utente
può avere in un’istanza.
CPU_PER_SESSION
Il tempo di CPU che una sessione può utilizzare.
CPU_PER_CALL
Il tempo di CPU che un’analisi o un’esecuzione
possono utilizzare.
CONNECT_TIME
Il numero di minuti per cui una sessione può
rimanere connessa al database.
IDLE_TIME
Il numero di minuti per cui una sessione può
rimanere connessa al database senza utilizzarlo
attivamente.
LOGICAL_READS_PER_SESSION Il numero di blocchi del database che possono
essere letti in una sessione.
LOGICAL_PER_CALL
Il numero di blocchi del database che che
un’analisi o un’esecuzione .
PRIVATE_SGA
La quantità di spazio privato che una sessione
può allocare nel Shared SQL Pool della SGA.
COMPOSITE_LIMIT
Un limite composto basato sui precedenti.
FAILED_LOGIN_ATTEMPS
Il numero di tentativi di connessione
consecutivamente falliti dopo cui l’account viene
bloccato.
PASSWORD_LIFE_TIME
Il numero di giorni di validità della password.
PASSWORD_REUSE_TIME
Il numero di giorni che devono trascorrere prima
che la password possa essere riutilizzata.
PASSWORD_REUSE_MAX
Il numero di password da cambiare prima che
una già usata possa essere riutilizzata.
PASSWORD_LOCK_TIME
Numero di giorni per cui resta bloccato un
account se si supera
FAILED_LOGIN_ATTEMPS.
PASSWORD_GRACE_TIME
La lunghezza del periodo durante il quale una
password scaduta può essere cambiata.
PASSWORD_VERIFY_FUNCTION Il nome di una funzione utilizzata per verificare
la complessità della password.
Se in un database non viene creato alcun profilo, verrà utilizzato quello di
default che prevede risorse illimitate per tutti gli utenti.
Oracle
23
Oracle
24
Il Data Dictionary
I
Il cuore di un database Oracle è il data dictionary che descrive
completamente la struttura del database tramite un insieme di tabelle.
Il data dictionary contiene:
•
•
•
•
•
•
•
•
La definizione di tutti gli oggetti dello schema
Lo spazio allocato per ogni elemento dagli oggetti dello schema
I valori di default per le colonne
I vincoli di integrità
I nomi degli utenti ORACLE
Privilegi e ruoli ricoperti dagli utenti
Informazioni di auditing
Le statistiche sui dati
Il Data Dictionary
II
Il data dictionary ha tre utilizzi primari
• Oracle accede al data dictionary per trovare le informazioni relative
agli utenti, agli schemi e alle strutture di memorizzazione.
• Oracle modifica il data dictionary ogni volta che un’istruzione del
DDL viene eseguita
• Ogni utente può accedere al data dictionary (con modalità read-only)
per recuperare le informazioni relative al database.
Le viste utilizzate dagli utenti per accedere al data dictionary si
suddividono in:
Il data dictionary è memorizzato nel tablespace SYSTEM, le sue tabelle, di
proprietà di SYS, sono in sola lettura per tutti gli altri utenti del database.
La struttura del data dictionary è composta da:
ALL_: sono viste create nella prospettiva di tutti gli utenti. Queste viste
contengono informazioni relative a oggetti, diversi dai propri, a cui gli
utenti hanno accesso mediante GRANT espliciti, privilegi e ruoli.
Esempio: “Tutti gli oggetti a cui ho accesso”:
SELECT owner, object_name, object_type FROM ALL_OBJECTS;
Tabelle di base: sono le tabelle che memorizzano le informazioni vere e
proprie in forma normalizzata. Vista la loro complessa struttura sono
normalmente lette e scritte solo da ORACLE.
Viste: riassumono le informazioni memorizzate nelle tabelle di base in modo
da renderle più facilmente fruibili agli utilizzatori.
USER_: sono le viste create nella prospettiva del singolo utente. Fanno
quindi riferimento agli oggetti propri dell’utente (es. oggetti dello schema,
grant, ecc.) e quindi mostrano un sottoinsieme dei dati delle viste ALL_.
Esempio: “Tutti gli oggetti del mio schema”:
SELECT object_name, object_type FROM USER_OBJECTS;
DBA_: possono essere interrogate solo dal DBA o da chi possiede il
privilegio SELECT ANY TABLE. Forniscono una visione globlale
dell’intero database
Oracle
25
Oracle
26
Static Data Data Dictionary Views
• Le viste ALL_, DBA_ e USER_ sono dette statiche poiché il loro
contenuto cambia solo a fronte di un cambiamento dei dati del data
dictionary.
• Nel seguito sono elencate alcune delle tabelle su cui lavoreremo. Per
una descrizione completa del loro contenuto si veda il manuale Oracle
8i Reference. La sintassi ??? indica che le tabelle sono disponibili sia
in versione USER che ALL.
???_IND_COLUMNS: mantiene le informazioni sulle colonne delle
tabelle in cui sono costruiti indici
???_IND_TABLES: mantiene le informazioni sulle tabelle in cui sono
costruiti indici
Dynamic Performance Tables
• Sono continuamente aggiornate mentre il sistema è in funzionamento e
contengono principalmente informazioni relative alle performance.
• Sebbene siano percepite come tali, non sono memorizzate come tabelle
nell’accezione relazionale del termine e non possono essere interrogate
mediante operazioni di raggruppamento, join e ordinamento
• Sono identificate dal prefisso V_$ ma il loro sinonimo pubblico
(interrogabile) è V$
• Nel seguito sono elencate alcune delle tabelle. Per una descrizione
completa del loro contenuto si veda il manuale Oracle 8i Reference.
V$TRANSACTION: lista delle transazioni attive
V$SESSION: lista delle sessioni attive
???_TAB_COLOLUMNS: mantiene le informazioni sulle colonne
delle tabelle
???_TAB_COL_STATISTICS: mantiene le statistiche sulle colonne
delle tabelle
V$LOCK: lista dei lock in atto
V$SGA: descrizione della dimensione dell’area SGA
V$SQL: informazioni sull’area condivisa SQL
???_TABLESPACES: descrive i tablespace accedibili dall’/dagli
utente/i
???_ROLE_PRIVS: descrive i ruoli disponibili all’/agli utente/i
???_COL_PRIVS: descrive i privilegi disponibili all’/agli utente/i
Oracle
27
Oracle
28
Data Type
I
Ogni valore manipolato da ORACLE deve essere associato a un tipo di dato
che ne specifica le caratteristiche (es. valori ammessi, valori massimi,
minimi, ecc.)
Data Type: DATE
II
Tra i diversi tipi di dati che utilizzeremo più di frequente (vedi 2.2 Oracle8i
SQL Reference) distinguiamo:
Il tipo DATE memorizza le informazioni relative a data e orario fino al
secondo (vedi 2.14 Oracle8i SQL Reference):
• Se l’orario non viene specificata il default è 12:00:00 AM
• Se la data non specificata il default è SYSDATE (la data corrente)
• Il formato standard utilizzato per la data è specificato nella variabile di
sistema NLS_DATE_FORMAT
• Tipi di dati built-in
Funzioni per la gestione di valori di tipo DATE
- CHAR(size) stringa a lunghezza fissa definita da size < 2000.
- VARCHAR2(size) stringa a lunghezza variabile definita da size <
4000
- NUMBER(precision,scale) a virgola fissa con scale cifre
decimali e precision-scale cifre intere (es. NUMBER(3,2) → 1.24;
NUMBER(3)=NUMBER(3,0) → 122; NUMBER → floating point)
- DATE
- ROWID stringa esadecimale che contiene l’indirizzo univoco di una tupla
all’interno di una tabella.
• Tipi di dati ANSI: molti tipi di dati standard ANSI sono supportati e
convertiti in tipi di dati ORACLE
ANSI
CHARACTER(size)
CHARACTER VARYING(size)
NUMERIC(precision,scale)
INTEGER
FLOAT(size)
Oracle
ORACLE
CHAR(size)
VARCHAR(size)
NUMBER(precision,scale)
NUMBER(38)
NUMBER
29
TO_DATE(stringa[,formato]): converte un campo di testo (CHAR o
VARCHAR2) contenente una data espressa nel formato formato in un dato
di tipo DATE
VARCHAR2(50) v_string:= ’January 15, 1989, 11:00 A.M.’;
DATE v_date:= TO_DATE(p_date,’Month dd, YYYY, HH:MI A.M.’)
TO_CHAR(data[,formato]): converte un campo data contenente una data
espressa nel formato formato in una stringa di tipo VARCHAR2
SELECT TO_CHAR(HIREDATE, ’Month DD, YYYY’)
"New date format" FROM emp
WHERE ename = ’BLAKE’;
SYSDATE: restituisce la data corrente
SELECT ENAME
FROM DUAL
WHERE HIREDATE=SYSDATE;
Oracle
30
Data Type: Conversione di tipi III
Una espressione ORACLE deve essere svolta su operatori con lo stesso tipo
di dato. Nel caso in cui i tipi di dati siano diversi è necessario effettuare una
conversione che può essere implicita o esplicita.
Data Definition Language
I
E’ la porzione di SQL che permette la creazione/eliminazione degli oggetti
dello schema, i principali costrutti che utilizzeremo sono:
• Creazione di tabelle ( vedi 10.7 Oracle8iServer and SQL*Plus)
Conversioni implicite:
• Quando nelle operazioni di INSERT e UPDATE il dato da inserire
viene convertito nel tipo di dato dell’attributo corrispondente.
• Quando viene utilizzata una funzione SQL o un operatore con un
parametro di tipo diverso da quello del valore che viene fornito in
input, Oracle converte il tipo di dato del valore in quello del parametro.
• Quando viene utilizzato un operatore di comparazione tra due valori di
tipi diversi. Oracle converte il tipo di uno dei due operandi.
CREATE TABLE nometabella (
nomecol DATATYPE,
nomecol DATATYPE,
nomecol DATATYPE,
PRIMARY KEY (nomecol,…,nomecol)
[,FOREIGN KEY (nomecol,…,nomecol)
REFERENCES nometabella (nomecol,…,nomecol)];
dove DATATYPE è uno dei tipi di dati previsti da ORACLE
SELECT sal + ’10’ FROM emp;
• Eliminazione di tabelle (vedi 11.7 Oracle8iServer and SQL*Plus)
SELECT ename FROM emp WHERE empno = ’7936’;
SELECT ename FROM emp WHERE hiredate = ’12-MAR-1993’;
DROP TABLE nometabella;
• Creazione di sequenze (vedi 9.157 Oracle8iServer and SQL*Plus)
Conversioni esplicite:
CHAR→DATE: TO_DATE
CREATE SEQUENCE nomesequenza START WITH primovalore
INCREMENT BY incremento;;
CHAR→NUMBER: TO_NUMBER(stringa[,formato]) converte stringa
tipo CHAR o VARCHAR2 in un numero di tipo NUMBER
• Eliminazione di sequenze (vedi 11.3 Oracle8iServer and SQL*Plus)
DROP SEQUENCE nomesequenza;
NUMBER→CHAR:
TO_CHAR(val[,formato])
converte val di tipo
NUMBER in una stringa di tipo VARCHAR2.
Oracle
(ATTENZIONE: per reinizializzare una sequenza a un valore diverso da quello corrente
è necessario e ricrearla ex-novo)
31
Oracle
32
Data Definition Language
II
• Creazione di indici (vedi 11.7 Oracle8iServer and SQL*Plus)
CREATE INDEX [UNIQUE,BITMAP] nomeindice
ON nometabella (nomecol,…,nomecol);
• Eliminazione di indici (vedi 10.136 Oracle8iServer and SQL*Plus)
DROP INDEX nomeindice;
• Creazione di procedure (vedi 9.132 Oracle8iServer and SQL*Plus)
CREATE [OR REPLACE] PROCEDURE nomeprocedura
[(nomepar DATATYPE,…, nomepar DATATYPE)] IS
Blocco codice PL-SQL;
Oracle
33