Skip to content

Oracle 23ai Compatibility Guide

Oracle 23ai Compatibility Guide

Target: Oracle Database 23ai


Overview

This guide documents compatibility status, migration paths, and production deployment scenarios.

Key Capabilities

  1. TNS Protocol Production Hardening

    • Connection pooling with <5ms overhead
    • Large packet support (>32KB, up to 1MB)
    • SSL/TLS encryption (TLS 1.2/1.3)
    • Performance: <5ms connection acquisition
  2. PL/SQL Edge Case Completion

    • REF CURSOR FOR loops
    • Nested cursor support (up to 255 levels)
    • Complex lifecycle management
    • Bulk operations with cursors
  3. Dynamic SQL Enhancement

    • EXECUTE IMMEDIATE edge cases
    • Complex bind variable scenarios
    • IN/OUT/IN OUT parameter handling
    • LOB, RECORD, and object type binding
  4. Driver Validation

    • JDBC, Python (cx_Oracle), Node.js, Go, OCI
    • Production scenario validation

1. TNS Protocol Compatibility

1.1 Protocol Support

Version: TNS 8.0+ (compatible with Oracle 8i through 23ai)

Packet Types: All 14 TNS packet types supported

CONNECT (0x01) - Connection establishment
ACCEPT (0x02) - Connection acceptance
ACK (0x03) - Acknowledgment
REFUSE (0x04) - Connection refusal
REDIRECT (0x05) - Connection redirect
DATA (0x06) - Data transfer
NULL (0x07) - NULL packet
ABORT (0x09) - Connection abort
RESEND (0x0B) - Resend request
MARKER (0x0C) - Marker packet
ATTENTION (0x0D) - Attention signal
CONTROL (0x0E) - Control packet

1.2 Connection Pooling

Performance Metrics:

  • Connection acquisition: <5ms (fast path)
  • Connection creation: <10ms (slow path)
  • Idle connection cleanup: Automatic
  • Peak connections tracking: Enabled

1.3 Large Packet Support

Capabilities:

  • Standard packets: Up to 64KB
  • Extended packets: Up to 1MB
  • Automatic fragmentation: Yes
  • Reassembly: Transparent

1.4 SSL/TLS Encryption

Supported Protocols:

  • TLS 1.2
  • TLS 1.3 (recommended)

Cipher Suites:

- TLS_AES_256_GCM_SHA384 (TLS 1.3)
- TLS_AES_128_GCM_SHA256 (TLS 1.3)
- TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (TLS 1.2)
- TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (TLS 1.2)

2. PL/SQL Compatibility

2.1 REF CURSOR Support

Strong REF CURSOR (Typed):

DECLARE
TYPE emp_cursor_type IS REF CURSOR RETURN employees%ROWTYPE;
emp_cursor emp_cursor_type;
BEGIN
OPEN emp_cursor FOR SELECT * FROM employees WHERE dept_id = 10;
-- Process cursor
CLOSE emp_cursor;
END;

Weak REF CURSOR (SYS_REFCURSOR):

DECLARE
emp_cursor SYS_REFCURSOR;
BEGIN
OPEN emp_cursor FOR 'SELECT * FROM employees WHERE salary > :1' USING 50000;
-- Process cursor
CLOSE emp_cursor;
END;

2.2 Cursor FOR Loops

Explicit Cursor:

DECLARE
CURSOR emp_cursor IS SELECT * FROM employees;
BEGIN
FOR emp_rec IN emp_cursor LOOP
DBMS_OUTPUT.PUT_LINE(emp_rec.name);
END LOOP;
-- Cursor auto-closes
END;

Implicit Cursor (Inline Query):

BEGIN
FOR emp_rec IN (SELECT * FROM employees WHERE dept_id = 10) LOOP
DBMS_OUTPUT.PUT_LINE(emp_rec.name);
END LOOP;
END;

REF CURSOR FOR Loop:

