sql-loader

___ answer9328656 ___

Tritt dieses Problem auch bei Verwendung einer DataTable als Quelle auf? Oder liegt es nur an der Verwendung eines IDataReader?

    
___ tag123oracle ___ Oracle Database ist ein Datenbankmanagementsystem mit mehreren Modellen, das von Oracle Corporation erstellt wurde. Verwenden Sie dieses Tag NICHT für andere Produkte von Oracle wie Java und MySQL. ___ tag123odpnet ___ Oracle Data Provider für .NET (ODP.NET) bietet einen optimierten ADO.NET-Datenzugriff auf die Oracle-Datenbank. ___ qstnhdr ___ OracleBulkCopy vs SQL * -Loader-Leistung ___ answer9169518 ___

Ich habe eine Antwort von Alex Keh, Oracle Product Manager, erhalten, dass Oracle "dieses Problem ebenfalls bemerkt hat. Wir prüfen, wie wir diesen Fehler beheben können."

Ich nehme an, dass OracleBulkCopy in der Antwort auf meine eigenen Fragen nicht gut als Bulk-Loading-Tool funktioniert. Zumindest nicht im Moment.

Ich werde SQL * Loader als alternative Lösung verwenden, da es keine ETA für die Fehlerbehebung gibt.

    
___ qstntxt ___

Ich sehe erhebliche Leistungsunterschiede zwischen OracleBulkCopy (ODP.NET) und SQL * Loader, wenn der Oracle-Server auf einem anderen Computer ist.

Ich habe eine sehr einfache Tabelle in Oracle mit drei Spalten (eine BINARY_FLOAT, zwei NUMBER (18,0)). Es gibt keine Primärschlüssel, Indizes, Trigger usw. Es wird als Staging-Tabelle verwendet, um Massendaten in die DB zu bekommen.

SQL * Loader benötigt etwa 27 Sekunden, um 4,5 Millionen Zeilen in die Tabelle zu laden.

OracleBulkCopy benötigt ungefähr 10 Minuten, um nur 1 Million Zeilen zu laden.

OracleBulkCopy, gemäß der Dokumentation, * "... verwendet einen Direct Path Load-Ansatz, der dem Oracle SQL * Loader ähnlich ist, aber nicht mit ihm identisch ist." * Es ist möglicherweise nicht mit SQL * Loader drin Begriffe der Leistung, aber dieser Unterschied ist lächerlich.

Nach einer grundlegenden Analyse des Netzwerkverkehrs habe ich festgestellt, dass die OracleBulkCopy eine große Anzahl kleiner Pakete gesendet und empfangen hat. Ich benutzte Wireshark, um die Pakete für jeden zu vergleichen und einige interessante Ergebnisse zu finden.

SQL * Loader sendet nach dem ersten Verbindungs-Handshake eine Reihe von 8 Kilobyte Paketen (TNS-Protokoll) und empfängt als Antwort 60 Byte ACKs .

OracleBulkCopy sendet eine Reihe von 102 Byte Paketen (TNS-Protokoll) und empfängt als Antwort ein 133 Byte Paket (TNS-Protokoll). Was zum...!? Es ist so, als würde es eine Reihe nach der anderen senden!

Mit der OracleBulkCopy-Klasse verwende ich eine Stapelgröße von 100.000 und verwende einen benutzerdefinierten IDataReader , um aus einer Datendatei zu lesen.

Meine Fragen sind also:

  • Hat jemals jemand dieses Verhalten gesehen?

  • Funktioniert OracleBulkCopy tatsächlich als Massenladewerkzeug?

  • Gibt es etwas, das ich konfigurieren muss, damit es richtig funktioniert? (Client / Server-Einstellungen usw.)

Jede Hilfe wird sehr geschätzt.

    
___ tag123sqloader ___ SQL * Loader ist ein Hochgeschwindigkeits-Dienstprogramm zum Laden von Daten, das Daten aus externen Dateien in Tabellen in einer Oracle-Datenbank lädt. ___ tag123net ___ Das .NET-Framework ist ein Software-Framework, das hauptsächlich für das Microsoft Windows-Betriebssystem entwickelt wurde. Es enthält eine Implementierung der Basisklassenbibliothek, Common Language Runtime (allgemein als CLR bezeichnet), Common Type System (allgemein als CTS bezeichnet) und Dynamic Language Runtime. Es unterstützt viele Programmiersprachen, einschließlich C #, VB.NET, F # und C ++ / CLI. NICHT für Fragen zu .NET Core verwenden. ___
2
Antworten

SQL Loader Fehler: "Das Feld für die variable Länge überschreitet die maximale Länge."

Ich habe eine SQL Loader Control-Datei, %Vor% und es gibt mir einen Fehler, wenn ich SQL Loader darauf ausführen, Record 1: Rejected - Error on table TEST, column FILENAME. Variable length field exceeds maximum length. Hier ist diese...
30.04.2012, 15:13
2
Antworten

OracleBulkCopy vs SQL * -Loader-Leistung

Ich sehe erhebliche Leistungsunterschiede zwischen OracleBulkCopy (ODP.NET) und SQL * Loader, wenn der Oracle-Server auf einem anderen Computer ist. Ich habe eine sehr einfache Tabelle in Oracle mit drei Spalten (eine BINARY_FLOAT, zwei NUMBE...
02.02.2012, 02:30