gbak - Größe der Parameter begrenzt?

Forum für Fragen zu Firebirdeigenen Dienstprogrammen wie isql, gbak, nbackup, gfix, etc.

Moderator: martin.koeditz

Antworten
Stefan Petersen
Beiträge: 5
Registriert: So 7. Jul 2019, 12:34

So 7. Jul 2019, 21:09

Moin zusammen,

ich habe eine Software entwickelt die sämtliche Fotos von Digitalkameras etc. in einer Firebird-Datenbank in BLOB-Feldern speichert.
Für Backup und Restore nutze ich gbak über Batch-Dateien. Beim Backup ist mir nun aufgefallen
daß offenbar die Länge der übergebenen Paramet begrenzt zu sein scheint, auch eine andere
bzw. grössere Größe als in den Parametern S1 .. S8 angegeben (3G) wird nicht akzeptiert.
Dabei spielt es keine Rolle ob das OS nun 32 oder 64 bit ist, auf beiden Systemen wird gbak
in der Version WI-V2.5.6.27020 Firebird 2.5 ODS Version 11.2 eingesetzt.

Hat dazu jemand eine Idee oder sogar Abhilfe?

Vielen Dank im Voraus für Eure Bemühungen und viele Grüße aus dem hohen Norden

Stefan

Code: Alles auswählen

@ECHO OFF
ECHO *** Sicherung der Datenbank XXXIMG ***
ECHO.
REM Setzen der Umgebungs-Variablen
REM -------------------------------
REM PAR        > Parameter für GBAK
REM DB         > Datenbank-Datei
REM B1..B4     > Backup-Dateien
REM S1..S4     > Backup-Groessen
REM -------------------------------

SET PAR=-b -nt -v -user SYSDBA -password masterkey

SET DB=J:\SQL\XXXIMG.FDB

SET B1=I:\X1.GBK
SET B2=I:\X2.GBK
SET B3=I:\X3.GBK
SET B4=I:\X4.GBK
SET B5=I:\X5.GBK
SET B6=I:\X6.GBK
SET B7=I:\X7.GBK
SET B8=I:\X8.GBK
SET B9=I:\X9.GBK

SET S1=3G
SET S2=3G
SET S3=3G
SET S4=3G
SET S5=3G
SET S6=3G
SET S7=3G
SET S8=3G

gbak.exe %PAR% %DB% %B1% %S1% %B2% %S2% %B3% %S3% %B4% %S4% %B5% %S5% %B6% %S6% %B7% %S7% %B8% %S8% %B9%

ECHO Zurücksetzen der Umgebungs-Variablen
ECHO ------------------------------------
SET PAR=
SET DB=

SET B1=
SET B2=
SET B3=
SET B4=
SET B5=
SET B6=
SET B7=
SET B8=
SET B9=

SET S1=
SET S2=
SET S3=
SET S4=
SET S5=
SET S6=
SET S7=
SET S8=

ECHO **********************************************
ECHO *** Sicherung der Datenbank XXXIMG beendet ***
ECHO **********************************************
ECHO .
DIR I:\X*.GBK
Stefan Petersen
sp531561@gmail.com
Benutzeravatar
martin.koeditz
Beiträge: 104
Registriert: Sa 31. Mär 2018, 14:35

Mo 8. Jul 2019, 10:06

Hallo Stefan,

ich bin mir nicht sicher, ob dies überhaupt funktioniert. Die allgemeine Syntax für gbak lautet ja:

Code: Alles auswählen

gbak <options> -user <username> -password <password> <source> <destination>
Damit müsste auch klar sein, warum ab S1 nichts mehr verwendet wird. Oder habe ich etwas falsch verstanden?

Gruß
Martin
Martin Köditz
it & synergy GmbH
bfuerchau
Beiträge: 94
Registriert: Mo 7. Mai 2018, 18:09

Mo 8. Jul 2019, 11:34

Eine Größenbeschränkung der Parameter gibt es nicht.
Das Problem ist da eher der Command-Prozessor, dessen Kommandozeile begrenzt ist (ca. 125 Zeichen).
Um also den Aufruf zu verkürzen sollte man folgendes beachten:

Den Pfad zu GBAK in der Systemvariablen PATH hinterlegen, so dass GBAK ohne den vollständigen Pfad aufgerufen werden kann.
Zusätzlich in das Verzeichnis (Laufwerk und Pfad) wechseln (D:, CD <D:\Pfad>) , so dass der DBName ebenso ohne Pfad angegeben werden kann.

Alternativ kann man die Aufrufe auch per PowerShell durchführen, da gibt es dann keine Begrenzung der CMD-Zeile bzw. diese liegt dann bei 32KByte.
Stefan Petersen
Beiträge: 5
Registriert: So 7. Jul 2019, 12:34

Mo 8. Jul 2019, 13:05

Moin zusammen,

der Batch bzw. das gesamte Backup mit gbak funktioniert einwandfrei,
nur wenn ich die Backupdateien auf mehr als die derzeitigen aufteilen möchte
dann wird ein Teil der Parameter "verschluckt" und das Backup scheitert.

Insofern denke ich hat bfuerchau Recht, das Problem scheint wohl eher der
Command-Processor zu sein.

Wenn ich die Grössenangabe von 3G z.B. auf 8G setzen könnte wäre mir
schön geholfen, mir geht es nur darum die einzelnen GBK-Dateien nicht zu
gross werden zu lassen; derzeit hat die letzte Backupdatei kanpp 40 GB,
die Bachups werden später noch zusätzlich auf ein NAS kopiert.

Bisher habe ich noch keinen "Trick" gefunden die Größe von 3G zu erweitern.

Danke schonmal für Eure Bemühungen!

VG
Stefan
Stefan Petersen
sp531561@gmail.com
Benutzeravatar
martin.koeditz
Beiträge: 104
Registriert: Sa 31. Mär 2018, 14:35

Mo 8. Jul 2019, 20:20

Ok, kannte ich noch nicht. Wieder was gelernt.

Danke euch.
Martin
Martin Köditz
it & synergy GmbH
bfuerchau
Beiträge: 94
Registriert: Mo 7. Mai 2018, 18:09

Di 9. Jul 2019, 10:17

Hm, in den Backup-Parametern kann ich keinen Parameter finden, der überhaupt eine Segmentierung des Backups ermöglicht.
Ich würde dies u.U. dann in 2 Stufen machen:
1. Backup in 1 Datei
2. Split-Software einsetzen, die große Dateien zerlegen und wieder zusammenfügen kann.
Stefan Petersen
Beiträge: 5
Registriert: So 7. Jul 2019, 12:34

Mi 10. Jul 2019, 09:59

Moin!
Die Segmentierung wird über die als Umgebungsvariablen %Bn% für die Backupdatei
und %Sn% für deren Größe gesetzt, wobei "n" derzeit maximal 4 sein kann denn wie
im Titel des Threads ja schon angemerkst hatte ich die Vermutung dass die Größe
bzw. Anzahl der Parameter für gbak begrenzt sein könnte.
Du hast ja schon angemerkt dass das wohl eher ein Thema des Command-Processors
von Windows ist. (CMD.EXE, mit der Powershell habe ich es noch nicht getestet).

Wie schon gesagt, das Backup funktioniert mit dem Batch einwandfrei, auch der
entsprechende Restore-Batch.
Ich möchte einfach entweder mehr als die derzeit im Batch definierten Backup-Dateien
(%B1..%B4%) mit der offenbar maximalen Größe von 3G erstellen oder / und eine Größe
von mehr als 3G angeben können. Die max. Größe von 3G ist aber offenbar von
gbak vorgegeben, alle größeren Werte die ich probiert haben werden von gbak mit
einer Fehlermeldung quittiert.

VG
Stefan
Stefan Petersen
sp531561@gmail.com
bfuerchau
Beiträge: 94
Registriert: Mo 7. Mai 2018, 18:09

Mi 10. Jul 2019, 15:32

Ich würde da gar nicht lange rumfackeln und mir einen Filesplitter suchen, den man auch per Commandline automatisieren kann.
Angeboten wird da ja genug :) .
Stefan Petersen
Beiträge: 5
Registriert: So 7. Jul 2019, 12:34

Do 11. Jul 2019, 11:13

Moin,

ein Splitting-Tool wäre zwar auch noch eine Möglichkeit, allerdings wollte ich
so wenig Schritte wie möglich verwenden, denn auch beim Restore müssten dann
ja die Dateien erst wieder zusammengefügt werden ...

Soweit ich mich erinnere müsste das sogar mit dem Firebird eigenen Tool gfix
gemacht werden können.
Stefan Petersen
sp531561@gmail.com
Antworten