Oracle Database Version Matrix
The Oracle Database sink is a first-party production sink. Its compatibility evidence is managed through a local, opt-in version matrix rather than routine GitHub Actions. The matrix is designed for release preparation and local certification work where a maintainer has already arranged Docker resources, Oracle image access, registry or license setup, and any internal mirror policy.
The matrix preserves the normal nats-sinks delivery boundary: at-least-once delivery, durable Oracle commit first, JetStream ACK last. A version check must never weaken idempotency, retry, DLQ, or disconnected replay behavior to make a database version pass.
Inventory Model
The default inventory lives in
examples/oracle-database-version-matrix/matrix.json. It separates:
- prebuilt Oracle Database Free images from Oracle Container Registry;
- Oracle Autonomous Database Free Container Image variants;
- locally buildable Oracle
docker-imagesSingleInstance versions; - historical or gated versions that require operator-provided image material, license acceptance, or internal mirroring;
- entries that are documented but not directly executable by the single-instance runner.
The initial inventory evaluates these Oracle Database families:
| Matrix entry | Version family | Source path | Default status |
|---|---|---|---|
oracle-xe-11g-r2 |
Oracle Database 11g Release 2 XE | Oracle docker-images SingleInstance |
requires_manual_image_build |
oracle-12c-r1 |
Oracle Database 12c Release 1 | Oracle docker-images SingleInstance |
requires_manual_image_build |
oracle-12c-r2 |
Oracle Database 12c Release 2 | Oracle docker-images SingleInstance |
requires_manual_image_build |
oracle-18c-xe |
Oracle Database 18c XE | Oracle docker-images SingleInstance |
requires_manual_image_build |
oracle-19c |
Oracle Database 19c | Oracle docker-images SingleInstance |
requires_manual_image_build |
oracle-21c-xe |
Oracle Database 21c XE | Oracle docker-images SingleInstance |
requires_manual_image_build |
oracle-free-23ai |
Oracle Database Free 23ai / 23c-era images | Oracle Container Registry Database Free | requires_registry_license_setup |
oracle-free-26ai |
Oracle Database Free 26ai | Oracle Container Registry Database Free | requires_registry_license_setup |
adb-free-19c |
Autonomous Database Free 19c | Autonomous Database Free Container Image | requires_registry_license_setup |
adb-free-23ai |
Autonomous Database Free 23ai | Autonomous Database Free Container Image | requires_registry_license_setup |
adb-free-26ai |
Autonomous Database Free 26ai | Autonomous Database Free Container Image | requires_registry_license_setup |
Public source references used for this inventory are
Oracle Container Registry Database Free,
Oracle Autonomous Database Free Container Image,
and the Oracle
docker-images SingleInstance repository.
The repository does not commit Oracle binaries, pulled image layers, generated
database files, wallets, or private registry names.
Running The Matrix
List the known entries:
python scripts/run-oracle-db-version-matrix.py --list
Perform a dry run for one entry with an explicit image reference:
python scripts/run-oracle-db-version-matrix.py \
--include oracle-free-26ai \
--image-ref oracle-free-26ai=container-registry.oracle.com/database/free:EXPLICIT_TAG \
--dry-run
Run a live single-instance entry when the image is already present locally:
python scripts/run-oracle-db-version-matrix.py \
--include oracle-free-26ai \
--image-ref oracle-free-26ai=registry.example.invalid/oracle/database-free:26.1.0
Allow the runner to pull the selected image:
python scripts/run-oracle-db-version-matrix.py \
--include oracle-free-26ai \
--image-ref oracle-free-26ai=registry.example.invalid/oracle/database-free:26.1.0 \
--allow-pull
Run disconnected replay as part of the selected version check:
python scripts/run-oracle-db-version-matrix.py \
--include oracle-free-26ai \
--image-ref oracle-free-26ai=registry.example.invalid/oracle/database-free:26.1.0 \
--with-disconnected-replay
The runner writes sanitized evidence to
.local/oracle-db-version-matrix/oracle-db-version-matrix-report.json by
default. That path is ignored by Git. The report includes matrix IDs, source
types, support statuses, and high-level test outcomes. It does not include
passwords, full connection strings, container names, container IDs, local image
layers, host-specific paths, raw Docker logs, payloads, or private endpoints.
What The Live Runner Does
For single-instance Oracle Database entries, the runner:
- validates the selected matrix entry and explicit image reference;
- chooses a random loopback port;
- generates a local-only Oracle password;
- starts one short-lived Oracle Database container;
- waits for a configured readiness phrase in Docker logs;
- creates a generated runtime user with the permissions needed for local certification where the selected image supports that bootstrap path;
- runs
python -m pytest -q -m integration tests/integration/test_oracle_sink.pyas that generated runtime user; - sets a fresh test table name and drop-before/drop-after flags;
- optionally enables disconnected replay certification;
- removes the container by default.
The runner refuses implicit or latest image tags. Use explicit tags or
digests so the evidence can be repeated later.
Status Values
Matrix evidence uses these status values:
| Status | Meaning |
|---|---|
tested |
The selected container started and Oracle sink certification passed. |
test_failed |
The selected container started, but certification failed. Raise a managed bug before fixing code. |
dry_run |
The selected plan was validated without starting Docker. |
requires_image_ref |
The inventory entry needs a concrete image reference from the operator. |
requires_manual_config |
The entry is documented but not executable by the single-instance runner. |
image_not_present |
The image is absent locally and --allow-pull was not selected. |
image_pull_failed |
Docker could not pull the selected image. |
container_start_failed |
Docker did not start the selected container. |
readiness_timeout |
The container did not report readiness before the bounded timeout. |
runtime_user_bootstrap_failed |
The runner could not create the generated least-privilege test user. |
Autonomous Database Free Boundary
Autonomous Database Free Container Image entries are documented in the matrix because they are relevant for Oracle sink compatibility discussions. They are not currently executed by the single-instance runner because they require additional operator setup and a different readiness and connection profile. Add a narrower issue before turning those entries into live matrix steps.
Support Statement
The matrix records evidence. It is not a blanket Oracle support promise. README and Oracle sink documentation should describe Oracle Database support in terms of tested versions, expected compatibility, known limitations, and documented exclusions.
When a matrix run exposes a reproducible compatibility defect, create a managed GitHub bug, add the smallest failing regression test first, fix the defect, and attach sanitized matrix evidence to the issue.