Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Firebird DB von 2.x nach 2.5 ohne character_set und collate (https://www.delphipraxis.net/160071-firebird-db-von-2-x-nach-2-5-ohne-character_set-und-collate.html)

dataspider 26. Apr 2011 15:17

Datenbank: Firebird • Version: 2.5 • Zugriff über: egal

Firebird DB von 2.x nach 2.5 ohne character_set und collate
 
Hi,

ich möchte eine DB von FB 2.1 nach 2.5 migrieren.
Da man in 2.5 das default character set und auch die default collation global definieren kann,
hätte ich das ganze aus den Domain - und Tabellendefinitionen entfernt.

Leider geht das IMHO auch mit IBExpert nicht.
Mit extract metadata wird zwar character_set aus Domains und Tables entfernt.
Dafür steht aber im Script bei der Definition der Domains collate de_de.
Zusätzlich wird das collate de_de auch noch bei der Felddefinition angehangen, obwohl ich nur mit Domains arbeite und die collation dort ja shon definiert ist.

Bevor ich mich jetzt an die Arbeit mache, ein Programm zum Anpassen des Scripts zu schreiben, frage ich mal nach, ob jemand ein anderes Tool kennt, welches das leistet (oder halt einen anderen Weg).

Frank Reim

mquadrat 26. Apr 2011 16:34

AW: Firebird DB von 2.x nach 2.5 ohne character_set und collate
 
Suchen und ersetzen?

dataspider 26. Apr 2011 18:23

AW: Firebird DB von 2.x nach 2.5 ohne character_set und collate
 
Zitat:

Zitat von mquadrat (Beitrag 1097047)
Suchen und ersetzen?

Das war mein erster Gedanke. Aber ich kann nicht alles ersetzten, es gibt Stellen (meist SP' s), da ist es so gewollt.
Also nur mit Bestätigung - und es sind bestimmt über 1000 Einträge.

Aber da das Script schön in Blöcke eingeteilt ist, scheint es doch nicht so aufwändig.

Ich schreib einen kleinen Parser - das geht schon.

Aber - Danke

Frank

Alfredo 26. Apr 2011 19:53

AW: Firebird DB von 2.x nach 2.5 ohne character_set und collate
 
Bevor Du nach 2.5 wechselst, solltest Du in der Firebird-Mailingliste
mitlesen. Es gibt noch einige Probleme mit 2.5.

Gruß
Alfred

dataspider 26. Apr 2011 20:08

AW: Firebird DB von 2.x nach 2.5 ohne character_set und collate
 
Zitat:

Zitat von Alfredo (Beitrag 1097100)
Bevor Du nach 2.5 wechselst, solltest Du in der Firebird-Mailingliste
mitlesen. Es gibt noch einige Probleme mit 2.5.

Gruß
Alfred

Ja, der Hinweis ist sicher richtig.
Ich warte evtll. noch auf die Version 2.51.

Da mein Zeitfenster für diese Aktion nicht gerade groß ist, muss der Ablauf durgetestet sein.
Bei der Umstellung auf 2.1 kann ich mich an einige Fallen erinnern (Sonderzeichen in Metadaten...).

Frank

IBExpert 26. Apr 2011 20:39

AW: Firebird DB von 2.x nach 2.5 ohne character_set und collate
 
Du kannst nachträglich den default character set in der Firebird db entfernen, in dem du einfach in der rdb$database das feld rdb$character_set auf Null setzt, dann werden beim extract metadata nicht nur collations, sondern auch immer character sets ausgegeben. Das liesse sich dann ggf leichter per suchen/ersetzen umstellen.

was du aber damit meinst weiß ich nicht, das passiert zumindest in der aktuellen version eigentlich nicht (zumindest nicht in meinem Test gerade).
Zitat:

Zusätzlich wird das collate de_de auch noch bei der Felddefinition angehangen, obwohl ich nur mit Domains arbeite und die collation dort ja shon definiert ist.

dataspider 27. Apr 2011 09:31

AW: Firebird DB von 2.x nach 2.5 ohne character_set und collate
 
Zitat:

Zitat von IBExpert (Beitrag 1097107)
was du aber damit meinst weiß ich nicht, das passiert zumindest in der aktuellen version eigentlich nicht (zumindest nicht in meinem Test gerade).

OK, Fehler von mir. Das collate steht tatsächlich in den Felddefinitionen.
Ich habe da wohl etwas geträumt.

Folgendes bezieht sich auf IBExpert und die Editoren (Domaineditor, Tabelleneditor).
Der Code ist der, den IBExpert vor dem Commit anzeigt:

Domain anlegen
Code:
CREATE DOMAIN D_VARCHAR_100 AS
VARCHAR(10) CHARACTER SET ISO8859_1
COLLATE DE_DE
Tabelle mit Feld
Code:
...
ALTER TABLE T_TEST
ADD BEZEICHNUNG D_VARCHAR_100
COLLATE DE_DE
Hier wird COLLATE DE_DE noch mal an die Felddefinition angehangen, obwohl das ja durch die Domain bereits festgelegt ist.
Das hätte ich jetzt anders erwartet. Aber vielleicht habe ich ja noch einen Denkfehler.
Das bedeudet, das das Extrahieren der Metadaten fehlerfrei arbeitet. Beim Erzeugen der Felder würde ich sagen, gehört das COLLATE DE_DE nicht hin.
[EDIT]
So, jetzt habe ich noch mal einige Tests gemacht.
Wenn man mit einem Tool wie IBExpert fast jeden Tag arbeitet, stellt sich dann schon mnal gewisse Blindheit ein.
Das Problem mit den collate in den Feldern entsteht dadurch, dass IBExpert die Collation aus der Domain beim Anlegen eines Feldes prinzipiell vorträgt. Man muss es dann halt bei jedem Anlegen eines CHAR/VARCHAR Feldes den Text aus dem Feld SOrtierung rauslöschen.
Ich hoffe, das Holger das Verhalten anpasst.[/EDIT]
Zitat:

Zitat von IBExpert (Beitrag 1097107)
Du kannst nachträglich den default character set in der Firebird db entfernen, in dem du einfach in der rdb$database das feld rdb$character_set auf Null setzt, dann werden beim extract metadata nicht nur collations, sondern auch immer character sets ausgegeben. Das liesse sich dann ggf leichter per suchen/ersetzen umstellen.

Das geht dann in der Tat einfacher.
Vielen Dank

Frank

[EDIT]

tsteinmaurer 27. Apr 2011 11:38

AW: Firebird DB von 2.x nach 2.5 ohne character_set und collate
 
Auch Firebird 2.1.x ist nicht Bug-Free und die Neuerungen in 2.5 sind schon sehr interessant für den Produktiveinsatz. :-D

lg,
Thomas

IBExpert 28. Apr 2011 10:02

AW: Firebird DB von 2.x nach 2.5 ohne character_set und collate
 
Zitat:

Zitat von dataspider (Beitrag 1097169)
Das Problem mit den collate in den Feldern entsteht dadurch, dass IBExpert die Collation aus der Domain beim Anlegen eines Feldes prinzipiell vorträgt. Man muss es dann halt bei jedem Anlegen eines CHAR/VARCHAR Feldes den Text aus dem Feld SOrtierung rauslöschen.
Ich hoffe, das Holger das Verhalten anpasst.[/EDIT]

Na das ist mal ein vorbildlicher Bugreport, hab ich auf Anhieb verstanden, wird auf jeden Fall kurzfristig angepasst.
Und als kleiner Workaround: mach einfach in deiner DB folgenden Update und schon sind die alle raus

Code:
UPDATE RDB$RELATION_FIELDS SET RDB$RELATION_FIELDS.RDB$COLLATION_ID=NULL
Background: Domain werden in RDB$FIELDS gespeichert, aber erst über RDB$RELATION_FIELDS den Tabellenfeldern zugewiesen, und da gibt es noch Möglichkeiten, Domaineigenschaften zu überschreiben. Der Tabellenfeldeditor in IBExpert macht das mit der Collate Anweisung bei Feldern auf Basis von Domains bisher immer ungefragt, aber zukünftig nicht mehr.

Vielen Dank für den Hinweis

dataspider 28. Apr 2011 13:42

AW: Firebird DB von 2.x nach 2.5 ohne character_set und collate
 
Zitat:

Zitat von IBExpert (Beitrag 1097371)
Na das ist mal ein vorbildlicher Bugreport...

... und ein vorbildlicher Support!

Vielen Dank auch für den Workaround. Das hilft mir wirklich sehr.

Frank Reim


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:08 Uhr.

Powered by vBulletin® Copyright ©2000 - 2022, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf