Overview
Choosing a capture mode
Pick the capture mode for your source by host access, privileges, encryption and target, and compare every mode's lag and source load.
A capture mode is how SQL Flow reads changes from a source. Azure SQL Database, PostgreSQL, and MySQL or MariaDB offer one mode each, so the choice is made for you. SQL Server, Oracle and Sybase ASE offer several, which differ in lag, in the load they put on the database, and in what you set up on the database host. Follow the diagram for your engine, then check the mode's page for its requirements.
Decision tree
Start with the source engine.
- Azure SQL Database or Hyperscale: Native CDC. Azure SQL exposes no raw transaction log.
- PostgreSQL: Logical replication. Check that your server meets its requirements in PostgreSQL: Choosing a capture mode.
- MySQL or MariaDB: Binlog. See MySQL: Choosing a capture mode.
- Azure SQL Managed Instance: add it as a SQL Server source.
SQL Server
- Log broker: managed services such as Amazon RDS and Azure SQL Managed Instance don't allow one on the host.
- TDE: DirectLog and Reconstruction read the raw log, which TDE encrypts on disk.
- DirectLog reads every change from the log, with lag in milliseconds and no query work on the server to find changes.
- Reconstruction needs no CDC and no database role, and the target converges to the source rather than replaying every intermediate version of a row. On SQL Server 2016 SP2 and 2017, a
sysadmininstalls a signed helper procedure once. - Native CDC reads the change tables that SQL Server's CDC capture job fills.
- Polling needs a login with
sysadminordb_owner, plus aSELECTgrant onsys.fn_dbloginmasteron SQL Server 2025, and every read costs the server query work.
Oracle
- ASM: the log broker can't read Oracle ASM storage (
+DATA/...). - RAC: DirectLog reads exactly one enabled redo thread. LogMiner reads the logs of every thread.
- Encryption: DirectLog has no decryption step and refuses those tables by name. LogMiner runs inside the database, which decrypts.
- DirectLog has the lowest lag and keeps the mining work off the database. LogMiner needs nothing on the database host, but mines inside the database, with lag in seconds.
Sybase ASE
- Log broker: both modes read the log through a broker on the ASE host, so the agent never opens database files.
- DirectLog reads the changes of tables marked for replication (
sp_setreptable), exactly and with the lowest lag. - Reconstruction needs nothing enabled on the database. It completes changes from data pages that the broker serves, and the target converges to the source rather than replaying every intermediate version of a row.
Compare the modes
| Source and mode Typical lag | Work on the source server | Installed on the database host | Login privileges | Holds the source log |
|---|---|---|---|---|
| SQL Server DirectLog Milliseconds | The broker reads log bytes; metadata and off-row values over SQL | Log broker | db_owner and a server state permission | Yes, until the target commits; released on pause |
| SQL Server Reconstruction As the log is written | Log bytes, plus keyed reads of current rows | Log broker | Specific grants, no database role | No |
| SQL Server Polling Seconds | sys.fn_dblog query work for every read | Nothing | sysadmin or db_owner | No |
| SQL Server Native CDC CDC job's scan interval | The CDC capture job, plus reads of the change tables | Nothing | SELECT on the tables and the cdc schema | No; the CDC capture job does |
| Azure SQL Native CDC CDC scan interval | CDC capture and change tables, counted against the database's resource limits | Not possible | SELECT on the tables and the cdc schema | No; CDC does |
| Oracle DirectLog Milliseconds | The broker reads redo files; catalog queries over SQL | Log broker | Catalog views in the root and the PDB, FLASHBACK on tables, and ALTER SYSTEM for table repairs and processing rules | No; your archived log retention decides |
| Oracle LogMiner Seconds | Mining sessions inside the database | Nothing | LOGMINING, dictionary access, FLASHBACK on tables | No; your archived log retention decides |
| PostgreSQL logical replication At each commit | Logical decoding inside PostgreSQL | Nothing | Replication rights (the REPLICATION attribute or a replication role such as rds_replication), ownership of the tables | Yes: the replication slot keeps WAL, also while paused |
| MySQL binlog As the binlog is written | The server streams the binlog as to a replica | Nothing | REPLICATION SLAVE, REPLICATION CLIENT | No; your binlog retention decides |
| Sybase ASE DirectLog Milliseconds | The broker reads the log device | Log broker | replication_role (or sa_role) | Yes, while the pipeline runs; released on pause |
| Sybase ASE Reconstruction As the log is written; slower than DirectLog | The broker reads the log device and data pages | Log broker | replication_role (or sa_role) | Yes, while the pipeline runs; released on pause |
Every mode except the two Reconstruction modes replays each committed change, including every intermediate version of a row. Every source captures TRUNCATE TABLE and applies it to the target in order, but SQL Server itself refuses a truncate on a table marked for DirectLog or enabled for Native CDC. See Supported changes: TRUNCATE TABLE. For encrypted sources, see Encrypted data support.
