MSAccess kopie maken van "geopende database

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • Stefke
  • Registratie: December 2000
  • Laatst online: 16-07 10:37
Ik heb ergens een access-database draaien in een netwerk. Normaliter maak ik altijd gebruik van losse frontends (met installatiepakketjes) en een backend op het netwerk, maar bij deze klant is het netwerk zo traag dat dit onwerkbaar wordt.

Omschrijving
Het gaat hier om één van de grootste verzekeraars van nederland, een 100mbit netwerk, met een effectieve troughput van minder dan 0,5Mb/s gemiddeld bij het kopieren van files naar het windowsnetwerk :|
De reden dat ik dit vertel: ik hoef niemand te vertellen dat de netwerksnelheid omhoog moet: onhaalbaar project, daar is het bedrijf te groot voor en de belangen blijkbaar niet hoog genoeg. Dat gaat niet gebeuren (tenzij via andere wegen)

Als tijdelijke oplossing heb ik dan maar de FE en BE samengevoegd, dan werkt het nog behoorlijk goed. Maar: aangezien gebruikers dan rechtstreeks met de MDB werken (office 2003) loop je altijd het risico dat iemand het bestand incl. de data vernacheld, en dat is dus ook gebeurd: één dag na live gaan ging een gebruiker zelf een snelkoppeling maken en gooide in dat proces de database weg _/-\o_

Oplossing
Om dat risico te vermijden heb ik een stukje VBA-code geschreven die nu via het Filesystem-object een kopie van de database maakt (van zichzelf dus), en deze kopie daarna comprimeert en wegschrijft naar een andere lokatie. Elke dag wordt deze backup gemaakt door de eerste die inlogt, en de code zorgt ervoor dat een vooraf gedefinieerd aantal backups bewaard blijft (bijv. 10).

edit: voor de duidelijkheid: de backup wordt gemaakt door de eerste die inlogt. Op dat moment zijn er dus géén andere gebruikers, en is de database alleen door die persoon in gebruik.
Het is echter wel zo dat het kopieren van de 10-20mb grote database tot wel een minuut kan duren, dus er is wel een redelijke kans dat op dat moment iemand anders gaat inloggen.
Gedurende die tijd reageert Access ook totaal niet meer bij de user die de backup maakt.

Probleem
Enige punt van zorg is dat ik het maken van een kopie van een geopende database niet erg vertrouw. :| Ik ben bang dat dit op een gegeven moment een onherstelbare corruptie veroorzaakt die zich vervolgens langzaam in de kopien verspreid als dit niet opgemerkt wordt, maar ik weet ook niet zeker of dat nou reeel is. Ik heb er in de praktijk eigenlijk nooit last mee gehad, en op internet lees wisselende berichten.


Nu zou ik iets kunnen maken waarbij de backupcode in een andere database zit, welke in plaats van het maken van een kopie wordt opgestart, waarna vervolgens déze database een kopie maakt van de oorspronkelijke database, die dan niet in gebruik is (want automatisch afgesloten). Of varianten hierop.
Andere niet heel ingewikkelde oplossing is dat ik de code aanpas zodat deze niet zozeer een kopie van de database maakt, maar de datatabellen (het belangrijkste) exporteert naar een backup-mdb.

Alleen, is dat nodig. Is dat risico reeel, dat een kopie maken van een geopende database problemen kan veroorzaken. Moet ik me die moeite op de hals halen.

Het gaat dus niet zozeer om een oplossing, alswel om hoe jullie het kopieren van geopende database zien :)

[ Voor 10% gewijzigd door Stefke op 07-01-2013 20:46 ]


Acties:
  • 0 Henk 'm!

  • ollie1965
  • Registratie: December 2003
  • Laatst online: 15-07 16:00

ollie1965

Op zoek naar energiebesparing

Ja, ik kan bevestigen dat een kopie maken van een geopende database problemen kan opleveren.
Dit is me 2-3 keer overkomen in een grijs verleden.

Mogelijke oplossing?
1. (zou mijn voorkeur hebben)
Als het een groot bedrijf is heeft men ook servers, dus waarom daar niet een scheduled task maken welke een VB script start waarin je via de FSO een kopie maakt. De task kan je gewoon 's avonds/ 's nachts laten runnen.

2. (binnen Access)
Je huidige oplossing uitbreiden met...
Een public variabele (int, string wat je maar wilt) die geset wordt bij het starten van de back-up, indien een gebruiker inlogt wordt eerst gekeken of de variabele aan jou voorwaarde voldoet. Zo ja "nieuwe/volgende"gebruiker logt niet door maar krijgt een melding
"Er wordt momenteel een backup gemaakt even geduld, wilt u wachten" als de gebruiker op OK klikt komt deze in een loop waarbij de variabele iedere X seconden wordt gecheckt, bij klikken op annuleren kun je het programma sluiten.

Hoe meer ik weet, hoe meer ik weet dat ik te weinig weet

Dit , hierom en hierom


Acties:
  • 0 Henk 'm!

  • Question Mark
  • Registratie: Mei 2003
  • Laatst online: 16:46

Question Mark

Moderator SSC/WOS

F7 - Nee - Ja

Even een andere vraag, maar waarom is er gekozen voor Access als backend? D'r is toch wel algemeen bekend dat Access nu niet echt het meest geschikte pakket is voor multi-user access?

Waarom niet gewoon een fatsoenlijk backend in bv. SQL?

MCSE NT4/2K/2K3, MCTS, MCITP, CCA, CCEA, CCEE, CCIA, CCNA, CCDA, CCNP, CCDP, VCP, CEH + zwemdiploma A & B


Acties:
  • 0 Henk 'm!

  • ollie1965
  • Registratie: December 2003
  • Laatst online: 15-07 16:00

ollie1965

Op zoek naar energiebesparing

Question Mark schreef op vrijdag 11 januari 2013 @ 13:22:
Even een andere vraag, maar waarom is er gekozen voor Access als backend? D'r is toch wel algemeen bekend dat Access nu niet echt het meest geschikte pakket is voor multi-user access?

Waarom niet gewoon een fatsoenlijk backend in bv. SQL?
Tja, soms zie ik ook wel eens niet functionele wensen in de requirements. "Het moet met Java werken"
Gezien het eerste deel van de post (omschrijving) kan ik me wat voorstellen, ze hadden een Office professional licentie (en dus Access) en wilde zelf in de database kunnen? En mogelijk geen geld/kennis kunde van (My)SQL (of noem nog maar een paar andere rdbms)

Hoe meer ik weet, hoe meer ik weet dat ik te weinig weet

Dit , hierom en hierom


Acties:
  • 0 Henk 'm!

  • 418O2
  • Registratie: November 2001
  • Laatst online: 00:18
Een webinterface/WPF interface kan ook gewoon met een Access DB draaien...

Acties:
  • 0 Henk 'm!

  • Stefke
  • Registratie: December 2000
  • Laatst online: 16-07 10:37
Dergelijke bedrijven zijn vaak dermate log dat afdelingen wel eens zelf een oplossing gaan zoeken, omdat de IT geen tijd/geld heeft. Daar spring ik af en toe op in. Daarnaast zit de IT op slot, het draaien van een scriptje op een server zijn dingen die je vaak niet hoeft te vragen (het als een hogere netwerksnelheid). :F

In principe zit in de database al een uitgebreid mechanisme om gebruikers te loggen of om de database te sluiten en dat soort dingen. Ik kan dus vrij gemakkelijk andere gebruikers buitensluiten, of een melding laten geven dat op dat moment iets gaande is met het verzoek even te wachten. Sterker nog, ik heb er een uitgebreid (custom) autorisatiesysteem in zitten en zou vrij eenvoudig alle autorisaties kunnen intrekken op dat moment zodat er geen enkele mutatie uitgevoerd kan worden zolang de backup loopt.

Ik denk zelf dat problemen pas reeel zijn als op het moment van kopieren recordmutaties uitgevoerd worden. Als één gebruiker of een paar meer de database alleen open hebben staan (wachtend op de backup?) denk ik zelf dat een kopie maken best kan. (Maar misschien is dat wel niet zo...)

Ik heb nu een mechanisme gemaakt dat ipv een kopie van het bestand een export van de tabellen doet, alleen loop ik nog tegen wat praktische probleempjes aan, ik denk dat ik dat oplos door de backupfunctionaliteit buiten de database in een eigen mdb te zetten.
Maar dit zou denk zelfs als mensen mutaties uitvoeren nog goed moeten gaan (het is geen probleem als die mutaties niet in de database zitten, het is een dagelijkse backup).
Wellicht dat ik er nog iets bij maak dat gebruikers even in de wacht zet gedurende het maken van die backup, dat kan nooit kwaad (maar vind ik wel minder gebruikrsvriendelijk)

[ Voor 24% gewijzigd door Stefke op 11-01-2013 15:26 ]

Pagina: 1