Narzędzie ddcstrc umożliwia zapisywanie danych wymienianych między stacją roboczą DB2 Connect (reprezentującą klienta bazy danych) a systemem zarządzania bazami danych hosta lub AS/400.
Zrozumienie, jak działa ten przepływ danych, może być pożyteczne dla administratora baz danych (lub programisty aplikacji), ponieważ może pomóc w określeniu pochodzenia danego błędu. Na przykład wydano instrukcję CONNECT TO połączenia z serwerem baz danych AS/400 lub hosta, ale wykonanie komendy zakończyło się niepomyślnie i odebrano kod powrotu informujący o niepomyślnym wykonaniu komendy. Dokładne zrozumienie, jakie informacje zostały przeniesione do systemu zarządzania serwera baz danych AS/400 lub hosta, może ułatwić określenie przyczyny niepowodzenia, nawet jeśli kod powrotu zawiera tylko ogólne informacje. Wiele niepowodzeń jest spowodowanych przez proste błędy użytkownika.
Plik wyjściowy narzędzia ddcstrc zawiera wykaz strumieni danych wymienionych między stacją roboczą DB2 Connect a systemem zarządzania serwera baz danych hosta lub AS/400. Dane wysłane do serwera baz danych hosta lub AS/400 mają etykietę SEND BUFFER, a dane odebrane od serwera baz danych hosta lub AS/400 mają etykietę RECEIVE BUFFER.
Jeśli bufor odbioru zawiera informacje obszaru komunikacyjnego SQL, wystąpi po nim sformatowana postać tych danych z etykietą SQLCA. Pole SQLCODE informacji obszaru komunikacyjnego SQL to nieodwzorowana wartość zwrócona przez serwer baz danych hosta lub AS/400. (Więcej informacji na temat odwzorowania można znaleźć w sekcji Odwzorowanie SQLCODE). Bufory wysyłania i odbioru są uporządkowane od najstarszego do najnowszego w pliku. Każdy bufor ma:
Pozostałe dane w buforach wysyłania i odbioru są podzielone na pięć kolumn zawierających:
Więcej informacji na temat DDM można znaleźć w podręcznikach:
Komenda ta jest wywoływana z wiersza komend systemu operacyjnego i ma następującą składnię:
Rysunek 9. Składnia komendy ddcstrc
![]() |
Uwaga: | Składnia komendy ddcstrc może się nieznacznie różnić w zależności od używanego systemu operacyjnego. Na przykład w systemie operacyjnym OS/2 zamiast znaku - może być używany znak /. |
Wartości domyślne: -r, -s oraz -c.
Uwaga: | W przypadku zdalnego klienta wartość pid (id_procesu) można odnaleźć w polu Agent ID zwróconym przez monitor systemu baz danych. |
Program narzędziowy ddcstrc zapisuje w pliku plik_śledzenia następujące informacje:
Uwagi:
Na kolejnych stronach przedstawiono przykładowy plik wyjściowy ilustrujący niektóre strumienie danych DRDA wymieniane między stacjami roboczymi DB2 Connect a serwerem baz danych hosta lub AS/400. Z punktu widzenia użytkownika komenda CONNECT TO połączenia z bazą danych została wydana przy użyciu Procesora wiersza komend.
Rysunek 10 przedstawia przykładowy plik wyjściowy, który powstał przy użyciu produktu DB2 Connect Enterprise Edition wersja 7 i produktu DB2 Universal Database for OS/390 wersja 5.1 za pomocą połączenia APPC.
Rysunek 11 przedstawia przykładowy plik wyjściowy, który powstał przy użyciu produktu DB2 Connect Enterprise Edition wersja 7 i produktu DB2 Universal Database for OS/390 wersja 5.1 za pomocą połączenia TCP/IP.
Rysunek 10. Przykładowy plik wyjściowy śledzenia (połączenie APPC)
1 DB2 fnc_data gateway_drda_ar sqljcsend (1.35.10.80) pid 95212; tid 537115484; node 0; cpid 0; sec 0; nsec 0; tpoint 177 SEND BUFFER: EXCSAT RQSDSS (ASCII) (EBCDIC) 0 1 2 3 4 5 6 7 8 9 A B C D E F 0123456789ABCDEF 0123456789ABCDEF 0000 006AD04100010064 10410020115E8482 .j.A...d.A. .^.. .|}..........;db 0010 F282974040404040 4040404040404040 ...@@@@@@@@@@@@@ 2bp 0020 4040F0F0F0F1F7F3 C5C3000C116DA685 @@...........m.. 000173EC..._we 0030 81A2859340400013 115AC4C2F240C396 ....@@...Z...@.. asel ...]DB2 Co 0040 95958583A340F54B F200141404140300 .....@.K........ nnect 5.2....... 0050 0414440003240700 05240F0003000D11 ..D..$...$...... ................ 0060 47D8C4C2F261F6F0 F0F00085D0010002 G....a.......... .QDB2/6000.e}... 0070 007F200100162110 E2C1D56DC6D9C1D5 .. ...!....m.... ."......SAN_FRAN 0080 C3C9E2C3D6404040 40400006210F2407 .....@@@@@..!.$. CISCO ...... 0090 000D002FD8E3C4E2 D8D3C1E2C3000C11 .../............ ....QTDSQLASC... 00A0 2EE2D8D3F0F5F0F2 F0003C210437E2D8 .......... 3 DB2 fnc_data gateway_drda_ar sqljcsend (1.35.10.80) pid 95212; tid 537115484; node 0; cpid 0; sec 0; nsec 0; tpoint 177 SEND BUFFER: RDBCMM RQSDSS (ASCII) (EBCDIC) 0 1 2 3 4 5 6 7 8 9 A B C D E F 0123456789ABCDEF 0123456789ABCDEF 0000 000AD00100010004 200E ........ . ..}....... 4 DB2 fnc_data gateway_drda_ar sqljcrecv (1.35.10.81) pid 95212; tid 537115484; node 0; cpid 0; sec 0; nsec 0; tpoint 178 RECEIVE BUFFER: ENDUOWRM RPYDSS (ASCII) (EBCDIC) 0 1 2 3 4 5 6 7 8 9 A B C D E F 0123456789ABCDEF 0123456789ABCDEF 0000 002BD05200010025 220C000611490004 .+.R...%"....I.. ..}............. 0010 00162110E2C1D56D C6D9C1D5C3C9E2C3 ..!....m........ ....SAN_FRANCISC 0020 D640404040400005 211501000BD00300 .@@@@@..!....... O .......}.. 0030 0100052408FF ...$.. ...... 5 DB2 fnc_data gateway_drda_ar sqljmsca (1.35.10.108) pid 95212; tid 537115484; node 0; cpid 0; sec 0; nsec 0; tpoint 179 SQLCA SQLCAID: SQLCA SQLCABC: 136 SQLCODE: 0 SQLERRML: 0 SQLERRMC: SQLERRP: DSN SQLERRD[0->5]: 00000000, 00000000, 00000000, 00000000, 00000000, 00000000 SQLWARN(0->A): , , , , , , , , , , SQLSTATE: 00000 |
Rysunek 11. Przykład pliku wyjściowego śledzenia (połączenie TCP/IP)
1 DB2 fnc_data gateway_drda_ar sqljcsend (1.35.10.80) pid 80286; tid 537125164; node 0; cpid 0; sec 0; nsec 0; tpoint 177 SEND BUFFER: EXCSAT RQSDSS (ASCII) (EBCDIC) 0 1 2 3 4 5 6 7 8 9 A B C D E F 0123456789ABCDEF 0123456789ABCDEF 0000 006ED04100010068 10410020115E8482 .n.A...h.A. .^.. .>}..........;db 0010 F282974040404040 4040404040404040 ...@@@@@@@@@@@@@ 2bp 0020 4040F0F0F0F1F3F9 F9C5000C116DA685 @@...........m.. 0001399E..._we 0030 81A2859340400013 115AC4C2F240C396 ....@@...Z...@.. asel ...]DB2 Co 0040 95958583A340F54B F200181404140300 .....@.K........ nnect 5.2....... 0050 0514740005240700 05240F0003144000 ..t..$...$....@. .............. . 0060 05000D1147D8C4C2 F261F6F0F0F00010 ....G....a...... .....QDB2/6000.. 0070 D0410002000A106D 000611A20003003C .A.....m.......< }......_...s.... 0080 D04100030036106E 000611A200030016 .A...6.n........ }......>...s.... 0090 2110E2C1D56DC6D9 C1D5C3C9E2C3D640 !....m.........@ ..SAN_FRANCISCO 00A0 40404040000C11A1 9781A2A2A6969984 @@@@............ ....password 00B0 000A11A0A4A28599 8984009CD0010004 ................ ....userid..}... 00C0 0096200100162110 E2C1D56DC6D9C1D5 .. ...!....m.... .o......SAN_FRAN 00D0 C3C9E2C3D6404040 40400006210F2407 .....@@@@@..!.$. CISCO ...... 00E0 000D002FD8E3C4E2 D8D3C1E2C3000C11 .../............ ....QTDSQLASC... 00F0 2EE2D8D3F0F5F0F2 F0003C210437E2D8 .......... 3 DB2 fnc_data gateway_drda_ar sqljcsend (1.35.10.80) pid 80286; tid 537125164; node 0; cpid 0; sec 0; nsec 0; tpoint 177 SEND BUFFER: RDBCMM RQSDSS (ASCII) (EBCDIC) 0 1 2 3 4 5 6 7 8 9 A B C D E F 0123456789ABCDEF 0123456789ABCDEF 0000 000AD00100010004 200E ........ . ..}....... 4 DB2 fnc_data gateway_drda_ar sqljcrecv (1.35.10.81) pid 80286; tid 537125164; node 0; cpid 0; sec 0; nsec 0; tpoint 178 RECEIVE BUFFER: ENDUOWRM RPYDSS (ASCII) (EBCDIC) 0 1 2 3 4 5 6 7 8 9 A B C D E F 0123456789ABCDEF 0123456789ABCDEF 0000 002BD05200010025 220C000611490004 .+.R...%"....I.. ..}............. 0010 00162110E2C1D56D C6D9C1D5C3C9E2C3 ..!....m........ ....SAN_FRANCISC 0020 D640404040400005 211501000BD00300 .@@@@@..!....... O .......}.. 0030 0100052408FF ...$.. ...... 5 DB2 fnc_data gateway_drda_ar sqljmsca (1.35.10.108) pid 80286; tid 537125164; node 0; cpid 0; sec 0; nsec 0; tpoint 179 SQLCA SQLCAID: SQLCA SQLCABC: 136 SQLCODE: 0 SQLERRML: 0 SQLERRMC: SQLERRP: DSN SQLERRD[0->5]: 00000000, 00000000, 00000000, 00000000, 00000000, 00000000 SQLWARN(0->A): , , , , , , , , , , SQLSTATE: 00000 |
Powyższe pliki śledzenia zawierają następujące informacje:
Pierwszy bufor zawiera komendy Exchange Server Attributes (EXCSAT) i Access RDB (ACCRDB) wysyłane do systemu zarządzania bazami danych serwera baz danych hosta lub AS/400. Są one wysyłane w wyniku działania komendy CONNECT TO połączenia z bazą danych.
Następny bufor zawiera odpowiedź, którą DB2 Connect odebrał od systemu zarządzania bazami danych hosta lub serwera AS/400. Zawiera on komendy Exchange Server Attributes Reply Data (EXCSATRD) i Access RDB Reply Message (ACCRDBRM).
Komenda EXCSAT zawiera nazwę stacji roboczej klienta podaną przez obiekt Server Name (SRVNAM) o punkcie kodowym X'116D', zgodnie ze specyfikacją DDM. Komenda EXCSAT znajduje się w pierwszym buforze. W ramach komendy EXCSAT wartości X'116DA68581A28593' (zakodowane jako CCSID 500) są tłumaczone na słowo weasel po usunięciu X'116D'.
Komenda EXCSAT zawiera również obiekt EXTNAM (External Name), który jest często umieszczany w informacjach diagnostycznych w systemie zarządzania bazami danych serwera AS/400 lub hosta. Składa się on z ID aplikacji o długości 20 bajtów, po którym następuje ID procesu o długości 8 bajtów (lub ID procesu o długości 4 bajtów i ID wątku o długości 4 bajtów). Jest on reprezentowany przez punkt kodowy X'115E', w przytoczonym przykładzie jego wartość wynosi db2bp_32 uzupełnione znakami odstępu, po których następuje 0000BE5C. Dla klienta bazy danych w systemie UNIX wartość ta może być skorelowana z komendą ps, która zwraca do standardowego wyjścia informacje o statusie aktywnych procesów.
Komenda ACCRDB zawiera RDB_NAME w obiekcie RDBNAM o punkcie kodowym X'2110'. Komenda ACCRDB występuje po komendzie EXCSAT w pierwszym buforze. W ramach komendy ACCRDB wartości X'2110E2C1D56DC6D9C1D5C3C9E2C3D6' są tłumaczone na SAN_FRANCISCO po usunięciu X'2110'. Odpowiada to polu nazwy docelowej bazy danych w katalogu DCS.
Łańcuch rozliczeniowy ma punkt kodowy równy X'2104' (patrz sekcja Implementowanie rozliczeń według wykorzystania zasobów w DB2 Universal Database for OS/390).
Zbiór kodowy skonfigurowany dla stacji roboczej DB2 Connect można wyświetlić, umieszczając obiekt CCSID: CCSIDSBC (CCSID dla znaków jednobajtowych) o punkcie kodowym X'119C' w komendzie ACCRDB. W podanym przykładzie CCSIDSBC wynosi X'0352', czyli 850.
Jeśli istnieją dodatkowe obiekty CCSIDDBC (CCSID dla znaków dwubajtowych) i CCSIDMBC (CCSID dla znaków mieszanych) o punktach kodowych odpowiednio X'119D' i X'119E', to stacja robocza DB2 Connect jest skonfigurowana do obsługi strony kodowej DBCS. Ponieważ w przykładowym pliku wyjściowym brakuje tych dwóch dodatkowych punktów kodowych, to stacja robocza nie jest skonfigurowana do obsługi DBCS.
Uwaga: | Dla przepływu za pomocą TCP/IP udostępniono dwie nowe komendy: ACCSEC używaną do uzyskania dostępu do menedżera ochrony i mechanizmów ochrony obsługiwanej wymiany oraz SECCHK zawierającą znaczniki uwierzytelniania używane do uwierzytelniania użytkownika połączenia. ACCSEC i SECCHK występują tylko dla połączeń za pomocą TCP/IP i tak też działają między EXCSAT i ACCRDB. |
Wartości identyfikatorów CCSID są również zwracane w drugim buforze z serwera baz danych hosta lub AS/400 w komendzie Access RDB Reply Message (ACCRDBRM). Bufor ten zawiera komendę EXCSATRD, po której występuje ACCRDBRM. Przykładowy plik wyjściowy zawiera wartości identyfikatorów CCSID dla serwera baz danych hosta lub AS/400 wynoszące 500 (X'01F4', identyfikator CCSID zestawu znaków jednobajtowych - SBCS).
Jeśli DB2 Connect nie rozpozna strony kodowej nadesłanej od serwera baz danych hosta lub AS/400, użytkownikowi zostanie zwrócony kod SQLCODE -332 ze źródłową i docelową stroną kodową. Jeśli serwer baz danych hosta lub AS/400 nie rozpozna strony kodowej przesłanej z DB2 Connect, użytkownikowi zostanie zwrócony VALNSPRM (Parameter Value Not Supported o punkcie kodowym DDM X'1252') tłumaczony na SQLCODE -30073.
ACCRDBRM zawiera również parametr PRDID (identyfikator charakterystyczny dla produktu o punkcie kodowym X'112E'). Jego wartość wynosi X'C4E2D5F0F5F0F1F0'. Podany łańcuch szesnastkowy odpowiada DSN05010 w kodzie EBCDIC. Zgodnie ze standardami nazwa źródła danych (DSN) to DB2 for MVS/ESA lub DB2 Universal Database for OS/390. W grę wchodzą również produkty w wersji 5.1. ARI dla DB2 for VSE & VM, SQL for DB2 Common Server oraz QSQ dla DB2 Universal Database for AS/400.
Można analizować kolejne bufory wysyłania i odbioru, aby uzyskać dodatkowe informacje. Trzeci bufor zawiera komendę commit. Komenda commit instruuje system zarządzania bazami danych serwera AS/400 lub hosta, że ma zatwierdzić bieżącą jednostkę pracy. Czwarty bufor jest odbierany od systemu zarządzania bazami danych serwera AS/400 lub hosta jako wynik zatwierdzania lub wycofania zmian. Zawiera on komunikat End Unit of Work Reply Message (ENDUOWRM) oznaczający, że bieżąca jednostka pracy zakończyła się. W podanym przykładzie zawiera on obszar komunikacyjny SQL o wartości null, wskazywany przez punkt kodowy DDM X'2408', po którym następuje X'FF'. Obszar komunikacyjny SQL o wartości null (X'2408FF') oznacza powodzenie (SQLCODE 0). Gdy bufor odbioru zawiera obszar komunikacyjny SQL (może on przyjąć wartość null), program narzędziowy ddcstrc dołączy do tego buforu sformatowaną interpretację informacji obszaru komunikacyjnego SQL.
Rysunek 12 przedstawia przykład buforu odbioru zawierającego błędny obszar komunikacyjny SQL i sformatowaną postać obszaru komunikacyjnego SQL. Podany obszar komunikacyjny SQL powstał w wyniku próby usunięcia wierszy w tabeli, która nie istnieje.
Rysunek 12. Przykład buforu odbioru
1 DB2 fnc_data gateway_drda_ar sqljcrecv (1.35.10.81) pid 48732; tid 1; node 0; cpid 0; sec 0; nsec 0; tpoint 178 RECEIVE BUFFER: SQLCARD OBJDSS (ASCII) (EBCDIC) 0 1 2 3 4 5 6 7 8 9 A B C D E F 0123456789ABCDEF 0123456789ABCDEF 0000 0065D0030001005F 240800FFFFFF34F4 .e....._$.....4. ..}....^.......4 0010 F2F7F0F4C4E2D5E7 D6E3D34000E2C1D5 ...........@.... 2704DSNXOTL .SAN 0020 6DC6D9C1D5C3C9E2 C3D64040404040FF m.........@@@@@. _FRANCISCO . 0030 FFFE0C0000000000 000000FFFFFFFF00 ................ ................ 0040 0000000000000040 4040404040404040 .......@@@@@@@@@ ....... 0050 40400000000FC4C4 C3E2E4E2F14BD4E8 @@...........K.. ....DDCSUS1.MY 0060 E3C1C2D3C5 ..... TABLE 2 DB2 fnc_data gateway_drda_ar sqljmsca (1.35.10.108) pid 48732; tid 1; node 0; cpid 0; sec 0; nsec 0; tpoint 179 SQLCA SQLCAID: SQLCA SQLCABC: 136 SQLCODE: -204 SQLERRML: 15 SQLERRMC: DDCSUS1.MYTABLE SQLERRP: DSNXOTL SQLERRD[0->5]: FFFFFE0C, 00000000, 00000000, FFFFFFFF, 00000000, 00000000 SQLWARN(0->A): , , , , , , , , , , SQLSTATE: 42704 |