Lima Backbone Change capture and streaming

Copy only what changed, minutes after it changes.

Most tables change a little at a time. Change capture reads the rows that were inserted, updated or deleted since the last read, and applies them to the copy in the order they happened. It works on SAP and Oracle, on other databases, on applications that push events, and on event streams.

WHERE CHANGES COME FROMWHERE THEY GOSAP S/4HANA · ECCapplication change captureOracle ERP · EBSLogMiner · last-update columnsWarehouse system (WMS)webhooks: the source pushesLogistics partner (3PL)API polled on a scheduleKafka · Kinesis · Event Hubsevent streams · micro-batchesChange streamONE STREAM · IN ORDERmarker: the last change readbefore and after values keptapplied in the order they happenedcheckpoint every N eventsChecksrules run on every change · fails → ownerLIVE · SHOWCASE ESTATESAP lag 1m 48s · Oracle 210 ms p99 · 99.97% deliveredPlanning applicationsKinaxis · o9 · IBP · OMPLakehouseSnowflake · DatabricksCertified viewstables marked safe to useAPIsfor apps and partners
Change capture on the showcase estate. Five kinds of source feed one change stream, every change passes the checks, and the targets receive it minutes after it happened. The readout is live from the monitor: the SAP copy is 1m 48s behind the application, and 99 of every 100 Oracle events pass through in 210 ms.
8.2M /day
SAP change capture, across all paths
showcase estate
1m 48s
SAP lag, shown live on the monitor
showcase estate
0.9M /day
Oracle LogMiner change capture, 210 ms p99
showcase estate
99.97%
of events delivered to their targets
showcase estate
340 ms
average propagation through the stream
showcase estate
What it does

Three ways to get data out of a system

A pipeline can copy everything, copy the rows past a marker, or read the system’s own record of changes.

Full copy

The whole table is read and written to the target on every run. It is the right choice for a first load, for small reference tables, and for an archive extract, where the volume is moved once.

Incremental copy by a marker column

Each run reads only the rows whose marker column, such as a last-update timestamp or a sequence number, is past the value recorded at the end of the previous run. It is the right choice for large tables that gain rows and are refreshed a few times a day.

Change capture

The system’s own record of changes is read: every insert, update and delete, with the values before and after. It is the right choice for tables that people watch during the day, such as orders, deliveries and stock positions.

Full copyIncremental copyChange capture
FreshnessAs of the last run, usually nightly.As of the last run, from hours to minutes apart.Minutes behind the source.
Load on the sourceReads every row on every run.Reads the changed rows. The marker column needs an index.Reads the change record. The table itself is left alone.
What it needsA read-only user, or the released reading interface of the ERP.A reliable last-update column or sequence on the table.Access to the system’s change record: SAP’s application-level paths, Oracle LogMiner, a database log or trigger, or an application that pushes events.
DeletesSeen when the copy is rebuilt.Seen when the source marks deleted rows.Seen as DELETE events, with the removed row kept.
How it works

How change capture works, step by step

The same five steps run for every source, from an SAP table to a Kafka stream.

Read the changes since the markerThe marker records the last change that was read: a change number, a log position or a timestamp. The run asks the source for everything after it.
Keep every change with its before and after valuesEach change is stored as an event: the table, the row key, the kind of change (insert, update or delete), the values before and the values after.
Apply the changes to the target in the order they happenedAn update to a row is applied after the insert that created it, and a delete after both. Order is kept per row, so the target ends in the same state as the source.
Write a checkpointAfter a batch of events has been applied, the position is saved as a checkpoint. The checkpoint is where the next run starts.
After a hold or an interruption, resume from the checkpointWhen a run is held by a rule or interrupted by an outage, it restarts from the last checkpoint and replays the missed changes in order. An event is recognised by its position, so each change is applied exactly once.
On SAP and on Oracle

Change capture on SAP and on Oracle

Both ERPs keep a record of what changed. Backbone reads that record through the paths each vendor supports.

An ERP is the system that holds orders, stock, materials and finance. The change stream, the checks and the targets are the same for both ERPs. The paths used to read the changes differ, and the table sets them side by side.

