Panoramica Oracle Oracle è il leader di mercato in ambito di RDBMS di fascia alta, ed è un prodotto commerciale non open source. E’ disponibile su varie piattaforme (fra cui Linux e Windows e MAC) ed è ottimizzato per ospitare grandi quantità di dati offrendo funzionalità evolute. Vista l’elevata quantità di risorse che richiede viene installato in DB server dedicati, tipicamente il LAN con l’accesso effettuato da applicazioni client server intranet e attraverso WEB services o reverse proxy dalla DMZ, anche se, tramite opportuna configurazione è possibile utilizzarlo anche per l’accesso diretto da internet con autenticazioni evolute quali SSL, PKI etc… Struttura fisica Un RDBMS Oracle è fatto, come tutti da un insieme di processi e da un insieme di dati. I processi, a seconda delle richieste che ricevono e/o dei propri compiti di routine, interagiscono coi dati memorizzati nei file fisici non direttamente ma caricandoli prima in memoria RAM in un’area detta SGA o System Global Area. L’insieme di processi in esecuzione, che si comportano in un certo modo a seconda dei valori dei parametri di avvio contenuti in un opportuno file detto init.ora, e della SGA costituisce un’entità che mette in comunicazione utente e dati ovvero una manifestazione di questi che di solito è chiamata istanza ed è indicata da un nome univoco detto SID. Un’istanza per funzionare deve riferirsi a dei file fisici ma non è detto che per ogni istanza ci siano dei file fisici, in quanto sono anche possibili soluzioni cluster dove due istanze diverse installate su due server (ad esempio Blade) operano sugli stessi file di dati che risiedono sulla stessa Storage Area Network. Ancora se è vero che un’istanza ha bisogno di un server su cui girare non è detto che debba essere per forza l’unica, anche se a dire il vero quello di una sola istanza con file di dati solo propri risiedente su un server dedicato (come nella figura precedente) è quello più comune. Processi di gestione I processi principali (che possiamo vedere tramite il task manager su Windows o con un comando tipo “ps –ax” su Linux) sono i seguenti: Processo SMON PMON DBWR LGWR CKPT ARCH RECO Descrizione Avvio del DB, gestione estensioni libere, pulizia DB. Ripulisce i processi falliti dagli utenti rendendo disponibili le risorse Scrive sui file di dati i blocchi modificati contenuti nella area SGA Gestisce la scrittura dei file di Redo Log Facilita il ripristino scrivendo ad ogni checkpoint i dati relativi ai blocchi modificati Gestisce la scrittura ciclica dei file di Log Recupera le transazioni fallite Nel funzionamento ciclico questi processi non scrivono solo file di dati ma anche altri file di sistema ovvero: - File di Redo Log Control Files File di tracciamento I primi due gruppi di files sono indispensabili per il funzionamento dell’RDBMS che senza questi (ad esempio se vengono cancellati accidentalmente) non può neanche partire. I file di Redo Log memorizzano il codice SQL di tutte le operazioni di modifica dei dati che arrivano al server. In pratica all’invio del comando da parte del client si succedono le seguenti fasi: - il comando viene scritto nel file di Redo Log corrente il comando viene lanciato sulle righe interessate Questi file sono in numero scelto al momento dell’installazione e successivamente modificabile. Vengono scritti ciclicamente di modo che, se non sono attivate gestioni particolari (ARCHIVELOG, vedi più oltre) il contenuto più vecchio viene via via perso. Dato che contengono liste di comandi possono essere utilizzati per il backup o il recupero del database. I Control Files, come i Redo Log vengono di continuo scritti dai processi di gestione ma servono per contenere informazioni utilizzate per mantenere la coerenza interna. Sono anch’essi utilizzati nel recovery, essenzialmente in quello fisico on line (vedi più oltre). I file di tracciamento infine contengono semplicemente traccia di errori o eventi significativi. Sono nient’altro che comunissimi file di log come normalmente intesi (ovvero se anche si cancellano, magari dopo averli guardati, non succede niente). File del Database I file in una macchina che ospita software oracle server sono normalmente organizzati a partire da una opportuna cartella, associata alla variabile di ambiente ORACLE_BASE. Nella ORACLE_BASE si trovano tante ORA_HOME quante sono le versioni del server, di norma una. La ORA_HOME contiene tutti gli eseguibili ed i file di configurazione principali di estensione “.ora”. Insieme alla ORA_HOME vi sono normalmente altre due cartelle admin ed oradata. La prima contiene una sottocartella per ogni istanza dove si trovano i file di trace e il corrispondente initXXX.ora (dove XXX=SID Istanza=es. ORCL1). La seconda contiene allo stesso modo una cartella per istanza e dentro i vari file ovvero: - file di dati (tipicamente nominati myTABLESPACEnn.dbf) file di log (REDOnn.log) control files (CONTROLnn.ctl) Abbiamo già accennato ai file di log e di controllo, parliamo ora meglio dei file di dati. Le TABLESPACES sono in pratica raggruppamenti logici di file di dati : in pratica non esiste alcun oggetto tablespace su disco ma solo file di dati che sono gestiti con politiche comuni, che sono appunto i parametri della tablespace di cui fanno parte. Alcuni esempi di queste politiche sono: - la posizione fisica il comportamento quando viene chiesto nuovo spazio il comportamento quando devono essere cancellati degli oggetti ..etc. I datafile sono divisi in SEGMENTI che sono la controparte fisica degli oggetti come tabelle, indici etc… Ogni segmento è composto da ESTENSIONI ovvero pezzi di unità di allocazione elementari detti BLOCCHI. In pratica si ha un’organizzazione dello spazio secondo questi livelli: Un’organizzazione così complessa è utile per poter ottenere il massimo delle prestazioni, ad esempio: - raggruppando oggetti con caratteristiche simili in tablespaces in modo da poter gestire l’accesso parallelo memorizzandoli su HD diversi; configurare la grandezza di blocchi ed estensioni a seconda di buffer del SO e dimensioni degli oggetti e quantità di dati che vengono aggiornati etc… Un esempio di struttura può essere questo: Dove ORA_BASE = D:\Oracle ed ORA_HOME=Ora92 e dove si suppongono presenti due istanze di SID ORCL1 e ORCL2 sulla macchina. Questa struttura è in realtà solo un esempio perché di norma conviene posizionare le tablespaces (e talvolta i datafiles all’interno delle varie tablespaces) in posizioni diverse ad esempio per poter sfruttare l’accesso contemporaneo alle informazioni posizionate in due HD diversi da parte dei relativi controller. Come detto in precedenza la controparte fisica degli oggetti sono i segmenti. Esistono tipi diversi di segmenti a seconda delle caratteristiche dell’oggetto corrispondente. I principali tipi sono questi: - TABLE INDEX ROLLBACK TEMPORARY Backup Oracle offre varie modalità di backup, ovvero: - backup logico backup fisico off line (o “a freddo”) backup fisico on line (o “a caldo”) Il backup logico viene attuato mediante l’utilità EXP. E’ possibile esportare anche solo alcuni oggetti, oltrechè ovviamente un utente o l’intero DB. Il suo complementare è l’utility IMP che a partire dai dump in ASCII generati da EXP ricrea gli oggetti in questione. Con l’uso combinato di EXP ed IMP è possibile anche esportare gli oggetti da un utente e importarli in un altro. Se è buona norma far seguire l’EXP logico ad uno stop (e ovviamente nel suo caso un riavvio altrimenti non sarebbe possibile accedere ai dati!) nel caso del backup fisico off line è obbligatorio farlo seguire ad uno stop. In pratica si arresta il DB si copiano i file in un posto “sicuro” e si fa ripartire. Il backup fisico on line presuppone l’utilizzo della modalità ARCHIVIELOG ovvero il salvataggio completo di tutto ciò che viene scritto nei log. Per lo meno a partire da un precedente backup corente (magari ottenuto anche in modalità off line). In pratica succede che se si è attivata la modalità ARCHIVIELOG il processo ARCH crea a partire dalle righe che continuano ad essere gestite a rotazione nei LOG files degli opportuni files .arc. Questi files possono poi essere tradotti in files fisici di backup con istruzioni sqlplus di questo tipo: alter tablespace myTABLESPACE begin backup; D:\...\ORCL1myTABLESPACE0*.dbf D:\backup\ORCL1\ alter tablespace myTABLESPACE end backup; Da notare che anche se per il backup/recovery fisico on line non è obbligatorio (come si è visto nell’esempio precedente) l’utilizzo del programma RMAN facilita molto le cose. Per utilizzare RMAN è necessario comporre (in genere tramite procedure guidate) un opportuno catalogo di recupero. Normalmente questo catalogo è realizzato in un’istanza a parte rispetto a quella di produzione detta OEMREP e contenente un utente RMAN che viene utilizzato da ARCH per creare via via il catalogo a partire dalla informazioni che ruotano nei REDO log e nei control files. In questo contesto lanciando il programma RMAN si può ad esempio create il backup fisico dell’intero RDBMS con questo semplice comando: RMAN>RUN { Allocate channell DefaultChannel type disk ‘D:\BCK\ORCL1\d_%u_%s_%p”; Backup (database include current controlfile) } Disaster Recovery Il caso più frequente è quello di utilizzare EXP/IMP più una buona dose di inventiva anche se ovviamente lo strumento “principe” sarebbe RMAN con cui è possibile anche avere degli wizard di recupero. Da notare che RMAN mette a disposizione anche una serie di strumenti di verifica dei files che possono rilevare e rimediare molti dei possibili problemi. Ovviamente non tutti. Dialogo attraverso la rete Le modalità di dialogo possibili in ambiente oracle sono molte e non sono limitate semplicemente alla comunicazione client-server ma includono anche quella server-server essendoci un ampio supporto anche per le elaborazioni distribuite. Per ogni server (anche se non necessariamente “su” ogni server) è presente un opportuno processo detto listener il cui modo di operare è definito tramite un opportuno file listener.ora E’ costituito da due parti: - Nella prima si ha un elenco (ADDRESS_LIST) dei protocolli e degli indirizzi da cui il listener accetta connessioni; Nella seconda si ha un elenco delle istanze per cui il listener risponde; Nel dettaglio i protocolli che sono utilizzabili sono questi: - TCP/IP TCP/IP con SSL Named Pipes (Nomi Netbios) IPC (Comunicazione interprocesso : più veloce quando server e listener sono sulla stessa macchina) Per la seconda parte abbiamo quanto segue sono possibili tre tipi di configurazioni di accesso: Access Database Description Provides network access to an Oracle database instance PLSExtProc Method for PL/SQL packages to access operating system executables Executable Provides network access to operating system executables The "Database" mode is the most widely used mode and is the standard mode used by every database for connectivity. "PLSExtProc" allows PL/SQL database packages to access external programs and is configured by default for many instances. "Executable" mode allows an external program to be defined and accessed through a TNS connection. Un esempio concreto per capirsi: col seguente listato: LISTENER = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = IPC)(Key = EXTPROC)) (ADDRESS = (PROTOCOL = TCP)(PORT = 1521)) ) ) SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (SID_NAME = PLSExtProc) (ORACLE_HOME = D:\oracle\ora92) (PROGRAM = extproc) ) (SID_DESC = (GLOBAL_DBNAME = ORCL) (ORACLE_HOME = D:\oracle\ora92) (SID_NAME = ORCL) ) ) … stiamo dicendo questo: il nostro listener - ascolta sulla chiave “EXTPROC” con le funzioni del operativo locale ascolta tutto il traffico TCP in arrivo sulla porta 1521 ha un servizio di tipo Extproc di SID=PLExtProc il sui eseguibile si trova sotto D:\oracle\ora92 ha un servizio di tipo DB di SID=ORCL il sui eseguibile si trova sotto D:\oracle\ora92 Come si nota con queste informazioni il listener sa quali “porte aprire” e chi “andare a chiamare” ma non sa che ciò che ascolta ad esempio sulla porta 1521 per chi sia. Ecco perché nei pacchetti entranti deve essere presente anche il SID o in generale il riferimento ad un “metodo di denominazione” di istanze. Sono essenzialmente possibili questi tipi di metodi di denominazione: - SID Nome Servizio di Rete Nome LDAP Il client può risolvere questi nomi in modi diversi, essenzialmente dinamici (interrogando opportuni server DNS-like) o statici. I secondi sono chiaramente meno flessibili ma molto più diffusi e qui faremo riferimento solo a tali metodi. In pratica ogni client possiede in locale un opportuno file denominato tnsnames.ora che consiste in una lista di alias, o meglio di corrispondenze alias-istanze. Riferendosi all’esempio precedente avremo qualcosa del genere: DBORCL = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 172.16.1.1)(PORT = 1521)) ) (CONNECT_DATA = (SID = ORCL) ) ) EXTPROC_CONNECTION_DATA = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC)) ) (CONNECT_DATA = (SID = PLSExtProc) ) ) Questo implica che con il comando: >sqlplus utente/password@DBORCL .. si possa ottenere una shell sqlplus sul DB remoto dal client in questione. Infatti succede questo: [client] DBORCL Æ (tnsnames.ora) Æ SID=ORCL su 172.16.1.1:1521 [server] Pacchetto TCP in arrivo sulla porta 1521 per il SID=ORCL Æ (listener.ora) Æ oracle.exe Probabilmente la specifica TCP è nella parte options dell’header TCP. Fra i file necessari a livello client oltre al tnsnames.ora di cui sopra c’è anche un altro file ovvero sqlnet.ora. In questo sono contenute informazioni più globali ovvero: - l’ordine di priorità di applicazione dei metodi di denominazione tipo di autenticazione nome di dominio di default (nome servizio = SID + “.” + nome dominio) Un esempio di listato: SQLNET.AUTHENTICATION_SERVICES= (NTS) NAMES.DIRECTORY_PATH= (TNSNAMES, ONAMES, HOSTNAME) NAMES.DEFAULT_DOMAIN = WORLD Frammentazione Presenti comandi di rebuild di tabelle ed indici. Possibile inoltre definire attraverso i parametri PCTFREE e PCTUSED a livello di blocco lo spazio libero con cui il blocco viene allocato e il minimo livello di utilizzo per cui il blocco possa essere marcato come da spostare al successivo accesso. Da notare che il blocco inserisce un numero di byte iniziali diverso a seconda del tipo di segmento corrispondente all’oggetto : la conoscenza di questi valori (Oracle 9i DBA pag 180) può essere utilizzata per dimensionare in modo adeguato dimensione di datafiles ed extent nelle varie tablespaces a seconda di cosa conterranno. Struttura logica Aspetti generali Un database oracle è costituito da più utenti. Ad ogni utente sono associati dei diritti (uno o più profili) quindi una serie di operazioni possibili. I risultati di queste operazioni determinano che esisteranno: - un insieme di oggetti che l’utente ha creato (di cui è il proprietario ovvero detiene tutti i possibili diritti) un insieme di oggetti su cui l’utente ha acquisito (a seguito dell’operato proprio o di altri utenti) diritti L’insieme degli oggetti su cui un utente ha dei diritti (di vario tipo, ad esempio sola lettura oppure lettura e modifica etc..) si chiama schema. Tutto questo comporta che dal punto di vista logico il nostro database si può vedere nei seguenti due modi: Il primo dei due è incentrato sul concetto di “appartenenza”, mentre il secondo è invece basato sullo “spazio accessibile”. Da notare infatti che in uno schema possono essere presenti oggetti di più utenti o addirittura di più database utilizzando strumenti come: - sinonimi link fra database In questo modo si ha elevato supporto ai meccanismi di replica e alle elaborazioni distribuite. Una breve tabella riepilogativa prima di proseguire: Oggetto Sinonimo DBLink Sintassi CREATE SYNONYM "[DestUser]"." [DestTable]" FOR "[SourceUser] "."[SourceTable]"; Applicazione SELECT * FROM [DestTable] CREATE PUBLIC DATABASE LINK [DBLinkName] CONNECT TO [RemoteUser] IDENTIFIED BY [RemotePwd] USING '[RemoteDBAlias]' SELECT * FROM [AnyTable]@[DBLinkName] Note Da concedere prima la GRANT al [DestUser] sulla [SourceUser] .[SourceTable] Dove si è supposto di lanciare entrambi i comandi da SYSTEM oppure da un utente coi privilegi adeguati (vedi qui si seguito). [DestUser] [DestTable] [SourceUser] [SourceTable] [DBLinkName] [RemoteUser] [RemotePwd] [RemoteDBAlias] [AnyTable] = = = = = = = = = Utente destinazione del sinonimo Nome tabella nell’utente di destinazione Utente sorgente del sinonimo Nome tabella nell’utente sorgente Nome da assegnare al link Utente con cui accedere al DB Remoto da linkare Password del [RemoteUser] Conn. string che punta al DB remoto (TNSNAMES.ORA) Una qualunque delle tabelle del DB Remoto E’ evidente che l’utilità di un sinonimo è quella di far accedere con un nome “breve” un utente ad un oggetto di non sua proprietà mentre un DB link permette ad esempio di trasferire dati senza fare export ed in seguito import, ovvero di fare in modo che le modifiche appaiano sui due db contemporaneamente. Si è parlato di privilegi, spieghiamo meglio cosa sono. Ad ogni utente (e non ad ogni schema!) vengono associati dei diritti, che possono essere sugli oggetti o al limite anche sull’intero database. Per semplificare la gestione di questi diritti Oracle prevede dei “profili“ ovvero degli insiemi di privilegi. In genere per applicazioni non troppo “spinte” si usano i profili standard quali ad esempio i seguenti: - CONNECT RESOURCE DBA Ovviamente niente vieta di definirne altri secondo le proprie esigenze. Dall’incrocio fra l’utente e i profili ad esso collegati viene composto lo schema ossia, come appare a tale utente il “mondo” ovvero l’insieme di utenti e di database fra loro collegati con GRANT, SYNONYM, DBLINK. Autenticazione In Oracle sono possibili varie modalità per autenticarsi ovvero: • • • autenticazione livello utente autenticazione livello amministratore - tramite file orapwd - integrata a livello di sistema operativo autenticazione via rete (internet) La prima modalità è quella comune per gli utenti da locale (ovvero sulla stessa macchina) oppure all’interno di una rete intranet. Le password sono contenute all’interno di una tabella nella tablespace SYSTEM e sono trasmesse in chiaro nella comunicazione client/server. E’ ovvio che questo tipo di autenticazione funziona solo se il DB è aperto. Dunque affinché alcuni utenti potessero avviare o stoppare il DB era necessario pur nello stesso cotesto (locale o intranet) rendere disponibile un meccanismo ulteriore magari solo per quegli utenti privilegiati (ovvero quelli che hanno i profili di SYSDBA e SYSOPER). Questo meccanismo è la seconda modalità di cui sopra. In pratica se l’utente SYSDBA o SYSOPER (es. SYS) questo viene autenticato non leggendo il DB ma leggendo un opportuno file di password, ricreabile con l’utility orapwd. Dunque non è necessario avere alcun DB già funzionante. In alternativa è possibile utilizzare l’autenticazione integrata con sistema operativo : se l’utente che ha fatto accesso alla macchina appartiene al gruppo degli amministratori (dba in Linux, ORA_DBA in Windows) come ad esempio root oppure Administrator Oracle può ragionevolmente supporre che si tratti di un utente “fidato”. Ecco quindi che può farlo entrare senza chiedergli alcuna password ed il “celebre” comando di SQL Plus di cui nel seguente esempio: D:\temp>sqlplus /nolog SQL*Plus: Release 9.2.0.6.0 - Production on Tue Dec 2 18:10:12 2008 Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved. SQL> connect / as sysdba Connected. SQL> show user USER is "SYS" Per l’accesso via rete i meccanismi visti finora sono evidentemente poco sicuri perché non prevedono alcuna cifratura della password trasmessa (anche se la password memorizzata non è in chiaro!). Sono possibili vari meccanismi alternativi quali ad esempio: - SSL Kerberos PKI Radius Per utilizzare questi sistemi deve essere configurato opportunamente il server (ad esempio nel caso di SSL deve essere presente una opportuna riga relativa al protocollo TCPS con una porta dedicata a tale traffico). Altre funzionalità di sicurezza Agli utenti possono essere associate anche funzionalità di sicurezza avanzate come l’audit (il tenere traccia delle operazioni che fa) o il VPD o Virtual Private Database, ossia l’inserire a livello di dati delle WHERE aggiuntive che impediscano l’accesso a certe informazioni anche da client oracle o ODBC non solo da applicativo. L’audit viene attivato tramite comandi SQL e inserisce il suo output in opportune tabelle (o in files a seconda del parametro di configurazione AUDIT_TRAIL). Può essere fatto a vari livelli come mostra la seguente tabella: Audit Per Istruzione Privilegio Serve per loggare Quando un utente lancia un comando SQL di un certo tipo (indipendentemente dall’oggetto su cui lo lancia). Quando un utente utilizza un certo privilegio a lui attribuito (indipendentemente dal perché e dall’oggetto coinvolto). Quando un utente interagisce con un certo oggetto (indipendentemente dal comando SQL che lancia). Quando un utente esegue una certa operazione su un oggetto per certi valori dei dati. Oggetto Dati La tabella è SYS.AUD$ ed il suo contenuto può essere esaminato attraverso le viste DBA_AUDIT_TRAIL, DBA_FGA_AUDIT_TRAIL e DBA_COMMON_AUDIT_TRAIL. Oggetti utente Sono molti e di vario tipo alcuni esempi sono questi: - Tabella Vista Indice Trigger Store Procedure Oggetti di sistema In oracle ogni operazione DML viene incapsulata in una transazione, tanto è vero che se si lancia una qualunque istruzione di INSERT/UPDATE/DELETE e ci si scorda di dare il commit si perdono tutte le modifiche fatte. La sequenza delle operazioni con cui agisce ad esempio una transazione di UPDATE su TABELLA1 è questa: Tempo 0 1 2 (rollback) 3 (commit) TABELLA1 Stato Iniziale Valori Modificati Stato Iniziale Valori Modificati TABELLA1 (visibile) Stato Iniziale Stato Iniziale Stato Iniziale Valori Modificati ROLLBACK SEGMENT Stato Iniziale - Quando viene lanciata una transazione che coinvolge la TABELLA1 in pratica succede che Oracle non applica subito la modifica ma crea prima degli opportuni segmenti “di rollback”. Di default (modalità AUTOMATIC UNDO) questi vengono creati nella tablespace SYSTEM ma di norma vengono creati manualmente con il comando CREATE ROLLBACK SEGMENT e associati ad un’opportune TABLESPACE di UNDO per non frammentare inutilmente la SYSTEM. In ogni caso, dovunque sia, il segmento di rollback viene riempito coi dati originari mentre su questi viene applicata la modifica. Se la transazione termina con rollback i dati vengono ripresi dal segmento di rollback e riportati al posto originario, viceversa vengono lasciati i valori modificati nel segmento utente (es. TABLE). La transazione è un oggetto con una propria individualità quindi è possibile anche associare ad una transazione (come ad un qualunque altro oggetto) una propria tablespace. Questo è particolarmente utile per transazioni di massiccio caricamento dati che, se non dirette su tablespaces temporanee, introdurrebbero inutile frammentazione. E’ importante notare che questo vale per le operazioni sui dati : un DROP TABLE accidentale non sarà mai rimediabile tramite una semplice rollback. I lock sono possibili sia a livello di oggetto, che nel caso in cui l’oggetto sia una tabella a livello di record. Amministrazione Installazione L’installazione viene normalmente eseguita con l’aiuto di un opportuno programma ad interfaccia grafica e questo sia in ambiente Windows che Linux. In generale i passi fondamentali sono questi: Passo 1 2 3 4 5 6 Descrizione Creazione Utente dbowner e relativo gruppo Modifica delle variabili di ambiente del SO Modifica dei percorsi Configurazione XServer Run Installer Impostazione Avvio Automatico Windows Setup.exe Setup.exe Setup.exe Setup.exe Setup.exe Setup.exe Linux Manuale Manuale Manuale Manuale ./RunInstaller Manuale L’installer a sua volta compie i seguenti passi principali: Passo 1 2 3 4 5 5 6 7 Descrizione Scelta path, ORACLE_BASE e ORACLE_HOME Scelta del tipo di server Scelta dalla lingua DB e e del character set Scelta prodotti da installare Installazione eseguibili Configurazione script per creazione database Lancio script Configurazione Oracle.Net Da notare l’importanza fondamentale del Character Set : non è possibile importare dati da un dump fatto con un DB che gestisce i dati con un diverso set di caratteri. Riguardo al “tipo di server” le scelte più importanti riguardano ad esempio: - Server OLTP/OLAP (transazioni semplici molti utenti/poche query molto complesse) Server Dedicato/Condiviso (poche connessioni e persistenti/molte e leggere) Parametri di Memoria (SGA, PGA) Archivie Log Mode Attivato o No Operazioni comuni Start/Stop In Oracle l’istanza non è semplicemente “ferma” o “avviata” ma passa dal primo stato al secondo attraverso due stati intermedi. Sono possibili in altre parole quattro stati: Stato Stopped No Mount Mount Open Descrizione Chiuso Caricato Avviato Aperto L’avvio (ovvero il passaggio da uno stato ad un altro obbligatoriamente successivo) si fa con il comando sqlplus startup seguito dallo stato desiderato. Esempio: SQL> startup mount; Anche sullo stop del database non possibili più modalità, come mostra la seguente tabella: Il comando sql stavolta à shutdown è tutto va in modo simile al caso precedente. Ad esempio si potrà dare: Stato Descrizione Normal Attende che si disconnettano tutti gli utenti Transactional Immediate Abort Disconnette gli utenti una volta terminate le transazioni Esegue il rollback di tutte le transazioni attive e disconnette tutti gli utenti Chiude istantaneamente l’istanza fermando i servizi SQL> shutdown immediate; Avvio e stop del database possono essere fatti solo da utenti con il privilegio di SYSOPER. Listener Start/Stop Talvolta il listener si blocca. Si utilizzano in genere questi comandi (da sistema operativo) di ovvio significato: >lsnrctl start >lsnrctl stop >lsnrctl status Aggiunta/Cancellazione Datafile A livello di creazione di un datafile è possibile specificare un importante parametro di memoria che è l’autoextend. Se è ON il file una volta riempito alloca da solo il nuovo spazio, a pezzi “extent” di dimensione specificabile, eventualmente fino ad una dimensione massimo. Se è OFF invece quando il file è pieno la transazione non viene accettata e viene generato un messaggio di errore. Tipicamente vengono definite con autoextend=ON sono alcune tabelle di sistema quali SYSTEM o TEMP. Per la altre, si preferisce aggiungere datafiles quando servono. Per farlo si può usare un comando come il seguente: ALTER TABLESPACE TablespaceName ADD DATAFILE '/u01/app/oracle/oradata/ORCL/NewDataFileName.dbf' REUSE SIZE 262144K ..dove chiaramente il path è quello di un caso particolare che è stato preso ad esempio. Oppure da interfaccia grafica posizionarsi su un datafile esistente ed usare la funzionalità “Create Like”. Per cancellare un datafile occorrono i seguenti passi: - spostarne l’eventuale contenuto in un altro datafile porre il datafile offline specificando “FOR DROP” cancellare il file da sistema operativo L’istruzione di cui al primo passo è la seguente: ALTER DATABASE DATAFILE '/u01/app/oracle/oradata/ORCL/OldDataFileName.dbf' OFFLINE FOR DROP