tapstateDocs
Connectors

Oracle

Connect Oracle to tapstate for an initial full load and redo-log change data capture (CDC).

Connector profile

Category
Databases
Guide maturity
GAGenerally available
Role in this guide
Source
Capabilities
SnapshotCDCDDL capture
Compatibility
Oracle 9i, 10g, 11g, 12c, 18c, 19c, 23c (Free) · Single instance and RAC

Connect Oracle as a source for an initial full load and redo-log CDC into operational state or analytics targets. Complete the database preparation that matches the read mode you plan to use.

Before you begin

Connector availability and licensing

The Oracle connector artifact bundles ojdbc8, orai18n, and xdb under the Oracle Free Use Terms; commercial connector use remains subject to the applicable agreement. It is distributed as an official preview artifact separate from the base server image. Before applying Oracle connections on a new or upgraded server, register the connector:

connectors
register oracle

In production and air-gapped environments, you can also mount the connector JAR into TAPSTATE_CONNECTORS_SEED_DIR for automatic boot-time registration. See When registration is required.

Source

Choose the outcome you need. Each tab is a complete preparation path; you do not need to combine steps from both tabs.

Create a connection

Tapstate stores each Oracle connection as a .tap.yml file in the workspace.

Create tapstate-work/source/orders_oracle.tap.yml. For a full-load-only source, use mode: snapshot; for CDC, use mode: cdc.

tapstate-work/source/orders_oracle.tap.yml
version: tapstate/v1
kind: source
id: orders_oracle
connector: oracle
config:
  host: oracle.internal
  port: 1521
  thinType: SERVICE_NAME
  database: ${ORACLE_SERVICE_NAME}
  schema: APP_SCHEMA
  user: ${ORACLE_READER_USER}
  password: ${ORACLE_READER_PASSWORD}
mode: cdc
tables:
  - ORDERS
  - /CUSTOMERS_.*/

For Oracle 23c (Free), specify autoLog: false in config because the automatic LogMiner requests CONTINUOUS_MINE, which is unsupported in Oracle 23c. In addition, ensure schema, table, and column identifiers remain within 30 characters; v0.6 refuses unsupported LogMiner identifiers before capture starts. This LogMiner check does not apply to a full-load-only read.

Connect Oracle source to an operational target such as MongoDB:

tapstate-work/pipeline/orders_to_operational_state.tap.yml
version: tapstate/v1
kind: pipeline
id: orders_to_operational_state
source: orders_oracle
serve:
  from: /.*/
  sync:
    - id: write_operational_state
      source: operational_state
      write_mode: upsert
      ddl: fail

Oracle is certified as a source in the current product path. Writing to Oracle as a pipeline sync target is not supported.

Validate the configuration

tapstate validate --workdir tapstate-work
Configuration accepted
valid: 3 resources in tapstate-work

The resource shape, references, and applicable catalog rules were accepted. Runtime availability was not checked.

Changes required
invalid: orders_source.tap.yml:12:1 dsl.unknown-field Unknown field 'unexpected' at unexpected.

Use the filename, location, diagnostic code, and suggested fix to update the resource.

Next, run the connection in a non-production environment and confirm credentials, network access, permissions, and a representative read or write.

Validation does not resolve the host, credentials, or an Oracle server. To verify the connection against the database, register the Oracle connector, apply the workspace, and run test:

tapstate -w tapstate-work
connect http://127.0.0.1:8080
login admin
register oracle -o json
apply
test orders_oracle -o json

Use a staging schema to verify:

  1. table discovery and a small snapshot;
  2. an insert, update, and delete through CDC;
  3. a log switch while the task is running;
  4. restart from the saved redo position;
  5. representative NUMBER, timestamp, LOB, and empty-string values.

These checks help confirm the database-side prerequisites without changing them:

SELECT LOG_MODE, SUPPLEMENTAL_LOG_DATA_MIN
FROM V$DATABASE;

SELECT DEST_NAME, STATUS, DESTINATION
FROM V$ARCHIVE_DEST_STATUS
WHERE STATUS <> 'INACTIVE';

SELECT RESOURCE_NAME, LIMIT
FROM DBA_PROFILES
WHERE PROFILE = (SELECT PROFILE FROM DBA_USERS WHERE USERNAME = 'TAPSTATE')
  AND RESOURCE_NAME = 'CONNECT_TIME';

Limitations

  • LogMiner capture refuses schema, table, and column names longer than 30 characters before starting. Review the reported identifier or use an appropriate capture mode; a successful snapshot does not prove LogMiner CDC can start.
  • INTERVAL and XMLTYPE are not supported by the LogMiner baseline. The direct raw-log baseline does not support TIMESTAMP WITH LOCAL TIME ZONE.
  • Oracle empty strings become NULL. A source NOT NULL string column can therefore fail when written to Oracle if the source contains empty strings.
  • DDL and a large burst of DML on the same table can make dictionary reconstruction unreliable. Stage schema changes separately from heavy write windows when possible.
  • RAC LogMiner capture can produce duplicate events during recovery. Downstream writes need stable keys and idempotent handling, especially for tables without primary keys.
  • Oracle 19c LogMiner scans online redo together with archived logs. In RAC, it must follow multiple redo threads; large redo logs and uneven archiving can increase incremental-read latency.
  • Large or long-running uncommitted transactions retain mining state. After a restart, recovery can resume from the earliest uncommitted SCN and replay already-seen events, so the destination must handle them idempotently.
  • Virtual columns require staging with representative changes. If their incremental values cannot be reproduced reliably, pre-create the target shape or exclude the virtual expression from the replicated contract.
  • Archive-log exhaustion stops recoverable CDC. Monitor the recovery area and long-running or uncommitted transactions.
  • A restrictive profile CONNECT_TIME can terminate the mining session and interrupt CDC. Use a service-account profile that matches the pipeline's expected lifetime.
  • Partition-table DML can be captured, but adding partitions is not part of the documented DDL baseline.
  • Configure Oracle Net encryption according to your environment and use the connection settings supplied by your tapstate deployment.

Reference

Connection settings

The documented current source path uses the fields below.

FieldRequiredDefaultUse
thinTypeYesSIDOracle connection addressing mode: SID or SERVICE_NAME.
hostWith SID or SERVICE_NAME—Oracle database host address or hostname.
portWith SID or SERVICE_NAME1521Oracle listener port. Use a numeric integer.
sidWith thinType: SID—Oracle system identifier (SID).
databaseWith thinType: SERVICE_NAME—Oracle service name.
tnsNameNo—TNS alias (legacy catalog field; not applicable to the supported SID and SERVICE_NAME options).
schemaYes—Target Oracle schema to discover and replicate.
userNo—Database account username (also accepted as username).
passwordNo—Database account password or secret reference.
logPluginNameNologMinerIncremental CDC capture engine: logMiner or oracle-log-parser.
autoLogNotrueSet to false to disable automatic continuous log mining (required for Oracle 23c Free).
multiTenantNo—Set to true when connecting to a multitenant database (CDB/PDB).
pdbWith multiTenant: true—Pluggable database (PDB) name.
timezoneNoEmptyTimezone offset for temporal conversions (e.g. +00:00, +08:00).

Additional catalog fields

The catalog recognizes the fields below for advanced or deployment-specific connectivity:

FieldUse
rawLogServerHostHelper gRPC server host for the raw-log parsing path.
rawLogServerPortHelper gRPC server port for raw-log parsing (defaults to 8190).
standByWhether to read logs from a standby or replica node (defaults to false).
extParamsAdditional JDBC connection parameters appended to the connection string.
loadTableCommentWhether to discover and load table comments (defaults to false).
useSSLWhether to enable SSL/TLS encryption (defaults to false).
sslCertPEM-encoded SSL certificate when useSSL is enabled.
sslKeyPasswordSecret password protecting the SSL certificate.
socketReadTimeOutSocket read timeout in minutes (defaults to 0, meaning no timeout).

Database-side reference

This table summarizes Oracle behavior for the connector. Verify uncommon types and deployment-specific capture paths with representative data before migration.

SignalDatabase-side baseline
VersionsOracle 9i, 10g, 11g, 12c, 18c, 19c, 23c (Free)
ArchitecturesSingle instance and RAC. The LogMiner baseline reads primary nodes in Data Guard, Active Data Guard, and ASM deployments; standby-node capture requires the separately supplied raw-log contract.
Source preparationSnapshot and CDC prerequisites
DDLAdd, rename, alter, and drop columns

Data compatibility

FamilyDatabase-side baseline
TextVARCHAR2, CHAR, NVARCHAR2, NCHAR, CLOB, NCLOB
NumericNUMBER, INTEGER, FLOAT, BINARY_FLOAT, BINARY_DOUBLE
Date and timeDATE, TIMESTAMP, TIMESTAMP WITH TIME ZONE, TIMESTAMP WITH LOCAL TIME ZONE, INTERVAL
OtherBLOB, XMLTYPE

Method-specific source exclusions are listed in Limitations.

On this page