Na prácu s aplikačnými databázami slúži proces D2000 DBManager. Tento proces pristupuje do SQL databáz a vykonáva všetky potrebné akcie. Požiadavky na DBManager prichádzajú z procesov D2000 Event Handler (skripty vykonávané na serveri) a z procesov D2000 HI (priamy prístup užívateľov do databáz cez zobrazovač Browser + aktívne schémy so skriptami).

Proces D2000 DBManager dokáže pristupovať k databázam dvoma rôznymi spôsobmi:

  • Cez ODBC rozhranie k ľubovolnej databáze, pre ktorú je nainštalovaný v systéme ODBC ovládač a vytvorené ODBC DSN (Data Source Name). Bežne pracujeme s databázami PostgreSQL, MySql, MariaDB, Sybase SQL Anywhere, Microsoft SQL Server, Informix, Firebird a inými.
  • Cez OCI rozhranie (Oracle Client Interface) k Oracle databáze. V minulosti bola Oracle databáza široko používaná vo veľkých D2000 aplikáciách a preto bola vytvorená špecializovaná verzia DBManager procesu využívajúca pokročilé vlastnosti OCI. 

Záleží na použitej binárke (v konfigurácii procesu *.DBM), ktorá verzia  DBManagera sa spustí:

  • Binárka dbmanager.exe (dbmanager na Linux/RPI) implementuje prístup cez ODBC rozhranie.
  • Binárka dbmanager_ora.exe (dbmanager_ora na Linux/RPI) implementuje prístup cez OCI rozhranie.


Blog

O procese DbManager si môžete prečítať nasledujúce blogy:


V rámci DODM modelu je proces DBManager rodičom objektov typu Databáza a tie sú rodičmi objektov typu Tabuľka.

Hierarchia objektov Proces - Databáza - Tabuľka


Objekt Databáza

Objekt Databáza reprezentuje SQL databázu spolu s prístupovými právami do nej, keďže obsahuje aj konfiguráciu užívateľského mena a hesla. Preto je potrebné vytvoriť niekoľko objektov typu Databáza, pokiaľ potrebujeme pristupovať do SQL databázy s rôznymi prístupovými právami (napr. na prístup k rôznym schémam).
Proces D2000 DBManager má optimalizáciu na paralelnú prácu viacerých užívateľov objektom typu Databáza. Preto je schopný vytvoriť viacero spojení s jednou SQL databázou. Každé takéto spojenie je obsluhované vlastným taskom a môže pracovať v transakčnom režime (rezervované pre konkrétny ESL skript, ktorý transakciu vytvoril) alebo v netransakčnom režime (zdieľané viacerými skriptami alebo procesmi D2000 HI, pričom po každej operácii sa automaticky vykonáva COMMIT, preto takéto spojenie voláme aj automatické). V konfiguračnom dialógu objektu Databáza sa dá nastaviť počet predpripravených spojení (vznikajú po štarte procesu DBManager), obmedziť maximálny počet spojení, maximálny počet netransakčných (automatických) spojení a dokonca rezervovať automatické spojenia pre zobrazovač Browser.

Konfigurácia objektu Databáza


Dá sa tiež špecifikovať, po akom čase sa majú zatvárať už nepoužívané spojenia (vytvorené nad rámec predpripravených spojení). DBManager umožňuje vytvorené spojenia recyklovať – keďže vytvorenie spojenia môže predstavovať pre niektoré SQL databázy pomerne náročnú operáciu s vysokou réžiou (napr. pre Oracle).

Pokiaľ sa nachádza na sieti medzi procesom DBManager a SQL databázou firewall, môže byť užitočné špecifikovať prázdne operácie po nejakej dobe nečinnosti – niekedy sa stáva, že firewall dlhšie nepoužívané TCP spojenie „zruší“ a keď ho chce DBManager znovu použiť, dôjde k chybe. Prázdne operácie umožňujú priebežne kontrolovať stav spojenia s SQL databázou a v prípade rozpadu ho znovu vytvoriť.

Dôležitá je aj možnosť nastavenia interpretácie časových údajov v databáze – časy môžu byť v lokálnom čase (podľa pásmového času servera, na ktorom je spustený DBManager), prípadne v monotónnom čase so špecifikovaným offsetom od UTC.

