Two Distinct Epochs

Oracle Database 19c and Oracle Database 23ai are both long-term support (LTS) releases, but they represent two fundamentally different philosophies about what a database should be.

Oracle 19c stands as the apex of traditional database optimization — a mature, stable, and highly refined platform focused on maximizing the performance, security, and availability of existing enterprise workloads. It is the terminal release of the 12c family, embodying a decade of enhancements in automation, in-memory processing, and security controls. In stark contrast, Oracle Database 23ai marks a strategic and technological inflection point.

Understanding the differences between them is the essential starting point for any upgrade decision.


At a Glance

Category Oracle 19c Oracle 23ai
Release type Long-Term Support (LTS) Long-Term Support (LTS)
Release year 2019 2024 (production)
Premier Support Through April 2027 Through December 31, 2031
Extended Support Through April 2030 TBD
Architecture Non-CDB or CDB/PDB CDB/PDB only (non-CDB removed)
AI features None native AI Vector Search, DBMS_VECTOR
New features Mature, stable 300+ new features
Free edition No Yes — Oracle Database 23ai Free
Direct upgrade to 21c or 23ai N/A (current LTS)

Architecture: The Biggest Breaking Change

Oracle Database 23ai no longer supports the classic non-CDB architecture, requiring adoption of the CDB/PDB model introduced in 12.2. This change alone may well impact your ability to easily upgrade.

In Oracle 19c you could still create and run non-CDB databases — the classic architecture that dominated Oracle from version 1 through 11g. In 23ai that option is gone entirely.

Aspect Oracle 19c Oracle 23ai
Non-CDB support Yes (deprecated but functional) Removed entirely
CDB/PDB support Yes Yes (only option)
Max PDBs (Free/SE) 3 user PDBs Unlimited in Free edition
Non-CDB to PDB migration Optional Required before upgrading

If you are running 19c non-CDB databases, converting to PDB is a mandatory prerequisite before upgrading to 23ai. The AutoUpgrade tool can handle this conversion automatically as part of the upgrade process.


AI Capabilities

This is the most dramatic difference between the two releases — Oracle 23ai is the first release that heavily focuses on features for AI. That is also why Oracle decided to rename it from Database 23c to the more technically catchy Database 23ai.

Feature Oracle 19c Oracle 23ai
VECTOR data type Not available Native — VECTOR(dims, format)
Vector indexes Not available HNSW (in-memory) and IVF (disk)
Similarity search Not available VECTOR_DISTANCE() with 5 metrics
Embedding generation External only DBMS_VECTOR.UTL_TO_EMBEDDING
LLM integration External only DBMS_VECTOR_CHAIN (OCI, OpenAI, Cohere)
RAG pipelines Application-tier only Native SQL — no middleware required
Semantic search Not available FETCH APPROXIMATE with ANN indexes

In Oracle 19c, building a semantic search or RAG application meant maintaining a separate vector database (Pinecone, pgvector, Chroma) alongside your Oracle instance. In 23ai, the vector store is Oracle itself — same ACID guarantees, same SQL interface, no sync overhead.

-- Oracle 23ai: semantic search in pure SQL
SELECT content, VECTOR_DISTANCE(embedding, :query_vec, COSINE) AS score
FROM documents
ORDER BY score
FETCH APPROXIMATE FIRST 10 ROWS ONLY;

SQL and PL/SQL Developer Experience

Oracle 23ai removes a significant amount of boilerplate that 19c developers had to write daily.

IF NOT EXISTS / IF EXISTS

-- Oracle 19c: error if table already exists
CREATE TABLE employees (...);
-- ORA-00955: name is already used by an existing object

-- Oracle 23ai: no error, no exception block needed
CREATE TABLE IF NOT EXISTS employees (...);
DROP TABLE IF EXISTS employees;
DROP INDEX IF EXISTS emp_idx;

SELECT Without FROM DUAL

-- Oracle 19c
SELECT SYSDATE FROM dual;
SELECT 1 + 1 FROM dual;

-- Oracle 23ai
SELECT SYSDATE;
SELECT 1 + 1;

GROUP BY Column Aliases

-- Oracle 19c: must repeat the expression
SELECT TRUNC(hire_date, 'MM') AS hire_month, COUNT(*)
FROM employees
GROUP BY TRUNC(hire_date, 'MM');

