<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Abhilash Kumar | Oracle ACE ♠</title>
    <description>The latest articles on DEV Community by Abhilash Kumar | Oracle ACE ♠ (@abhilash8).</description>
    <link>https://dev.to/abhilash8</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F418726%2F9abed0ea-c3e3-4019-b3a3-d7c8e54a7403.jpeg</url>
      <title>DEV Community: Abhilash Kumar | Oracle ACE ♠</title>
      <link>https://dev.to/abhilash8</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/abhilash8"/>
    <language>en</language>
    <item>
      <title>OCI - Connecting to an OCI Always Free MySQL DB System: Installing MySQL Shell and Building a "Poor Man's VPN"</title>
      <dc:creator>Abhilash Kumar | Oracle ACE ♠</dc:creator>
      <pubDate>Wed, 26 Aug 2026 11:18:32 +0000</pubDate>
      <link>https://dev.to/nabhaas/oci-connecting-to-an-oci-always-free-mysql-db-system-installing-mysql-shell-and-building-a-poor-2eib</link>
      <guid>https://dev.to/nabhaas/oci-connecting-to-an-oci-always-free-mysql-db-system-installing-mysql-shell-and-building-a-poor-2eib</guid>
      <description>&lt;p&gt;&lt;a href="style&gt;&lt;br&gt;%0A%20%20%20%20%20%20%20%20.libutton%20{&lt;br&gt;%0A%20%20%20%20%20%20%20%20%20%20display:%20flex;&lt;br&gt;%0A%20%20%20%20%20%20%20%20%20%20flex-direction:%20column;&lt;br&gt;%0A%20%20%20%20%20%20%20%20%20%20justify-content:%20center;&lt;br&gt;%0A%20%20%20%20%20%20%20%20%20%20padding:%207px;&lt;br&gt;%0A%20%20%20%20%20%20%20%20%20%20text-align:%20center;&lt;br&gt;%0A%20%20%20%20%20%20%20%20%20%20outline:%20none;&lt;br&gt;%0A%20%20%20%20%20%20%20%20%20%20text-decoration:%20none%20!important;&lt;br&gt;%0A%20%20%20%20%20%20%20%20%20%20color:%20#ffffff%20!important;&lt;br&gt;%0A%20%20%20%20%20%20%20%20%20%20width:%20200px;&lt;br&gt;%0A%20%20%20%20%20%20%20%20%20%20height:%2032px;&lt;br&gt;%0A%20%20%20%20%20%20%20%20%20%20border-radius:%2016px;&lt;br&gt;%0A%20%20%20%20%20%20%20%20%20%20background-color:%20#0A66C2;&lt;br&gt;%0A%20%20%20%20%20%20%20%20%20%20font-family:%20"&gt;
        { Abhilash Kumar Bhattaram :  &lt;/a&gt;&lt;a href="https://www.linkedin.com/comm/mynetwork/discovery-see-all?usecase=PEOPLE_FOLLOWS&amp;amp;followMember=abhilash-kumar-85b92918" rel="noopener noreferrer"&gt;Follow on LinkedIn&lt;/a&gt; }&lt;/p&gt;

&lt;p&gt;If you've spun up an &lt;strong&gt;Oracle Cloud Infrastructure (OCI) Always Free MySQL DB System&lt;/strong&gt;, you've probably noticed something deliberate about how it's configured: it only exposes a &lt;strong&gt;private IP address&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;&lt;em&gt;For demostration purposes I have created a OCI MySQL DB System with a public subnet but it exposes only the Private Subnet and this is how it must be designed from cloud a security standpoint .&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F2ksf94hfhtsvg7ay3zbk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F2ksf94hfhtsvg7ay3zbk.png" alt="Private IP Only in Public Subnet" width="800" height="331"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;There's no public endpoint to point a client at from your laptop. That's a good security default — but it means you need a way to reach a database that, by design, nothing outside its own network can see.&lt;/p&gt;

&lt;p&gt;This post walks through two things:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Installing &lt;strong&gt;MySQL Shell&lt;/strong&gt; on an Oracle Linux compute instance sitting inside the same Virtual Cloud Network (VCN) as the DB System, so you can connect directly from there.&lt;/li&gt;
&lt;li&gt;Building an &lt;strong&gt;SSH tunnel&lt;/strong&gt; from your laptop, through that compute instance, into the private DB endpoint — a lightweight substitute for a full VPN client that gets the job done with a single command.&lt;/li&gt;
&lt;/ol&gt;


&lt;h2&gt;
  
  
  Part 1 — Installing MySQL Shell on Oracle Linux
&lt;/h2&gt;

&lt;p&gt;MySQL Shell isn't part of Oracle Linux's default repositories, so the first step is adding MySQL's own Yum/DNF repository.&lt;/p&gt;
&lt;h3&gt;
  
  
  Add the MySQL repository
&lt;/h3&gt;

&lt;p&gt;Oracle Linux 10 is supported directly, and MySQL 8.4 LTS is the current default release line (8.0 is now the legacy series):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;dnf &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-y&lt;/span&gt; https://dev.mysql.com/get/mysql84-community-release-el10-1.noarch.rpm
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Install MySQL Shell
&lt;/h3&gt;

&lt;p&gt;The tools (including &lt;code&gt;mysql-shell&lt;/code&gt;) live in a subrepository that isn't always enabled by default:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;dnf config-manager &lt;span class="nt"&gt;--enable&lt;/span&gt; mysql-tools-community
&lt;span class="nb"&gt;sudo &lt;/span&gt;dnf &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-y&lt;/span&gt; mysql-shell mysql-community-client
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  A quick note on GPG keys
&lt;/h3&gt;

&lt;p&gt;MySQL's signing key rotates periodically, and if the copy your system has cached has expired, &lt;code&gt;dnf&lt;/code&gt; will refuse the install with a &lt;code&gt;NOTTRUSTED&lt;/code&gt; error even after you import a fresh key — because &lt;code&gt;rpm&lt;/code&gt; itself re-validates against whatever's already sitting in its trust database. If you hit this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Find the expired key package&lt;/span&gt;
rpm &lt;span class="nt"&gt;-qa&lt;/span&gt; gpg-pubkey&lt;span class="k"&gt;*&lt;/span&gt;

&lt;span class="c"&gt;# Remove it&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;rpm &lt;span class="nt"&gt;-e&lt;/span&gt; gpg-pubkey-&amp;lt;&lt;span class="nb"&gt;id&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;-&amp;lt;&lt;span class="nb"&gt;hash&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;

&lt;span class="c"&gt;# Retry, skipping the (now moot) signature check&lt;/span&gt;
&lt;span class="nb"&gt;sudo &lt;/span&gt;dnf &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-y&lt;/span&gt; &lt;span class="nt"&gt;--nogpgcheck&lt;/span&gt; mysql-shell
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Once that completes, confirm it's working:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;mysqlsh &lt;span class="nt"&gt;--version&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Part 2 — Connecting Directly from the Compute Instance
&lt;/h2&gt;

&lt;p&gt;If your compute instance is in the same VCN as the DB System, you can connect right away using the private endpoint shown in the OCI console (&lt;strong&gt;DB System → Connections → Primary endpoint&lt;/strong&gt;):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;mysqlsh &lt;span class="nt"&gt;--uri&lt;/span&gt; admin@10.10.3.3:3306
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You'll be prompted for the password interactively. A successful connection here confirms two things: your compute instance has network line-of-sight to the DB System, and the security list/NSG rules allow port 3306 between them. That matters, because it's the foundation the next step depends on.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F42i46enhdzmfngkx3ppe.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F42i46enhdzmfngkx3ppe.png" alt="Connect from Compute Instance" width="800" height="540"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Part 3 — The "Poor Man's VPN": SSH Tunneling from Your Laptop
&lt;/h2&gt;

&lt;p&gt;Here's the core problem: MySQL Workbench (or any client) running on your laptop has no route to &lt;code&gt;10.10.3.3&lt;/code&gt; — that address only means something &lt;em&gt;inside&lt;/em&gt; the VCN. Your laptop isn't in the VCN. A full OCI VPN Connect / IPSec setup would solve this properly, but for a single developer needing occasional access, that's a lot of infrastructure for a small problem.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;SSH local port forwarding&lt;/strong&gt; solves it with one command, using a resource you already have: your compute instance, which already has a legitimate route to the database.&lt;/p&gt;

&lt;h3&gt;
  
  
  The idea in one sentence
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;Open an SSH connection to the compute instance, and tell SSH to forward a local port on your laptop through that encrypted connection to the DB System's private port on the other side.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  The diagram
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fj7ke98fqenqwv49kq8gy.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fj7ke98fqenqwv49kq8gy.jpg" alt=" " width="800" height="368"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Your laptop never talks to &lt;code&gt;10.10.3.3&lt;/code&gt; directly — it can't. It talks to &lt;code&gt;127.0.0.1:3306&lt;/code&gt; on itself. SSH quietly relays that traffic, encrypted, to the compute instance, which then makes the final unencrypted hop to the database — a hop it's allowed to make because it lives inside the VCN.&lt;/p&gt;

&lt;h3&gt;
  
  
  On macOS/Linux — a single command
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ssh &lt;span class="nt"&gt;-L&lt;/span&gt; 3306:10.10.3.3:3306 opc@&amp;lt;compute-instance-public-ip&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Breaking that down:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Piece&lt;/th&gt;
&lt;th&gt;Meaning&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;-L&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;"local forward" — open a port on my machine&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;3306&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;the port on &lt;strong&gt;your laptop&lt;/strong&gt; you'll connect to&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;10.10.3.3:3306&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;the destination, resolved &lt;strong&gt;from the compute instance's perspective&lt;/strong&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;opc@&amp;lt;public-ip&amp;gt;&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;the SSH login to the compute instance itself&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Add &lt;code&gt;-N&lt;/code&gt; if you don't need an interactive shell alongside the tunnel, and &lt;code&gt;-f&lt;/code&gt; to background it:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ssh &lt;span class="nt"&gt;-f&lt;/span&gt; &lt;span class="nt"&gt;-N&lt;/span&gt; &lt;span class="nt"&gt;-L&lt;/span&gt; 3306:10.10.3.3:3306 opc@&amp;lt;compute-instance-public-ip&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Leave that session running — the tunnel only exists while the SSH connection is alive.&lt;/p&gt;

&lt;h3&gt;
  
  
  On Windows — the same thing, via PuTTY
&lt;/h3&gt;

&lt;p&gt;PuTTY does exactly the same job through its GUI:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Session&lt;/strong&gt;: enter the compute instance's public IP, port 22.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Connection → SSH → Auth → Credentials&lt;/strong&gt;: browse to your private key (convert a &lt;code&gt;.pem&lt;/code&gt; to &lt;code&gt;.ppk&lt;/code&gt; with PuTTYgen first if needed).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Connection → SSH → Tunnels&lt;/strong&gt;: Source port &lt;code&gt;3306&lt;/code&gt;, Destination &lt;code&gt;10.10.3.3:3306&lt;/code&gt;, leave it on &lt;strong&gt;Local&lt;/strong&gt;, click &lt;strong&gt;Add&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Go back to &lt;strong&gt;Session&lt;/strong&gt;, save it under a name, and click &lt;strong&gt;Open&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The PuTTY window that opens &lt;em&gt;is&lt;/em&gt; your tunnel — as long as it's connected, the forward is live.&lt;/p&gt;

&lt;h3&gt;
  
  
  Pointing your client at the tunnel
&lt;/h3&gt;

&lt;p&gt;Whether you built the tunnel with &lt;code&gt;ssh -L&lt;/code&gt; or PuTTY, MySQL Workbench's connection settings look the same:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Connection Method:&lt;/strong&gt; Standard TCP/IP (not "over SSH" — the tunnel is already handling that separately)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hostname:&lt;/strong&gt; &lt;code&gt;127.0.0.1&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Port:&lt;/strong&gt; &lt;code&gt;3306&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Username/Password:&lt;/strong&gt; your DB System credentials&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;From Workbench's point of view, it's just talking to a MySQL server on your own machine. It has no idea the traffic is actually crossing into an OCI VCN on the other side of an SSH session.&lt;/p&gt;

