Projects

This page contains information about several of my personal projects. These projects are purely for personal and academic research; they are not designed or intended to be commercialized.

While I have released binaries for several of these projects, do not ask me for unreleased binaries or source code. No part of these projects are for sale.

I already know several people are going to try to hack my site looking for code, but they'll just be wasting their time. Having played that game in the past myself, I'm not dumb enough to store source code on an insecure server :)

Nakano

Nakano is a log-based transactional replication system for Oracle. It is written in C and consists of three parts, capture, transformation, and application.

Before reading the REDO logs, Nakano connects to an Oracle Database server via UPI. It uses this connection to build an in-memory object resolution table which basically resembles a data dictionary. The object resolution table is used solely to resolve objects from the REDO logs during transformation.

After the initial synchronization of the object resolution table, the connection is dropped as all subsequent object creation and removal (tables, columns, etc) is captured and can be applied to the in-memory table directly. Similarly, after the table has been loaded, the capture process can begin.

Logical Change Record Capture

The capture component of Nakano is designed specifically to capture change vectors for committed transactions. Specifically, it consists of a multi-threaded module which reads Oracle REDO logs, inspects REDO headers/records, and performs appropriate actions based on the record type. All change vectors are enqueued into a persistent queue to be handled in the transformation phase.

Transformation

After change data has been captured and enqueued, it can be transformed. This can either happen locally, within the Nakano instance, or remotely (should you want to make the performance overhead as minimal as possible). Transformation simply consists of translating the captured change vectors of committed transactions into appropriate SQL statements. Currently, all table and column names are translated into generic ANSI SQL using data from the object resolution table.

After transformation, the generated SQL is placed in another persistent queue for application.

Application

The application phase of log-based replication is the last and final operation. It simply consists of dequeueing generated SQL and executing it on the target system. Currently, application is performed through an ODBC connecton to the target database. Though, one could easily replace ODBC with OCI, FreeTDS, or any other native library for increased performance.

Status: Beta-quality

Open Source ODBC Driver for Oracle

The Open Source ODBC Driver for Oracle consists of an ODBC 3.52-compliant ODBC driver for Oracle written completely in C on top of OCI. All effort has been made to minimize interactions between OCI and ODBC in order to maintain high performance.

Status: Still waiting on a response from Oracle OSS to release...

About Me

Jonah H. Harris
Metuchen, New Jersey

I've been using Oracle since 1996 and am intimately familiar with every version of Oracle since version 7. Oracle is a large, fast, and complex system which provides an endless array of things to learn. For more boring details about me and my love affair for Oracle, click here to read more...

Disclaimer

This site and its author are in no way affiliated with Oracle Corporation.

Several detailed documents on this site have kindly been provided by Oracle Corporation solely for informational and noncommercial purposes only.

Topics