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 oracleIn 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.
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:
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: failOracle 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-workvalid: 3 resources in tapstate-workThe resource shape, references, and applicable catalog rules were accepted. Runtime availability was not checked.
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-workconnect http://127.0.0.1:8080
login admin
register oracle -o json
apply
test orders_oracle -o jsonUse a staging schema to verify:
- table discovery and a small snapshot;
- an insert, update, and delete through CDC;
- a log switch while the task is running;
- restart from the saved redo position;
- 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.
INTERVALandXMLTYPEare not supported by the LogMiner baseline. The direct raw-log baseline does not supportTIMESTAMP WITH LOCAL TIME ZONE.- Oracle empty strings become
NULL. A sourceNOT NULLstring 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_TIMEcan 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.
| Field | Required | Default | Use |
|---|---|---|---|
thinType | Yes | SID | Oracle connection addressing mode: SID or SERVICE_NAME. |
host | With SID or SERVICE_NAME | — | Oracle database host address or hostname. |
port | With SID or SERVICE_NAME | 1521 | Oracle listener port. Use a numeric integer. |
sid | With thinType: SID | — | Oracle system identifier (SID). |
database | With thinType: SERVICE_NAME | — | Oracle service name. |
tnsName | No | — | TNS alias (legacy catalog field; not applicable to the supported SID and SERVICE_NAME options). |
schema | Yes | — | Target Oracle schema to discover and replicate. |
user | No | — | Database account username (also accepted as username). |
password | No | — | Database account password or secret reference. |
logPluginName | No | logMiner | Incremental CDC capture engine: logMiner or oracle-log-parser. |
autoLog | No | true | Set to false to disable automatic continuous log mining (required for Oracle 23c Free). |
multiTenant | No | — | Set to true when connecting to a multitenant database (CDB/PDB). |
pdb | With multiTenant: true | — | Pluggable database (PDB) name. |
timezone | No | Empty | Timezone 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:
| Field | Use |
|---|---|
rawLogServerHost | Helper gRPC server host for the raw-log parsing path. |
rawLogServerPort | Helper gRPC server port for raw-log parsing (defaults to 8190). |
standBy | Whether to read logs from a standby or replica node (defaults to false). |
extParams | Additional JDBC connection parameters appended to the connection string. |
loadTableComment | Whether to discover and load table comments (defaults to false). |
useSSL | Whether to enable SSL/TLS encryption (defaults to false). |
sslCert | PEM-encoded SSL certificate when useSSL is enabled. |
sslKeyPassword | Secret password protecting the SSL certificate. |
socketReadTimeOut | Socket 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.
| Signal | Database-side baseline |
|---|---|
| Versions | Oracle 9i, 10g, 11g, 12c, 18c, 19c, 23c (Free) |
| Architectures | Single 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 preparation | Snapshot and CDC prerequisites |
| DDL | Add, rename, alter, and drop columns |
Data compatibility
| Family | Database-side baseline |
|---|---|
| Text | VARCHAR2, CHAR, NVARCHAR2, NCHAR, CLOB, NCLOB |
| Numeric | NUMBER, INTEGER, FLOAT, BINARY_FLOAT, BINARY_DOUBLE |
| Date and time | DATE, TIMESTAMP, TIMESTAMP WITH TIME ZONE, TIMESTAMP WITH LOCAL TIME ZONE, INTERVAL |
| Other | BLOB, XMLTYPE |
Method-specific source exclusions are listed in Limitations.