Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
pobierz sterownika ODBC
Ten artykuł pokazuje, jak skonfigurować śledzenie menedżera sterowników unixODBC w systemach Linux i macOS. Śledzenie rejestruje wywołania API ODBC, które wykonujesz przez Driver Manager. Nie śledzi wewnętrznych zdarzeń sterownika Microsoft ODBC. Informacje o różnicy między rekordami diagnostycznymi a warstwami śledzenia znajdują się w diagnostyce ODBC.
Sekcja [ODBC] w odbcinst.ini kontroluje śledzenie dla aplikacji korzystających z konfiguracji systemu unixODBC. Ustaw Trace=Yes i określ ścieżkę bezwzględną dla TraceFile:
[ODBC]
Trace=Yes
TracePid=No
TraceFile=/home/myappuser/odbc-trace.ABC123/odbc.log
Ścieżka jest ilustracyjna; użyj prywatnej ścieżki absolutnej wygenerowanej w następującej procedurze.
Zachowaj w tym pliku wpisy rejestracji sterownika, których wymaga Twoja aplikacja odbcinst.ini. Sekcja [ODBC] jest globalna dla całej konfiguracji. Dodanie Trace=Yes do sekcji specyficznej dla sterownika nie ogranicza śledzenia Driver Manager unixODBC do tego sterownika.
Domyślna ścieżka pliku śledzenia nie jest ograniczona do kontekstu Twojej aplikacji. Zamiast tego użyj prywatnego katalogu i wyraźnej ścieżki do pliku śledzenia. Śledzenie może wpływać na wydajność, a wyjście może zawierać dane aplikacji. Ogranicz dostęp do pliku i przechwytuj tylko te wywołania, których potrzebujesz.
Użyj wersji unixODBC, która zawiera poprawkę bufora śledzenia diagnostycznego w projekcie źródłowym. Pakiety dostawców mogą zawierać backport; sprawdź poprawki pakietu zamiast polegać wyłącznie na numerze wersji. Bez tej poprawki aplikacja może zostać przerwana w SQLGetDiagRec, podczas gdy menedżer formatuje natywny błąd do śledzenia.
Uruchom aplikację Trace One
Otwórz dedykowaną powłokę Bash, a następnie wykonaj polecenia powłoki opisane w tej procedurze w tej samej sesji terminala. Pierwsze polecenie włącza mechanizm szybkiego przerywania przy błędzie, więc nieudane utworzenie katalogu, zmiana uprawnień lub skopiowanie konfiguracji powodują zatrzymanie procesu przed uruchomieniem aplikacji. Pozostaw powłokę otwartą na późniejsze etapy i wpisz exit po czyszczeniu.
Uruchom
odbcinst -ji zanotuj ścieżki do plików sterownika systemowego i systemowego źródła danych. Utwórz prywatne katalogi konfiguracji i śledzenia, a następnie skopiuj pliki konfiguracyjne systemu. Zamień przykładowe ścieżki plików na te wyświetlane w systemie: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"Przypięta implementacja konfiguracji śledzenia unixODBC dostarcza 64-bajtowy bufor do czytnika profilu rejestracyjnego. Ten czytnik bezpiecznie kopiuje ścieżkę o długości do 62 bajtów oraz jej terminator null. Dla dłuższych ścieżek gałąź obsługująca obcinanie nie dodaje terminatora zerowego. Sprawdzenia z unixODBC 2.3.14 na Linuksie i macOS potwierdziły poprawne tworzenie śladu przy rozmiarze 62 bajtów. Strażnik liczy bajty i zatrzymuje się przed startem, jeśli wygenerowana ścieżka jest zbyt długa. Jeśli się zatrzyma, użyj krótszej ścieżki nadrzędnej z prawem zapisu w poleceniu
trace_dir, zachowajmktemp -di zrestartuj procedurę.Zachowaj wszystkie wpisy rejestru sterownika, których wymaga aplikacja, w kopii
odbcinst.ini. Jeśli aplikacja używa nazwy źródła danych systemowych (DSN), zachowaj jej definicję w skopiowanymodbc.ini. Jeśli jegoDriverwartość jest nazwą wpisu rejestru, zachowaj tę dopasowaną definicję w skopiowanymodbcinst.ini. Jeśli wartość to absolutna ścieżka biblioteki, potwierdź, że biblioteka istnieje i jest dostępna na tej ścieżce. W przypiętej wersji unixODBC jako ścieżka biblioteki używa się wartości zaczynającej się od/; pozostałe wartości są rozwiązywane przez rejestrację sterownika. Więcej informacji można znaleźć w podręczniku odbc.ini programu unixODBC oraz w przypiętej implementacji wyszukiwania sterowników. Polecenia pozostawiają konfigurację DSN użytkownika bez zmian.W prywatnym
odbcinst.ini, dodaj lub zaktualizuj sekcję globalną[ODBC]. Użyj absolutnej ścieżki wydrukowanej przez poprzednie polecenie dlaTraceFile; nie tworz drugiej[ODBC]sekcji:[ODBC] Trace=Yes TracePid=No TraceFile=/home/myappuser/odbc-trace.ABC123/odbc.logZastąp przykładową ścieżkę dokładnie tą ścieżką wydrukowaną w poprzednim kroku. Ustaw
TracePid=Nonawet jeśli skopiowana konfiguracja to umożliwia, tak aby ślad używał pojedynczego pliku pokazanego tutaj.Uruchom aplikację z prywatnym katalogiem konfiguracji systemu:
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 fiPlik śledzenia powinien zawierać wywołania API ODBC oraz ich kody zwrotne. Instrukcja warunkowa utrzymuje powłokę otwartą do sprzątania, nawet jeśli aplikacja zakończy się błędem. Menedżer sterowników unixODBC odczytuje katalog konfiguracji systemu z
ODBCSYSINI. UstawODBCINSTINI=odbcinst.inidla tego procesu potomnego, aby dziedziczone nadpisanie nazwy pliku rejestracji nie omijało skopiowanego pliku. Informacje o wyszukiwaniu nazwy pliku znajdziesz w przypiętej implementacji konfiguracji unixODBC.ODBCSEARCH=ODBC_BOTH_DSNnadpisuje odziedziczony tryb wyszukiwania DSN tylko dla użytkownika lub tylko dla systemu w tym uruchomieniu. Te ustawienia pozostawiają istniejący plik DSN użytkownika na miejscu. unixODBC przeszukuje zarówno pliki DSN systemowe, jak i użytkownika, a DSN użytkownika ma pierwszeństwo, gdy w obu przypadkach występuje ta sama nazwa. Sprawdź, czy istnieje zduplikowany DSN użytkownika, jeśli aplikacja wydaje się używać innych ustawień niż skopiowany systemowy DSN. Jeśli aplikacja celowo wymaga trybu ograniczonego wyszukiwania, zachowaj go zamiast tego i sprawdź, czy wybrany plik DSN zawiera wymaganą definicję. Więcej informacji można znaleźć w implementacji trybu wyszukiwania unixODBC , instrukcji isql oraz instrukcji odbc.ini.
Po zakończeniu odtwarzania wyjdź z aplikacji, aby zwolnić uchwyty środowiska ODBC. Przed kolejnym uruchomieniem ustaw Trace=No lub usuń ustawienia śledzenia [ODBC]. Ogranicz dostęp do logu przed jego inspekcją lub udostępnieniem:
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
Aplikacja, która nie uruchamia się lub kończy się przed przydziałem środowiska ODBC, może nie utworzyć pliku śledzenia. Kontrola zgłasza brakujący plik i pozostawia funkcję czyszczenia dostępną w dedykowanej powłoce.
Zredaguj wrażliwe treści przed udostępnieniem śladu. Usuń log, gdy już go nie potrzebujesz. Usuń prywatne pliki konfiguracyjne i katalogi tylko wtedy, gdy stworzyłeś je dla tego śladu i nie potrzebujesz już ich zawartości.
Następujące polecenia usuwają jedynie pliki i katalogi utworzone w tej procedurze:
rm -f "$trace_dir/odbc.log" "$config_dir/odbcinst.ini" "$config_dir/odbc.ini"
rmdir "$trace_dir" "$config_dir"
Znajdź pliki konfiguracyjne używane przez Driver Manager
Uruchom odbcinst -j, aby wyświetlić ścieżki konfiguracji systemu i użytkownika. Ścieżki mogą się różnić w zależności od platformy i kompilacji unixODBC.
DSN użytkownika są dostępne dla konkretnego użytkownika.
DSN systemowe są dostępne dla użytkowników w systemie, a ich zarządzanie może wymagać uprawnień administratora. Gdy ta sama nazwa DSN występuje w obu plikach, pierwszeństwo ma DSN użytkownika. Aby uzyskać więcej informacji, zobacz dokumentację systemu unixODBC.