Effizient einfügen mehrerer Datensätze in oracle-db mittels Oracle-client
Habe ich C#-WCF/Winforms-Anwendung.Es fügt plus von 450.000 Datensätze in eine staging-Tabelle in der Oracle-Datenbank mit Oracle-Client-API und eine gespeicherte Prozedur mit einem einfachen insert-Abfrage.
Das dauert etwa 15 Minuten, zum einfügen von Datensätzen in die db und manchmal werden die Datensätze nicht eingefügt zu..geben alle Arten von timeout-Fehler bei der wcf-Seite.
Gibt es eine effiziente Art, das zu tun diese Einsätze?
Vielen Dank für das Lesen.
Hier ist mein code, funktioniert die Batchdatei einfügen:
OracleTransaction tran = null;
UpdateRowSource oldURS = this.cmd.UpdatedRowSource;
OracleCommand oldCmd = this.dbAdapter.InsertCommand;
int oldUBS = this.dbAdapter.UpdateBatchSize;
try
{
SetOutputParams();
this.OpenDBConnection();
tran = this.dbConn.BeginTransaction();
this.cmd.Transaction = tran;
this.cmd.UpdatedRowSource = UpdateRowSource.OutputParameters;
this.dbAdapter.InsertCommand = this.cmd;
this.dbAdapter.UpdateBatchSize = size;
this.dbAdapter.Update(data);
tran.Commit();
SetOutputParamValues();
}
catch (OracleException ex)
{
if (tran != null) {
tran.Rollback();
}
throw;
}
finally
{
this.CloseDBConnection();
this.cmd.Parameters.Clear();
this.cmd.UpdatedRowSource = oldURS;
this.dbAdapter.InsertCommand = oldCmd;
this.dbAdapter.UpdateBatchSize = oldUBS;
}
}
in C# verwenden zu werfen und nicht werfen ex oder Ihre StackTrace wird versaut: stackoverflow.com/questions/178456/...
ja, einverstanden, Davide.Ich werfen; statt.Danke.
ja, einverstanden, Davide.Ich werfen; statt.Danke.
InformationsquelleAutor user74042 | 2011-10-03
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die Schnellste Möglichkeit zum laden von Daten in eine Tabelle ist datapump (impdp-Dienstprogramm).
Ein weiterer schneller Weg ist SQL*Loader.
Wenn Sie wollen stick mit C#, Blick in bulk-Operationen.
Meine google-karma gefunden die folgenden Beispiele
InformationsquelleAutor Klas Lindbäck
Habe ich verwendet SQL*Loader Häufig von C# zu bulk-load records auf die Bühne.
Dem Fleisch der code geht so:
Das liefert die Ausgabe der Befehlszeile, aber Sie werden auch prüfen wollen, die erzeugte log-Datei für die Datensätze geladen und die Fehler-zählt etc..
InformationsquelleAutor manadart
Ich bin das einfügen einer Menge von Daten in einer Oracle-Datenbank gespeichert ist, die in Australien, weit entfernt von wo ich bin läuft die client-Anwendung in C#.
Hier ist die Zusammenfassung, wie ich bin, es zu tun. Es erstaunt mich, wie schnell ich stecken Hunderte oder Tausende von Datensätzen schnell mittels array-binding.
Dies ist nicht der exakte code, aber Sie bekommen die Idee:
Carlos Merighe.
InformationsquelleAutor Carlos A Merighe