SAP tableObjectBALDATModuleBASIS

BALDAT table — Application Log Data Table

BALDAT holds the serialized message and context data belonging to an application log header created via the SBAL application log framework (SLG1/SLG2). Each row is a packed data chunk keyed by LOGNUMBER, the same key used in BALHDR. It cannot be read meaningfully through SE16N; message content must be retrieved through the application log API or SLG1 display.

This page covers what BALDAT actually stores versus what it looks like in a raw table browser, the one reliable join back to BALHDR, and the recurring mistakes consultants make when they try to read log content or clean up log volume directly against this table. It also covers who owns the housekeeping question when the table grows large.

Published 15 Sept 2026· 1,003 words

What it stores

One row in BALDAT represents a chunk of serialized data belonging to a single application log entry created through the SBAL application log framework, the mechanism behind transactions SLG1 and SLG2. When a program calls the log-create and log-save function modules, a header row is written to BALHDR and the message texts, message parameters, and any attached context structures are packed into BALDAT under the same log number. The table is technically a pool or cluster table: its stored content is not organized as individual readable columns per message, it is a packed binary payload that the application log API unpacks on display. Consultants rarely query BALDAT for content directly; they query BALHDR to find the log they want, then let SLG1 or the log display function module render the actual text from BALDAT.

Key fields

Only two fields can be relied on for direct selection; everything else in the row is packed data, not discrete columns.

  • MANDT - client, always restrict on this before selecting
  • LOGNUMBER - the unique log number generated at log creation time, the join key back to BALHDR-LOGNUMBER
  • remaining row content - a serialized/packed data block holding message texts, parameters and context structures; there is no separate field name to select message text by, it must be unpacked through the application log API

How it joins the data model

The only join a consultant writes against BALDAT with confidence is back to the header table. Everything else about a log - who ran it, when, against which object and subobject, what severity - lives in BALHDR, not in BALDAT. Practical analysis therefore always starts in BALHDR and uses BALDAT only as the storage target that must exist for a log to display content.

  • BALDAT-LOGNUMBER = BALHDR-LOGNUMBER
  • BALDAT-MANDT = BALHDR-MANDT

How to read it safely

Never select from BALDAT without restricting on MANDT and, ideally, a specific LOGNUMBER or a LOGNUMBER range already obtained from BALHDR. The table can carry an enormous number of rows in systems where logging is left at a verbose level and the log deletion job is not scheduled, so a plain full scan can time out or hammer the database. Do not attempt to read message content in SE16N or SE16 - the payload shown is a raw string with no readable structure. The correct path is: query BALHDR with business criteria (object, subobject, date, user) to get the log number, then open that log through SLG1 or feed the log number into the application log load/display function modules.

How to prove it in the data

Symptom: a job or interface message says to check the application log, but SLG1 shows nothing for the expected time window. Select BALHDR by OBJECT, SUBOBJECT and the run's date/time to get the LOGNUMBER. If that LOGNUMBER exists in BALHDR but no rows exist in BALDAT for the same LOGNUMBER and MANDT, the log header was created but never saved through the save function module, so the message content was lost even though the header record survived.

ECC vs S/4HANA

BALDAT is unchanged moving from ECC to S/4HANA. The application log framework kept its original technical shape and was not exposed through a CDS compatibility view, because it is not designed to be queried by custom ABAP or reporting tools in the first place. The application log API and SLG1/SLG2 remain the supported access path in both releases; there is no alternate S/4-specific storage for the same data.

Common pitfalls

The recurring mistake is treating BALDAT as if it were a normal, human-readable table.

  • Opening BALDAT in SE16N expecting to read message text - the field shown is packed binary content, not text, and time spent trying to interpret it manually is wasted
  • Deleting rows from BALDAT directly (via SE14/SE16 mass delete) without removing the matching BALHDR header - this leaves orphan headers that appear as empty logs in SLG1 and skew any report that counts logs
  • Assuming table growth in BALDAT signals an application defect - in most cases it signals that the log expiry/cleanup job for the application log framework has not been scheduled, a housekeeping gap rather than a functional bug
  • Assuming BALDAT row volume tracks business transaction volume - some processes log every internal check at high verbosity, so row count reflects the configured log level, not real throughput
  • Running ad hoc selects without MANDT or LOGNUMBER restriction on a system where the table has accumulated years of unpurged logs, causing avoidable timeouts
  • Counting BALDAT rows per LOGNUMBER as a proxy for message count - the packing is internal and the row-to-message ratio is not fixed, so this count is unreliable; use the API's message count instead

Whose problem this is

Basis normally owns the housekeeping side of this table: whether the log deletion/cleanup job is scheduled and whether BALDAT is bloating the database. The functional or development team that originally wrote the log entries owns the content question: why a given run produced a particular message. A report of missing or empty log content should go to the process owner first, not straight to a direct table lookup.

Related SAP objects

Reviewed pages this object connects to in the ERPClimb knowledge graph.

Source: ERPClimb — https://erpclimb.com/sap-tables/baldatERPClimb is an independent platform and is not affiliated with SAP SE. Reference pages are written and reviewed by SAP consultants for learning and troubleshooting.