Oracle Database 23ai: what changed and what to check before upgrading
AI vector search, JSON relational duality, SQL Domains and the practical upgrade path from 19c — plus the compatibility checks to run before you commit.
Oracle Database 23ai is the long-term support release that follows 19c for most estates. It bundles a large feature set, but for an upgrade decision only a handful of items usually matter.
The features that change designs
- AI Vector Search — a native
VECTORdata type with distance operators and vector indexes, so retrieval-augmented generation can run against operational data without a separate vector store. - JSON Relational Duality Views — one schema exposed both as normalised tables and as documents, updatable from either side. This removes a lot of ORM/document sync code.
- SQL Domains and Annotations — reusable column semantics (currency, email, percentage) declared once and enforced everywhere.
- Boolean data type and improved
IF [NOT] EXISTSDDL — small, but they remove a decade of workarounds. - Lock-free reservations for high-contention inventory-style columns.
-- Vector search example
CREATE TABLE docs (
id NUMBER GENERATED ALWAYS AS IDENTITY,
body CLOB,
embed VECTOR(768, FLOAT32)
);
SELECT id, body
FROM docs
ORDER BY VECTOR_DISTANCE(embed, :query_vec, COSINE)
FETCH FIRST 5 ROWS ONLY;
Pre-upgrade checklist
- Run preupgrade.jar / AutoUpgrade in analyze mode and clear every ERROR item.
- Check deprecated and desupported features: non-CDB architecture is gone, so a non-CDB 19c database must be converted to a PDB.
- Confirm client compatibility — older JDBC/OCI clients may need patching; test your application driver matrix first.
- Capture a SQL Performance Analyzer baseline and replay it after the upgrade; optimizer changes are the main source of post-upgrade surprises.
- Verify Data Guard and backup tooling versions, and take a guaranteed restore point before starting.
- Review character set and any deprecated parameters flagged by the analysis.
Upgrade paths
AutoUpgrade is the supported and by far the least painful route for in-place upgrades. For large databases with tight windows, consider a Data Guard rolling upgrade or a full transportable export/import into a fresh CDB — the latter also gives you a clean tablespace layout.
After the upgrade
- Re-gather dictionary and fixed-object statistics.
- Set
OPTIMIZER_FEATURES_ENABLEback to the new default only after SPA validation. - Recompile invalid objects (
utlrp.sql) and check for invalid PL/SQL from removed built-ins. - Keep the guaranteed restore point until a full business cycle has passed.
See also the Oracle vendor page for documentation, LiveLabs and certification links.