Oracle
Adding and configuring an Oracle connection within Qualytics empowers the platform to build a symbolic link with your schema to perform operations like data discovery, visualization, reporting, syncing, profiling, scanning, anomaly surveillance, and more.
This documentation provides a step-by-step guide on how to add Oracle as both a source and enrichment datastore in Qualytics. It covers the entire process, from initial connection setup to testing and finalizing the configuration.
By following these instructions, enterprises can ensure their Oracle environment is properly connected with Qualytics, unlocking the platform's potential to help you proactively manage your full data quality lifecycle.

Let’s get started 🚀
Oracle Setup Guide
Qualytics connects to Oracle through the Oracle JDBC Thin driver. It uses JDBC metadata APIs to discover schemas, tables, columns, and primary keys. Qualytics automatically filters out Oracle system schemas (SYS, SYSTEM, DBSNMP, OUTLN, APPQOSSYS, CTXSYS, MDSYS, OLAPSYS, ORDDATA, ORDSYS, WMSYS, XDB, LBACSYS, DVSYS, AUDSYS, and others) during schema discovery.
Minimum Oracle Permissions (Source Datastore)
| Permission | Purpose |
|---|---|
CREATE SESSION |
Allow the user to connect to the database instance |
SELECT ON <schema>.<table> |
Read data from tables for profiling and scanning |
SELECT_CATALOG_ROLE (optional) |
Read data dictionary views for comprehensive metadata discovery |
Note
Qualytics does not support Oracle as an enrichment datastore. You can point to a different enrichment datastore instead.
Info
Oracle connections support both TCP and TCPS (SSL/TLS) protocols. If your Oracle server requires encrypted connections, select TCPS as the protocol in the connection form and ensure the Oracle server's SSL certificate is trusted.
Example: Source Datastore User (Read-Only): Schema-Level Access
Replace <schema_name> and <password> with your actual values.
-- Create a dedicated read-only user
CREATE USER qualytics_read IDENTIFIED BY "<password>"
DEFAULT TABLESPACE users
TEMPORARY TABLESPACE temp;
-- Grant connection privileges
GRANT CREATE SESSION TO qualytics_read;
-- Option A: Grant read access to ALL tables (broad access)
GRANT SELECT ANY TABLE TO qualytics_read;
-- Option B: Grant read access to a specific schema (restrictive access)
-- Run this for each table you want Qualytics to access:
-- GRANT SELECT ON <schema_name>.<table_name> TO qualytics_read;
Example: Source Datastore User (Read-Only): Using a Role
For organizations that prefer role-based access control:
-- Create a custom read-only role
CREATE ROLE qualytics_read_role;
-- Grant SELECT on all tables in the target schema
BEGIN
FOR t IN (SELECT table_name FROM all_tables WHERE owner = UPPER('<schema_name>'))
LOOP
EXECUTE IMMEDIATE 'GRANT SELECT ON <schema_name>.' || t.table_name || ' TO qualytics_read_role';
END LOOP;
END;
/
-- Assign the role to the Qualytics user
GRANT qualytics_read_role TO qualytics_read;
Troubleshooting Common Errors
| Error | Likely Cause | Fix |
|---|---|---|
ORA-01017: invalid username/password |
Incorrect username or password | Verify the credentials and ensure the user exists with SELECT username FROM dba_users |
ORA-01045: user lacks CREATE SESSION privilege |
The user cannot establish a session | Run GRANT CREATE SESSION TO <user> |
ORA-00942: table or view does not exist |
The user lacks SELECT on the target table, or the table does not exist |
Grant SELECT on the specific table or use SELECT ANY TABLE |
ORA-12505: TNS:listener does not currently know of SID |
The SID provided in the connection form does not match the database instance | Verify the SID or switch to using a Service Name instead |
ORA-12514: TNS:listener does not currently know of service |
The Service Name is incorrect or the service is not registered with the listener | Verify the service name with lsnrctl status on the Oracle server |
Detailed Troubleshooting Notes
Authentication Errors
The error ORA-01017: invalid username/password indicates that the credentials are incorrect.
Common causes:
- Incorrect password: the password does not match. Oracle passwords are case-sensitive by default.
- Account locked: the account has been locked due to too many failed login attempts. Unlock with
ALTER USER <user> ACCOUNT UNLOCK. - Password expired: the password has expired per the user's profile settings.
Note
Oracle passwords are case-sensitive by default (since Oracle 11g). Ensure the password is entered with the correct case in the connection form.
Permission Errors
The error ORA-00942: table or view does not exist can mean either the object truly does not exist or the user lacks SELECT access to it.
Common causes:
- Missing
SELECTgrant: the user does not haveSELECTon the target table. Oracle does not distinguish between "table not found" and "no permission" for security reasons. - Schema not specified: the table exists in a different schema and the user is querying without the schema prefix.
- Synonym not created: the user expects to access the table without the schema prefix, but no synonym exists.
Connection Errors
The error ORA-12505: TNS:listener does not currently know of SID or ORA-12514: TNS:listener does not currently know of service means the connection identifier is incorrect.
Common causes:
- Wrong SID or Service Name: the value does not match the database instance configuration.
- Listener not running: the Oracle listener process is not started on the server.
- Wrong host or port: the host or port (default 1521) does not match the Oracle server configuration.
Tip
Start by confirming credentials are valid (authentication errors), then verify table permissions (permission errors), and finally check the connection identifier, SID or Service Name (connection errors).
Add a Source Datastore
A source datastore is a storage location Qualytics connects to so it can profile, scan, and monitor data. Adding Oracle as a source lets Qualytics query it through the Oracle JDBC Thin driver and run quality operations on the tables it discovers.
Before you start, review the Minimum Oracle Permissions the connecting user needs.
Enrichment lives on another connector
Oracle cannot host an enrichment datastore: creating one on it is rejected. Linking one to an Oracle source works normally, as long as the enrichment datastore itself lives on a connector that supports the role. See Supported Enrichment Datastores for the list.
Field reference
The Add Datastore page shows the sections below when Oracle is selected. When reusing an existing connection, the Connection Properties and Secrets Management sections come already filled in and read-only: Qualytics has already validated those credentials, so you fill in only the Datastores Extraction and the Datastore Properties. To change a saved connection's credentials, edit the connection through the Manage Connections page; edits there apply to every datastore that reuses the connection.
Connection Properties
These fields define the Oracle database Qualytics connects to and the account it connects with. They belong to the connection: when reusing an existing connection, they come already filled in and read-only.
| FIELD | REQUIRED | TYPE | DESCRIPTION |
|---|---|---|---|
| Connection Name | Text | A label for the saved connection (e.g., acme_oracle_reporting), so other datastores can reuse it later. |
|
| Host | Text | The hostname or address of the Oracle server. | |
| Port | Number | The port the listener accepts connections on. Defaults to 1521. |
|
| Protocol | Option | The protocol the listener uses: TCP, or TCPS for a TLS connection. Defaults to TCP. | |
| User | Text | The Oracle account Qualytics connects as. | |
| Password | Text | The password for that account. |
Connect By
Oracle accepts either a system identifier or a service name. Setting Method changes the field shown below it, so pick the tab that matches your instance. These fields also belong to the connection: already filled in and read-only when reusing one.
| FIELD | REQUIRED | TYPE | DESCRIPTION |
|---|---|---|---|
| Method | Option | Set to SID, which is the default (SID in the API). |
|
| SID | Text | The system identifier of the Oracle instance (e.g., orcl). |
| FIELD | REQUIRED | TYPE | DESCRIPTION |
|---|---|---|---|
| Method | Option | Set to Service Name (SERVICE_NAME in the API). |
|
| Service Name | Text | The service name the Oracle listener registers for the database. |
Secrets Management
This group is optional: use it only if you want Qualytics to pull credentials from a secrets manager instead of typing them into the form. Turn on HashiCorp Vault to show the fields below. Despite the label, any secrets manager that exposes a compatible REST API works, not only HashiCorp Vault; see Secrets Management. It also belongs to the connection: read-only when reusing an existing connection.
| FIELD | REQUIRED | TYPE | DESCRIPTION |
|---|---|---|---|
| Login URL | Text | The Vault endpoint Qualytics uses to authenticate (e.g., https://vault.example.com/v1/auth/approle/login). |
|
| Credentials Payload | Text | A JSON body containing the credentials Vault expects (e.g., {"role_id":"...","secret_id":"..."}). |
|
| Token JSONPath | Text | The JSONPath that extracts the client token from Vault's response. Defaults to $.auth.client_token. |
|
| Secret URL | Text | The Vault path where the secret is stored (e.g., https://vault.example.com/v1/secret/data/oracle). |
|
| Token Header Name | Text | The HTTP header name used to send the token. Defaults to X-Vault-Token. |
|
| Data JSONPath | Text | The JSONPath that extracts the secret payload from Vault's response. Defaults to $.data. |
Datastores Extraction
Pick the schema or schemas Qualytics should read from. You fill these in on both flows.
| FIELD | REQUIRED | TYPE | DESCRIPTION |
|---|---|---|---|
| Schema | Option | One or more schemas to read from. Each schema you pick becomes its own Qualytics datastore. Click the refresh icon to load the ones visible to the account. |
No database step
Oracle has no separate database selection, because a schema belongs to a user, so you pick the schema directly. Selecting more than one creates one source datastore per schema, named from the Name Template. See Multi-Schema Source Datastore Creation for details.
Administrative schemas
Oracle's built-in administrative schemas, such as SYS, SYSTEM, and DBSNMP, are left out of discovery, so they do not appear in the list.
Datastore Properties
Common fields for every source datastore, shown below the Datastores Extraction section. You fill these in on both flows.
| FIELD | REQUIRED | TYPE | DESCRIPTION |
|---|---|---|---|
| Name Template | Text | Defines the naming pattern for each source datastore being created. Use {{schema}} as a placeholder that gets replaced with the actual schema name (e.g., oracle_{{schema}} becomes oracle_sales). Left empty, the datastore is named from the connection name and the schema. |
|
| Group | Option | Organizes your datastores under a shared group in the navigation tree. Select an existing group or create a new one with the Add New Group toggle. | |
| Teams | Option | Select one or more teams to associate with this source datastore. | |
| Initiate Sync | Checkbox | Automatically sync the datastore to detect containers and fields after creation. |
Steps
There are two ways to set up the connection: reuse a connection you already saved (Existing Connection) or create a new one from scratch (New Connection). The tabs below walk through each option; pick the one you want to follow. Each field is described in the Field reference above.
Step 1: Navigate to the Source Datastores page.
Step 2: Click the Add Source Datastore button at the top-right corner.
Step 3: The Add Datastore page opens.
Step 4: Select New Connection next to the Search field.
Step 5: Select Oracle from the connector grid. Use the search field to filter connectors by name.
Step 6: Fill in the Connection Properties: the Connection Name, Host, Port, Protocol, User, and Password, then the Connect By field for the Method you choose.
Step 7: Optionally, expand Secrets Management to retrieve credentials from a secrets manager.
Step 8: Fill in the Datastores Extraction fields (Schema) and the Datastore Properties.
Step 9: Click Test connection. A success message confirms that the connection has been verified.
Info
The Finish and Next buttons stay disabled until the connection test passes on the current values. If the test fails, see Troubleshooting Common Errors.
Step 10: Click Finish to create the datastore.
Tip
To link an enrichment datastore so Qualytics can store anomalies and metadata from the first operation, click Next instead of Finish. It has to live on a connector other than Oracle; see Link Enrichment on Datastore Creation.
Step 11: A success dialog confirms that your datastore has been added. Click Go to your datastore to open its page.
Step 1: Navigate to the Source Datastores page.
Step 2: Click the Add Source Datastore button at the top-right corner.
Step 3: The Add Datastore page opens.
Step 4: Select Existing Connection next to the Search field.
Step 5: Select the saved Oracle connection from the grid. Use the search field to filter connections by name. The Connection Properties and Secrets Management sections come already filled in and read-only.
Start a new connection from this one
To use the selected connection as a starting point for a brand-new connection instead, click the Duplicate as a new connection button on the selected connection. The form switches to New Connection mode with the connection's settings already filled in for you to adjust.
Step 6: Fill in the Datastores Extraction fields (Schema) and the Datastore Properties. These are the only fields left to fill in.
Step 7: Click Test connection. A success message confirms that the connection has been verified.
Info
The Finish and Next buttons stay disabled until the connection test passes on the current values. If the test fails, see Troubleshooting Common Errors.
Step 8: Click Finish to create the datastore.
Tip
To link an enrichment datastore so Qualytics can store anomalies and metadata from the first operation, click Next instead of Finish. It has to live on a connector other than Oracle; see Link Enrichment on Datastore Creation.
Step 9: A success dialog confirms that your datastore has been added. Click Go to your datastore to open its page.
API Payload Examples
Creating a Source Datastore
This section provides sample payloads for creating an Oracle datastore. Replace the placeholder values with actual data relevant to your setup.
Endpoint: /api/datastores (post)
{
"name": "your_datastore_name",
"teams": ["Public"],
"schema": "oracle_schema",
"enrichment_only": false,
"trigger_sync": true,
"connection": {
"name": "your_connection_name",
"type": "oracle",
"host": "oracle_host",
"port": 1521,
"username": "oracle_username",
"password": "oracle_password",
"parameters": {
"authentication_type": "SID",
"sid": "orcl",
"protocol": "TCP"
}
}
}
{
"name": "your_datastore_name",
"teams": ["Public"],
"schema": "oracle_schema",
"enrichment_only": false,
"trigger_sync": true,
"connection": {
"name": "your_connection_name",
"type": "oracle",
"host": "oracle_host",
"port": 1521,
"username": "oracle_username",
"password": "oracle_password",
"parameters": {
"authentication_type": "SERVICE_NAME",
"service_name": "orclpdb1",
"protocol": "TCP"
}
}
}
# Step 1: Create a Connection
qualytics connections create \
--type oracle \
--name "your_connection_name" \
--host ${ORACLE_HOST} \
--port 1521 \
--username ${ORACLE_USER} \
--password ${ORACLE_PASSWORD}
# Step 2: Create a Source Datastore
qualytics datastores create \
--name "your_datastore_name" \
--connection-name "your_connection_name" \
--schema your_schema
No database field
Oracle datastores are scoped by schema, so there is no database in the payload.
Connect By
authentication_type selects how the instance is addressed: SID with a sid, or SERVICE_NAME with a service_name. Left out, it defaults to SID. protocol accepts TCP or TCPS and defaults to TCP.
Link an Enrichment Datastore to a Source Datastore
Oracle cannot host an enrichment datastore, so link one that lives on a supported connector:
Endpoint Details: /api/datastores/{datastore-id}/enrichment/{enrichment-id} (patch)