Stapelverarbeitung, auch Batchverarbeitung genannt, ist ein Begriff aus der Datenverarbeitung und bezeichnet die Arbeitsweise von Computerprogrammen, bei der die in einem oder mehreren Datenbeständen als Eingabe bereitgestellte Menge an Aufgaben oder Daten vollständig, automatisch und meist sequenziell verarbeitet wird.
Die komplementäre Bearbeitungsform wird Dialogverarbeitung genannt. Dabei verarbeitet das Programm genau einen Vorgang (eine Transaktion), der in der Regel von einem Benutzer interaktiv über einen Bildschirmarbeitsplatz zur Bearbeitung angestoßen wird. Danach wartet das Programm auf weitere Transaktionen; evtl. parallel eintreffende Aufträge muss es nacheinander bzw. voneinander getrennt verarbeiten.
Die Bezeichnung Stapelverarbeitung stammt aus der Anfangszeit der Datenverarbeitung, als interaktive Verarbeitung noch nicht möglich war. Datensätze lagen damals häufig in Form von Lochkarten vor und wurden vom jeweiligen Computerprogramm – dessen Programmcode oft ebenfalls als Lochkartenstapel vorlag – als Kartenstapel (englisch batch) nacheinander abgearbeitet. Als später die Lochkarte von anderen Speichermedien, z. B. Magnetbändern und Plattenlaufwerken, abgelöst wurde und auch interaktives Arbeiten mit dem Dialogcomputer möglich wurde (mit direkten Eingaben über ein Terminal), blieb der Begriff erhalten und wird bis heute für nicht-interaktive Datenverarbeitung verwendet: Man gibt einen Auftrag vor; dieser wird vom Computer mit allen dazugehörenden Daten „ohne Eingriff des Benutzers der Reihe nach abgearbeitet“.[1][2] Auch die Arbeitsergebnisse liegen bei dieser Verarbeitungsform i. d. R. als ‚Menge‘ (ebenfalls englisch batch) vor, zum Beispiel als Belege, Listen (Berichte), neue oder geänderte Datenbestände usw.
Der Begriff Stapelverarbeitung hat zwei voneinander abweichende Bedeutungen:
In der kommerziellen Datenverarbeitung bezeichnet Stapelverarbeitung das automatische, sequentielle und vollständige Abarbeiten der in einer oder mehreren Eingabedatei(en) enthaltenen Daten. Das Programm läuft dabei nach dem Start vollkommen selbstständig und i. d. R. ohne jegliche Benutzerinteraktion ab; Ausnahmen könnten z. B. Fehlersituationen mit der Notwendigkeit von Operator-Eingriffen sein. Es stellt seine Ergebnisse in Form von Dateien oder (über Insert / Update / Delete) in Datenbanken oder über andere Ausgabegeräte (z. B. Drucker) zur Verfügung.
Die Struktur von Stapelprogrammen folgt häufig standardisierten Konzepten, zum Beispiel der normierten Programmierung, weil der Ablauf in der internen Verarbeitung – bis auf aufgabenspezifische Details – identisch oder ähnlich sein kann.
Der Begriff Stapelverarbeitung wird häufig auch für das Abarbeiten betriebssystemnaher Dienste und Aufgaben verwendet. In diesem Zusammenhang ist v. a. durch DOS auf dem PC (MS-DOS, nach dem Erfolg des IBM PC mit dem nahezu identischen PC DOS), der Begriff Stapelverarbeitungsdatei, von englisch Batch File (daher auch oft Batch-Datei), bekannt geworden. Stapelverarbeitungsdateien sind technisch gesehen Textdateien, die eine Reihe von Befehlen enthalten. Bei der Ausführung einer Stapelverarbeitungsdatei werden die enthaltenen Kommandos zeilenweise vom Befehlsinterpreter des jeweiligen Betriebssystems abgearbeitet.
Prinzipiell können alle Kommandos, die auf der Befehlszeile (auch Eingabeaufforderung oder Prompt) des Kommandozeileninterpreters – der Shell – möglich sind, auch in einer Stapelverarbeitungsdatei angewendet werden, und umgekehrt. Damit hängen die Skript-Fähigkeiten einer Batch-Datei direkt vom verwendeten Interpreter der aktiven Shell ab. Das Äquivalent von Stapelverarbeitungsdateien unter Unix-Betriebssystemen sind Shellskripte. Insgesamt findet der Begriff Skript anstelle von Stapelverarbeitungsdatei für diese Art der Verarbeitung immer mehr Verwendung, wie beispielsweise PowerShell-Skripte.
Das Starten von Anwenderprogrammen zur Stapelverarbeitung geschieht über sog. Jobs, die von Systemdiensten zur Job-Steuerung verwaltet werden. Je nach Betriebssystem werden diese Dienste unterschiedlich genannt.
Zur Steuerung sind Steuerinformationen nötig, die (z. B. auf IBM-Betriebssystemen) mittels JCL hinterlegt werden. Inhalt dieser Vorgaben sind in erster Linie die jeweiligen Programmaufrufe, ggf. erforderliche Parameter, die Namen (mit Pfad- und Laufwerksangabe) für zu verarbeitende und zu erzeugende Dateien etc. Das Job-Steuerungssystem verwaltet die Jobs und startet sie zu einem definierten Zeitpunkt und/oder nach einem (vorher eingetretenen) Ereignis, z. B. dem erfolgreichen Ende eines vorher ausgeführten Programms. Batch-Jobs werden daher oft lastoptimierend eingesetzt, d. h. dann bearbeitet, wenn wenig interaktive Arbeit anfällt (nachts, am Wochenende). Dies kann gleichermaßen für Anwendungsprogramme und für Systemprogramme (z. B. zur Datensicherung) zutreffen.
Die Verarbeitung von Batch-Jobs war lange eine Domäne von Mainframes. Auf Systemen, die unter dem IBM-Betriebssystem z/OS (vormals MVS) laufen, werden sie normalerweise durch eine Steuerungssoftware (z. B. OPC) gesteuert, können aber auch durch einen TSO-Benutzer oder einen bereits laufenden Job oder eine sogenannte Started-Task ausgelöst werden.
Bei z/OS sind Batch-Jobs in JCL geschrieben und normalerweise in einem Partitioned Data Set (JCL-Library) mit Recordformat FB und Recordlänge 80 abgelegt. Eine Art von 'Schachtelung' ist durch die Verwendung katalogisierter Prozeduren möglich. Administrative Arbeiten, welche bei Unix mittels Shellskripten durchgeführt werden, werden bei z/OS heutzutage sehr oft mit REXX-Skripten unter TSO durchgeführt. Die Batch-Jobs werden in erster Linie für automatisierte Verarbeitungen (oft Massenverarbeitungen) eingesetzt. Das Betriebssystem enthält zur Jobsteuerung ein Job Entry Subsystem JES2 oder JES3.
Batch-Jobs analog zu denen der z/OS-Mainframes sind inzwischen auch auf Unix-basierten Servern möglich und insbesondere im Hochleistungsrechnen auch üblich. Hierzu werden spezielle Batchjob-Scheduler verwendet, die insbesondere die Herausforderungen von programminterner Parallelität handhaben können. Einfache Stapelverarbeitung ist mittels Cronjobs auf Unix/Linux denkbar.
Unter dem Betriebssystem OpenVMS werden Batch-Jobs, die z. B. mittels der Kommandosprache DCL programmiert werden können, durch sogenannte Batch-Queues unterstützt. Diese Queues können auf vielseitige Weise eingerichtet werden und sorgen für eine automatisierte Abarbeitung der Batch-Jobs.