Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Firebird DB nach MySql portieren (https://www.delphipraxis.net/86533-firebird-db-nach-mysql-portieren.html)

DataCool 15. Feb 2007 12:56

Datenbank: Firebird • Version: 1.0.79 • Zugriff über: über BDE

Firebird DB nach MySql portieren
 
Hi Leute,

ich benutze momentan bei einem Projekt die oben genannte Firebird Datenbank.
Die Datenbank -Datei ist ca. 500 MB groß und es arbeitem ca.
2-10 User simultan übers Netzwerk auf der datenbank.

Umso größer die Datenbank wird, desto langsamer werden die Guis die auf die DB zugreifen.

Deshalb würde ich gerne mal zum Test bei mir das ganze lokal auf MySql umstellen,
jetzt stehe ich aber vor dem Problem wie ich meine Firebird Datenbank nach MySql portiere.

Das MySQL Migration Programm hat in der Quelldatenbank leider keine Firebird Datenbank zur Auswahl.
Und jetzt die Struktur von Hand anzulegen und die Daten dann per eigenem Programm rüber schieben wollte ich eigentlich vermeiden.

Hat jemand eine Idee ?

Greetz DataCool

mkinzler 15. Feb 2007 13:00

Re: Firebird DB nach MySql portieren
 
Mein Mercedes, welche ich mit meinem Fahrrad ziehe, ist mir zu langsam, deshalb kaufe ich mir jetzt einen Uno. :mrgreen:
Versuche mal die BDE zu beerdigen, den sie (das Fahrrad) ist das Problem.

DataCool 15. Feb 2007 13:05

Re: Firebird DB nach MySql portieren
 
Hi,

das die BDE das ganze ausbremst, weiß ich auch.
Ich muss die Datenbank aber so oder so nach MySql portieren!

Deshalb bleibt die oben genannte Frage bestehn ;-)

Greetz DataCool

mikhal 15. Feb 2007 13:09

Re: Firebird DB nach MySql portieren
 
Schau dir mal die Interbase Datapump an. Die sollte in beide Richungen Daten und auch Datenstrukturen pumpen können.

Grüße
Mikhal

DataCool 15. Feb 2007 13:32

Re: Firebird DB nach MySql portieren
 
Hi,

sieht ganz gut aus, leider lässt sich bei dem Tool nur bei der Source-DB die Art der Datenbank auswählen.
Target/Destination DB ist immer Firebied/Interbase.

Greetz DataCool

Hansa 15. Feb 2007 16:16

Re: Firebird DB nach MySql portieren
 
Entscheidend ist die MySql-Version und die wurde nicht genannt. 8) Habe mal eine FB-DB ins Internet gestellt. Provider hatte aber nur MySql 3 oder eher 4. Das ging ganz einfach. Lokal geht aber wohl genauso. Zuerst wird mit IBExpert die Tabellenstruktr mitsamt den Daten in Datei exportiert. Also auch die Data Tables auswählen. Diese Datei habe ich dann ins Internet verfrachtet. Eventuell ist es bei MySQL 5 anders, aber bei mir begann dann ein Trauerspiel (alles zusammen hat allerdings auch nur ca. 30 Min. gedauert). Das Importtool meckerte über irgendeinen Datentyp. Gut, eben ersetzen durch passenden.

Und dann gings erst richtig los. Alle Trigger rausschmeißen und die Generatoren gleich mit. Danach dann die ca. 100 SPs, glaube da war noch was mit foreign Keys. Koste es was es wolle : bei Fehlermeldung -> raus damit. Delete and forget. :gruebel: Die DB wurde dann von MySql akzeptiert ohne Fehler. Die ist heute noch im Internet zu besichtigen, aber sie ist wirklich sehr zu gebrauchen. Nämlich für nichts. :mrgreen:

Würde freiwillig niemals eine FB-DB durch MySql ersetzen. Lokal schon gar nicht. Wie mkinzler sagt, die BDE ist als Flaschenhals bekannt. Glaube kaum, dass MySql da was verbessert, eher umgekehrt.

DataCool 15. Feb 2007 16:27

Re: Firebird DB nach MySql portieren
 
Hi,

das Riesenproblem, was meine Geschihte so langsam macht, ist das ich bei meiner Firebird Version kein AutoInc habe.
Weiß nicht ab welcher Version das verfügbar ist.

Die Idee das ganze nah MySQL zu portieren kommt daher, das ich in ein paar Monaten mit der DB sowieso ins Web(MySQL) möchte/muss.

Greetz Datacool

mkinzler 15. Feb 2007 16:32

Re: Firebird DB nach MySql portieren
 
FB unterstützt autoinc mit Hilfe von Generatoren(Sequenzen) und einem Trigger/SP

hoika 15. Feb 2007 16:38

Re: Firebird DB nach MySql portieren
 
Hallo,

tja, AutoInc laesst sich ersetzen durch einen Trigger+Generator
http://www.ibphoenix.com/main.nfs?a=...&page=ibp_skip

Ich denke übrigens nicht, dass die Bde eine 500 MB Datenbank langsam macht
(ich habe hier eine mit ~ 1GB).
Abfrage dauert 2 Sec (jaja, kommt auf die Abfrage an).

Wenn ein Programm mit steigender Grösse (mehr Records) langsamer wird,
macht meist der Programmierer was verkehrt.

Ein paar Dinge zum probieren:
- FB 1.5 oder FB 2-0
- sql-monitor benutzen
- kein TTable, nur TQuery
- kein select *
- prepared queries
- stored procedures für grössere Sachen
- manuelle Transaktionen
database.starttransaction / database.commit

Ich gebe allerdings zu, dass ne mysql3 meist schneller
im Lesen ist, das wäre mir aber bei den ganzen anderen Vorteilen egal.


Ich würde erst mal feststellen, warum die App so langsam ist,
sonst kann es dir passieren, dass du nach einer aufwendigen Portierung
feststellst, "Die DB war es nicht"


Heiko

mkinzler 15. Feb 2007 16:40

Re: Firebird DB nach MySql portieren
 
Zitat:

Ich gebe allerdings zu, dass ne mysql3 meist schneller
im Lesen ist, das wäre mir aber bei den ganzen anderen Vorteilen egal.
Du meinst wohl Nachteilen. :-D

DataCool 15. Feb 2007 16:44

Re: Firebird DB nach MySql portieren
 
Hi,

das mit den Trigger/SP schau ich mir mal an.
Mein Problem bzw. der Arbeitsschritt der lange dauerd, ist eine Art Stapelverarbeitung wo ich 200-400 Datensätze per Insert in einen Table mit ca. 100.000 Datensätzen schreiben muss.
Und für jeden Datensatz den ich schreibe lesen ich vorher mit :

"Select max(pkfield) from tablename"

Das Maximum aus und erhöhhe um 1.

Greetz DataCool

Hansa 15. Feb 2007 16:55

Re: Firebird DB nach MySql portieren
 
Aha, hab ich mirs doch gedacht. :mrgreen:

Zitat:

Zitat von DataCool
ist das ich bei meiner Firebird Version kein AutoInc habe.
Weiß nicht ab welcher Version das verfügbar ist.
..
Die Idee das ganze nah MySQL zu portieren kommt daher, das ich in ein paar Monaten mit der DB sowieso ins Web(MySQL) möchte/muss.

Dann kriegst Du genau die oben beschriebenen Probleme. Übrigens : auch in neueren FB-Versionen wirst Du wohl vergeblich nach AutoInc suchen, weil das in IB/FB schon immer über Generator/Trigger gemacht wird. Und die fehlenden Trigger sind wohl auch ein in MySql lösbares Problem. Bei den SPs sieht allerdings sehr öde aus. Größere DB ohne SPs ? Kann man vergessen.

Falls die tatsächlich mit MySql 5 gehen (hast immer noch nicht die Version genannt :warn: ), dann geht das Trauerspiel direkt beim MySql-Hersteller weiter. Die wollen nämlich Kohle sehen, nachdem sie mit den alten kostenlosen Versionen eine gewisse Bekanntheit erlangt haben. Kenne keinen Provider, der bereit ist den geforderten Preis zu bezahlen. Das auf die paar MySql 5 Kunden umzulegen und aus 50 EUR/Mon. plötzlich Gebühren von 200 EUR zu machen ist wohl auch nicht sehr aussichtsreich. Folge : keiner hat MySql 5. Falls es einen gibt, der wird wohl sehr teuer sein. Vielleicht taucht ja mal ein bezahlbarer auf oder einer kommt auf die glorreiche Idee, FB als DB anzubieten.

Habe hier übrigens eine Anleitung liegen, wie man FB ins Internet kriegt. Dazu braucht man aber einen Root-Server. Der ist zwar auch vorhanden (da liegt jetzt meine MySql-DB) aber es sind doch einige Schritte nötig, damit die DB richtig geht. Bei Dir gibts sowieso wichtigeres : die BDE eliminieren. :mrgreen: :duck:

mkinzler 15. Feb 2007 16:58

Re: Firebird DB nach MySql portieren
 
Also die Installation von FB auf einem Linuxserver dürfte nicht das große Problem darstellen, sondern die Erlaubnis das zu dürfen.
Mit was soll die Web-Version entwickelt werden?

DataCool 15. Feb 2007 17:00

Re: Firebird DB nach MySql portieren
 
Hi,

eigener Windows Root-Server, habe auch noch MS-SQL Enterprise zur Verfügung und MySQL 5.
Die Lizenzen sind nicht das Problem.

Greetz DataCool

mkinzler 15. Feb 2007 17:04

Re: Firebird DB nach MySql portieren
 
Dann würde ich MSSQL nehmen oder FB manuell installieren.

hoika 15. Feb 2007 17:07

Re: Firebird DB nach MySql portieren
 
Hallo DataCool,

das mit dem select max() ist hoffentlich nur ein Scherz !!

siehe meinen Thread

"viele Generatoren auf einmal "holen""
Bei meinem Link (ibphoenix) ist auch der Code der StoredProc.

Ein Generator ist ein 32bit (Dialect) der 64bit Integer,
der mit gen_id einfach ausgelesen/erhöht werden kann.

mit select gen_id(generator_name,200)
wird der Generator im 200 erhöht
die neue Zahl und die 199 davor stehen als prim key für inserts zur Verfügung.


Heiko

Hansa 15. Feb 2007 17:09

Re: Firebird DB nach MySql portieren
 
Endlich. Ich glaubs trotzdem nicht. :mrgreen: Der Kerl hat ja alles zur Verfügung. Dann fange doch endlich an. Wie es geht habe ich bereits geschrieben. Schiebe die Rohdaten doch mal rüber ins Internet. Da sogar Trigger unbekannt sind dürfte es sich lediglich um kleinere Anpassungen handeln und deine DB läuft auf MySql 5. Die MySql-Lizenzfrage ist damit allerdings noch lange nicht geklärt !! Oder soll die DB nur im Internet laufen ?

Uff, roter Kasten geht wieder.

@Hoika : glaube Du bist im falschen Film. :mrgreen:

hoika 15. Feb 2007 17:12

Re: Firebird DB nach MySql portieren
 
Hallo Hansa,

wieso ? ;)
Ich bekomme für jeden neuen/alten Firebird-Nutzer
ein Bonbon.


Heiko

DataCool 15. Feb 2007 17:31

Re: Firebird DB nach MySql portieren
 
Hi,

die DB soll nachher nur noch im Inet laufen !

Bin schon dabei zu portieren ;-)

Allerdings codde ich mir jetzt zum portieren doch ein kleines Prog,
den wenn ich die Tablestrukturen incl. Daten exportiere, darf ich nicht nur die Datentypen ändern,
die " entfernen sondern auch bei jedem Float Wert "," durch "." ersetzen.

Greetz DataCool

DataCool 16. Feb 2007 13:49

Re: Firebird DB nach MySql portieren
 
Hi,

bin ich zu blöd ?

SQL-Code:

CREATE GENERATOR "GGEF_BUCHUNGEN";

CREATE PROCEDURE SP_NEW_KEY_GEF_BUCHUNGEN RETURNS (ID INTEGER)
AS
BEGIN
  ID = GEN_ID(GGEF_BUCHUNGEN, 1);
END
Dynamic SQL Error
SQL error code = -104
Unexpected end of command
Statement: CREATE PROCEDURE SP_NEW_KEY_GEF_BUCHUNGEN RETURNS (ID INTEGER)
AS
BEGIN
ID = GEN_ID(GGEF_BUCHUNGEN, 1)

hoika 16. Feb 2007 13:58

Re: Firebird DB nach MySql portieren
 
Hallo,

womit erzeugst du die SP ?
das "" beim Generator sollte weg.

Das sind 2 Anweisungen, also 2 Queries.

Benutzt du eine Scipt-Komponente ?
Dann muss das so aussehen:

SET TERM ^ ;
CREATE PROCEDURE bla
AS
BEGIN
Gen_id ;
END ^

SET TERM ; ^


Heiko

DataCool 16. Feb 2007 14:07

Re: Firebird DB nach MySql portieren
 
Hi,

ich benutze die IBConsole(Interactive SQL).

Den Generator habe ich vorher seperat erzeugt,
dieser wurde auch erfolgreich erstellt(oben nur die Meta-Daten vom Generator zur Vollständigleit).

Aber das :
SQL-Code:
CREATE PROCEDURE SP_NEW_KEY_GEF_BUCHUNGEN RETURNS (ID INTEGER)
AS
BEGIN
  ID = GEN_ID(GGEF_BUCHUNGEN, 1);
END
^^ Und das schlägt mit oben genannter Meldung fehl !

Greetz DataCool


Nachtrag: Mit der Term ^ Geschichte ist das Create jetzt durchgelaufen !!!

DataCool 16. Feb 2007 14:15

Re: Firebird DB nach MySql portieren
 
Hi,

kann ich die SP nicht wie bei MySQL mit :

SQL-Code:
CALL SP_NEW_KEY_GEF_BUCHUNGEN
In einer ganz normalen Query ausführen ?

Gretz DataCool

mkinzler 16. Feb 2007 14:18

Re: Firebird DB nach MySql portieren
 
Doch, nur wie ein ganz normaler Query:

SQL-Code:
Select * from <SP-Name>(<Params>);

DataCool 16. Feb 2007 14:21

Re: Firebird DB nach MySql portieren
 
Hi,

ok das funktionniert, allesdings bekomme ich als Rückgabewert nur ein Spalte ID mit Wert "null".

Der Generator zählt aber hoch !

Greetz DataCool

mkinzler 16. Feb 2007 14:25

Re: Firebird DB nach MySql portieren
 
SQL-Code:
CREATE PROCEDURE SP_NEW_KEY_GEF_BUCHUNGEN RETURNS (ID INTEGER)
AS
BEGIN
  ID = GEN_ID(GGEF_BUCHUNGEN, 1);
  suspend;
END

DataCool 16. Feb 2007 14:29

Re: Firebird DB nach MySql portieren
 
Hi,

dickes dankeschön an alle !

Greetz DataCool

DataCool 16. Feb 2007 14:34

Re: Firebird DB nach MySql portieren
 
Hi,

doch noch einne dumme Frage :

Wie ändere ich den Wert des Generators per SQL ?

Greetz DataCool

mkinzler 16. Feb 2007 14:38

Re: Firebird DB nach MySql portieren
 
SQL-Code:
Set Generator <name> to <wert>;
oder über dier Funktion GEN_ID()

DataCool 16. Feb 2007 14:42

Re: Firebird DB nach MySql portieren
 
:dp: :hello:

Nochmals danke an alle


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:43 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 by Thomas Breitkreuz