The Oninit® Log Ripper is a multi-threaded Change Data Capture (CDC) tool for IBM Informix. It uses the Informix CDC API (cdc_opensess, cdc_activatesess, ifx_lo_read) to read INSERT, UPDATE, and DELETE events directly from the logical log in real time and emit them as replayable SQL statements — either to flat files, to a target Informix database, or through ODBC to PostgreSQL, MySQL, or any other ODBC-compliant target. RFC 8259 JSON and RFC 4180 CSV per-transaction files are also supported, plus a Kafka producer mode that sends one librdkafka message per captured row.
The capture engine ships as both the standalone oni_ripper daemon and a shared library (liboni_ripper.so) with a public C API, so the same pipeline can be embedded in a long-running host application — a Java service via JNI, a Python pipeline, another C daemon — receiving captured changes synchronously through a per- transaction callback. See Embed Ripper for the embedding guide.
The Ripper is designed for production: each table is captured by a thread, schema drift is detected on every TABSCHEMA record (catches RENAME COLUMN and same-byte-width type swaps that the basic structural check would miss), the LSN position is checkpointed across restarts, and an operator can release one table for an online ALTER without stopping the rest of the capture. The daemon mode provides PID-file management, log rotation, SIGHUP runtime config reload, and a SIGTERM grace shutdown that flushes in-flight transactions to disk as _NO_COMMIT files so nothing is lost.
Captured output preserves the column's actual qualifier for DATETIME and INTERVAL, round-trips DECIMAL all the way to the maximum (32, p) precision, splices CHR(0) to keep embedded NULs visible in CHAR / VARCHAR / LVARCHAR replay, and emits proper WHERE col IS NULL for nullable before-images. NCHAR / NVARCHAR pass through byte-oriented so the same code path serves UTF-8 multibyte under a UTF-8 DB locale.
| Topic | Detail |
|---|---|
| Capture | Real-time from syscdcv1, one CDC session per worker thread. |
| Output | SQL files, RFC 8259 JSON, RFC 4180 CSV, Informix direct, ODBC, Kafka, or in-process via the embedded library callback. |
| Schema drift | Three-layer detection — cols/var/fix triple, per-column NAME, per-column TYPE. |
| Archive recovery | Swap to an archived layout on drift; per-column archive-vs-live comparison at startup. |
| Live ALTER | Release / re-acquire one table at a time with no ripper restart required. |
| LSN checkpoint | Persists min(last_committed_lsn) in state_file; -R forces a clean restart. |
| Lag tracking | [LSN] log line shows source head vs each worker's processed LSN, so operators see fall-behind before a DISCARD fires. |
| DISCARD alerting | Operator-configured shell command runs once per CDC_REC_DISCARD event — webhook, mail, Slack, anything. |
| Daemon | PID file, sized log rotation, SIGHUP runtime config reload, SIGTERM grace shutdown. |
| Packaging | RPM and DEB binary-only packages with systemd unit; sysusers / tmpfiles / EnvironmentFile pre-wired. |
| Library | Same engine as the daemon, exposed as liboni_ripper.so with a public C API for in-process embedding (per-transaction callback, log callback, no signal handlers installed). |
To discuss how Oninit ® can assist please call on +1-913-732-8892 or alternatively just send an email specifying your requirements.
You get all this for free.. think about what you get if you pay us