Blockweises Auslesen großer Datenmengen

Im Auslesevorgang werden alle Daten eines RFC-Aufrufs auf einmal mittels SAP JCo auf den Java-Client übertragen. Dadurch kann es bei großen Datenmengen zu Speicherüberläufen (OutOfMemoryError) kommen. Dies ist z. B. der Fall, wenn die Primärschlüssel der Beleg- und Belegkopftabellen ermittelt werden. In diesem Fall müssen die Daten zunächst im R/3-System zwischengespeichert und dann blockweise auf den Java-Client übertragen werden. Die Blockgröße wird mit dem Parameter -cpd angegeben. Es gibt drei verschiedene Blockmodi, die sich in der Art und Weise, wie die Daten im R/3-System zwischengespeichert werden, unterscheiden.

Blockmodus D

Zum blockweisen Auslesen großer Datenbestände aus dem R/3-System wird Modus D empfohlen. Die selektierten Daten werden in der Datenbanktabelle /IDS/INDX abgelegt. Bei einem Verbindungsabbruch zum Extraktor oder bei manuellem Abbruch des Extraktionsvorgangs werden die Daten nicht automatisch aus der Datenbanktabelle gelöscht. Die zwischengespeicherten Daten müssen Sie in diesem Fall manuell löschen. Dazu lassen Sie sich mit der Transaktion SE16 den Inhalt der Tabelle /IDS/INDX anzeigen. Markieren Sie dann alle gewünschten Einträge und löschen Sie sie über den Menüeintrag Alle löschen... im Hauptmenü Tabelleneintrag.

s_sap_6_sap_screenshot

Beispiel

Aus der Tabelle CDPOS (Änderungsbelegpositionen) sollen über eine Million Einträge ausgelesen werden. Ohne Verwendung des blockweisen Auslesevorgangs kommt es zum Überlauf des Java-Speichers und Abbruch des Auslesevorgangs.

Durch Ausführen der folgenden Kommandozeile werden die Daten blockweise ausgelesen (Blockparameter in Fettschrift):

runsap2ppm -systemconfig Systemconfig.xml -tableconfig TableconfigCDPOS.xml

-outfile eventsCDPOS -nozip -begindate 19700101 -rfc_blockmode D -cpd 10000

Durch Angabe des Parameters -rfc_blockmode mit dem Argument D starten Sie einen blockweisen Auslesevorgang, mit dem alle Daten aus der Datenbanktabelle CDPOS in die Ausgabedatei geschrieben werden. Mit dem Parameter -cpd legen Sie fest, wie groß die abzuarbeitenden Blöcke sein sollen. Im Beispiel werden 10000 Dokumente gleichzeitig bearbeitet. Der Vorgabewert ist 5000.

Der Fortschritt des blockweisen Auslesevorgangs wird vorgabemäßig protokolliert, z.B.: 

I: 09.05.06 11:30:38: [XML] Lese Daten aus...

...

...

I: 09.05.06 11:32:30: [XML] Tabelle "CDPOS":

10.000 von 1.036.995 Zeilen gelesen.

I: 09.05.06 11:32:30: [XML] Lese Attribute für

10000 Quellsystemevents...

I: 09.05.06 11:32:39: [XML] Tabelle "CDPOS":

20.000 von 1.036.995 Zeilen gelesen.

I: 09.05.06 11:32:39: [XML] Lese Attribute für

10000 Quellsystemevents...

...

Durch Angabe von -progress no können Sie die zusätzlichen Protokollmeldungen der Blockmodi über den Fortschritt des blockweisen Auslesevorgangs unterbinden.

Blockmodus G

Die selektierten Daten werden in einer internen Tabelle der Funktionsgruppe abgelegt. Die Daten werden im Speicher des R/3-Servers gehalten. Bei einem Verbindungsabbruch zum Extraktor oder bei manuellem Abbruch des Extraktionsvorgangs werden die Daten automatisch im R/3-System gelöscht. Die Angaben gelten ab SAP Release 4.7, d.h. ab SAP Kernel Release 6.10. 

Blockmodus M

Die selektierten Daten werden mit export to memory id im ABAP-Memory abgelegt. Die Daten werden im Speicher des R/3-Servers gehalten. Bei einem Verbindungsabbruch zum Extraktor oder bei manuellem Abbruch des Extraktionsvorgangs werden die Daten automatisch im R/3-System gelöscht. Die Angaben gelten ab SAP Release 4.7, d. h. ab SAP Kernel Release 6.10.