Oracle Database 10g Administrator: OCP!

venerdì 12 dicembre 2008 alle 12:59 | Pubblicato su Oracle Certification | 1 commento
Tag: , ,

Finalmente, oggi Oracle mi ha comunicato di aver verificato il mio ” OCP Hands-On Course Requirement”. E’ stato una cosa abbastanza lunga direi. Due giorni fa via e-mail mi hanno richiesto i dati del corso che ho frequentato, comunque dopo 22 giorni finalmente posso affermare di essere OCP.

Nuovi obiettivi

giovedì 4 dicembre 2008 alle 04:15 | Pubblicato su Oracle Certification | 1 commento
Tag: ,

Poco più di un anno fa scrissi questo post in cui mi “ufficializzavo” la mia intenzione di sostenere gli esami per la certificazione Oracle. Alcuni giorni fa ho sostenuto l’esame 1Z0-043 che dovrebbe portarmi ad acquisire la certificazione Oracle Database 10g OCP. In realtà sto ancora attendendo l’approvazione del cosiddetto form “Hands-on”.

In questi giorni però sto rivedendo i miei obbiettivi, secondo la tabella di marcia dovrei cominciare a studiare Oracle 11g, ma come ho gia detto la mia azienda in questo momento non è interessata a passare a tale versione e i test e l’esperienza con un cliente che ha già provato tale migrazione non incoraggiano a farlo.

Rivedendo la pagina delle certificazioni Oracle sui database, ho visto che per la 10g il numero di certificazioni possibili si è arricchito. Vista la mia passione/propensione per Linux, interessamente mi sembra la certificazione “Managing Oracle on Linux“. Sto valutando seriamente la possibilità di lanciarmi in questa nuova avventura, mettendo da parte 11g (almeno come certificazione).

Oracle Database 10g: Administration II (1Z0-043)

venerdì 21 novembre 2008 alle 21:24 | Pubblicato su Diario, Oracle Certification | 10 commenti
Tag: , , ,

Ebbene si, dopo mesi e mesi di lunga preparazione ieri finalmente ho sostenuto e superato l’esame Oracle (codice 1Z0-043) necessario per ottenere la certificazione OCP. L’esame, secondo il percorso stabilito da Oracle  costituisce il secondo passo (dopo aver conseguito l’OCA) per ottenere ufficialmente la certificazione; il primo passo è la frequentazione di un corso fra un elenco stabilito. In aprile frequentai il corso “Oracle Database 10g: Administration Workshop II Ed 3“. Ieri sera ho compiuto il terzo passo, ovvero la sottomissione del “Hands On Course Requirement Form“, cosa che pensavo fosse banale, invece ha richiesto quasi mezz’ora :) . Per quel che ho capito io si tratta solo di una formalità burocratica con cui si comunica a Prometric (la società a cui si appoggia Oracle per la gestione degli esami di certificazione) gli estremi del corso frequentato (ma Oracle non è in grado di gestire autonomamento sto scambio di informazioni???).

L’esam è andato meglio di quanto mi aspettassi, il mio punteggio è stato del 92%, il che significa che ho sbagliato 6 domande su 70. Purtroppo a parte una domanda che sono sicuro di aver sbagliato non so quali siano le altre domande sbagliate. Oracle nel rapporto sull’esito dell’esame riporta solo gli argomenti che consiglia di rivedere (sui quali quindi si sono sbagliate le risposte). Nel mio caso sono:

  1. Perform transaction level recovery using Flashback Transaction query
  2. Use different storage options to improve the performance of queries
  3. Recover the control file
  4. Explain reasons for incomplete recovery

Per quanto riguarda il punto 2. sono abbastanza sicuro si riferisca alla domanda che mi ricordo e che sono quasi sicuro di aver sbagliato. La domanda più o meno era così:

“Si deve progettare un database OLTP in cui si deve ottimizzare le prestazione nell’accesso per chiave primaria, quale struttura si deve utilizzare?:

  1. heap tables
  2. index organized tables
  3. clusters
  4. partitioned tables