DECLARE
emp_cursor SYS_REFCURSOR;
BEGIN
OPEN emp_cursor FOR SELECT * FROM employees;
FOR emp_rec IN emp_cursor LOOP
DBMS_OUTPUT.PUT_LINE(emp_rec.name);
END LOOP;
CLOSE emp_cursor;
END;

2.3 Nested Cursors

Support: Up to 255 nesting levels (Oracle limit)

Example:

DECLARE
CURSOR dept_cursor IS SELECT dept_id FROM departments;
CURSOR emp_cursor(p_dept_id NUMBER) IS
SELECT * FROM employees WHERE dept_id = p_dept_id;
BEGIN
FOR dept_rec IN dept_cursor LOOP
FOR emp_rec IN emp_cursor(dept_rec.dept_id) LOOP
DBMS_OUTPUT.PUT_LINE(dept_rec.dept_id || ': ' || emp_rec.name);
END LOOP;
END LOOP;
END;

2.4 Cursor Attributes

All cursor attributes fully supported:

%ISOPEN - Check if cursor is open
%FOUND - Check if last fetch returned a row
%NOTFOUND - Check if last fetch returned no row
%ROWCOUNT - Number of rows fetched so far

3. Dynamic SQL (EXECUTE IMMEDIATE)

3.1 Basic Usage

SELECT INTO:

DECLARE
v_name VARCHAR2(100);
v_salary NUMBER;
BEGIN
EXECUTE IMMEDIATE 'SELECT name, salary FROM employees WHERE id = :1'
INTO v_name, v_salary
USING 100;
END;

DML with RETURNING:

DECLARE
v_new_id NUMBER;
BEGIN
EXECUTE IMMEDIATE 'INSERT INTO employees (name) VALUES (:1) RETURNING id INTO :2'
USING 'John Doe'
RETURNING INTO v_new_id;
END;

3.2 Edge Cases Supported

Complex Bind Variables:

-- RECORD type binding
EXECUTE IMMEDIATE 'INSERT INTO employees VALUES (:1, :2, :3)'
USING emp_record.id, emp_record.name, emp_record.salary;
-- Collection binding with FORALL
FORALL i IN 1..emp_ids.COUNT
EXECUTE IMMEDIATE 'DELETE FROM employees WHERE id = :1'
USING emp_ids(i);
-- LOB binding
EXECUTE IMMEDIATE 'INSERT INTO documents (id, content) VALUES (:1, :2)'
USING doc_id, large_clob_content;

Mixed Parameter Modes:

DECLARE
v_result NUMBER;
BEGIN
EXECUTE IMMEDIATE 'BEGIN update_employee(:1, :2, :3); END;'
USING IN emp_id, IN OUT emp_name, OUT v_result;
END;

NULL with Type Specification:

EXECUTE IMMEDIATE 'UPDATE employees SET manager_id = :1 WHERE id = :2'
USING CAST(NULL AS NUMBER), emp_id;

Bulk Operations:

DECLARE
TYPE emp_array IS TABLE OF NUMBER;
emp_ids emp_array;
BEGIN
EXECUTE IMMEDIATE 'SELECT id FROM employees'
BULK COLLECT INTO emp_ids;
END;

3.3 Limits and Constraints

ConstraintOracle LimitHeliosDB
Max bind variables32,76732,767
Warning threshold1,0001,000
SQL string length32,767 chars1MB

4. DBMS Packages

4.1 Core Packages

DBMS_OUTPUT (100%):

BEGIN
DBMS_OUTPUT.ENABLE(1000000); -- 1MB buffer
DBMS_OUTPUT.PUT_LINE('Hello Oracle');
DBMS_OUTPUT.GET_LINE(line, status);
END;
  • Buffer sizes: 20KB - 1MB
  • Thread-safe session management
  • Overflow protection

DBMS_RANDOM (100%):

-- Numeric random
v_random := DBMS_RANDOM.VALUE(1, 100);
-- String random
v_string := DBMS_RANDOM.STRING('A', 10);
-- Cryptographically secure (extension)
v_secure := DBMS_RANDOM.SECURE_VALUE(1, 100);

DBMS_LOCK (100%):

-- Request lock
status := DBMS_LOCK.REQUEST(lockhandle, lockmode => 6, timeout => 10);
-- Release lock
status := DBMS_LOCK.RELEASE(lockhandle);
-- Deadlock detection: Automatic

DBMS_SQL (95%):

  • Dynamic SQL execution
  • Cursor management
  • Bind variable handling
  • Column descriptor support

DBMS_LOB (95%):

  • CLOB/BLOB operations
  • Read/Write/Append
  • Length/Substring
  • Conversion functions

4.2 Additional Packages

DBMS_METADATA (85%):

  • DDL generation for 10+ object types
  • Transform parameters
  • Batch processing (OPEN/FETCH/CLOSE)

DBMS_SCHEDULER (80%):

  • Job creation and management
  • Program/Schedule reuse
  • Calendar expressions
  • Async execution

UTL_HTTP (75%):

  • HTTP/HTTPS requests
  • Authentication support
  • Response handling

DBMS_CRYPTO (70%):

  • Encryption/Decryption
  • Hashing (SHA256, MD5)
  • HMAC support

5. Driver Compatibility Matrix

5.1 Validated Drivers (100%)

DriverVersionResultNotes
JDBCThick/Thin100%Full compatibility
Python (cx_Oracle)8.3+100%All features work
Node.js (oracledb)6.0+100%Full compatibility
Go (godror)v0.40+100%Complete support
OCI (C API)23ai100%Native integration

5.2 Connection String Examples

JDBC:

String url = "jdbc:heliosdb:thin:@localhost:1521/ORCL";
Connection conn = DriverManager.getConnection(url, "user", "password");

Python:

import cx_Oracle
connection = cx_Oracle.connect("user/password@localhost:1521/ORCL")

Node.js:

const oracledb = require('oracledb');
const connection = await oracledb.getConnection({
user: "user",
password: "password",
connectString: "localhost:1521/ORCL"
});

Go:

import "github.com/godror/godror"
db, err := sql.Open("godror", "user/password@localhost:1521/ORCL")

6. Migration from Oracle to HeliosDB

6.1 Migration Path

Phase 1: Assessment

  1. Run compatibility assessment tool
  2. Identify custom packages/procedures
  3. Review SQL dialect usage

Phase 2: Testing

  1. Deploy HeliosDB in parallel
  2. Replicate schema using DBMS_METADATA
  3. Run regression tests

Phase 3: Cutover

  1. Update connection strings
  2. Monitor performance
  3. Validate results

6.2 Compatibility Modes

Oracle 23ai Mode (Default):

-- Automatically enabled
-- All Oracle 23ai features available

Strict Compatibility:

ALTER SYSTEM SET oracle_compatibility = 'STRICT';
-- Enforces exact Oracle behavior

6.3 Schema Migration

Export from Oracle:

BEGIN
DBMS_METADATA.SET_TRANSFORM_PARAM(
DBMS_METADATA.SESSION_TRANSFORM, 'SQLTERMINATOR', TRUE);
DBMS_OUTPUT.PUT_LINE(DBMS_METADATA.GET_DDL('TABLE', 'EMPLOYEES'));
END;

Import to HeliosDB:

Terminal window
heliosdb-cli import --schema oracle_export.sql

6.4 Data Migration

Using Data Pump:

Terminal window
# Export from Oracle
expdp user/password directory=DATA_PUMP_DIR dumpfile=export.dmp
# Import to HeliosDB
heliosdb-cli import-dump export.dmp

Using SQL*Loader Format:

Terminal window
heliosdb-cli load --control employees.ctl --data employees.dat

7. Performance Characteristics

Figures below were measured on representative fixtures and are indicative only; reproduce on your own hardware and workload.

7.1 TNS Protocol Performance

OperationOracle 23aiHeliosDBDelta
Connection Establish8-12ms<5ms40% faster
Query Execute2-5ms2-4msEquivalent
Large Packet (1MB)50-80ms45-70msEquivalent

7.2 PL/SQL Performance

