Delphi - Oracle adattáblák mentése és visszaállítása

forráskód letöltése
Készítünk egy komponenst, amely segítségével Oracle szerverünk megadott adattábláiról biztonsági mentést készíthetünk. A lementett adatok tömörítéséhez a WINRAR tömörítőprogramot használjuk.
A mellékelt példaprogram használatához a WINRAR programra is szükség van. A mellékelt példaprogram megnyitása előtt az OracleBackup.pas-ban lévő komponenst telepítenie kell a Delphi alá. Ehhez válassza a Component - Install Component menüpontot. A mellékelt példaprogramot a try – except blokkok miatt célszerű lefordítani és nem Delphi környezetből futtatni. A komponens nem használható olyan táblákkal, amelyek bináris mezőket tartalmaznak.
A komponenst Connection tulajdonságán keresztül kapcsolhatjuk hozzá egy ADOConnection objektumhoz. A komponens használatához aktív adatbázis kapcsolat szükséges.
Azoknak a tábláknak a nevét, melyeknek tartalmát el akarjuk menteni, fel kell sorolnunk a Tables property-ben. A táblák neveinek megadásánál meg kell adnunk a táblák elérési útját is. Pl.:
demo.price
A komponensnek az adatok elmentése és visszaállítása során szüksége van egy munkakönyvtárra, amelyet a TempDir property-ben adhatunk meg.
A komponens rendelkezik egy OnExecute eseménnyel, melynek tartalma minden egyes elmentett vagy visszaállított rekord esetén lefut.
TExecuteEvent = procedure(Sender: TObject; TableName: String) of object;
Az esemény TableName paraméterében az éppen feldolgozás alatt álló tábla nevét kapjuk meg.
Az adatmentést a Backup, a visszaállítást a Restore metódus végzi.
procedure Backup(FileName: String);
procedure Restore(FileName: String);
Mindkét metódusnak meg kell adnunk egy rar kiterjesztésű állományt. Adatmentés esetén a FileName paraméterben a létrehozandó RAR állomány elérési útját és nevét kell megadni. Visszaállításnál azt a rar állományt kell megadnunk, amelyből a biztonsági mentést vissza akarjuk állítani.
A Backup metódus működése
Egy for ciklus segítségével végigmegyünk a megadott adattáblákon, majd egy ADOQuery komponens segítségével, egyesével megnyitjuk azokat.
for i:=0 to FTables.Count-1 do begin
  Query.SQL.Clear;
  Query.SQL.Add('SELECT * FROM '+FTables[i]);
  Query.Open;
Létrehozunk egy új szöveges állományt, melynek első sorába elmentjük a tábla nevét.
AssignFile(f,FTempDir+IntToStr(i)+'.dat');
Rewrite(f);
WriteLn(f,FTables[i]);
Ezután végigmegyünk az adott tábla sorain, és az egyes értékeket „|” jellel elválasztva beírjuk a TEXT állományba.
while not Query.Eof do begin
  s:='';
  for j:=0 to Query.FieldCount-1 do
    s:=s+Query.Fields[j].AsString+'|';
  WriteLn(f,s);
Miután az összes megadott tábla tartalmát elmentettük, készítünk egy állománylistát a tömörítendő állományokról, melyet templist.txt néven eltárolunk.
Végül a WINRAR program segítségével tömörítjük az állományokat.
A Restore metódus működése
A Backup metódusban végrehajtott műveletsor ellenkezőjét kell végrehajtanunk.
Kicsomagoljuk a tömörített állomány tartalmát, majd mindegyiket megnyitjuk egyesével. Mentés során az állományokat folyamatos sorszámokkal láttuk el, ezért megnyitásukhoz használhatjuk a következő ciklust:
i:=0;
while FileExists(FTempDir+IntToStr(i)+'.dat') do begin
Az állomány első sorából kiolvashatjuk a tábla nevét.
A tábla teljes tartalmát töröljük.
Query.SQL.Add('DELETE FROM '+TableName+' WHERE 1=1');
A törlés után megnyitjuk az üres táblát, majd elhelyezzük benne a TEXT állományból beolvasott sorokat.
Tömörítés a Winrar-ral
A WINRAR programot parancssori üzemmódban használjuk fel.
A tömörített állományt az alábbi WINRAR szintaktikával hozzuk létre.
WINRAR m cél_állomány tömörítendő_állományok_listája
Az „m” azt jelenti, hogy a megadott állományok tömörítés után törlődnek. A cél_állomány a létrehozandó állomány nevét jelenti, míg az utolsó paraméterben egymás után, szóközökkel elválasztva, fel kell sorolnunk azokat az állományokat, amelyeket tömöríteni akarunk.
A kicsomagolás szintaktikája:
WINRAR e tömörített_állomány célkönyvtár