Oracle SQL Developer 2.1.1, le correzioni

Ho appreso stamattina tramite il buzz di Eddie Awad che ieri è uscito un aggiornamento di SQL Developer. Eddie segnala la correzione di diversi bachi e scorrendo velocemente la lista ho trovato un riferimento alla history, che tanto mi sta a cuore. Ho quindi immediatamente scaricato e installato la nuova versione e testato lo scorrimento dell’history dei comandi SQL: finalmente è tornata a funzionare, questa volta con la combinazione di tasti <ctrl>+<freccia su> o <ctrl>+<freccia giu>

Oracle SQL Developer 2.1

La settimana scorsa è uscita la versione 2.1 ufficiale di Oracle SQL Developer. Neanche un mese fa avevo scaricato la versione “beta” e ad un primo impatto mi era sembrata interessante. Senonché poi usandola un pochino e provando le novità, come l’integrazione con SVN, ho scoperto che era abbastanza bacata. C’è da dire che anche le versioni precedenti, oltre a bachi palesi, manifestano comportamenti strani, capitati anche a miei colleghi. Ad esempio (e questo uno dei motivi che mi ha spinto a provare la versione beta) a un certo punto non mi funzionava più il tasto “backspace”, una cosa stupida, ma molto fastidiosa.

Quali sono le novità della versione 2.1? a parte una certa integrazione con SVN, che mi ha incuriosito e che nella versione ufficiale, a differenza di quella beta, pare funzionare, non saprei, rimando al sito Oracle.

Ho però una lamentela: ad ogni versione è stato cambiato il modo di scorrere e selezionare la cronologia delle istruzioni SQL. Fino all’anno scorso funzionava decentemente la combinazione di tasti “Ctrl-Shift-freccia su” e  “Ctrl-Shift-freccia giu” poi in una versione che ho scaricato qualche mese fa ha smesso di funzionare in modo deterministico e quindi utile. Nell’ultima versione non funziona. Guardando le impostazioni sembrerebbe che le combinazioni siano sempre quelle, però anche provando a cambiarle non c’è verso.

SQL*Plus e SQL Developer

Tempo fa ho parlato di SQL Developer, la data del post è  17 Luglio 2008.  Ebbene, a sei mesi di distanza ho scoperto un problema di convivenza sul mio PC fra SQL Developer e SQL*plus, quello fornito con l’instant client.  In realtà più volte mi è capitato cercando di aprire sqlplus da linea di comando di avere il seguente messaggio:

C:\Documents and Settings\ccudizio>sqlplus
Error 57 initializing SQL*Plus
Error loading message shared library

Per lungo tempo ho rinunciato a capire cosa diavolo fosse, ma in questi giorni ho scoperto che si tratta di un problema di convivenza con SQL Developer, infatti, tale errore capita se ho gia aperto SQL Developer (anche senza alcuna connessione aperta) e appena chiudo SQL Developer tutto torna a funzionare bene:

C:\Documents and Settings\ccudizio>sqlplus
SQL*Plus: Release 11.1.0.6.0 – Production on Thu Jan 29 12:43:54 2009
Copyright (c) 1982, 2007, Oracle.  All rights reserved.
Enter user-name:

E’ una cosa veramente fastidiosa e non sono ancora riuscito a capire come risolverla, non è un problema (apparentemente) di path che ho provato a cambiare.

Trovo SQL Developer un buon programma, anche se a volte mi fa innervosire perché per la sua smania di autocompletare spesso e volentieri si blocca per intervalli di 2/3 secondi per caricare la lista dei possibili completamenti. 2/3 secondi non sono tanti, se non si è agitati e di fretta come spesso mi capita. Detto cio’ l’unico vero motivo per cui utilizzo  SQL Developer è per la possibilità di avere righe di output molto lunghe senza generare la confuzione che righe larghe generano su un terminale da 80 caratteri (che possono anche essere 120, ma spesso non bastano).

Autocommit e Commit on Exit

Oggi doppio post, infatti oggi ho scoperto due cose nuove. Dopo la nuova procedura purge del package dbms_shared_pool di cui ho parlato nel post precedente adesso è il momento di un nuova cosa che ho scoperto grazie a questo thread di CDOS. Si tratta di un comportamento di SQL*Plus, ma più in generale di Oracle. Ne ha scritto Eddie Awads più di tre anni fa ma io credo di non essermene mai accorto.

SQLPlus all’uscita (tramite comando EXIT o DISC) fa un commit implicito. La documentazione lo specifica, ma chi è mai andato a vedere la descrizione del comando exit sul manuale? Chiaramente chi lavora con Oracle impara abbastanza presto che bisogna sempre fare dei commit impliciti o espliciti e così è stato per me. Se sono uscito da sqlplus senza fare commit o rollback espliciti è perché non avevo modificato dati importanti, quindi non ho mai verificato il comportamento e quindi non ho mai capito che all’uscita veniva fatto un commit esplicito.

