Newsgroup: it.comp.lang.delphi
Titolo: [FIREBIRD] Cerco consigli su strategia di backup

Prima o poi il problema avrei dovuto affrontarlo. Uso Firebird 1.5 RC6 su
Win2k. In sostanza è il solito problema di backup, ma come realizzare
un'applicazione che gestica questo processo senza  fare danni? Allora l'idea
di partenza è quella di eseguire questi processi:
- ad una data ora della notte si esegue la procedura di backup (vabbè
facile, uso un timer)
- controllo se vi sono client collegati (come ed eventualmente come forzo la
disconnessione?)
- se non ci sono connessioni lancio il gbak che crea una copia di backup in
una cartella a parte (c'è un esempio di stringa di gbak con tutti i
parametri?)
- adesso vengono le note dolenti, se il backup non è riuscito (come lo
rilevo?), scrivi in un log.txt manda un messaggio ecc., usa gfix per
ripararlo, se anche gfix è negativo... che faccio? accendo un cero in
chiesa?
- se gfix ok ricopia questa nuova versione sul file originale (si può
corrompere il file .fdb?)
- quando tutto è ok consenti le connessioni dei client (come si fa'?)
prima d'iniziare il lavoro c'è qualcosa di errato o mancante in questa
analisi? Voi come vi comportate per il backup di un .fdb? C'è qualche
esempio o codice in giro sulla rete? Thanks a lot
Med

Se ti interessa dai un occhio alla mia console per l'amministrazione di
sistema
ho anche una funzione di backup in cui puoi inserire delle operazioni da
fare prima del backup e dopo il backup!
Comunque in genere a macchine ferme, anche se ci sono dei client
connessi in piena notte (?)
il backup effettua la copia dei dati fisicamente su disco, della serie
quel
che c'č c'č....
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

xche complicarsi la vita?
1) verifichi se ci sono utenti connessi
Questa è da approfondire
2) se non vi sono utenti, stoppi il servizio
3) crei una copia dei files in una apposita cartella
4) riavvi il servizio
5) x risparmiare spazio potresi usare Abbrevia per comprimere i files
database in .zip
6) se sul server hai attiva la uty x le operazioni pianificate, potresti
valutare l'idea di aggiungere la tua app a queste
BaiBai
A
--
Per rispondere non usare il reply ma scrivere al seguente indirizzo:
zzato(at)supereva;it
Please, don'r reply this message.
Use this address:
zzato(at)supereva;it

 valutare l'idea di aggiungere la tua app a queste
mi sembra un'ottima idea questa strategia in quanto con il servizio stoppato
s'impedisce a qualsiasi client di collegarsi. Abbrevia non lo conoscevo
penso che da oggi ne farò uso! Anche perchè mi sembra è diventato open
source. Thanks
Med
P.S.
resta comunque il problema del punto primo

 che c'č c'č....
Mi dai il link per il download sono curioso di provarla :-) Intendi che
anche con un client connesso ma che non sta effettuando transazioni si puň
comunque effettuare il gbak senza problemi? Nessun pericolo di corruzione
del .fdb? Bye
Med

Si, direi che non c'è pericolo di corruzione dati.
Puoi dcaricarti la demo dal download della versione 
inglese dal mio sito 
www.klemy.it


 pericolo di corruzione del .fdb? Bye
Il problema non e' il backup, ma il restore (che, btw, e' l'unico modo
per verificare che il backup sia riuscito). Tieni conto che normalmente
il processo è sempre backup + restore. E' *indispensabile* scollegare i
client prima del restore. Inoltre, dato che e' il restore che puo'
andare a male, in genere si fa:
  BACKUP                // snapshot
  DISCONNECT CLIENTS    // v. sotto
  REN GDB -> BAK        // nessun client collegato
  RESTORE GBK -> GDB    // restore (garbage collection, etc)
