<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-4306197867072890604</id><updated>2011-04-22T04:52:21.794+02:00</updated><category term='Firefox extension'/><category term='Vista'/><category term='Youtube'/><category term='bugs'/><category term='SQL Server'/><category term='Oracle 10g'/><category term='corso'/><category term='streams'/><category term='RMAN'/><category term='Oracle'/><category term='recover'/><category term='10g'/><category term='Toad'/><category term='Delicious'/><category term='Data Pump'/><category term='restore'/><category term='Oracle Error Code'/><category term='RAC'/><category term='CPU'/><category term='Ubiquity'/><category term='Oracle XE'/><category term='sviluppo web'/><category term='OUI'/><category term='SQL Developer'/><category term='comandi SQL'/><category term='DBA'/><category term='Facebook'/><category term='Enterprise Manager'/><category term='backup'/><title type='text'>L'oracolo dei database</title><subtitle type='html'>Tu domandi... l'oracolo risponde</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://oracolodeidb.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4306197867072890604/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://oracolodeidb.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Simone Saravalli</name><uri>http://www.blogger.com/profile/16984004286817286244</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>23</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-4306197867072890604.post-3519408657965905917</id><published>2009-05-17T10:21:00.004+02:00</published><updated>2009-05-17T11:04:43.370+02:00</updated><title type='text'>Una nuova avventura</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_Xl7hi_bur14/Sg_TFVVObpI/AAAAAAAAAKs/4uleIQaboDI/s1600-h/18289752_72a8594e53_m.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 200px; height: 130px;" src="http://1.bp.blogspot.com/_Xl7hi_bur14/Sg_TFVVObpI/AAAAAAAAAKs/4uleIQaboDI/s200/18289752_72a8594e53_m.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5336716172036304530" /&gt;&lt;/a&gt;Nella vita, si sa, capita di porsi delle domande su quanto fatto fino ad un certo punto della propria esistenza, sia essa affettiva, lavorativa, ecc. Si tirano un pò le somme e questo è quanto è accaduto anche a me negli ultimi mesi, in particolare per quanto riguarda il mio lavoro.&lt;br /&gt;&lt;br /&gt;Una premessa è d'obbligo: in questi due anni e mezzo di lavoro ho potuto collaborare con colleghi, soprattutto quelli del mio stesso ufficio, che mi hanno trattato bene, dal lato umano come da quello professionale, che mi hanno sopportato ogniqualvolta ho rotto le scatole con le mie guerre ideologiche Windows VS GNU/Linux ;), dai quali ho imparato molto (e ai quali spero di aver lasciato qualcosa, nel mio modestissimo piccolo bagaglio di conoscenze).&lt;br /&gt;&lt;br /&gt;In secondo luogo, il mio attuale lavoro, sistemista e dba Oracle, mi piace molto e ho sempre cercato di portarlo avanti con passione, condividendo conoscenze con tanti altri appassionati del settore, il che mi ha molto aiutato a crescere professionalmente.&lt;br /&gt;&lt;br /&gt;Tuttavia, forse per la giovane età (27 anni compiuti l'altro ieri ;), forse per la necessità di fare qualche nuova esperienza, di tagliare un pò il cordone ombelicale che ti lega alle comodità, alla famiglia, al lavoro attaccato a casa, ho cercato un'altra opportunità di lavoro, trovandola!&lt;br /&gt;Come indicato molto chiaramente dall'immagine di apertura del post, una via si sta per chiudere, ossia la mia attività di dba Oracle e un'altra si apre al suo posto, il mio nuovo lavoro: sistemista GNU/Linux (hehehehehe).&lt;br /&gt;&lt;br /&gt;Cambierà un pò tutto: dal pubblico passo al privato, da dba Oracle e sistemista generico, passo a sistemista GNU/Linux a tempo pieno, da Ferrara mi sposterò in quel di Casalecchio di Reno, dalla vita in casa con i miei, alla vita indipendente in appartamento (devo solo trovarlo ;) ) e chissà quante altre cose. Ma cavolo, se non lo faccio ora, ho come l'impressione che non lo farei mai più!!!&lt;br /&gt;&lt;br /&gt;Insomma, questo è un pò il post conclusivo del mio blog che, comunque, ho deciso di non eliminare dato che contiene il frutto di due anni di lavoro con Oracle, di smanettamenti, di ore passate su siti, forum, mailing list per cercare (e qualche volta dare) soluzioni ai problemi che ogni giorno si presentano nella vita di un dba!&lt;br /&gt;&lt;br /&gt;Un saluto a tutti! Simone&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4306197867072890604-3519408657965905917?l=oracolodeidb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oracolodeidb.blogspot.com/feeds/3519408657965905917/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4306197867072890604&amp;postID=3519408657965905917' title='7 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4306197867072890604/posts/default/3519408657965905917'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4306197867072890604/posts/default/3519408657965905917'/><link rel='alternate' type='text/html' href='http://oracolodeidb.blogspot.com/2009/05/una-nuova-avventura.html' title='Una nuova avventura'/><author><name>Simone Saravalli</name><uri>http://www.blogger.com/profile/16984004286817286244</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_Xl7hi_bur14/Sg_TFVVObpI/AAAAAAAAAKs/4uleIQaboDI/s72-c/18289752_72a8594e53_m.jpg' height='72' width='72'/><thr:total>7</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4306197867072890604.post-2046330478111176800</id><published>2009-04-28T14:40:00.009+02:00</published><updated>2009-04-28T15:04:15.805+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='SQL Developer'/><category scheme='http://www.blogger.com/atom/ns#' term='Oracle'/><title type='text'>Ubuntu e Oracle SQL Developer</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_Xl7hi_bur14/Sfb-IrhzaXI/AAAAAAAAAKk/pidMQwcyGF0/s1600-h/oracle_sqldeveloper.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 200px; height: 127px;" src="http://2.bp.blogspot.com/_Xl7hi_bur14/Sfb-IrhzaXI/AAAAAAAAAKk/pidMQwcyGF0/s200/oracle_sqldeveloper.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5329726634116475250" /&gt;&lt;/a&gt;Qualche giorno fa, stanco delle continue infezioni di Conficker e forte del fatto che il mio pc è una semplice workstation dalla quale mi collego sulle macchine vere e proprie con cui lavoro (un misto di ambienti Windows Server 2003 e GNU/Linux, reali e virtualizzati), ho pensato di formattare il mio pc che montava Windows XP per passare ad Ubuntu 8.10.&lt;br /&gt;&lt;br /&gt;Uno strumento che uso ormai da qualche tempo e che mi dà le stesse soddisfazioni di Toad (ma in più è free e non richiede licenze) è &lt;a href="http://www.oracle.com/technology/products/database/sql_developer/index.html"&gt;Oracle SQL Developer&lt;/a&gt;. Questo software è realizzato in Java quindi è disponibile per diverse piattaforme, tra cui GNU/Linux, anche se non esiste un pacchetto deb per le distribuzioni Debian e Debian like. Volendo è possibile usufruire del tool Alien per convertire l'rpm in deb, oppure si può sempre scaricare un file zip contenente l'intero ambiente già pronto per l'uso.&lt;br /&gt;&lt;br /&gt;La versione per GNU/Linux non viene fornita con il Java SDK, necessario per far girare l'interfaccia di SQL Developer, ma con Ubuntu 8.10, ad esempio, si può facilmente porre rimedio alla mancanza con:&lt;br /&gt;&lt;blockquote class="code"&gt;$ sudo aptitude install sun-java6-jdk&lt;/blockquote&gt;&lt;br /&gt;Supponendo di voler utilizzare il file zip fornito da Oracle, lo si può scompattare, ad esempio, in /usr/src/:&lt;br /&gt;&lt;blockquote class="code"&gt;$ tar xzf sqldeveloper-1.5.4.59.40-no-jre.zip&lt;br /&gt;$ sudo mv sqldeveloper /usr/src/&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;Lo script da lanciare è contenuto in /usr/src/sqldeveloper (il path è da adattare a seconda della directory di installazione scelta):&lt;br /&gt;&lt;blockquote class="code"&gt;$ cd /usr/src/sqldeveloper&lt;br /&gt;$ ./sqldeveloper.sh&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;Tuttavia, si può notare la comparsa sul terminale di un messaggio di errore:&lt;br /&gt;&lt;blockquote class="code"&gt;Oracle SQL Developer&lt;br /&gt;Copyright (c) 2008, Oracle. All rights reserved.&lt;br /&gt;&lt;br /&gt;Type the full pathname of a J2SE installation (or Ctrl-C to quit), the path will be stored in ~/.sqldeveloper/jdk&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;In questo caso, bisogna terminare la creazione dello script con Ctrl-C, quindi creare una directory chiamata &lt;span style="font-style:italic;"&gt;.sqldeveloper&lt;/span&gt; (attenzione al punto prima del nome, in quanto si tratta di una directory nascosta) nella propria home e all'interno di tale directory creare un file chiamato &lt;span style="font-style:italic;"&gt;jdk&lt;/span&gt;. Tale file deve contenere il path alla jvm quindi:&lt;br /&gt;&lt;blockquote class="code"&gt;$ mkdir /home/username/.sqldeveloper&lt;br /&gt;$ cd ~/.sqldeveloper&lt;br /&gt;$ touch jdk&lt;br /&gt;$ echo /usr/lib/jvm/java-6-sun &gt; jdk&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;Fatto ciò si può avviare SQL Developer in tutta tranquillità!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4306197867072890604-2046330478111176800?l=oracolodeidb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oracolodeidb.blogspot.com/feeds/2046330478111176800/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4306197867072890604&amp;postID=2046330478111176800' title='3 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4306197867072890604/posts/default/2046330478111176800'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4306197867072890604/posts/default/2046330478111176800'/><link rel='alternate' type='text/html' href='http://oracolodeidb.blogspot.com/2009/04/ubuntu-e-oracle-sql-developer.html' title='Ubuntu e Oracle SQL Developer'/><author><name>Simone Saravalli</name><uri>http://www.blogger.com/profile/16984004286817286244</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_Xl7hi_bur14/Sfb-IrhzaXI/AAAAAAAAAKk/pidMQwcyGF0/s72-c/oracle_sqldeveloper.jpg' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4306197867072890604.post-859238011111831614</id><published>2009-04-28T13:20:00.009+02:00</published><updated>2009-04-28T13:45:00.165+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Oracle 10g'/><category scheme='http://www.blogger.com/atom/ns#' term='Vista'/><category scheme='http://www.blogger.com/atom/ns#' term='Toad'/><title type='text'>Windows Vista e SP2-1503</title><content type='html'>Un mio collega ha appena acquistato il classico portatile con Microsoft Windows Vista Home Premium SP1 (eh vabbè...) e, dato che la sua attività routa attorno alla creazione di web apps che si interfacciano ad Oracle, ha provato ad installare, sul suddetto portatile, Oracle Instant Client 10.2.0.1. Ha seguito la procedura standard, optando per un'installazione da amministratore, impostato il tnsnames.ora con le entries corrette, eppure, lanciando un prompt di sqlplus, oppure Toad, ecc, si presenta il seguente errore:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_Xl7hi_bur14/Sfbn_pspgrI/AAAAAAAAAKU/VYPpuLqRJ0Y/s1600-h/sp2-1503.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 200px; height: 34px;" src="http://4.bp.blogspot.com/_Xl7hi_bur14/Sfbn_pspgrI/AAAAAAAAAKU/VYPpuLqRJ0Y/s200/sp2-1503.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5329702289750459058" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Sul forum di OTN si consiglia di:&lt;br /&gt;&lt;br /&gt;1) impostare correttamente le variabili d'ambiente ORACLE_HOME, TNS_ADMIN, LD_LIBRARY_PATH e PATH&lt;br /&gt;2) controllare le impostazioni di protezione di Windows in quanto mancherebbe il permesso "create global objects"&lt;br /&gt;&lt;br /&gt;Ora, la soluzione numero 1 non ha funzionato e, a quanto pare, in Windows Vista Home Premium SP1 non c'è la possibilità, o almeno io non l'ho trovata, di accedere alle policies locali di sicurezza, quindi non ho potuto verificare l'effettiva mancanza del privilegio "create global objects" per il mio utente.&lt;br /&gt;&lt;br /&gt;San Google, come al solito, è venuto in mio aiuto con &lt;a href="http://cshay.blogspot.com/2007/05/oracle-database-on-windows-vista-now.html"&gt;questo articolo di Christian Shay&lt;/a&gt; in cui l'autore indica che per Windows Vista è disponibile un pacchetto che consente di installare Oracle Client 10.2.0.3 direttamente, ossia senza la necessità, come avveniva in precedenza, di installare il client nella versione 10.2.0.1 per poi patcharla alla 10.2.0.3 che, di fatto, risolve il problema SP2-1503.&lt;br /&gt;Riporto a mia volta il &lt;a href="http://www.oracle.com/technology/software/products/database/oracle10g/htdocs/10203vista.html"&gt;link&lt;/a&gt; per il download del client Oracle versione 10.2.0.3 per Windows Vista/windows 2008!&lt;br /&gt;&lt;br /&gt;Installato questo pacchetto tutto è filato liscio, finchè non ho tentato una connessione al mio db di test con TOAD ritrovandomi con il seguente errore (bello Vista, sì sì):&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_Xl7hi_bur14/SfbodVjY2eI/AAAAAAAAAKc/8Oh-jnakpk4/s1600-h/toad_error_vista.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 200px; height: 81px;" src="http://2.bp.blogspot.com/_Xl7hi_bur14/SfbodVjY2eI/AAAAAAAAAKc/8Oh-jnakpk4/s200/toad_error_vista.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5329702799738984930" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Altra ricerca con Google ed approdo sul sito &lt;a href="http://asktoad.com/DWiki/doku.php"&gt;asktoad.com&lt;/a&gt; e più precisamente &lt;a href="http://asktoad.com/DWiki/doku.php/faq/answers/installation#why_does_toad_not_run_on_windows_vista_unless_run_as_administrator"&gt;in questa FAQ&lt;/a&gt;; qui si legge che il problema è determinato da &lt;span style="font-weight:bold;"&gt;UAC&lt;/span&gt;: User Access Control, ossia il sistema di controllo degli accessi degli utenti di Windows Vista che, quando abilitato (e lo è per default), non consente ad un utente normale di accedere in scrittura alla directory &lt;span style="font-style:italic;"&gt;Program Files&lt;/span&gt;. Sempre dalla FAQ si legge che quando Toad 9.5 viene installato crea un file chiamato &lt;span style="font-style:italic;"&gt;lexlib.new&lt;/span&gt; che, nel momento in cui si lancia la GUI di Toad dovrebbe poter essere rinominato in lexlib.lxl, fatto non consentito proprio da UAC (a meno di eseguire Toad come utente Administrator).&lt;br /&gt;&lt;br /&gt;Esistono due soluzioni:&lt;br /&gt;&lt;br /&gt;* disabilitare UAC, ad esempio come indicato in &lt;a href="http://www.petri.co.il/disable_uac_in_windows_vista.htm"&gt;questa guida&lt;/a&gt;&lt;br /&gt;* eseguire Toad come utente amministratore&lt;br /&gt;&lt;br /&gt;Io ho optato per la prima opzione, che è molto semplice da implementare!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4306197867072890604-859238011111831614?l=oracolodeidb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oracolodeidb.blogspot.com/feeds/859238011111831614/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4306197867072890604&amp;postID=859238011111831614' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4306197867072890604/posts/default/859238011111831614'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4306197867072890604/posts/default/859238011111831614'/><link rel='alternate' type='text/html' href='http://oracolodeidb.blogspot.com/2009/04/windows-vista-e-sp2-1503.html' title='Windows Vista e SP2-1503'/><author><name>Simone Saravalli</name><uri>http://www.blogger.com/profile/16984004286817286244</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_Xl7hi_bur14/Sfbn_pspgrI/AAAAAAAAAKU/VYPpuLqRJ0Y/s72-c/sp2-1503.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4306197867072890604.post-1379904228082231045</id><published>2009-04-02T11:18:00.029+02:00</published><updated>2009-04-07T09:32:36.506+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='comandi SQL'/><category scheme='http://www.blogger.com/atom/ns#' term='10g'/><category scheme='http://www.blogger.com/atom/ns#' term='Oracle'/><title type='text'>Startup e shutdown</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_Xl7hi_bur14/SdSEnLRj8_I/AAAAAAAAAKE/Xl8Ebcrp6LM/s1600-h/2883849702_dcc386abd2_m.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 200px; height: 150px;" src="http://2.bp.blogspot.com/_Xl7hi_bur14/SdSEnLRj8_I/AAAAAAAAAKE/Xl8Ebcrp6LM/s200/2883849702_dcc386abd2_m.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5320022868407612402" /&gt;&lt;/a&gt;L'avvio e lo spegnimento di Oracle sono due procedure importanti che è necessario saper eseguire in modo corretto per garantire il funzionamento del DBMS stesso, nonchè l'integrità dei dati gestiti tramite esso.&lt;br /&gt;&lt;br /&gt;I servizi (demoni in ambito GNU/Linux) da avviare prima di poter interagire con Oracle sono il &lt;a href="http://download.oracle.com/docs/cd/B19306_01/server.102/b14220/dist_pro.htm#sthref1771"&gt;listener&lt;/a&gt; e una o più &lt;a href="http://download.oracle.com/docs/cd/B19306_01/server.102/b14220/startup.htm#CNCPT601"&gt;istanze&lt;/a&gt;.&lt;br /&gt;Con Microsoft Windows, i servizi a cui fare riferimento sono:&lt;br /&gt;&lt;br /&gt;* &lt;span style="font-weight:bold;"&gt;OracleServiceSID:&lt;/span&gt; il servizio di bootstrap di oracle che permette l'avvio dell'istanza indicata dalla stringa "SID". Una volta avviato il servizio OracleServiceSID è possibile avviare/stoppare manualmente l'istanza&lt;br /&gt;* &lt;span style="font-weight:bold;"&gt;OracleHOME_NAMETNSListener:&lt;/span&gt; è il servizio che si occupa di controllare il listener Oracle&lt;br /&gt;&lt;span id="fullpost"&gt;&lt;br /&gt;Agli amministratori di Oracle su sistemi Microsoft Window consiglio di dare un'occhiata a &lt;a href="http://ewhalen.blogspot.com/2006/07/oracle-services-and-windows-registry.html"&gt;questa descrizione&lt;/a&gt; (in inglese, ma molto chiara) dettagliata e completa dei servizi Oracle, delle variabili d'ambiente che è necessario impostare e delle chiavi di registro fondamentali per Oracle!&lt;br /&gt;&lt;br /&gt;Se si predilige il sistema operativo GNU/Linux (come nel mio caso ;), Oracle mette a disposizione il comando "lsnrctl" per la gestione del listener e lo script "dbstart" per l'avvio di una o più istanze. Entrambi si trovano nella directory "$ORACLE_HOME/bin".&lt;br /&gt;Al fine di automatizzare startup e shutdown di Oracle (listener + istanza/e, quindi), io utilizzo questo semplice script trovato in rete e che ho chiamato "gestoracle.sh":&lt;br /&gt;&lt;blockquote class="code"&gt;#!/bin/bash&lt;br /&gt;#&lt;br /&gt;# Run-level Startup script for the Oracle Instance and Listener&lt;br /&gt;#&lt;br /&gt;# chkconfig: 345 91 19&lt;br /&gt;# description: Startup/Shutdown Oracle listener and instance&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;#ORA_OWNR="oracle"&lt;br /&gt;&lt;br /&gt;# if the executables do not exist -- display error&lt;br /&gt;&lt;br /&gt;if [ ! -f $OH/bin/dbstart -o ! -d $OH ]&lt;br /&gt;then&lt;br /&gt;        echo "Oracle startup: cannot start"&lt;br /&gt;        exit 1&lt;br /&gt;fi&lt;br /&gt;&lt;br /&gt;# depending on parameter -- startup, shutdown, restart&lt;br /&gt;# of the instance and listener or usage display&lt;br /&gt;&lt;br /&gt;case "$1" in&lt;br /&gt;    start)&lt;br /&gt;        # Oracle listener and instance startup&lt;br /&gt;        echo -n "Starting Oracle: "&lt;br /&gt;        $OH/bin/lsnrctl start&lt;br /&gt;        $OH/bin/dbstart $ORACLE_HOME&lt;br /&gt;        echo "OK"&lt;br /&gt;        ;;&lt;br /&gt;    stop)&lt;br /&gt;        # Oracle listener and instance shutdown&lt;br /&gt;        echo -n "Shutdown Oracle: "&lt;br /&gt;        $OH/bin/lsnrctl stop&lt;br /&gt;        $OH/bin/dbshut $ORACLE_HOME&lt;br /&gt;        echo "OK"&lt;br /&gt;        ;;&lt;br /&gt;    reload|restart)&lt;br /&gt;        $0 stop&lt;br /&gt;        $0 start&lt;br /&gt;        ;;&lt;br /&gt;    *)&lt;br /&gt;        echo "Usage: $0 start|stop|restart|reload"&lt;br /&gt;        exit 1&lt;br /&gt;esac&lt;br /&gt;exit 0&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;Per lanciare lo script è sufficiente loggarsi sul db server con un utente appartenente al gruppo &lt;span style="font-weight:bold;"&gt;dba&lt;/span&gt; ed eseguire da command line:&lt;br /&gt;&lt;blockquote class="code"&gt;$ ./gestoracle.sh start|stop|restart|reload&lt;/blockquote&gt;&lt;br /&gt;A seconda del parametro passato, gestoracle.sh avvia o stoppa il listener e lo script di gestione del'istanza da avviare.&lt;br /&gt;Il risultato dell'esecuzione di gestoracle.sh è questo:&lt;br /&gt;&lt;blockquote class="code"&gt;oracle@debiandb:~$ gestoracle.sh start&lt;br /&gt;Starting Oracle:&lt;br /&gt;LSNRCTL for Linux: Version 10.2.0.4.0 - Production on 02-APR-2009 08:58:14&lt;br /&gt;&lt;br /&gt;Copyright (c) 1991, 2007, Oracle.  All rights reserved.&lt;br /&gt;&lt;br /&gt;Avvio di /u01/app/oracle/product/10.2.0/db_1/bin/tnslsnr: attendere...&lt;br /&gt;&lt;br /&gt;TNSLSNR for Linux: Version 10.2.0.4.0 - Production&lt;br /&gt;Il file dei parametri di sistema è /u01/app/oracle/product/10.2.0/db_1/network/&lt;br /&gt;admin/listener.ora&lt;br /&gt;Messaggi di log registrati in /u01/app/oracle/product/10.2.0/db_1/&lt;br /&gt;network/log/listener.log&lt;br /&gt;Ascolto su: (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1)))&lt;br /&gt;Ascolto su: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=debiandb)(PORT=1521)))&lt;br /&gt;&lt;br /&gt;Connessione a (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1)))&lt;br /&gt;STATO del LISTENER&lt;br /&gt;------------------------&lt;br /&gt;Alias                     LISTENER&lt;br /&gt;Versione                  TNSLSNR for Linux: Version 10.2.0.4.0 - Production&lt;br /&gt;Data di inizio            02-APR-2009 08:58:14&lt;br /&gt;Tempo di attivitÃ         0 giorni 0 ore 0 min. 0 sec.&lt;br /&gt;Livello trace             off&lt;br /&gt;Sicurezza                 ON: Local OS Authentication&lt;br /&gt;SNMP                      OFF&lt;br /&gt;File di parametri listener/u01/app/oracle/product/10.2.0/db_1/network/admin/&lt;br /&gt;listener.ora&lt;br /&gt;File di log listener      /u01/app/oracle/product/10.2.0/db_1/network/log/&lt;br /&gt;listener.log&lt;br /&gt;Summary table degli endpoint di ascolto...&lt;br /&gt;  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1)))&lt;br /&gt;  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=debiandb)(PORT=1521)))&lt;br /&gt;Summary table dei servizi...&lt;br /&gt;Il servizio "PLSExtProc" ha 1 istanze.&lt;br /&gt;  L'istanza "PLSExtProc", stato UNKNOWN, ha 1 handler per questo servizio...&lt;br /&gt;Il comando è stato eseguito&lt;br /&gt;OK&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;Ora che il DBMS è attivo è possibile avviare l'istanza desiderata (assicurarsi sempre che la variabile di sistema ORACLE_SID sia correttamente impostata):&lt;br /&gt;&lt;blockquote class="code"&gt;oracle@debiandb:~$ export ORACLE_SID=TEST&lt;br /&gt;oracle@debiandb:~$ sqlplus /nolog&lt;br /&gt;&lt;br /&gt;SQL*Plus: Release 10.2.0.4.0 - Production on Gio Apr 2 08:58:39 2009&lt;br /&gt;Copyright (c) 1982, 2007, Oracle.  All Rights Reserved.&lt;br /&gt;&lt;br /&gt;SQL&gt; conn/as sysdba&lt;br /&gt;Connesso a un'istanza sospesa.&lt;br /&gt;&lt;br /&gt;SQL&gt; startup&lt;br /&gt;Istanza ORACLE avviata.&lt;br /&gt;&lt;br /&gt;Total System Global Area 1174405120 bytes&lt;br /&gt;Fixed Size                  1267116 bytes&lt;br /&gt;Variable Size             620759636 bytes&lt;br /&gt;Database Buffers          536870912 bytes&lt;br /&gt;Redo Buffers               15507456 bytes&lt;br /&gt;MOUNT del database eseguito.&lt;br /&gt;Database aperto&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;La procedura di "apertura" di un database è composta da più livelli:&lt;br /&gt;&lt;br /&gt;* &lt;span style="font-weight:bold;"&gt;LIVELLO 0 - database chiuso:&lt;/span&gt; l'istanza è spenta e gli utenti non possono eseguire login, accedere ai dati contenuti nel db, ecc.&lt;br /&gt;* &lt;span style="font-weight:bold;"&gt;LIVELLO 1 - NOMOUNT:&lt;/span&gt; lanciando il comando&lt;br /&gt;&lt;blockquote class="code"&gt;SQL&gt; startup nomount&lt;/blockquote&gt; Oracle legge il contenuto del spfile che contiene le informazioni essenziali per l'avvio dell'istanza specificata dalla variabile di sistema ORACLE_SID (ad esempio, la dimensione delle varie aree di memoria RAM da riservare all'istanza, la dimensione dei blocchi di dati, il character set, ecc), quindi avviene l'avvio dell'istanza mediante allocazione di una certa quantità di memoria RAM e l'avvio dei &lt;a href="http://www.dba-oracle.com/t_background_processes.htm"&gt;background processes&lt;/a&gt;.&lt;br /&gt;Il database non è ancora accessibile per gli utenti.&lt;br /&gt;* &lt;span style="font-weight:bold;"&gt;LIVELLO 2 - MOUNT: &lt;/span&gt; raggiungibile dal livello 0 con il comando:&lt;br /&gt;&lt;blockquote class="code"&gt;SQL&gt; startup mount&lt;/blockquote&gt; oppure dal livello 1 con il comando &lt;blockquote class="code"&gt;SQL&gt; alter database mount;&lt;/blockquote&gt;&lt;br /&gt;In questo livello Oracle legge il contenuto del/i control file, la cui posizione su file system è indicata nel spfile, per determinare la posizione, sempre su file system, dei datafile di cui, tuttavia, non viene eseguita l'apertura.&lt;br /&gt;* &lt;span style="font-weight:bold;"&gt;LIVELLO 3 - OPEN:&lt;/span&gt; lo stato di database aperto può essere raggiunto dal livello 0 direttamente con il comando&lt;br /&gt;&lt;blockquote class="code"&gt;SQL&gt; startup&lt;/blockquote&gt; oppure dai livelli 1 e 2 con il comando &lt;blockquote class="code"&gt;SQL&gt; alter database open&lt;/blockquote&gt;&lt;br /&gt;Oracle monta in sola lettura, o in lettura/scrittura i datafile, quindi i dati contenuti nel db diventano accessibili per gli utenti.&lt;br /&gt;&lt;br /&gt;Come al solito, potete liberamente scaricare &lt;a href="http://www.flickr.com/photos/nectarous/2883849702/sizes/s/"&gt;l'immagine di inizio post&lt;/a&gt; in quanto rilasciata con licenza &lt;a href="http://creativecommons.org/licenses/by-nc/2.0/"&gt;Creative Commons Attribution-Noncommercial 2.0 Generic&lt;/a&gt; ;)&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4306197867072890604-1379904228082231045?l=oracolodeidb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oracolodeidb.blogspot.com/feeds/1379904228082231045/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4306197867072890604&amp;postID=1379904228082231045' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4306197867072890604/posts/default/1379904228082231045'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4306197867072890604/posts/default/1379904228082231045'/><link rel='alternate' type='text/html' href='http://oracolodeidb.blogspot.com/2009/04/startup-e-shutdown.html' title='Startup e shutdown'/><author><name>Simone Saravalli</name><uri>http://www.blogger.com/profile/16984004286817286244</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_Xl7hi_bur14/SdSEnLRj8_I/AAAAAAAAAKE/Xl8Ebcrp6LM/s72-c/2883849702_dcc386abd2_m.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4306197867072890604.post-2637807033885439138</id><published>2009-03-26T13:35:00.017+01:00</published><updated>2009-03-26T16:06:16.693+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='10g'/><category scheme='http://www.blogger.com/atom/ns#' term='Oracle'/><category scheme='http://www.blogger.com/atom/ns#' term='Oracle Error Code'/><title type='text'>ORA-01940: Cannot drop a user that is currently connected</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_Xl7hi_bur14/ScuXCfFRemI/AAAAAAAAAJ8/kEeuTF9I7GU/s1600-h/26455646_a881b2696e_m.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 150px; height: 200px;" src="http://4.bp.blogspot.com/_Xl7hi_bur14/ScuXCfFRemI/AAAAAAAAAJ8/kEeuTF9I7GU/s200/26455646_a881b2696e_m.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5317509854000151138" /&gt;&lt;/a&gt;E' un pò di tempo che non scrivo sul mio blog, ma, ahimè, in questo periodo il lavoro con Oracle ha latitato e, di conseguenza, anche gli spunti da cui traggo i miei post :(&lt;br /&gt;Questa mattina, tuttavia, una semplice operazione di DROP di un utente del mio db di test ha originato l'errore Oracle &lt;span style="font-weight:bold;"&gt;ORA-01940: cannot DROP a user that is currently connected&lt;/span&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Premessa:&lt;/span&gt; lo schema di cui sopra costituisce il backend di un'applicazione web-based realizzata in jsp e gestita da Tomcat. Ovviamente, prima di eseguire, da utente system, la drop dello schema desiderato, mi sono preoccupato di avvertire gli utenti che stavano lavorando nell'ambiente di test di effetturare il logout, quindi, atteso un ragionevole lasso di tempo, ho stoppato il server Tomcat.&lt;br /&gt;&lt;span id="fullpost"&gt;&lt;span style="font-weight:bold;"&gt;Svolgimento:&lt;/span&gt; ho pensato che eventuali sessioni appese a livello di db dovessero dipendere dalla presenza di qualche utente ancora connesso e con delle operazioni in corso nell'ambiente di test nel momento in cui ho eseguito lo stop del server Tomcat.&lt;br /&gt;&lt;br /&gt;La vista &lt;span style="font-weight:bold;"&gt;v$session&lt;/span&gt; fornisce tutte le informazioni sulle sessioni attive/inattive/killate ed è proprio da questa che bisogna partire per fare un pò di diagnostica.&lt;br /&gt;L'istruzione SELECT seguente interroga proprio tale vista in join con un'altra vista di sistema, ossia &lt;span style="font-weight:bold;"&gt;v$process&lt;/span&gt; in modo tale da ottenere  l'id della, il codice seriale e lo status sessione, nonchè il pid del processo ad essa collegato.&lt;br /&gt;&lt;blockquote class="code"&gt;SQL&gt; select s.sid, s.serial#, s.status, p.spid&lt;br /&gt;from v$session s, v$process p&lt;br /&gt;where s.username = 'MYUSER'&lt;br /&gt;and p.addr (+) = s.paddr;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;Il risultato che si ottiene è qualcosa di simile:&lt;br /&gt;&lt;blockquote class="code"&gt;       SID    SERIAL# STATUS     SPID&lt;br /&gt;---------- ---------- -----------------&lt;br /&gt;       136      48808 INACTIVE   12065&lt;br /&gt;       135      31595 INACTIVE   12030&lt;br /&gt;       132      12779 INACTIVE   11092&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;Ora, le sessioni inattive possono essere terminate con il seguente comando (da ripetere per ogni sessione da terminare, ovviamente e da lanciare in qualità di utente con privilegi da DBA):&lt;br /&gt;&lt;blockquote class="code"&gt;SQL&gt; alter system kill session '&lt;#sid,#serial&gt;';&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;Rieseguendo la query dalla vista v$session si otterrà che le sessioni sono passate allo stato "KILLED", tuttavia, come è successo a me, può capitare che dopo pochi istanti nuove sessioni (o persino le stesse appena killate) tornino nuovamente allo stato "INACTIVE" rendendo nuovamente impossibile eseguire il drop dell'utente.&lt;br /&gt;Personalmente credo che Oracle cerchi di portare a termine i job sottomessi da Tomcat sul db server e incapsulati nelle sessioni di cui sopra, ma avendo ormai perso la connessione con il Tomcat, tali sessioni restano sempre nello stato "INACTIVE".&lt;br /&gt;La soluzione in realtà è semplice, infatti basta mettere in lock l'utente prima di dropparne le sessioni inattive:&lt;br /&gt;&lt;blockquote class="code"&gt;SQL&gt; alter user MYUSER account lock;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;Quindi si può procedere con il drop dell'utente in tutta tranquillità!&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Conclusione:&lt;/span&gt; partendo dalle viste di sistema si risolve tutto! ;)&lt;br /&gt;&lt;br /&gt;L'immagine di inizio post con i nanetti da giardino l'ho recuperata da &lt;a href="http://www.flickr.com/photos/sarae/26455646/sizes/o/"&gt;qui&lt;/a&gt; ed è rilasciata con licenza &lt;a href="http://creativecommons.org/licenses/by-nd/2.0/"&gt;Creative Commons Attribution-No Derivative Works 2.0 Generic&lt;/a&gt; (quindi è possibile copiarla e distribuirla). L'ho messa perchè uno dei nani ha degli occhiali da sole --&gt; servono per vedere --&gt; viste di Oracle --&gt; sclero :-D&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4306197867072890604-2637807033885439138?l=oracolodeidb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oracolodeidb.blogspot.com/feeds/2637807033885439138/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4306197867072890604&amp;postID=2637807033885439138' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4306197867072890604/posts/default/2637807033885439138'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4306197867072890604/posts/default/2637807033885439138'/><link rel='alternate' type='text/html' href='http://oracolodeidb.blogspot.com/2009/03/ora-01940-cannot-drop-user-that-is.html' title='ORA-01940: Cannot drop a user that is currently connected'/><author><name>Simone Saravalli</name><uri>http://www.blogger.com/profile/16984004286817286244</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_Xl7hi_bur14/ScuXCfFRemI/AAAAAAAAAJ8/kEeuTF9I7GU/s72-c/26455646_a881b2696e_m.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4306197867072890604.post-556456001990469809</id><published>2009-02-13T11:51:00.005+01:00</published><updated>2009-02-13T12:07:52.710+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='RMAN'/><category scheme='http://www.blogger.com/atom/ns#' term='10g'/><category scheme='http://www.blogger.com/atom/ns#' term='Oracle'/><category scheme='http://www.blogger.com/atom/ns#' term='Youtube'/><title type='text'>Archivelog mode e nu metal</title><content type='html'>In quanto appassionato di Oracle e di musica metal (soprattutto nelle sue varianti nu ed heavy), quando ho visto questo video ho pensato di riproporlo!&lt;br /&gt;&lt;br /&gt;&lt;object width="425" height="344"&gt;&lt;param name="movie" value="http://www.youtube.com/v/r36n5ySFp50&amp;color1=0xb1b1b1&amp;color2=0xcfcfcf&amp;feature=player_embedded&amp;fs=1"&gt;&lt;/param&gt;&lt;param name="allowFullScreen" value="true"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/r36n5ySFp50&amp;color1=0xb1b1b1&amp;color2=0xcfcfcf&amp;feature=player_embedded&amp;fs=1" type="application/x-shockwave-flash" allowfullscreen="true" width="425" height="344"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;Il video spiega come mettere un db Oracle 10g in &lt;a href="http://tkyte.blogspot.com/2005/09/archive-log-mode.html"&gt;archivelog mode&lt;/a&gt; e come sottofondo sonoro propone i mitici &lt;a href="http://it.wikipedia.org/wiki/System_of_a_Down"&gt;System Of A Down&lt;/a&gt;.&lt;br /&gt;Per completezza, vi rimando all'ottimo &lt;a href="http://beyondoracle.wordpress.com/"&gt;blog&lt;/a&gt; dell'autore del video ed alla sua &lt;a href="http://www.youtube.com/user/jricard00liveira"&gt;pagina personale su Youtube&lt;/a&gt; con altri video interessanti su Oracle.&lt;br /&gt;&lt;br /&gt;Buona visione e buon ascolto!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4306197867072890604-556456001990469809?l=oracolodeidb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oracolodeidb.blogspot.com/feeds/556456001990469809/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4306197867072890604&amp;postID=556456001990469809' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4306197867072890604/posts/default/556456001990469809'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4306197867072890604/posts/default/556456001990469809'/><link rel='alternate' type='text/html' href='http://oracolodeidb.blogspot.com/2009/02/archivelog-mode-e-nu-metal.html' title='Archivelog mode e nu metal'/><author><name>Simone Saravalli</name><uri>http://www.blogger.com/profile/16984004286817286244</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4306197867072890604.post-7931391701021458803</id><published>2009-02-03T10:05:00.013+01:00</published><updated>2009-02-08T12:05:08.797+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='restore'/><category scheme='http://www.blogger.com/atom/ns#' term='Data Pump'/><category scheme='http://www.blogger.com/atom/ns#' term='recover'/><category scheme='http://www.blogger.com/atom/ns#' term='RMAN'/><category scheme='http://www.blogger.com/atom/ns#' term='streams'/><category scheme='http://www.blogger.com/atom/ns#' term='10g'/><category scheme='http://www.blogger.com/atom/ns#' term='Oracle'/><title type='text'>Oracle Streams</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_Xl7hi_bur14/SYgJSyrd8eI/AAAAAAAAAJc/qP3cldeLbSU/s1600-h/140362278_2d728581dd_m.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 200px; height: 132px;" src="http://3.bp.blogspot.com/_Xl7hi_bur14/SYgJSyrd8eI/AAAAAAAAAJc/qP3cldeLbSU/s200/140362278_2d728581dd_m.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5298495180047774178" /&gt;&lt;/a&gt;Qualche giorno fa, incuriosito dalla lettura di un &lt;a href="http://prodlife.wordpress.com/2008/02/21/oracle-streams-replication-example/"&gt;post di Chen Shapira&lt;/a&gt;, ho iniziato a studiare e a fare qualche prova con &lt;a href="http://www.oracle.com/technology/products/dataint/htdocs/streams_fo.html"&gt;Oracle Streams&lt;/a&gt;, una tecnologia che permette la propagazione e la gestione di dati, transazioni ed eventi nell'ambito di un database, oppure tra un database sorgente ed uno di destinazione.&lt;br /&gt;&lt;br /&gt;In sostanza, Oracle Streams consente di replicare uno schema presente su un db sorgente in un db di destinazione, inoltre, ogni istruzione DDL, oppure DML eseguita nell'ambito dello schema da replicare presente sul db sorgente verrà eseguita anche sullo schema replicato presente nel db di destinazione.&lt;br /&gt;Su databases OLTP, il processo di estrazione dei dati non può essere eseguito direttamente poichè interferirebbe con le normali istruzioni DDL/DML, perciò l'architettura Oracle Streams utilizza gli archivelog, decisamente mento intrusivi.&lt;br /&gt;&lt;span id="fullpost"&gt;Prima di poter utilizzare uno stream Oracle, è necessario assicurarsi che siano soddisfatti alcuni prerequisiti:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;1)&lt;/span&gt; configurare opportunamente i due db server in modo tale che sia possibile eseguire tnsping dal db server sorgente a quello di destinazione e viceversa&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;2)&lt;/span&gt; porre in ARCHIVELOG MODE entrambi i database&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;3)&lt;/span&gt; creare un utente per la gestione dello stream Oracle ad entrambi i database&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;4)&lt;/span&gt; creare un db link per la creazione iniziale, da eseguire solo la prima volta, dello schema replica sul db di destinazione mediante le utilities di data pump&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;5)&lt;/span&gt; creare un db link dal db di destinazione a quello sorgente, utile nel caso in cui la creazione iniziale dello schema replica avvenga a livello di rete senza servirsi di un file dmp intermedio (io ho creato anche questo db link in ogni caso)&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;6)&lt;/span&gt; configurazione delle utilities expdp ed impdp sia sul database sorgente sia su qyello di destinazione&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;7)&lt;/span&gt; creare una directory Oracle e una corrispondente directory sul file system del db server sorgente per ospitare lo script generato dalla procedura DBMS_STREAMS_ADM.MAINTAIN_SCHEMAS che si occupa della replica dello schema via stream Oracle.&lt;br /&gt;&lt;br /&gt;Supponendo, per comodità che i punti 1) e 2) siano già soddisfatti, parto direttamente dal punto 3). D'ora in poi, la sigla "PROD" identifica il database sorgente e la sigla "TEST" identifica quello di destinazione. Lo schema da replicare sarà l'onnipresente "SCOTT"!&lt;br /&gt;&lt;br /&gt;1) OK&lt;br /&gt;2) OK&lt;br /&gt;3) creiamo un utente dedicato alla gestione dello stream, sia su PROD sia su TEST, connettendoci come utente SYS as SYSDBA:&lt;br /&gt;&lt;blockquote class="code"&gt;CREATE TABLESPACE streams_tbs DATAFILE '/u01/app/oracle/oradata/streams_tbs.dbf' SIZE 25M;&lt;br /&gt;&lt;br /&gt;CREATE USER strmadmin&lt;br /&gt;IDENTIFIED BY strmadminpw&lt;br /&gt;DEFAULT TABLESPACE streams_tbs&lt;br /&gt;QUOTA UNLIMITED ON streams_tbs;&lt;br /&gt;&lt;br /&gt;GRANT DBA TO strmadmin;&lt;br /&gt;&lt;br /&gt;BEGIN&lt;br /&gt;  DBMS_STREAMS_AUTH.GRANT_ADMIN_PRIVILEGE(&lt;br /&gt;  grantee =&gt; 'strmadmin',&lt;br /&gt;  grant_privileges =&gt; true);&lt;br /&gt;END;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;4) impostiamo un db link da PROD a TEST per l'importazione iniziale dello schema da replicare:&lt;br /&gt;&lt;blockquote class="code"&gt;-- su PROD&lt;br /&gt;connect strmadmin/strmadminpw@PROD&lt;br /&gt;&lt;br /&gt;CREATE DATABASE LINK TEST&lt;br /&gt;CONNECT TO STRMADMIN&lt;br /&gt;IDENTIFIED BY STRMADMINPW&lt;br /&gt;USING 'TEST';&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;5) ora creiamo anche un db link da TEST a PROD:&lt;br /&gt;&lt;blockquote class="code"&gt;-- su TEST&lt;br /&gt;connect strmadmin/strmadminpw@TEST&lt;br /&gt;&lt;br /&gt;CREATE DATABASE LINK PROD&lt;br /&gt;CONNECT TO STRMADMIN&lt;br /&gt;IDENTIFIED BY STRMADMINPW&lt;br /&gt;USING 'PROD';&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;6) configuriamo le utilities di data pump sui due db server mediante la creazione di una directory Oracle chiamata "source" sul db server che ospita PROD e di una directory Oracle chiamata "dest" sul db server che ospita TEST. Le due directories a livello di sistema operativo vanno create con gli appositi comandi del sistema operativo in uso (mkdir, per GNU/Linux):&lt;br /&gt;&lt;blockquote class="code"&gt;-- su PROD&lt;br /&gt;conn sys@PROD as sysdba&lt;br /&gt;CREATE OR REPLACE DIRECTORY source AS '/u01/app/oracle/oradata/source';&lt;br /&gt;GRANT READ, WRITE ON DIRECTORY source TO strmadmin;&lt;br /&gt;&lt;br /&gt;-- su TEST&lt;br /&gt;conn sys@TEST as sysdba&lt;br /&gt;CREATE OR REPLACE DIRECTORY dest AS '/u01/app/oracle/oradata/dest';&lt;br /&gt;GRANT READ, WRITE ON DIRECTORY dest TO strmadmin;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;7) creiamo una directory Oracle e una corrispondente directory sul file system del db server che ospita il database PROD. Questa directory conterrà lo script da eseguire per la replica dello schema SCOTT da PROD a TEST via stream Oracle:&lt;br /&gt;&lt;blockquote class="code"&gt;CONNECT strmadmin/strmadminpw@PROD&lt;br /&gt;CREATE OR REPLACE DIRECTORY SCRIPT_DIR AS '/home/oracle/script_dir';&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;Una volta soddisfatti tutti i requisiti, sul db server che ospita PROD mi sono creato uno script da lanciare come utente strmadmin con il seguente contenuto:&lt;br /&gt;&lt;blockquote class="code"&gt;DBMS_STREAMS_ADM.MAINTAIN_SCHEMAS(&lt;br /&gt;    schema_names               =&gt; 'scott',&lt;br /&gt;    source_database            =&gt; 'prod',&lt;br /&gt;    destination_database       =&gt; 'test',&lt;br /&gt;    capture_name               =&gt; 'capture_scott',&lt;br /&gt;    capture_queue_table        =&gt; 'rep_capture_queue_table',&lt;br /&gt;    capture_queue_name         =&gt; 'rep_capture_queue',&lt;br /&gt;    capture_queue_user         =&gt; null,&lt;br /&gt;    apply_name                 =&gt; 'apply_scott',&lt;br /&gt;    apply_queue_table          =&gt; 'rep_dest_queue_table',&lt;br /&gt;    apply_queue_name           =&gt; 'rep_dest_queue',&lt;br /&gt;    apply_queue_user           =&gt; null,&lt;br /&gt;    propagation_name           =&gt; 'prop_scott',&lt;br /&gt;    log_file                   =&gt; 'exp_scott.log',&lt;br /&gt;    bi_directional             =&gt; false,&lt;br /&gt;    include_ddl                =&gt; true,&lt;br /&gt;    instantiation              =&gt; dbms_streams_adm.instantiation_schema,&lt;br /&gt;    perform_actions            =&gt; false,       &lt;br /&gt;    script_name                =&gt; 'schema_replication.sql',&lt;br /&gt;    script_directory_object    =&gt; 'script_dir'&lt;br /&gt;    );&lt;br /&gt;END;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;Direi che è d'obbligo una spiegazione dei parametri fondamentali impostati, altrimenti non si capisce molto:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;* schema_names:&lt;/span&gt; il nome dello schema (o degli schemi, separati da virgole) da propagare (in questo caso scott)&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;* source_database:&lt;/span&gt; il database sorgente&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;* destination_database:&lt;/span&gt; il database di destinazione&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;* capture_name:&lt;/span&gt; il nome del processo di cattura configurato per acquisire le modifiche effettuate su PROD&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;* capture_queue_table:&lt;/span&gt; il nome della tabella di accodamento per ogni coda utilizzata da un processo di cattura&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;* capture_queue_name:&lt;/span&gt; il nome di ogni coda utilizzata da un processo di cattura&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;* capture_queue_user:&lt;/span&gt; va impostato a null per indicare che la procedura non può dare il grant di alcun privilegio&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;* propagation_name:&lt;/span&gt; il nome di ciascuna propagazione configurata per propagare le modifiche&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;* log_file:&lt;/span&gt; il nome del file di log generato da expdp&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;* bi_directional:&lt;/span&gt; se impostato a 'false' indica che la propagazione dele informazioni è monodirezionale dal db di produzione a quello di test&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;* include_dll:&lt;/span&gt; impostato a 'true' indica che sia le istruzioni DDL sia quelle DML vanno replicate dal db sorgente a quello di destinazione&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;* instantiation:&lt;/span&gt; se impostato a DBMS_STREAMS_ADM.INSTANTIATION_SCHEMA indica che l'istanziazione dello schema di destinazione verrà effettuata utilizzando le utilities expdp/impdp&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;* perform_action:&lt;/span&gt; se impostato a 'true' consente l'esecuzione dello script PL/SQL, se impostato a 'false' ne memorizza il risultato in un ulteriore script che verrà posizionato nella directory indicata dal parametro 'script_directory_object'&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;* script_name:&lt;/span&gt; impostato con la stringa 'schema_replication.sql'. Questo script verrà creato nella directory Oracle 'script_dir' (/home/oracle/script_dir) e conterrà tutti i passaggi per istanziare lo schema di replica&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;* script_directory_object:&lt;/span&gt; la directory Oracle in cui memorizzare lo script 'schema_replication.sql'&lt;br /&gt;&lt;br /&gt;Lanciando lo script non viene avviato lo stream Oracle, quindi nemmeno il processo di replica dell'utente SCOTT sul db TEST, ma viene creato lo script schema_replication.sql nella directory /home/oracle/script_dir che andrà eseguito a parte sempre come utente strmadmin@PROD. &lt;br /&gt;La creazione dello script intermedio consente di verificare se non vi sono stati errori durante l'esecuzione della procedura DBMS_STREAMS_ADM.INSTANTIATION_SCHEMA; in alternativa, è sempre possibile saltare la creazione dello script intermedio e lanciare direttamente la procedura DBMS_STREAMS_ADM.INSTANTIATION_SCHEMA con questi parametri:&lt;br /&gt;&lt;blockquote class="code"&gt;DBMS_STREAMS_ADM.MAINTAIN_SCHEMAS(&lt;br /&gt;    schema_names               =&gt; 'scott',&lt;br /&gt;    source_database            =&gt; 'prod',&lt;br /&gt;    destination_database       =&gt; 'test',&lt;br /&gt;    capture_name               =&gt; 'capture_scott',&lt;br /&gt;    capture_queue_table        =&gt; 'rep_capture_queue_table',&lt;br /&gt;    capture_queue_name         =&gt; 'rep_capture_queue',&lt;br /&gt;    capture_queue_user         =&gt; null,&lt;br /&gt;    apply_name                 =&gt; 'apply_scott',&lt;br /&gt;    apply_queue_table          =&gt; 'rep_dest_queue_table',&lt;br /&gt;    apply_queue_name           =&gt; 'rep_dest_queue',&lt;br /&gt;    apply_queue_user           =&gt; null,&lt;br /&gt;    propagation_name           =&gt; 'prop_scott',&lt;br /&gt;    log_file                   =&gt; 'exp_scott.log',&lt;br /&gt;    bi_directional             =&gt; false,&lt;br /&gt;    include_ddl                =&gt; true,&lt;br /&gt;    instantiation              =&gt; dbms_streams_adm.instantiation_schema,&lt;br /&gt;    perform_actions            =&gt; true       &lt;br /&gt;    );&lt;br /&gt;END;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;Da notare che la direttiva "perform_actions" ora è impostata a true e non sono presenti le direttive "script_name" e "script_directory_object".&lt;br /&gt;Se tutto funziona correttamente, sul db TEST sarà presente una replica esatta dello schema SCOTT del db PROD; ora non resta che testare se una qualsiasi istruzione DDL/DML eseguita sullo schema SCOTT@PROD viene replicata anche su SCOTT@TEST.&lt;br /&gt;Buona replica!!!&lt;br /&gt;&lt;br /&gt;Ah, lascio qualche utile link per approfondire l'argomento:&lt;br /&gt;* &lt;a href="http://www.dba-oracle.com/t_streams_schema_replication.htm"&gt;http://www.dba-oracle.com/t_streams_schema_replication.htm&lt;/a&gt;&lt;br /&gt;* &lt;a href="http://ca.geocities.com/mosicr@rogers.com/OracleStreams101.htm"&gt;http://ca.geocities.com/mosicr@rogers.com/OracleStreams101.htm&lt;/a&gt;&lt;br /&gt;* &lt;a href="http://download.oracle.com/docs/cd/B19306_01/appdev.102/b14258/d_strm_a.htm#ARPLS305"&gt;http://download.oracle.com/docs/cd/B19306_01/appdev.102/b14258/d_strm_a.htm#ARPLS305&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4306197867072890604-7931391701021458803?l=oracolodeidb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oracolodeidb.blogspot.com/feeds/7931391701021458803/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4306197867072890604&amp;postID=7931391701021458803' title='1 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4306197867072890604/posts/default/7931391701021458803'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4306197867072890604/posts/default/7931391701021458803'/><link rel='alternate' type='text/html' href='http://oracolodeidb.blogspot.com/2009/02/oracle-streams.html' title='Oracle Streams'/><author><name>Simone Saravalli</name><uri>http://www.blogger.com/profile/16984004286817286244</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_Xl7hi_bur14/SYgJSyrd8eI/AAAAAAAAAJc/qP3cldeLbSU/s72-c/140362278_2d728581dd_m.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4306197867072890604.post-8665228557830681134</id><published>2009-01-26T08:11:00.013+01:00</published><updated>2009-02-03T20:42:03.032+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='10g'/><category scheme='http://www.blogger.com/atom/ns#' term='Oracle'/><category scheme='http://www.blogger.com/atom/ns#' term='SQL Server'/><title type='text'>Oracle e SQL Server</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_Xl7hi_bur14/SX1jq0lbS7I/AAAAAAAAAJM/pe0ZAPXzx18/s1600-h/handshake.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 200px; height: 132px;" src="http://2.bp.blogspot.com/_Xl7hi_bur14/SX1jq0lbS7I/AAAAAAAAAJM/pe0ZAPXzx18/s200/handshake.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5295498324178848690" /&gt;&lt;/a&gt;&lt;br /&gt;Settimana scorsa mi è stato chiesto se fosse possibile condividere l'anagrafica fornitori contenuta in una tabella su un nostro db Oracle con un software di gestione magazzino che utilizza una base dati su piattaforma SQL Server 2005.&lt;br /&gt;Una breve ricerca su Google mi ha portato ai &lt;a href="http://msdn.microsoft.com/en-us/library/ms188279(SQL.90).aspx"&gt;linked servers&lt;/a&gt;, ossia componenti di Microsoft SQL Server (io ho usato la versione 2005 Standard Edition) che consentono a questo RDBMS di poter comunicare con sorgenti dati eterogenee come Oracle, oppure AS400 e persino con fogli di calcolo Excel!&lt;br /&gt;&lt;span id="fullpost"&gt;Le componenti di un linked server sono due:&lt;br /&gt;&lt;br /&gt;* provider OLE DB (una DLL che gestisce la comunicazione con una sorgente dati)&lt;br /&gt;* sorgente dati OLE DB&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_Xl7hi_bur14/SX1thXX5tBI/AAAAAAAAAJU/9sEHjVEhmuw/s1600-h/ole_db.gif"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 200px; height: 166px;" src="http://2.bp.blogspot.com/_Xl7hi_bur14/SX1thXX5tBI/AAAAAAAAAJU/9sEHjVEhmuw/s200/ole_db.gif" border="0" alt=""id="BLOGGER_PHOTO_ID_5295509156834948114" /&gt;&lt;/a&gt;&lt;br /&gt;Cercando una guida che spiegasse come impostare un linked server da SQL Server ad Oracle mi sono imbattuto in &lt;a href="http://gleew.wordpress.com/2008/03/19/sql-server-linked-server-to-oracle/"&gt;questo post sul blog di Greg Wright&lt;/a&gt;, davvero chiaro e ben fatto.&lt;br /&gt;Sostanzialmente, Greg suggerisce in prima istanza di installare il client Oracle (possibilmente in una versione compatibile con quella del db Oracle cui ci si deve collegare) sulla stessa macchina su cui è installato SQL Server, quindi, usando Net Manager, oppure modificando manualmente il file tnsnames.ora, si deve configurare un service name che punti al db Oracle desiderato. Nel post, segue la configurazione del linked server ed, infine, un esempio di query lanciata via SQL Server sul db Oracle a cui ci si deve collegare.&lt;br /&gt;In particolare, volendo eseguire una SELECT sul db Oracle via linked server, la sintassi da utilizzare è:&lt;br /&gt;&lt;blockquote class="code"&gt;select * from openquery(linked server, 'select * from dbname.tablename where clause')&lt;/blockquote&gt;La chiave dell'istruzione precedente è la funzione &lt;a href="http://www.marcopipino.it/sql/openquery.php"&gt;openquery&lt;/a&gt; il cui scopo è quello di restituire una tabella con il record set della query (il secondo parametro della funzione) eseguito sul db (Oracle) a cui ci si collega mediante linked server (il primo parametro della funzione).&lt;br /&gt;Volendo è anche possibile eseguire join tra tabelle SQL Server e tabelle Oracle con una sintassi del tipo:&lt;br /&gt;&lt;blockquote class="code"&gt;select tabellaSQLServer.campo1, X.campo2, X.campo3 &lt;br /&gt;from tabellaSQLServer&lt;br /&gt;join openquery(nomeLinkedServer, 'select * from AltraTabella where Condizione=1') X&lt;br /&gt; on tabellaSQLServer.campoSQLServer = X.campoAltraTabella&lt;br /&gt;&lt;/blockquote&gt;Bene, è tutto, ora continuo con i miei test di connessione SQL Server - Oracle!&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4306197867072890604-8665228557830681134?l=oracolodeidb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oracolodeidb.blogspot.com/feeds/8665228557830681134/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4306197867072890604&amp;postID=8665228557830681134' title='2 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4306197867072890604/posts/default/8665228557830681134'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4306197867072890604/posts/default/8665228557830681134'/><link rel='alternate' type='text/html' href='http://oracolodeidb.blogspot.com/2009/01/oracle-e-sql-server.html' title='Oracle e SQL Server'/><author><name>Simone Saravalli</name><uri>http://www.blogger.com/profile/16984004286817286244</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_Xl7hi_bur14/SX1jq0lbS7I/AAAAAAAAAJM/pe0ZAPXzx18/s72-c/handshake.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4306197867072890604.post-7014746850445936571</id><published>2009-01-25T15:30:00.011+01:00</published><updated>2009-01-25T17:19:53.503+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='DBA'/><category scheme='http://www.blogger.com/atom/ns#' term='10g'/><category scheme='http://www.blogger.com/atom/ns#' term='Oracle'/><title type='text'>L'ABC del DBA</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_Xl7hi_bur14/SXyFGn_fY8I/AAAAAAAAAJE/-_4G0BsAw7I/s1600-h/abbecedario.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 200px; height: 127px;" src="http://4.bp.blogspot.com/_Xl7hi_bur14/SXyFGn_fY8I/AAAAAAAAAJE/-_4G0BsAw7I/s200/abbecedario.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5295253610741851074" /&gt;&lt;/a&gt;&lt;br /&gt;Lavoro con Oracle da un paio d'anni e da circa uno mi sono messo in testa che da grande farò il DBA, ebbene sì! :-D&lt;br /&gt;&lt;br /&gt;Come chiunque si avvicina per la prima volta ad un argomento nuovo, ho fin da subito cercato della documentazione che potesse chiarirmi i vari aspetti di Oracle.&lt;br /&gt;Secondo la mia esperienza, le fonti principali da cui trarre informazioni sono:&lt;br /&gt;&lt;br /&gt;* colleghi (molto utile poter chiedere direttamente a chi ne sa di più)&lt;br /&gt;* libri (la vecchia carta stampata è sempre un buon punto di partenza)&lt;br /&gt;* Internet&lt;br /&gt;&lt;span id="fullpost"&gt;Dopo aver rotto non poco le scatole a qualche volenteroso collega con tutti i miei dubbi (perdonatemi) e vedendo che il ruolo di DBA mi appassionava sempre più, ho iniziato a sfogliare letteralmente centinaia di pagine in formato pdf sui più disparati argomenti che ruotano attorno a questo RDBMS, iscrivermi a forum, mailing list, gruppi su Facebook, ecc. Tutto ciò mi ha permesso, di volta in volta, di risolvere problemi di varia natura, ad esempio legati all'installazione di Oracle Database Server, oppure alla gestione dei backup, o ancora all'esecuzione di queries SQL per la generazione di report e così via, ma ho sempre avuto la sensazione che mi mancasse un percorso più ordinato (dal punto di vista del DBA, come sempre) del tipo:&lt;br /&gt;&lt;br /&gt;BASI DI ORACLE --&gt; INSTALLAZIONE DBMS --&gt; CREAZIONE DB --&gt; GESTIONE BACKUP --&gt; PERFORMANCE TUNING&lt;br /&gt;&lt;br /&gt;Purtroppo questo mi ha portato a dover riprendere in mano molte volte le stesse cose perchè magari scoprivo di non averle studiate ed approfondite a sufficienza in precedenza, oppure perchè scoprivo un documento che avrei dovuto studiare prima perdendo, di fatto, molto tempo.&lt;br /&gt;&lt;br /&gt;Con questo post mi ripropongo di csotruire una sorta di abecedario (vedi immagine all'inizio del post) utile per approciare in modo ordinato ad Oracle ed alla sua documentazione.&lt;br /&gt;&lt;br /&gt;1) BASI DI ORACLE: &lt;a href="http://download.oracle.com/docs/cd/B19306_01/server.102/b14220/toc.htm"&gt;Oracle Database Concepts&lt;/a&gt; è il documento ufficiale Oracle che spiega proprio le fondamenta del famoso RDBMS&lt;br /&gt;&lt;br /&gt;2) INSTALLAZIONE: in questo caso viene in soccorso un'intera &lt;a href="http://www.oracle.com/pls/db102/portal.portal_db?selected=11"&gt;sezione della documentazione Oracle&lt;/a&gt; (sempre versione 10.2 del dbms). Non è necessario leggere tutti i documenti proposti (sono veramente tanti), ma è sufficiente scegliere quello adatto in base alla propria piattaforma hw (32/64 bit) e sw (Microsoft Windows, FNU/Linux, Solaris, ecc)&lt;br /&gt;&lt;br /&gt;3) CREAZIONE DB: la guida fondamentale a cui fare riferimento (e anche la più tecnica) è quella denominata &lt;a href="http://download.oracle.com/docs/cd/B19306_01/server.102/b14231/toc.htm"&gt;Administrator's Guide&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;4) GESTIONE BACKUP: si può trovare la sezione relativa (Backup and Recovery) nella homepage della documentazione relativa ad Oracle Database Server 10.2 tramite il &lt;a href="http://www.oracle.com/pls/db102/portal.portal_db?selected=4"&gt;tab "Administration"&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;5) PERFORMANCE TUNING: argomento trattato dalla &lt;a href="http://download.oracle.com/docs/cd/B19306_01/server.102/b14211/toc.htm"&gt;"Performance Tuning Guide" &lt;/a&gt; su come configurare e monitorare le prestazioni di Oracle Database Server&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;I punti sopra indicati costituiscono, a mio avviso, il patrimonio di conoscenze che dovrebbe essere proprio della figura del DBA e da cui partire prima di interessarsi di altri aspetti di questo potente e complesso RDBMS.&lt;br /&gt;Buona lettura!&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4306197867072890604-7014746850445936571?l=oracolodeidb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oracolodeidb.blogspot.com/feeds/7014746850445936571/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4306197867072890604&amp;postID=7014746850445936571' title='2 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4306197867072890604/posts/default/7014746850445936571'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4306197867072890604/posts/default/7014746850445936571'/><link rel='alternate' type='text/html' href='http://oracolodeidb.blogspot.com/2009/01/labc-del-dba.html' title='L&apos;ABC del DBA'/><author><name>Simone Saravalli</name><uri>http://www.blogger.com/profile/16984004286817286244</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_Xl7hi_bur14/SXyFGn_fY8I/AAAAAAAAAJE/-_4G0BsAw7I/s72-c/abbecedario.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4306197867072890604.post-1519314715957678997</id><published>2009-01-15T15:59:00.025+01:00</published><updated>2009-01-16T16:25:51.255+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='DBA'/><category scheme='http://www.blogger.com/atom/ns#' term='CPU'/><category scheme='http://www.blogger.com/atom/ns#' term='10g'/><category scheme='http://www.blogger.com/atom/ns#' term='Oracle'/><title type='text'>Oracle Critical Patch Update Gennaio 2009</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_Xl7hi_bur14/SW9PqWueKbI/AAAAAAAAAGw/uXAGS7WVDQc/s1600-h/2264778318_3885b5e535_m.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 200px; height: 147px;" src="http://1.bp.blogspot.com/_Xl7hi_bur14/SW9PqWueKbI/AAAAAAAAAGw/uXAGS7WVDQc/s200/2264778318_3885b5e535_m.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5291535676257216946" /&gt;&lt;/a&gt;&lt;br /&gt;Martedì 13 Gennaio è stata una giornata piuttosto piena in termini di patch con il rilascio in contemporanea del bollettino di sicurezza &lt;a href="http://blogs.technet.com/feliciano_intini/archive/2009/01/13/analisi-di-rischio-sui-bollettini-di-sicurezza-microsoft-gennaio-2009.aspx"&gt;MS09-001&lt;/a&gt; di Microsoft, relativo al protocollo SMB di Windows e il &lt;a href="http://www.oracle.com/technology/deploy/security/critical-patch-updates/cpujan2009.html"&gt;Critical Patch Update&lt;/a&gt; rilasciato da Oracle per questo primo trimestre del 2009.&lt;br /&gt;&lt;br /&gt;Approfitto di questo doppio rilascio per creare un mio personale parallelismo tra l'attività dell'amministratore di sistema e quella dell'amministratore di database relativamente all'installazione delle patches (non ho certificazioni per nessuno dei due ruoli, ma di fatto è ciò di cui mi occupo per lavoro):&lt;br /&gt;&lt;span id="fullpost"&gt;&lt;br /&gt;1) entrambi devono potersi documentare su eventuali patch updates anche prima che essi vengano rilasciati, allo scopo di raccogliere informazioni sulle vulnerabilità coperte dalle patches, predisporre un sistema di test su cui provarne l'installazione prima di passare in produzione, schedulare l'operazione di update ed avvertire, di conseguenza, gli utenti di un eventuale downtime dei servizi offerti dai server interessati dall'aggiornamento.&lt;br /&gt;In questo senso, un buon punto di partenza lo fornisce la rete. L'amministratore di sistemi Microsoft Windows non attenderà la notifica automatica di Windows Update, ma si avvarrà di siti come il &lt;a href="http://blogs.technet.com/feliciano_intini/default.aspx"&gt;blog di Feliciano Intini&lt;/a&gt;, ad esempio; allo stesso modo, il dba Oracle può fare riferimento ad &lt;a href="http://www.oracle.com/technology/index.html"&gt;OTN (Oracle Technology Network)&lt;/a&gt;.&lt;br /&gt;Insomma, l'imperativo è &lt;span style="font-weight:bold;"&gt;ESSERE SEMPRE INFORMATI!&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;2) all'uscita di una nuova patch, sia il sysadmin sia il dba devono valutare l'impatto che l'applicazione della patch stessa avrà sui propri server possibilmente testandola, se il tempo lo consente, su una &lt;span style="font-style:italic;"&gt;"sandbox"&lt;/span&gt;, ossia un ambiente di prova.&lt;br /&gt;La fase di testing è fondamentale per assicurarsi che l'update vada a buon fine e che non crei problemi, una volta installato, con la configurazione del server/dbms&lt;br /&gt;&lt;br /&gt;3) dopo una necessaria e fondamentale fase di testing, l'applicazione della patch va effettuata anche nell'ambiente di produzione (operazione che dovrebbe avvenire quando gli utenti non sono connessi e che non dovrebbe causare problemi, se è stato effettuato un testing sufficiente, come indicato al punto 2)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Lo scopo di questo post, innanzitutto, è quello di acquisire le competenze necessarie per eseguire l'installazione del CPU di Gennaio 2009 (punto 1), mentre la fase di installazione del patch update in un ambiente di test (punto 2) sarà l'argomento di un post che pubblicherò a breve!&lt;br /&gt;&lt;br /&gt;Ok innanzitutto bisogna documentarsi perciò mi dirigo sulla &lt;a href="http://www.oracle.com/technology/deploy/security/alerts.htm"&gt;sezione di OTN dedicata ai Critical Patch Update&lt;/a&gt;; il mio obiettivo è dare una risposta ad alcune domande:&lt;br /&gt;&lt;br /&gt;    * quali vulnerabilità vengono risolte dal CPU di Gennaio 2009?&lt;br /&gt;    * a quali prodotti (e relative versioni) Oracle si può applicare?&lt;br /&gt;    * conviene installarlo o ci sono controindicazioni?&lt;br /&gt;    * come si installa?&lt;br /&gt;&lt;br /&gt;Il link relativo ai CPU su OTN contiene molte utili informazioni, ad esempio si apprende che i patch update vengono rilasciati su base trimestrale, infatti le prossime date di rilascio saranno:&lt;br /&gt;&lt;br /&gt;    * 14 Aprile 2009&lt;br /&gt;    * 14 Luglio 2009&lt;br /&gt;    * 13 Ottobre 2009&lt;br /&gt;    * 12 Gennaio 2010&lt;br /&gt;&lt;br /&gt;Oltre a questo, OTN fornisce due utili link a risorse che indicano rispettivamente come abilitare &lt;a href="http://www.oracle.com/technology/deploy/security/securityemail.html"&gt;la notifica via mail&lt;/a&gt; dei CPU non appena questi vengono rilasciati e un documento in formato pdf con le &lt;a href="http://www.oracle.com/technology/deploy/security/pdf/cpu_whitepaper.pdf"&gt;"Best Practices"&lt;/a&gt; per installare i patch updates.&lt;br /&gt;In particolare, la &lt;a href="http://www.oracle.com/technology/deploy/security/critical-patch-updates/cpujan2009.html"&gt;pagina su OTN dedicata al CPU di Gennaio 2009&lt;/a&gt; contiene un elenco, che riporto per comodità anche nell'immagine sottostante, con tutti i software e relative versioni di Oracle interessati all'applicazione della patch:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_Xl7hi_bur14/SXBjfiyBgSI/AAAAAAAAAG4/6-DUkJxz-0c/s1600-h/CPU_JAN2009-sw_interessati.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 200px; height: 136px;" src="http://2.bp.blogspot.com/_Xl7hi_bur14/SXBjfiyBgSI/AAAAAAAAAG4/6-DUkJxz-0c/s200/CPU_JAN2009-sw_interessati.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5291838955724046626" /&gt;&lt;/a&gt;&lt;br /&gt;Supponendo, come nel mio caso, di voler applicare la patch alla componente Database Server 10g di Oracle, dalla tabella precedente si nota, ad esempio, come la versione 10.2.0.1 del DBMS non sia supportata (qualche informazione in più la si può leggere anche da &lt;a href="http://forums.oracle.com/forums/thread.jspa?messageID=3215026&amp;#3215026"&gt;questo thread sul forum di OTN&lt;/a&gt;), così come versioni di Oracle Database Server antecedenti alla 9.2.0.8, ecc.&lt;br /&gt;Continuando nella lettura della stessa pagina su OTN, si scopre anche che i patch updates sono cumulativi per molti prodotti Oracle (non tutti però), ossia ogni CPU include tutti i fixes del CPU precedente. Fortunatamente questo caso si applica ad Oracle Database Server quindi basterà installare il patch update di Gennaio 2009 per avere anche i fixes dei patch updates precedenti!&lt;br /&gt;Ancora la stessa pagina di OTN contiene una tabella, riportata anche qui di seguito, con la lista dei prodotti interessati dal CPU di Gennaio 2009, i link alle matrici dei rischi (tabelle che riportano l'elenco delle vulnerabilità con relativa descrizione per ciascuna famiglia di prodotti per cui Oracle raccomanda di installare la patch), links a Metalink, ecc.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_Xl7hi_bur14/SXBopjI0WaI/AAAAAAAAAHA/r41iLBydAes/s1600-h/CPU_JAN2009-pointers.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 200px; height: 75px;" src="http://1.bp.blogspot.com/_Xl7hi_bur14/SXBopjI0WaI/AAAAAAAAAHA/r41iLBydAes/s200/CPU_JAN2009-pointers.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5291844625176484258" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_Xl7hi_bur14/SXBrZCyjI1I/AAAAAAAAAHI/CytEcIM_1Bc/s1600-h/CPU_JAN2009-db_risk_matrix.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 200px; height: 152px;" src="http://2.bp.blogspot.com/_Xl7hi_bur14/SXBrZCyjI1I/AAAAAAAAAHI/CytEcIM_1Bc/s200/CPU_JAN2009-db_risk_matrix.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5291847640150123346" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;L'immagine seguente, infine, riporta la tabella prelevata dalla nota Metalink 753340.1 relativa al CPU di Gennaio 2009 in cui viene fornito il riassunto delle note, sempre su Metalink, per accedere alla documentazione e al download del CPU JAN 2009 per varie piattaforme e versioni di Oracle Database Server:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_Xl7hi_bur14/SXCi5vt1VwI/AAAAAAAAAHQ/X2iE0f8Efwo/s1600-h/CPU_JAN_2009-metalink_notes.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 200px; height: 88px;" src="http://2.bp.blogspot.com/_Xl7hi_bur14/SXCi5vt1VwI/AAAAAAAAAHQ/X2iE0f8Efwo/s200/CPU_JAN_2009-metalink_notes.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5291908675105281794" /&gt;&lt;/a&gt;&lt;br /&gt;Per questa volta è tutto, di materiale da digerire ce n'è in abbondanza. Nel prossimo post tratterò l'installazione del CPU JAN 2009 sul mio sistema di test, ossia una macchina virtuale Debian GNU/Linux con installato Oracle Database alla versione 10.2.0.4, il tutto su VMware ESXi!&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4306197867072890604-1519314715957678997?l=oracolodeidb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oracolodeidb.blogspot.com/feeds/1519314715957678997/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4306197867072890604&amp;postID=1519314715957678997' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4306197867072890604/posts/default/1519314715957678997'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4306197867072890604/posts/default/1519314715957678997'/><link rel='alternate' type='text/html' href='http://oracolodeidb.blogspot.com/2009/01/oracle-critical-patch-update-gennaio.html' title='Oracle Critical Patch Update Gennaio 2009'/><author><name>Simone Saravalli</name><uri>http://www.blogger.com/profile/16984004286817286244</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_Xl7hi_bur14/SW9PqWueKbI/AAAAAAAAAGw/uXAGS7WVDQc/s72-c/2264778318_3885b5e535_m.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4306197867072890604.post-4832717043010785591</id><published>2009-01-14T16:24:00.012+01:00</published><updated>2009-01-15T15:26:15.595+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sviluppo web'/><title type='text'>Estendere le funzionalità offerte da Blogger</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_Xl7hi_bur14/SW8ny_JvaOI/AAAAAAAAAGo/1DoU_MYVXm8/s1600-h/2742110557_a6046162d3_m.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 170px; height: 200px;" src="http://4.bp.blogspot.com/_Xl7hi_bur14/SW8ny_JvaOI/AAAAAAAAAGo/1DoU_MYVXm8/s200/2742110557_a6046162d3_m.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5291491844082854114" /&gt;&lt;/a&gt;&lt;br /&gt;Ieri mi sono ritrovato con un pò di tempo libero quindi ne ho approfittato per studiare le potenzialità di Blogger, la piattaforma messa a disposizione da Google per creare in modo semplice e veloce un blog, proprio come questo.&lt;br /&gt;Blogger consente, una volta messo in piedi lo scheletro del proprio blog (interfaccia grafica mediante css già pronti all'uso, gadget da inserire nel pannello laterale per arricchire le proprie pagine, ecc), di estenderne ulteriormente le funzionalità mediante l'inclusione di widget creati da terzi, purchè compatibili con la piattaforma stessa. Decisamente interessante per non fare qualche prova!&lt;br /&gt;&lt;span id="fullpost"&gt;&lt;br /&gt;Per prima cosa ho cercato in rete qualche risorsa che trattasse bene l'argomento e sono capitato su &lt;a href="http://creareblog.blogspot.com/"&gt;Creareblog&lt;/a&gt;. Gli howto presentati da Tenebrae, l'autore del blog, sono veramente tanti e ben fatti e vi consiglio di leggerli se siete interessati all'argomento!&lt;br /&gt;&lt;br /&gt;Le modifiche apportate al mio blog sono sia estetiche sia funzionali:&lt;br /&gt;&lt;br /&gt;- rimossa la barra superiore aggiunta di default ai blog della piattaforma blogspot (non si incorre in nessuna bega legale facendo ciò, quindi perchè no?)&lt;br /&gt;&lt;br /&gt;- Blogger non consente, di default, di pubblicare solo un'introduzione nella homepage per gli articoli troppo lunghi e di pubblicare i post per intero in pagine a parte (raggiungibili dall'utente cliccando su un link del tipo &lt;span style="font-style:italic;"&gt;"Leggi tutto"&lt;/span&gt;). Ora invece si può! :-D Molto comodo!&lt;br /&gt;&lt;br /&gt;- Per differenziare le righe di codice dal resto del testo, durante la composizione dei post utilizzavo i tag &lt;span style="font-style:italic;"&gt;pre&lt;/span&gt; e &lt;span style="font-style:italic;"&gt;tt&lt;/span&gt;. Ho quindi modificato il css aggiungendo le righe seguenti:&lt;br /&gt;&lt;br /&gt;&lt;blockquote class="code"&gt;/* Stile del codice */&lt;br /&gt;.code {&lt;br /&gt;   font-family:courier new;&lt;br /&gt;   font-size:85%;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;blockquote.code {&lt;br /&gt;   background: Gainsboro;&lt;br /&gt;   border: 1px solid LightSlateGray;&lt;br /&gt;   padding: 5px 5px;&lt;br /&gt;   white-space: pre;&lt;br /&gt;}&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;Il risultato lo potete vedere qui sopra.&lt;br /&gt;&lt;br /&gt;- Ho aggiunto una &lt;span style="font-style:italic;"&gt;nuvola di tag&lt;/span&gt; al pannello laterale. Sicuramente meno comoda della classica lista di tag bene ordinati, probabilmente fa anche venire il mal di mare, ma a me me piace ;-)&lt;br /&gt;&lt;br /&gt;- Ho inserito anche un motore di ricerca che sfrutta quello di Google come base, per gli articoli presenti nel blog (anche questa componente è accessibile dalla barra laterale). Si è trattato di un'aggiunta praticamente obbligata, in quanto rimuovendo la barra superiore di Blogger (vedi punto 1), mi sono ritrovato senza un motore con cui ricercare post nel mio blog.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Nonostante l'obiettivo di questo blog sia più quello di una sorta di block notes in cui appunto esperienze quotidiane, prove, errori combinati da me e altro, purchè ruoti attorno al mondo di Oracle, il solo fatto che qualcuno possa leggere quello che scrivo è per me fonte di soddisfazione. Siccome qualche lettore in più non mi dà certamente fastidio, anzi, commenti ed eventuali proposte di collaborazione sono sempre ben accetti, ho pensato di mettere in pratica gli utili consigli di &lt;a href="http://creareblog.blogspot.com/"&gt;Creareblog&lt;/a&gt; per il posizionamento del mio blog nei principali motori di ricerca, partendo dallo stesso Google, che è quello più utilizzato a livello planetario e passando poi per &lt;a href="http://www.live.com/"&gt;Live Search&lt;/a&gt; di Microsoft e &lt;a href="http://it.yahoo.com/"&gt;Yahoo&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Oltre all'indicizzazione del mio blog sui principali motori di ricerca, ho seguito anche &lt;a href="http://creareblog.blogspot.com/2008/08/segnalare-la-sitemap-del-blog-ai-motori.html"&gt;l'articolo di Creablog relativo alla pubblicazione della sitemap di un sito su Google, Live Search, o Yahoo&lt;/a&gt;.&lt;br /&gt;Cos'è una sitemap? Cito testualmente dal post di cui sopra:&lt;br /&gt;&lt;blockquote&gt;[cut]&lt;br /&gt;La Sitemap è un documento che contiene informazioni sui post e sulla struttura gerarchica di un blog. E' molto simile al feed e nel caso del feed in formato ATOM coincidono. La Sitemap del proprio blog può essere inviata ad un motore di ricerca affinchè ne vengano correttamente indicizzate tutte le pagine.&lt;br /&gt;&lt;br /&gt;Google Webmaster Tools è il più conosciuto strumento per la segnalazione della propria sitemap e in generale per avere informazioni e statistiche sul proprio sito dal punto di vista del motore di ricerca. Contrariamente a quanto si pensi, segnalare la propria sitemap a Google non comporta un posizionamento migliore nei risultati delle ricerche, al massimo permette di far risultare il nostro blog in un contesto più coerente ai temi che contiene. Segnalare il nostro sito inoltre non accelera il processo di indicizzazione delle pagine. Questo è quanto è esplicitamente dichiarato da Google e che si riscontra effettivamente sul campo.&lt;br /&gt;[/cut]&lt;/blockquote&gt;&lt;br /&gt;Google Webmaster Tools permette di avere importanti statistiche per il proprio sito/blog fornite direttamente da Google.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_Xl7hi_bur14/SW8bMAlyc8I/AAAAAAAAAGg/9KmNd_R24NM/s1600-h/google_webmaster_tools.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 200px; height: 103px;" src="http://4.bp.blogspot.com/_Xl7hi_bur14/SW8bMAlyc8I/AAAAAAAAAGg/9KmNd_R24NM/s200/google_webmaster_tools.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5291477980314497986" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4306197867072890604-4832717043010785591?l=oracolodeidb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oracolodeidb.blogspot.com/feeds/4832717043010785591/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4306197867072890604&amp;postID=4832717043010785591' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4306197867072890604/posts/default/4832717043010785591'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4306197867072890604/posts/default/4832717043010785591'/><link rel='alternate' type='text/html' href='http://oracolodeidb.blogspot.com/2009/01/estendere-le-funzionalit-offerte-da.html' title='Estendere le funzionalità offerte da Blogger'/><author><name>Simone Saravalli</name><uri>http://www.blogger.com/profile/16984004286817286244</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_Xl7hi_bur14/SW8ny_JvaOI/AAAAAAAAAGo/1DoU_MYVXm8/s72-c/2742110557_a6046162d3_m.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4306197867072890604.post-6630650799981195741</id><published>2009-01-13T10:50:00.015+01:00</published><updated>2009-01-18T10:39:13.229+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='backup'/><category scheme='http://www.blogger.com/atom/ns#' term='10g'/><category scheme='http://www.blogger.com/atom/ns#' term='Enterprise Manager'/><category scheme='http://www.blogger.com/atom/ns#' term='Oracle'/><title type='text'>Script di creazione degli utenti</title><content type='html'>Problema: dato un utente residente sul db di produzione, creare un utente identico in tutto e per tutto al primo, ma sull'ambiente di test.&lt;br /&gt;&lt;br /&gt;Soluzione: avviare EM (Enterprise Manager) con il comando &lt;a href="http://www.akadia.com/services/ora_dbconsole.html"&gt;emctl&lt;/a&gt; da lanciare da un prompt di DOS, oppure da una shell GNU/Linux (come nell'esempio seguente), previa impostazione del SID dell'istanza desiderata, perciò, da GNU/Linux:&lt;br /&gt;&lt;blockquote class="code"&gt;$ export ORACLE_SID=SID&lt;br /&gt;emctl start dbconsole&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;&lt;span id="fullpost"&gt;Enterprise Manager per Oracle 10.2.0.4 è accessibile via https all'url che viene riportato dal comando emctl stesso:&lt;br /&gt;&lt;blockquote class="code"&gt;oracle@debiandb:~$ emctl start dbconsole&lt;br /&gt;TZ set to Europe/Vatican&lt;br /&gt;Oracle Enterprise Manager 10g Database Control Release 10.2.0.4.0&lt;br /&gt;Copyright (c) 1996, 2007 Oracle Corporation.  All rights reserved.&lt;br /&gt;https://debiandb:5500/em/console/aboutApplication&lt;br /&gt;Starting Oracle Enterprise Manager 10g Database Control ................. started.&lt;br /&gt;------------------------------------------------------------------&lt;br /&gt;Logs are generated in directory&lt;br /&gt;/u01/app/oracle/product/10.2.0/db_1/debiandb_TEST/sysman/log&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;Una volta effettuato l'accesso come utente System, dalla pagina principale di EM, scegliendo il tab &lt;span style="font-style:italic;"&gt;"Amministrazione"&lt;/span&gt;, tra le molte voci presenti bisogna cliccare su &lt;span style="font-style:italic;"&gt;"Utenti"&lt;/span&gt;; così facendo, si accede ad una pagina con la lista degli utenti del db di produzione.&lt;br /&gt;Come si può notare dall'immagine sottostante, bisogna prima di tutto (punto 1) mettere il check sull'utente da copiare (nell'esempio, ho scelto l'utente ADMIN), quindi selezionare la voce &lt;span style="font-style:italic;"&gt;"Genera DDL"&lt;/span&gt; dal menu a tendina (punto 2) ed infine, cliccare sul pulsante &lt;span style="font-style:italic;"&gt;"Vai"&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_Xl7hi_bur14/SWx-55rf3AI/AAAAAAAAADM/fZYdVmuJzSw/s1600-h/em_ddl_utente.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 200px; height: 107px;" src="http://1.bp.blogspot.com/_Xl7hi_bur14/SWx-55rf3AI/AAAAAAAAADM/fZYdVmuJzSw/s200/em_ddl_utente.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5290743195454397442" /&gt;&lt;/a&gt;&lt;br /&gt;Ciò che si ottiene è un listato simile al seguente:&lt;br /&gt;&lt;blockquote class="code"&gt;CREATE USER "ADMIN" PROFILE "DEFAULT" IDENTIFIED BY "*******"&lt;br /&gt;DEFAULT TABLESPACE "TS_CNEXT" TEMPORARY TABLESPACE "TEMP"&lt;br /&gt;QUOTA UNLIMITED ON "TS_CNEXT" ACCOUNT UNLOCK;&lt;br /&gt;GRANT ALTER ANY INDEX TO "ADMIN";&lt;br /&gt;GRANT ALTER ANY PROCEDURE TO "ADMIN";&lt;br /&gt;GRANT ALTER ANY SEQUENCE TO "ADMIN";&lt;br /&gt;GRANT ALTER ANY TABLE TO "ADMIN";&lt;br /&gt;GRANT ALTER ANY TRIGGER TO "ADMIN";&lt;br /&gt;GRANT CREATE ANY INDEX TO "ADMIN";&lt;br /&gt;GRANT CREATE ANY PROCEDURE TO "ADMIN";&lt;br /&gt;GRANT CREATE ANY SEQUENCE TO "ADMIN";&lt;br /&gt;GRANT CREATE ANY TABLE TO "ADMIN";&lt;br /&gt;GRANT CREATE ANY TRIGGER TO "ADMIN";&lt;br /&gt;GRANT CREATE ANY VIEW TO "ADMIN";&lt;br /&gt;GRANT CREATE PROCEDURE TO "ADMIN";&lt;br /&gt;GRANT CREATE SEQUENCE TO "ADMIN";&lt;br /&gt;GRANT CREATE TABLE TO "ADMIN";&lt;br /&gt;GRANT CREATE TRIGGER TO "ADMIN";&lt;br /&gt;GRANT CREATE VIEW TO "ADMIN";&lt;br /&gt;GRANT EXECUTE ANY PROCEDURE TO "ADMIN";&lt;br /&gt;GRANT INSERT ANY TABLE TO "ADMIN";&lt;br /&gt;GRANT SELECT ANY SEQUENCE TO "ADMIN";&lt;br /&gt;GRANT SELECT ANY TABLE TO "ADMIN";&lt;br /&gt;GRANT UNDER ANY TABLE TO "ADMIN";&lt;br /&gt;GRANT UNDER ANY VIEW TO "ADMIN";&lt;br /&gt;GRANT "CONNECT" TO "ADMIN";&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;E' possibile copiare questo codice e salvarlo in un file di testo chiamato, ad esempio, &lt;span style="font-style:italic;"&gt;"crea_admin_da_produzione.sql"&lt;/span&gt; (ricordate di impostare la password per l'utente sostituendola agli asterischi messi da EM).&lt;br /&gt;Supponendo che i nomi delle tablespaces tra ambiente di produzione ed ambiente di test coincidano (altrimenti basta modificare lo script SQL di cui sopra), non ci sono altre modifiche da apportare al file!&lt;br /&gt;&lt;br /&gt;Sul db di test si può quindi procedere alla creazione dell'utente, copia speculare dell'omonimo presente sul db di produzione, accedendo con un utente con il privilegio sysdba:&lt;br /&gt;&lt;blockquote class="code"&gt;SQL&gt; @crea_admin_da_produzione.sql&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;Et voilà, con un solo comando l'utente è stato creato, con tutti i privilegi replicati dalla produzione! In questo modo si dispone di uno schema vuoto in cui effettuare l'importazione del dump dell'utente di partenza esportato sempre dal db di produzione (cfr &lt;a href="http://oracolodeidb.blogspot.com/2008/10/oracle-e-i-backup-parte-ii.html"&gt;Oracle e i backup - Parte I&lt;/a&gt;).&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4306197867072890604-6630650799981195741?l=oracolodeidb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oracolodeidb.blogspot.com/feeds/6630650799981195741/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4306197867072890604&amp;postID=6630650799981195741' title='2 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4306197867072890604/posts/default/6630650799981195741'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4306197867072890604/posts/default/6630650799981195741'/><link rel='alternate' type='text/html' href='http://oracolodeidb.blogspot.com/2009/01/script-di-creazione-degli-utenti.html' title='Script di creazione degli utenti'/><author><name>Simone Saravalli</name><uri>http://www.blogger.com/profile/16984004286817286244</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_Xl7hi_bur14/SWx-55rf3AI/AAAAAAAAADM/fZYdVmuJzSw/s72-c/em_ddl_utente.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4306197867072890604.post-4507993509831811053</id><published>2009-01-06T15:49:00.014+01:00</published><updated>2009-01-18T10:46:40.039+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='RMAN'/><category scheme='http://www.blogger.com/atom/ns#' term='backup'/><category scheme='http://www.blogger.com/atom/ns#' term='10g'/><category scheme='http://www.blogger.com/atom/ns#' term='Oracle'/><title type='text'>Oracle (10g) e i backup - parte II</title><content type='html'>Finalmente dopo un (bel) pò di tempo ho ritrovato la voglia di tornare a scrivere in questo blog e di riprendere in mano l'argomento dei vari strumenti di backup messi a disposizione da Oracle.&lt;br /&gt;Il &lt;a href="http://oracolodeidb.blogspot.com/2008/10/oracle-e-i-backup-parte-ii.html"&gt;primo post&lt;/a&gt; verteva sull'uso dei comandi exp ed imp per l'esportazione ed importazione, a caldo, ossia eseguibile anche a database attivo, di uno schema Oracle sfruttando un file binario intermedio (il cosiddetto &lt;span style="font-style:italic;"&gt;dump&lt;/span&gt;).&lt;br /&gt;&lt;br /&gt;Questo secondo post, invece, è relativo ad RMAN (Recovery MANager), un utile strumento messo a disposizione da Oracle per il restore ed il recovery di un database (compresi anche i file fisici presenti su disco fisso, come control files, datafiles, spfile, redo logs, archivelogs, necessari al suo funzionamento).&lt;br /&gt;&lt;span id="fullpost"&gt;Come al solito, vorrei focalizzare l'attenzione sull'uso che faccio di RMAN al lavoro, sia per gli ambienti di test, sia per quelli in produzione, senza per questo replicare la già abbondante documentazione esistente sull'uso di questo comando. Se siete interessati ad approfondire l'argomento, come di consueto in coda a questo post ho aggiunto alcuni link (e non dimenticate il buon Google).&lt;br /&gt;&lt;br /&gt;Il modo più semplice per invocare RMAN è tramite l'utilizzo della command line, dopo aver specificato il SID dell'istanza Oracle di cui gestire il backup/restore/recovery (per sistemi Microsoft Windows utilizzare il comando set al posto di export):&lt;br /&gt;&lt;blockquote class="code"&gt;$ export ORACLE_SID=&lt;SID&gt;&lt;br /&gt;$ rman TARGET /&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;Una volta ottenuto il prompt di RMAN, se ne possono impostare i parametri di funzionamento, eseguire backup, restore (il ripristino di componenti di un db Oracle come datafile, control files, redo logs, ecc. corrotte, ad esempio in seguito alla rottura del disco fisso su cui erano memorizzate), oppure il recovery (effettuato dopo il restore, permette di riportare i dati contenuti in un database nello stato in cui si trovavano prima che si verificasse il guasto, come la rottura di un disco fisso del db server, oppure la corruzione di un file importante per il db, o ancora l'interruzione della corrente elettrica).&lt;br /&gt;In alternativa, è possibile creare un file dei parametri da passare ad RMAN ogniqualvolta esso viene eseguito. Questa soluzione si rivela molto utile quando si vuole schedulare periodicamente l'esecuzione di RMAN mediante strumenti come cron per GNU/Linux, oppure Operazioni Pianificate di Microsoft Windows.&lt;br /&gt;&lt;br /&gt;RMAN permette di creare diverse tipologie di backup (full, incrementale), di varie componenti di un db Oracle (datafiles, control file, spfile, redo logs, archivelogs, altri backup di RMAN), in diversi formati (backup pieces, image copies) e su differenti tipologie di supporto (disco fisso, nastro).&lt;br /&gt;RMAN può essere configurato secondo le proprie necessità semplicemente impostando alcuni tra i numerosi parametri messi a disposizione da questo potente strumento. Prima di passare al codice degli script che utilizzo quotidianamente al lavoro vorrei delineare la politica di backup da me adottata:&lt;br /&gt;&lt;br /&gt;* 1 backup incrementale di livello 0 una volta al giorno alle ore 20:00&lt;br /&gt;* 1 backup incrementale di livello 1 alle ore 8:00, 13:00 e 18:00&lt;br /&gt;&lt;br /&gt;Il backup incrementale delle ore 20:00 effettua il backup di tutti i blocchi dati contenuti in un datafile perciò le dimensioni del backup piece, o dell'image copy risultante, a seconda del sistema utilizzato, potranno essere anche notevoli. I backup incrementali di livello 1, invece, vengono definiti differenziali (ed è il caso di quelli che creo io con RMAN) quando vengono memorizzati i blocchi di dati a partire dal più recente backup di livello 0 o di livello 1, oppure cumulativi se vengono memorizzati i blocchi modificati a partire dal più recente backup incrementale di livello 0, come evidenziato nell'immagine sottostante.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_Xl7hi_bur14/SWOHJiAoZbI/AAAAAAAAADE/JjI8vP8SbjA/s1600-h/bradv017.gif"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 200px; height: 113px;" src="http://4.bp.blogspot.com/_Xl7hi_bur14/SWOHJiAoZbI/AAAAAAAAADE/JjI8vP8SbjA/s200/bradv017.gif" border="0" alt=""id="BLOGGER_PHOTO_ID_5288218985281119666" /&gt;&lt;/a&gt;&lt;br /&gt;Perchè utilizzo questa strategia? Fondamentalmente perchè le dimensioni dei backup set creati quotidianamente da RMAN per il mio database di produzione sono nell'ordine del GB, una quantità di spazio relativamente irrisoria da memorizzare su una NAS, una SAN, oppure da spostare su un file server remoto via rete (tra l'altro, i backup pieces prodotti da RMAN sono normali files che è possibile comprimere prima di un'eventuale copia in rete via ftp, rsync, scp, o altro. In questo modo diminuisce il tempo di trasferimento dei files e la loro dimensione, ma aumenta il tempo di un eventuale restore/recovery da quei files che andranno prima riportati sul db server e scompattati per poterli effettivamente utilizzare).&lt;br /&gt;&lt;br /&gt;Quello che segue è il file dei parametri che utilizzo per RMAN:&lt;br /&gt;&lt;blockquote class="code"&gt;# -------------------------------------------------&lt;br /&gt;# Script per eseguire un backup incrementale a caldo&lt;br /&gt;# di livello 0&lt;br /&gt;#&lt;br /&gt;&lt;br /&gt;# --------------------&lt;br /&gt;# Default e Politiche&lt;br /&gt;# --------------------&lt;br /&gt;CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 4 DAYS;&lt;br /&gt;CONFIGURE BACKUP OPTIMIZATION ON;&lt;br /&gt;CONFIGURE DEFAULT DEVICE TYPE TO DISK;&lt;br /&gt;CONFIGURE DEVICE TYPE DISK PARALLELISM 1 BACKUP TYPE TO BACKUPSET;&lt;br /&gt;CONFIGURE MAXSETSIZE TO UNLIMITED;&lt;br /&gt;&lt;br /&gt;# --------------------------------&lt;br /&gt;# Backup di control file + sp file&lt;br /&gt;# --------------------------------&lt;br /&gt;CONFIGURE CONTROLFILE AUTOBACKUP ON;&lt;br /&gt;CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK&lt;br /&gt;TO '/backup/&lt;SID&gt;/CF_%F';&lt;br /&gt;&lt;br /&gt;# -----------------------------------------------------&lt;br /&gt;# Creazione del redundancy set costituito da:&lt;br /&gt;# - backup dei datafiles&lt;br /&gt;# - backup degli archive redo logs&lt;br /&gt;# - backup del control file&lt;br /&gt;&lt;br /&gt;BACKUP&lt;br /&gt;DEVICE TYPE DISK&lt;br /&gt;AS COMPRESSED BACKUPSET&lt;br /&gt;INCREMENTAL LEVEL 0&lt;br /&gt;DATABASE&lt;br /&gt;FORMAT '/backup/&lt;SID&gt;/DATAFILE_%d_%T_%t_%s_%p'&lt;br /&gt;TAG 'INCREMENTAL LEV 0'&lt;br /&gt;PLUS ARCHIVELOG&lt;br /&gt;FORMAT '/backup/&lt;SID&gt;/ARCH_%d_%T_%t_%s_%p'&lt;br /&gt;SKIP INACCESSIBLE;&lt;br /&gt;&lt;br /&gt;BACKUP CURRENT CONTROLFILE FORMAT&lt;br /&gt;'/backup/&lt;SID&gt;/SOLO_CF_%d_%T_%t_%s_%p'&lt;br /&gt;tag='CF a parte';&lt;br /&gt;# -----------------------------------------------------&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;# -----------------------------------------------------&lt;br /&gt;# elimino i files obsoleti (compresi gli archivelogs)&lt;br /&gt;&lt;br /&gt;DELETE force noprompt obsolete;&lt;br /&gt;# -----------------------------------------------------&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;Ho lasciato i commenti al codice per tenermi in mente cosa combina! Come si può notare, per prima cosa vengono impostati alcuni parametri per RMAN, come la recovery window, ossia per quanto tempo mantenere un backup piece nello stato 'AVAILABLE' prima di considerarlo obsoleto (che non significa necessariamente inutile per un eventuale restore/recovery), ma anche il tipo di device su cui eseguire i backup (in questo caso su disco) e così via.&lt;br /&gt;&lt;br /&gt;Importante è la parte relativa all'impostazione dell'autobackup che permette di creare in automatico un backup di control file + spfile da inserire in un backup piece separato rispetto a quelli dei datafiles e degli archivelogs.&lt;br /&gt;&lt;br /&gt;Con l'istruzione BACKUP ... DATABASE PLUS ARCHIVELOG ... si avvia il backup, appunto, incrementale di livello 0 (o di livello 1 a seconda del valore impostato) dei datafiles e degli archivelogs (grazie all'istruzione 'CONFIGURE BACKUP OPTIMIZATION ON' vengono tralasciati gli archivelogs già backuppati una volta su disco riducendo, di fatto, la dimensione dei backup pieces risultanti).&lt;br /&gt;Inoltre, viene creato un ulteriore backup a sè stante per il control file. Backuppo quotidianamente il control file non solo perchè si tratta di un elemento fondamentale per un database Oracle (altrimenti non se ne può nemmeno effettuare lo startup), ma soprattutto perchè RMAN memorizza al suo interno record relativi ai backup files necessari per un eventuale restore/recovery (a meno di non utilizzare un recovery catalog esterno).&lt;br /&gt;L'ultima istruzione, 'DELETE force noprompt obsolete' permette di fare un pò di pulizia rimuovendo i backup considerati obsoleti, ossia che non rientrano nella recovery window impostata precedentemente (pari a 4 giorni).&lt;br /&gt;&lt;br /&gt;Per chi volesse approfondire l'argomento backup con RMAN lascio qualche utile link:&lt;br /&gt;&lt;a href="http://download.oracle.com/docs/cd/B19306_01/backup.102/b14193/toc.htm"&gt;Oracle® Database Backup and Recovery Quick Start Guide&lt;/a&gt;&lt;br /&gt;&lt;a href="http://download.oracle.com/docs/cd/B19306_01/backup.102/b14192/toc.htm"&gt;Oracle® Database Backup and Recovery Basics&lt;/a&gt;&lt;br /&gt;&lt;a href="http://download.oracle.com/docs/cd/B19306_01/backup.102/b14194/toc.htm"&gt;Oracle® Database Backup and Recovery Reference&lt;/a&gt;&lt;br /&gt;&lt;a href="http://download.oracle.com/docs/cd/B19306_01/backup.102/b14191/toc.htm"&gt;Oracle® Database Backup and Recovery Advanced User's Guide&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4306197867072890604-4507993509831811053?l=oracolodeidb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oracolodeidb.blogspot.com/feeds/4507993509831811053/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4306197867072890604&amp;postID=4507993509831811053' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4306197867072890604/posts/default/4507993509831811053'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4306197867072890604/posts/default/4507993509831811053'/><link rel='alternate' type='text/html' href='http://oracolodeidb.blogspot.com/2009/01/oracle-e-i-backup-parte-ii.html' title='Oracle (10g) e i backup - parte II'/><author><name>Simone Saravalli</name><uri>http://www.blogger.com/profile/16984004286817286244</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_Xl7hi_bur14/SWOHJiAoZbI/AAAAAAAAADE/JjI8vP8SbjA/s72-c/bradv017.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4306197867072890604.post-2773452313377805660</id><published>2008-11-19T13:00:00.009+01:00</published><updated>2009-01-18T10:50:57.183+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='restore'/><category scheme='http://www.blogger.com/atom/ns#' term='backup'/><category scheme='http://www.blogger.com/atom/ns#' term='Oracle'/><title type='text'>Oracle e i backup - parte I - UPDATE</title><content type='html'>Come si può notare dal titolo, questo post non è la seconda parte della serie "Oracle e i backup", bensì un update del &lt;a href="http://oracolodeidb.blogspot.com/2008/10/oracle-e-i-backup-parte-ii.html"&gt;primo post&lt;/a&gt; che ho pubblicato sull'argomento.&lt;br /&gt;&lt;br /&gt;Sostanzialmente, questa mattina mi si è presentata la necessità di clonare uno schema Oracle, chiamiamolo &lt;span style="font-weight:bold;"&gt;SORGENTE&lt;/span&gt; in un nuovo schema che, con notevole sforzo di fantasia chiamerei &lt;span style="font-weight:bold;"&gt;DESTINAZIONE&lt;/span&gt;. Da notare che entrambi gli schemi si trovano sullo stesso database.&lt;br /&gt;Questi sono i passaggi che ho seguito:&lt;br /&gt;&lt;br /&gt;* Creazione dell'utente DESTINAZIONE. Per comodità, ho utilizzato Enterprise Manager e, in particolare, l'opzione "Crea con copia" messa a disposizione nella pagina di gestione degli utenti, specificando l'utente SORGENTE come punto di partenza per l'operazione di clonazione, appunto. In questo modo, ho ottenuto un utente con gli stessi privilegi (tablespace a cui accedere, tipologia di operazioni DDL e DML, ecc)&lt;br /&gt;&lt;br /&gt;* Esportazione mediante l'utility exp dello schema SORGENTE&lt;br /&gt;&lt;blockquote class="code"&gt;exp SORGENTE/pwd@SID file=/path/expdata.dmp log=/path/explog.log&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;* Importazione del dump nello schema DESTINAZIONE precedentemente creato&lt;br /&gt;&lt;blockquote class="code"&gt;imp DESTINAZIONE/pwd@SID fromuser=SORGENTE touser=DESTINAZIONE&lt;br /&gt;file=/path/expdata.dmp log=/path/explog.log&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;Stop. Non c'è altro da fare e in questo modo DESTINAZIONE diventa un clone dello schema SORGENTE sul quale lavorare in tutta sicurezza!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4306197867072890604-2773452313377805660?l=oracolodeidb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oracolodeidb.blogspot.com/feeds/2773452313377805660/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4306197867072890604&amp;postID=2773452313377805660' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4306197867072890604/posts/default/2773452313377805660'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4306197867072890604/posts/default/2773452313377805660'/><link rel='alternate' type='text/html' href='http://oracolodeidb.blogspot.com/2008/11/oracle-e-i-backup-parte-i-update.html' title='Oracle e i backup - parte I - UPDATE'/><author><name>Simone Saravalli</name><uri>http://www.blogger.com/profile/16984004286817286244</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4306197867072890604.post-7980343128939260019</id><published>2008-11-18T10:37:00.005+01:00</published><updated>2008-11-18T10:51:10.602+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Facebook'/><category scheme='http://www.blogger.com/atom/ns#' term='Oracle'/><category scheme='http://www.blogger.com/atom/ns#' term='Delicious'/><title type='text'>Tanti link per Oracle su delicious</title><content type='html'>Da un'iniziativa di &lt;a href="http://rdbland.blogspot.com/"&gt;Rodolfo Baselli&lt;/a&gt; e &lt;a href="http://cristiancudizio.wordpress.com/"&gt;Cristian Cudizio&lt;/a&gt; è nato poche settimane fa un gruppo su &lt;a href="http://www.facebook.com"&gt;Facebook&lt;/a&gt; chiamato &lt;span style="font-style:italic;"&gt;Oracle DBA Italia&lt;/span&gt; (se siete iscritti a Facebook e vi interessate di Oracle, lo potete trovare facilmente utilizzando la stringa "oracledbaitalia" nell'apposito motore di ricerca; l'iscrizione è aperta a tutti quindi fatevi pure avanti!)&lt;br /&gt;&lt;br /&gt;Tra i vari thread aperti ne è stato iniziato uno relativo ai link su Oracle ed affini di cui tutti noi interessati all'argomento disponiamo e che sarebbe utile poter condividere.&lt;br /&gt;Al fine di non disperdere questi collegamenti tra tanti thread, ho pensato di riunirli tutti in un'unica pagina su &lt;a href="http://delicious.com"&gt;del.icio.us&lt;/a&gt;.&lt;br /&gt;Di tanto in tanto, quando scopro qualche nuova risorsa, la aggiungo su delicious, ma se ne avete di nuove rispondete pure a questo post che le accodo!&lt;br /&gt;&lt;br /&gt;Questo il link alla pagina del gruppo Oracle DBA Italia su delicious: &lt;a href="http://delicious.com/oracledbaitalia"&gt;Oracle DBA Italia&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4306197867072890604-7980343128939260019?l=oracolodeidb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oracolodeidb.blogspot.com/feeds/7980343128939260019/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4306197867072890604&amp;postID=7980343128939260019' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4306197867072890604/posts/default/7980343128939260019'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4306197867072890604/posts/default/7980343128939260019'/><link rel='alternate' type='text/html' href='http://oracolodeidb.blogspot.com/2008/11/tanti-link-per-oracle-su-delicious.html' title='Tanti link per Oracle su delicious'/><author><name>Simone Saravalli</name><uri>http://www.blogger.com/profile/16984004286817286244</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4306197867072890604.post-4037529996466175401</id><published>2008-11-17T09:56:00.017+01:00</published><updated>2009-01-18T10:59:50.245+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Oracle'/><category scheme='http://www.blogger.com/atom/ns#' term='corso'/><title type='text'>Corso Oracle @ UniFE, giorno primo</title><content type='html'>Ok, lo so che è una vita che non pubblico più un post, ma cercavo l'ispirazione giusta e questa è arrivata giovedì scorso durante la prima giornata del corso Oracle promosso dall'Università di Ferrara per cui lavoro.&lt;br /&gt;Sono stati toccati i temi più svariati che voglio elencare qui per non dovermeli tenere su un txt sparpagliato in mille versioni su altrettanti pc come al solito :-)&lt;br /&gt;&lt;br /&gt;Innanzitutto, il nostro relatore (un ragazzo simpatico che non sopporta quando un sistema operativo, oppure Oracle, viene installato in lingua italiana, hehehe) ha proposto un link molto interessante:  &lt;br /&gt;&lt;a href="http://oss.oracle.com"&gt;Oracle Free and Open Source Software&lt;/a&gt; un utile aggreatore di materiale FOSS creato da e per Oracle e che ho prontamente aggiunto ai miei preferiti.&lt;br /&gt;&lt;span id="fullpost"&gt; Secondo punto all'ordine della giornata: una breve introduzione al concetto di backup con RMAN (e che sarà anche l'argomento di uno dei miei prossimi post).&lt;br /&gt;Abbiamo dato un'occhiata agli script di backup con RMAN che utilizziamo attualmente al lavoro; tra tutti i parametri presenti negli script, &lt;span style="font-weight:bold;"&gt;PARALLELISM&lt;/span&gt; ha destato la mia attenzione: si tratta di un parametro che consente ad RMAN di parallelizzare, appunto, la creazione dei backup pieces su N processori/core, dove N è il valore con cui si imposta tale parametro. Per database di piccole dimensioni non si notano grandi incrementi di prestazioni impostando PARALLELISM ad un valore &gt; 1, ma le cose cambiano per database con notevoli quantità di dati (nell'ordine delle decine o centinaia di GB).&lt;br /&gt;Anche se al momento backuppo un db con solo qualche GB di dati ho impostato PARALLELISM a 2 mediante la direttiva&lt;br /&gt;&lt;blockquote class="code"&gt;CONFIGURE DEVICE TYPE DISK PARALLELISM 2 BACKUP TYPE TO BACKUPSET&lt;/blockquote&gt;&lt;br /&gt;Altro punto relativo ai backup con RMAN riguarda le operazioni di pulizia dei backup piece e degli archivelog obsoleti: io di solito utilizzo un unico comando:&lt;br /&gt;&lt;blockquote class="code"&gt;DELETE FORCE NOPROMPT OBSOLETE RECOVERY WINDOW OF 4 DAYS&lt;/blockquote&gt;&lt;br /&gt;Il relatore ha consigliato anche quest'altro per la rimozione esplicita degli archivelog più vecchi di due giorni e di quelli già backuppati su disco almeno una volta:&lt;br /&gt;&lt;blockquote class="code"&gt;DELETE NOPROMPT ARCHIVELOG UNTIL TIME 'sysdate -2' BACKED UP&lt;br /&gt;1 TIMES TO DISK;&lt;/blockquote&gt;&lt;br /&gt;Terzo punto all'ordine del giorno: &lt;a href="http://www.databasejournal.com/features/oracle/article.php/3682421/Manual-Standby-Database-under-Oracle-Standard-Edition.htm"&gt;i database di standby&lt;/a&gt;. Si tratta di un ulteriore meccanismo di backup disponibile già dalla versione 8i di Oracle che consiste nel disporre di un database replica costantemente aggiornato del proprio db di produzione.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_Xl7hi_bur14/SSFNJA7vNuI/AAAAAAAAACQ/a7g2cIsZqfc/s1600-h/standbydatabase.jpg"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 200px; height: 116px;" src="http://3.bp.blogspot.com/_Xl7hi_bur14/SSFNJA7vNuI/AAAAAAAAACQ/a7g2cIsZqfc/s200/standbydatabase.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5269577856264910562" /&gt;&lt;/a&gt;&lt;br /&gt;Come si può notare dall'immagine qui sopra, il database di standby rimane allineato con l'ambiente di produzione applicando gli archivelog ricevuti da quest'ultimo.&lt;br /&gt;I processi LGWRn, oltre ad occuparsi della scrittura del contenuto della redo log cache (una parte della SGA) nei redo log files, inviano anche i log archiviati al database di standby. Questa procedura, a livello di carico di CPU e di bandwidth impatta veramente molto poco.&lt;br /&gt;Grazie all'applicazione degli archivelog, il database di standby può mantenere il proprio SCN (System Change Number) quasi constantemente allineato con quello del database di produzione.&lt;br /&gt;Va detto che un database di standby, quando si trova in tale modalità, non è fruibile in lettura/scrittura dagli utenti, tuttavia, all'occorrenza può essere posto in modalità read-only per consentire operazioni di consultazione. In questo caso, il database di standby non può ricevere nè applicare gli archivelog inviati dalla produzione finchè non viene nuovamente posto in standby mode.&lt;br /&gt;Se nella propria strategia di restore/recovery si utilizzano strumenti come exp/imp, RMAN e standby database in combinata (oltre ad una ormai indispensabile ridondanza hw garantita da sistemi RAID, sistemi di mass storage come SAN, NAS, ecc) si ottiene un livello di fault tolerance molto vicini al 100%.&lt;br /&gt;Aggiungo nioltre, che la tecnologia dei database di standby è stata recentemente rinominata (a partire da Oracle 10g) in &lt;a href="http://www.oracle.com/technology/deploy/availability/htdocs/DataGuardOverview.html"&gt;Oracle Data Guard&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Quarto punto all'ordine del giorno: realizzazione di un "muletto", come lo ha simpaticamente definito il relatore. In buona sostanza, il muletto è un server, possibilmente ben carrozzato a livello hardware su cui centralizzare i seguenti servizi:&lt;br /&gt;&lt;br /&gt;* &lt;span style="font-weight:bold;"&gt;Grid Control&lt;/span&gt;&lt;br /&gt;* &lt;span style="font-weight:bold;"&gt;Catalog per RMAN&lt;/span&gt;&lt;br /&gt;* &lt;span style="font-weight:bold;"&gt;Ambiente di restore/recovery&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Ma andiamo con ordine, &lt;a href="http://www.oracle.com/technology/products/oem/index.html"&gt;Grid Control&lt;/a&gt; è una tecnologia Oracle nata allo scopo di monitorare altri server/servizi attraverso un unico "pannello di controllo".&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_Xl7hi_bur14/SSFTBOowG4I/AAAAAAAAACY/aO0nPP1pbQA/s1600-h/oem10g.gif"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 200px; height: 152px;" src="http://4.bp.blogspot.com/_Xl7hi_bur14/SSFTBOowG4I/AAAAAAAAACY/aO0nPP1pbQA/s200/oem10g.gif" border="0" alt=""id="BLOGGER_PHOTO_ID_5269584319574186882" /&gt;&lt;/a&gt;&lt;br /&gt;La macchina che ospita il Grdi Control deve disporre di almeno 2 GB di RAM e di 40 GB di spazio disco ed è composta dai seguenti elementi:&lt;br /&gt;&lt;br /&gt;* interfaccia web in ascolto sulla porta 7778&lt;br /&gt;* il web server Apache che comunca con l'interfaccia web mediante la porta 8887 e si pone in ascolto sulla porta 4889 per ricevere informazioni dagli agent installati sui server da monitorare&lt;br /&gt;* una serie di Java apps&lt;br /&gt;* un database in cui vengono memorizzati i dati inviati dagli agent&lt;br /&gt;&lt;br /&gt;Come già detto, Grid Control riceve dati ed informazioni dagli agent che consentono di monitorare non solo db server Oracle, ma anche &lt;a href="http://www.oracle.com/technology/software/products/oem/index.html"&gt;molte altre tipologie di servizi&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Il secondo ruolo del "muletto" sarà quello di &lt;a href="http://www.dba-oracle.com/real_application_clusters_rac_grid/recovery_catalog.html"&gt;catalog per RMAN&lt;/a&gt;; attualmente, tutte le informazioni necessarie ad RMAN per gestire le operazioni di backup/restore/recovery per il mio db sono contenute nel controlfile, ma questa non è una situazione sicura per almeno due motivi:&lt;br /&gt;&lt;br /&gt;* se si corrompono tutte le copie del controlfile, RMAN perde le informazioni relative ai backup disponibili e diventa di fatto inutilizzabile&lt;br /&gt;* se i record di backup memorizzati nel controlfile vengono sovrascritte troppo in fretta, RMAN perde importanti informazioni relative ai backup disponibili&lt;br /&gt;&lt;br /&gt;L'idea di base, dunque, è quella di disporre di un recovery catalog di RMAN per tutti i database sul muletto. A questo punto, si può lanciare da una qualsiasi postazione con un client Oracle installato ed opportunamente configurato, il backup di un qualsasi database Oracle collegandosi al catalog di RMAN residente sul muletto, appunto (per un howto su questo argomento mi appunto di scrivere un post apposito). Lo stesso, ovviamente, vale per le operazioni di restore/recovery.&lt;br /&gt;Terzo ed ultimo ruolo del muletto sarà quello di fungere da sandbox, cioè da ambiente protetto per fare simulazioni di disastri (perdita di datafile, controlfile, ecc) e per i conseguenti test di restore/recovery.&lt;br /&gt;Nei prossimi post cercherò di illustrare al meglio le operazioni di installazione e configurazione delle varie componenti del muletto.&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4306197867072890604-4037529996466175401?l=oracolodeidb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oracolodeidb.blogspot.com/feeds/4037529996466175401/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4306197867072890604&amp;postID=4037529996466175401' title='4 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4306197867072890604/posts/default/4037529996466175401'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4306197867072890604/posts/default/4037529996466175401'/><link rel='alternate' type='text/html' href='http://oracolodeidb.blogspot.com/2008/11/ok-lo-so-che-una-vita-che-non-pubblico.html' title='Corso Oracle @ UniFE, giorno primo'/><author><name>Simone Saravalli</name><uri>http://www.blogger.com/profile/16984004286817286244</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_Xl7hi_bur14/SSFNJA7vNuI/AAAAAAAAACQ/a7g2cIsZqfc/s72-c/standbydatabase.jpg' height='72' width='72'/><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4306197867072890604.post-92355275690931112</id><published>2008-10-03T16:45:00.014+02:00</published><updated>2009-01-18T11:02:45.299+01:00</updated><title type='text'>Oracle e i backup - parte I</title><content type='html'>Una parte fondamentale del lavoro di qualsiasi DBA (o di chi volesse diventarlo, come il sottoscritto) sono i backup dei database. Come al solito, non voglio fornire una spiegazione di TUTTI gli strumenti di backup/restore/recovery messi a disposizione da Oracle, ma focalizzerò l'attenzione su quelli che utilizzo quotidianamente.&lt;br /&gt;&lt;span id="fullpost"&gt;Quando ho iniziato a lavorare con Oracle, un mio collega mi ha instradato sull'utilizzo delle utilities &lt;span style="font-weight:bold;"&gt;exp&lt;/span&gt; ed &lt;span style="font-weight:bold;"&gt;imp&lt;/span&gt;; la prima permette di eseguire l'esportazione di uno specifico schema Oracle (struttura del database più i dati in esso contenuti) all'interno di un file con estensione &lt;span style="font-weight:bold;"&gt;.dmp&lt;/span&gt;, mentre la seconda parte da un dump file generato con exp e lo importa nello schema Oracle corrispondente.&lt;br /&gt;I comandi exp ed imp sono forniti con l'installazione di Oracle Database Server quindi possono essere richiamati da un prompt di MS-DOS, oppure da una shell Unix/Linux/Solaris, a seconda del sistema operativo con cui si sta lavorando.&lt;br /&gt;Tali comandi dispongono di un elevato numero di parametri opzionali con cui possono essere lanciati e per cui vi rimando a &lt;a href="http://www.adp-gmbh.ch/ora/admin/imp_exp.html"&gt;questa pagina&lt;/a&gt; per ulteriori delucidazioni.&lt;br /&gt;In sostanza, exp crea un'istantanea, a caldo, della struttura e dei dati di uno schema Oracle e la salva all'interno di un dump file, mentre imp esegue il passaggio inverso, scompattando il contenuto di un dump file in uno schema vuoto.&lt;br /&gt;I motivi per cui usare queste due utilities sono:&lt;br /&gt;&lt;br /&gt;* voglio disporre di un backup della struttura del database (tabelle, indici, constraints, ecc) e dei dati in esso presenti per effettuare un restore rapido (molto utile per db in stadio di sviluppo o test)&lt;br /&gt;* devo inviare ad un collega un'istantanea del db (struttura + dati) per ulteriori elaborazioni&lt;br /&gt;&lt;br /&gt;Ma come si usano questi due comandi? Partiamo dall'esportazione:&lt;br /&gt;&lt;blockquote class="code"&gt;exp username/password@nome_istanza FILE=nome_file.dmp&lt;br /&gt;LOG=nome_log_gile.log&lt;/blockquote&gt;&lt;br /&gt;Quella riportata è la sintassi &lt;span style="font-weight:bold;"&gt;minima&lt;/span&gt; per lanciare l'esportazione di uno schema. Come si può notare è necessario indicare, dopo il nome del comando, il nome dello schema da esportare, la password (se non la si indica qui, verrà richiesta subito dopo aver premuto invio) e il nome dell'istanza in cui si sta lavorando. Quindi, va specificato il nome del file di dump che ospiterà la struttura dello schema con eventuali dati in esso presenti (la direttiva FILE) e un eventuale file di log (opzionale) in cui Oracle memorizza il risultato dell'operazione di esportazione, oltre a visualizzarlo sullo stdout.&lt;br /&gt;&lt;br /&gt;Ora invece passiamo all'importazione:&lt;br /&gt;&lt;blockquote class="code"&gt;sqlplus system@nome_istanza&lt;br /&gt;SQL&gt; drop user username cascade;&lt;br /&gt;SQL&gt; create user username identified by pwd;&lt;br /&gt;SQL&gt; grant connect, resource to username;&lt;br /&gt;SQL&gt; exit&lt;br /&gt;&lt;br /&gt;imp username/pwd@nome_istanza FILE=nome_file.dmp&lt;br /&gt;LOG=nome_log_gile.log FULL=Y&lt;/blockquote&gt;&lt;br /&gt;Per prima cosa, va notato che in qualità di utente SYSTEM dell'istanza di riferimento ho effettuato l'eliminazione di un eventuale utente "username" preesistente (attenzione!!!), quindi l'ho ricreato e gli ho assegnato una password e una serie limitata di privilegi.&lt;br /&gt;Fatto questo, sono tornato al prompt di MS-DOS/Linux e ho lanciato l'importazione nello schema vuoto appena creato.&lt;br /&gt;In aggiunta rispetto al comando exp potete notare l'opzione FULL impostata a 'Y' che consente di importare sia la struttura, sia i dati contenuti nel file di dump.&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;ATTENZIONE!&lt;/span&gt; l'operazione di importazione di uno schema può non andare a buon fine se il character set del db di partenza differisce da quello di destinazione. In questo caso si riceveranno parecchi errori relativi a problemi nell'importazione delle statistiche.&lt;br /&gt;L'unica soluzione possibile è quella di mantenere uguale il character set tra tutti i database.&lt;br /&gt;Per ora è tutto! Nel prossimo post introdurrò un altro strumento di backup/restore/recovery, molto più avanzato ed articolato, ossia RMAN!&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4306197867072890604-92355275690931112?l=oracolodeidb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oracolodeidb.blogspot.com/feeds/92355275690931112/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4306197867072890604&amp;postID=92355275690931112' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4306197867072890604/posts/default/92355275690931112'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4306197867072890604/posts/default/92355275690931112'/><link rel='alternate' type='text/html' href='http://oracolodeidb.blogspot.com/2008/10/oracle-e-i-backup-parte-ii.html' title='Oracle e i backup - parte I'/><author><name>Simone Saravalli</name><uri>http://www.blogger.com/profile/16984004286817286244</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4306197867072890604.post-1300765825616689735</id><published>2008-09-29T11:40:00.007+02:00</published><updated>2008-09-29T13:19:12.429+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Oracle XE'/><category scheme='http://www.blogger.com/atom/ns#' term='sviluppo web'/><title type='text'>Piattaforma di sviluppo web con Apache, PHP e backend Oracle</title><content type='html'>Spesso mi sono occupato di creare pagine web uilizzando il linguaggio server-side PHP, l'ottimo web server Apache ed Oracle come DBMS di backend.&lt;br /&gt;Dato che nel mio posto di lavoro solo ultimamente il software open source sta facendo il suo ingresso, inizialmente non ho trovato una piattaforma di sviluppo web già pronta, ma mi è stata data carta bianca per metterne in piedi una.&lt;br /&gt;La configurazione da me adottata prevede due macchine, un web e un db server, entrambe con sistema operativo Debian GNU/Linux. Sul web server ho installato Apache e PHP con supporto al DBMS Oracle ed all'autenticazione mediante LDAP, mentre sul db server ho installato Oracle 10g XE (la versione limitata di Oracle 10g R2).&lt;br /&gt;Per tenere traccia di tutti i passi di installazione e configurazione da me seguiti ho creato una guida che potete trovare &lt;a href="http://www.programmazione-web.com/apache-php-oracle-installazione-configurazione.php"&gt;pubblicata sul blog di programmazione web di Valerio (Neryo) Giacomelli&lt;/a&gt; e anche su &lt;a href="http://guide.debianizzati.org/index.php/Installazione_e_configurazione_di_Apache%2C_PHP_e_Oracle"&gt;guide.debianizzati.org&lt;/a&gt;&lt;br /&gt;e che vi invito a visionare se questa soluzione per lo sviluppo di applicazioni web-based vi può interessare!&lt;br /&gt;Ah, dimenticavo: stufo di avere mille server fisici che poi uno manco si ricorda più a cosa servono, molto spesso, mi sono buttato anche sulla virtualizzazione, riproducendo l'ambiente di cui sopra anche mediante VMware Server, ma questo sarà probabilmente l'argomento di un post futuro.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4306197867072890604-1300765825616689735?l=oracolodeidb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oracolodeidb.blogspot.com/feeds/1300765825616689735/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4306197867072890604&amp;postID=1300765825616689735' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4306197867072890604/posts/default/1300765825616689735'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4306197867072890604/posts/default/1300765825616689735'/><link rel='alternate' type='text/html' href='http://oracolodeidb.blogspot.com/2008/09/piattaforma-di-sviluppo-web-con-php-e.html' title='Piattaforma di sviluppo web con Apache, PHP e backend Oracle'/><author><name>Simone Saravalli</name><uri>http://www.blogger.com/profile/16984004286817286244</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4306197867072890604.post-878726880411276007</id><published>2008-09-28T11:33:00.005+02:00</published><updated>2008-09-28T17:13:18.911+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Ubiquity'/><category scheme='http://www.blogger.com/atom/ns#' term='Firefox extension'/><title type='text'>Usare Ubiquity per le ricerche nella documentazione Oracle</title><content type='html'>&lt;a href="https://people.mozilla.com/~avarma/ubiquity-0.1.1.xpi"&gt;Ubiquity&lt;/a&gt; è un plugin per Firefox che permette di effettuare ricerche nel web in modo nuovo, ossia non indicando la parola o l'insieme di parole di interesse per poi venire indirizzati su siti/blog/portali, ecc che ne contengono uno o più riferimenti, bensì indicando cosa si intende fare. Non voglio aggiungere altro su questo plugin e vi invito a vedere il &lt;a href="http://vimeo.com/1561578"&gt;video di presentazione&lt;/a&gt; per una panoramica completa sulle sue funzionalità.&lt;br /&gt;Ma cosa c'entra questo interessante plugin con Oracle e la sua documentazione? Beh, fino ad ora, per accedere alla documentazione del nostro DBMS preferito, l'unico sistema era quello di andare direttamente sul sito della Oracle, sezione documentazione, oppure dirigere il proprio browser &lt;a href="http://tahiti.oracle.com/"&gt;sull'ottimo Tahiti&lt;/a&gt;.&lt;br /&gt;Girovagando per la rete ho trovato un &lt;a href="http://awads.net/wp/2008/09/01/new-ubiquitous-ways-to-search-oracle-documentation-and-more/"&gt;post sul blog di Eddie Awad&lt;/a&gt; in cui l'autore spiega che ha creato un comando per Ubiquity chiamato "oradoc" con cui richiamare la documentazione di Oracle versioni 10g e 11g.&lt;br /&gt;Sostanzialmente, Eddie ha creato un feed RSS della &lt;a href="http://www.oracle.com/pls/db102/search?remark=quick_search&amp;format=ranked&amp;word=TEST"&gt;pagina di ricerca della documentazione di  Oracle versione 10g&lt;/a&gt; servendosi di un tool in stile web 2.0 chiamato &lt;a href="http://www.dapper.net/"&gt;dapper&lt;/a&gt;, quindi ha creato il comando oradoc per Ubiquity; questo comando legge il feed RSS della documentazione e presenta all'utente i risultati della ricerca effettuata direttamente nella finestra di Ubiquity.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_Xl7hi_bur14/SN9VW7Hrc0I/AAAAAAAAACE/5gNAS1xSCpI/s1600-h/ubiquity_oradoc1.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://4.bp.blogspot.com/_Xl7hi_bur14/SN9VW7Hrc0I/AAAAAAAAACE/5gNAS1xSCpI/s200/ubiquity_oradoc1.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5251009542852670274" /&gt;&lt;/a&gt;&lt;br /&gt;Per imparare ad usare ubiquity potete dare un'occhiata a &lt;a href="http://awads.net/wp/wp-content/uploads/2008/09/oradoc_ubiquity.html"&gt;questo screencast&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4306197867072890604-878726880411276007?l=oracolodeidb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oracolodeidb.blogspot.com/feeds/878726880411276007/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4306197867072890604&amp;postID=878726880411276007' title='2 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4306197867072890604/posts/default/878726880411276007'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4306197867072890604/posts/default/878726880411276007'/><link rel='alternate' type='text/html' href='http://oracolodeidb.blogspot.com/2008/09/usare-ubiquity-per-le-ricerche-nella.html' title='Usare Ubiquity per le ricerche nella documentazione Oracle'/><author><name>Simone Saravalli</name><uri>http://www.blogger.com/profile/16984004286817286244</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_Xl7hi_bur14/SN9VW7Hrc0I/AAAAAAAAACE/5gNAS1xSCpI/s72-c/ubiquity_oradoc1.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4306197867072890604.post-7289035880045080767</id><published>2008-09-26T23:12:00.005+02:00</published><updated>2009-03-26T16:03:20.205+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='bugs'/><category scheme='http://www.blogger.com/atom/ns#' term='10g'/><category scheme='http://www.blogger.com/atom/ns#' term='OUI'/><category scheme='http://www.blogger.com/atom/ns#' term='Oracle Error Code'/><title type='text'>Ad Oracle non piace la lettera 'U'</title><content type='html'>Lo so che dal titolo del post non si capisce una mazza, ma ora mi spiego: circa un paio di mesi fa mi sono trovato ad installare Oracle Database Server 10.2.0.1 su una macchina con SO Windows Server 2003 R2 SP2. Lancio OUI, l'installazione parte, ma all'85% circa si blocca con uno strano messaggio di errore che non fmi da molte spiegazioni, ma indica che l'installazione non può proseguire e mi invita a guardare l'alert.log (il quale a sua volta mi dice ben poco). Non capisco! Non è mai capitato prima! Che manca? Forse una qualche componente Java? Qualche file richiesto da OUI per portare a termine l'installazione? Non sono soddisfatti i prerequisiti di rete richiesti da Oracle? Per farla breve, giorni di ricerche in rete e alla fine, ormai in preda alla disperazione arrivo a questa &lt;a href="http://www.experts-exchange.com/Database/Oracle/10.x/Q_22434953.html"&gt;interessante pagina&lt;/a&gt; (purtroppo non avevo ancora accesso all'ottimo Metalink, altrimenti forse avrei risolto prima il mio problema).&lt;br /&gt;In sostanza, la versione 10.2.0.1 di Oracle ha un bug per cui dbconsole non funziona correttamente se l'hostname della macchina su cui si vuole installare Oracle Server inizia con la lettera 'U'. Ma che sfiga!!! In questo caso, solo modificando il nome dell'host e ripetendo l'installazione, Oracle è andato su tranquillamente. Ad ogni modo, questo bug affligge tutte le versioni di Oracle tipo 10.2.0.x ed è stato fissato solo con la versione 11g, quindi occhio ;-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4306197867072890604-7289035880045080767?l=oracolodeidb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oracolodeidb.blogspot.com/feeds/7289035880045080767/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4306197867072890604&amp;postID=7289035880045080767' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4306197867072890604/posts/default/7289035880045080767'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4306197867072890604/posts/default/7289035880045080767'/><link rel='alternate' type='text/html' href='http://oracolodeidb.blogspot.com/2008/09/ad-oracle-non-piace-la-lettera-u.html' title='Ad Oracle non piace la lettera &apos;U&apos;'/><author><name>Simone Saravalli</name><uri>http://www.blogger.com/profile/16984004286817286244</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4306197867072890604.post-5009222795525869405</id><published>2008-09-26T10:46:00.004+02:00</published><updated>2008-09-28T17:15:56.660+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Facebook'/><category scheme='http://www.blogger.com/atom/ns#' term='DBA'/><title type='text'>Nuovo gruppo di discussione per DBA Oracle su Facebook</title><content type='html'>dato che mi sembra un'iniziativa interessante, la segnalo anche qui. Da pochi giorni è nato un &lt;a href="http://www.new.facebook.com/group.php?gid=27829800052"&gt;nuovo (il primo) gruppo di discussione per DBA Oracle italiani&lt;/a&gt; su Facebook. L'unico prerequisito per iscriversi è, ovviamente, disporre di un account su Facebook. Per ora siamo in 22 iscritti e ci sono un paio di post, ma speriamo di crescere velocemente, dai!&lt;br /&gt;Ah, il creatore del blog è sempre lui, &lt;a href="http://rdbland.blogspot.com/"&gt;Rodolfo (Rudy) Baselli&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4306197867072890604-5009222795525869405?l=oracolodeidb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oracolodeidb.blogspot.com/feeds/5009222795525869405/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4306197867072890604&amp;postID=5009222795525869405' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4306197867072890604/posts/default/5009222795525869405'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4306197867072890604/posts/default/5009222795525869405'/><link rel='alternate' type='text/html' href='http://oracolodeidb.blogspot.com/2008/09/nuovo-gruppo-di-discussione-per-dba.html' title='Nuovo gruppo di discussione per DBA Oracle su Facebook'/><author><name>Simone Saravalli</name><uri>http://www.blogger.com/profile/16984004286817286244</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4306197867072890604.post-2314445419095779146</id><published>2008-09-25T15:21:00.010+02:00</published><updated>2009-01-18T11:05:27.239+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='RMAN'/><category scheme='http://www.blogger.com/atom/ns#' term='10g'/><category scheme='http://www.blogger.com/atom/ns#' term='RAC'/><title type='text'>Se il buon giorno si vede dal mattino</title><content type='html'>Inauguro questo blog su Oracle con un episodio che mi è capitato proprio questa mattina appena arrivato al lavoro.&lt;br /&gt;Breve preambolo: alle ore 10:30 doveva iniziare lo stress test di una nuova procedura che abbiamo acquistato qui dove lavoro. Si tratta di un applicativo web-based le cui pagine web vengono servite da due application server Tomcat con SO Windows Server 2003 R2, mentre il db si trova su un RAC Oracle (due nodi Red Hat 5) connesso ad una SAN tramite fibbra ottica (che figata!).&lt;br /&gt;Lo scopo è quello di migliorare le prestazioni dell'applicativo in modo tale da consentire agli utenti (abituati ad un applicativo client-server praticamente con un'interfaccia pseudo-testuale quindi molto veloce rispetto ad una procedura web-based) di lavorare in modo veloce. Questo tuning si riflette a livello di Tomcat, delle pagine web da esso servite e del sottostante db Oracle. Io, almeno in parte, mi occupo di quest'ultimo punto.&lt;br /&gt;&lt;span id="fullpost"&gt; Proprio stamattina dunque, la ditta che ci fornisce l'applicativo mi ha caldamente consigliato di portare il parametro processes su ciascuna delle due istanze del nostro RAC, relativamente al db in questione, dal valore 1000 a 4000. Ora, questo parametro che si trova nel spfile del proprio db, indica il numero massimo di processi del sistema operativo che possono connettersi al database Oracle concorrentemente. Impostarlo a 4000, per ciascun nodo, significa in un RAC a due nodi, avere fino a 8000 possibili processi che possono accedere al database.&lt;br /&gt;Dato che l'spfile di un db Oracle è un file binario, non ci si deve manco sognare di aprirlo e modificarlo con un editor di testi, mentre è possibile usare il comando SQL &lt;span style="font-weight:bold;"&gt;ALTER SYSTEM SET ...&lt;/span&gt;:&lt;br /&gt;&lt;blockquote class="code"&gt;$ sqlplus /nolog&lt;br /&gt;SQL&gt; connect sys@&lt;SID&gt; as sysdba&lt;br /&gt;SQL&gt; ALTER SYSTEM SET PROCESSES=4000 SCOPE=SPFILE SID='*'&lt;/blockquote&gt;&lt;br /&gt;Il parametro SCOPE indica di effettuare l'aggiornamento del valore di processes nel spfile del db, mentre il parametro SID='*' serve per indicare a Oracle di eseguire la modifica per entrambe le istanze del db, dato che ci si trova ad operare su un RAC.&lt;br /&gt;Fatto questo, si stoppano le due istanze tramite il comando srvctl fornito da Oracle, oppure con uno shutdown immediate eseguito sempre come utente SYS o SYSTEM dal prormpt di SQL e poi si riavviano le istanze del RAC per rendere effettiva la modifica apportata al file spfile.&lt;br /&gt;Mi aspettavo che tutto filasse liscio, invece, lanciando il comando per l'avvio delle due istanze del RAC, mi compare questo errore:&lt;br /&gt;&lt;blockquote class="code"&gt;ORA-00371: not enough shared pool memory, should be atleast N bytes&lt;/blockquote&gt;&lt;br /&gt;Per sistemare questo errore, googlando un pò trovo:&lt;br /&gt;&lt;blockquote class="code"&gt;Cause: Init.ora parameter shared_pool_size is too small&lt;br /&gt;Action: Increase the parameter value&lt;/blockquote&gt;&lt;br /&gt;Bene, basta incrementare il valore della memoria condivisa assegnata ad Oracle, per ciascuna istanza, nel file spfile, quindi sempre mediante un ALTER SYSTEM, da lanciare come utente SYS e... come faccio ad accedere come utente SYS se il db è giù?&lt;br /&gt;La prima idea che mi è venuta è stata quella di copiare il contenuto del file spfile in un pfile, editarmelo con calma, riportando a 1000 il valore di processes, per poi ricreare l'spfile, ma facendo questo mi sono accorto che il RAC che usiamo qui al lavoro utilizza già di suo un pfile che contiene al suo interno una stringa che riporta la posizione del spfile che poi, di fatto, viene usato per l'avvio delle istanze del RAC Oracle :-( Che fregatura!&lt;br /&gt;A questo punto, l'idea che mi è stata proposta è la seguente: riprendere il pfile utilizzato all'atto della creazione del database e che per fortuna non era stato buttato, avviare con esso le due istanze del RAC, quindi lanciare RMAN (usate sempre RMAN per i backup di Oracle vero?) per il restore del spfile:&lt;br /&gt;&lt;blockquote class="code"&gt;$ sqlplus /nolog&lt;br /&gt;SQL&gt; connect / as sysdba&lt;br /&gt;(connesso ad un'istanza sospesa)&lt;br /&gt;SQL&gt; startup pfile='path_al_pfile_recuperato' nomount&lt;/blockquote&gt;&lt;br /&gt;Le due istanze ripartono magicamente e in modalità NOMOUNT, importante per eseguire un corretto restore tramite RMAN! Ora bisogna occuparsi del restore del spfile tramite RMAN. Si può riprendere il file spfile dall'autobackup del control file che si imposta in RMAN con la sintassi:&lt;br /&gt;&lt;blockquote class="code"&gt;CONFIGURE CONTROLFILE AUTOBACKUP ON;&lt;br /&gt;CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK&lt;br /&gt;TO '/backup/CF_%F';&lt;/blockquote&gt;&lt;br /&gt;Ora ci si può collegare ad RMAN, impostare il DBID (lo si può ottenere da un log eseguito da RMAN quando il database era ancora funzionante) e quindi partire con il restore del spfile:&lt;br /&gt;&lt;blockquote class="code"&gt;$ RMAN TARGET /&lt;br /&gt;RMAN set DBID=(DBID)&lt;br /&gt;RMAN&gt; run {&lt;br /&gt;2&gt; set controlfile autobackup format&lt;br /&gt;3&gt; for device type disk to '/backup/CF_%F';&lt;br /&gt;4&gt; restore spfile from autobackup;&lt;br /&gt;5&gt; }&lt;br /&gt;&lt;br /&gt;esecuzione comando: SET CONTROLFILE AUTOBACKUP FORMAT&lt;br /&gt;uso del control file del database di destinazione invece del&lt;br /&gt;recovery catalog&lt;br /&gt;&lt;br /&gt;Avvio di restore in 25-SET-08&lt;br /&gt;canale allocato: ORA_DISK_1&lt;br /&gt;canale ORA_DISK_1: sid=402 istanza=&lt;SID&gt; devtype=DISK&lt;br /&gt;&lt;br /&gt;canale ORA_DISK_1: ricerca del backup automatico del giorno: 20080925&lt;br /&gt;canale ORA_DISK_1: ricerca del backup automatico del giorno: 20080924&lt;br /&gt;canale ORA_DISK_1: backup automatico trovato: /backup/CF_c-1453447801-2008&lt;br /&gt;canale ORA_DISK_1: ripristino di SPFILE dal backup automatico completato&lt;br /&gt;restore terminato in 25-SET-08&lt;/blockquote&gt;&lt;br /&gt;Dopo lo shutdown e il restart delle due istanze (si può usare sempre srvctl, oppure RMAN, o ancora i comandi SQL shutdown e startup), le istanze incriminate sono tornate online e lo stress test ha avuto inizio.&lt;br /&gt;Sospiro di sollievo...&lt;br /&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4306197867072890604-2314445419095779146?l=oracolodeidb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oracolodeidb.blogspot.com/feeds/2314445419095779146/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4306197867072890604&amp;postID=2314445419095779146' title='5 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4306197867072890604/posts/default/2314445419095779146'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4306197867072890604/posts/default/2314445419095779146'/><link rel='alternate' type='text/html' href='http://oracolodeidb.blogspot.com/2008/09/se-il-buon-giorno-si-vede-dal-mattino.html' title='Se il buon giorno si vede dal mattino'/><author><name>Simone Saravalli</name><uri>http://www.blogger.com/profile/16984004286817286244</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4306197867072890604.post-2707505975828876070</id><published>2008-09-25T15:03:00.000+02:00</published><updated>2008-09-25T15:12:29.580+02:00</updated><title type='text'>Primo post del blog</title><content type='html'>Questo blog nasce da una mia personale esigenza di raccogliere materiale, esperienze, link, informazioni, ecc. sul DBMS Oracle che uso quotidianamente per lavoro, ma che è anche diventato una delle mie principali passioni.&lt;br /&gt;Non sono un DBA e non ho conseguito (ancora!) certificazioni Oracle, ma un pò di esperienza in materia di gestione di DB Oracle la sto maturando, anche in ambiente RAC... e poi oggi i blog sono molto di moda no? :-D&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4306197867072890604-2707505975828876070?l=oracolodeidb.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://oracolodeidb.blogspot.com/feeds/2707505975828876070/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=4306197867072890604&amp;postID=2707505975828876070' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4306197867072890604/posts/default/2707505975828876070'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4306197867072890604/posts/default/2707505975828876070'/><link rel='alternate' type='text/html' href='http://oracolodeidb.blogspot.com/2008/09/primo-post-del-blog.html' title='Primo post del blog'/><author><name>Simone Saravalli</name><uri>http://www.blogger.com/profile/16984004286817286244</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