Io ho risposto heap tables, l’alternativa, con il senno di poi è “index organized tables”, però non l’ho scelta perchè è vero si che in queste tabelle le prestazioni quando si fanno ricerche per chiave primaria sono ottimizzate, ma è vero che le modifiche ai dati costano. Secondo me la premessa era un po’ generica per permettere di individuare senza equivoci la risposta corretta.

Per quanto riguarda le Flashback Transaction query c’è veramente qualcosa che non riesco a ficcarmi in testa perchè anche durante lo studio mi sono reso conto che negli esercizi sbagliavo le risposte. Ho provato ad approfondire l’argomento ma evidentemente non ci sono riuscito.

Ora aspetto che Oracle vagli il mio “Hands On Course Requirement Form” (sperando rintraccino i dati sulla mia frequentazione al corso) e lo approvino. Poi se i tempi di spedizione sono gli stessi visti per l’OCA forse fra un paio di mesi riceverò a casa i documenti che ufficilazzano la mia certificazione OCP.

Oracle Globalization Support – Parte II

lunedì 14 luglio 2008 alle 14:03 | Pubblicato su Installation and Configuration, Oracle Certification | 3 commenti
Tag: , ,

La disponibilità scarsa di frammenti di tempo “libero” che superino la mezz’ora mi porta talvolta a fare dei post frettolosi, come è accaduto per il precedente. D’altra parte se non l’avessi fatto così in fretta probabilmente avrei finito per non farlo affatto.

Prima di proseguire con la panoramica di quello che oracle chiama “Globalization Support” (intendento ciò che è stato fatto per supportare linguaggi, costumi del mondo a livello di database), farò un piccolo riassunto della puntata precedente.

Un primo elemento di supporto alla globalizzazione che un DBMS deve avere è il supporto a più character set. Questo supporto serve per gestire la memorizzazione delle stringhe, del testo, per i numeri e le date non è rilante. Come ho già detto, agli albori dell’informatica moderna un charset a 7 bit come ASCII era sufficente a coprire gran parte degli utilizzi. Un suo “concorrente” fu EBCDIC forse meno noto. Con l’evolversi ed il diffondersi dell’utilizzo dei sistemi informatici i charset sono proliferati per coprire tutte le esigenze, riporto un paio di esempi,  http://www.columbia.edu/kermit/csettables.html dove sono riportate alcune tabelle, ma poi non manca la puntuale informazione della wikipedia, con la voce “Character encoding” e “Code Page“. Ad un certo punto si deciso di fare uno standard globale anche in questo campo ed è nato UNICODE (wikipedia) che ha creato UTF-8. Nel post precedente, basandomi sulla guida Oracle ho affermato che UFT-8 è arrivato alla versione 4.0, in realtà dalla wikipedia apprendo che la versione 4.0 risale all’ormai lontano 2003 e che ad oggi siamo alla 5.1 (abbastanza recente, pare aprile 2008).

Sempre nel post precedente parlando del problema che nasce dalle differenze di charset tra client e server ho fatto l’esempio dell macchina con cui lavoro, su cui è installato l’onnipresente winzoz che si presenta con una code page 850. Questa tabella include in realtà i caratteri usati nei cosiddetti paesi dell’Europa dell’Ovest. E’ un sopra insieme del charset ISO-8859-1 , così pare almeno affermare wikipedia. Essendo però entrambi charset ad un byte desumo, senza mettermi a fare il confronto che coprano lo stesso insieme di caratteri ma che usino una codifica diversa. Invece sempre wikipedia mi conferma che la code page 65001 è equivalente a UTF-8, tant’è che la pagina viene rimandata a quella di UTF-8.

Direi che tutti i riferimenti che ho citato sono sufficenti per chi volesse approfondire ulteriormente i dettagli sui charset.

Tornando al tema principale ricordo che le informazioni dettagliate sul supporto alla globalizzazione nel database oracle sono raccolte in un manuale dedicato a ciò intitolato proprio “Oracle Database Globalization Support Guide” (per 11g e qui). Di questo manuale è il caso di leggere attentamente il capitolo 5, initolato “Linguistic Sorting and String Searching” (per 11g è qui). Il capitolo è importante perchè spiega in sostanza l’utilizzo, il significato ed il settaggio dei due parametri NLS_SORT e NLS_COMP. Essi influiscono rispettivamente sul come vengono fatti gli ordinamenti delle stringhe e su come vengono fatti i confronti. Per default essi hanno entrambi il valore “binary” il che significa che l’ordinamento e il confronto delle stringhe è basato esclusivamente sulla loro codifica numerica (quindi in qualche modo dipende dal charset).

Tempo fa ho affrontato il tema delle ricerche “case insensitive” in oracle (qui e qui) , ovvero le ricerche su stringhe senza distinzione tra maiuscole e minuscole. Come ebbi modo di constatare non c’era modo di fare ricerche case insensitive con il LIKE utilizzando indici. Ebbene segnalo che su 11g invece è possibile. Infatti nel manuale, prima di questo paragrafo è cambiato la nota che prima diceva:

Note:

The SQL functions MAX( ) and MIN( ), and also the LIKE operator, cannot use linguistic indexes when NLS_COMP is set to LINGUISTIC

Che smentiva quanto diceva prima il manule, ora dice:

Note:

The SQL functions MAX( ) and MIN( ) cannot use linguistic indexes when NLS_COMP is set to LINGUISTIC.

Ed  in effetti ho fatto una prova e funziona, provare per credere.

Fino alla 10g essenzialmente i cosiddetti indici linguistici (“Linguistic Index”) servono solo per ricerche per uguaglianza e per ordinamenti.

In ogni caso, come è possibile apprendere dal manuale, sempre dal capitolo 5, oracle prevede una infrastruttura abbastanza sofisticata per gestire i vari metodi di ordinamento in uso in alcune regioni del mondo. Questa infrastruttura è implementata tramit la “Oracle NLS Runtime Library (NLSRTL). Tramite uno strumento chiamato “Oracle Locale Builder” è possibile definire delle personalizzazioni.

Per concludere ricordo le viste di sistema per controllare i settaggi “NLS”:

Sono sicuramente stato superficiale ed incompleto in questa descrizione del Supporto alla Globalizzazione nei database Oracle (Oracle Database Globalization Support) ma non poteva essere altrimenti. Per gli approfondimenti rimando al manuale ed alla pratica.

P.S. (15/07/2008)

Ieri volevo aggiungere anche un ulteriore riferimento, questo thread di discussione su CDOS in cui c’è anche un intervento di Jonathan Lewis che rimanda a due post di Richard Foote, il guru degli indici in Oracle :).

Oracle Globalization Support – Parte I

lunedì 14 luglio 2008 alle 14:07 | Pubblicato su Installation and Configuration, Oracle Certification | 2 commenti
Tag: , ,

Ieri sera, si, domenica sera (i casi della vita) sono riuscito a dedicare un’ora allo studio per l’esame OCP. Non avendo accesso diretto al volume I della “Oracle Database 10g: Administration Workshop II – Student Guide” sono balzato al volume 2 che in realtà contiene solo gli ultimi due capitoli e poi ci sono le esercitazioni pratiche. Gli ultimi due capitoli sono:

  • 15 – Database Security
  • 16 – Globalization Support

Siccome il capitolo “Database Security”  era troppo per una domenica sera sono passato al capitolo 16. Anche questo non è proprio il massimo della vita, ma fa parte del programma, quindi ho sfruttato l’innaturale pace che regnava a casa mia per affrontare questo impegno.

L’argomento è piuttosto noiso, soprattutto perchè per mia fortuna non mi sono dovuto mai scontrare con problematiche di questo tipo (a parte l’utilizzo del character set UTF8). Però essere preparati è sempre utile e ieri sera infatti ho capito e imparato cose nuove.

Character Set

Il primo elemento di supporto alla globalizzazione fornito da Oracle è il supporto a più character set (che spesso abbrevierò con la notazione charset). Il character set non è altro che una tabella di codifica di caratteri grafici (lettere, numeri, simboli, ideogrammi, …) in numeri. Questa tabella è necessaria perchè come sappiamo bene  tutti i computer elaborano solo numeri. Un esempio di charset, forse il più conosciuto è ASCII. In questo caso la tabella di codifica contiene solo 128 elementi, perchè usa solo 7 bit. Chiaramente una simile tabella è insufficente per gestire tutti i metodi di scrittura diffusi nel mondo. Pian piano sono proliferati i charset, quello di Winzoz (ops, windows, ad esempio CP1252 che copre i caratteri usati in italiano (a, b, c, é , …) poi ce ne sono un po’ emessi dall’ISO, ad esempio ISO-8859-p15 che copre i caratteri della lingua italiana e include anche il simbolo dell’euro. Questi charset sono a 8 bit (un byte) e quindi contengono ben 256 elementi. Fin che un database deve essere utilizzato sono in uno stato, quindi con un set ben delimitato di caratteri, non ci sono grandi problemi. Se invece il database è in qualche modo mondiale e deve gestire caratteri che derivano da più nazioni cominciano i problemi. Qui arriva il charset univervale, UTF-8. Si tratta di un charset a lunghezza variabile, superinsieme di ASCII. UTF-8 codifica a un byte tutti i caratteri gia presenti nella tabella ASCII,  poi codifica a 1 o 2 byte il resto dei caratteri utilizzati in europa, poi vi sono una serie di simboli e caratteri asiatici rappresentati a 3 byte, infine vi sono dei caratteri, definiti supplementari codificati con 4 byte. Vi è anche una versione UTF-16, che codifica i caratteri con 2 o 4 byte. Lo standard UTF, viene aggiornato continuamente (credo per aggiungere nuovi caratteri supportati) e attualmente siamo alla versione 4.0, supportata da Oracle e chiamata AL40UTF8. La versione precedente era la 3.2 e in oracle viene chiamata AL32UTF8.

Il grosso problema nella gestione dei charset sta nella comunicazione tra client e server. Anche i terminali che vengono usati come client a loro volta utilizzano dei charset e se questi charset sono diversi da quello usato lato server occorre fare delle conversioni. Oracle a livello  “Oracle Net” cerca di gestire in modo trasparente queste conversioni. In particolare ieri ho capito (forse) meglio cosa significa l’impostazione del charset lato client: essa viene usata da Oracle per fare la conversione, ma l’impostazine deve indicare il charset utilizzato dal terminale, altrimenti si rischia di dare ad Oracle una falsa indicazione inducendolo a fare o non fare una conversione come andrebbe fatto e facendo finire nel database dati invalidi.  Questo meccanismo non mi è ancora completamente chiaro, ma da quel che vedo in giro non sono solo. Il punto è che bisogna proprio fare attenzione alla charset usato dal programma client. Ad esempio se uso sqlplus da una finestra dos in windows e mi collego a un database con charset UTF-8 posso facilmente confondermi se uso ad esempio lettere accentate. Infatti accade che, almeno sulla macchina che uso io,  la tabella dei codici è la 850. Ora, che diavolo di tabella sia non lo so, però so che non è compatibile con UTF-8 e che vengono fuori un saccoi di casini.  Sto ancora cercando di capire bene, ma pare che la tabella 65001 sia compatibile con UTF-8.

Il charset di un database oracle viene definito al momento della creazione e salvo rari casi non è possibile fare una conversione.

NLS_LANG

Oltre le tabelle dei caratteri vi sono altri aspetti che fanno parte del supporto alla globalizzazione: la lingua dei messaggi, la lingua nelle date (i nomi dei giorni della settimana, dei mesi), il formato della data, i separatori per i decimali, il simbolo della valuta, i metodi di ordinamento. In oracle vi è un parametro che permette di impostare queste cose, è NLS_LANG il cui valore ha un formato più meno così:

<language>_<territory>.<charset>

Il linguaggio determina ovviamente la lingua dei vari messaggi, ma anche il linguaggio con cui vengono visualizzati i nomi dei giorni della settimana e i mesi nelle date. L’altro elemento influenzato dal linguaggio è il metodo di ordinamento (vi sono le regole diverse). Questi due elementi possono anche essere settati in modo indipendente trami i parametri NLS_DATE_LANGUAGE e NLS_SORT; il valore di questi due parametri se non settato esplicitamente viene derivato dall’elemento <language> del parametro NLS_LANG.

Dall’elemento <territory> derivano invece i valori dei seguenti parametri:

  • NLS_CURRENCY: il simbolo della valuta, Euro, dollaro, sterlina, yen ecc.
  • NLS_DUAL_CURRENCY
  • NLS_ISO_CURRENCY
  • NLS_DATE_FORMAT
  • NLS_NUMERIC_CHARACTERS, i separatori per i decimali e per le migliaia
  • NLS_TIMESTAMP_FORMAT
  • NLS_TIMESTAMP_TZ_FORMAT

I tre elementi che compongono il valore del parametro NLS_LANG sono opzionali e possono essere specificati singolarmente, ad esempio:

NLS_LANG = _JAPAN

NLS_LANG = .US7ASCII

Infine vi sono dei parametri NLS il cui valore non viene inferito da NLS_LANG:

  • NLS_CALENDAR (mai usato)
  • NLS_COMP (può essere BINARY, il default, ANSI o LINGUISTIC
  • NLS_LENGTH_SEMANTICS, assume importanza fondamentale per i tipi char e varchar in caso di charset multibyte, credo di averne già parlato

Arrivato a questo punto mi rendo conto di aver scritto più quanto avevo preventivato e quindi sarò costretto a esaurire l’argomento in più post (spero bastino due).

Concludo questo post ricordando solo il settaggio dei parametri “NLS” avviene a quattro livelli:

  1. DATABASE
  2. AMBIENTE CLIENT
  3. SESSIONE CLIENT
  4. FUNZIONE SQL

Ma mano che si scende di livello si “sovrascrive” i settaggi del livello superiore.

Oracle 10g Scheduler

mercoledì 30 aprile 2008 alle 30:54 | Pubblicato su Installation and Configuration, Oracle Certification | Lascia un commento

Negli ultimi tempi sono stato piuttosto impegnato (probabilmente lo sarò ancora per un po’) così ho scritto poco e mi dispiace. Oggi ho trovato un’attimo di tempo per cui pubblico velocemente una breve introduzione al nuovo (?) scheduler di Oracle 10g che fa parte del programma di esame per la certificazione OCP per cui cerco di proseguire la preparazione.

Oracle Scheduler

Con la versione 10g Oracle ha introdotto un nuovo scheduler che sostituisce il vecchio package DBMS_JOB (che comunque rimane a disposizione). Il nuovo scheduler ha una struttura piuttosto sofisticata e modulare il che facilita il riuso delle componenti e permette la definizione di schedulazioni molto complesse, con grande flessibilità. Per una trattazione veramente completa consiglio la consultazione del manuale “Administrators Guide” che ho trovato molto ben fatto.

Componenti dello Scheduler

come ho detto il nuovo scheduler, la cui API consiste nel package PL/SQL DBMS_SCHEDULER, ha una struttura modulare, il che significa che è composto da vari elementi che possono essere combinati insieme. Le componenti sono:

  • JOB
  • PROGRAM
  • SCHEDULE
  • WINDOW
  • JOB CLASSES
  • WINDOW GROUP
  • JOB CHAIN

JOB

Mantenendo una certa compatibilità d’uso con il vecchio package DBMS_JOB i job sono l’unico vero elemento fondamentale per poter “schedulare” un’operazione. Un job è un oggetto che specifica cosa eseguire e quando. Una novità importante dello scheduler è la nuova “CALENDARING SINTAX” per la specifica degli intervalli di schedulazione. La seconda novità importante è la possibilità di lanciare tramite lo scheduler anche procedure esterne (script di shell o altri eseguibili sul sistema operativo ospite). Per essere più precisi è possibile specificare tre tipi di “azioni” per un job:

  1. PLSQL_BLOCK, un blocco di codice pl/sql (possono essere anche più query SQL normali per esempio);
  2. STORED_PROCEDURE una procedura PL/SQL con possibilità di definire come oggetti anche i valori dei parametri da passare alla procedura.
  3. EXECUTABLE, un programma eseguibile sul sistema operativo, anche qui con la possibilità di definire come oggetti anche i valori dei parametri da passare al programma (solo di tipo stringa)

A livello più semplice ecco quindi un esempio di schedulazione di una procedura PL/SQL:

BEGIN
DBMS_SCHEDULER.CREATE_JOB (
   job_name           =>  'update_sales',
   job_type           =>  'STORED_PROCEDURE',
   job_action         =>  'OPS.SALES_PKG.UPDATE_SALES_SUMMARY',
   start_date         =>  '28-APR-03 07.00.00 PM Australia/Sydney',
   repeat_interval    =>  'FREQ=DAILY;INTERVAL=2', /* every other day */
   end_date           =>  '20-NOV-04 07.00.00 PM Australia/Sydney',
   job_class          =>  'batch_update_jobs',
   comments           =>  'My new job');
END;
/

Occorre fare attenzione che i JOB per default sono sempre creati in stato “DISABLED”, quindi o si usa il parametro “enabled” o si abilitano successivamente con la procedure ENABLE del package DBMS_SCHEDULER.
Nell’esempio si vede anche la nuova “CALENDARING SINTAX” che specifica l’esecuzione del task a giorni alterni. Il nuovo package DBMS_SCHEDULER fornisce anche delle procedure per lanciare fuori dalla schedulazione gia pianificata il task (RUN_JOB), per fermare job in esecuzione (STOP_JOB).

PROGRAM

I program sono il primo elemento di modularità dello scheduler. Un program è un oggetto che permette di definire cosa deve essere eseguito (una procedura, un pezzo di codice PL/SQL, un eseguibile esterno) e gli eventuali parametri. Poi un program può essere usato nella definizione di uno o più job, al posto della coppia job_type,job_action dell’esempio di crezione di job gia vista. Ecco un esempio di definizione di un program:

BEGIN
DBMS_SCHEDULER.CREATE_PROGRAM (
   program_name           => 'my_program1',
   program_action         => '/usr/local/bin/date',
   program_type           => 'EXECUTABLE',
   comments               => 'My comments here');
END;
/

Una volta definito un program, come detto può essere usato nella definizione di job, ad esempio:

BEGIN
DBMS_SCHEDULER.CREATE_JOB (
   job_name           =>  'update_sales',
   program_name       =>  'my_program1',
   start_date         =>  '28-APR-03 07.00.00 PM Australia/Sydney',
   repeat_interval    =>  'FREQ=DAILY;INTERVAL=2', /* every other day */
   end_date           =>  '20-NOV-04 07.00.00 PM Australia/Sydney',
   job_class          =>  'batch_update_jobs',
   comments           =>  'My new job');
END;
/

SCHEDULE

Il secondo elemento di modularità dello scheduler sono gli SCHEDULE. Uno schedule è un oggetto che definisce degli intervalli. Uno schedule può poi essere usato nella definizione di uno o più job al posto del parametro repeat_interval. Ecco un esempio di definizione di uno schedule:

BEGIN
DBMS_SCHEDULER.CREATE_SCHEDULE (
  schedule_name     => 'my_stats_schedule',
  start_date        => SYSTIMESTAMP,
  end_date          => SYSTIMESTAMP + INTERVAL '30' day,
  repeat_interval   => 'FREQ=HOURLY; INTERVAL=4',
  comments          => 'Every 4 hours');
END;
/

Tale schedule poi può essere usato nella definizione di un job, ad esempio:

BEGIN
DBMS_SCHEDULER.CREATE_JOB (
   job_name           =>  'update_sales',
   program_name       =>  'my_program1',
   schedule_name      =>  'my_stats_schedule',
   job_class          =>  'batch_update_jobs',
   comments           =>  'My new job');
END;
/

Quindi JOB, PROGRAM e SCHEDULE possono essere combinati insieme in vari modi per schedulare delle operazioni.

WINDOW

Le window sono oggetti che permettono di definire delle “finestre temporali” ovvero degli intervalli di tempo, a cui viene in particolare associato un RESOURCE PLAN. Un window può essere utilizzata anche come argomento per il parametro “schedule_name” in questo modo all’apertura della window

JOB CLASS

Le job class sono oggetti che permettono di definire caratteristiche comuni per più job, raggruppandoli appunto in “classi”. Le caratteristiche speficabili per una job class ed ereditate dai job appartenenti sono:

  • loggin_level, il livello di log
  • resource_consumer_group
  • service (in ambienti RAC)
  • log_history, per quanto mantenere i log

WINDOW GROUP

Le window possono essere ragruppate in gruppi. A differenza della relazione tra job e job classes, che è di tipo molti a uno, la relazione tra window e window group è di tipo molti a molti. Anche le window group possono essere usate come argomento per il parametro “schedule_name” della procedura CREATE_JOB.

JOB CHAIN

Si tratta di un oggetto piuttosto complesso, introdotto con la versione 10.2 di Oracle. La job chain permette da definizione di una catena di job la cui esecuzione è guidata da delle regole che si basano sull’esito dell’esecuzione del job precedente. Più che una catena, il flusso di esecuzione di una job chain è un albero (forse anche più genericamente un grafo, perchè forse nulla impedisce che più step partano all’avvio della chain, questo è da verificare). Per creare un job chain, si crea prima l’oggetto job chain con la procedura CREATE_JOB_CHAIN, poi si definiscono gli “step” (DEFINE_CHAIN_STEP) ovvero le procedure che possono essere eseguite all’interno della chain. Dopo di che occorre definire le regole che stabiliranno l’ordine di esecuzione dei passi (DEFINE_CHAIN_RULE)

OCP: Managing Resources

mercoledì 19 marzo 2008 alle 19:59 | Pubblicato su Installation and Configuration, Oracle Certification | Lascia un commento

Il mio percorso di studio prosegue. Nella conclusione del mio ultimo post ho annunciato che mi aspettava il capitolo 10) “Understanding Globalization Support”. In realtà ho letto un po’ velocemente il capitolo e l’ho trovato un po’ noioso, anche se con qualche informazione interessante su cui prima o poi spero di scrivere qualcosa. Però non ho avuto l’ispirazione per scrivere un riassunto del capitolo ma sono passato al successivo: capitolo 11) “Managing Resources”.

Il capitolo si occupa di Oracle Database Resource Manager. Avevo gia studiato qualcosa tempo fa e mi ero fatto qualche appunto, ma avevo praticamente scordato tutto. Ho ripassato gli appunti e con la documentazione e la mia solita guida ho scritto un articolo che mi soddisfa molto. Come al solito il capitolo è consultabile sia sul mio sito cristiancudizio.freehostia.com che su zoho.com.

Database Resource Manager è lo strumento del database Oracle per gestire l’allocazione delle risorse in modo conforme ad esigenze particolari. Sulla carta pare essere molto interessante e sicuramente è molto sofisticato e potente. Mi è però stato detto che esso entra in azione solo quando Oracle ha saturato la CPU del server. Questo se vero potrebbe essere un limite. Alla fine del capitolo 24 del manuale Oracle Database Administrator Guide vi è un paragrafo dedicato al controllo di Database Resource Manager che non ho letto con attenzione ma che forse contiene informazioni interessanti.

La perplessità che mi rimane è la mancanza di un parametro che agisca sulla risorsa I/O in modo analogo a come viene fatto per la CPU. Questo perchè nella mia esperienza ho avuto sistemi in crisi perchè delle sessioni uccidevano l’I/O con dei Full Table Scan (FTS) su tabelle enormi e in questo caso la CPU utilizzata dalla sessione non era poi tanta. Da questo deriva la mia perplessità.