A questo punto, se il restore fallisce cancelli il GDB e rimetti in
linea il BAK copiandolo come GDB, scrivi un avviso sul log e chiedi che
venga fatto un fix del gdb.
Direi che stoppare il servizio è un'ottima possibilità di lasciare
inconsistenze.
uses JclSysInfo; // per CreateEnvironmentBlock
function TfrmMainRestore.ShutDownDb(const fn: TFilename): boolean;
var AppName, CmdLine: string;
    EnvVars: TStringList;
    Environ: PChar;
begin
  if not FileExists(fn) then
    raise Exception.Create('Cannot find file '#13#10 + fn);
  Appname := IncludeTrailingPathDelimiter(GetInterbaseBinPath) +
'gfix.exe';
  CmdLine := ' -sh -force 0 ' + fn;
  EnvVars := TStringList.Create;
  try
    EnvVars.Add('ISC_USER=SYSDBA');
    EnvVars.Add('ISC_PASSWORD=masterkey');
    Environ := CreateEnvironmentBlock([eoLocalMachine, eoAdditional],
EnvVars);
    try
      FillChar(sa, sizeof(sa), 0);
      sa.nLength := sizeof(sa);
      sa.bInheritHandle := True;
      FillChar(si, sizeof(si), 0);
      si.cb := sizeof(si);
      si.dwFlags :=  STARTF_USESTDHANDLES or STARTF_USESHOWWINDOW;
      si.wShowWindow := SW_HIDE;
      if not (CreateProcess(PChar(AppName), PChar(CmdLine),
          nil, nil,
          True, 0,
          Environ, nil,
          si, pi)) then
        RaiseLastOSError;
      WaitForSingleObject(pi.hProcess, 15000);
      CloseHandle(pi.hThread);
      CloseHandle(pi.hProcess);
    finally
      FreeMem(Environ);
    end;
  finally
    EnvVars.Free;
  end;
  Result := True;
end;
Saluti
Paolo Arosio
-- 
"La dimostrazione dell'esistenza di specie intelligenti nell'universo
 e' che non ci vengono a trovare"

 inglese dal mio sito 
www.klemy.it
E' una figata questo programma! Non mi riferisco solo al backup, fa' un
sacco di cose. Hai fatto tutto da solo? L'unica cosa i colori
dell'interfaccia sono un po' forti ci si stanca presto a tenere gli occhi
sulle form. Ci vorrebbe un'accoppiata di colori più tenui e gradevoli, per
il resto complimenti! Bye
Med

Si, il programma l'ho fatto tutto da solo, quando avrò tempo di fare
questa parte
darò anche la possibilità di cambiare i colori di sfondo.


 inconsistenze.
Sto' provando il codice che hai postato sono riuscito a far funzionare
tutto. Per il gbak, restore e gfix mi puoi consigliare quali opzioni e bene
inserire nelle stringhe, thanks a lot
Med

 chiesa?
Il comando gbak può scrivere un file di log, e in ogni caso GFIX
non ripara un file di backup, ma al limite un file .fdb.
Se operi in Windows ti segnalo GbakScheduler, è una utility per
impostare una strategia di backup, inoltre ti avvisa via email di come sono
andate le copie ed è gratis, risolverà i tuoi problemi :
http://www.healthfocus.co.za/gbak.htm
Altre utility le puoi trovare su:
http://www.ibphoenix.com/main.nfs?a=ibphoenix&page=ibp_contrib_download
Ciao!
--
Marco Kregar
marco....@FirebirdSQL.it
www.FirebirdSQL.it
"over the bench the goat sings, under the bench the goat dies"

inglese dal mio sito 
www.klemy.it
Un consiglio: riesaminate la home page perche' quando la visualizzo la CPU
sale al 100%.
-- 
Morde. 
(morde at programmer dot net)

 Med
Io utilizzerei i componenti della palette interbase admin o gli
equivalenti di FIB, ho realizzato il backup ed il restore in 30',
senza passare per la riga di comando
Max

 e bene inserire nelle stringhe, thanks a lot
Dipende dalle tue esigenze. Consiglierei una lettura della
documentazione ufficiale di IB/FB riguardo a gbak