SAP ECC and S/4HANAOracle E-Business Suite (EBS) and Oracle ERP
Paths usedChange pointers: SAP’s own record of master-data changes, such as a customer or a material. Table-level change capture: inserts, updates and deletes on a transaction table, with before and after values. Delta-enabled CDS views: released data views on S/4HANA that return only the rows changed since the last read. Extractor delta queues: the queues that SAP’s own extractors fill with changes.LogMiner: Oracle’s own tool for reading the database’s change log. Backbone uses it where the database administrator allows it, and receives every insert, update and delete with before and after values. Last-update columns: where LogMiner is switched off, each run reads the rows whose last-update column is past the marker.
Other editionsSAP BW, SAP’s data warehouse, is read through its own connector.Oracle Cloud is read through its released APIs and extracts.
Left outThe ODP-RFC replication interface and HANA database log capture. SAP Notes 3255746 and 2971304 restrict their use by third-party tools, and the ODP-RFC opt-out expires in December 2026.Reads use a standard database user with read grants. The database keeps its standard setup.
Showcase estate2.8M events a day on the stream monitor, 42 ms p99. 8.2M events a day across all SAP paths. Lag 1m 48s, shown live.0.9M events a day through LogMiner, 210 ms p99.

The full statement for SAP and Oracle, method by method →

Other sources

Other sources: applications, databases and event streams

Beyond the ERP, changes arrive in four ways. Each lands on the same change stream, with the same marker, checkpoint and replay. An API is an interface a system publishes for other programs to call.

SourceHow the changes arriveTimingOn the showcase estate
WebhooksThe source pushes each change to Backbone as it happens.SecondsThe warehouse system pushes its DISPATCH, RECEIVE and TRANSFER events: 841K a day.
APIsBackbone calls the source’s API at a set interval and reads what changed since the last call.The interval you setThe 3PL connector polls and also receives pushes: 48K records a day. It was built with the connector kit (SDK) in 4 days and registered 72 endpoints on its own.
Event streamsKafka, Kinesis and Azure Event Hubs are read in micro-batches: small groups of events processed together.Seconds to minutes, as you set it per topicMicro-batch interval set per topic.
DatabasesThe database change log is read where one is available. Otherwise a trigger records each change in a side table that Backbone reads.Seconds to minutesSnowflake through its own change streams: 0.6M events a day, 18 ms p99.
The monitor

What the monitor shows

One screen lists every source, its rate of change, and how long a change takes to pass through.

Backbone · change stream monitor · showcase estate · last 24 hours
4,841 events per minute, average340 ms average propagation99.97% of events delivered

Per source

SourceMethodEvents / dayp99
SAP S/4HANAapplication change capture2.8M42 ms
Oracle ERPLogMiner0.9M210 ms
Snowflakestream + task0.6M18 ms
WMStrigger + REST0.5M88 ms
3PLwebhook (SDK connector)0.1M120 ms

Event feed · live

KindTableColumnBefore → after
UPDATESAP.VBAPKWMENG (ordered quantity)old quantity → new quantity
INSERTWMS.STOCK_ONHANDnew row— → the new row
UPDATESAP.KNA1LAND1 (country)United States → US
DELETEOracle.AR_INVOICESremoved rowthe removed row → —
INSERT3PL.SHIPMENTSnew row— → the new row

p99: 99 of every 100 events passed through the stream within this time. Events per day is the count over the last 24 hours. The event feed shows the kind of change, the table, the column and the values before and after. All figures are from the showcase estate.

Markers and checkpoints

Markers, checkpoints and replay

Two saved positions let a run resume after a hold with every change applied once.

OTIF_NIGHTLY · THE NIGHT OF THE HOLD · SHOWCASE ESTATEchanges flowingheld · checkpoint kept · writes pausedreplay in ordercaught up02:0002:14 a rule holds the run02:58 resume from the checkpoint03:14 caught up841K events replayed in order, each applied once
The night of the hold on the showcase estate. The checkpoint taken at 02:14 is where the run resumed at 02:58; 841K events were replayed in order, each applied once, and the copy had caught up at 03:14.

A marker says where the last read stopped. A checkpoint says where the last write stopped. Between the two sit the events that have been read and are waiting to be applied, so a run always knows what is done and what is left.

On the showcase estate, a rule found 847 negative quantities in a warehouse feed at 02:14 and held three pipelines. The checkpoint was kept while the cause was traced to a new release of the warehouse system. At 02:58 the pipelines resumed from the checkpoint and replayed 841K events in the order they happened. At 03:14 the copy had caught up, with each change applied once, and the 06:30 deadline was met with 3h 32m to spare. The hold, minute by minute →

How to choose

Batch or change capture: how to choose

The right mode depends on how fresh the copy needs to be and on how the data is used.

The needRecommended modeWhy
A nightly reportBatch: a full or incremental copy on a scheduleThe report is read once a day, so a copy taken after the day’s postings is fresh enough, and the load on the source stays low.
A planning run at 06:00Change capture during the day, then a batch load before the runChanges are collected all day, so the load before the run is small and finishes well before 06:00.
A stock position for customer serviceChange captureStock moves every minute. The person on the phone needs the position as of a few minutes ago, and change capture keeps the copy that close.
A partner feedWebhooks or API polling, then an event-driven pipelineThe partner’s system pushes events, or is polled on a schedule. Each batch of events starts the pipeline that checks and forwards them.
Freshness

Freshness as a measured number

The lag of every source is measured, shown on the monitor, and compared with a limit you set.

Lag is the time between a change in the source and the moment the copy reflects it. Backbone measures it for every source from the timestamps on the events, and shows the current value and the p99 over the last 24 hours. On the showcase estate the SAP stream shows 1m 48s, and the Oracle stream shows 210 ms at p99.

For each source you set a limit. When the lag passes it, an alert goes to the channel you chose. On the showcase estate a data-quality anomaly reaches the data-operations channel on Slack in 340 ms, and a projected deadline miss of more than 15 minutes reaches PagerDuty. The same lag figure feeds the deadline clocks in orchestration, so a held stream is visible on the run dashboard as well. Deadlines and alerts →

What is measuredWhere it showsWhat happens at the limit
Lag per sourcecurrent value and p99The change stream monitor, per sourceAn alert goes to the channel you chose: Slack, PagerDuty, Teams or ServiceNow
Events per dayper sourceThe monitor, last 24 hoursShown for context beside the lag
Deliveryshare of events that reached the targetThe monitor: 99.97% on the showcase estateA missed event is replayed from the checkpoint
Time to the business deadlineThe run dashboard in orchestrationPagerDuty is called when a miss of more than 15 minutes is projected
Where this sits

Step two of the six.

Step six sends results back to the system they came from, and that system confirms each write.
Any source.Any target.Any pattern.Any volume.Priced by capacity.HOW THE ENGINE SCALES → /platform/backbone/scale
Terms on this page

Plain meanings.

Change data captureReading the rows that were inserted, updated or deleted since the last read, from the system’s own record of changes, and applying them to a copy.
Marker (watermark)The saved position of the last change that was read: a change number, a log position or a timestamp. The next read starts after it.
CheckpointThe saved position of the last change that was applied to the target. A held or interrupted run resumes from it.
Ordered replayApplying the changes a run missed in the order they happened, each exactly once, until the copy has caught up.
p99The time within which 99 of every 100 events passed through. One event in a hundred took longer.
Micro-batchA small group of events from a stream, processed together at an interval set from seconds to minutes.
LogMinerOracle’s own tool for reading the database’s change log. Backbone uses it where the database administrator allows it.
Change pointerSAP’s own record of a change to master data, such as a customer or a material, written by the application when the change is saved.
WebhookA call the source makes to Backbone the moment something changes, so the change arrives as a push.
Questions

Asked before the first stream.

Does change capture load the ERP?

Change capture reads the ERP’s own record of changes, so the transaction tables themselves are left alone. On SAP that record is the change pointers, the table-level change capture, the delta-enabled CDS views or the extractor delta queues. On Oracle it is the database change log, read through LogMiner. The read is small because it covers only the rows that changed.

How far behind is the copy?

On the showcase estate the SAP stream shows a lag of 1m 48s, and 99 of every 100 Oracle events pass through in 210 ms. Your own figure depends on the path and on the capture interval your team allows. It is measured and shown on the monitor from the first day.

What happens when the source is down?

The last checkpoint is kept. When the source is back, the run resumes from the checkpoint and reads the changes it missed in order, so each change is applied once. The lag rises during the outage, the alert fires when the lag passes the limit, and the lag falls back as the replay catches up.

Can we do this on Oracle E-Business Suite?

Yes. Where the database administrator allows LogMiner, Backbone reads the database change log and receives every insert, update and delete with before and after values. Where LogMiner is switched off, Backbone reads by last-update columns at the interval you set. Oracle Cloud is read through its released APIs and extracts.

Do we need database triggers?

On SAP and Oracle the changes come from the application paths and from LogMiner or last-update columns, so triggers are unnecessary there. Triggers are one option for other databases that keep no readable change log: the trigger writes each change to a side table, and Backbone reads the side table.

Run your first load.

Four weeks, one dataset, one target. On the showcase estate, SAP change capture was connected on day one and Oracle on day two, so the monitor showed their lag in the first week.