Skip to main content

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. 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>;

After initial Prerequisites are fulfilled, the configurations for Oracle can be configured.


Configuration​

1. Navigate to the Source Configuration Page​

  1. Complete the OLake UI Setup Guide
  2. After logging in to the OlakeUI, select the Sources tab from the left sidebar.
  3. Click Create Source on the top right corner.
  4. Select Oracle from the connector dropdown
  5. Provide a name for this source.

2. Provide Configuration Details​

  • Enter Oracle DB credentials.
    Oracle source creation form with host, username, service, port, and SSL fields.
FieldDescriptionExample Value
Host requiredHostname or IP address of the Oracle database server.oracle-host
Port requiredTCP port on which the Oracle listener is accepting connections.1521
Connection Type requiredMethod used to establish a connection between the Oracle database server. It can be either Service Name or SIDService Name
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 requiredDatabase user used to authenticate the connection.oracle-user
PasswordPassword for the specified user.oracle-password
Max ThreadsMaximum number of worker threads the connector can spin up for parallel tasks.10
Retry CountNumber of times the connector will retry a failed operation before giving up.0
JDBC URL ParametersExtra JDBC URL parameters for fine-tuning the connection.{"TIMEOUT": "86400"}
SSL ModeSSL configuration for the database connection. Contains details such as the SSL mode.disable
Oracle Username Case Sensitivity

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.


Data Type Mapping​

Oracle Data TypesDestination Data Type
NUMBER(n,0) where n<=9int
NUMBER(n,0) where n>9bigint
NUMBER(n,m) where m!=0, BINARY_DOUBLE, FLOATdouble
BINARY_FLOATfloat
DATE, TIMESTAMP, TIMESTAMP WITH TIME ZONE, TIMESTAMP WITH LOCAL TIMEZONEtimestamptz
VARCHAR2, NVARCHAR2, CLOB, NCLOB, LONG, RAW, LONG RAW, BLOB, BFILE, INTERVAL DAY TO SECOND, INTERVAL YEAR TO MONTH, CHAR(* BYTE)string
timestamptz timezone

OLake always ingests timestamp data in UTC format, independent of the source timezone.


Date and Time Handling​

During transfer, values in date, time, and timestamp columns are modified to ensure valid calendar ranges and destination compatibility.

  • Case I (Year 0000):
    Source dates with year 0000 are not valid in most destinations, so we change them to the epoch start date.
    Example: 0000-05-10 β†’ 1970-01-01
  • Case II (Year > 9999):
    Extremely large years are capped at 9999. The month and date are not affected.
    Examples: 10000-03-12 β†’ 9999-03-12
  • Case III (Invalid month/day):
    When the month or day exceeds valid ranges (i.e. month > 12 or day > 31), or the combined date is invalid, the value is replaced with the epoch start date.
    Examples: 2024-13-15 β†’ 1970-01-01, 2023-04-31 β†’ 1970-01-01
Note

These rules apply to date, time, and timestamp columns during transfer.


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.

Oracle source setup form showing connector, host, service, port, user, password, and JDBC timeout

  • In OLake CLI, Add it under the jdbc_url_params field in your config.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 ReleaseVersionDescription
27 August 20250.1.11override default timeout in Discover


πŸ’‘ Join the OLake Community!

Got questions, ideas, or just want to connect with other data engineers?
πŸ‘‰ Join our Slack Community to get real-time support, share feedback, and shape the future of OLake together. πŸš€

Your success with OLake is our priority. Don’t hesitate to contact us if you need any help or further clarification!