Catalogs
Oracle & SQL Server

Oracle & SQL Server

catalog.schema.table

Oracle and SQL Server catalogs are read through ODBC. You query them like any other catalog, join them with your other catalogs, and Thunderduck pushes filters and LIMIT down to the remote database where it can.

These catalogs are read-only. You can query them and copy their data into another catalog, but you cannot INSERT, UPDATE, DELETE, CREATE, DROP or ALTER anything in Oracle or SQL Server through Thunderduck. See Read-only.

What you need

Oracle

FieldNotes
Host, portPort defaults to 1521
Service nameFor example ORCL
User, passwordA read-only user is enough
SchemaOptional. Limits schema browsing; comma-separated for several

SQL Server

FieldNotes
Host, portPort defaults to 1433
DatabaseOne catalog is one database
User, passwordA read-only login is enough
EncryptDefaults to yes
Trust server certificateDefaults to no
SchemaOptional. Limits schema browsing; comma-separated for several

Network reachability

The database must be reachable from Thunderduck's network: either a private RDS instance in the same VPC, or a host reachable from Thunderduck.

SQL Server encryption

With Encrypt on and Trust server certificate off, Thunderduck validates the server certificate, so the server needs a certificate signed by a public CA or by Amazon RDS (Thunderduck trusts the RDS CA for every region). For other self-signed certificates, turn Trust server certificate on.

Example

SELECT e.employee_id, e.last_name, SUM(o.total) AS revenue
FROM ora.hr.employees e
JOIN pg.public.orders o ON o.sales_rep_id = e.employee_id
WHERE o.created_at >= DATE '2026-01-01'
GROUP BY e.employee_id, e.last_name;

Read-only

Every statement that would change an Oracle or SQL Server catalog is refused before it runs, whatever your role grants:

Oracle and SQL Server catalogs are read-only

This covers INSERT, UPDATE, DELETE, MERGE, CREATE, DROP and ALTER, and CREATE VIEW over these catalogs. It does not depend on the database login: even a login that may write cannot write through Thunderduck, so a read-only login is all you need to give it.

Reading from them into a writable catalog works. Copy a table into Iceberg, or deliver results into PostgreSQL:

CREATE TABLE lake.default.employees AS
SELECT * FROM ora.hr.employees;
 
INSERT INTO reporting_pg.public.sqlserver_orders
SELECT * FROM mssql.dbo.orders
WHERE  order_date >= DATE '2026-10-01';

Pushdown

Filters and LIMIT run on the remote database, with two exceptions:

  • Oracle: conditions involving an empty string '' run in Thunderduck, because Oracle treats '' as NULL.
  • SQL Server: LIKE is not pushed down.

SQL Server comparisons follow the database collation, which is usually case-insensitive, unlike DuckDB. This is a documented difference: 'a' = 'A' can match on the remote side.

Each statement sent to Oracle or SQL Server carries a -- Thunderduck Query. comment with the Thunderduck query and user id, so you can find it in the database's own SQL log; see Query attribution.

Limitations

  • Read-only. Writes are refused; see Read-only.
  • Not available in dbt pipelines.
  • At most 16 Oracle or SQL Server table references in one query.
  • No views over these catalogs. CREATE VIEW is refused; query the tables directly.
  • Single-threaded scans. Each referenced table is fetched over its own connection, single-threaded per reference.
  • Oracle schema browsing needs Oracle 12.2 or later.