AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Firebird Trigger und CONSTRAINT
Thema durchsuchen
Ansicht
Themen-Optionen

Firebird Trigger und CONSTRAINT

Ein Thema von hanspeter · begonnen am 3. Jan 2013 · letzter Beitrag vom 4. Jan 2013
Antwort Antwort
Seite 2 von 2     12   
Benutzerbild von IBExpert
IBExpert

Registriert seit: 15. Mär 2005
646 Beiträge
 
FreePascal / Lazarus
 
#11

AW: Firebird Trigger und CONSTRAINT

  Alt 4. Jan 2013, 09:46
war vor ganz langer zeit mal ein externes programm, ist aber seit jahren im Menü oder per ibeblock script machbar
http://ibexpert.net/ibe/index.php?n=Doc.ExtractMetadata
http://ibexpert.net/ibe/index.php?n=...xtractMetadata

Wir haben im Moment regelmäßig bei Kundenprojekten mit Migrationen von Interbase nach Firebird zu tun, da nutzen
wir auch immer diesen Weg. Bei Interbase scheinen sich gewisse Stabilitätsprobleme zu zeigen, die auch durch
neue Versionen nicht behoben sind. Die Portierung auf Firebird ging oft einfacher als man denkt und hat bisher
immer die Stabilitätsprobleme behoben und ganz nebenbei auch noch erhebliche Geschwindigkeitsvorteile gebracht.

Wenn du also mit IBExpert einen Dump der DB als Script gemacht hast (geht mit Blobs aber nur in der Vollversion),
dann kannst du das jederzeit in jede andere Version von Interbase oder Firebird wieder einspielen. Mit ganz wenig
Aufwand lässt dabei zum Beispiel auch ein Teil der Daten ausschliessen oder vor dem einspielen Objektnamen per
searchandreplace verändern, falls man die doch mal zu lang benannt hat oder Schlüsselworte der Zielplattform
benutzt hat.

Um fehlerhafte Records zu finden kann man daher einfach die eigene Datenbank mit tools-extract metadata in ein
Script exportieren (auf den Seiten Metadata und Data alle Tabellen auswählen, auf den Options dann noch
die passenden Optionen anwählen, auf jeden Fall aber Extract Blobs sofern diese auch exportiert werden sollen.
Ganz oben in der Toolbar gibt es noch eine Option, wie das Script aufgebaut sein soll, ich nutze immer
"seperate files", bei der ein Pfad angegeben werden muss ).

Danach dann einfach in IBExpert im SQL Executive die Datei ibe$start.sql aus dem o.a. Pfad öffnen, die
create database anweisung so manipulieren, das diese nun auf die Ziel Plattform zeigt (also anderer Port,
andere Client DLL und/oder anderer Servername etc. )

Dann einfach mit F9 ausführen und warten ...

Wenn Fehler auftreten, dann seht Ihr die unten im Fehlerprotokoll, in dem Ihr mit rechte Maustaste alle Statements
in die Zwischenablage packen könnt, die probleme machen. Der effektivste Weg ist dabei, dann diese fehlerhaften
Daten in der Quelldb zu manipulieren, d.h. einfach löschen wenn möglich oder Foreign Keys zum Beispiel für
die Migration bereinigen. Meistens sind da bei Interbase Daten drin, die per Defintion zwar nicht drin sein
dürften, aber für die Migration muß das nun mal bereinigt werden. Die findet man meist aber mit so was wie
... select ... where not exists ...

Das IBExpert Extractmetadata Script erzeugt die Metadaten in zwei Schritten
-zuerst Create Table, generator, Prozeduren mit empty body usw
-Daten einspielen per insert
-am ende dann erzeugen der trigger, prozeduren mit Quelltext compilieren, Primary Keys, Foreign keys, indizes usw

Das Verfahren ist mti hunderten Datenbanken bei Kunden getestet und kann auch reproduzierbar gescriptet werden,
um das ganze auch mit bei Kunden installierten Datenbanken unattended zu machen, dafür gibt es weiterhin
eine Kommandozeileversion und eine DLL, die mit entsprechender Lizenz weitergegeben werden kann.

Bei sehr großen Datenbanken kann das Verfahren durchaus 3 bis 5 mal so lang dauern wie ein Backup/Restore,
bietet aber ganz andere Möglichkeiten, unter anderem die gleichzeitige Migration der Datenbank auf dialekt 3,
die Migration auf andere Charsets, auch auf UTF8, den Ownerwechsel ohne Systemtabellentricksereien, globale
Objektumbenennung usw.

Wir hatten Ende 2012 wieder ein Kundenprojekt, wo der Kunde mehrere hunderte Kundeninstallation umstellen musste,
das war nach einem Workshop und diversen hausinternen Tests beim Kunden problemlos durchgelaufen.

Solche Workshops machen aber meistens nur kundenspezifisch Sinn, da jeder Kunde nur die Sachen braucht, die
in seiner DB Ärger machen. Das kann man aber jederzeit selbst ausprobieren oder halt bei uns buchen


Gruß
Holger
Holger Klemt
www.ibexpert.com - IBExpert GmbH
Oldenburger Str 233 - 26203 Wardenburg - Germany
IBExpert and Firebird Power Workshops jederzeit auch als Firmenschulung
  Mit Zitat antworten Zitat
hanspeter

Registriert seit: 26. Jul 2003
Ort: Leipzig
1.350 Beiträge
 
Delphi XE2 Professional
 
#12

AW: Firebird Trigger und CONSTRAINT

  Alt 4. Jan 2013, 12:19
Danke für die ausführliche Anleitung.

Ich habe es inzwischen hinbekommen.

Ich weis nicht warum aber die Methode erst Datenbank erzeugen ohne Constraints und Trigger, dann die Daten übernehmen, dann Trigger und Constraints hat nicht funktioniert.
Aus irgendeinen Grund gab es dann beim Erzeugen der FOREIGN KEY jede Menge Fehler.
Ein Backup/Restore war auch nicht ohne weiteres möglich. Die aus IB übernommenen Metadaten sind nicht fehlerfrei.
(z.B. gleiche Feldnamen in unterschiedlichen Tabellen nicht mit der Tabelle spezifiziert, Schlüsselwörter als Feldname...)
Die Umstellung von SQL Dialekt 1 auf 3 brachte auch ein paar Probleme.

Ich habe das Problem jetzt so gelöst:

1. Ich erzeuge aus einem Script alle Datenbankobjekte außer den Triggern.
Also auch Constraint bzw. FOREIGN KEY.

2. Der Import erfolgt über IBDAC tabellenweise.
3. Die zu importierenden Tabellen habe ich in einer String-Array Konstante abgelegt und diese entsprechend der Constraints sortiert.
4. Die eine oder andere Fehlermeldung konnte ich durch Änderung der Tabellen Sortierreihenfolge beseitigen.

5. Da ich satzweise Kopiere kann ich fehlerhafte Sätze erkennen und auslassen.

Jetzt gelingt es mir die Datenbank von IB nach FB fehlerfrei zu kopieren.


Gruß
Peter
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 2     12   


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:09 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz