Kontrola Sybase databáz
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 |
| ||||||||
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
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