2016-03-25 11 views
0

Ich möchte die Daten aus der Oracle-Datenbank mit JDBC, aber mit Chunks wiederherstellen. Im Gegensatz zu MySQL und anderen Datenbanken erlaubt es Oracle nicht, nur eine Teilmenge der Zeilen aus einer Abfrage wiederherzustellen. Irgendein Vorschlag?JDBC abrufen Oracle-Daten in Chunks

Sollte es möglich sein, Java 8 API zu verwenden, um die JDBC zu streamen.

Ich versuche, eine Paginierung Implementierung zu verwenden. Die Seitennummerierung lädt jedoch immer alle Ergebnisse in resultset und das einzige, was Sie vermeiden, ist das Mapping.

Ich möchte 200'000'000 Datensätze in Brocken von 1'000'000 abrufen.

+0

Zeigen Sie den Code auf, was Sie versucht haben. –

+0

Was meinst du mit "nur eine Teilmenge der Zeilen wiederherstellen"? Oracle unterstützt die Point-in-Time-Wiederherstellung absolut, um eine Sicherung an einem bestimmten Punkt wiederherzustellen. –

Antwort

1

Ich denke, es gibt zwei Fragen in Ihrer Frage. 1. Wie man mit einer sehr großen Ergebnismenge (in Oracle) umgeht. 2. Wie paging (In Oracle).

Oracle unterstützt serverseitige Cursor, so dass Sie das Ergebnisset nicht wirklich pagen müssen, wenn es sehr groß ist. Es reicht aus, alles auszuwählen, was Sie brauchen und FET SIZE von 1 000 000 für Ihren JDBC-Treiber anzugeben.

Wenn Sie wirklich Paginierung verwenden möchten mit Oracle (dies ist die andere Frage)

Sie SELECT-Anweisungen und Seite von Zeilennummer verschachtelt verwenden können. Zuerst wählen Sie, was Sie wünschen.

select * 
    from (select /*+ FIRST_ROWS(n) */ 
    a.*, ROWNUM rnum 
     from (your_query_goes_here, 
     with order by) a 
     where ROWNUM <= 
     :MAX_ROW_TO_FETCH) 
where rnum >= :MIN_ROW_TO_FETCH; 
+0

Ich benutze die Oracle Abfrage mit Intervall wie Sie vorschlagen und es ist sehr langsam, wenn Sie zum Beispiel durch 200'000'000 Einträge in Brocken von 1'000'000 Schleife wollen. – ypriverol

+0

Ist die Abfrage langsam oder die Iteration? Sie müssen unterscheiden. Wenn es sich um die Iteration handelt, ist entweder Ihre Abrufgröße nicht korrekt eingestellt, oder Sie haben ein langsames Netzwerk. –

+0

Das Leistungsproblem, das ich vermute, ist auf der Serverseite, wenn wir von 100'000 auf 1'000'000 Intervall wechseln. Wenn wir dann die Probleme bei der Leistung beobachten, nehmen Sie sich ein paar Minuten Zeit, um die Daten abzurufen. – ypriverol