Skip to content

dbSaci

Point an unmodified Oracle driver at dbSaci and it connects, authenticates, and runs a session — while the database behind it is PostgreSQL or MariaDB.

dbSaci speaks Oracle’s TNS / TTC wire protocol on the front and PostgreSQL or MariaDB on the back. An unmodified Oracle client — python-oracledb (thin), the Oracle JDBC thin driver, ODP.NET managed — points at dbSaci instead of at an Oracle database, and dbSaci:

1 · Terminates the handshake

The full Oracle Net connect + TTC negotiation + challenge/response auth (12c PBKDF2 with mutual server proof, or the 11g MD5 verifier).

2 · Translates the SQL

The Oracle SQL/PL-SQL dialect it understands is rewritten to the selected backend; binds are sent as backend parameters.

3 · Runs it on the backend

One backend round trip to PostgreSQL + orafce, or MariaDB 11.4+ in SQL_MODE=ORACLE.

4 · Re-frames the result

The backend result is re-encoded into Oracle’s binary framing and streamed back batch by batch.

The application keeps its Oracle driver, its connection-string shape, and most of its SQL. Nothing about the database it actually talks to is Oracle.

IvorySQL is a fork of the PostgreSQL server that builds Oracle SQL / PL-SQL compatibility — an Oracle parse mode, PL/iSQL, packages, NUMBER/DATE semantics — into the engine. It goes deep on the dialect, but it still speaks the PostgreSQL wire protocol: the application connects with a PostgreSQL driver, not its Oracle one.

dbSaci is the other way round. It speaks Oracle’s TNS/TTC wire protocol, so the unmodified Oracle driver — ojdbc, ODP.NET, python-oracledb — connects to it exactly as it would to Oracle, and the database behind it is stock PostgreSQL or MariaDB. The trade is the SQL/PL-SQL surface: dbSaci only covers what its translation layer plus the selected backend compatibility facilities can express.

They solve different problems. Reach for IvorySQL if you can repoint the app at a new database and want broad Oracle SQL semantics; reach for dbSaci if the app and its Oracle client have to stay exactly as they are.