{ 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>
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>
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.
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
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)