-- Oracle 23ai: use the alias directly
SELECT TRUNC(hire_date, 'MM') AS hire_month, COUNT(*)
FROM employees
GROUP BY hire_month;

Boolean Data Type

-- Oracle 19c: no native BOOLEAN in SQL (PL/SQL only)
-- Workaround: NUMBER(1) or VARCHAR2(1) with 'Y'/'N'
CREATE TABLE flags (is_active NUMBER(1) CHECK (is_active IN (0,1)));

-- Oracle 23ai: native BOOLEAN in SQL
CREATE TABLE flags (is_active BOOLEAN);
INSERT INTO flags VALUES (TRUE);
SELECT * FROM flags WHERE is_active = TRUE;

UPDATE and DELETE with JOIN

-- Oracle 19c: correlated subquery required
UPDATE employees e
SET salary = salary * 1.10
WHERE dept_id IN (
  SELECT dept_id FROM departments WHERE dept_name = 'Engineering'
);

-- Oracle 23ai: JOIN syntax directly
UPDATE employees e
  JOIN departments d ON e.dept_id = d.dept_id
SET e.salary = e.salary * 1.10
WHERE d.dept_name = 'Engineering';

Additional SQL Enhancements in 23ai

Feature 19c 23ai
IF [NOT] EXISTS DDL No Yes
SELECT without FROM No Yes
BOOLEAN SQL data type No Yes
GROUP BY aliases No Yes
UPDATE/DELETE with JOIN No Yes
SQL Domains No Yes
Annotations on objects No Yes
INTERVAL aggregation (SUM/AVG) No Yes
CEIL/FLOOR on DATE/TIMESTAMP No Yes
CASE expression improvements Limited Enhanced
DEFAULT ON NULL FOR INSERT AND UPDATE No Yes

Security

Oracle 23ai shifts the security posture from reactive detection to proactive prevention by embedding security deeper into the database kernel.

Feature Oracle 19c Oracle 23ai
SQL Firewall Not available Built into kernel — allow-list enforcement
Schema-level privileges Not available GRANT SELECT ANY TABLE ON SCHEMA hr
Immutable Tables Backported from 21c Enhanced with compliance controls
Blockchain Tables Backported from 21c Row-level signature verification enhanced
GRANT ANY TABLE scoping Database-wide only Can be scoped to a single schema
DBA_SCHEMA_PRIVS view Not available New — tracks schema privilege grants

The SQL Firewall is arguably the most impactful security addition. It operates inside the database kernel, inspects every incoming SQL statement before execution, and blocks anything not on the pre-approved allow-list — regardless of what happens at the application tier.

-- 19c: no built-in SQL inspection
-- Application must implement its own input sanitization

-- 23ai: SQL Firewall inside the database
EXEC DBMS_SQL_FIREWALL.ENABLE;
EXEC DBMS_SQL_FIREWALL.START_CAPTURE(username => 'APP_USER');
-- ... run normal application workload ...
EXEC DBMS_SQL_FIREWALL.STOP_CAPTURE(username => 'APP_USER');
EXEC DBMS_SQL_FIREWALL.GENERATE_ALLOW_LIST(username => 'APP_USER');
EXEC DBMS_SQL_FIREWALL.ENABLE_ALLOW_LIST(
  username => 'APP_USER',
  enforce  => DBMS_SQL_FIREWALL.ENFORCE_SQL);

Multi-Model Data Support

Oracle 19c introduced JSON support and had basic graph capabilities. Oracle 23ai expands both significantly and adds first-class vector support.

Data model Oracle 19c Oracle 23ai
Relational Full Full
JSON Supported — IS JSON constraint, dot notation Enhanced — JSON Duality Views, JSON Collections, MongoDB API
Property Graph PGQL (proprietary) SQL/PGQ (ANSI standard)
Vector Not available Native VECTOR type with ANN indexes
Spatial Supported Enhanced
XML Supported Supported
Document store SODA (limited) MongoDB-compatible API

JSON Relational Duality Views are the headline multi-model feature — they let you expose relational tables as updatable JSON documents without any data duplication.

-- 23ai: expose relational data as JSON — reads and writes both work
CREATE OR REPLACE JSON RELATIONAL DUALITY VIEW dept_dv AS
  departments @INSERT @UPDATE @DELETE
  { deptId: dept_id, deptName: dept_name,
    employees: employees @INSERT @UPDATE @DELETE
    [{ empId: emp_id, empName: emp_name }] };

Performance

