Springen naar inhoud


- - - - -
VS 2012 SOLVED

Database Sdf Back Up

VS2012 Database Backup SDF

  • Log in a.u.b. om te beantwoorden
Er zijn 36 reacties in dit onderwerp

#31 Benno

Benno

    R.I.P.

  • Leden
  • PipPipPipPipPip
  • 949 berichten
    Laatst bezocht 08 mrt 2018 20:32
  • LocatieGyor, Magyarország

Geplaatst op 25 januari 2013 - 10:24

 rob luttge, on 25 januari 2013 - 07:18, said:

Code doet soms andere dingen dan je verwacht.
Ja, mijn mentor bleef dat soort dingen maar herhalen:
  "je hebt zelden de code geschreven die je denkt te hebben geschreven" en
  "bij een meningsverschil is het steeds de code die het bij het rechte eind heeft, nooit de programmeur"
  "schrijf eerst een unit test die zal verifiëren of je wel geschreven hebt wat je denkt geschreven te hebben, voor je het schrijft"

 rob luttge, on 25 januari 2013 - 07:18, said:

Met de code van Tromt kan ik nu hopelijk de boel vervolmaken.
Die code gaat er ook van uit dat het kopiëren gewoon goed gaat want gebruikt diezelfde File.IO.Copy die jij gebruikte.
En is onbetrouwbaar, want kan je hele databank vernaggelen zoals je hebt vastgesteld.
Gebruik dus minstens je eigen variant, die test of je het bestand wel exclusief hebt.

Ook wil ik nog eens herhalen dat een kopie van je database bestanden naar eenzelfde harde schijf, of zelfs naar hetzelfde systeem, vanuit je programma, niet echt een goede backup strategie kan genoemd worden.

#32 tromt

tromt

    Professional Developer

  • Leden
  • PipPipPipPip
  • 303 berichten
    Laatst bezocht 17 apr 2018 10:02
  • LocatieRijen (NB)

Geplaatst op 25 januari 2013 - 10:57

Helemaal mee eens. Ik ga er van uit dat je bij gebruik van SQLCE alleen in die database zit, maar dat kan natuurlijk anders zijn. En dat backuppad, uiteraard, andere schijf (of partitie) indien mogelijk. En anders een deugdelijke routine bedenken (en uitvoeren) om backups veilig te stellen :smile: Succes
@ Benno: die writeallbytes ga ik ook eens proberen, prima tip!

#33 Benno

Benno

    R.I.P.

  • Leden
  • PipPipPipPipPip
  • 949 berichten
    Laatst bezocht 08 mrt 2018 20:32
  • LocatieGyor, Magyarország

Geplaatst op 25 januari 2013 - 11:50

 tromt, on 25 januari 2013 - 10:57, said:

Ik ga er van uit dat je bij gebruik van SQLCE alleen in die database zit,
Maar dat maakt geeneens een  verschil, want ook dan loopt het fout, zoals Rob eigenlijk heeft gedemonstreerd.

Ik wil je voorbeeld echt niet afvallen of zo, maar ik moet vaststellen dat je code nog wel wat andere betwistbare dingen doet in die backup routine.
Als er die dag al een "backup" gemaakt is verwijder je dat bestand.
Visual Basic Code:
Dim deBackup As String = fPad.BackupMap & "Backup-" & DateTime.Today.ToString("yyyy-MM-dd") & ".sdf"
If File.Exists(deBackup) Then File.Delete(deBackup) 'voor de zekerheid
Je weet dan nog niet of de nieuwe "backup" gaat lukken:
Visual Basic Code:
 File.Copy(deDataBase, deBackup, True)

Ook verwijder je arbitrair bestanden, als er zich meer dan 14 (maxbackups) willekeurige bestanden in de "backup map" bevinden.
Zonder te testen of die 14 bestanden wel je eigen "backup bestanden" zijn.
Je doet dat na de nieuw gemaakte backup (als ie gelukt is).
En dus zijn er scenario's te bedenken waarbij je enkel en alleen je eigen, net gemaakte, backup opnieuw verwijdert.
Wat wel enigzins grappig is

Visual Basic Code:
	   ' Indien meer dan maxbackups dan de oudste wissen
		Dim Entries As New Generic.List(Of String)(Directory.GetFiles(fPad.BackupMap()))
		Dim tal As Integer = Entries.Count
		Dim weg As Integer = tal - maxbackups - 1
		If tal > maxbackups Then
			Dim Lijst As New Generic.List(Of String)
			For Each FileName As String In Entries
				Lijst.Add(FileName)
			Next
			Lijst.Sort()
			For L As Integer = 0 To weg
				File.Delete(Lijst.Item(L))
			Next
		End If



#34 tromt

tromt

    Professional Developer

  • Leden
  • PipPipPipPip
  • 303 berichten
    Laatst bezocht 17 apr 2018 10:02
  • LocatieRijen (NB)

Geplaatst op 25 januari 2013 - 12:24

Ik hou van humor :smile: , maar als je een betere manier weet: ik hou me aanbevolen. Overigens in die backupmap komen geen andere bestanden en tot op heden is het altijd nog goed gegaan . . . . Bezwaren theoretisch?
En het wissen van de backup van dezelfde datum bleek nodig, omdat hij anders de oude niet bleek te overschrijven. Ik zou er behalve een datumstempel ook nog een tijdstempel aan kunnen toevoegen, dat wel, dan hoeft hij niks te wissen.

#35 Benno

Benno

    R.I.P.

  • Leden
  • PipPipPipPipPip
  • 949 berichten
    Laatst bezocht 08 mrt 2018 20:32
  • LocatieGyor, Magyarország

Geplaatst op 25 januari 2013 - 16:53

