Große Datenmengen in DB-Tabelle einfügen

gamma_matrices

Cadet 4th Year
Registriert
Sep. 2018
Beiträge
121
Hallo zusammen,

ich möchte eine externe Liste bestehend aus > 50k Datensätzen, in eine Oracle SQL DB-Table einfügen.
Habt ihr Idee(n), welche Methode hierbei zielführend wäre?
Vielen Dank im Voraus!
 
So viele Möglichkeiten gibt's da doch nicht :confused_alt:

Code:
INSERT INTO table_name (column1, column2, column3, ...)
VALUES (value1, value2, value3, ...);
 
Aber doch nicht bei > 50k Tupeln!
Ich suche ja nicht den Weg des Infanteristen , sondern eher eine effektivere Methode.
Diese Menge zu Fuß zu absolvieren, viel Spaß beim kollabieren.:D
 
Man kann sich bestimmt ein Skript basteln der das alle generiert, vermutlich gibts auch Tools dazu die das umwandeln.
 
Gibts verschiedene Wege (mache ich übrigens fast täglich auf viele verschiedene Arten in verschiedene Datenbanken ;) ).

Für Dich würde wohl der sqlldr der einfachste Weg sein. Dateien als CSV Format erstellen, und dann per sqlldr in die passende Datenbank reinladen. Achtung, ich habe mit der neuen Version 19c verlinkt. Du solltest natürlich die Doku für Dei Datenbankversion passend wählen (11g, 12g, 18c-19c).

Und 50k Dateien sind nicht groß. ;)
 
  • Gefällt mir
Reaktionen: Hayda Ministral und Tornhoof
Wegen 50k Einträgen würde ich nicht mit Extra-Tools umeinandermachen, eine Transaktion auf, 50k insert statements, und gut ist. Das ist echt pillepalle für jede moderne DB. Wenn es wirklich viele Daten werden gibt es so Sachen um das schneller zu machen, aber bei 50k Einträgen reden wir hier von paar Sekunden...
 
  • Gefällt mir
Reaktionen: BeBur
gamma_matrices schrieb:
Aber doch nicht bei > 50k Tupeln!
warum nicht, hab ich auch schon gemacht..
mit excel schön daten und dann inserts zusammngebastelt :D

und am Ende ein schönes
"Returning ID;" dann kannst nochmal checken ob alles gefunzt hat oder für weiteren import bekommst so die neuen id's.
 
Excel-Tabelle:

ABCDE
INSERT INTO tabelle (spalte_x) VALUES (wert_y);

und runterziehen.
 
PHuV schrieb:
Gibts verschiedene Wege (mache ich übrigens fast täglich auf viele verschiedene Arten in verschiedene Datenbanken ;) ).

Für Dich würde wohl der sqlldr der einfachste Weg sein. Dateien als CSV Format erstellen, und dann per sqlldr in die passende Datenbank reinladen. Achtung, ich habe mit der neuen Version 19c verlinkt. Du solltest natürlich die Doku für Dei Datenbankversion passend wählen (11g, 12g, 18c-19c).

Und 50k Dateien sind nicht groß. ;)
Stimmt, das wäre möglich als CSV mit sqlldr zu importieren.
Muss man mit Performance-Einbußen dabei rechnen?

Evt. noch alternative Ideen (außer ein Batch-Skript)?
Und ja hast recht ~ 50k ist jetzt nicht massiv :D
 
gamma_matrices schrieb:
Aber doch nicht bei > 50k Tupeln!
Als ob die Datenbank das jucken würde. Wenn ich hier ein Backup wieder einspiele, sind das mehrere Millionen INSERTs am Stück. Dauert natürlich etwas, aber ich muss ja nur Enter drücken und kann dann was anderes machen.

Schau dir doch mal die Ausgabe von z.B. MySQLWorkbench an, wenn man eine Datenbank exportiert. Das sind einfach nur aneinandergereihte INSERTs. Warum sollte man es anders machen?

Wenn du CSV nimmst, werden die CSV Zeilen auch wieder zu INSERTs konvertiert.
 
man kann wohl auch direkt csv dateien oder so importieren, kommt immer darauf an was für einen geschickter ist.
 
Anteru schrieb:
Wegen 50k Einträgen würde ich nicht mit Extra-Tools umeinandermachen, eine Transaktion auf, 50k insert statements, und gut ist. Das ist echt pillepalle für jede moderne DB. Wenn es wirklich viele Daten werden gibt es so Sachen um das schneller zu machen, aber bei 50k Einträgen reden wir hier von paar Sekunden...
Ich habe mit Transaktion auch schon überlegt gehabt, aber welche Trans könnte man da am besten nehmen? Und wenn ich jetzt viel größere Datenmenge hätte (> 10^6), was wäre denn hier die Variante?
 
Regel, Du nutzt einfach die Tools, welche Dir die jeweilige Datenbank zur Verfügung stellst. Und wir importieren mit dem sqlldr jeden Tag 60-100 GB an Daten. Klar, die Datenbank sollte performant sein, aber wenn sie entsprechend ausgestattet ist, geht das ohne Schwierigkeiten.
 
Richtig. Wenn es wirklich viele Daten sind, dann die entsprechenden Tools verwenden. Wenn es aber nur um 5 Sekunden geht, noch mal überlegen ob das nicht akzeptabel ist :) Mir gings ja nur drum klar zu machen, dass "groß" sehr relativ ist.
 
  • Gefällt mir
Reaktionen: BeBur
edit: das was über mir schon steht.
50k ist nicht viel, mach wie du lustig bist.
 
Alternativ kann ich noch "DBeaver" empfehlen. Dort eifach VErbindung einrichten, Datei importieren und auswählen wohin die importiert werden soll.

50k Einträge sind nicht wirklich viel, mit DBeaver importiere ich teilweise bis zu 5Mio Zeilen absolut problemlos.
 
Hej.
Mit dem Oracle SQL Developer.
Eine Verbindung zur Datenbank herstellen , dann unter Tabellen rechter Mausklick auf die entsprechende Tabelle und Daten importieren...Assistent folgen
oder rechter Mausklick auf Tabellen und Daten importieren
Gruß
Ergänzung ()

Oder je nachdem wie Deine Berechtigungen auf Server und DB aussehen, eine externe Tabelle über die Liste/Datei legen (nutzt sqlloader Technologie) und dann kannst Du auch ein Insert into select spalte1, spalte2 ... from externaltable absetzen
 
Zuletzt bearbeitet:
Zurück
Oben