Both releases are highly capable for enterprise workloads. 23ai builds on 19c's foundation with several new capabilities.

Feature Oracle 19c Oracle 23ai
Automatic Indexing Introduced Enhanced — improved ML models
In-Memory Column Store Supported Enhanced
True Cache Not available New — read-only in-memory cache instance
Lock-Free Reservations Not available New — eliminates hot row contention
Priority Transactions Not available New — high-priority workload preemption
Vector index search Not available HNSW (sub-millisecond at scale)
Partition pruning for graphs Not available IVF local indexes on partitioned tables

True Cache is worth highlighting — it is a separate lightweight Oracle instance that serves read queries from memory, offloading the primary database without Oracle RAC licensing.


DBA and Operations

Feature Oracle 19c Oracle 23ai
DB_DEVELOPER_ROLE Not available New predefined role for developers
AutoUpgrade tool Available Enhanced — handles non-CDB to PDB conversion
SQL Analysis Report Not available New — detects anti-patterns at dev time
RMAN immutable backups Not available New — on OCI Object Storage
Data Pump monitoring views Limited 3 new V$DATAPUMP_* views
Bigfile tablespace default Smallfile default Bigfile is now the default
DBMS_SPACE.SHRINK_TABLESPACE Not available New — reclaim bigfile space
TNS error messages Cryptic (ORA-12541) Detailed cause-and-action guidance
DBMS_HCHECK Not available New — data dictionary health checks

The DB_DEVELOPER_ROLE is a significant quality-of-life improvement. In 19c environments it was common to grant DBA to developers just to avoid repeated privilege requests. 23ai provides a curated role with everything a developer needs and nothing they don't.


Free Edition Comparison

Oracle 19c Oracle 23ai Free
Free edition available No Yes
CPU threads N/A 2
RAM N/A 2 GB
User data N/A 12 GB
AI Vector Search N/A Included
JSON Duality Views N/A Included
SQL Firewall N/A Included
License required Yes No

Every 23ai feature — including AI Vector Search — is available in the free edition. This makes 23ai accessible to any developer or DBA who wants to evaluate the new capabilities without any licensing cost.


Support Lifecycle

While 19c's Premier Support ends in 2029 (and Extended Support in 2032), upgrading now guarantees longer coverage, access to new AI features, and continued security updates.

Oracle 19c Oracle 23ai
Premier Support end April 2027 December 31, 2031
Extended Support end April 2030 TBD
Remaining Premier years (from 2025) ~2 years ~6 years

With only about two years of Premier Support remaining for 19c, planning your upgrade path to 23ai now is prudent — especially given that transitioning to Oracle Database 23ai could potentially take two to three years, pending the project is successful, especially if navigating a complex multi-upgrade path.


Should You Upgrade?

The decision depends on your workload and timeline — but the direction is clear.

Upgrade to 23ai if:

  • You are building or planning AI-driven applications (semantic search, RAG, recommendations)
  • Your team wants the SQL developer improvements (IF NOT EXISTS, BOOLEAN, SQL Domains)
  • You need SQL Firewall for compliance (PCI-DSS, SOC 2, financial services)
  • Your 19c Premier Support window is closing
  • You want the longest possible support runway (6+ years of Premier Support)

Stay on 19c for now if:

  • Your workload is stable and has no immediate AI requirements
  • You are mid-way through a complex application re-certification cycle
  • You are running non-CDB and haven't planned the PDB migration yet
  • Achieving a stable release typically takes time, often at least two years — the version you've archived may not be stable enough for critical production workloads yet

Either way — start planning now. The non-CDB to PDB migration is the step that catches most teams off-guard. Even if you plan to stay on 19c for another year, completing that architectural migration now removes the biggest blocker when you are ready to move to 23ai.


Migration Quick Reference

# Check your upgrade path
java -jar preupgrade.jar FILE TEXT DIR /tmp/preupgrade

# Run AutoUpgrade analyze mode (no changes)
java -jar autoupgrade.jar -config upgrade.cfg -mode analyze

# Check non-CDB status
sqlplus / as sysdba
SQL> SELECT cdb FROM v$database;
-- CDB = NO means you are running non-CDB and must convert first

# Create a guaranteed restore point before upgrading
SQL> CREATE RESTORE POINT before_23ai GUARANTEE FLASHBACK DATABASE;

For the full step-by-step upgrade walkthrough, see the Upgrading from Oracle 19c to 23ai guide.