Samba, access databáze a oplocks

Samba, access databáze a oplocks

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/

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *