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