napsali jsme  slovo odbornφka               z pera naÜich specialist∙ 

Zde nßs najdete - mapa
Najdete nßs zde

CHIP 1/2000

Copyright © 1999
KOMIX spol. s r. o.

Architektura WOIS Napsali jsme - obsah AnalytickΘ sledovßnφ pohledßvek

INFORMIX-OnLine Dynamic Server °ady 7.X

Hodnocenφ s odstupem Φasu z hlediska aplikaΦnφho programßtora

Databßzov² server firmy Informix °ady 7 existuje ji₧ n∞kolik let. Poslednφ verze tΘto °ady 7.3X je dostupnß ji₧ tΘm∞° rok. Je tedy mo₧nΘ ji s jist²m odstupem hodnotit a porovnat s p°edchßzejφcφmi °adami (5 a 6). UrΦit∞ lze °φci, ₧e tato °ada je lepÜφ v mnoha ohledech, mezi kter²mi bych zd∙raznil:

  • rozÜφ°enou funkcionalitu pro aplikaΦnφ programßtory
  • novΘ mo₧nosti konfigurace
  • podstatn∞ vylepÜenΘ monitorovßnφ

    Na druhΘ stran∞ je t°eba p°iznat, ₧e alespo≥ pro poΦßteΦnφ obdobφ nasazenφ klade vyÜÜφ nßroky na administrativu (p°edevÜφm znalosti administrßtora databßzovΘho serveru v oblasti sprßvy systΘmu - UNIXu) - ovÜem to je p°irozenß da≥ za novou architekturu a vylepÜenφ databßzovΘho serveru.

    V nßsledujφcφm textu bych rßd zmφnil Φßst n∞kter²ch nov²ch Φi mΘn∞ znßm²ch (nebo spφÜ nevyu₧φvan²ch) postup∙, kterΘ mohou zkvalitnit aplikace ve v²Üe uveden²ch oblastech. VÜechny p°φklady jsou odzkouÜenΘ v prost°edφ dbaccess na databßzi stores7 anebo sysmaster. Doufßm, ₧e nßsledujφcφ °ßdky budou u₧iteΦnΘ alespo≥ pro n∞kterΘ aplikaΦnφ programßtory (pokud zcela nevyhynuli).

    ZaΦßtek strßnky

    ZaΦneme n∞Φφm jednoduÜÜφm

    Chcete-li spojit dva °et∞zce do jedoho bez koncov²ch mezer za prvnφm z nich, vyu₧ijte funkce TRIM a operßtoru z°et∞zenφ (ô||ô) pro nßsledujφcφ v²b∞r:

    SELECT TRIM (fname) || ô ô || lname fullname FROM customer;

    Funkce TRIM se v²born∞ hodφ takΘ v p°φpad∞, kdy₧ t°eba sklßdßte jmΘna adresß°∙ a soubor∙ ulo₧en²ch v databßzi nebo sestavujete p°φkazovou °ßdku vΦetn∞ argument∙. Bez funkce TRIM by byly tyto po₧adavky v ulo₧en²ch procedurßch ne°eÜitelnΘ.

    ZaΦßtek strßnky

    Databßze sysmaster

    Databßze sysmaster je v databßzovΘm systΘmu Informix pom∞rn∞ dlouho. Jejφ nezve°ejn∞n² zßklad obsahovala ji₧ verze 5.X. P°esto se pou₧φvß pom∞rn∞ mßlo, i kdy₧ obsahuje spoustu u₧iteΦn²ch informacφ, kterΘ lze s ·sp∞chem pou₧φt v aplikacφch. Jejφ schΘma (i se struΦn²m popisem) najdete v adresß°i $INFORMIXDIR/etc, pod nßzvem sysmaster.sql. Podrobn∞jÜφ popis n∞kter²ch tabulek a pohled∙ najdete v manußlu INFORMIX-OnLine Dynamic Server AdministratorÆs Guide.

    Najdete v nφ t°eba tabulku sysdatabases se seznamem databßzφ, kterΘ jsou v danΘm serveru vytvo°eny, vΦetn∞ jejich vlastnostφ jako je vlastnφk, jmΘno prostoru, ve kterΘm je databßze umφst∞na, datum vytvo°enφ a typ logovßnφ databßze. Pomocφ nßsledujφcφho p°φkazu m∙₧ete ve vlastnφ aplikaci vytvo°it podobn² seznam, jak² poskytuje onmonitor v nabφdce Status/Databases:

    SELECT name, (DBINFO (ôdbspaceö, partnum)), created, is_logging, is_buff_log, is_ansi
       FROM sysmaster:sysdatabases;

    Dßte-li si prßci a napφÜete ulo₧enou proceduru, kterß konvertuje hodnoty ze sloupc∙ is_logging, is_buff_log a is_ansi na k≤dy N, B, U a U*, dostanete v²pis zcela shodn² s onmonitorem. Velmi podobnß je tabulka systabnames, kterß obsahuje seznam vÜech tabulek ve vÜech databßzφch serveru vΦetn∞ Φφsla partnum, kterΘ identifikuje tblspace (adresu ulo₧enφ) tabulky.

    Z tabulky sysptnhdr zase m∙₧ete zjistit skuteΦn² poΦet °ßdek v tabulce, i kdy₧ t°eba do nφ prßv∞ te∩ importujete mili≤ny °ßdek a ona je zamΦena. Je t°eba si uv∞domit, ₧e poΦet °ßdek nrows z tabulky systables je aktualizovßn a₧ p°φkazem update statistics, zatφmco poΦet nrows z tabulky sysptnhdr je aktualizovßn pr∙b∞₧n∞. Z tabulky sysptnhdr m∙₧ete rovn∞₧ urΦit celkov² poΦet tabulce p°id∞len²ch strßnek (nptotal) i poΦet skuteΦn∞ pou₧it²ch strßnek (npused). Tabulka sysptnhdr takΘ obsahuje p°φÜtφ p°id∞lenΘ Φφslo do sloupce SERIAL - serialv. UvedenΘ ·daje m∙₧ete jinak zjistit utilitou oncheck (ta se vÜak z aplikace volß podstatn∞ obtφ₧n∞ji):

    SELECT T.tabname, T.nrows, H.nrows, H.nptotal, H.npused, H.serialv
       FROM systables T, sysmaster:sysptnhdr H
       WHERE tabid > 99 AND T.partnum = H.partnum;

    KonfiguraΦnφ parametry databßzovΘho serveru lze p°eΦφst z tabulky sysconfig. Nßzev parametru je cf_name, platnß hodnota cf_effective, hodnota parametru p°i startu serveru cf_original a standardnφ hodnota (nenφ-li parametr uveden v $INFORMIXDIR/etc/$ONCONFIG) cf_default:

    SELECT cf_name, cf_effective, cf_original, cf_default
       FROM sysmaster:sysconfig

    Velmi jednoduÜe lze napsat ulo₧enou proceduru, kterß jako vstupnφ argument dostane jmΘno konfiguraΦnφho parametru a vrßtφ jeho platnou hodnotu.

    ZaΦßtek strßnky

    Funkce DBINFO

    Funkce DBINFO vßm umo₧nφ p°eΦφst velmi d∙le₧itΘ informace, kterΘ aplikaΦnφm programßtor∙m dlouho chyb∞ly. UrΦit∞ mezi n∞ pat°φ poslednφ Φφslo, kterΘ server p°id∞lil do sloupce typu SERIAL û legitimnφ po₧adavek v ulo₧enΘ procedu°e. Porovnejte c_serial, c_max:

    INSERT INTO customer (customer_num, fname, lname) VALUES (0, "Jan", "Sokol");
    SELECT DBINFO (ôsqlca.sqlerrd1ö) c_serial, MAX (customer_num) c_max
       FROM customer;

    Pomocφ funkce DBINFO m∙₧ete takΘ urΦit, kolik °ßdek jste poslednφm p°φkazem SQL zpracovali (vlo₧ili, smazali, opravili). Porovnejte c_before, c_plus a c_after:

    SELECT COUNT (*) c_before FROM customer WHERE state = "CO";
    UPDATE customer SET state = "CO" WHERE state = "NJ";
    SELECT DBINFO ('sqlca.sqlerrd2') c_plus, COUNT (*) c_after
       FROM customer WHERE state = "CO";

    Funkce DBINFO umo₧≥uje zjistit i jmΘno poΦφtaΦe c_dbhost, na kterΘm b∞₧φ databßzov² server, i typ databßzovΘho serveru vΦetn∞ verze c_ver:

    SELECT DBINFO (ôdbhostnameö) c_dbhost, DBINFO (ôversionö, ôfullö) c_ver
       FROM systables T WHERE T.tabid = 1;

    Typ a verzi databßzovΘho serveru m∙₧ete pomocφ funkce DBINFO vypsat i po Φßstech:

    SELECT DBINFO (ôversionö, ôserver-typeö), DBINFO (ôversionö, ômajorö),
      DBINFO (ôversionö, ôminorö), DBINFO (ôversionö, ôosö), DBINFO (ôversionö, ôlevelö),
       FROM systables T WHERE T.tabid = 1;
    ZaΦßtek strßnky

    Funkce DBINFO a databßze sysmaster

    JeÜt∞ zajφmav∞jÜφ informace zφskßte zapojenφm funkce DBINFO p°i Φtenφ sysmaster. K nejd∙le₧it∞jÜφm informacφm, kterΘ DBINFO vracφ, pat°φ sid (session identifier), kter² je vstupnφm klφΦem k administrßtorsk²m (nejenom) informacφm v databßzi sysmaster. Podle tohoto klφΦe m∙₧ete nap°φklad zjistit aktivnφ otev°enou databßzi z tabulky sysopendb (nenφ zve°ejn∞na) vΦetn∞ spousty zajφmav²ch atribut∙ (typ logovßnφ databßze, ·rove≥ izolace proces∙, nßrodnφ prost°edφ, p°φznak v²luΦnΘho otev°enφ databßze):

    SELECT * FROM sysmaster:sysopendb
    WHERE odb_sessionid = DBINFO (ôsessionidö) AND odb_iscurrent = ôYö;

    Z pohledu syssession zase m∙₧ete p°eΦφst login u₧ivatele username, UID klienta, PID klientskΘho procesu (ne pro vzdßlenΘ klienty ve Windows), hostname klienta, jmΘno terminßlu tty (pro znakovΘ klienty):

    SELECT sid, username, uid, pid, hostname, tty
       FROM sysmaster:syssessions WHERE sid = DBINFO (ôsessionidö);

    Pro monitorovßnφ Φasov∞ nßroΦn²ch klientsk²ch program∙ se hodφ tabulka syssesprof. Z tΘto tabulky lze pro aktußlnφ b∞h programu (p°esn∞ji session) p°eΦφst t°eba poΦet Φtenφ isread, zßpis∙ iswrite, oprav isrewrite a mazßnφ isdelete (v tΘto tabulce je spousta dalÜφch zajφmav²ch ·daj∙):

    SELECT isreads, iswrites, isrewrites, isdeletes
       FROM sysmaster:syssesprof WHERE sid = DBINFO (ôsessionidö);

    Funkce DBINFO umo₧nφ pro ka₧dou tabulku urΦit jmΘno dbspace, ve kterΘm je ulo₧ena. Prvnφ p°φkaz urΦφ dbspace pro tabulky aktußlnφ databßze a druh² pro vÜechny tabulky v serveru (a n∞co navφc):

    SELECT tabname, DBINFO (ôdbspaceö, partnum)
       FROM systables WHERE tabid > 99 AND tabtype =ö'Tö;

    SELECT dbsname, tabname, DBINFO (ôdbspaceö, partnum)
       FROM sysmaster:systabnames;

    Jestli₧e nechcete nebo nem∙₧ete pou₧φt funkci DBINFO, m∙₧ete dbspace pro tabulky urΦit i jin²m zp∙sobem:

    SELECT T.tabname, D.name
       FROM systables T, sysmaster:sysdbstab D
       WHERE T.tabtype = "T" AND T.tabid > 99
          AND TRUNC (T.partnum / POW (2, 20)) = D.dbsnum;

    Uveden² p°φklad vychßzφ ze vÜeobecn∞ znßmΘ skuteΦnosti, ₧e hornφch 12 bit∙ (z celkov²ch 32) Φφsla tblspace (n∞kdy naz²vanΘ partnum) je Φφslo dbspace, kterΘ se nachßzφ v tabulce sysdbstab.

    ZaΦßtek strßnky

    Pohodln∞jÜφ zpracovßnφ NULL hodnot

    Hodnoty NULL v databßzi zt∞₧ujφ programßtor∙m ₧ivot. U₧ jenom proto, ₧e filtr na n∞ se pφÜe jinak ne₧ filtr na ostatnφ hodnoty (IS [NOT] NULL). Funkce NVL umo₧≥uje nahradit hodnotu NULL ve sloupci libovolnΘho typu za n∞jakou vhodnou zarß₧ku, kterou lze v klientskΘm programu nebo ulo₧enΘ procedu°e lΘpe zpracovat:

    SELECT fname, lname, NVL (address2, "N/A") FROM customer;

    UvedenΘ nßpady tvo°φ jen malou Φßst nov²ch mo₧nostφ aplikaΦnφch programßtor∙. Namßtkou lze jmenovat:

  • novΘ vestav∞nΘ funkce pro prßci s °et∞zci a Φasem
  • podmφn∞nΘ p°φkazy
  • optimalizaΦnφ direktivy
  • object-modes a diagnostickΘ tabulky
  • role pro realizaci p°φstupov²ch prßv Ale to u₧ jsou tΘmata pro dalÜφ Φlßnek.

    Martin LipÜ, lips@komix.cz

  •  
     
    HOME | O FIRM╠ | SLUÄBY | REFERENCE | NAPSALI JSME | èKOLEN═ | SW N┴STROJE
     
    OBSAH