fungwi Harris Matel

My Favorite Features of Oracle AI Database 26 AI

With The announcement of the latest version of the oracle database: “oracle AI Database 26 AI” for on prem, and a lot of the excitement about the tons of cool new features and tighter integration of AI with the database, Most IT folks (I included) working with the Oracle database can’t wait to get their hands on this new version. Here are some of the features I am most excited for as a Database Administrator working with the oracle database;

In this blog I will give a short description of some of these, why I am excited about them, how I see them helping me as a DBA and some links to learn more. For comprehensive info on all new oracle ai database 26 ai features;

https://docs.oracle.com/en/database/oracle/oracle-database/26/nfcoa/introduction.html

Breaking Up with DUAL: It’s Not Me, It’s You

Now if you have any experience working with oracle you have probably used dual say for something like:

SELECT SYSDATE FROM DUAL;

Or something similar. Dual is one of those quirky oracle artifacts that stuck around way longer than anyone expected. It was created in the 1980s by an oracle engineer called “Chuck Weiss” (don’t quote me on that one). According to orafaq.com In chuck’s own words he said this about why he created DUAL

I created the DUAL table as an underlying object in the Oracle Data Dictionary. It was never meant to be seen itself, but instead used inside a view that was expected to be queried. The idea was that you could do a JOIN to the DUAL table and create two rows in the result for every one row in your table. Then, by using GROUP BY, the resulting join could be summarized to show the amount of storage for the DATA extent and for the INDEX extent(s). The name, DUAL, seemed apt for the process of creating a pair of rows from just one.

It is a simple one row one column table

SQL> DESC sys.dual
Name                            Null?    Type
------------------------------- -------- -----------------------
DUMMY                                    VARCHAR2(1)

this table helps every select statement be compliant to the rule of having a from clause. Developers have used it for all kinds of things over the years namely; running calculations, getting system values(sysdate, user, systimestamp), callng functions, returning single rows in scripts. It will be weird to have SQL statements without a from clause going forward but it will reduce a few keystrokes though. DUAL definitely served its purpose over the decades however I personally can’t wait to write more code like

SELECT SYSDATE;

Shrinking Tablespaces the Easy Way

As a DBA, this is one of my most anticipated features coming up in the new oracle database version. Managing space just got a whole lot easier. For years DBAs have had the ability to shrink individual segments and data files using

alter table, alter index
&
alter database datafile '<file_name>' resize <size> ;

However an entire tablespace required a whole lot of moving of objects mostly by using datapump to export data and reload it – in the hopes of eliminating empty blocks and compact everything back together. The new shrink tablespaces feature helps you reclaim unused space at the tablespace level, safely, and online without juggling datafiles and/or scheduling any downtime; a big lifesaver for any DBA. Connor Mcdonald explains in this video.

A Bouncer for your Database

For years, Oracle databases relied heavily on application code, network firewalls, or external security tools to catch suspicious SQL. The database itself didn’t really know whether a query was normal, unusual, or outright dangerous — it just executed whatever reached it. That meant SQL injection attempts, unexpected ad‑hoc queries, or rogue tools could slip through if the outer layers missed them.

SQL Firewall changes that by letting Oracle learn what “normal” SQL looks like and block anything that doesn’t fit the pattern. It can enforce allow‑lists, detect anomalies, and stop risky SQL before it ever touches your data.

As a DBA or Developer, this can help better prevent against SQL INJECTION, move security closer to the database and give clear visibility into who is running what. It’s like giving your database its own personal bouncer

Connor McDonald again explains this in further detail

Express Lane for Important Workloads with TXN priority

I cannot count now how many times I have been messaged “Hi can you please check for database locks” by my application team. Obviously this sucks cause we know what causes the issue (database locks) and the fix (the application code) but when the application is pre-packaged/vendor supplied and you cannot access the code then… What can you do?

¯\_(ツ)_/¯

ps: my frustration with this issue highlighted above also could be solved by the parameter max_idle_blocker_time .

In busy Oracle systems, dml transactions could block others and if users fail to “commit” their transaction then critical updates that need those rows could be stuck waiting well… indefinitely. Imagine your payroll batch job not running because a user forgot to close their session before going home for the day or was/is doing some update at the same time! obviously not an ideal scenario. There are a number of things as a database developer when writing your code you can use to mitigate this (I’m looking at optimistic locking and it’s various modifiers) but as explained above it’s not always that you can access and/or modify that.

Transaction Priority changes that by letting you mark certain operations as high priority, allowing them to jump ahead of lower‑priority blockers. Critical OLTP work can now push through without being held hostage by slow or noisy neighbors. Those transactions that are most critical for your business(like payroll) should be prioritized a slice of the database pie above others and with the new oracle ai database 26 ai (gosh that’s a… never mind) you have these functionality at your finger tips . Once Again, the able Connor McDonald :

ALIASES ! You’re very welcome !

This one is really personal cause I always hated having an expresiion like

decode(lpad(power(substr(instr(to_char(<some_column_name>))))) weird_column … (or somthing like that, you get my point… right?)

and then having to type the exact same thing in the group by and not just "weird_column" so when I saw this one I was happy

This helps me type less, write better readable SQL code, reduces human error. they took it one step further by adding group by ALL which allows you to not specify any column at all in your group by (this does has some caveats). Further, aliases can also be used in the having clause. Learn more here : oracle_base and yet again, Connor McDonald has a video on this

A Role Developers Won’t Complain About (For Once)

Honestly, granting privileges manually is soooooo 2010. doing it over again for every environment for multiple people users…

This is so annoying, some DBA’s resort to just granting everything (bad idea) to every developer. There was no clean standardized role, but now there is.

The new db_developer_role fixes that by providing a built‑in, least‑privilege role designed specifically for development work. It includes the common privileges developers need without the risky ones they shouldn’t touch.

Oracle now recommends granting this role to developers instead of individually granting the privileges. the role includes the below privileges :

learn more about this on oracle base

DDL Without Drama

I write scripts to deploy database objects all the time and sometimes I have to re-run these scripts multiple times in a test environment to fix errors or when the script is changed etc. for every run I grep the log file for any errors and then scan through my code tring to fix. Sometmes the errors like “Object Already Exists” can be avoided or “object doesn’t exist” for a drop command. the if(not) ddl syntax lets you do this by writing code like

SQL> create table if not exists t1 (id number);

Table created.

whether or not the table existed prior, I do not get an error message. This helps me avoid writing exception handling blocks and/or wrapping ddl in pl/sql alltogether, cleaner ci/cd pipelines, safer deployment scripts. read more here

https://oracle-base.com/articles/23/if-not-exists-ddl-clause-23

Wrapping It All Up — A Friendlier, Smarter Oracle for DBAs

Oracle AI Database 23ai/26ai feels like the first release in a long time that genuinely makes day‑to‑day DBA life easier. From long‑awaited SQL quality‑of‑life fixes to powerful new security tools and smarter workload management, this version isn’t just about AI — it’s about removing friction, modernizing the basics, and giving us features we’ve been asking for (sometimes for decades). Whether it’s finally ditching DUAL, shrinking tablespaces without gymnastics, or writing cleaner DDL with IF NOT EXISTS, these changes add up to a database that’s faster to work with, safer to operate, and more enjoyable to manage. If this is the direction Oracle is heading, I’m excited to see what comes next.

cheers 🎊

Leave a Comment

Your email address will not be published. Required fields are marked *