Ero convinto che il comportamento fosse lo stesso di quando una sessione in qualche modo “crasha” ed oracle la ripulisce facendo il rollback. Non è così. Chiaramente, nei programmi  a interfaccia grafica il problema non si pone. Ad esempio con SQL Developer all’uscita viene chiesto se committare o rollbackare (c’è anche una terza opzione che stronca brutalmente la connessione lasciando la sessione ed eventuali transazioni appese , ho provato e ne sconsiglio l’uso). In sqlplus invece la cosa è subdola.

Ho fatto anche un test con JDBC e con mia grande sorpresa (di nuovo) ho scoperto che anche qui il comportamento è lo stesso, come documentato la chiusura della connessione fa un commit implicito.

Questo comportamento si chiama (almeno credo) Commit on Exit. E’ diverso dal meccanismo chiamato autocommit che abilita il lancio di un commit automatico dopo ogni istruzione DML.

Uno strumento per il “Data Modeling”

La settimana scorsa, tramite il blog di Laurent Schneider, ho appreso che Oracle ha rilasciato una pre-versione di un nuovo strumento: “Oracle SQL Developer Data Modeling“. Si tratta al momento di un programma stand-alone per il “Data Modeling” ovvero per la modellazione dati, insomma uno strumento per la progettazione di schemi dati, che permette il disegno grafico di diagrammi entità-relazione (E-R) ed altro.

Appena capito di cosa si trattava mi sono precipitato a scaricarlo e ci ho dato subito un’occhiata. Non ho dedicato molto tempo, ho fatto solo una prova di “reverse-engineering” ovvero di creazione di uno schema E-R a partire da un database esistente. Il programma ha superato bene la prova e mi è parso molto interessante. Non ho poi fatto altre prove ma mi sono ripromesso di scrivere qualcosa su questo blog.

Il mio entusiasmo era principalmente dovuto al fatto che fin’ora non ho trovato un simile strumento free. Qualche settimana fa ho provato a scaricarmi “DIA“, ma non è proprio quello che cercavo. Stamattina però mi è venuto un dubbio su Oracle SQL Developer Data Modeling: è free? Purtroppo dalle FAQ si desume che versione ufficiale sarà un opzione a pagamento (“cost option”). Mi sono poi riguardato (mooolto velocemente) la licenza che ho accettato al download: nella sezione “You may not” dice che non si può usare il programma per processare i propri dati ne per uso commerciale e poi non si può usare dopo il rilascio delle versioni ufficiali o per più di sei mesi.

Pare che in SQL Developer verrà incluso un “visualizzatore” di diagrammi, mentre appunto la versione per editarli sarà da pagare, peccato.

Oracle SQL Developer – II

Oggi, grazie alla mia grande agitazione nel battere sulla tasteria ho fatto una scoperta che mi ha fatto fare un urlo di gioia: con l’ultima versione di SQL Developer (di cui ho scritto qualche giorno fa) è ancora possibile scorrere la “history” degli statement eseguiti, è solo cambiata la combinazione di tasti.  Come ho gia detto nella versione precedente si usava la combinazione <ctrl>-<freccia su> o <ctrl>-<freccia-giu> per scorrere in su o in giu tale history e sostituire lo statement da eseguire, ora con quella combinazione viene appeso il comando dalla history con una logica alla quale non riesco ad adeguarmi.

Però con la combinazione <ctrl>-<shift><freccia su> e <ctrl>-<shift><freccia su> si ha lo stesso comportamento di prima, provare per credere.

Quindi ora posso dire che SQL Developer è uno strumento quasi perfetto.

Oracle SQL Developer