Aggiornamento (25/03/2008)

Ho dato una letta all’ultima parte del capitolo 24 della guida “Administrator’s Guide” per approfondire la mia conoscenza del funzionamento di DRM. In questa parte viene effettivamente confermato quanto mi era stato detto, ovvero che DRM forza la ripartizione delle risorse solo nel momento in cui le risorse sono sature, parliamo ovviamente della CPU, altrimenti DRM finchè tutti i processi hanno tutta la disponibilità di CPU di cui hanno bisogno DRM non fa nulla. Questo ha perfettamente senso, quando la risorsa principale è la CPU

OCP: Automatic Storage Management – Seconda Parte

venerdì 14 marzo 2008 alle 14:26 | Pubblicato su Oracle Certification | Lascia un commento

Oggi sono riuscito a completare la seconda parte dei miei appunti su ASM per la certificazione OCP. Credo di aver fatto un buon lavoro, se non altro ho ottenuto l’obbiettivo principale: approfondire l’argomento e memorizzare le cose. Quindi riassumendo i documenti sono disponibili sia su cristiancudizio.freehostia.com che su zoho.com:

Mi sembra di aver fatto un documento abbastanza lineare e completo. Manca solo una parte più approfondita sull’utilizzo di RMAN  e dei package PL/SQL per le migrazioni da ASM a file system e viceversa, che però richiedono secondo me un terzo articolo che penso di scrivere.

Ora mi aspetta il capitolo 10: Understanding Globalization Support

OCP: Automatic Storage Management – Prima Parte

venerdì 14 marzo 2008 alle 14:16 | Pubblicato su Installation and Configuration, Oracle Certification | Lascia un commento

Sono arrivato al capitolo 9 della mia guida alla certificazione Oracle Database OCP, il capitolo si occupa di Automatic Storage Management (ASM), una delle più interessanti novità di Oracle 10g. Mi sendo un po’ a disagio a parlare ancora di novità di Oracle 10g a quasi quattro anni dalla sua uscita e a sei mesi dall’uscita della versione 11g, però paradossalmente l’informatica a volte sembra svilupparsi molto lentamente.

In ogni caso esistono situazioni in cui si è gia passati da tempo alla versione 10g ma non si è utilizzato ASM.

Cos’è ASM?

ASM è uno strumento che integra insieme le funzionalità di un cluster file system e di un Volume Manager. Si tratta di una soluzione per la gestione dello storage per database Oracle che fornisce:

  • funzionalità di cluster file system, quindi utilizzabile in ambiente RAC, con tutti in vantaggi classici di un file system tradizionale, in una parola: flessibilità
  • funzionalità di un Volume Manager, cioè l’implementazione del concetto SAME (per informazioni paper e presentazione). Con la possibilità di implementare sistemi di storage specializzati per database Oracle sicuri ed efficenti anche con Hardware non costoso (al riguardo credo che la realtà sia diversa)

