Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Questo articolo ti mostra come configurare la traccia del Driver Manager unixODBC su Linux e macOS. Il tracciato registra le chiamate API ODBC che effettui tramite il Driver Manager. Non traccia gli eventi interni del driver Microsoft ODBC. Per la differenza tra record diagnostici e livelli di tracciamento, vedi diagnostica ODBC.
La sezione [ODBC] di odbcinst.ini controlla il tracciamento per le applicazioni che utilizzano la configurazione di sistema unixODBC. Imposta Trace=Yes e specifica un percorso assoluto per TraceFile:
[ODBC]
Trace=Yes
TracePid=No
TraceFile=/home/myappuser/odbc-trace.ABC123/odbc.log
Il percorso è illustrativo; usa il percorso assoluto privato generato nella procedura seguente.
Conserva le voci di registrazione del driver richieste dalla tua applicazione in questo file odbcinst.ini. La [ODBC] sezione è globale rispetto alla configurazione. Aggiungere Trace=Yes a una sezione specifica del driver non limita la traccia del Driver Manager unixODBC a quel driver.
Il percorso predefinito del file di traccia non è associato alla tua applicazione. Usa invece una directory privata e un percorso esplicito del file di traccia. Il tracciamento può influenzare le prestazioni e l'output può contenere dati applicativi. Limita l'accesso al file e cattura solo le chiamate di cui hai bisogno.
Usa una build unixODBC che includa la correzione upstream del buffer di traccia diagnostica. I pacchetti dei fornitori possono includere un backport; controlla le patch del pacchetto invece di affidarti solo al numero di versione. Senza la correzione, l'applicazione può abortire in SQLGetDiagRec mentre il manager formatta un errore nativo per il tracciamento.
Avvia l'applicazione Trace One
Apri una shell Bash dedicata, poi esegui i comandi della shell in questa procedura nella stessa sessione terminale. Il primo comando consente una gestione con interruzione immediata in caso di errore, quindi un errore nella creazione della directory, nella modifica dei permessi o nella copia della configurazione interrompe il processo prima dell'avvio dell'applicazione. Tieni la shell aperta per i passaggi successivi e scrivi exit dopo la pulizia.
Esegui
odbcinst -je annota i percorsi del driver di sistema e dei file dell'origine dati di sistema. Crea directory private di configurazione e traccia, poi copia i file di configurazione del sistema. Sostituisci i percorsi dei file di esempio con quelli riportati sul tuo sistema:set -eu config_dir=$(mktemp -d "$HOME/odbc-trace-config.XXXXXX") trace_dir=$(mktemp -d "$HOME/odbc-trace.XXXXXX") if [ "$(printf '%s' "$trace_dir/odbc.log" | wc -c)" -gt 62 ]; then printf 'Use a shorter parent path for the trace directory (log path exceeds 62 bytes).\n' >&2 rmdir "$trace_dir" "$config_dir" exit 1 fi driver_file=/etc/odbcinst.ini data_sources_file=/etc/odbc.ini chmod 700 "$config_dir" "$trace_dir" cp "$driver_file" "$config_dir/odbcinst.ini" if [ -f "$data_sources_file" ]; then cp "$data_sources_file" "$config_dir/odbc.ini" else printf '[ODBC Data Sources]\n' > "$config_dir/odbc.ini" fi chmod 600 "$config_dir/odbcinst.ini" "$config_dir/odbc.ini" printf '%s\n' "$trace_dir/odbc.log"L'implementazione bloccata della configurazione di traccia unixODBC fornisce un buffer di 64 byte al reader del profilo di registrazione. Quel lettore copia in sicurezza un percorso di massimo 62 byte, incluso il terminatore nullo. Per percorsi più lunghi, il suo ramo di troncamento non aggiunge un terminatore nullo. I controlli con unixODBC 2.3.14 su Linux e macOS hanno confermato la creazione corretta delle tracce a 62 byte. Il controllo conta i byte e si ferma prima del lancio se il percorso generato è troppo lungo. Se si ferma, usa un percorso genitore scrivibile più corto nel
trace_dircomando, tienimktemp -d, e riavvia la procedura.Conserva tutte le voci di registro del driver di cui l'applicazione ha bisogno nella copia
odbcinst.ini. Se l'applicazione utilizza un nome di sorgente dati di sistema (DSN), mantieni la sua definizione nelodbc.inicopiato. Se il suo valoreDriverè un nome di registrazione, mantenere quella definizione corrispondente nel/laodbcinst.inicopiato/a. Se il valore è un percorso assoluto della libreria, confermare che la libreria esiste ed è accessibile in quel percorso. Nella revisione unixODBC fissata, un valore che inizia con/viene utilizzato come percorso della libreria; gli altri valori vengono risolti tramite una registrazione del driver. Per maggiori informazioni, consulta il manuale odbc.ini di unixODBC e l'implementazione della ricerca driver appuntata. I comandi lasciano invariata la configurazione DSN dell'utente.Nella sezione privata
odbcinst.ini, aggiungi o aggiorna la sezione globale[ODBC]. Usa il percorso assoluto stampato dal comando precedente perTraceFile; non creare una seconda[ODBC]sezione:[ODBC] Trace=Yes TracePid=No TraceFile=/home/myappuser/odbc-trace.ABC123/odbc.logSostituisci il percorso di esempio con quello esatto stampato nel passaggio precedente. Imposta
TracePid=Noanche se la configurazione copiata lo abilita, così la traccia utilizza il singolo file mostrato qui.Avvia l'applicazione con la directory di configurazione di sistema privata:
if (umask 077; ODBCSYSINI="$config_dir" ODBCINSTINI=odbcinst.ini \ ODBCSEARCH=ODBC_BOTH_DSN ./your-app); then : else app_status=$? printf 'Application exited with status %s\n' "$app_status" >&2 fiIl file trace dovrebbe contenere chiamate API ODBC e i loro codici di ritorno. La condizione mantiene la shell aperta per la pulizia anche se l'applicazione esce con un errore. Il Driver Manager unixODBC legge la sua directory di configurazione di sistema da
ODBCSYSINI. ImpostareODBCINSTINI=odbcinst.iniper questo processo figlio in modo che una sovrascrittura del nome del file di registrazione ereditata non bypassi il file copiato. Per la ricerca del nome file, vedi la implementazione della configurazione unixODBC bloccata.ODBCSEARCH=ODBC_BOTH_DSNsovrascrive una modalità di ricerca DSN ereditata solo per l'utente o solo per il sistema per questo lancio. Queste impostazioni lasciano il file DSN utente esistente in posizione. unixODBC cerca sia nei file DSN di sistema che in quelli dell'utente, e il DSN utente ha precedenza quando lo stesso nome esiste in entrambi. Controlla se è presente un DSN utente duplicato se l'applicazione sembra utilizzare impostazioni diverse rispetto al DSN di sistema copiato. Se l'applicazione richiede intenzionalmente una modalità di ricerca limitata, conservare quella modalità e verificare che il file DSN selezionato contenga la definizione richiesta. Per ulteriori informazioni, consulta l'implementazione della modalità di ricerca di unixODBC, il manuale isql e il manuale odbc.ini.
Quando l'esecuzione termina, esci dall'applicazione per rilasciare i suoi handle dell'ambiente ODBC. Configura Trace=No o rimuovi le impostazioni di tracciamento [ODBC] prima di un altro avvio. Restringi l'accesso al registro prima di ispezionarlo o condividerlo:
if [ -f "$trace_dir/odbc.log" ]; then
chmod 600 "$trace_dir/odbc.log"
else
printf 'No trace file was created. Check that the application started and allocated an ODBC environment.\n' >&2
fi
Un'applicazione che non si avvia o esce prima di allocare un ambiente ODBC potrebbe non creare un file trace. Il controllo segnala il file mancante e mantiene accessibile la procedura di pulizia nella shell dedicata.
Oscura i contenuti sensibili prima di condividere il trace. Elimina il log quando non ne hai più bisogno. Rimuovi i file di configurazione e le directory private solo se che hai creato per questa traccia e non hai più bisogno del loro contenuto.
I seguenti comandi rimuovono solo i file e le directory creati in questa procedura:
rm -f "$trace_dir/odbc.log" "$config_dir/odbcinst.ini" "$config_dir/odbc.ini"
rmdir "$trace_dir" "$config_dir"
Trova i file di configurazione usati dal Driver Manager
Esegui odbcinst -j per visualizzare i percorsi di configurazione di sistema e dell’utente. I percorsi possono variare a seconda della piattaforma e della build unixODBC.
I DSN dell'utente sono disponibili per un utente specifico.
Le DSN di sistema sono disponibili per gli utenti sul sistema e la loro gestione può richiedere permessi da parte degli amministratori. Quando lo stesso nome DSN esiste in entrambi i file, il DSN utente ha la precedenza. Per altre informazioni, vedere la documentazione di unixODBC.