OperationOracle 23aiHeliosDBDelta
Simple Block1ms1.2ms<20% overhead
REF CURSOR Loop10ms11ms<10% overhead
Dynamic SQL3ms3.5ms<20% overhead
Nested Cursors (5 deep)25ms27ms<10% overhead

Optimization Notes:

  • PL/SQL overhead target: <20% vs native Oracle
  • Achieved: <15% average overhead
  • Production workloads: Equivalent performance

7.3 Connection Pool Performance

MetricTargetAchieved
Acquisition (cached)<5ms2-3ms
Acquisition<10ms8-9ms
Idle timeout300s300s
Max connections100Configurable

8. Production Deployment

8.1 Hardware Requirements

Minimum:

  • CPU: 4 cores
  • RAM: 8GB
  • Storage: SSD recommended
  • Network: 1 Gbps

Recommended (Enterprise):

  • CPU: 16+ cores
  • RAM: 64GB+
  • Storage: NVMe SSD
  • Network: 10 Gbps

8.2 Configuration

heliosdb.conf:

[oracle]
enabled = true
port = 1521
max_connections = 1000
[oracle.tns]
sdu_size = 65535
connection_pool_min = 10
connection_pool_max = 200
connection_timeout_ms = 5
[oracle.ssl]
enabled = true
protocol = "TLS13"
verify_mode = "mutual"
cert_file = "/path/to/server.crt"
key_file = "/path/to/server.key"
ca_file = "/path/to/ca.crt"
[oracle.plsql]
max_nesting_depth = 255
enable_ref_cursors = true
enable_bulk_operations = true

8.3 Monitoring

Key Metrics:

-- Connection pool status
SELECT * FROM v$connection_pool;
-- TNS statistics
SELECT * FROM v$tns_stats;
-- PL/SQL execution stats
SELECT * FROM v$plsql_stats;
-- Cursor statistics
SELECT * FROM v$cursor_stats;

8.4 Security

SSL/TLS Configuration:

  • Mandatory for production
  • Mutual authentication recommended
  • Certificate rotation: 90 days

Network Security:

  • Firewall rules: Port 1521 (or custom)
  • IP whitelisting: Recommended
  • VPN/Private network: Preferred

Authentication:

  • Password encryption: AES-256
  • Kerberos support: Available
  • LDAP integration: Available

9. Known Limitations

9.1 Feature Gaps (5%)

Advanced Queuing (DBMS_AQ): 60% complete

  • Basic queue operations:
  • Advanced queue features: Partial
  • Workaround: Use standard message queues

Advanced Replication: Not implemented

  • Data Guard equivalent: Available (HeliosDB Replication)
  • Streams API: Not supported
  • Workaround: Use HeliosDB native replication

9.2 Oracle-Specific Features Not Implemented

  • Multitenant architecture (CDB/PDB)
    • Workaround: Deploy separate HeliosDB instances
  • Oracle Label Security
    • Workaround: Application-level security
  • Oracle Spatial (full GIS)
    • Partial: PostGIS-compatible spatial available

9.3 Behavioral Differences

Error Codes: HeliosDB uses Oracle error codes but with enhanced context Optimizer: HeliosDB uses cost-based optimizer (different from Oracle’s) Explain Plans: Format differs but semantically equivalent


10. Support and Resources

10.1 Community

  • Compatibility issues: support@heliosdb.com
  • Slack Channel: #oracle-compatibility
  • Enterprise Support: Available for production deployments

12. Conclusion

Key Benefits

  1. Zero Application Changes: Drop-in replacement for Oracle
  2. Performance: Equivalent or better than Oracle 23ai
  3. Modern Architecture: Cloud-native, distributed design
  4. Licensing: Commercially licensed (source-available under SSPL-1.0) with enterprise support; contact sales@heliosdb.com for pricing

Production Readiness

<5ms connection overhead <20% PL/SQL overhead SSL/TLS encryption Enterprise support available


For migration assistance or questions, contact: support@heliosdb.com Documentation: https://heliosdb.com/docs/full/ Support: support@heliosdb.com

Version: HeliosDB 7.0 (Oracle 23ai Compatible)