W tej części przedstawiono najczęstsze problemy z połączeniami podczas używania DB2 Connect. W każdym przypadku użytkownik ma do dyspozycji:
Uwagi:
Czasami kody znaczenia SNA są umieszczane w protokołach systemowych. Zależy to jednak od używanego podsystemu SNA. Czasami, aby uzyskać kody znaczenia, należy najpierw uaktywnić śledzenie SNA, a następnie powtórzyć problem.
Komunikaty SQL0965 i SQL0969 mogą pojawiać się z wieloma różnymi kodami powrotu z DB2 Universal Database for AS/400, DB2 Universal Database for OS/390, DB2 for MVS/ESA i DB2 for VM &VSE.
Jeśli pojawi się taki komunikat, należy odnaleźć oryginalny kod SQL w dokumentacji dla serwera baz danych wydającego komunikat.
Kod SQL odebrany od bazy danych hosta nie może być tłumaczony. Należy poprawić błąd w oparciu o kod błędu, a następnie wprowadzić ponownie komendę, której wykonanie nie powiodło się.
Nie zdefiniowano symbolicznej nazwy docelowej lub zdefiniowano ją nieprawidłowo.
Sytuacja taka może mieć miejsce, gdy używany jest węzeł APPC, a symboliczna nazwa docelowa podana w katalogu węzłów DB2 nie odpowiada pozycji CPI-C w konfiguracji lokalnego podsystemu komunikacyjnego APPC.
Inną przyczyną może być zainstalowanie więcej niż jednego stosu SNA w używanej maszynie. Pożyteczne może okazać się sprawdzenie PATH i LIBPATH, co pozwoli zapewnić, że najpierw wystąpi odwołanie do stosu, który ma być używany.
SQL1403N Nazwa użytkownika lub hasło jest niepoprawne.
Jeśli tak, należy sprawdzić, czy podano prawidłowe hasło w instrukcji CONNECT, jeśli jest to konieczne.
Jeśli nie, pozycja systemowego katalogu baz danych musiała zostać niepoprawnie wpisana przy użyciu AUTHENTICATION SERVER (wartość domyślna, jeśli jawnie nie podano AUTHENTICATION). Jeśli miało to miejsce, należy ponownie umieścić pozycję w katalogu przy użyciu AUTHENTICATION DCS lub CLIENT.
Obsługa jednego lub większej liczby protokołów komunikacyjnych nie uruchomiła się pomyślnie. Jednak podstawowe funkcje menedżera baz danych uruchomiły się pomyślnie.
Być może protokół TCP/IP nie został uruchomiony na bramie DB2 Connect albo poprzednio wystąpiło pomyślne połączenie klienta.
Jeśli diaglevel = 4, to db2diag.log może zawierać pozycje podobne do podanej poniżej.
1997-05-30-14.09.55.321092 Instance:svtdbm5 Node:000 PID:10296(db2tcpcm) Appid:none common_communication sqlcctcpconnmgr_child Probe:46 DIA3205E Socket address "30090" configured in the TCP/IP services file and required by the TCP/IP server support is being used by another process.
Ostrzeżenie sygnalizuje, że produkt DB2 Connect działający jako brama dla zdalnych klientów ma trudności z obsługiwaniem jednego lub większej liczby protokołów komunikacyjnych klienta. Mogą to być protokoły TCP/IP, APPC lub inne. Komunikat ten zazwyczaj oznacza, że jeden z protokołów komunikacyjnych zdefiniowanych dla DB2 Connect nie jest poprawnie zdefiniowany.
Często przyczyną może być niezdefiniowana lub zdefiniowana niepoprawnie zmienna profilu DB2COMM. Ogólnie problem stanowi niezgodność między zmienną DB2COMM a nazwami zdefiniowanymi w konfiguracji menedżera baz danych (na przykład svcename, nname lub tpname).
Możliwym scenariuszem jest wykorzystanie połączenia poprzednio zakończonego pomyślnie, a następnie pobranie komunikatu o błędzie SQL5043, gdy żadna konfiguracja nie zmieniła się. Taka sytuacja może mieć miejsce przy użyciu protokołu TCP/IP, gdy zdalny system z jakiegoś powodu niepoprawnie zakończył połączenie. Gdy to się stanie, połączenie może nadal istnieć po stronie klienta i być może będzie możliwe przywrócenie połączenia po uruchomieniu komend wymienionych poniżej.
Bardziej prawdopodobne jest, że jeden z klientów łączących się z bramą nadal ma uchwyt na porcie TCP/IP. Na każdej maszynie klienta połączonej z bramą należy wykonać komendy:
SQL30020N Uruchomienie nie powiodło się z powodu błędu protokołu dystrybucyjnego, który będzie miał wpływ na poprawne uruchomienie kolejnych komend lub instrukcji SQL.
Po wystąpieniu tego błędu należy skontaktować się z serwisem.
Należy sprawdzić ffdc dump (pid.000) w katalogu db2dump. Następnie należy sformatować plik zrzutu za pomocą db2fdump i poszukać w pliku wynikowym słowa "ERROR". Może się tu znajdować MVS ABEND. Jeśli to się zdarzy, należy poszukać dalszych informacji na konsoli MVS i znaleźć kod zakończenia w podręczniku DB2 for MVS Messages and Codes.
SQL30060N "<ID-autoryzowanego użytkownika>" nie ma uprawnienia do przeprowadzenia operacji "<operacja>".
Podczas połączenia z DB2 for MVS lub DB2 for OS/390 tabele komunikacyjne baz danych nie zostały poprawnie zaktualizowane. Skorzystaj z podręczników:
Połączenie z nieprawidłowym miejscem serwera baz danych hosta lub AS/400 - nie można znaleźć docelowej bazy danych.
Być może w pozycji katalogu DCS podano nieprawidłową nazwę bazy danych serwera. W takiej sytuacji do aplikacji zwracany jest kod SQLCODE -30061.
Należy sprawdzić węzeł DB2, bazę danych i pozycje katalogu DCS. Nazwa docelowej bazy danych w pozycji katalogu DCS musi odpowiadać nazwie bazy danych w zależności od platformy. W przypadku bazy danych DB2 Universal Database for OS/390 używana nazwa powinna być taka sama, jak w polu "LOCATION=nazwa_położenia" zbioru danych programu ładowania początkowego (BSDS). Jest ona także podawana w komunikacie DSNL004I (LOCATION=położenie) przy uruchamianiu Distributed Data Facility (DDF). Patrz także sekcja Opis pojęcia baza danych i rozdział Aktualizowanie katalogów baz danych.
W podręczniku DB2 Connect Quick Beginnings (Krótkie wprowadzenie) można znaleźć również przykłady, jak zaktualizować katalog DB2. Patrz sekcja "Update the DB2 Directories" ("Aktualizacja katalogów DB2") znajdujący się w każdym rozdziale opisującym konfigurowanie SNA lub przeczytaj sekcje "Configuring Host and AS/400 Databases for DB2 Connect" ("Konfigurowanie baz danych hosta i AS/400 dla DB2 Connect") i "Configuring the TCP/IP Connection" ("Konfigurowanie połączenia TCP/IP").
Poprawnymi komendami dla węzła APPC lub APPN są:
db2 catalog appc node <nazwa_węzła> remote <sym_nazw_doc> security program db2 catalog dcs database <nazwa_lokalna> as <rzecz_nazwa_bazy_danych> db2 catalog database <nazwa_lokalna> as <alias> at node <nazwa_węzła> authentication dcs
Poprawnymi komendami dla węzła TCP/IP są:
db2 catalog tcpip node <nazwa_węzła> remote <nazwa_lub_adres_hosta> server <numer_portu_lub_nazwa_usługi> db2 catalog dcs database <nazwa_lokalna> as <rzecz_nazwa_bazy_danych> db2 catalog database <nazwa_lokalna> as <alias> at node <nazwa_węzła> authentication dcs
Następnie, aby połączyć się z bazą danych, należy wpisać:
db2 connect to <alias> user <nazwa_użytkownika> using <hasło>
Komunikat SQL30073 jest wydawany z kodem powrotu 119C. Komunikat pojawia się, gdy baza danych serwera docelowego nie obsługuje strony kodowej używanej przez klienta DB2 (za pośrednictwem DB2 Connect). Strona kodowa jest uzyskiwana z konfiguracji środowiska operacyjnego, w którym jest uruchomiony klient DB2.
Więcej informacji można znaleźć w podręczniku Administration Guide.
Problem ten można rozwiązać, instalując poprawkę w systemie baz danych serwera docelowego. Poprawki zalecane w tej sytuacji można uzyskać w serwisie odpowiedniego produktu.
Jako tymczasowe rozwiązanie użytkownik może zastosować przesłonięcie domyślnej strony kodowej, ustawiając zmienną środowiskową. Należy sprawdzić ustawienia narodowe lub ustawić DB2CODEPAGE=850.
Na platformach typu UNIX użytkownik może spróbować zmienić stronę kodową, zmieniając wartość zmiennej środowiskowej LANG.
Wyświetlany jest następujący komunikat z kodem znaczenia SNA:
db2 connect to <nazwa_bazy_danych> user <id_użytkownika> Podaj hasło dla <id_użytkownika>: SQL30081N Wykryto błąd komunikacyjny. Używany protokół komunikacyjny: "APPC". Używany zestaw komunikacyjnych funkcji API: "CPI-C". Miejsce gdzie został wykryty błąd: "". Funkcja komunikacyjna wykryła błąd: "cmallc". Kod(y) błędów właściwe dla protokołu: "1", "*", "0x10030021". SQLSTATE=08001
W podanym przykładzie kod znaczenia jest równy 10030021.
Poniżej podano najczęściej występujące kody znaczenia związane z tym komunikatem o błędzie i sugerowane rozwiązania dla każdego przypadku:
SQL30081N z kodem powrotu 1 i kodem znaczenia SNA 0877002C
Podano nieprawidłową nazwę sieciową.
SQL30081N z kodem powrotu 1 i kodem znaczenia SNA ffff0003
Podano nieprawidłowy adres MAC lub połączenie SNA nie jest aktywne.
SQL30081N z kodem powrotu 1 i kodem znaczenia SNA 10030021
Błędny typ jednostki logicznej.
SQL30081N z kodem powrotu 1 i kodem znaczenia SNA 084B6031
Parametr MAXDBAT w DSNZPARM (na hoście DB2 for MVS lub DB2 for OS/390) jest ustawiony na 0.
Inne sugestie:
Komunikat SQL30081N jest odbierany z kodem powrotu 2 i kodem znaczenia 08120022.
Parametr NUMILU na NCP (koniec połączenia znajdujący się na hoście) może być ustawiony na wartość domyślną (0). Należy to sprawdzić. Następnie zmodyfikować definicję NCP, jeśli to konieczne przed ponowną próbą, po wprowadzeniu zmian.
Wyświetlany jest następujący komunikat (w tym przypadku nie jest wymagany kod znaczenia SNA):
db2 connect to <baza_danych> user <id_użytkownika> SQL30081N Wykryto błąd komunikacyjny. Używany protokół komunikacyjny: "APPC". Używany zestaw komunikacyjnych funkcji API: "CPI-C". Miejsce gdzie został wykryty błąd: "". Funkcja komunikacyjna wykryła błąd: "cmsend". Kod(y) błędów właściwe dla protokołów: "9", "*", "0x10086021". SQLSTATE=08001
Problem polega na tym, że w systemie DB2 Connect nie zdefiniowano poprawnie nazwy programu transakcyjnego (TPNAME). Na przykład użytkownik mógł zaktualizować konfigurację SNA, ale jeszcze nie zweryfikował jej na bramie DB2 Connect. Dodatkowe informacje można znaleźć w podręcznikach DB2 Connect Enterprise Edition for OS/2 and Windows Quick Beginnings i DB2 Connect Personal Edition Krótkie wprowadzenie.
Wyświetlany jest następujący komunikat (nie jest wymagany kod znaczenia SNA):
SQL30081N Wykryto błąd komunikacyjny. Używany protokół komunikacyjny: "APPC". Używany zestaw komunikacyjnych funkcji API: "CPI-C". Miejsce gdzie został wykryty błąd: "". Funkcja komunikacyjna wykryła błąd: "cmrcv". Kod(y) błędów właściwe dla protokołu: "10", "*", "*". SQLSTATE=08001
Należy sprawdzić, czy produkt DB2 jest poprawnie zainstalowany.
Jeśli używana jest brama DB2 Connect for OS/2, może zostać wyświetlony następujący tekst, jeśli nazwa TP nie jest poprawnie zdefiniowana:
Kody błędów właściwe dla protokołu: "10", "*", "0x084C0000". SQLSTATE=08001
W tym przypadku, na przykład w CM/2 definicja powinna wyglądać następująco:
Transaction program name = 'tpname' (definiowana przez użytkownika) OS/2 program path and file name = notused
i (na następnym ekranie konfiguracyjnym CM/2)
Presentation type - background Operation type - Queued, operator preloaded
SQL30081N Wykryto błąd komunikacyjny. Używany protokół komunikacyjny: "APPC". Używany zestaw komunikacyjnych funkcji API: "CPI-C". Miejsce gdzie został wykryty błąd: "". Funkcja komunikacyjna wykryła błąd: "xcstp". Kody błędów właściwe dla protokołów: "20", "*", "*". SQLSTATE=08001
Należy sprawdzić, czy uruchomiono podsystem SNA w systemie DB2 Connect.
Komunikat SQL30081N jest odbierany z kodem powrotu 27 i kodem znaczenia SNA 800Axxxx.
Jednostka informacyjna ścieżki (PIU) VTAM jest za duża.
SQL30081N Wykryto błąd komunikacyjny. Używany protokół komunikacyjny: "TCP/IP". Używany zestaw komunikacyjnych funkcji API: "SOCKETS". Miejsce gdzie został wykryty błąd: "". Funkcja komunikacyjna wykryła błąd: "connect". Kod(y) błędów właściwe dla protokołów: "79", "*", "*". SQLSTATE=08001
Ten błąd może wystąpić, gdy zdalny klient nie zdoła połączyć się z bramą DB2 Connect. Może on również wystąpić, gdy brama DB2 Connect łączy się z hostem.
db2 update dbm cfg using diaglevel 4Po zatrzymaniu i ponownym uruchomieniu DB2 należy sprawdzić w pliku db2diag.log, czy uruchomiono komunikację DB2 TCP/IP. Powinien zostać wyświetlony tekst podobny do podanego poniżej:
1998-02-03-12.41.04.861119 Instance:svtdbm2 Node:00 PID:86496(db2sysc) Appid:none common_communication sqlcctcp_start_listen Probe:80 DIA3000I Uruchomienie obsługi protokołu "TCPIP" nie powiodło się.
SQL30081N Wykryto błąd komunikacyjny. Używany protokół komunikacyjny: "TCP/IP". Używany zestaw komunikacyjnych funkcji API: "SOCKETS". Miejsce gdzie został wykryty błąd : "9.21.85.159". Komunikacyjna funkcja wykryła błąd: "send". Kod(y) błędów właściwe dla protokołu: "10032", "*", "*". SQLSTATE=08001
Ten błąd pojawia się, gdy zachodzi próba odłączenia się od maszyny, na której komunikacja TCP/IP załamała się. Należy rozwiązać problem z podsystemem TCP/IP.
Na większości maszyn ponowne uruchomienie protokołu TCP/IP rozwiązuje problem. Niekiedy może być konieczne wyłączenie i włączenie maszyny.