![]() |
Datenbank: Firebird • Version: 2.1 • Zugriff über: IBDAC
Update Metadaten SQL
Hallo,
ich erzeuge eine FB Datenbank über einen von IBExpert ausgegebenen Script. Jetzt möchte ich bei Programmneustart diesen Script mit der aktiven Datenbank vergleichen und die vorhandene Datenbank updaten. (Es können nur Felder hinzukommen oder die Größe von Feldern wird geändert.) Ehe ich selbst anfange zu programmieren, kennt wer eine fertige Lösung? IBExpert z.B. vergleicht 2 Datenbanken und erzeugt daraus einen Differenzscript. IbExpert möchte ich bei dem Anwender aber nicht voraussetzen. Mit Gruß Peter |
Re: Update Metadaten SQL
Vergleiche die Systemtabellen
|
Re: Update Metadaten SQL
Zitat:
Die Datenbank ist auf dem User-Rechner nur einmal da, da gibt es keine zwei Systemtabellen zum Vergleich. Meine Frage ist, ob jemand ein Tool kennt, das auch etwas kosten darf, was mir einen Differenzscript zwischen aktueller Datenbank und einen Referenzscript erzeugt oder die Datenbank gleich modifiziert. Gruß Peter |
Re: Update Metadaten SQL
|
Re: Update Metadaten SQL
Hallo Hanspeter
für IBExpert existiert ein Plugin IBDatabase Comparer. Womöglich hilft Dir dieser weiter. Shalom Manfred |
Re: Update Metadaten SQL
Müsste dazu aber nicht IBExpert auch beim Kunden installiert sein?
|
Re: Update Metadaten SQL
Danke.
LiquiBase schaue ich mir mal an. Ich habe IBExpert als Vollversion. Da ist das Plugin dabei. Habe ich auch schon verwendet. Da werden zwei Datenbanken vergleichen und ein Differenzscript erstellt. Entweder nur für die Metadaten oder für Metadaten und Userdaten. Der Hintergrund meiner Frage ist übrigens nicht uninteressant. Ich habe FB Datenbanken bisher aus dem Programm heraus erzeugt. Mit D2009 aber Probleme mit der Anzahl der Proceduren und Strings in einem Unit bekommen. Jetzt habe ich auf Neuanlage über einen Script umgestellt. Diesen liefere ich auch als Update aus. Der Script wird von IBExpert erzeugt und hat in der 2. Quellzeile einen Standardeintrag. Dieser enthält Datum und Urzeit der Erzeugung. Dieses Datum schreibe ich in die Datenbank. Bei jedem Neustart lese ich aus dem Script diesen Zeitstempel aus und vergleiche ihn mit dem Datenbankeintrag. Ist der Script neuer soll automatisch ein Update erfolgen. Gruß Peter |
Re: Update Metadaten SQL
Hallo,
das macht man aber etwas anders. Führe eine DB-Nummer mit. Die Nummer sagte dir, welche Struktur die Tabelle hat. Jede neue Sache (Tabelle, Index usw.) bekommt eine neue höhere Nummer. Du liest die alte aus, und führst dann nur die "Neu"-Änderungen aus, z.B. über eine TXXScript-Komponente. Vorteil: Klappt mit jedem alten DB-Stand. Heiko |
Re: Update Metadaten SQL
Zitat:
Die Idee von Peter ist dann schon besser. Da gab es vor einiger Zeit einen Thread diesbezüglich: ![]() Shalom Manfred |
Re: Update Metadaten SQL
Zitat:
Die Datenbank wird etwa 4 Wochen vor einer Veranstaltung angelegt und 2 Wochen nach der Veranstaltung archiviert. Eine archivierte Datenbank muss 2 Jahre aufbewahrt werden und wird nur im Ausnahmefall nochmals benötigt. Oft kommt es vor, das aufgrund von Regeländerungen eine schnelle Änderung wärend der Veranstaltung notwendig ist. Dann schicke ich das geänderte Script. Alles andere muss automatisch ablaufen. Bei alten Datenbanken, welche nochmals benötigt werden, habe ich einen anderen Weg gewählt. Ich gebe die gesamte Datenbank als XML Dateien aus. Diese kann ich dann bei Bedarf in eine Datenbank mit neuer Struktur einlesen. Gruß Peter |
Re: Update Metadaten SQL
Warum in die Ferne schweifen wenn bexpert das alles kann
lege folgendes als datei comp.sql ab:
SQL-Code:
sämtliche Optionen sind hier beschrieben:
execute ibeblock
as begin create connection RefDB dbname 'localhost:c:\RefDB.fdb' password 'masterkey' user 'SYSDBA' clientlib 'C:\Program Files\Firebird\bin\fbclient.dll'; create connection CustDB dbname 'localhost:c:\KundenDB.fdb' password 'masterkey' user 'SYSDBA' clientlib 'C:\Program Files\Firebird\bin\fbclient.dll'; cbb = 'execute ibeblock ( LogMessage variant) as begin ibec_progress(LogMessage); end'; ibec_CompareMetadata(RefDB, CustDB, 'C:\CompRes.sql', '', cbb); close connection RefDB; close connection CustDB; end ![]() Ausführen kannst du das ganze mit ibescript.exe als batchdatei oder aus deiner applikation mit ibescript.dll auf jedem lizensierten Rechner, ibescript.exe comp.sql ibescript.exe compRes.sql und schon ist die DB angepasst Um das ausführen zu können brauchst du -entweder eine IBExpert Vollversion auf dem Rechner wo das uasgeführt wird, Kosten 189 Euro -oder eine Lizenz der IBExpert Servertools, kostet als Zehnerpack zur Weitergabe an Kunden 49,90 Euro pro Kunde ( ![]() -oder eine VAR Lizenz, dann kannst du das unbegrenzt weitergeben an alle Kunden In den Servertools sind noch weitere Sachen dabei, zum Beispiel Backup/Restore scheduler usw. Die komplette ibeblock Implementation ist ausgelegt für nicht beaufsichtigte Ausführung beim Endanwender. Kleiner Tip nebenbei: Mal eben Systemtabellen vergleichen reicht da nicht, weil diverse Abhängigkeiten aufgelöst werden müsssen und ggf vor dem Metadatenupdate die Objekt in der richtigen Reihenfolge zerstört werden müssen, um danach dann wieder erzeugt zu werden. Ein Kunde hatte mal so was ähnliches selbst programmiert und einen Fehler nicht berücksichtigt, daher liess sein Updateprogramm die DB ohne Fehlermeldung komplett ohne Indizes, Primärschlüssel und Fremdschlüssel zurück. Das man auf der DB nicht mehr arbeiten konnte kann man sich vorstellen. [edit=mkinzler]SQL-Tag eingefügt Mfg, mkinzler[/edit] |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:41 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz