Bonjour,
dans un programme qui me sert à faire des backups d'une base de données firebird je procéde de la manière suivante pour vérifier quel est le dernier backup présent sur le disque dans le répertoire de sauvegarde
Pour explication le répertoire = CheminAlias
le nom du backup = AliasName
ce qui donne quelque chose comme ceci dans le répertoire
base_2017_06.fbk
base_2017_06_02.fbk
base_2017_06_03.fbk
base_2017_06_04.fbk
base_2017_06_05.fbk
...
en fin de mois (ou plutôt début du suivant) les fichiers du aaaa_mm_jj seront effacés N.B. je travaille à une suppression moins "agressive" qui garderai quand même n jours selon la date
pour rechercher quel est la date du dernier backup j'utilise ce code
Perso je ne vois pas ce qui pourrait clocher avec cette recherche pourtant j'ai un problème avec un utilisateur qui me dit qu'il n'a pas de fichiers fbk
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 function TDatasBackup.GetDernierBackup(AliasName : String): TDateTime; var info : TSearchRec; begin result:=0; { Recherche de la premiére entrée du répertoire } if FindFirst(CheminAlias+AliasName+'_*.fbk',faAnyFile,Info)=0 then begin repeat { uniquement les fichiers} if (Info.Attr And faDirectory)=0 then begin if info.TimeStamp>result then result:=info.TimeStamp; end; { Il faut ensuite rechercher l'entrée suivante } until FindNext(Info)<>0; {libérer les ressources de la recherche } FindClose(Info); end; end;
L'exploitation de cette date se retrouve dans la partie principale de mon programme
procédures d'effacement
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33 // récupération du dernier backup // YMB est un integer, YM aussi DecodeDate(Date,aa,mm,jj); YM:=aa*100+mm; DLB:=GetDernierBackup(Sections[i]); if Trunc(DLB)=0 then YMB:=0 else begin DecodeDate(GetDernierBackup(Sections[i]),baa,bmm,bjj); YMB:=baa*100+bmm; end; DebutDeMois:=YM>YMB; if DebutDeMois then DoFindeMois(Sections[i],DLB); // ce pourait-il qu'il y ait un problème possible ici ? if not FileExists(GetBackupName(Sections[i],Date)) then // en théorie si debut de mois getbackupname est sous la forme nom_An_mois, sinon nom_an_mois_jour begin FDIBBackup1.DriverLink := FDPhysFBDriverLink1; FDIBBackup1.UserName := F.ReadString(Sections[i],'User','SYSDBA'); FDIBBackup1.Password := DecodePWD(F.ReadString(Sections[i],'Password',''),Sections[i]); FDIBBackup1.Host := '127.0.0.1'; FDIBBackup1.Protocol := ipTCPIP; FDIBBackup1.Database := F.ReadString(Sections[i],'DataBase',''); FDIBBackup1.BackupFiles.Text:=GetBackupName(Sections[i],Date); FDIBBackup1.Backup; level:=0; end else level:=1; // par la suite il y a un nbackup, les nbackups existent (ou du moins sont fait selon RDB$BACKUP_HISTORY)
Le pire, dés que je mets mon nez sur son pc tout se fait correctement et refonctionne
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 procedure TDatasBackup.DoFindeMois(AliasName : String; DateFin: TDateTime); begin DoEffacer(Format('%s_%s-*.fbk',[AliasName,FormatDateTime('yyyy-mm',DateFin)])); end; procedure TDatasBackup.DoEffacer(Fichiers : String); var info : TSearchRec; begin if FindFirst(CheminAlias+Fichiers,faAnyFile,Info)=0 then begin repeat if (Info.Attr And faDirectory)=0 then DeleteFile(CheminAlias+info.Name); // todo moins agressif en fin de mois until FindNext(Info)<>0; FindClose(Info); end; end;son pc à peur de moi !
ou plutôt que fait-il avec ses fichiers fbk (il fait des copies sur un disque dur externe) qui empêche le bon déroulement ?
Difficile de faire un débogage sur un mois entier donc je fais appel à des yeux neufs qu'est qui pourrait clocher ?
Partager