Had al gevreesd dat we hier zouden terechtkomen.
Per uitzondering zal ik hier eenmalig op in gaan.

 tromt, on 25 januari 2013 - 12:24, said:

maar als je een betere manier weet: ik hou me aanbevolen.
Het gaat niet over de manier.
Het gaat over foute implementaties en aannames in je code.

 tromt, on 25 januari 2013 - 12:24, said:

Overigens in die backupmap komen geen andere bestanden
Hoe dwing je dat af?
Hint: niet.

 tromt, on 25 januari 2013 - 12:24, said:

tot op heden is het altijd nog goed gegaan
Hoe weet je dat?
Hint: niet.

 tromt, on 25 januari 2013 - 12:24, said:

Bezwaren theoretisch?
Als het bestand in gebruik is gaat je code in de fout (casus van Rob).
Dat is dus niet theoretisch, dat is al aangetoond. Maar dat is niet eens zo belangrijk: zie ook onderaan deze post voor een gezellig theoretisch scenario( Routine From Hell).
Het is (ook voor de andere punten) niet eens een kwestie van of het zal mislopen, enkel wanneer en hoe dikwijls het zal mislopen.
De code doet namelijk niet wat je dacht, niet wat je zei en niet wat het commentaar in de code zegt.

 tromt, on 25 januari 2013 - 12:24, said:

En het wissen van de backup van dezelfde datum bleek nodig, omdat hij anders de oude niet bleek te overschrijven.
Als de oude niet wordt overschreven, dan betekent toch dat er iets mis is?
Want de derde parameter bij de IO.File.Copy zegt dat je wel wil overschrijven.
Je oplossing daarvoor, om eerst te wissen zou correct kunnen zijn indien je het juiste bestand zou wissen (het oudste, en dan nog slechts indien er reeds maxbackups (14, hard coded)  backup bestanden zouden zijn,  en dan pas na een gelukte backup, niet voordat je de backup gaat proberen.
Maar dat is niet het geval: je wist/overschrijft het foute bestand: héél waarschijnlijk de meest recente kopie die je hebt.

 tromt, on 25 januari 2013 - 12:24, said:

Ik zou er behalve een datumstempel ook nog een tijdstempel aan kunnen toevoegen, dat wel, dan hoeft hij niks te wissen.
Zou. Dat is hypothetisch.


Ook: indien het aantal backup bestanden maxbackups(14) is, moet je niet eerst wissen, maar eerst de nieuwe kopie plaatsen en pas als dat gelukt is iets wissen.
Maar je weet gewoon nooit of dat is gelukt.
En je geeft wel mooi de boodschap "Backup is klaar ..." ook al was dat niet het geval en heb je als toemaatje de laatste backup eventueel gewist.

Routine From Hell:
Maar waar ik me meest aan stoor is dat het scenario reëel is dat je tientallen willekeurige bestanden wist, die geen uitstaans hebben met je programma.
Het is voldoende dat iemand (al dan niet per abuis) de target map voor de backups instelt op een bestaande map met meer dan 13 bestanden en dan gaat jouw routine  willekeurige bestanden wissen in die map, zodanig dat er nog slechts 14 (maxbackups) overblijven.
Dat zou wel eens een héél dure bug kunnen worden.
En dit laatste wordt gewoon veroorzaakt omdat je gewoon alle bestanden telt in de "backup map", je ze sorteert en enkel de laatste 14 bestanden zal overhouden want de rest verwijderd, of ze nu al dan niet je eigen backup bestanden zijn.


Commentaar in code van tromt said:

  Indien meer (van mijn backup besanden) dan maxbackups (14) dan de oudste (daarvan) wissen

Code van tromt said:

Indien meer dan 14 bestanden (eender welke) in deze map: sorteer de lijst van alle bestanden en verwijder alles behalve de laatste 14 uit de lijst


#36 rob luttge

rob luttge

    Senior Developer

  • Leden
  • PipPipPip
  • 164 berichten
    Laatst bezocht 15 okt 2014 10:51

Geplaatst op 26 januari 2013 - 09:44

Ik heb nu een savefiledialog gebruikt die er voor zorgt dat de gebruiker zelf bepaald waar hij de backup plaatst, ik gebruik read/writeallbytes en check op de naam van het file dat gewist wordt als de maxbackups wordt overschreven.Dit werkt allemaal prima. Wederom dank voor de onmisbare inputs! Ik had een paar maanden geleden niet kunnen bevroeden dat ik enerzijds al zo'n eind gekomen ben en anderzijds dat de ontdekking kom dat er nog zo vreselijk veel te leren is... Groet Rob

#37 tromt

tromt

    Professional Developer

  • Leden
  • PipPipPipPip
  • 303 berichten
    Laatst bezocht 17 apr 2018 10:02
  • LocatieRijen (NB)

Geplaatst op 26 januari 2013 - 11:10

Benno, weer bedankt voor je heldere uiteenzettingen. Ik snap het allemaal. Ik ga er ook rekening mee houden. Ik ga de boel aanpassen. Voor eigen gebruik is het allemaal niet zo erg (ik weet wat ik doe -  met uitzondering van dat backup verhaal, dat moet beter), maar als anderen er mee aan de slag gaan, tsja, dan heb je een punt. Dank!





Ook met taq VS 2012 SOLVED, VS2012, Database, Backup, SDF voorzien

0 gebruiker(s) lezen dit onderwerp

0 lid(leden), 0 bezoeker(s), 0 anonieme gebruikers

Inloggen


[VS 2012 SOLVED] Untitled 1

Met dank aan Jürgen voor de jarenlange inzet van visualbasic.be (anno dec 2000)
Met dank aan Mike en Ronneke voor de jarenlange inzet van vbib.be (anno dec 2010)
Met dank aan PascalBianca voor de jarenlange inzet van vbib.be (anno dec 2016)