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 |
| ||||||||
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ť:
|
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
Blok kódu | ||||
---|---|---|---|---|
| ||||
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 |