In ogni caso sto scrivendo i miei appunti, la prima parte è disponibile sempre sul mio sito, invito a darci un’occhiata.

Seguirà la parte seconda con un po’ di comandi e dettagli.

Automatic Database Management: SQL Tuning Advisor

martedì 11 marzo 2008 alle 11:15 | Pubblicato su Oracle Certification, Performance Tuning | Lascia un commento

Oggi ho rivisto il mio articolo su Automatic Database Management di cui ho parlato nel post precedente. Ho aggiunto un po’ di link alla manualistica e aggiunto qualche dettaglio. Fra l’altro sperimentando i servizi di zoho.com ho creato un vero e proprio documento, consultabile qui.

Ho proseguito nella stesura del mio riassunto, ma siccome l’articolo sarebbe risultato troppo lungo ne ho fatto un’altro specifico sull’argomento SQL Tuning Advisor, anch’esso disponibile sia cristiancudizio.freehostia.com che su zoho.com.

In questi due articoli faccio una rassegna della Common Manageability Interface, con le sue componenti AWR, ASH, ADDM, Server Generated Alert, Advisory Framework.

Come ho gia avuto modo di dire si tratta di un insieme di strumenti molto potenti e interessanti il cui però ricordo ancora è soggetto all’acquisto di ulteriori (e costose) licenze.

Aggiornamento del 12/03/2008

Aggiungo qualche riferimento:

Pagina successiva »

Blog su WordPress.com. | The Pool Theme.
Entries e commenti feeds.

Iscriviti

Ricevi al tuo indirizzo email tutti i nuovi post del sito.

Unisciti agli altri 70 follower