Overview
The OLake Oracle Source connector supports two synchronization modes. It offers features like parallel chunking, checkpointing, and automatic resume for failed full loads. This connector can be used within the OLake UI or run locally via Docker for open-source workflows.
Sync Modes Supportedβ
- Full Refresh
- Full Refresh + Incremental
Prerequisitesβ
Version Prerequisitesβ
Oracle Database 11g or above (tested with Oracle 19c, and 23ai)
Connection Prerequisitesβ
- Following permissions need to be granted to the user which will be used to connect Oracle DB with OLake.
1. CREATE SESSIONβ
Use: Fundamental system privilege that allows a user to log in (connect) to the Oracle database.
Why is it required?: To connect to the database (DBeaver, SQL Developer, OLake, etc.).
Grant Query:GRANT CREATE SESSION TO <username>;
2. EXECUTE ON DBMS_FLASHBACKβ
Use: Oracle-supplied PL/SQL package that allows users to "flash back" their session to a previous point in time or SCN.
Why is it required?: Used to fetch the SCN for the table.
Grant Query:GRANT EXECUTE ON DBMS_FLASHBACK TO <username>;
3. SELECT ON
<table>
βUse: Grants read-only access to run SELECT queries on the table owned by the schema owner.
Why is it required?: Required to access the table for discovery and chunk iteration.
Grant Query:GRANT SELECT ON <table_owner>.<table_name> TO <username>;
4. FLASHBACK ON
<table>
βUse: Grants the FLASHBACK object privilege for the table, allowing querying of historical data using AS OF SCN.
Why is it required?: Required when running queries like:SELECT * FROM <table> AS OF SCN <scn>
Grant Query:GRANT FLASHBACK ON <table_owner>.<table_name> TO <username>;
After initial Prerequisites are fulfilled, the configurations for Oracle can be configured.
Configurationβ
- Use Olake UI for Oracle
- Use OLake CLI for Oracle
1. Navigate to the Source Configuration Pageβ
- Complete the OLake UI Setup Guide
- After logging in to the OlakeUI, select the
Sources
tab from the left sidebar. - Click
Create Source
on the top right corner. - Select Oracle from the connector dropdown
- Provide a name for this source.
2. Provide Configuration Detailsβ
- Enter Oracle DB credentials.
Field | Description | Example Value |
---|---|---|
Host required | Hostname or IP address of the Oracle database server. | oracle-host |
Port required | TCP port on which the Oracle listener is accepting connections. | 1521 |
Service Name^ | Oracle service name that identifies the specific database service to connect to. | oracle-service-name |
SID^ | Oracle DB sid that uniquely identifies the database instance. | oracle-sid |
Username required | Database user used to authenticate the connection. | oracle-user |
Password | Password for the specified user. | oracle-password |
Max Threads | Maximum number of worker threads the connector can spin up for parallel tasks. | 10 |
Retry Count | Number of times the connector will retry a failed operation before giving up. | 0 |
JDBC URL Parameters | Extra JDBC URL parameters for fine-tuning the connection. | {"TIMEOUT": "86400"} |
SSL Mode | SSL configuration for the database connection. Contains details such as the SSL mode. | disable |
^ Only one among service_name
or sid
is required
Oracle Database automatically converts unquoted lowercase usernames to uppercase. If a connection error occurs, try changing the username to all uppercase.
3. Test Connectionβ
-
Once the connection is validated, the Oracle source is created. Jobs can then be configured using this source.
-
In case of connection failure, refer to the Troubleshooting section.
1. Create Configuration Fileβ
- Once the Olake CLI is setup, create a folder to store configuration files such as
source.json
anddestination.json
.
The source.json
file for oracle must contain these mandatory fields.
2. Provide Configuration Detailsβ
An example source.json
file will look like this:
{
"host": "oracle-host",
"username": "oracle-user",
"password": "oracle-password",
"service_name": "oracle-service-name",
"sid": "oracle-sid",
"port": 1521,
"max_threads": 10,
"backoff_retry_count": 3,
"jdbc_url_params": {},
"ssl": {
"mode": "disable"
}
}
Field | Description | Example Value | Type |
---|---|---|---|
host required | Hostname or IP address of the Oracle database server. | "oracle-host" | String |
port required | TCP port on which the Oracle listener is accepting connections. | 1521 | Integer |
service_name^ | Oracle service name that identifies the specific database service to connect to. | "oracle-service-name" | String |
sid^ | Oracle DB sid that uniquely identifies the database instance. | "oracle-sid" | String |
username required | Database user used to authenticate the connection. | "oracle-user" | String |
password | Password for the specified user. | "oracle-password" | String |
max_threads | Maximum number of worker threads the connector can spin up for parallel tasks. | 10 | Integer |
backoff_retry_count | Number of times the retry will take place incase of timeout before failing the sync. | 3 | Integer |
jdbc_url_params | Extra JDBC URL parameters for fine-tuning the connection. | {"TIMEOUT": "86400"} | Object |
ssl | SSL configuration for the database connection. Contains details such as the SSL mode. | {"mode": "disable"} | Object |
^ Only one among service_name
or sid
is required
Similarly, destination.json
file can be created inside this folder. For more information, see destination documentation.
Oracle Database automatically converts unquoted lowercase usernames to uppercase. If a connection error occurs, try changing the username to all uppercase.
3. Check Source Connectionβ
To verify the database connection following command needs to be run:
docker run --pull=always \
-v "[PATH_OF_CONFIG_FOLDER]:/mnt/config" \
olakego/source-oracle:latest \
check \
--config /mnt/config/source.json
-
If OLake is able to connect with Oracle DB
{"connectionStatus":{"status":"SUCCEEDED"},"type":"CONNECTION_STATUS"}
response is returned. -
In case of connection failure, refer to the Troubleshooting section.
Datatype mappingβ
Oracle Data Types | Destination Data Type |
---|---|
NUMBER(n,0) where n<=9 | int |
NUMBER(n,0) where n>9 | bigint |
NUMBER(n,m) where m!=0 , BINARY_DOUBLE, FLOAT | double |
BINARY_FLOAT | float |
DATE, TIMESTAMP, TIMESTAMP WITH TIME ZONE, TIMESTAMP WITH LOCAL TIMEZONE | timestamptz |
VARCHAR2, NVARCHAR2, CLOB, NCLOB, LONG, RAW, LONG RAW, BLOB, BFILE, INTERVAL DAY TO SECOND, INTERVAL YEAR TO MONTH, CHAR(* BYTE) | string |
OLake always ingests timestamp data in UTC format, independent of the source timezone.
Troubleshootingβ
1. Sync Failure Due to I/O Timeoutβ
2025-06-30T14:12:18Z FATAL error occurred while reading records: error occurred while waiting for context groups: failed to get or split chunks: failed to get next row id: read tcp 192.xx.x.xxx:xxxxx->65.x.xxx.xxx:xxxx: i/o timeout
Cause: Oracle databases often enforce an idle timeout policy, typically between 10 to 15 minutes, after which inactive sessions are terminated. For large tables (e.g., with 10M+ rows), the chunk splitting and row-reading operations may take longer than this default threshold, leading to a connection timeout.
Solution: Set the TIMEOUT
parameter (in seconds) to extend the idle timeout:
- In OLake UI, add it under the
JDBC URL Parameters
textbox while creating or editing the Oracle source.
- In OLake CLI, Add it under the
jdbc_url_params
field in yourconfig.json
.
"jdbc_url_params": {
"TIMEOUT": "86400" /* Timeout in seconds; here, 24 hours (24 Γ 60 Γ 60) */
}
If the issue is not listed here, post the query on Slack to get it resolved within a few hours.
Changelogβ
Date of Release | Version | Description |
---|---|---|
27 August 2025 | 0.1.11 | override default timeout in Discover |