Zum Inhalt springen

Große datenmengen von oracle in acces db kopieren


MES_K

Empfohlene Beiträge

Hallo community...

... Ich beschäftige mich zur zeit mit dem kopieren von daten aus einer oracle datenbank nach access. Bis jetzt hab ich das mittels Dataset realisiert, welches mit hilfe eines oledbdataadapter die vorher erstellte acces db läd und dann anschließend die daten mittels oracledataadapter das dataset "aktualisiert" und anschließend wieder in access schreibt. Das funktioniert bei kleineren tabellen auch anstandslos. Jedoch bin ich heute auf das problem gestoßen, das bei großen tabellen (10000 datensätze und mehr) es

1. ewig dauert und sich der fortschritt nicht anzeigen lässt.

und

2. der speicherbedarf der anwendung enorm anwächst.

Nun meine frage: Wie würdet ihr das kopieren dieser daten möglichst effizient realiseren.

Link zu diesem Kommentar
Auf anderen Seiten teilen

das bei großen tabellen (10000 datensätze und mehr)

10000 datensätze sind nichts. du hast einen flaschenhals, der nciht durch die "menge" der daten entsteht.

Wie würdet ihr das kopieren dieser daten möglichst effizient realiseren.

OLE DB - auch über die klasse OleDbDataAdapter - ist ein guter weg. kannst du die relevanten codezeilen - inkl. performancerelevanter einstellungen des adapters - herzeigen?

der speicherbedarf der anwendung enorm anwächst.

access-DBs wachsen halt nun mal gerne auf unüberschaubare grössen, wenn viele daten geschaufelt werden, ohne dass die datenbank regelmässig komprimiert wird. stichwort: frontend/backend - die logik im frontend, die daten im backend - oder überhaupt das backend in der oracle lassen.

s'Amstel

Link zu diesem Kommentar
Auf anderen Seiten teilen

so, naja, jetzt bin ich schon zuhause.. und komm auch erst wieder am montag ins geschäft.

aber dann kann ich dir meine einstellungen posten. jedoch hab ich da nicht wirklich viel eingestellt. code kann ich dann auch posten.

naja, eigentlich sind unsere daten ja alle lokal auf dem oracle. jedoch schwirren bei uns interne anwendungen rum, die eben noch auf access aufsetzen. drum auch der gesamte aufwand.

ach ja. hab mein programm heute mal mit ner etwas größeren (400 000 datensätze) durchlaufen lassen... hat ja nur ne gute stunde gedauert und als ergebnis ne access db mit ca 170 mb geliefert :)

Link zu diesem Kommentar
Auf anderen Seiten teilen

aber dann kann ich dir meine einstellungen posten. jedoch hab ich da nicht wirklich viel eingestellt. code kann ich dann auch posten.

super, fein, da kann man mehr damit anfangen :)

naja, eigentlich sind unsere daten ja alle lokal auf dem oracle. jedoch schwirren bei uns interne anwendungen rum, die eben noch auf access aufsetzen. drum auch der gesamte aufwand.

diesen aufwand betreibe ich in meinem job die letzten 4 jahre - u.a. auch damit, access-datenbanken zu kippen und auf oracle und sql server aufzubauen. ich kenn das also.

ach ja. hab mein programm heute mal mit ner etwas größeren (400 000 datensätze) durchlaufen lassen... hat ja nur ne gute stunde gedauert und als ergebnis ne access db mit ca 170 mb geliefert :)

das hält sich ja direkt im rahmen. ich hab hier alte access-dbs um die 3,5 GB jede :D

Link zu diesem Kommentar
Auf anderen Seiten teilen

Soweit ich weiß gibt es in Oracle ein Tool das die Daten selber in die Access Datenbank schreiben kann, bei MSSQL heißt das Integration Services, den Namen bei Oracle kenne ich nicht genau. Du kannst aber auch die SQL Server Integration Services nehmen um die Daten aus Oracle nach Access zu pumpen.

Wenn es unbedingt ein Programm sein soll, machst du vermutlich was falsch. Ich Tippe du machst ein DataAdapter.Fill und kopierst das komplette Dataset in die Datenbank. Mach am besten einen DataReader auf die OracleDB und erzeuge für jeden gefundenen Datensatz ein Insert Statement das du direkt an Access gibst. Das ist nicht unbedingt schneller, braucht aber keinen speicher und du kannst den Fortschritt beobachten.

Link zu diesem Kommentar
Auf anderen Seiten teilen

@ Argbeil: ja, muss unbedingt ein programm sein, weil ich quasi nicht alle daten brauch, sonder nur daten, die mir bestimmte sql-abfragen liefern. Wenn das mit dem data-reader möglich ist, dann ist das wohl die lösung. Deine vermutung mit dataset.fill() stimmt. ich pump das bis jetzt in das ds rein... was natürlich zur folge hat, das das prog jede menge speicher frisst. Auf den speed kommt es mir in erster linie ja nicht an. sollte dann nur machbar sein, nen fortschritt erkennbar zu machen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ja, dann mach das doch so.

Wenn du vorher ein Count(*) auf die Datenmenge machst, kannst du abschätzen wie viele Datensätze kopiert werden sollen, dann kannst du sogar einen Fortschrittsbalken anzeigen.

Du machst eine OracleConnection auf und setzt ein OracleCommand ab, als Ergebnis bekommst du einen DataReader mit dem du über das Resultset iterrieren kannst, z.B. in einer while Schleife. In der Schleife fügst du jeden Datensatz händisch in Access ein, du solltest nur drauf achten die Connection zu Access erst zu schließen wenn du fertig bist.

Alternativ kannst du auch deine Dataset Version behalten und einfach in Blöcken zu 100 DataRows lesen/schreiben, das ist evtl. noch einfacher.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Wenn deine Access Datenbank viele Relationen zwischen den Tabellen aufweist, dann lösen die Inserts- und Update SQLs viel Traffic innerhalb der Microsoftschen ´DB-Verwaltung' aus, da alle Schlüssel auf die referentielle Intergrität überprüft werden. Bei großen Einfüge-Akltionen bzw. Aktualisierungen (ab ca. 50.000 Datensätzen wirds besonders schlimm).

Diesen Effekt kannst du minimieren, wenn du die Relationen für deinen Kopiervorgang aus der Access-DB löscht, und hinterher wieder neu erstellt.

Ciao

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...