> ## Documentation Index
> Fetch the complete documentation index at: https://docs.corvic.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Oracle Change Data Capture

> Keep a live copy of Oracle tables in Corvic from your database's redo and archive logs.

With change data capture (CDC), Corvic keeps tables up to date from your Oracle database's committed changes. Corvic reads each table once as a snapshot, then follows each committed insert, update, and delete.

Corvic logs in and reads those changes from the redo and archive logs with LogMiner, on the pipeline's schedule. Changes show up when the pipeline runs, as often as every minute. Nothing is installed in your database. You create the users below, and the database makes no outbound connection to Corvic.

Corvic reaches the database over [Private Networking](https://docs.corvic.ai/virtual-network/private-networking.md) or from [Dedicated IP](https://docs.corvic.ai/virtual-network/dedicated-ip.md) addresses. On a private network, database traffic, including CDC, uses Corvic's source range to the listener.

## What your database needs

* **ARCHIVELOG mode.** Turning it on takes a database restart. Keep archived logs longer than the longest gap between pipeline runs. If a log from that gap is gone, Corvic takes a new snapshot of the table.
* **Supplemental logging** of primary key columns, so each update and delete logs the key of the row it changed. A table keyed by a unique index needs that index's columns logged too. Corvic supplies `key_log_groups.sql` for those tables.
* **A LogMiner user** for Corvic. In a multitenant database, use a common user (a name that starts with `C##`). Corvic supplies `logminer_user.sql`, which creates the user and its LogMiner grants.
* **A read-only user for the connector**, with `READ` and `FLASHBACK` on each table. Corvic supplies `query_user.sql`.

> [!NOTE]
>
> A table without a primary key or a unique index on `NOT NULL` columns is tracked by ROWID. Such a table can't have LOB columns or row movement enabled.

If changes stop arriving, check ARCHIVELOG and that archived logs still cover the time since the pipeline last ran, the grants from `logminer_user.sql` and `query_user.sql`, and supplemental logging (use `key_log_groups.sql` for a unique-index key).

An interrupted first copy resumes where it stopped, and the watch still works when the connector user lacks `FLASHBACK`. When you add the connector you can connect as SYSDBA to set up the users, or hand the scripts to your DBA.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.