[ASP/Access] Databasecorruptie door niet gesloten handler

Pagina: 1
Acties:

  • Knakker
  • Registratie: April 2000
  • Laatst online: 31-07 17:39
Al een hele tijd terug heb ik een website gemaakt (de beroepskeuzekrant); dit moest van de klant met behulp van Access en ASP. Eén van de mogelijkheden van de website moest zijn dat ze nieuws konden toevoegen.

Bij het script waarmee je de nieuwsitems kon bekijken (als bezoeker) had ik mijn handler voor de queryresultaten QR (als in 'SET QR = DB.Execute(SQL)') wel gesloten dmv van QR.Close, maar was ik vergeten 'SET QR = Nothing' toe te voegen. Zelfde geldt voor de verbinding DB.

Nu claimen zij dat vanwege dit feit er database-corruptie is opgetreden waarbij zij 6 maanden nieuws (van voor januari 2003) zijn kwijtgeraakt. Mijn vragen zijn:

a) Is dit mogelijk? Het lijkt me erg sterk dat een gesloten handler dit kan veroorzaken. En dan is het ook nogal sterk dat het alleen de onderste items in de database betreft. Bovendien: als er database-corruptie optreedt, dan moet MS Access dit melden op het moment dat je de database opent.

b) Stel, dat a) juist is, kan hier wat nog wat aangedaan worden?


Bedankt voor jullie licht op deze (m.i.) 'fishy' zaak...

[ Voor 7% gewijzigd door Knakker op 01-02-2003 14:46 ]

Geef mij maar een Warsteiner.


  • whoami
  • Registratie: December 2000
  • Laatst online: 24-08 16:37
[nohtml]
Knakker schreef op 01 februari 2003 @ 14:43:
Al een hele tijd terug heb ik een website gemaakt (de beroepskeuzekrant); dit moest van de klant met behulp van Access en ASP. Eén van de mogelijkheden van de website moest zijn dat ze nieuws konden toevoegen.

Bij het script waarmee je de nieuwsitems kon bekijken (als bezoeker) had ik mijn handler voor de queryresultaten QR (als in 'SET QR = DB.Execute(SQL)') wel gesloten dmv van QR.Close, maar was ik vergeten 'SET QR = Nothing' toe te voegen. Zelfde geldt voor de verbinding DB.

Nu claimen zij dat vanwege dit feit er database-corruptie is opgetreden waarbij zij 6 maanden nieuws (van voor januari 2003) zijn kwijtgeraakt. Mijn vragen zijn:

a) Is dit mogelijk? Het lijkt me erg sterk dat een gesloten handler dit kan veroorzaken. En dan is het ook nogal sterk dat het alleen de onderste items in de database betreft. Bovendien: als er database-corruptie optreedt, dan moet MS Access dit melden op het moment dat je de database opent.
Ik ben er nu zo geen expert in, maar het zou imho toch wel echt vreemd zijn dat dat daardoor kan zijn.
Je sluit je object, maar je zet net niet op NULL. Daardoor kan er toch niets fout gaan met je databank. Dat stuk code heeft niets meer te maken met de databank. Het enige wat die 'fout' kan opleveren is eventueel een memory leak.

Wat ik ooit wel eens gelezen heb, is dat MS het afraadt om ASP icm met Access te gebruiken.

[ Voor 3% gewijzigd door whoami op 01-02-2003 14:48 ]

https://fgheysels.github.io/


Verwijderd

Hmmm bij mij raken Access db's alleen maar corrupt als er teveel concurrent connecties zijn op de db. Als er veel webusers ineens gaan lezen/schrijven in de database dan kan deze corrupt raken. Bekende verhaal met Access; is geen bedrijfskritische back-end.

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 24-08 15:16

gorgi_19

Kruimeltjes zijn weer op :9

Knakker schreef op 01 februari 2003 @ 14:43:
Al een hele tijd terug heb ik een website gemaakt (de beroepskeuzekrant); dit moest van de klant met behulp van Access en ASP. Eén van de mogelijkheden van de website moest zijn dat ze nieuws konden toevoegen.

Bij het script waarmee je de nieuwsitems kon bekijken (als bezoeker) had ik mijn handler voor de queryresultaten QR (als in 'SET QR = DB.Execute(SQL)') wel gesloten dmv van QR.Close, maar was ik vergeten 'SET QR = Nothing' toe te voegen. Zelfde geldt voor de verbinding DB.

Nu claimen zij dat vanwege dit feit er database-corruptie is opgetreden waarbij zij 6 maanden nieuws (van voor januari 2003) zijn kwijtgeraakt. Mijn vragen zijn:

a) Is dit mogelijk? Het lijkt me erg sterk dat een gesloten handler dit kan veroorzaken. En dan is het ook nogal sterk dat het alleen de onderste items in de database betreft. Bovendien: als er database-corruptie optreedt, dan moet MS Access dit melden op het moment dat je de database opent.
Ik denk dat je beter een andere vraag kan stellen.... Wie heeft gezegd dat het per se Access moest zijn? Jullie of de klant? En als jullie het gezegd hebben, hebben jullie dan ook gewezen op de 'gevaren' van MS Access in een webomgeving?
Access is nooit gemaakt voor multi-user omgevingen en is eigenlijk een desktopprogramma. Dat het misbruikt wordt voor het web, is een ander verhaal.
Access kan gebruikt worden, maar brengt meer risico met zich mee dan MSSQL of MySQL.

Om een antwoord op de vraag te geven: Het kan het veroorzaakt hebben, maar de oorzaak kan ook liggen bij een query oid. Hou het er maar op dat het een toevallige samenloop van omstandigheden is.

Het niet 'hard' sluiten van je connecties zal hooguit als risico met zich meebrengen dat je geheugen 'wat' inefficienter gebruikt wordt en je database wat meer open connecties tegelijkertijd heeft.
Een restart van IIS moet eea toch wel weer kunnen oplossen.
b) Stel, dat a) juist is, kan hier wat nog wat aangedaan worden?
Inladen in Access en "Compact and repair database" uitvoeren.
Backup terugzetten van een dag ervoor van de database (lijkt me verantwoordelijkheid van het bedrijf om backups te maken.

Kleine disclaimer nog: Het lijkt nu alsof ik heel negatief ben over MS Access.. In de meeste gevallen voldoet deze database echter zeer goed. Het lijkt mij echter wel af te raden of Access te gebruiken icm met bedrijfskritische applicaties of websites met veel concurrent users.

[ Voor 8% gewijzigd door gorgi_19 op 01-02-2003 15:04 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • Knakker
  • Registratie: April 2000
  • Laatst online: 31-07 17:39
Je sluit je object, maar je zet net niet op NULL. Daardoor kan er toch niets fout gaan met je databank. Dat stuk code heeft niets meer te maken met de databank. Het enige wat die 'fout' kan opleveren is eventueel een memory leak.
Het niet 'hard' sluiten van je connecties zal hooguit als risico met zich meebrengen dat je geheugen 'wat' inefficienter gebruikt wordt en je database wat meer open connecties tegelijkertijd heeft.
Dat is dus ook mijn punt...
Hmmm bij mij raken Access db's alleen maar corrupt als er teveel concurrent connecties zijn op de db. Als er veel webusers ineens gaan lezen/schrijven in de database dan kan deze corrupt raken. Bekende verhaal met Access; is geen bedrijfskritische back-end.
Het zou dus zo kunnen zijn dat een hoop concurrent connecties deze problemen kunnen veroorzaken. Maar wat is een hoop? Ik kan me niet voorstellen dat deze site zóveel bezoekers trekt, dat dit gebeurd. En bovendien: als ik dan de database open mbv Access dan zou Access moeten melden dat ie corrupt is - en dat gebeurt niet. Het enige wat vreemd is, is dat er zo'n 70-80 nieuwsitems missen.

Geef mij maar een Warsteiner.


  • Korben
  • Registratie: Januari 2001
  • Laatst online: 14-11-2025

Korben

() => {};

Het kan imo niet aan het niet sluiten van je object liggen, omdat je connectie automatisch gesloten en op Nothing gezet wordt als je database-object out of scope gaat.

.oisyn: Échte programmeurs haten PHP met een passie. Ben jij soms geen echte programmeur?

Pagina: 1