<?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-11965249</id><updated>2012-01-06T22:32:05.892+01:00</updated><category term='linux'/><category term='virtualbox'/><category term='ext3'/><category term='zfs'/><category term='analytics'/><category term='ranking'/><category term='btrfs'/><category term='solaris'/><category term='raid'/><category term='analytics lead lag'/><category term='asm'/><title type='text'>Rudy's DBland</title><subtitle type='html'>Le avventure del Rudy nel fantastico mondo dei database.&lt;br/&gt;
Rudy &amp;egrave; Oracle 9i e 10g DBA Certified Professional.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://rdbland.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://rdbland.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default?start-index=101&amp;max-results=100'/><author><name>Rudy</name><uri>http://www.blogger.com/profile/05494812158299383717</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>199</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-11965249.post-4457098416078785901</id><published>2011-02-09T19:40:00.000+01:00</published><updated>2011-02-10T10:57:56.386+01:00</updated><title type='text'>La scalabilità di MyISAM secondo Oracle</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/-UA46QREEhk8/TVOsiqhGT2I/AAAAAAAAIsg/8aksDDGMQ0o/s1600/myisam_vs_innodb_rw.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 320px; height: 192px;" src="http://2.bp.blogspot.com/-UA46QREEhk8/TVOsiqhGT2I/AAAAAAAAIsg/8aksDDGMQ0o/s320/myisam_vs_innodb_rw.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5571986875516079970" /&gt;&lt;/a&gt;Oracle ha &lt;a href="http://blogs.oracle.com/linux/2011/02/what_a_performance_mysql_55_and_innodb_11_running_on_oracle_linux.html"&gt;divulgato i risultati di un test&lt;/a&gt; del MySQL performance team in cui sono state messe a confronto le prestazioni dei motori MyISAM e InnoDB di MySQL.&lt;br /&gt;&lt;br /&gt;Il grafico nel blog è eloquente: dall'andamento delle curve non posso pensare ad altro che agli effetti della serializzazione completa delle operazioni di MyISAM, rispetto all'efficienza del multi-versioning operato da InnoDB.&lt;br /&gt;Certo il multi-versioning costa, è pesante da gestire, rallenta le query singolarmente, ma la scalabilità è un'altra cosa.&lt;br /&gt;&lt;br /&gt;Il &lt;a href="http://www.mysql.com/why-mysql/white-papers/mysql_5.5_perf_myisam_innodb.php"&gt;whitepaper&lt;/a&gt; scaricabile è illuminante, soprattutto nei paragrafi "Comparing InnoDB &amp; MyISAM" e "Conclusions", in cui si leggono senza giri di parole vantaggi e svantaggi delle due soluzioni, e anche i loro impieghi più adatti.&lt;br /&gt;La versione di InnoDB presa in esame è l'ultima, la 1.1, in cui sono stati introdotti grandi miglioramenti (tutti riportati in dettaglio), ma il discorso rimane valido anche per le versioni precedenti: basta guardare i grafici dell'appendice B.&lt;br /&gt;&lt;br /&gt;Non sorprende che da MySQL 5.5 il motore di default diventa InnoDB, raccomandato per le nuove applicazioni.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11965249-4457098416078785901?l=rdbland.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://blogs.oracle.com/linux/2011/02/what_a_performance_mysql_55_and_innodb_11_running_on_oracle_linux.html' title='La scalabilità di MyISAM secondo Oracle'/><link rel='replies' type='application/atom+xml' href='http://rdbland.blogspot.com/feeds/4457098416078785901/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11965249&amp;postID=4457098416078785901' title='1 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/4457098416078785901'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/4457098416078785901'/><link rel='alternate' type='text/html' href='http://rdbland.blogspot.com/2011/02/la-scalabilita-di-myisam-secondo-oracle.html' title='La scalabilità di MyISAM secondo Oracle'/><author><name>Rudy</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://my.opera.com/hillrudy/homes/albums/16833/IMG_2787.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-UA46QREEhk8/TVOsiqhGT2I/AAAAAAAAIsg/8aksDDGMQ0o/s72-c/myisam_vs_innodb_rw.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11965249.post-1533788386530230077</id><published>2010-11-18T21:12:00.001+01:00</published><updated>2010-11-19T09:56:07.860+01:00</updated><title type='text'>Solaris 11 Express è arrivato</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_r0EgR7__Fw0/TNpb8amZRaI/AAAAAAAAIqU/D6CzgffOA8I/s1600/oracle_solaris.gif"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 142px; height: 63px;" src="http://3.bp.blogspot.com/_r0EgR7__Fw0/TNpb8amZRaI/AAAAAAAAIqU/D6CzgffOA8I/s320/oracle_solaris.gif" border="0" alt=""id="BLOGGER_PHOTO_ID_5537839785296086434" /&gt;&lt;/a&gt;Un paio di giorni fa Oracle ha rilasciato &lt;a href="http://www.oracle.com/technetwork/server-storage/solaris11/downloads/index.html"&gt;Solaris 11 Express&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Grande varietà di formati di installazione: testo, automatizzata e live, e c'è anche la versione usb di tutt'e tre; viene anche messo a disposizione tutto il software per creare un repository locale.&lt;br /&gt;&lt;br /&gt;È ora possibile valutare con mano le intenzioni di Oracle per il futuro di Solaris.&lt;br /&gt;Dalle prime prove che ho fatto, lo sforzo per evolvere tecnologicamente Solaris è evidente e promette bene per Solaris 11, il cui rilascio è previsto per il 2011.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11965249-1533788386530230077?l=rdbland.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.oracle.com/technetwork/server-storage/solaris11/downloads/index.html' title='Solaris 11 Express è arrivato'/><link rel='replies' type='application/atom+xml' href='http://rdbland.blogspot.com/feeds/1533788386530230077/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11965249&amp;postID=1533788386530230077' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/1533788386530230077'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/1533788386530230077'/><link rel='alternate' type='text/html' href='http://rdbland.blogspot.com/2010/11/solaris-11-express-e-arrivato.html' title='Solaris 11 Express è arrivato'/><author><name>Rudy</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://my.opera.com/hillrudy/homes/albums/16833/IMG_2787.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_r0EgR7__Fw0/TNpb8amZRaI/AAAAAAAAIqU/D6CzgffOA8I/s72-c/oracle_solaris.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11965249.post-621175464558630450</id><published>2010-11-18T20:58:00.000+01:00</published><updated>2010-11-19T09:47:22.985+01:00</updated><title type='text'>Altre pagine lente in Enterprise Manager aggiornato</title><content type='html'>Mi sono trovato in una strana situazione dopo l'aggiornamento di due database a 10.2.0.5: una pagina di Enterprise Manager, la Top Activity, ci metteva 5 minuti ad essere visualizzata; in un altro caso le pagine di ASM risultavano irraggiungibili, come ogni tanto accade.&lt;br /&gt;&lt;br /&gt;Il primo caso era effettivamente inusuale: nessun carico sulla CPU, nessuna query strana, nessuna attività a disco.&lt;br /&gt;È risultato dal log applicativo che era colpa di un timeout di una connessione SSL alla porta di default di EM, nel file emoms.properties. Il mio EM era infatti configurato in http, mentre l'aggiornamento riconfigura EM in https, ma a quanto pare scrive qualcosa di irregolare nel file (EMD_URL in maiuscolo?), in modo che, riconfigurando EM in http, la linea emd_url rimane con un URL https.&lt;br /&gt;&lt;br /&gt;L'effetto collaterale è stato di risolvere anche il secondo problema, che ha richiesto anche il riavvio dell'agente sul secondo nodo del cluster.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11965249-621175464558630450?l=rdbland.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rdbland.blogspot.com/feeds/621175464558630450/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11965249&amp;postID=621175464558630450' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/621175464558630450'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/621175464558630450'/><link rel='alternate' type='text/html' href='http://rdbland.blogspot.com/2010/11/altre-pagine-lente-in-enterprise.html' title='Altre pagine lente in Enterprise Manager aggiornato'/><author><name>Rudy</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://my.opera.com/hillrudy/homes/albums/16833/IMG_2787.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11965249.post-1767013370983303700</id><published>2010-11-09T22:14:00.001+01:00</published><updated>2010-11-10T09:55:15.473+01:00</updated><title type='text'>Solaris 11 Express sta arrivando</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_r0EgR7__Fw0/TNpb8amZRaI/AAAAAAAAIqU/D6CzgffOA8I/s1600/oracle_solaris.gif"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 142px; height: 63px;" src="http://3.bp.blogspot.com/_r0EgR7__Fw0/TNpb8amZRaI/AAAAAAAAIqU/D6CzgffOA8I/s320/oracle_solaris.gif" border="0" alt=""id="BLOGGER_PHOTO_ID_5537839785296086434" /&gt;&lt;/a&gt;Oracle sta finalmente rivelando in pratica come sarà lo sviluppo di Solaris.&lt;br /&gt;&lt;br /&gt;Entro fine anno vedrà la luce &lt;a href="http://www.oracle.com/us/corporate/press/173478"&gt;Solaris 11 Express&lt;/a&gt;, che precede Solaris 11, il quale a sua volta uscirà nel 2011.&lt;br /&gt;&lt;br /&gt;Le nuove caratteristiche di Solaris 11 Express sono visibili nelle slide di Lisa 2010 in &lt;a href="http://blogs.sun.com/theopenwaters/entry/oracle_solaris_summit_is_streaming"&gt;questo blog post&lt;/a&gt;. E sì, &lt;span style="font-weight:bold;"&gt;è inclusa la deduplica in ZFS&lt;/span&gt;!&lt;br /&gt;&lt;br /&gt;Nella prima slide trovo la conferma di quello che ho sempre pensato delle nuove strategie: Solaris sta diventando il sistema operativo per i sistemi high-end, mentre per tutti gli altri sistemi c'è Oracle Enterprise Linux, ora col nuovo kernel Oracle.&lt;br /&gt;&lt;span style="font-style:italic;"&gt;"Oracle Solaris: The Mission Critical OS. If It Must Work, It Runs on Solaris"&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11965249-1767013370983303700?l=rdbland.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rdbland.blogspot.com/feeds/1767013370983303700/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11965249&amp;postID=1767013370983303700' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/1767013370983303700'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/1767013370983303700'/><link rel='alternate' type='text/html' href='http://rdbland.blogspot.com/2010/11/solaris-11-express-sta-arrivando.html' title='Solaris 11 Express sta arrivando'/><author><name>Rudy</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://my.opera.com/hillrudy/homes/albums/16833/IMG_2787.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_r0EgR7__Fw0/TNpb8amZRaI/AAAAAAAAIqU/D6CzgffOA8I/s72-c/oracle_solaris.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11965249.post-7107165377441362337</id><published>2010-10-13T22:19:00.001+02:00</published><updated>2010-10-14T09:42:30.592+02:00</updated><title type='text'>Oracle 11.2.0.2, i patchset cambiano</title><content type='html'>Grandi novità per i patchset Oracle.&lt;br /&gt;&lt;br /&gt;A cominciare dal patchset 11.2.0.2, i patchset saranno delle installazioni complete del software, quindi, per le nuove installazioni, &lt;b&gt;non sarà più necessario installare il software di base (11.2.0.1), scaricare i patchset e applicarli&lt;/b&gt;.&lt;br /&gt;&lt;br /&gt;Il patchset, enorme (4.7 GB), è infatti formato da 7 file zip: i primi due per il database (anche RAC), poi Grid, Client, Gateways, Examples e Deinstall, che finiscono ognuno nelle rispettive directory.&lt;br /&gt;&lt;br /&gt;Per le installazioni esistenti, la grande novità è l'&lt;b&gt;&lt;i&gt;out-of-place upgrade&lt;/i&gt;&lt;/b&gt;, consigliato rispetto al tradizionale in-place upgrade: la nuova versione del software viene installata in una nuova ORACLE_HOME, senza intaccare quella vecchia, e alla fine dell'installazione viene migrato il database alla nuova versione. Ciò ha due vantaggi principali:&lt;ol&gt;&lt;li&gt;Il downtime è minore: non è più necessario fermare il database e i processi per installare il nuovo software.&lt;/li&gt;&lt;li&gt;Il vecchio software rimane al suo posto, in tal modo viene facilitato il ritorno alla vecchia versione (prima bisognava fare il backup manuale).&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;Il programma di installazione ora può scaricare patch per sé e per il database direttamente in fase di installazione, eliminando tutti i problemi di aggiornamento in questa fase.&lt;br /&gt;&lt;br /&gt;Le novità di management si trovano nella "&lt;a href="http://download.oracle.com/docs/cd/E11882_01/server.112/e17128/chapter1_2.htm#BGBGFDGI2"&gt;New features guide&lt;/a&gt;", ora aggiornata al patchset.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11965249-7107165377441362337?l=rdbland.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://download.oracle.com/docs/cd/E11882_01/server.112/e17128/chapter1_2.htm#BGBGFDGI2' title='Oracle 11.2.0.2, i patchset cambiano'/><link rel='replies' type='application/atom+xml' href='http://rdbland.blogspot.com/feeds/7107165377441362337/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11965249&amp;postID=7107165377441362337' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/7107165377441362337'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/7107165377441362337'/><link rel='alternate' type='text/html' href='http://rdbland.blogspot.com/2010/10/oracle-11202-i-patchset-cambiano.html' title='Oracle 11.2.0.2, i patchset cambiano'/><author><name>Rudy</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://my.opera.com/hillrudy/homes/albums/16833/IMG_2787.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11965249.post-7151860390142955983</id><published>2010-08-31T22:35:00.000+02:00</published><updated>2010-09-01T14:26:57.573+02:00</updated><title type='text'>Stato di Btrfs</title><content type='html'>In questi giorni era in programma un webcast Oracle sullo stato dello sviluppo di &lt;a href="http://en.wikipedia.org/wiki/Btrfs"&gt;Btrfs&lt;/a&gt;, il nuovo filesystem open-source sviluppato da Oracle sulla falsariga di ZFS di Solaris.&lt;br /&gt;Btrfs è ormai incluso nel kernel Linux dalla versione 2.6.30, anche se rimane comunque in sviluppo e non è idoneo per l'entrata in produzione.&lt;br /&gt;&lt;br /&gt;Come ZFS, Btrfs si focalizza sul superamento di tutti i limiti dei filesystem tradizionali, quali le dimensioni massime di file e filesystem, la gestibilità e la scalabilità all'aumentare delle dimensioni dello storage, e la sicurezza e affidabilità dell'I/O.&lt;div&gt;La "novità" tecnologica principale su cui si basa la gran parte delle meraviglie di ZFS e Btrfs è il COW (&lt;i&gt;Copy On Write&lt;/i&gt;), ovvero il metodo per cui non vengono mai modificati o rimossi i blocchi esistenti, ma ogni operazione di scrittura alloca una nuovo blocco, fino ad esaurimento dello spazio disponibile.&lt;br /&gt;&lt;br /&gt;Le differenze da ZFS si possono riassumere nelle seguenti, almeno a quanto ricordo:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;Snapshot scrivibili&lt;/b&gt;: interessantissimo, permette nuovi e inediti scenari di versioning, backup, test, tutti praticamente a costo zero e istantanei.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Deframmentazione online&lt;/b&gt;: il COW ha come effetto collaterale un'alta deframmentazione. Penso che comunque la deframmentazione non sia molto importante in un ambiente SAN.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Conversione da ext3/4&lt;/b&gt;: esiste un tool di migrazione dei dati esistenti che sfrutta lo spazio libero dei volumi ext3/4.&lt;/li&gt;&lt;li&gt;&lt;b&gt;Ottimizzazione per SSD&lt;/b&gt;: esistono delle opzioni di mount per i dischi SSD, che per esempio non hanno bisogno di routine anti-frammentazione in scrittura.&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;RAID 5/6 sono ancora assenti; sono invece molto sviluppati ed efficienti in ZFS.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;È importante sottolineare che per Btrfs non è previsto il funzionamento come cluster filesystem.&lt;br /&gt;&lt;br /&gt;Ho guardato il webcast in differita, quindi non ho potuto fare domande, anche se quelle che ho sentito erano molto interessanti e facevano capire che l'audience aveva più o meno gli stessi dubbi e interrogativi sulla genesi e sul futuro del progetto Btrfs, visto che ora Oracle Solaris ha ZFS in produzione (e di conseguenza in manutenzione).&lt;br /&gt;&lt;br /&gt;Il webcast è disponibile a &lt;a href="http://w.on24.com/r.htm?e=233161&amp;amp;s=1&amp;amp;k=D0B1D3285FA444C5745C344A1C859CE0"&gt;questo indirizzo&lt;/a&gt;.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11965249-7151860390142955983?l=rdbland.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://w.on24.com/r.htm?e=233161&amp;s=1&amp;k=D0B1D3285FA444C5745C344A1C859CE0' title='Stato di Btrfs'/><link rel='replies' type='application/atom+xml' href='http://rdbland.blogspot.com/feeds/7151860390142955983/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11965249&amp;postID=7151860390142955983' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/7151860390142955983'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/7151860390142955983'/><link rel='alternate' type='text/html' href='http://rdbland.blogspot.com/2010/08/stato-di-btrfs.html' title='Stato di Btrfs'/><author><name>Rudy</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://my.opera.com/hillrudy/homes/albums/16833/IMG_2787.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11965249.post-7452835854462939760</id><published>2010-07-26T21:22:00.000+02:00</published><updated>2010-07-27T15:11:46.065+02:00</updated><title type='text'>Dove sono finiti Solaris e ZFS</title><content type='html'>All'inizio di luglio ho ricevuto una newsletter Oracle che parlava dei nuovi storage basati su hardware Sun.&lt;br /&gt;Al momento non ho prestato molta attenzione all'annuncio, considerando che era abbastanza ovvio che la produzione di server Sun venisse mantenuta o ampliata. Confesso di avere trascurato la parola &lt;span style="font-style:italic;"&gt;storage&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Arriverò anche per ultimo a rendermi conto di quanto sta accadendo per le tecnologie Sun in casa Oracle, ma sono mesi che attendo la "prossima" release di Opensolaris per poter provare, anzi utilizzare direttamente, le nuove mirabolanti caratteristiche di ZFS, e nulla si muove.&lt;br /&gt;Sta di fatto che le release di Opensolaris (e Solaris, presumo) sembrano congelate a tempo indefinito. È possibile solamente scaricare le versioni beta di OS fino alla build b134.&lt;br /&gt;&lt;br /&gt;Oggi mi sono imbattuto in una pagina web dove si citava Sun Unified Storage, che mi ha richiamato quella newsletter, che qualche ricordo aveva lasciato.&lt;br /&gt;Ebbene ho "scoperto" che &lt;a href="http://www.oracle.com/us/products/servers-storage/storage/unified-storage/sun-storage-7000-uss-103104.html"&gt;ZFS è la tecnologia&lt;/a&gt; su cui si basa la &lt;a href="http://www.oracle.com/us/products/servers-storage/storage/unified-storage/index.html"&gt;serie 7000&lt;/a&gt; degli storage server.&lt;br /&gt;&lt;br /&gt;Non serve dire altro: a mio parere ZFS era/è una tecnologia con un valore aggiunto elevatissimo, tale da giustificare da solo gran parte dell'acquisizione di Sun, valore comunque troppo elevato per lasciarla gratuita. Non resta che sperare che Opensolaris continui per la sua strada.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11965249-7452835854462939760?l=rdbland.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.oracle.com/us/corporate/press/102824' title='Dove sono finiti Solaris e ZFS'/><link rel='replies' type='application/atom+xml' href='http://rdbland.blogspot.com/feeds/7452835854462939760/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11965249&amp;postID=7452835854462939760' title='2 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/7452835854462939760'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/7452835854462939760'/><link rel='alternate' type='text/html' href='http://rdbland.blogspot.com/2010/07/dove-sono-finiti-solaris-e-zfs.html' title='Dove sono finiti Solaris e ZFS'/><author><name>Rudy</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://my.opera.com/hillrudy/homes/albums/16833/IMG_2787.JPG'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11965249.post-7999243190324807641</id><published>2010-05-04T15:10:00.002+02:00</published><updated>2010-05-04T15:16:55.870+02:00</updated><title type='text'>È uscito 10.2.0.5, l'ultimo patch set per 10gR2</title><content type='html'>Come da titolo di questo post, è uscito da qualche giorno il patch set 10.2.0.5, l'ultimo patch set per Oracle 10gR2, per ora disponibile solo per Linux 32 e 64 bit.&lt;br /&gt;Gli eventuali aggiornamenti futuri arriveranno sotto forma di patch set updates (PSU).&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11965249-7999243190324807641?l=rdbland.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rdbland.blogspot.com/feeds/7999243190324807641/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11965249&amp;postID=7999243190324807641' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/7999243190324807641'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/7999243190324807641'/><link rel='alternate' type='text/html' href='http://rdbland.blogspot.com/2010/05/e-uscito-10205-lultimo-patch-set-per.html' title='È uscito 10.2.0.5, l&apos;ultimo patch set per 10gR2'/><author><name>Rudy</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://my.opera.com/hillrudy/homes/albums/16833/IMG_2787.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11965249.post-7997020609878599519</id><published>2010-03-30T15:27:00.005+02:00</published><updated>2010-03-30T15:45:16.702+02:00</updated><title type='text'>Solaris 10 non è più gratuito</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_r0EgR7__Fw0/S7H_ZzP_c1I/AAAAAAAAIcU/vHKsg2t2ZwM/s1600/solaris_logo-300x155.png"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 150px; height: 77px;" src="http://2.bp.blogspot.com/_r0EgR7__Fw0/S7H_ZzP_c1I/AAAAAAAAIcU/vHKsg2t2ZwM/s320/solaris_logo-300x155.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5454421442441474898" /&gt;&lt;/a&gt;Dopo una lunga pausa invernale senza rilevanti novità da scrivere sul blog, oggi mi sono imbattuto in una novità poco gradita: &lt;span style="font-weight:bold;"&gt;&lt;a href="http://arstechnica.com/open-source/news/2010/03/solaris-10-no-longer-free-as-in-beer-now-a-90-day-trial.ars"&gt;Oracle ha modificato i termini di licenza di Solaris 10&lt;/a&gt;, obbligando gli utenti a sottoscrivere un contratto di supporto per potere utilizzare il software&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Per me è un po' un colpo basso: anche se OpenSolaris rimane libero e liberamente utilizzabile, Solaris 10 era, a mio parere, l'unica piattaforma alternativa a Linux e ben più stabile complessivamente.&lt;br /&gt;OpenSolaris è praticamente inutilizzabile per installare Oracle, primo perché totalmente non supportato e poi perché mancante di molti pacchetti richiesti in fase di installazione e non facilmente sostituibili.&lt;br /&gt;OpenSolaris è inoltre molto più orientato al desktop, non al server.&lt;br /&gt;Certo, è probabile che il supporto non sarà un costo insostenibile per le aziende di qualsiasi dimensione, ma rimane sempre un possibile motivo di mancata preferenza rispetto ad altre piattaforme.&lt;br /&gt;&lt;br /&gt;Come da me a grandi linee previsto, Solaris è destinato a diventare il sistema operativo d'elite per server Oracle, mentre Linux è destinato al mercato di fascia medio-bassa. Ciò potrebbe avere però ripercussioni su OpenSolaris e la comunità free in generale; staremo a vedere.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11965249-7997020609878599519?l=rdbland.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://arstechnica.com/open-source/news/2010/03/solaris-10-no-longer-free-as-in-beer-now-a-90-day-trial.ars' title='Solaris 10 non è più gratuito'/><link rel='replies' type='application/atom+xml' href='http://rdbland.blogspot.com/feeds/7997020609878599519/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11965249&amp;postID=7997020609878599519' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/7997020609878599519'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/7997020609878599519'/><link rel='alternate' type='text/html' href='http://rdbland.blogspot.com/2010/03/solaris-10-non-e-piu-gratuito.html' title='Solaris 10 non è più gratuito'/><author><name>Rudy</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://my.opera.com/hillrudy/homes/albums/16833/IMG_2787.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_r0EgR7__Fw0/S7H_ZzP_c1I/AAAAAAAAIcU/vHKsg2t2ZwM/s72-c/solaris_logo-300x155.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11965249.post-5563708962546524919</id><published>2009-12-01T23:07:00.000+01:00</published><updated>2009-12-02T11:33:54.480+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='raid'/><category scheme='http://www.blogger.com/atom/ns#' term='linux'/><category scheme='http://www.blogger.com/atom/ns#' term='ext3'/><title type='text'>Ottimizzare ext3 su RAID</title><content type='html'>Una domanda che mi sono sempre fatto, quando mi trovo a lavorare con un filesystem ext2/3 nuovo su volumi sempre più grandi, è come possa un filesystem praticamente invariato da decenni a supportare unità logiche di centinaia di GB senza in qualche modo "accusare il colpo". Per questo preferisco filesystem più moderni ma, ahimè, non supportati o non &lt;span style="font-style:italic;"&gt;mainstream&lt;/span&gt; sotto Linux.&lt;br /&gt;&lt;br /&gt;ext3 per altro verso presenta caratteristiche molto interessanti per Oracle: supporta il direct I/O e l'I/O asincrono, due feature molto importanti per massimizzare le prestazioni di un database sotto Linux. Ma i 4 KB di dimensione massima del blocco e la struttura abbastanza tradizionale del filesystem mi lasciano perplesso di fronte a unità logiche di qualche terabyte.&lt;br /&gt;Pensiamo ad esempio ai nuovi filesystem come btrfs o ZFS (due a caso :-)). Praticamente non c'è paragone tra ext3 e i filesystem di nuova generazione.&lt;br /&gt;&lt;br /&gt;Mentre aspettiamo che Linux si decida ad adottare un filesystem di livello enterprise e con caratteristiche moderne, possiamo massimizzare almeno le prestazioni di ext3 adattandolo all'astrazione dell'hardware sottostante con cui ci troviamo ad operare, tipicamente un'unità RAID.&lt;br /&gt;&lt;br /&gt;Dobbiamo considerare che alcuni livelli RAID, come il RAID5, soffrono di lentezze strutturali in scrittura a causa del calcolo di parità, arrivando al massimo delle performance solo quando viene effettuata una scrittura di una stripe completa. Durante la creazione di un volume RAID è solitamente possibile specificare la stripe size, da pochi KB fino a circa 256 KB e oltre.&lt;br /&gt;&lt;br /&gt;ext3 ha un paio di parametri che aiutano a ottimizzare il filesystem in scrittura: &lt;span style="font-weight:bold;"&gt;stride&lt;/span&gt; e &lt;span style="font-weight:bold;"&gt;stripe-width&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;stride&lt;/span&gt; è il numero di blocchi di filesystem che servono per scrivere una stripe (nel caso ext3 un blocco è di 4 KB praticamente sempre).&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;stripe-width&lt;/span&gt; è la quantità di blocchi che servono a coprire una scrittura completa su tutti i dischi che "portano" dati, multiplo intero della stride.&lt;br /&gt;Mi spiego meglio con un esempio: RAID5 usa una parità distribuita che risulta in uno spazio disponibile di n-1 dischi, quindi con una certa stripe size verranno scritte n-1 stripe che "portano dati" sui dischi, e 1 stripe di parità; questa è la stripe width, e per ext3 si misura in blocchi e corrisponde a stride*(n-1)*blocksize nel caso di RAID5.&lt;br /&gt;&lt;br /&gt;C'è un &lt;a href="http://wiki.centos.org/HowTos/Disk_Optimization"&gt;documento di Centos&lt;/a&gt; sull'ottimizzazione di ext3 con l'ottimizzazione per il RAID nell'ultimo paragrafo, anche se c'è qualche errore di notazione. Il fatto che stripe-width sia stato rimosso da Centos 5.3 corrisponde a verità purtroppo anche per RHEL. Non riesco a spiegarmi questo fatto, quando sulla mia Ubuntu desktop è ben presente.&lt;br /&gt;&lt;br /&gt;Qualcuno si è creato anche la calcolatrice apposita, che potete trovare qui: &lt;a href="http://busybox.net/~aldot/mkfs_stride.html"&gt;http://busybox.net/~aldot/mkfs_stride.html&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11965249-5563708962546524919?l=rdbland.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rdbland.blogspot.com/feeds/5563708962546524919/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11965249&amp;postID=5563708962546524919' title='1 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/5563708962546524919'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/5563708962546524919'/><link rel='alternate' type='text/html' href='http://rdbland.blogspot.com/2009/12/ottimizzare-ext3-su-raid.html' title='Ottimizzare ext3 su RAID'/><author><name>Rudy</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://my.opera.com/hillrudy/homes/albums/16833/IMG_2787.JPG'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11965249.post-3574084389626529205</id><published>2009-11-25T23:20:00.001+01:00</published><updated>2009-11-26T15:29:03.889+01:00</updated><title type='text'>Oracle 11gR2 per Solaris SPARC e x86</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_r0EgR7__Fw0/Rsv8foGKH2I/AAAAAAAAC-0/KzuskDbr4s8/s1600-h/11g_splash.gif"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_r0EgR7__Fw0/Rsv8foGKH2I/AAAAAAAAC-0/KzuskDbr4s8/s200/11g_splash.gif" border="0" alt=""id="BLOGGER_PHOTO_ID_5101448623196610402" /&gt;&lt;/a&gt;Oggi ho notato che è uscita la versione per &lt;a href="http://www.oracle.com/technology/software/products/database/oracle11g/112010_sparc64soft.html"&gt;SPARC&lt;/a&gt; e &lt;a href="http://www.oracle.com/technology/software/products/database/oracle11g/112010_sparc_x64soft.html"&gt;x86&lt;/a&gt; di Oracle 11gR2.&lt;br /&gt;&lt;br /&gt;Per me è un'ottima notizia perché personalmente apprezzo molto Solaris come sistema operativo in ambito server. Per alcuni versi Solaris sta ai sistemi operativi come Oracle sta ai database.&lt;br /&gt;&lt;br /&gt;Le strategie Oracle per Solaris e soprattutto per l'hardware x86 sono chiare e più che condivisibili: si stanno delineando due livelli di utilizzo del database, un low-end (Linux) e un high-end (Solaris), con relative prevedibili differenze di prezzo.&lt;br /&gt;Non dimentichiamo che la versione per Windows non si è ancora fatta vedere, e che tradizionalmente la versione per Solaris x86 è stata fra le più trascurate.&lt;br /&gt;A mio parere l'importante è non perdere il grande patrimonio architetturale di Sun.&lt;br /&gt;&lt;br /&gt;Dovrò ritagliarmi un sabato o domenica piovosa per aggiornare il mio server di casa.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11965249-3574084389626529205?l=rdbland.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.oracle.com/technology/software/products/database/oracle11g/112010_sparc_x64soft.html' title='Oracle 11gR2 per Solaris SPARC e x86'/><link rel='replies' type='application/atom+xml' href='http://rdbland.blogspot.com/feeds/3574084389626529205/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11965249&amp;postID=3574084389626529205' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/3574084389626529205'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/3574084389626529205'/><link rel='alternate' type='text/html' href='http://rdbland.blogspot.com/2009/11/oracle-11gr2-per-solaris-sparc-e-x86.html' title='Oracle 11gR2 per Solaris SPARC e x86'/><author><name>Rudy</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://my.opera.com/hillrudy/homes/albums/16833/IMG_2787.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_r0EgR7__Fw0/Rsv8foGKH2I/AAAAAAAAC-0/KzuskDbr4s8/s72-c/11g_splash.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11965249.post-1022265738103956468</id><published>2009-11-19T22:40:00.000+01:00</published><updated>2009-11-20T16:56:11.862+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='btrfs'/><title type='text'>La storia di btrfs</title><content type='html'>Segnalo questo interessantissimo &lt;a href="http://lwn.net/Articles/342892/"&gt;articolo su btrfs&lt;/a&gt;, il filesystem ispirato anche a ZFS, creato da Oracle e ormai parte del kernel Linux, sebbene ancora in pieno sviluppo.&lt;br /&gt;&lt;br /&gt;Fra le caratteristiche principali, il copy-on-write, gli snapshot anche scrivibili, la transazionalità.&lt;br /&gt;&lt;br /&gt;Mi ero occupato di btrfs già in passato, ma ora la situazione si è evoluta talmente che Linus Torvalds lo usa come filesystem in uno dei suoi laptop.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11965249-1022265738103956468?l=rdbland.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://lwn.net/Articles/342892/' title='La storia di btrfs'/><link rel='replies' type='application/atom+xml' href='http://rdbland.blogspot.com/feeds/1022265738103956468/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11965249&amp;postID=1022265738103956468' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/1022265738103956468'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/1022265738103956468'/><link rel='alternate' type='text/html' href='http://rdbland.blogspot.com/2009/11/la-storia-di-btrfs.html' title='La storia di btrfs'/><author><name>Rudy</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://my.opera.com/hillrudy/homes/albums/16833/IMG_2787.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11965249.post-1231805080029883459</id><published>2009-11-15T08:47:00.001+01:00</published><updated>2009-11-15T08:48:44.511+01:00</updated><title type='text'>OS Watcher</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_r0EgR7__Fw0/SvQmzYxT1iI/AAAAAAAAIGs/u7PoD1z3P-4/s1600-h/watch.gif"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 240px; height: 100px;" src="http://3.bp.blogspot.com/_r0EgR7__Fw0/SvQmzYxT1iI/AAAAAAAAIGs/u7PoD1z3P-4/s320/watch.gif" alt="" id="BLOGGER_PHOTO_ID_5400984517388523042" border="0" /&gt;&lt;/a&gt;Ho scoperto da qualche giorno &lt;a href="https://metalink.oracle.com/cgi-bin/cr/getfile.cgi?p_attid=301137.1:OSW_UG2"&gt;OS Watcher&lt;/a&gt;, un tool del "center of expertise" della Oracle, perché ho dovuto utilizzarlo per indagare su un problema di allocazione di memoria. In realtà mi è stato richiesto dal supporto Oracle, perché personalmente non avevo dubbi sulle performance, ma solo su un potenziale &lt;span style="font-style: italic;"&gt;memory leak&lt;/span&gt;. Il dubbio è che OS Watcher sia diventato un po' il tool che viene fatto girare a chiunque si rivolga al supporto, indipendentemente dal suo problema specifico.&lt;br /&gt;&lt;br /&gt;OS Watcher è una collezione di script di shell che utilizza gli strumenti Unix per controllare e registrare ciò che accade a livello di sistema operativo, in modo da aiutare il DBA a identificare eventuali problemi che gli sfuggono e che stanno tra il database e l'hardware.&lt;br /&gt;&lt;br /&gt;L'installazione è semplicissima: basta scompattare l'archivio osw3b.tar scaricato da MOS, entrare nella directory osw e avviare la raccolta dei dati con (esempio):&lt;br /&gt;&lt;pre&gt;&lt;tt&gt;$ nohup ./startOSW.sh 60 10&lt;/tt&gt;&lt;/pre&gt;&lt;br /&gt;dove il primo parametro è il tempo di sampling in secondi, e il secondo parametro è la &lt;span style="font-style: italic;"&gt;retention policy&lt;/span&gt; dei dati in ore. La linea di comando che ho riportato quindi imposta il campionamento una volta al minuto e cancella i file dei dati campionati più vecchi di 10 ore. Non serve nemmeno il "&amp;amp;" finale perché lo script fa ritornare immediatamente il prompt. nohup serve ad evitare che, uscendo dalla shell, venga fermato il processo principale.&lt;br /&gt;Per fermare il monitor basta eseguire:&lt;br /&gt;&lt;pre&gt;&lt;tt&gt;$ ./stopOSW.sh&lt;/tt&gt;&lt;/pre&gt;&lt;br /&gt;Lo script rileva automaticamente la presenza e l'accessibilità delle utility Unix per il controllo del sistema come vmstat e top, crea una directory archive e vi immagazzina i dati.&lt;br /&gt;&lt;br /&gt;Dall'ultima versione del 2009 OS Watcher viene distrubuito con OSWg, un'utility Java che visualizza graficamente i dati registrati.&lt;br /&gt;&lt;br /&gt;OS Watcher risulta comunque utile a tutti, indipendentemente dall'utilizzo del database Oracle.&lt;br /&gt;&lt;br /&gt;Vedere anche la nota MOS 301137.1&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11965249-1231805080029883459?l=rdbland.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rdbland.blogspot.com/feeds/1231805080029883459/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11965249&amp;postID=1231805080029883459' title='1 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/1231805080029883459'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/1231805080029883459'/><link rel='alternate' type='text/html' href='http://rdbland.blogspot.com/2009/11/oswatcher.html' title='OS Watcher'/><author><name>Rudy</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://my.opera.com/hillrudy/homes/albums/16833/IMG_2787.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_r0EgR7__Fw0/SvQmzYxT1iI/AAAAAAAAIGs/u7PoD1z3P-4/s72-c/watch.gif' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11965249.post-6650671681306296385</id><published>2009-11-06T22:39:00.000+01:00</published><updated>2009-11-07T10:01:18.086+01:00</updated><title type='text'>Novità in Clusterware 11.2</title><content type='html'>Nella release 2 di Oracle 11g sono stati fatti enormi cambiamenti per quanto riguarda il sottosistema di clustering, specialmente per quanto riguarda chi installa il cluster su macchine vuote e utilizza ASM come storage per il database (esempio chi utilizza standard edition). Infatti, esclusi coloro che fanno un'upgrade e coloro che intendono utilizzare un cluster filesystem per i datafile (e che quindi hanno enterprise edition), ASM diventa una scelta quasi obbligatoria; secondo me anche la migliore in assoluto.&lt;br /&gt;Le novità riguardano soprattutto OCR e voting-disk: utilizzando ASM, non c'è più bisogno di due raw partitions per ospitarli, bensì Grid Infrastructure li immagazzina come file all'interno di ASM.&lt;br /&gt;&lt;br /&gt;Nel filesystem di ASM si trova, oltre che al nome univoco del database in standard OFA, anche la directory del cluster (es. test-cluster), contenente l'SPFILE di ASM e l'OCR, chiamato REGISTRY.*.* in standard OFA. Il nome del cluster viene dato in fase di installazione.&lt;br /&gt;&lt;br /&gt;Il numero dei voting disk dipende dalla redundancy del diskgroup di ASM: se la redundancy è &lt;span style="font-style: italic;"&gt;external&lt;/span&gt;, si può avere solo un voting disk, se è &lt;span style="font-style: italic;"&gt;normal&lt;/span&gt; fino a 3, se è &lt;span style="font-style: italic;"&gt;high&lt;/span&gt; fino a 5.&lt;br /&gt;In aggiunta, sembra che il voting disk venga salvato &lt;span style="font-style: italic;"&gt;solo su uno dei dischi che compongono il disk group&lt;/span&gt;, come è visibile dalla "query" seguente su un disk group multidisco:&lt;br /&gt;&lt;pre&gt;$ crsctl query css votedisk&lt;br /&gt;##  STATE    File Universal Id                File Name Disk group&lt;br /&gt;--  -----    -----------------                --------- ---------&lt;br /&gt;1. ONLINE   17a34e19b0e04ff0bf6b161d8ec83efc (ORCL:ASMDISK1) [DGDATA]&lt;br /&gt;Located 1 voting disk(s).&lt;/pre&gt;&lt;br /&gt;mentre l'OCR sembra più "normale":&lt;br /&gt;&lt;pre&gt;ASMCMD [+DGDATA/test-cluster/OCRFILE] &gt; ls -l&lt;br /&gt;Type     Redund  Striped  Time             Sys  Name&lt;br /&gt;OCRFILE  UNPROT  COARSE   NOV 05 22:00:00  Y    REGISTRY.255.699705373&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;La documentazione dice chiaramente che, con Clusterware 11.2, non è più necessario fare il backup dei voting disk, poiché la loro gestione è automatica, backup compresi.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11965249-6650671681306296385?l=rdbland.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rdbland.blogspot.com/feeds/6650671681306296385/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11965249&amp;postID=6650671681306296385' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/6650671681306296385'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/6650671681306296385'/><link rel='alternate' type='text/html' href='http://rdbland.blogspot.com/2009/11/novita-in-clusterware-112.html' title='Novità in Clusterware 11.2'/><author><name>Rudy</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://my.opera.com/hillrudy/homes/albums/16833/IMG_2787.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11965249.post-4791821393785837109</id><published>2009-10-18T11:19:00.000+02:00</published><updated>2009-10-18T11:19:43.086+02:00</updated><title type='text'>11gR2: alcune novità nei parametri di init</title><content type='html'>Ecco una rassegna dei più interessanti parametri di inizializzazione di un istanza 11gR2. Alcuni sono nuovi, altri esistevano già in 10gR2 ma sono stati modificati nel comportamento o nei valori.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;audit_trail&lt;/span&gt; - default: DB. Una volta era NONE, quindi se non si abilitava subito bisognava poi riavviare l'istanza.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;db_block_checksum&lt;/span&gt; - default: TYPICAL; vengono introdotti nuovi valori: &lt;code&gt;OFF, FALSE, TYPICAL, TRUE, FULL&lt;/code&gt;, dove TRUE e FALSE sono rimasti per compatibilità.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;db_file_multiblock_read_count&lt;/span&gt; - default:128. La documentazione dice che 1 MB per il multiblock read è un valore standard, quindi con blocchi da 8K bisogna usare 128. Per OLTP consiglia da 4 a 16 (vecchio default). Siccome serve ad evitare di leggere troppi blocchi per un solo I/O e quindi fare flooding della buffer cache, se si ha tanta RAM è leggermente meno significativo. Il suo valore influisce nel costo dei tablescan.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;db_securefile&lt;/span&gt; - default: PERMITTED. controlla il comportamento di default del db al momento di creare i LOB.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;deferred_segment_creation&lt;/span&gt; - default: TRUE; nuova feature 11g, non crea i segmenti finché la prima riga non viene inserita nel database. Tradizionalmente, quando si creano tabelle o indici, viene allocato almeno il primo extent (a meno di indicazioni contrarie). Con 11g è possibile ritardare la creazione degli extent e quindi l'occupazione su disco finché il primo dato non viene scritto nella tabella.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;sec_case_sensitive_logon&lt;/span&gt;: TRUE; da 11g il default è avere password case-sensitive per l'accesso al database.&lt;/li&gt;&lt;br /&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11965249-4791821393785837109?l=rdbland.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rdbland.blogspot.com/feeds/4791821393785837109/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11965249&amp;postID=4791821393785837109' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/4791821393785837109'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/4791821393785837109'/><link rel='alternate' type='text/html' href='http://rdbland.blogspot.com/2009/10/11gr2-alcune-novita-nei-parametri-di.html' title='11gR2: alcune novità nei parametri di init'/><author><name>Rudy</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://my.opera.com/hillrudy/homes/albums/16833/IMG_2787.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11965249.post-1686781127236688141</id><published>2009-10-14T08:33:00.000+02:00</published><updated>2009-10-14T09:41:46.398+02:00</updated><title type='text'>Oracle DBA Italia</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_r0EgR7__Fw0/SNYXDV9t9PI/AAAAAAAAGY8/kvVFMEieovo/s1600-h/oracle_dba_italia.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://3.bp.blogspot.com/_r0EgR7__Fw0/SNYXDV9t9PI/AAAAAAAAGY8/kvVFMEieovo/s200/oracle_dba_italia.jpg" alt="" id="BLOGGER_PHOTO_ID_5248407761949947122" border="0" /&gt;&lt;/a&gt;Da oggi è online il nuovo sito della comunità dei DBA Oracle in Italia, &lt;a href="http://www.dbaitalia.org/"&gt;http://www.dbaitalia.org/&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Il sito, senza alcun fine di lucro, è stato concepito per aggregare i DBA italiani in un luogo virtuale indipendente, in cui ciascuno può contribuire come meglio crede partecipando al forum, inviando articoli e inserendo nuove FAQ.&lt;br /&gt;&lt;br /&gt;Invito tutti i DBA a iscriversi e a contribuire in uno spirito collaborativo :-)&lt;br /&gt;&lt;br /&gt;Suggerimenti, critiche e commenti sono i benvenuti!&lt;br /&gt;È probabile che il sito richiederà continui aggiornamenti sia estetici che soprattutto di funzionalità e contenuti, quindi ogni collaborazione sarà gradita.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11965249-1686781127236688141?l=rdbland.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.dbaitalia.org/' title='Oracle DBA Italia'/><link rel='replies' type='application/atom+xml' href='http://rdbland.blogspot.com/feeds/1686781127236688141/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11965249&amp;postID=1686781127236688141' title='5 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/1686781127236688141'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/1686781127236688141'/><link rel='alternate' type='text/html' href='http://rdbland.blogspot.com/2009/10/oracle-dba-italia.html' title='Oracle DBA Italia'/><author><name>Rudy</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://my.opera.com/hillrudy/homes/albums/16833/IMG_2787.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_r0EgR7__Fw0/SNYXDV9t9PI/AAAAAAAAGY8/kvVFMEieovo/s72-c/oracle_dba_italia.jpg' height='72' width='72'/><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11965249.post-8810779468592486149</id><published>2009-09-24T22:39:00.000+02:00</published><updated>2009-09-25T10:47:00.871+02:00</updated><title type='text'>Lancio di 11gR2 ieri a Milano</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_r0EgR7__Fw0/Sp9w1dJAI7I/AAAAAAAAH-w/duGxuJSJrFw/s1600-h/eblast_teaser.gif"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 88px; height: 349px;" src="http://3.bp.blogspot.com/_r0EgR7__Fw0/Sp9w1dJAI7I/AAAAAAAAH-w/duGxuJSJrFw/s400/eblast_teaser.gif" border="0" alt=""id="BLOGGER_PHOTO_ID_5377140543761425330" /&gt;&lt;/a&gt;Ieri sono stato al lancio di Oracle 11gR2 all'hotel Hilton a Milano. Speravo di incontrare qualche DBA del gruppo Oracle DBA Italia di Facebook, ma non è stato così, nonostante le sale fossero affollate.&lt;br /&gt;&lt;br /&gt;Con grande piacere ho conosciuto &lt;a href="http://www.adellera.it/"&gt;Alberto Dell'Era&lt;/a&gt;, di cui ho letto spesso articoli interessantissimi su Oracle. Ho scoperto solo ieri che ha aperto anche un &lt;a href="http://www.adellera.it/blog"&gt;blog&lt;/a&gt;.&lt;br /&gt;Ho parlato con Alberto a proposito di un sito aggregatore di riferimento per tutti i DBA italiani, in italiano, in modo da raccogliere anche le sue impressioni. A parte le divergenze, siamo d'accordo che ci vorrebbe una maggiore adesione ed entusiasmo da parte degli altri DBA.&lt;br /&gt;&lt;br /&gt;Nonostante io abbia seguito per quanto possibile tutti gli annunci all'uscita di 11gR2, mi ero perso una strana e inusuale novità in Oracle Exadata 2: &lt;span style="font-style:italic;"&gt;Hybrid Columnar Compression&lt;/span&gt;. Oracle sta passando ai database "&lt;a href="http://en.wikipedia.org/wiki/Column-oriented_DBMS"&gt;colonnari&lt;/a&gt;"? Anche Kevin Closson &lt;a href="http://kevinclosson.wordpress.com/2009/09/01/oracle-switches-to-columnar-store-technology-with-oracle-database-11g-release-2/"&gt;se n'è occupato&lt;/a&gt;, e sembra che la versione Oracle abbia qualche feature in più (da ciò l'espressione "ibrida").&lt;br /&gt;&lt;br /&gt;Da provare assolutamente la &lt;span style="font-weight:bold;"&gt;edition-based redefinition&lt;/span&gt;, che promette di aggiornare gli oggetti del db in modo trasparente durante una upgrade dell'applicazione. In pratica non si avrà più downtime per gli aggiornamenti. Le "edizioni" sono definibili a livello di database.&lt;br /&gt;&lt;br /&gt;Ho visto una slide sul RAC one-node, in pratica un licensing particolare per cui si costruisce un RAC a due nodi in cui c'è sempre al massimo un'istanza attiva, mentre sull'altra macchina ci sono attive tutte le componenti RAC tranne l'istanza. È in ultima analisi un cluster attivo/passivo controllato da clusterware. A quanto ho capito ha anche il difetto(ne) di esistere solo per enterprise edition.&lt;br /&gt;&lt;br /&gt;Un ottimo utilizzo del nuovo cluster filesystem ACFS è come ORACLE_HOME condivisa. Nel caso di upgrade della home, è anche possibile utilizzare la funzione di snapshot per poter eventualmente tornare indietro all'occorrenza, solo però per quanto riguarda i file binari, non per il db.&lt;br /&gt;&lt;br /&gt;Le idee in casa Oracle non mancano. Vi aggiornerò prossimamente sulle prove di Grid Infrastructure 11gR2 che ho appena ultimato.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11965249-8810779468592486149?l=rdbland.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rdbland.blogspot.com/feeds/8810779468592486149/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11965249&amp;postID=8810779468592486149' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/8810779468592486149'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/8810779468592486149'/><link rel='alternate' type='text/html' href='http://rdbland.blogspot.com/2009/09/lancio-di-11gr2-ieri-milano.html' title='Lancio di 11gR2 ieri a Milano'/><author><name>Rudy</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://my.opera.com/hillrudy/homes/albums/16833/IMG_2787.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_r0EgR7__Fw0/Sp9w1dJAI7I/AAAAAAAAH-w/duGxuJSJrFw/s72-c/eblast_teaser.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11965249.post-5439721689939308142</id><published>2009-09-15T22:09:00.000+02:00</published><updated>2009-09-16T09:04:15.337+02:00</updated><title type='text'>Colonne correlate in 11g</title><content type='html'>In passato avevo già affrontato il problema delle &lt;a href="http://rdbland.blogspot.com/2008/07/vantaggi-del-sampling-dinamico.html"&gt;colonne correlate e il sampling dinamico&lt;/a&gt; come soluzione alternativa.&lt;br /&gt;&lt;br /&gt;In 11g, mediante una nuova modalità di raccolta delle statistiche, è possibile specificare dei &lt;span style="font-weight:bold;"&gt;gruppi di colonne&lt;/span&gt; su cui misurare la correlazione, in qualche modo un'estensione del concetto di distribuzione poco uniforme dei dati &lt;span style="font-style:italic;"&gt;(skewness)&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Facciamo un esempio più generale di quello fatto in passato, dove la correlazione è meno evidente. Nell'esempio del post sul sampling dinamico avevo utilizzato due colonne con valori uguali per ogni riga, mentre ora utilizzo un caso più reale: immaginiamo di avere tre gruppi di valori, il primo di valori attorno a 1000, il secondo attorno a 2000, il terzo attorno a 3000:&lt;br /&gt;&lt;pre&gt;SQL&gt; desc correl&lt;br /&gt; Name                Null?    Type&lt;br /&gt; ------------------- -------- --------------&lt;br /&gt; TAG                 NOT NULL VARCHAR2(16)&lt;br /&gt; VAL                 NOT NULL NUMBER(38)&lt;br /&gt;&lt;br /&gt;SQL&gt; insert into correl select 'TIPO1', 1000+TRUNC(DBMS_RANDOM.VALUE(0,100)) from all_objects;&lt;br /&gt;&lt;br /&gt;61122 rows created.&lt;br /&gt;&lt;br /&gt;SQL&gt; select * from correl where rownum &lt; 10;&lt;br /&gt;&lt;br /&gt;TAG                     VAL&lt;br /&gt;---------------- ----------&lt;br /&gt;TIPO1                  1035&lt;br /&gt;TIPO1                  1012&lt;br /&gt;TIPO1                  1003&lt;br /&gt;TIPO1                  1090&lt;br /&gt;TIPO1                  1070&lt;br /&gt;TIPO1                  1061&lt;br /&gt;TIPO1                  1004&lt;br /&gt;TIPO1                  1020&lt;br /&gt;TIPO1                  1032&lt;br /&gt;&lt;br /&gt;9 rows selected.&lt;br /&gt;&lt;br /&gt;SQL&gt; insert into correl select 'TIPO2', 2000+TRUNC(DBMS_RANDOM.VALUE(0,100)) from all_objects;&lt;br /&gt;&lt;br /&gt;61122 rows created.&lt;br /&gt;&lt;br /&gt;SQL&gt; insert into correl select 'TIPO3', 3000+TRUNC(DBMS_RANDOM.VALUE(0,100)) from all_objects;&lt;br /&gt;&lt;br /&gt;61122 rows created.&lt;br /&gt;&lt;br /&gt;SQL&gt; commit;&lt;br /&gt;&lt;br /&gt;Commit complete.&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;A questo punto prendiamo le statistiche standard e vediamo che l'optimizer, per un valore qualsiasi (e non esistente) all'interno del range max-min della colonna, prevede che ci siano 204 righe:&lt;br /&gt;&lt;pre&gt;SQL&gt; exec dbms_stats.gather_table_stats(user, 'CORREL', estimate_percent=&gt;100);&lt;br /&gt;&lt;br /&gt;PL/SQL procedure successfully completed.&lt;br /&gt;&lt;br /&gt;SQL&gt; explain plan for select * from correl where tag = 'TIPO2' and val = 1200;&lt;br /&gt;&lt;br /&gt;Explained.&lt;br /&gt;&lt;br /&gt;SQL&gt; select * from table(dbms_xplan.display);&lt;br /&gt;&lt;br /&gt;PLAN_TABLE_OUTPUT&lt;br /&gt;------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;Plan hash value: 469411154&lt;br /&gt;&lt;br /&gt;----------------------------------------------------------------------------&lt;br /&gt;| Id  | Operation         | Name   | Rows  | Bytes | Cost (%CPU)| Time     |&lt;br /&gt;----------------------------------------------------------------------------&lt;br /&gt;|   0 | SELECT STATEMENT  |        |   204 |  2040 |   141   (4)| 00:00:02 |&lt;br /&gt;|*  1 |  TABLE ACCESS FULL| CORREL |   204 |  2040 |   141   (4)| 00:00:02 |&lt;br /&gt;----------------------------------------------------------------------------&lt;br /&gt;&lt;br /&gt;Predicate Information (identified by operation id):&lt;br /&gt;---------------------------------------------------&lt;br /&gt;&lt;br /&gt;   1 - filter("VAL"=1200 AND "TAG"='TIPO2')&lt;br /&gt;&lt;br /&gt;13 rows selected.&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Ma ora prendiamo le statistiche utilizzando i gruppi di colonne:&lt;br /&gt;&lt;pre&gt;SQL&gt; exec dbms_stats.gather_table_stats(user, 'CORREL', method_opt =&gt; 'FOR COLUMNS (TAG,VAL) SIZE SKEWONLY', estimate_percent =&gt; 100);&lt;br /&gt;&lt;br /&gt;PL/SQL procedure successfully completed.&lt;br /&gt;&lt;br /&gt;SQL&gt; explain plan for select * from correl where tag = 'TIPO2' and val = 1201;&lt;br /&gt;&lt;br /&gt;Explained.&lt;br /&gt;&lt;br /&gt;SQL&gt; select * from table(dbms_xplan.display);&lt;br /&gt;&lt;br /&gt;PLAN_TABLE_OUTPUT&lt;br /&gt;------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;Plan hash value: 469411154&lt;br /&gt;&lt;br /&gt;----------------------------------------------------------------------------&lt;br /&gt;| Id  | Operation         | Name   | Rows  | Bytes | Cost (%CPU)| Time     |&lt;br /&gt;----------------------------------------------------------------------------&lt;br /&gt;|   0 | SELECT STATEMENT  |        |   611 |  6110 |   141   (4)| 00:00:02 |&lt;br /&gt;|*  1 |  TABLE ACCESS FULL| CORREL |   611 |  6110 |   141   (4)| 00:00:02 |&lt;br /&gt;----------------------------------------------------------------------------&lt;br /&gt;&lt;br /&gt;Predicate Information (identified by operation id):&lt;br /&gt;---------------------------------------------------&lt;br /&gt;&lt;br /&gt;   1 - filter("VAL"=1201 AND "TAG"='TIPO2')&lt;br /&gt;&lt;br /&gt;13 rows selected.&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;È evidente che ora le cose vanno molto meglio: la stima dell'optimizer è di 611 righe, anche se non esistono righe per cui il valore val è 1201.&lt;br /&gt;&lt;br /&gt;Ma il grande vantaggio è che ora la stima di circa 600 righe è valida per i numeri esistenti:&lt;br /&gt;&lt;pre&gt;SQL&gt; explain plan for select * from correl where tag = 'TIPO2' and val = 2023;&lt;br /&gt;&lt;br /&gt;Explained.&lt;br /&gt;&lt;br /&gt;SQL&gt; select * from table(dbms_xplan.display);&lt;br /&gt;&lt;br /&gt;PLAN_TABLE_OUTPUT&lt;br /&gt;------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;Plan hash value: 469411154&lt;br /&gt;&lt;br /&gt;----------------------------------------------------------------------------&lt;br /&gt;| Id  | Operation         | Name   | Rows  | Bytes | Cost (%CPU)| Time     |&lt;br /&gt;----------------------------------------------------------------------------&lt;br /&gt;|   0 | SELECT STATEMENT  |        |   611 |  6110 |   141   (4)| 00:00:02 |&lt;br /&gt;|*  1 |  TABLE ACCESS FULL| CORREL |   611 |  6110 |   141   (4)| 00:00:02 |&lt;br /&gt;----------------------------------------------------------------------------&lt;br /&gt;&lt;br /&gt;Predicate Information (identified by operation id):&lt;br /&gt;---------------------------------------------------&lt;br /&gt;&lt;br /&gt;   1 - filter("VAL"=2023 AND "TAG"='TIPO2')&lt;br /&gt;&lt;br /&gt;13 rows selected.&lt;br /&gt;&lt;br /&gt;SQL&gt; select count(*) from correl where tag = 'TIPO2' and val = 2023;&lt;br /&gt;&lt;br /&gt;  COUNT(*)&lt;br /&gt;----------&lt;br /&gt;       645&lt;br /&gt;&lt;br /&gt;1 row selected.&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Probabilmente con qualche intervento sull'istogramma del gruppo di colonne è possibile correggere anche la stima errata dovuta alla distribuzione molto disuniforme dei numeri nella colonna val.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11965249-5439721689939308142?l=rdbland.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rdbland.blogspot.com/feeds/5439721689939308142/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11965249&amp;postID=5439721689939308142' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/5439721689939308142'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/5439721689939308142'/><link rel='alternate' type='text/html' href='http://rdbland.blogspot.com/2009/09/colonne-correlate-in-11g.html' title='Colonne correlate in 11g'/><author><name>Rudy</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://my.opera.com/hillrudy/homes/albums/16833/IMG_2787.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11965249.post-4715778895642443947</id><published>2009-09-15T21:45:00.002+02:00</published><updated>2009-09-22T12:16:46.491+02:00</updated><title type='text'>Oracle Exadata versione 2</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_r0EgR7__Fw0/SrijiaMAzFI/AAAAAAAAH_Q/nTyh4v53OSs/s1600-h/exadata2.png"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 185px; height: 130px;" src="http://4.bp.blogspot.com/_r0EgR7__Fw0/SrijiaMAzFI/AAAAAAAAH_Q/nTyh4v53OSs/s320/exadata2.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5384233166062013522" /&gt;&lt;/a&gt;Ieri sera Larry Ellison in persona ha presentato la versione rinnovata della sua Database Machine, battezzata &lt;a href="http://www.oracle.com/database/database-machine.html"&gt;Oracle Exadata version 2&lt;/a&gt;. È molto interessante che l'hardware usato sia completamente Sun su Intel.&lt;br /&gt;&lt;br /&gt;Ho guardato la presentazione in diretta, ma più che una serie di elogi al prodotto e un elenco di fattori di performance (2x, 4x, 10x, 30x ecc.) affibbiato a ciascuno dei componenti, non ho sentito molti dettagli tecnici.&lt;br /&gt;La novità più rilevante è sicuramente la tecnologia FlashFire, in sostanza una cache intelligente a livello di storage server. I database server tengono in considerazione la presenza della cache al momento di elaborare il piano di esecuzione delle query.&lt;br /&gt;&lt;br /&gt;È stato detto più volte che Oracle Exadata versione 2 è la macchina più veloce mai costruita, sia come datawarehousing che (udite udite) per OLTP! Bisogna trovare qualcuno disposto a spendere un bel po' per portarsela a casa.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Aggiornamento 22-9&lt;/span&gt;: da oggi è disponibile il webcast &lt;a href="http://www.oracle.com/goto/newsletters/qtr/q1fy08/ondemand/orcl_edge_789.html"&gt;qui&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11965249-4715778895642443947?l=rdbland.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.oracle.com/database/database-machine.html' title='Oracle Exadata versione 2'/><link rel='replies' type='application/atom+xml' href='http://rdbland.blogspot.com/feeds/4715778895642443947/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11965249&amp;postID=4715778895642443947' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/4715778895642443947'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/4715778895642443947'/><link rel='alternate' type='text/html' href='http://rdbland.blogspot.com/2009/09/oracle-exadata-versione-2.html' title='Oracle Exadata versione 2'/><author><name>Rudy</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://my.opera.com/hillrudy/homes/albums/16833/IMG_2787.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_r0EgR7__Fw0/SrijiaMAzFI/AAAAAAAAH_Q/nTyh4v53OSs/s72-c/exadata2.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11965249.post-4255394241704718979</id><published>2009-09-09T21:44:00.000+02:00</published><updated>2009-09-10T09:00:29.872+02:00</updated><title type='text'>Alcune novità dell'optimizer 11g</title><content type='html'>In 11g ci sono diverse novità per quanto riguarda il cost-based optimizer:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Null-aware anti-join&lt;/span&gt;: interessante per me perché l'ho affrontato qualche giorno fa. Quando si ha una query del tipo:&lt;br /&gt;&lt;pre&gt;SELECT... FROM T1 WHERE T1.X NOT IN (SELECT T2.Y where...);&lt;/pre&gt;e T2.Y è una colonna che può assumere valori nulli, 10g e precedenti possono utilizzare un piano di esecuzione che porta a un eccesso di consistent gets (sostanzialmente CPU), e quindi a una query molto lenta. In 11g è invece possibile l'anti-join.&lt;br /&gt;Consiglio l'ottimo &lt;a href="http://structureddata.org/2008/05/22/null-aware-anti-join/"&gt;articolo di Greg Rahn&lt;/a&gt; per chi volesse approfondire l'argomento.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;span style="font-weight:bold;"&gt;Join Predicate Pushdown&lt;/span&gt;: quando c'è una join tra una tabella e una view, la condizione di join (esempio T.X = V.Y) viene computata direttamente con la tabella nella view che contiene la colonna: T.X = TV.Y. In questo modo si sfruttano eventuali indici presenti, anche con view che contengono group by, distinct e join&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;span style="font-weight:bold;"&gt;Spostamento del group by&lt;/span&gt;: nel caso di una join con group by, l'optimizer è in grado di spostare il group by e la funzione di gruppo all'interno di una view, che permette di ridurre le righe su cui fare la join.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;span style="font-weight:bold;"&gt;Eliminazione dei DISTINCT&lt;/span&gt;: l'optimizer analizza i vari blocchi di cui è formata una query, ed elimina i DISTINCT ove possibile.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Per molti versi sembra che tutte queste ottimizzazioni siano volte ad evitare rallentamenti dovuti ai più comuni errori di programmazione.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11965249-4255394241704718979?l=rdbland.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rdbland.blogspot.com/feeds/4255394241704718979/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11965249&amp;postID=4255394241704718979' title='1 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/4255394241704718979'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/4255394241704718979'/><link rel='alternate' type='text/html' href='http://rdbland.blogspot.com/2009/09/alcune-novita-delloptimizer-11g.html' title='Alcune novità dell&apos;optimizer 11g'/><author><name>Rudy</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://my.opera.com/hillrudy/homes/albums/16833/IMG_2787.JPG'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11965249.post-322352027194334878</id><published>2009-09-07T21:20:00.000+02:00</published><updated>2009-09-08T10:11:26.509+02:00</updated><title type='text'>Nuovi processi di background in 11g</title><content type='html'>Oracle 10g ci aveva abituato ad una proliferazione di processi di background, specialmente riguardo a RAC, ma 11g batte tutti e introduce tutta una serie di processi dedicati ai compiti più fantasiosi:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;b&gt;DBRM&lt;/b&gt; (database resource manager) imposta le risorse del Resource Manager&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;b&gt;DIA0&lt;/b&gt; (diagnosability process) risolve i deadlock e rileva i blocchi&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;b&gt;EMNC&lt;/b&gt; (event monitor coordinator) gestisce eventi e notifiche&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;b&gt;FBDA&lt;/b&gt; (flashback data archiver process) archivia i dati storici delle tabelle per cui viene attivato il flashbak archive e mantiene l'archivio&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;b&gt;GTX0-j&lt;/b&gt; (global transaction) permette le transazioni &lt;span style="font-style:italic;"&gt;globali&lt;/span&gt; distribuite (XA) in ambiente RAC. Attualmente le transazioni XA sono possibili solo su un unico nodo per client&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;b&gt;GMON&lt;/b&gt; gestisce i dischi nei diskgroup ASM&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;b&gt;KATE&lt;/b&gt; gestisce l'I/O di un disco ASM che è andato offline per qualche motivo&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;b&gt;MARK&lt;/b&gt; marca come invalide le unità di allocazione scritte su dischi ASM che sono andati offline&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;b&gt;SMCO&lt;/b&gt; (space management coordinator) gestisce l'allocazione e la deallocazione dello spazio su disco in maniera proattiva&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;b&gt;VKTM&lt;/b&gt; (virtual keeper of time) mantiene l'orologio di riferimento, che viene aggiornato ogni secondo&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Col tempo ci sarà occasione di approfondire i compiti dei nuovi processi.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11965249-322352027194334878?l=rdbland.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rdbland.blogspot.com/feeds/322352027194334878/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11965249&amp;postID=322352027194334878' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/322352027194334878'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/322352027194334878'/><link rel='alternate' type='text/html' href='http://rdbland.blogspot.com/2009/09/nuovi-processi-di-background-in-11g.html' title='Nuovi processi di background in 11g'/><author><name>Rudy</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://my.opera.com/hillrudy/homes/albums/16833/IMG_2787.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11965249.post-221306573889472171</id><published>2009-09-02T22:55:00.000+02:00</published><updated>2009-09-03T09:35:45.250+02:00</updated><title type='text'>Lancio di 11gR2 a Milano il 24: ci vediamo?</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_r0EgR7__Fw0/Sp9w1dJAI7I/AAAAAAAAH-w/duGxuJSJrFw/s1600-h/eblast_teaser.gif"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 88px; height: 349px;" src="http://3.bp.blogspot.com/_r0EgR7__Fw0/Sp9w1dJAI7I/AAAAAAAAH-w/duGxuJSJrFw/s400/eblast_teaser.gif" border="0" alt=""id="BLOGGER_PHOTO_ID_5377140543761425330" /&gt;&lt;/a&gt;Giovedì 24 settembre si terrà a Milano un &lt;a href="http://www.oracle.com/webapps/events/EventsDetail.jsp?p_eventId=94800&amp;src=6805597&amp;src=6805597&amp;Act=37"&gt;evento per il lancio di Oracle 11g release 2&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Io ci sarò; se qualcuno di voi ci sarà, potrebbe essere un'occasione per incontrarsi, fare conoscenza e scambiare qualche opinione.&lt;br /&gt;Lasciate i vostri messaggi nei commenti, così ci si trova più facilmente.&lt;br /&gt;&lt;br /&gt;Si preannunciano interessanti le discussioni aperte con i beta-tester dalle 11 alle 12 e le sessioni pomeridiane che ricapitolano le nuove feature.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11965249-221306573889472171?l=rdbland.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.oracle.com/webapps/events/EventsDetail.jsp?p_eventId=94800&amp;src=6805597&amp;src=6805597&amp;Act=37' title='Lancio di 11gR2 a Milano il 24: ci vediamo?'/><link rel='replies' type='application/atom+xml' href='http://rdbland.blogspot.com/feeds/221306573889472171/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11965249&amp;postID=221306573889472171' title='2 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/221306573889472171'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/221306573889472171'/><link rel='alternate' type='text/html' href='http://rdbland.blogspot.com/2009/09/lancio-di-11gr2-milano-il-24-ci-vediamo.html' title='Lancio di 11gR2 a Milano il 24: ci vediamo?'/><author><name>Rudy</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://my.opera.com/hillrudy/homes/albums/16833/IMG_2787.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_r0EgR7__Fw0/Sp9w1dJAI7I/AAAAAAAAH-w/duGxuJSJrFw/s72-c/eblast_teaser.gif' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11965249.post-5395971996473762124</id><published>2009-09-02T11:04:00.003+02:00</published><updated>2009-09-02T15:12:50.595+02:00</updated><title type='text'>11gR2 Generally Available</title><content type='html'>&lt;a href="http://www.oracle.com/us/corporate/press/032365"&gt;È uscita oggi la release 2 di Oracle 11g&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Se ha le stesse novità che aveva 10gR2 rispetto alla R1, si preannunciano interessanti prove e confronti.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Aggiornamento 15:09&lt;/span&gt;: I primi requirements per l'installazione si trovano nei documenti Metalink 880936.1 (32 bit) e 880989.1 (64 bit).&lt;br /&gt;&lt;br /&gt;Ora Clusterware è diventato &lt;span style="font-style:italic;"&gt;Grid Infrastructure&lt;/span&gt;? :-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11965249-5395971996473762124?l=rdbland.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.oracle.com/us/corporate/press/032365' title='11gR2 Generally Available'/><link rel='replies' type='application/atom+xml' href='http://rdbland.blogspot.com/feeds/5395971996473762124/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11965249&amp;postID=5395971996473762124' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/5395971996473762124'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/5395971996473762124'/><link rel='alternate' type='text/html' href='http://rdbland.blogspot.com/2009/09/11gr2-generally-available.html' title='11gR2 Generally Available'/><author><name>Rudy</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://my.opera.com/hillrudy/homes/albums/16833/IMG_2787.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11965249.post-3194668387430366506</id><published>2009-08-30T22:03:00.000+02:00</published><updated>2009-08-31T09:20:28.882+02:00</updated><title type='text'>Particolarità del mirror ASM</title><content type='html'>Recentemente ho voluto utilizzare ASM su un vecchio server single-instance con 8 dischi SCSI di vecchio tipo da 18 GB; tutto sommato il server se la cava, avendo 4 processori e 8 GB di RAM.&lt;br /&gt;Visto che il server non è di front-end, e nonostante fosse equipaggiato con un controller SCSI RAID, ho voluto ugualmente affidare ad ASM la gestione del mirror, confidando nella maggiore efficienza di ASM nel massimizzare le prestazioni con uno storage multidisco.&lt;br /&gt;&lt;br /&gt;In seguito alla configurazione in &lt;span style="font-style:italic;"&gt;normal redundancy&lt;/span&gt;, che consiste nella memorizzazione di due copie di ogni extent su due dischi diversi, rileggendo meglio il manuale mi sono accorto di un paio di piacevoli "effetti collaterali" del mirroring "intelligente" di ASM.&lt;br /&gt;Consideriamo ad esempio il caso di 8 dischi: se si rompe un disco ASM automaticamente copia tutti gli extent persi sugli altri dischi disponibili, partendo dalle copie degli extent presenti, ottenendo un array di 7 dischi che... è ancora in &lt;span style="font-style:italic;"&gt;normal redundancy&lt;/span&gt;! E la redundancy viene mantenuta fino a che c'è spazio disponibile sui dischi rimanenti per ospitare tutti gli extent necessari al database; virtualmente si potrebbe eliminare un disco alla volta, attendendo la risincronizzazione, fino ad avere solo due dischi e ancora mirroring; o anche un solo disco, senza più redundancy, ma con tutti i dati sempre disponibili.&lt;br /&gt;Come corollari deriviamo che, per prima cosa, è possibile costruire un array con mirroring semplice con un numero &lt;span style="font-weight:bold;"&gt;qualsiasi&lt;/span&gt; di dischi (maggiore di 1); secondo, perde significato il disco di "hot-spare", sostituito dallo spazio libero residuo su ogni disco.&lt;br /&gt;Decisamente molto più efficiente rispetto ai sistemi di storage normali.&lt;br /&gt;&lt;br /&gt;Casualmente, poi, i dischi che compongono l'array sono di capacità identica ma di diverse prestazioni. Ciò si riflette anche nelle misure di prestazioni fatte internamente da ASM.&lt;br /&gt;Nell'immagine seguente si può notare come ASM riesca a massimizzare le prestazioni utilizzando maggiormente i dischi più veloci, sia a causa della latenza che del throughput.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_r0EgR7__Fw0/Si4V_Wev--I/AAAAAAAAG98/C2Sfu5KhJ1c/s1600-h/dg_stats.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 119px;" src="http://1.bp.blogspot.com/_r0EgR7__Fw0/Si4V_Wev--I/AAAAAAAAG98/C2Sfu5KhJ1c/s400/dg_stats.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5345233985845853154" /&gt;&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11965249-3194668387430366506?l=rdbland.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rdbland.blogspot.com/feeds/3194668387430366506/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11965249&amp;postID=3194668387430366506' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/3194668387430366506'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/3194668387430366506'/><link rel='alternate' type='text/html' href='http://rdbland.blogspot.com/2009/08/particolarita-del-mirror-asm.html' title='Particolarità del mirror ASM'/><author><name>Rudy</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://my.opera.com/hillrudy/homes/albums/16833/IMG_2787.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_r0EgR7__Fw0/Si4V_Wev--I/AAAAAAAAG98/C2Sfu5KhJ1c/s72-c/dg_stats.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11965249.post-7828860879676633739</id><published>2009-08-26T22:02:00.000+02:00</published><updated>2009-08-27T08:58:14.425+02:00</updated><title type='text'>Estate, mare e Oracle</title><content type='html'>La parte più "vivace" dell'estate è ormai alle spalle, ma concediamoci qualche altro momento di svago con un &lt;a href="http://www.youtube.com/watch?v=dYgtwKY6Xgs"&gt;video HD di BMW Oracle Racing Technology&lt;/a&gt;. Altrimenti si diverte solo &lt;a href="http://www.youtube.com/watch?v=FnF8Hy7mGYI"&gt;Larry&lt;/a&gt; con questi "giocattoli".&lt;br /&gt;Chissà se tutti quei dati raccolti, di cui si parla nel video, vengono immagazzinati in un database Oracle, e chissà dove si trova :-)&lt;br /&gt;&lt;br /&gt;A presto per i nuovi post!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11965249-7828860879676633739?l=rdbland.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.youtube.com/watch?v=dYgtwKY6Xgs' title='Estate, mare e Oracle'/><link rel='replies' type='application/atom+xml' href='http://rdbland.blogspot.com/feeds/7828860879676633739/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11965249&amp;postID=7828860879676633739' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/7828860879676633739'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/7828860879676633739'/><link rel='alternate' type='text/html' href='http://rdbland.blogspot.com/2009/08/estate-mare-e-oracle.html' title='Estate, mare e Oracle'/><author><name>Rudy</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://my.opera.com/hillrudy/homes/albums/16833/IMG_2787.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11965249.post-230694651840913349</id><published>2009-06-24T22:52:00.000+02:00</published><updated>2009-06-25T10:48:06.109+02:00</updated><title type='text'>Le novità di ASM in 11g</title><content type='html'>La versione 11g di ASM include alcuni miglioramenti interessanti.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Comando CP&lt;/span&gt;: finalmente è possibile copiare i file da e verso lo storage ASM, come del resto qualsiasi processo server di Oracle può fare da sempre. La differenza è che si usa il comando CP da linea di comando ASDCMD o da linea di comando della shell come parametro di ASMCMD.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Fast Mirror Resync&lt;/span&gt;: in seguito a temporanee indisponibilità di un disco ASM contenente copie di dati mirrorati, la risincronizzazione avviene tenendo conto dei dati già presenti sul disco, evitando quindi la ricostruzione completa del mirror. ASM in pratica tiene traccia degli extent da aggiornare e al resync copia solamente quelli. È stato introdotto il parametro DISK_REPAIR_TIME, che definisce un periodo trascorso il quale il disco non disponibile viene ricostruito per intero.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Extent di dimensioni variabili&lt;/span&gt;: con 11g è possibile definire la dimensione degli extent, ovvero le unità di allocazione con cui viene riservato lo spazio per i file nello storage ASM. Nelle versioni precedenti questa dimensione era fissa e pari a 1 MB per i file "normali" e 128 KB per i file ad alto I/O rate. I 128 KB rimangono anche in 11g. Una conseguenza immediata è che aumenta ancora la quantità totale di dati che si possono immagazzinare nel database, potendo disporre di datafile più grandi.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11965249-230694651840913349?l=rdbland.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rdbland.blogspot.com/feeds/230694651840913349/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11965249&amp;postID=230694651840913349' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/230694651840913349'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/230694651840913349'/><link rel='alternate' type='text/html' href='http://rdbland.blogspot.com/2009/06/le-novita-di-asm-in-11g.html' title='Le novità di ASM in 11g'/><author><name>Rudy</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://my.opera.com/hillrudy/homes/albums/16833/IMG_2787.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11965249.post-5631422417404278724</id><published>2009-06-07T21:09:00.000+02:00</published><updated>2009-06-08T10:59:47.402+02:00</updated><title type='text'>Hugepages in RHEL5</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_r0EgR7__Fw0/Sh0wrX7Iq2I/AAAAAAAAG2k/BRmljzE_Apc/s1600-h/sd_ram.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 200px; height: 200px;" src="http://1.bp.blogspot.com/_r0EgR7__Fw0/Sh0wrX7Iq2I/AAAAAAAAG2k/BRmljzE_Apc/s200/sd_ram.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5340478254845832034" /&gt;&lt;/a&gt;Abbiamo visto, in un post precedente, come sia possibile per Oracle allocare una buffer cache molto grande, fino a 62 GB, su un sistema Linux a 32 bit.&lt;br /&gt;&lt;br /&gt;La buffer cache viene sostanzialmente allocata come un file su un filesystem di tipo ramfs, e l'accesso ai blocchi in memoria avviene in maniera indiretta.&lt;br /&gt;&lt;br /&gt;Facciamo un passo indietro. La memoria nei sistemi a memoria virtuale (ad esempio Linux) viene allocata tramite pagine di 4 KB mappate sulla memoria fisica da una tabella di lookup locale che referenzia una tabella di lookup di sistema, la quale punta finalmente alla memoria fisica.&lt;br /&gt;&lt;br /&gt;Le hugepage sono pagine di dimensione molto maggiore di quella standard. Nel caso di RHEL5 ho verificato una dimensione di 2 MB (almeno 500 volte la dimensione standard):&lt;pre&gt;$ grep Huge /proc/meminfo &lt;br /&gt;HugePages_Total:   821&lt;br /&gt;HugePages_Free:    558&lt;br /&gt;HugePages_Rsvd:    555&lt;br /&gt;Hugepagesize:     2048 kB&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Le hugepage vengono allocate al boot tramite un parametro del kernel, in modo da riservare un numero di porzioni contigue di RAM sifficienti ad allocare la quantità di hugepage richieste, altrimenti la RAM viene allocata in pagine da 4 KB (il default). Inoltre le hugepage non sono swappabili; in linguaggio Oracle si potrebbero considerare &lt;span style="font-style:italic;"&gt;pinned&lt;/span&gt;.&lt;br /&gt;In generale quindi, per allocare quantitativi di RAM molto grandi e mantenere le tabelle di lookup a dimensioni accettabili, si possono usare le hugepage.&lt;br /&gt;&lt;br /&gt;La relazione tra ramfs e hugepage è che &lt;span style="font-weight:bold;"&gt;le pagine allocate su ramfs sono appunto hugepage&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Se avete provato, come ho fatto io, a usare ramfs per la buffer cache, vi sarete accorti che solo la buffer cache va a finire su ramfs, mentre la shared pool finisce nella classica shared memory. Per controllare l'allocazione della shared memory basta utilizzare &lt;span style="font-weight:bold;"&gt;ipcs&lt;/span&gt;:&lt;pre&gt;$ ipcs -m&lt;br /&gt;&lt;br /&gt;------ Shared Memory Segments --------&lt;br /&gt;key        shmid      owner      perms      bytes      nattch     status      &lt;br /&gt;0xb0af65c0 1081347    oracle    600        85983232   11                      &lt;br /&gt;0xb6c83f68 1114116    oracle    600        1629487104 26                      &lt;br /&gt;0x00000000 1146885    oracle    640        4096       0&lt;/pre&gt;&lt;br /&gt;Come si può vedere l'utente oracle ha allocato 2 segmenti "grandi" di shared memory: la seconda è la shared pool, impostata a 1504 MB, mentre l'altra è la SGA dell'istanza ASM che gestisce i dischi sulla stessa macchina, mentre non compare la buffer cache.&lt;br /&gt;Le 821 hugepage da 2 MB sul mio sistema di esempio servono ad ospitare la shared pool e la SGA dell'istanza ASM come viene riportato da ipcs.&lt;br /&gt;&lt;br /&gt;Le hugepage non sono utili solo nei sistemi a 32 bit. Vedremo le applicazioni nel prossimo post.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11965249-5631422417404278724?l=rdbland.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rdbland.blogspot.com/feeds/5631422417404278724/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11965249&amp;postID=5631422417404278724' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/5631422417404278724'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/5631422417404278724'/><link rel='alternate' type='text/html' href='http://rdbland.blogspot.com/2009/06/hugepages-in-rhel5.html' title='Hugepages in RHEL5'/><author><name>Rudy</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://my.opera.com/hillrudy/homes/albums/16833/IMG_2787.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_r0EgR7__Fw0/Sh0wrX7Iq2I/AAAAAAAAG2k/BRmljzE_Apc/s72-c/sd_ram.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11965249.post-3620096520093484407</id><published>2009-05-26T23:10:00.000+02:00</published><updated>2009-05-27T14:43:35.067+02:00</updated><title type='text'>Very Large Memory su RHEL5</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_r0EgR7__Fw0/Sh0wrX7Iq2I/AAAAAAAAG2k/BRmljzE_Apc/s1600-h/sd_ram.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 200px; height: 200px;" src="http://1.bp.blogspot.com/_r0EgR7__Fw0/Sh0wrX7Iq2I/AAAAAAAAG2k/BRmljzE_Apc/s200/sd_ram.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5340478254845832034" /&gt;&lt;/a&gt;Ovvero: &lt;span style="font-style:italic;"&gt;come fregare il kernel Linux a 32 bit e fare indirizzare a Oracle più di 4 GB di RAM&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Ho appena finito di configurare un antico sistema con processori Intel del 2001, irrimediabilmente limitati a 32 bit e di conseguenza a indirizzare non più di 4 GB di RAM.&lt;br /&gt;Se poi si conta che il kernel Linux si riserva 1 GB di RAM per gli affari propri, in tutto rimane solo circa 1.7 GB di RAM per la SGA (2.7 GB con i kernel "enterprise" e 10gR2 senza relink particolari). Con i kernel "enterprise" di Red Hat, invece, detti &lt;span style="font-style:italic;"&gt;hugemem&lt;/span&gt; kernel, è possibile indirizzare 4 GB &lt;span style="font-style:italic;"&gt;per processo&lt;/span&gt; e in totale fino a 64 GB di RAM (!).&lt;br /&gt;&lt;br /&gt;Ma se, parafrasando Doc di "Ritorno al Futuro", riuscissimo a installare 8 GB di RAM sul nostro server, potremmo poi utilizzarli effettivamente con Oracle? La risposta è &lt;span style="font-weight:bold;"&gt;sì&lt;/span&gt;, tramite l'utilizzo del supporto per la &lt;span style="font-weight:bold;"&gt;Very Large Memory&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Il trucco principale è l'utilizzo di un filesystem per la buffer cache di Oracle (attenzione: non la SGA globalmente, solo la parte a blocchi). Il filesystem è &lt;span style="font-weight:bold;"&gt;/dev/shm&lt;/span&gt;, che è montabile tramite i tipi di filesystem shmfs e tmpfs, oppure  col più recente &lt;span style="font-weight:bold;"&gt;ramfs&lt;/span&gt;; la differenza con i primi due tipi è che, mentre per il primo bisogna specificare le dimensioni e per il secondo no, l'ultimo tipo non è swappabile. Fate un &lt;tt&gt;df&lt;/tt&gt; dalla vostra console Linux e probabilmente vedrete montato un filesystem dei tipi che ho appena elencato.&lt;br /&gt;&lt;br /&gt;L'istanza Oracle accede a /dev/shm mediante il parametro &lt;tt&gt;use_indirect_data_buffers=true&lt;/tt&gt; allocando alla partenza un file delle dimensioni della buffer cache. Molto importante è notare che, in questo caso, non è più possibile utilizzare l'allocazione automatica delle componenti della SGA e nemmeno cache a blocchi di dimensioni differenti dallo standard predefinito per il database (solitamente 8 KB), quindi bisogna per forza usare il vecchio parametro &lt;tt&gt;db_block_buffers&lt;/tt&gt; e rinunciare ad alcune delle caratteristiche importanti di 9i e 10g.&lt;br /&gt;Ecco un esempio con una buffer cache di 2500 MB:&lt;pre&gt;$ ls -l /dev/shm/&lt;br /&gt;total 2560000&lt;br /&gt;-rw-r----- 1 oracle dba 2621440000 May 25 04:56 ora_BIGGIE_1146885&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Legato a questa feature è l'utilizzo delle &lt;span style="font-style:italic;"&gt;hugepage&lt;/span&gt;, su cui sto ancora indagando e di cui mi occuperò nei prossimi post.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11965249-3620096520093484407?l=rdbland.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rdbland.blogspot.com/feeds/3620096520093484407/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11965249&amp;postID=3620096520093484407' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/3620096520093484407'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/3620096520093484407'/><link rel='alternate' type='text/html' href='http://rdbland.blogspot.com/2009/05/very-large-memory-su-rhel5.html' title='Very Large Memory su RHEL5'/><author><name>Rudy</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://my.opera.com/hillrudy/homes/albums/16833/IMG_2787.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_r0EgR7__Fw0/Sh0wrX7Iq2I/AAAAAAAAG2k/BRmljzE_Apc/s72-c/sd_ram.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11965249.post-8796721728504926232</id><published>2009-05-18T23:03:00.000+02:00</published><updated>2009-05-19T16:05:58.244+02:00</updated><title type='text'>L'acquisizione di MySQL vista da Widenius</title><content type='html'>Michael "Monty" Widenius, il principale autore di MySQL, ci illustra con un &lt;a href="http://monty-says.blogspot.com/2009/04/to-be-free-or-not-to-be-free.html"&gt;post del suo blog&lt;/a&gt; la sua opinione a proposito dell'acquisto di Sun da parte di Oracle, evidenziandone le motivazioni ed elencando le possibili decisioni di Oracle sul futuro di MySQL.&lt;br /&gt;La sua preoccupazione maggiore ora è di mantenere MySQL libero, prevedendo che Oracle difficilmente riuscirà a trattenere i migliori sviluppatori MySQL rimasti dopo l'acquisizione. Widenius cerca ora di riunire sotto un unico consorzio, chiamato &lt;a href="http://opendatabasealliance.com/"&gt;Open Database Alliance&lt;/a&gt;, tutte le aziende piccole che hanno anche fare con MySQL e che rimangono nell'ambito open-source.&lt;br /&gt;&lt;br /&gt;A mio parere Widenius sottovaluta l'esperienza di Oracle nell'open-source: basti pensare anche solo a OCFS2, Enterprise Linux, btrfs. Bisognerà comunque attendere le prossime mosse di Oracle.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11965249-8796721728504926232?l=rdbland.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://monty-says.blogspot.com/2009/04/to-be-free-or-not-to-be-free.html' title='L&apos;acquisizione di MySQL vista da Widenius'/><link rel='replies' type='application/atom+xml' href='http://rdbland.blogspot.com/feeds/8796721728504926232/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11965249&amp;postID=8796721728504926232' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/8796721728504926232'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/8796721728504926232'/><link rel='alternate' type='text/html' href='http://rdbland.blogspot.com/2009/05/lacquisizione-di-mysql-vista-da.html' title='L&apos;acquisizione di MySQL vista da Widenius'/><author><name>Rudy</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://my.opera.com/hillrudy/homes/albums/16833/IMG_2787.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11965249.post-1448000982682229552</id><published>2009-05-10T23:02:00.000+02:00</published><updated>2009-05-11T09:36:36.918+02:00</updated><title type='text'>ZFS: ancora novità a manetta</title><content type='html'>Lo sviluppo di ZFS continua a sorprendermi: basta attendere qualche mese ed escono delle novità che si potrebbero definire stupefacenti per qualcosa che è "solo" un filesystem.&lt;br /&gt;In ambiente Solaris le novità tecnologiche si possono provare solo in OpenSolaris, che è la versione free ma anche più avanzata di Solaris.&lt;br /&gt;&lt;br /&gt;Ecco le ultime novità su ZFS:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Snapshot automatici: necessari in realtà per la feature di &lt;span style="font-style: italic;"&gt;time-slider&lt;/span&gt; di OpenSolaris.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Cache devices&lt;/span&gt;: è possibile introdurre un ulteriore livello di cache a disco aggiungendo ai pool dei device che hanno la sola funzione di contenere dati perlopiù a sola lettura. Ciò può aumentare le prestazioni per sistemi a lettura casuale. È interessante che il filesystem stesso decide quali blocchi devono stare in cache e quali no; ZFS ha sicuramente una maggiore cognizione di causa sulla natura dei dati in transito rispetto alla cache del controller. Potenzialmente vengono divise le attività di sola lettura da quelle di scrittura; ciò potrebbe eliminare una eventuale contesa di risorse (le meccaniche dei dischi) in due operazioni molto diverse tra loro, costituendo un enorme vantaggio per molti ambienti.&lt;br /&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Log del filesystem (ZIL) su device separati&lt;/span&gt;: l'&lt;span style="font-style: italic;"&gt;intent log&lt;/span&gt; di ZFS può essere allocato su device diversi dai dischi che compongono lo storage pool. Per i database è interessante poiché si possono usare dei device molto veloci e di capacità (e costo) limitata per la scrittura sincrona dei dati, tipicamente le chiamate sync() durante la scrittura dei redo log. Questa non è propriamente una novità di per se, ma non ne ho mai fatto menzione.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;L'elenco esteso di tutte le novità è reperibile nella &lt;a href="http://docs.sun.com/app/docs/doc/817-2271/gbscy?l=en&amp;amp;a=view"&gt;pagina&lt;/a&gt; apposita del manuale.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11965249-1448000982682229552?l=rdbland.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rdbland.blogspot.com/feeds/1448000982682229552/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11965249&amp;postID=1448000982682229552' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/1448000982682229552'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/1448000982682229552'/><link rel='alternate' type='text/html' href='http://rdbland.blogspot.com/2009/05/zfs-ancora-novita-manetta.html' title='ZFS: ancora novità a manetta'/><author><name>Rudy</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://my.opera.com/hillrudy/homes/albums/16833/IMG_2787.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11965249.post-1022293963942586062</id><published>2009-05-07T13:51:00.000+02:00</published><updated>2009-05-07T15:27:52.651+02:00</updated><title type='text'>Ora come resistere al Mac?</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_r0EgR7__Fw0/SgFTDMCztxI/AAAAAAAAG2E/0UofKhhqxm8/s1600-h/imac-24in.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 200px; height: 187px;" src="http://3.bp.blogspot.com/_r0EgR7__Fw0/SgFTDMCztxI/AAAAAAAAG2E/0UofKhhqxm8/s200/imac-24in.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5332634748021094162" /&gt;&lt;/a&gt;Da ieri è possibile scaricare dal sito Oracle la &lt;a href="http://www.oracle.com/technology/software/products/database/oracle10g/htdocs/10204macsoft_x86-64.html"&gt;versione Mac OS X a 64 bit di Oracle 10.2.0.4&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Non so più quale scusa inventarmi per non comprare un Mac nuovo.&lt;br /&gt;&lt;br /&gt;A questo punto è probabile che, in futuro, venga rilasciata anche la versione Mac di 11g.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11965249-1022293963942586062?l=rdbland.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.oracle.com/technology/software/products/database/oracle10g/htdocs/10204macsoft_x86-64.html' title='Ora come resistere al Mac?'/><link rel='replies' type='application/atom+xml' href='http://rdbland.blogspot.com/feeds/1022293963942586062/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11965249&amp;postID=1022293963942586062' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/1022293963942586062'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/1022293963942586062'/><link rel='alternate' type='text/html' href='http://rdbland.blogspot.com/2009/05/ora-come-resistere-al-mac.html' title='Ora come resistere al Mac?'/><author><name>Rudy</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://my.opera.com/hillrudy/homes/albums/16833/IMG_2787.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_r0EgR7__Fw0/SgFTDMCztxI/AAAAAAAAG2E/0UofKhhqxm8/s72-c/imac-24in.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11965249.post-2927652144532455409</id><published>2009-05-03T21:19:00.001+02:00</published><updated>2009-05-05T11:00:10.675+02:00</updated><title type='text'>Split-mirror istantaneo con ZFS</title><content type='html'>Lo scorso ottobre avevo scritto un post sul &lt;a href="http://rdbland.blogspot.com/2008/10/backup-istantaneo-con-oracle-e-zfs.html"&gt;backup istantaneo con ZFS&lt;/a&gt;.&lt;br /&gt;Riprendo quel discorso per estenderlo con le funzionalità aggiuntive fornite da RMAN: tramite RMAN è infatti possibile registrare la copia di backup del datafile, facendola entrare nel catalogo e quindi averla disponibile per qualsiasi tipo di recovery.&lt;br /&gt;&lt;pre&gt;RMAN&gt; SQL 'ALTER TABLESPACE USERS BEGIN BACKUP';&lt;br /&gt;&lt;br /&gt;$ sudo zfs snapshot u02/oradata@mysnap&lt;/pre&gt;&lt;br /&gt;Dopo avere effettuato lo snapshot, cataloghiamo la copia del datafile:&lt;br /&gt;&lt;pre&gt;RMAN&gt; SQL 'ALTER TABLESPACE USERS END BACKUP';&lt;br /&gt;&lt;br /&gt;RMAN&gt; CATALOG DATAFILECOPY '/u02/oradata/.zfs/snapshot/mysnap/MICKEY/users01.dbf';&lt;/pre&gt;&lt;br /&gt;A questo punto abbiamo una copia &lt;span style="font-style:italic;"&gt;recoverable&lt;/span&gt; del tablespace in un determinato istante; se vogliamo quindi effettuare modifiche importanti sui dati contenuti in quel tablespace, possiamo considerare lo snapshot praticamente un backup logico, utile nel caso di errore umano. In questo caso i dati in esso contenuti sono recuperabili mediante &lt;span style="font-style:italic;"&gt;point-in-time recovery&lt;/span&gt; (con EE).&lt;br /&gt;Per il resto, invece, lo snapshot è una copia di backup.&lt;br /&gt;&lt;pre&gt;RMAN&gt; list copy of tablespace users;&lt;br /&gt;&lt;br /&gt;using target database control file instead of recovery catalog&lt;br /&gt;&lt;br /&gt;List of Datafile Copies&lt;br /&gt;Key     File S Completion Time Ckp SCN    Ckp Time        Name&lt;br /&gt;------- ---- - --------------- ---------- --------------- ----&lt;br /&gt;1       4    A 31-MAR-09       403343     31-MAR-09       /u02/oradata/.zfs/snapshot/mysnap/MICKEY/users01.dbf&lt;/pre&gt;&lt;br /&gt;Mettiamo offline il tablespace:&lt;br /&gt;&lt;pre&gt;SQL&gt; alter tablespace users offline normal;&lt;/pre&gt;&lt;br /&gt;Da RMAN facciamo il restore usando lo split-mirror:&lt;br /&gt;&lt;pre&gt;RMAN&gt; restore tablespace users;&lt;br /&gt;&lt;br /&gt;Starting restore at 01-MAY-09&lt;br /&gt;allocated channel: ORA_DISK_1&lt;br /&gt;channel ORA_DISK_1: sid=202 devtype=DISK&lt;br /&gt;&lt;br /&gt;channel ORA_DISK_1: restoring datafile 00004&lt;br /&gt;input datafile copy recid=1 stamp=682952952 filename=/u02/oradata/.zfs/snapshot/mysnap/MICKEY/users01.dbf&lt;br /&gt;destination for restore of datafile 00004: /u02/oradata/MICKEY/users01.dbf&lt;br /&gt;channel ORA_DISK_1: copied datafile copy of datafile 00004&lt;br /&gt;output filename=/u02/oradata/MICKEY/users01.dbf recid=2 stamp=685963392&lt;br /&gt;Finished restore at 01-MAY-09&lt;br /&gt;&lt;br /&gt;SQL&gt; alter tablespace users online;&lt;br /&gt;alter tablespace users online&lt;br /&gt;*&lt;br /&gt;ERROR at line 1:&lt;br /&gt;ORA-01113: file 4 needs media recovery&lt;br /&gt;ORA-01110: data file 4: '/u02/oradata/MICKEY/users01.dbf'&lt;br /&gt;&lt;br /&gt;SQL&gt; recover tablespace users;&lt;br /&gt;Media recovery complete.&lt;br /&gt;SQL&gt; alter tablespace users online;&lt;br /&gt;&lt;br /&gt;Tablespace altered.&lt;/pre&gt;&lt;br /&gt;In seguito, quando non ci servirà più il mirror, lo rimuoviamo dal catalogo e cancelliamo lo snapshot ZFS:&lt;br /&gt;&lt;pre&gt;RMAN&gt; CHANGE DATAFILECOPY '/u02/oradata/.zfs/snapshot/mysnap/MICKEY/users01.dbf' UNCATALOG;&lt;br /&gt;&lt;br /&gt;$ sudo zfs destroy u02/oradata@mysnap&lt;/pre&gt;&lt;br /&gt;Questo discorso può essere esteso a tutto il database con &lt;tt&gt;alter database begin backup&lt;/tt&gt; (10g). Il backup (o meglio lo snapshot) di database molto grandi diventa quindi un'operazione di pochi secondi, salvo poi copiare le copie dei datafile su altri supporti per altri utilizzi.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11965249-2927652144532455409?l=rdbland.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rdbland.blogspot.com/feeds/2927652144532455409/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11965249&amp;postID=2927652144532455409' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/2927652144532455409'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/2927652144532455409'/><link rel='alternate' type='text/html' href='http://rdbland.blogspot.com/2009/05/split-mirror-istantaneo-con-zfs.html' title='Split-mirror istantaneo con ZFS'/><author><name>Rudy</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://my.opera.com/hillrudy/homes/albums/16833/IMG_2787.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11965249.post-5395174617500224560</id><published>2009-04-28T22:51:00.000+02:00</published><updated>2009-04-29T14:57:24.517+02:00</updated><title type='text'>Sun difende Solaris rispetto a Linux</title><content type='html'>Segnalo un interessante &lt;a href="http://www.sun.com/offers/docs/solaris_10_advantage.pdf"&gt;whitepaper di Crimson consulting group&lt;/a&gt;, dove viene presentato un confronto di esperienze tra utenti enterprise sia di Solaris 10 che di Red Hat Linux, che abbiano numeri "importanti" in termini di fatturato e di parco macchine. Il paragone stato fatto solo su piattaforma x86, dove RHEL è maggiormente affermata.&lt;br /&gt;&lt;br /&gt;Gli analisti affermano che Solaris batte Red Hat Linux su costi di acquisizione, supporto, amministrazione, mentre è uguale nei costi di implementazione (installazione).&lt;br /&gt;Essi cercano di dimostrare che, sebbene i costi iniziali sembrino a favore di Linux, a lungo termine ciò perde importanza e non è più vero: alla lunga i costi di RHEL, oltre che a essere più elevati, aumentano anche più rapidamente.&lt;br /&gt;&lt;br /&gt;Viene menzionata la necessità di acquistare software aggiuntivo come VMware (opposto ai Containers di Solaris), Veritas (invece di ZFS), supporto per fiberchannel. Viene affermato che il costo del supporto, anche per software terzi, è decisamente maggiore per RHEL. Anche il numero di persone specializzate (sysadmin) viene considerato, come anche la differente difficoltà di amministrazione a livello di singolo server.&lt;br /&gt;Un aspetto interessante è la compatibilità binaria tra differenti release dei sistemi operativi, che è garantita per Solaris. Solaris è inoltre meglio integrato con Java (per evidenti motivi).&lt;br /&gt;&lt;br /&gt;Non ho elementi solidi a sostegno delle tesi presentate nella whitepaper, che comunque è una buona lettura per informarsi maggiormente, anche se a mio parere è leggermente di parte.&lt;br /&gt;In più la diffusione di questa pubblicazione, che segue di poche ore l'annuncio dell'acquisizione di Sun da parte di Oracle, sembra un tentativo dell'ultimo momento per tentare di affermare le proprie ragioni e tutelare il proprio patrimonio tecnologico, in vista di probabili interventi sui sistemi operativi da parte di Oracle.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11965249-5395174617500224560?l=rdbland.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.sun.com/offers/docs/solaris_10_advantage.pdf' title='Sun difende Solaris rispetto a Linux'/><link rel='replies' type='application/atom+xml' href='http://rdbland.blogspot.com/feeds/5395174617500224560/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11965249&amp;postID=5395174617500224560' title='2 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/5395174617500224560'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/5395174617500224560'/><link rel='alternate' type='text/html' href='http://rdbland.blogspot.com/2009/04/sun-difende-solaris-rispetto-linux.html' title='Sun difende Solaris rispetto a Linux'/><author><name>Rudy</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://my.opera.com/hillrudy/homes/albums/16833/IMG_2787.JPG'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11965249.post-2270422541204487260</id><published>2009-04-20T13:58:00.003+02:00</published><updated>2009-04-20T14:50:54.798+02:00</updated><title type='text'>Oracle acquisisce Sun</title><content type='html'>Oracle ha raggiunto un accordo per l'acquisizione di Sun.&lt;br /&gt;&lt;br /&gt;Sui rispettivi siti (&lt;a href="http://www.oracle.com/sun/index.html"&gt;Oracle&lt;/a&gt; e &lt;a href="http://www.sun.com/third-party/global/oracle/index.jsp"&gt;Sun&lt;/a&gt;) ci sono le notizie.&lt;br /&gt;&lt;br /&gt;Continuerà lo sviluppo di ZFS?&lt;br /&gt;Alla fine anche la parte residua di MySQL viene acquisita da Oracle.&lt;br /&gt;&lt;br /&gt;Oracle ha ora la possibilità di fornire uno stack tecnologico completo, dall'applicazione al disco.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11965249-2270422541204487260?l=rdbland.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.oracle.com/sun/index.html' title='Oracle acquisisce Sun'/><link rel='replies' type='application/atom+xml' href='http://rdbland.blogspot.com/feeds/2270422541204487260/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11965249&amp;postID=2270422541204487260' title='3 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/2270422541204487260'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/2270422541204487260'/><link rel='alternate' type='text/html' href='http://rdbland.blogspot.com/2009/04/oracle-acquisisce-sun.html' title='Oracle acquisisce Sun'/><author><name>Rudy</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://my.opera.com/hillrudy/homes/albums/16833/IMG_2787.JPG'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11965249.post-6276834756565667465</id><published>2009-04-01T22:42:00.000+02:00</published><updated>2009-04-02T12:34:33.712+02:00</updated><title type='text'>Prova delle novità in OpenSolaris 200811</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_r0EgR7__Fw0/SdSUTvs7rOI/AAAAAAAAG18/0NJAw0RGV5U/s1600-h/Sun_opensolaris_logo.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 170px; height: 67px;" src="http://4.bp.blogspot.com/_r0EgR7__Fw0/SdSUTvs7rOI/AAAAAAAAG18/0NJAw0RGV5U/s200/Sun_opensolaris_logo.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5320040126774750434" /&gt;&lt;/a&gt;Con le &lt;a href="http://www.opensolaris.com/learn/features/whats-new/200811/"&gt;novità&lt;/a&gt; di OpenSolaris 10 200811 le possibilità di gestione dei database Oracle (e non) si moltiplicano e si aprono nuovi scenari di utilizzo.&lt;br /&gt;&lt;br /&gt;La novità più divertente è il &lt;a href="http://blogs.sun.com/erwann/date/20081013"&gt;Time Slider&lt;/a&gt;, che può apparire come un gadget invero molto utile ma per PC desktop e notebook, invece si rivela interessantissimo per i DBA, come vedremo presto con la prova con Oracle.&lt;br /&gt;&lt;br /&gt;Ora il desktop di Solaris 10 deve sembrare molto simile a quello che avevano in mente alla Apple prima dell'introduzione di Time Machine. Visto che era in previsione l'adozione di ZFS come filesystem universale, cosa che poi non si è verificata, è intuibile che Time Machine sia stato lo sviluppo naturale di un sistema di &lt;span style="font-style:italic;"&gt;versioning&lt;/span&gt; per i file che sostituisse le immense potenzialità di ZFS, senza però adottarne la tecnologia. I limiti derivanti da questa scelta sono del tutto accettabili per l'utente desktop, ma non per l'utente enterprise.&lt;br /&gt;&lt;br /&gt;Time Slider si può impostare tramite il menù System-Administration:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_r0EgR7__Fw0/Scyde3X37OI/AAAAAAAAGyw/QWEMkfMTwoc/s1600-h/tssetup.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 331px; height: 400px;" src="http://1.bp.blogspot.com/_r0EgR7__Fw0/Scyde3X37OI/AAAAAAAAGyw/QWEMkfMTwoc/s400/tssetup.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5317798413603433698" /&gt;&lt;/a&gt;&lt;br /&gt;dove si può decidere di quali filesystem (alla ZFS) vengono fatti gli snapshot.&lt;br /&gt;Una volta scelto il default (tutti) il risultato è che viene impostato un attributo del filesystem per l'auto-snapshot:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_r0EgR7__Fw0/ScyeEdOAIWI/AAAAAAAAGy4/lB84J5JHd2U/s1600-h/zfs_get.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 283px;" src="http://4.bp.blogspot.com/_r0EgR7__Fw0/ScyeEdOAIWI/AAAAAAAAGy4/lB84J5JHd2U/s400/zfs_get.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5317799059417735522" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Una novità ulteriore è lo sviluppo di soluzioni integrate per lo storage di rete SAN e NAS, raggruppate sotto il nome di &lt;a href="http://www.opensolaris.org/os/project/comstar/"&gt;COMSTAR&lt;/a&gt;. Tramite un server Solaris Express o Opensolaris e COMSTAR è possibile costruire una SAN a basso costo (per ora solo Fiberchannel), utilizzando ZFS come storage.&lt;br /&gt;Per maggiorni informazioni su COMSTAR è meglio leggere direttamente il &lt;a href="http://dlc.sun.com/osol/docs/content/2008.11/COMSTARADMIN/ggrem.html"&gt;manuale&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Sembra che Sun "sponsorizzi" la ricerca su nuove soluzioni a basso costo tramite la comunità &lt;a href="http://www.opensolaris.com/200811/openstorage/"&gt;Open Storage&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;A breve le prove con Oracle e Time Slider: &lt;span style="font-style:italic;"&gt;stay tuned&lt;/span&gt;!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11965249-6276834756565667465?l=rdbland.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.opensolaris.com/learn/features/whats-new/200811/' title='Prova delle novità in OpenSolaris 200811'/><link rel='replies' type='application/atom+xml' href='http://rdbland.blogspot.com/feeds/6276834756565667465/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11965249&amp;postID=6276834756565667465' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/6276834756565667465'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/6276834756565667465'/><link rel='alternate' type='text/html' href='http://rdbland.blogspot.com/2009/04/prova-delle-novita-in-opensolaris.html' title='Prova delle novità in OpenSolaris 200811'/><author><name>Rudy</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://my.opera.com/hillrudy/homes/albums/16833/IMG_2787.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_r0EgR7__Fw0/SdSUTvs7rOI/AAAAAAAAG18/0NJAw0RGV5U/s72-c/Sun_opensolaris_logo.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11965249.post-4331752957168933726</id><published>2009-03-26T21:03:00.000+01:00</published><updated>2009-03-27T10:11:14.392+01:00</updated><title type='text'>Inconsistenze di V$SYSMETRIC_HISTORY</title><content type='html'>Il patchset 3 di Oracle 10g riserva una strana sorpresa: su alcune installazioni, specialmente RAC, si hanno delle inconsistenze in V$SYSMETRIC_HISTORY.&lt;br /&gt;&lt;br /&gt;In V$SYSMETRIC_HISTORY viene raccolto il contenuto di V$SYSMETRIC (le metriche di sistema) ogni 15 secondi, e vengono mantenuti i dati dell'ultima ora.&lt;br /&gt;Periodicamente la view viene salvata su disco in DBA_HIST_SYSMETRIC_HISTORY.&lt;br /&gt;&lt;br /&gt;Con queste premesse, è naturale che la differenza tra sysdate (il tempo del server) e il massimo registrato nella colonna END_TIME sia al massimo di 15 secondi. Invece:&lt;br /&gt;&lt;pre&gt;&lt;tt&gt;SQL&gt; select max(end_time), sysdate from v$sysmetric_history;&lt;br /&gt;&lt;br /&gt;MAX(END_TIME)       SYSDATE&lt;br /&gt;------------------- -------------------&lt;br /&gt;2009-03-12 14:06:59 2009-03-12 14:10:04&lt;br /&gt;&lt;br /&gt;1 row selected.&lt;br /&gt;&lt;/tt&gt;&lt;/pre&gt;&lt;br /&gt;Qual è la conseguenza di ciò? Càpita che i grafici di Enterprise Manager nella homepage non siano visibili, e ho l'impressione che anche altri fenomeni, come strani grafici di performance, siano collegati a questa anomalia:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_r0EgR7__Fw0/SbkaIIgWvaI/AAAAAAAAGws/s5XQSn1041o/s1600-h/sysmetric.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 342px; height: 228px;" src="http://2.bp.blogspot.com/_r0EgR7__Fw0/SbkaIIgWvaI/AAAAAAAAGws/s5XQSn1041o/s400/sysmetric.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5312305962484678050" /&gt;&lt;/a&gt;&lt;br /&gt;Come si può vedere la parte destra del grafico viene disegnata "allungata", come se per quell'intervallo di tempo non ci fossero dati disponibili e quindi il grafico rimanesse costante, mentre sia prima che dopo tutto è regolare.&lt;br /&gt;&lt;br /&gt;Trovate maggiori dettagli nel documento Metalink &lt;a href="https://metalink2.oracle.com/metalink/plsql/ml2_documents.showDocument?p_database_id=NOT&amp;p_id=550083.1"&gt;550083.1&lt;/a&gt;, assieme alla descrizione del bug e alla patch relativa, se i sintomi che doveste riscontrare corrispondono a quelli descritti nei documenti Oracle.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11965249-4331752957168933726?l=rdbland.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='https://metalink2.oracle.com/metalink/plsql/showdoc?db=Bug&amp;id=5880921' title='Inconsistenze di V$SYSMETRIC_HISTORY'/><link rel='replies' type='application/atom+xml' href='http://rdbland.blogspot.com/feeds/4331752957168933726/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11965249&amp;postID=4331752957168933726' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/4331752957168933726'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/4331752957168933726'/><link rel='alternate' type='text/html' href='http://rdbland.blogspot.com/2009/03/inconsistenze-di-vsysmetrichistory.html' title='Inconsistenze di V$SYSMETRIC_HISTORY'/><author><name>Rudy</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://my.opera.com/hillrudy/homes/albums/16833/IMG_2787.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_r0EgR7__Fw0/SbkaIIgWvaI/AAAAAAAAGws/s5XQSn1041o/s72-c/sysmetric.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11965249.post-3450246707053863943</id><published>2009-03-20T14:39:00.005+01:00</published><updated>2009-03-26T16:32:51.881+01:00</updated><title type='text'>Oracle MAA a Milano</title><content type='html'>Giovedì prossimo sarò all'&lt;a href="http://www.oracle.com/webapps/events/EventsDetail.jsp?p_eventId=92580"&gt;Oracle Maximum Availability Architecture&lt;/a&gt; a Milano.&lt;br /&gt;Potrebbe essere un'occasione per fare due chiacchiere.&lt;br /&gt;Se ci siete, lasciate un commento, così ci si dà un appuntamento per tutti.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Aggiornamento post-evento&lt;/span&gt;: eravamo una trentina di persone, a giudicare dai badge la metà di quelle previste. Si è parlato delle novità 11g un po' più da vicino. Abbastanza interessante, c'è discreto materiale per nuovi test, ma la scarsa partecipazione fa pensare.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11965249-3450246707053863943?l=rdbland.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.oracle.com/webapps/events/EventsDetail.jsp?p_eventId=92580' title='Oracle MAA a Milano'/><link rel='replies' type='application/atom+xml' href='http://rdbland.blogspot.com/feeds/3450246707053863943/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11965249&amp;postID=3450246707053863943' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/3450246707053863943'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/3450246707053863943'/><link rel='alternate' type='text/html' href='http://rdbland.blogspot.com/2009/03/oracle-maa-milano.html' title='Oracle MAA a Milano'/><author><name>Rudy</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://my.opera.com/hillrudy/homes/albums/16833/IMG_2787.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11965249.post-5519200946662828259</id><published>2009-03-11T21:10:00.000+01:00</published><updated>2009-03-12T10:55:47.310+01:00</updated><title type='text'>Il mistero di hangcheck-timer</title><content type='html'>Recentemente ho aggiornato diversi sistemi con Oracle 10g RAC a 64 bit con RHEL 5.2. In genere, ogni volta che installo un nuovo cluster, scorro velocemente per l'ennesima volta tutti i passi del manuale di installazione, per essere più o meno certo di non avere dimenticato nulla.&lt;br /&gt;&lt;br /&gt;Stavolta mi è capitato di notare una stranezza a proposito dell'installazione di Clusterware 10g per Linux nel capitolo &lt;a href="http://download.oracle.com/docs/cd/B19306_01/install.102/b14203/prelinux.htm#BABJBBCE"&gt;"Pre-installation tasks"&lt;/a&gt;.&lt;br /&gt;Oracle RAC ha bisogno di un modulo del kernel Linux chiamato hangcheck-timer, illustrato nella nota Metalink &lt;a href="https://metalink2.oracle.com/metalink/plsql/ml2_documents.showDocument?p_database_id=NOT&amp;p_id=726833.1"&gt;726833.1&lt;/a&gt;. Questo modulo controlla che il kernel Linux non rimanga bloccato nell'attesa di un blocco (tipo I/O) per più di un determinato periodo di tempo, impostabile con alcuni parametri del modulo; in caso contrario fa il reboot del nodo per evitare lock e inconsistenze più gravi.&lt;br /&gt;&lt;br /&gt;La cosa strana è che, controllando i parametri dell'hangcheck-timer, sono risultati diversi da quelli da me impostati su altri cluster già attivi.&lt;br /&gt;&lt;br /&gt;Il &lt;a href="http://download.oracle.com/docs/cd/B19306_01/install.102/b14203/prelinux.htm#BABJBBCE"&gt;paragrafo&lt;/a&gt; riporta i seguenti parametri per hangcheck-timer:&lt;br /&gt;&lt;pre&gt;hangcheck_tick=1 hangcheck_margin=10 hangcheck_reboot=1&lt;/pre&gt;&lt;br /&gt;mentre su alcuni cluster che gestisco i valori sono i seguenti:&lt;br /&gt;&lt;pre&gt;hangcheck_tick=30 hangcheck_margin=180&lt;/pre&gt;&lt;br /&gt;Mi è sembrato molto strano di aver sbagliato ad impostare quei parametri, specialmente inserendo dei valori precisi che evidentemente erano derivati da qualche documento ufficiale, altrimenti non li avrei messi.&lt;br /&gt;&lt;br /&gt;E infatti, con un po' di lavoro di investigazione, anche &lt;span style="font-style:italic;"&gt;senza&lt;/span&gt; l'aiuto del sito &lt;a href="http://www.archive.org/web/web.php"&gt;The Wayback Machine&lt;/a&gt; temporaneamente non funzionante, sono approdato ad una &lt;a href="http://www.di.unipi.it/~ghelli/didattica/bdl/B19306_01/install.102/b14203/prelinux.htm#sthref634"&gt;vecchia versione&lt;/a&gt; della pagina di installazione di Clusterware, che riportava i valori da me impostati in passato.&lt;br /&gt;Tutto è confermato anche da &lt;a href="http://www.oracle.com/technology/pub/articles/hunter_rac10gr2_2.html#12"&gt;questo articolo di OTN&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Non ho molto apprezzato questa variazione senza preavviso dei parametri, quindi ho pensato di essermi perso qualche avviso da qualche parte nel patchset 3, ad esempio.&lt;br /&gt;Non ho trovato alcun riferimento alla variazione dei parametri, tranne nella &lt;a href="https://metalink2.oracle.com/metalink/plsql/ml2_documents.showDocument?p_database_id=NOT&amp;p_id=726833.1"&gt;nota 726833.1&lt;/a&gt;, che riporta per &lt;span style="font-weight:bold;"&gt;9i&lt;/span&gt; i parametri &lt;tt&gt;hangcheck_tick=30 hangcheck_margin=180 hangcheck_reboot=1&lt;/tt&gt; e per &lt;span style="font-weight:bold;"&gt;10g e 11g&lt;/span&gt; i valori &lt;tt&gt;hangcheck_tick=1 hangcheck_margin=10 hangcheck_reboot=1&lt;/tt&gt;.&lt;br /&gt;&lt;br /&gt;È evidente che qualcosa è cambiato nelle procedure di configurazione di RAC da una certa patchset in poi, e che i parametri nella versione originale dell'installazione erano quelli di 9i, ma non riesco a trovare riferimenti.&lt;br /&gt;&lt;br /&gt;Qualcuno di voi ci riesce?&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11965249-5519200946662828259?l=rdbland.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://download.oracle.com/docs/cd/B19306_01/install.102/b14203/prelinux.htm#BABJBBCE' title='Il mistero di hangcheck-timer'/><link rel='replies' type='application/atom+xml' href='http://rdbland.blogspot.com/feeds/5519200946662828259/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11965249&amp;postID=5519200946662828259' title='1 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/5519200946662828259'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/5519200946662828259'/><link rel='alternate' type='text/html' href='http://rdbland.blogspot.com/2009/03/il-mistero-di-hangcheck-timer.html' title='Il mistero di hangcheck-timer'/><author><name>Rudy</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://my.opera.com/hillrudy/homes/albums/16833/IMG_2787.JPG'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11965249.post-4593172373773974718</id><published>2009-02-24T22:43:00.000+01:00</published><updated>2009-02-25T13:41:29.479+01:00</updated><title type='text'>Ext4, le novità per i database</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_r0EgR7__Fw0/SaURoSy0hcI/AAAAAAAAGwU/peJlS1JCmHA/s1600-h/ext4fs.png"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 128px; height: 128px;" src="http://1.bp.blogspot.com/_r0EgR7__Fw0/SaURoSy0hcI/AAAAAAAAGwU/peJlS1JCmHA/s200/ext4fs.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5306667119863432642" /&gt;&lt;/a&gt;Recentemente è uscita la versione stabile di &lt;a href="http://ext4.wiki.kernel.org/index.php/Main_Page"&gt;ext4&lt;/a&gt;, l'evoluzione del noto filesystem di Linux ext3. Chi ha il kernel Linux 2.6.28 o superiore può provare subito le &lt;a href="http://kernelnewbies.org/Ext4"&gt;nuove feature&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Leggendo le novità introdotte non si può fare a meno di pensare all'utilizzo con i database. Alcune novità, infatti, sembrano state "ispirate" dal mondo Oracle.&lt;br /&gt;&lt;br /&gt;Per ora l'indirizzamento di ext4 è a 48 bit, non a 64 come si potrebbe immaginare, e ciò introduce limiti che, benché difficilmente raggiungibili, sono altrettanto facilmente evitabili; è comunque prevista un'upgrade in futuro.&lt;br /&gt;&lt;br /&gt;Molto interessante è l'introduzione degli &lt;span style="font-weight:bold;"&gt;extent&lt;/span&gt;, ovvero insiemi di blocchi contigui che il filesystem considera come un'unica entità, concetto preso direttamente da Oracle.&lt;br /&gt;I vantaggi potrebbero essere: una maggiore velocità, allocazione dello spazio più veloce.&lt;br /&gt;È presente anche la &lt;span style="font-weight:bold;"&gt;deframmentazione online&lt;/span&gt;, che però a mio parere è una soluzione un po' finta a un problema quasi inesistente, in quanto in storage di un certo livello, anche piuttosto basso, i dati vanno a finire in locazioni del disco logico che non hanno relazione fisica tra loro, anche se logicamente contigui. Penso che questo concetto sia alla base della relativamente bassa perdita di performance di &lt;a href="http://rdbland.blogspot.com/2008/08/dischi-burro-e-marmellata.html"&gt;ZFS&lt;/a&gt; e tutti i filesystem &lt;span style="font-style:italic;"&gt;copy-on-write&lt;/span&gt;, specialmente quando utilizzati su storage multidisco.&lt;br /&gt;La &lt;span style="font-weight:bold;"&gt;preallocazione&lt;/span&gt; permette di preallocare lo spazio su disco in modo efficiente e contiguo, come fanno ad esempio i programmi di P2P. Per utilizzare questa feature è necessario richiamare una funzione apposita dell'API glibc, quindi bisogna probabilmente attendere che il codice dei database server venga aggiornato.&lt;br /&gt;&lt;br /&gt;Ho installato una macchina virtuale di prova con Red Hat 5.3, che dispone di una &lt;span style="font-style:italic;"&gt;technology preview&lt;/span&gt; di ext4, solo in modalità "dev", quindi comunque non stabile.&lt;br /&gt;Purtroppo constato che non è possibile utilizzare blocchi di dimensione superiore a 4 KB, di fatto impedendo una utile ottimizzazione nei confronti dei blocchi di database di dimensioni maggiori (tipico 8 KB nel caso di Oracle).&lt;br /&gt;&lt;br /&gt;Ext4 può essere un significativo passo avanti nella gestione di filesystem grandi e può aiutare sia nella gestione che nella performance dei database, soprattutto Oracle, ma trovo che grandi novità strutturali non ci siano state, almeno non come quelle di ZFS, fin dal suo rilascio.&lt;br /&gt;&lt;br /&gt;Per ZFS si preannunciano interessantissime novità, come la possibilità di &lt;a href="http://blogs.sun.com/danilop/entry/tornare_indietro_nel_tempo_con"&gt;tornare indietro nel tempo&lt;/a&gt; proprio come Time Machine della Apple.&lt;br /&gt;&lt;br /&gt;Troveremo il tempo di approfondire tutti questi argomenti.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11965249-4593172373773974718?l=rdbland.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://ext4.wiki.kernel.org/index.php/Main_Page' title='Ext4, le novità per i database'/><link rel='replies' type='application/atom+xml' href='http://rdbland.blogspot.com/feeds/4593172373773974718/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11965249&amp;postID=4593172373773974718' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/4593172373773974718'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/4593172373773974718'/><link rel='alternate' type='text/html' href='http://rdbland.blogspot.com/2009/02/ext4-le-novita-per-i-database.html' title='Ext4, le novità per i database'/><author><name>Rudy</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://my.opera.com/hillrudy/homes/albums/16833/IMG_2787.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_r0EgR7__Fw0/SaURoSy0hcI/AAAAAAAAGwU/peJlS1JCmHA/s72-c/ext4fs.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11965249.post-7787622516907081873</id><published>2009-02-19T22:12:00.000+01:00</published><updated>2009-02-20T09:57:06.932+01:00</updated><title type='text'>Grafici Google, GUI per vari database</title><content type='html'>Un paio di segnalazioni.&lt;br /&gt;&lt;br /&gt;Con &lt;span style="font-weight:bold;"&gt;Google Charts&lt;/span&gt; è possibile ottenere grafici utili per automatizzare il monitoraggio dei propri database.&lt;br /&gt;Di seguito c'è un esempio, generato "live" col caricamento di questa pagina, che illustra l'utilizzo di un grafico per visualizzare l'occupazione relativa su disco dei vari tablespace che compongono un database Oracle:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://chart.apis.google.com/chart?cht=p&amp;chs=400x200&amp;chtt=Database%20Tablespaces%20(MB)&amp;chl=1960|400|250|160|100|5&amp;chd=t:68,14,9,6,3,0&amp;chdl=MGMT_TABLESPACE|SYSTEM|UNDOTBS1|SYSAUX|MGMT_ECM_DEPOT_TS|USERS"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 400px; height: 200px;" src="http://chart.apis.google.com/chart?cht=p&amp;chs=400x200&amp;chtt=Database%20Tablespaces%20(MB)&amp;chl=1960|400|250|160|100|5&amp;chd=t:68,14,9,6,3,0&amp;chdl=MGMT_TABLESPACE|SYSTEM|UNDOTBS1|SYSAUX|MGMT_ECM_DEPOT_TS|USERS" border="0" alt="" /&gt;&lt;/a&gt;&lt;br /&gt;Il grafico viene generato semplicemente chiamando un URL di Google:&lt;pre&gt;http://chart.apis.google.com/chart?cht=p&amp;chs=400x200&amp;chtt=Database%20Tablespaces%20(MB)&amp;chl=1960|400|250|160|100|5&amp;chd=t:68,14,9,6,3,0&amp;chdl=MGMT_TABLESPACE|SYSTEM|UNDOTBS1|SYSAUX|MGMT_ECM_DEPOT_TS|USERS&lt;/pre&gt; passandogli i valori e i tag del grafico. I valori, naturalmente, vengono ricavati da una query sul dizionario dati.&lt;br /&gt;I possibili utilizzi sono limitati solo dalle proprie necessità.&lt;br /&gt;&lt;span style="font-style:italic;"&gt;(da un &lt;a href="http://www.pythian.com/blogs/1490/google-charts-for-dba-tablespaces-allocation"&gt;articolo di Alex Gorbachev&lt;/a&gt;)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.navicat.com/"&gt;Navicat&lt;/a&gt; è un programma utile per la gestione dei propri database MySQL, PostgreSQL e Oracle.&lt;br /&gt;Esiste sia per Windows che per Mac OS X, in varie versioni a pagamento, ma c'è anche la versione gratuita ("Lite").&lt;br /&gt;Ho fatto qualche prova e Navicat mi pare un programma molto semplice, adatto a effettuare le operazioni più comuni.&lt;br /&gt;Le caratteristiche che mi paiono più interessanti sono la possibilità di confrontare schemi e la possibilità di collegarsi a un database tramite un tunnel SSH.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11965249-7787622516907081873?l=rdbland.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rdbland.blogspot.com/feeds/7787622516907081873/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11965249&amp;postID=7787622516907081873' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/7787622516907081873'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/7787622516907081873'/><link rel='alternate' type='text/html' href='http://rdbland.blogspot.com/2009/02/grafici-google-gui-per-vari-database.html' title='Grafici Google, GUI per vari database'/><author><name>Rudy</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://my.opera.com/hillrudy/homes/albums/16833/IMG_2787.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11965249.post-8432379575707022625</id><published>2009-01-25T22:03:00.001+01:00</published><updated>2009-01-26T09:22:57.162+01:00</updated><title type='text'>Il listener che ascoltava troppo</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_r0EgR7__Fw0/SX1vuzg_O_I/AAAAAAAAGvo/lXsHuQLyF-A/s1600-h/FE_DA_071231world_listen_10124.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 200px; height: 134px;" src="http://2.bp.blogspot.com/_r0EgR7__Fw0/SX1vuzg_O_I/AAAAAAAAGvo/lXsHuQLyF-A/s200/FE_DA_071231world_listen_10124.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5295511586750807026" /&gt;&lt;/a&gt;Il listener, per Oracle, è il processo che rimane in ascolto su una porta di rete per le richieste di connessione remote, indirizzandole successivamente al processo server o al dispatcher opportuno.&lt;br /&gt;&lt;br /&gt;Il listener può essere controllato tramite la sua console &lt;span style="font-weight:bold;"&gt;lsnrctl&lt;/span&gt; (&lt;span style="font-style:italic;"&gt;Listener Control Utility&lt;/span&gt;): lo si può fare partire, spegnere e riconfigurare in vari modi, anche senza farlo ripartire, grazie al comando RELOAD.&lt;br /&gt;&lt;br /&gt;Con il comando STATUS è possibile avere una panoramica piuttosto dettagliata su che cosa sta facendo il listener:&lt;br /&gt;&lt;pre&gt;&lt;tt&gt;LSNRCTL&gt; status&lt;br /&gt;Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=myhost)(PORT=1521)))&lt;br /&gt;STATUS of the LISTENER&lt;br /&gt;------------------------&lt;br /&gt;Alias                     LISTENER&lt;br /&gt;Version                   TNSLSNR for Linux: Version 10.2.0.3.0 - Production&lt;br /&gt;Start Date                10-JAN-2009 13:21:16&lt;br /&gt;Uptime                    12 days 22 hr. 17 min. 45 sec&lt;br /&gt;Trace Level               off&lt;br /&gt;Security                  ON: Local OS Authentication&lt;br /&gt;SNMP                      OFF&lt;br /&gt;Listener Parameter File   /u01/app/oracle/product/10.2.0/network/admin/listener.ora&lt;br /&gt;Listener Log File         /u01/app/oracle/product/10.2.0/network/log/listener.log&lt;br /&gt;Listening Endpoints Summary...&lt;br /&gt;  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=myhost)(PORT=1521)))&lt;br /&gt;  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC0)))&lt;br /&gt;Services Summary...&lt;br /&gt;Service "ORA10G" has 1 instance(s).&lt;br /&gt;  Instance "ORA10G", status READY, has 1 handler(s) for this service...&lt;br /&gt;Service "ORA10GXDB" has 1 instance(s).&lt;br /&gt;  Instance "ORA10G", status READY, has 1 handler(s) for this service...&lt;br /&gt;Service "ORA10G_XPT" has 1 instance(s).&lt;br /&gt;  Instance "ORA10G", status READY, has 1 handler(s) for this service...&lt;br /&gt;Service "PLSExtProc" has 1 instance(s).&lt;br /&gt;  Instance "PLSExtProc", status UNKNOWN, has 1 handler(s) for this service...&lt;br /&gt;The command completed successfully&lt;/tt&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;L'avvio o la chiusura del listener sono operazioni privilegiate, che quindi richiedono un certo livello di privilegi all'utente. Se ci si collega al server come utente appartenente al gruppo dba o addirittura come utente oracle, i privilegi per dette operazioni vengono automaticamente garantiti. Ciò è infatti visibile nella riga &lt;span style="font-style:italic;"&gt;Security ON: Local OS Authentication&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;Nelle versioni 9i e precedenti, però, generalmente il controllo di accesso alle operazioni privilegiate è disabilitato:&lt;br /&gt;&lt;pre&gt;&lt;tt&gt;LSNRCTL&gt; status&lt;br /&gt;Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC)))&lt;br /&gt;STATUS of the LISTENER&lt;br /&gt;------------------------&lt;br /&gt;Alias                     LISTENER&lt;br /&gt;Version                   TNSLSNR for Solaris: Version 9.2.0.7.0 - Production&lt;br /&gt;Start Date                27-MAY-2008 14:45:13&lt;br /&gt;Uptime                    240 days 19 hr. 51 min. 0 sec&lt;br /&gt;Trace Level               off&lt;br /&gt;Security                  OFF&lt;br /&gt;SNMP                      OFF&lt;br /&gt;Listener Parameter File&lt;br /&gt;/u01/oracle/product/9207/network/admin/listener.ora&lt;br /&gt;Listener Log File         /u01/oracle/product/9207/network/log/listener.log&lt;br /&gt;Listening Endpoints Summary...&lt;br /&gt;  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC)))&lt;br /&gt;  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=ora9ihost)(PORT=1521)))&lt;br /&gt;Services Summary...&lt;br /&gt;Service "PLSExtProc" has 1 instance(s).&lt;br /&gt;  Instance "PLSExtProc", status UNKNOWN, has 1 handler(s) for this service...&lt;br /&gt;Service "ORA9I" has 1 instance(s).&lt;br /&gt;  Instance "ORA9I", status UNKNOWN, has 1 handler(s) for this service...&lt;br /&gt;Service "ORA9I" has 1 instance(s).&lt;br /&gt;  Instance "ORA9I", status READY, has 2 handler(s) for this service...&lt;br /&gt;The command completed successfully&lt;/tt&gt;&lt;/pre&gt;&lt;br /&gt;Il problema non è rilevante per quanto riguarda gli utenti locali del server su cui risiedono il database e il listener, in quanto protetti in qualche modo da password, ma perché &lt;span style="font-weight:bold;"&gt;è possibile controllare remotamente un listener non "blindato" tramite la sua console lsnrctl installata su qualsiasi altra macchina&lt;/span&gt;. Esiste infatti la possibilità di specificare il &lt;span style="font-style:italic;"&gt;current_listener&lt;/span&gt;; vediamolo in opera utilizzando il comando version (ma status va benissimo):&lt;br /&gt;&lt;pre&gt;&lt;tt&gt;LSNRCTL&gt; version&lt;br /&gt;Connecting to&lt;br /&gt;(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=myhost)(PORT=1521)))&lt;br /&gt;TNSLSNR for Linux: Version 10.2.0.3.0 - Production&lt;br /&gt;        TNS for Linux: Version 10.2.0.3.0 - Production&lt;br /&gt;        Unix Domain Socket IPC NT Protocol Adaptor for Linux: Version 10.2.0.3.0 - Production&lt;br /&gt;        Oracle Bequeath NT Protocol Adapter for Linux: Version 10.2.0.3.0 - Production&lt;br /&gt;        TCP/IP NT Protocol Adapter for Linux: Version 10.2.0.3.0 - Production,,&lt;br /&gt;The command completed successfully&lt;br /&gt;LSNRCTL&gt; set current_listener ora9ihost&lt;br /&gt;Current Listener is ora9ihost&lt;br /&gt;LSNRCTL&gt; version&lt;br /&gt;Connecting to&lt;br /&gt;(DESCRIPTION=(CONNECT_DATA=(SERVICE_NAME=ora9ihost))(ADDRESS=(PROTOCOL=TCP)(HOST=ora9ihost)(PORT=1521)))&lt;br /&gt;TNSLSNR for Solaris: Version 9.2.0.7.0 - Production&lt;br /&gt;        TNS for Solaris: Version 9.2.0.7.0 - Production&lt;br /&gt;        Unix Domain Socket IPC NT Protocol Adaptor for Solaris: Version 9.2.0.7.0 - Production&lt;br /&gt;        Oracle Bequeath NT Protocol Adapter for Solaris: Version 9.2.0.7.0 - Production&lt;br /&gt;        TCP/IP NT Protocol Adapter for Solaris: Version 9.2.0.7.0 - Production,,&lt;br /&gt;The command completed successfully&lt;/tt&gt;&lt;/pre&gt;&lt;br /&gt;Il comando VERSION fornisce le informazioni per qualsiasi database (e già queste informazioni a disposizione di tutti potrebbero essere inopportune), ma a noi interessa che con il listener 9i non opportunamente configurato è possibile a questo punto scrivere "stop" e il listener viene spento su ora9ihost.&lt;br /&gt;Per 10g invece questa "feature" viene disabilitata di default, quindi cercando di fermare il listener remotamente si ottiene:&lt;br /&gt;&lt;pre&gt;&lt;tt&gt;LSNRCTL&gt; stop&lt;br /&gt;Connecting to&lt;br /&gt;(DESCRIPTION=(CONNECT_DATA=(SERVICE_NAME=ora10g))(ADDRESS=(PROTOCOL=TCP)(HOST=ora10g)(PORT=1521)))&lt;br /&gt;TNS-01189: The listener could not authenticate the user&lt;/tt&gt;&lt;/pre&gt;&lt;br /&gt;Inoltre, con un listener "aperto", impostando log_directory, log_file e log_status &lt;span style="font-weight:bold;"&gt;si può sovrascrivere qualsiasi file accessibile all'utente con cui gira il listener a cui ci si è collegati&lt;/span&gt; (meglio non immaginare che cosa è possibile fare).&lt;br /&gt;&lt;br /&gt;In 10g, per il listener è attivo di default (ON) il nuovo parametro LOCAL_OS_AUTHENTICATION_&amp;lt;listener&amp;gt;, quindi non ci si deve preoccupare più di tanto; con il parametro impostato a "OFF" il listener si comporta come su 9i. In tal caso (10g aperto, 9i e precedenti) è opportuno impostare la password per il listener con il comando CHANGE_PASSWORD.&lt;br /&gt;Una volta impostata la password, per eseguire qualsiasi operazione privilegiata è necessario prima autenticarsi con SET PASSWORD.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11965249-8432379575707022625?l=rdbland.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.scribd.com/doc/22455/Oracle-Database-Listener-Security-Guide' title='Il listener che ascoltava troppo'/><link rel='replies' type='application/atom+xml' href='http://rdbland.blogspot.com/feeds/8432379575707022625/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11965249&amp;postID=8432379575707022625' title='2 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/8432379575707022625'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/8432379575707022625'/><link rel='alternate' type='text/html' href='http://rdbland.blogspot.com/2009/01/il-listener-che-ascoltava-troppo.html' title='Il listener che ascoltava troppo'/><author><name>Rudy</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://my.opera.com/hillrudy/homes/albums/16833/IMG_2787.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_r0EgR7__Fw0/SX1vuzg_O_I/AAAAAAAAGvo/lXsHuQLyF-A/s72-c/FE_DA_071231world_listen_10124.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11965249.post-5619086492421819258</id><published>2009-01-06T11:06:00.001+01:00</published><updated>2009-01-06T11:18:21.753+01:00</updated><title type='text'>Un'interconnect RAC efficiente</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_r0EgR7__Fw0/SWDgCn59KSI/AAAAAAAAGu0/j3bJVxQssSA/s1600-h/cablemess.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/_r0EgR7__Fw0/SWDgCn59KSI/AAAAAAAAGu0/j3bJVxQssSA/s200/cablemess.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5287472298209388834" /&gt;&lt;/a&gt;Com'è noto un cluster Oracle è formato da più istanze che montano lo stesso database condiviso.&lt;br /&gt;Ogni istanza ha una propria buffer cache che si gestisce autonomamente, in più esiste una caratteristica di RAC chiamata &lt;span style="font-style:italic;"&gt;cache fusion&lt;/span&gt;, che sarebbe un insieme di processi che si parlano tra loro da un nodo del cluster all'altro, garantendo l'integrità dei dati attraverso le istanze.&lt;br /&gt;&lt;br /&gt;Dato che una query, eseguita su un nodo qualunque del cluster, deve ottenere risultati consistenti, le istanze devono poter parlare tra loro tramite una connessione molto veloce, che in genere viene ottenuta tramite una rete ethernet, soprattutto per la relativa economicità della soluzione.&lt;br /&gt;Le istanze trasferiscono tra loro direttamente i &lt;span style="font-weight:bold;"&gt;blocchi della SGA&lt;/span&gt;, che vengono quindi impacchettati secondo gli usuali protocolli di rete per essere spediti alle altre istanze del cluster. Oracle usa UDP per il trasferimento, penso soprattutto per evitare l'overhead del TCP.&lt;br /&gt;La dimensione dei pacchetti trasferiti sull'interconnect è data al parametro della scheda di rete &lt;a href="http://en.wikipedia.org/wiki/Maximum_transmission_unit"&gt;MTU&lt;/a&gt;, che è la dimensione in byte del più grande pacchetto o &lt;span style="font-style:italic;"&gt;frame&lt;/span&gt; che può essere inviato attraverso la rete. In generale il default per tutte le interfacce di rete è 1500 byte.&lt;br /&gt;Ciò implica che, trasferendo un blocco dalla SGA di un nodo a quella di un altro nodo, il blocco viene spezzettato in più frame sufficienti a contenere le sue dimensioni (es. 8K standard). Questa operazione è relativamente lenta, e poiché le prestazioni dell'interconnect possono avere un forte impatto sulle prestazioni globali del cluster, è preferibile limitare l'uso dell'interconnect, facendo in modo ad esempio che qualsiasi nodo del cluster lavori prevalentemente o unicamente su un sottoinsieme dei dati disgiunto da quello su cui lavora ciascun altro nodo.&lt;br /&gt;&lt;br /&gt;C'è anche un modo per aumentare le prestazioni dell'interconnect: l'uso dei &lt;span style="font-style:italic;"&gt;&lt;span style="font-weight:bold;"&gt;jumbo frame&lt;/span&gt;&lt;/span&gt;.&lt;br /&gt;I &lt;a href="http://en.wikipedia.org/wiki/Jumbo_Frames"&gt;jumbo frame&lt;/a&gt; sono dei frame (molto) più grandi di quelli standard di 1500 bytes; generalmente il limite delle loro dimensioni è 9000 bytes; questo limite è interessante perché molto vicino alle dimensioni "standard" del blocco Oracle (8K), e comunque superiore alle dimensioni dei blocchi usati in OLTP (2K, 4K, 8K).&lt;br /&gt;&lt;br /&gt;L'idea che mi è venuta è di verificare che i blocchi transitino "intatti" sulla interconnect, in modo da massimizzare le prestazioni, al variare della MTU. Non tutte le apparecchiature di rete, infatti, supportano i jumbo frame o comunque dimensioni troppo grandi dei frame.&lt;br /&gt;Il modo più diretto e anche più affidabile è usare un tool di monitoring del traffico. Io propendo per &lt;a href="http://www.wireshark.org/"&gt;Wireshark&lt;/a&gt;, per la facilità e l'estrema potenza.&lt;br /&gt;&lt;br /&gt;Il test che ho pensato è il seguente: creo una tabella 3 o 4 blocchi in un tablespace con blocksize di 8K, inserisco un po' di dati ad-hoc, "carico" il suo contenuto nella SGA dell'istanza su cui sto lavorando (una semplice select va bene, anche se l'insert ordinaria dovrebbe bastare), e poi cerco di accedere agli stessi dati da una seconda istanza del cluster (un'altra select è sufficiente).&lt;br /&gt;Ipotizzo che Oracle trasferisca i blocchi in questione sull'interconnect invece che leggerli da disco, poiché si presume che il trasferimento via interconnect sia molto più veloce.&lt;br /&gt;&lt;br /&gt;Per riconoscere i blocchi nel traffico di rete utilizzo dei "marker" sui dati: creo una tabella contenente stringhe ben visibili. In questo caso utilizzo stringhe tipo "AAAA...", "BBBB...." e così via, per 20 righe di circa 2000 caratteri ciascuna, in modo che in ogni blocco da 8192 byte ci stiano 3/4 record. "Forzo" la massima occupazione dello spazio nei blocchi utilizzando l'opzione &lt;span style="font-style:italic;"&gt;pctfree 0&lt;/span&gt;.&lt;br /&gt;&lt;pre&gt;&lt;tt&gt;SQL&gt; create table aob (rn integer, rp char(2000)) pctfree 0;&lt;br /&gt;&lt;br /&gt;Table created.&lt;br /&gt;&lt;br /&gt;SQL&gt; insert into aob select rownum, rpad(chr(64+rownum), 2000, chr(64+rownum))&lt;br /&gt;from all_objects where rownum &lt;= 20;&lt;br /&gt;&lt;br /&gt;20 rows created.&lt;br /&gt;&lt;br /&gt;SQL&gt; commit;&lt;br /&gt;&lt;br /&gt;Commit complete.&lt;br /&gt;&lt;br /&gt;SQL&gt; select rn, substr(rp, 1, 1) letter, length(rp) len, rowid&lt;br /&gt;from aob order by rn;&lt;br /&gt;&lt;br /&gt;        RN LETT        LEN ROWID&lt;br /&gt;---------- ---- ---------- ------------------&lt;br /&gt;         1 A          2000 AAAM8OAAFAAABCXAAA&lt;br /&gt;         2 B          2000 AAAM8OAAFAAABCXAAB&lt;br /&gt;         3 C          2000 AAAM8OAAFAAABCXAAC&lt;br /&gt;         4 D          2000 AAAM8OAAFAAABCXAAD&lt;br /&gt;         5 E          2000 AAAM8OAAFAAABCYAAA&lt;br /&gt;         6 F          2000 AAAM8OAAFAAABCYAAB&lt;br /&gt;         7 G          2000 AAAM8OAAFAAABCYAAC&lt;br /&gt;         8 H          2000 AAAM8OAAFAAABCYAAD&lt;br /&gt;         9 I          2000 AAAM8OAAFAAABCUAAA&lt;br /&gt;        10 J          2000 AAAM8OAAFAAABCUAAB&lt;br /&gt;        11 K          2000 AAAM8OAAFAAABCUAAC&lt;br /&gt;        12 L          2000 AAAM8OAAFAAABCUAAD&lt;br /&gt;        13 M          2000 AAAM8OAAFAAABCVAAA&lt;br /&gt;        14 N          2000 AAAM8OAAFAAABCVAAB&lt;br /&gt;        15 O          2000 AAAM8OAAFAAABCVAAC&lt;br /&gt;        16 P          2000 AAAM8OAAFAAABCVAAD&lt;br /&gt;        17 Q          2000 AAAM8OAAFAAABCWAAA&lt;br /&gt;        18 R          2000 AAAM8OAAFAAABCWAAB&lt;br /&gt;        19 S          2000 AAAM8OAAFAAABCWAAC&lt;br /&gt;        20 T          2000 AAAM8OAAFAAABCWAAD&lt;br /&gt;&lt;br /&gt;20 rows selected.&lt;br /&gt;&lt;/tt&gt;&lt;/pre&gt;&lt;br /&gt;Nell'ultima select per brevità è presente solo una lettera per ogni riga (rp è una stringa char di 2000 caratteri tutti uguali); è evidente come i record stiano nello stesso blocco a gruppi di 4 dal rowid: la riga all'interno del blocco è indetificata dagli ultimi tre caratteri del rowid, mentre il blocco dai 5 caratteri precedenti.&lt;br /&gt;Ho quindi un modo per identificare visualmente i blocchi in transito sull'interconnect: il primo sarà pieno di A, B, C e D; il secondo di E, F, G, H, e così via.&lt;br /&gt;&lt;br /&gt;Dopo aver eseguito le istruzioni precedenti su un nodo del cluster, passo al successivo facendo semplicemente&lt;br /&gt;&lt;pre&gt;&lt;tt&gt;SQL&gt; select * from aob;&lt;/tt&gt;&lt;/pre&gt;&lt;br /&gt;Nel frattempo ho attivato Wireshark in modo da loggare tutto il traffico di passaggio sull'interfaccia di rete dell'interconnect su uno dei due nodi del cluster.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Ecco che cosa si vede da Wireshark con la &lt;span style="font-weight:bold;"&gt;MTU a 1500 byte&lt;/span&gt; (il blocco visualizzato è evidenziato in blu nell'elenco dei frame):&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_r0EgR7__Fw0/SWIRrAR4p9I/AAAAAAAAGu8/ckB4c3mfzZU/s1600-h/block6.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 200px; height: 148px;" src="http://1.bp.blogspot.com/_r0EgR7__Fw0/SWIRrAR4p9I/AAAAAAAAGu8/ckB4c3mfzZU/s200/block6.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5287808342993446866" /&gt;&lt;/a&gt;&lt;br /&gt;I frame di dati sono lunghi 882 byte, e vengono riassemblati in blocchi da 8248 byte (vedere in basso a sinistra nell'immagine). Nell'immagine si vede uno dei frame contenenti la "P"; servono perfino più di due frame per poter trasmettere anche una sola riga, lunga almeno 2002 byte.&lt;br /&gt;Il frame di 1500 byte è quindi addirittura di gran lunga sottoutilizzato in questo caso.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Ora vediamo in dettaglio il traffico con la &lt;span style="font-weight:bold;"&gt;MTU a 9000 byte&lt;/span&gt;.&lt;br /&gt;Ecco il blocco che comincia con la riga delle "I":&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_r0EgR7__Fw0/SWDZXZNPONI/AAAAAAAAGuM/Q275ZTlzYuc/s1600-h/block1.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 200px; height: 148px;" src="http://3.bp.blogspot.com/_r0EgR7__Fw0/SWDZXZNPONI/AAAAAAAAGuM/Q275ZTlzYuc/s200/block1.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5287464958459590866" /&gt;&lt;/a&gt;&lt;br /&gt;Più in basso si passa dalla "K" alla "L":&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_r0EgR7__Fw0/SWDZXhDHGUI/AAAAAAAAGuU/n6G6G9Yzchs/s1600-h/block2.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 200px; height: 148px;" src="http://4.bp.blogspot.com/_r0EgR7__Fw0/SWDZXhDHGUI/AAAAAAAAGuU/n6G6G9Yzchs/s200/block2.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5287464960564599106" /&gt;&lt;/a&gt;&lt;br /&gt;Ecco il blocco della "A" (notare che non sono in ordine, giustamente):&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_r0EgR7__Fw0/SWDZX0uUfUI/AAAAAAAAGuc/-lBdBuNcMYA/s1600-h/block3.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 200px; height: 148px;" src="http://2.bp.blogspot.com/_r0EgR7__Fw0/SWDZX0uUfUI/AAAAAAAAGuc/-lBdBuNcMYA/s200/block3.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5287464965846105410" /&gt;&lt;/a&gt;&lt;br /&gt;Ecco la fine del blocco della "A", "D":&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_r0EgR7__Fw0/SWDZYSpUPmI/AAAAAAAAGuk/_meEzCCO97I/s1600-h/block4.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 200px; height: 148px;" src="http://4.bp.blogspot.com/_r0EgR7__Fw0/SWDZYSpUPmI/AAAAAAAAGuk/_meEzCCO97I/s200/block4.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5287464973878181474" /&gt;&lt;/a&gt;&lt;br /&gt;Nei dati del blocco è presente la dimensione del frame, 8282 byte:&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_r0EgR7__Fw0/SWDZYZ_NDJI/AAAAAAAAGus/L22mtB0f1xc/s1600-h/block5.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 200px; height: 148px;" src="http://1.bp.blogspot.com/_r0EgR7__Fw0/SWDZYZ_NDJI/AAAAAAAAGus/L22mtB0f1xc/s200/block5.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5287464975849032850" /&gt;&lt;/a&gt;&lt;br /&gt;Ciò significa che, con l'MTU impostata a 9000 byte, i blocchi transitano integri sull'interconnect, garantendone il massimo delle prestazioni.&lt;br /&gt;Probabilmente è possibile arrivare ad un valore ottimale per l'MTU, di poco superiore o di poco inferiore, guardando anche gli altri tipi di comunicazione sull'interconnect, ma per ora ci fermiamo qui.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11965249-5619086492421819258?l=rdbland.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rdbland.blogspot.com/feeds/5619086492421819258/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11965249&amp;postID=5619086492421819258' title='1 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/5619086492421819258'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/5619086492421819258'/><link rel='alternate' type='text/html' href='http://rdbland.blogspot.com/2009/01/uninterconnect-rac-efficiente.html' title='Un&apos;interconnect RAC efficiente'/><author><name>Rudy</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://my.opera.com/hillrudy/homes/albums/16833/IMG_2787.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_r0EgR7__Fw0/SWDgCn59KSI/AAAAAAAAGu0/j3bJVxQssSA/s72-c/cablemess.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11965249.post-7006278559200652870</id><published>2008-12-21T12:22:00.001+01:00</published><updated>2008-12-21T12:25:30.149+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='analytics'/><category scheme='http://www.blogger.com/atom/ns#' term='ranking'/><title type='text'>Analytics - n.4: ranking</title><content type='html'>Stavolta ci occupiamo delle funzioni RANK e DENSE_RANK.&lt;br /&gt;&lt;br /&gt;Consideriamo ancora l'esempio dei maratoneti.&lt;br /&gt;All'arrivo possiamo fare la classifica generale, ordinando per tempo di arrivo e assegnando a ogni corridore un numero progressivo che parte da 1, ad esempio con ROWNUM. Prendo un sottoinsieme della mia tabella di esempio per semplicità:&lt;br /&gt;&lt;pre&gt;&lt;tt&gt;SQL&gt; select ri, at, rownum rn from&lt;br /&gt;  2  (select runner_id ri, arrival_time at&lt;br /&gt;  3  from marathon&lt;br /&gt;  4  where arrival_time between to_date('2008-06-19 13:01:00', 'YYYY-MM-DD HH24:MI:SS')&lt;br /&gt;  5  and to_date('2008-06-19 13:03:00', 'YYYY-MM-DD HH24:MI:SS') order by arrival_time)&lt;br /&gt;  6  ;&lt;br /&gt;&lt;br /&gt;        RI AT                          RN&lt;br /&gt;---------- ------------------- ----------&lt;br /&gt;      2015 2008-06-19 13:01:04          1&lt;br /&gt;      2293 2008-06-19 13:01:05          2&lt;br /&gt;      3895 2008-06-19 13:01:06          3&lt;br /&gt;      4931 2008-06-19 13:01:07          4&lt;br /&gt;      4810 2008-06-19 13:01:10          5&lt;br /&gt;      2747 2008-06-19 13:01:17          6&lt;br /&gt;       125 2008-06-19 13:01:19          7&lt;br /&gt;      1664 2008-06-19 13:01:20          8&lt;br /&gt;       632 2008-06-19 13:01:21          9&lt;br /&gt;       638 2008-06-19 13:01:23         10&lt;br /&gt;      2207 2008-06-19 13:01:31         11&lt;br /&gt;      4816 2008-06-19 13:01:32         12&lt;br /&gt;      3550 2008-06-19 13:01:33         13&lt;br /&gt;      3632 2008-06-19 13:01:33         14&lt;br /&gt;       309 2008-06-19 13:01:34         15&lt;br /&gt;      2254 2008-06-19 13:01:36         16&lt;br /&gt;      1671 2008-06-19 13:01:43         17&lt;br /&gt;      2068 2008-06-19 13:01:46         18&lt;br /&gt;      3167 2008-06-19 13:02:02         19&lt;br /&gt;      4269 2008-06-19 13:02:02         20&lt;br /&gt;      4962 2008-06-19 13:02:02         21&lt;br /&gt;      3921 2008-06-19 13:02:02         22&lt;br /&gt;      2298 2008-06-19 13:02:29         23&lt;br /&gt;      4933 2008-06-19 13:02:30         24&lt;br /&gt;      2093 2008-06-19 13:02:34         25&lt;br /&gt;      1528 2008-06-19 13:02:36         26&lt;br /&gt;      1779 2008-06-19 13:02:40         27&lt;br /&gt;      4313 2008-06-19 13:02:40         28&lt;br /&gt;      2547 2008-06-19 13:02:40         29&lt;br /&gt;      4482 2008-06-19 13:02:43         30&lt;br /&gt;      3667 2008-06-19 13:02:44         31&lt;br /&gt;      1117 2008-06-19 13:02:51         32&lt;br /&gt;      4393 2008-06-19 13:02:53         33&lt;br /&gt;       591 2008-06-19 13:02:55         34&lt;br /&gt;&lt;br /&gt;34 rows selected.&lt;/tt&gt;&lt;/pre&gt;&lt;br /&gt;Ma che cosa succede se due corridori hanno lo stesso tempo di arrivo (es. 13:02:02)? Bisogna assegnargli la posizione a parimerito. La funzione DENSE_RANK ci viene in aiuto (colonna DR):&lt;br /&gt;&lt;pre&gt;&lt;tt&gt;SQL&gt; select ri, at, rownum rn, dense_rank() over (order by at) dr from&lt;br /&gt;  2  (select runner_id ri, arrival_time at&lt;br /&gt;  3  from marathon&lt;br /&gt;  4  where arrival_time between to_date('2008-06-19 13:01:00', 'YYYY-MM-DD HH24:MI:SS')&lt;br /&gt;  5  and to_date('2008-06-19 13:03:00', 'YYYY-MM-DD HH24:MI:SS') order by arrival_time)&lt;br /&gt;  6  ;&lt;br /&gt;&lt;br /&gt;        RI AT                          RN         DR&lt;br /&gt;---------- ------------------- ---------- ----------&lt;br /&gt;      2015 2008-06-19 13:01:04          1          1&lt;br /&gt;      2293 2008-06-19 13:01:05          2          2&lt;br /&gt;      3895 2008-06-19 13:01:06          3          3&lt;br /&gt;      4931 2008-06-19 13:01:07          4          4&lt;br /&gt;      4810 2008-06-19 13:01:10          5          5&lt;br /&gt;      2747 2008-06-19 13:01:17          6          6&lt;br /&gt;       125 2008-06-19 13:01:19          7          7&lt;br /&gt;      1664 2008-06-19 13:01:20          8          8&lt;br /&gt;       632 2008-06-19 13:01:21          9          9&lt;br /&gt;       638 2008-06-19 13:01:23         10         10&lt;br /&gt;      2207 2008-06-19 13:01:31         11         11&lt;br /&gt;      4816 2008-06-19 13:01:32         12         12&lt;br /&gt;      3550 2008-06-19 13:01:33         13         13&lt;br /&gt;      3632 2008-06-19 13:01:33         14         13&lt;br /&gt;       309 2008-06-19 13:01:34         15         14&lt;br /&gt;      2254 2008-06-19 13:01:36         16         15&lt;br /&gt;      1671 2008-06-19 13:01:43         17         16&lt;br /&gt;      2068 2008-06-19 13:01:46         18         17&lt;br /&gt;      3167 2008-06-19 13:02:02         19         18&lt;br /&gt;      4269 2008-06-19 13:02:02         20         18&lt;br /&gt;      4962 2008-06-19 13:02:02         21         18&lt;br /&gt;      3921 2008-06-19 13:02:02         22         18&lt;br /&gt;      2298 2008-06-19 13:02:29         23         19&lt;br /&gt;      4933 2008-06-19 13:02:30         24         20&lt;br /&gt;      2093 2008-06-19 13:02:34         25         21&lt;br /&gt;      1528 2008-06-19 13:02:36         26         22&lt;br /&gt;      1779 2008-06-19 13:02:40         27         23&lt;br /&gt;      4313 2008-06-19 13:02:40         28         23&lt;br /&gt;      2547 2008-06-19 13:02:40         29         23&lt;br /&gt;      4482 2008-06-19 13:02:43         30         24&lt;br /&gt;      3667 2008-06-19 13:02:44         31         25&lt;br /&gt;      1117 2008-06-19 13:02:51         32         26&lt;br /&gt;      4393 2008-06-19 13:02:53         33         27&lt;br /&gt;       591 2008-06-19 13:02:55         34         28&lt;br /&gt;&lt;br /&gt;34 rows selected.&lt;/tt&gt;&lt;/pre&gt;&lt;br /&gt;Diverso sarebbe il caso in cui volessimo considerare l'ordine di arrivo, fatti salvi i corridori a parimerito: infatti quelli a parimerito sarebbero tutti nella stessa posizione, mentre il successivo avrebbe comunque la posizione assoluta (tipo ROWNUM) conservata (colonna R):&lt;br /&gt;&lt;pre&gt;&lt;tt&gt;SQL&gt; select ri, at, rownum rn, dense_rank() over (order by at) dr,&lt;br /&gt;  2  rank() over (order by at) r from&lt;br /&gt;  3  (select runner_id ri, arrival_time at&lt;br /&gt;  4  from marathon&lt;br /&gt;  5  where arrival_time between to_date('2008-06-19 13:01:00', 'YYYY-MM-DD HH24:MI:SS')&lt;br /&gt;  6  and to_date('2008-06-19 13:03:00', 'YYYY-MM-DD HH24:MI:SS') order by arrival_time)&lt;br /&gt;  7  ;&lt;br /&gt;&lt;br /&gt;        RI AT                          RN         DR          R&lt;br /&gt;---------- ------------------- ---------- ---------- ----------&lt;br /&gt;      2015 2008-06-19 13:01:04          1          1          1&lt;br /&gt;      2293 2008-06-19 13:01:05          2          2          2&lt;br /&gt;      3895 2008-06-19 13:01:06          3          3          3&lt;br /&gt;      4931 2008-06-19 13:01:07          4          4          4&lt;br /&gt;      4810 2008-06-19 13:01:10          5          5          5&lt;br /&gt;      2747 2008-06-19 13:01:17          6          6          6&lt;br /&gt;       125 2008-06-19 13:01:19          7          7          7&lt;br /&gt;      1664 2008-06-19 13:01:20          8          8          8&lt;br /&gt;       632 2008-06-19 13:01:21          9          9          9&lt;br /&gt;       638 2008-06-19 13:01:23         10         10         10&lt;br /&gt;      2207 2008-06-19 13:01:31         11         11         11&lt;br /&gt;      4816 2008-06-19 13:01:32         12         12         12&lt;br /&gt;      3550 2008-06-19 13:01:33         13         13         13&lt;br /&gt;      3632 2008-06-19 13:01:33         14         13         13&lt;br /&gt;       309 2008-06-19 13:01:34         15         14         15&lt;br /&gt;      2254 2008-06-19 13:01:36         16         15         16&lt;br /&gt;      1671 2008-06-19 13:01:43         17         16         17&lt;br /&gt;      2068 2008-06-19 13:01:46         18         17         18&lt;br /&gt;      3167 2008-06-19 13:02:02         19         18         19&lt;br /&gt;      4269 2008-06-19 13:02:02         20         18         19&lt;br /&gt;      4962 2008-06-19 13:02:02         21         18         19&lt;br /&gt;      3921 2008-06-19 13:02:02         22         18         19&lt;br /&gt;      2298 2008-06-19 13:02:29         23         19         23&lt;br /&gt;      4933 2008-06-19 13:02:30         24         20         24&lt;br /&gt;      2093 2008-06-19 13:02:34         25         21         25&lt;br /&gt;      1528 2008-06-19 13:02:36         26         22         26&lt;br /&gt;      1779 2008-06-19 13:02:40         27         23         27&lt;br /&gt;      4313 2008-06-19 13:02:40         28         23         27&lt;br /&gt;      2547 2008-06-19 13:02:40         29         23         27&lt;br /&gt;      4482 2008-06-19 13:02:43         30         24         30&lt;br /&gt;      3667 2008-06-19 13:02:44         31         25         31&lt;br /&gt;      1117 2008-06-19 13:02:51         32         26         32&lt;br /&gt;      4393 2008-06-19 13:02:53         33         27         33&lt;br /&gt;       591 2008-06-19 13:02:55         34         28         34&lt;br /&gt;&lt;br /&gt;34 rows selected.&lt;/tt&gt;&lt;/pre&gt;&lt;br /&gt;Un'altra funzione è ROW_NUMBER, che semplicemente assegna un valore crescente a partire da 1 alle righe della partizione, nulla più.&lt;br /&gt;In pratica potremmo sostituire la subquery più interna che fa l'ordinamento direttamente con ROW_NUMBER, senza utilizzare ROWNUM:&lt;br /&gt;&lt;pre&gt;&lt;tt&gt;SQL&gt; select runner_id ri, arrival_time at, row_number() over (order by arrival_time) rn&lt;br /&gt;  2  from marathon&lt;br /&gt;  3  where arrival_time between to_date('2008-06-19 13:01:00', 'YYYY-MM-DD HH24:MI:SS')&lt;br /&gt;  4  and to_date('2008-06-19 13:03:00', 'YYYY-MM-DD HH24:MI:SS') order by arrival_time;&lt;br /&gt;&lt;br /&gt;        RI AT                          RN&lt;br /&gt;---------- ------------------- ----------&lt;br /&gt;      2015 2008-06-19 13:01:04          1&lt;br /&gt;      2293 2008-06-19 13:01:05          2&lt;br /&gt;      3895 2008-06-19 13:01:06          3&lt;br /&gt;      4931 2008-06-19 13:01:07          4&lt;br /&gt;      4810 2008-06-19 13:01:10          5&lt;br /&gt;      2747 2008-06-19 13:01:17          6&lt;br /&gt;       125 2008-06-19 13:01:19          7&lt;br /&gt;      1664 2008-06-19 13:01:20          8&lt;br /&gt;       632 2008-06-19 13:01:21          9&lt;br /&gt;       638 2008-06-19 13:01:23         10&lt;br /&gt;      2207 2008-06-19 13:01:31         11&lt;br /&gt;      4816 2008-06-19 13:01:32         12&lt;br /&gt;      3550 2008-06-19 13:01:33         13&lt;br /&gt;      3632 2008-06-19 13:01:33         14&lt;br /&gt;       309 2008-06-19 13:01:34         15&lt;br /&gt;      2254 2008-06-19 13:01:36         16&lt;br /&gt;      1671 2008-06-19 13:01:43         17&lt;br /&gt;      2068 2008-06-19 13:01:46         18&lt;br /&gt;      3167 2008-06-19 13:02:02         19&lt;br /&gt;      4269 2008-06-19 13:02:02         20&lt;br /&gt;      4962 2008-06-19 13:02:02         21&lt;br /&gt;      3921 2008-06-19 13:02:02         22&lt;br /&gt;      2298 2008-06-19 13:02:29         23&lt;br /&gt;      4933 2008-06-19 13:02:30         24&lt;br /&gt;      2093 2008-06-19 13:02:34         25&lt;br /&gt;      1528 2008-06-19 13:02:36         26&lt;br /&gt;      1779 2008-06-19 13:02:40         27&lt;br /&gt;      4313 2008-06-19 13:02:40         28&lt;br /&gt;      2547 2008-06-19 13:02:40         29&lt;br /&gt;      4482 2008-06-19 13:02:43         30&lt;br /&gt;      3667 2008-06-19 13:02:44         31&lt;br /&gt;      1117 2008-06-19 13:02:51         32&lt;br /&gt;      4393 2008-06-19 13:02:53         33&lt;br /&gt;       591 2008-06-19 13:02:55         34&lt;br /&gt;&lt;br /&gt;34 rows selected.&lt;/tt&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11965249-7006278559200652870?l=rdbland.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rdbland.blogspot.com/feeds/7006278559200652870/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11965249&amp;postID=7006278559200652870' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/7006278559200652870'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/7006278559200652870'/><link rel='alternate' type='text/html' href='http://rdbland.blogspot.com/2008/12/analytics-n4-ranking.html' title='Analytics - n.4: ranking'/><author><name>Rudy</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://my.opera.com/hillrudy/homes/albums/16833/IMG_2787.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11965249.post-5973235733475433379</id><published>2008-12-02T14:10:00.000+01:00</published><updated>2008-12-02T14:10:15.972+01:00</updated><title type='text'>Indovinello con COUNT: soluzione</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_r0EgR7__Fw0/STOs9OgVXiI/AAAAAAAAGuE/scesarhtRAI/s1600-h/happy_homer.png"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 200px; height: 150px;" src="http://3.bp.blogspot.com/_r0EgR7__Fw0/STOs9OgVXiI/AAAAAAAAGuE/scesarhtRAI/s200/happy_homer.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5274749756446694946" /&gt;&lt;/a&gt;L'indovinello e la relativa soluzione derivano dal libro di Jonathan Lewis "Cost-based Oracle", di cui ho già parlato; libro peraltro a volte molto difficile, quasi sempre molto pesante, che però a volte riserva soprese e piccole grandi illuminazioni.&lt;br /&gt;Ho riscritto tutto in un modo che mi sembra più chiaro.&lt;br /&gt;&lt;br /&gt;Cominciamo a definire un vettore contenente tutte le età possibili da 1 a 36 anni:&lt;br /&gt;&lt;br /&gt;&lt;pre&gt;&lt;tt&gt;select&lt;br /&gt;  rownum age&lt;br /&gt;from&lt;br /&gt;  all_objects&lt;br /&gt;where&lt;br /&gt;  rownum &lt;= 36;&lt;/tt&gt;&lt;/pre&gt;&lt;br /&gt;Cominciamo a porre la prima condizione: il prodotto delle età è 36.&lt;br /&gt;Imponiamo anche, per comodità, la condizione che le età siano crescenti (age1 &lt;= age2 &lt;= age3), per evitare risultati simmetrici:&lt;br /&gt;&lt;pre&gt;&lt;tt&gt;with age_list as&lt;br /&gt;(&lt;br /&gt;select&lt;br /&gt;  rownum age&lt;br /&gt;from&lt;br /&gt;  all_objects&lt;br /&gt;where&lt;br /&gt;  rownum &lt;= 36&lt;br /&gt;)&lt;br /&gt;select&lt;br /&gt;  age1.age a1,&lt;br /&gt;  age2.age a2,&lt;br /&gt;  age3.age a3&lt;br /&gt;from&lt;br /&gt;  age_list age1,&lt;br /&gt;  age_list age2,&lt;br /&gt;  age_list age3&lt;br /&gt;where&lt;br /&gt;  age1.age &lt;= age2.age&lt;br /&gt;  and age2.age &lt;= age3.age&lt;br /&gt;  and age1.age * age2.age * age3.age = (select max(age) from age_list);&lt;/tt&gt;&lt;/pre&gt;&lt;br /&gt;Ora abbiamo tutte le età possibili:&lt;br /&gt;&lt;pre&gt;&lt;tt&gt; A1    A2       A3&lt;br /&gt;---------- ---------- ----------&lt;br /&gt;  1     1       36&lt;br /&gt;  2     2        9&lt;br /&gt;  1     2       18&lt;br /&gt;  3     3        4&lt;br /&gt;  2     3        6&lt;br /&gt;  1     3       12&lt;br /&gt;  1     4        9&lt;br /&gt;  1     6        6&lt;/tt&gt;&lt;/pre&gt;&lt;br /&gt;Ora sommiamo le età:&lt;br /&gt;&lt;pre&gt;&lt;tt&gt;with age_list as&lt;br /&gt;(&lt;br /&gt;select&lt;br /&gt;  rownum age&lt;br /&gt;from&lt;br /&gt;  all_objects&lt;br /&gt;where&lt;br /&gt;  rownum &lt;= 36&lt;br /&gt;),&lt;br /&gt;product_check as&lt;br /&gt;(&lt;br /&gt;select&lt;br /&gt;  age1.age a1,&lt;br /&gt;  age2.age a2,&lt;br /&gt;  age3.age a3&lt;br /&gt;from&lt;br /&gt;  age_list age1,&lt;br /&gt;  age_list age2,&lt;br /&gt;  age_list age3&lt;br /&gt;where&lt;br /&gt;  age1.age &lt;= age2.age&lt;br /&gt;  and age2.age &lt;= age3.age&lt;br /&gt;  and age1.age * age2.age * age3.age = (select max(age) from age_list)&lt;br /&gt;)&lt;br /&gt;select&lt;br /&gt;  a1,&lt;br /&gt;  a2,&lt;br /&gt;  a3,&lt;br /&gt;  a1+a2+a3 age_sum&lt;br /&gt;from product_check;&lt;br /&gt;&lt;br /&gt; A1    A2       A3    AGE_SUM&lt;br /&gt;---------- ---------- ---------- ----------&lt;br /&gt;  1     1       36  38&lt;br /&gt;  2     2        9  13&lt;br /&gt;  1     2       18  21&lt;br /&gt;  3     3        4  10&lt;br /&gt;  2     3        6  11&lt;br /&gt;  1     3       12  16&lt;br /&gt;  1     4        9  14&lt;br /&gt;  1     6        6  13&lt;br /&gt;&lt;/tt&gt;&lt;/pre&gt;&lt;br /&gt;Ora: il secondo DBA è ancora dubbioso anche sapendo la somma delle età, ottenuta contando le persone presenti nella stanza, quindi ci troviamo in un caso di ambiguità (somme uguali), che troviamo mediante la nostra funzione analitica :-)&lt;br /&gt;&lt;pre&gt;&lt;tt&gt;with age_list as&lt;br /&gt;(&lt;br /&gt;select&lt;br /&gt;  rownum age&lt;br /&gt;from&lt;br /&gt;  all_objects&lt;br /&gt;where&lt;br /&gt;  rownum &lt;= 36&lt;br /&gt;),&lt;br /&gt;product_check as&lt;br /&gt;(&lt;br /&gt;select&lt;br /&gt;  age1.age a1,&lt;br /&gt;  age2.age a2,&lt;br /&gt;  age3.age a3&lt;br /&gt;from&lt;br /&gt;  age_list age1,&lt;br /&gt;  age_list age2,&lt;br /&gt;  age_list age3&lt;br /&gt;where&lt;br /&gt;  age1.age &lt;= age2.age&lt;br /&gt;  and age2.age &lt;= age3.age&lt;br /&gt;  and age1.age * age2.age * age3.age = (select max(age) from age_list)&lt;br /&gt;),&lt;br /&gt;sum_check as&lt;br /&gt;(&lt;br /&gt;select&lt;br /&gt;  a1,&lt;br /&gt;  a2,&lt;br /&gt;  a3,&lt;br /&gt;  a1+a2+a3 age_sum&lt;br /&gt;from&lt;br /&gt;  product_check&lt;br /&gt;)&lt;br /&gt;select&lt;br /&gt;  a1,&lt;br /&gt;  a2,&lt;br /&gt;  a3,&lt;br /&gt;  count(*) over (partition by age_sum) c&lt;br /&gt;from&lt;br /&gt;  sum_check;&lt;br /&gt;&lt;br /&gt; A1    A2       A3   C&lt;br /&gt;---------- ---------- ---------- ----------&lt;br /&gt;  3     3        4   1&lt;br /&gt;  2     3        6   1&lt;br /&gt;  2     2        9   2&lt;br /&gt;  1     6        6   2&lt;br /&gt;  1     4        9   1&lt;br /&gt;  1     3       12   1&lt;br /&gt;  1     2       18   1&lt;br /&gt;  1     1       36   1&lt;br /&gt;&lt;/tt&gt;&lt;/pre&gt;&lt;br /&gt;I due casi sono 2, 2, 9 e 1, 6, 6, dove il conteggio delle somme uguali è maggiore di 1.&lt;br /&gt;L'ultimo indizio ci informa che &lt;span style="font-style:italic;"&gt;esiste una figlia maggiore&lt;/span&gt; (il criceto serve a confondere un po' le idee), il che ci permette di escludere che il caso 1, 6, 6 e di affermare quindi che le età sono 2, 2 e 9 anni.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11965249-5973235733475433379?l=rdbland.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rdbland.blogspot.com/feeds/5973235733475433379/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11965249&amp;postID=5973235733475433379' title='3 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/5973235733475433379'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/5973235733475433379'/><link rel='alternate' type='text/html' href='http://rdbland.blogspot.com/2008/12/indovinello-con-count-soluzione.html' title='Indovinello con COUNT: soluzione'/><author><name>Rudy</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://my.opera.com/hillrudy/homes/albums/16833/IMG_2787.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_r0EgR7__Fw0/STOs9OgVXiI/AAAAAAAAGuE/scesarhtRAI/s72-c/happy_homer.png' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11965249.post-9007291585427161339</id><published>2008-11-30T22:09:00.001+01:00</published><updated>2008-12-01T10:18:16.291+01:00</updated><title type='text'>Analytics - n.3: un indovinello con COUNT</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_r0EgR7__Fw0/STOrF7kY95I/AAAAAAAAGt8/qlvbhxvMHME/s1600-h/homer_thinking.png"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 96px; height: 96px;" src="http://1.bp.blogspot.com/_r0EgR7__Fw0/STOrF7kY95I/AAAAAAAAGt8/qlvbhxvMHME/s200/homer_thinking.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5274747706959001490" /&gt;&lt;/a&gt;Anche le funzioni classiche come COUNT, SUM, AVG hanno la loro controparte analitica.&lt;br /&gt;&lt;br /&gt;Oggi utilizziamo Oracle per risolvere un indovinello, utilizzando la versione analitica delle tradizionali funzioni di gruppo. Chi lo dice che tutte le spiegazioni devono per forza essere noiose? :-)&lt;br /&gt;&lt;br /&gt;Due DBA si incontrano all'Oracle Openworld. Il primo viene a sapere che il secondo ha 3 figlie, quindi gli chiede la loro età. Il secondo, in vena di enigmi, dice:&lt;br /&gt;"Il prodotto delle età delle mie figlie è 36."&lt;br /&gt;L'altro ragiona un attimo, ma chiede più informazioni, perché il solo prodotto delle età non gli basta.&lt;br /&gt;"La somma delle età delle mie figlie è uguale al numero di persone che stanno in questa stanza"&lt;br /&gt;L'altro conta le persone, ci pensa, ma i dati non gli bastano ancora, e chiede maggiori indizi.&lt;br /&gt;"La più grande delle mie figlie ha un criceto maculato".&lt;br /&gt;L'altro raggiunge un prompt SQL e, dopo pochi minuti, ha la soluzione!&lt;br /&gt;&lt;br /&gt;Come avrà fatto?&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Domani&lt;/span&gt; pubblicherò la soluzione.&lt;br /&gt;Mi raccomando &lt;span style="font-weight:bold;"&gt;non utilizzate Google&lt;/span&gt;, altrimenti non è leale (sempre che si riesca a trovare con Google).&lt;br /&gt;Pubblicate le vostre soluzioni nei commenti, a condizione che utilizziate SQL e le funzioni analitiche.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11965249-9007291585427161339?l=rdbland.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rdbland.blogspot.com/feeds/9007291585427161339/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11965249&amp;postID=9007291585427161339' title='6 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/9007291585427161339'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/9007291585427161339'/><link rel='alternate' type='text/html' href='http://rdbland.blogspot.com/2008/11/analytics-n3-un-indovinello-con-count.html' title='Analytics - n.3: un indovinello con COUNT'/><author><name>Rudy</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://my.opera.com/hillrudy/homes/albums/16833/IMG_2787.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_r0EgR7__Fw0/STOrF7kY95I/AAAAAAAAGt8/qlvbhxvMHME/s72-c/homer_thinking.png' height='72' width='72'/><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11965249.post-8433775787429390433</id><published>2008-11-23T22:08:00.000+01:00</published><updated>2008-11-24T15:56:43.622+01:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='zfs'/><category scheme='http://www.blogger.com/atom/ns#' term='virtualbox'/><category scheme='http://www.blogger.com/atom/ns#' term='solaris'/><title type='text'>Solaris sostituisce Linux a casa</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_r0EgR7__Fw0/SSU2X62R0XI/AAAAAAAAGmI/SWLr5ctBrFo/s1600-h/vbox_logo2_gradient.png"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 140px; height: 180px;" src="http://4.bp.blogspot.com/_r0EgR7__Fw0/SSU2X62R0XI/AAAAAAAAGmI/SWLr5ctBrFo/s200/vbox_logo2_gradient.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5270678723468841330" /&gt;&lt;/a&gt;Sono passato a &lt;span style="font-weight:bold;"&gt;Solaris&lt;/span&gt; per il mio megaserver casalingo. Complice la scarsa affidabilità del paio di dischi originali, sostituiti con una coppia da 320 GB nuova, mi sono trovato a provare la nuova splendida versione di Solaris (10/08) su x86/64.&lt;br /&gt;&lt;br /&gt;Con la nuova versione di Solaris è possibile avere il &lt;span style="font-weight:bold;"&gt;disco di root in mirror&lt;/span&gt; software, attraverso un pool ZFS. Non solo: il programma di installazione installa il boot-loader grub anche sul secondo disco, rendendo praticamente indifferente il disco da cui viene fatto il boot.&lt;br /&gt;ZFS infatti si basa su metadati registrati sui dischi; da ciò ne deriva che, anche facendo il boot dal secondo disco, ci si ritrova esattamente come se si fosse fatto il boot dal primo.&lt;br /&gt;Non ho ancora provato ma, quasi sicuramente, anche l'ordine dei dischi rispetto al BIOS e la loro posizione sul bus SATA sia del tutto indifferente.&lt;br /&gt;&lt;br /&gt;Con ZFS lo spazio dei dischi si sfrutta molto meglio, non essendoci spazi vuoti tra un filesystem e l'altro, quindi mi sento un po' meno "costretto" dallo spazio disponibile.&lt;br /&gt;ZFS inoltre ottimizza le letture da disco, utilizzando entrambi i dischi in parallelo come i migliori controller RAID, ottenendo quasi un raddoppio delle prestazioni. Anche in scrittura la velocità non manca, almeno da quanto ho potuto constatare. Pensavo infatti che la doppia scrittura fosse molto penalizzante, ma mi sono ricreduto; evidentemente ZFS fa la seconda scrittura in modo asincrono.&lt;br /&gt;&lt;br /&gt;Pochi giorni fa è uscito l'&lt;span style="font-weight:bold;"&gt;ultimo patchset 10g per Solaris x86/64&lt;/span&gt;, che ora fa bella mostra di sé nel nuovo server. Purtroppo per 11g si prevedono tempi più lunghi, sempre che non decidano (chissà) di trascurare Solaris su Intel.&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.virtualbox.org/"&gt;VirtualBox&lt;/a&gt;, il software di virtualizzazione open-source della Sun, funziona perfettamente, e per ora sto provando a creare nuove macchine virtuali Linux, per avere installazioni RAC di prova.&lt;br /&gt;&lt;br /&gt;ZFS esporta nativamente &lt;span style="font-weight:bold;"&gt;target iSCSI&lt;/span&gt; tramite &lt;span style="font-style:italic;"&gt;volumi ZFS&lt;/span&gt;, differenti dai &lt;span style="font-style:italic;"&gt;filesystem ZFS&lt;/span&gt;, quindi penso che i nuovi RAC virtuali avranno il loro storage condiviso via iSCSI. Non so invece se sono utilizzabili con RAC i volumi vboxfs condivisi, per i soliti problemi di sincronia dell'accesso ai dischi.&lt;br /&gt;&lt;br /&gt;Ho completato anche una installazione di &lt;a href="http://www.oracle.com/technology/products/xml-publisher/index.html"&gt;Oracle BI Publisher&lt;/a&gt; (per una demo) in modalità manuale, ovvero facendo uso del servlet engine di Sun, invece del nativo OC4J, non disponibile per la mia coppia CPU/OS.&lt;br /&gt;Ho utilizzato infatti &lt;a href="http://www.sun.com/software/products/web_srvr/index.xml"&gt;Sun Java System Web Server 7.0&lt;/a&gt;, molto interessante. Ovviamente l'installazione del web server è stata facilissima, come la sua gestione (se si conosce ciò che si sta facendo). In questi aspetti, il software enterprise è enormemente più piacevole da usare del software open-source.&lt;br /&gt;&lt;br /&gt;Ho fatto i primi passi anche con i Solaris &lt;span style="font-weight:bold;"&gt;Containers&lt;/span&gt;, che sono una specie di macchine virtuali uguali al sistema operativo ospite. Di questo parleremo più avanti.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11965249-8433775787429390433?l=rdbland.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rdbland.blogspot.com/feeds/8433775787429390433/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11965249&amp;postID=8433775787429390433' title='3 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/8433775787429390433'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/8433775787429390433'/><link rel='alternate' type='text/html' href='http://rdbland.blogspot.com/2008/11/solaris-sostituisce-linux-casa.html' title='Solaris sostituisce Linux a casa'/><author><name>Rudy</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://my.opera.com/hillrudy/homes/albums/16833/IMG_2787.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_r0EgR7__Fw0/SSU2X62R0XI/AAAAAAAAGmI/SWLr5ctBrFo/s72-c/vbox_logo2_gradient.png' height='72' width='72'/><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11965249.post-5556063249326766337</id><published>2008-11-19T22:30:00.000+01:00</published><updated>2008-11-19T22:30:28.578+01:00</updated><title type='text'>Oracle e SQL Server a confronto</title><content type='html'>Avendo avuto a che fare con un test di migrazione da Microsoft SQL Server a Oracle, mi si è aperto un mondo nuovo con l'utilizzo di &lt;a href="http://www.oracle.com/technology/tech/migration/workbench/index_sqldev_omwb.html"&gt;&lt;span style="font-style:italic;"&gt;SQL Developer Migration Workbench&lt;/span&gt;&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Nella &lt;a href="http://download.oracle.com/docs/cd/E12151_01/doc.150/e12156/ss_oracle_compared.htm#i1038519"&gt;documentazione HTML&lt;/a&gt; è presente un'interessante comparativa tra SQL Server e Oracle, molto istruttiva da qualsiasi punto di vista, anche per riassumere le caratteristiche principali dei due database.&lt;br /&gt;In particolare vengono sintetizzate le differenze per quanto riguarda i concetti di locking e di concorrenza.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11965249-5556063249326766337?l=rdbland.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://download.oracle.com/docs/cd/E12151_01/doc.150/e12156/ss_oracle_compared.htm#i1038519' title='Oracle e SQL Server a confronto'/><link rel='replies' type='application/atom+xml' href='http://rdbland.blogspot.com/feeds/5556063249326766337/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11965249&amp;postID=5556063249326766337' title='6 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/5556063249326766337'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/5556063249326766337'/><link rel='alternate' type='text/html' href='http://rdbland.blogspot.com/2008/11/oracle-e-sql-server-confronto.html' title='Oracle e SQL Server a confronto'/><author><name>Rudy</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://my.opera.com/hillrudy/homes/albums/16833/IMG_2787.JPG'/></author><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11965249.post-7665986080685495389</id><published>2008-11-04T21:47:00.000+01:00</published><updated>2008-11-05T09:10:06.672+01:00</updated><title type='text'>I servizi RAC anche su istanza singola</title><content type='html'>Una delle particolarità di Oracle RAC è la possibilità di definire i servizi, ovvero una sorta di modalità di connessione via rete al db avente caratteristiche definibili dall'utente.&lt;br /&gt;Se, per esempio, abbiamo un RAC da 3 nodi e volessimo che una nostra applicazione si collegasse solo ai nodi 2 e 3 del cluster, definiremmo un servizio che viene attivato solo sui nodi 2 e 3, in modo che le connessioni dirette al cluster vengano rimandate dai listener solo ai nodi su cui è attivo il servizio.&lt;br /&gt;Ci sono molti altri parametri di configurazione di un servizio, tra cui le istanze verso le quali viene rediretto il servizio nel caso di indisponibilità dei nodi attivi, timeout vari e quant'altro.&lt;br /&gt;&lt;br /&gt;È abbastanza interessante però che si possano definire i servizi anche per un database non RAC, composto da una sola istanza (esistono comunque anche i RAC single-instance).&lt;br /&gt;I servizi, nel caso istanza singola, si possono creare e gestire con &lt;span style="font-weight: bold;"&gt;DBMS_SERVICE&lt;/span&gt; e le sue procedure CREATE_SERVICE e START_SERVICE.&lt;br /&gt;CREATE_SERVICE prende come parametri il nome del servizio visto dal lato db e il nome visto dal lato listener, ovvero il famoso SERVICE_NAME all'interno dei &lt;span style="font-style:italic;"&gt;connect descriptor&lt;/span&gt; dei client.&lt;br /&gt;&lt;br /&gt;Ovviamente il &lt;span style="font-style: italic;"&gt;connection load-balancing&lt;/span&gt;, e i vari metodi di failover non hanno senso, ma è possibile trarre qualche vantaggio da questa architettura.&lt;br /&gt;Direi che i vantaggi possono essere un paio:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Se creo un servizio e gli utenti di un certo gruppo/applicazione si collegano a quel servizio, posso fermarlo per manutenzione quando mi pare e impedirgli di connettersi, mentre il db rimane aperto e gli altri utenti continuano a lavorare senza problemi.&lt;/li&gt;&lt;li&gt;Tramite la procedura DISCONNECT_SESSION posso disconnettere tutte e sole le sessioni collegate ad un determinato servizio con un solo comando, e a volte può essere veramente utile.&lt;/li&gt;&lt;/ol&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11965249-7665986080685495389?l=rdbland.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rdbland.blogspot.com/feeds/7665986080685495389/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11965249&amp;postID=7665986080685495389' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/7665986080685495389'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/7665986080685495389'/><link rel='alternate' type='text/html' href='http://rdbland.blogspot.com/2008/11/i-servizi-rac-anche-su-istanza-singola.html' title='I servizi RAC anche su istanza singola'/><author><name>Rudy</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://my.opera.com/hillrudy/homes/albums/16833/IMG_2787.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11965249.post-2975162942977091223</id><published>2008-10-18T14:19:00.000+02:00</published><updated>2008-10-18T15:21:56.183+02:00</updated><title type='text'>Backup "istantaneo" con Oracle e ZFS</title><content type='html'>Continuiamo la miniserie di post su ZFS, l'ottimo filesystem di Solaris e OpenSolaris.&lt;br /&gt;&lt;br /&gt;La proprietà di poter fare lo snapshot di un filesystem consente di utilizzare il backup a caldo del database via ALTER DATABASE BEGIN BACKUP con Oracle 10g.&lt;br /&gt;In Oracle 10g, infatti, è possibile mettere tutto il db in backup mode con un solo comando, invece di farlo singolarmente per ogni tablespace.&lt;br /&gt;&lt;br /&gt;Ecco il log di un backup effettuato a caldo con uno snapshot su una macchina Solaris 10:&lt;br /&gt;&lt;pre&gt;&lt;tt&gt;Connected to:&lt;br /&gt;Oracle Database 10g Release 10.2.0.4.0 - 64bit Production&lt;br /&gt;&lt;br /&gt;SQL&gt; set timing on&lt;br /&gt;SQL&gt; alter database begin backup;&lt;br /&gt;&lt;br /&gt;Database altered.&lt;br /&gt;&lt;br /&gt;Elapsed: 00:00:00.62&lt;br /&gt;&lt;br /&gt;SQL&gt; host sudo zfs destroy u01/oradata@`date +%A`&lt;br /&gt;cannot open 'u01/oradata@Thursday': dataset does not exist&lt;br /&gt;&lt;br /&gt;SQL&gt; host sudo zfs snapshot u01/oradata@`date +%A`&lt;br /&gt;&lt;br /&gt;SQL&gt; alter database end backup;&lt;br /&gt;&lt;br /&gt;Database altered.&lt;br /&gt;&lt;br /&gt;Elapsed: 00:00:00.44&lt;br /&gt;SQL&gt;&lt;br /&gt;&lt;/tt&gt;&lt;/pre&gt;&lt;br /&gt;Il tutto è durato &lt;span style="font-style:italic;"&gt;pochi secondi&lt;/span&gt;, e comunque la durata dello snapshot è &lt;span style="font-style:italic;"&gt;quasi indipendente dalle dimensioni del database&lt;/span&gt;.&lt;br /&gt;Lo snapshot è ora pronto su disco da copiare su un altro server. Questo è il passo che richiederà più tempo, ma il backup è praticamente già fatto.&lt;br /&gt;&lt;pre&gt;&lt;tt&gt;&lt;br /&gt;$ zfs list&lt;br /&gt;NAME                   USED  AVAIL  REFER  MOUNTPOINT&lt;br /&gt;u01                   17.2G  49.7G  80.6M  /u01&lt;br /&gt;u01/oradata           17.1G  49.7G  17.1G  /u01/oradata&lt;br /&gt;u01/oradata@Thursday   526K      -  17.1G  -&lt;br /&gt;u02                   16.9G  79.6G  14.3G  /u02&lt;br /&gt;u02/oradata           2.59G  79.6G  2.59G  /u02/oradata&lt;br /&gt;&lt;/tt&gt;&lt;/pre&gt;&lt;br /&gt;Per il trasferimento dello snapshot su nastro o su altri dischi o server si possono usare i comandi tradizionali, oppure "rigenerare" lo snapshot direttamente su un altro filesystem ZFS di un altro server via ssh con zfs send.&lt;br /&gt;Ma vi lascio scoprire questa magica e gustosa feature da soli per esercizio :-)&lt;br /&gt;&lt;br /&gt;Come è possibile tutto ciò?&lt;br /&gt;Come si può vedere lo snapshot, dopo qualche secondo dalla creazione, occupa circa 500 KB, e le sue dimensioni continuano a crescere.&lt;br /&gt;ZFS alloca lo spazio su disco in "record" (analoghi ai blocchi dei filesystem tradizionali), grandi di default 128 KB.&lt;br /&gt;In pratica ZFS fa in modo di tenere validi su disco i record appartenenti al filesystem al momento dello snapshot, occupando nuovo spazio per i blocchi che vengono modificati o aggiunti al filesystem originario. Il nuovo spazio allocato, man mano che passa il tempo, compare nella lista come occupazione dello snapshot. Ricorda il funzionamento degli snapshot LVM. Geniale.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11965249-2975162942977091223?l=rdbland.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rdbland.blogspot.com/feeds/2975162942977091223/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11965249&amp;postID=2975162942977091223' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/2975162942977091223'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/2975162942977091223'/><link rel='alternate' type='text/html' href='http://rdbland.blogspot.com/2008/10/backup-istantaneo-con-oracle-e-zfs.html' title='Backup &quot;istantaneo&quot; con Oracle e ZFS'/><author><name>Rudy</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://my.opera.com/hillrudy/homes/albums/16833/IMG_2787.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11965249.post-732689022688121446</id><published>2008-10-08T22:12:00.000+02:00</published><updated>2008-10-09T14:14:59.972+02:00</updated><title type='text'>RAC su macchine virtuali: ma ha senso?</title><content type='html'>Leggo volentieri da Techblast che &lt;a href="http://www.oracle.com/goto/newsletters/techblast/1008/rac_orcl_vm_env_pdf.html"&gt;Oracle ha certificato RAC su macchine virtuali Oracle VM&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Avere un cluster su macchine virtuali va un po' contro l'idea di alta affidabilità insita nel concetto di cluster.&lt;br /&gt;&lt;br /&gt;La parte interessante nel documento Oracle è ovviamente l'architettura. E le chicche non mancano.&lt;br /&gt;&lt;br /&gt;In sintesi l'architettura è spiegata dall'immagine seguente:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_r0EgR7__Fw0/SO3xoFruSLI/AAAAAAAAGZ0/im8Ik0th4L0/s1600-h/racvm1.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_r0EgR7__Fw0/SO3xoFruSLI/AAAAAAAAGZ0/im8Ik0th4L0/s400/racvm1.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5255122011233863858" /&gt;&lt;/a&gt;È evidente come la virtualizzazione venga utilizzata per ospitare più nodi virtuali (di cluster &lt;span style="font-style:italic;"&gt;diversi&lt;/span&gt;) su un solo server fisico, ma il meccanismo di alta affidabilità viene conservato poichè ogni nodo di uno stesso database cluster risiede su un server fisico diverso.&lt;br /&gt;&lt;br /&gt;Lo storage condiviso di RAC viene gestito in domain0:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_r0EgR7__Fw0/SO3xoevyHJI/AAAAAAAAGZ8/QhFgAREZ4sQ/s1600-h/racvm2.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_r0EgR7__Fw0/SO3xoevyHJI/AAAAAAAAGZ8/QhFgAREZ4sQ/s400/racvm2.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5255122017961778322" /&gt;&lt;/a&gt;Il multipathing viene utilizzato solamente sul percorso &lt;span style="font-style:italic;"&gt;fisico&lt;/span&gt; dei dati da e verso i dischi, non su quello virtuale da domain0 ai domini virtuali.&lt;br /&gt;&lt;br /&gt;Analogamente, le interfacce di rete sono in bond solo sulle porte fisiche, mentre i bridge virtuali di xenbr0 e xenbr1, sempre in domain0, sono rispettivamente la rete pubblica e la rete privata del RAC.&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_r0EgR7__Fw0/SO3xoaliVfI/AAAAAAAAGaE/HICiYVoA04k/s1600-h/racvm3.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_r0EgR7__Fw0/SO3xoaliVfI/AAAAAAAAGaE/HICiYVoA04k/s400/racvm3.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5255122016845059570" /&gt;&lt;/a&gt;Essendo le istanze del RAC su nodi fisici differenti, anche per la comunicazione su rete privata si passa da rete fisica; ciò non è necessario invece nel caso di nodi sullo stesso server, che comunicherebbero direttamente attraverso il bridge 1; ma questa non è assolutamente una configurazione ragionevole per un ambiente HA.&lt;br /&gt;&lt;br /&gt;Date le premesse del documento Oracle, sotto quest'ottica la soluzione RAC su macchine virtuali diventa tutt'altro che insensata in vari ambienti, soprattutto per consolidare server e sfruttare al massimo la potenza di elaborazione dei server attuali, facendo economia di scala.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11965249-732689022688121446?l=rdbland.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.oracle.com/goto/newsletters/techblast/1008/rac_orcl_vm_env_pdf.html' title='RAC su macchine virtuali: ma ha senso?'/><link rel='replies' type='application/atom+xml' href='http://rdbland.blogspot.com/feeds/732689022688121446/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11965249&amp;postID=732689022688121446' title='1 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/732689022688121446'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/732689022688121446'/><link rel='alternate' type='text/html' href='http://rdbland.blogspot.com/2008/10/rac-su-macchine-virtuali-ma-ha-senso.html' title='RAC su macchine virtuali: ma ha senso?'/><author><name>Rudy</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://my.opera.com/hillrudy/homes/albums/16833/IMG_2787.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_r0EgR7__Fw0/SO3xoFruSLI/AAAAAAAAGZ0/im8Ik0th4L0/s72-c/racvm1.png' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11965249.post-2693516555041622218</id><published>2008-09-25T22:47:00.000+02:00</published><updated>2008-09-25T22:47:48.512+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='analytics lead lag'/><title type='text'>Analytics - n.2: LEAD e LAG</title><content type='html'>LEAD e LAG sono funzioni analitiche che permettono di accedere al valore di un campo di un record del recordset risultato della nostra query, specificando l'&lt;span style="font-style:italic;"&gt;offset&lt;/span&gt; dal record in cui la funzione viene valutata.&lt;br /&gt;Nel caso di un offset che va fuori dal recordset, è possibile specificare un valore di default ritornato dalla funzione.&lt;br /&gt;&lt;br /&gt;Il punto essenziale, come per gran parte delle funzioni analitiche, è l'&lt;span style="font-weight:bold;"&gt;ordinamento&lt;/span&gt; del risultato: il valore dell'n-esima riga prima o dopo la riga corrente è dato proprio dell'"order by" specificato nel partizionamento del resultset.&lt;br /&gt;&lt;br /&gt;Prendiamo sempre l'esempio dei maratoneti che ho usato &lt;a href="http://rdbland.blogspot.com/2008/06/analytics-n1-ntile.html"&gt;in un post precedente&lt;/a&gt;.&lt;br /&gt;Mettiamo che io voglia conoscere la differenza di tempo in arrivo tra un corridore e il successivo, un po' come viene fatto alla fine di gare a tempo.&lt;br /&gt;Posso usare la funzione LAG con parametro 1 e computata ordinando la tabella per arrival_time:&lt;br /&gt;&lt;pre&gt;&lt;tt&gt; SELECT runner_id,&lt;br /&gt;  arrival_time   ,&lt;br /&gt;  extract(minute FROM&lt;br /&gt;(arrival_time - lag(arrival_time, 1, arrival_time) over (order by arrival_time)) DAY TO second)&lt;br /&gt;  ||''''&lt;br /&gt;  || extract(second FROM&lt;br /&gt;(arrival_time - lag(arrival_time, 1, arrival_time) over (order by arrival_time)) DAY TO second)&lt;br /&gt;  ||'"' time_diff&lt;br /&gt;   FROM marathon&lt;br /&gt;  WHERE rownum &lt; 10&lt;br /&gt;ORDER BY arrival_time;&lt;/tt&gt;&lt;/pre&gt;&lt;br /&gt;Nell'esempio prendo solo 10 righe per avere un po' di intervallo tra i tempi di arrivo e il risultato è il seguente:&lt;br /&gt;&lt;pre&gt;&lt;tt&gt; RUNNER_ID ARRIVAL_TIME        TIME_DIFF&lt;br /&gt;---------- ------------------- ----------------------------------------------------------------------------------&lt;br /&gt;      4038 2008-06-19 12:32:09 0'0"&lt;br /&gt;      3144 2008-06-19 12:44:10 12'1"&lt;br /&gt;       660 2008-06-19 12:51:40 7'30"&lt;br /&gt;      4450 2008-06-19 12:54:54 3'14"&lt;br /&gt;      2441 2008-06-19 12:58:28 3'34"&lt;br /&gt;       591 2008-06-19 13:02:55 4'27"&lt;br /&gt;      3825 2008-06-19 13:05:03 2'8"&lt;br /&gt;      3169 2008-06-19 13:11:21 6'18"&lt;br /&gt;      4036 2008-06-19 13:11:39 0'18"&lt;br /&gt;&lt;/tt&gt;&lt;/pre&gt;&lt;br /&gt;La funzionalità di LEAD è analoga a LAG, solo che va nel verso opposto, ovvero considera i record precedenti a quello in cui viene valutata.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11965249-2693516555041622218?l=rdbland.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rdbland.blogspot.com/feeds/2693516555041622218/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11965249&amp;postID=2693516555041622218' title='4 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/2693516555041622218'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/2693516555041622218'/><link rel='alternate' type='text/html' href='http://rdbland.blogspot.com/2008/09/analytics-n2-lead-e-lag.html' title='Analytics - n.2: LEAD e LAG'/><author><name>Rudy</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://my.opera.com/hillrudy/homes/albums/16833/IMG_2787.JPG'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11965249.post-678652522027811467</id><published>2008-09-21T11:35:00.004+02:00</published><updated>2008-09-21T12:08:55.158+02:00</updated><title type='text'>Oracle DBA Italia</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_r0EgR7__Fw0/SNYXDV9t9PI/AAAAAAAAGY8/kvVFMEieovo/s1600-h/oracle_dba_italia.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer;" src="http://3.bp.blogspot.com/_r0EgR7__Fw0/SNYXDV9t9PI/AAAAAAAAGY8/kvVFMEieovo/s200/oracle_dba_italia.jpg" alt="" id="BLOGGER_PHOTO_ID_5248407761949947122" border="0" /&gt;&lt;/a&gt;Tempo fa sul &lt;a href="http://cristiancudizio.wordpress.com/2008/07/15/comunita-oracle-in-italia/"&gt;blog di Cristian Cudizio&lt;/a&gt; si parlava di qualche iniziativa per riunire tutti i DBA Oracle italiani in una specie di network.&lt;br /&gt;Ho provato a pensare a qualche soluzione, e l'unica  che mi è venuta in mente è utilizzare Facebook.&lt;br /&gt;Ho deciso quindi di fare una prova: in pieno spirito Web 2.0, ho creato un &lt;a href="http://www.new.facebook.com/group.php?gid=27829800052"&gt;gruppo Facebook per tutti i DBA Oracle in Italia&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Invito tutti gli interessati ad iscriversi, prima di tutto a Facebook, se non fossero già iscritti.&lt;br /&gt;&lt;br /&gt;Per ora il gruppo è pubblico, quindi tutti possono iscriversi e utilizzare tutte le funzioni messe a disposizione da Facebook. Anche il contenuto delle pagine create dai membri rimane pubblico.&lt;br /&gt;&lt;br /&gt;Le funzioni sono le seguenti:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Discussioni&lt;/li&gt;&lt;li&gt;Bacheca&lt;/li&gt;&lt;li&gt;Foto&lt;/li&gt;&lt;li&gt;Video&lt;/li&gt;&lt;li&gt;Link utili&lt;/li&gt;&lt;li&gt;Eventi&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Ritengo che siano più che sufficienti per iniziare a interagire, scambiarsi informazioni che altrove (es. sui blog dei partecipanti) non trovano collocazione e, perché no, organizzare futuri incontri ed eventi.&lt;br /&gt;Non dimentichiamo che anche le aziende potrebbero essere molto interessate a noi!&lt;br /&gt;&lt;br /&gt;Forza quindi! Io per oggi ho contribuito con il logo. Sfogate la vostra voglia di comunicare!&lt;br /&gt;Attendo commenti, contributi, modifiche, critiche, segnali di vita...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11965249-678652522027811467?l=rdbland.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.new.facebook.com/group.php?gid=27829800052' title='Oracle DBA Italia'/><link rel='replies' type='application/atom+xml' href='http://rdbland.blogspot.com/feeds/678652522027811467/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11965249&amp;postID=678652522027811467' title='2 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/678652522027811467'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/678652522027811467'/><link rel='alternate' type='text/html' href='http://rdbland.blogspot.com/2008/09/oracle-dba-italia.html' title='Oracle DBA Italia'/><author><name>Rudy</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://my.opera.com/hillrudy/homes/albums/16833/IMG_2787.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_r0EgR7__Fw0/SNYXDV9t9PI/AAAAAAAAGY8/kvVFMEieovo/s72-c/oracle_dba_italia.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11965249.post-2853343222476917349</id><published>2008-08-25T19:20:00.005+02:00</published><updated>2008-08-25T22:24:42.800+02:00</updated><title type='text'>Dischi, burro e marmellata</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_r0EgR7__Fw0/SLMS7cOmozI/AAAAAAAAEvU/TcR_pwCe7DQ/s1600-h/bread_and_butter.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://1.bp.blogspot.com/_r0EgR7__Fw0/SLMS7cOmozI/AAAAAAAAEvU/TcR_pwCe7DQ/s200/bread_and_butter.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5238551603961045810" /&gt;&lt;/a&gt;Sono quantomai sorpreso dell'apprendere, sull'ultimo numero dell'ottimo &lt;span style="font-style:italic;"&gt;Oracle Magazine&lt;/span&gt;, che Oracle ha avviato pochi mesi fa un progetto open source per un nuovo potente filesystem.&lt;br /&gt;&lt;br /&gt;La grande sorpresa consiste nel fatto che tale &lt;a href="http://btrfs.wiki.kernel.org/index.php/Main_Page"&gt;BTRFS&lt;/a&gt; dove, viene precisato, btr si pronuncia &lt;span style="font-style:italic;"&gt;butter&lt;/span&gt;, ricalca fedelmente l'interessantissimo &lt;a href="http://en.wikipedia.org/wiki/ZFS"&gt;ZFS&lt;/a&gt; di Sun, disponibile già da tempo nella famiglia di sistemi operativi Solaris.&lt;br /&gt;&lt;br /&gt;Avevo intenzione di fare un post solo su ZFS per le sue rivoluzionarie caratteristiche, ovviamente dal punto di vista Oracle, anche per il fatto che ci sto lavorando abbastanza intensamente e ne ho potuto apprezzare le ottime funzionalità.&lt;br /&gt;&lt;br /&gt;A questo punto cominciamo da ZFS. La migliore definizione che mi viene in mente è che ZFS è un filesystem e volume manager integrati, con possibilità di snapshot stile LVM e possibilità di replica anche incrementale.&lt;br /&gt;&lt;br /&gt;Un'importantissima caratteristica di ZFS è che è un filesystem &lt;span style="font-style:italic;"&gt;copy-on-write&lt;/span&gt; (COW): ciò significa che tutte le modifiche ai dati vengono scritte su disco in nuove allocazioni, lasciando integra su disco la precedente versione dei dati. Ciò è da tenere ben presente per un DBA poichè, col passare del tempo, i dati tendono a venire sparpagliati sul disco, aumentando quindi il tempo d'accesso specie per le letture di dati in sequenza; si pensi ad esempio all'utilità del &lt;span style="font-style:italic;"&gt;db_file_multiblock_read_count&lt;/span&gt; di Oracle, anche se è ormai quasi obsoleto.&lt;br /&gt;&lt;br /&gt;ZFS è anche un volume manager, ovvero può prendere in gestione più dischi e comporre &lt;span style="font-style:italic;"&gt;zpool&lt;/span&gt; più grandi, in cui gestisce automaticamente lo striping; oppure può garantire livelli di tolleranza ai guasti come il mirroring e il &lt;span style="font-weight:bold;"&gt;RAIDZ&lt;/span&gt;, una modalità che somiglia molto al RAID5 o addirittura RAID6 con due dischi di "parità".&lt;br /&gt;&lt;br /&gt;Il COW diventa meno importante man mano che il numero dei dischi a disposizione aumenta, poiché lo striping riduce naturalmente il raggruppamento dei dati in blocchi contigui su disco.&lt;br /&gt;&lt;br /&gt;ZFS è un filesystem &lt;span style="font-style:italic;"&gt;transazionale&lt;/span&gt;, ovvero le modifiche ai dati o avvengono in blocco o non avvengono; ciò, unito al COW, consente di fare a meno del journal, caratteristica di punta di filesystem avanzati come ReiserFS o ext3.&lt;br /&gt;&lt;br /&gt;Con ZFS si possono anche fare snapshot consistenti istantanei dei filesystem, direttamente accessibili sul filesystem stesso, quindi copiabili e salvabili. Ciò rende possibile un hot-backup con il comando 10g ALTER DATABASE BEGIN BACKUP, come potrebbe avvenire con storage molto più costosi.&lt;br /&gt;&lt;br /&gt;Da un punto di vista amministrativo ZFS è &lt;span style="font-style:italic;"&gt;troppo semplice per essere vero&lt;/span&gt;: consente in pochi e semplicissimi comandi di sintetizzare numerose operazioni di amministrazione del sistema. E non solo, offre un supporto nativo a iSCSI e NFS senza toccare alcun file di configurazione.&lt;br /&gt;&lt;br /&gt;Torniamo a BTRFS: le caratteristiche sul sito Wiki sembrano proprio ricalcare quelle di ZFS, che è anch'esso open-source. Ma allora perché non integrarlo nel kernel Linux?&lt;br /&gt;Il &lt;a href="http://www.oneopensource.it/31/07/2008/zfs-su-linux-forse-ma-solo-in-lettura/"&gt;problema sta nella licenza&lt;/a&gt;, che non è GPL (e sembra che Sun abbia fatto apposta).&lt;br /&gt;&lt;br /&gt;La mia sensazione però è che alla fine non se ne faccia un granché, visto che ZFS è già in produzione avanzata sotto Solaris, mentre BTRFS è all'inizio dello sviluppo.&lt;br /&gt;&lt;br /&gt;Tornerò sul tema ZFS per dirvi degli interessanti documenti in rete sui database e dei risultati delle mie prove.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11965249-2853343222476917349?l=rdbland.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://btrfs.wiki.kernel.org/index.php/Main_Page' title='Dischi, burro e marmellata'/><link rel='replies' type='application/atom+xml' href='http://rdbland.blogspot.com/feeds/2853343222476917349/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11965249&amp;postID=2853343222476917349' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/2853343222476917349'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/2853343222476917349'/><link rel='alternate' type='text/html' href='http://rdbland.blogspot.com/2008/08/dischi-burro-e-marmellata.html' title='Dischi, burro e marmellata'/><author><name>Rudy</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://my.opera.com/hillrudy/homes/albums/16833/IMG_2787.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_r0EgR7__Fw0/SLMS7cOmozI/AAAAAAAAEvU/TcR_pwCe7DQ/s72-c/bread_and_butter.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11965249.post-8217649225867577549</id><published>2008-08-14T10:26:00.004+02:00</published><updated>2008-08-14T10:36:20.006+02:00</updated><title type='text'>Oracle 11g su OpenSuSE 11</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_r0EgR7__Fw0/SKPuRLecnFI/AAAAAAAAEvE/ORTc7H22lBg/s1600-h/opensuse_logo.png"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_r0EgR7__Fw0/SKPuRLecnFI/AAAAAAAAEvE/ORTc7H22lBg/s200/opensuse_logo.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5234289170840329298" /&gt;&lt;/a&gt;Visto che uno dei due dischi del mio megaserver di casa ha deciso, bontà sua, di rimettersi a  funzionare, sono riuscito a fare vari esperimenti di cui vi parlerò, tra cui la prova di installazione di Oracle 11g su OpenSuSE 11.&lt;br /&gt;&lt;br /&gt;L'installazione è andata molto bene e senza alcun errore, quindi la piattaforma preferenziale per le mie prossime installazioni di prova 11g sarà sicuramente OpenSuSE 11.&lt;br /&gt;&lt;br /&gt;L'unica variazione nella configurazione, rispetto a quella di default, è l'aggiunta delle componenti di sviluppo C/C++ durante l'installazione, e un package libstdc++-devel che ho aggiunto io per precauzione.&lt;br /&gt;&lt;br /&gt;Il vantaggio maggiore di utilizzare una distribuzione Linux non supportata da Oracle è di avere un sistema operativo completamente aggiornato, e in modo gratuito. Per noi che smanettiamo spesso con questo genere di software sarebbe bello che tutto ciò che dobbiamo installare sia liberamente utilizzabile per fini di ricerca.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11965249-8217649225867577549?l=rdbland.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rdbland.blogspot.com/feeds/8217649225867577549/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11965249&amp;postID=8217649225867577549' title='2 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/8217649225867577549'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/8217649225867577549'/><link rel='alternate' type='text/html' href='http://rdbland.blogspot.com/2008/08/oracle-11g-su-opensuse-11.html' title='Oracle 11g su OpenSuSE 11'/><author><name>Rudy</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://my.opera.com/hillrudy/homes/albums/16833/IMG_2787.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_r0EgR7__Fw0/SKPuRLecnFI/AAAAAAAAEvE/ORTc7H22lBg/s72-c/opensuse_logo.png' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11965249.post-6845517991845152894</id><published>2008-07-12T11:50:00.000+02:00</published><updated>2008-07-13T11:23:48.630+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='asm'/><title type='text'>ASM a linea di comando</title><content type='html'>Ogni tanto arriva qualche e-mail dai lettori di questo blog. La maggior parte delle domande riguarda ASM, il volume manager/filesystem di Oracle dedicato all'immagazzinamento dei dati del suo motore RDBMS.&lt;br /&gt;&lt;br /&gt;Forse non tutti sanno che ASM è accessibile anche da linea di comando con &lt;span style="font-weight:bold;"&gt;asmcmd&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;asmcmd è sostanzialmente un prompt dei comandi che si collega all'istanza ASM attiva sulla $ORACLE_HOME impostata nell'ambiente, con il relativo $ORACLE_SID impostato a +ASM o +ASM&amp;lt;n&amp;gt; nel caso di RAC.&lt;br /&gt;&lt;br /&gt;Eseguiamo asmcmd:&lt;br /&gt;&lt;pre&gt;&lt;tt&gt;oracle@host:~&gt; asmcmd -p&lt;br /&gt;ASMCMD [+] &gt;&lt;/tt&gt;&lt;/pre&gt;&lt;br /&gt;Il flag -p permette di mostrare il path tra parentesi quadre.&lt;br /&gt;I comandi disponibili sono: cd, du, find, help, ls, lsct, lsdg, mkalias, mkdir, pwd, rm, rmalias.&lt;br /&gt;Per ogni comando si può avere l'help con &lt;span style="font-weight:bold;"&gt;help &amp;lt;comando&amp;gt;&lt;/span&gt;.&lt;br /&gt;All'avvio troviamo l'elenco dei diskgroup montati dall'istanza ASM e in seguito i database montati in notazione OMF:&lt;br /&gt;&lt;pre&gt;&lt;tt&gt;ASMCMD [+] &gt; ls&lt;br /&gt;DG1/&lt;br /&gt;ASMCMD [+] &gt; ls&lt;br /&gt;ASMCMD [+] &gt; cd DG1&lt;br /&gt;ASMCMD [+DG1] &gt; ls&lt;br /&gt;DBTEST/&lt;br /&gt;ASMCMD [+DG1] &gt;&lt;/tt&gt;&lt;/pre&gt;&lt;br /&gt;All'interno delle directory DB troveremo le sottodirectory in notazione OMF come su filesystem ordinario:&lt;br /&gt;&lt;pre&gt;&lt;tt&gt;ASMCMD [+DG1/DBTEST] &gt; ls&lt;br /&gt;ARCHIVELOG/&lt;br /&gt;CONTROLFILE/&lt;br /&gt;DATAFILE/&lt;br /&gt;ONLINELOG/&lt;br /&gt;PARAMETERFILE/&lt;br /&gt;TEMPFILE/&lt;br /&gt;spfileDBTEST.ora&lt;br /&gt;ASMCMD [+DG1/DBTEST] &gt;&lt;/tt&gt;&lt;/pre&gt;&lt;br /&gt;Il comando &lt;span style="font-weight:bold;"&gt;du&lt;/span&gt; mostra l'utilizzo del diskgroup:&lt;br /&gt;&lt;pre&gt;&lt;tt&gt;ASMCMD [+DG1/DBTEST] &gt; du .  &lt;br /&gt;Used_MB      Mirror_used_MB&lt;br /&gt;  24529               24529&lt;br /&gt;&lt;/tt&gt;&lt;/pre&gt;&lt;br /&gt;Il comando &lt;span style="font-weight:bold;"&gt;lsdg&lt;/span&gt; mostra tutti i diskgroup:&lt;br /&gt;&lt;pre&gt;&lt;tt&gt;ASMCMD [+] &gt; lsdg&lt;br /&gt;State    Type    Rebal  Unbal  &lt;br /&gt;Sector  Block       AU  Total_MB  &lt;br /&gt;Free_MB  Req_mir_free_MB  Usable_file_MB  &lt;br /&gt;Offline_disks  Name&lt;br /&gt;MOUNTED  EXTERN  N      N    &lt;br /&gt;   512   4096  1048576    347430  &lt;br /&gt; 322841                0          322841  &lt;br /&gt;            0  DG1/&lt;/tt&gt;&lt;/pre&gt;&lt;br /&gt;&lt;br /&gt;Contrariamente a un filesystem normale, esistono i comandi per creare e rimuovere alias &lt;span style="font-weight:bold;"&gt;mkalias&lt;/span&gt; e &lt;span style="font-weight:bold;"&gt;rmalias&lt;/span&gt;.&lt;br /&gt;Gli alias in ASM sono file finti nel filesystem che puntano a file normali che risiedono sempre in ASM; possono essere visti come link simbolici. Ricordiamo infatti che &lt;span style="font-weight:bold;"&gt;ogni file in un volume ASM è un file OMF&lt;/span&gt;, ovvero è un file del database Oracle (controlfile, datafile, redo, e così via) con un nome scelto dal RDBMS, ma non un file ordinario. Per ogni file del db, quindi, esiste uno e un solo file OMF con il nome scelto da Oracle. Per avere file con nomi più leggibili o facili da ricordare si usano gli alias, a cui si può fare riferimento con i comandi DDL da prompt SQL al posto dei file OMF. Gli alias possono risiedere ovunque in ASM.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11965249-6845517991845152894?l=rdbland.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rdbland.blogspot.com/feeds/6845517991845152894/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11965249&amp;postID=6845517991845152894' title='5 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/6845517991845152894'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/6845517991845152894'/><link rel='alternate' type='text/html' href='http://rdbland.blogspot.com/2008/07/asm-linea-di-comando.html' title='ASM a linea di comando'/><author><name>Rudy</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://my.opera.com/hillrudy/homes/albums/16833/IMG_2787.JPG'/></author><thr:total>5</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11965249.post-5511997348150457548</id><published>2008-07-03T22:11:00.001+02:00</published><updated>2008-07-04T11:16:49.196+02:00</updated><title type='text'>Vantaggi del sampling dinamico</title><content type='html'>Ho recentemente letto un curioso &lt;a href="http://www.oracle.com/technology/oramag/oracle/08-may/o38asktom.html"&gt;aricolo di Tom Kyte su Oracle Magazine&lt;/a&gt; sul &lt;span style="font-style:italic;"&gt;dynamic sampling&lt;/span&gt; e i suoi vantaggi rispetto alle statistiche usate dal &lt;span style="font-style:italic;"&gt;cost-based optimizer&lt;/span&gt; (CBO) in alcuni casi particolari.&lt;br /&gt;&lt;br /&gt;La prima parte dell'articolo parla di V$SQL ed è molto interessante. Qui mi occupo della seconda parte, ovvero della cardinalità nel piano di esecuzione a seconda che venga usato il CBO o il sampling dinamico.&lt;br /&gt;&lt;br /&gt;Nell'articolo si fa l'esempio di una tabella in cui due colonne (X e Y) hanno 12 valori distinti distribuiti uniformemente tra le righe, per cui una query del tipo&lt;br /&gt;&lt;pre&gt;&lt;tt&gt;SELECT * FROM T WHERE X=5;&lt;/tt&gt;&lt;/pre&gt;&lt;br /&gt;restituisce 1/12 delle righe, mentre&lt;br /&gt;&lt;pre&gt;&lt;tt&gt;SELECT * FROM T WHERE X=5 AND Y=6;&lt;/tt&gt;&lt;/pre&gt;&lt;br /&gt;restituisce 1/144 delle righe (1/12 * 1/12).&lt;br /&gt;O almeno, questa è la selettività che si ottiene dalle statistiche sulla tabella.&lt;br /&gt;&lt;br /&gt;Ma che cosa accade se X=Y per ogni riga? Una query come&lt;br /&gt;&lt;pre&gt;&lt;tt&gt;SELECT * FROM T WHERE X=5 AND Y=6;&lt;/tt&gt;&lt;/pre&gt;&lt;br /&gt;ritornerebbe 0 righe, quindi la stima del CBO sarebbe errata (introducendo eventuali piani di esecuzione sballati).&lt;br /&gt;&lt;br /&gt;Utilizzando il sampling dinamico:&lt;br /&gt;&lt;pre&gt;&lt;tt&gt;select /*+ dynamic_sampling(t 3) */ * from t&lt;/tt&gt;&lt;/pre&gt;&lt;br /&gt;si ottiene invece il costo corretto, molto più basso, e quindi anche il piano corretto.&lt;br /&gt;&lt;br /&gt;Il sampling dinamico è regolabile a vari livelli, espressi dal numero che segue il nome della tabella nell'hint all'optimizer. Il valore minimo del sampling è &lt;span style="font-weight:bold;"&gt;32 blocchi&lt;/span&gt; con n=1; per i livelli da 1 a 9 vale la formula 32*2^(l-1) blocchi dove l è il livello di sampling. Nel nostro caso di n=3 si ha un sampling di 4*32=128 blocchi, per cui quasi certamente l'optimizer ha letto &lt;span style="font-style:italic;"&gt;l'intera tabella&lt;/span&gt;. Per questo motivo il costo finale è molto preciso. Se il livello è 0 non si ha sampling, se è 10 il sampling viene fatto su &lt;span style="font-weight:bold;"&gt;tutti&lt;/span&gt; i blocchi della tabella (quindi può risultare mooolto lento).&lt;br /&gt;&lt;br /&gt;Il dynamic sampling è quindi una possibilità in più utilizzabile nei casi in cui il CBO ci fornisce piani di esecuzione subottimali.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11965249-5511997348150457548?l=rdbland.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.oracle.com/technology/oramag/oracle/08-may/o38asktom.html' title='Vantaggi del sampling dinamico'/><link rel='replies' type='application/atom+xml' href='http://rdbland.blogspot.com/feeds/5511997348150457548/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11965249&amp;postID=5511997348150457548' title='1 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/5511997348150457548'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/5511997348150457548'/><link rel='alternate' type='text/html' href='http://rdbland.blogspot.com/2008/07/vantaggi-del-sampling-dinamico.html' title='Vantaggi del sampling dinamico'/><author><name>Rudy</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://my.opera.com/hillrudy/homes/albums/16833/IMG_2787.JPG'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11965249.post-7426982109656681460</id><published>2008-07-03T21:40:00.001+02:00</published><updated>2008-07-04T08:55:03.822+02:00</updated><title type='text'>OCA 10g solo con esame SQL</title><content type='html'>Dal 28 novembre 2008 verrà richiesto un esame SQL per ottenere la certificazione OCA 10g, contrariamente a quanto è successo fin'ora, da quando fu introdotta la certificazione di base 10g.&lt;br /&gt;&lt;br /&gt;Vedo con piacere che il buon vecchio 1Z0-007 (SQL 9i) torna in auge.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11965249-7426982109656681460?l=rdbland.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.oracle.com/education/global_eblasts/landingpage-june08.html#db3' title='OCA 10g solo con esame SQL'/><link rel='replies' type='application/atom+xml' href='http://rdbland.blogspot.com/feeds/7426982109656681460/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11965249&amp;postID=7426982109656681460' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/7426982109656681460'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/7426982109656681460'/><link rel='alternate' type='text/html' href='http://rdbland.blogspot.com/2008/07/oca-10g-solo-con-esame-sql.html' title='OCA 10g solo con esame SQL'/><author><name>Rudy</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://my.opera.com/hillrudy/homes/albums/16833/IMG_2787.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11965249.post-5955708741111337261</id><published>2008-06-23T22:06:00.001+02:00</published><updated>2008-06-24T08:42:41.803+02:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='analytics'/><title type='text'>Analytics - n.1: NTILE</title><content type='html'>Con questo post inauguro la serie "Analytics", ovvero come utilizzare le potenti funzioni analitiche di Oracle 10g.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;NTILE&lt;/span&gt; è una funzione che permette di ottenere il numero corrente di partizione dei dati, basandosi su un criterio di partizione determinato nella query.&lt;br /&gt;&lt;br /&gt;Facciamo subito un esempio: ho una tabella che contiene i tempi di arrivo di una maratona con tanti partecipanti, diciamo 5000. Di questi, 1000 sono arrivati al traguardo, mentre gli altri si sono persi per strada.&lt;br /&gt;La tabella contiene un ID univoco del corridore e il suo tempo di arrivo.&lt;br /&gt;&lt;br /&gt;Supponiamo che io voglia dividere l'insieme degli "arrivati" in &lt;span style="font-weight:bold;"&gt;n&lt;/span&gt; gruppi omogenei, cioè aventi lo stesso numero di componenti.&lt;br /&gt;Gli ID, anche se generati con una sequenza, sono distribuiti casualmente, dato che solo 1/5 dei corridori è arrivato alla fine; lo stesso vale per i tempi di arrivo.&lt;br /&gt;&lt;br /&gt;La funzione NTILE ci permette di dividere il nostro set di dati in partizioni uguali, assegnando ad ogni riga il numero di partizione in cui si trova. Il criterio per trovarsi in una partizione o in un'altra è il tempo di arrivo in ordine crescente.&lt;br /&gt;&lt;br /&gt;Dividiamoli ad esempio in 10 gruppi:&lt;br /&gt;&lt;pre&gt;&lt;tt&gt;SQL&gt; select * from marathon;&lt;br /&gt;&lt;br /&gt; RUNNER_ID ARRIVAL_TIME                                                                                                                                       &lt;br /&gt;---------- -------------------                                                                                                                                &lt;br /&gt;        93 2008-06-19 13:11:39                                                                                                                                &lt;br /&gt;      3144 2008-06-19 12:44:10                                                                                                                                &lt;br /&gt;      4450 2008-06-19 12:54:54                                                                                                                                &lt;br /&gt;       453 2008-06-19 12:52:58                                                                                                                                &lt;br /&gt;       808 2008-06-19 12:48:00                                                                                                                                &lt;br /&gt;      4036 2008-06-19 13:11:39                                                                                                                                &lt;br /&gt;      4048 2008-06-19 13:06:48                                                                                                                                &lt;br /&gt;       660 2008-06-19 12:51:40                                                                                                                                &lt;br /&gt;      4091 2008-06-19 13:12:38                                                                                                                                &lt;br /&gt;       591 2008-06-19 13:02:55                                                                                                                                &lt;br /&gt;[...]&lt;/tt&gt;&lt;/pre&gt;&lt;br /&gt;Con la query seguente otteniamo la divisione in gruppi:&lt;br /&gt;&lt;pre&gt;&lt;tt&gt;SQL&gt; select runner_id, arrival_time, ntile(10) over (order by arrival_time) nt from marathon;&lt;/tt&gt;&lt;/pre&gt;&lt;br /&gt;Come si può vedere, ci sono esattamente 100 corridori in ogni gruppo:&lt;br /&gt;&lt;pre&gt;&lt;tt&gt;SQL&gt; select nt, count(*) from&lt;br /&gt;(select runner_id, arrival_time,&lt;br /&gt;ntile(10) over (order by arrival_time) nt from marathon)&lt;br /&gt;group by nt order by nt;&lt;br /&gt;&lt;br /&gt;        NT   COUNT(*)                                                                                                                                         &lt;br /&gt;---------- ----------                                                                                                                                         &lt;br /&gt;         1        100                                                                                                                                         &lt;br /&gt;         2        100                                                                                                                                         &lt;br /&gt;         3        100                                                                                                                                         &lt;br /&gt;         4        100                                                                                                                                         &lt;br /&gt;         5        100                                                                                                                                         &lt;br /&gt;         6        100                                                                                                                                         &lt;br /&gt;         7        100                                                                                                                                         &lt;br /&gt;         8        100                                                                                                                                         &lt;br /&gt;         9        100                                                                                                                                         &lt;br /&gt;        10        100                                                                                                                                         &lt;br /&gt;&lt;br /&gt;10 rows selected.&lt;/tt&gt;&lt;/pre&gt;&lt;br /&gt;Possiamo anche calcolare l'ntile su una &lt;span style="font-style:italic;"&gt;partizione&lt;/span&gt; dei dati originari: immaginiamo per esempio che ai corridori siano state assegnate delle pettorine colorate di rosso se il loro id era tra 1 e 1000, verde se tra 1001 e 2000, blu se maggiore di 2000, divisi quindi per categoria.&lt;br /&gt;Una query come la seguente divide in dieci sottogruppi ogni categoria, basandosi sempre sul tempo di arrivo:&lt;br /&gt;&lt;pre&gt;&lt;tt&gt;SQL&gt; select runner_id, arrival_time, color,&lt;br /&gt;ntile(10) over (partition by color order by arrival_time) from marathon;&lt;br /&gt;&lt;/tt&gt;&lt;/pre&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11965249-5955708741111337261?l=rdbland.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rdbland.blogspot.com/feeds/5955708741111337261/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11965249&amp;postID=5955708741111337261' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/5955708741111337261'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/5955708741111337261'/><link rel='alternate' type='text/html' href='http://rdbland.blogspot.com/2008/06/analytics-n1-ntile.html' title='Analytics - n.1: NTILE'/><author><name>Rudy</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://my.opera.com/hillrudy/homes/albums/16833/IMG_2787.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11965249.post-5568207626331108843</id><published>2008-06-02T11:00:00.001+02:00</published><updated>2008-06-02T11:39:06.043+02:00</updated><title type='text'>ROWSCN, una soluzione ai lost update</title><content type='html'>Per le applicazioni web-based l'aggiornamento di una serie di record nel database presenta problemi diversi da quelli delle applicazioni tradizionali client-server, che di solito utilizzano il metodo "SELECT ... FOR UPDATE".&lt;br /&gt;&lt;br /&gt;Facciamo un esempio: due utenti di una webapp caricano una form di attributi di una stessa persona (identificata solamente da una chiave primaria) e li modificano nello stesso intervallo di tempo. Trascurando l'opportunità della cosa, l'ultima che avrà cliccato su "aggiorna" scriverà i dati della form nel database, sovrascrivendo eventuali modifiche fatte dal primo utente.&lt;br /&gt;&lt;br /&gt;Ci sono un paio di metodi per accorgersi questa situazione: fare la "SELECT FOR UPDATE" appena prima di modificare il record inserendo una condizione WHERE che contiene tutti i dati originali, oppure usare una colonna timestamp per sapere la data di ultima modifica.&lt;br /&gt;Non ci interessa invece che cosa fa l'applicazione una volta accortasi della cosa: ciò dipende dalla &lt;span style="font-style:italic;"&gt;business logic&lt;/span&gt;, ovvero dal tipo di applicazione.&lt;br /&gt;&lt;br /&gt;In Oracle 10g è presente una nuova pseudo-colonna: &lt;span style="font-weight:bold;"&gt;ORA_ROWSCN&lt;/span&gt;. Essa contiene l'SCN relativo all'ultima operazione DML effettuata sul &lt;span style="font-style:italic;"&gt;blocco&lt;/span&gt; che contiene la riga selezionata. In questo modo è possibile sapere se il blocco è stato modificato dall'ultima lettura effettuata; ma come si fa ad utilizzare a livello di riga? La dipendenza a livello di riga viene abilitata all'atto di creazione di una tabella con la clausola ROWDEPENDENCIES.&lt;br /&gt;&lt;br /&gt;Facciamo un esempio:&lt;br /&gt;&lt;tt&gt;&lt;pre&gt;SQL&gt; select CLAIM_NUM, CLAIM_AMT, CLAIM_BAL, ROWID, ORA_ROWSCN&lt;br /&gt;from claim;&lt;br /&gt;&lt;br /&gt; CLAIM_NUM  CLAIM_AMT  CLAIM_BAL ROWID              ORA_ROWSCN&lt;br /&gt;---------- ---------- ---------- ------------------ ----------&lt;br /&gt;         1        100          0 AAAdsYAAEAAAAD0AAA 1070257362&lt;br /&gt;         2        200         99 AAAdsYAAEAAAAD0AAB 1070257362&lt;br /&gt;         3        300          0 AAAdsYAAEAAAAD0AAC 1070257362&lt;br /&gt;         4        400        350 AAAdsYAAEAAAAD0AAD 1070257362&lt;br /&gt;         5        500          0 AAAdsYAAEAAAAD0AAE 1070257362&lt;br /&gt;         6        600        295 AAAdsYAAEAAAAD0AAF 1070257362&lt;br /&gt;         7        700        700 AAAdsYAAEAAAAD0AAG 1070257362&lt;br /&gt;         8        800        800 AAAdsYAAEAAAAD0AAH 1070257362&lt;br /&gt;&lt;br /&gt;8 rows selected.&lt;br /&gt;&lt;br /&gt;SQL&gt; update claim set CLAIM_BAL = 1 where claim_num = 1;&lt;br /&gt;&lt;br /&gt;1 row updated.&lt;br /&gt;&lt;br /&gt;SQL&gt; select CLAIM_NUM, CLAIM_AMT, CLAIM_BAL, ROWID, ORA_ROWSCN&lt;br /&gt;from claim;&lt;br /&gt;&lt;br /&gt; CLAIM_NUM  CLAIM_AMT  CLAIM_BAL ROWID              ORA_ROWSCN&lt;br /&gt;---------- ---------- ---------- ------------------ ----------&lt;br /&gt;         1        100          1 AAAdsYAAEAAAAD0AAA 1070257362&lt;br /&gt;         2        200         99 AAAdsYAAEAAAAD0AAB 1070257362&lt;br /&gt;         3        300          0 AAAdsYAAEAAAAD0AAC 1070257362&lt;br /&gt;         4        400        350 AAAdsYAAEAAAAD0AAD 1070257362&lt;br /&gt;         5        500          0 AAAdsYAAEAAAAD0AAE 1070257362&lt;br /&gt;         6        600        295 AAAdsYAAEAAAAD0AAF 1070257362&lt;br /&gt;         7        700        700 AAAdsYAAEAAAAD0AAG 1070257362&lt;br /&gt;         8        800        800 AAAdsYAAEAAAAD0AAH 1070257362&lt;br /&gt;&lt;br /&gt;8 rows selected.&lt;br /&gt;&lt;br /&gt;SQL&gt; commit;&lt;br /&gt;&lt;br /&gt;Commit complete.&lt;br /&gt;&lt;br /&gt;SQL&gt; select CLAIM_NUM, CLAIM_AMT, CLAIM_BAL, ROWID, ORA_ROWSCN&lt;br /&gt;from claim;&lt;br /&gt;&lt;br /&gt; CLAIM_NUM  CLAIM_AMT  CLAIM_BAL ROWID              ORA_ROWSCN&lt;br /&gt;---------- ---------- ---------- ------------------ ----------&lt;br /&gt;         1        100          1 AAAdsYAAEAAAAD0AAA 1201770241&lt;br /&gt;         2        200         99 AAAdsYAAEAAAAD0AAB 1201770241&lt;br /&gt;         3        300          0 AAAdsYAAEAAAAD0AAC 1201770241&lt;br /&gt;         4        400        350 AAAdsYAAEAAAAD0AAD 1201770241&lt;br /&gt;         5        500          0 AAAdsYAAEAAAAD0AAE 1201770241&lt;br /&gt;         6        600        295 AAAdsYAAEAAAAD0AAF 1201770241&lt;br /&gt;         7        700        700 AAAdsYAAEAAAAD0AAG 1201770241&lt;br /&gt;         8        800        800 AAAdsYAAEAAAAD0AAH 1201770241&lt;br /&gt;&lt;br /&gt;8 rows selected.&lt;br /&gt;&lt;br /&gt;SQL&gt; create table claim_rowdep ROWDEPENDENCIES&lt;br /&gt;as select * from claim;&lt;br /&gt;&lt;br /&gt;Table created.&lt;br /&gt;&lt;br /&gt;SQL&gt; select CLAIM_NUM, CLAIM_AMT, CLAIM_BAL, ROWID, ORA_ROWSCN&lt;br /&gt;from claim_rowdep;&lt;br /&gt;&lt;br /&gt; CLAIM_NUM  CLAIM_AMT  CLAIM_BAL ROWID              ORA_ROWSCN&lt;br /&gt;---------- ---------- ---------- ------------------ ----------&lt;br /&gt;         1        100          1 AAAlQ9AAEAAAAIEAAA 1201772166&lt;br /&gt;         2        200         99 AAAlQ9AAEAAAAIEAAB 1201772166&lt;br /&gt;         3        300          0 AAAlQ9AAEAAAAIEAAC 1201772166&lt;br /&gt;         4        400        350 AAAlQ9AAEAAAAIEAAD 1201772166&lt;br /&gt;         5        500          0 AAAlQ9AAEAAAAIEAAE 1201772166&lt;br /&gt;         6        600        295 AAAlQ9AAEAAAAIEAAF 1201772166&lt;br /&gt;         7        700        700 AAAlQ9AAEAAAAIEAAG 1201772166&lt;br /&gt;         8        800        800 AAAlQ9AAEAAAAIEAAH 1201772166&lt;br /&gt;&lt;br /&gt;8 rows selected.&lt;br /&gt;&lt;br /&gt;SQL&gt; update claim_rowdep set claim_bal = 0 where claim_num = 1;&lt;br /&gt;&lt;br /&gt;1 row updated.&lt;br /&gt;&lt;br /&gt;SQL&gt; select CLAIM_NUM, CLAIM_AMT, CLAIM_BAL, ROWID, ORA_ROWSCN&lt;br /&gt;from claim_rowdep;&lt;br /&gt;&lt;br /&gt; CLAIM_NUM  CLAIM_AMT  CLAIM_BAL ROWID              ORA_ROWSCN&lt;br /&gt;---------- ---------- ---------- ------------------ ----------&lt;br /&gt;         1        100          0 AAAlQ9AAEAAAAIEAAA&lt;br /&gt;         2        200         99 AAAlQ9AAEAAAAIEAAB 1201772166&lt;br /&gt;         3        300          0 AAAlQ9AAEAAAAIEAAC 1201772166&lt;br /&gt;         4        400        350 AAAlQ9AAEAAAAIEAAD 1201772166&lt;br /&gt;         5        500          0 AAAlQ9AAEAAAAIEAAE 1201772166&lt;br /&gt;         6        600        295 AAAlQ9AAEAAAAIEAAF 1201772166&lt;br /&gt;         7        700        700 AAAlQ9AAEAAAAIEAAG 1201772166&lt;br /&gt;         8        800        800 AAAlQ9AAEAAAAIEAAH 1201772166&lt;br /&gt;&lt;br /&gt;8 rows selected.&lt;br /&gt;&lt;br /&gt;SQL&gt; commit;&lt;br /&gt;&lt;br /&gt;Commit complete.&lt;br /&gt;&lt;br /&gt;SQL&gt; select CLAIM_NUM, CLAIM_AMT, CLAIM_BAL, ROWID, ORA_ROWSCN&lt;br /&gt;from claim_rowdep;&lt;br /&gt;&lt;br /&gt; CLAIM_NUM  CLAIM_AMT  CLAIM_BAL ROWID              ORA_ROWSCN&lt;br /&gt;---------- ---------- ---------- ------------------ ----------&lt;br /&gt;         1        100          0 AAAlQ9AAEAAAAIEAAA 1201772868&lt;br /&gt;         2        200         99 AAAlQ9AAEAAAAIEAAB 1201772166&lt;br /&gt;         3        300          0 AAAlQ9AAEAAAAIEAAC 1201772166&lt;br /&gt;         4        400        350 AAAlQ9AAEAAAAIEAAD 1201772166&lt;br /&gt;         5        500          0 AAAlQ9AAEAAAAIEAAE 1201772166&lt;br /&gt;         6        600        295 AAAlQ9AAEAAAAIEAAF 1201772166&lt;br /&gt;         7        700        700 AAAlQ9AAEAAAAIEAAG 1201772166&lt;br /&gt;         8        800        800 AAAlQ9AAEAAAAIEAAH 1201772166&lt;br /&gt;&lt;br /&gt;8 rows selected.&lt;br /&gt;&lt;/pre&gt;&lt;/tt&gt;&lt;br /&gt;&lt;br /&gt;Come si vede dal ROWID i dati stanno tutti nello stesso blocco, mentre il ROWSCN cambia per tutto il blocco nella tabella claim e solo per la riga interessata dall'update nella tabella claim_rowdep.&lt;br /&gt;&lt;br /&gt;Non è possibile aggiungere ROWDEPENDENCIES alla tabella già creata, bisogna farlo alla creazione: la clausola infatti comporta che ogni riga aumenti le proprie dimensioni di 6 bytes.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11965249-5568207626331108843?l=rdbland.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rdbland.blogspot.com/feeds/5568207626331108843/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11965249&amp;postID=5568207626331108843' title='1 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/5568207626331108843'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/5568207626331108843'/><link rel='alternate' type='text/html' href='http://rdbland.blogspot.com/2008/06/rowscn-una-soluzione-ai-lost-update.html' title='ROWSCN, una soluzione ai lost update'/><author><name>Rudy</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://my.opera.com/hillrudy/homes/albums/16833/IMG_2787.JPG'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11965249.post-988828150052043940</id><published>2008-05-26T20:52:00.000+02:00</published><updated>2008-05-27T08:54:37.102+02:00</updated><title type='text'>Tornato da USA</title><content type='html'>Sono tornato domenica da una trasferta di lavoro in USA, per conoscere i miei nuovi colleghi d'oltreoceano e fare un po' di &lt;span style="font-style: italic;"&gt;team-building&lt;/span&gt; con il mio omologo americano dell'azienda che abbiamo comprato.&lt;br /&gt;&lt;br /&gt;Probabilmente per lavoro avrò a che fare, prima o poi, anche col mondo SQL Server, di cui ho visto qualche utilizzo. Per ora non so che cosa dire, il mondo dei wizard mi è sconosciuto, ma ammetto che la comodità di impostare ad esempio un backup solo con il mouse e con un'ottima interfaccia grafica non è trascurabile. Manca solo SQL Server per Linux :-)&lt;br /&gt;&lt;br /&gt;Una giornata l'ho spesa a spiegare al mio collega USA come funziona RMAN, con una dimostrazione pratica di recovery. I suoi occhi brillavano, così come quando gli ho mostrato Data Pump con l'esportazione del "suo" database in 10 minuti, quando con export normale ci metteva 1 ora e mezza (ma non ho visto lo script che usava).&lt;br /&gt;&lt;br /&gt;Mentre ero via è arrivato intanto il kit Oracle del certificato OCP 10g, con la tesserina e il diploma. Sono soddisfazioni, anche se preferirei avere anche una maglietta e un set di adesivi per la moto :-)&lt;br /&gt;&lt;br /&gt;Oracle con una mail strana mi invita all'&lt;a href="http://www.oracle.com/openworld/2008/index.html"&gt;OpenWorld 2008&lt;/a&gt; a S. Francisco. Ho qualche mese di tempo per convincere il mio capo della "necessità" della mia visita a S. Francisco, chissà forse in concomitanza con un altro viaggio in USA, ma si sa noi personaggi dell'IT non viaggiamo molto come i commerciali. Anzi praticamente non viaggiamo mai.&lt;br /&gt;&lt;br /&gt;Una novità sulle certificazioni Oracle: &lt;a href="http://www.oracle.com/global/us/education/certification/emagazine_apr08/emag.html"&gt;Oracle Certification E-Magazine&lt;/a&gt;.&lt;br /&gt;Le novità sono molteplici:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;L'OCA 11g viene conseguita con 2 esami e non più uno come 10g&lt;/li&gt;&lt;li&gt;L'OCP 11g può essere conseguito come upgrade da 10g OCP ma anche da 9i OCP&lt;/li&gt;&lt;li&gt;C'è una nuova certificazione per il database: SQL certified expert&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11965249-988828150052043940?l=rdbland.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rdbland.blogspot.com/feeds/988828150052043940/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11965249&amp;postID=988828150052043940' title='1 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/988828150052043940'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/988828150052043940'/><link rel='alternate' type='text/html' href='http://rdbland.blogspot.com/2008/05/tornato-da-usa.html' title='Tornato da USA'/><author><name>Rudy</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://my.opera.com/hillrudy/homes/albums/16833/IMG_2787.JPG'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11965249.post-3828903428113710372</id><published>2008-05-04T22:24:00.000+02:00</published><updated>2008-05-05T12:24:28.046+02:00</updated><title type='text'>Cost-based Oracle cap. 2: le statistiche di sistema</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_r0EgR7__Fw0/SB7fomsYpII/AAAAAAAAEOY/CG7YVh8zQ3o/s1600-h/9781590596364.gif"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_r0EgR7__Fw0/SB7fomsYpII/AAAAAAAAEOY/CG7YVh8zQ3o/s200/9781590596364.gif" border="0" alt=""id="BLOGGER_PHOTO_ID_5196836908706604162" /&gt;&lt;/a&gt;Sto leggendo il libro "Cost-based Oracle" di Jonathan Lewis.&lt;br /&gt;Pensavo di dedicare un post ad ogni capitolo, ma non riesco a riportare tutte le cose interessanti che leggo; più realisticamente proverò a commentare i passi più importanti.&lt;br /&gt;&lt;br /&gt;Oggi vi volevo parlare delle &lt;span style="font-weight:bold;"&gt;statistiche di sistema&lt;/span&gt; Oracle 10g. Non intendo le statistiche sugli oggetti di SYS e compari, e nemmeno le statistiche sulle fixed tables, ma su un gruppo di misure che l'optimizer può utilizzare per il suo lavoro.&lt;br /&gt;Tra queste sono comprese la velocità della CPU, il tempo di lettura a singoli blocchi, il tempo di lettura multiblocco.&lt;br /&gt;I valori ricavati dalle misure vengono inseriti nella tabella SYS.AUX_STATS$, che tra l'altro non ha sinonimi.&lt;br /&gt;&lt;br /&gt;La tabella SYS.AUX_STATS$ si presenta più o meno così, dopo la creazione di un database:&lt;br /&gt;&lt;tt&gt;&lt;pre&gt;SQL&gt; select SNAME, PNAME, PVAL1 from sys.aux_stats$ where SNAME = 'SYSSTATS_MAIN';&lt;br /&gt;&lt;br /&gt;SNAME                          PNAME                               PVAL1&lt;br /&gt;------------------------------ ------------------------------ ----------&lt;br /&gt;SYSSTATS_MAIN                  CPUSPEEDNW                     1116.77078&lt;br /&gt;SYSSTATS_MAIN                  IOSEEKTIM                              10&lt;br /&gt;SYSSTATS_MAIN                  IOTFRSPEED                           4096&lt;br /&gt;SYSSTATS_MAIN                  SREADTIM&lt;br /&gt;SYSSTATS_MAIN                  MREADTIM&lt;br /&gt;SYSSTATS_MAIN                  CPUSPEED&lt;br /&gt;SYSSTATS_MAIN                  MBRC&lt;br /&gt;SYSSTATS_MAIN                  MAXTHR&lt;br /&gt;SYSSTATS_MAIN                  SLAVETHR&lt;br /&gt;&lt;br /&gt;9 rows selected.&lt;br /&gt;&lt;/pre&gt;&lt;/tt&gt;&lt;br /&gt;Si può notare come i valori di *READTIM e MAXTHR, tra i più interessanti, non siano valorizzati; inoltre i valori di IOSEEKTIM e IOTFRSPEED sono sempre uguali, anche per altri database non RAC.&lt;br /&gt;&lt;br /&gt;Questa tabella viene popolata dalla procedura DBMS_STATS.GATHER_SYSTEM_STATS(). Può lavorare in due &lt;span style="font-style:italic;"&gt;gathering_mode&lt;/span&gt;: NOWORKLOAD e a intervalli.&lt;br /&gt;Nel primo caso la procedura misura le performance di I/O del sistema, determinando i valori di cpuspeednw, ioseektim, iotfrspeed.&lt;br /&gt;Nel secondo caso si può far partire la misura con START e fermarla con STOP, scegliendo così un periodo di carico di lavoro tipico, altrimenti è possibile specificare INTERVAL con l'intervallo, misurato in minuti, trascorso il quale la misura viene terminata.&lt;br /&gt;&lt;br /&gt;Alla fine delle misure l'aspetto potrebbe essere più o meno questo:&lt;br /&gt;&lt;tt&gt;&lt;pre&gt;SQL&gt; select SNAME, PNAME, PVAL1 from sys.aux_stats$ where SNAME = 'SYSSTATS_MAIN';&lt;br /&gt;&lt;br /&gt;SNAME                          PNAME                               PVAL1&lt;br /&gt;------------------------------ ------------------------------ ----------&lt;br /&gt;SYSSTATS_MAIN                  CPUSPEEDNW                       1606.781&lt;br /&gt;SYSSTATS_MAIN                  IOSEEKTIM                           7.469&lt;br /&gt;SYSSTATS_MAIN                  IOTFRSPEED                      52290.723&lt;br /&gt;SYSSTATS_MAIN                  SREADTIM                            5.912&lt;br /&gt;SYSSTATS_MAIN                  MREADTIM                            2.651&lt;br /&gt;SYSSTATS_MAIN                  CPUSPEED                             1614&lt;br /&gt;SYSSTATS_MAIN                  MBRC                                   10&lt;br /&gt;SYSSTATS_MAIN                  MAXTHR                             105472&lt;br /&gt;SYSSTATS_MAIN                  SLAVETHR&lt;br /&gt;&lt;br /&gt;9 rows selected.&lt;br /&gt;&lt;/pre&gt;&lt;/tt&gt;&lt;br /&gt;&lt;br /&gt;A che cosa serve tutto ciò? Le statistiche di sistema vengono utilizzate dal cost-based optimizer per determinare il miglior piano di esecuzione basandosi &lt;span style="font-style:italic;"&gt;anche&lt;/span&gt; sul costo della CPU e della modalità di I/O (signolo blocco o multiblocco).&lt;br /&gt;&lt;br /&gt;Manca ancora il costo di lettura dalla cache, ovvero la stima del costo basata sulla probabilità che un determinato blocco si ritrovi già in cache; ciò dipende soprattutto dalle statistiche derivabili da V$SEGSTAT, che misura l'attività relativa ai segmenti (dati e indici scritti su disco). Dovrò fare delle prove su 11g per vedere se ciò è stato implementato.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11965249-3828903428113710372?l=rdbland.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rdbland.blogspot.com/feeds/3828903428113710372/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11965249&amp;postID=3828903428113710372' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/3828903428113710372'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/3828903428113710372'/><link rel='alternate' type='text/html' href='http://rdbland.blogspot.com/2008/05/cost-based-oracle-cap-2-le-statistiche.html' title='Cost-based Oracle cap. 2: le statistiche di sistema'/><author><name>Rudy</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://my.opera.com/hillrudy/homes/albums/16833/IMG_2787.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://3.bp.blogspot.com/_r0EgR7__Fw0/SB7fomsYpII/AAAAAAAAEOY/CG7YVh8zQ3o/s72-c/9781590596364.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11965249.post-1375235711201270355</id><published>2008-04-16T21:54:00.000+02:00</published><updated>2008-04-17T10:43:30.418+02:00</updated><title type='text'>Ruoli delle istanze nei cluster RAC</title><content type='html'>Continuiamo la serie dei post sul RAC a due nodi.&lt;br /&gt;&lt;br /&gt;Stavolta mi è capitato di provare il parametro ACTIVE_INSTANCE_COUNT.&lt;br /&gt;&lt;br /&gt;Con il RAC a &lt;span style="font-weight:bold;"&gt;due nodi&lt;/span&gt; è possibile specificare l'esistenza di una istanza &lt;span style="font-style:italic;"&gt;primaria&lt;/span&gt; e di un'istanza &lt;span style="font-style:italic;"&gt;secondaria&lt;/span&gt;.&lt;br /&gt;Impostando il parametro ACTIVE_INSTANCE_COUNT a 1, solo nell'spfile, si impone che, al riavvio successivo del database, la prima istanza che monta il database diventi l'istanza primaria, mentre l'altra diventi ovviamente la secondaria.&lt;br /&gt;Si può controllare lo stato delle istanze dalla colonna INSTANCE_ROLE di GV$INSTANCE, che assumerà i valori PRIMARY_INSTANCE e SECONDARY_INSTANCE.&lt;br /&gt;&lt;br /&gt;Il risultato è che tutte le connessioni verranno dirette verso l'istanza primaria, mentre la seconda continuerà a rifiutare connessioni finché la prima istanza rimarrà attiva.&lt;br /&gt;&lt;br /&gt;Anche i servizi RAC vengono avviati sull'istanza primaria, come se la secondaria fosse spenta.&lt;br /&gt;&lt;br /&gt;Qual è il vantaggio? Non si trova molto sui manuali o su internet, comunque da &lt;a href="http://searchoracle.techtarget.com/expert/KnowledgebaseAnswer/0,289625,sid41_gci1006436,00.html"&gt;questo articolo&lt;/a&gt; si deduce che il failover delle connessioni può essere più veloce.&lt;br /&gt;Ho fatto una prova, ma personalmente non lo userei mai.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11965249-1375235711201270355?l=rdbland.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rdbland.blogspot.com/feeds/1375235711201270355/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11965249&amp;postID=1375235711201270355' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/1375235711201270355'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/1375235711201270355'/><link rel='alternate' type='text/html' href='http://rdbland.blogspot.com/2008/04/ruoli-delle-istanze-nei-cluster-rac.html' title='Ruoli delle istanze nei cluster RAC'/><author><name>Rudy</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://my.opera.com/hillrudy/homes/albums/16833/IMG_2787.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11965249.post-7005803971546349435</id><published>2008-04-12T13:54:00.002+02:00</published><updated>2008-04-12T14:26:52.175+02:00</updated><title type='text'>1Z0-040: missione compiuta</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://photos1.blogger.com/blogger/5949/379/1600/oracle_certify.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://photos1.blogger.com/blogger/5949/379/200/oracle_certify.jpg" border="0" alt="" /&gt;&lt;/a&gt;Ieri ho aggiornato la mia certificazione Oracle OCP, passando l'esame &lt;a href="http://education.oracle.com/pls/web_prod-plq-dad/db_pages.getpage?page_id=41&amp;p_org_id=1001&amp;lang=US&amp;p_exam_id=1Z0_040"&gt;1Z0-040&lt;/a&gt; e diventando &lt;span style="font-weight:bold;"&gt;OCP 10g&lt;/span&gt;.&lt;br /&gt;&lt;br /&gt;L'esame non è dei più semplici per un paio di motivi: è meno popolare degli altri esami e deve concentrarsi sugli argomenti che costituiscono le novità della nuova release rispetto alla vecchia.&lt;br /&gt;Il primo motivo ha come conseguenza che è più difficile reperire materiale di studio; il secondo che generalmente le domande riguardano aspetti minori del funzionamento del database, nonché poco interessanti e a volte addirittura noiosi.&lt;br /&gt;Le domande a volte sono mal formulate, prestandosi a diverse interpretazioni, e a volte sembra che chi le ha formulate non aveva ben chiaro il concetto.&lt;br /&gt;Come conseguenza di tutto ciò, mi sono trovato davanti a molte domande inaspettate ma, preso il toro per le corna, ragionando e sfruttando bene tutto il tempo a disposizione, ne sono uscito vincitore.&lt;br /&gt;&lt;br /&gt;Per quanto riguarda il materiale di studio, mi sono affidato per la prima volta ad un testo Sybex che, sebbene più preciso dei testi Oracle Press per gli esami, latita dal punto di vista del software per la preparazione.&lt;br /&gt;Il CD-ROM allegato al libro contiene una versione PC e una versione palmare delle esercitazioni. La prima è semplicemente in Flash, quindi fruibile con tutti i dispositivi dove ci sia un browser che supporti Flash, mentre sulla confezione del CD c'è scritto "per Windows". Misteri.&lt;br /&gt;&lt;br /&gt;I testi Oracle Press, invece, avevano un software apposito per Windows, che comprensibilmente permetteva di fare di più rispetto a un'applicazione flash, sfruttando il fatto che poteva salvare su disco i risultati delle esercitazioni e indicare chiaramente quali fossero gli argomenti su cui insistere con lo studio, nonché mischiare le domande e le risposte per evitare che si memorizzassero meccanicamente.&lt;br /&gt;&lt;br /&gt;La versione per palmare della Sybex è ancora più limitata di quella per PC, visto che si tratta solo di una serie di "schede" da compilare o a cui rispondere mentalmente, corredate da un tasto per far comparire la soluzione. Diciamo che si adattano al contesto in cui di solito viene usato il palmare, ovvero "on the road"; sono comunque un valido aiuto.&lt;br /&gt;&lt;br /&gt;Ora pausa di qualche mese per finire i libri in coda, e poi chissà, ci sono molti esami interessanti da sostenere!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11965249-7005803971546349435?l=rdbland.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rdbland.blogspot.com/feeds/7005803971546349435/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11965249&amp;postID=7005803971546349435' title='1 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/7005803971546349435'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/7005803971546349435'/><link rel='alternate' type='text/html' href='http://rdbland.blogspot.com/2008/04/1z0-040-missione-compiuta.html' title='1Z0-040: missione compiuta'/><author><name>Rudy</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://my.opera.com/hillrudy/homes/albums/16833/IMG_2787.JPG'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11965249.post-4501104462340267526</id><published>2008-03-27T22:10:00.000+01:00</published><updated>2008-03-28T09:01:07.771+01:00</updated><title type='text'>OpenSuSE 10.3 x86_64: gli rpm per Oracle 10g</title><content type='html'>Tra tutte le installazioni Oracle 10g che ho fatto, escludendo Red Hat 4, mi sembra che la migliore distribuzione a cui appoggiarsi sia OpenSuSE 10.3.&lt;br /&gt;L'unico problema che si potrebbe avere è nella versione a 32 bit, che probabilmente richiede la ricompilazione del kernel. Con le macchine attuali x86_64 il problema non si pone.&lt;br /&gt;&lt;br /&gt;Riporto qui la lista degli rpm da installare oltre a quelli di default da DVD OpenSuSE 10.3 a 64 bit:&lt;br /&gt;&lt;br /&gt;&lt;tt&gt;gcc-32bit-4.2-24.x86_64.rpm&lt;br /&gt;gcc42-32bit-4.2.1_20070724-17.x86_64.rpm&lt;br /&gt;glibc-32bit-2.6.1-18.x86_64.rpm&lt;br /&gt;glibc-devel-32bit-2.6.1-18.x86_64.rpm&lt;br /&gt;libgcc42-32bit-4.2.1_20070724-17.x86_64.rpm&lt;br /&gt;libgomp42-32bit-4.2.1_20070724-17.x86_64.rpm&lt;br /&gt;libmudflap42-32bit-4.2.1_20070724-17.x86_64.rpm&lt;/tt&gt;&lt;br /&gt;&lt;br /&gt;Nell'installazione grafica normale, alla selezione dei pacchetti da DVD, selezionare anche il Development e C/C++ development.&lt;br /&gt;I pacchetti dell'elenco di sopra sono reperibili solo da repository web, quindi o si aggiunge l'URL del repository al SuSE online update, oppure si scaricano manualmente e si installano da linea di comando.&lt;br /&gt;Vedere il sito SuSE per i &lt;a href="http://en.opensuse.org/Mirrors_Released_Version"&gt;mirror&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11965249-4501104462340267526?l=rdbland.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rdbland.blogspot.com/feeds/4501104462340267526/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11965249&amp;postID=4501104462340267526' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/4501104462340267526'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/4501104462340267526'/><link rel='alternate' type='text/html' href='http://rdbland.blogspot.com/2008/03/opensuse-103-x8664-gli-rpm-per-oracle.html' title='OpenSuSE 10.3 x86_64: gli rpm per Oracle 10g'/><author><name>Rudy</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://my.opera.com/hillrudy/homes/albums/16833/IMG_2787.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11965249.post-947258444786853608</id><published>2008-03-19T19:33:00.000+01:00</published><updated>2008-03-20T12:06:34.560+01:00</updated><title type='text'>RAC cluster interconnect: twisted!</title><content type='html'>Una delle "limitazioni" più famose delle implementazioni Oracle RAC a &lt;span style="font-weight: bold;"&gt;due&lt;/span&gt; nodi è l'impossibilità, secondo la documentazione, di utilizzare un'interconnect formata da un solo cavo diretto tra un server e l'altro.&lt;br /&gt;Le FAQ di RAC riportano:&lt;br /&gt;&lt;blockquote&gt;NO. CROSS OVER CABLES ARE NOT SUPPORTED.&lt;br /&gt;The requirement is to use a switch:&lt;br /&gt;Detailed Reasons:&lt;br /&gt;1) cross-cabling limits the expansion of RAC to two nodes&lt;br /&gt;2) cross-cabling is unstable:&lt;br /&gt; a) Some NIC cards do not work properly with it. They are not able to negotiate the DTE/DCE clocking, and will thus not function. These NICS were made cheaper by assuming that the switch was going to have the clock. Unfortunately there is no way to know which NICs do not have that clock.&lt;br /&gt; b) Media sense behaviour on various OS's (most notably Windows) will bring a NIC down when a cable is disconnected.&lt;br /&gt;Either of these issues can lead to cluster instability and lead to ORA-29740 errors (node evictions).&lt;br /&gt;&lt;br /&gt;Due to the benefits and stability provided by a switch, and their afforability ($200 for a simple 16 port GigE switch), and the expense and time related to dealing with issues when one does not exist, this is the only supported configuration.&lt;br /&gt;Please see certify.us.oracle.com as well.&lt;/blockquote&gt;&lt;br /&gt;Vorrei però precisare quanto segue:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Per gli switch moderni a 1 Gb i cavi "cross" sono equivalenti a quelli normali; a me risulta che siano equivalenti anche a 100 Mb (verificato sul mio router di casa).&lt;/li&gt;&lt;li&gt;L'instabilità non è giustificata, a meno che si pensi ai SO Microsoft e ad eventuali versioni Linux che spengono la scheda di rete in caso di inattività prolungata o assenza di segnale all'altro capo in fase di avvio.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Per il funzionamento effettivo del cross-link, basta provare e vedere se funziona&lt;/li&gt;&lt;/ol&gt;Aggiungiamo che le schede di rete recenti (es. e1000) hanno tutte le migliori caratteristiche desiderabili, e soprattutto possono essere configurate in bonding.&lt;br /&gt;&lt;br /&gt;Gli scenari da confrontare sarebbero due:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;I 2 nodi collegati a uno switch&lt;/li&gt;&lt;li&gt;I due nodi collegati tra loro&lt;/li&gt;&lt;/ol&gt;Gli oggetti che si possono rompere, nel caso del "sistema interconnect", sono:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;lo switch&lt;/li&gt;&lt;li&gt;i due cavi di rete&lt;br /&gt;&lt;/li&gt;&lt;li&gt;le quattro schede di rete&lt;/li&gt;&lt;/ol&gt;I cavi di rete di per sè sono molto poco propensi a rompersi, visto che strutturalmente sono molto semplici; eventualmente potrebbero essere soggetti a sollecitazioni meccaniche esterne. Sono due, quindi &lt;span style="font-style: italic;"&gt;devono rompersi entrambi nello stesso periodo per dare problemi&lt;/span&gt;.&lt;br /&gt;Le schede di rete hanno più o meno la stessa probabilità di rompersi di qualsiasi altro elemento attivo. Sono due per server, quindi la ridondanza abbassa di molto la probabilità di disservizio.&lt;br /&gt;Lo switch è unico. Per avere una certa affidabilità e velocità bisogna acquistare qualcosa di più di "$200 for a simple 16 port GigE switch"; qualcosa di &lt;span style="font-weight: bold;"&gt;molto costoso&lt;/span&gt; rispetto ai server. Sta di fatto che è un elemento unico; se si vogliono due switch i costi raddoppiano.&lt;br /&gt;&lt;br /&gt;Veniamo ora agli scenari problematici:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Shutdown di una delle due istanze, più o meno volontario&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Reset o shutdown software di un server&lt;/li&gt;&lt;li&gt;Spegnimento togliendo la corrente&lt;/li&gt;&lt;/ol&gt;Le istanze RAC comunicano via interconnect e voting disk. Un reset o uno spegnimento di un nodo sarebbe facilmente risolto dal voting-disk, in teoria. Tra le configurazioni con e senza switch di mezzo c'è una differenza: la mancanza di alimentazione a uno dei capi dell'interconnect, ad esempio per spegnimento di un server, provoca l'errore di &lt;span style="font-style: italic;"&gt;link down&lt;/span&gt;.&lt;br /&gt;Consideriamo solo il caso senza switch: gli scenari peggiori quindi sono l'interruzione totale e improvvisa dell'alimentazione per un nodo, e il distacco di entrambi i cavi di rete.&lt;br /&gt;La prima possibilità è realistica, e provoca il link down. La seconda possibilità è, consentitemi, praticamente irrealizzabile.&lt;br /&gt;&lt;br /&gt;Pensiamoci un attimo: la differenza col caso switch è che in mezzo c'è un altro componente che potenzialmente può dare problemi. La cosa migliore è quindi che &lt;span style="font-weight: bold;"&gt;lo switch non sia presente!&lt;/span&gt; Con un solo switch in mezzo, in caso di spegnimento dello switch stesso per qualsiasi motivo, si realizzerebbe la condizione per cui i nodi non si sentono più via interconnect, hanno un link down, e le istanze sono entrambe nello stesso stato: è la situazione di gran lunga peggiore: quella del distacco dei due cavi di rete dell'interconnect. La configurazione con i cavi diretti è quindi, a mio modo di vedere, addirittura migliore di quella consigliata da Oracle senza appello.&lt;br /&gt;&lt;br /&gt;Rimane da provare l'interruzione improvvisa dell'alimentazione per un nodo.&lt;br /&gt;L'ho provata.&lt;br /&gt;In questo caso le istanze non sono nello stesso stato: una non c'è più.&lt;br /&gt;Ecco ciò che succede all'altra istanza:&lt;br /&gt;&lt;tt&gt;Tue Mar 11 15:01:42 2008&lt;br /&gt;ospid 1179: network interface with IP address 192.168.1.107 no longer running (check cable)&lt;br /&gt;Tue Mar 11 15:01:52 2008&lt;br /&gt;Reconfiguration started (old inc 2, new inc 4)&lt;br /&gt;List of nodes:&lt;br /&gt; 0&lt;br /&gt; Global Resource Directory frozen&lt;br /&gt; * dead instance detected - domain 0 invalid = TRUE&lt;br /&gt;...&lt;/tt&gt;&lt;br /&gt;Il link down viene rilevato. Tutto prosegue regolarmente. In caso di dubbio Clusterware avrebbe riavviato la macchina. Quindi tutto bene.&lt;br /&gt;Gli indirizzi IP VIP vengono correttamente riconfigurati.&lt;br /&gt;&lt;br /&gt;Al ripristino del nodo in failure si ottiene:&lt;br /&gt;&lt;tt&gt;Tue Mar 11 15:12:42 2008&lt;br /&gt;ospid 1179: network interface with IP address 192.168.1.107 is now running&lt;br /&gt;Tue Mar 11 15:15:12 2008&lt;br /&gt;Reconfiguration started (old inc 4, new inc 6)&lt;br /&gt;List of nodes:&lt;br /&gt; 0 1&lt;br /&gt; Global Resource Directory frozen&lt;br /&gt; Communication channels reestablished&lt;br /&gt; Master broadcasted resource hash value bitmaps&lt;br /&gt; Non-local Process blocks cleaned out&lt;br /&gt;...&lt;/tt&gt;&lt;br /&gt;Ottimo: link up e riconfigurazione del cluster. Tutto regolare.&lt;br /&gt;&lt;br /&gt;In sintesi, per un sistema RAC a due nodi non espandibile, a quanto sembra, è molto meglio avere un'interconnect a cavi diretti piuttosto che avere di mezzo un apparato di rete.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11965249-947258444786853608?l=rdbland.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rdbland.blogspot.com/feeds/947258444786853608/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11965249&amp;postID=947258444786853608' title='2 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/947258444786853608'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/947258444786853608'/><link rel='alternate' type='text/html' href='http://rdbland.blogspot.com/2008/03/rac-cluster-interconnect-twisted.html' title='RAC cluster interconnect: twisted!'/><author><name>Rudy</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://my.opera.com/hillrudy/homes/albums/16833/IMG_2787.JPG'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11965249.post-4815916049316987318</id><published>2008-03-05T21:22:00.000+01:00</published><updated>2008-03-06T09:50:09.593+01:00</updated><title type='text'>Restore in ambiente RAC</title><content type='html'>Per lavoro ho dovuto spostare un database RAC di test da un volume ASM ad un altro. Tralasciando i motivi, ho deciso di effettuare un restore completo della parte dati ASM a partire da un backup RMAN con catalogo.&lt;br /&gt;Noto alcune cose interessanti:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Nonostate il catalogo, bisogna sempre impostare il DBID prima di tutto&lt;/li&gt;&lt;li&gt;È necessario ricreare la directory base &lt;sid&gt; sotto +&amp;lt;DISKGROUP&amp;gt;&lt;/sid&gt;&lt;/li&gt;&lt;li&gt;Se proprio non si ha il pfile creato a mano dall'spfile, si può usare lo startup force nomount da RMAN, per avere un minimo server process in modo da accedere ad ASM e fare il restore dell'spfile.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Il restore dall'autobackup è molto comodo: si recupera sia il controlfile che l'spfile (separatamente)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Il restore dell'spfile va fatto specificando il filename di destinazione nel diskgroup condiviso (TO '...')&lt;/li&gt;&lt;/ul&gt;Ho notato anche due difetti di Enterprise Manager db control una volta che il database RAC è tornato a funzionare: per prima cosa la configurazione interattiva con emca non funziona, almeno nel mio caso di ASM home separata. Bisogna per forza usare la linea di comando di &lt;tt&gt;emca&lt;/tt&gt; ricavandola da uno degli script di creazione del database fatti da dbca (consiglio vivamente di far creare &lt;span style="font-weight: bold;"&gt;sempre&lt;/span&gt; gli script di creazione del database da dbca).&lt;br /&gt;Secondo difetto: nelle pagine EM su ASM, lo spazio utilizzato dal database viene visto come "internal" (tipo archivelog) e non come spazio allocato da un database. Questo aspetto è tradizionalmente difettoso, almeno in RAC: i nomi dei database che utilizzano un dato diskgroup sono a volte solamente quelli di una delle due istanze; in questo caso, nemmeno quello.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11965249-4815916049316987318?l=rdbland.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rdbland.blogspot.com/feeds/4815916049316987318/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11965249&amp;postID=4815916049316987318' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/4815916049316987318'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/4815916049316987318'/><link rel='alternate' type='text/html' href='http://rdbland.blogspot.com/2008/03/restore-in-ambiente-rac.html' title='Restore in ambiente RAC'/><author><name>Rudy</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://my.opera.com/hillrudy/homes/albums/16833/IMG_2787.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11965249.post-8569989831269291734</id><published>2008-02-25T09:29:00.007+01:00</published><updated>2008-03-18T16:08:53.437+01:00</updated><title type='text'>Oracle 10.2.0.4.0/x86 is out</title><content type='html'>Un veloce post perché stamattina ho trovato il patchlevel 3 di 10gR2 su Metalink, solo per x86, e lo sto scaricando.&lt;br /&gt;A presto per eventuali commenti.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Aggiornamento (10:33)&lt;/span&gt;: a quanto pare è stato fatto il backport di Real Application Testing da 11g a 10g.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Aggiornamento (11:24)&lt;/span&gt;: Enterprise Manager Database Control ora è di default via HTTPS!&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Aggiornamento (10-3)&lt;/span&gt;: risolto anche il problema della tabella ROUT troppo grande nel catalogo di RMAN.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11965249-8569989831269291734?l=rdbland.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rdbland.blogspot.com/feeds/8569989831269291734/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11965249&amp;postID=8569989831269291734' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/8569989831269291734'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/8569989831269291734'/><link rel='alternate' type='text/html' href='http://rdbland.blogspot.com/2008/02/oracle-102040x86-is-out.html' title='Oracle 10.2.0.4.0/x86 is out'/><author><name>Rudy</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://my.opera.com/hillrudy/homes/albums/16833/IMG_2787.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11965249.post-1071300665393165114</id><published>2008-01-27T10:52:00.000+01:00</published><updated>2008-01-29T09:21:37.707+01:00</updated><title type='text'>11g Real Application Testing spiegato</title><content type='html'>Segnalo un &lt;a href="http://www.oracle.com/technology/oramag/oracle/08-jan/o18dbasereplay.html"&gt;interessante articolo di Arup Nanda&lt;/a&gt; sull'ultimo Oracle Magazine, a proposito di Real Application Testing e i suoi meccanismi.&lt;br /&gt;Molto più chiaro delle decine di documenti marketing letti fin'ora, l'articolo di Nanda mette alla luce le procedure necessarie per replicare il carico reale su un server di test, facendo capire quali sono gli oggetti fisici in gioco, quindi in ultima analisi come funziona Real Application Testing.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11965249-1071300665393165114?l=rdbland.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.oracle.com/technology/oramag/oracle/08-jan/o18dbasereplay.html' title='11g Real Application Testing spiegato'/><link rel='replies' type='application/atom+xml' href='http://rdbland.blogspot.com/feeds/1071300665393165114/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11965249&amp;postID=1071300665393165114' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/1071300665393165114'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/1071300665393165114'/><link rel='alternate' type='text/html' href='http://rdbland.blogspot.com/2008/01/11g-real-application-testing-spiegato.html' title='11g Real Application Testing spiegato'/><author><name>Rudy</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://my.opera.com/hillrudy/homes/albums/16833/IMG_2787.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11965249.post-5398180807595376721</id><published>2008-01-18T22:29:00.000+01:00</published><updated>2008-01-20T10:42:03.221+01:00</updated><title type='text'>Bind peeking e piani di esecuzione: DTY</title><content type='html'>In questi giorni uno sviluppatore mi ha sottoposto una query abbastanza semplice, che però veniva eseguita troppo lentamente dalla nuova versione della nostra webapp.&lt;br /&gt;Ho subito cercato di replicare il comportamento della query via sqlplus, anche con le variabili di bind, e ho visto che effettivamente la query era lenta.&lt;br /&gt;Dopo avere controllato rifatto le statistiche (macchina di test), tutto è tornato normale e la query era velocissima. Da un rapido esame dell'autotrace era evidente che il piano soffriva di statistiche sballate, ma ciò era nelle attese sul database di test, in cui le tabelle vengono caricate e scaricate continuamente.&lt;br /&gt;&lt;br /&gt;La situazione per il thin client Java invece non migliorava, anzi a tratti peggiorava.&lt;br /&gt;Ho fatto attivare il trace dalla sessione Java, ma simpaticamente proprio il piano di esecuzione che mi interessava non ha fatto a tempo a finire nel file di trace; pazienza, tanto già sapevo che era sballato e che un piano corretto esisteva (quello scelto via sqlplus e visto con autotrace), l'importante era capire perché. I dati di &lt;span style="font-style:italic;"&gt;consistent gets/query&lt;/span&gt;, nel trace, erano completamente diversi. La query via Java muoveva 1000 volte la quantità di dati mossa da sqlplus, con le stesse 807 righe risultanti.&lt;br /&gt;&lt;br /&gt;Mi sono ricordato di un &lt;a href="http://cristiancudizio.wordpress.com/2007/12/31/bind-variable-peeking/"&gt;post di Cristian Cudizio sul peeking&lt;/a&gt;, nel quale veniva citato sia il metodo di Alberto Dell'Era per estrarre le variabili di bind usando la feature non documentata &lt;tt&gt;dbms_xplan.display_cursor(null, null, 'ADVANCED')&lt;/tt&gt;, sia un &lt;a href="http://jonathanlewis.wordpress.com/2007/07/29/nls/"&gt;post di Jonathan Lewis&lt;/a&gt; in cui ho rapidamente identificato la stessa mia situazione.&lt;br /&gt;&lt;br /&gt;Subito ho tentato di vedere le variabili di bind con il metodo di Alberto, ma serve almeno l'accesso alla V$SESSION, e non avevo molta intenzione di indagare, visto che, a mio modo di vedere, avrebbe dovuto funzionare con gli stessi privilegi necessari per l'autotrace.&lt;br /&gt;Ho utilizzato invece il trace 10g via &lt;tt&gt;DBMS_MONITOR.SESSION_TRACE_ENABLE(session_id IN BINARY_INTEGER DEFAULT NULL, serial_num IN  BINARY_INTEGER DEFAULT NULL, waits IN  BOOLEAN DEFAULT TRUE, binds IN  BOOLEAN DEFAULT FALSE)&lt;/tt&gt;, applicandola solamente alle sessioni del pool di connessioni esclusivo dello sviluppatore in questione.&lt;br /&gt;Per ogni sessione del pool ho avviato il trace con&lt;br /&gt;DBMS_MONITOR.SESSION_TRACE_ENABLE(session_id =&gt; sid, binds =&gt; true). Non serve infatti il serial#.&lt;br /&gt;&lt;br /&gt;È risultato che sqlplus eseguiva la query velocemente perché io correttamente impostavo il tipo delle variabili di bind a char(5), mentre il thin client Java finiva per impostare il tipo a varchar2.&lt;br /&gt;&lt;br /&gt;Dove sono disponibili queste informazioni? Nel file di trace era presente la sezione delle variabili di bind, e per tutte era indicato, oltre il valore, una serie di dati tra cui&lt;br /&gt;&lt;tt&gt;oacdty=01&lt;/tt&gt;&lt;br /&gt;che contraddistingue il tipo varchar (DTY = &lt;span style="font-style:italic;"&gt;data type&lt;/span&gt;), mentre il tipo di sqlplus era char/nchar (96).&lt;br /&gt;&lt;br /&gt;Vi risparmio il piano di esecuzione sbagliato, quasi comico.&lt;br /&gt;Ho potuto vagliare comunque, in seguito, la bontà del SQL tuning advisor di Enterprise Manager, che con una &lt;span style="font-style:italic;"&gt;comprehensive analysis&lt;/span&gt; mi ha fornito sia il piano sbagliato che quello corretto, proponendomi però di applicare un &lt;span style="font-style:italic;"&gt;SQL profile&lt;/span&gt; alla query, invece che risolvere correttamente il problema.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11965249-5398180807595376721?l=rdbland.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rdbland.blogspot.com/feeds/5398180807595376721/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11965249&amp;postID=5398180807595376721' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/5398180807595376721'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/5398180807595376721'/><link rel='alternate' type='text/html' href='http://rdbland.blogspot.com/2008/01/bind-peeking-e-piani-di-esecuzione-dty.html' title='Bind peeking e piani di esecuzione: DTY'/><author><name>Rudy</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://my.opera.com/hillrudy/homes/albums/16833/IMG_2787.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11965249.post-3123921263908234754</id><published>2008-01-16T21:20:00.000+01:00</published><updated>2008-01-18T09:56:53.329+01:00</updated><title type='text'>Lentezze in RMAN</title><content type='html'>Oracle 10g ha problemi residui di lentezza di RMAN, ad esempio durante la sincronizzazione del catalogo. Metalink riporta i workaround principali a nella &lt;a href="https://metalink.oracle.com/metalink/plsql/ml2_documents.showDocument?p_database_id=NOT&amp;p_id=463227.1"&gt;nota 463227.1&lt;/a&gt;.&lt;br /&gt;Un ottimo punto di partenza è l'analisi delle performance da parte di Enterprise Manager sul database del catalogo. Si possono identificare problemi di indici già dall'esame sui picchi di attività.&lt;br /&gt;&lt;br /&gt;Le cose principali da controllare sono:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;il numero dei record nella tabella ROUT e nella RSR&lt;/li&gt;&lt;br /&gt;&lt;li&gt;la presenza di indici su ROUT e RSR&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;Devono essere presenti gli indici rout_i_db on rout(db_key) e rout_i_rsr on rout(rsr_key).&lt;br /&gt;&lt;br /&gt;Anche sulla tabella RSR può essere utile l'indice rsr_i_stamp on rsr(rsr_sstamp, rsr_srecid).&lt;br /&gt;&lt;br /&gt;Se collegate al repository di RMAN una versione aggiornata di Oracle, potete sempre fare un'UPGRADE CATALOG per assicurarvi che le modifiche indicate vengano automaticamente incluse, se necessario.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11965249-3123921263908234754?l=rdbland.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rdbland.blogspot.com/feeds/3123921263908234754/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11965249&amp;postID=3123921263908234754' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/3123921263908234754'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/3123921263908234754'/><link rel='alternate' type='text/html' href='http://rdbland.blogspot.com/2008/01/lentezze-in-rman.html' title='Lentezze in RMAN'/><author><name>Rudy</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://my.opera.com/hillrudy/homes/albums/16833/IMG_2787.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11965249.post-1148356032554847232</id><published>2008-01-09T22:14:00.000+01:00</published><updated>2008-01-10T14:01:55.855+01:00</updated><title type='text'>La saga di DBCA e ASM</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_r0EgR7__Fw0/R2koqh4MVDI/AAAAAAAAEAw/umZQdSJpq9Y/s1600-h/homer_desk.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_r0EgR7__Fw0/R2koqh4MVDI/AAAAAAAAEAw/umZQdSJpq9Y/s200/homer_desk.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5145688760361178162" /&gt;&lt;/a&gt;Dopo decine di installazioni Oracle questo strano problema di DBCA che non riconosce l'istanza ASM presente e funzionante sul server &lt;span style="font-style:italic;"&gt;forse&lt;/span&gt; è giunto alla sua soluzione.&lt;br /&gt;&lt;br /&gt;Il problema è questo: durante la creazione di un database senza la creazione contestuale dell'istanza ASM (specie RAC, nel mio caso), oppure (più probabile) con ASM già configurata in un'altra ORACLE_HOME, DBCA visualizza il seguente errore:&lt;br /&gt;&lt;blockquote&gt;DBCA could not startup the ASM instance configured on this node. To proceed with ASM diskgroup management you need the ASM instance to be up and running. Do you want to recreate the ASM instance on this node?&lt;/blockquote&gt;&lt;br /&gt;Oracle, nella &lt;a href="https://metalink.oracle.com/metalink/plsql/ml2_documents.showDocument?p_database_id=NOT&amp;p_id=467756.1"&gt;nota Metalink 467756.1&lt;/a&gt;, afferma che il problema riguarda la versione 10.2.0.3.0; io confermo, ma accade a volte anche con la 10.2.0.1.0. La soluzione però non è valida, almeno per RAC: la nota dice di aggiungere l'istanza ASM a /etc/oratab, ma nel mio caso la entry apposita già c'era e su tutti e due i nodi del cluster.&lt;br /&gt;Qualsiasi tipo di combinazione e configurazione delle variabili d'ambiente non aveva alcun effetto.&lt;br /&gt;&lt;br /&gt;La soluzione (tenetevi forte) sembra proprio la seguente:&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;eseguire DBCA in questo modo:&lt;/span&gt;&lt;br /&gt;&lt;tt&gt;#&amp;gt;cd $ORACLE_HOME/bin&lt;br /&gt;#&amp;gt;./dbca&lt;/tt&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;e non tramite path!&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;D'oh!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11965249-1148356032554847232?l=rdbland.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rdbland.blogspot.com/feeds/1148356032554847232/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11965249&amp;postID=1148356032554847232' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/1148356032554847232'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/1148356032554847232'/><link rel='alternate' type='text/html' href='http://rdbland.blogspot.com/2008/01/la-saga-di-dbca-e-asm.html' title='La saga di DBCA e ASM'/><author><name>Rudy</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://my.opera.com/hillrudy/homes/albums/16833/IMG_2787.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_r0EgR7__Fw0/R2koqh4MVDI/AAAAAAAAEAw/umZQdSJpq9Y/s72-c/homer_desk.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11965249.post-3352113011321971428</id><published>2008-01-07T21:58:00.000+01:00</published><updated>2008-01-09T12:12:52.259+01:00</updated><title type='text'>Homepage di EM lenta</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_r0EgR7__Fw0/R2koqh4MVDI/AAAAAAAAEAw/umZQdSJpq9Y/s1600-h/homer_desk.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_r0EgR7__Fw0/R2koqh4MVDI/AAAAAAAAEAw/umZQdSJpq9Y/s200/homer_desk.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5145688760361178162" /&gt;&lt;/a&gt;In questi giorni sono incappato in una strana lentezza della homepage di Enterprise Manager (database control). Tutte le altre pagine venivano visualizzate con la solita velocità (abbastanza lente), ma quella principale ci metteva fino a mezzo minuto (!).&lt;br /&gt;&lt;br /&gt;Ebbene, è risultato che lo statement incriminato era una semplice select da una view di sistema, precisamente V$RMAN_BACKUP_JOB_DETAILS, che ci metteva fino a 30 secondi per restituire una risultato; per inciso, la view conteneva una dozzina di righe.&lt;br /&gt;&lt;br /&gt;Bene.&lt;br /&gt;&lt;br /&gt;Andando a vedere il testo della view, si scopre che si basa su un'altra view, V$RMAN_BACKUP_SUBOBJ_DETAILS, la quale si basa su un'altra view, V$RMAN_STATUS, la quale si basa finalmente su 3 fixed table.&lt;br /&gt;&lt;br /&gt;Da una ricerca sui forum Oracle, ho intuito che la lentezza è dovuta alla &lt;span style="font-style:italic;"&gt;presenza&lt;/span&gt; delle statistiche sulle 3 fixed table.&lt;br /&gt;&lt;br /&gt;È bastato quindi eseguire:&lt;br /&gt;&lt;tt&gt;dbms_stats.delete_table_stats('SYS', 'X$KRBMRST')&lt;br /&gt;dbms_stats.delete_table_stats('SYS', 'X$KSFQP')&lt;br /&gt;dbms_stats.delete_table_stats('SYS', 'X$KCCRSR')&lt;/tt&gt;&lt;br /&gt;per riportare la situazione ad una velocità normale (a dire il vero piuttosto veloce).&lt;br /&gt;&lt;br /&gt;Per essere sicuri che &lt;span style="font-weight:bold;"&gt;non&lt;/span&gt; vengano prese in futuro le statistiche su quelle fixed table, si può usare&lt;br /&gt;&lt;tt&gt;dbms_stats.lock_table_stats('SYS', 'X$KRBMRST')&lt;/tt&gt;&lt;br /&gt;e così via.&lt;br /&gt;&lt;br /&gt;Un caso in cui le statistiche è meglio non averle.&lt;br /&gt;&lt;br /&gt;Nota Metalink: &lt;a href="https://metalink.oracle.com/metalink/plsql/ml2_documents.showDocument?p_database_id=NOT&amp;p_id=420200.1"&gt;420200.1&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11965249-3352113011321971428?l=rdbland.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='https://metalink.oracle.com/metalink/plsql/ml2_documents.showDocument?p_database_id=NOT&amp;p_id=420200.1' title='Homepage di EM lenta'/><link rel='replies' type='application/atom+xml' href='http://rdbland.blogspot.com/feeds/3352113011321971428/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11965249&amp;postID=3352113011321971428' title='1 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/3352113011321971428'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/3352113011321971428'/><link rel='alternate' type='text/html' href='http://rdbland.blogspot.com/2008/01/homepage-di-em-lenta.html' title='Homepage di EM lenta'/><author><name>Rudy</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://my.opera.com/hillrudy/homes/albums/16833/IMG_2787.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_r0EgR7__Fw0/R2koqh4MVDI/AAAAAAAAEAw/umZQdSJpq9Y/s72-c/homer_desk.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11965249.post-8912591349279040427</id><published>2007-12-26T10:11:00.000+01:00</published><updated>2007-12-26T10:24:36.428+01:00</updated><title type='text'>Una buona azione a Natale</title><content type='html'>A Natale per me è arrivato il riposo tanto atteso e un pranzo un po' più abbondante del solito. Ma a rimanere tutto il giorno senza fare proprio nulla non ci riesco.&lt;br /&gt;&lt;br /&gt;È ormai tradizione dedicare una parte della giornata ad un'installazione Oracle.&lt;br /&gt;D'accordo, non sarà un'azione nobile come aiutare il prossimo, ma è una scusa per fare passare il tempo e un'occasione per imparare qualcosa di nuovo.&lt;br /&gt;&lt;br /&gt;Per questo Natale ho aggiornato l'istanza Oracle sul mio Mac Mini. Come dovreste sapere, Oracle 10g si è fermato alla versione 10gR1 su Mac OS X. La versione originale è la 10.1.0.3.0, io l'ho aggiornata all'ultima disponibile, la 10.1.0.5.0; a quanto pare non ci saranno altri aggiornamenti.&lt;br /&gt;&lt;br /&gt;DBUA non esiste, quindi bisogna aggiornare a mano il catalogo con catpatch.sql in "startup upgrade", e poi ricompilare gli oggetti invalidati dall'operazione di upgrade.&lt;br /&gt;&lt;br /&gt;Tutto qui. Proseguiremo presto con altri post interessanti (a differenza di questo!).&lt;br /&gt;Mi raccomando, sotto con i commenti, non fatevi pregare! :-)&lt;br /&gt;E Buone Feste a tutti!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11965249-8912591349279040427?l=rdbland.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rdbland.blogspot.com/feeds/8912591349279040427/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11965249&amp;postID=8912591349279040427' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/8912591349279040427'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/8912591349279040427'/><link rel='alternate' type='text/html' href='http://rdbland.blogspot.com/2007/12/una-buona-azione-natale.html' title='Una buona azione a Natale'/><author><name>Rudy</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://my.opera.com/hillrudy/homes/albums/16833/IMG_2787.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11965249.post-8032505667062045181</id><published>2007-12-18T21:19:00.000+01:00</published><updated>2007-12-18T21:20:16.600+01:00</updated><title type='text'>ASM su USB</title><content type='html'>Preso dagli acquisti natalizi (seee) ho ceduto all'offerta delle chiavette USB da parte di Carrefour a 8.90 &amp;euro; per 1 GB. Ne ho comprate 3, per provare almeno la redundancy HIGH oppure un disco spare. Non ho acquistato altro, tranne un paio di cuffie con microfono per Skype.&lt;br /&gt;&lt;br /&gt;Ho inserito le tre chiavette in altrettante prese USB di quelle saldate sulla scheda madre, per ottenere un'alimentazione corretta.&lt;br /&gt;Ho creato un volume ASM "DONKEYS" (da "dongle-keys") con ridondanza HIGH.&lt;br /&gt;Come prima prova ho messo sul volume tre copie degli online-log dell'istanza 11g di prova.&lt;br /&gt;Non è stato esaltante: 2 minuti e mezzo per creare ognuno dei logfile da 50 MB.&lt;br /&gt;&lt;br /&gt;Ipotesi:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Il protocollo di scambio dati tra scheda madre e USB è assai inefficiente&lt;/li&gt;&lt;br /&gt;&lt;li&gt;La HIGH redundancy è un carico troppo elevato per le chiavette&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Tre chiavette assorbono troppa corrente dal bus USB&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;Ho creato i nuovi logfile su Oracle 11g, di cui sto lentamente provando il nuovo Enterprise Manager, in vista di una recensione.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11965249-8032505667062045181?l=rdbland.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rdbland.blogspot.com/feeds/8032505667062045181/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11965249&amp;postID=8032505667062045181' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/8032505667062045181'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/8032505667062045181'/><link rel='alternate' type='text/html' href='http://rdbland.blogspot.com/2007/12/asm-su-usb.html' title='ASM su USB'/><author><name>Rudy</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://my.opera.com/hillrudy/homes/albums/16833/IMG_2787.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11965249.post-5270549974022951617</id><published>2007-12-09T14:02:00.000+01:00</published><updated>2007-12-10T11:11:08.573+01:00</updated><title type='text'>oROCKole</title><content type='html'>"Ask Tom Live" European Tour 2008.&lt;br /&gt;&lt;br /&gt;OK, pagherei per andare a sentire Tom Kyte, ma &lt;a href="http://www.oracle.com/global/uk/education/eblast/emea_two_day_training_ask_tom_live_041207_ol.html"&gt;qui esagerano un po'&lt;/a&gt;, e non è certo la prima volta. Evidentemente hanno piuttosto successo con queste iniziative.&lt;br /&gt;&lt;br /&gt;Ma anche con altre: chi può resistere al fascino di &lt;a href="http://www.oracle.com/global/it/education/eblast/it_q3_winter_campaign_051207_ol.html"&gt;tre gadget di questa levatura&lt;/a&gt; al solo costo di un corso?&lt;br /&gt;&lt;br /&gt;Keep rockin'.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11965249-5270549974022951617?l=rdbland.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.oracle.com/global/uk/education/eblast/emea_two_day_training_ask_tom_live_041207_ol.html' title='oROCKole'/><link rel='replies' type='application/atom+xml' href='http://rdbland.blogspot.com/feeds/5270549974022951617/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11965249&amp;postID=5270549974022951617' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/5270549974022951617'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/5270549974022951617'/><link rel='alternate' type='text/html' href='http://rdbland.blogspot.com/2007/12/orockole.html' title='oROCKole'/><author><name>Rudy</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://my.opera.com/hillrudy/homes/albums/16833/IMG_2787.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11965249.post-1510360885022578966</id><published>2007-12-02T16:48:00.000+01:00</published><updated>2007-12-02T16:49:47.860+01:00</updated><title type='text'>Orion e il mio PC</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_r0EgR7__Fw0/R1LHjxsd3KI/AAAAAAAAD_4/xNtv9r8CevI/s1600-R/orion_hevelius.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://1.bp.blogspot.com/_r0EgR7__Fw0/R1LHjxsd3KI/AAAAAAAAD_4/qB87EDgT2ac/s200/orion_hevelius.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5139389542232349858" /&gt;&lt;/a&gt;Orion è un tool per la valutazione della risposta dell'I/O di un server nell'ottica di utilizzo come database server, senza però dovere installare il motore del database e senza dovere predisporre i dati e le applicazioni di test.&lt;br /&gt;Orion riesce a simulare l'I/O di Oracle perché utilizza le stesse librerie; può simulare sia un carico di lavoro a piccoli blocchi (8 KB), che a blocchi larghi (1 MB) sia sequenziali che casuali, o combinazioni dei due.&lt;br /&gt;Il risultato dei test sono tre misure:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Il throughput in MB/s&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Il numero di operazioni di I/O al secondo (IO/s)&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Il tempo medio di latenza (ms)&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;Stavolta mi gira di pubblicare le misure effettuate sul mio megaserver qui a casa, con i suoi "bei" dischi SATA2 e il sistema operativo a 64 bit (AMD64). Poi si sa, io sono un fisico e quando vedo delle misure non resisto.&lt;br /&gt;&lt;br /&gt;Per prima cosa ho creato due logical volume da 10 GB con LVM su due dischi distinti, ma fisicamente uguali (Maxtor 250 GB SATA2). Ho dovuto usare l'eseguibile a 32 bit e non quello a 64 perché si lamentava dell'assenza di librerie strane. Non ho molta pazienza per queste cose quando il programma in questione non è null'altro che un file singolo eseguibile; d'altra parte la differenza 32-64 bit in questo caso potrebbe influenzare il risultato in qualche misura, come numero di operazioni a disco (più operazioni eseguite negli stessi cicli I/O) e quantità di dati trasferiti (il doppio dei dati con gli stessi cicli I/O); non penso però che in assoluto i valori massimi possano essere molto diversi. Vedremo in futuro, se possibile.&lt;br /&gt;&lt;br /&gt;Ho quindi collegato a due &lt;span style="font-style:italic;"&gt;raw device&lt;/span&gt; i due logical volume, e gli ho cambiato l'ownership per permettere al mio utente di poterci scrivere.&lt;br /&gt;&lt;br /&gt;Ho configurato Orion come segue: 2 dischi, simulazione striping ASM, carico random.&lt;br /&gt;I primo test è stato in sola lettura, mentre per il secondo ho impostato una scrittura al 50%.&lt;br /&gt;I risultati sono abbastanza interessanti.&lt;br /&gt;&lt;br /&gt;Un aiuto per leggere i grafici: Small e Large indicano il numero di processi concorrenti con letture/scritture di 8 KB (Small) e 1 MB (Large). Ho impostato Orion in modo che venissero fatte misure di processi concorrenti, presumendo che fosse il caso peggiore, altrimenti è possibile fare misure separate.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Prima prova: sola lettura&lt;/span&gt;&lt;br /&gt;Ecco il throughput (MB/s):&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_r0EgR7__Fw0/R1LGFRsd3II/AAAAAAAAD_o/qmleFbvC4-o/s1600-R/mbps_run2.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_r0EgR7__Fw0/R1LGFRsd3II/AAAAAAAAD_o/4P0TNOxsVCU/s400/mbps_run2.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5139387918734711938" /&gt;&lt;/a&gt;&lt;br /&gt;Come si vede, all'aumentare dei processi small concorrenti, diminuisce il throughput, tendendo a un valore limite. Contemporaneamente, all'aumentare dei processi large, il throughput aumenta decisamente, ma solo grazie alla dimensione molto maggiore dei blocchi: si vede bene infatti che dopo il terzo processo concorrente il throughput cessa di salire all'improvviso (la differenza tra il grafico giallo e verde è piccola).&lt;br /&gt;&lt;br /&gt;Traffico operazioni:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_r0EgR7__Fw0/R1LIIxsd3LI/AAAAAAAAEAA/vWr6rlgOjSg/s1600-R/iops_run2.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://1.bp.blogspot.com/_r0EgR7__Fw0/R1LIIxsd3LI/AAAAAAAAEAA/AvqABL9cAc4/s400/iops_run2.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5139390177887509682" /&gt;&lt;/a&gt;&lt;br /&gt;Facendo attenzione all'orientazione dell'asse dei blocchi large (cresce verso il lettore), qui si può notare come il numero di operazioni diminuisce all'aumentare dei blocchi large perché i dischi sono sempre più impegnati a leggere più blocchi large concorrenti; il numero aumenta invece all'aumentare dei processi small, ma dopo i 3 processi small concorrenti il trend di salita non è più molto significativo. Sembra che il limite di 3 processi sia una caratteristica del sistema.&lt;br /&gt;&lt;br /&gt;Tempo medio di latenza:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_r0EgR7__Fw0/R1LIJBsd3MI/AAAAAAAAEAI/YXW2xAP4EsY/s1600-R/lat_run2.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_r0EgR7__Fw0/R1LIJBsd3MI/AAAAAAAAEAI/pnm-QLiOYR8/s400/lat_run2.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5139390182182476994" /&gt;&lt;/a&gt;&lt;br /&gt;Qui si nota come il tempo medio di latenza cresca &lt;span style="font-style:italic;"&gt;quasi&lt;/span&gt; linearmente: si vede infatti che c'è una specie di plateau nell'intorno di 3 processi small concorrenti, specie con 4 processi large contemporanei.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Seconda prova: 50% scrittura&lt;/span&gt;&lt;br /&gt;Throughput:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_r0EgR7__Fw0/R1LIJBsd3NI/AAAAAAAAEAQ/Cr__a2MMsR8/s1600-R/mbps_run3.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_r0EgR7__Fw0/R1LIJBsd3NI/AAAAAAAAEAQ/uPMyl6rBrk0/s400/mbps_run3.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5139390182182477010" /&gt;&lt;/a&gt;&lt;br /&gt;Questo grafico è molto simile a quello del caso in sola lettura. Non riesco a dedurre nulla di utile.&lt;br /&gt;&lt;br /&gt;Traffico operazioni:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_r0EgR7__Fw0/R1LIJRsd3OI/AAAAAAAAEAY/QWpH3o-lgtQ/s1600-R/iops_run3.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_r0EgR7__Fw0/R1LIJRsd3OI/AAAAAAAAEAY/lIz_B-sKpzw/s400/iops_run3.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5139390186477444322" /&gt;&lt;/a&gt;&lt;br /&gt;L'unica cosa notevole in questo grafico è che lo scalino nella crescita dell'IO/s rispetto al numero di processi è maggiormente evidente nel caso di processi large assenti. Il numero di processi limite (3) è ancora più determinante.&lt;br /&gt;&lt;br /&gt;Tempo medio di latenza:&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_r0EgR7__Fw0/R1LIJRsd3PI/AAAAAAAAEAg/jr4Va63ajK4/s1600-R/lat_run3.png"&gt;&lt;img style="display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_r0EgR7__Fw0/R1LIJRsd3PI/AAAAAAAAEAg/OI63SyFYTVE/s400/lat_run3.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5139390186477444338" /&gt;&lt;/a&gt;&lt;br /&gt;La latenza risulta maggiore nel caso lettura/scrittura in modo uniforme, tranne per il caso processi large, dove l'aumento è maggiore, probabilmente per l'"effetto soglia" sulla cache interna dei dischi (8 MB).&lt;br /&gt;&lt;br /&gt;Il numero 3 dovrebbe essere una caratteristica dovuta ai gradi di libertà del sistema: il server ha due CPU (è un dual core), l'I/O è in striping su due dischi, quindi delle due l'una: o il sistema riesce a sopportare un processo in più di quello che gli è consentito dall'hardware, oppure &lt;span style="font-style:italic;"&gt;uno in meno&lt;/span&gt;. In pratica i gradi di libertà dovrebbero essere quattro, considerando i possibili accoppiamenti CPU-disco (sto immaginando). Il limite deriverebbe secondo me dall'economicità dell'hardware, che in qualche fase dell'elaborazione ha un collo di bottiglia.&lt;br /&gt;&lt;br /&gt;Spero di riuscire presto a fare qualche prova su hardware professionale come storage DAS SCSI320 o SAN; in tal caso proverò a fare una prova comparativa con i grafici.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11965249-1510360885022578966?l=rdbland.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.oracle.com/technology/software/tech/orion/index.html' title='Orion e il mio PC'/><link rel='replies' type='application/atom+xml' href='http://rdbland.blogspot.com/feeds/1510360885022578966/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11965249&amp;postID=1510360885022578966' title='2 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/1510360885022578966'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/1510360885022578966'/><link rel='alternate' type='text/html' href='http://rdbland.blogspot.com/2007/11/orion-e-il-mio-pc.html' title='Orion e il mio PC'/><author><name>Rudy</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://my.opera.com/hillrudy/homes/albums/16833/IMG_2787.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_r0EgR7__Fw0/R1LHjxsd3KI/AAAAAAAAD_4/qB87EDgT2ac/s72-c/orion_hevelius.jpg' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11965249.post-6748465923717651994</id><published>2007-11-29T20:57:00.000+01:00</published><updated>2007-11-30T14:09:08.677+01:00</updated><title type='text'>Oracle XE e Apache</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_r0EgR7__Fw0/R07Jhl4BkDI/AAAAAAAAD_Q/dvdegP6Z2Jo/s1600-h/oracle_xe_logo.gif"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://4.bp.blogspot.com/_r0EgR7__Fw0/R07Jhl4BkDI/AAAAAAAAD_Q/dvdegP6Z2Jo/s200/oracle_xe_logo.gif" border="0" alt=""id="BLOGGER_PHOTO_ID_5138265803816276018" /&gt;&lt;/a&gt;Sto provando, a tempo perso, Oracle Application Express come framework per lo sviluppo rapido di applicazioni web. Lo scopo sarebbe di appoggiarsi su XE per piccole applicazioni web collaborative da utilizzare in gruppi limitati di persone, con tecnologia Oracle (gratuita).&lt;br /&gt;Una delle prime cose che ho notato è che XE poggia direttamente sul db per quanto riguarda il protocollo HTTP, quindi non c'è Apache, ma risponde direttamente il listener.&lt;br /&gt;La seconda cosa è che virtualmente il database è piuttosto lento nel rispondere alle chiamate da web, anche per un piccolo bacino di utenti; un buon indizio di ciò è anche che di default il listener risponde solo per localhost sulla porta 8080.&lt;br /&gt;&lt;br /&gt;Un buon metodo per pubblicare l'interfaccia di XE con la flessibilità, la sicurezza e la velocità di un webserver è di utilizzare Apache come &lt;span style="font-style:italic;"&gt;reverse proxy&lt;/span&gt; con il modulo mod_proxy.&lt;br /&gt;&lt;br /&gt;Installate Apache a corredo della vostra distribuzione preferita, selezionando anche, se necessario, il modulo mod_proxy. Apache può fare da proxy per vari protocolli, in questo caso utilizziamo il proxy HTTP mod_proxy_http.&lt;br /&gt;&lt;br /&gt;Configurate un VirtualHost di Apache. L'esempio è il seguente:&lt;br /&gt;&lt;tt&gt;&amp;lt;VirtualHost *&amp;gt;&lt;br /&gt;        ServerName sbrillo2-xe&lt;br /&gt;        ServerAdmin your@email.address&lt;br /&gt;&lt;br /&gt;        &amp;lt;Proxy http://localhost:8080/*&amp;gt;&lt;br /&gt;                Order deny,allow&lt;br /&gt;                Allow from all&lt;br /&gt;        &amp;lt;/Proxy&amp;gt;&lt;br /&gt;&lt;br /&gt;        ProxyPass / http://localhost:8080/&lt;br /&gt;        ProxyPassReverse / http://localhost:8080/&lt;br /&gt;&amp;lt;/VirtualHost&amp;gt;&lt;/tt&gt;&lt;br /&gt;In questo modo tutte le richieste mandate al server che risponde a sbrillo2-xe &lt;span style="font-weight:bold;"&gt;sulla porta 80&lt;/span&gt; vengono automaticamente riindirizzate alla porta 8080 del loopback, con la possibilità ora di limitare gli accessi, impostare password HTTP, riscrivere gli URL.&lt;br /&gt;&lt;br /&gt;C'è un ulteriore passo che si può fare: XE sarà comunque lento nelle risposte, visto che chi risponde non è sicuramente ottimizzato per servire pagine web. Possiamo utilizzare il modulo mem_cache, che sgrava il database da servire anche quegli oggetti statici che ogni pagina contiene. Aggiungete le seguenti righe nella vostra sezione del virtualhost:&lt;br /&gt;&lt;tt&gt;&amp;lt;IfModule mod_mem_cache.c&amp;gt;&lt;br /&gt;CacheEnable mem /&lt;br /&gt;# 40 MB cache&lt;br /&gt;MCacheSize 40960&lt;br /&gt;MCacheMaxObjectCount 1000&lt;br /&gt;MCacheMinObjectSize 1&lt;br /&gt;# 20 KB max per oggetto&lt;br /&gt;MCacheMaxObjectSize 20480&lt;br /&gt;&amp;lt;/IfModule&amp;gt;&lt;/tt&gt;&lt;br /&gt;modificando a piacere i valori di cache size, numero massimo di oggetti, dimensione massima degli oggetti da memorizzare, URL.&lt;br /&gt;&lt;br /&gt;Ora la navigazione è molto più fluida e il vostro server è pronto per la pubblicazione su web. Nulla vi vieta, comunque, di usare reverse proxy come squid.&lt;br /&gt;Da parte mia, servirebbe un po' di manualità nella programmazione.&lt;br /&gt;Vi aggiornerò nel caso in cui riesca a mettere assieme una piccola applicazione.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11965249-6748465923717651994?l=rdbland.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rdbland.blogspot.com/feeds/6748465923717651994/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11965249&amp;postID=6748465923717651994' title='2 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/6748465923717651994'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/6748465923717651994'/><link rel='alternate' type='text/html' href='http://rdbland.blogspot.com/2007/11/oracle-xe-e-apache.html' title='Oracle XE e Apache'/><author><name>Rudy</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://my.opera.com/hillrudy/homes/albums/16833/IMG_2787.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://4.bp.blogspot.com/_r0EgR7__Fw0/R07Jhl4BkDI/AAAAAAAAD_Q/dvdegP6Z2Jo/s72-c/oracle_xe_logo.gif' height='72' width='72'/><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11965249.post-3674022034366105514</id><published>2007-11-25T11:19:00.000+01:00</published><updated>2007-11-26T12:10:36.750+01:00</updated><title type='text'>Modifica SPFILE in RAC</title><content type='html'>In ambiente cluster, per impostare il valore delle variabili nell'SPFILE per tutte le istanze, si usa la sintassi:&lt;br /&gt;&lt;tt&gt;ALTER SYSTEM SET &amp;lt;parameter name&amp;gt;=&amp;lt;value&amp;gt; SCOPE=&amp;lt;scope&amp;gt; SID='*'&lt;/tt&gt;&lt;br /&gt;che ha effetto per tutte le istanze del cluster.&lt;br /&gt;&lt;br /&gt;Ma, una volta assegnato il valore della variabile per tutte le istanze, come si fa a &lt;span style="font-style:italic;"&gt;rimuovere&lt;/span&gt; il parametro per &lt;span style="font-style:italic;"&gt;una sola istanza&lt;/span&gt; in caso di necessità?&lt;br /&gt;Esiste una nuova estensione del comando ALTER SYSTEM:&lt;br /&gt;&lt;tt&gt;ALTER SYSTEM &lt;span style="font-weight:bold;"&gt;RESET&lt;/span&gt; &amp;lt;parameter name&amp;gt; SCOPE=&amp;lt;scope&amp;gt; SID=&amp;lt;SID istanza&amp;gt;&lt;/tt&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11965249-3674022034366105514?l=rdbland.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rdbland.blogspot.com/feeds/3674022034366105514/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11965249&amp;postID=3674022034366105514' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/3674022034366105514'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/3674022034366105514'/><link rel='alternate' type='text/html' href='http://rdbland.blogspot.com/2007/11/modifica-spfile-in-rac.html' title='Modifica SPFILE in RAC'/><author><name>Rudy</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://my.opera.com/hillrudy/homes/albums/16833/IMG_2787.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11965249.post-2399494286266548525</id><published>2007-11-20T22:31:00.000+01:00</published><updated>2007-11-21T09:11:57.162+01:00</updated><title type='text'>Multiplex controlfile con RAC e ASM</title><content type='html'>Avete creato un database RAC con ASM e vi siete trovati con un solo controlfile? Avete bisogno di duplicare il controlfile su più destinazioni o anche solo in posti diversi dello stesso storage?&lt;br /&gt;Il problema maggiore è che ASM non è accessibile se non da un processo server di Oracle.&lt;br /&gt;&lt;br /&gt;Ho elaborato un metodo molto efficace, che ho &lt;a href="http://forums.oracle.com/forums/message.jspa?messageID=2166285#2166285"&gt;pubblicato sui forum Oracle&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Probabilmente al posto del punto 5 si può anche scrivere&lt;br /&gt;&lt;tt&gt;restore controlfile from '+ASMDISK_DATA/prea/controlfile/current.256.636907509';&lt;/tt&gt;&lt;br /&gt;lasciando ad Oracle capire quali e quante sono le copie del controlfile da ripristinare, in quanto le conosce dal parametro control_files appena impostato.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11965249-2399494286266548525?l=rdbland.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://forums.oracle.com/forums/message.jspa?messageID=2166285#2166285' title='Multiplex controlfile con RAC e ASM'/><link rel='replies' type='application/atom+xml' href='http://rdbland.blogspot.com/feeds/2399494286266548525/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11965249&amp;postID=2399494286266548525' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/2399494286266548525'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/2399494286266548525'/><link rel='alternate' type='text/html' href='http://rdbland.blogspot.com/2007/11/multiplex-controlfile-con-rac-e-asm.html' title='Multiplex controlfile con RAC e ASM'/><author><name>Rudy</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://my.opera.com/hillrudy/homes/albums/16833/IMG_2787.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11965249.post-2374405121496224867</id><published>2007-11-19T22:08:00.000+01:00</published><updated>2007-11-21T09:11:21.923+01:00</updated><title type='text'>Oracle VM, prova 1</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_r0EgR7__Fw0/RzlWSILaz0I/AAAAAAAAD-U/qQwvM2l9u4I/s1600-h/oravm2.png"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_r0EgR7__Fw0/RzlWSILaz0I/AAAAAAAAD-U/qQwvM2l9u4I/s200/oravm2.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5132228119798402882" /&gt;&lt;/a&gt;Ho provato ad installare Oracle VM su una coppia di server virtuali VMware :-), ma ho qualche difficoltà nell'installazione del server principale, che non riesce a vedere il resto della rete.&lt;br /&gt;Qualche difficoltà ma alla fine tutto bene con il &lt;span style="font-style:italic;"&gt;management server&lt;/span&gt;, basato su Enterprise Linux, OC4J e Oracle XE, tutto piuttosto automatico.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11965249-2374405121496224867?l=rdbland.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rdbland.blogspot.com/feeds/2374405121496224867/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11965249&amp;postID=2374405121496224867' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/2374405121496224867'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/2374405121496224867'/><link rel='alternate' type='text/html' href='http://rdbland.blogspot.com/2007/11/oracle-vm-prova-1.html' title='Oracle VM, prova 1'/><author><name>Rudy</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://my.opera.com/hillrudy/homes/albums/16833/IMG_2787.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_r0EgR7__Fw0/RzlWSILaz0I/AAAAAAAAD-U/qQwvM2l9u4I/s72-c/oravm2.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11965249.post-8564263970229987175</id><published>2007-11-18T22:03:00.000+01:00</published><updated>2007-11-19T09:07:02.071+01:00</updated><title type='text'>Creazione RAC con script dbca</title><content type='html'>Ho avuto l'occasione di creare un database Oracle RAC senza poter usare dbca, ma avendo a disposizione degli script fatti creare a dbca in occasione della creazione del primo database di un cluster.&lt;br /&gt;Infatti proprio lì stava il problema: volevo creare un database partendo da un nodo del cluster che non fosse il primo. Il problema era che dbca non riconosceva l'istanza ASM locale, forse perché installata su una home propria e nel contempo perché non era la prima.&lt;br /&gt;L'installazione tramite gli script dbca avviene in modalità singola istanza; vengono solo aggiunte le &lt;span style="font-style:italic;"&gt;cluster database views&lt;/span&gt; al catalogo, e i principali parametri di inizializzazione RAC. Alla fine degli script, però, ci si ritrova ancora un po' a largo, e serve qualche intervento manuale, riportato &lt;a href="http://download.oracle.com/docs/cd/B19306_01/install.102/b14203/scripts.htm#sthref1300"&gt;qui&lt;/a&gt;.&lt;br /&gt;Gli interventi sui nodi diversi dal primo sono molto marginali: la modifica del pfile per farlo puntare all'spfile, la creazione delle directory *dump.&lt;br /&gt;&lt;br /&gt;In pratica gli interventi finali, a database anche solo in &lt;span style="font-style:italic;"&gt;nomount&lt;/span&gt;, consistono nella modifica di alcuni parametri (tra cui far diventare il database realmente in cluster con CLUSTER_DATABASE=TRUE), nella popolazione del tnsnames.ora per tutti i nodi del cluster (notare una delle poche applicazioni dei parametri *listener), e nella modifica dell'OCR per fargli riconoscere il nuovo database e le sue istanze.&lt;br /&gt;&lt;br /&gt;Generalmente srvctl viene chiamato dai wizard come dbca durante le fasi di configurazione o installazione del database o dei servizi. Nel nostro caso (aggiunta di un database in cluster) Clusterware è piuttosto facile da configurare:&lt;br /&gt;&lt;tt&gt;srvctl add database -d &amp;lt;name&amp;gt; -o &amp;lt;oracle_home&amp;gt;&lt;/tt&gt;&lt;br /&gt;A questo punto Clusterware vuole sapere solo quali sono le istanze associate:&lt;br /&gt;&lt;tt&gt;srvctl add instance -d &amp;lt;name&amp;gt; -i &amp;lt;inst_name&amp;gt; -n &amp;lt;node_name&amp;gt;&lt;/tt&gt;&lt;br /&gt;Pochi parametri, quelli essenziali: il nome dell'istanza, a quale cluster è associata, e su quale nodo gira. Tutto qua.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11965249-8564263970229987175?l=rdbland.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rdbland.blogspot.com/feeds/8564263970229987175/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11965249&amp;postID=8564263970229987175' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/8564263970229987175'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/8564263970229987175'/><link rel='alternate' type='text/html' href='http://rdbland.blogspot.com/2007/11/creazione-rac-con-script-dbca.html' title='Creazione RAC con script dbca'/><author><name>Rudy</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://my.opera.com/hillrudy/homes/albums/16833/IMG_2787.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11965249.post-8161873975521823556</id><published>2007-11-14T22:16:00.000+01:00</published><updated>2007-11-15T09:04:49.719+01:00</updated><title type='text'>Old-style: Enterprise Manager Console</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_r0EgR7__Fw0/RzrZjTg4YgI/AAAAAAAAD-c/2l9VT_BFJG4/s1600-h/emcs.gif"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_r0EgR7__Fw0/RzrZjTg4YgI/AAAAAAAAD-c/2l9VT_BFJG4/s200/emcs.gif" border="0" alt=""id="BLOGGER_PHOTO_ID_5132653925898936834" /&gt;&lt;/a&gt;Siete anche voi dei &lt;span style="font-style:italic;"&gt;fan&lt;/span&gt; della vecchia console di Enterprise Manager in Java?&lt;br /&gt;Bene, prima di tutto, lo saprete già benissimo, non è sparita, ma è sempre presente nel client CD e nel &lt;span style="font-style:italic;"&gt;companion CD&lt;/span&gt;: basta scaricarli e installarli.&lt;br /&gt;Il funzionamento della console, però, sembra fermo alle funzionalità della release 9i. Nonostante ciò, a mio parere molte funzionalità sono sempre migliori di quelle riscritte in EM Database Control via web, incluso di default nella 10g. Il problema è che alcune di queste funzionalità hanno bisogno preferibilmente di un repository, ovvero di uno schema su un database Oracle, per salvare i propri dati.&lt;br /&gt;&lt;br /&gt;Oggi ad esempio ho provato a configurare il Change Manager, che si basa sul repository di EM. Attenzione: il repository di EM versione Java è ancora quello della vecchia versione; non si tratta del nuovo repository di Enterprise Manager DB Control (10g).&lt;br /&gt;Nell'help della Console c'è la sezione "Requirements before creating a standalone repository", in cui viene spiegato come creare il tablespace e l'utente per il repository. Le istruzioni funzionano anche per 10g, tranne per i permessi dell'utente/schema.&lt;br /&gt;&lt;br /&gt;Per prima cosa bisogna creare il tablespace del repository, di circa 20M con un massimo di 2G, con un nome qualsiasi (io ho adottato OEM9REP). Probabilmente si può utilizzare SYSAUX, ma non vorrei che la presenza di segmenti "sconosciuti" nel tablespace possa dare fastidio al nuovo EM.&lt;br /&gt;La "difficoltà" è nella creazione dell'utente: i privilegi/ruoli richiesti sono CONNECT, SELECT_CATALOG_ROLE, CREATE TRIGGER, CREATE PROCEDURE, EXECUTE ANY PROCEDURE, CREATE TYPE, EXECUTE ANY TYPE, SELECT ANY TABLE. C'è un problema: il ruolo CONNECT da 10gR2 in poi non ha gli stessi permessi che aveva nelle vecchie versioni; per la sola creazione del repository mancano i privilegi CREATE SESSION, CREATE TABLE, CREATE VIEW, CREATE SYNONYM, CREATE DATABASE LINK, CREATE CLUSTER, CREATE SEQUENCE, ALTER SESSION. Volendo si possono riassegnare al ruolo CONNECT mediante l'esecuzione dello script &lt;tt&gt;?/rdbms/admin/rstrconn.sql&lt;/tt&gt;.&lt;br /&gt;Il repository viene creato dall'interfaccia grafica alla prima connessione; vengono eseguiti una serie di script sql presi dall'installazione del client locale.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11965249-8161873975521823556?l=rdbland.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rdbland.blogspot.com/feeds/8161873975521823556/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11965249&amp;postID=8161873975521823556' title='6 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/8161873975521823556'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/8161873975521823556'/><link rel='alternate' type='text/html' href='http://rdbland.blogspot.com/2007/11/old-style-enterprise-manager-console.html' title='Old-style: Enterprise Manager Console'/><author><name>Rudy</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://my.opera.com/hillrudy/homes/albums/16833/IMG_2787.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_r0EgR7__Fw0/RzrZjTg4YgI/AAAAAAAAD-c/2l9VT_BFJG4/s72-c/emcs.gif' height='72' width='72'/><thr:total>6</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11965249.post-4708541032036913332</id><published>2007-11-13T08:39:00.000+01:00</published><updated>2007-11-13T08:47:22.779+01:00</updated><title type='text'>Oracle VM</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_r0EgR7__Fw0/RzlWSILaz0I/AAAAAAAAD-U/qQwvM2l9u4I/s1600-h/oravm2.png"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_r0EgR7__Fw0/RzlWSILaz0I/AAAAAAAAD-U/qQwvM2l9u4I/s200/oravm2.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5132228119798402882" /&gt;&lt;/a&gt;A &lt;a href="http://www.reuters.com/article/marketsNews/idUKN1248652920071112?rpc=44"&gt;sorpresa&lt;/a&gt;, Oracle ha annunciato la sua versione della virtualizzazione del sistema operativo, basata su Xen.&lt;br /&gt;&lt;br /&gt;Da domani si potrà già &lt;a href="http://www.oracle.com/technologies/virtualization/index.html"&gt;scaricare gratuitamente dal sito&lt;/a&gt;. Immagino che saranno in molti a provare questa nuova tecnologia, me compreso. Molti, però, che dovranno avere almeno due server "vuoti" a disposizione, come si legge nel &lt;a href="http://www.oracle.com/technologies/virtualization/docs/ovm-ds.pdf"&gt;data sheet&lt;/a&gt;. Praticamente due macchine virtuali VMware :-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11965249-4708541032036913332?l=rdbland.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.oracle.com/corporate/press/2007_nov/ovm-ga-111107.html' title='Oracle VM'/><link rel='replies' type='application/atom+xml' href='http://rdbland.blogspot.com/feeds/4708541032036913332/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11965249&amp;postID=4708541032036913332' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/4708541032036913332'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/4708541032036913332'/><link rel='alternate' type='text/html' href='http://rdbland.blogspot.com/2007/11/oracle-vm.html' title='Oracle VM'/><author><name>Rudy</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://my.opera.com/hillrudy/homes/albums/16833/IMG_2787.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_r0EgR7__Fw0/RzlWSILaz0I/AAAAAAAAD-U/qQwvM2l9u4I/s72-c/oravm2.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11965249.post-3444949840324377135</id><published>2007-11-05T19:03:00.000+01:00</published><updated>2007-11-14T12:16:17.746+01:00</updated><title type='text'>Limiti della log history</title><content type='html'>Tsè, ho perso due ore per una bazzeccola: RMAN mi ha dato un errore sul backup degli archivelog perché non trovava il record corrispondente nel controlfile.&lt;br /&gt;Credevo che ciò fosse dovuto al parametro MAXLOGHISTORY di creazione del controlfile; in realtà avevo aspettato troppo tra un backup e l'altro, più della recovery window, quindi Oracle aveva cancellato le entry troppo vecchie dal controlfile, quelle più vecchie di CONTROL_FILE_RECORD_KEEP_TIME (in giorni); tra l'altro l'avevo impostato io con la policy di RMAN!&lt;br /&gt;&lt;br /&gt;MAXLOGHISTORY ha senso solo in RAC. Praticamente dà il numero di righe della tabella V$LOG_HISTORY.&lt;br /&gt;Il numero di entry varia &lt;span style="font-style:italic;"&gt;dinamicamente&lt;/span&gt;, adattandosi alle esigenze della receovery window.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11965249-3444949840324377135?l=rdbland.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rdbland.blogspot.com/feeds/3444949840324377135/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11965249&amp;postID=3444949840324377135' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/3444949840324377135'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/3444949840324377135'/><link rel='alternate' type='text/html' href='http://rdbland.blogspot.com/2007/11/limiti-della-log-history.html' title='Limiti della log history'/><author><name>Rudy</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://my.opera.com/hillrudy/homes/albums/16833/IMG_2787.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11965249.post-5085318548088587431</id><published>2007-10-25T21:44:00.000+02:00</published><updated>2007-11-17T10:03:11.467+01:00</updated><title type='text'>DBCA non sente ASM</title><content type='html'>Ho installato (per lavoro) un nuovo RAC a due nodi, con una nuova politica di storage da provare.&lt;br /&gt;Proprio durante la creazione del DB mi sono imbattuto in una specie di bug di dbca che avevo già trovato a casa, ma a cui non avevo dato peso, visto che non capita tutte le volte che si crea un database, e a me è capitato una sola volta.&lt;br /&gt;Utilizzando il &lt;span style="font-style:italic;"&gt;Database Configuration Assistant&lt;/span&gt;, nella pagina della scelta dello storage il programma non riconosce l'istanza ASM attiva sul cluster (ma càpita anche su &lt;span style="font-style:italic;"&gt;single-instance&lt;/span&gt;), e chiede di riconfigurarla:&lt;br /&gt;&lt;blockquote&gt;DBCA could not startup the ASM instance configured on this node. To proceed with the database creation using ASM, ASM instance needs to be up and running. Do you want to recreate ASM instance on this node?&lt;/blockquote&gt;&lt;br /&gt;È strano che non si trovi praticamente nulla su internet né su Metalink. Qualcosa ho trovato in un blog di un collega (click sul titolo del post), che però lascia senza una soluzione concreta.&lt;br /&gt;Ebbene, la soluzione &lt;span style="font-weight:bold;"&gt;esiste&lt;/span&gt;.&lt;br /&gt;Si trova sul manuale del corso Oracle RAC 10gR2, ma non riguarda questo errore, solo un invisibile prerequisito per eseguire dbca, che passerebbe inosservato a chiunque. Avevo scritto qualche nota a margine nel manuale sulla pagina in questione, ora capisco perché.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Soluzione:&lt;/span&gt; Si tratta di impostare le variabili d'ambiente Oracle da zero, partendo da un ambiente senza variabili Oracle definite, esclusivamente in questo modo (esempio):&lt;br /&gt;&lt;br /&gt;&lt;tt&gt;export ORACLE_BASE=/u01/app/oracle&lt;br /&gt;export ORACLE_SID=&amp;lt;SID del database da creare (NON di ASM)&amp;gt;&lt;br /&gt;export ORACLE_HOME=/u01/app/oracle/product/10.2.0&lt;br /&gt;export PATH=$PATH:$ORACLE_HOME/bin:$CRS_HOME/bin&lt;/tt&gt;&lt;br /&gt;&lt;br /&gt;Non serve null'altro! In questo modo funziona anche l'installazione con un'ORACLE_HOME separata per ASM.&lt;br /&gt;&lt;br /&gt;Mi raccomando, se questo post vi è stato utile... almeno un piccolo commento!&lt;br /&gt;&lt;br /&gt;(17-11) &lt;span style="font-weight:bold;"&gt;Aggiornamento&lt;/span&gt;: la procedura descritta non ha funzionato in occasione dell'aggiunta di un database RAC a un cluster esistente, su un nodo diverso dal primo. Nonostante le varie prove fatte, non sono riuscito a fare riconoscere l'istanza ASM a DBCA, anche se esistente e regolarmente funzionante.&lt;br /&gt;Alla fine ho dovuto optare per la creazione del database mediante script, procedura per nulla automatica nel caso di RAC. Ma per questo ci sarà una blog-entry in seguito.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11965249-5085318548088587431?l=rdbland.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://dba-brent.blogspot.com/2007/05/having-issues-using-dbca-with-asm-on.html' title='DBCA non sente ASM'/><link rel='replies' type='application/atom+xml' href='http://rdbland.blogspot.com/feeds/5085318548088587431/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11965249&amp;postID=5085318548088587431' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/5085318548088587431'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/5085318548088587431'/><link rel='alternate' type='text/html' href='http://rdbland.blogspot.com/2007/10/dbca-non-sente-asm.html' title='DBCA non sente ASM'/><author><name>Rudy</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://my.opera.com/hillrudy/homes/albums/16833/IMG_2787.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11965249.post-3521816762320849331</id><published>2007-10-24T21:24:00.000+02:00</published><updated>2007-10-25T21:46:07.552+02:00</updated><title type='text'>Nuovo RAC a 64 bit (2)</title><content type='html'>L'installazione di 10.2.0.1.0 è andata bene e il RAC era a posto.&lt;br /&gt;I problemi sono arrivati dall'aggiornamento a 10.2.0.3.0. Subito si è ripresentato l'errore di scrittura su disco di VMware, quando il server virtuale tenta di allocare lo spazio sul disco reale in seguito alla crescita dell'occupazione del filesystem virtuale.&lt;br /&gt;Quindi, regola generale:&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Allocate SEMPRE PRIMA tutto lo spazio su disco necessario per tutto lo storage virtuale che intendete usare.&lt;/span&gt;&lt;br /&gt;Fortunatamente questa regola è di facile applicazione con i dischi moderni da desktop, praticamente della dimensione minima di 500 GB, a poco più di 100 euro sul mercato.&lt;br /&gt;Nel mio caso i problemi si avevano quando trasferivo gli zip di aggiornamento su un nodo e poi scompattavo gli archivi.&lt;br /&gt;&lt;br /&gt;Per prima cosa ho aggiornato Clusterware. L'operazione è possibile in &lt;span style="font-style:italic;"&gt;rolling-upgrade&lt;/span&gt;, ovvero spegnendo Clusterware solo su un sottoinsieme di nodi che si vogliono aggiornare in contemporanea; normalmente può essere gradito aggiornare &lt;span style="font-style:italic;"&gt;un&lt;/span&gt; nodo del cluster alla volta; altrimenti si spegne tutto e buonanotte. Una particolarità è che, aggiornando solo il primo nodo, con i comandi &lt;tt&gt;crsctl&lt;/tt&gt; per mostrare la versione, si può evidenziare come la versione che è installata è quella aggiornata (dopo l'upgrade), mentre la versione in esecuzione è quella vecchia, per via dei rimanenti nodi del cluster non ancora aggiornati.&lt;br /&gt;&lt;br /&gt;In seguito ho aggiornato il database; quasi tutto regolare, a parte piccoli errori strani che non sono sicuro siano ricondicibili al database.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11965249-3521816762320849331?l=rdbland.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rdbland.blogspot.com/feeds/3521816762320849331/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11965249&amp;postID=3521816762320849331' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/3521816762320849331'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/3521816762320849331'/><link rel='alternate' type='text/html' href='http://rdbland.blogspot.com/2007/10/nuovo-rac-64-bit-2.html' title='Nuovo RAC a 64 bit (2)'/><author><name>Rudy</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://my.opera.com/hillrudy/homes/albums/16833/IMG_2787.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11965249.post-3438775046570807929</id><published>2007-10-22T22:00:00.000+02:00</published><updated>2007-10-23T17:24:49.248+02:00</updated><title type='text'>Nuovo RAC a 64 bit</title><content type='html'>Tramonta l'idea di mettere su un RAC con Solaris/64 su macchine virtuali. L'avventura con Solaris sembrava partita bene, invece al momento di aggiungere una scheda di rete in più e qualche hd virtuale in più, le macchine virtuali andavano in &lt;span style="font-style:italic;"&gt;kernel panic&lt;/span&gt; (con dump relativo). Peccato, quando funzionavano erano molto veloci.&lt;br /&gt;&lt;br /&gt;Bene, domenica ho resistito forzatamente alla voglia di uscire nonostante il freddo, e ho provato qualche novità per il mio megaserver a casa, in particolare con l'accoppiata 10gR2/64 - OpenSuSE/64 che è appena uscita in versione 10.3.&lt;br /&gt;Ho aggiornato anche il kernel del mio megaserver, aggiungendo ai repository della SuSE anche quelli nVidia, così ad ogni aggiornamento del kernel i driver nVidia andranno a posto automaticamente :-)&lt;br /&gt;VMware, con la nuova versione 1.0.4, sembra avere meno problemi. A proposito, &lt;span style="font-weight:bold;"&gt;consiglio di preallocare sempre i dischi virtuali di VMware&lt;/span&gt;, perché le operazioni di I/O pesante con estensione dei volumi non sono molto affidabili, a volte si bloccano (almeno sul mio megaserver).&lt;br /&gt;&lt;br /&gt;OpenSuSE 10.3 sembra fatta apposta per fare andare Oracle. Stavolta (10.3) il tema è verdino. L'installatore presenta persino la possibilità di fare bonding delle schede di rete.&lt;br /&gt;Prima avvertenza: &lt;span style="font-weight:bold;"&gt;controllate scrupolosamente tutti i prerequisiti software di Oracle!&lt;/span&gt; Ho perso lunghe ore a cercare di capire perché l'installazione non andava a buon fine anche se avevo risolto in modo corretto tutti i problemi di librerie. L'importante è avere i pacchetti richiesti prima di fare partire l'installer.&lt;br /&gt;&lt;br /&gt;Stavolta ho usato ASM come storage condiviso: solite due schede di rete, 2 dischi per OCR e voting, e un disco per ASM.&lt;br /&gt;Due trucchi molto interessanti:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Se l'installer non parte con un errore Xlib.lock di Java, è colpa di SuSE che ha lasciato qualche errorino in giro; meno male che &lt;a href="http://en.opensuse.org/Xlib.lock"&gt;basta una variabile d'ambiente&lt;/a&gt;&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Per fare funzionare &lt;tt&gt;vipca&lt;/tt&gt; e &lt;tt&gt;srvctl&lt;/tt&gt; è necessario aggiungere la riga&lt;br /&gt;&lt;tt&gt;unset LD_ASSUME_KERNEL&lt;/tt&gt;&lt;br /&gt;nei rispettivi script di avvio (loro stessi) con un editor di testo, appena dopo che la variabile viene impostata.&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Durante la partenza di &lt;tt&gt;vipca&lt;/tt&gt;, alla fine della creazione del cluster, se non ci sono interfacce di rete "vip" già configurate, l'installer esce con un errore di "lista di interfacce". Un eccellente workaround è configurare a mano almeno un'interfaccia con &lt;tt&gt;oifcfg&lt;/tt&gt; (leggere le istruzioni con l'help o il manuale). Dopo vipca parte senza problemi.&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;Ora è necessario un upgrade a 10.2.0.3.0. Sarà il mio primo upgrade di un cluster. O al massimo il secondo. A presto con le novità.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11965249-3438775046570807929?l=rdbland.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rdbland.blogspot.com/feeds/3438775046570807929/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11965249&amp;postID=3438775046570807929' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/3438775046570807929'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/3438775046570807929'/><link rel='alternate' type='text/html' href='http://rdbland.blogspot.com/2007/10/nuovo-rac-64-bit.html' title='Nuovo RAC a 64 bit'/><author><name>Rudy</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://my.opera.com/hillrudy/homes/albums/16833/IMG_2787.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11965249.post-5356437599322053968</id><published>2007-10-21T21:47:00.000+02:00</published><updated>2007-10-22T15:52:16.225+02:00</updated><title type='text'>Oracle 11g/x86_64</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_r0EgR7__Fw0/Rsv8foGKH2I/AAAAAAAAC-0/KzuskDbr4s8/s1600-h/11g_splash.gif"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_r0EgR7__Fw0/Rsv8foGKH2I/AAAAAAAAC-0/KzuskDbr4s8/s200/11g_splash.gif" border="0" alt=""id="BLOGGER_PHOTO_ID_5101448623196610402" /&gt;&lt;/a&gt;È arrivata da un paio di giorni la &lt;a href="http://www.oracle.com/technology/software/products/database/index.html"&gt;nuova versione di 11g per x86_64&lt;/a&gt;.&lt;br /&gt;Ovviamente non ho resistito e l'ho installata subito su OpenSuSE 10.2/64. Nessun problema, funziona alla grande.&lt;br /&gt;&lt;br /&gt;Ho già preparato un lungo post sulle novità in fase di sperimentazione, anche se purtroppo non includono più Solaris. A presto anche per un'analisi più approfondita su 11g.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11965249-5356437599322053968?l=rdbland.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.oracle.com/technology/software/products/database/index.html' title='Oracle 11g/x86_64'/><link rel='replies' type='application/atom+xml' href='http://rdbland.blogspot.com/feeds/5356437599322053968/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11965249&amp;postID=5356437599322053968' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/5356437599322053968'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/5356437599322053968'/><link rel='alternate' type='text/html' href='http://rdbland.blogspot.com/2007/10/oracle-11gx8664.html' title='Oracle 11g/x86_64'/><author><name>Rudy</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://my.opera.com/hillrudy/homes/albums/16833/IMG_2787.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_r0EgR7__Fw0/Rsv8foGKH2I/AAAAAAAAC-0/KzuskDbr4s8/s72-c/11g_splash.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11965249.post-8629887705875334856</id><published>2007-10-16T21:20:00.000+02:00</published><updated>2007-10-17T10:28:11.234+02:00</updated><title type='text'>Se manca TEMP</title><content type='html'>Dopo un restore completo del database o una creazione di uno standby fisico mancano sempre i datafile dei tablespace temporanei.&lt;br /&gt;Ammettiamo di avere un solo TEMP con un datafile, su uno standby. All'apertura del db l'alert_log darà un errore perché Oracle non trova il datafile temporaneo. È sufficiente crearlo, a database aperto (in read only nel caso dello standby):&lt;br /&gt;&lt;br /&gt;&lt;tt&gt;SQL&amp;gt; ALTER TABLESPACE TEMP ADD TEMPFILE '&amp;lt;file name&amp;gt;' SIZE &amp;lt;n&amp;gt;M[G, ...];&lt;/tt&gt;&lt;br /&gt;&lt;br /&gt;Controllate poi che tutto sia a posto in V$TEMPFILE.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11965249-8629887705875334856?l=rdbland.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rdbland.blogspot.com/feeds/8629887705875334856/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11965249&amp;postID=8629887705875334856' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/8629887705875334856'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/8629887705875334856'/><link rel='alternate' type='text/html' href='http://rdbland.blogspot.com/2007/10/se-manca-temp.html' title='Se manca TEMP'/><author><name>Rudy</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://my.opera.com/hillrudy/homes/albums/16833/IMG_2787.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11965249.post-777888984105294435</id><published>2007-10-13T16:02:00.000+02:00</published><updated>2007-10-13T16:02:13.143+02:00</updated><title type='text'>Da 64 a 32 bit (e viceversa)</title><content type='html'>Nei giorni scorsi ho dovuto affrontare un'emergenza: una macchina di produzione Itanium (IA64) ha smesso di funzionare per ragioni relative allo storage esterno. Rimaneva lo standby fisico a 32 bit, che comunque doveva andare presto in produzione al posto dell'IA64.&lt;br /&gt;&lt;br /&gt;Pazienza, dopo avere applicato gli ultimi log all'istanza standby, ho cominciato la procedura di failover.&lt;br /&gt;Subito ho avuto un piccolo problema per via della R1 del database 10g, che aveva una sintassi leggermente diversa per il failover manuale (grrr!), ma alla fine il &lt;span style="font-style:italic;"&gt;role transition&lt;/span&gt; è andato bene.&lt;br /&gt;Ma non tutto è andato per il verso giusto. Infatti, entrando come utente qualsiasi nel database, spuntava fuori l'errore:&lt;br /&gt;&lt;br /&gt;&lt;tt&gt;ORA-06553: PLS-801: internal error [56319]&lt;br /&gt;Error accessing package DBMS_APPLICATION_INFO&lt;/tt&gt;&lt;br /&gt;&lt;br /&gt;Suonava come un problema di dizionario dati. E infatti, a quanto si intuiva dalla &lt;a href="http://download.oracle.com/docs/html/B14405_01/dbrelnotes.htm#CHDECACI"&gt;documentazione&lt;/a&gt;, bisogna fare uso di &lt;span style="font-weight:bold;"&gt;?/rdbms/admin/utlirp.sql&lt;/span&gt;, seguito da utlrp.sql, come si può leggere nelle istruzioni nell'header del file stesso (da seguire assolutamente).&lt;br /&gt;Il dizionario è andato a posto e il db ha ricominciato a funzionare correttamente.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11965249-777888984105294435?l=rdbland.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rdbland.blogspot.com/feeds/777888984105294435/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11965249&amp;postID=777888984105294435' title='3 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/777888984105294435'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/777888984105294435'/><link rel='alternate' type='text/html' href='http://rdbland.blogspot.com/2007/10/da-64-32-bit-e-viceversa.html' title='Da 64 a 32 bit (e viceversa)'/><author><name>Rudy</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://my.opera.com/hillrudy/homes/albums/16833/IMG_2787.JPG'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11965249.post-767063200152700715</id><published>2007-10-11T21:01:00.000+02:00</published><updated>2007-10-13T16:02:51.122+02:00</updated><title type='text'>Copiare datafilecopy</title><content type='html'>No, non sto parlando di spostare un datafile da un posto a un altro (procedura con il tablespace offline), ma di copiare ad esempio le copie dei datafile effettuate con RMAN in un luogo remoto.&lt;br /&gt;Il mio consiglio, che può essere comunque utile per spostare file di grandi dimensioni oppure tanti file, è quello di usare il comando tar in combinazione con ssh.&lt;br /&gt;&lt;br /&gt;Ad esempio:&lt;br /&gt;&lt;tt&gt;# tar czf - -T &amp;lt;file lista&amp;gt; | ssh &amp;lt;user&amp;gt;@&amp;lt;host&amp;gt; 'tar xzf - -C &amp;lt;dest dir&amp;gt;'&lt;/tt&gt;&lt;br /&gt;&lt;br /&gt;dove &amp;lt;file lista&amp;gt; (opzionale) è un file contenente la lista dei file che volete copiare, e &amp;lt;dest dir&amp;gt; è directory in cui viene eseguita l'estrazione del tar all'arrivo.&lt;br /&gt;In pratica viene creato uno stream di dati in standard output, che viene preso in standard input da ssh, trasferito sul canale sicuro, e preso in standard input da tar sulla macchina destinazione, per essere poi estratto.&lt;br /&gt;&lt;br /&gt;I vantaggi di questa soluzione sono molteplici:&lt;br /&gt;&lt;ol&gt;&lt;li&gt;Non viene usato il filesystem, quindi non ci sono limiti fisici alle dimensioni dei file trasferiti&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Lo stream è compresso alla sorgente con gzip, quindi il trasferimento è "da più veloce a molto più veloce"&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Si possono usare tutte le possibilità offerte dal tar&lt;/li&gt;&lt;br /&gt;&lt;li&gt;Lo stream di dati è criptato&lt;/li&gt;&lt;br /&gt;&lt;li&gt;C'è un implicito controllo di integrità nel trasporto data dall'uso di gzip&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;&lt;br /&gt;C'è ancora un vantaggio relativo: se i datafile non sono pieni al 100%, gzip sarà incredibilmente efficiente nel trasporto dei dati: si riescono ad ottenere &lt;span style="font-style:italic;"&gt;transfer rate&lt;/span&gt; da GB al secondo!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11965249-767063200152700715?l=rdbland.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rdbland.blogspot.com/feeds/767063200152700715/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11965249&amp;postID=767063200152700715' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/767063200152700715'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/767063200152700715'/><link rel='alternate' type='text/html' href='http://rdbland.blogspot.com/2007/10/copiare-datafilecopy.html' title='Copiare datafilecopy'/><author><name>Rudy</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://my.opera.com/hillrudy/homes/albums/16833/IMG_2787.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11965249.post-1606300281856398695</id><published>2007-10-08T16:15:00.000+02:00</published><updated>2007-10-08T16:20:08.001+02:00</updated><title type='text'>Lavori in corso</title><content type='html'>Ci sono ancora: ho poco tempo ma sto cercando di installare 11g su &lt;a href="http://www.oracle.com/technologies/linux/index.html"&gt;Enterprise Linux&lt;/a&gt; e un cluster 10g ad uso test sotto Solaris 10 x86_64. Tutto ciò in tre macchine virtuali che girano sul mio potente server dai led blu :-)&lt;br /&gt;Intanto i problemi di scrittura su disco si stanno risolvendo con l'aggiornamento firmware della scheda madre, del kernel Linux/64 e di VMware, arrivato alla versione 1.0.4.&lt;br /&gt;Ci vuole tempo!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11965249-1606300281856398695?l=rdbland.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rdbland.blogspot.com/feeds/1606300281856398695/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11965249&amp;postID=1606300281856398695' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/1606300281856398695'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/1606300281856398695'/><link rel='alternate' type='text/html' href='http://rdbland.blogspot.com/2007/10/lavori-in-corso.html' title='Lavori in corso'/><author><name>Rudy</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://my.opera.com/hillrudy/homes/albums/16833/IMG_2787.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11965249.post-4631643593833099186</id><published>2007-08-27T09:43:00.000+02:00</published><updated>2007-08-27T09:43:37.505+02:00</updated><title type='text'>OpenSuSE 10.2/64 e driver nVidia</title><content type='html'>Posto qui questo avviso perché dovrebbe interessare maggiormente chi come me fa prove su Oracle e Linux a 64 bit.&lt;br /&gt;La nVidia evidentemente legge il mio blog :-) e ha deciso di rilasciare i driver nForce (i chipset nVidia) versione 1.23 anche per OpenSuSE 10.2.&lt;br /&gt;Unico piccolo difetto è che la versione "build" del kernel di rilascio è quella precedente all'ultimo aggiornamento ufficiale (2.6.18.8-0.5-default), ma l'installazione dell'rpm e il caricamento del modulo vanno a buon fine. Bisogna comunque eseguire &lt;tt&gt;mkinitrd&lt;/tt&gt; per ricreare il ramdisk di avvio, visto che comunque il modulo sata_nv viene richiesto all'avvio del kernel. Fatevi prima una copia dell'initrd.&lt;br /&gt;I problemi di block corruption di Oracle non sembrano risolti, però. Non riesco proprio a capire a che cosa siano dovuti.&lt;br /&gt;&lt;br /&gt;Intanto segnalo un'interessante &lt;a href="http://www.dizwell.com/prod/node/720"&gt;commento di Howard Rogers sui sistemi a 64 bit&lt;/a&gt; di classe desktop (AMD64, EM64T); sono utili o no? Per i database sembra proprio di sì, ma non vorrei che i problemi da me riscontrati indichino che ci si sta avvicinando al limite di performance.&lt;br /&gt;&lt;br /&gt;Sto facendo prove di installazione di 11g, ma serve per forza un sistema a 32 bit. Ancora un po' di pazienza :-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11965249-4631643593833099186?l=rdbland.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.nvidia.com/object/linux_nforce_1.23.html' title='OpenSuSE 10.2/64 e driver nVidia'/><link rel='replies' type='application/atom+xml' href='http://rdbland.blogspot.com/feeds/4631643593833099186/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11965249&amp;postID=4631643593833099186' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/4631643593833099186'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/4631643593833099186'/><link rel='alternate' type='text/html' href='http://rdbland.blogspot.com/2007/08/opensuse-10264-e-driver-nvidia.html' title='OpenSuSE 10.2/64 e driver nVidia'/><author><name>Rudy</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://my.opera.com/hillrudy/homes/albums/16833/IMG_2787.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11965249.post-1237184251632882299</id><published>2007-08-24T21:26:00.000+02:00</published><updated>2007-08-26T10:59:46.554+02:00</updated><title type='text'>Query cache, result cache</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_r0EgR7__Fw0/Rsv8foGKH2I/AAAAAAAAC-0/KzuskDbr4s8/s1600-h/11g_splash.gif"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_r0EgR7__Fw0/Rsv8foGKH2I/AAAAAAAAC-0/KzuskDbr4s8/s200/11g_splash.gif" border="0" alt=""id="BLOGGER_PHOTO_ID_5101448623196610402" /&gt;&lt;/a&gt;Tra le nuove caratteristiche di 11g ce n'è una che sembra proprio presa o perlomeno ispirata dal "giocattolo" mysql: la &lt;a href="http://dev.mysql.com/doc/refman/5.0/en/query-cache.html"&gt;query cache&lt;/a&gt;.&lt;br /&gt;Tom Kyte ha prontamente scritto un &lt;a href="http://www.oracle.com/technology/oramag/oracle/07-sep/o57asktom.html"&gt;notevole articolo&lt;/a&gt; sulla nuova feature di Oracle sull'ultimo numero di Oracle Magazine.&lt;br /&gt;È utile un confronto con la query cache di mysql, il cui funzionamento è spiegato nel dettaglio nella &lt;a href="http://dev.mysql.com/doc/refman/5.0/en/query-cache-how.html"&gt;pagina "how"&lt;/a&gt;, dove si intuiscono perfettamente le ragioni delle limitazioni della query cache rispetto alle operazioni normali. Già una piccola differenza con Oracle è la modalità di utilizzo della feature: in mysql è a livello istanza, mentre in Oracle è a livello optimizer, quindi a livello query, e funziona quindi anche all'interno di procedure (mentre in mysql no: evidentemente considera solo l'&lt;span style="font-style:italic;"&gt;hash value&lt;/span&gt; della testo, sbagliando).&lt;br /&gt;Già questo basterebbe a fare una enorme distinzione sull'uso della memoria cache, visto che con Oracle bisogna specificare per ogni singola query se si vuole cachare il risultato, impedendo così la frammentazione e il riempimento inutile della cache, nonché la rimozione inopportuna di resultset utili per accogliere query che non dovrebbero essere salvate.&lt;br /&gt;Oracle può inserire in cache anche i risultati delle funzioni (sempre a comando), con un'interessante caratteristica in più: si possono definire gli oggetti da cui dipende il risultato della funzione, ottimizzando i controlli che il db dovrebbe fare ad ogni esecuzione.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11965249-1237184251632882299?l=rdbland.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.oracle.com/technology/oramag/oracle/07-sep/o57asktom.html' title='Query cache, result cache'/><link rel='replies' type='application/atom+xml' href='http://rdbland.blogspot.com/feeds/1237184251632882299/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11965249&amp;postID=1237184251632882299' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/1237184251632882299'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/1237184251632882299'/><link rel='alternate' type='text/html' href='http://rdbland.blogspot.com/2007/08/query-cache-result-cache.html' title='Query cache, result cache'/><author><name>Rudy</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://my.opera.com/hillrudy/homes/albums/16833/IMG_2787.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_r0EgR7__Fw0/Rsv8foGKH2I/AAAAAAAAC-0/KzuskDbr4s8/s72-c/11g_splash.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11965249.post-6762290981594956988</id><published>2007-08-22T21:02:00.000+02:00</published><updated>2007-08-22T21:25:38.126+02:00</updated><title type='text'>Prove Oracle 11g e new features</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_r0EgR7__Fw0/Rsv8foGKH2I/AAAAAAAAC-0/KzuskDbr4s8/s1600-h/11g_splash.gif"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_r0EgR7__Fw0/Rsv8foGKH2I/AAAAAAAAC-0/KzuskDbr4s8/s200/11g_splash.gif" border="0" alt=""id="BLOGGER_PHOTO_ID_5101448623196610402" /&gt;&lt;/a&gt;Sto facendo le prime prove di Oracle 11g (database, ovvio :-)). Il logo dei "bidoni di petrolio" in immagine è quello originale.&lt;br /&gt;Per primo ho installato il CD client, stranamente subito disponibile come download. L'installazione, su OpenSuSE 10.2 x86, è semplicissima e finalmente vedo che Oracle ha abbandonato l'ormai inutile controllo del prerequisito che il sistema operativo sia tra quelli supportati, almeno all'avvio dell'installazione. L'installazione client fa scegliere ancora tra le tipologie programmatore-amministratore; l'installazione più massiccia è quella di amministratore ma... sorpresa! Non ho capito dove sono gli eseguibili, o meglio dove sta l'Enterprise Manager della situazione, visto che il wrapper &lt;tt&gt;oemapp&lt;/tt&gt; sembra sia sparito. In compenso è comparso SQLDeveloper, che quindi probabilmente sostituisce gran parte delle funzioni del "vecchio" EM in formato Java; peccato però non mantenerlo, secondo me un'applicazione a due livelli come il vecchio EM è insostituibile in molte situazioni; rimane comunque disponibile sul CD client del vecchio 10g :-).&lt;br /&gt;&lt;br /&gt;Intanto leggiamo il manuale delle &lt;span style="font-style:italic;"&gt;new features&lt;/span&gt;.&lt;br /&gt;Nelle prime righe c'è una "clamorosa" aggiunta: la &lt;span style="font-weight:bold;"&gt;query cache&lt;/span&gt;! Sì, proprio quella di mysql. Bisogna controllare però gli algoritmi di manutenzione della cache, che in mysql sostanzialmente ne limita(va)no moltissimo l'utilizzo. Una differenza enorme, a quanto sembra, è la presenza della query cache sia sul server che su client. Troppo anvanti. Sono troppo curioso di vedere quali sono i limiti dovuti alle operazioni DDL e DML e il confronto con mysql.&lt;br /&gt;Ora il &lt;span style="font-weight:bold;"&gt;connection pooling&lt;/span&gt; non è più riservato alle applicazioni multithread, ma anche a robe più semplici come PHP.&lt;br /&gt;Gli &lt;span style="font-weight:bold;"&gt;standby&lt;/span&gt; possono essere interrogati in tempo reale, mentre viene applicato il redo. Finalmente! Non solo: gli standby possono essere aperti temporaneamente anche in lettura e scrittura (questa, poi!). Vedremo in futuro come funziona questa cosa nel dettaglio.&lt;br /&gt;Ora i comandi &lt;span style="font-weight:bold;"&gt;DDL&lt;/span&gt; hanno il &lt;span style="font-weight:bold;"&gt;WAIT di default&lt;/span&gt;, che evita il controllo degli errori di locking esclusivi.&lt;br /&gt;La ricostruzione online degli indici non ha più stati di attesa di DML lock.&lt;br /&gt;C'è il nuovo comando &lt;tt&gt;ALTER TABLE table_name READ ONLY&lt;/tt&gt; per evitare che anche il proprietario di una tabella la possa modificare.&lt;br /&gt;C'è il nuovo parametro &lt;tt&gt;&lt;span style="font-weight:bold;"&gt;MEMORY_TARGET&lt;/span&gt;&lt;/tt&gt;, che volendo sostituisce &lt;tt&gt;SGA_TARGET&lt;/tt&gt; e &lt;tt&gt;PGA_AGGREGATE_TARGET&lt;/tt&gt;.&lt;br /&gt;&lt;tt&gt;ORACLE_BASE&lt;/tt&gt; diventa la variabile di riferimento per le installazioni.&lt;br /&gt;&lt;br /&gt;Nel frattempo non ho trovato nulla sul contenuto di questo strano client CD. Se dovessi trovare qualcosa vi avviso :-)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11965249-6762290981594956988?l=rdbland.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rdbland.blogspot.com/feeds/6762290981594956988/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11965249&amp;postID=6762290981594956988' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/6762290981594956988'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/6762290981594956988'/><link rel='alternate' type='text/html' href='http://rdbland.blogspot.com/2007/08/prove-oracle-11g-e-new-features.html' title='Prove Oracle 11g e new features'/><author><name>Rudy</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://my.opera.com/hillrudy/homes/albums/16833/IMG_2787.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_r0EgR7__Fw0/Rsv8foGKH2I/AAAAAAAAC-0/KzuskDbr4s8/s72-c/11g_splash.gif' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11965249.post-8040933469265533830</id><published>2007-08-21T21:03:00.000+02:00</published><updated>2007-08-22T08:42:45.032+02:00</updated><title type='text'>MySQL 5 secondo Alex Papadimoulis</title><content type='html'>Ricordate Alex Papadimoulis, il creatore del magnifico &lt;a href="http://worsethanfailure.com/"&gt;Daily WTF&lt;/a&gt;? A quanto pare ha anche un blog, in cui ho trovato un'&lt;a href="http://weblogs.asp.net/Alex_Papadimoulis/archive/2005/10/26/428527.aspx"&gt;ottima digressione su MySQL 5&lt;/a&gt; e i suoi tradizionali aspetti controversi. Ottimo.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11965249-8040933469265533830?l=rdbland.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rdbland.blogspot.com/feeds/8040933469265533830/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11965249&amp;postID=8040933469265533830' title='1 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/8040933469265533830'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/8040933469265533830'/><link rel='alternate' type='text/html' href='http://rdbland.blogspot.com/2007/08/mysql-5-secondo-alex-papadimoulis.html' title='MySQL 5 secondo Alex Papadimoulis'/><author><name>Rudy</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://my.opera.com/hillrudy/homes/albums/16833/IMG_2787.JPG'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11965249.post-6351415141199799963</id><published>2007-08-20T21:21:00.000+02:00</published><updated>2007-08-21T11:21:32.087+02:00</updated><title type='text'>Oracle 11g GA</title><content type='html'>Mentre ero in vacanza :-) Oracle ha rilasciato la prima versione del database 11g, disponibile per il &lt;a href="http://www.oracle.com/technology/software/products/database/index.html"&gt;download&lt;/a&gt;, come sempre.&lt;br /&gt;Ora il mio megaserver di casa avrà pane per i suoi denti, con una nuova ORACLE_HOME in aggiunta di quella sperimentale 10g.&lt;br /&gt;&lt;br /&gt;A proposito di compatibilità, segnalo che i kernel OpenSuSE hanno una versione secondo me troppo vecchia del modulo SATA per i chipset nForce, e purtroppo la situazione non si può risolvere facilmente: nVidia mette a disposizione i sorgenti solo per le distribuzioni commerciali (es. SLES10). Speriamo che quelli della SuSE riescano ad inserire le modifiche nella nuova 10.3. Quasi quasi gli scrivo.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11965249-6351415141199799963?l=rdbland.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.oracle.com/corporate/press/2007_aug/database-11g-ga.html' title='Oracle 11g GA'/><link rel='replies' type='application/atom+xml' href='http://rdbland.blogspot.com/feeds/6351415141199799963/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11965249&amp;postID=6351415141199799963' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/6351415141199799963'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/6351415141199799963'/><link rel='alternate' type='text/html' href='http://rdbland.blogspot.com/2007/08/oracle-11g-ga.html' title='Oracle 11g GA'/><author><name>Rudy</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://my.opera.com/hillrudy/homes/albums/16833/IMG_2787.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11965249.post-3152804094453686602</id><published>2007-08-06T21:21:00.000+02:00</published><updated>2007-08-07T09:22:29.579+02:00</updated><title type='text'>Archivelog RAC su ASM</title><content type='html'>Gli archivelog di un cluster Oracle 10g su ASM possono finire, a seconda della configurazione, su molteplici destinazioni, ma quella preferenziale è sempre sullo storage condiviso, come per il resto del database.&lt;br /&gt;Se archiviate anche su filesystem, e quindi per ogni server avete un thread di redo diverso, fate attenzione alla consistenza dei log archiviati localmente durante un'eventuale caduta di uno dei nodi del cluster. A me è capitata un'inconsistenza, risolta esportando l'archivelog da ASM, dove evidentemente non c'è stato un problema di salvataggio del thread. Come è possibile? Basta usare il la procedura &lt;tt&gt;DBMS_FILE_TRANSFER.COPY_FILE&lt;/tt&gt;.&lt;br /&gt;Attenzione che i parametri di COPY_FILE sono sempre dei &lt;span style="font-style:italic;"&gt;directory object&lt;/span&gt;, non delle directory vere e proprie; corrispondono, ai fini pratici, ad alias di locazioni nello storage accessibile alle istanze, tra cui ovviamente c'è il filesystem ASM:&lt;br /&gt;&lt;tt&gt;SQL&amp;gt; CREATE DIRECTORY dir_name AS '+ASM/ciao';&lt;/tt&gt;&lt;br /&gt;creando sia la directory sorgente che quella di destinazione.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11965249-3152804094453686602?l=rdbland.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rdbland.blogspot.com/feeds/3152804094453686602/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11965249&amp;postID=3152804094453686602' title='2 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/3152804094453686602'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/3152804094453686602'/><link rel='alternate' type='text/html' href='http://rdbland.blogspot.com/2007/08/archivelog-rac-su-asm.html' title='Archivelog RAC su ASM'/><author><name>Rudy</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://my.opera.com/hillrudy/homes/albums/16833/IMG_2787.JPG'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11965249.post-3566825674076221459</id><published>2007-07-27T09:01:00.000+02:00</published><updated>2007-07-27T09:01:08.141+02:00</updated><title type='text'>Data Pump e privilegi</title><content type='html'>Avete Oracle 10gR1? Passate oltre... Avete 10gR2? Bene. Per operazioni di export/import sarebbe bene avere un utente dedicato con i ruoli EXP_FULL_DATABASE e IMP_FULL_DATABASE, con una quota non trascurabile su qualche tablespace poco usato (ho visto 35 MB per una export).&lt;br /&gt;C'è un problemino: i due ruoli non bastano, serve anche il privilegio SELECT ANY TABLE (nota Metalink 414996.1).&lt;br /&gt;Speriamo che i piccoli problemi di Data Pump vengano risolti completamente nella 11g, visto che permangono nella 10.2.0.3.0.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11965249-3566825674076221459?l=rdbland.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://rdbland.blogspot.com/feeds/3566825674076221459/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11965249&amp;postID=3566825674076221459' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/3566825674076221459'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/3566825674076221459'/><link rel='alternate' type='text/html' href='http://rdbland.blogspot.com/2007/07/data-pump-e-privilegi.html' title='Data Pump e privilegi'/><author><name>Rudy</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://my.opera.com/hillrudy/homes/albums/16833/IMG_2787.JPG'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-11965249.post-2719219431744750016</id><published>2007-07-12T22:55:00.000+02:00</published><updated>2007-07-13T09:30:13.835+02:00</updated><title type='text'>Sybase SQLAnywhere</title><content type='html'>&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_r0EgR7__Fw0/RpTAK1UvAKI/AAAAAAAAC-Q/SQnflZYTo_g/s1600-h/ianywhere.gif"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://1.bp.blogspot.com/_r0EgR7__Fw0/RpTAK1UvAKI/AAAAAAAAC-Q/SQnflZYTo_g/s200/ianywhere.gif" border="0" alt=""id="BLOGGER_PHOTO_ID_5085901171553403042" /&gt;&lt;/a&gt;Sto provando in questi giorni &lt;a href="http://www.ianywhere.com/products/sql_anywhere.html"&gt;SQLAnywhere&lt;/a&gt;, nella suite &lt;a href="http://www.ianywhere.com/products/information_anywhere_suite.html"&gt;IAnywhere&lt;/a&gt;, un interessante punto di vista sui software collaborativi per aziende.&lt;br /&gt;A me ovviamente interessa la parte del database, visto che il &lt;a href="http://www.softpi.com/"&gt;distributore italiano&lt;/a&gt; me ne ha fornito gentilmente una copia su chiavetta USB da 512 MB di ultima generazione, microscopica.&lt;br /&gt;Delizioso il lavoro fatto da Sybase per facilitare al massimo l'installabilità e l'amministrazione del database: la compatibilità con Linux mi pare ottima, visto che l'installazione grafica non ha dato alcun problema né sotto SuSE 10.2/64 né sotto Ubuntu 7.04/64, dove però l'installazione è stata testuale ma del tutto equivalente a quella grafica.&lt;br /&gt;SQLAnywhere praticamente si avvia da un gruppo di icone sul desktop, create automaticamente dall'installazione sia su KDE che Gnome. Questa è una caratteristica molto comoda anche in ambiente server, dove tradizionalmente non si usa il display, ma con le tecnologie attuali (VNC del desktop Gnome e volendo anche Xorg in modalità client) è un peccato non avere l'ambiente grafico, che consente inoltre di avviare job direttamente sul server interessato, senza il timore che la connessione si interrompa.&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_r0EgR7__Fw0/RpTAaVUvALI/AAAAAAAAC-Y/GC_4SaPbCKE/s1600-h/sqla_folder.png"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://3.bp.blogspot.com/_r0EgR7__Fw0/RpTAaVUvALI/AAAAAAAAC-Y/GC_4SaPbCKE/s200/sqla_folder.png" border="0" alt=""id="BLOGGER_PHOTO_ID_5085901437841375410" /&gt;&lt;/a&gt;Tra le applicazioni ci sono un monitor del database e una specie di client grafico per fare query. Il resto delle icone sono dedicate all'avvio del database sia in modalità networking che personale. In entrambi i casi all'avvio si può specificare il nome del server e l'unico file del database, a cui corrisponde un unico file di log. Evidentemente anche a Sybase confidano sulla potenza dei filesystem "bigfile" per la gestione dei blocchi fisici su disco, che altrimenti avrebbero limiti di spazio.&lt;br /&gt;Per ora non sono ancora riuscito a creare una tabella con un semplice &lt;span style="font-style:italic;"&gt;create table&lt;/span&gt;, farò del mio meglio per capire come si fa.&lt;br /&gt;Interessanti le slide della presentazione italiana della versione 10, in cui uno dei punti di forza è l'architettura hot-standby senza manutenzione, fatta da due (o più?) server equivalenti e un arbitro che decide chi è il primario. L'indisponibilità di un server e il suo ripristino come master o hot-backup sono automatici.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/11965249-2719219431744750016?l=rdbland.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='related' href='http://www.ianywhere.com/products/sql_anywhere.html' title='Sybase SQLAnywhere'/><link rel='replies' type='application/atom+xml' href='http://rdbland.blogspot.com/feeds/2719219431744750016/comments/default' title='Commenti sul post'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=11965249&amp;postID=2719219431744750016' title='0 Commenti'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/2719219431744750016'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/11965249/posts/default/2719219431744750016'/><link rel='alternate' type='text/html' href='http://rdbland.blogspot.com/2007/07/sybase-sqlanywhere.html' title='Sybase SQLAnywhere'/><author><name>Rudy</name><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://my.opera.com/hillrudy/homes/albums/16833/IMG_2787.JPG'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_r0EgR7__Fw0/RpTAK1UvAKI/AAAAAAAAC-Q/SQnflZYTo_g/s72-c/ianywhere.gif' height='72' width='72'/><thr:total>0</thr:total></entry></feed>
