Oracle: driver install + migration, the third engine
- Upgrade
- 26.0.0 → 26.7.1
- Database
- Oracle Database Free (23ai/26ai), release 23.26.2.0.0, single node, container gvenzl/oracle-free:23-slim
- Topology
- single container
- Host
- laptop (Docker 29, 31 GB RAM)
- Condition
- Engines other than Postgres
Summary
Oracle is the third non-Postgres engine. Keycloak does not ship the Oracle JDBC driver (licence), so this run is also the driver-install deliverable. Two results:
-
Keycloak runs and migrates on Oracle. With
ojdbc17+orai18n(Maven Central 23.26.0.0.0) dropped into the base file's providers bind-mount — no custom image needed — Keycloak 26.0.0 starts against Oracle Database Free, creates 87 tables, and the 26.0.0 → 26.7.1 migration reachesmigration_model26.7.1 cleanly. -
The Oracle Free image self-identifies as "26ai".
gvenzl/oracle-free:23-slimreportsOracle AI Database 26ai Free Release 23.26.2.0.0— Oracle renamed 23ai → 26ai in 2026. Keycloak's documented support is "23.x (23.5+)", and this release reports a 23.x version string, so it is within the supported line, but the rename is worth flagging in the runbook's pre-flight (a customer on "26ai" is on the 23.x line Keycloak supports).
Environment
| Field | Value |
|---|---|
| Keycloak from → to | 26.0.0 → 26.7.1 |
| Database | Oracle Database Free (23ai/26ai), release 23.26.2.0.0, single node, container gvenzl/oracle-free:23-slim |
| JDBC driver | com.oracle.database.jdbc:ojdbc17:23.26.0.0.0 + com.oracle.database.nls:orai18n:23.26.0.0.0 in fixtures/providers/ |
| Schema/user | keycloak (APP_USER; in Oracle the user IS the schema, so KC_DB_SCHEMA is not used) |
| Topology | single container |
| Host | laptop (Docker 29, 31 GB RAM) |
| JVM heap | -Xms1g -Xmx4g |
Procedure
# drivers (Keycloak server/db docs "Installing the Oracle Database driver")
curl -o fixtures/providers/ojdbc17.jar https://repo1.maven.org/maven2/com/oracle/database/jdbc/ojdbc17/23.26.0.0.0/ojdbc17-23.26.0.0.0.jar
curl -o fixtures/providers/orai18n.jar https://repo1.maven.org/maven2/com/oracle/database/nls/orai18n/23.26.0.0.0/orai18n-23.26.0.0.0.jar
# .env: KC_DB=oracle, COMPOSE_FILE=docker-compose.yml:docker-compose.oracle.yml
docker compose up -d db # Oracle Free first init ~11 min
docker compose up -d keycloak # 26.0.0
docker compose stop keycloak && sed -i 's/^KC_VERSION=.*/KC_VERSION=26.7.1/' .env
docker compose up -d keycloak # migrate
Results
| Check | Value |
|---|---|
| Keycloak 26.0.0 starts on Oracle | ready; 87 tables created |
migration_model before → after | 26.0.0 → 26.7.1 |
| Master-realm token endpoint after migration | ready |
| Oracle banner | Oracle AI Database 26ai Free Release 23.26.2.0.0 |
Verification
| Claim | Evidence |
|---|---|
| Driver loads from providers, no custom image | Keycloak ready on Oracle ☑ |
| Migration clean on Oracle | migration_model 26.7.1 ☑ |
| Schema created | 87 tables, 283 user indexes ☑ |
| Oracle Free is the 23.x line under a new name | banner "26ai Free Release 23.26.2.0.0" ☑ |