Jak ty staré, tak i nové (nejen) účetní programy leckdy běží nad klasickou MS Access DB s tím, že si vývojáři moc nelámou hlavu s tím, jak který PC k databázi přistupuje, protože od toho je přeci server, aby tuhle záležitost řešil (ačkoliv čest Pohodářům, kteří na svých stránkách zmiňují i úpravy registrů tak, aby mohly do DB bezpečně přistupovat stroje s Win98, WinXP, Win7, …). Problém je, že implementace smb na linuxu (a asi i jinde) bohužel toto moc řešit neumí (ačkoliv se na první pohled zdá, že umí a dobře).
Pokud jsem správně pochopil, pak by situace měla fungovat takto:
Je-li klient sám, stáhne si soubor s DB, přičemž řekne serveru, že část od-do bude upravovat, tuhle úpravu ale provede pouze v lokální cache. Až dokončí úpravy, část od-do odemkne a jde se dál. Vtip nastane, pokud jiný klient bude chtít přistoupit do části uzamčeného souboru ať už pro čtení či zápis – v takovém případě server druhému klientu řekne „čekej“, prvního klienta notifikuje, že má okamžitě dodat soubor (resp. změny) z lokální cache, což on neprodleně udělá a označí uzamčenou oblast za aktuální. Druhý klient je notifikován, že je vše ok a že může přistoupit k té které části souboru. Jak jsem psal, na první pohled funguje vše hezky, až na to, že většinou se struktura DB do týdne sesype a jdeme dolovat data s neurčitou vidinou výsledku.
Řešením je oplocks (opportunistic locking) vypnout. Vede to sice ke ztrátě výkonu a vyššímu zatížení sítě, ale pokud není aplikace napsaná extra prasácky, pohybuje se to v řádech jednotek procent (nebudiž čest jmenovitě aplikaci keo-w, kde absolutně nerozumím, proč během ověřování uživatele simultánně síťově spuštěný program ověřuje dobrých 5 minut, načež se naprosto bez zpoždění rozjede)
V definici share v /etc/samba/smb.conf
oplocks = no level2 oplocks = no
Případně se dá nastavit vypnutí jen na některé typy souborů
veto oplock files = /*.*db/
Stále to nefunguje? Kontaktujte mě!
Jestli řešení, které jsem zde popsal, je příliš složité, nebo nefunguje, prostě mi napište. Identifikujeme spolu problém a domluvíme se na co možná nejefektivnějším řešení.
merlin@lomitkari.cz
tel. 777 864 704