DEV Community

Oracle 19.28 - New features

{ Abhilash Kumar Bhattaram : Follow on LinkedIn }

Oracle 19.28 New Features

From 19.24 to 19.27 have been pretty silent on its new features , however in 19.28 its has introduced many new features.

1. DBMS_DEVELOPER PL/SQL Packages : Provides a new PL/SQL package to retrieve object metadata as JSON (instead of XML), improving integration and performance for developers.

2. Enhancements to RADIUS Configuration : Updated RADIUS support with RFC 6613/6614 guidelines and TLS by default, improving MFA security. 

3. IF NOT EXISTS Syntax Support : Adds IF EXISTS / IF NOT EXISTS syntax for DDL statements, reducing errors in scripts. 

4. Multi-Factor Authentication (MFA) for Database Authentication : Native MFA support including push notifications and integration with MFA solutions (e.g., Cisco Duo, Oracle Mobile Authenticator) and PKI combos. 

5. Oracle Database Cloud Backup Module for Azure Blob Storage : Enables RMAN backups directly to Azure Blob Storage (on-premises or Azure VM).

6. Oracle Update Advisor Support with Oracle Fleet Patching and Provisioning (FPP) : Integrates Oracle Update Advisor with FPP for automated patch recommendations and gold image management. 

7. Schema Annotations : Allows storing/retrieving free-form metadata (name–value pairs) on schema objects — useful for application metadata. 

8. SQL Diagnostic Report (NEW REPORT_SQL in DBMS_SQLDIAG) : New function that generates a detailed HTML diagnostic report for a specified SQL statement, including plan history, optimizer stats, index details, SQL Monitor info, etc. 

Examples

I had a crack at 4 of the 8 new features that was released in 19.28
some were backported from 26ai

19.28 Feature - IF NOT EXISTS

This is a developer feature where objects can be created only oif not exists without errors

orcldev01> CREATE TABLE IF NOT EXISTS NABHAAS.TAB1 (sno number , name varchar2(40)) ;

Table created. 

Elapsed: 00:00:00.01
orcldev01> select owner,object_name,created from dba_objects where object_name like 'TAB1';

OWNER             |OBJECT_NAME                                       |CREATED
------------------|--------------------------------------------------|-----------------
NABHAAS           |TAB1                                              |11-JAN-2026 14:11

Elapsed: 00:00:00.00
orcldev01> CREATE TABLE IF NOT EXISTS NABHAAS.TAB1 (sno number , name varchar2(40)) ;

Table created. --> This is basically a dummy as table is already available

Elapsed: 00:00:00.00
orcldev01> select owner,object_name,created from dba_objects where object_name like 'TAB1';

OWNER             |OBJECT_NAME                                       |CREATED
------------------|--------------------------------------------------|-----------------
NABHAAS           |TAB1                                              |11-JAN-2026 14:11 --> You can see timestamp remains the same

Elapsed: 00:00:00.00
orcldev01> 

Enter fullscreen mode Exit fullscreen mode

19.28 Feature - dbms_developer

This is a 26ai backported feature where developers can view table data in JSON format

orcldev01> select dbms_developer.get_metadata (schema => 'NABHAAS' , name => 'TAB1' , object_type => 'TABLE' , level => 'BASIC') as metadata from dual;

METADATA
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
{"objectType":"TABLE","objectInfo":{"name":"TAB1","schema":"NABHAAS","columns":[{"name":"SNO","notNull":false,"dataType":{"type":"NUMBER"}},{"name":"NAME","notNull":false,"dataType":{"type":"VARCH
AR2","length":40,"sizeUnits":"BYTE"}}]},"etag":"DFB2EBA11BD001361E2DF1CCFE5C1BC9"}


orcldev01> select dbms_developer.get_metadata (schema => 'NABHAAS' , name => 'TAB1' , object_type => 'TABLE' , level => 'ALL') as metadata from dual;

METADATA
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
{"objectType":"TABLE","objectInfo":{"name":"TAB1","schema":"NABHAAS","columns":[{"name":"SNO","notNull":false,"dataType":{"type":"NUMBER"},"isPk":false,"isUk":false,"isFk":false,"hiddenColumn":fal
se,"virtualColumn":false,"identityColumn":false,"encryptedColumn":false},{"name":"NAME","notNull":false,"dataType":{"type":"VARCHAR2","length":40,"sizeUnits":"BYTE"},"isPk":false,"isUk":false,"isF
k":false,"hiddenColumn":false,"virtualColumn":false,"identityColumn":false,"encryptedColumn":false}],"hasBeenAnalyzed":false,"external":"NO","temporary":"NO","segmentCreated":"NO","dependencies":"
DISABLED","inMemory":"DISABLED","compression":"DISABLED"},"etag":"0AA002568416C9B3384480854A8160CC"}


Elapsed: 00:00:00.01
orcldev01> 


-- displaying in JSONM pretty format 
orcldev01> select 
json_serialize
( 
dbms_developer.get_metadata (schema => 'NABHAAS' , name => 'TAB1' , object_type => 'TABLE' , level => 'ALL')  pretty 
) as metadata from dual;  


METADATA
--------------------------------------------------------
{
  "objectType" : "TABLE",
  "objectInfo" :
  {
    "name" : "TAB1",
    "schema" : "NABHAAS",
    "columns" :
    [
      {
        "name" : "SNO",
        "notNull" : false,
        "dataType" :
        {
          "type" : "NUMBER"
        },
        "isPk" : false,
        "isUk" : false,
        "isFk" : false,
        "hiddenColumn" : false,
        "virtualColumn" : false,
        "identityColumn" : false,
        "encryptedColumn" : false
      },
      {
        "name" : "NAME",
        "notNull" : false,
        "dataType" :
        {
          "type" : "VARCHAR2",
          "length" : 40,
          "sizeUnits" : "BYTE"
        },
        "isPk" : false,
        "isUk" : false,
        "isFk" : false,
        "hiddenColumn" : false,
        "virtualColumn" : false,
        "identityColumn" : false,
        "encryptedColumn" : false
      }
    ],
    "hasBeenAnalyzed" : false,
    "external" : "NO",
    "temporary" : "NO",
    "segmentCreated" : "NO",
    "dependencies" : "DISABLED",
    "inMemory" : "DISABLED",
    "compression" : "DISABLED"
  },
  "etag" : "0AA002568416C9B3384480854A8160CC"
}


Elapsed: 00:00:00.01
orcldev01> 
Enter fullscreen mode Exit fullscreen mode

19.28 Feature - SQL Diag Report

This is my favourite , SQL Diag report provides an easy way to view data ( current / and historical ) in a single report. A zip file is created the the directory where the Diag report is run.

orcldev01> 

declare my_report clob;

begin
   my_report := dbms_sqldiag.report_sql('fa6yqnkq8fbm2', directory=>'NABHAAS_EXP', level=>'ALL');
end;
/


PL/SQL procedure successfully completed.

Enter fullscreen mode Exit fullscreen mode

An example of how the report looks like.

19.28 Feature - Annotations

Annotations is similar to comments , though comments are still available annotations could be used going forward. Annotataions will be used by OML ( Oracle Machine Learning ) for look up values.

orcldev01> alter table NABHAAS.TAB1 annotations ( add audit_required 'YES');

Table altered.

Elapsed: 00:00:00.03
orcldev01> 

orcldev01> select object_name, object_type, annotation_name, annotation_value  from dba_annotations_usage;

OBJECT_NAME         |OBJECT_TYPE         |ANNOTATION_NAME                         |ANNOTATION_VALUE
--------------------|--------------------|----------------------------------------|--------------------
TAB1                |TABLE               |AUDIT_REQUIRED                          |YES

Enter fullscreen mode Exit fullscreen mode

I feel of these 4 features are readily usable by DBA's and Developers.

How Nabhaas helps you

If you’ve made it this far, you already sense there’s a better way — in fact, you have a way ahead.

If you’d like Nabhaas to assist in your journey, remember — TAB is just one piece. Our Managed Delivery Service ensures your Oracle operations run smoothly between patch cycles, maintaining predictability and control across your environments.

TAB - Whitepaper ,
download here

Managed Delivery Services - Whitepaper ,
download here

Top comments (0)