ODBC, ovvero Open database connectivity è un metodo standardizzato per l'accesso ai DBMS. Si attua inserendo un servizio intermedio, tra i DBMS e le applicazioni che devono accedere ai dati: le applicazioni comunicano con il servizio ODBC, mentre il servizio ODBC comunica con i DBMS sottostanti, preoccupandosi di adattarsi alle loro particolarità. Ciò consente di scrivere applicazioni che, attraverso ODBC, sono in grado di utilizzare qualsiasi DBMS con cui il servizio ODBC sia in grado di interagire.
Generalmente, il sistema ODBC non fa tutto da solo, in quanto di solito si avvale di librerie aggiuntive (driver) per la gestione dei DBMS reali.
Un DSN, ovvero Data source name, è una base di dati virtuale, del sistema ODBC, individuata da un nome.
Generalmente, un DSN fa riferimento a una base di dati di un certo DBMS reale, con cui il sistema ODBC è in grado di interagire; tuttavia, teoricamente, potrebbe trattarsi di qualunque cosa in grado di comportarsi come una base di dati vera e propria.
Nei sistemi Unix è disponibile unixODBC,(1) che consente di interagire con un discreto numero di DBMS comuni, attraverso delle librerie aggiuntive per la gestione dei vari DBMS, alcune delle quali vengono elencate qui brevemente:
PostgreSQL ODBC,(2) per la comunicazione con DBMS PostgreSQL;
MyODBC,(3) per la comunicazione con DBMS MySQL.
Una volta installato unixODBC e le librerie per la comunicazione con i DBMS di proprio interesse, occorre provvedere a configurare unixODBC in modo da poterle utilizzare. Per fare questo si interviene nel file /etc/odbcinst.ini
; l'esempio seguente riguarda le librerie per comunicare con MySQL e PostgreSQL rispettivamente:
|
Come si può vedere e intuire, alcune direttive non sono comuni per tutti i tipi di DBMS; in pratica, l'inserimento di una sezione per l'accesso a un DBMS richiede un modello da copiare e adattare, per quel caso specifico.
Una volta configurate le librerie per l'accesso ai DBMS, è possibile definire dei DSN, con i quali fare riferimento a delle basi di dati reali presso tali DBMS. unixODBC offre tre modi per memorizzare le informazioni sui DSN, in base al campo di azione previsto per questi: il sistema nel suo insieme, una rete locale, il singolo utente.
Attraverso il file /etc/odbc.ini
è possibile dichiarare dei DSN validi nell'ambito del sistema locale, per tutti gli utenti; attraverso dei file che corrispondono al modello /etc/ODBCDataSources/nome.dsn
, è possibile dichiarare un DSN che, teoricamente, potrebbe essere condiviso da più elaboratori in una rete locale, con la stessa condivisione della directory /etc/ODBCDataSources/
; attraverso i file ~/.odbc.ini
, ogni utente può dichiarare i propri DSN personali.
Questi file di configurazione dei DSN, possono contenere direttive raggruppate in sezioni, corrispondenti al nome del DSN. Per esempio, l'estratto seguente dichiara l'accesso alla base di dati, presso l'elaboratore locale, denominata nanodb, accedendo con l'utenza pgnanouser (secondo il DBMS); il nome del DSN è mio:
|
L'estratto seguente, invece, dichiara l'accesso alla base di dati, presso l'elaboratore locale, denominata nanodb, accedendo con l'utenza mynanouser (secondo il DBMS); il nome del DSN è mio2:
|
Il programma ODBCConfig, che fa parte di unixODBC, consente di configurare i DSN in modo guidato, proponendo dei valori predefiniti appropriati al tipo di DBMS a cui questi vanno associati. Eventualmente, sarebbe possibile anche intervenire nella configurazione di /etc/odbcinst.ini
, ma questo non è conveniente, perché in tal caso manca la guida necessaria. Il programma si avvia generalmente senza argomenti:
ODBCConfig |
Se il programma viene avviato con i privilegi necessari, può intervenire nella configurazione di /etc/odbc.ini
o dei file contenuti nella directory /etc/ODBCDataSources/
, altrimenti può operare esclusivamente nel file personale ~/.odbc.ini
.
Osservando il programma in funzione, si vedono alcuni lembi posti sul lato superiore. I primi tre ({User DSN
}, {System DSN
}, {File DSN
}) permettono di selezionare una scheda riferita, rispettivamente, alla configurazione dei DSN personali (~/.odbc.ini
), di quelli di sistema (/etc/odbc.ini
) e di quelli condivisibili (/etc/ODBCDataSources/
). La configurazione con una qualsiasi di queste tre schede è uniforme alle altre; quello che cambia sono i privilegi necessari a modificare i file di configurazione rispettivi.
Avendo selezionato una delle tre schede che consentono di intervenire sui DSN, sul lato destro della finestra appaiono dei pulsanti grafici, con i quali è possibile creare, eliminare o modificare dei DSN. Volendo creare un DSN (pulsante <Add
>), appare la richiesta di specificare il tipo di DBMS (driver).
Successivamente viene proposta una maschera che riproduce, sostanzialmente, le direttive specifiche per quel tipo di libreria, da inserire nel file di configurazione. Fortunatamente, la maschera contiene già dei valori predefiniti appropriati per la maggior parte delle direttive.
Nella maschera di inserimento delle direttive, appare un menù di icone, di solito sul lato superiore sinistro. Con l'icona che mostra una «X», si annullano le modifiche, mentre con quella che assomiglia a una «V», si confermano gli inserimenti.
Tra le altre schede del programma, è interessante osservare ciò che è contenuto in quella denominata {Advanced
}. Lì dovrebbe essere visibile il percorso di un file usato per annotare l'esito delle interrogazioni avvenute con le basi di dati reali, per poter risalire alla causa di un problema, quando l'utilizzo di ODBC sembra fallire senza un motivo apparente. In ogni caso, questo file dovrebbe corrispondere a /tmp/sql.log
.
unixODBC include due programmi equivalenti, per accedere a un DSN attraverso istruzioni SQL impartite interattivamente. Attraverso questi programmi si può verificare in pratica il funzionamento di un certo DSN:
isql nome_dsn [nome_utente [parola_d'ordine]] [opzioni] |
iusql nome_dsn [nome_utente [parola_d'ordine]] [opzioni] |
La differenza tra i due programmi dovrebbe consistere nella migliore disposizione del secondo verso la codifica universale.
Dalla sintassi mostrata sull'uso dei due programmi, si può osservare che è obbligatorio l'inserimento del nome del DSN con cui ci si vuole connettere, mentre gli altri dati sono facoltativi, perché potrebbero essere memorizzati nella configurazione del DSN stesso, oppure, nel caso della parola d'ordine, potrebbe non essere richiesta dal DBMS per accedere. A titolo di esempio, si suppone di collegarsi al DSN mio, per il quale è già stato specificato il nominativo utente da usare e la parola d'ordine non è richiesta:
$
isql mio
[Invio]
+---------------------------------------+ | Connected! | | | | sql-statement | | help [tablename] | | quit | | | +---------------------------------------+ |
Come si vede, viene suggerito ciò che si può fare: inserire istruzioni SQL, usare il comando help o quit. A questo punto non c'è molto da spiegare; si comprende che possono essere impartite delle istruzioni SQL (secondo i canoni di ODBC) e che al termine si può concludere con il comando quit.
SQL>
quit
[Invio]
Il problema nell'uso di un programma come questo, semmai, sta nel fatto che, di fronte a un errore, la spiegazione che si ottiene è estremamente scarna e occorre leggere il file in cui i messaggi del DBMS reale vengono scaricati (di solito è /tmp/sql.log
).
unixODBC, http://www.unixodbc.org
1) unixODBC GNU GPL e GNU LGPL
2) PostgreSQL ODBC GNU GPL
«a2» 2013.11.11 --- Copyright © Daniele Giacomini -- appunti2@gmail.com http://informaticalibera.net