29 dicembre 2005

Raptor è arrivato!

Finalmente, dopo un paio di giorni piuttosto impegnativi, riesco a postare nuovamente con le novità e le mie prove.
È uscito Raptor, un ambiente operativo grafico per Oracle, scritto in Java.
Viene distribuito in versione Windows "full", ovvero con la virtual machine java e JDK completo, mentre per gli altri sistemi operativi bisogna scaricarsi JDK 1.5.
Non ho trovato il JDK per Mac OS X, quindi mi sono dovuto accontentare della versione per Windows; in compenso mi sono collegato a Oracle 10gR1 su Mac :-)

Ecco la finestra dei report con i datafile sul Mac:

Il data dictionary con tutti i commenti originali:

La gestione delle tabelle, editing compreso:

L'editor SQL:

È necessario dire che Raptor è gratuito e liberamente scaricabile da OTN? Beh, sì, viste le premesse e visto che intacca un mercato già consolidato come quello degli editor SQL. Oracle continua sulla doppia strada di introdurre innovazione tecnologica (più o meno guidata dal marketing) e di fornire strumenti e accessori di alto e altissimo livello a titolo gratuito per migliorare l'utilizzo dei suoi prodotti.
Ancora complimenti alla Oracle. Non si potrebbe sperare di più nemmeno dal fronte open-source.

26 dicembre 2005

Oracle 10gR1 su Mac OS X

I giorni di festa per me sono il momento giusto per fare qualcosa di insolito, non avendo nulla da fare ed essendo praticamente bloccato in casa.
Il Natale poi è una delle festività che meglio si prestano per attività da perditempo.
Ieri, complice anche un discreto pranzo natalizio, sono riuscito ad installare Oracle 10gR1 sul mio fido Mac mini. Sì, avete letto bene. È stato come parcheggiare una nave in un porticciolo, ma è una soddisfazione vedere il placido e piccolo Mac eseguire senza fatica apparente un gigante come 10gR1. Questa versione di Oracle è certificata solamente per la versione server di Mac OS X, ma la procedura manuale a linea di comando descritta nella Quick installation guide è stata sufficiente per preconfigurare correttamente il sistema.
Ecco le principali fasi dell'installazione:
L'installer parte:
Il database di prova viene creato da DBAssistant:

Oracle Enterprise Manager è attivo e dalla finestra di iTerm provo a eseguire query sullo schema scott classico :-):

Dopo qualche prova posso tranquillamente affermare che per scopi didattici l'installazione su Mac OS X normale (nel mio caso Panther) è assolutamente utilizzabile. Tempo fa provai l'installazione su Linux, con pessimi risultati per quanto riguarda la velocità di installazione, ma probabilmente feci errori nella configurazione dei parametri del kernel.
L'installazione fa un lavoro eccellente nel considerare le caratteristiche della macchina su cui si sta installando il software, regolando la SGA e gli altri parametri in modo da utilizzare circa la metà delle risorse disponibili.

14 dicembre 2005

VMWare

Prendendo spunto dall'ultima blog entry di Tom Kyte, sono andato a vedere che cosa offre VMWare per i nostri interessi.
La pagina del Virtual Machine Center contiene tutti i link necessari per provare la virtual machine e le sue applicazioni precostruite.
Tutto è molto interessante, specialmente per provare combinazioni di sistemi operativi e applicazioni avendoli sempre disponibili su disco.

28 novembre 2005

Usare le "pipe" in Oracle

Molto istruttivo questo articolo sull'uso delle "pipe" in Oracle con il package apposito.

27 novembre 2005

Comparazione DB2-MySQL

Ho letto questa whitepaper di Martin Hubel Consulting, Inc., in cui vengono evidenziati gli innumerevoli difetti di mysql, se posso permettermi con qualche imprecisione, che però non invalida il contenuto.
Sembra un po' di parte, comunque è un'utile lettura.

13 novembre 2005

Zend e session clustering


La piattaforma Zend per lo sviluppo di applicazioni PHP si arricchisce con il session clustering, che fa in modo di trattenere le informazioni sulla sessione $_SESSION di PHP sul primo webserver su cui viene creata.
Un demone fa in modo che l'accesso alle informazioni di sessione sia sincronizzato tra i vari server, come si legge nel whitepaper.
Non sono d'accordo con l'affermazione che il database, usato come memoria delle sessioni, sia un single point of failure, in quanto lo sarebbe per tutta l'applicazione; con in cluster di database si risolve brillantemente il problema.
Interessante anche il fatto che non è necessaria alcuna modifica ai listati PHP già in produzione.

31 ottobre 2005

Oracle Database 10g Express Edition

Da un paio di giorni è possibile scaricare la versione free di Oracle 10g.
La decisione di rilasciare una versione di Oracle per il mercato di fascia bassa dovrebbe contrastare la presenza di mysql e Postgres, ma soprattutto portare gli operatori a conoscenza delle possibilità di 10g.
XE comunque ha una serie di limitazioni che sono be descritte nelle FAQ e nel data sheet.

25 ottobre 2005

L'intruso

Leggendo qua e là mi sono imbattuto in una nuova sigla: MAMP.
I dettagli parlano chiaro: Mac+Apache+mysql+PHP. Personalmente trovo la piattaforma LAMP già piuttosto riduttiva; essendo ormai abituato al Mac e alla qualità delle sue realizzazioni penso che MAMP sia un'eccessiva semplificazione, per dirla con un eufemismo.
Nella pagina, poi, c'è una presenza poco pertinente, e anche il logo non mi convince per nulla. Fate i vostri confronti con questa pagina.

