Newsgroup: it.comp.lang.vo-clipper
Titolo: Duplicazione Archivi

All'interno del mio applicativo (gestionale) ho inserito una funzione
chiamata Manut() la quale viene lanciata ogni qual volta nel programma
viene toccato un record, quindi dopo un append, dopo un replace o un
delete di un record.
La funzione Manut() appende records in un file chiamato manut.dbf sempre
aperto durante l'esecuzione del programma. Manut.dbf contiene le
seguenti informazioni:
"man_dbf"   nome del file dbf
"man_rec"   numero del record
"man_ute"   l'utente che ha effettuato tale modifica
+altre informazioni ( data e ora , etc)
Un programma clipper chiamato SFT  che gira su una stazione dedicata
legge il file
manut con un ciclo do while ... !eof() legge il prossimo record
apre il file &man_dbf
va al record man_rec
su un secondo server fa le stesse operazioni, cioè :
apre il file &man_dbf
va al record man_rec
effettua una comparazione con eventuali replace tra i records dei due
archivi.
In altre parole replica le informazioni da un server all'altro in tempo
reale, record per record, senza effettuare copie fisiche
(pericolosissime) in modo tale che se si dovesse rompere un server
"porc..#@!!**§§§..ulo" c'è la copia sull'altro server pronta per essere
utilizzata.
Questo programma funziona da anni in clipper e mi piacerebbe riscriverlo
in Vo potenziandolo con tutte le features che Vo inserito nel contesto
Windows offre al programmatore ( multitasking, etc., etc.)
Se qualcuno di voi è interessato mi scriva anche perchè con lo stesso
principio ho sviluppato un sistema che permette di creare a fine
giornata un file di dimensioni molto ridotte contenente solo le
modifiche della giornata in modo da trasferire via modem (come la
replica di Notes) da un server all'altro solo le modifiche effettuate.
Se siete a conoscenza di prodotti esistenti sul mercato che facciano
questo, di librerie, di qualsiasi altro prodotto che fa questo vi prego
di dirmelo.
Grazie
Marco Boschi

delete di un record.
ecc ecc
Complimenti per l'iniziativa !! Notevole come idea, ma non ti da un carico
di rete tremendo ? Intendo dire, nel caso di applicativi dove ci sono 20-30
user che modificano continuamente dati, non ti genera un traffico di rete
piuttosto intenso ?
Lo so che non e' la stessa cosa, io di solito per applicazioni critiche uso
axs + 2 server netware in backup caldo + con ognuno i dischi mirrorati
Ciao.Alberto.

Il carico di rete non lo sentiamo in quanto legge da un server e scrive su un
altro server.
Con uno switch al posto du un hub non senti niente.
In alcune installazioni in cui il lavoro non è pesantissimo come da noi, al pc
in cui gira il programma SFT.EXE ( che duplica gli archivi) faccio fare altre
cose, Stampe, conteggi, archiviazione documnti, etc. etc.
Io non so cosa faccia axs su due server, so solo che se si "rovina" un file FPT
sull'originale, sulla copia non si rovina.
Secondo me vale la pena di approfondire il discorso.
Ciao
Alberto Rubinelli ha scritto:


Secondo me vale la pena di approfondire il discorso.
Certo, l'argomento e' piu' che mai importante e la tua idea non mi dispiace
per niente.
Ciao.Alberto.

Per quanto riguarda il discorso FPT o DBT a me capita, per fortuna molto
raramente che il contenuto dei campi memo sparisca. Non sono mai riuscito ad
andare a fondo e capire il motivo in quanto è così raro che non ci faccio quasi
caso.
Per esempio a te non è mai capitato che un file FPT raggiunga le dimensioni di
qualche giga?
a me si più volte.
Capita solo negli archivi che non impacco giornalmente.
Per quanto riguarda la duplicazione archivi purtroppo questa idea piace solo a
me, a te e a Biagio.
Nessun altro si è fatto vivo. Statisticamente siamo in linea con le tendenze del
momento.
Io per esempio ho installato una rete Netware, altri 100 installano NT, io creo
un programma per la duplicazione archivi, altri 100 fanno acquistare prodotti di
backup costosi e a mio avvioso poco efficienti.
Io attivo dieci chiavi di ricerca alternative per i fogli di lavoro (siamo un
laboratorio di riparazione hw),
con il programma più venduto in italia per centri di assistenza o sai il numero
del foglio di lavoro oppure ....
Io utilizzo Groupwise altri 100 usano Lotus Notes.
Io lavoro bene altri 100 lavorano
Ciao a presto

 con il programma piů venduto in italia per centri di assistenza o sai il


me, a te e a Biagio.
 E' interessante anche per me
 non ho capito un paio di cose pero'...
1)  il file manut.dbf viene aggiornato anche mentre
     vengono affettuate le comparazioni ed aggiornamenti
     delle copie degli archivi sul secondo server ?
     Parli di real time quindi presumo di si 
     presumo anche che venga eseguito un file lock
     e che questo blocchi il lavoro sulle altre stazioni
     o no ?  lavori su una copia del file manut.dbf ?
2) Il caso di rottura del primo server non rischi
    di trovarti con le copie degli archivi disallineati ?
Mi e' venuta in mente questa cosa :
1) Creare un tabella con due progressivi
     _ uno che viene incrementato ad ogni accensione
        del server principale.
     _ un'altro che corrispondente all'ultimo 
        utilizzato.
2) Aggiungere a tutte le tabelle un campo in 
     cui scrivere il primo progressivo.
3) Lanciare a macchine dedicate un programma
     che copi tutti i record marcati con un progressivo
     maggiore dell'ultimo utilizzato e poi
     aggiorni l'ultimo utilizzato.
Immagino troverai delle controindicazioni...
e' solo una idea...
Ciao,
Eugenio.    
 

Nel file manut.dbf tutti gli utenti scrivono un record dopo ogni modifica che
effettuano sulle tabelle utilizzate.
Ad esempio se l'utente "003" modifica il numero di telefono del cliente "BOSCHI
MARCO"
che si trova nel record "1000" dell'archivio "CLIFOR.DBF" doopo avere fatto scritto
sull'archivio la modifica
    "REPLACE telefono WITH cTelefono"
    DBCOMMIT()
    DBRUNLOCK()
lancia la funzione manut_rec()
la quale fa circa cosě
select manut
IF add_rec()
    REPLACE man_dbf          WITH     "CLIFOR"                       ,;
                      man_rec          WITH     1000
,;
                      man_ute          WITH     cUtente
,;
                      manut_rec       WITH DTOS(DATE())+TIME()
    DBCOMMIT()
    DBRUNLOCK()
ENDIF
Potete immaginare che manut.dbf č un enorme calderone in cui tutti scrivono "a
nastro" informazioni semplicissime e banali.
Il programma SFT.EXE il quale su una macchina dedicata fa:
USE manut
DO WHILE !eof()
        IF EMPTY(manut_rec()
            STORE man_dbf TO cMandbf
            USE &primario
            USE &secondario
            compara(primario, secondario) // vedi sotto..
            ..chiudi tabelle primario e secondario
            SELECT manut
            REPLACE manut_pas WITH  DTOS(DATE())+TIME()
        ENDIF
        SKIP
ENDDO
FUNCTION compara(da_file, a_file)
FOR nc = 1 TO FCOUNT()
    cam_da = da_file + "->" + FIELD(nc)
    cam_a  = a_file  + "->" + FIELD(nc)
    IF &cam_a <> &cam_da
       IF reclock()
          REPLACE &cam_a WITH &cam_da
          DBCOMMIT()
          DBRUNLOCK()
       ENDIF
    ENDIF
NEXT nc
RETURN 0