Autore Topic: sqlite3 copia di backup  (Letto 735 volte)

Offline dex

  • Gran Maestro dei Gamberi
  • *****
  • Post: 872
    • Mostra profilo
sqlite3 copia di backup
« il: 26 Agosto 2010, 01:43:47 »
ciao raga

nel mio programma ho inserito il seguente codice per effettuare dei backup del database sqlite3
che fino ad oggi ha funzionato bene.
Codice: [Seleziona]
SHELL ("cp -r " & m1.Percorso & " " & m1.Destinazione)
CATCH 
  Message.Error(Error.Text)

Oggi su un pc dove ho effettuato una copia di backup e sulla copia ho trovato diverse tabelle vuote, preoccupato ho controllato tutti i pc (10) dove gira il programma e 3 di questi avevano tabelle danneggiate nelle copie di backup.
La cosa mi ha terrorizzato, in quanto se si dovesse danneggiare il database principale perderei tutti i dati.

Come posso effettuare delle copie sicure magari per giorno in modo da limitare i danni in caso di errore?

Inutile dire che se una cosa del genere si dovesse verificare, per i danni economici arrecati io e il pinguino verremo messi davanti al plotone di esecuzione.
 

Offline Ceskho

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 3.778
  • Vi Veri Veniversum Vivus Vici
    • Mostra profilo
    • Pagina Personale
Re: sqlite3 copia di backup
« Risposta #1 il: 26 Agosto 2010, 03:31:41 »
Prova a fare un copia e incolla manuale recandoti tu stesso nella cartella in cui c'è il file. Vedi se da lo stesso errore.

Per curiosità, che DE usi? Io avevo problemi simili quando ero sotto Fluxbox. Non so se il problema possa essere correlato all'ambiente.

Offline Picavbg

  • Senatore Gambero
  • ******
  • Post: 1.620
    • Mostra profilo
Re: sqlite3 copia di backup
« Risposta #2 il: 26 Agosto 2010, 09:28:04 »
Bella grana i backup!
Per verificare l'esito dei backup potresti inserire la funzione dentro un programmino appopsito da lanciare ogni giorno, Lo stesso programma, a fine backup, potrebbe eseguire un confronto dei dati originali con quelli salvati; potrebbe andare bene anche un test sul n° di record copiati per ciascuna tabella. Il programma potrebbe poi gestire anche il controllo sugli eventuali danni che potrebbero essere arrecati dall'ambiente, eseguendo lo stesso tipo di verifica all'avvio della tua giornata lavorativa. Ciò ti permetterebbe di controllare che rispetto alla sera precedebnte non sia cambiato niente.
Secondo me, per l'esperienza acquisita nel tempo, sarebbe meglio, inoltre, eseguire i backup in una memoria esterna al disco fisso dove gira il tuo S.O.  e dove sicuramente tieni il DB da tutelare: potrebbe essere una seconda partizione del disco, oppure una penna, oppure un CD/DVD riscrivibile. Meglio ancora se tenessi due backup diversi in ordine di tempo, per Es.:
Lunedì  --> backup sul supporto con file.backup1
Martedì  --> backup sul supporto con file.backup2
Mercoledì  --> backup sul supporto con file.backup1
Giovedì  --> backup sul supporto con file.backup2
Venerdì  --> backup sul supporto con file.backup3
Il lunedì successivo il ciclo ricomincerebbe ed avresti così, in caso di danneggiamenti imprevedibili, sempre la possibilità di recuperare le tabelle corrette del salvataggio dell'altro ieri, con l'onere di dovere riprendere solamente i movimenti di ieri.

É un lavoro un pò certosino, ma ti fornirebbe, direi, un'assoluta tranquillità sulla sicurezza dei dati.
Ciao.

Ah, dimenticavo: Buon lavoro.  :coder: :D
:ciao:

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: sqlite3 copia di backup
« Risposta #3 il: 26 Agosto 2010, 11:48:08 »
Allora, bisogna tener conto che il comando "cp" non tiene conto se un file è in stato di scrittura o meno, nel senso che se in quel momento ci viene scritto su qualcosa, il comando si trova con i puntamenti errati, per cui copia male. Il risultato è che se il db non ha poi la corretta struttura (diversamente da un semplice file di testo, ad esempio), si corre il rischio che non venga più letto dal motore (in questo caso sqlite).

Inoltre, bisogna tener conto anche del fattore caching, che potrebbero risultare ancora non effettivamente memorizzati su disco, per cui ti perdi l'effettivo contenuto.

L'idea di un backup, fuori dall'orario lavorativo (cosa che viene programmata in tutti gli ambienti) è la migliore cosa. Inoltre, a meno che la copia del db non debba essere immediatamente disponibile, potrebbe essere procedura migliore fare un bel file compresso, anche per risparmiare spazio.
« Ultima modifica: 26 Agosto 2010, 11:50:22 da md9327 »

Offline dex

  • Gran Maestro dei Gamberi
  • *****
  • Post: 872
    • Mostra profilo
Re: sqlite3 copia di backup
« Risposta #4 il: 26 Agosto 2010, 23:04:32 »
@Cesckho
 su alcuni pc ubuntu 9.10 su altri ubuntu 10.04

@Picavbg
Buona idea i giorni della settimana, io avevo pensato di aggiungere la data al file ma dopo un pò mi sarei trovato con le cartelle piene.

@md9327
in effetti cp non effettua nessun controllo, ne se il file esiste ne se si trova in fase di scrittura, nel mio caso i file di backup non vengono aperti da altre applicazioni e difficilmente si potrebbero trovare in fase di scrittura, a meno che, l'utente schiacci due volte il pulsante ed avvii due backup sovrapposti (posso rimediare disabilitando il button dopo il primo clik).

In alternativa a cp cosa potrei utilizzare?

Offline leo72

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 2.163
    • Mostra profilo
    • http://www.leonardomiliani.com
Re: sqlite3 copia di backup
« Risposta #5 il: 26 Agosto 2010, 23:14:48 »
Esiste il comando COPY di Gambas per copiare un file.
All'epoca in cui il mio gestionale girava su SQLite3 usavo COPY e non mi è parso di aver avuto problemi strani per il backup.
Magari mettici un controllo sulla presenza del file per evitare sovrascritture:
Codice: gambas [Seleziona]

DIM hFile1, hFile2 AS STRING
hFile1 = Indirizzo_completo_DB
hFile2 = Indirizzo_completo_DB & ".bkp"
IF Exist(hFile2) THEN
  KILL hFile2
ENDIF
COPY hFile1 TO hFile2
Visita il mio sito personale: http://www.leonardomiliani.com

Offline Picavbg

  • Senatore Gambero
  • ******
  • Post: 1.620
    • Mostra profilo
Re: sqlite3 copia di backup
« Risposta #6 il: 26 Agosto 2010, 23:34:53 »
Sicuramente il consiglio di Leo ti solleva dalla gestione di backup effettivi. É certo che duplichi il DB.
Un'altra possibilità potrebbe essere simile a : vedi allegato, come ti avevo suggerito nel mio precedente post.
Ogni scelta é valida, dipende quale tu vedi più facilmente percorribile per ottenere la migliore resa possibile in termini di sicurezza.
Ciao.  :)

:ciao: