Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Schneller Zugriff auf Oracle-Datenbank (https://www.delphipraxis.net/127429-schneller-zugriff-auf-oracle-datenbank.html)

hsg 13. Jan 2009 06:31

Datenbank: Oracle • Version: 10 • Zugriff über: wird gesucht

Schneller Zugriff auf Oracle-Datenbank
 
Hallo,

Ich muss zur Zeit ein Konvertierungsprogramm schreiben, dass die Daten aus einer anderen Datenbank (ADS 8.1) in eine Oracle-Datenbank hinüberschaufeln muss. Die größte Tabelle bei dieser Konvertierung hat ungefähr 7 Millionen Datensätze und ist nur eine von vielen. Von daher suche ich eine Komponente, die es mir erlaubt möglichst schnell die Daten in die Oracle-Datenbank zu übertragen.

Bisher geprüft habe ich den Zugriff über ADO und die ODAC-Komponenten unter http://www.devart.com/odac
Habe auch kurz die Komponenten von von Allautomations mir angesehen, gefallen mir aber nicht so gut, da ich dort kein Tabellen-Objekt habe und alles über Querys abwickeln müsste.

Was könnt ihr noch empfehlen?

mkinzler 13. Jan 2009 06:40

Re: Schneller Zugriff auf Oracle-Datenbank
 
Zitat:

Habe auch kurz die Komponenten von von Allautomations mir angesehen, gefallen mir aber nicht so gut, da ich dort kein Tabellen-Objekt
Interessante Kombination TxxTable und schnell.
Mit den DevaArt-Komponenten für IB/FB habe ich sehr gute Erfahrungen gemacht. Zudem sollten diese im Oracle-Direct Modus sehr schnell sein

spaxxn 13. Jan 2009 06:49

Re: Schneller Zugriff auf Oracle-Datenbank
 
Ich könnte dir noch die SQL-Direct Komponenten enpfehlen.

Bernhard Geyer 13. Jan 2009 07:22

Re: Schneller Zugriff auf Oracle-Datenbank
 
Direkte SQL-Statements sind optimal. Aufbau eines preparet Statements und evtl. noch mehrere INSERTS in einem Execute abschicken und so ein paar Mio. Datensätze sind kein Problem.

Ach ja: Haben DevArt bei MySQL im Einsatz und sind damit zufrieden.

Sherlock 13. Jan 2009 07:50

Re: Schneller Zugriff auf Oracle-Datenbank
 
Ich habe mit den DOAs von AllroundAutomations nur gute Erfahrungen gemacht. Erklär doch bitte kurz, was ein Tabellenobjekt ist, vielleicht können die das ja doch.

Edith hats selber nachgelesen und kann gemäß diesem Artikel nur davon abraten, TTables zu verwenden: http://www.protech-ndh.de/Publikatio.../2/index.htm#2.
Und noch ein Edit:
Zitat:

You will have the most problems if you have used a "TTable approach". SQL Servers don't really like the TTable component, because its concepts are not really appropriate for SQL, which is a set oriented language. If you use the 10 TwwTables to navigate through large tables, then you will have to do some redesign...

------------------
Marco Kalter
Allround Automations
Sherlock

nahpets 13. Jan 2009 09:05

Re: Schneller Zugriff auf Oracle-Datenbank
 
Hallo,

für Altertümchen: Die TBatchCopy-Komponente der BDE, wenn's nur einmalig benutzt wird, halt ich das für ok, da pflegeleicht.

Ansonsten: Aus den Quelldaten Insertstatements erstellen und die in größerer Stückzahl zusammengefasst per ExecSQL ausführen. Wieviele da gleichzeitig ausgeführt werden können ohne Performanzprobleme zu bekommen, muss Du ausprobieren. Je nach System können es 10 oder 100 oder auch mal 1000(de) sein.

Per Insertstatements und ExecSQL hast Du den Vorteil, dass Du in einem Rutsch ja nicht nur eine Tabelle füllen kannst/musst, sondern jedes Statement Daten für eine andere Tabelle enthalten kann. Dadurch kannst Du bei der Befüllung eventuell zu beachtende Abhängigkeiten berücksichtigen.

hsg 14. Jan 2009 06:18

Re: Schneller Zugriff auf Oracle-Datenbank
 
Hallo zusammen,

erst einmal danke für die Hinweise. Also scheine ich mit ODAC-Komponenten schon mal gar nicht so schlecht zu liegen. Warum ich unbedingt ein Tabellen-Objekt haben möchte? Einfach aus Bequemlichkeit :) In der Zieldatenbank sind so viele Felder zu füllen, dass die dazu gehörigen Insert-Statements relativ lang werden. Zudem sind die Feldnamen dermaßen kryptisch, dass sich dabei garantiert mehr als ein Vertipper einschleichen würde. Mit dem Tabellen-Objekt lasse ich mir auch die entsprechenden Felder generieren, kopiere den gesamten Block und mit ein paar Replace-Operationen habe ich vom Compiler prüfbaren typsicheren Code stehen. Der ganze Source besteht damit aus einem dbZiel.Append(); jede Menge lesbarer Zuweisungen; und einem abschließenden dbZiel.Post()

Das ganze zu implementieren geht fix und scheint bei den ODAC-Komponenten auch recht performant zu sein.

mkinzler 14. Jan 2009 06:40

Re: Schneller Zugriff auf Oracle-Datenbank
 
Das Auslesen der Felder und Anlegen von SQL-Abfragen geht aber auch beim Dataset/Query unterstützt. Das ist also kein Grund für eine Tabellenzugriffskomponente.

mikhal 14. Jan 2009 08:14

Re: Schneller Zugriff auf Oracle-Datenbank
 
Verwende bei den ODAC die TSmartQuery, dort kannst du die Update-, Insert-, Delete-Anweisungen etc generieren lassen und bei Bedarf direkt im eigenen Editor bearbeiten.

Grüße
Michael

hsg 14. Jan 2009 11:12

Re: Schneller Zugriff auf Oracle-Datenbank
 
Danke für die Hinweise, werde ich mir in den nächsten Tagen mal ansehen.
Habe bisher nur mit XBAse-Datenbanken gearbeitet, daher geht mir das Satzorientierte noch etwas einfacher von der Hand. Werde aber Besserung geloben!

Gruß
Jörg


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:41 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