1. Willkommen im Forum für alle Datenbanken! Registriere Dich kostenlos und diskutiere über DBs wie Mysql, MariaDB, Oracle, Sql-Server, Postgres, Access uvm
    Information ausblenden

Allgemeine Frage - größerer Datentransfer zu Datenbankserver

Dieses Thema im Forum "Datenmodellierung, Datenbank-Design" wurde erstellt von Christoph1972, 14 Februar 2018.

  1. Christoph1972

    Christoph1972 Benutzer

    Hallo zusammen,

    ich muss eine größere Datenmenge (ca.5GB) aus einer Access Datei in eine Oracle Datenbank schaffen. Da das Schema der Datenbank anders ist als das der Access Datei, werde ich die Daten mit einem selbst gemachten Programm kopieren. Nun meine Frage: Kann ich alle Datensätze einfach nach und nach an den Server senden, oder sollte ich eine Verzögerung mit einbauen? Ich habe etwas Angst, das System zu überlasten, oder ist das kein Problem? Ab wann (ungefähr) wird so ein Transfer kritisch?

    Über eure Anregungen würde ich mich sehr freuen!

    Herzliche Grüße
    Christoph
     
  2. Dukel

    Dukel Datenbank-Guru

    Eigentlich müsste die Datenbank das in jedem Fall aushalten, der Transfer wird unter Umständen langsamer.
    Wo die Grenzen der DB liegen kann dir hoffentlich der Betreiber des Oracle Servers sagen. Der kennt das Sizing.
     
  3. drdimitri

    drdimitri Datenbank-Guru

    5GB sind bei einem normalem Server eine Sache von wenigen Minuten.
    Ich fürchte nur, dass dein ETL Programm uns da einen Strich durch die Rechnung machen könnte ;-)

    Empfehlung wäre, die Daten bereits im Zielformat als Text zu entladen und dann per sqlloader zu laden oder in der Oracle DB die Tabellen 1:1 abzubilden und dann die Transformation dort vorzunehmen und per SQL in die Zielstruktur zu laden.

    Welche Oracle Version verwendest du? Wie arbeitet denn Dein Programm?
     
    Walter gefällt das.
  4. Christoph1972

    Christoph1972 Benutzer

    Guten Morgen! :)

    Vielen Dank schon mal!

    Das hört sich doch schon mal nicht schlecht an!


    Inwiefern sollte das Programm da ein Strich durch die Rechnung machen?


    Serverseitig möchte ich das nicht erledigen, dafür kenne ich zu wenig SQL, ausserdem möchte ich die Komponenten aus dem Transformationsprogramm später weiterverwenden.


    11g

    Das Pogramm holt sich Datensatz für Datensatz mit Relations aus der Access Datei, dazu kommen noch Dokumente die komprimiert und als Blop gespeichert werden. Mit dem Programm sind bereits die ersten Komponenten für das eigentliche Programm entstanden, was ich aktuell entwickele.,

    Einen schönen Arbeitstag wünsche ich!
    Christoph
     
  5. drdimitri

    drdimitri Datenbank-Guru

    Wegen dem Satz:
    Das könnte dann etwas länger dauern als nur ein paar Minuten. Einzelsatzverarbeitung hat einfach mehr Overhead, alleine der Weg übers Netzwerk kann, je nach Anzahl der Zeilen, die Laufzeit signifikant erhöhen.

    Um das zu reduzieren sollte folgendes für die Migration gemacht werden:
    - Autocommit abschalten
    - Bindvariablen und Batchverarbeitung verwenden. In JDBC wäre das die addBatch Methode aus dem PreparedStatement
    - Commit nicht nach jedem Satz, sondern z.B. alle 1000 Sätze, pro Tabelle oder auch erst ganz am Ende sofern die Migration entsprechend stabil ist
    - Wenn Du einen OR Mapper verwendest, muss man evtl. ein wenig was umbauen um ihn zum BatchInsert zu überreden.

    Ich würd mal 10 oder 20 Tsd Sätze in das Testsystem migrieren, dann kann man schon mal eine erste Aussage machen, wie lange das dauert.
     
  6. Christoph1972

    Christoph1972 Benutzer

    Vielen Dank für die Infos!

    So wie es aussieht, ist die Access Datei der Flaschenhals. In der Haupttabelle befinden sich 56000 Datensätze, das abfragen dauert sehr lange. Die Abfrage mache ich mit c# & OleDbConnection. Ein "SELECT ID FROM Hauttabelle" dauert bereits 12 Sekunden. Da muss ich morgen mal forschen was da los ist.
     
  7. akretschmer

    akretschmer Datenbank-Guru

    Mal nachstellen:

    Code:
    test=*# create table bla(id int primary key, val text);
    CREATE TABLE
    test=*# insert into bla select s, md5(random()::text) from generate_series(1, 100000) s;
    INSERT 0 100000
    test=*# explain analyse select id from bla;
      QUERY PLAN   
    -----------------------------------------------------------------------------------------------------------
     Seq Scan on bla  (cost=0.00..1893.18 rows=105918 width=4) (actual time=0.021..23.220 rows=100000 loops=1)
     Planning time: 0.147 ms
     Execution time: 33.157 ms
    (3 Zeilen)
    
    Mal so als Richtwert bei 100000 Datensätzen: 33Millisekunden
     
  8. akretschmer

    akretschmer Datenbank-Guru

    Ist bei den 12 Sekunden noch der Transfer übers Netz dabei?
     
  9. Christoph1972

    Christoph1972 Benutzer

    Ich habe noch kein Insert gemacht. Nur die Access Abfrage haut schon so rein, möglicherweise ist etwas mit der Access Datei nicht ok!?
     
  10. akretschmer

    akretschmer Datenbank-Guru

    Kann ich nicht beurteilen, hab in meinem Leben erfolgreich alles von Microsoft vermieden.
     
  11. drdimitri

    drdimitri Datenbank-Guru

    Kunststück. Keine 3Mb in den Hauptspeicher zu schreiben. Was sollte da auch lange dauern? :p

    @Christoph1972
    Liegt die Access DB auf einem Netzlaufwerk oder ist die lokal auf dem Rechner?
    Sind die Binärdateien Teil der Datenbank oder werden die in deiner Anwendung dazugemischt?
     
    akretschmer gefällt das.
  12. Christoph1972

    Christoph1972 Benutzer

    Die Datei liegt auf einem Netzlaufwerk.

    Binärdaten sind Teil der bestehenden Daten, meine Programm wird später noch weitere dazu mischen.

    Ich werde heute versuchen, mit dem "Data Import Tool" des SQL Servers die Daten auf einen SQL Server zu kopieren, vielleicht geht das schneller. Damit wäre dann auch eine Migration von Server zu Server möglich.
     
  13. drdimitri

    drdimitri Datenbank-Guru

    Kopier die Access DB für die Migration auf deinen lokalen Rechner.
    Aus meiner altes Accesszeit weiß ich, dass hier die Laufzeiten extrem in den Keller gehen.
     
  14. Christoph1972

    Christoph1972 Benutzer

    Danke, das hat sehr geholfen! Aber dennoch bleibt die Access Datei der Flaschenhals bei der Geschichte, die Frage hier, in der ursprünglichen Form, hätte ich mir sparen können. :)

    Vielen Dank an euch für die nette Unterstützung!

    Herzliche Grüsse
    Christoph
     
Die Seite wird geladen...

Diese Seite empfehlen

  1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden