Vyhodnocovanie logov

Vyhodnocovanie logov

D2000 DBManager - vyhodnocovanie logov

Základné informácie o logovaní procesu D2000 DBManager nájdete v tomto popise.

Tento dokument slúži na podrobnejší popis logovacích výpisov a ich použitie na:

  1. Hľadanie chýb v konfigurácii objektov typu Tabuľka v D2000 (chyba v definícii štruktúry)

  2. Hľadanie aplikačných chýb v ESL

  3. Vyladenie výkonnosti (nastavenie počtu spojení podľa potrieb aplikácie)

  4. Zisťovanie momentálneho stavu DBManagera TELL príkazmi

Väčšina nasledujúcich postupov predpokladá, že objekty typu Databáza sú nakonfigurované so zapnutou voľbou Debug. Odporúčame (pre D2000 verzie 7.01.022 a vyššie) zadať aj veľkosť logovacieho súboru (MB) pri voľbe Debug a nakonfigurovať tak logovanie akcií do separátneho súboru pre každú databázu. Veľkosť logovacieho súboru je potrebné nastaviť na dostatočne veľkú hodnotu, aby sa získali logovacie údaje pre dostatočne dlhé obdobie (logovací súbor DBManager.log má maximálnu veľkosť 10 MB). Je potrebné nechať DBManager bežať dostatočne dlhé obdobie, ktoré obsahuje aj dobu maximálnej záťaže systému (t.j. napr. 24 hodín počas bežného pracovného dňa). Takisto odporúčame nakonfigurovať pre proces SELF.DBM štartovací parameter /E+DBG.DBMANAGER na logovanie podrobností o vykonávaných operáciách.

1. Hľadanie chýb v konfigurácii objektov typu tabuľka


Z logov je možné zistiť nasledovné chyby:

  • tabuľka s daným názvom neexistuje

  • stĺpec v SQL tabuľke je textový a stĺpec v definícii štruktúry v D2000 je nie je textový

  • stĺpec v SQL tabuľke je nečíselný a stĺpec v definícii štruktúry v D2000 je číselný (pre D2000 verziu 7.01.022 a vyššie)

Okrem detekcie z logov DBManager-a je možné ručne otestovať funkčnosť tabuľky kliknutím na tlačidlo Test v konfigurácii objektu typu Tabuľka.

Predpoklad: DBManager beží dostatočne dlhú dobu, počas ktorej pristupoval (čítanie alebo zápis) ku všetkým tabuľkám, ktoré sa majú skontrolovať.


Hľadaný reťazec: Cannot get any result from SQLColumns

Príklad:

13:42:28.960 08.02 *** Error in con 1: 13:42:28.962 08.02 con 1:[GetColumnDescript] 13:42:28.964 08.02 con 1:<HI ws1phum1 browser> 13:42:28.967 08.02 con 1:Cannot get any result from SQLColumns. Possible causes are: table "dba"."MAT_SKUPINAxx" does not exist in SQL database; table is not visible by defined user; table has not any column with name matching its structure definition in D2000

Riešenie: Skontrolovať, či:

  • tabuľka v SQL databáze existuje

  • je prístupná pod užívateľom, nakonfigurovaným na objekte typu Databáza, ktorý je rodičom objektu typu Tabuľka, ktorého sa chybová správa týka

  • má aspoň jeden stĺpec s rovnakým menom, ako definícia štruktúry pripojená v konfigurácii objektu typu Tabuľka (niektoré SQL databázy môžu rozlišovať veľké a malé písmená)

  • meno tabuľky v SQL databáze je zhodné s parametrom Tabuľka nakonfigurovaným na objekte typu Tabuľka (opäť pozor na prípadnú môžu rozlišovať veľké a malé písmená)


Hľadaný reťazec: text data mapped to non-text columns

Príklad:

14:05:36.496 08.02 Table MAT_SKUPINA (DB.MAT_SKUPINA) text data mapped to non-text columns:NAZOV

Riešenie: Zjednotiť typ stĺpca v SQL databáze a v definícii štruktúry pripojenej v konfigurácii objektu typu Tabuľka. Stĺpec v SQL databáze je textového typu, stĺpec definície štruktúry v D2000 nie je typu Text. V takejto konfigurácii závisí od dát v konkrétnom stĺpci v tabuľke v SQL databáze, či sú skonvertovateľné na príslušný netextový typ (Celočíselný, Reálny a pod.) pri čítaní. Dôsledkom chýb pri konverzii môže byť napr.

  • pre OCI verziu DBManager-a: chýbanie hodnôt v stĺpci s chybnou hodnotou a vo všetkých nasledujúcich stĺpcoch pri čítaní tabuľky cez browser alebo pri stránkovom prístupe

  • pre ODBC verziu DBManager-a a databázu Sybase SQL Anywhere: neplatné hodnoty vo všetkých bunkách riadku, v ktorom sa vyskytuje chybná hodnota


Hľadaný reťazec: non-number data mapped to number columns

Príklad:

15:47:29.976 08.02 Table Time_Test (DB.Cas) non-number data mapped to number columns:Cas,

Riešenie: Zjednotiť typ stĺpca v SQL databáze a v definícii štruktúry pripojenej v konfigurácii objektu typu Tabuľka. Stĺpec v SQL databáze je nečíselný, stĺpec definície štruktúry v D2000 je číselný (Celočíselný, Reálny alebo Relatívny čas). V takejto konfigurácii závisí od dát v konkrétnom stĺpci v tabuľke v SQL databáze, či sú skonvertovateľné na príslušný netextový typ (Celočíselný, Reálny a pod.) pri čítaní.

2. Hľadanie aplikačných chýb v ESL


Z logov je možné zistiť nasledovné chyby, ktoré sa prejavili ako ODBC alebo OCI chyba.


Hľadaný reťazec: *** Error in

Príklad:

OCI verzia:

21:00:11.961 07.02 *** Error in con 2: 21:00:11.962 07.02 con 2:<E.IOPT_Export: 95;  3624><E.IOPT_Scheduler: 32> 21:00:11.962 07.02 con 2:[InsertRecord] Execute: INSERT INTO "ROVE_IOPT"."S_IF_USER" ("IU_ID","IU_PERS_ID","IU_FS_ID","IU_DB_USER","IU_FIRSTNAME","IU_SURNAME","IU_APPL", "IU_PWD_PERMANENT","IU_PWD_KONTO","IU_STATUS","IU_DELETE","IU_TADI_ID") VALUES (:1,:2,:3,:4,:5,:6,:7,:8,:9,:10,:11,:12) ,row 1,Exception name: OCI.THICK.LIB_ERROR Message: ORA-01400: cannot insert NULL do ("IOPT"."IF_USER"."IU_FIRSTNAME") ORA-06512: at line "IOPT.G_IF_USER_TB" Call stack traceback locations: 0x51ae1e 0x51af63 0x5142c3 0x76e54b 0x772065 0x7d0536 0x7e2230 0x8219fa 0x77e64827

ODBC verzia:

16:22:18.474 08.02 *** Error in con 3: 16:22:18.475 08.02 con 3:[PrepareSqlStmt] SQLExecDirect: SELECT ID_MATERIAL FROM materialXX 16:22:18.477 08.02 con 3:<S.sql_Test_Evil: 106> 16:22:18.478 08.02 con 3:(S0002) [Sybase][ODBC Driver][Adaptive Server Anywhere]Table 'materialXX' not found ErrorCode= -141

Riešenie: Analýza chyby (napr. vyhľadanie ORA-xxxxx chybovej správy, zistenie príčiny a odstránenie). Pokiaľ chyba vznikla napr. pri vkladaní konkrétnych hodnôt, odporúčame nakonfigurovať štartovací parameter /E+DBG.DBMANAGER.DATA pre proces SELF.DBM (logovanie hodnôt).

Príklad použitia:

15:20:21.659 08.02 Db SKEI_MES, con 2:PageInsert BEG 15:20:21.660 08.02 PositionedInsert: INSERT INTO "MES"."SOURCE_PLACE" ("ID","IDVECT","KOD","ADDR","NAME","SV_IDX", "WHX","SIMAODB","NTYP","ID_T") VALUES (:1,:2,:3,:4,:5,:6,:7,:8,:9,:10,:11,:12,:13,:14,:15) 15:20:21.661 08.02 PositionedInsert time displayed in pure UTC (configured offset +0) 15:20:21.661 08.02 PositionedInsert data: 88; NULL; 'gsdaf.GPS'; NULL; 'fsgdfd.GPS'; 28; 1.00E+00; NULL; 10; 5; 15:20:21.667 08.02 *** Error in Db SKEI_MES, con 2: 15:20:21.668 08.02 Db SKEI_MES, con 2:<E.Max_ID: 133; 15><[] S.SchemeOM: 19; 135; 153> 15:20:21.668 08.02 Db SKEI_MES, con 2:[PositionedInsert] Execute/Commit "ROVE_MES"."ODBERNE_MIESTO":Exception name: OCI.THICK.LIB_ERROR Message: ORA-01438: value larger than specified precision allowed for this column Call stack traceback locations: 0x51b0ce 0x51b213 0x514573 0x767089 0x7ca8db 0x7cab31 0x7e01f8 0x81f71a 0x77e64827 15:20:21.669 08.02 PositionedInsert end 15:20:21.669 08.02 Db SKEI_MES, con 2:PageInsert END

V tomto konkrétnom prípade pomohlo otvoriť browser a pokúsiť sa ručne vložiť to tabuľky vypisované hodnoty. Ukladanie prebehlo bez chyby až vtedy, keď hodnota v stĺpci "NTYP" bola menšia ako 10. Cez Oracle Enterprise Manager sa následne zistilo, že tento stĺpec bol omylom vytvorený v SQL databáze ako Number(1), t.j. číslo s rozsahom 1 číslice.


Hľadaný reťazec: timeout expired

Príklad:

10:03:44.597 17.02 WD: con 3: timeout expired 1 times in U_EXECDIRECT1/D_EXECDIRECT2

Spojenie číslo 3 vykonáva nejakú akciu (detailné výpisy U_EXECDIRECT1/D_EXECDIRECT2 sú určené pre vývojárov D2000, ale naznačujú, že pôjde asi o SQL_EXEC_DIRECT).
Po vyhľadaní prvého výskytu reťazca con 3 smerom dozadu od varovania vidieť, že posledný príkaz, ktorý sa začal vykonávať, bol

10:02:16.864 17.02 con 3:SQL_EXEC_DIRECT BEG

Pokiaľ je zapnutá debug kategória DBG.DBMANAGER, vo výpise je aj konkrétny príkaz, ktorý sa vykonáva:

10:02:16.865 17.02 ExecDirect: Delete from EDA_Vektor v WHERE ID_Vektor >= 2000000 AND id_vektor not in (select id_vektor from EDA_VEKTOR_SCENAR) AND not exists (SELECT f.id_vektor FROM EDA_Predpis_Funkcie f WHERE f.funkcia like '%' || v.meno || '%' )

3. Vyladenie výkonnosti (nastavenie počtu spojení podľa potrieb aplikácie)


Pri zapnutej voľbe Debug zapisuje DBManager do logu aj informácie o vytváraní, využívaní a ukončovaní spojení. Spojenie sa vytvára alebo prideľuje ako dôsledok nasledovných akcií: