Po "tvrdom" výpadku systému sa databázy niekedy dostanú do takého stavu, že rozbehnutie systému nie je možné bez servisného zásahu. Zásah spočíva väčšinou z ošetrenia poškodeného LOG súboru niektorej z používaných databáz. Navrhované riešenie zabezpečí rozbeh systému pri takto poškodenom logu databázy.


Spôsob realizácie

Databázy sa musia testovať pred spustením procesu D2000 Server alebo D2000 Archiv, pretože hrozí uviaznutie Enginu (Servera) Sybase.

Na testovanie databáz bola vytvorená utilita checksql.exe.

Deklarácia checksql DBF=path [PWD=heslo] [UID=meno] [VER=verzia]
Parametre
path Cesta na databázu (napr.: d:\D2000.V45\TEST\ARCHIV\ARCHIV.DB).
heslo Prístupové heslo k databáze pre užívateľa. Udáva sa len v prípade, ak to nie je SYSCFG a ARCHIV (napr.: pre TREZOR.DB je PWD=sql).
meno Meno užívateľa v databáze. Udáva sa len v prípade, ak by bolo potrebné pristupovať pod iným menom ako je štandardné DBA.
verzia Verzia Sybase databázy. Podporované sú verzie 6,7,9 a 12. Pokiaľ nie je verzia zadaná, snaží sa utilita checksql.exe postupne otvárať databázu s použitím ovládačov verzie 6,7,9 a 12. Odporúča sa zadať verziu najmä na systémoch, na ktorých je nainštalovaná viac ako jedna verzia Sybase.
Popis Utilita checksql vykoná pokus o pripojenie sa na databázu. Ak sa to nepodarí, zmaže sa MENO.LOG v adresári, kde je databáza a štartuje sa engine s prepínačom -f. Databáza sa spustí bez transakčných záznamov a opakuje sa pokus o pripojenie sa na databázu. Návratový kód môže byť:
  • 0 - ak sa dá na databázu pripojiť
  • 1 - chyba otvorenia po zmazaní logu
  • 2 - log nebol nájdený
  • 3 - log nemohol byť vymazaný

Pre zabezpečenie testovania databáz pred štartom systému bol upravený program D2Start tak, že ak nájde v adresári aplikácie povelový súbor "check.cmd", tak ho odštartuje ešte pred štartom procesu D2000 Server. Umožní to vykonať test databáz a príslušné akcie. Napríklad odloženie poškodenej databázy a núdzový štart s template.

Pred reštartom procesu D2000 Server sa povelový súbor "check.cmd" spúšťa s parametrom /RESTART. Túto situáciu je tak možné ošetriť osobitne.


Príklad súboru check.cmd

 D:\D2000_EAGLE4\Bin\checksql.exe DBF=d:\D2000.V45\test\archiv\Archiv.db 
 IF %ERRORLEVEL% EQU 0 GOTO OK1 
 ECHO Databaza Archiv.db je neopraviteľná 
 rename d:\D2000.V45\test\archiv\Archiv.db Archiv.bad 
 copy D:\D2000_EAGLE4\Templates\Archiv.db d:\D2000.V45\test\archiv\Archiv.db 
 :OK1
 D:\D2000_EAGLE4\Bin\checksql.exe DBF=d:\D2000.V45\test\LogTrezor\LogTrezor.db PWD=sql 
 IF %ERRORLEVEL% EQU 0 GOTO OK2 
 ECHO Databáza LogTrezor.db je neopraviteľná
 :OK2
 D:\D2000_EAGLE4\Bin\checksql.exe DBF=d:\D2000.V45\test\Logfile\Logfile.db
 IF %ERRORLEVEL% EQU 0 GOTO OK3
 ECHO Databaza Logfile.db je neopravitelna
 :OK3
 D:\D2000_EAGLE4\Bin\checksql.exe DBF=d:\D2000.V45\test\Syscfg\Syscfg.db
 IF %ERRORLEVEL% EQU 0 GOTO OK4
 ECHO Databaza Syscfg.db je neopravitelna
 :OK4
 IF NOT EXIST d:\D2000.V45\test\Trezor\Trezor.db GOTO NEXT1
 D:\D2000_EAGLE4\Bin\checksql.exe DBF=d:\D2000.V45\test\Trezor\Trezor.db PWD=sql
 IF %ERRORLEVEL% EQU 0 GOTO OK4
 ECHO Databaza Trezor.db je neopravitelna
 :OK4
 :NEXT1
 IF NOT EXIST d:\D2000.V45\test\Trezor\Prev\TrezorP.db GOTO NEXT2 D:\D2000_EAGLE4\Bin\checksql.exe DBF=d:\D2000.V45\test\Trezor\Prev\TrezorP.db PWD=sql
 IF %ERRORLEVEL% EQU 0 GOTO OK4
 ECHO Databaza TrezorP.db je neopravitelna
 :OK4
 :NEXT2 
Napíšte komentár