&lt;p&gt;Below is my MySQL Workbench conncting through localhost - 127.0.0.1:3306 ( mylaptop's local port 3306 )  &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fj5q55yvybe1rcgdyj3na.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fj5q55yvybe1rcgdyj3na.png" alt=" " width="799" height="537"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Why "Poor Man's VPN"?
&lt;/h2&gt;

&lt;p&gt;A real VPN gives you full network-layer access to everything in the remote network, routed transparently, often for many users at once. An SSH tunnel gives you exactly one thing: a single port, forwarded to a single destination, for as long as your terminal session stays open. It's narrower, but it's also zero-config on the OCI side beyond the SSH access you already have — no VPN gateway, no IPSec setup, no extra always-on infrastructure. For reaching a private database from your own laptop during development, it's usually all you need.&lt;/p&gt;

&lt;p&gt;NOTE : OCI includes Bastion Service for this kind of requirement, but it was not allowed as free service ( atleast in my region )&lt;/p&gt;




&lt;h2&gt;
  
  
  Summary
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;MySQL Shell installs cleanly on Oracle Linux via MySQL's Yum repo, once you handle the GPG key rotation quirk.&lt;/li&gt;
&lt;li&gt;A compute instance inside the same VCN as your Always Free DB System can connect directly using its private IP.&lt;/li&gt;
&lt;li&gt;Your laptop can't reach that private IP on its own — but an SSH tunnel through the compute instance closes that gap in one line, giving you full MySQL Workbench access without standing up a real VPN.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But in real life tunnel forwarding database IP's will not be used and once needs to a jump box , this blog should help developers and DBA's get started on learning MySQL.&lt;/p&gt;

&lt;p&gt;To know more about OCI Always free resources , check &lt;a href="https://docs.oracle.com/en-us/iaas/Content/FreeTier/freetier_topic-Always_Free_Resources.htm" rel="noopener noreferrer"&gt;here.&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  How Nabhaas helps you
&lt;/h2&gt;

&lt;p&gt;If you’ve made it this far, you already sense there’s a better way — in fact, you have a way ahead.&lt;/p&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;TAB - Whitepaper , &lt;br&gt;
&lt;a href="https://www.nabhaas.com/_files/ugd/dab815_eb17483ee84d431a8cc2a92792ea21bf.pdf" rel="noopener noreferrer"&gt;download here&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Managed Delivery Services - Whitepaper , &lt;br&gt;
&lt;a href="https://www.nabhaas.com/_files/ugd/dab815_96198a0627d64f75a3d3a2dce9bf185d.pdf" rel="noopener noreferrer"&gt;download here&lt;/a&gt;&lt;/p&gt;

</description>
      <category>oracle</category>
      <category>oci</category>
      <category>nabhaas</category>
      <category>mysql</category>
    </item>
    <item>
      <title>Series Week 29/52 — The Anatomy of a Great Oracle SR: Working With Support, Not Against It</title>
      <dc:creator>Abhilash Kumar | Oracle ACE ♠</dc:creator>
      <pubDate>Thu, 20 Aug 2026 10:38:35 +0000</pubDate>
      <link>https://dev.to/nabhaas/series-week-2952-the-anatomy-of-a-great-oracle-sr-working-with-support-not-against-it-45h4</link>
      <guid>https://dev.to/nabhaas/series-week-2952-the-anatomy-of-a-great-oracle-sr-working-with-support-not-against-it-45h4</guid>
      <description>&lt;p&gt;&lt;a href="style&gt;&lt;br&gt;%0A%20%20%20%20%20%20%20%20.libutton%20{&lt;br&gt;%0A%20%20%20%20%20%20%20%20%20%20display:%20flex;&lt;br&gt;%0A%20%20%20%20%20%20%20%20%20%20flex-direction:%20column;&lt;br&gt;%0A%20%20%20%20%20%20%20%20%20%20justify-content:%20center;&lt;br&gt;%0A%20%20%20%20%20%20%20%20%20%20padding:%207px;&lt;br&gt;%0A%20%20%20%20%20%20%20%20%20%20text-align:%20center;&lt;br&gt;%0A%20%20%20%20%20%20%20%20%20%20outline:%20none;&lt;br&gt;%0A%20%20%20%20%20%20%20%20%20%20text-decoration:%20none%20!important;&lt;br&gt;%0A%20%20%20%20%20%20%20%20%20%20color:%20#ffffff%20!important;&lt;br&gt;%0A%20%20%20%20%20%20%20%20%20%20width:%20200px;&lt;br&gt;%0A%20%20%20%20%20%20%20%20%20%20height:%2032px;&lt;br&gt;%0A%20%20%20%20%20%20%20%20%20%20border-radius:%2016px;&lt;br&gt;%0A%20%20%20%20%20%20%20%20%20%20background-color:%20#0A66C2;&lt;br&gt;%0A%20%20%20%20%20%20%20%20%20%20font-family:%20"&gt;
        { Abhilash Kumar Bhattaram :  &lt;/a&gt;&lt;a href="https://www.linkedin.com/comm/mynetwork/discovery-see-all?usecase=PEOPLE_FOLLOWS&amp;amp;followMember=abhilash-kumar-85b92918" rel="noopener noreferrer"&gt;Follow on LinkedIn&lt;/a&gt; }&lt;/p&gt;

&lt;p&gt;This article focuses on working with Oracle Support — and how I help you get an SR resolved instead of just logged.&lt;/p&gt;

&lt;h2&gt;
  
  
  Working With Oracle Support
&lt;/h2&gt;

&lt;p&gt;Every DBA who's been at this long enough has a My Oracle Support (MOS) story, and most of them aren't flattering.  None of that is a secret — every IT leadership reading this has heard it from their own team.&lt;/p&gt;

&lt;p&gt;MOS UI is continuosly changed , but that does not stop a DBA to get the best out of Oracle Support by proactively sharing information to the guy sitting on the other side of the table.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;A bad SR gets raised and waited on. A good SR gets raised and worked — by both sides, at the same time.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Here's the distinction that experience actually teaches you: an SR isn't a request you hand off and wait on. It's a case you build &lt;strong&gt;&lt;em&gt;&lt;em&gt;with&lt;/em&gt;&lt;/em&gt;&lt;/strong&gt; the engineer, and the DBAs who get resolutions fastest are the ones who act less like  a customer filing a complaint and more like a second engineer already working the problem. That single mindset shift —  help Oracle Support, don't just wait for it — is the entire difference between a ticket that moves and one that doesn't.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Ground Zero: Where Challenges Start
&lt;/h2&gt;

&lt;p&gt;Let's start with a plain canvas and understand our ground zero — almost every stalled SR traces back to something that should have been done before the ticket was even opened.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Typical Weekend Panic &amp;amp; corresponding solutions:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Ticket raised, then the team waits for the engineer to ask for diagnostics&lt;/strong&gt; → &lt;em&gt;Solution:&lt;/em&gt; Upload TFA, ExaCS diagnostic collections, and OS Watcher data proactively, at SR creation — don't wait to be asked&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;"The database is slow" logged with no application context&lt;/strong&gt; → &lt;em&gt;Solution:&lt;/em&gt; Explain what the application was doing, what business process it supports, and what "slow" actually means in numbers&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;An ORA-00600/ORA-00700 error logged as a mystery&lt;/strong&gt; → &lt;em&gt;Solution:&lt;/em&gt; Run it through the ORA-600/700 Lookup Tool first — it may already be a documented bug with a known fix&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;SR sits open for days with no update from your side either&lt;/strong&gt; → &lt;em&gt;Solution:&lt;/em&gt; Treat silence as your problem too — a stale SR from your end signals it's not urgent, even if it is&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Engineer's first response asks for something you already have on hand&lt;/strong&gt; → &lt;em&gt;Solution:&lt;/em&gt; Attach it before they ask — a DBA who anticipates the next question is remembered and prioritized&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;SR written from the DBA's frustration, not the engineer's perspective&lt;/strong&gt; → &lt;em&gt;Solution:&lt;/em&gt; Ask yourself what you'd need to see if you were the one picking up this case cold&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Team assumes "Oracle will figure it out" once diagnostics are attached&lt;/strong&gt; → &lt;em&gt;Solution:&lt;/em&gt; Diagnostics start the investigation — they don't replace your own analysis of what you're seeing&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;This is where most SRs go from "slow" to "stuck" — not because Oracle stopped working it, but because both sides stopped moving it forward together.&lt;/p&gt;
&lt;/blockquote&gt;


&lt;/blockquote&gt;

&lt;p&gt;As you can see, a great SR is built through the same discipline you'd use troubleshooting the issue yourself — Oracle Support is a collaborator here, not a vending machine.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Underneath Ground Zero: Finding the Real Problem
&lt;/h2&gt;

&lt;p&gt;Once you've understood your Ground Zero problems, you need to move to &lt;em&gt;why&lt;/em&gt; so many DBAs default to raise-and-wait instead of raise-and-help.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why "we logged an SR" doesn't mean the same thing to every DBA:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Proactive diagnostic tools are seen as something you run only when asked&lt;/strong&gt; → &lt;em&gt;Solution:&lt;/em&gt; Treat TFA, OS Watcher, and ExaCS diagnostics as part of &lt;em&gt;opening&lt;/em&gt; the SR, not responding to it&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Less experienced DBAs don't know the ORA-600/700 Lookup Tool exists&lt;/strong&gt; → &lt;em&gt;Solution:&lt;/em&gt; Build it into your team's first-response checklist for any internal error before an SR is even raised&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;The application team and the DBA team don't share context before the SR is written&lt;/strong&gt; → &lt;em&gt;Solution:&lt;/em&gt; Pull in the application owner briefly — what changed, what's the business impact — before logging&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;DBAs think "attaching everything" is the same as "explaining the problem"&lt;/strong&gt; → &lt;em&gt;Solution:&lt;/em&gt; A pile of logs isn't a diagnosis — pair every attachment with what you believe it shows&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Support is viewed adversarially, as something to escalate against rather than work with&lt;/strong&gt; → &lt;em&gt;Solution:&lt;/em&gt; Shift the internal language from "fighting with support" to "working the case with &lt;br&gt;
support"&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;No one on the team has been shown what a genuinely well-run SR looks like&lt;/strong&gt; → &lt;em&gt;Solution:&lt;/em&gt; Have your most experienced DBA mentor others through their first few high-severity SRs&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;This gap is why two DBAs with the same issue and the same Oracle support tier get completely different outcomes.&lt;/p&gt;
&lt;/blockquote&gt;


&lt;/blockquote&gt;

&lt;p&gt;As you can see, the difference isn't Oracle's engineers — it's how much of the diagnostic and analytical work has already been done by the time they open the case.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Working Upwards: From Understanding to Solution
&lt;/h2&gt;

&lt;p&gt;Here's what separates an SR that moves from one that doesn't — the things an experienced DBA does without being told to.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Do this before you even log the SR:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Run the error through the ORA-600/700 Lookup Tool&lt;/strong&gt; (MOS Note 153788.1) before assuming it needs a fresh investigation. A meaningful share of ORA-600/ORA-700 errors are already documented, with a known bug number, workaround, or patch — an experienced DBA checks this first and often finds the SR is unnecessary, or at least dramatically shortened.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Collect TFA (Trace File Analyzer) output proactively.&lt;/strong&gt; TFA correlates logs across all nodes and layers automatically — attach it at SR creation, don't wait for the engineer to request it.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;On ExaCS, run the relevant Exadata diagnostic collection up front&lt;/strong&gt; — cell server logs, ILOM data, and health check output. Exadata issues almost always need this, so there's no version of the SR where it isn't eventually asked for.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;If OS-level performance is in question, have OS Watcher data ready&lt;/strong&gt; — CPU, memory, I/O, and network captured around the incident window. Reconstructing this after the fact is far harder than having it captured continuously.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Do this when you write the SR:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Explain the application problem, not just the database symptom.&lt;/strong&gt; "ORA-01555 during month-end batch" tells an engineer far less than "ORA-01555 during the finance close batch, which reads a 40M row table over 3 hours — this started after we increased batch parallelism last week."&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Put yourself in the SR engineer's seat.&lt;/strong&gt; They're picking this up cold, possibly mid-shift-change, with no memory of your environment. Write the SR so a stranger could triage it in five minutes.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;State what you've already ruled out.&lt;/strong&gt; If you've checked for blocking sessions, recent parameter changes, or a matching bug, say so — it prevents the engineer from re-walking ground you've already covered.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Do this while the SR is open:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Don't raise and wait — keep working the problem on your side in parallel.&lt;/strong&gt; If you find something new, post it immediately, don't hold it for the next scheduled update.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Respond to every ask same-day where possible.&lt;/strong&gt; An SR that goes quiet from your end loses momentum and priority just as easily as one that goes quiet from Oracle's.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;If you're stuck, say exactly what you need&lt;/strong&gt; — a call, a specific engineer, a decision by a specific time — not a general nudge.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;The pattern holds no matter which version of MOS you're using: &lt;strong&gt;the SRs that move are the ones where the DBA is visibly still working the problem, not just waiting on someone else to.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;


&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Technical Issues:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;ORA-600/700 errors logged without checking the Lookup Tool first &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;— &lt;strong&gt;Solution:&lt;/strong&gt; Make the Lookup Tool check step one, before an SR is even opened&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;TFA, OS Watcher, and ExaCS diagnostics collected only after being requested — &lt;strong&gt;Solution:&lt;/strong&gt; Build proactive diagnostic collection into your incident response runbook&lt;/li&gt;
&lt;li&gt;Diagnostics attached without any accompanying analysis — &lt;strong&gt;Solution:&lt;/strong&gt; Pair every attachment with a sentence on what you believe it shows&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Non-Technical Issues:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Support treated as adversarial rather than collaborative — &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Solution:&lt;/strong&gt; Reframe internally as working the case together, not escalating against a vendor&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Application context missing from SRs raised by the DBA team alone &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;— &lt;strong&gt;Solution:&lt;/strong&gt; Involve the application owner briefly before logging, every time&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Junior DBAs never shown what a well-run SR looks like — &lt;strong&gt;Solution:&lt;/strong&gt; Pair them with an experienced DBA on their first few Sev 1/Sev 2 cases&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;A MOS great SR isn't about being demanding, and it isn't about waiting patiently either — it's about doing the engineer's first three steps for them before they've had the chance to ask.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;


&lt;/blockquote&gt;

</description>
      <category>oracle</category>
      <category>oci</category>
      <category>nabhaas</category>
      <category>thoughtleadership</category>
    </item>
    <item>
      <title>OracleBootCamp 8-Aug-2026 : Top 10 - Oracle Linux 10 Utilities - HOL ( Hands On Labs )</title>
      <dc:creator>Abhilash Kumar | Oracle ACE ♠</dc:creator>
      <pubDate>Mon, 10 Aug 2026 14:17:39 +0000</pubDate>
      <link>https://dev.to/nabhaas/oraclebootcamp-8-aug-2026-top-10-linux-utilities-hol-hands-on-labs--23j6</link>
      <guid>https://dev.to/nabhaas/oraclebootcamp-8-aug-2026-top-10-linux-utilities-hol-hands-on-labs--23j6</guid>
      <description>&lt;p&gt;&lt;a href="style&gt;&lt;br&gt;%0A%20%20%20%20%20%20%20%20.libutton%20{&lt;br&gt;%0A%20%20%20%20%20%20%20%20%20%20display:%20flex;&lt;br&gt;%0A%20%20%20%20%20%20%20%20%20%20flex-direction:%20column;&lt;br&gt;%0A%20%20%20%20%20%20%20%20%20%20justify-content:%20center;&lt;br&gt;%0A%20%20%20%20%20%20%20%20%20%20padding:%207px;&lt;br&gt;%0A%20%20%20%20%20%20%20%20%20%20text-align:%20center;&lt;br&gt;%0A%20%20%20%20%20%20%20%20%20%20outline:%20none;&lt;br&gt;%0A%20%20%20%20%20%20%20%20%20%20text-decoration:%20none%20!important;&lt;br&gt;%0A%20%20%20%20%20%20%20%20%20%20color:%20#ffffff%20!important;&lt;br&gt;%0A%20%20%20%20%20%20%20%20%20%20width:%20200px;&lt;br&gt;%0A%20%20%20%20%20%20%20%20%20%20height:%2032px;&lt;br&gt;%0A%20%20%20%20%20%20%20%20%20%20border-radius:%2016px;&lt;br&gt;%0A%20%20%20%20%20%20%20%20%20%20background-color:%20#0A66C2;&lt;br&gt;%0A%20%20%20%20%20%20%20%20%20%20font-family:%20"&gt;
        { Abhilash Kumar Bhattaram :  &lt;/a&gt;&lt;a href="https://www.linkedin.com/comm/mynetwork/discovery-see-all?usecase=PEOPLE_FOLLOWS&amp;amp;followMember=abhilash-kumar-85b92918" rel="noopener noreferrer"&gt;Follow on LinkedIn&lt;/a&gt; }&lt;/p&gt;

&lt;p&gt;Hands On Labs for OracleBootCamp Event on 8-Aug-2026&lt;/p&gt;

&lt;p&gt;Sample Labs : &lt;a href="https://github.com/abhilash-8/oraclebootcamp-8-Aug-2026-Chennai" rel="noopener noreferrer"&gt;https://github.com/abhilash-8/oraclebootcamp-8-Aug-2026-Chennai&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  1. bpftrace
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="gp"&gt;[root@instance-20260614-1905 ~]#&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;bpftrace &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="s1"&gt;'tracepoint:syscalls:sys_enter_openat { printf("%s opened %s\n", comm, str(args-&amp;gt;filename)); }'&lt;/span&gt;
&lt;span class="go"&gt;
Attached 1 probe
stat opened /etc/ld.so.cache
stat opened /lib64/libselinux.so.1
stat opened /lib64/libc.so.6
stat opened /lib64/libpcre2-8.so.0
stat opened /usr/lib/locale/locale-archive
stat opened /usr/share/locale/locale.alias
stat opened /usr/lib/locale/en_US.UTF-8/LC_IDENTIFICATION
stat opened /usr/lib/locale/en_US.utf8/LC_IDENTIFICATION
stat opened /usr/lib64/gconv/gconv-modules.cache
stat opened /usr/lib/locale/en_US.UTF-8/LC_MEASUREMENT
stat opened /usr/lib/locale/en_US.utf8/LC_MEASUREMENT
stat opened /usr/lib/locale/en_US.UTF-8/LC_TELEPHONE
stat opened /usr/lib/locale/en_US.utf8/LC_TELEPHONE
stat opened /usr/lib/locale/en_US.UTF-8/LC_ADDRESS
stat opened /usr/lib/locale/en_US.utf8/LC_ADDRESS
stat opened /usr/lib/locale/en_US.UTF-8/LC_NAME
stat opened /usr/lib/locale/en_US.utf8/LC_NAME
python3 opened /tmp/bootcamp-load/
python3 opened /tmp/bootcamp-load/
python3 opened /tmp/bootcamp-load/
curl opened /dev/null
curl opened /dev/null
curl opened /dev/null
python3 opened /tmp/bootcamp-load/
python3 opened /tmp/bootcamp-load/
bootcamp-load-g opened /tmp/bootcamp-load/churn_1.tmp
curl opened /dev/null
stat opened /usr/lib/locale/en_US.UTF-8/LC_PAPER
bootcamp-load-g opened /dev/null
stat opened /usr/lib/locale/en_US.utf8/LC_PAPER
stat opened /usr/lib/locale/en_US.UTF-8/LC_MESSAGES
cat opened /etc/ld.so.cache
cat opened /lib64/libc.so.6
stat opened /usr/lib/locale/en_US.utf8/LC_MESSAGES
cat opened 
cat opened /usr/share/locale/locale.alias
cat opened /usr/lib/locale/en_US.UTF-8/LC_IDENTIFICATION
cat opened /usr/lib/locale/en_US.utf8/LC_IDENTIFICATION
cat opened /usr/lib64/gconv/gconv-modules.cache
cat opened /usr/lib/locale/en_US.UTF-8/LC_MEASUREMENT
cat opened /usr/lib/locale/en_US.utf8/LC_MEASUREMENT
&lt;/span&gt;&lt;span class="c"&gt;.
.
&lt;/span&gt;&lt;span class="go"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  2. sar
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="gp"&gt;[root@instance-20260614-1905 ~]#&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;sar &lt;span class="nt"&gt;-u&lt;/span&gt; 1 5
&lt;span class="go"&gt;Linux 6.12.0-203.76.7.3.el10uek.x86_64 (instance-20260614-1905)         08/10/2026      _x86_64_        (2 CPU)

02:15:27 PM     CPU     %user     %nice   %system   %iowait    %steal     %idle
02:15:28 PM     all     35.47      0.00     12.81      0.00     51.72      0.00
02:15:29 PM     all     38.89      0.00      9.09      0.00     52.02      0.00
02:15:30 PM     all     39.60      0.00      7.43      0.00     52.97      0.00
02:15:31 PM     all     35.86      0.00     10.10      0.00     54.04      0.00
02:15:32 PM     all     40.91      0.00      4.55      0.00     54.55      0.00
Average:        all     38.14      0.00      8.81      0.00     53.05      0.00
&lt;/span&gt;&lt;span class="gp"&gt;[root@instance-20260614-1905 ~]#&lt;/span&gt;&lt;span class="w"&gt; 
&lt;/span&gt;&lt;span class="go"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  3. iostat
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="gp"&gt;[root@instance-20260614-1905 ~]#&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;iostat &lt;span class="nt"&gt;-x&lt;/span&gt; 1 5
&lt;span class="go"&gt;Linux 6.12.0-203.76.7.3.el10uek.x86_64 (instance-20260614-1905)         08/10/2026      _x86_64_        (2 CPU)

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
          25.65    0.03    3.10    0.04    1.46   69.71

Device            r/s     rkB/s   rrqm/s  %rrqm r_await rareq-sz     w/s     wkB/s   wrqm/s  %wrqm w_await wareq-sz     d/s     dkB/s   drqm/s  %drqm d_await dareq-sz     f/s f_await  aqu-sz  %util
dm-0             5.48    557.55     0.00   0.00    4.02   101.79    2.44  14179.58     0.00   0.00  133.05  5812.82    1.51   7994.73     0.00   0.00   61.31  5290.92    0.00    0.00    0.44  24.08
dm-1             0.10      6.14     0.00   0.00    0.64    59.07    0.00      1.36     0.00   0.00   11.00  2048.00    0.01  13821.19     0.00   0.00  275.70 1043659.00    0.00    0.00    0.00   0.08
sda              6.03    610.48     0.16   2.52    4.94   101.29   13.08  14222.39     0.42   3.11  435.49  1087.27    0.86  22780.55     0.68  43.91   63.12 26403.59    0.00    0.00    5.78  23.94


avg-cpu:  %user   %nice %system %iowait  %steal   %idle
          82.50    0.00   11.50    0.00    6.00    0.00

Device            r/s     rkB/s   rrqm/s  %rrqm r_await rareq-sz     w/s     wkB/s   wrqm/s  %wrqm w_await wareq-sz     d/s     dkB/s   drqm/s  %drqm d_await dareq-sz     f/s f_await  aqu-sz  %util
dm-0             0.00      0.00     0.00   0.00    0.00     0.00    2.00  65546.50     0.00   0.00  543.50 32773.25    0.00      0.00     0.00   0.00    0.00     0.00    0.00    0.00    1.09  77.80
dm-1             0.00      0.00     0.00   0.00    0.00     0.00    0.00      0.00     0.00   0.00    0.00     0.00    0.00      0.00     0.00   0.00    0.00     0.00    0.00    0.00    0.00   0.00
sda              0.00      0.00     0.00   0.00    0.00     0.00   41.00  50186.50     0.00   0.00  397.78  1224.06    0.00      0.00     0.00   0.00    0.00     0.00    0.00    0.00   16.31  77.10


avg-cpu:  %user   %nice %system %iowait  %steal   %idle
          82.09    0.00    6.47    0.00   11.44    0.00

Device            r/s     rkB/s   rrqm/s  %rrqm r_await rareq-sz     w/s     wkB/s   wrqm/s  %wrqm w_await wareq-sz     d/s     dkB/s   drqm/s  %drqm d_await dareq-sz     f/s f_await  aqu-sz  %util
dm-0             0.00      0.00     0.00   0.00    0.00     0.00    2.00  65546.50     0.00   0.00  541.50 32773.25    0.00      0.00     0.00   0.00    0.00     0.00    0.00    0.00    1.08  77.10
dm-1             0.00      0.00     0.00   0.00    0.00     0.00    0.00      0.00     0.00   0.00    0.00     0.00    0.00      0.00     0.00   0.00    0.00     0.00    0.00    0.00    0.00   0.00
sda              0.00      0.00     0.00   0.00    0.00     0.00   40.00  49930.50     0.00   0.00  463.40  1248.26    0.00      0.00     0.00   0.00    0.00     0.00    0.00    0.00   18.54  77.10


avg-cpu:  %user   %nice %system %iowait  %steal   %idle
          85.29    0.00    9.80    0.00    4.90    0.00

Device            r/s     rkB/s   rrqm/s  %rrqm r_await rareq-sz     w/s     wkB/s   wrqm/s  %wrqm w_await wareq-sz     d/s     dkB/s   drqm/s  %drqm d_await dareq-sz     f/s f_await  aqu-sz  %util
dm-0             0.00      0.00     0.00   0.00    0.00     0.00    6.86  64501.47     0.00   0.00  155.57  9398.79    0.00      0.00     0.00   0.00    0.00     0.00    0.00    0.00    1.07  76.96
dm-1             0.00      0.00     0.00   0.00    0.00     0.00    0.00      0.00     0.00   0.00    0.00     0.00    0.00      0.00     0.00   0.00    0.00     0.00    0.00    0.00    0.00   0.00
sda              0.00      0.00     0.00   0.00    0.00     0.00   32.35  35638.73     1.96   5.71  640.42  1101.56    0.00      0.00     0.00   0.00    0.00     0.00    0.00    0.00   20.72  71.37


avg-cpu:  %user   %nice %system %iowait  %steal   %idle
          87.00    0.00    7.50    0.00    5.50    0.00

Device            r/s     rkB/s   rrqm/s  %rrqm r_await rareq-sz     w/s     wkB/s   wrqm/s  %wrqm w_await wareq-sz     d/s     dkB/s   drqm/s  %drqm d_await dareq-sz     f/s f_await  aqu-sz  %util
dm-0             0.00      0.00     0.00   0.00    0.00     0.00    0.00      0.00     0.00   0.00    0.00     0.00    0.00      0.00     0.00   0.00    0.00     0.00    0.00    0.00    0.00 100.00
dm-1             0.00      0.00     0.00   0.00    0.00     0.00    0.00      0.00     0.00   0.00    0.00     0.00    0.00      0.00     0.00   0.00    0.00     0.00    0.00    0.00    0.00   0.00
sda              0.00      0.00     0.00   0.00    0.00     0.00   51.00  64256.00     0.00   0.00  483.41  1259.92    0.00      0.00     0.00   0.00    0.00     0.00    0.00    0.00   24.65 105.20

&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  4. perf
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="go"&gt;
&lt;/span&gt;&lt;span class="gp"&gt;[root@instance-20260614-1905 ~]#&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;perf top &lt;span class="nt"&gt;--sort&lt;/span&gt; &lt;span class="nb"&gt;comm&lt;/span&gt;,dso
&lt;span class="go"&gt;

Samples: 48K of event 'cycles:P', 4000 Hz, Event count (approx.): 21654368464 lost: 0/0 drop: 0/0                                                                                                                                                                    
Overhead  Command          Shared Object                                                                                                                                                                                                                             
  26.87%  awk              gawk
  25.43%  bc               bc
  23.74%  python3          libc.so.6
   2.96%  bootcamp-load-g  [kernel]
   2.07%  curl             [kernel]
   1.97%  perf             [kernel]
   1.88%  perf             perf
   1.72%  ls               [kernel]
   1.41%  curl             ld-linux-x86-64.so.2
   1.14%  cat              [kernel]
   0.94%  rm               [kernel]
   0.72%  perf             libc.so.6
   0.62%  stat             [kernel]
   0.58%  systemd-userwor  [kernel]
   0.51%  sleep            [kernel]
   0.45%  dd               [kernel]
   0.39%  ls               libc.so.6
   0.35%  python3          libpython3.12.so.1.0
   0.32%  bc               libc.so.6
   0.31%  curl             libcrypto.so.3.5.1
   0.29%  curl             libc.so.6
   0.29%  python3          [kernel]
   0.27%  cat              libc.so.6
   0.25%  bootcamp-load-g  bash
   0.23%  perf             liblzma.so.5.6.2
   0.23%  stat             ld-linux-x86-64.so.2
   0.22%  rm               ld-linux-x86-64.so.2
   0.21%  cat              ld-linux-x86-64.so.2
   0.19%  systemd-userwor  libsystemd-shared-257-13.0.1.el10_1.3.so
   0.18%  rm               libc.so.6
   0.18%  ls               ld-linux-x86-64.so.2
   0.17%  bootcamp-load-g  libc.so.6
   0.17%  systemd          libsystemd-shared-257-13.0.1.el10_1.3.so
   0.17%  ls               libnss_systemd.so.2
   0.13%  sleep            libc.so.6
   0.13%  perf             libstdc++.so.6.0.33
   0.13%  systemd-userwor  libc.so.6
   0.12%  bc               [kernel]
   0.12%  systemd          [kernel]
   0.12%  ls               ls



&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  5. ss
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="go"&gt;

&lt;/span&gt;&lt;span class="gp"&gt;[root@instance-20260614-1905 ~]#&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;ss &lt;span class="nt"&gt;-s&lt;/span&gt;
&lt;span class="go"&gt;Total: 258
TCP:   1431 (estab 11, closed 1404, orphaned 0, timewait 1404)

Transport Total     IP        IPv6
RAW       1         0         1        
UDP       5         3         2        
TCP       27        23        4        
INET      33        26        7        
FRAG      0         0         0        

&lt;/span&gt;&lt;span class="gp"&gt;[root@instance-20260614-1905 ~]#&lt;/span&gt;&lt;span class="w"&gt; 
&lt;/span&gt;&lt;span class="go"&gt;

&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  6. lsof
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="gp"&gt;[root@instance-20260614-1905 ~]#&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;lsof &lt;span class="nt"&gt;-i&lt;/span&gt; :8088
&lt;span class="go"&gt;COMMAND    PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
python3   7413 root    3u  IPv4  30903      0t0  TCP *:radan-http (LISTEN)
&lt;/span&gt;&lt;span class="gp"&gt;curl    112296 root    4u  IPv4 313382      0t0  TCP localhost:60758-&amp;gt;&lt;/span&gt;localhost:radan-http &lt;span class="o"&gt;(&lt;/span&gt;SYN_SENT&lt;span class="o"&gt;)&lt;/span&gt;
&lt;span class="gp"&gt;curl    112297 root    4u  IPv4 313381      0t0  TCP localhost:60752-&amp;gt;&lt;/span&gt;localhost:radan-http &lt;span class="o"&gt;(&lt;/span&gt;SYN_SENT&lt;span class="o"&gt;)&lt;/span&gt;
&lt;span class="gp"&gt;curl    112298 root    4u  IPv4 313380      0t0  TCP localhost:60746-&amp;gt;&lt;/span&gt;localhost:radan-http &lt;span class="o"&gt;(&lt;/span&gt;SYN_SENT&lt;span class="o"&gt;)&lt;/span&gt;
&lt;span class="gp"&gt;curl    112299 root    4u  IPv4 313383      0t0  TCP localhost:60762-&amp;gt;&lt;/span&gt;localhost:radan-http &lt;span class="o"&gt;(&lt;/span&gt;SYN_SENT&lt;span class="o"&gt;)&lt;/span&gt;
&lt;span class="gp"&gt;[root@instance-20260614-1905 ~]#&lt;/span&gt;&lt;span class="w"&gt; 
&lt;/span&gt;&lt;span class="go"&gt;


&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  7. strace
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="go"&gt;

&lt;/span&gt;&lt;span class="gp"&gt;[root@instance-20260614-1905 ~]#&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;sudo &lt;/span&gt;strace &lt;span class="nt"&gt;-c&lt;/span&gt; &lt;span class="nt"&gt;-p&lt;/span&gt; &lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;cat&lt;/span&gt; /tmp/bootcamp-load/target.pid 2&amp;gt;/dev/null &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s1"&gt;'&amp;lt;run before stop&amp;gt;'&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;
&lt;span class="go"&gt;strace: Process 7402 attached

^Cstrace: Process 7402 detached
% time     seconds  usecs/call     calls    errors syscall
------ ----------- ----------- --------- --------- ----------------
 91.86    0.606314         488      1242       621 wait4
  5.81    0.038332          61       621           clone
  1.49    0.009845           2      4659           rt_sigprocmask
  0.60    0.003971           2      1863           rt_sigaction
  0.23    0.001544           2       621           rt_sigreturn
------ ----------- ----------- --------- --------- ----------------
100.00    0.660006          73      9006       621 total

&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  8. ipcs
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="go"&gt;

&lt;/span&gt;&lt;span class="gp"&gt;[root@instance-20260614-1905 ~]#&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;ipcs &lt;span class="nt"&gt;-a&lt;/span&gt;
&lt;span class="go"&gt;
------ Message Queues --------
key        msqid      owner      perms      used-bytes   messages    

------ Shared Memory Segments --------
key        shmid      owner      perms      bytes      nattch     status      
0xe607dfb1 0          root       644        1048576    0                       
0x65c204d2 1          root       644        1048576    0                       
0x30809964 2          root       644        1048576    0                       

------ Semaphore Arrays --------
key        semid      owner      perms      nsems     
0xda0f24f8 2          root       644        1         
0xaaa29326 3          root       644        1         
0x0af0d682 4          root       644        1         

&lt;/span&gt;&lt;span class="gp"&gt;[root@instance-20260614-1905 ~]#&lt;/span&gt;&lt;span class="w"&gt; 
&lt;/span&gt;&lt;span class="go"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  9. numastat
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="go"&gt;
&lt;/span&gt;&lt;span class="gp"&gt;[root@instance-20260614-1905 ~]#&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;numastat &lt;span class="nt"&gt;-m&lt;/span&gt;
&lt;span class="go"&gt;
Per-node system memory usage (in MBs):
                          Node 0           Total
                 --------------- ---------------
MemTotal                 9480.82         9480.82
MemFree                  7993.14         7993.14
MemUsed                  1487.68         1487.68
SwapCached                  0.00            0.00
Active                    817.42          817.42
Inactive                  467.84          467.84
Active(anon)              512.65          512.65
Inactive(anon)              0.00            0.00
Active(file)              304.77          304.77
Inactive(file)            467.84          467.84
Unevictable                 9.40            9.40
Mlocked                     9.40            9.40
Dirty                       0.02            0.02
Writeback                  64.02           64.02
FilePages                 788.74          788.74
Mapped                    149.32          149.32
AnonPages                 502.34          502.34
Shmem                       8.69            8.69
KernelStack                 4.31            4.31
PageTables                  7.66            7.66
SecPageTables               0.00            0.00
NFS_Unstable                0.00            0.00
Bounce                      0.00            0.00
WritebackTmp                0.00            0.00
KReclaimable               33.27           33.27
Slab                       94.36           94.36
SReclaimable               33.27           33.27
SUnreclaim                 61.09           61.09
AnonHugePages             268.00          268.00
ShmemHugePages              0.00            0.00
ShmemPmdMapped              0.00            0.00
FileHugePages              76.00           76.00
FilePmdMapped              62.00           62.00
Unaccepted                  0.00            0.00
HugePages_Total             0.00            0.00
HugePages_Free              0.00            0.00
HugePages_Surp              0.00            0.00
&lt;/span&gt;&lt;span class="gp"&gt;[root@instance-20260614-1905 ~]#&lt;/span&gt;&lt;span class="w"&gt; 
&lt;/span&gt;&lt;span class="go"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  10. watch -d -n1 'numastat -m'
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="go"&gt;Every 1.0s: numastat -m                                                                                                                                                                                              instance-20260614-1905: Mon Aug 10 14:20:31 2026


Per-node system memory usage (in MBs):
                          Node 0           Total
                 --------------- ---------------
MemTotal                 9480.82         9480.82
MemFree                  7937.53         7937.53
MemUsed                  1543.29         1543.29
SwapCached                  0.00            0.00
Active                    829.73          829.73
Inactive                  511.38          511.38
Active(anon)              524.96          524.96
Inactive(anon)              0.00            0.00
Active(file)              304.77          304.77
Inactive(file)            511.38          511.38
Unevictable                 9.40            9.40
Mlocked                     9.40            9.40
Dirty                       0.03            0.03
Writeback                  64.00           64.00
FilePages                 832.28          832.28
Mapped                    152.86          152.86
AnonPages                 515.71          515.71
Shmem                       8.69            8.69
KernelStack                 4.30            4.30
PageTables                  7.74            7.74
SecPageTables               0.00            0.00
NFS_Unstable                0.00            0.00
Bounce                      0.00            0.00
WritebackTmp                0.00            0.00
KReclaimable               33.49           33.49
Slab                       94.92           94.92
SReclaimable               33.49           33.49
SUnreclaim                 61.43           61.43
AnonHugePages             288.00          288.00
ShmemHugePages              0.00            0.00
ShmemPmdMapped              0.00            0.00
FileHugePages              76.00           76.00
FilePmdMapped              64.00           64.00
Unaccepted                  0.00            0.00
HugePages_Total             0.00            0.00
HugePages_Free              0.00            0.00
HugePages_Surp              0.00            0.00

&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>oracle</category>
      <category>oci</category>
      <category>nabhaas</category>
      <category>oraclebootcamp</category>
    </item>
    <item>
      <title>I'm Not a Developer — So Why Did Oracle Backend with Firebase APIs Get Me Hooked on Oracle AI Database?</title>
      <dc:creator>Abhilash Kumar | Oracle ACE ♠</dc:creator>
      <pubDate>Sun, 02 Aug 2026 07:41:08 +0000</pubDate>
      <link>https://dev.to/nabhaas/im-not-a-developer-so-why-did-oracle-backend-with-firebase-apis-get-me-hooked-on-oracle-ai-5bao</link>
      <guid>https://dev.to/nabhaas/im-not-a-developer-so-why-did-oracle-backend-with-firebase-apis-get-me-hooked-on-oracle-ai-5bao</guid>
      <description>&lt;p&gt;&lt;a href="style&gt;&lt;br&gt;%0A%20%20%20%20%20%20%20%20.libutton%20{&lt;br&gt;%0A%20%20%20%20%20%20%20%20%20%20display:%20flex;&lt;br&gt;%0A%20%20%20%20%20%20%20%20%20%20flex-direction:%20column;&lt;br&gt;%0A%20%20%20%20%20%20%20%20%20%20justify-content:%20center;&lt;br&gt;%0A%20%20%20%20%20%20%20%20%20%20padding:%207px;&lt;br&gt;%0A%20%20%20%20%20%20%20%20%20%20text-align:%20center;&lt;br&gt;%0A%20%20%20%20%20%20%20%20%20%20outline:%20none;&lt;br&gt;%0A%20%20%20%20%20%20%20%20%20%20text-decoration:%20none%20!important;&lt;br&gt;%0A%20%20%20%20%20%20%20%20%20%20color:%20#ffffff%20!important;&lt;br&gt;%0A%20%20%20%20%20%20%20%20%20%20width:%20200px;&lt;br&gt;%0A%20%20%20%20%20%20%20%20%20%20height:%2032px;&lt;br&gt;%0A%20%20%20%20%20%20%20%20%20%20border-radius:%2016px;&lt;br&gt;%0A%20%20%20%20%20%20%20%20%20%20background-color:%20#0A66C2;&lt;br&gt;%0A%20%20%20%20%20%20%20%20%20%20font-family:%20"&gt;
        { Abhilash Kumar Bhattaram :  &lt;/a&gt;&lt;a href="https://www.linkedin.com/comm/mynetwork/discovery-see-all?usecase=PEOPLE_FOLLOWS&amp;amp;followMember=abhilash-kumar-85b92918" rel="noopener noreferrer"&gt;Follow on LinkedIn&lt;/a&gt; }&lt;/p&gt;

&lt;p&gt;I spend my days on the infrastructure side of things — migrations, capacity planning, licensing conversations, moving workloads onto Oracle Autonomous AI Database and OCI. &lt;/p&gt;

&lt;p&gt;I don't write mobile apps. I've never shipped an Android build or wrestled with an Xcode provisioning profile. &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;So when I first heard about &lt;strong&gt;Oracle Backend with Firebase APIs&lt;/strong&gt;, my honest first reaction was: "that's a developer thing, not my thing , but I relaized a DBA needs to understand ORDS&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fxobkl8t48hnrbsotaawr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fxobkl8t48hnrbsotaawr.png" alt=" " width="799" height="235"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A few days in, I've had to look into it as my Dev Team asked for some support on this Once our data is on Oracle AI Database, what else can we &lt;em&gt;do&lt;/em&gt; with it?" Usually that means analytics, or AI workloads, or vector search for RAG. It almost never means "can our mobile app team build directly on top of this too" — because historically, the honest answer was no. Mobile and web teams reach for Firebase, Supabase, or some other backend-as-a-service, and the database team's carefully governed, audited, encrypted Oracle estate sits in a completely separate world from the app.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the toolkit actually is, in plain terms
&lt;/h2&gt;

&lt;p&gt;Oracle Backend with Firebase APIs is a free feature of Oracle REST Data Services (ORDS) that lets app developers build mobile and web apps directly against Oracle AI Database, using SDKs for iOS, Android, Flutter, and JavaScript that are deliberately shaped to feel like the Firebase SDKs they already know. Authentication, document-style data storage, file storage, declarative security rules, and AI vector search are all exposed through those SDKs — and all of it runs inside the same database instance, not a separate service bolted on the side.&lt;/p&gt;

&lt;p&gt;That last part is the piece that clicked for me. It's not "Oracle built a Firebase clone." It's "Oracle exposed the database you already trust through an interface that app developers already like."&lt;/p&gt;

&lt;h2&gt;
  
  
  Where exactly the firebase app connects to the database
&lt;/h2&gt;

&lt;p&gt;The app itself never opens a database connection — that's the key thing to understand. There's a hop in between:&lt;/p&gt;

&lt;p&gt;App (phone/browser) → HTTPS request → ORDS → SQL/PL-SQL call inside the database → Oracle AI Database (ATP)&lt;/p&gt;

&lt;p&gt;Broken down:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. The SDK talks HTTP, not SQL.&lt;/strong&gt; &lt;br&gt;
When your app calls something like addDoc() or signInWithEmailAndPassword(), the SDK turns that into a plain HTTPS REST call to the ords_host URL from your app config — the same URL you set in initializeApp().&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. ORDS is the actual thing holding a database connection.&lt;/strong&gt; ORDS maintains its own JDBC connection pool to the database (that's what got configured during the fusabase install step — host, port, PDB service name). The app, the phone, the browser — none of them ever see a database hostname, port, or credential. They only ever see the ORDS URL.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Inside the database, Fusabase ships as server-side PL/SQL packages.&lt;/strong&gt; ORDS routes each REST call to Fusabase's own API packages running inside the database schema you enabled (the one with BAAS_ROLE). Those packages are what actually read/write the JSON collections, check security rules, and run vector similarity queries — as regular SQL/PL-SQL, on regular tables, in your schema.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. On ATP specifically,&lt;/strong&gt; this means the real connection point is whatever ORDS instance is fronting your Autonomous Database — either Oracle's default managed ORDS, or (per what we found last time) a Customer Managed ORDS if you need the install-level access Fusabase requires. Either way, the physical DB connection lives entirely on the ORDS side, using ORDS's own database user/wallet — the app's auth token only proves who the app user is, not a database login.&lt;/p&gt;

&lt;p&gt;So the honest one-line answer: the app connects to ORDS over HTTPS; ORDS is what's connected to the database. The app never gets network-level access to ATP itself.&lt;/p&gt;

&lt;h2&gt;
  
  
  So What ORDS does - A DBA knowhow primer
&lt;/h2&gt;

&lt;p&gt;What ORDS does — the core job list:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Turns database objects into REST APIs. Auto-REST enables tables/views with zero code; custom PL/SQL endpoints are hand-mapped to URLs.&lt;/li&gt;
&lt;li&gt;Holds the actual database connection. Maintains a JDBC connection pool per configured database — clients never connect directly; ORDS hands out pooled sessions to fulfill requests.&lt;/li&gt;
&lt;li&gt;Handles authentication and authorization at the API layer. OAuth2 (client credentials, roles like SQL Developer), API-key or Basic auth for auto-REST, independent of how the database itself authenticates ORDS's own pool user.&lt;/li&gt;
&lt;li&gt;Enforces access control on endpoints. Privileges, roles, and rate limiting can be applied per REST module — separate from (but layered on top of) database grants and VPD.&lt;/li&gt;
&lt;li&gt;Serializes results to standard web formats. JSON by default, plus CSV, GeoJSON, and binary media for BLOBs/files.&lt;/li&gt;
&lt;li&gt;Provides request-shaping features. Filtering, sorting, pagination, and dynamic bind parameters on auto-REST endpoints without writing SQL for each variant.&lt;/li&gt;
&lt;li&gt;Generates OpenAPI documentation for whatever it exposes, so consumers get a spec, not just an endpoint.&lt;/li&gt;
&lt;li&gt;Runs application platforms on top of the database. APEX, SQL Developer Web / Database Actions, and — as of 26.1 — Oracle Backend for Firebase are all delivered through ORDS rather than as separate services.&lt;/li&gt;
&lt;li&gt;Exposes vector search natively. The /vectorSearch endpoint runs similarity queries against VECTOR columns on auto-REST enabled tables.&lt;/li&gt;
&lt;li&gt;Acts as a REST bridge for non-relational access patterns — the Database API for MongoDB and Fusabase both route MongoDB- or Firebase-shaped calls into ordinary SQL/PLSQL underneath.&lt;/li&gt;
&lt;li&gt;Serves AI-facing tooling. MCP Tools for letting AI systems discover database connections, pull schema metadata, and execute SQL/PLSQL.&lt;/li&gt;
&lt;li&gt;Runs as a separate mid-tier process with its own lifecycle — install, patch, scale, and version independently of the database (standalone Jetty, or deployable to Tomcat/WebLogic); on Autonomous Database, Oracle runs and manages a default instance of it for you, with limited configurability unless you go Customer Managed.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Why that matters from where I sit
&lt;/h2&gt;

&lt;p&gt;A few things stood out to me as someone who thinks about this from the operations and governance side, not the app-building side:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;One database set of controls.&lt;/strong&gt; Because the toolkit runs on ORDS on top of Oracle AI Database, everything the DBA team already relies on — auditing, transparent data encryption, partitioning, Data Guard, row-level security — still applies underneath whatever the app developers build. The app team gets a familiar developer experience; the platform team doesn't lose the guardrails they spent years putting in place.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Vector search without a second system to babysit.&lt;/strong&gt; App-driven AI features — semantic search, recommendations, retrieval-augmented generation — can query vectors stored right alongside the relational data, in the same query, under the same rules. For anyone who has had to stand up and secure a standalone vector database just to support one feature, that's a meaningfully smaller footprint to operate and explain to an audit team.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;It runs wherever ORDS already runs.&lt;/strong&gt; OCI, AWS, Azure, Google Cloud, on-premises, Cloud@Customer — this isn't a new managed service you have to onboard. If ORDS is already part of your environment, this is a feature you turn on, not a platform you migrate to.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;App Trust closes a gap I hadn't thought about.&lt;/strong&gt; Client configuration for these toolkits is public by design — anyone who inspects a deployed app can see it. App Trust adds an attestation layer so the backend can tell a real instance of your app from a script or a copycat using the same config. That's a nice bit of reassurance for anyone worried about what "expose your database to a mobile SDK" might mean for abuse or scraping.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The bigger shift
&lt;/h2&gt;

&lt;p&gt;What I find genuinely interesting isn't the SDK syntax — I'll leave that to the developers. It's what this represents: Oracle AI Database showing up natively in front-end and mobile development conversations, not just backend and analytics ones. For consulting work centered on getting customers onto Oracle AI Database and OCI, that's a new thread worth pulling. A customer's mobile team building a new app is now a legitimate reason to talk about the same database platform their data team already runs on — instead of two separate conversations that never meet.&lt;/p&gt;

&lt;p&gt;I still won't be writing the Swift or Flutter code myself. But I'll be paying attention to who is, and I'd encourage anyone in a similar seat — infrastructure, migrations, database platform work — to take a look, even if "developer toolkit" doesn't sound like it's aimed at you. It wasn't aimed at me either, and it still got me interested.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where to go next
&lt;/h2&gt;

&lt;p&gt;If this piqued your curiosity too:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Oracle Documentation for Firebase:&lt;/strong&gt; &lt;a href="https://www.oracle.com/database/technologies/appdev/oracle-backend-for-firebase/" rel="noopener noreferrer"&gt;oracle.com/database/technologies/appdev/oracle-backend-for-firebase&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Announcement post:&lt;/strong&gt; &lt;a href="https://blogs.oracle.com/database/introducing-oracle-backend-for-firebase-build-mobile-and-web-apps-on-oracle-ai-database" rel="noopener noreferrer"&gt;Introducing Oracle Backend for Firebase&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Developer docs:&lt;/strong&gt; &lt;a href="https://docs.oracle.com/en/database/oracle/backend-for-firebase/26.1/index.html" rel="noopener noreferrer"&gt;docs.oracle.com — Oracle Backend for Firebase&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Free LiveLabs workshops:&lt;/strong&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://livelabs.oracle.com/ords/r/dbpm/livelabs/view-workshop?wid=4403" rel="noopener noreferrer"&gt;iOS workshop&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://livelabs.oracle.com/ords/r/dbpm/livelabs/view-workshop?wid=4402" rel="noopener noreferrer"&gt;Android workshop&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://livelabs.oracle.com/ords/r/dbpm/livelabs/view-workshop?wid=4404" rel="noopener noreferrer"&gt;Web workshop&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;Oracle Backend with Firebase APIs is generally available today as part of ORDS 26.1.1, and it's free.&lt;/em&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  How Nabhaas helps you
&lt;/h1&gt;

&lt;p&gt;If you’ve made it this far, you already sense there’s a better way — in fact, you have a way ahead.&lt;/p&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;TAB - Whitepaper , &lt;br&gt;
&lt;a href="https://www.nabhaas.com/_files/ugd/dab815_eb17483ee84d431a8cc2a92792ea21bf.pdf" rel="noopener noreferrer"&gt;download here&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Managed Delivery Services - Whitepaper , &lt;br&gt;
&lt;a href="https://www.nabhaas.com/_files/ugd/dab815_96198a0627d64f75a3d3a2dce9bf185d.pdf" rel="noopener noreferrer"&gt;download here&lt;/a&gt;&lt;/p&gt;

</description>
      <category>oracle</category>
      <category>oci</category>
      <category>nabhaas</category>
      <category>firebase</category>
    </item>
    <item>
      <title>Series Week 28/52 — Audit , Tracing &amp; Logging - They all mean different things</title>
      <dc:creator>Abhilash Kumar | Oracle ACE ♠</dc:creator>
      <pubDate>Sat, 01 Aug 2026 06:07:44 +0000</pubDate>
      <link>https://dev.to/nabhaas/series-week-2852-audit-tracing-logging-they-all-mean-different-things-2569</link>
      <guid>https://dev.to/nabhaas/series-week-2852-audit-tracing-logging-they-all-mean-different-things-2569</guid>
      <description>&lt;p&gt;&lt;a href="style&gt;&lt;br&gt;%0A%20%20%20%20%20%20%20%20.libutton%20{&lt;br&gt;%0A%20%20%20%20%20%20%20%20%20%20display:%20flex;&lt;br&gt;%0A%20%20%20%20%20%20%20%20%20%20flex-direction:%20column;&lt;br&gt;%0A%20%20%20%20%20%20%20%20%20%20justify-content:%20center;&lt;br&gt;%0A%20%20%20%20%20%20%20%20%20%20padding:%207px;&lt;br&gt;%0A%20%20%20%20%20%20%20%20%20%20text-align:%20center;&lt;br&gt;%0A%20%20%20%20%20%20%20%20%20%20outline:%20none;&lt;br&gt;%0A%20%20%20%20%20%20%20%20%20%20text-decoration:%20none%20!important;&lt;br&gt;%0A%20%20%20%20%20%20%20%20%20%20color:%20#ffffff%20!important;&lt;br&gt;%0A%20%20%20%20%20%20%20%20%20%20width:%20200px;&lt;br&gt;%0A%20%20%20%20%20%20%20%20%20%20height:%2032px;&lt;br&gt;%0A%20%20%20%20%20%20%20%20%20%20border-radius:%2016px;&lt;br&gt;%0A%20%20%20%20%20%20%20%20%20%20background-color:%20#0A66C2;&lt;br&gt;%0A%20%20%20%20%20%20%20%20%20%20font-family:%20"&gt;
        { Abhilash Kumar Bhattaram :  &lt;/a&gt;&lt;a href="https://www.linkedin.com/comm/mynetwork/discovery-see-all?usecase=PEOPLE_FOLLOWS&amp;amp;followMember=abhilash-kumar-85b92918" rel="noopener noreferrer"&gt;Follow on LinkedIn&lt;/a&gt; }&lt;/p&gt;

&lt;p&gt;This article focuses on audit trails, tracing, and logging — and how I help you tell them apart before an auditor and your on-call engineer end up arguing about words that don't mean what either of them thinks they mean.&lt;/p&gt;
&lt;h2&gt;
  
  
  Audit Trail, Tracing &amp;amp; Logging
&lt;/h2&gt;

&lt;p&gt;Last week's post was about who can reach the database. This week's question is the natural next one: once they're in, what can you actually prove they did?&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"We have logs" is the most dangerous sentence in an audit response — because everyone in the room means something different by it.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I've sat in enough audit calls to know the exact moment it goes sideways: the auditor asks for "the audit trail," the DBA pulls up the alert log, the app support engineer points at a trace file, and the compliance officer wanted &lt;code&gt;DBA_AUDIT_TRAIL&lt;/code&gt; the whole time. Nobody's wrong. They're just speaking three different languages about three different things — and that gap is exactly where audit findings live.&lt;/p&gt;
&lt;h2&gt;
  
  
  1. Ground Zero: Where Challenges Start
&lt;/h2&gt;

&lt;p&gt;Let's start with a plain canvas and understand our ground zero — most of this confusion isn't technical incompetence, it's vocabulary that was never standardized across teams.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Weekend-audit-panic causes &amp;amp; corresponding solutions:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;"We have logs, so we have an audit trail"&lt;/strong&gt; → &lt;em&gt;Solution:&lt;/em&gt; Logs tell you what the system did; an audit trail tells you what a user did — they overlap, they aren't the same&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Trace files handed to an auditor as "proof of activity"&lt;/strong&gt; → &lt;em&gt;Solution:&lt;/em&gt; Trace files are diagnostic, session-level, and rotate out — they were never designed as evidence&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Alert log treated as a record of data changes&lt;/strong&gt; → &lt;em&gt;Solution:&lt;/em&gt; The alert log records instance-level events, not row-level transactions&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;"Turn on auditing" said without specifying which auditing&lt;/strong&gt; → &lt;em&gt;Solution:&lt;/em&gt; Name the mechanism — traditional auditing, FGA, or Unified Auditing — they behave differently&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Assumption that the database keeps every historical transaction forever&lt;/strong&gt; → &lt;em&gt;Solution:&lt;/em&gt; Retention is finite everywhere — audit trail, redo, and flashback all expire on a policy&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Auditors asking for "who changed this business value" and DBAs pointing at DB logs only&lt;/strong&gt; → &lt;em&gt;Solution:&lt;/em&gt; Business-transaction audit is usually an application responsibility, not a DB-only one&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No one agreeing on what "audit trail" even refers to in a meeting&lt;/strong&gt; → &lt;em&gt;Solution:&lt;/em&gt; Build one shared glossary before the next audit cycle, not during it&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;This is where most audit conversations break down — not from missing evidence, but from mismatched vocabulary.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/blockquote&gt;

&lt;p&gt;As you can see, before any tool gets configured, there's a language problem to solve first.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Auditors and technical support engineers are often talking about completely different layers of the same word — "audit" — and until that's made consistent, no amount of logging fixes the conversation.&lt;/strong&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  2. Underneath Ground Zero: Finding the Real Problem
&lt;/h2&gt;

&lt;p&gt;Once you've understood your Ground Zero problems, you need to move to &lt;em&gt;why&lt;/em&gt; this vocabulary gap exists in the first place — it's baked into how Oracle itself separates these layers.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why "we have logs" doesn't survive a real audit question:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;OS-level and DB-level visibility are treated as one bucket&lt;/strong&gt; → &lt;em&gt;Solution:&lt;/em&gt; Separate what lives in the Oracle Home from what lives inside the database itself&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Traditional auditing (&lt;code&gt;SYS.AUD$&lt;/code&gt;) still assumed to be "the" audit trail&lt;/strong&gt; → &lt;em&gt;Solution:&lt;/em&gt; Recognize it as the legacy mechanism — Unified Auditing has superseded it since 12c&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;DBA_AUDIT_TRAIL&lt;/code&gt; and &lt;code&gt;UNIFIED_AUDIT_TRAIL&lt;/code&gt; used interchangeably&lt;/strong&gt; → &lt;em&gt;Solution:&lt;/em&gt; Know which view you're actually querying — they pull from different underlying stores&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No audit policy defined, so default auditing catches too little or too much&lt;/strong&gt; → &lt;em&gt;Solution:&lt;/em&gt; Design audit policies around what the business actually needs to prove&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Flashback treated as an infinite undo button&lt;/strong&gt; → &lt;em&gt;Solution:&lt;/em&gt; Flashback retention is a tuned window, not a permanent transaction backup&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Application-level business logic changes assumed to be visible in DB audit&lt;/strong&gt; → &lt;em&gt;Solution:&lt;/em&gt; If the app doesn't log "why" a value changed, the database never will either&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Compliance teams write "maintain an audit trail" without defining retention or scope&lt;/strong&gt; → &lt;em&gt;Solution:&lt;/em&gt; Translate the compliance ask into a specific mechanism, retention period, and owner&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;This gap is why the same "insufficient audit evidence" finding shows up audit after audit.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/blockquote&gt;

&lt;p&gt;As you can see, the real problem underneath is that Oracle gives you several distinct, purpose-built mechanisms — and treating them as one interchangeable "audit trail" is exactly what causes the mismatch above.&lt;/p&gt;
&lt;h2&gt;
  
  
  3. Working Upwards: From Understanding to Solution
&lt;/h2&gt;

&lt;p&gt;Here's the layer-by-layer breakdown every CTO needs to internalize — and be able to repeat back to an auditor without a DBA translating in real time.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What's available in the Oracle Home (OS-level, diagnostic):&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Trace files (&lt;code&gt;.trc&lt;/code&gt; / &lt;code&gt;.trm&lt;/code&gt;)&lt;/strong&gt; — Per-session or per-process diagnostic detail, used for troubleshooting errors and performance — not designed to prove who changed what data.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Listener log&lt;/strong&gt; — Connection attempts and listener events — useful for "who tried to connect," not "what did they do once inside."&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Alert log&lt;/strong&gt; — Instance-level events: startup, shutdown, errors, structural changes — the database's own operational diary, not a user activity record.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;What's available inside the database — and what's actually switched on:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Two mechanisms live here, and only one of them is where Oracle's investment goes today. &lt;code&gt;SYS.AUD$&lt;/code&gt; is the table behind traditional (legacy) auditing, exposed through the &lt;code&gt;DBA_AUDIT_TRAIL&lt;/code&gt; view (and &lt;code&gt;DBA_FGA_AUDIT_TRAIL&lt;/code&gt; for Fine-Grained Audit records over &lt;code&gt;SYS.FGA_LOG$&lt;/code&gt;). It's driven by old-style &lt;code&gt;AUDIT&lt;/code&gt; statements and the &lt;code&gt;AUDIT_TRAIL&lt;/code&gt; init parameter — familiar to most DBAs, but legacy: traditional/mixed-mode auditing was &lt;strong&gt;desupported starting with Oracle Database 21c&lt;/strong&gt;, so new environments shouldn't design around this view. Its successor, &lt;strong&gt;Unified Auditing&lt;/strong&gt; (12c onward), consolidates what used to be scattered across traditional auditing, FGA, Database Vault, Label Security, Real Application Security, Data Pump, and RMAN into one policy-driven store — &lt;code&gt;AUDSYS.AUD$UNIFIED&lt;/code&gt;, queried through &lt;code&gt;UNIFIED_AUDIT_TRAIL&lt;/code&gt;, controlled with &lt;code&gt;CREATE AUDIT POLICY&lt;/code&gt; + &lt;code&gt;AUDIT POLICY &amp;lt;name&amp;gt;&lt;/code&gt; instead of statement-by-statement &lt;code&gt;AUDIT&lt;/code&gt; grants.&lt;/p&gt;

&lt;p&gt;Here's the part that catches most CTOs off guard: on a fresh 12c+/19c install, Unified Auditing is already running — just not on your data. &lt;code&gt;STARTUP&lt;/code&gt;, &lt;code&gt;SHUTDOWN&lt;/code&gt;, and any &lt;code&gt;AS SYSDBA&lt;/code&gt; / &lt;code&gt;AS SYSOPER&lt;/code&gt; connection are audited unconditionally, no configuration required. Two predefined policies ship enabled out of the box: &lt;code&gt;ORA_SECURECONFIG&lt;/code&gt;, which captures administrative and security-relevant actions — creating or dropping users, roles, and profiles; privilege grants; changes to audit policies themselves; Database Vault and Label Security actions — and &lt;code&gt;ORA_LOGON_FAILURES&lt;/code&gt;, which captures failed login attempts, usually the first thing an auditor or incident responder asks for.&lt;/p&gt;

&lt;p&gt;What none of that default coverage includes is your application. Everyday &lt;code&gt;SELECT&lt;/code&gt; / &lt;code&gt;INSERT&lt;/code&gt; / &lt;code&gt;UPDATE&lt;/code&gt; / &lt;code&gt;DELETE&lt;/code&gt; on business tables goes completely unaudited until your team writes and enables a policy for it — like the &lt;code&gt;CREATE AUDIT POLICY ... ACTIONS UPDATE ON app.customers&lt;/code&gt; example below. Nothing in the defaults tells you who changed a customer's balance or read a sensitive record.&lt;/p&gt;

&lt;blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;The one-line takeaway for a CTO:&lt;/strong&gt; out of the box, Oracle audits &lt;em&gt;itself&lt;/em&gt; — privileged accounts, security configuration changes, failed logins. It does not audit your business by default. If an auditor expects business-transaction visibility and only the default policies are running, that gap is a finding waiting to happen — and closing it is a deliberate design decision your team has to make, not something Oracle does for you.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;What's an application vendor's responsibility, not the database's:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Business-transaction context&lt;/strong&gt; — "Who approved this invoice, and why" is a business-logic audit trail — the application has to log it; the database only sees the resulting DML.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Field-level business meaning&lt;/strong&gt; — The database can tell you a column changed; only the application knows what that column changing &lt;em&gt;means&lt;/em&gt; to the business.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;What's never available — and why that's by design:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;A permanent backup of every transaction that ever happened&lt;/strong&gt; → This doesn't exist, and shouldn't be expected to. Redo, undo, audit trail, and flashback data archive all operate on a &lt;em&gt;retention window&lt;/em&gt;, not infinite history — which is precisely why Flashback retention is a deliberate, tuned setting, not a substitute for a real archival strategy.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;A quick look under the hood&lt;/strong&gt; (for the technical conversation with your DBA — not something a CTO needs to write, just recognize):&lt;/p&gt;

&lt;p&gt;Enabling a Unified Audit policy on a specific, business-relevant action:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;CREATE&lt;/span&gt; &lt;span class="n"&gt;AUDIT&lt;/span&gt; &lt;span class="n"&gt;POLICY&lt;/span&gt; &lt;span class="n"&gt;audit_customer_updates&lt;/span&gt;
  &lt;span class="n"&gt;ACTIONS&lt;/span&gt; &lt;span class="k"&gt;UPDATE&lt;/span&gt; &lt;span class="k"&gt;ON&lt;/span&gt; &lt;span class="n"&gt;app&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;customers&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="n"&gt;AUDIT&lt;/span&gt; &lt;span class="n"&gt;POLICY&lt;/span&gt; &lt;span class="n"&gt;audit_customer_updates&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Querying what Unified Auditing actually captured:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="n"&gt;dbusername&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;action_name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;object_name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;event_timestamp&lt;/span&gt;
&lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;unified_audit_trail&lt;/span&gt;
&lt;span class="k"&gt;WHERE&lt;/span&gt; &lt;span class="n"&gt;object_name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'CUSTOMERS'&lt;/span&gt;
&lt;span class="k"&gt;ORDER&lt;/span&gt; &lt;span class="k"&gt;BY&lt;/span&gt; &lt;span class="n"&gt;event_timestamp&lt;/span&gt; &lt;span class="k"&gt;DESC&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's the whole shift from legacy auditing: &lt;strong&gt;you define a policy around what matters to the business, and query one consolidated view — instead of piecing together &lt;code&gt;SYS.AUD$&lt;/code&gt;, FGA, and OS logs separately.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Technical Issues:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Legacy &lt;code&gt;SYS.AUD$&lt;/code&gt; still relied on as the primary audit source — &lt;strong&gt;Solution:&lt;/strong&gt; Migrate audit policy design to Unified Auditing&lt;/li&gt;
&lt;li&gt;No defined Unified Audit policies beyond the defaults, so business activity goes uncaptured — &lt;strong&gt;Solution:&lt;/strong&gt; Build policies around specific, named compliance requirements — don't assume &lt;code&gt;ORA_SECURECONFIG&lt;/code&gt; covers your application&lt;/li&gt;
&lt;li&gt;Flashback retention set arbitrarily, not against an actual recovery/audit need — &lt;strong&gt;Solution:&lt;/strong&gt; Size retention against real RPO and audit windows, not a default&lt;/li&gt;
&lt;li&gt;Trace files rotated out before an incident investigation can use them — &lt;strong&gt;Solution:&lt;/strong&gt; Align trace/log retention with your incident response SLA&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Non-Technical Issues:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Auditors, DBAs, and app teams use "audit trail" to mean three different things — &lt;strong&gt;Solution:&lt;/strong&gt; Publish one shared glossary and use it in every audit conversation&lt;/li&gt;
&lt;li&gt;Compliance asks written without specifying mechanism or retention — &lt;strong&gt;Solution:&lt;/strong&gt; Translate every compliance clause into a named DB/app control before the audit&lt;/li&gt;
&lt;li&gt;Application teams assume the database will "just log it" — &lt;strong&gt;Solution:&lt;/strong&gt; Make business-transaction logging an explicit app requirement, reviewed at design time&lt;/li&gt;
&lt;li&gt;No one owns reconciling what the auditor wants against what actually exists — &lt;strong&gt;Solution:&lt;/strong&gt; Assign one accountable owner to bridge the audit ask and the technical reality&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Audit Trail, Tracing, and Logging are not synonyms — they're three different answers to three different questions. Getting your auditors and your engineers speaking the same language about which is which is the eye-opener most CTOs don't realize they're missing until it costs them in a finding.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;


&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  How Nabhaas helps you
&lt;/h2&gt;

&lt;p&gt;If you've made it this far, you already sense there's a better way — in fact, you have a way ahead.&lt;/p&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;TAB - Whitepaper ,&lt;br&gt;
&lt;a href="https://www.nabhaas.com/_files/ugd/dab815_eb17483ee84d431a8cc2a92792ea21bf.pdf" rel="noopener noreferrer"&gt;download here&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Managed Delivery Services - Whitepaper ,&lt;br&gt;
&lt;a href="https://www.nabhaas.com/_files/ugd/dab815_96198a0627d64f75a3d3a2dce9bf185d.pdf" rel="noopener noreferrer"&gt;download here&lt;/a&gt;&lt;/p&gt;

</description>
      <category>oracle</category>
      <category>oci</category>
      <category>nabhaas</category>
      <category>thoughtleadershp</category>
    </item>
    <item>
      <title>Series Week 27/52 — Zero Trust for Databases: Rethinking Access in OCI</title>
      <dc:creator>Abhilash Kumar | Oracle ACE ♠</dc:creator>
      <pubDate>Tue, 28 Jul 2026 07:32:20 +0000</pubDate>
      <link>https://dev.to/nabhaas/series-week-2752-zero-trust-for-databases-rethinking-access-in-oci-34hg</link>
      <guid>https://dev.to/nabhaas/series-week-2752-zero-trust-for-databases-rethinking-access-in-oci-34hg</guid>
      <description>&lt;h1&gt;
  
  
  Series Week 27/52 — Zero Trust for Databases: Rethinking Access in OCI
&lt;/h1&gt;

&lt;p&gt;&lt;a href="style&gt;&lt;br&gt;%0A%20%20%20%20%20%20%20%20.libutton%20{&lt;br&gt;%0A%20%20%20%20%20%20%20%20%20%20display:%20flex;&lt;br&gt;%0A%20%20%20%20%20%20%20%20%20%20flex-direction:%20column;&lt;br&gt;%0A%20%20%20%20%20%20%20%20%20%20justify-content:%20center;&lt;br&gt;%0A%20%20%20%20%20%20%20%20%20%20padding:%207px;&lt;br&gt;%0A%20%20%20%20%20%20%20%20%20%20text-align:%20center;&lt;br&gt;%0A%20%20%20%20%20%20%20%20%20%20outline:%20none;&lt;br&gt;%0A%20%20%20%20%20%20%20%20%20%20text-decoration:%20none%20!important;&lt;br&gt;%0A%20%20%20%20%20%20%20%20%20%20color:%20#ffffff%20!important;&lt;br&gt;%0A%20%20%20%20%20%20%20%20%20%20width:%20200px;&lt;br&gt;%0A%20%20%20%20%20%20%20%20%20%20height:%2032px;&lt;br&gt;%0A%20%20%20%20%20%20%20%20%20%20border-radius:%2016px;&lt;br&gt;%0A%20%20%20%20%20%20%20%20%20%20background-color:%20#0A66C2;&lt;br&gt;%0A%20%20%20%20%20%20%20%20%20%20font-family:%20"&gt;
        { Abhilash Kumar Bhattaram :  &lt;/a&gt;&lt;a href="https://www.linkedin.com/comm/mynetwork/discovery-see-all?usecase=PEOPLE_FOLLOWS&amp;amp;followMember=abhilash-kumar-85b92918" rel="noopener noreferrer"&gt;Follow on LinkedIn&lt;/a&gt; }&lt;/p&gt;

&lt;p&gt;This article focuses on access control in OCI, and how I help you rethink who — and what — actually gets to touch your database.&lt;/p&gt;
&lt;h2&gt;
  
  
  Database Access Control
&lt;/h2&gt;

&lt;p&gt;Access control does not change because your database moved to the cloud. What changes is who's watching, and how many new doors got added along the way.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Least privilege isn't a policy statement — it's the difference between an incident and a headline.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Last week's post drew the line between Encryption, Masking, Redaction, and Database Vault. This week, I want to zoom out one layer — to who is even allowed to reach the database in the first place, before any of those four controls come into play. In OCI, that question has more moving parts than most CTOs expect: IAM policies, compartments, network security groups, dynamic groups, and the database's own privilege model all sit in the same access chain.&lt;/p&gt;
&lt;h2&gt;
  
  
  1. Ground Zero: Where Challenges Start
&lt;/h2&gt;

&lt;p&gt;Let's start with a plain canvas and understand our ground zero — most access problems in OCI start as convenience decisions that were never revisited.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Weekend-access-panic causes &amp;amp; corresponding solutions:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;"It's in the cloud, so IAM handles security"&lt;/strong&gt; → &lt;em&gt;Solution:&lt;/em&gt; IAM controls who reaches the console/API — the database still has its own privilege model&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;One IAM policy grants &lt;code&gt;manage database-family&lt;/code&gt; across the whole tenancy&lt;/strong&gt; → &lt;em&gt;Solution:&lt;/em&gt; Scope policies to a compartment, an environment, and a named group&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Security Lists/NSGs left open on the DB listener port&lt;/strong&gt; → &lt;em&gt;Solution:&lt;/em&gt; Restrict ingress to only the app subnet or bastion, nothing broader&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Shared "admin" credentials used by multiple team members&lt;/strong&gt; → &lt;em&gt;Solution:&lt;/em&gt; Individual named accounts, tied to IAM identity, always&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;DBAs hold both console access and unrestricted DB privileges&lt;/strong&gt; → &lt;em&gt;Solution:&lt;/em&gt; Separate cloud-infrastructure access from in-database privilege&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Automation scripts run with a personal user's credentials&lt;/strong&gt; → &lt;em&gt;Solution:&lt;/em&gt; Use Dynamic Groups and Instance Principals scoped to the task&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Break-glass/emergency access exists but isn't documented or logged&lt;/strong&gt; → &lt;em&gt;Solution:&lt;/em&gt; Define, log, and time-box emergency access explicitly&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Compartments are structured by cost center, not by access boundary&lt;/strong&gt; → &lt;em&gt;Solution:&lt;/em&gt; Let compartments reflect who should — and shouldn't — see what&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No one reviews who still has access after a project ends&lt;/strong&gt; → &lt;em&gt;Solution:&lt;/em&gt; Run periodic access recertification, not just onboarding&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;This is where most access-related incidents begin — not with an attack, but with a door nobody remembered was open.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/blockquote&gt;

&lt;p&gt;As you can see, we haven't even touched Zero Trust architecture yet — there's a lot of basic hygiene to close first.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Cloud access is not one control — it's a chain. And a chain is only as strong as the link nobody's checked in months.&lt;/strong&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  2. Underneath Ground Zero: Finding the Real Problem
&lt;/h2&gt;

&lt;p&gt;Once you've understood your Ground Zero problems, you need to move to &lt;em&gt;why&lt;/em&gt; access sprawls so quickly in OCI specifically — it's rarely negligence, it's usually speed.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why "we locked it down" often doesn't hold up under review:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;IAM policies were written once, at go-live, under deadline pressure&lt;/strong&gt; → &lt;em&gt;Solution:&lt;/em&gt; Treat IAM policy as a living artifact, reviewed every quarter&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Compartment structure was inherited from a POC, never redesigned&lt;/strong&gt; → &lt;em&gt;Solution:&lt;/em&gt; Re-architect compartments around production access boundaries&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Network security groups get one broad rule instead of several narrow ones&lt;/strong&gt; → &lt;em&gt;Solution:&lt;/em&gt; Write NSG rules per service, not per convenience&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Database roles mirror OS roles instead of business function&lt;/strong&gt; → &lt;em&gt;Solution:&lt;/em&gt; Design DB roles around what a job actually needs to do&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dynamic Groups are underused, so scripts fall back to personal logins&lt;/strong&gt; → &lt;em&gt;Solution:&lt;/em&gt; Build automation identity into the architecture from day one&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Zero Trust is treated as a firewall concept, not an identity concept&lt;/strong&gt; → &lt;em&gt;Solution:&lt;/em&gt; Verify every request — user, service, or script — every time&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Access reviews happen only when an auditor asks for one&lt;/strong&gt; → &lt;em&gt;Solution:&lt;/em&gt; Make access recertification a scheduled operational task&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;IAM and Database Vault are managed by two different teams that don't talk&lt;/strong&gt; → &lt;em&gt;Solution:&lt;/em&gt; Bring cloud IAM and in-database privilege under one access narrative&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;"Temporary" access grants outlive the reason they were created&lt;/strong&gt; → &lt;em&gt;Solution:&lt;/em&gt; Expire access by default; renew deliberately, not by accident&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;This gap is why access reviews so often turn into surprises.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/blockquote&gt;

&lt;p&gt;As you can see, this is less about any single misconfiguration and more about access decisions made in isolation, by different teams, at different times — with no single owner tracking the whole chain.&lt;/p&gt;
&lt;h2&gt;
  
  
  3. Working Upwards: From Understanding to Solution
&lt;/h2&gt;

&lt;p&gt;Zero Trust for databases isn't a product — it's a discipline of never assuming trust just because a request came from inside the tenancy. Here's what that looks like in OCI, in plain language.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What least-privilege access actually looks like in OCI:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;IAM Policies&lt;/strong&gt; — Scoped to a specific compartment and group, granting only the verbs a role needs (e.g. &lt;code&gt;use&lt;/code&gt;, not &lt;code&gt;manage&lt;/code&gt;), never tenancy-wide.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Compartments&lt;/strong&gt; — Structured as access boundaries first, cost boundaries second — Prod, Non-Prod, and DR isolated from each other by design.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Network Security Groups&lt;/strong&gt; — Attached to the database's VNIC directly, allowing traffic only from named application NSGs, not open CIDR ranges.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dynamic Groups &amp;amp; Instance Principals&lt;/strong&gt; — Automation (including TAB) authenticates as itself, not as a person, with policy scoped to exactly its task.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;OCI Vault (Secrets)&lt;/strong&gt; — Database credentials stored and rotated centrally, never hardcoded in scripts or shared in chat.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Database Vault (in-DB)&lt;/strong&gt; — Even a valid, authenticated session is restricted by realm and command rule inside the database itself.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;Zero Trust means every layer — IAM, network, automation identity, and the database itself — verifies independently. None of them trust the others to have already checked.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;A quick look under the hood&lt;/strong&gt; (for the technical conversation with your cloud team — not something a CTO needs to write, just recognize):&lt;/p&gt;

&lt;p&gt;An OCI IAM policy scoped to one compartment, one group, one verb — not tenancy-wide:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Allow group DBA-Prod-Readonly to use database-family in compartment Prod-DB
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A Dynamic Group so automation authenticates as itself, not as a person:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Allow dynamic-group TAB-Automation to manage db-nodes in compartment Prod-DB
  where request.principal.tag.role='patching-agent'
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's the whole idea — the automation gets exactly one job's worth of access, and nothing about a human's session is involved.&lt;/p&gt;

&lt;p&gt;The point for a CTO isn't the syntax — it's that &lt;strong&gt;every one of these grants can be scoped down to a compartment, a group, and a verb.&lt;/strong&gt; The default OCI experience nudges toward broad grants because they're faster to write. Zero Trust is choosing the narrower grant every time, even when it's slower.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Technical Issues:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Broad IAM policies written for convenience, never narrowed post-go-live — &lt;strong&gt;Solution:&lt;/strong&gt; Audit and re-scope every policy to compartment + verb level&lt;/li&gt;
&lt;li&gt;NSGs allow traffic from entire subnets instead of specific services — &lt;strong&gt;Solution:&lt;/strong&gt; Rewrite rules to source from named application NSGs only&lt;/li&gt;
&lt;li&gt;Automation scripts authenticate with personal credentials — &lt;strong&gt;Solution:&lt;/strong&gt; Migrate every script to Dynamic Groups and Instance Principals&lt;/li&gt;
&lt;li&gt;Database roles don't map to least-privilege job functions — &lt;strong&gt;Solution:&lt;/strong&gt; Redesign roles around task, not convenience or legacy habit&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Non-Technical Issues:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Cloud team and DBA team manage access in separate silos — &lt;strong&gt;Solution:&lt;/strong&gt; Create one access map spanning IAM, network, and in-database privilege&lt;/li&gt;
&lt;li&gt;Access reviews are reactive, triggered only by audits — &lt;strong&gt;Solution:&lt;/strong&gt; Schedule recertification as a standing operational cadence&lt;/li&gt;
&lt;li&gt;"Temporary" access has no expiry or ownership — &lt;strong&gt;Solution:&lt;/strong&gt; Default every grant to expire; require deliberate renewal&lt;/li&gt;
&lt;li&gt;No one can produce a single answer to "who can reach this database" — &lt;strong&gt;Solution:&lt;/strong&gt; Maintain one living access inventory, reviewed and owned&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Zero Trust isn't about distrusting your team — it's about never letting distance from the data become distance from accountability.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;


&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  How Nabhaas helps you
&lt;/h2&gt;

&lt;p&gt;If you've made it this far, you already sense there's a better way — in fact, you have a way ahead.&lt;/p&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;TAB - Whitepaper ,&lt;br&gt;
&lt;a href="https://www.nabhaas.com/_files/ugd/dab815_eb17483ee84d431a8cc2a92792ea21bf.pdf" rel="noopener noreferrer"&gt;download here&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Managed Delivery Services - Whitepaper ,&lt;br&gt;
&lt;a href="https://www.nabhaas.com/_files/ugd/dab815_96198a0627d64f75a3d3a2dce9bf185d.pdf" rel="noopener noreferrer"&gt;download here&lt;/a&gt;&lt;/p&gt;

</description>
      <category>nabhaas</category>
      <category>oracle</category>
      <category>oci</category>
      <category>thoughtleadership</category>
    </item>
    <item>
      <title>Series Week 26/52 — TDE, Database Vault &amp; Data Masking: Closing the Compliance Loop</title>
      <dc:creator>Abhilash Kumar | Oracle ACE ♠</dc:creator>
      <pubDate>Wed, 22 Jul 2026 07:10:18 +0000</pubDate>
      <link>https://dev.to/nabhaas/series-week-2652-tde-database-vault-data-masking-closing-the-compliance-loop-5bnn</link>
      <guid>https://dev.to/nabhaas/series-week-2652-tde-database-vault-data-masking-closing-the-compliance-loop-5bnn</guid>
      <description>&lt;p&gt;&lt;a href="style&gt;&lt;br&gt;%0A%20%20%20%20%20%20%20%20.libutton%20{&lt;br&gt;%0A%20%20%20%20%20%20%20%20%20%20display:%20flex;&lt;br&gt;%0A%20%20%20%20%20%20%20%20%20%20flex-direction:%20column;&lt;br&gt;%0A%20%20%20%20%20%20%20%20%20%20justify-content:%20center;&lt;br&gt;%0A%20%20%20%20%20%20%20%20%20%20padding:%207px;&lt;br&gt;%0A%20%20%20%20%20%20%20%20%20%20text-align:%20center;&lt;br&gt;%0A%20%20%20%20%20%20%20%20%20%20outline:%20none;&lt;br&gt;%0A%20%20%20%20%20%20%20%20%20%20text-decoration:%20none%20!important;&lt;br&gt;%0A%20%20%20%20%20%20%20%20%20%20color:%20#ffffff%20!important;&lt;br&gt;%0A%20%20%20%20%20%20%20%20%20%20width:%20200px;&lt;br&gt;%0A%20%20%20%20%20%20%20%20%20%20height:%2032px;&lt;br&gt;%0A%20%20%20%20%20%20%20%20%20%20border-radius:%2016px;&lt;br&gt;%0A%20%20%20%20%20%20%20%20%20%20background-color:%20#0A66C2;&lt;br&gt;%0A%20%20%20%20%20%20%20%20%20%20font-family:%20"&gt;
        { Abhilash Kumar Bhattaram :  &lt;/a&gt;&lt;a href="https://www.linkedin.com/comm/mynetwork/discovery-see-all?usecase=PEOPLE_FOLLOWS&amp;amp;followMember=abhilash-kumar-85b92918" rel="noopener noreferrer"&gt;Follow on LinkedIn&lt;/a&gt; }&lt;/p&gt;

&lt;p&gt;This article focuses on database security controls, and how I help you tell them apart before an auditor makes you do it the hard way.&lt;/p&gt;

&lt;p&gt;Ground Zero: Where Challenges Start&lt;br&gt;
Underneath Ground Zero: Finding the Real Problem&lt;br&gt;
Working Upwards: From Understanding to Solution&lt;/p&gt;
&lt;h2&gt;
  
  
  Database Security
&lt;/h2&gt;

&lt;p&gt;Every database has locks. Not every lock does the same job.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Encrypt it, mask it, redact it, restrict it — pick the wrong one, and the audit finds out before you do.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Most CTOs assume "we've secured the data" is a single checkbox. It isn't. Encryption, Data Masking, Redaction, and Database Vault solve four different problems, for four different audiences, at four different points in the data's life. Confusing them is the single most common finding I see walk into an IT audit unprepared.&lt;/p&gt;
&lt;h2&gt;
  
  
  1. Ground Zero: Where Challenges Start
&lt;/h2&gt;

&lt;p&gt;Let's start with a plain canvas and understand our ground zero — the issues here are mostly a language and ownership problem before they are a technical one.&lt;/p&gt;

&lt;p&gt;Weekend-audit-panic causes &amp;amp; corresponding solutions:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;- "We're encrypted, so we're compliant" -&amp;gt; Solution: Encryption protects data at rest, not who sees it live

- Dev/Test teams see live PII in cloned environments -&amp;gt; Solution: Mask data before it ever lands in Non-Prod

- App reports show full card/Aadhaar numbers to support staff -&amp;gt; Solution: Redact on display, not just on disk

- DBAs have unrestricted SELECT on sensitive schemas -&amp;gt; Solution: Use Database Vault to separate duty, not just access
- Auditors ask "who can see this column" and nobody knows -&amp;gt; Solution: Map every control to a named data-protection objective

- Backup files carry the same exposure as production -&amp;gt; Solution: Extend TDE and masking policy to backups and exports

- One control is assumed to cover every regulatory ask -&amp;gt; Solution: Match RBI/IRDAI/DPDP clauses to the specific control that satisfies them

- Security bought as a product, not designed as a layer set -&amp;gt; Solution: Build a layered model — encrypt, restrict, mask, redact

- No one owns "data protection" end-to-end -&amp;gt; Solution: Assign a single accountable owner across DBA, App, and InfoSec

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;No one owns "data protection" end-to-end → Solution: Assign a single accountable owner across DBA, App, and InfoSec&lt;/p&gt;

&lt;blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;This is where most compliance findings begin.&lt;/p&gt;
&lt;/blockquote&gt;


&lt;/blockquote&gt;

&lt;p&gt;As you can see, we haven't even touched the technical configuration yet — there's a lot of clarity to build first.&lt;/p&gt;

&lt;p&gt;Knowing which control answers which audit question is often tougher than deploying the control itself… period.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Underneath Ground Zero: Finding the Real Problem
&lt;/h2&gt;

&lt;p&gt;Once you've understood your Ground Zero problems, you need to move to why these four controls keep getting collapsed into one in the CTO's mental model — and in the audit response.&lt;/p&gt;

&lt;p&gt;Why "we're secure" often doesn't survive an audit:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;- Encryption (TDE) is treated as a full data-protection plan -&amp;gt; Solution: Position TDE correctly — it only stops disk/media theft

- Masking and Redaction are used interchangeably in RFPs -&amp;gt; Solution: Separate them by where and when they apply, not just intent

- Database Vault is seen as "just another access control" -&amp;gt; Solution: Frame it as separation-of-duty, even from privileged DBAs

- No inventory of sensitive columns exists -&amp;gt; Solution: Classify data first — PII, PCI, PHI, financial — before choosing controls

- Non-Prod refresh cycles skip masking for "speed" -&amp;gt; Solution: Bake masking into the refresh pipeline, not an afterthought

- Redaction is applied at the app layer inconsistently -&amp;gt; Solution: Push redaction policy into the database so every consumer inherits it

- Compliance teams write policy DBAs were never shown -&amp;gt; Solution: Translate RBI/IRDAI/DPDP language into concrete DB controls

- Vendors sell "encryption" as a compliance silver bullet -&amp;gt; Solution: Ask "which specific audit clause does this satisfy" before buying

- No mapping between control and control owner -&amp;gt; Solution: Assign named ownership per control, tested per audit cycle

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;This gap is why the same audit finding repeats every year.&lt;/p&gt;
&lt;/blockquote&gt;


&lt;/blockquote&gt;

&lt;p&gt;As you can see, this is a mix of classification gaps, ownership gaps, and vocabulary gaps — all of which look identical from the outside until an auditor asks a pointed question.&lt;/p&gt;

&lt;p&gt;Addressing this confusion is critical before any control rollout can succeed. Every organization's data estate will have its own sensitive-data footprint, but this root confusion cannot be ignored.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Working Upwards: From Understanding to Solution
&lt;/h2&gt;

&lt;p&gt;Segregate the four controls clearly — listed below is what every CTO needs to internalize and hand down to their teams, in plain language.&lt;/p&gt;

&lt;p&gt;How four controls close one compliance loop:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;TDE Encryption — Encrypts data at rest (tablespace/column level). Stops theft of disk, backup, or export files. Does NOT stop an authorized user querying live data.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Data Masking — Permanently or dynamically transforms data for Non-Prod or non-privileged use. Stops Dev/Test/BI/Support teams seeing real PII in cloned or shared environments.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Redaction — Obscures part of a live value at display/query time; the data underneath stays intact. Stops over-exposure on screens/reports (e.g. showing only the last 4 digits of a card).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Database Vault — Enforces separation of duty via command and realm restrictions. Stops even privileged DBAs and SYSDBA from reading sensitive application data.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;Encryption protects the disk. Masking protects Non-Prod. Redaction protects the screen. Vault protects from privilege itself. An audit checks all four separately.&lt;/p&gt;
&lt;/blockquote&gt;


&lt;/blockquote&gt;

&lt;p&gt;A quick look under the hood (for the technical conversation with your DBA — not something a CTO needs to write, just recognize):&lt;/p&gt;

&lt;p&gt;TDE — encrypting a tablespace so the files on disk are unreadable without the key:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;CREATE&lt;/span&gt; &lt;span class="n"&gt;TABLESPACE&lt;/span&gt; &lt;span class="n"&gt;app_data&lt;/span&gt;
  &lt;span class="n"&gt;DATAFILE&lt;/span&gt; &lt;span class="s1"&gt;'app_data01.dbf'&lt;/span&gt; &lt;span class="k"&gt;SIZE&lt;/span&gt; &lt;span class="mi"&gt;500&lt;/span&gt;&lt;span class="n"&gt;M&lt;/span&gt;
  &lt;span class="n"&gt;ENCRYPTION&lt;/span&gt; &lt;span class="k"&gt;USING&lt;/span&gt; &lt;span class="s1"&gt;'AES256'&lt;/span&gt; &lt;span class="n"&gt;ENCRYPT&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;--- But this is default in OCI if you are using Oracle Managed Keys&lt;/p&gt;

&lt;p&gt;Redaction — masking a live column on the fly, without touching the underlying data:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;BEGIN&lt;/span&gt;
  &lt;span class="n"&gt;DBMS_REDACT&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;ADD_POLICY&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;object_schema&lt;/span&gt;   &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s1"&gt;'APP'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;object_name&lt;/span&gt;     &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s1"&gt;'CUSTOMERS'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="k"&gt;column_name&lt;/span&gt;     &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s1"&gt;'CARD_NUMBER'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;policy_name&lt;/span&gt;     &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s1"&gt;'REDACT_CARD'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;function_type&lt;/span&gt;   &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;DBMS_REDACT&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;PARTIAL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;function_parameters&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s1"&gt;'9,1,4,V,4,4'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;expression&lt;/span&gt;      &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s1"&gt;'1=1'&lt;/span&gt;
  &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="k"&gt;END&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That one call is why a support agent can see "XXXX-XXXX-XXXX-4321" while the actual stored value never changes — the redaction happens purely at query time.&lt;/p&gt;

&lt;p&gt;The point for a CTO isn't the syntax — it's that TDE is set once at the tablespace/column level, while Redaction is a policy your DBA can apply, adjust, or remove per column without any application change. Two different levers, two different audit conversations.&lt;/p&gt;

&lt;h2&gt;
  
  
  Technical Issues:
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Sensitive columns not classified or tagged — Solution: Run a data classification pass before choosing any control&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;TDE assumed to cover application-layer exposure — Solution: Layer masking and redaction on top, don't stop at disk encryption&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Masking policies inconsistent across refresh cycles — Solution: Automate masking as part of every Non-Prod refresh, no exceptions&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Redaction configured only in the application, not the database — Solution: Centralize redaction policy at the DB layer so every client inherits it&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Non-Technical Issues:
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Compliance and DBA teams speak different vocabularies for the same requirement — Solution: Build a shared control-to-clause mapping document (RBI/IRDAI/DPDP -&amp;gt; specific DB control)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;No single owner accountable for the full compliance loop — Solution: Name one owner who answers for encryption, masking, redaction, and Vault together&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Controls procured reactively, post-incident or pre-audit — Solution: Build the control roadmap proactively, ahead of the audit calendar&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Auditors get inconsistent answers from different teams — Solution: Rehearse the audit narrative internally before the real one lands&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;"We're secure" repeated without evidence — Solution: Maintain evidence artifacts per control, ready to produce on request&lt;/p&gt;

&lt;blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;Closing the compliance loop isn't one control done well — it's four controls, each answering a different question, working together.&lt;/p&gt;
&lt;/blockquote&gt;


&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  How Nabhaas helps you
&lt;/h2&gt;

&lt;p&gt;If you’ve made it this far, you already sense there’s a better way — in fact, you have a way ahead.&lt;/p&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;TAB - Whitepaper , &lt;br&gt;
&lt;a href="https://www.nabhaas.com/_files/ugd/dab815_eb17483ee84d431a8cc2a92792ea21bf.pdf" rel="noopener noreferrer"&gt;download here&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Managed Delivery Services - Whitepaper , &lt;br&gt;
&lt;a href="https://www.nabhaas.com/_files/ugd/dab815_96198a0627d64f75a3d3a2dce9bf185d.pdf" rel="noopener noreferrer"&gt;download here&lt;/a&gt;&lt;/p&gt;

</description>
      <category>oracle</category>
      <category>oci</category>
      <category>nabhaas</category>
      <category>thoughtleadership</category>
    </item>
    <item>
      <title>Series Week 25/52 - API Logging - The Infosec headache of maintaining the logs - The Oracle solution</title>
      <dc:creator>Abhilash Kumar | Oracle ACE ♠</dc:creator>
      <pubDate>Sat, 11 Jul 2026 14:27:29 +0000</pubDate>
      <link>https://dev.to/nabhaas/series-week-25-of-52-api-logging-the-infosec-headache-of-maintaining-the-logs-the-oracle-5093</link>
      <guid>https://dev.to/nabhaas/series-week-25-of-52-api-logging-the-infosec-headache-of-maintaining-the-logs-the-oracle-5093</guid>
      <description>&lt;p&gt;&lt;a href="style&gt;&lt;br&gt;%0A%20%20%20%20%20%20%20%20.libutton%20{&lt;br&gt;%0A%20%20%20%20%20%20%20%20%20%20display:%20flex;&lt;br&gt;%0A%20%20%20%20%20%20%20%20%20%20flex-direction:%20column;&lt;br&gt;%0A%20%20%20%20%20%20%20%20%20%20justify-content:%20center;&lt;br&gt;%0A%20%20%20%20%20%20%20%20%20%20padding:%207px;&lt;br&gt;%0A%20%20%20%20%20%20%20%20%20%20text-align:%20center;&lt;br&gt;%0A%20%20%20%20%20%20%20%20%20%20outline:%20none;&lt;br&gt;%0A%20%20%20%20%20%20%20%20%20%20text-decoration:%20none%20!important;&lt;br&gt;%0A%20%20%20%20%20%20%20%20%20%20color:%20#ffffff%20!important;&lt;br&gt;%0A%20%20%20%20%20%20%20%20%20%20width:%20200px;&lt;br&gt;%0A%20%20%20%20%20%20%20%20%20%20height:%2032px;&lt;br&gt;%0A%20%20%20%20%20%20%20%20%20%20border-radius:%2016px;&lt;br&gt;%0A%20%20%20%20%20%20%20%20%20%20background-color:%20#0A66C2;&lt;br&gt;%0A%20%20%20%20%20%20%20%20%20%20font-family:%20"&gt;
        { Abhilash Kumar Bhattaram :  &lt;/a&gt;&lt;a href="https://www.linkedin.com/comm/mynetwork/discovery-see-all?usecase=PEOPLE_FOLLOWS&amp;amp;followMember=abhilash-kumar-85b92918" rel="noopener noreferrer"&gt;Follow on LinkedIn&lt;/a&gt; }&lt;/p&gt;

&lt;p&gt;This week I'm blogging about a logging headache , a seemingly trivial topic but a data management nightmare. This blog is a about a CTO understanding a data management issue and ways to solve it.&lt;/p&gt;

&lt;p&gt;For DBA &amp;amp; Technical Architects I have blogged about this earlier for 23ai , the same applies to 26ai as well. ( Blog below )&lt;/p&gt;


&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/nabhaas/23ai-clob-to-json-migration-series-part-1-3oll" class="crayons-story__hidden-navigation-link"&gt;23ai - Series Part 1 - CLOB to JSON Migration Essentials&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;
          &lt;a class="crayons-logo crayons-logo--l" href="/nabhaas"&gt;
            &lt;img alt="Nabhaas Cloud Consulting logo" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Forganization%2Fprofile_image%2F8695%2F296cb680-bec9-47fb-944a-a9d6be5e19d0.jpg" class="crayons-logo__image" width="667" height="667"&gt;
          &lt;/a&gt;

          &lt;a href="/abhilash8" class="crayons-avatar  crayons-avatar--s absolute -right-2 -bottom-2 border-solid border-2 border-base-inverted  "&gt;
            &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F418726%2F9abed0ea-c3e3-4019-b3a3-d7c8e54a7403.jpeg" alt="abhilash8 profile" class="crayons-avatar__image" width="460" height="460"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/abhilash8" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Abhilash Kumar | Oracle ACE ♠
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Abhilash Kumar | Oracle ACE ♠
                
              
              &lt;div id="story-author-preview-content-2459850" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/abhilash8" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&gt;
                        &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F418726%2F9abed0ea-c3e3-4019-b3a3-d7c8e54a7403.jpeg" class="crayons-avatar__image" alt="" width="460" height="460"&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Abhilash Kumar | Oracle ACE ♠&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

            &lt;span&gt;
              &lt;span class="crayons-story__tertiary fw-normal"&gt; for &lt;/span&gt;&lt;a href="/nabhaas" class="crayons-story__secondary fw-medium"&gt;Nabhaas Cloud Consulting&lt;/a&gt;
            &lt;/span&gt;
          &lt;/div&gt;
          &lt;a href="https://dev.to/nabhaas/23ai-clob-to-json-migration-series-part-1-3oll" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;May 5 '25&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/nabhaas/23ai-clob-to-json-migration-series-part-1-3oll" id="article-link-2459850"&gt;
          23ai - Series Part 1 - CLOB to JSON Migration Essentials
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/oracle"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;oracle&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/sql"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;sql&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/json"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;json&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/oci"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;oci&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
            &lt;a href="https://dev.to/nabhaas/23ai-clob-to-json-migration-series-part-1-3oll#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              

              &lt;span class="hidden s:inline"&gt;Add&amp;nbsp;Comment&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            13 min read
          &lt;/small&gt;
            
              &lt;span class="bm-initial crayons-icon c-btn__icon"&gt;
                

              &lt;/span&gt;
              &lt;span class="bm-success crayons-icon c-btn__icon"&gt;
                

              &lt;/span&gt;
            
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


&lt;p&gt;In a high-velocity digital ecosystem, managing the architectural balance between deep corporate visibility and system predictability is a constant tightrope walk. Your CISO and InfoSec teams rightfully require a "digital flight recorder" an un-omitted ledger capturing the precise request and response headers, tokens, and payloads across your entire application ecosystem to adhere to rigorous SOC2, PCI-DSS, or RBI/IRDAI mandates. However, when an application scales to millions of transactions per day, treating these highly structured, deeply nested API payloads as generic text inputs introduces a severe system-level performance tax.&lt;/p&gt;

&lt;p&gt;Let me take explain this in 5 points &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;NOTE : We are only taking about the means of logging , what intelligence comes out of logging is a whole different subject&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;- The Digital Flight Recorder:&lt;/strong&gt; It is the automated, real-time capture of the exact data payloads (the headers, metadata, and body) traveling between your applications, third-party services, and users.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;- The "Who, What, and When" Audit Trail:&lt;/strong&gt; It serves as a historical ledger that logs precisely which authenticated client made a request, what resource they accessed, when it happened, and how your system responded.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;- The Foundation of Observability:&lt;/strong&gt; Unlike standard system uptime metrics, API logging gives developers micro-level visibility, letting them trace data flows across distributed architectures to find the exact root cause of an application failure in seconds.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;- The First Line of InfoSec Defense:&lt;/strong&gt; It provides the critical telemetry required to detect security anomalies, such as credential stuffing attacks, unauthorized data exfiltration, or malicious API tampering.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;- The Compliance Anchor:&lt;/strong&gt; It acts as the immutable evidence required to pass stringent corporate and regulatory security audits (such as SOC2, ISO 27001, and PCI-DSS) by proving data privacy and access rules are being enforced.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Ground Zero: Where Challenges Start - The Storage Strain
&lt;/h2&gt;

&lt;p&gt;At the application layer, developers look for the path of least resistance. API payloads typically rich, deeply nested JSON objects are dumped straight into relational schemas as unstructured CLOB (Character Large Object) text blocks. There was simply no other choice to hold it inside the databases.&lt;/p&gt;

&lt;p&gt;You may ask why not varchar2 , the answer is obvious that it has a hard limit of 4000 bytes&lt;/p&gt;

&lt;p&gt;Some example of these problems are &lt;a href="https://community.oracle.com/products/oracleanalytics/discussion/23859/error-when-having-a-string-concatenation-of-two-columns-over-4000-characters-data" rel="noopener noreferrer"&gt;here&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[Legacy Text Architecture]
Incoming API JSON Payload  --&amp;gt;  Character String Conversion  --&amp;gt;  Opaque CLOB Storage Block
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;The Operational Reality: Under exhaustive, multi-threaded stress tests, dumping high volume API strings into character-based objects instantly creates an enterprise bottleneck. Because a standard CLOB stores data out of line and treats it as an un-indexed text block, the database engine spends massive amounts of CPU cycles on characterset conversions and memory marshaling. To InfoSec, it is a critical security audit trail; to your production database, it is an opaque wall of character text that slows down critical execution paths during peak business hours.&lt;/p&gt;
&lt;h2&gt;
  
  
  2. Underneath Ground Zero:
&lt;/h2&gt;

&lt;p&gt;Peeking below the database surface at the OS, storage, and I/O tiers reveals why legacy CLOB-based logging inevitably degrades cluster predictability:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;The Temp Segment Engine Strain: Continuous, high-concurrency write and read stress tests on CLOB columns heavily punish internal database temp segments and local LOB caches, starving core transactional tables of memory resources.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The Blind Query Bottleneck: To the database engine, a CLOB text column has zero structural semantic awareness. If an incident response team needs to parse a specific user_id or scan for an anomalous API error code inside a 5MB text payload, the engine is forced to perform brutal full-table scans or evaluate heavy regular expression filters across millions of rows, crippling system I/O.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The Tablespace Swelling: Raw character data lacks native structural compaction. Log tablespaces balloon rapidly, driving up OCI storage spends, expanding backup windows, and complicating your overall Disaster Recovery (DR) data synchronization SLAs.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;So applications have typically used Oracle 19c CLOB as a defacto solution as there is no other alternative&lt;/em&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  3. Working Upwards:
&lt;/h2&gt;

&lt;p&gt;Enter the JSON datatype : THE solution for API logging &lt;/p&gt;

&lt;p&gt;The official Oracle Documentation for JSON Data Type is here&lt;br&gt;
&lt;/p&gt;
&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
      &lt;div class="c-embed__body flex items-center justify-between"&gt;
        &lt;a href="https://docs.oracle.com/en/database/oracle/oracle-database/26/adjsn/json-data-type.html" rel="noopener noreferrer" class="c-link fw-bold flex items-center"&gt;
          &lt;span class="mr-2"&gt;docs.oracle.com&lt;/span&gt;
          

        &lt;/a&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;



&lt;p&gt;Peeking below the database surface at the OS * storage costs tiers reveals why legacy character formats create a ticking technical debt time bomb for API log retention. When handling millions of high-velocity JSON payloads, developers usually rely on two native datatypes, both of which introduce severe infrastructure limitations under stress:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;- The Hard Ceiling of VARCHAR2:&lt;/strong&gt; While VARCHAR2 provides fast, in-line storage, it maxes out at a hard limit of 4,000 bytes (or 32,767 bytes with extended data types enabled). Modern API payloads—stuffed with verbose HTTP headers, nested object arrays, and security JWT tokens—frequently burst past this limit. If a single peak transaction payload hits 33KB, your logging engine throws an unhandled database exception (ORA-01461), silently crashing the logging pipeline or, worse, breaking the primary application runtime.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;- The CLOB as a White Elephant:&lt;/strong&gt; To bypass the size limits of VARCHAR2, teams blindly migrate log tables to CLOB (Character Large Object). On paper, it looks like a safe catch-all because it can hold gigabytes of text. In reality, it becomes an incredibly expensive "white elephant"—high maintenance, resource-intensive, and fundamentally unsuited for high-throughput microservices.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;----------------------------------------------------------------------------------------------------
[CLOB Storage]
Table Block (In-Line Data) -------&amp;gt; [ Pointer Only ]
                                           |
                                           v
SecureFiles LOB Segment ----------&amp;gt; [ Out-of-Line CLOB Text Payload (Massive I/O Tax) ]

[varchar2] - Max Limit is 4000 Characters

----------------------------------------------------------------------------------------------------

Because CLOB data is typically stored out-of-line (away from the main table block), every single log entry forces the database to perform a separate, high-overhead I/O operation to write to the LOB segment. Under intensive, multi-threaded stress testing, this continuous swapping heavily punishes internal database temp segments and local memory caches, starving core transactional tables of memory resources.

Furthermore, because the engine treats the CLOB as an opaque, un-indexed text block, any attempt by InfoSec to scan for a specific compromised user_id inside a log requires the database to pull millions of these massive character streams into memory sequentially. You end up burning high-cost enterprise cloud storage and crushing your IOPS budget on an un-queryable, text-bloated repository.

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;So in short Applications will need to move away from CLOB to JSON , Application vendors need to invest technical knowledge in implementing this need of the hour requirements.&lt;/p&gt;

&lt;h2&gt;
  
  
  How Nabhaas helps you
&lt;/h2&gt;

&lt;p&gt;If you’ve made it this far, you already sense there’s a better way — in fact, you have a way ahead.&lt;/p&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;TAB - Whitepaper , &lt;br&gt;
&lt;a href="https://www.nabhaas.com/_files/ugd/dab815_eb17483ee84d431a8cc2a92792ea21bf.pdf" rel="noopener noreferrer"&gt;download here&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Managed Delivery Services - Whitepaper , &lt;br&gt;
&lt;a href="https://www.nabhaas.com/_files/ugd/dab815_96198a0627d64f75a3d3a2dce9bf185d.pdf" rel="noopener noreferrer"&gt;download here&lt;/a&gt;&lt;/p&gt;

</description>
      <category>oracle</category>
      <category>oci</category>
      <category>nabhaas</category>
      <category>thoughtleadership</category>
    </item>
    <item>
      <title>OracleBootCamp : Chennai | OCI Linux &amp; OCI Databases</title>
      <dc:creator>Abhilash Kumar | Oracle ACE ♠</dc:creator>
      <pubDate>Fri, 10 Jul 2026 12:57:38 +0000</pubDate>
      <link>https://dev.to/nabhaas/oraclebootcamp-chennai-oci-linux-oci-databases-cb</link>
      <guid>https://dev.to/nabhaas/oraclebootcamp-chennai-oci-linux-oci-databases-cb</guid>
      <description>&lt;p&gt;&lt;a href="style&gt;&lt;br&gt;%0A%20%20%20%20%20%20%20%20.libutton%20{&lt;br&gt;%0A%20%20%20%20%20%20%20%20%20%20display:%20flex;&lt;br&gt;%0A%20%20%20%20%20%20%20%20%20%20flex-direction:%20column;&lt;br&gt;%0A%20%20%20%20%20%20%20%20%20%20justify-content:%20center;&lt;br&gt;%0A%20%20%20%20%20%20%20%20%20%20padding:%207px;&lt;br&gt;%0A%20%20%20%20%20%20%20%20%20%20text-align:%20center;&lt;br&gt;%0A%20%20%20%20%20%20%20%20%20%20outline:%20none;&lt;br&gt;%0A%20%20%20%20%20%20%20%20%20%20text-decoration:%20none%20!important;&lt;br&gt;%0A%20%20%20%20%20%20%20%20%20%20color:%20#ffffff%20!important;&lt;br&gt;%0A%20%20%20%20%20%20%20%20%20%20width:%20200px;&lt;br&gt;%0A%20%20%20%20%20%20%20%20%20%20height:%2032px;&lt;br&gt;%0A%20%20%20%20%20%20%20%20%20%20border-radius:%2016px;&lt;br&gt;%0A%20%20%20%20%20%20%20%20%20%20background-color:%20#0A66C2;&lt;br&gt;%0A%20%20%20%20%20%20%20%20%20%20font-family:%20"&gt;
        { Abhilash Kumar Bhattaram :  &lt;/a&gt;&lt;a href="https://www.linkedin.com/comm/mynetwork/discovery-see-all?usecase=PEOPLE_FOLLOWS&amp;amp;followMember=abhilash-kumar-85b92918" rel="noopener noreferrer"&gt;Follow on LinkedIn&lt;/a&gt; }&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fk7beolozqin2870l9pql.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fk7beolozqin2870l9pql.png" alt="OracleBootCamp - Chennai 8-Aug-2026 " width="800" height="448"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Oracle Boot Camp: 8-Aug-2026
&lt;/h2&gt;

&lt;p&gt;Welcome to the OCI Boot Camp, a premier, hands-on training program designed to bridge the gap between traditional enterprise systems and next-generation cloud architecture. Engineered for database administrators, system architects, and cloud engineers, this intensive boot camp provides an immersive technical deep-dive into deployment, lifecycle management, and infrastructure scaling. As organizations rapidly shift their mission-critical data assets to the cloud, mastering the specialized cloud environment becomes paramount. This program delivers the exact blueprint needed to build highly resilient, performant, and secure enterprise environments using Oracle’s second-generation cloud framework.&lt;/p&gt;

&lt;h2&gt;
  
  
  Session 1: OCI Linux &amp;amp; System Utilities
&lt;/h2&gt;

&lt;p&gt;Oracle Linux on OCI is more than just an operating system—it is a highly optimized environment engineered for maximum performance, security, and tight integration with Oracle software. This segment focuses on leveraging purpose-built OS utilities and automation tools designed to streamline cloud operations, optimize kernel performance, and maintain zero-downtime environments.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Speaker : Abhilash Kumar Bhattaram [ Database &amp;amp; Cloud Architect | Founder - Nabhaas Cloud Consulting ]&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Session 2: Understanding the OCI Class of Databases&lt;/strong&gt;&lt;br&gt;
OCI offers a comprehensive, tier-based suite of database cloud services tailored to different workloads, budgets, and operational requirements. This module breaks down the distinct architectural classes of Oracle databases in the cloud, guiding you through how to choose, deploy, and scale the right database solution for your enterprise needs—ranging from co-managed virtual machines to fully automated, self-driving database services.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Speaker : Abhilash Kumar Bhattaram [ Database &amp;amp; Cloud Architect | Founder - Nabhaas Cloud Consulting ]&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Session 3: OCI - From Oracle MAA to Full Stack DR : AI Insights &amp;amp; Live Demo on OCI&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Unlocking the full potential of Oracle MAA and how Full STack DR helps organizations &lt;/p&gt;

&lt;p&gt;&lt;em&gt;Speaker : Suraj Ramesh [ Lead Principal Product Manager - Oracle ]&lt;/em&gt;&lt;/p&gt;

</description>
      <category>oracle</category>
      <category>oci</category>
      <category>nabhaas</category>
      <category>oraclebootcamp</category>
    </item>
    <item>
      <title>Series Week 24/52 — Cloud Migration: Finding Your Path in the Database Migration Minefield</title>
      <dc:creator>Abhilash Kumar | Oracle ACE ♠</dc:creator>
      <pubDate>Thu, 09 Jul 2026 06:48:20 +0000</pubDate>
      <link>https://dev.to/nabhaas/series-week-2452-cloud-migration-finding-your-path-in-the-database-migration-minefield-29eo</link>
      <guid>https://dev.to/nabhaas/series-week-2452-cloud-migration-finding-your-path-in-the-database-migration-minefield-29eo</guid>
      <description>&lt;p&gt;&lt;a href="style&gt;&lt;br&gt;%0A%20%20%20%20%20%20%20%20.libutton%20{&lt;br&gt;%0A%20%20%20%20%20%20%20%20%20%20display:%20flex;&lt;br&gt;%0A%20%20%20%20%20%20%20%20%20%20flex-direction:%20column;&lt;br&gt;%0A%20%20%20%20%20%20%20%20%20%20justify-content:%20center;&lt;br&gt;%0A%20%20%20%20%20%20%20%20%20%20padding:%207px;&lt;br&gt;%0A%20%20%20%20%20%20%20%20%20%20text-align:%20center;&lt;br&gt;%0A%20%20%20%20%20%20%20%20%20%20outline:%20none;&lt;br&gt;%0A%20%20%20%20%20%20%20%20%20%20text-decoration:%20none%20!important;&lt;br&gt;%0A%20%20%20%20%20%20%20%20%20%20color:%20#ffffff%20!important;&lt;br&gt;%0A%20%20%20%20%20%20%20%20%20%20width:%20200px;&lt;br&gt;%0A%20%20%20%20%20%20%20%20%20%20height:%2032px;&lt;br&gt;%0A%20%20%20%20%20%20%20%20%20%20border-radius:%2016px;&lt;br&gt;%0A%20%20%20%20%20%20%20%20%20%20background-color:%20#0A66C2;&lt;br&gt;%0A%20%20%20%20%20%20%20%20%20%20font-family:%20"&gt;
        { Abhilash Kumar Bhattaram :  &lt;/a&gt;&lt;a href="https://www.linkedin.com/comm/mynetwork/discovery-see-all?usecase=PEOPLE_FOLLOWS&amp;amp;followMember=abhilash-kumar-85b92918" rel="noopener noreferrer"&gt;Follow on LinkedIn&lt;/a&gt; }&lt;/p&gt;

&lt;h2&gt;
  
  
  The Post-Migration Mirage
&lt;/h2&gt;

&lt;p&gt;For many Chief Technology Officers (CTOs), the successful cutover of a core database to the cloud feels like the ultimate victory lap. The data has landed, the connection strings are updated, and initial performance metrics look stellar.&lt;br&gt;
But there is a dangerous mirage that follows a cloud database migration: Hidden Downtime.&lt;/p&gt;

&lt;p&gt;Unlike an abrupt database crash, hidden downtime is a slow-burn operational decay. It happens when day-to-day transactions process smoothly in production, but the underlying database ecosystem—specifically the disaster recovery (DR) standby instances, secondary cross-region sites, and replication pipelines—quietly falls out of sync. When a true disruption occurs and you try to failover or scale, the database tier collapses.&lt;br&gt;
To ensure true, 24/7 predictability, forward-thinking CTOs look beyond the immediate "Go-Live" date. The ultimate challenge is navigating the dense maze of cloud onboarding options to find the exact database migration method that fits your specific application topology.&lt;/p&gt;

&lt;h2&gt;
  
  
  Ground Zero: The Database Configuration Drift
&lt;/h2&gt;

&lt;p&gt;The root cause of post-migration database downtime begins long before cutover day, it starts with how the database is moved and how its configuration is maintained. Going to the cloud offers various technical pathways, but the overarching challenge is finding what fits your unique architecture. The initial migration must establish perfect baseline parity, but standard database operations and hasty migration choices quickly introduce fatal configuration drift.&lt;br&gt;
To manage this drift effectively, organizations must introduce rigorous baseline metrics before, during, and after the migration process:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;- Benchmarking Versions:&lt;/strong&gt; Ensuring that source and target database patch levels, Timezone (TZ) files, and Release Updates (RUs) match exactly. Mismatched database versions between primary cloud instances and standby homes create silent dictionary incompatibilities that destroy failover viability.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;- Benchmarking Downtime:&lt;/strong&gt; Calculating the exact Maximum Tolerable Downtime (MTD) and Service Disruption windows during the migration planning phase. This dictates whether you can afford an offline dump or if your business dependencies mandate an active, zero-downtime replication strategy.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;- Continuous Mock Drills:&lt;/strong&gt; Simulating full database failovers and cutovers in non-production cloud environments. Without automated, recurring mock drills, hidden issues like un-synchronized Transparent Data Encryption (TDE) wallets or missing parameter definitions remain completely invisible until a production outage strikes.&lt;/p&gt;

&lt;h2&gt;
  
  
  Underneath Ground Zero: Analyzing the Impact
&lt;/h2&gt;

&lt;p&gt;When we unearth the deeper architectural problems underneath Ground Zero, we find structural blindspots that completely undermine a database migration’s ROI:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. The Database Maintenance Silo&lt;br&gt;
Operational Reality:&lt;/strong&gt; DBAs patch the primary database using automated cloud tooling but delay patching the standby database home to avoid disrupting active synchronization streams.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Post-Cutover Operational Risk:&lt;/strong&gt; Upon failover, your application connects to a database running a mismatched PSU/RU version. This triggers immediate dictionary mismatches, unexpected query execution plan changes, or TDE wallet decryption failures—rendering the database instantly inaccessible to the application.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Identity and Access Management (IAM) Disconnect&lt;br&gt;
Operational Reality:&lt;/strong&gt; Cloud IAM policies are tightly scoped to specific instance IDs or Dynamic Groups in the primary database compartment. The cross-region database equivalents are frequently left out of the active policy definitions.&lt;br&gt;
Post-Cutover Operational Risk: Handling the new landscape means ensuring continuous cloud permissions. Post-cutover, if permissions are asymmetric, the active database instances are starved of resources. They cannot read automated backup configurations from Object Storage or fetch critical encryption keys from the Vault, breaking recovery SLAs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Ambient Telemetry Failure Operational Reality:&lt;/strong&gt; Database monitoring agents are bound to regional aggregators. Because the standby database sits quietly in a passive state, monitoring configurations are often left unverified for production-scale log volume.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. Post-Cutover Operational Risk:&lt;/strong&gt; Right when you need telemetry the most (during a crisis), your database dashboards go completely dark. Engineering teams cannot debug post-cutover stability issues or efficiently handle the new infrastructure landscape because no performance metrics are being collected.&lt;/p&gt;

&lt;h2&gt;
  
  
  Working Upwards: The Managed Service Remedy
&lt;/h2&gt;

&lt;p&gt;To bridge this operational chasm, predictable CTOs do not rely on generic, manual runbooks that treat migration as a point-in-time infrastructure task. Instead, they shift to a modern, automated managed service model designed to systematically solve database onboarding complexities and handle the operational realities of the post-cutover landscape.&lt;/p&gt;

&lt;p&gt;*&lt;em&gt;Automated Migration Pipeline Validation : *&lt;/em&gt; Instead of cross-checking parameters by hand, use automated tools to continually audit version alignment, timezone files, and initialization parameters (PROCESSES, SESSIONS) between the source, target, and standby environments throughout the migration lifecycle. This catches silent, breaking variations before traffic is cut over.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Dynamic Replication &amp;amp; Catch-Up Automation :&lt;/strong&gt;&lt;br&gt;
During a complex migration, primary systems continue to drift as active production data accumulates. A mature managed service uses intelligent orchestration to continuously monitor data lag across replication streams (like OCI GoldenGate or Data Guard), automatically applying catch-up protocols to ensure zero data loss during the final switchover window.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Coordinated Lifecycle and Multi-Version Patching :&lt;/strong&gt;&lt;br&gt;
Treat the data tier as a unified, multi-environment fabric. Managed orchestration ensures that when a target cloud environment is spun up, its accompanying standby and DR instances are instantly provisioned, patched, and matched to the primary database's Release Update (RU) level, eliminating version silos during cutover execution.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Takeaway: Navigating the OCI Database Migration Maze
&lt;/h2&gt;

&lt;p&gt;A successful cloud database migration isn't a single event; it is an ongoing state of operational alignment. Because going to the cloud offers various technical pathways, the ultimate challenge is finding the exact method that fits your business constraints.&lt;br&gt;
Oracle Cloud Infrastructure (OCI) supports an array of robust database migration methods, each serving a highly specific purpose:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;- OCI GoldenGate Replication:&lt;/strong&gt; For continuous, active-active or active-passive real-time data integration, enabling near-zero downtime database migrations for mission-critical workloads.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;OCI Data Migration Service (DMS):&lt;/strong&gt; For a fully managed, guided, and automated database move that simplifies online and offline migration phases.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;- Logical Dump Exports (Data Pump):&lt;/strong&gt; The ideal choice for schema-level restructuring, selective data migrations, metadata filtering, and multi-version database upgrades where a clean slate is required.&lt;br&gt;
Logical Application &amp;amp; Database Cutover: Orchestrating precise microservice traffic switches alongside data synchronicity at the edge using DNS and load balancing adjustments.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Reality Check
&lt;/h2&gt;

&lt;p&gt;There is absolutely &lt;strong&gt;&lt;em&gt;no "one-size-fits-all"&lt;/em&gt;&lt;/strong&gt; database migration template. Every application carries its own distinct database dependencies—from connection pool behavior and legacy PL/SQL packages to strict latency sensitivities and compliance profiles. The challenge isn't just moving the data; it is selecting the right migration vehicle, benchmarking version drifts, tracking downtime windows, and running mock drills so that hidden downtime isn't baked into your cloud topology from day one.&lt;br&gt;
By matching your specific application profile with the right OCI database migration technical path, and anchoring it with a managed service approach that enforces continuous, automated parity, you eliminate the hidden blindspots completely.&lt;/p&gt;

&lt;h2&gt;
  
  
  How Nabhaas helps you
&lt;/h2&gt;

&lt;p&gt;If you’ve made it this far, you already sense there’s a better way — in fact, you have a way ahead.&lt;/p&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;TAB - Whitepaper , &lt;br&gt;
&lt;a href="https://www.nabhaas.com/_files/ugd/dab815_eb17483ee84d431a8cc2a92792ea21bf.pdf" rel="noopener noreferrer"&gt;download here&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Managed Delivery Services - Whitepaper , &lt;br&gt;
&lt;a href="https://www.nabhaas.com/_files/ugd/dab815_96198a0627d64f75a3d3a2dce9bf185d.pdf" rel="noopener noreferrer"&gt;download here&lt;/a&gt;&lt;/p&gt;

</description>
      <category>oracle</category>
      <category>oci</category>
      <category>nabhaas</category>
      <category>thoughtleadership</category>
    </item>
    <item>
      <title>Series Week 23/52 - OCI DR Environments: The Managed Service Blindspot</title>
      <dc:creator>Abhilash Kumar | Oracle ACE ♠</dc:creator>
      <pubDate>Sat, 20 Jun 2026 07:51:31 +0000</pubDate>
      <link>https://dev.to/nabhaas/series-week-2352-oci-dr-environments-the-managed-service-blindspot-3210</link>
      <guid>https://dev.to/nabhaas/series-week-2352-oci-dr-environments-the-managed-service-blindspot-3210</guid>
      <description>&lt;p&gt;&lt;a href="style&gt;&lt;br&gt;%0A%20%20%20%20%20%20%20%20.libutton%20{&lt;br&gt;%0A%20%20%20%20%20%20%20%20%20%20display:%20flex;&lt;br&gt;%0A%20%20%20%20%20%20%20%20%20%20flex-direction:%20column;&lt;br&gt;%0A%20%20%20%20%20%20%20%20%20%20justify-content:%20center;&lt;br&gt;%0A%20%20%20%20%20%20%20%20%20%20padding:%207px;&lt;br&gt;%0A%20%20%20%20%20%20%20%20%20%20text-align:%20center;&lt;br&gt;%0A%20%20%20%20%20%20%20%20%20%20outline:%20none;&lt;br&gt;%0A%20%20%20%20%20%20%20%20%20%20text-decoration:%20none%20!important;&lt;br&gt;%0A%20%20%20%20%20%20%20%20%20%20color:%20#ffffff%20!important;&lt;br&gt;%0A%20%20%20%20%20%20%20%20%20%20width:%20200px;&lt;br&gt;%0A%20%20%20%20%20%20%20%20%20%20height:%2032px;&lt;br&gt;%0A%20%20%20%20%20%20%20%20%20%20border-radius:%2016px;&lt;br&gt;%0A%20%20%20%20%20%20%20%20%20%20background-color:%20#0A66C2;&lt;br&gt;%0A%20%20%20%20%20%20%20%20%20%20font-family:%20"&gt;
        { Abhilash Kumar Bhattaram :  &lt;/a&gt;&lt;a href="https://www.linkedin.com/comm/mynetwork/discovery-see-all?usecase=PEOPLE_FOLLOWS&amp;amp;followMember=abhilash-kumar-85b92918" rel="noopener noreferrer"&gt;Follow on LinkedIn&lt;/a&gt; }&lt;/p&gt;
&lt;h2&gt;
  
  
  DR : The grey zone
&lt;/h2&gt;

&lt;p&gt;Many Chief Technology Officers (CTOs) feel a false sense of security once they migrate to the cloud and turn on managed Disaster Recovery (DR) services. &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"With a few clicks, your entire stack is replicated across regions."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;But there is a hidden blindspot in cloud-managed DR. While Oracle Cloud Infrastructure (OCI) Full Stack DR does an incredible job of orchestrating infrastructure failover, it creates a massive operational gap for application deployment. If your day-to-day deployment pipelines only target production, your DR environment quietly becomes a time capsule—outdated, unpatched, and bound to fail when you need it most.&lt;/p&gt;

&lt;p&gt;Let's look at how predictable CTOs bridge this gap using a structured approach.&lt;/p&gt;
&lt;h2&gt;
  
  
  Ground Zero
&lt;/h2&gt;

&lt;p&gt;Let us first look at some common things that create the DC&amp;lt;-&amp;gt;DR gap&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Database Patching &amp;amp; PSU Alignment:&lt;/strong&gt; While OCI Data Guard replicates data perfectly, it does not automatically apply Database Bundle Patches (BPs) or Patch Set Updates (PSUs) to the standby database home. Oracle Data Guard provides a Standby first approach , so patching begins with the standby. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Continuous Application Patching &amp;amp; Versioning:&lt;/strong&gt; Pipelines are rarely configured to push application updates to the standby environment, leaving the DR application layer outdated.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Environment Variable &amp;amp; Config Sync:&lt;/strong&gt; Missing or outdated environment secrets, database connection pool sizes, third-party API keys, and feature flags that exist in production but were never copied to the standby site.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Operating System &amp;amp; Kernel Parity:&lt;/strong&gt; Out-of-sync OS patches, security fixes, and missing dependencies (e.g., specific Python libraries or system packages) on standby compute instances.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ingress &amp;amp; Egress Network Rules (NSGs/Security Lists):&lt;/strong&gt; Forgetting to mirror firewall changes. When a failover happens, traffic is blocked because the DR site's Network Security Groups lack the updated ports or IP whitelists.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Database Parameters &amp;amp; Keystore Sync:&lt;/strong&gt; Missing initialization parameter updates (e.g., processes, sessions) or un-synchronized TDE (Transparent Data Encryption) wallets and keystores on the standby database, preventing it from opening securely or handling production loads.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;IAM Policies &amp;amp; Dynamic Groups:&lt;/strong&gt; Missing permissions for the DR instances to access required OCI resources (like Object Storage or Secret Management) in the secondary region.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;DNS &amp;amp; TLS/SSL Certificate Management:&lt;/strong&gt; Expired or missing SSL certificates on the standby load balancers, causing secure traffic to fail immediately upon DNS switchover.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Third-Party Webhooks &amp;amp; Integrations:&lt;/strong&gt; Failure to register the DR IP addresses/URLs with external vendors (like payment gateways or auth providers), resulting in broken integrations post-failover.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Log Forwarding &amp;amp; Monitoring Agents:&lt;/strong&gt; Observability tools (e.g., Datadog, Splunk, or OCI Logging) are frequently unconfigured on the DR side, leaving operations completely blind right after a failover.&lt;/p&gt;
&lt;h2&gt;
  
  
  Underneath Ground Zero : unearthing more DR problems
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;The Database Maintenance Silo (Database Patching &amp;amp; Parameters)&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Operational Reality: Database Administrators (DBAs) patch the primary database using automated OCI tooling but skip the standby home to avoid breaking Data Guard replication streams.&lt;/li&gt;
&lt;li&gt;The Blast Radius: Upon failover, the application connects to a database running a different PSU/RU version. This triggers immediate dictionary mismatches, unexpected query execution plan changes, or TDE wallet decryption failures—rendering the database inaccessible to the app.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;The Production-Only Pipeline Bias (Application Patching &amp;amp; Versions)&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Operational Reality: Standard CI/CD workflows are engineered for a linear paths (Dev &amp;gt;&amp;gt;&amp;gt; QA &amp;gt;&amp;gt;&amp;gt; Prod). The DR region is treated as an infrastructure target rather than an application deployment target.&lt;/li&gt;
&lt;li&gt;The Blast Radius: The DR site remains a time capsule. If you failover, you are rolling back your software version by months, breaking backward compatibility with current database schemas.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Static Configuration Amnesia (Environment Variables &amp;amp; Config Sync)&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Operational Reality: Configuration changes, feature flags, and secrets are often injected manually during hotfixes or live troubleshooting in production, bypassing the repository.&lt;/li&gt;
&lt;li&gt;The Blast Radius: The application boots up at the DR site but crashes instantly because it is pointing to expired API keys, old token endpoints, or inadequate database connection pool sizes designed for QA-level loads.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;The "Immutable Infrastructure" Paradox (OS &amp;amp; Kernel Parity)&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Operational Reality: Primary compute instances get live OS patches via OCI Ksplice, but standby instances—often turned off or pilot-lighted to save costs—miss these dynamic runtime updates.&lt;/li&gt;
&lt;li&gt;The Blast Radius: When Full Stack DR starts the standby instances, they boot up with vulnerable kernels, missing shared libraries, or mismatched security dependencies, causing binaries to fail on execution.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Asymmetric Network Evolution (Security Lists, NSGs, &amp;amp; Whitelists)&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Operational Reality: Network security teams open ports or whitelist client IPs reactively on the primary Virtual Cloud Network (VCN) during new integrations without replicating the rules to the DR VCN.&lt;/li&gt;
&lt;li&gt;The Blast Radius: The infrastructure fails over perfectly, but application traffic drops at the edge. External APIs cannot hit your DR endpoints, and internal microservices cannot communicate across subnets.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Identity &amp;amp; Access Management Disconnect (IAM Policies &amp;amp; Dynamic Groups)&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Operational Reality: IAM policies are tightly scoped to instance IDs or Dynamic Groups in the primary region's compartment. The cross-region DR equivalents are left out of the policy definitions.&lt;/li&gt;
&lt;li&gt;The Blast Radius: Post-failover, the active application instances are starved of cloud permissions. They cannot read configuration files from OCI Object Storage, fetch keys from the OCI Vault, or write application logs.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;The Edge Security Bottleneck (DNS &amp;amp; TLS/SSL Certificates)&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Operational Reality: SSL/TLS certificates are renewed via automated tools (like Let's Encrypt) tied to the active, live domain routing to the primary load balancer. Standby balancers don't receive the active challenge responses.&lt;/li&gt;
&lt;li&gt;The Blast Radius: When DNS switches traffic to the DR site, users are greeted with massive browser security warnings ("Your connection is not private"), breaking automated API clients and dropping user traffic.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Third-Party Siloed Handshakes (Webhooks &amp;amp; Vendor Integrations)&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Operational Reality: External ecosystems (payment processors, SMS gateways, ERP connectors) require explicit IP/domain whitelisting for security. Teams forget that a DR site uses a completely different public IP CIDR block or secondary URL.&lt;/li&gt;
&lt;li&gt;The Blast Radius: The core application works, but transactions fail. Payment gateways reject checkout requests because the traffic originates from an unapproved DR IP address.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Post-Failover Flying Blind (Log Forwarding &amp;amp; Monitoring)&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Operational Reality: Monitoring agents (Datadog, Splunk, OCI Logging) are bound to hostname configurations or regional aggregators. Because the DR site is quiet, these agents are either disabled or unconfigured to handle production-scale log volume.&lt;/li&gt;
&lt;li&gt;The Blast Radius: Right when you need telemetry the most (during a crisis), your dashboards go completely dark. Engineering teams cannot debug the post-failover stability issues because no logs or metrics are being collected.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  Working Upwards: From Understanding to Solutioning the DR
&lt;/h2&gt;

&lt;p&gt;To bridge the operational chasm discovered Underneath Ground Zero, predictable CTOs don’t just write more manual runbooks. They architect a unified framework that aligns OCI's native infrastructure capabilities with modern, continuous application delivery.&lt;br&gt;
Here is how you address each specific blindspot by working upwards into an automated, dual-region ecosystem:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Unified Lifecycle Management (Database Patching &amp;amp; Parameters)&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The Solution: Use automated OCI CLI workflows to orchestrate rolling out of Database Bundle Patches simultaneously to both Primary and Standby database homes. Ensure database system parameter changes etc. are part of your change management system. Data is replciated in Standby patches needs to be manually applied. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Dual-Target CI/CD Pipelines (Application Patching &amp;amp; Versions)&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The Solution: Redesign your deployment pipelines to treat the DR region as an active deployment target. When code hits production, the binaries and container images are automatically pushed to both regions. The standby environment receives the updated application packages without scaling up compute resources, keeping versions perfectly mirrored.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Externalized &amp;amp; Synced State (Environment Variables &amp;amp; Config Sync)&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The Solution: Move all configuration parameters and secrets out of local environments and into OCI Vault or centralized configuration servers. Replicate these configurations cross-region automatically so that changes made to production pool sizes or feature flags are instantly available to the DR standby stack.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Automated Golden Image Pipelines (OS &amp;amp; Kernel Parity)&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The Solution: Transition from mutable compute patching to an automated Image Lifecycle Pipeline. Build a single, hardened, patched Custom Image or Container base weekly. Deploy this single artifact to both primary and standby target compartments, guaranteeing bite-for-bite OS and dependency parity.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Infrastructure as Code Symmetry (Network Security Lists &amp;amp; NSGs)&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The Solution: Mandate that all VCN, NSG, and Security List modifications occur via Terraform or OpenTofu modules. Use variables to apply identical structural rules to both the primary and standby region VCNs during a single terraform apply.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Cross-Regional IAM Prototyping (IAM Policies &amp;amp; Dynamic Groups)&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The Solution: Write OCI IAM policies using dynamic group syntax that encompasses instances in both regional compartments. Ensure that policy grants read/write access to resources (like Object Storage buckets and Key Vaults) in both regions, allowing instances to activate with full operational permissions out-of-the-box.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Centralized Edge Automation (DNS &amp;amp; TLS/SSL Certificates)&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The Solution: Implement multi-region certificate managers or automated OCI Certificates workflows that deploy and auto-renew SSL certificates to both primary and standby load balancers simultaneously, ensuring zero certificate errors on edge routing switchover.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Automated Vendor Registry Sync (Third-Party Webhooks &amp;amp; Integrations)&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The Solution: Maintain pre-registered secondary public IP blocks/URLs with critical external vendors, or use OCI Flexible Load Balancers with reserved IPs that are pre-whitelisted within your external vendor ecosystems.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Ambient Telemetry &amp;amp; Mock Log Forwarding (Log Forwarding &amp;amp; Monitoring)&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The Solution: Keep monitoring agents permanently active on standby nodes, configured to route telemetry to a unified cross-region dashboard. Run synthetic health check traffic through the standby nodes continuously to verify that monitoring and logging pipelines are alive and functional before a disaster happens.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;
  
  
  The Tradeoff: OCI Full Stack DR vs. Manual Deployments
&lt;/h2&gt;

&lt;p&gt;When deciding how to manage this synchronization, organizations must evaluate where they sit on the spectrum of automation. Relying solely on manual processes or trying to build an entirely bespoke DR orchestration framework from scratch presents severe trade-offs.&lt;br&gt;
Operational Dimension   OCI Full Stack DR (Managed Infrastructure Automation)   Manual / Bespoke Deployments (The Infrastructure Layer)&lt;/p&gt;

&lt;p&gt;Recovery Time Objective (RTO)   Minutes. Automates volume replication, database switchovers, and compute provisioning natively. Hours to Days. Prone to human error, typos, and sequence mistakes during a crisis.&lt;br&gt;
Complexity &amp;amp; Upkeep Low. Managed service maintained by Oracle; automatically updates alongside OCI platform changes.    High. Requires maintaining massive, fragile internal scripts and runbooks that quickly go out of date.&lt;br&gt;
Application Layer Awareness Infrastructure Only. Doesn't inherently know if your custom application v2.4 matches your configuration variables.  Customizable but Brittle. Can be scripted to manage apps, but fails when underlying infra changes dynamically.&lt;/p&gt;

&lt;p&gt;What Works Best for Your Organisation?&lt;br&gt;
The ideal operational architecture is not an "either/or" choice—it is a hybrid model that maximizes the strengths of both managed infrastructure and automated application pipelines.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;+--------------------------------------------------------------------------------+
|                  Tradeoff between Full Stack DR and  managed DR                |
+--------------------------------------------------------------------------------+
|                                                                                |
|   +------------------------------------+  +--------------------------------+   |
|   |        OCI FULL STACK DR           |  |      DUAL CI/CD AUTOMATION     |   |
|   +------------------------------------+  +--------------------------------+   |
|   | * Database Data Guard Switchover   |  | * Continuous App Version Parity|   |
|   | * Block/Boot Volume Replication    |  | * Automated OS Patching        |   |
|   | * Compute Provisioning &amp;amp; Scaling   |  | * Config &amp;amp; Secret sync         |   |
|   +------------------------------------+  +--------------------------------+   |
|                     |                                     |                    |
|                     +-----------------+-------------------+                    |
|                                       v                                        |
|                     Result: Zero-Drift, RTO-Optimized DR                       |
+--------------------------------------------------------------------------------+

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A hybrid model also works , this requires a good control on your IT Infrastructure&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;For Enterprise &amp;amp; Highly Regulated Stacks: The best approach is to let OCI Full Stack DR handle the infrastructure muscle (compute states, storage attachment, network routing), while configuring your CI/CD pipelines to dual-deploy application artifacts and configurations to both sites. This eliminates the "Managed Service Blindspot" entirely.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;For Small Scale / Monolithic Stacks: If dual-region CI/CD pipelines introduce too much operational overhead for a small team, utilize OCI Full Stack DR alongside automated user-scripts (run via OCI Compute Instance Configurations) to pull the latest production configurations dynamically from an OCI Object Storage bucket upon initialization.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How Nabhaas helps you
&lt;/h2&gt;

&lt;p&gt;If you’ve made it this far, you already sense there’s a better way — in fact, you have a way ahead.&lt;/p&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;TAB - Whitepaper , &lt;br&gt;
&lt;a href="https://www.nabhaas.com/_files/ugd/dab815_eb17483ee84d431a8cc2a92792ea21bf.pdf" rel="noopener noreferrer"&gt;download here&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Managed Delivery Services - Whitepaper , &lt;br&gt;
&lt;a href="https://www.nabhaas.com/_files/ugd/dab815_96198a0627d64f75a3d3a2dce9bf185d.pdf" rel="noopener noreferrer"&gt;download here&lt;/a&gt;&lt;/p&gt;

</description>
      <category>oracle</category>
      <category>oci</category>
      <category>nabhaas</category>
      <category>thoughtleadership</category>
    </item>
    <item>
      <title>AUTOUPG_HOME - A smart way to manage Oracle GI &amp; RU On Prem patches across versions for multiple database environments</title>
      <dc:creator>Abhilash Kumar | Oracle ACE ♠</dc:creator>
      <pubDate>Fri, 19 Jun 2026 14:21:47 +0000</pubDate>
      <link>https://dev.to/nabhaas/autoupghome-a-smart-way-to-manage-oracle-gi-ru-on-prem-patches-across-versions-for-multiple-4nn1</link>
      <guid>https://dev.to/nabhaas/autoupghome-a-smart-way-to-manage-oracle-gi-ru-on-prem-patches-across-versions-for-multiple-4nn1</guid>
      <description>&lt;p&gt;&lt;a href="style&gt;&lt;br&gt;%0A%20%20%20%20%20%20%20%20.libutton%20{&lt;br&gt;%0A%20%20%20%20%20%20%20%20%20%20display:%20flex;&lt;br&gt;%0A%20%20%20%20%20%20%20%20%20%20flex-direction:%20column;&lt;br&gt;%0A%20%20%20%20%20%20%20%20%20%20justify-content:%20center;&lt;br&gt;%0A%20%20%20%20%20%20%20%20%20%20padding:%207px;&lt;br&gt;%0A%20%20%20%20%20%20%20%20%20%20text-align:%20center;&lt;br&gt;%0A%20%20%20%20%20%20%20%20%20%20outline:%20none;&lt;br&gt;%0A%20%20%20%20%20%20%20%20%20%20text-decoration:%20none%20!important;&lt;br&gt;%0A%20%20%20%20%20%20%20%20%20%20color:%20#ffffff%20!important;&lt;br&gt;%0A%20%20%20%20%20%20%20%20%20%20width:%20200px;&lt;br&gt;%0A%20%20%20%20%20%20%20%20%20%20height:%2032px;&lt;br&gt;%0A%20%20%20%20%20%20%20%20%20%20border-radius:%2016px;&lt;br&gt;%0A%20%20%20%20%20%20%20%20%20%20background-color:%20#0A66C2;&lt;br&gt;%0A%20%20%20%20%20%20%20%20%20%20font-family:%20"&gt;
        { Abhilash Kumar Bhattaram :  &lt;/a&gt;&lt;a href="https://www.linkedin.com/comm/mynetwork/discovery-see-all?usecase=PEOPLE_FOLLOWS&amp;amp;followMember=abhilash-kumar-85b92918" rel="noopener noreferrer"&gt;Follow on LinkedIn&lt;/a&gt; }&lt;/p&gt;
&lt;h2&gt;
  
  
  Managing multiple Oracle patches
&lt;/h2&gt;

&lt;p&gt;The purpose of this blog is to understand how patches are being managed even before patching.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;More ofthen tha not you have identified the environment you want to patch , but when you have atleast 50+ databases to deal with do you have a way to manage patches , espeically when some databases still need to work on a slightly older releases due to application dependencies&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It is difficult to remeber with hunderds of other things one has to remember , A typical problems in understanding patching nomenclature is below&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;p6880880_190000_Linux-ARM-64.zip --&amp;gt; This latest OPatch 

p38906621_190000_Linux-ARM-64.zip --&amp;gt; This is OJVM for 19.31

It's not possible to understand what the patch is for just by looking at the patch file name.

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;If you want to get started on autoupgrade , the below blog is a good read &lt;/p&gt;


&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/nabhaas/provision-switch-oracle-homes-using-autougpgradejar-hands-on-lab-scenario-move-oh-from-1919-4hpo" class="crayons-story__hidden-navigation-link"&gt;autougpgrade.jar - Provision &amp;amp; switch Oracle Homes ( Hands on lab scenario to move OH from 19.19 to 19.31 and rollback to 19.19 )&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;
          &lt;a class="crayons-logo crayons-logo--l" href="/nabhaas"&gt;
            &lt;img alt="Nabhaas Cloud Consulting logo" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Forganization%2Fprofile_image%2F8695%2F296cb680-bec9-47fb-944a-a9d6be5e19d0.jpg" class="crayons-logo__image" width="667" height="667"&gt;
          &lt;/a&gt;

          &lt;a href="/abhilash8" class="crayons-avatar  crayons-avatar--s absolute -right-2 -bottom-2 border-solid border-2 border-base-inverted  "&gt;
            &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F418726%2F9abed0ea-c3e3-4019-b3a3-d7c8e54a7403.jpeg" alt="abhilash8 profile" class="crayons-avatar__image" width="460" height="460"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/abhilash8" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Abhilash Kumar | Oracle ACE ♠
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Abhilash Kumar | Oracle ACE ♠
                
              
              &lt;div id="story-author-preview-content-3921304" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/abhilash8" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&gt;
                        &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F418726%2F9abed0ea-c3e3-4019-b3a3-d7c8e54a7403.jpeg" class="crayons-avatar__image" alt="" width="460" height="460"&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Abhilash Kumar | Oracle ACE ♠&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

            &lt;span&gt;
              &lt;span class="crayons-story__tertiary fw-normal"&gt; for &lt;/span&gt;&lt;a href="/nabhaas" class="crayons-story__secondary fw-medium"&gt;Nabhaas Cloud Consulting&lt;/a&gt;
            &lt;/span&gt;
          &lt;/div&gt;
          &lt;a href="https://dev.to/nabhaas/provision-switch-oracle-homes-using-autougpgradejar-hands-on-lab-scenario-move-oh-from-1919-4hpo" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Jun 17&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/nabhaas/provision-switch-oracle-homes-using-autougpgradejar-hands-on-lab-scenario-move-oh-from-1919-4hpo" id="article-link-3921304"&gt;
          autougpgrade.jar - Provision &amp;amp; switch Oracle Homes ( Hands on lab scenario to move OH from 19.19 to 19.31 and rollback to 19.19 )
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/oracle"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;oracle&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/oci"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;oci&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/patch"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;patch&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/rollback"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;rollback&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
            &lt;a href="https://dev.to/nabhaas/provision-switch-oracle-homes-using-autougpgradejar-hands-on-lab-scenario-move-oh-from-1919-4hpo#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              

              &lt;span class="hidden s:inline"&gt;Add&amp;nbsp;Comment&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            32 min read
          &lt;/small&gt;
            
              &lt;span class="bm-initial crayons-icon c-btn__icon"&gt;
                

              &lt;/span&gt;
              &lt;span class="bm-success crayons-icon c-btn__icon"&gt;
                

              &lt;/span&gt;
            
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;


&lt;/div&gt;
&lt;br&gt;


&lt;p&gt;Reference : Official Doc on autoupgrade&lt;br&gt;
&lt;a href="https://docs.oracle.com/en/database/oracle/oracle-database/19/upgrd/about-oracle-database-autoupgrade.html" rel="noopener noreferrer"&gt;https://docs.oracle.com/en/database/oracle/oracle-database/19/upgrd/about-oracle-database-autoupgrade.html&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Enter AUTOUPG_HOME
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;AUTOUPG_HOME&lt;/strong&gt; is a logical folder structure I jave created for my own efficiency to manage multiple patches and environments.&lt;/p&gt;

&lt;p&gt;I have a base Autoupgrade Home /u01/autoupg-home with the following sub folders &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;autoupg-config -&lt;/strong&gt; Contains all my config files for patching , upgrade , downloads and any config file I intend to use autoupgrade.jar for&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;autoupg-keystore -&lt;/strong&gt; Contains the keystore for using autoupgrade.jar , typically you set it up once and forget about it. &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;autoupg-logs -&lt;/strong&gt; Contains all log files generated by autoupgrade.jar&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;autoupg-sw -&lt;/strong&gt; The repository for downloading patches , typically I would have sub folders under this for each GI &amp;amp; RU  ( feel free to customize it as needed )
&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="gp"&gt;[oracle@oel8-lab01 ~]$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;AUTOUPG_HOME&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/u01/autoupg-home
&lt;span class="gp"&gt;[oracle@oel8-lab01 ~]$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;env&lt;/span&gt; | &lt;span class="nb"&gt;grep &lt;/span&gt;AUTO
&lt;span class="go"&gt;AUTOUPG_HOME=/u01/autoupg-home

&lt;/span&gt;&lt;span class="gp"&gt;[oracle@oel8-lab01 ~]$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; &lt;span class="nv"&gt;$AUTOUPG_HOME&lt;/span&gt;
&lt;span class="go"&gt;drwxr-xr-x. 2 oracle oinstall      56 Jun 19 01:49 autoupg-config
drwxr-xr-x. 2 oracle oinstall      90 Jun 19 01:34 autoupg-keystore
drwxr-xr-x. 3 oracle oinstall      42 Jun 19 01:28 autoupg-logs
drwxr-xr-x. 6 oracle oinstall      70 Jun 19 01:24 autoupg-sw
-rw-r--r--. 1 oracle oinstall 7016621 Jun 19 01:20 autoupgrade.jar

&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;A simple tree structure of &lt;strong&gt;AUTOUPG_HOME&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="gp"&gt;[oracle@oel8-lab01 autoupg-home]$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;tree
&lt;span class="c"&gt;.
&lt;/span&gt;&lt;span class="go"&gt;├── autoupg-config
│&amp;nbsp;&amp;nbsp; ├── 19.31-RU-download.cfg
│&amp;nbsp;&amp;nbsp; └── key-store.cfg
├── autoupg-keystore
│&amp;nbsp;&amp;nbsp; ├── cwallet.sso
│&amp;nbsp;&amp;nbsp; ├── cwallet.sso.lck
│&amp;nbsp;&amp;nbsp; ├── ewallet.p12
│&amp;nbsp;&amp;nbsp; └── ewallet.p12.lck
├── autoupg-logs
│&amp;nbsp;&amp;nbsp; └── cfgtoollogs
│&amp;nbsp;&amp;nbsp;     └── patch
│&amp;nbsp;&amp;nbsp;         └── auto
│&amp;nbsp;&amp;nbsp;             ├── autoupgrade_patching_err.log
│&amp;nbsp;&amp;nbsp;             ├── autoupgrade_patching.log
│&amp;nbsp;&amp;nbsp;             ├── autoupgrade_patching_user.log
│&amp;nbsp;&amp;nbsp;             ├── config_files
│&amp;nbsp;&amp;nbsp;             │&amp;nbsp;&amp;nbsp; └── autoupg_patching.cfg
│&amp;nbsp;&amp;nbsp;             ├── examiner
│&amp;nbsp;&amp;nbsp;             │&amp;nbsp;&amp;nbsp; └── examiner2026_06_19_01_32_49.json
│&amp;nbsp;&amp;nbsp;             ├── lock
│&amp;nbsp;&amp;nbsp;             └── sql
│&amp;nbsp;&amp;nbsp;                 └── login.sql
├── autoupgrade.jar
├── autoupg-sw
│&amp;nbsp;&amp;nbsp; ├── 19.28-RU
│&amp;nbsp;&amp;nbsp; ├── 19.29-RU
│&amp;nbsp;&amp;nbsp; ├── 19.30-RU
│&amp;nbsp;&amp;nbsp; └── 19.31-RU
└── logs

&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Config Files &amp;amp; Download locations for Each GI/RU
&lt;/h2&gt;

&lt;p&gt;I use in my lab Linux ARM64 so below is an example for downloading 19.91 RU for Linux ARM64&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight properties"&gt;&lt;code&gt;&lt;span class="err"&gt;[oracle@oel8-lab01&lt;/span&gt; &lt;span class="err"&gt;autoupg-home]$&lt;/span&gt; &lt;span class="err"&gt;cat&lt;/span&gt; &lt;span class="err"&gt;/u01/autoupg-home/autoupg-config/19.31-RU-download.cfg&lt;/span&gt;
&lt;span class="py"&gt;global.global_log_dir&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;/u01/autoupg-home/autoupg-logs&lt;/span&gt;
&lt;span class="py"&gt;global.keystore&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;/u01/autoupg-home/autoupg-keystore&lt;/span&gt;
&lt;span class="py"&gt;install1.patch&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;OPATCH,OJVM,DPBP,AU,RU:19.31&lt;/span&gt;
&lt;span class="py"&gt;install1.folder&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;/u01/autoupg-home/autoupg-sw/19.31-RU&lt;/span&gt;
&lt;span class="py"&gt;install1.target_version&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;19&lt;/span&gt;
&lt;span class="py"&gt;install1.platform&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;arm.x64&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Downloading to desired folders
&lt;/h2&gt;

&lt;p&gt;Now lets fire up the config file to get the dedicated patches downloaded to the desired locations.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="gp"&gt;[oracle@oel8-lab01 autoupg-home]$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;java &lt;span class="nt"&gt;-jar&lt;/span&gt; ./autoupgrade.jar &lt;span class="nt"&gt;-config&lt;/span&gt; /u01/autoupg-home/autoupg-config/19.31-RU-download.cfg &lt;span class="nt"&gt;-patch&lt;/span&gt; &lt;span class="nt"&gt;-mode&lt;/span&gt; download
&lt;span class="go"&gt;AutoUpgrade Patching 26.3.260401 launched with default internal options
Processing config file ...
Loading AutoUpgrade Patching keystore
AutoUpgrade Patching keystore is loaded

Connected to MOS - Searching for specified patches

----------------------------------------------------------
Downloading files to /u01/autoupg-home/autoupg-sw/19.31-RU
----------------------------------------------------------
DATABASE RELEASE UPDATE 19.31.0.0.0 (REL-APR2026)
    File: p39034528_190000_Linux-ARM-64.zip - VALIDATED

OPatch 12.2.0.1.51 for DB 19.0.0.0.0 (Apr 2026)
    File: p6880880_190000_Linux-ARM-64.zip - VALIDATED

OJVM RELEASE UPDATE 19.31.0.0.0
    File: p38906621_190000_Linux-ARM-64.zip - VALIDATED

DATAPUMP BUNDLE PATCH 19.31.0.0.0
    File: p39196236_1931000DBRU_Generic.zip - VALIDATED

autoupgrade.jar 26.3 (April 2026)
    File: autoupgrade.jar - VALIDATED
----------------------------------------------------------
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now Lets have a look at the AUTOUPG_HOME tree structure , you can see organized patches , this is pretty useful when dealing with large number of databases to have the patches available prior to downtime windows.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight console"&gt;&lt;code&gt;&lt;span class="gp"&gt;[oracle@oel8-lab01 autoupg-home]$&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;tree
&lt;span class="c"&gt;.
&lt;/span&gt;&lt;span class="go"&gt;├── autoupg-config
│&amp;nbsp;&amp;nbsp; ├── 19.31-RU-download.cfg
│&amp;nbsp;&amp;nbsp; └── key-store.cfg
├── autoupg-keystore
│&amp;nbsp;&amp;nbsp; ├── apikey
│&amp;nbsp;&amp;nbsp; ├── cwallet.sso
│&amp;nbsp;&amp;nbsp; ├── cwallet.sso.lck
│&amp;nbsp;&amp;nbsp; ├── ewallet.p12
│&amp;nbsp;&amp;nbsp; └── ewallet.p12.lck
├── autoupg-logs
│&amp;nbsp;&amp;nbsp; └── cfgtoollogs
│&amp;nbsp;&amp;nbsp;     └── patch
│&amp;nbsp;&amp;nbsp;         └── auto
│&amp;nbsp;&amp;nbsp;             ├── aru
│&amp;nbsp;&amp;nbsp;             │&amp;nbsp;&amp;nbsp; ├── aru.log
│&amp;nbsp;&amp;nbsp;             │&amp;nbsp;&amp;nbsp; ├── aru_releases.xml
│&amp;nbsp;&amp;nbsp;             │&amp;nbsp;&amp;nbsp; ├── aru_user.log
│&amp;nbsp;&amp;nbsp;             │&amp;nbsp;&amp;nbsp; └── ous.log
│&amp;nbsp;&amp;nbsp;             ├── autoupgrade_patching_err.log
│&amp;nbsp;&amp;nbsp;             ├── autoupgrade_patching.log
│&amp;nbsp;&amp;nbsp;             ├── autoupgrade_patching_user.log
│&amp;nbsp;&amp;nbsp;             ├── config_files
│&amp;nbsp;&amp;nbsp;             │&amp;nbsp;&amp;nbsp; ├── autoupg_patching.cfg
│&amp;nbsp;&amp;nbsp;             │&amp;nbsp;&amp;nbsp; └── autoupgrade.json
│&amp;nbsp;&amp;nbsp;             ├── examiner
│&amp;nbsp;&amp;nbsp;             │&amp;nbsp;&amp;nbsp; ├── examiner2026_06_19_01_32_49.json
│&amp;nbsp;&amp;nbsp;             │&amp;nbsp;&amp;nbsp; ├── examiner2026_06_19_01_57_59.json
│&amp;nbsp;&amp;nbsp;             │&amp;nbsp;&amp;nbsp; ├── examiner2026_06_19_01_58_40.json
│&amp;nbsp;&amp;nbsp;             │&amp;nbsp;&amp;nbsp; └── examiner2026_06_19_01_59_31.json
│&amp;nbsp;&amp;nbsp;             ├── lock
│&amp;nbsp;&amp;nbsp;             └── sql
│&amp;nbsp;&amp;nbsp;                 └── login.sql
├── autoupgrade.jar
├── autoupg-sw
│&amp;nbsp;&amp;nbsp; ├── 19.28-RU
│&amp;nbsp;&amp;nbsp; ├── 19.29-RU
│&amp;nbsp;&amp;nbsp; ├── 19.30-RU
│&amp;nbsp;&amp;nbsp; └── 19.31-RU
│&amp;nbsp;&amp;nbsp;     ├── autoupgrade.jar
│&amp;nbsp;&amp;nbsp;     ├── p38906621_190000_Linux-ARM-64.zip
│&amp;nbsp;&amp;nbsp;     ├── p39034528_190000_Linux-ARM-64.zip
│&amp;nbsp;&amp;nbsp;     ├── p39196236_1931000DBRU_Generic.zip
│&amp;nbsp;&amp;nbsp;     ├── p6880880_190000_Linux-ARM-64.zip
│&amp;nbsp;&amp;nbsp;     └── patches_info.json
└── logs

17 directories, 28 files
&lt;/span&gt;&lt;span class="gp"&gt;[oracle@oel8-lab01 autoupg-home]$&lt;/span&gt;&lt;span class="w"&gt; 
&lt;/span&gt;&lt;span class="go"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Patch Info
&lt;/h2&gt;

&lt;p&gt;Note that each patch download has a file called &lt;strong&gt;patches_info.json&lt;/strong&gt;, this a super useful feature to find description about the patches being downloaded &lt;/p&gt;

&lt;p&gt;Use the below jq script&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;jq &lt;span class="nt"&gt;-r&lt;/span&gt; &lt;span class="s1"&gt;'
["TYPE","DESCRIPTION","PLATFORM","FILE","SHA1","SHA256"],
(.patches[] |
 [
   (if .description|test("RELEASE UPDATE") then "RU"
    elif .description|test("OPatch") then "OPATCH"
    elif .description|test("OJVM") then "OJVM"
    elif .description|test("DATAPUMP") then "DPBP"
    else "PATCH" end),
   .description,
   (.platform // "Generic"),
   .files[0].name,
   .files[0].checksum,
   .files[0]["checksum-256"]
 ]) | @tsv
'&lt;/span&gt; patches_info.json | column &lt;span class="nt"&gt;-t&lt;/span&gt; &lt;span class="nt"&gt;-s&lt;/span&gt; &lt;span class="s1"&gt;$'&lt;/span&gt;&lt;span class="se"&gt;\t&lt;/span&gt;&lt;span class="s1"&gt;'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The tabular details of each patch that was downloaded in the corresponding folder is shown as below&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;TYPE    DESCRIPTION                                        PLATFORM          FILE                               SHA1                                      SHA256
RU      DATABASE RELEASE UPDATE 19.31.0.0.0 (REL-APR2026)  Linux ARM 64-bit  p39034528_190000_Linux-ARM-64.zip  35FCD029A7814A0960F1A0C700122D80CC1FA8EE  8B40287BA8B83746C527E285E039EE444F8E8E9A8391986EBF40588BBE46A92A
OPATCH  OPatch 12.2.0.1.51 for DB 19.0.0.0.0 (Apr 2026)    Linux ARM 64-bit  p6880880_190000_Linux-ARM-64.zip   4E6CB6C6F3FE33A092B2D570026596F4895E8605  D5D4692F89BE451C021F931125768BC68E5BEAF711FED7842361D65936EC19C2
RU      OJVM RELEASE UPDATE 19.31.0.0.0                    Linux ARM 64-bit  p38906621_190000_Linux-ARM-64.zip  A87F6A4B14D5851767CB5B1C7D089C1601E2F038  A4A8E7EFB5EB4BFE91C4A97C74A6702762A5AF2D8A5DEFEDB1042DD2F3E7BFB3
DPBP    DATAPUMP BUNDLE PATCH 19.31.0.0.0                  Generic           p39196236_1931000DBRU_Generic.zip  E711E3024AA6C4C336D7291CE1E7D0419C311C52  F39745219BCC9D8BC8FD1262EF787FF742F7F84F6C59A817B1F014ADA49B778F
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;So.. essentially organize all your patches before even you begin patching, that is what AUTOUPG_HOME helps to do.&lt;/p&gt;

&lt;h2&gt;
  
  
  How Nabhaas helps you
&lt;/h2&gt;

&lt;p&gt;If you’ve made it this far, you already sense there’s a better way — in fact, you have a way ahead.&lt;/p&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;TAB - Whitepaper , &lt;br&gt;
&lt;a href="https://www.nabhaas.com/_files/ugd/dab815_eb17483ee84d431a8cc2a92792ea21bf.pdf" rel="noopener noreferrer"&gt;download here&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Managed Delivery Services - Whitepaper , &lt;br&gt;
[download here](&lt;a href="https://www.nabhaas.com/_files/ugd/dab815_96198a0627d64f75a3d3a2dce9bf185d.pdf" rel="noopener noreferrer"&gt;https://www.nabhaas.com/_files/ugd/dab815_96198a0627d64f75a3d3a2dce9bf185d.pdf&lt;/a&gt;&lt;/p&gt;

</description>
      <category>oracle</category>
      <category>patching</category>
      <category>database</category>
      <category>dba</category>
    </item>
  </channel>
</rss>