Hodnota objektu typu Databáza je rovná aktuálnemu počtu spojení, ktoré má proces DBManager pre tento objekt vytvorené.

Objekt Tabuľka

Objekt Tabuľka reprezentuje tabuľku alebo pohľad (view) v SQL databáze. Každá tabuľka má svoju štruktúru – názvy stĺpcov a dátové typy, ktoré sú definované objektom typu Definícia štruktúry. Je možné nakonfigurovať, ktoré stĺpce tvoria kľúč, ktoré su voliteľné (t.j. existujú v definícii štruktúry v D2000, ale nie v SQL databáze) a ktoré sú nenulové.

Na objekte Tabuľka je možné definovať aj typ prístupu k tabuľke (žiaden, čítanie, čítanie+zápis).

Konfigurácia objektu Tabuľka


Užitočnou vlastnosťou je zadefinovanie časovej hĺbky. DBManager dokáže automaticky mazať dáta v tabuľke, ktorých definovaný stĺpec (typu Absolútny čas) je starší ako časová hĺbka. Alternatívne je možné definovať rôzne časové hĺbky pre rôzne obdobia pomocou objektu typu Účel údajov.

Kvôli zákonom na ochranu údajov (GDPR) bola implementovaná aj možnosť automatickej anonymizácie dát vo zvolených stĺpcoch na základe nastaveného časového stĺpca.

Príklad použitia: údaje v stĺpcoch Meno, Priezvisko, Datum_narodenia v tabuľke Zmluvy budú anonymizované po 5 rokoch na základe stĺpca Cas_ukoncenia_zmluvy. Anonymizácia bude prebiehať tak, že Meno a Datum_narodenia sa vymažú, Priezvisko sa zmení na „Anonymizované yyyy-mm-dd“, kde yyyy-mm-dd sa nahradí dátumom, v ktorom bola anonymizácia uskutočnená.

Operácie s databázou

Akcie, ktoré vykonáva DBManager, môžeme rozdeliť na niekoľko skupín.

Akcie zobrazovača Browser – jedná sa o priame interaktívne prezeranie dát užívateľom v rámci schémy alebo priamo v D2000 HI. Užívateľ môže prechádzať medzi jednotlivými stránkami a podľa nastavených prístupových práv a vlastností Browsera prípadne editovať, vkladať nové riadky a mazať riadky.

Browser s navigáciou v schéme


Akcie zo skriptu – akcie vykonávané v ESL skripte (a ich ekvivalenty dostupné z jazyka Java). Tieto sa dajú ďalej rozdeliť do viacerých kategórií:

Handle transakcie je následne možné použiť pri akciách patriacich do ďalších kategórií. Ak tieto akcie nepoužívajú handle transakcie, tak sa COMMIT vykonáva automaticky po každej akcii.

  • Štandardná práca s dátami – na základe podmienky (WHERE) alebo na základe kľúčového stĺpca (stĺpcov) definovaných na objekte Tabuľka je možné čítať/vkladať/aktualizovať riadky (jeden alebo viaceré) v tabuľke. Sem patria akcie:
  • Zrýchlená práca s dátami – akcie DBS_* umožňujú vynechať DB_CONNECT/DB_DISCONNECT, ostatná funkcionalita je identická:
  • Akcie na prácu s BLOB-mi: BLOB-y sa používajú v databázach na uchovanie veľkých binárnych dát (napr. PDF faktúry). Tieto sú na strane D2000 reprezentované ako súbory. Na čítanie/zápis slúžia špeciálne akcie:
  • Stránkovaná práca s dátami: jedná sa o skriptové akcie, ktoré umožňujú stránkovaný prístup k dátam. Pre veľké objemy dát je lepšie dáta načítavať a spracovať v skripte postupne, napr. po 100 riadkoch – ekvivalent stránkovania v Browseri.
    • PG_CONNECT - „pripojenie sa“ k tabuľke a nastavenie veľkosti stránky
    • PG_DISCONNECT - „odpojenie sa“ od tabuľky
    • PG_READ – čítanie zadanej stránky dát
    • PG_INSERT – vloženie jedného riadku do tabuľky
    • PG_DELETE – zmazanie jedného riadku v tabuľke
    • PG_UPDATE – aktualizácia jedného riadku v tabuľke
  • Akcie na „variabilnú“ prácu s databázou: ak nie je dopredu známe, z akej tabuľky a ktoré stĺpce treba čítať, je možné použiť príkaz SQL_SELECT, ktoré umožňujú špecifikovať celý SQL príkaz. Tento môže byť aj parametrizovaný (SQL_PREPARE a ďalšie s ním spojené). Výhodou parametrizovaných príkazov je možnosť ich recyklácie v DBManageri (spustenie viackrát s inými parametrami) aj v SQL databáze (SQL príkaz sa parsuje a vytvára sa preň exekučný plán iba raz). Patria sem aj akcie na vykonanie ľubovolného SQL príkazu a spustenie uloženej procedúry (stored procedure):
    • SQL_CONNECT - „pripojenie sa“ k databáze
    • SQL_DISCONNECT - „odpojenie sa“ od databázy
    • SQL_EXEC_DIRECT – spustenie ľubovolného SQL príkazu (bez vrátenia dát)
    • SQL_EXEC_PROC – vykonanie uloženej procedúry so zoznamom parametrov
    • SQL_SELECT – spustenie ľubovolného SQL SELECT príkazu (bez parametrizácie)
    • SQL_PREPARE – pripravenie ľubovolného SQL SELECT príkazu (s parametrizáciou)
    • SQL_BINDIN – nastavenie hodnôt parametrov pre SQL_PREPARE
    • SQL_FETCH – načítanie 1 alebo viac riadkov vrátených po SQL_PREPARE
    • SQL_FREE – uvoľnenie zdrojov a ukončenie SQL_PREPARE

Po akcii SQL_PREPARE je možné viackrát vykonávať sekvenciu SQL_BINDIN (nastavenie parametrov – zakaždým iných) a opakovaný SQL_FETCH (čítanie vrátených riadkov). Nakoniec volaním SQL_FREE prácu ukončíme. Takto sa implementuje recyklovanie parametrizovaného SQL príkazu.

  • Špeciálne akcie: iné špecializované akcie:
    • DB_REFRESH_TABLE – vynútenie obnovy dát zobrazených v Browseri. Štandardne po zmene dát cez konkrétny objekt typu Tabuľka nasleduje obnovenie dát pre Browsery, v ktorých je táto Tabuľka zobrazená (pokiaľ nemajú konfiguračne obnovu dát vypnutú). Môže ale nastať situácia, že sa dáta zmenia iným spôsobom (napr. cez inú Tabuľku alebo akciou SQL_EXEC_DIRECT) a je potrebné obnovu vynútiť zo skriptu.
    • DB_SET_PROCESS_PARAMS – nastavenie alebo zrušenie „kontextu“. Kontext znamená nastaviť pomenované parametre (dvojice meno-hodnota), ktoré sa ukladajú v dočasnej globálnej tabuľke (global temporary table) D2000_PROCESS_PARAMS. Kontext je štandardne spoločný pre jeden D2000 HI alebo D2000 Event Handler proces, prípadne sa dá obmedziť štartovacím parametrom --batch_mode na eventy spustené akciou OPENEVENT s rovnakým číslom inštancie. Kontext je viditeľný nielen v rámci D2000, ale môžu ho využívať aj pohľad a uložené procedúry v SQL databáze. Príkladom môže byť použitie dvoch pomenovaných parametrov na nastavenie obdobia (PERIOD_FROM, PERIOD_TO), pre ktoré sa budú napr. zobrazovať faktúry pomocou databázových pohľadov.
    • ON DB_CHANGE – zaregistrovanie handleru pre zmenu dát. Handler bude volaný, keď nastane zmena obsahu databázovej tabuľky, prípadne bola volaná akcia DB_REFRESH_TABLE, prepla sa aktívna inštancia procesu DBManager (alebo sa prepol redundantný D2000 Server), prípadne bola tabuľka vymazaná z konfigurácie.


Ladenie a debugovanie

Dokumentácia obsahuje kapitolu DBManager - Ladenie a debugovanie ako aj popis práce s DBManager Diagnostic Pack.


Write a comment...