Recentemente ho “rispianato” il mio PC, in realtà ho cambiato hard-disk e quindi ho (qualcun’altro ha) intallato Winzoz xp. In questa operazione ho compiuto una grande rivoluzione: non ho installato nessuna versione di Oracle server. Ebbene devo confessare che sono uno dei pochi che rimpiange la definitiva scomparsa, con oracle 11g di SQL*Plus Worksheet. Una spece di SQL*Plus con interfaccia semigrafica realizzata in Java. Penso facesse parte del “Enterprise Manager” (ed in fatti il riferimento precedente è al manuale di “Enterprise Manager”.

SQL*Plus Worksheet è un programma molto disprezzato e credo poco usato, con qualche difetto ma secondo me anche con qualche pregio. Ad esempio la facilità ad impostare linesize superiori agli 80 caratteri ed a visualizzare i risultati delle query senza dover fare mille settaggi e limitare il numero di colonne selezionate, come occorre spesso fare con il buon vecchio SQL*Plus. SQL*Plus Worksheet manteneva una storia dell’input (facilmente scorribile con CTRL-p) e una storia dell’output (come si ha con SQL*PLus normale). Non mi trovo assolutamente comodo con strumenti grafici come TOAD (che ho visto ma MAI usato) che utilizzano un output tabellare ben formatattato, che è bello e comodo, ma sovrascrive l’output della query precedente.

Ad ogni modo nella mia macchina ho installato solo l’instant client ed ho deciso di dare una nuova possibilità a Oracle SQL Developer. Nelle prime versioni era francamente molto scarso.  Oggi ho scaricato l’ultima versione perchè improvvisamente sulla versione che stavo usando hanno misteriosamente smesso di funzionare i tasti canc e backspace (ho anche provato a riavviare il pc ma se senza speranza).

La cosa che mi piace di più di Oracle SQL Developer è che funziona anche in modalità simile  a quella di SQL*Plus Worksheet. Anni di abitudine a schiacciare f5 per eseguire uno statement mi hanno fatto scoprire che in SQL Developer lo stesso tasto provoca lo stesso comportamento e lo stesso formato di visualizzazione del risultato dell’esecuzione dello statement. Un problema con cui mi sto scontrando nella transizione è la gestione  della modalità “serveroutput on”. Fra l’altro oggi ho scoperto che il default da 10g in poi è unlimited. Eseguendo script PL/SQL che sparano output con DBMS_OUTPUT ad oggi non ho trovato il modo di modificare il limite impostato per default su SQL Developer di 20000 caratteri.

Riguardo all’utilizzo di SQL*Plus, quello tradizionale, cerco sempre di mantenermi allenato, questo mi permette di essere preparato quando non ho la possibilità di usare il mio PC o quando non ci sono alternative, ricordatevi che dove c’è un database  Oracle  c’è ancora una sola certezza: c’è SQL*Plus. Segnalo un post di Tanel Poder in cui l’autore mette a disposizione degli script che ho trovato fichissimi: “Sqlplus is my second home“, provare per credere.

Un’ultima nota che volevo fare è quella di fare attenzione a “set serveroutput on”. Io recentemente l’ho messo nel file glogin.sql ed oggi, facendo esperimenti sulle orme di Greg Rahn ho riscontrato un effetto collaterale (di cui mi sono subito reso conto perchè ne avevo letto qualcosa nel libro di Thomas Kyte). Settando serveroutput on, implicitamente SQL*Plus fa delle chiamate alle procedure di DBMS_OUTPUT (lo si può benissimo vedere attivando il trace della sessione), quindi ad esempio non funziona la query per visualizzare il piano di esecuzione e le statische con il package DBMS_XPLAN (SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR(NULL, NULL, 'ALLSTATS LAST'));

Il risultato è questo:


SVILUPPO40@perseo10 > select * from dual;

D
-
X

SVILUPPO40@perseo10 > SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR(NULL, NULL, 'ALLSTATS LAST'));

PLAN_TABLE_OUTPUT
---------------------------------------------------------------------------------------------------
SQL_ID  9babjv8yq8ru3, child number 1

BEGIN DBMS_OUTPUT.GET_LINES(:LINES, :NUMLINES); END;

NOTE: cannot fetch plan for SQL_ID: 9babjv8yq8ru3, CHILD_NUMBER: 1
      Please verify value of SQL_ID and CHILD_NUMBER;
      It could also be that the plan is no longer in cursor cache (check v$sql_plan)

Selezionate 8 righe.

P.S. (18 Luglio 2008)
Ho notato una grossa innovazione nell’ultimissima versione di SQL Developer che ho scaricato ieri sera.
Nella versione precedente con la combinazione CTRL-<freccia su> o CTRL-<freccia giu> si poteva scorrere
comodamente la storia degli statement SQL lanciati, lo statement rimpiazzava quello corrente.
Nella nuova versione, accidenti a loro il comportamento è quello di “appendere”. Ora il comportamento
sembra più simile a quello che ho visto in TOAD, facendo f5 viene eseguito oppure se si seleziona
qualcosa, viene eseguito solo ciò che è selezionato. Personalmente questo non mi eccita molto. Si tratta della filosofia che predilige l’utilizzo del mouse, ma personalmente mi trovo più a mio agio (e sono più veloce) con la tastiera. Utilizzando il tasto F8 si apre la finestrella con lo storico, ma a questo punto occorre utilizzare il mouse per selezionare lo statement da ripescare e poi vi sono le due possibilità (via mouse) rimpiazzare o appendere.