19 ottobre 2005

EnterpriseDB

Leggo di EnterpriseDB, un "clone" PostgreSQL incentrato sulle compatibilità con l'SQL di Oracle. Ne è appena uscita la versione 2005, corrispondente a una 8.0.3 di PostgreSQL, troppo poco per i miei gusti: la 8.1 ha nuove caratteristiche molto interessanti.

Le pagine PHP di OTN si arricchiscono di un nuovo contributo: "Oracle+PHP cookbook" che, a differenza di DeployPHP series, si propone a quanto pare di fornire linee guida per scrivere il codice migliore possibile, mentre DeployPHP è più incentrato sulle varie tecnologie.

10 ottobre 2005

Oracle compra Innobase

Sembra che Oracle abbia acquistato Innobase, la società che sviluppa e mantiene InnoDB, la parte "transazionale" (ahem...) di mysql. A mio modo di vedere l'acquisizione è la reazione della Oracle all'uscita della versione 5 di mysql, che promette varie novità come i trigger, le view e le procedure.

Qualcuno è anche riuscito ad installare Oracle su Mac OS-X 10.4.

05 ottobre 2005

Oracle OpenWorld 2005 online

Qualche aggiornamento sul mondo Oracle: è disponibile online gran parte delle diapositive usate all'Oracle OpenWorld 2005 di San Francisco.

Club Oracle invece propone una serie di simpatici sfondi e screensaver.

Oracle TimesTen è arrivato alla versione 6.0.1.

Amazon USA ha una sezione dedicata a Oracle.

28 settembre 2005

Oracle HTML DB e Raptor

Ho provato per qualche giorno Oracle HTML DB, un tool 10g (che funziona anche dalla 9.2) che permette di creare applicazioni basate su web, comprendendo tutte le fasi dello sviluppo, senza conoscere la sintassi SQL e la programmazione web.
OTN fornisce un interessante demo, in cui si vedono le potenzialià dell'interfaccia di HTML DB.
È anche possibile provare subito a creare le proprie applicazioni richiedendo una login su http://htmldb.oracle.com/.

Gira la notizia che stia per uscire Raptor, un software che ha scopi simili ai vari Toad o Tora. Per ora ci sono solo alcuni screenshots e qualche notizia sparsa.

23 settembre 2005

Filesystem e DB

Leggo oggi da qualche parte l'uscita di NOOFS, un filesystem unix basato su database, che promette di rendere indicizzabili e ricercabili i file molto più facilmente.
In qualche modo mi è tornato in mente Oracle Cluster File System, a parte che non c'entra nulla con l'indicizzazione dei contenuti; il punto di partenza però è simile.
Le caratterisctiche di NOOFS sono più o meno le stesse promesse da Windows Vista, su una scala aziendale però, non confinata al singolo PC (anche se Vista promette una ricerca sui PC dello stesso dominio); un altro vantaggio è il facile controllo diretto e centralizzato sui dati.

18 settembre 2005

Web tier

Ecco un bell'esempio di quello che si può fare con le ultime tecnologie web applicate ai database.
L'esempio tratta delle fotografie di C.W. Cushman degli anni '40, su Kodachrome (!) a colori.
A parte le ottime fotografie, per noi è specialmente interessante la sezione tecnologica basata su Oracle.

15 settembre 2005

il mio db è pronto!

evviva!

non pensavo di farcela ma il mio db è pronto. tecnicamente è in fase alfa e cioè "al fa già cul ca serva", pertanto è assolutamente consegnabile all'utente, che potrà farsi venire i calli nel segnalarmi errori e malfunzionamenti più o meno gravi.

ora è diviso in un frontend e in un backend con tutte le tabelle e (miraculo!) sembra che tutto questo faccia senso (in questo caso l'inglese mi lusinga: it all makes sense!)

la soluzione frontend - backend è un compromesso (l'ideale sarebbe una reale multiutenza) però già l'aver creato una casella di testo che sputa asterischi al posto di mostrare in chiaro la tua password è un passo avanti (per me).

probabilmente i puristi di ADO storcerebbero il naso a qualcuna delle mie scelte e quelli di VBA si metterebbero a sghignazzare, ma d'altronde se facessi lo sviluppatore questo sarebbe il mio blog :)

08 settembre 2005

MySQL: nuova versione = nuovi problemi

Non ho ancora avuto la possibilità di provare il nuovo MySQL 5 ma partendo dal messaggio di Rudy ho letto le nuove funzionalità e mi sono fatto un'idea.
Sono partito da "What's New in MySQL 5.0".

Prima novità(probabilmente solo a causa dell'ordine alfabetico): BIT Data Type: Can be used to store numbers in binary notation.
Qui c'è un po' di confusione tra il valore memorizzato e la sua rappresentazione: ogni numero può essere rappresentato in notazione binaria o decimale o esadecimale ma resta sempre quel numero! E anche parlando strettamente della memorizzazione su disco non penso che ci possa essere una alternativa alla notazione binaria. Del resto se qualcuno ha avuto a che fare con le date in MySQL (mi riferisco alle versioni precedenti) probabilmente si è già scontrato con questioni simili.

Seconda novità (in realtà è l'ultima riportata ma ci sta bene qui per contrasto con la precedente): le view
Nella descrizione estesa leggo: In designing an implementation of views, our ambitious goal, as much as is possible within the confines of SQL, has been full compliance with “Codd's Rule #6” for relational database systems: “All views that are theoretically updatable, should in practice also be updatable.”
A me sembra una "nota stonata" citare il modello relazionale nel manuale di MySQL: probabilmente bisognava averlo ben chiaro in testa prima di iniziare a scrivere tutto il programma.

Terza novità: le federated tables, ovvero un maldestro tentativo di implementare l'equivalente dei dblink di Oracle.
A parte la sintassi che è una barzelletta ho letto le limitazioni e cito solo due punti:
- The remote table that a FEDERATED table points to must exist before you try to access the table through the FEDERATED table.
Accidenti che limitazione! Se non esistesse cosa dovrebbe fare: inventarsi i dati?
- There is no way for the FEDERATED engine to know if the remote table has changed. The reason for this is that this table has to work like a data file that would never be written to by anything other than the database. The integrity of the data in the local table could be breached if there was any change to the remote database. Questa frase (anche se non mi è del tutto chiara) la dice lunga sul modo in cui sono implementate e sull'utilità che possono avere.

Se la documentazione rispecchia quello che descrive, il mio timore che l'affidabilità del prodotto sia rimasta molto bassa nonostante l'aumento della versione, è fondato.

07 settembre 2005

ZendCore for Oracle

È disponibile per il download gratuito ZendCore for Oracle, un ambiente di sviluppo e messa in produzione per PHP con db Oracle; è dotato di connessione al database tramite Oracle Instant Client, praticamente le librerie client condivise della 10g.
L'installazione viene fatta tramite un'interfaccia di testo tipo Debian; è molto precisa e identifica tutte le installazioni di Apache presenti sulla macchina, modificandone in automatico i file di configurazione (attenzione: viene disattivata l'eventuale libreria PHP già installata tramite commento nei file .conf).

Ecco alcune schermate:






Ottima la possibilità di controllare le performance del sistema e di configurare sia le opzioni di php.ini che attivare le librerie direttamente dall'interfaccia web.
L'interfaccia OCI8 è stata riscritta e migliorata. Sono possibili aggiornamenti automatici (interessanti per PHP, che ogni tanto mostra problemi di sicurezza).
Non so ancora quali siano le differenze nell'API o nel namespace del linguaggio, ma è tutto molto interessante!

Oracle Data Unloader

Quante volte ci siamo chiesti come è possibile ottenere in modo semplice da una tabella Oracle un file di testo CSV?
Per questi scopi esiste Oracle Data Unloader!
Qui dove lavoro abbiamo sviluppato un programma apposito chiamato oraselector, chissà se può competere con i programmi di Tom Kyte :-)

DUL può essere usato anche in caso di perdita di dati: leggete questa guida per il recupero di tabelle danneggiate.

06 settembre 2005

MySQL 5.0

Sto valutando per motivi puramente lavorativi (ci tengo a precisarlo) MySQL 5.0 beta.
Leggo con un certo piacere le novità rispetto alla versione 4 (riporto quelle interessanti IMHO):

  • Cursori: Necessari per la programmazione SQL, vista l'introduzione delle stored procedures.

  • Dizionario dati: Toh, chi si vede. Questa mi pare proprio la scoperta dell'acqua calda.

  • Storage engines: interessante l'archive, che serve a creare tabelle a basso consumo di disco, in cui sono permessi solo select e insert; molto meno interessanti le tabelle federated, l'analogo mysql dei database link di Oracle. Incredibilmente complessa la procedura per il loro utilizzo.

  • Stored procedures - triggers - views: inutile rimarcare il ritardo rispetto agli altri prodotti...

31 agosto 2005

il mio db langue :(

purtroppo la problematica organizzativa mi tiene lontano dalla programmazione... se da una parte questo limita drasticamente il numero di bachi che vado a produrre, dall'altra rende giustizia a quella regola che dice più o meno che il 20% finale della soluzione di un problema è quello che ti costa circa l'80% dello sforzo totale. in ossequio al mio segno zodiacale, notoriamente patria di precisini e scrotoclasti, il db verrà quindi pronto a dicembre... 2006.

30 agosto 2005

Database independence

Una ironica presentazione che sfata il mito di "applicazione indipendente dal database". Alla luce della mia (poca) esperienza mi sembrano affermazioni molto vicine alla verità e comunque hanno rallegrato la mia giornata con qualche risata.

26 agosto 2005

Le stranezze della correzione automatica

ciao.
ho una tabella. ho una maschera su di essa. un campo nella tabella si chiama "descrizione" e nella maschera c'è una casella di testo per questo campo. peccato che tutte le volte in cui scrivo "[descrizione]" nell'editor delle proprietà del controllo il buon access me lo corregge in "[Description]" che sarà anche una proprietà di un oggetto, ma a me non serve... l'unica soluzione che ho trovato è di impostare via codice la proprietà del controllo al valore che mi serve ogni volta che apro la maschera:

Private Sub Form_Load()

Me.tstDescrizione.ControlSource = "=IIf([tipo]=[descrizione],[tipo],[descrizione])"

End Sub

la cosa "bella" è che se vado a vedere in struttura della maschera la stessa proprietà (dopo che il codice l'ha impostata) trovo:

=IIf([tipo]=[Description];[tipo];[Description])

a parte i ";" che dipendono dalla localizzazione di access, il resto è tutta farina del sacco di qualche ignoto (e ignobile?) correttore automatico di sintassi...

a parte questo, il mio db procede.

24 agosto 2005

Mi presento

ciao, sono silos, l'ultimo arrivato su questo blog (grazie al mio amico rudy per l'invito).
ho una certa età, che si potrebbe ottenere con una cosa tipo year(sysdate) -1973, avendo un risultato corretto a partire dal 31 agosto.

suono, quando posso, il pianoforte, ma questa è troppo off topic.

di database so poco, e non al livello degli altri contributori di questo blog; ho scelto di unirmi a questo blog per raccontare la vita di un utente di database e sono qua per raccontare la mia esperienza alle prese con quella torta di compleanno che è access, microsoft access (l'ho chiamata così perchè prima o poi finisci per fartela arrivare in faccia).

ho iniziato ad usarlo per lavoro al lavoro, visto che i sistemi informativi qua da me hanno un comportamento, diciamo, evoluzionistico, nel senso che si muovono con la prontezza di un'era geologica. nel mio ufficio servono dati e servono "in fretta" e io, piuttosto che tirarli fuori da orrendi sequenziali, ho scoperto il mondo dei database.

in questi anni da "dentista" (visto che ho fatto chili e chili di estrazioni) mi sono comportato bene: pur avendo autorizzazioni di lettura e scrittura sulla base dati aziendale non ho mai polverizzato tabelle (ma qualche update m'è scappata) e finalmente, a luglio 2005, ho ricevuto in premio un paio di mutande di ghisa, cioè un utente in sola lettura.

il server qua è oracle 9i, e va veloce :) il (mio) client è access, via odbc, indifferentemente nel codice o con l'interfaccia. ora ad esempio sto ultimando un piccolo programma per dei miei utenti e mi sto ovviamente imbufalendo perchè il vba è documentato come il sanscrito nella guida di msaccess e i miei bottoni colorati non fanno quello che gli chiedo... vi terrò aggiornati!

21 agosto 2005

Nuovo libro di Tom Kyte

Tom Kyte ha finito il suo ultimo libro "Expert Oracle Database
Architecture"
, il cui primo capitolo è scaricabile in formato PDF.
Ho appena comprato "Effective Oracle by design", ora mi toccherà far arrivare anche questo.
Divertente la differenza di prezzo tra Europa e USA, in prevendita: 29.69$ (24.42€) negli USA, 49.90€ in Germania, 35.38£ (52.24€) in UK.

Un po' di divertimento: andate a leggere le varie citazioni da discussioni online sui database di Database Debunkings.

12 agosto 2005

Arrivi da leggere

Proprio stamattina mi sono arrivati da Amazon UK i seguenti libri:

  • Effective Oracle by Design di Thomas Kyte
  • Database in Depth di C. J. Date
  • Optimizing Oracle Performance di Cary Millsap

Li avevo ordinati la sera dell'8 agosto; sono arrivati in 3 giorni. Ho risparmiato 30 euro rispetto all'acquisto online in Italia nonostante qui non ci fossero spese di spedizione.
Ne avrò per un po' da leggere.

Installare patchando i makefile

Ho appena installato il client Oracle 9.2.0.4 (9i rel. 2) su una macchina OpenSuSE nuova.
A parte che OpenSuSE è funzionalmente praticamente una copia di Windows XP, comunque durante l'installazione ho riscontrato i soliti problemi con il relink dei vari eseguibili.
Errore tipico:
Error in invoking target relink of makefile /opt/oracle/product/9ir2/precomp/lib/ins_precomp.mk
Il problema è il solito dei simboli della libc, che si risolve installando gcc_old-2.95.3-7.i586.rpm.
Tutti in giro consigliano di creare link simbolici del gcc installato:
ln -s /opt/gcc295/bin/gcc /usr/bin/gcc
dopo avere rinominato il vecchio eseguibile.
Ho trovato come evitare tutto ciò modificando tutti i makefile coinvolti, man mano che l'installazione prosegue: ad esempio, quando esce il messaggio di cui sopra, si può editare il makefile $ORACLE_HOME/precomp/lib/env_precomp.mk, che alla linea 199 contiene:
LINK=$(PURECMDS) gcc $(LDFLAGS) $(COMPSOBJS)
Basta sostituire gcc con $(GCC) e aggiungere nelle prime righe del file:
GCC=/opt/gcc295/bin/gcc, e così per tutti gli altri casi (tutti gli env_* sono più o meno uguali).
È evidente come le modifiche per l'ìnstallazione sotto Linux siano state fatte un po' di fretta da parte di Oracle...

01 agosto 2005

Errore libc

Finalmente una soluzione per le installazioni dei prodotti Oracle per evitare l'errore symbol __libc_wait, version GLIBC_2.0 not defined in file libc.so.6 with link time reference. È una patch oracle, precisamente la 3006854.
In sostanza riguarda il problema dell'avvio dei vari eseguibili sotto Linux, con l'errore relativo al simbolo __libc_wait, non presente nella glibc più aggiornata.
Di solito il problema si può aggirare con la variabile d'ambiente:
export LD_ASSUME_KERNEL=2.4
se no si utilizza la patch 3006854, che trovate anche sul mio sito (Linux i386, ovviamente).
Detta patch compila al volo uno shared object (.so) che poi inserisce nell'elenco delle librerie da precaricare prima dell'esecuzione di qualsiasi programma: /etc/ld.so.preload; penso che sarebbe possibile anche sfruttare la variabile d'ambiente LD_PRELOAD solo per l'utente oracle, se proprio necessario.
Un'altro trucco molto efficace riguarda quello per l'errore sul ctype, ma ora non riesco più a trovare i riferimenti. Comunque, dopo avere compilato un piccolo sorgente C (ctype.o), lo si include con ar nella libreria $ORACLE_HOME/lib/libcore8.a, ricompilando poi la libreria client condivisa con genclntsh oppure relink <opzione>.
Cercherò tutti i link e li pubblicherò.

29 luglio 2005

Indici basati su funzioni

Ho provato a creare indici basati su funzioni con Oracle 8i. Anche questa volta è risultato molto utile un articolo su asktom che mi ha risolto diversi problemi legati ai permessi che sono necessari per creare ed utilizzare questi tipi di indici.

28 luglio 2005

tre db e una query

Prendendo spunto da una domanda su una query trovata nel newsgroup di PostgreSQL ho confrontato diversi risultati in tre database: Oracle, PostgreSQL e MySQL.
Preparazione:
CREATE TABLE test (i INTEGER);
CREATE UNIQUE INDEX unq_test ON test(i);
INSERT INTO test VALUES(1);
INSERT INTO test VALUES(2);
INSERT INTO test VALUES(3);
La query è:
UPDATE test SET i = i + 1;
Sia in PostgreSQL che in MySQL non funziona (Avverte della violazione di una chiave univoca!).
Gli sviluppatori di Posgres ammettono che è un problema e che lo risolveranno in futuro.
L'unico dei tre database che riesce ad effettuare la query è Oracle perché, anche in questo, caso considera una query come una operazione atomica: probabilmente, per motivi di implementazione, è costretto ad aggiornare le righe una ad una e quindi a violare temporaneamente la chiave univoca tuttavia l'applicazione dell'intera query non viola nessuna constraint!
Piccoli particolari (se così vogliamo chiamarli) che fanno la differenza.

27 luglio 2005

Un libro per iniziare

Oggi DUE post! Ho deciso di scriverne un altro per sottolineare meglio l'importanza del documento che ho trovato, ovvero il primo capitolo del libro "Database in depth" di C. J. Date. Il link del titolo di questo articolo del blog riporta alla copia nel mio sito personale, nel caso il link non funzionasse.
Per ora l'ho letto rapidamente, ma sembra molto ben fatto ed è utilissimo per tutti.

Nologging e storia della Oracle

Ho provato a fare un'importazione con imp su un db vuoto e, dato che ci impiegava molto tempo, ho deciso di sfruttare l'istruzione ALTER TABLESPACE <tablespace> NOLOGGING, in modo che non venisse generato il log degli oggetti presenti in quei tablespace.
Il primo problema è che l'opzione nologging è efficace solo per gli oggetti creati dopo il comando alter tablespace, mentre gli oggetti presenti continuano a mantenere la loro politica di logging.
Il secondo problema è che l'imp importa le definizioni delle tabelle come sono presenti nel database originale: quindi se era attivo il nologging, diventa attivo ugualmente anche dopo l'alter tablespace.

Recentemente è stato pubblicato questo link sulla storia della Oracle, una lettura interessante. Gli altri articoli sono riportati nel riquadro giallo.
Volete vedere dov'è la sede della Oracle? Usate lo zoom! :-)

17 luglio 2005

Oracle TimesTen

Ho scoperto recentemente il database real time TimesTen,
che fa parte dei prodotti Oracle, sebbene ci sia un sito ufficiale.
TimesTen è multipiattaforma, comunque sto facendo delle prove su Windows XP e Linux. Per ora la versione Windows non ne vuole sapere di funzionare, nel senso che la connessione ODBC non avviene in alcun modo (provato su due PC diversi con XP home e pro); la versione Linux è più semplice da gestire.
Sembra che TimesTen sia il database ideale per la gestione di basi dati come quelle delle compagnie telefoniche, banche, prenotazione di servizi, notizie in tempo reale; è molto scalabile e può addirittura fare da "cache" ad Oracle, che verrebbe usato come repository di datawarehousing.

11 luglio 2005

Nuovi articoli OTN

Il sito web di Oracle, specialmente nella sezione OTN (Oracle Technology Network) è in continuo sviluppo.
Gli ultimi interessantissimi articoli riguardano PHP e Oracle XML DB e la DeployPHP series, al momento alla prima puntata, in cui si illustrano principalmente i vantaggi di ADODB. Dopo un primo momento di entusiasmo, penso che alla fine dei conti convenga sempre usare l'API nativa del DB in PHP, perchè consente di ottenere il massimo controllo sull'applicazione e utilizzare immediatamente eventuali nuove features, cosa molto frequente in PHP.
Da segnalare la serie di articoli su XML schema.

06 luglio 2005

oracle.com e i feed RSS

Oracle sta puntando molto sull'informazione al pubblico e sulla collaborazione degli utenti di varie comunità.
Tutti i feed sono raccolti in una sola pagina riassuntiva.
Notare la presenza dei podcasts...

Interessante questa prima lezione sulla programmazione PHP ottimizzata.

30 giugno 2005

Mi presento

Ciao.
Su invito di Rudy inizio anche io a condividere qualche pensiero sui database.
Mi presento: sono Zac, laureato in fisica ma occupato in informatica da quando ho iniziato a lavorare, buona parte del mio lavoro è legato ai database.
Il mio primo amore (in ambito lavorativo si intende!) è stato Oracle, poi varie vicissitudini non legate alla mia volontà mi hanno portato ad utilizzare MySQL e il passaggio non è stato indolore (il primo amore non si dimentica mai!). Da qualche mese sto provando PostgreSQL e devo dire che è riuscito subito a farsi piacere. Penso che ci sarà tempo di approfondire questi pensieri... per ora ciao e alla prossima.

16 giugno 2005

imp/exp e upgrade

Oggi ho preparato una macchina HPUX per lo spegnimento, un server Oracle7.
Ho fatto l'esportazione con exp di un paio di schemi, li ho spediti a Torino, e li ho caricati in un'istanza 8.1.7.4 Linux.
Solo un piccolo errore su una view. E ho avviato exp e imp una sola volta.

In più sto continuando col lavoro su postgres.
In particolare questa settimana ho fatto l'upgrade alla versione in development 8.1, perchè contiene una patch che permette la gestione degli errori nelle procedure plsql.
La cosa migliore da fare è rinominare qualsiasi directory della vecchia installazione (sia la parte eseguibile che quella dati), installare la nuova versione e ri-inizializzare il database con initdb, come viene spiegato nel manuale a grandi linee.
L'utility pg_dumpall si è comportata egragiamente, nonostante la presenza di tablespace personalizzati, foreign key e indici in quantità.

08 giugno 2005

Blog di OTN

Da poco è disponibile il blog di OTN (Oracle Technology Network), vedremo gli sviluppi. Se sono come quelli di OTN, è un sito da seguire costantemente.

Tra l'altro viene segnalata una pagina fondamentale per il mondo Linux e l'installazione di Oracle.

Non solo: sembra che si stiano diffondendo le installfest di Oracle!. Quasi quasi ne organizzo una!

27 maggio 2005

Glom, pgadmin3 e altro

Oggi è uscita la nuova versione di glom, un interessante programma grafico per unix per costruire interfacce grafiche su un database postgres. È molto interessante, e verr&agrve; approfondito.

Oggi ho sfruttato appieno la potenza di pgadmin3, un tool veramente fantastico per la gestione di un db postgres e per la creazione interattiva di tabelle, indici, costraint, stored procedure, view, insomma (quasi) tutto quello che è possibile fare da linea di comando.
Quasi ogni azione ha la possibilità di visualizzare il preview dei comandi SQL che vendono eseguiti.

16 maggio 2005

Oracle Base

Troppo bello 'sto sito che ho trovato.
Peccato che l'ho conosciuto tardi, è veramente interessante.

06 maggio 2005

Transazioni in sola lettura

Come migliorare le performance di un'applicazione basata su un RDBMS?
Per le transazioni in sola lettura è possibile specificare qualcosa come
SET TRANSACTION READ ONLY
In sostanza, quando mi collego ad un db, esso pensa che io stia per modificare qualche dato, quindi deve fare in modo che tutti gli altri utenti non vedano le modifiche che apporto al db fino alla mia prossima COMMIT.
Se specifico che la mia transazione è in sola lettura, il db deve fare in modo che solo io veda il db senza le modifiche apportate dagli altri, risultando in un notevole risparmio di risorse.
Spero di avere interpretato bene... :-)

27 aprile 2005

Trovato: c'era

Ecco la pagina originale del manuale di mysql di cui vi parlavo ieri.
Vediamo insieme qualche punto:

  • La query cache: effettivamente non sembra presente in postgres, mentre per esperienza posso dire che è molto utile in mysql; credo che il db sfutti maggiormente la cache su disco e la shared memory. Comunque mi piacerebbe vederla implementata anche in postgres.
  • Vacuum: postgres ha bisogno di fare ogni tanto pulizia dello spazio allocato su disco (un altro punto a favore di Oracle e i suoi tablespace). Diciamo che il vantaggio è la grande velocità che si ottiene risparmiando la manutenzione del filesystem (in genere lento), favorendo le transazioni.
  • Test suite: sono solo indicative, un db in produzione è sempre un'altra cosa!
  • Alter table più sofisticato: ma anche meno comprensibile per chi è abituato ai concetti "naturali" di Oracle, dove gli indici e le tabelle sono oggetti distinti tra loro.
  • Heap tables: qui il discorso si fa un po' complesso, perchè postgres ha un processo di checkpoint come Oracle, quindi per come la vedo io scrive su disco quando gli pare e quello che gli pare; se una tabella viene modificata spesso, non è detto che le sue modifiche finiscano su disco alla stessa velocità con cui vendono eseguite (ma il log sì).
  • Molteplicità di tipi di tabella: uno transazionale (InnoDB) e uno no. Provate ad usare InnoDB, io non mi sono trovato molto bene.
  • Multithreading: vale quello che è già stato detto in precedenza nel post sul numero di processori...
  • Aggiornamenti senza problemi: da controllare.
  • Estensione con funzioni: beh, questa è veramente grossa, spero che sia riferita solo alla versione 7 di postgres.
  • multi-table update/delete: interessante feature di mysql, bisogna vedere se è aderente agli standard, l'ho trovata utile in qualche occasione. Ovviamente, avendo le transazioni, è possibile usare la "select ... for update" di postgres.

Ciliegina sulla torta, leggetevi i commenti degli utenti.
Chissà perchè questo capitolo non esiste più nel manuale originale.

26 aprile 2005

Google e la memoria storica

Possiedo una stampa del manuale di mysql scaricato ai tempi della 4.0.12.
Ricordavo un paragrafo in cui si comparavano le caratteristiche di mysql con altri db, in particolare postgresql.
Guarda caso, la pagina non è più recuperabile nel manuale online di mysql. Che strano.
Meno male che Google ne ha una copia cache, peccato che sia in francese. Potete consultare la versione tradotta dallo stesso Google.
Interessante anche la pagina di comparazione dei db, da leggere attentamente.
Domani cercherò di quotare i passi più interessanti del testo dalla mia versione stampata; ricordo infatti alcune perle, che alla luce delle nuove esperienze si sono evidenziate.

21 aprile 2005

Linguaggi procedurali

La prova di PostgreSQL procede con i linguaggi procedurali.
A parte alcune originalità nella gestione delle transazioni all'interno delle procedure plpgsql (somigliano molto a quelle PL/SQL di Oracle), come l'impossibilità di usare savepoint, rollback ecc., e la mancanza di una gestione descrittiva degli errori, per il resto il linguaggio nativo è molto molto flessibile, come il resto del db! :-)
Per la produzione usiamo molto Python, un linguaggio di scripting relativamente semplice e potentissimo; in postgres è possibile usarlo come linguaggio per scrivere le funzioni.
Durante le prove siamo già arrivati a fare mostrare la corda a Python: abbiamo generato, non volontariamente, un bel SIGSEV (segnale 11 sotto Linux) in una sessione.
Molto interessante il comportamento di PostgreSQL in questi casi: il processo padre di quello andato in segmentation fault, accortosi della situazione critica, obbliga tutti gli altri processi ad un rollback collettivo, quindi fa un reset a caldo in pochi istanti (penso meno di un secondo).
Questo può sembrare un comportamento strano, ma è perfettamente giustificabile: il processo padre, non potendo sapere nulla dello stato della transazione del processo bombato, per mantenere la consistenza dei dati obbliga tutti ad abbandonare le modifiche in corso; diversamente sarebbe stato se, invece di ritornare con un segnale 11, il processo figlio avesse generato un errore, del tipo di un 'eccezione Python: sarebbe avvenuto solo un rollback della transazione corrente e nessuno si sarebbe accorto di nulla, come abbiamo provato successivamente.
Il discorso per mysql è molto diverso: reset del server, con chiusura totale, probabilmente senza flush dei dati verso il disco; non essendoci le transazioni, l'integrità dei dati è una bella incognita.

19 aprile 2005

L'installazione e la configurazione di PostgreSQL continuano.
I tablespace in postgres sono in realtà niente più di directory in cui vengono scritti i file delle tabelle; nulla a che vedere con quelli di Oracle, completamente configurabili.
Ottime le funzioni di WAL (write ahead logs, sono come i redo-logs di Oracle), la funzione di archiviazione (semplice e molto efficace). Mi resta da comprendere bene l'uso delle timeline e l'allocazione della memoria.
Il log del postmaster è ben configurabile, con molte opzioni e livelli di dettaglio.
una volta finito con la configurazione passerò al monitoring.
Per inciso, sono riuscito a installare PostegreSQL (8.0.2) anche su Mac OS-X con l'ultimo aggiornamento (10.3.9).

14 aprile 2005

Amministrazione PostgreSQL

Sto continuando a leggere il manuale di Postgres, intanto ho installato pgadmin3, l'ottimo gestore di database postgresql nativo.
È un po' difficoltoso da installare (io l'ho compilato da sorgente, non è proprio facilissimo), ma ha molte funzionalità
Intanto ho installato anche Python come linguaggio delle procedure di postgresql, con l'utility createlang. Python è "untrusted" come linguaggio, e per ciò utilizzabile solo dall'amministratore. Per aggirare il problema bisogna creare il linguaggio nel db con l'opzione -e di createlang, poi dropparlo con drop language, e poi ricrearlo con l'output di createlang -e, che è alla fine lo script SQL che in realtà viene eseguito dallo stesso createlang; bisogna ovviamente inserire la keyword "trusted" dopo "create" :-)

13 aprile 2005

Transazioni e multiprocessing

Dovete installare e configurare un database di dimensioni medio-grandi per un nuovo progetto.
Avete a disposizione una nuova e bellissima macchina multiprocessore dell'ultima generazione, con tanta RAM e componenti di qualità.
Provate con mysql, caricando un database di test e cominciando a fare prove su come il db si dovrebbe trovare ad operare in produzione.
Mysql, come tutte le applicazioni multithread, fa partire un thread per ogni connessione, che gestisce interamente tutte le query effettuate su quella connessione.
Quindi, direte voi, se ho otto processori riuscirò in modo efficiente a sfruttarne almeno sette (lasciamone uno per i processi di sistema, tra cui l'I/O dei dischi).
Ebbene, se aprite 7 connessioni al server e fate 7 query anche molto impegnative per ogni connessione, vedrete che magicamente potrete avere i risultati in 1/7 del tempo. Ma attenzione: in mysql non esistono le transazioni. Ciò ha un'importante implicazione: tutte le tabelle che coinvolgo in una query devono presentare gli stessi dati anche per tutte le altre sessioni che le utilizzano, sia quelle che le leggono solamente, tanto più quelle che cercano di aggiornarle (che non possono aggiornarle, non essendoci una transazione separata). Da ciò deriva che, per tutta la durata di una query, le altre connessioni, che cercano anche solo di leggere da una delle tabelle coinvolte nella prima query, saranno completamente bloccate.
La vostra bella macchina multiprocessore starà quindi tutto il tempo ad aspettare il risultato della prima query, che comunque occupa solo un processore, quindi solo 1/8 della potenza disponibile.

12 aprile 2005

PostgreSQL e utenti

In questo periodo sto provando per lavoro PostgreSQL, per valutare la possibilità di utilizzarlo in produzione.
Per ora sto leggendo il manuale, ma ho già fatto un'installazione approssimativa per potere almeno provare i vari esempi presenti sul manuale.
Sto affrontando l'aspetto degli utenti e dei permessi. È interessante notare come postgresql stia a metà tra Oracle e mysql sotto questo aspetto. Infatti, se per mysql esistono solo i database e gli utenti con i loro permessi, e per Oracle invece esiste la nozione di schema, corrispondente in pratica al singolo utente, per postgresql esiste la possibilità di definire un "percorso di ricerca" nello spazio dei nomi, che dà priorità ad uno schema piuttosto che ad un'altro.
In postgresql lo spazio in cui si creano le tabelle una volta connessi è di default quello pubblico ("public"), ma se si crea uno schema con lo stesso nome dell'utente, questo diventa lo spazio di default in cui vengono create le tabelle. È quindi possibile sia l'approccio di mysql, che favorisce la portabilità delle basi dati verso postgres, sia quello Oracle: è infatti possibile escludere del tutto l'accesso allo schema pubblico a tutti.

08 aprile 2005

Indici e tablespace

Prima della versione 10g e l'avvento di ASM, per Oracle era possibile "solo" definire una serie di datafile e tablespace, ognuno composto da almeno un datafile.
Per ottimizzare le prestazioni solitamente si cerca di tenere dati e indici su dischi differenti.
Nel caso di mysql, con le tabelle MyISAM, si hanno vari datafile, sempre uguali per ogni tabella, tra i quali vi sono quelli con i dati e quelli con gli indici. Ovviamente via sql è impossibile specificare la loro sistemazione, quindi virtualmente sarebbe possibile sistemarli su dischi diversi dopo la loro creazione, mettendo al loro posto dei bei link simbolici. Vi lascio immaginare che cosa voglia dire mantenere una cosa simile. Diversamente per le tabelle InnoDB è possibile solamente specificare uno spazio su disco, composto da più datafile, su cui mettere le tabelle E gli indici. Quindi, se da un lato si "guadagna" la possibilità di definire lo spazio per le tabelle tramite datafile diversi, si perde la possibilità di indicare dove debbano essere scritti i dati.
Probabilmente dovrò passare, per lavoro, una fase di test di PostgreSQL, che promette molte possibilità che si trovano solo negli RDBMS più avanzati, tipo Oracle: trigger, procedure, ecc., e in più, dall'ultima versione, anche i tablespace.
Staremo a vedere.

07 aprile 2005

Quale database?

Qui al lavoro uso un "database" MySQL di grandi dimensioni.
Grandi per quanto possa significare qualcosa che occupa qualche GB, su una macchina con 2 GB di RAM e 4 processori Xeon HT, che vengono visti come 8 processori dal'OS e dalle applicazioni.

Parleremo spesso di mysql, ma come esempio, a mia personale opinione, di tutto ciò che NON dovrebbe essere un database.
Potete consultare questa pagina, oppure questa per capire quello che intendo.

L'anno scorso ho seguito un corso di DBA Oracle 9i alla Oracle a Sesto S. Giovanni; è stata una esperienza molto istruttiva, anche se un po' noiosa in alcuni momenti.

Ho in produzione un mysql 4.0.15, vabbè un po' vecchio, ma il non-plus-ultra al momento dell'installazione, effettuata tramite gli rpm ufficiali; è in configurazione master-slave con un'altra macchina identica.

Piccolo esempio per oggi:


CREATE TABLE `rudy` (
`valore` varchar(32) default NULL,
`descrizione` varchar(64) default NULL
) TYPE=MyISAM;

mysql> select * from rudy;
+---------+----------------------------------+
| valore | descrizione |
+---------+----------------------------------+
| Abbaino | non nel senso di abbaiare adagio |
| Belin | che bella figliola! |
+---------+----------------------------------+

mysql> select substring(valore, 1, 1), substring(descrizione, 1, 1) from rudy union select 'il_valore', 'la_descrizione' from rudy;
+-------------------------+------------------------------+
| substring(valore, 1, 1) | substring(descrizione, 1, 1) |
+-------------------------+------------------------------+
| A | n |
| B | c |
| i | l |
+-------------------------+------------------------------+


Basta così o continuo?

06 aprile 2005

Blog, Oracle e altri

Proprio ieri ho trovato un bel sito da seguire per mantenersi informati sul mondo Oracle, ovvero orablogs (v. link).

Prossimamente parleremo di Oracle e dei suoi siti, e anche di qualche (?) concorrente.

Oggi mi è arrivato da risolvere un bel problemino con mysql, che però richiede l'uso delle subquery. Ma parleremo anche di questo.

Un blog sui database?

Ciao a tutti!
Non contento di non poter condividere le piccole avventure quotidiane con il prompt SQL, ho deciso di creare un blog per vedere se è possibile:

- sentire le opinioni di altri utenti
- farsi due risate con gli splendidi errori imprevisti dei database
- essere utili in qualche modo!

Vorrei che questo blog diventasse un buon pretesto per condividere le conoscenze online, a partire dagli spunti che posso fornire io... beh, se no sarebbe un forum...

A presto