<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-436196721812840248</id><updated>2026-10-19T03:57:54.242+05:30</updated><category term="Oracle DBA"/><category term="Oracle 19c"/><category term="Data Guard"/><category term="Oracle Database"/><category term="SQL"/><category term="Performance Tuning"/><category term="Cloud DBA"/><category term="Backup and Restore"/><category term="Commands"/><category term="HA DR"/><category term="Production DBA"/><category term="RAC"/><category term="Database Automation"/><category term="High Availability"/><category term="LevelUp Careers"/><category term="Oracle 23ai"/><category term="interview Q and A"/><category term="Aurora MySQL"/><category term="Career Tips"/><category term="DBA Career"/><category term="Database Performance"/><category term="Installation"/><category term="Migration"/><category term="PostgreSQL"/><category term="Video&#39;s"/><category term="Apply Lag"/><category term="Cloud Database"/><category term="Cloud Migration"/><category term="DBA Scripts"/><category term="Database Administration"/><category term="Database Architecture"/><category term="Database Migration"/><category term="Fresher Jobs"/><category term="Linux"/><category term="Oracle Data Guard"/><category term="Standby Database"/><category term="Transport Lag"/><category term="Troubleshooting"/><category term="n8n"/><category term="AWS RDS"/><category term="Automation"/><category term="Best Practices"/><category term="Data Guard Lag Fix"/><category term="Data Guard Troubleshooting"/><category term="Database Recovery"/><category term="Disaster Recovery"/><category term="Failover Testing"/><category term="GCP AlloyDB"/><category term="Interview Preparation"/><category term="Job Search"/><category term="Job Search 2026"/><category term="MRP Apply"/><category term="MRP Process"/><category term="Oracle Cloud"/><category term="Oracle RAC"/><category term="Oracle Troubleshooting"/><category term="PDB"/><category term="Parallel Apply"/><category term="Patroni"/><category term="Resume Writing"/><category term="SYNC ASYNC"/><category term="Standby Redo Logs"/><category term="True Cache"/><category term="error"/><category term="2026 Guide"/><category term="ADB"/><category term="ADW"/><category term="AI Features"/><category term="AI SQL Tuning"/><category term="AI Vector Search"/><category term="AIOps"/><category term="ASH"/><category term="ATP"/><category term="ATS Optimisation"/><category term="ATS Resume"/><category term="AWR"/><category term="AWR Report"/><category term="AWS Cloud"/><category term="AWS Database"/><category term="All-Star Profile"/><category term="AlloyDB Tuning"/><category term="Auto-Indexing"/><category term="Auto-Patching"/><category term="Auto-Scaling"/><category term="Automation Scripts"/><category term="Autonomous Database"/><category term="Azure Cloud"/><category term="Azure Database"/><category term="Azure Migration"/><category term="Azure SQL"/><category term="Azure SQL Managed Instance"/><category term="Backup Automation"/><category term="Backup Strategy"/><category term="Beginner Friendly"/><category term="CI/CD"/><category term="Cache Fusion"/><category term="Campus Placement"/><category term="Chaos Engineering"/><category term="ChatGPT"/><category term="Cloud Architecture"/><category term="Cluster Architecture"/><category term="Cluster Design"/><category term="Cluster Health Monitor"/><category term="DBA Troubleshooting"/><category term="DGMGRL"/><category term="Database"/><category term="Database Audit"/><category term="Database Backup"/><category term="Database CI/CD"/><category term="Database Case Study"/><category term="Database Conversion"/><category term="Database Deployment"/><category term="Database Diagnostics"/><category term="Database Monitoring"/><category term="Database Replication"/><category term="Database Testing"/><category term="DevOps"/><category term="Distributed Database"/><category term="Exadata"/><category term="Fast-Start Failover"/><category term="Fresher Resume"/><category term="Function Mapping"/><category term="GCS GES"/><category term="Get Shortlisted"/><category term="GitHub Actions"/><category term="GitHub Workflows"/><category term="Global Cache"/><category term="Google Cloud"/><category term="Google Cloud Platform"/><category term="Grid Infrastructure"/><category term="Hybrid Cloud"/><category term="Impact Writing"/><category term="Interconnect Design"/><category term="Interview Calls"/><category term="Interview Tips"/><category term="JSON Duality"/><category term="JSON Duality Views"/><category term="LinkedIn Profile"/><category term="LinkedIn Tips 2026"/><category term="Lock-Free Reservations"/><category term="Machine Learning"/><category term="Maximum Availability"/><category term="Maximum Performance"/><category term="Maximum Protection"/><category term="Multi-Cloud Architecture"/><category term="MySQL"/><category term="MySQL Lock Detection"/><category term="MySQL Performance Schema"/><category term="MySQL Troubleshooting"/><category term="NEWS"/><category term="New Features"/><category term="OCI"/><category term="ORA-16766"/><category term="Oracle 19c Data Guard"/><category term="Oracle 26ai"/><category term="Oracle Automation"/><category term="Oracle Backup"/><category term="Oracle Clustering"/><category term="Oracle DBA&#xa;Database Architecture"/><category term="Oracle DBA Guide"/><category term="Oracle Error Fix"/><category term="Oracle Listener"/><category term="Oracle Migration"/><category term="Oracle Performance"/><category term="Oracle Performance Tuning"/><category term="Oracle Recovery"/><category term="Oracle SQL Monitoring"/><category term="Oracle Upgrade"/><category term="Oracle to AlloyDB"/><category term="Oracle to Azure"/><category term="Oracle to PostgreSQL"/><category term="PL/SQL"/><category term="PL/pgSQL"/><category term="Parameter Tuning"/><category term="Performance Analysis"/><category term="PostgreSQL Migration"/><category term="Postgres"/><category term="Process"/><category term="Production Support"/><category term="Profile Optimisation"/><category term="Property Graphs"/><category term="Protection Modes"/><category term="RAC Internals"/><category term="RAC Performance"/><category term="RDS MySQL"/><category term="RDS Oracle"/><category term="RMAN Automation"/><category term="RMAN Configuration"/><category term="RMAN Scripts"/><category term="Recruiter Visibility"/><category term="Redo Apply"/><category term="Referral Strategy"/><category term="SAP HANA"/><category term="SAP HANA Architecture"/><category term="SAP HANA Logging"/><category term="SQL Conversion"/><category term="SQL Domains"/><category term="SQL Guide"/><category term="SQL Migration"/><category term="SQL Monitor"/><category term="SQL Monitoring Script"/><category term="SQL Syntax"/><category term="SQL Tuning"/><category term="Schema Deployment"/><category term="Select AI"/><category term="Shell Scripts"/><category term="Slow Query Diagnostics"/><category term="Solaris UNIX"/><category term="Split Brain"/><category term="Targeted Job Search"/><category term="Vector Search"/><category term="Wait Events"/><category term="Zero Data Loss"/><category term="v$session"/><category term="v$sql"/><title type='text'>Chetan Yadav</title><subtitle type='html'>Senior Oracle &amp;amp; Cloud DBA&#xa;Real-World Databases • Cloud • Reliability • Careers&#xa;LevelUp Careers Initiative&#xa;</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://chetanyadavds.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/436196721812840248/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://chetanyadavds.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/436196721812840248/posts/default?start-index=26&amp;max-results=25&amp;redirect=false'/><author><name>Chetan Yadav</name><uri>http://www.blogger.com/profile/02557500437758632199</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiE0TgifWM4l1b3sy_cK2y41bpqyfY1U25-p5IBKkSg8pJLFRvjYr_kF7W_MgsYdc21DutWF9H6qlShQDQspQLbZEQ5CSUA51Wp6Mh9l5Ygd4NPSuQyqwSMrKitCWwSLr0oHBg9TGjxAvAM7TTkkehHLL1MFWg0wSb31CxywQxIokg9pg/s1600/IMG-20251013-WA0038.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>111</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-436196721812840248.post-1613643168247315645</id><published>2026-06-08T11:00:00.000+05:30</published><updated>2026-06-08T11:00:00.116+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="High Availability"/><category scheme="http://www.blogger.com/atom/ns#" term="LevelUp Careers"/><category scheme="http://www.blogger.com/atom/ns#" term="Oracle 19c"/><category scheme="http://www.blogger.com/atom/ns#" term="Oracle DBA"/><category scheme="http://www.blogger.com/atom/ns#" term="Performance Tuning"/><category scheme="http://www.blogger.com/atom/ns#" term="Production DBA"/><title type='text'>Oracle High CPU Usage: Causes and Fix in 19c</title><content type='html'>
&lt;html lang=&quot;en&quot;&gt;
&lt;head&gt;
&lt;meta charset=&quot;UTF-8&quot;&gt;&lt;/meta&gt;
&lt;meta content=&quot;width=device-width, initial-scale=1.0&quot; name=&quot;viewport&quot;&gt;&lt;/meta&gt;
&lt;title&gt;Oracle High CPU Usage: Causes and Fix in 19c&lt;/title&gt;
&lt;meta content=&quot;Diagnose and fix Oracle high CPU usage in 19c. Covers runaway SQL, parallel query overload, and latch contention with production SQL fixes.&quot; name=&quot;description&quot;&gt;&lt;/meta&gt;
&lt;link href=&quot;https://www.levelupcareers.in/oracle-high-cpu-usage-fix-19c&quot; rel=&quot;canonical&quot;&gt;&lt;/link&gt;
&lt;meta content=&quot;Oracle High CPU Usage: Causes and Fix in 19c&quot; property=&quot;og:title&quot;&gt;&lt;/meta&gt;
&lt;meta content=&quot;Diagnose and fix Oracle high CPU usage in 19c. Covers runaway SQL, parallel query overload, and latch contention with production SQL fixes.&quot; property=&quot;og:description&quot;&gt;&lt;/meta&gt;
&lt;meta content=&quot;https://www.levelupcareers.in/oracle-high-cpu-usage-fix-19c&quot; property=&quot;og:url&quot;&gt;&lt;/meta&gt;
&lt;meta content=&quot;article&quot; property=&quot;og:type&quot;&gt;&lt;/meta&gt;

&lt;script type=&quot;application/ld+json&quot;&gt;
{
  &quot;@context&quot;: &quot;https://schema.org&quot;,
  &quot;@graph&quot;: [
    {
      &quot;@type&quot;: &quot;Article&quot;,
      &quot;@id&quot;: &quot;https://www.levelupcareers.in/oracle-high-cpu-usage-fix-19c#article&quot;,
      &quot;headline&quot;: &quot;Oracle High CPU Usage: Causes and Fix in 19c&quot;,
      &quot;description&quot;: &quot;Diagnose and fix Oracle high CPU usage in 19c. Covers runaway SQL, parallel query overload, and latch contention with production SQL fixes.&quot;,
      &quot;author&quot;: {
        &quot;@type&quot;: &quot;Person&quot;,
        &quot;name&quot;: &quot;Chetan Yadav&quot;,
        &quot;url&quot;: &quot;https://www.linkedin.com/in/chetanyadavvds&quot;
      },
      &quot;publisher&quot;: {
        &quot;@type&quot;: &quot;Organization&quot;,
        &quot;name&quot;: &quot;LevelUp Careers&quot;,
        &quot;url&quot;: &quot;https://www.levelupcareers.in&quot;
      },
      &quot;mainEntityOfPage&quot;: &quot;https://www.levelupcareers.in/oracle-high-cpu-usage-fix-19c&quot;,
      &quot;keywords&quot;: [&quot;oracle high cpu usage fix 19c&quot;,&quot;oracle cpu spike&quot;,&quot;runaway SQL&quot;,&quot;parallel query cpu&quot;,&quot;oracle performance&quot;,&quot;Oracle 19c&quot;,&quot;Oracle DBA&quot;]
    },
    {
      &quot;@type&quot;: &quot;FAQPage&quot;,
      &quot;@id&quot;: &quot;https://www.levelupcareers.in/oracle-high-cpu-usage-fix-19c#faq&quot;,
      &quot;mainEntity&quot;: [
        {
          &quot;@type&quot;: &quot;Question&quot;,
          &quot;name&quot;: &quot;How do I find which SQL is causing high CPU in Oracle 19c?&quot;,
          &quot;acceptedAnswer&quot;: {
            &quot;@type&quot;: &quot;Answer&quot;,
            &quot;text&quot;: &quot;Query V$SQL ordered by CPU_TIME descending, or use ASH (V$ACTIVE_SESSION_HISTORY) filtering on SESSION_STATE=&#39;ON CPU&#39; to pinpoint the exact SQL_ID consuming the most CPU in real time.&quot;
          }
        },
        {
          &quot;@type&quot;: &quot;Question&quot;,
          &quot;name&quot;: &quot;Can parallel query cause Oracle high CPU usage?&quot;,
          &quot;acceptedAnswer&quot;: {
            &quot;@type&quot;: &quot;Answer&quot;,
            &quot;text&quot;: &quot;Yes. When parallel degree of parallelism exceeds the number of available CPU cores, Oracle spawns more PX slave processes than the OS can schedule, causing context-switching overhead that manifests as runaway CPU consumption.&quot;
          }
        },
        {
          &quot;@type&quot;: &quot;Question&quot;,
          &quot;name&quot;: &quot;What is latch contention and how does it spike CPU in Oracle?&quot;,
          &quot;acceptedAnswer&quot;: {
            &quot;@type&quot;: &quot;Answer&quot;,
            &quot;text&quot;: &quot;Latch contention occurs when multiple sessions spin-wait on library cache or shared pool latches. Spin-waiting burns CPU in a tight loop. A small shared pool relative to parsing workload or hard parsing of non-reusable SQL are the most common triggers.&quot;
          }
        },
        {
          &quot;@type&quot;: &quot;Question&quot;,
          &quot;name&quot;: &quot;How do I fix oracle high cpu usage fix 19c without restarting the database?&quot;,
          &quot;acceptedAnswer&quot;: {
            &quot;@type&quot;: &quot;Answer&quot;,
            &quot;text&quot;: &quot;Kill the offending session with ALTER SYSTEM KILL SESSION, apply a SQL Profile or Baseline to fix a bad execution plan, limit parallel degree with ALTER SESSION or system-level PARALLEL_DEGREE_POLICY, and resize the shared pool online with ALTER SYSTEM SET SHARED_POOL_SIZE — all without requiring a database restart.&quot;
          }
        }
      ]
    }
  ]
}
&lt;/script&gt;

&lt;style&gt;
/* ── Reset &amp; base ─────────────────────────────────────────── */
*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
body {
  font-family: &#39;Segoe UI&#39;, system-ui, sans-serif;
  font-size: 16px;
  line-height: 1.8;
  color: #1e293b;
  background: #f8fafc;
}
.post-title { display: none !important; }

/* ── Wrapper ──────────────────────────────────────────────── */
.luc-wrap {
  max-width: 820px;
  margin: 0 auto;
  padding: 0 20px 60px;
}

/* ── Hero ─────────────────────────────────────────────────── */
.luc-hero {
  background: linear-gradient(135deg, #1e3a5f 0%, #2c5282 100%);
  border-radius: 0 0 16px 16px;
  padding: 48px 40px 40px;
  margin-bottom: 40px;
  position: relative;
  overflow: hidden;
}
.luc-hero::before {
  content: &#39;&#39;;
  position: absolute;
  top: -40px; right: -40px;
  width: 260px; height: 260px;
  border-radius: 50%;
  background: rgba(37,99,235,0.18);
}
.luc-hero-eyebrow {
  display: inline-block;
  background: rgba(37,99,235,0.35);
  color: #93c5fd;
  font-size: 11px;
  font-weight: 600;
  letter-spacing: 0.1em;
  text-transform: uppercase;
  padding: 4px 12px;
  border-radius: 20px;
  border: 1px solid rgba(37,99,235,0.4);
  margin-bottom: 16px;
}
.luc-hero h1 {
  font-size: clamp(22px, 4vw, 32px);
  font-weight: 700;
  color: #fff;
  line-height: 1.25;
  margin-bottom: 16px;
  position: relative;
}
.luc-hero-meta {
  color: #94a3b8;
  font-size: 13px;
  display: flex;
  flex-wrap: wrap;
  gap: 16px;
}
.luc-hero-meta span { display: flex; align-items: center; gap: 5px; }

/* ── Diagram ──────────────────────────────────────────────── */
.luc-diagram {
  width: 100%;
  border-radius: 12px;
  border: 1px solid #e2e8f0;
  margin: 32px 0;
  display: block;
}

/* ── Prose ────────────────────────────────────────────────── */
.luc-body h2 {
  font-size: 22px;
  font-weight: 700;
  color: #1e3a5f;
  margin: 48px 0 16px;
  padding-bottom: 10px;
  border-bottom: 2px solid #2563eb;
}
.luc-body p {
  margin-bottom: 18px;
  color: #334155;
}
.luc-body ul, .luc-body ol {
  margin: 0 0 18px 24px;
  color: #334155;
}
.luc-body li { margin-bottom: 8px; }
.luc-body strong { color: #1e3a5f; font-weight: 600; }

/* ── Code blocks ──────────────────────────────────────────── */
.luc-code-wrap {
  background: #0f172a;
  border-radius: 10px;
  margin: 24px 0;
  overflow: hidden;
  border: 1px solid #1e3a5f;
}
.luc-code-header {
  display: flex;
  justify-content: space-between;
  align-items: center;
  padding: 10px 16px;
  background: #1e293b;
  border-bottom: 1px solid #2d3748;
}
.luc-code-label {
  font-size: 11px;
  font-weight: 600;
  color: #64748b;
  text-transform: uppercase;
  letter-spacing: 0.08em;
}
.luc-copy-btn {
  background: #1e3a5f;
  color: #93c5fd;
  border: 1px solid #2563eb;
  border-radius: 6px;
  font-size: 11px;
  font-weight: 600;
  padding: 4px 12px;
  cursor: pointer;
  transition: background 0.2s;
}
.luc-copy-btn:hover { background: #2563eb; color: #fff; }
.luc-code-wrap pre {
  margin: 0;
  padding: 20px;
  overflow-x: auto;
  font-family: &#39;Cascadia Code&#39;, &#39;Fira Code&#39;, &#39;Courier New&#39;, monospace;
  font-size: 13px;
  line-height: 1.7;
  color: #e2e8f0;
}
.luc-code-wrap pre .cm  { color: #64748b; } /* comment */
.luc-code-wrap pre .kw  { color: #93c5fd; } /* keyword */
.luc-code-wrap pre .fn  { color: #6ee7b7; } /* function/view */
.luc-code-wrap pre .st  { color: #fcd34d; } /* string/number */
.luc-code-wrap pre .op  { color: #f472b6; } /* operator */

/* ── Alert / callout boxes ────────────────────────────────── */
.luc-alert {
  border-radius: 10px;
  padding: 16px 20px;
  margin: 24px 0;
  border-left: 4px solid;
  font-size: 14px;
  line-height: 1.7;
}
.luc-alert.danger  { background: #fef2f2; border-color: #dc2626; color: #7f1d1d; }
.luc-alert.warning { background: #fffbeb; border-color: #d97706; color: #78350f; }
.luc-alert.info    { background: #eff6ff; border-color: #2563eb; color: #1e3a8a; }
.luc-alert.success { background: #f0fdf4; border-color: #16a34a; color: #14532d; }
.luc-alert strong  { display: block; font-size: 12px; text-transform: uppercase; letter-spacing: 0.08em; margin-bottom: 6px; }

/* ── Step cards ───────────────────────────────────────────── */
.luc-steps { counter-reset: step; margin: 24px 0; }
.luc-step {
  display: flex;
  gap: 16px;
  align-items: flex-start;
  margin-bottom: 24px;
  padding: 20px;
  background: #fff;
  border-radius: 10px;
  border: 1px solid #e2e8f0;
  box-shadow: 0 1px 3px rgba(0,0,0,0.06);
}
.luc-step-num {
  counter-increment: step;
  min-width: 36px;
  height: 36px;
  border-radius: 50%;
  background: #1e3a5f;
  color: #fff;
  font-size: 14px;
  font-weight: 700;
  display: flex;
  align-items: center;
  justify-content: center;
  flex-shrink: 0;
}
.luc-step-content h3 {
  font-size: 15px;
  font-weight: 700;
  color: #1e3a5f;
  margin-bottom: 6px;
}
.luc-step-content p, .luc-step-content ul { font-size: 14px; color: #475569; }

/* ── FAQ ──────────────────────────────────────────────────── */
.luc-faq { margin: 24px 0; }
.luc-faq-item {
  border: 1px solid #e2e8f0;
  border-radius: 10px;
  margin-bottom: 12px;
  overflow: hidden;
}
.luc-faq-q {
  font-size: 15px;
  font-weight: 600;
  color: #1e3a5f;
  padding: 16px 20px;
  background: #f1f5f9;
  cursor: pointer;
  display: flex;
  justify-content: space-between;
  align-items: center;
}
.luc-faq-q::after { content: &#39;+&#39;; font-size: 20px; color: #2563eb; }
.luc-faq-q.open::after { content: &#39;-&#39;; }
.luc-faq-a {
  padding: 0 20px;
  max-height: 0;
  overflow: hidden;
  transition: max-height 0.3s ease, padding 0.3s;
  font-size: 14px;
  color: #475569;
  line-height: 1.75;
}
.luc-faq-a.open { max-height: 400px; padding: 16px 20px; }

/* ── CTA box ──────────────────────────────────────────────── */
.luc-cta {
  background: linear-gradient(135deg, #1e3a5f, #1e40af);
  border-radius: 14px;
  padding: 36px 32px;
  text-align: center;
  margin: 48px 0 32px;
  color: #fff;
}
.luc-cta h3 { font-size: 20px; font-weight: 700; margin-bottom: 10px; }
.luc-cta p  { color: #bfdbfe; font-size: 14px; margin-bottom: 20px; }
.luc-cta-kw {
  display: inline-block;
  background: #2563eb;
  color: #fff;
  font-size: 15px;
  font-weight: 700;
  padding: 10px 28px;
  border-radius: 8px;
  letter-spacing: 0.05em;
}

/* ── Tags ─────────────────────────────────────────────────── */
.luc-tags { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 32px; }
.luc-tag {
  background: #eff6ff;
  color: #1e3a8a;
  border: 1px solid #bfdbfe;
  border-radius: 20px;
  font-size: 12px;
  font-weight: 500;
  padding: 4px 12px;
}

/* ── Responsive ───────────────────────────────────────────── */
@media (max-width: 600px) {
  .luc-hero { padding: 32px 20px 28px; }
  .luc-step { flex-direction: column; }
  .luc-cta { padding: 28px 20px; }
}
&lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
&lt;div class=&quot;luc-wrap&quot;&gt;

&lt;!-- ── HERO ──────────────────────────────────────────────── --&gt;
&lt;div class=&quot;luc-hero&quot;&gt;
  &lt;div class=&quot;luc-hero-eyebrow&quot;&gt;Oracle 19c Performance Tuning&lt;/div&gt;
  &lt;h1&gt;Oracle High CPU Usage: Causes and Fix in 19c&lt;/h1&gt;
  &lt;div class=&quot;luc-hero-meta&quot;&gt;
    &lt;span&gt; Chetan Yadav — Senior Oracle DBA&lt;/span&gt;
    &lt;span&gt;⏱ 10 min read&lt;/span&gt;
    &lt;span&gt; Troubleshoot Guide&lt;/span&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;

&lt;div class=&quot;luc-body&quot;&gt;

&lt;!-- ── INTRO ─────────────────────────────────────────────── --&gt;
&lt;p&gt;It is 3:12 AM. PagerDuty fires. The alert reads: &lt;strong&gt;Oracle host CPU at 94% for 8 minutes&lt;/strong&gt;. You log into the server. The database process is consuming nearly every available core. The application is timing out. Users are getting errors. And nobody knows which query started it or when.&lt;/p&gt;

&lt;p&gt;This is the oracle high cpu usage fix 19c scenario that every production DBA eventually faces. The frustrating part is not the incident itself — it is that in most cases the fix takes under ten minutes once you know exactly where to look. The problem is that without a structured diagnostic sequence, engineers burn 45 minutes checking the wrong things first.&lt;/p&gt;

&lt;p&gt;This guide covers the three root causes behind the majority of Oracle 19c CPU spikes: &lt;strong&gt;runaway SQL and full table scans&lt;/strong&gt;, &lt;strong&gt;parallel query overload&lt;/strong&gt;, and &lt;strong&gt;latch contention in the shared pool&lt;/strong&gt;. For each cause: exact diagnostic SQL, correct and wrong result interpretation, the fix, its trade-off, and the confirmation step.&lt;/p&gt;

&lt;!-- IMAGE RULE: Every &lt;img&gt; must have alt, title, width, height, and loading attributes.
     alt  = descriptive text for screen readers + SEO (include primary keyword naturally)
     title = tooltip shown on hover (can match alt or add extra context)
     width/height = prevents layout shift (CLS) while image loads
     loading=&quot;lazy&quot; = defers offscreen images for faster page load --&gt;
&lt;img alt=&quot;Oracle high cpu usage fix 19c — diagnostic flowchart showing runaway SQL, parallel query overload, and latch contention paths with SQL commands&quot; class=&quot;luc-diagram&quot; height=&quot;800&quot; loading=&quot;lazy&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh5-f8OC772b1MzG3MQw_FhczXS2sLMP5SNCYs-ztHTVPDvzKfudgGQfNmAjcGlgNP_wKFooPl4UEcMgHlL-UeM6uZmTJQSSnzNYs3-_bgAM9cIQ2qwP2rNh9tfClODzMwVeH1nbgB7SIV0bLkKwlC8Oe2hm6pXhuqzHsBxn8uZIjB_LZFHu46pMVPtQ6o/s1600/cd198846-d434-4cc0-ac76-eba05a492dbb.png&quot; title=&quot;Oracle 19c High CPU Diagnostic Flowchart — LevelUp Careers&quot; width=&quot;1200&quot; /&gt;

&lt;!-- ── CAUSE 1 ─────────────────────────────────────────────── --&gt;
&lt;h2&gt;Cause 1: Runaway SQL and Oracle CPU Spike from Bad Execution Plans&lt;/h2&gt;

&lt;p&gt;The most common cause of a sudden Oracle CPU spike in 19c is a single SQL statement consuming a disproportionate share of CPU — typically because it is performing a full table scan on a large table, using a suboptimal join method, or has had its execution plan invalidated by a statistics refresh or cursor invalidation event. In Oracle 19c, Adaptive Query Optimization can occasionally select an execution plan that was correct for initial statistics but behaves catastrophically under production data distribution, and the optimizer will not self-correct until the cursor ages out of the shared pool.&lt;/p&gt;

&lt;p&gt;The threshold where a runaway SQL becomes a host-level incident rather than a slow query is when it consumes more CPU than the OS can schedule on its available cores, creating a queue of waiting processes. On a 16-core host, a single parallel query with DOP 32 can drive CPU to 100% in under a minute.&lt;/p&gt;

&lt;div class=&quot;luc-alert danger&quot;&gt;
  &lt;strong&gt;Production Indicator&lt;/strong&gt;
  If CPU spiked within minutes of a statistics job completion, an index drop, or an application deployment, assume a plan change first. This is the most common trigger in 19c environments.
&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Step 1: Find the top CPU-consuming SQL right now.&lt;/strong&gt;&lt;/p&gt;

&lt;div class=&quot;luc-code-wrap&quot;&gt;
  &lt;div class=&quot;luc-code-header&quot;&gt;
    &lt;span class=&quot;luc-code-label&quot;&gt;SQL — Top CPU Consumers from V$SQL&lt;/span&gt;
    &lt;button class=&quot;luc-copy-btn&quot; onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;
  &lt;/div&gt;
  &lt;pre&gt;&lt;span class=&quot;cm&quot;&gt;-- Run this first during the incident&lt;/span&gt;
&lt;span class=&quot;kw&quot;&gt;SELECT&lt;/span&gt; sql_id,
       &lt;span class=&quot;fn&quot;&gt;ROUND&lt;/span&gt;(cpu_time/&lt;span class=&quot;st&quot;&gt;1000000&lt;/span&gt;, &lt;span class=&quot;st&quot;&gt;2&lt;/span&gt;) &lt;span class=&quot;kw&quot;&gt;AS&lt;/span&gt; cpu_seconds,
       executions,
       &lt;span class=&quot;fn&quot;&gt;ROUND&lt;/span&gt;(cpu_time/&lt;span class=&quot;fn&quot;&gt;NULLIF&lt;/span&gt;(executions,&lt;span class=&quot;st&quot;&gt;0&lt;/span&gt;)/&lt;span class=&quot;st&quot;&gt;1000000&lt;/span&gt;,&lt;span class=&quot;st&quot;&gt;4&lt;/span&gt;) &lt;span class=&quot;kw&quot;&gt;AS&lt;/span&gt; cpu_per_exec,
       &lt;span class=&quot;fn&quot;&gt;SUBSTR&lt;/span&gt;(sql_text, &lt;span class=&quot;st&quot;&gt;1&lt;/span&gt;, &lt;span class=&quot;st&quot;&gt;80&lt;/span&gt;) sql_preview
&lt;span class=&quot;kw&quot;&gt;FROM&lt;/span&gt;   &lt;span class=&quot;fn&quot;&gt;v$sql&lt;/span&gt;
&lt;span class=&quot;kw&quot;&gt;WHERE&lt;/span&gt;  last_active_time &lt;span class=&quot;op&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;fn&quot;&gt;SYSDATE&lt;/span&gt; &lt;span class=&quot;op&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;st&quot;&gt;1&lt;/span&gt;/&lt;span class=&quot;st&quot;&gt;24&lt;/span&gt;
&lt;span class=&quot;kw&quot;&gt;ORDER BY&lt;/span&gt; cpu_time &lt;span class=&quot;kw&quot;&gt;DESC&lt;/span&gt;
&lt;span class=&quot;fn&quot;&gt;FETCH FIRST 10 ROWS ONLY&lt;/span&gt;;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Correct result:&lt;/strong&gt; CPU seconds spread across many SQL IDs, no single statement above 20% of total. &lt;strong&gt;Wrong result:&lt;/strong&gt; One SQL ID showing 80%+ of cumulative CPU seconds. That is your runaway statement.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 2: Check what is currently running on CPU using ASH.&lt;/strong&gt;&lt;/p&gt;

&lt;div class=&quot;luc-code-wrap&quot;&gt;
  &lt;div class=&quot;luc-code-header&quot;&gt;
    &lt;span class=&quot;luc-code-label&quot;&gt;SQL — Active Sessions ON CPU (ASH)&lt;/span&gt;
    &lt;button class=&quot;luc-copy-btn&quot; onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;
  &lt;/div&gt;
  &lt;pre&gt;&lt;span class=&quot;cm&quot;&gt;-- Shows sessions currently burning CPU right now&lt;/span&gt;
&lt;span class=&quot;kw&quot;&gt;SELECT&lt;/span&gt; ash.sql_id,
       ash.session_id,
       ash.session_serial#,
       ash.module,
       &lt;span class=&quot;fn&quot;&gt;COUNT&lt;/span&gt;(*) &lt;span class=&quot;kw&quot;&gt;AS&lt;/span&gt; ash_samples
&lt;span class=&quot;kw&quot;&gt;FROM&lt;/span&gt;   &lt;span class=&quot;fn&quot;&gt;v$active_session_history&lt;/span&gt; ash
&lt;span class=&quot;kw&quot;&gt;WHERE&lt;/span&gt;  ash.sample_time &lt;span class=&quot;op&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;fn&quot;&gt;SYSDATE&lt;/span&gt; &lt;span class=&quot;op&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;st&quot;&gt;5&lt;/span&gt;/&lt;span class=&quot;st&quot;&gt;1440&lt;/span&gt;
  &lt;span class=&quot;kw&quot;&gt;AND&lt;/span&gt;  ash.session_state &lt;span class=&quot;op&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;st&quot;&gt;&#39;ON CPU&#39;&lt;/span&gt;
&lt;span class=&quot;kw&quot;&gt;GROUP BY&lt;/span&gt; ash.sql_id, ash.session_id,
         ash.session_serial#, ash.module
&lt;span class=&quot;kw&quot;&gt;ORDER BY&lt;/span&gt; ash_samples &lt;span class=&quot;kw&quot;&gt;DESC&lt;/span&gt;;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Correct result:&lt;/strong&gt; No SQL ID appearing in more than 20% of samples over 5 minutes. &lt;strong&gt;Wrong result:&lt;/strong&gt; One SQL ID dominating ASH samples consistently — this is the active runaway. Note the SESSION_ID and SESSION_SERIAL#.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fix: Kill the session, then fix the plan.&lt;/strong&gt;&lt;/p&gt;

&lt;div class=&quot;luc-code-wrap&quot;&gt;
  &lt;div class=&quot;luc-code-header&quot;&gt;
    &lt;span class=&quot;luc-code-label&quot;&gt;SQL — Kill Session + Apply SQL Profile&lt;/span&gt;
    &lt;button class=&quot;luc-copy-btn&quot; onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;
  &lt;/div&gt;
  &lt;pre&gt;&lt;span class=&quot;cm&quot;&gt;-- Step A: Kill the runaway session immediately&lt;/span&gt;
&lt;span class=&quot;kw&quot;&gt;ALTER SYSTEM KILL SESSION&lt;/span&gt; &lt;span class=&quot;st&quot;&gt;&#39;&amp;lt;sid&amp;gt;,&amp;lt;serial#&amp;gt;&#39;&lt;/span&gt; &lt;span class=&quot;kw&quot;&gt;IMMEDIATE&lt;/span&gt;;

&lt;span class=&quot;cm&quot;&gt;-- Step B: Lock the good plan using a SQL Profile&lt;/span&gt;
&lt;span class=&quot;cm&quot;&gt;-- First, get the sql_id and the plan hash of the good plan from AWR&lt;/span&gt;
&lt;span class=&quot;fn&quot;&gt;DBMS_SQLTUNE.IMPORT_SQL_PROFILE&lt;/span&gt;(
  sql_text    &lt;span class=&quot;op&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;st&quot;&gt;&#39;&amp;lt;full SQL text&amp;gt;&#39;&lt;/span&gt;,
  profile     &lt;span class=&quot;op&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;fn&quot;&gt;SQLPROF_ATTR&lt;/span&gt;(&lt;span class=&quot;st&quot;&gt;&#39;OPT_PARAM(&#39;&#39;optimizer_features_enable&#39;&#39; &#39;&#39;19.1.0&#39;&#39;)&#39;&lt;/span&gt;),
  name        &lt;span class=&quot;op&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;st&quot;&gt;&#39;PROFILE_FIX_RUNAWAY_SQL&#39;&lt;/span&gt;,
  force_match &lt;span class=&quot;op&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;kw&quot;&gt;TRUE&lt;/span&gt;
);

&lt;span class=&quot;cm&quot;&gt;-- Step C: Flush only the bad cursor from shared pool&lt;/span&gt;
&lt;span class=&quot;kw&quot;&gt;EXEC&lt;/span&gt; &lt;span class=&quot;fn&quot;&gt;SYS.DBMS_SHARED_POOL.PURGE&lt;/span&gt;(&lt;span class=&quot;st&quot;&gt;&#39;&amp;lt;address&amp;gt;,&amp;lt;hash_value&amp;gt;&#39;&lt;/span&gt;, &lt;span class=&quot;st&quot;&gt;&#39;C&#39;&lt;/span&gt;);&lt;/pre&gt;
&lt;/div&gt;

&lt;div class=&quot;luc-alert warning&quot;&gt;
  &lt;strong&gt;Trade-off&lt;/strong&gt;
  Killing a session with IMMEDIATE rolls back its transaction, which may take time proportional to the undo generated. Do not kill sessions during a financial period close without confirming the transaction is safe to roll back. A SQL Profile is a better long-term fix than hints in the query, because it survives code deployments.
&lt;/div&gt;

&lt;!-- ── CAUSE 2 ─────────────────────────────────────────────── --&gt;
&lt;h2&gt;Cause 2: Parallel Query CPU Overload from Uncontrolled DOP in Oracle 19c&lt;/h2&gt;

&lt;p&gt;Parallel query is Oracle&#39;s most powerful performance feature and one of its most dangerous misuse patterns. In Oracle 19c with &lt;code&gt;PARALLEL_DEGREE_POLICY = AUTO&lt;/code&gt;, the optimizer can autonomously decide to execute a full table scan or aggregation in parallel, potentially spawning PX slave processes well beyond what the host hardware can sustain. When the degree of parallelism exceeds the number of available CPU cores, the OS scheduler begins context-switching between PX slaves — and context switching itself consumes CPU, creating a feedback loop where adding more parallel slaves makes the query slower while driving CPU higher.&lt;/p&gt;

&lt;p&gt;The specific threshold that changes behavior: on a host with N CPU cores, any query spawning more than N/2 PX slaves will begin competing with itself for CPU scheduler time. At N PX slaves, the overhead typically exceeds the parallelism benefit for most OLTP-adjacent workloads. This behavior is version-specific: 19c with AUTO policy is more aggressive than 12c in its autonomous DOP selection, and the &lt;code&gt;PARALLEL_MIN_TIME_THRESHOLD&lt;/code&gt; parameter (default 10 seconds) may be set too low in environments that were migrated from earlier versions.&lt;/p&gt;

&lt;div class=&quot;luc-code-wrap&quot;&gt;
  &lt;div class=&quot;luc-code-header&quot;&gt;
    &lt;span class=&quot;luc-code-label&quot;&gt;SQL — Identify Parallel Query Overload&lt;/span&gt;
    &lt;button class=&quot;luc-copy-btn&quot; onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;
  &lt;/div&gt;
  &lt;pre&gt;&lt;span class=&quot;cm&quot;&gt;-- Step 1: Count active PX slaves per coordinator session&lt;/span&gt;
&lt;span class=&quot;kw&quot;&gt;SELECT&lt;/span&gt; qcsid,
       qcserial#,
       &lt;span class=&quot;fn&quot;&gt;COUNT&lt;/span&gt;(*) &lt;span class=&quot;kw&quot;&gt;AS&lt;/span&gt; px_slave_count,
       server_group
&lt;span class=&quot;kw&quot;&gt;FROM&lt;/span&gt;   &lt;span class=&quot;fn&quot;&gt;v$px_session&lt;/span&gt;
&lt;span class=&quot;kw&quot;&gt;GROUP BY&lt;/span&gt; qcsid, qcserial#, server_group
&lt;span class=&quot;kw&quot;&gt;ORDER BY&lt;/span&gt; px_slave_count &lt;span class=&quot;kw&quot;&gt;DESC&lt;/span&gt;;

&lt;span class=&quot;cm&quot;&gt;-- Step 2: Check current parallel parameters&lt;/span&gt;
&lt;span class=&quot;kw&quot;&gt;SHOW PARAMETER&lt;/span&gt; parallel_max_servers;
&lt;span class=&quot;kw&quot;&gt;SHOW PARAMETER&lt;/span&gt; parallel_degree_policy;
&lt;span class=&quot;kw&quot;&gt;SHOW PARAMETER&lt;/span&gt; cpu_count;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Correct result:&lt;/strong&gt; px_slave_count per coordinator below cpu_count / 2. &lt;strong&gt;Wrong result:&lt;/strong&gt; Any coordinator showing px_slave_count above cpu_count — this coordinator is driving a CPU overload event. If &lt;code&gt;parallel_degree_policy&lt;/code&gt; is AUTO and cpu_count is 32, a px_slave_count of 64 means the optimizer autonomously doubled available parallelism.&lt;/p&gt;

&lt;div class=&quot;luc-code-wrap&quot;&gt;
  &lt;div class=&quot;luc-code-header&quot;&gt;
    &lt;span class=&quot;luc-code-label&quot;&gt;SQL — Fix Parallel Overload Without Restart&lt;/span&gt;
    &lt;button class=&quot;luc-copy-btn&quot; onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;
  &lt;/div&gt;
  &lt;pre&gt;&lt;span class=&quot;cm&quot;&gt;-- Immediate fix: limit DOP system-wide&lt;/span&gt;
&lt;span class=&quot;kw&quot;&gt;ALTER SYSTEM SET&lt;/span&gt; parallel_degree_policy &lt;span class=&quot;op&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;st&quot;&gt;MANUAL&lt;/span&gt;;
&lt;span class=&quot;kw&quot;&gt;ALTER SYSTEM SET&lt;/span&gt; parallel_max_servers &lt;span class=&quot;op&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;st&quot;&gt;16&lt;/span&gt;; &lt;span class=&quot;cm&quot;&gt;-- = cpu_count / 2&lt;/span&gt;

&lt;span class=&quot;cm&quot;&gt;-- Raise the auto-parallel threshold to prevent future AUTO overselection&lt;/span&gt;
&lt;span class=&quot;kw&quot;&gt;ALTER SYSTEM SET&lt;/span&gt; parallel_min_time_threshold &lt;span class=&quot;op&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;st&quot;&gt;30&lt;/span&gt;; &lt;span class=&quot;cm&quot;&gt;-- seconds&lt;/span&gt;

&lt;span class=&quot;cm&quot;&gt;-- Limit DOP for a specific table permanently&lt;/span&gt;
&lt;span class=&quot;kw&quot;&gt;ALTER TABLE&lt;/span&gt; schema.large_table &lt;span class=&quot;kw&quot;&gt;PARALLEL&lt;/span&gt; &lt;span class=&quot;st&quot;&gt;4&lt;/span&gt;;

&lt;span class=&quot;cm&quot;&gt;-- Confirm: verify no coordinator now exceeds cpu_count/2 slaves&lt;/span&gt;
&lt;span class=&quot;kw&quot;&gt;SELECT&lt;/span&gt; qcsid, &lt;span class=&quot;fn&quot;&gt;COUNT&lt;/span&gt;(*) slave_count
&lt;span class=&quot;kw&quot;&gt;FROM&lt;/span&gt; &lt;span class=&quot;fn&quot;&gt;v$px_session&lt;/span&gt;
&lt;span class=&quot;kw&quot;&gt;GROUP BY&lt;/span&gt; qcsid
&lt;span class=&quot;kw&quot;&gt;ORDER BY&lt;/span&gt; slave_count &lt;span class=&quot;kw&quot;&gt;DESC&lt;/span&gt;;&lt;/pre&gt;
&lt;/div&gt;

&lt;div class=&quot;luc-alert warning&quot;&gt;
  &lt;strong&gt;Trade-off&lt;/strong&gt;
  Switching from AUTO to MANUAL parallel degree policy disables automatic parallelism for full table scans and aggregations. Long-running batch jobs that relied on AUTO parallelism will run slower. Coordinate with the batch team before making this change permanent. A middle ground is setting PARALLEL_DEGREE_POLICY = LIMITED, which applies auto-DOP only to queries that already have a PARALLEL hint or table-level parallel degree set.
&lt;/div&gt;

&lt;!-- ── CAUSE 3 ─────────────────────────────────────────────── --&gt;
&lt;h2&gt;Cause 3: Latch Contention and Library Cache CPU Spin in Oracle 19c&lt;/h2&gt;

&lt;p&gt;Latch contention is the CPU spike cause that most engineers do not consider first, because it does not involve a visible slow query. When multiple sessions compete for the same latch — most commonly the library cache latch or the shared pool latch — Oracle sessions spin in a CPU-burning busy-wait loop before escalating to a sleep. This spin-wait is intentional: it is faster than a context switch for short contention windows. But when contention is sustained, hundreds of sessions spinning simultaneously drive CPU utilization to the ceiling while appearing idle from an application perspective.&lt;/p&gt;

&lt;p&gt;In Oracle 19c, the most common trigger for library cache latch contention is hard parsing at high frequency. Hard parsing occurs when a SQL statement cannot be matched to an existing cursor in the shared pool, typically because literals are used instead of bind variables, because the shared pool is undersized for the workload, or because a cursor invalidation event (statistics refresh, DDL on an underlying object) forced mass re-parsing. The shared pool latch protects the memory management structures of the shared pool itself and contends under heavy allocation and deallocation activity.&lt;/p&gt;

&lt;div class=&quot;luc-code-wrap&quot;&gt;
  &lt;div class=&quot;luc-code-header&quot;&gt;
    &lt;span class=&quot;luc-code-label&quot;&gt;SQL — Diagnose Latch Contention&lt;/span&gt;
    &lt;button class=&quot;luc-copy-btn&quot; onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;
  &lt;/div&gt;
  &lt;pre&gt;&lt;span class=&quot;cm&quot;&gt;-- Step 1: Find latches with high sleep rates&lt;/span&gt;
&lt;span class=&quot;kw&quot;&gt;SELECT&lt;/span&gt; name,
       gets,
       misses,
       sleeps,
       spin_gets,
       &lt;span class=&quot;fn&quot;&gt;ROUND&lt;/span&gt;(sleeps/&lt;span class=&quot;fn&quot;&gt;NULLIF&lt;/span&gt;(gets,&lt;span class=&quot;st&quot;&gt;0&lt;/span&gt;)*&lt;span class=&quot;st&quot;&gt;100&lt;/span&gt;, &lt;span class=&quot;st&quot;&gt;4&lt;/span&gt;) miss_pct
&lt;span class=&quot;kw&quot;&gt;FROM&lt;/span&gt;   &lt;span class=&quot;fn&quot;&gt;v$latch&lt;/span&gt;
&lt;span class=&quot;kw&quot;&gt;WHERE&lt;/span&gt;  sleeps &lt;span class=&quot;op&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;st&quot;&gt;1000&lt;/span&gt;
&lt;span class=&quot;kw&quot;&gt;ORDER BY&lt;/span&gt; sleeps &lt;span class=&quot;kw&quot;&gt;DESC&lt;/span&gt;
&lt;span class=&quot;fn&quot;&gt;FETCH FIRST 10 ROWS ONLY&lt;/span&gt;;

&lt;span class=&quot;cm&quot;&gt;-- Step 2: Check hard parse rate&lt;/span&gt;
&lt;span class=&quot;kw&quot;&gt;SELECT&lt;/span&gt; name, value
&lt;span class=&quot;kw&quot;&gt;FROM&lt;/span&gt;   &lt;span class=&quot;fn&quot;&gt;v$sysstat&lt;/span&gt;
&lt;span class=&quot;kw&quot;&gt;WHERE&lt;/span&gt;  name &lt;span class=&quot;kw&quot;&gt;IN&lt;/span&gt; (&lt;span class=&quot;st&quot;&gt;&#39;parse count (hard)&#39;&lt;/span&gt;,
                &lt;span class=&quot;st&quot;&gt;&#39;parse count (total)&#39;&lt;/span&gt;,
                &lt;span class=&quot;st&quot;&gt;&#39;execute count&#39;&lt;/span&gt;)
&lt;span class=&quot;kw&quot;&gt;ORDER BY&lt;/span&gt; name;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Correct result:&lt;/strong&gt; miss_pct below 0.5% for library cache latch. Hard parse count below 5% of execute count. &lt;strong&gt;Wrong result:&lt;/strong&gt; Library cache latch miss_pct above 1%, combined with hard parse count above 20% of execute count. This confirms literal SQL driving hard parses and latch contention.&lt;/p&gt;

&lt;div class=&quot;luc-code-wrap&quot;&gt;
  &lt;div class=&quot;luc-code-header&quot;&gt;
    &lt;span class=&quot;luc-code-label&quot;&gt;SQL — Find Literal SQL Driving Hard Parses&lt;/span&gt;
    &lt;button class=&quot;luc-copy-btn&quot; onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;
  &lt;/div&gt;
  &lt;pre&gt;&lt;span class=&quot;cm&quot;&gt;-- Find SQL with high version counts (literal explosion)&lt;/span&gt;
&lt;span class=&quot;kw&quot;&gt;SELECT&lt;/span&gt; sql_id,
       version_count,
       &lt;span class=&quot;fn&quot;&gt;SUBSTR&lt;/span&gt;(sql_text, &lt;span class=&quot;st&quot;&gt;1&lt;/span&gt;, &lt;span class=&quot;st&quot;&gt;100&lt;/span&gt;) sql_preview
&lt;span class=&quot;kw&quot;&gt;FROM&lt;/span&gt;   &lt;span class=&quot;fn&quot;&gt;v$sqlarea&lt;/span&gt;
&lt;span class=&quot;kw&quot;&gt;WHERE&lt;/span&gt;  version_count &lt;span class=&quot;op&quot;&gt;&amp;gt;&lt;/span&gt; &lt;span class=&quot;st&quot;&gt;20&lt;/span&gt;
&lt;span class=&quot;kw&quot;&gt;ORDER BY&lt;/span&gt; version_count &lt;span class=&quot;kw&quot;&gt;DESC&lt;/span&gt;
&lt;span class=&quot;fn&quot;&gt;FETCH FIRST 10 ROWS ONLY&lt;/span&gt;;

&lt;span class=&quot;cm&quot;&gt;-- Fix: resize shared pool online&lt;/span&gt;
&lt;span class=&quot;kw&quot;&gt;ALTER SYSTEM SET&lt;/span&gt; shared_pool_size &lt;span class=&quot;op&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;st&quot;&gt;2G&lt;/span&gt; &lt;span class=&quot;kw&quot;&gt;SCOPE&lt;/span&gt; &lt;span class=&quot;op&quot;&gt;=&lt;/span&gt; BOTH;

&lt;span class=&quot;cm&quot;&gt;-- Enable cursor sharing for literal SQL (temporary relief)&lt;/span&gt;
&lt;span class=&quot;kw&quot;&gt;ALTER SYSTEM SET&lt;/span&gt; cursor_sharing &lt;span class=&quot;op&quot;&gt;=&lt;/span&gt; FORCE;

&lt;span class=&quot;cm&quot;&gt;-- Confirm: flush shared pool then check latch sleeps trend&lt;/span&gt;
&lt;span class=&quot;kw&quot;&gt;ALTER SYSTEM FLUSH SHARED_POOL&lt;/span&gt;;
&lt;span class=&quot;cm&quot;&gt;-- Re-run v$latch query above and compare sleeps delta&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;div class=&quot;luc-alert warning&quot;&gt;
  &lt;strong&gt;Trade-off&lt;/strong&gt;
  Setting &lt;code&gt;CURSOR_SHARING = FORCE&lt;/code&gt; is a temporary relief measure, not a permanent fix. It causes Oracle to replace literals with system-generated bind variables, which can produce suboptimal plans for queries where the optimizer needs literal values for histogram-based selectivity. The correct permanent fix is to modify the application to use bind variables. Use FORCE only during the incident window, then audit and fix the SQL.
&lt;/div&gt;

&lt;!-- ── WHAT MOST MISS ──────────────────────────────────────── --&gt;
&lt;h2&gt;What Most DBAs Miss When Diagnosing Oracle High CPU Usage&lt;/h2&gt;

&lt;p&gt;The diagnostic step that consistently gets skipped is correlating the CPU spike timestamp with the AWR snapshot boundary. When Oracle CPU usage spikes in production, the instinct is to run live queries against V$ views. But if the spike already peaked and is subsiding, V$ views show the current state — not the peak state. AWR captures a snapshot every 60 minutes by default. The peak CPU event may have started and ended within a single AWR interval, leaving no clean before/after comparison.&lt;/p&gt;

&lt;p&gt;The correct approach for any Oracle CPU spike that lasts more than 15 minutes is to immediately take a manual AWR snapshot at the peak:&lt;/p&gt;

&lt;div class=&quot;luc-code-wrap&quot;&gt;
  &lt;div class=&quot;luc-code-header&quot;&gt;
    &lt;span class=&quot;luc-code-label&quot;&gt;SQL — Manual AWR Snapshot During Incident&lt;/span&gt;
    &lt;button class=&quot;luc-copy-btn&quot; onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;
  &lt;/div&gt;
  &lt;pre&gt;&lt;span class=&quot;cm&quot;&gt;-- Take snapshot immediately at peak CPU (preserves state)&lt;/span&gt;
&lt;span class=&quot;kw&quot;&gt;EXEC&lt;/span&gt; &lt;span class=&quot;fn&quot;&gt;DBMS_WORKLOAD_REPOSITORY.CREATE_SNAPSHOT&lt;/span&gt;();

&lt;span class=&quot;cm&quot;&gt;-- After incident, generate AWR report between the two snapshots&lt;/span&gt;
&lt;span class=&quot;cm&quot;&gt;-- Replace snap_id values with actual snapshot IDs&lt;/span&gt;
&lt;span class=&quot;kw&quot;&gt;SELECT&lt;/span&gt; *
&lt;span class=&quot;kw&quot;&gt;FROM&lt;/span&gt; &lt;span class=&quot;fn&quot;&gt;TABLE&lt;/span&gt;(
  &lt;span class=&quot;fn&quot;&gt;DBMS_WORKLOAD_REPOSITORY.AWR_REPORT_TEXT&lt;/span&gt;(
    l_dbid       &lt;span class=&quot;op&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;op&quot;&gt;&amp;amp;&lt;/span&gt;dbid,
    l_inst_num   &lt;span class=&quot;op&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;st&quot;&gt;1&lt;/span&gt;,
    l_bid        &lt;span class=&quot;op&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;op&quot;&gt;&amp;amp;&lt;/span&gt;begin_snap_id,
    l_eid        &lt;span class=&quot;op&quot;&gt;=&amp;gt;&lt;/span&gt; &lt;span class=&quot;op&quot;&gt;&amp;amp;&lt;/span&gt;end_snap_id
  )
);&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;The second thing most engineers miss is checking &lt;code&gt;V$OSSTAT&lt;/code&gt; for OS-level CPU breakdown. A high Oracle process CPU does not always mean Oracle is the problem — another OS process could be competing. &lt;code&gt;V$OSSTAT&lt;/code&gt; shows the split between user CPU, system CPU, and idle time from the database&#39;s perspective, and it takes 30 seconds to check.&lt;/p&gt;

&lt;div class=&quot;luc-code-wrap&quot;&gt;
  &lt;div class=&quot;luc-code-header&quot;&gt;
    &lt;span class=&quot;luc-code-label&quot;&gt;SQL — OS CPU Breakdown from Inside Oracle&lt;/span&gt;
    &lt;button class=&quot;luc-copy-btn&quot; onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;
  &lt;/div&gt;
  &lt;pre&gt;&lt;span class=&quot;kw&quot;&gt;SELECT&lt;/span&gt; stat_name,
       value,
       &lt;span class=&quot;fn&quot;&gt;ROUND&lt;/span&gt;(value / &lt;span class=&quot;st&quot;&gt;1e6&lt;/span&gt;, &lt;span class=&quot;st&quot;&gt;2&lt;/span&gt;) cpu_seconds
&lt;span class=&quot;kw&quot;&gt;FROM&lt;/span&gt;   &lt;span class=&quot;fn&quot;&gt;v$osstat&lt;/span&gt;
&lt;span class=&quot;kw&quot;&gt;WHERE&lt;/span&gt;  stat_name &lt;span class=&quot;kw&quot;&gt;IN&lt;/span&gt; (
  &lt;span class=&quot;st&quot;&gt;&#39;NUM_CPUS&#39;&lt;/span&gt;, &lt;span class=&quot;st&quot;&gt;&#39;NUM_CPU_CORES&#39;&lt;/span&gt;,
  &lt;span class=&quot;st&quot;&gt;&#39;BUSY_TIME&#39;&lt;/span&gt;, &lt;span class=&quot;st&quot;&gt;&#39;IDLE_TIME&#39;&lt;/span&gt;,
  &lt;span class=&quot;st&quot;&gt;&#39;USER_TIME&#39;&lt;/span&gt;, &lt;span class=&quot;st&quot;&gt;&#39;SYS_TIME&#39;&lt;/span&gt;
)
&lt;span class=&quot;kw&quot;&gt;ORDER BY&lt;/span&gt; stat_name;&lt;/pre&gt;
&lt;/div&gt;

&lt;!-- ── PREVENTION ──────────────────────────────────────────── --&gt;
&lt;h2&gt;Prevention: Monitoring Setup for Oracle CPU Spikes in 19c&lt;/h2&gt;

&lt;div class=&quot;luc-steps&quot;&gt;

  &lt;div class=&quot;luc-step&quot;&gt;
    &lt;div class=&quot;luc-step-num&quot;&gt;1&lt;/div&gt;
    &lt;div class=&quot;luc-step-content&quot;&gt;
      &lt;h3&gt;Enable automatic AWR baselines for peak periods&lt;/h3&gt;
      &lt;p&gt;A static AWR baseline captures the normal operating range for CPU and other metrics. Any deviation from baseline triggers a meaningful alert rather than a raw threshold alert that fires even during legitimate batch windows.&lt;/p&gt;
      &lt;p&gt;Run: &lt;code&gt;EXEC DBMS_WORKLOAD_REPOSITORY.CREATE_BASELINE(start_snap_id =&amp;gt; &amp;amp;normal_snap, end_snap_id =&amp;gt; &amp;amp;normal_snap_end, baseline_name =&amp;gt; &#39;NORMAL_PEAK&#39;);&lt;/code&gt;&lt;/p&gt;
    &lt;/div&gt;
  &lt;/div&gt;

  &lt;div class=&quot;luc-step&quot;&gt;
    &lt;div class=&quot;luc-step-num&quot;&gt;2&lt;/div&gt;
    &lt;div class=&quot;luc-step-content&quot;&gt;
      &lt;h3&gt;Set a hard limit on PARALLEL_MAX_SERVERS&lt;/h3&gt;
      &lt;p&gt;The default value is derived from cpu_count and is often too high for OLTP databases that occasionally run ad-hoc analytical queries. Set &lt;code&gt;PARALLEL_MAX_SERVERS&lt;/code&gt; to cpu_count at startup and document the rationale. The most commonly skipped step: verifying this parameter survived a database restart after patching. Check it monthly.&lt;/p&gt;
    &lt;/div&gt;
  &lt;/div&gt;

  &lt;div class=&quot;luc-step&quot;&gt;
    &lt;div class=&quot;luc-step-num&quot;&gt;3&lt;/div&gt;
    &lt;div class=&quot;luc-step-content&quot;&gt;
      &lt;h3&gt;Monitor hard parse rate daily via a scheduled query&lt;/h3&gt;
      &lt;p&gt;Add a daily check of hard parse count as a percentage of execute count. Any day where hard parses exceed 10% of executes warrants investigation before it becomes a latch contention incident. Alert threshold: hard parse rate above 15% of execute count. Schedule this check to run at 08:00 daily and email results to the DBA team.&lt;/p&gt;
    &lt;/div&gt;
  &lt;/div&gt;

&lt;/div&gt;

&lt;!-- ── FAQ ────────────────────────────────────────────────── --&gt;
&lt;h2&gt;Frequently Asked Questions&lt;/h2&gt;

&lt;div class=&quot;luc-faq&quot;&gt;

  &lt;div class=&quot;luc-faq-item&quot;&gt;
    &lt;div class=&quot;luc-faq-q&quot; onclick=&quot;toggleFaq(this)&quot;&gt;How do I find which SQL is causing high CPU in Oracle 19c?&lt;/div&gt;
    &lt;div class=&quot;luc-faq-a&quot;&gt;Query &lt;code&gt;V$SQL&lt;/code&gt; ordered by &lt;code&gt;CPU_TIME&lt;/code&gt; descending for cumulative CPU consumers, or use &lt;code&gt;V$ACTIVE_SESSION_HISTORY&lt;/code&gt; filtering on &lt;code&gt;SESSION_STATE=&#39;ON CPU&#39;&lt;/code&gt; for real-time identification. ASH is the faster diagnostic during an active incident because it shows what is running right now, while V$SQL shows what has consumed the most CPU since cursor load. Both queries are in the diagnostic section above with exact column lists and correct-vs-wrong result interpretation.&lt;/div&gt;
  &lt;/div&gt;

  &lt;div class=&quot;luc-faq-item&quot;&gt;
    &lt;div class=&quot;luc-faq-q&quot; onclick=&quot;toggleFaq(this)&quot;&gt;Can parallel query cause Oracle high CPU usage on a well-sized host?&lt;/div&gt;
    &lt;div class=&quot;luc-faq-a&quot;&gt;Yes, and it is more likely on a well-sized host than an undersized one. A host with 64 cores and &lt;code&gt;PARALLEL_DEGREE_POLICY=AUTO&lt;/code&gt; can spawn 128 PX slaves for a single query. The OS scheduler cannot run 128 threads on 64 cores simultaneously, and the context-switching overhead itself burns CPU. A well-sized host gives Oracle more cores to misuse with AUTO parallelism. The fix is setting an explicit ceiling with &lt;code&gt;PARALLEL_MAX_SERVERS&lt;/code&gt; and switching from AUTO to LIMITED or MANUAL degree policy for OLTP workloads.&lt;/div&gt;
  &lt;/div&gt;

  &lt;div class=&quot;luc-faq-item&quot;&gt;
    &lt;div class=&quot;luc-faq-q&quot; onclick=&quot;toggleFaq(this)&quot;&gt;What causes latch contention in Oracle 19c and how does it relate to CPU spikes?&lt;/div&gt;
    &lt;div class=&quot;luc-faq-a&quot;&gt;Latch contention occurs when hundreds of sessions simultaneously compete for the same in-memory serialisation structure — most commonly the library cache latch protecting cursor memory, or the shared pool latch protecting memory allocation. Oracle sessions spin in a CPU-burning busy-wait before sleeping. High-frequency literal SQL that generates thousands of unique cursor versions is the most common trigger in 19c environments. The fix combines resizing the shared pool online, setting &lt;code&gt;CURSOR_SHARING=FORCE&lt;/code&gt; as temporary relief, and fixing the application to use bind variables.&lt;/div&gt;
  &lt;/div&gt;

  &lt;div class=&quot;luc-faq-item&quot;&gt;
    &lt;div class=&quot;luc-faq-q&quot; onclick=&quot;toggleFaq(this)&quot;&gt;How do I apply oracle high cpu usage fix 19c without restarting the database?&lt;/div&gt;
    &lt;div class=&quot;luc-faq-a&quot;&gt;All three fixes described in this guide are online operations that require no database restart. Kill the runaway session with &lt;code&gt;ALTER SYSTEM KILL SESSION ... IMMEDIATE&lt;/code&gt;. Apply a SQL Profile to lock a good execution plan using &lt;code&gt;DBMS_SQLTUNE.IMPORT_SQL_PROFILE&lt;/code&gt;. Limit parallel degree with &lt;code&gt;ALTER SYSTEM SET PARALLEL_DEGREE_POLICY=MANUAL&lt;/code&gt;. Resize the shared pool with &lt;code&gt;ALTER SYSTEM SET SHARED_POOL_SIZE=Xg SCOPE=BOTH&lt;/code&gt;. Each change takes effect within seconds. Confirm with the verification queries provided in each section above.&lt;/div&gt;
  &lt;/div&gt;

&lt;/div&gt;

&lt;!-- ── CTA ─────────────────────────────────────────────────── --&gt;
&lt;div class=&quot;luc-cta&quot;&gt;
  &lt;h3&gt;Want the Complete Oracle Performance Toolkit?&lt;/h3&gt;
  &lt;p&gt;Drop a comment on this post with the keyword below and I will send you the AWR Analysis Walkthrough PDF — includes the full diagnostic SQL pack, execution plan interpretation guide, and the monitoring dashboard queries I use in production.&lt;/p&gt;
  &lt;span class=&quot;luc-cta-kw&quot;&gt;Comment: AWR&lt;/span&gt;
&lt;/div&gt;

&lt;!-- ── TAGS ───────────────────────────────────────────────── --&gt;
&lt;div class=&quot;luc-tags&quot;&gt;
  &lt;span class=&quot;luc-tag&quot;&gt;Oracle DBA&lt;/span&gt;
  &lt;span class=&quot;luc-tag&quot;&gt;Performance Tuning&lt;/span&gt;
  &lt;span class=&quot;luc-tag&quot;&gt;Oracle 19c&lt;/span&gt;
  &lt;span class=&quot;luc-tag&quot;&gt;Production DBA&lt;/span&gt;
  &lt;span class=&quot;luc-tag&quot;&gt;High Availability&lt;/span&gt;
  &lt;span class=&quot;luc-tag&quot;&gt;LevelUp Careers&lt;/span&gt;
&lt;/div&gt;

&lt;/div&gt;&lt;!-- /.luc-body --&gt;
&lt;/div&gt;&lt;!-- /.luc-wrap --&gt;

&lt;script&gt;
function copyCode(btn) {
  var pre = btn.closest(&#39;.luc-code-wrap&#39;).querySelector(&#39;pre&#39;);
  var text = pre.innerText || pre.textContent;
  navigator.clipboard.writeText(text).then(function() {
    btn.textContent = &#39;Copied!&#39;;
    setTimeout(function(){ btn.textContent = &#39;Copy&#39;; }, 2000);
  });
}
function toggleFaq(el) {
  el.classList.toggle(&#39;open&#39;);
  var ans = el.nextElementSibling;
  ans.classList.toggle(&#39;open&#39;);
}
&lt;/script&gt;

&lt;/body&gt;
&lt;/html&gt;</content><link rel='replies' type='application/atom+xml' href='http://chetanyadavds.blogspot.com/feeds/1613643168247315645/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://chetanyadavds.blogspot.com/2026/06/oracle-high-cpu-usage-fix-19c.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/436196721812840248/posts/default/1613643168247315645'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/436196721812840248/posts/default/1613643168247315645'/><link rel='alternate' type='text/html' href='http://chetanyadavds.blogspot.com/2026/06/oracle-high-cpu-usage-fix-19c.html' title='Oracle High CPU Usage: Causes and Fix in 19c'/><author><name>Chetan Yadav</name><uri>http://www.blogger.com/profile/02557500437758632199</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiE0TgifWM4l1b3sy_cK2y41bpqyfY1U25-p5IBKkSg8pJLFRvjYr_kF7W_MgsYdc21DutWF9H6qlShQDQspQLbZEQ5CSUA51Wp6Mh9l5Ygd4NPSuQyqwSMrKitCWwSLr0oHBg9TGjxAvAM7TTkkehHLL1MFWg0wSb31CxywQxIokg9pg/s1600/IMG-20251013-WA0038.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh5-f8OC772b1MzG3MQw_FhczXS2sLMP5SNCYs-ztHTVPDvzKfudgGQfNmAjcGlgNP_wKFooPl4UEcMgHlL-UeM6uZmTJQSSnzNYs3-_bgAM9cIQ2qwP2rNh9tfClODzMwVeH1nbgB7SIV0bLkKwlC8Oe2hm6pXhuqzHsBxn8uZIjB_LZFHu46pMVPtQ6o/s72-c/cd198846-d434-4cc0-ac76-eba05a492dbb.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-436196721812840248.post-6788104700894202615</id><published>2026-06-01T11:00:00.000+05:30</published><updated>2026-06-01T11:00:00.127+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="AWR Report"/><category scheme="http://www.blogger.com/atom/ns#" term="LevelUp Careers"/><category scheme="http://www.blogger.com/atom/ns#" term="Oracle 19c"/><category scheme="http://www.blogger.com/atom/ns#" term="Oracle DBA"/><category scheme="http://www.blogger.com/atom/ns#" term="Performance Tuning"/><category scheme="http://www.blogger.com/atom/ns#" term="Production DBA"/><title type='text'>How to Read Oracle AWR Report in 19c: DBA Guide</title><content type='html'>&lt;!-- ================================================================
     LevelUp Careers - Blogger Post
     CANONICAL: set to the live levelupcareers.in slug. Confirm it matches
     the published URL after going live (Hard Rule 15).
     ================================================================ --&gt;
&lt;head&gt;
&lt;meta charset=&quot;utf-8&quot;&gt;
&lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1&quot;&gt;

&lt;link rel=&quot;canonical&quot; href=&quot;https://www.levelupcareers.in/how-to-read-oracle-awr-report-19c&quot;&gt;

&lt;meta property=&quot;og:type&quot; content=&quot;article&quot;&gt;
&lt;meta property=&quot;og:title&quot; content=&quot;How to Read Oracle AWR Report in 19c: DBA Guide&quot;&gt;
&lt;meta property=&quot;og:description&quot; content=&quot;Learn how to read an Oracle AWR report in 19c. Covers DB time, top wait events, SQL statistics, and what to act on first. Real DBA guide.&quot;&gt;
&lt;meta property=&quot;og:url&quot; content=&quot;https://www.levelupcareers.in/how-to-read-oracle-awr-report-19c&quot;&gt;
&lt;meta property=&quot;og:image&quot; content=&quot;https://images.unsplash.com/photo-1558494949-ef010cbdcc31?w=1400&amp;h=500&amp;fit=crop&amp;q=85&amp;auto=format&quot;&gt;
&lt;meta property=&quot;og:site_name&quot; content=&quot;LevelUp Careers&quot;&gt;
&lt;meta name=&quot;twitter:card&quot; content=&quot;summary_large_image&quot;&gt;

&lt;script type=&quot;application/ld+json&quot;&gt;
{
  &quot;@context&quot;: &quot;https://schema.org&quot;,
  &quot;@type&quot;: &quot;Article&quot;,
  &quot;headline&quot;: &quot;How to Read Oracle AWR Report in 19c: DBA Guide&quot;,
  &quot;description&quot;: &quot;Learn how to read an Oracle AWR report in 19c. Covers DB time, top wait events, SQL statistics, and what to act on first. Real DBA guide.&quot;,
  &quot;image&quot;: &quot;https://images.unsplash.com/photo-1558494949-ef010cbdcc31?w=1400&amp;h=500&amp;fit=crop&amp;q=85&amp;auto=format&quot;,
  &quot;author&quot;: {
    &quot;@type&quot;: &quot;Person&quot;,
    &quot;name&quot;: &quot;Chetan Yadav&quot;,
    &quot;jobTitle&quot;: &quot;Senior Oracle and Cloud DBA&quot;,
    &quot;url&quot;: &quot;https://www.linkedin.com/in/chetanyadavvds&quot;
  },
  &quot;publisher&quot;: {
    &quot;@type&quot;: &quot;Organization&quot;,
    &quot;name&quot;: &quot;LevelUp Careers&quot;
  },
  &quot;mainEntityOfPage&quot;: {
    &quot;@type&quot;: &quot;WebPage&quot;,
    &quot;@id&quot;: &quot;https://www.levelupcareers.in/how-to-read-oracle-awr-report-19c&quot;
  }
}
&lt;/script&gt;

&lt;script type=&quot;application/ld+json&quot;&gt;
{
  &quot;@context&quot;: &quot;https://schema.org&quot;,
  &quot;@type&quot;: &quot;FAQPage&quot;,
  &quot;mainEntity&quot;: [
    {
      &quot;@type&quot;: &quot;Question&quot;,
      &quot;name&quot;: &quot;How do you read an Oracle AWR report in 19c quickly?&quot;,
      &quot;acceptedAnswer&quot;: {
        &quot;@type&quot;: &quot;Answer&quot;,
        &quot;text&quot;: &quot;Skip the top-to-bottom read. Start with the header to confirm the snapshot window and DB Time, then jump straight to the Top 10 Foreground Wait Events. That section tells you where time was actually spent. Trace the biggest wait back to the Top SQL section, and you have your suspect in under five minutes.&quot;
      }
    },
    {
      &quot;@type&quot;: &quot;Question&quot;,
      &quot;name&quot;: &quot;What is the first section to check when you read an Oracle AWR report in 19c?&quot;,
      &quot;acceptedAnswer&quot;: {
        &quot;@type&quot;: &quot;Answer&quot;,
        &quot;text&quot;: &quot;Check the report header and the DB Time figure first. The header confirms the instance, the snapshot interval, and the elapsed time. DB Time divided by elapsed time tells you roughly how many sessions were active. If DB Time is far higher than your CPU count, the instance was overloaded during that window.&quot;
      }
    },
    {
      &quot;@type&quot;: &quot;Question&quot;,
      &quot;name&quot;: &quot;What is a healthy DB Time to Elapsed Time ratio?&quot;,
      &quot;acceptedAnswer&quot;: {
        &quot;@type&quot;: &quot;Answer&quot;,
        &quot;text&quot;: &quot;There is no single magic number, but a useful rule is to compare average active sessions against your CPU core count. If DB Time divided by elapsed time stays near or below the number of CPU cores, the instance had headroom. When it runs several times higher than the core count, sessions were queuing and the database was CPU or wait bound.&quot;
      }
    },
    {
      &quot;@type&quot;: &quot;Question&quot;,
      &quot;name&quot;: &quot;How long should the AWR snapshot window be?&quot;,
      &quot;acceptedAnswer&quot;: {
        &quot;@type&quot;: &quot;Answer&quot;,
        &quot;text&quot;: &quot;Keep the window tight around the problem. A one-hour report that spans both a quiet period and a spike will average the spike away and hide it. For a sharp incident I generate a report covering only the two or three snapshots around the slowdown, often a 30 to 60 minute window, so the wait profile reflects the real event.&quot;
      }
    },
    {
      &quot;@type&quot;: &quot;Question&quot;,
      &quot;name&quot;: &quot;Is AWR free to use in Oracle 19c?&quot;,
      &quot;acceptedAnswer&quot;: {
        &quot;@type&quot;: &quot;Answer&quot;,
        &quot;text&quot;: &quot;No. AWR, ASH, and the related advisors are part of the Oracle Diagnostics Pack, which is a separately licensed option on Enterprise Edition. Running awrrpt.sql on an unlicensed instance is a license violation. If you do not hold the pack, use Statspack instead, which is free but collects less detail than AWR.&quot;
      }
    }
  ]
}
&lt;/script&gt;

&lt;style&gt;
.post-title{display:none!important}

.lc-wrap{max-width:860px;margin:0 auto;padding:0 16px;font-family:&#39;Poppins&#39;,-apple-system,&#39;Segoe UI&#39;,Roboto,sans-serif;color:#1f2937;line-height:1.75;font-size:17px}
.lc-wrap h2{font-size:27px;color:#0f172a;margin:42px 0 14px;line-height:1.3;font-weight:700;border-bottom:2px solid #e2e8f0;padding-bottom:8px}
.lc-wrap h3{font-size:21px;color:#1e3a5f;margin:28px 0 10px;font-weight:600}
.lc-wrap p{margin:14px 0}
.lc-wrap a{color:#2563eb;text-decoration:none}
.lc-wrap a:hover{text-decoration:underline}

/* HERO */
.lc-hero{background:linear-gradient(135deg,#1e3a5f 0%,#2c5282 50%,#1a365d 100%);border-radius:16px;padding:46px 34px;color:#fff;margin:18px 0 0}
.lc-hero h1{font-size:34px;line-height:1.25;margin:0 0 14px;font-weight:700;color:#fff}
.lc-hero .sub{font-size:18px;color:#c7d2fe;margin:0 0 22px;font-weight:400}
.lc-pills{display:flex;flex-wrap:wrap;gap:9px}
.lc-pill{background:rgba(255,255,255,.12);border:1px solid rgba(255,255,255,.22);padding:6px 14px;border-radius:30px;font-size:13px;font-weight:500}
.lc-heroimg{width:100%;height:300px;object-fit:cover;border-radius:14px;margin:16px 0 6px;display:block}
.lc-heroimg-cap{font-size:13px;color:#64748b;text-align:center;margin:0 0 8px}

/* BOXES */
.info-box{background:#fffbeb;border-left:5px solid #f59e0b;padding:18px 22px;border-radius:8px;margin:24px 0}
.tip-box{background:#eff6ff;border-left:5px solid #2563eb;padding:18px 22px;border-radius:8px;margin:24px 0}
.incident-box{background:#fef2f2;border-left:5px solid #dc2626;padding:18px 22px;border-radius:8px;margin:24px 0}
.success-box{background:#f0fdf4;border-left:5px solid #16a34a;padding:18px 22px;border-radius:8px;margin:24px 0}
.production-note{background:#fffbeb;border:1px solid #f59e0b;border-radius:10px;padding:20px 22px 18px;margin:26px 0;position:relative}
.production-note .pn-badge{position:absolute;top:-12px;left:18px;background:#f59e0b;color:#1f2937;font-size:11px;font-weight:700;letter-spacing:.6px;padding:4px 12px;border-radius:20px}
.info-box b,.tip-box b,.incident-box b,.success-box b{color:#0f172a}

/* COMPARE */
.compare-wrap{display:grid;grid-template-columns:1fr 1fr;gap:16px;margin:26px 0}
.compare-col{border-radius:10px;padding:18px 20px}
.compare-bad{background:#fef2f2;border:1px solid #fecaca}
.compare-good{background:#f0fdf4;border:1px solid #bbf7d0}
.compare-col h4{margin:0 0 10px;font-size:16px;font-weight:700}
.compare-bad h4{color:#dc2626}
.compare-good h4{color:#16a34a}
.compare-col ul{margin:0;padding-left:18px}
.compare-col li{margin:7px 0;font-size:15px}

/* CHECKLIST */
.checklist{background:#f8fafc;border:1px solid #e2e8f0;border-radius:10px;padding:20px 24px;margin:26px 0}
.checklist h4{margin:0 0 12px;color:#0f172a;font-size:17px}
.checklist ul{list-style:none;margin:0;padding:0}
.checklist li{padding:7px 0 7px 30px;position:relative;font-size:16px}
.checklist li:before{content:&quot;\2713&quot;;position:absolute;left:0;top:7px;color:#16a34a;font-weight:700}

/* STAT */
.stat-highlight{background:linear-gradient(135deg,#1e3a5f,#2c5282);color:#fff;border-radius:12px;padding:26px;text-align:center;margin:26px 0}
.stat-highlight .num{font-size:42px;font-weight:700;color:#93c5fd;line-height:1}
.stat-highlight .lbl{font-size:15px;color:#c7d2fe;margin-top:8px}

/* TAGS */
.tag-good,.tag-bad,.tag-warn,.tag-rule,.tag-cause,.tag-fix{display:inline-block;font-size:12px;font-weight:600;padding:3px 10px;border-radius:5px;margin:0 2px}
.tag-good{background:#dcfce7;color:#166534}
.tag-bad{background:#fee2e2;color:#991b1b}
.tag-warn{background:#fef9c3;color:#854d0e}
.tag-rule{background:#dbeafe;color:#1e40af}
.tag-cause{background:#fee2e2;color:#991b1b;border-radius:20px}
.tag-fix{background:#dcfce7;color:#166534;border-radius:20px}

/* TOC */
.lc-toc{background:#f8fafc;border:1px solid #e2e8f0;border-radius:10px;padding:20px 26px;margin:28px 0}
.lc-toc h4{margin:0 0 12px;color:#0f172a;font-size:16px;text-transform:uppercase;letter-spacing:.5px}
.lc-toc ol{margin:0;padding-left:20px}
.lc-toc li{margin:7px 0}

/* DIAGRAM */
.diagram-section{background:#fff;border:1px solid #e2e8f0;border-radius:14px;padding:14px;margin:30px 0;box-shadow:0 6px 22px rgba(15,23,42,.08)}
.diagram-section img{width:100%;border-radius:8px;display:block}
.diagram-section .dcap{font-size:13px;color:#64748b;text-align:center;margin:10px 0 2px}

/* CODE */
.code-wrap{margin:22px 0;border-radius:10px;overflow:hidden;border:1px solid #1e293b}
.code-head{background:#1e293b;color:#cbd5e1;display:flex;justify-content:space-between;align-items:center;padding:9px 16px;font-size:13px;font-family:&#39;Poppins&#39;,sans-serif}
.code-head .lang{font-weight:600;letter-spacing:.5px}
.code-head button{background:#2563eb;color:#fff;border:none;padding:5px 14px;border-radius:6px;font-size:12px;font-weight:600;cursor:pointer;font-family:&#39;Poppins&#39;,sans-serif}
.code-head button:hover{background:#1d4ed8}
.code-wrap pre{margin:0;background:#0f172a;color:#e2e8f0;padding:18px 16px;overflow-x:auto;white-space:pre;tab-size:4;font-family:&#39;Courier New&#39;,monospace;font-size:14px;line-height:1.65}

/* CTA */
.cta-box{background:linear-gradient(135deg,#0f172a,#1e3a5f);color:#fff;border-radius:14px;padding:34px 28px;text-align:center;margin:36px 0}
.cta-box h3{color:#fff;margin:0 0 10px;font-size:23px}
.cta-box p{color:#cbd5e1;margin:0 0 6px;font-size:16px}
.cta-box .kw{display:inline-block;background:#2563eb;color:#fff;font-weight:700;padding:8px 20px;border-radius:8px;margin-top:14px;font-size:17px;letter-spacing:1px}

/* RELATED + AUTHOR */
.related{background:#f8fafc;border:1px solid #e2e8f0;border-radius:10px;padding:22px 26px;margin:30px 0}
.related h3{margin-top:0;border:none}
.related ul{margin:0;padding-left:20px}
.related li{margin:9px 0}
.author-box{display:flex;gap:18px;align-items:flex-start;background:#0f172a;color:#e2e8f0;border-radius:14px;padding:24px 26px;margin:30px 0}
.author-box .av{flex:0 0 64px;width:64px;height:64px;border-radius:50%;background:linear-gradient(135deg,#2563eb,#1e3a5f);display:flex;align-items:center;justify-content:center;font-size:24px;font-weight:700;color:#fff}
.author-box .ainfo b{color:#fff;font-size:18px}
.author-box .ainfo .role{color:#93c5fd;font-size:14px;margin:2px 0 8px}
.author-box .ainfo p{margin:0;font-size:14px;color:#cbd5e1}
.author-box a{color:#93c5fd}
.section-transition{border:none;border-top:2px dashed #cbd5e1;margin:38px 0}
.lc-footer{text-align:center;color:#64748b;font-size:13px;padding:20px 0 40px}

@media(max-width:640px){
  .compare-wrap{grid-template-columns:1fr}
  .lc-hero h1{font-size:26px}
  .lc-wrap h2{font-size:23px}
}
&lt;/style&gt;
&lt;/head&gt;

&lt;div class=&quot;lc-wrap&quot;&gt;

  &lt;!-- HERO --&gt;
  &lt;div class=&quot;lc-hero&quot;&gt;
    &lt;h1&gt;How to Read an Oracle AWR Report in 19c&lt;/h1&gt;
    &lt;p class=&quot;sub&quot;&gt;A practical reading order from real production incidents, not a feature tour.&lt;/p&gt;
    &lt;div class=&quot;lc-pills&quot;&gt;
      &lt;span class=&quot;lc-pill&quot;&gt;Oracle 19c&lt;/span&gt;
      &lt;span class=&quot;lc-pill&quot;&gt;Performance Tuning&lt;/span&gt;
      &lt;span class=&quot;lc-pill&quot;&gt;AWR Report&lt;/span&gt;
      &lt;span class=&quot;lc-pill&quot;&gt;Production DBA&lt;/span&gt;
    &lt;/div&gt;
  &lt;/div&gt;

  &lt;img class=&quot;lc-heroimg&quot; src=&quot;https://images.unsplash.com/photo-1558494949-ef010cbdcc31?w=1400&amp;h=500&amp;fit=crop&amp;q=85&amp;auto=format&quot; alt=&quot;how to read oracle awr report 19c data center servers&quot;&gt;
  &lt;p class=&quot;lc-heroimg-cap&quot;&gt;An AWR report is a snapshot of where your instance spent its time. Reading it in the right order is half the battle.&lt;/p&gt;

  &lt;!-- INTRO + WAR STORY --&gt;
  &lt;div class=&quot;incident-box&quot;&gt;
    &lt;p style=&quot;margin:0&quot;&gt;&lt;b&gt;02:14.&lt;/b&gt; The on-call page hit: checkout API p95 had jumped from 180 ms to 4.2 seconds. No errors. No node eviction. No failover. Just a database that had quietly gone slow under a normal load. The first artifact I pulled was a one-hour AWR report, and within four minutes it pointed straight at the cause.&lt;/p&gt;
  &lt;/div&gt;

  &lt;p&gt;If you have ever stared at a 30-page AWR report and not known where to look first, this guide is for you. Knowing &lt;b&gt;how to read an Oracle AWR report in 19c&lt;/b&gt; is not about understanding every section. It is about reading a handful of sections in the right order so you can go from &quot;the database is slow&quot; to &quot;this SQL on this object is the problem&quot; in minutes. That is exactly what I did at 02:14, and it is the workflow I will walk you through here.&lt;/p&gt;

  &lt;p&gt;AWR (Automatic Workload Repository) takes regular snapshots of performance statistics and stores them in the &lt;span class=&quot;tag-rule&quot;&gt;SYSAUX&lt;/span&gt; tablespace. A report compares two snapshots and shows you the delta: what the instance did, where it waited, and which statements drove the load. The trick is to stop reading top to bottom and start reading by importance.&lt;/p&gt;

  &lt;!-- WHO THIS IS FOR --&gt;
  &lt;div class=&quot;info-box&quot;&gt;
    &lt;b&gt;Who this guide is for&lt;/b&gt;
    &lt;p style=&quot;margin:8px 0 0&quot;&gt;Junior and mid-level DBAs who can generate an AWR report but freeze when it comes to interpreting it, and senior engineers who want a tighter triage checklist for incidents. Examples use Oracle 19c, but the reading order applies to 12c and 18c as well.&lt;/p&gt;
  &lt;/div&gt;

  &lt;a name=&#39;more&#39;&gt;&lt;/a&gt;
  &lt;!-- more --&gt;

  &lt;!-- TOC --&gt;
  &lt;div class=&quot;lc-toc&quot;&gt;
    &lt;h4&gt;What this guide covers&lt;/h4&gt;
    &lt;ol&gt;
      &lt;li&gt;&lt;a href=&quot;#what&quot;&gt;What an AWR report actually tells you&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;#order&quot;&gt;How to read an Oracle AWR report in 19c: the 6-step order&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;#triage&quot;&gt;Steps 1 to 3: the 90-second triage&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;#waits&quot;&gt;Step 4: Top 10 Foreground Wait Events (the heart)&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;#sql&quot;&gt;Step 5: SQL Statistics, mapping waits to SQL&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;#generate&quot;&gt;Generating the report in 19c&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;#mistakes&quot;&gt;What NOT to do with an AWR report&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;#faq&quot;&gt;Frequently asked questions&lt;/a&gt;&lt;/li&gt;
    &lt;/ol&gt;
  &lt;/div&gt;

  &lt;!-- DIAGRAM --&gt;
  &lt;div class=&quot;diagram-section&quot;&gt;
    &lt;img src=&quot;PASTE_YOUR_BLOGGER_DIAGRAM_URL_HERE&quot; alt=&quot;how to read oracle awr report 19c reading order diagram&quot;&gt;
    &lt;p class=&quot;dcap&quot;&gt;The 6-step reading order and the key metrics to watch in an Oracle 19c AWR report.&lt;/p&gt;
  &lt;/div&gt;

  &lt;!-- SECTION 1 --&gt;
  &lt;h2 id=&quot;what&quot;&gt;What an AWR report actually tells you&lt;/h2&gt;
  &lt;p&gt;An AWR report answers one question: &lt;b&gt;during this window, where did the database spend its time?&lt;/b&gt; Everything else is supporting detail. The single most important concept is &lt;b&gt;DB Time&lt;/b&gt;, the total time spent by sessions inside the database, either working on CPU or waiting on something. If you understand DB Time and where it went, you understand the report.&lt;/p&gt;

  &lt;p&gt;Think of it like a budget. DB Time is the total money spent. The Top Wait Events section is the itemised bill. The SQL Statistics section names who was spending it. Your job is to read the bill, not to audit every line item in the building.&lt;/p&gt;

  &lt;div class=&quot;production-note&quot;&gt;
    &lt;span class=&quot;pn-badge&quot;&gt;FROM PRODUCTION&lt;/span&gt;
    &lt;p style=&quot;margin:0&quot;&gt;My reference environment for this guide: Oracle 19c (19.21), three-node RAC, roughly 8 TB database, peak around 4,500 transactions per second, on 32-core nodes. On that system a healthy one-hour report shows DB Time well within the combined core count. When a single instance shows DB Time several multiples of its 32 cores, I know sessions were queuing before I read another line.&lt;/p&gt;
  &lt;/div&gt;

  &lt;!-- SECTION 2 --&gt;
  &lt;h2 id=&quot;order&quot;&gt;How to read an Oracle AWR report in 19c: the 6-step order&lt;/h2&gt;
  &lt;p&gt;Here is the order I read every report in, regardless of the symptom. The goal of the first three steps is a fast sanity check. The real diagnosis happens in steps four and five.&lt;/p&gt;

  &lt;div class=&quot;checklist&quot;&gt;
    &lt;h4&gt;The reading order&lt;/h4&gt;
    &lt;ul&gt;
      &lt;li&gt;&lt;b&gt;Header and DB Time&lt;/b&gt; - confirm the window, instance, and how busy the DB was&lt;/li&gt;
      &lt;li&gt;&lt;b&gt;Load Profile&lt;/b&gt; - per-second and per-transaction rates, spot the spike&lt;/li&gt;
      &lt;li&gt;&lt;b&gt;Instance Efficiency&lt;/b&gt; - a quick sanity check, not a scorecard&lt;/li&gt;
      &lt;li&gt;&lt;b&gt;Top 10 Foreground Wait Events&lt;/b&gt; - where DB Time actually went&lt;/li&gt;
      &lt;li&gt;&lt;b&gt;SQL Statistics&lt;/b&gt; - the statements behind those waits&lt;/li&gt;
      &lt;li&gt;&lt;b&gt;Advisories and Segment Statistics&lt;/b&gt; - confirm the fix and find the object&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/div&gt;

  &lt;p class=&quot;tip-box&quot;&gt;&lt;b&gt;Reading direction matters.&lt;/b&gt; Reports are laid out roughly in this order anyway, but the instinct most people fight is the urge to read carefully from the top. Skim steps one to three, then spend your real attention on the waits and the SQL.&lt;/p&gt;

  &lt;!-- SECTION 3 --&gt;
  &lt;h2 id=&quot;triage&quot;&gt;Steps 1 to 3: the 90-second triage&lt;/h2&gt;

  &lt;h3&gt;Step 1: Header and DB Time&lt;/h3&gt;
  &lt;p&gt;The header confirms the instance name, the host, the database version, and the snapshot interval. Check that you are looking at the right instance and the right window. Then find the DB Time line near the top. Compare DB Time against the Elapsed Time. DB Time divided by elapsed time gives you the average number of active sessions. Hold that number against your CPU core count.&lt;/p&gt;

  &lt;h3&gt;Step 2: Load Profile&lt;/h3&gt;
  &lt;p&gt;The Load Profile gives you rates per second and per transaction: logical reads, physical reads, redo size, executes, and parses. You are not memorising numbers here. You are looking for the one metric that is wildly out of line with a normal day. A 10x jump in hard parses per second, for example, screams &quot;missing bind variables&quot; before you read anything else.&lt;/p&gt;

  &lt;h3&gt;Step 3: Instance Efficiency&lt;/h3&gt;
  &lt;p&gt;This is the section most often misused. Buffer Hit and Library Hit percentages look reassuring near 99 percent, but a high ratio does not mean a healthy database. A runaway query doing millions of buffer gets can show a 99.9 percent buffer hit ratio while crippling the instance. Glance at it, then move on. &lt;span class=&quot;tag-warn&quot;&gt;Never tune toward a ratio.&lt;/span&gt;&lt;/p&gt;

  &lt;div class=&quot;production-note&quot;&gt;
    &lt;span class=&quot;pn-badge&quot;&gt;FROM PRODUCTION&lt;/span&gt;
    &lt;p style=&quot;margin:0&quot;&gt;At 02:14 the Load Profile told the story before I reached the waits. Logical reads per second had gone from a baseline near 1.2 million to over 9 million, while transactions per second were flat. Same work, far more gets. That pattern, more reads with no more business volume, almost always means a plan flip on a heavy statement. The buffer hit ratio, meanwhile, sat at a smug 99.8 percent.&lt;/p&gt;
  &lt;/div&gt;

  &lt;!-- SECTION 4 --&gt;
  &lt;h2 id=&quot;waits&quot;&gt;Step 4: Top 10 Foreground Wait Events (the heart)&lt;/h2&gt;
  &lt;p&gt;This is where you spend your attention. The Top 10 Foreground Wait Events section, in 19c, ranks the events foreground sessions waited on, by total wait time and as a percentage of DB Time. Whatever sits at the top of this list is, by definition, where your database spent most of its non-CPU time.&lt;/p&gt;

  &lt;p&gt;A few common patterns and what they usually point to:&lt;/p&gt;
  &lt;ul&gt;
    &lt;li&gt;&lt;span class=&quot;tag-cause&quot;&gt;db file sequential read&lt;/span&gt; high - single-block I/O, often index reads. Frequently a sign of physical reads that should have been cached, or a plan using the wrong index.&lt;/li&gt;
    &lt;li&gt;&lt;span class=&quot;tag-cause&quot;&gt;db file scattered read&lt;/span&gt; high - multi-block I/O, classic full table scans. Pair this with the SQL section to find the offending scan.&lt;/li&gt;
    &lt;li&gt;&lt;span class=&quot;tag-cause&quot;&gt;log file sync&lt;/span&gt; high - commits waiting on redo to be written. Look at commit frequency and redo log device latency.&lt;/li&gt;
    &lt;li&gt;&lt;span class=&quot;tag-cause&quot;&gt;gc buffer busy / gc cr&lt;/span&gt; high - RAC interconnect or block contention across instances.&lt;/li&gt;
    &lt;li&gt;&lt;span class=&quot;tag-cause&quot;&gt;enq: TX - row lock contention&lt;/span&gt; - application locking, not an infrastructure problem.&lt;/li&gt;
  &lt;/ul&gt;

  &lt;p&gt;The key habit: do not just note the top wait, note &lt;b&gt;what percentage of DB Time&lt;/b&gt; it represents. A wait that is 4 percent of DB Time is noise. A wait that is 68 percent of DB Time is your incident.&lt;/p&gt;

  &lt;div class=&quot;stat-highlight&quot;&gt;
    &lt;div class=&quot;num&quot;&gt;68%&lt;/div&gt;
    &lt;div class=&quot;lbl&quot;&gt;of DB Time sat on db file scattered read in the 02:14 report - full scans where an index should have been used&lt;/div&gt;
  &lt;/div&gt;

  &lt;!-- SECTION 5 --&gt;
  &lt;h2 id=&quot;sql&quot;&gt;Step 5: SQL Statistics, mapping waits to SQL&lt;/h2&gt;
  &lt;p&gt;Once you know the dominant wait, the SQL Statistics section names the suspect. AWR ranks SQL several ways, and which list you read depends on the wait you found in step four:&lt;/p&gt;

  &lt;ul&gt;
    &lt;li&gt;&lt;b&gt;SQL ordered by Elapsed Time&lt;/b&gt; - the default starting point. Total wall-clock time per statement.&lt;/li&gt;
    &lt;li&gt;&lt;b&gt;SQL ordered by CPU Time&lt;/b&gt; - when the instance was CPU bound.&lt;/li&gt;
    &lt;li&gt;&lt;b&gt;SQL ordered by Buffer Gets&lt;/b&gt; - when logical reads spiked, as in the 02:14 case.&lt;/li&gt;
    &lt;li&gt;&lt;b&gt;SQL ordered by Physical Reads&lt;/b&gt; - when I/O waits dominated.&lt;/li&gt;
  &lt;/ul&gt;

  &lt;p&gt;Match the list to the wait. I had a buffer-gets spike, so I went straight to &lt;b&gt;SQL ordered by Buffer Gets&lt;/b&gt;. One statement, a single &lt;span class=&quot;tag-rule&quot;&gt;SQL_ID&lt;/span&gt;, accounted for the overwhelming majority of gets in the window. That is your target. Grab its SQL_ID and pull its execution plan.&lt;/p&gt;

  &lt;div class=&quot;code-wrap&quot;&gt;
    &lt;div class=&quot;code-head&quot;&gt;&lt;span class=&quot;lang&quot;&gt;SQL&lt;/span&gt;&lt;button onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;&lt;/div&gt;
&lt;pre&gt;-- Pull the plan history for the offending SQL_ID from AWR
SELECT  sql_id,
        plan_hash_value,
        TO_CHAR(timestamp, &#39;DD-MON HH24:MI&#39;) AS captured,
        optimizer_cost
FROM    dba_hist_sql_plan
WHERE   sql_id = &#39;&amp;amp;sql_id&#39;
GROUP BY sql_id, plan_hash_value, timestamp, optimizer_cost
ORDER BY captured;&lt;/pre&gt;
  &lt;/div&gt;

  &lt;p&gt;If you see two different &lt;span class=&quot;tag-rule&quot;&gt;PLAN_HASH_VALUE&lt;/span&gt; rows for the same SQL_ID around the incident, you have confirmed a plan flip. That was exactly the 02:14 root cause: the optimizer had switched from an index range scan to a full table scan after a stats refresh.&lt;/p&gt;

  &lt;div class=&quot;success-box&quot;&gt;
    &lt;b&gt;The fix, and the result.&lt;/b&gt;
    &lt;p style=&quot;margin:8px 0 0&quot;&gt;I pinned the good plan with a SQL Plan Baseline, then corrected the stale statistics that caused the flip. p95 on the checkout API dropped from 4.2 seconds back to 190 ms within one snapshot interval. Total time from opening the report to identifying the SQL_ID: under five minutes, because I read by importance instead of top to bottom.&lt;/p&gt;
  &lt;/div&gt;

  &lt;!-- SECTION 6 --&gt;
  &lt;h2 id=&quot;generate&quot;&gt;Generating the report in 19c&lt;/h2&gt;
  &lt;p&gt;Before you can read a report you need to generate one. In 19c the scripts live under the RDBMS admin directory. For a single instance, use &lt;span class=&quot;tag-rule&quot;&gt;awrrpt.sql&lt;/span&gt;. On RAC, where you almost always want one specific instance, use &lt;span class=&quot;tag-rule&quot;&gt;awrrpti.sql&lt;/span&gt;.&lt;/p&gt;

  &lt;div class=&quot;code-wrap&quot;&gt;
    &lt;div class=&quot;code-head&quot;&gt;&lt;span class=&quot;lang&quot;&gt;SQL*Plus&lt;/span&gt;&lt;button onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;&lt;/div&gt;
&lt;pre&gt;-- Single instance report (interactive)
SQL&amp;gt; @?/rdbms/admin/awrrpt.sql

-- RAC: target a specific instance
SQL&amp;gt; @?/rdbms/admin/awrrpti.sql

-- The script asks for: report type (html/text),
-- number of days, begin snap id, end snap id, and filename.&lt;/pre&gt;
  &lt;/div&gt;

  &lt;p&gt;To choose the right snapshot IDs, list the recent snapshots first so you can pick a window that brackets the incident tightly rather than a generic &quot;last hour&quot;.&lt;/p&gt;

  &lt;div class=&quot;code-wrap&quot;&gt;
    &lt;div class=&quot;code-head&quot;&gt;&lt;span class=&quot;lang&quot;&gt;SQL&lt;/span&gt;&lt;button onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;&lt;/div&gt;
&lt;pre&gt;-- Find snapshot IDs around the time of the problem
SELECT  snap_id,
        instance_number,
        TO_CHAR(begin_interval_time, &#39;DD-MON HH24:MI&#39;) AS snap_start
FROM    dba_hist_snapshot
WHERE   begin_interval_time &amp;gt; SYSDATE - 1
ORDER BY snap_id;&lt;/pre&gt;
  &lt;/div&gt;

  &lt;div class=&quot;tip-box&quot;&gt;&lt;b&gt;Keep the window tight.&lt;/b&gt; Pick the begin and end snap IDs that hug the slowdown. A report that averages a spike across a quiet hour will dilute the very wait you are hunting for.&lt;/p&gt;&lt;/div&gt;

  &lt;!-- SECTION 7 --&gt;
  &lt;h2 id=&quot;mistakes&quot;&gt;What NOT to do with an AWR report&lt;/h2&gt;
  &lt;p&gt;Most wasted hours in AWR analysis come from a handful of repeatable mistakes. Here is the contrast I teach every junior DBA on my team.&lt;/p&gt;

  &lt;div class=&quot;compare-wrap&quot;&gt;
    &lt;div class=&quot;compare-col compare-bad&quot;&gt;
      &lt;h4&gt;Do NOT do this&lt;/h4&gt;
      &lt;ul&gt;
        &lt;li&gt;Read the report top to bottom and get lost in section 2&lt;/li&gt;
        &lt;li&gt;Chase the buffer hit ratio toward 99 percent as a goal&lt;/li&gt;
        &lt;li&gt;Generate a 24-hour report for a 5-minute spike&lt;/li&gt;
        &lt;li&gt;Look only at the top wait, ignoring its share of DB Time&lt;/li&gt;
        &lt;li&gt;Fix a SQL without confirming the plan actually changed&lt;/li&gt;
      &lt;/ul&gt;
    &lt;/div&gt;
    &lt;div class=&quot;compare-col compare-good&quot;&gt;
      &lt;h4&gt;Do this instead&lt;/h4&gt;
      &lt;ul&gt;
        &lt;li&gt;Jump to Top 10 Foreground Wait Events first &lt;span class=&quot;tag-fix&quot;&gt;faster&lt;/span&gt;&lt;/li&gt;
        &lt;li&gt;Treat efficiency ratios as a sanity glance only&lt;/li&gt;
        &lt;li&gt;Bracket the incident with a 30 to 60 minute window&lt;/li&gt;
        &lt;li&gt;Read the percentage of DB Time, not just the rank&lt;/li&gt;
        &lt;li&gt;Confirm a plan flip via PLAN_HASH_VALUE before acting&lt;/li&gt;
      &lt;/ul&gt;
    &lt;/div&gt;
  &lt;/div&gt;

  &lt;div class=&quot;production-note&quot;&gt;
    &lt;span class=&quot;pn-badge&quot;&gt;FROM PRODUCTION&lt;/span&gt;
    &lt;p style=&quot;margin:0&quot;&gt;A common trap on RAC: pulling the global report and missing that only one instance was sick. On a three-node cluster, instance 2 can be on fire while 1 and 3 idle, and the aggregate looks merely &quot;a bit busy&quot;. When the symptom is on one node, generate awrrpti.sql for that instance specifically. I have watched engineers tune the wrong instance for an hour because they read the cluster-wide numbers.&lt;/p&gt;
  &lt;/div&gt;

  &lt;hr class=&quot;section-transition&quot;&gt;

  &lt;!-- FAQ --&gt;
  &lt;h2 id=&quot;faq&quot;&gt;Frequently asked questions&lt;/h2&gt;

  &lt;h3&gt;How do you read an Oracle AWR report in 19c quickly?&lt;/h3&gt;
  &lt;p&gt;Skip the top-to-bottom read. Start with the header to confirm the snapshot window and DB Time, then jump straight to the Top 10 Foreground Wait Events. That section tells you where time was actually spent. Trace the biggest wait back to the Top SQL section, and you have your suspect in under five minutes.&lt;/p&gt;

  &lt;h3&gt;What is the first section to check when you read an Oracle AWR report in 19c?&lt;/h3&gt;
  &lt;p&gt;Check the report header and the DB Time figure first. The header confirms the instance, the snapshot interval, and the elapsed time. DB Time divided by elapsed time tells you roughly how many sessions were active. If DB Time is far higher than your CPU count, the instance was overloaded during that window.&lt;/p&gt;

  &lt;h3&gt;What is a healthy DB Time to Elapsed Time ratio?&lt;/h3&gt;
  &lt;p&gt;There is no single magic number, but a useful rule is to compare average active sessions against your CPU core count. If DB Time divided by elapsed time stays near or below the number of CPU cores, the instance had headroom. When it runs several times higher than the core count, sessions were queuing and the database was CPU or wait bound.&lt;/p&gt;

  &lt;h3&gt;How long should the AWR snapshot window be?&lt;/h3&gt;
  &lt;p&gt;Keep the window tight around the problem. A one-hour report that spans both a quiet period and a spike will average the spike away and hide it. For a sharp incident I generate a report covering only the two or three snapshots around the slowdown, often a 30 to 60 minute window, so the wait profile reflects the real event.&lt;/p&gt;

  &lt;h3&gt;Is AWR free to use in Oracle 19c?&lt;/h3&gt;
  &lt;p&gt;No. AWR, ASH, and the related advisors are part of the Oracle Diagnostics Pack, which is a separately licensed option on Enterprise Edition. Running awrrpt.sql on an unlicensed instance is a license violation. If you do not hold the pack, use Statspack instead, which is free but collects less detail than AWR.&lt;/p&gt;

  &lt;!-- CTA --&gt;
  &lt;div class=&quot;cta-box&quot;&gt;
    &lt;h3&gt;Want my AWR triage cheat sheet?&lt;/h3&gt;
    &lt;p&gt;I am putting together a one-page printable version of this 6-step reading order with the red-flag thresholds.&lt;/p&gt;
    &lt;p&gt;Comment the keyword below and I will send it over.&lt;/p&gt;
    &lt;span class=&quot;kw&quot;&gt;Comment AWR&lt;/span&gt;
  &lt;/div&gt;

  &lt;!-- RELATED --&gt;
  &lt;div class=&quot;related&quot;&gt;
    &lt;h3&gt;Related reading&lt;/h3&gt;
    &lt;ul&gt;
      &lt;li&gt;&lt;a href=&quot;/oracle-top-wait-events-explained&quot;&gt;Oracle top wait events explained: db file reads, log file sync and more&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;/oracle-ash-report-vs-awr-19c&quot;&gt;ASH report vs AWR in 19c: when to use which for performance tuning&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;/oracle-rac-performance-tuning-19c&quot;&gt;Oracle RAC performance tuning: reading per-instance AWR on a cluster&lt;/a&gt;&lt;/li&gt;
      &lt;li&gt;&lt;a href=&quot;/oracle-sql-plan-baseline-19c&quot;&gt;How to pin a plan with SQL Plan Baselines in Oracle 19c&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/div&gt;

  &lt;!-- AUTHOR --&gt;
  &lt;div class=&quot;author-box&quot;&gt;
    &lt;div class=&quot;av&quot;&gt;CY&lt;/div&gt;
    &lt;div class=&quot;ainfo&quot;&gt;
      &lt;b&gt;Chetan Yadav&lt;/b&gt;
      &lt;div class=&quot;role&quot;&gt;Senior Oracle &amp;amp; Cloud DBA &amp;middot; Oracle ACE Apprentice &amp;middot; 15+ years production experience&lt;/div&gt;
      &lt;p&gt;I write field-tested Oracle and Cloud DBA guides for LevelUp Careers, drawn from real production incidents on large RAC and Cloud estates. Connect with me on &lt;a href=&quot;https://www.linkedin.com/in/chetanyadavvds&quot;&gt;LinkedIn&lt;/a&gt; or subscribe on &lt;a href=&quot;https://www.youtube.com/@levelup_careers&quot;&gt;YouTube&lt;/a&gt;.&lt;/p&gt;
    &lt;/div&gt;
  &lt;/div&gt;

  &lt;div class=&quot;lc-footer&quot;&gt;
    &amp;copy; LevelUp Careers &amp;middot; Chetan Yadav &amp;middot; Practical Oracle &amp;amp; Cloud DBA content
  &lt;/div&gt;

&lt;/div&gt;

&lt;script&gt;
function copyCode(btn){
  var pre = btn.parentElement.nextElementSibling;
  var text = pre.innerText;
  navigator.clipboard.writeText(text).then(function(){
    var old = btn.innerText;
    btn.innerText = &quot;Copied&quot;;
    setTimeout(function(){ btn.innerText = old; }, 1600);
  });
}
&lt;/script&gt;</content><link rel='replies' type='application/atom+xml' href='http://chetanyadavds.blogspot.com/feeds/6788104700894202615/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://chetanyadavds.blogspot.com/2026/06/how-to-read-oracle-awr-report-in-19c.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/436196721812840248/posts/default/6788104700894202615'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/436196721812840248/posts/default/6788104700894202615'/><link rel='alternate' type='text/html' href='http://chetanyadavds.blogspot.com/2026/06/how-to-read-oracle-awr-report-in-19c.html' title='How to Read Oracle AWR Report in 19c: DBA Guide'/><author><name>Chetan Yadav</name><uri>http://www.blogger.com/profile/02557500437758632199</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiE0TgifWM4l1b3sy_cK2y41bpqyfY1U25-p5IBKkSg8pJLFRvjYr_kF7W_MgsYdc21DutWF9H6qlShQDQspQLbZEQ5CSUA51Wp6Mh9l5Ygd4NPSuQyqwSMrKitCWwSLr0oHBg9TGjxAvAM7TTkkehHLL1MFWg0wSb31CxywQxIokg9pg/s1600/IMG-20251013-WA0038.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-436196721812840248.post-23921234798943885</id><published>2026-05-25T11:00:00.000+05:30</published><updated>2026-05-25T11:00:00.119+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="Data Guard"/><category scheme="http://www.blogger.com/atom/ns#" term="High Availability"/><category scheme="http://www.blogger.com/atom/ns#" term="LevelUp Careers"/><category scheme="http://www.blogger.com/atom/ns#" term="Oracle 19c"/><category scheme="http://www.blogger.com/atom/ns#" term="Oracle DBA"/><category scheme="http://www.blogger.com/atom/ns#" term="Production DBA"/><category scheme="http://www.blogger.com/atom/ns#" term="RAC"/><category scheme="http://www.blogger.com/atom/ns#" term="Troubleshooting"/><title type='text'>Standby Redo Logs Not Applying Oracle Data Guard Fix</title><content type='html'>&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;en&quot;&gt;
&lt;head&gt;
&lt;meta charset=&quot;UTF-8&quot;&gt;
&lt;meta name=&quot;viewport&quot; content=&quot;width=device-width,initial-scale=1&quot;&gt;
&lt;title&gt;Standby Redo Logs Not Applying Oracle Data Guard Fix&lt;/title&gt;
&lt;meta name=&quot;description&quot; content=&quot;Fix standby redo logs not applying in Oracle Data Guard. Covers MRP process, SRL configuration, and parallel apply. Production DBA guide.&quot;&gt;
&lt;link rel=&quot;canonical&quot; href=&quot;https://www.levelupcareers.in/standby-redo-logs-not-applying-oracle-data-guard&quot;&gt;
&lt;meta property=&quot;og:title&quot; content=&quot;Standby Redo Logs Not Applying: Oracle Data Guard Fix&quot;&gt;
&lt;meta property=&quot;og:description&quot; content=&quot;Fix standby redo logs not applying in Oracle Data Guard. Covers MRP process, SRL configuration, and parallel apply. Production DBA guide.&quot;&gt;
&lt;meta property=&quot;og:image&quot; content=&quot;https://images.unsplash.com/photo-1558494949-ef010cbdcc31?w=1400&amp;h=500&amp;fit=crop&amp;q=85&amp;auto=format&quot;&gt;
&lt;meta property=&quot;og:type&quot; content=&quot;article&quot;&gt;
&lt;meta property=&quot;og:url&quot; content=&quot;https://www.levelupcareers.in/standby-redo-logs-not-applying-oracle-data-guard&quot;&gt;
&lt;meta name=&quot;twitter:card&quot; content=&quot;summary_large_image&quot;&gt;
&lt;script type=&quot;application/ld+json&quot;&gt;
{&quot;@context&quot;:&quot;https://schema.org&quot;,&quot;@type&quot;:&quot;Article&quot;,&quot;headline&quot;:&quot;Standby Redo Logs Not Applying: Oracle Data Guard Fix&quot;,&quot;description&quot;:&quot;Fix standby redo logs not applying in Oracle Data Guard. Covers MRP process, SRL configuration, and parallel apply. Production DBA guide.&quot;,&quot;author&quot;:{&quot;@type&quot;:&quot;Person&quot;,&quot;name&quot;:&quot;Chetan Yadav&quot;,&quot;url&quot;:&quot;https://linkedin.com/in/chetanyadavvds&quot;},&quot;publisher&quot;:{&quot;@type&quot;:&quot;Organization&quot;,&quot;name&quot;:&quot;LevelUp Careers&quot;},&quot;image&quot;:&quot;https://images.unsplash.com/photo-1558494949-ef010cbdcc31?w=1400&amp;h=500&amp;fit=crop&amp;q=85&amp;auto=format&quot;,&quot;datePublished&quot;:&quot;2026-05-25&quot;,&quot;dateModified&quot;:&quot;2026-05-25&quot;}
&lt;/script&gt;
&lt;script type=&quot;application/ld+json&quot;&gt;
{&quot;@context&quot;:&quot;https://schema.org&quot;,&quot;@type&quot;:&quot;FAQPage&quot;,&quot;mainEntity&quot;:[{&quot;@type&quot;:&quot;Question&quot;,&quot;name&quot;:&quot;Why are standby redo logs not applying in Oracle Data Guard?&quot;,&quot;acceptedAnswer&quot;:{&quot;@type&quot;:&quot;Answer&quot;,&quot;text&quot;:&quot;Standby redo logs not applying is most often caused by: MRP process stopped or never started, SRL groups missing or misconfigured, incorrect VALID_FOR in LOG_ARCHIVE_DEST_2, or a redo sequence gap. Run SELECT PROCESS, STATUS FROM V$MANAGED_STANDBY WHERE PROCESS=&#39;MRP0&#39; as your first diagnostic step.&quot;}},{&quot;@type&quot;:&quot;Question&quot;,&quot;name&quot;:&quot;How do I check if standby redo logs are applying in Oracle Data Guard?&quot;,&quot;acceptedAnswer&quot;:{&quot;@type&quot;:&quot;Answer&quot;,&quot;text&quot;:&quot;Run SELECT PROCESS, STATUS, SEQUENCE# FROM V$MANAGED_STANDBY on the standby. Look for MRP0 with STATUS=APPLYING_LOG and an incrementing SEQUENCE#. Also check V$DATAGUARD_STATS WHERE NAME=&#39;apply lag&#39; to confirm lag is near zero. MRP0 absent or WAIT_FOR_LOG means apply has stalled.&quot;}},{&quot;@type&quot;:&quot;Question&quot;,&quot;name&quot;:&quot;How many standby redo log groups should I create?&quot;,&quot;acceptedAnswer&quot;:{&quot;@type&quot;:&quot;Answer&quot;,&quot;text&quot;:&quot;Oracle recommends at least one more SRL group than the number of online redo log groups per thread on the primary. For a single-instance primary with 3 online redo log groups, create 4 SRL groups. Each SRL member must be at least as large as the largest online redo log member, adding 10 percent extra is recommended.&quot;}},{&quot;@type&quot;:&quot;Question&quot;,&quot;name&quot;:&quot;What does ORA-16766 mean in a Data Guard environment?&quot;,&quot;acceptedAnswer&quot;:{&quot;@type&quot;:&quot;Answer&quot;,&quot;text&quot;:&quot;ORA-16766 means the redo apply service is disabled on the standby. This fires when MRP is stopped or crashed. Confirm SRL groups exist at correct size, then issue ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION. Monitor V$MANAGED_STANDBY until MRP0 shows APPLYING_LOG.&quot;}},{&quot;@type&quot;:&quot;Question&quot;,&quot;name&quot;:&quot;Can I fix Data Guard apply lag without a full resync?&quot;,&quot;acceptedAnswer&quot;:{&quot;@type&quot;:&quot;Answer&quot;,&quot;text&quot;:&quot;Yes. For most apply-lag incidents caused by MRP outages or SRL misconfiguration, a full resync is not required. Restart MRP, verify SRL status in V$STANDBY_LOG, and check for archive gaps using V$ARCHIVE_GAP. A full resync is only needed when the standby SCN has diverged from the primary after an incomplete recovery.&quot;}}]}
&lt;/script&gt;
&lt;style&gt;
*,*::before,*::after{box-sizing:border-box;margin:0;padding:0}
:root{--blue:#2563eb;--red:#dc2626;--dark:#1e3a5f;--green:#16a34a;--amber:#d97706;--bg:#f8fafc;--text:#1e293b;--muted:#64748b;--border:#e2e8f0;--hero-grad:linear-gradient(135deg,#1e3a5f 0%,#7c1c1c 50%,#1e3a5f 100%);--code-bg:#0f172a;--code-hdr:#1e293b;--mono:&#39;Courier New&#39;,Courier,monospace}
html{scroll-behavior:smooth}
body{font-family:&#39;Segoe UI&#39;,system-ui,sans-serif;background:var(--bg);color:var(--text);line-height:1.7;font-size:16px}
a{color:var(--blue);text-decoration:none}a:hover{text-decoration:underline}
img{max-width:100%;height:auto;display:block}
.post-title{display:none!important}
.wrap{max-width:860px;margin:0 auto;padding:0 20px}
.content-wrap{max-width:860px;margin:0 auto;padding:0 20px 60px}
.hero{background:var(--hero-grad);color:#fff;padding:60px 20px 48px;text-align:center}
.hero h1{font-size:clamp(1.6rem,3.5vw,2.6rem);font-weight:800;line-height:1.25;margin-bottom:16px;letter-spacing:-.02em}
.hero .subtitle{font-size:1.05rem;opacity:.85;max-width:660px;margin:0 auto 24px;line-height:1.6}
.meta-pills{display:flex;flex-wrap:wrap;gap:8px;justify-content:center}
.meta-pill{background:rgba(255,255,255,.12);border:1px solid rgba(255,255,255,.25);border-radius:20px;padding:4px 14px;font-size:.78rem;letter-spacing:.03em}
.hero-img-wrap{width:100%;max-height:360px;overflow:hidden}
.hero-img-wrap img{width:100%;height:360px;object-fit:cover;object-position:center}
.info-box,.tip-box,.incident-box,.success-box,.production-note,.warn-box{border-radius:10px;padding:18px 22px;margin:28px 0;font-size:.95rem;line-height:1.65}
.info-box{background:#fffbeb;border-left:4px solid var(--amber)}.info-box strong{color:var(--amber)}
.tip-box{background:#eff6ff;border-left:4px solid var(--blue)}.tip-box strong{color:var(--blue)}
.incident-box{background:#fef2f2;border-left:4px solid var(--red)}.incident-box strong{color:var(--red)}
.success-box{background:#f0fdf4;border-left:4px solid var(--green)}.success-box strong{color:var(--green)}
.warn-box{background:#fff7ed;border-left:4px solid var(--amber)}
.production-note{background:#1e293b;color:#f1f5f9;border-left:4px solid var(--amber);position:relative;padding-top:36px}
.production-note::before{content:&quot;FROM PRODUCTION&quot;;position:absolute;top:10px;left:22px;font-size:.65rem;font-weight:700;letter-spacing:.1em;background:var(--amber);color:#fff;padding:2px 10px;border-radius:4px}
.production-note code{color:#fbbf24;background:rgba(255,255,255,.08);padding:1px 5px;border-radius:3px;font-family:var(--mono)}
.toc{background:#f1f5f9;border:1px solid var(--border);border-radius:10px;padding:22px 26px;margin:32px 0}
.toc h3{font-size:1rem;font-weight:700;text-transform:uppercase;letter-spacing:.07em;color:var(--muted);margin-bottom:12px}
.toc ol{padding-left:20px}.toc li{margin:6px 0;font-size:.95rem}.toc a{color:var(--blue)}
h2{font-size:1.55rem;font-weight:800;margin:42px 0 14px;color:var(--dark);letter-spacing:-.01em;padding-bottom:8px;border-bottom:2px solid var(--border)}
h3{font-size:1.15rem;font-weight:700;margin:28px 0 10px;color:var(--text)}
p{margin:14px 0}
.section-transition{border:none;border-top:2px dashed var(--border);margin:40px 0}
.code-wrap{margin:22px 0;border-radius:10px;overflow:hidden;border:1px solid #1e293b}
.code-hdr{background:var(--code-hdr);display:flex;justify-content:space-between;align-items:center;padding:9px 16px}
.code-lang{font-size:.72rem;font-weight:700;letter-spacing:.1em;color:#94a3b8;text-transform:uppercase}
.code-copy{background:var(--blue);color:#fff;border:none;border-radius:5px;padding:4px 12px;font-size:.75rem;cursor:pointer;font-weight:600}
.code-copy:hover{background:#1d4ed8}
pre.code-body{background:var(--code-bg);color:#e2e8f0;padding:18px 20px;overflow-x:auto;font-family:var(--mono);font-size:.88rem;line-height:1.7;white-space:pre;tab-size:4}
.kw{color:#93c5fd}.cm{color:#4b5563;font-style:italic}.str{color:#86efac}.num{color:#fbbf24}
.compare-wrap{display:grid;grid-template-columns:1fr 1fr;gap:16px;margin:22px 0}
.compare-col{border-radius:8px;padding:16px 18px;font-size:.9rem}
.compare-col.bad{background:#fef2f2;border:1px solid #fca5a5}
.compare-col.good{background:#f0fdf4;border:1px solid #86efac}
.compare-col h4{font-size:.8rem;font-weight:700;letter-spacing:.08em;margin-bottom:10px;text-transform:uppercase}
.compare-col.bad h4{color:var(--red)}.compare-col.good h4{color:var(--green)}
.compare-col ul{padding-left:18px}.compare-col li{margin:5px 0}
.tag-good,.tag-bad,.tag-warn,.tag-rule,.tag-cause,.tag-fix{display:inline-block;font-size:.72rem;font-weight:700;letter-spacing:.06em;padding:2px 9px;border-radius:4px;margin:2px}
.tag-good{background:#dcfce7;color:#166534;border:1px solid #86efac}
.tag-bad{background:#fee2e2;color:#991b1b;border:1px solid #fca5a5}
.tag-warn{background:#fef9c3;color:#854d0e;border:1px solid #fde047}
.tag-rule{background:#dbeafe;color:#1e40af;border:1px solid #93c5fd}
.stat-highlight{background:var(--hero-grad);color:#fff;border-radius:12px;padding:28px 24px;text-align:center;margin:22px 0}
.stat-highlight .stat-num{font-size:3rem;font-weight:900;display:block;letter-spacing:-.02em}
.stat-highlight .stat-label{font-size:.95rem;opacity:.8;margin-top:6px}
.checklist{list-style:none;padding-left:0;margin:16px 0}
.checklist li{padding:8px 0 8px 32px;position:relative;border-bottom:1px solid var(--border);font-size:.95rem}
.checklist li::before{content:&quot;&quot;;position:absolute;left:6px;top:14px;width:14px;height:14px;border-radius:50%;background:var(--blue)}
.diagram-section{background:#fff;border:1px solid var(--border);border-radius:12px;padding:22px;margin:28px 0;box-shadow:0 4px 18px rgba(0,0,0,.06)}
.diagram-section p{font-size:.85rem;color:var(--muted);text-align:center;margin-top:8px}
.error-badge{display:inline-block;background:#fef2f2;border:1px solid var(--red);color:var(--red);font-family:var(--mono);font-size:.82rem;border-radius:6px;padding:3px 10px}
.faq-list{margin:20px 0}
.faq-item{border:1px solid var(--border);border-radius:10px;margin:12px 0;overflow:hidden}
.faq-q{background:#f8fafc;padding:16px 20px;font-weight:700;font-size:.98rem;cursor:pointer;display:flex;justify-content:space-between;align-items:center}
.faq-q:hover{background:#f1f5f9}
.faq-q span{color:var(--blue);font-size:1.2rem;transition:transform .2s}
.faq-a{padding:16px 20px;font-size:.93rem;line-height:1.7;display:none}
.faq-item.open .faq-a{display:block}
.faq-item.open .faq-q span{transform:rotate(45deg)}
.cta-box{background:var(--hero-grad);color:#fff;border-radius:14px;padding:38px 30px;text-align:center;margin:44px 0}
.cta-box h3{font-size:1.4rem;font-weight:800;margin-bottom:10px}
.cta-box p{opacity:.87;font-size:1rem;max-width:580px;margin:0 auto 22px}
.cta-btn{display:inline-block;background:#dc2626;color:#fff;font-weight:700;padding:13px 32px;border-radius:8px;font-size:.95rem;margin:6px}
.cta-btn:hover{background:#b91c1c;text-decoration:none}
.cta-btn.sec{background:rgba(255,255,255,.15);border:1px solid rgba(255,255,255,.4)}
.cta-btn.sec:hover{background:rgba(255,255,255,.25)}
.related-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:14px;margin:20px 0}
.related-card{background:#fff;border:1px solid var(--border);border-radius:10px;padding:16px 18px;transition:box-shadow .2s}
.related-card:hover{box-shadow:0 4px 18px rgba(0,0,0,.1);text-decoration:none}
.related-card .rc-tag{font-size:.7rem;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:var(--blue);margin-bottom:6px}
.related-card h4{font-size:.93rem;font-weight:700;color:var(--text);line-height:1.4}
.author-box{background:#fff;border:1px solid var(--border);border-radius:12px;padding:26px 28px;margin:40px 0;display:flex;gap:20px;align-items:flex-start}
.author-avatar{width:70px;height:70px;border-radius:50%;background:var(--hero-grad);flex-shrink:0;display:flex;align-items:center;justify-content:center;font-weight:900;font-size:1.5rem;color:#fff}
.author-info h4{font-size:1.05rem;font-weight:800;margin-bottom:4px}
.author-info .author-title{font-size:.85rem;color:var(--blue);margin-bottom:10px;font-weight:600}
.author-info p{font-size:.88rem;color:var(--muted);line-height:1.6}
.author-links{display:flex;flex-wrap:wrap;gap:8px;margin-top:10px}
.author-link{font-size:.78rem;font-weight:600;color:#fff;background:var(--blue);padding:3px 12px;border-radius:20px}
.post-footer{background:#1e293b;color:#94a3b8;text-align:center;padding:22px;border-radius:0 0 12px 12px;font-size:.82rem;margin-top:40px}
.post-footer a{color:#93c5fd}
@media(max-width:600px){.compare-wrap{grid-template-columns:1fr}.author-box{flex-direction:column}.stat-highlight .stat-num{font-size:2.2rem}}
&lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;

&lt;div class=&quot;hero&quot;&gt;
  &lt;div class=&quot;wrap&quot;&gt;
    &lt;h1&gt;Standby Redo Logs Not Applying in Oracle Data Guard: Complete Fix Guide&lt;/h1&gt;
    &lt;p class=&quot;subtitle&quot;&gt;MRP process troubleshooting, SRL configuration, apply lag resolution, and parallel apply tuning from 15 years of production Oracle environments.&lt;/p&gt;
    &lt;div class=&quot;meta-pills&quot;&gt;
      &lt;span class=&quot;meta-pill&quot;&gt;Oracle 19c / 21c&lt;/span&gt;
      &lt;span class=&quot;meta-pill&quot;&gt;Data Guard&lt;/span&gt;
      &lt;span class=&quot;meta-pill&quot;&gt;Troubleshooting&lt;/span&gt;
      &lt;span class=&quot;meta-pill&quot;&gt;Senior DBA&lt;/span&gt;
      &lt;span class=&quot;meta-pill&quot;&gt;Production Guide&lt;/span&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;div class=&quot;hero-img-wrap&quot;&gt;
  &lt;img src=&quot;https://images.unsplash.com/photo-1558494949-ef010cbdcc31?w=1400&amp;h=500&amp;fit=crop&amp;q=85&amp;auto=format&quot;
       alt=&quot;standby redo logs not applying oracle data guard server room terminal screens&quot; loading=&quot;lazy&quot;&gt;
&lt;/div&gt;

&lt;div class=&quot;content-wrap&quot;&gt;

&lt;div class=&quot;info-box&quot;&gt;
  &lt;strong&gt;Who This Is For:&lt;/strong&gt; Junior to Senior Oracle DBAs managing Oracle 19c or 21c Data Guard environments who are troubleshooting standby redo logs not applying, MRP process failures, or unexplained apply lag. Freshers studying for Oracle certification will also benefit from the architecture walkthrough.
&lt;/div&gt;

&lt;p&gt;It was 2:41 AM. PagerDuty fires. The on-call message reads: &lt;em&gt;&quot;Data Guard apply lag 38 minutes and climbing.&quot;&lt;/em&gt; I SSH into the standby. &lt;span class=&quot;error-badge&quot;&gt;ORA-16766&lt;/span&gt; stares back at me from the alert log. A quick check of &lt;code&gt;V$MANAGED_STANDBY&lt;/code&gt; confirms it -- MRP0 is gone. No standby redo logs are applying. The business had a 4-hour RPO commitment. We had maybe 90 minutes before the DBA team had a very uncomfortable conversation with the CTO.&lt;/p&gt;

&lt;p&gt;Standby redo logs not applying in Oracle Data Guard is one of the highest-stress incidents a production DBA faces. It is also one of the most fixable -- if you know the exact diagnostic tree. In this post I am going to walk through every root cause I have encountered across 15 years of Oracle production work, the precise SQL to diagnose each one, and the fix you run to get apply moving again.&lt;/p&gt;

&lt;div class=&quot;production-note&quot;&gt;
  &lt;strong&gt;Environment Reference:&lt;/strong&gt; Oracle 19c (19.19 RU), 2-node RAC primary + single-node physical standby, SYNC transport, 6 TB database, peak 12,000 TPS. All SQL verified in this environment. Steps also apply to Oracle 21c and Oracle 23ai Data Guard configurations.
&lt;/div&gt;

&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;

&lt;nav class=&quot;toc&quot; id=&quot;toc&quot;&gt;
  &lt;h3&gt;Table of Contents&lt;/h3&gt;
  &lt;ol&gt;
    &lt;li&gt;&lt;a href=&quot;#architecture&quot;&gt;SRL Architecture: Why It Matters&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#diagnose&quot;&gt;Step 1: Diagnose the Apply Engine&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#fix-srl&quot;&gt;Step 2: Create or Fix Standby Redo Logs&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#fix-mrp&quot;&gt;Step 3: Start or Restart MRP&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#fix-dest&quot;&gt;Step 4: Fix LOG_ARCHIVE_DEST Configuration&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#fix-gap&quot;&gt;Step 5: Resolve Archive Gap&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#parallel-apply&quot;&gt;Step 6: Tune Parallel Apply&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#verify&quot;&gt;Post-Fix Verification Checklist&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#what-not-to-do&quot;&gt;What NOT to Do&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#faq&quot;&gt;FAQ&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#related&quot;&gt;Related Reading&lt;/a&gt;&lt;/li&gt;
  &lt;/ol&gt;
&lt;/nav&gt;

&lt;hr class=&quot;section-transition&quot;&gt;

&lt;h2 id=&quot;architecture&quot;&gt;SRL Architecture: Why Standby Redo Logs Matter&lt;/h2&gt;

&lt;p&gt;Before you can fix standby redo logs not applying, you need to understand exactly where they sit in the Data Guard pipeline. The Standby Redo Log (SRL) is the buffer between the Remote File Server (RFS) process -- which receives redo from the primary -- and the Managed Recovery Process (MRP), which applies that redo to standby datafiles.&lt;/p&gt;

&lt;p&gt;Without SRLs, Oracle falls back to archivelog-based apply, which introduces a structural lag equal to the time between log switches on the primary. On a busy 12,000 TPS system, that lag can balloon to 20+ minutes in under an hour. With SRLs properly configured, redo flows continuously and apply lag stays under 30 seconds.&lt;/p&gt;

&lt;div class=&quot;diagram-section&quot;&gt;
  &lt;img src=&quot;https://images.unsplash.com/photo-1558494949-ef010cbdcc31?w=860&amp;h=400&amp;fit=crop&amp;q=80&amp;auto=format&quot;
       alt=&quot;Oracle Data Guard SRL architecture reference&quot; loading=&quot;lazy&quot; style=&quot;border-radius:6px&quot;&gt;
  &lt;p&gt;Figure 1: SRL pipeline from primary Online Redo Logs through RFS to MRP apply engine. See the separately delivered architecture diagram PNG for the detailed flow.&lt;/p&gt;
&lt;/div&gt;

&lt;div class=&quot;tip-box&quot;&gt;
  &lt;strong&gt;Key Rule:&lt;/strong&gt; Oracle mandates SRL group count = (online redo log groups) + 1 at minimum. Each SRL member must be at least as large as the largest online redo log member. On a RAC primary with 3 log groups per thread and 2 threads, you need at least &lt;code&gt;(3 x 2) + 1 = 7&lt;/code&gt; SRL groups.
&lt;/div&gt;

&lt;hr class=&quot;section-transition&quot;&gt;

&lt;h2 id=&quot;diagnose&quot;&gt;Step 1: Diagnose the Apply Engine&lt;/h2&gt;

&lt;p&gt;Every standby redo logs not applying incident starts with the same three queries. Run these on the standby database first.&lt;/p&gt;

&lt;h3&gt;Query 1: MRP and RFS Process Status&lt;/h3&gt;
&lt;div class=&quot;code-wrap&quot;&gt;
  &lt;div class=&quot;code-hdr&quot;&gt;&lt;span class=&quot;code-lang&quot;&gt;SQL -- V$MANAGED_STANDBY&lt;/span&gt;&lt;button class=&quot;code-copy&quot; onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;&lt;/div&gt;
&lt;pre class=&quot;code-body&quot;&gt;&lt;span class=&quot;kw&quot;&gt;SELECT&lt;/span&gt;
    PROCESS,
    STATUS,
    CLIENT_PROCESS,
    SEQUENCE#,
    BLOCK#,
    BLOCKS
&lt;span class=&quot;kw&quot;&gt;FROM&lt;/span&gt;  V$MANAGED_STANDBY
&lt;span class=&quot;kw&quot;&gt;WHERE&lt;/span&gt; PROCESS &lt;span class=&quot;kw&quot;&gt;IN&lt;/span&gt; (&lt;span class=&quot;str&quot;&gt;&#39;MRP0&#39;&lt;/span&gt;, &lt;span class=&quot;str&quot;&gt;&#39;RFS&#39;&lt;/span&gt;)
&lt;span class=&quot;kw&quot;&gt;ORDER BY&lt;/span&gt; PROCESS;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;Interpret the output:&lt;/strong&gt;&lt;/p&gt;
&lt;ul style=&quot;padding-left:20px;margin:10px 0&quot;&gt;
  &lt;li style=&quot;margin:6px 0&quot;&gt;&lt;code&gt;MRP0 / APPLYING_LOG&lt;/code&gt; -- healthy, redo is being applied&lt;/li&gt;
  &lt;li style=&quot;margin:6px 0&quot;&gt;&lt;code&gt;MRP0 / WAIT_FOR_LOG&lt;/code&gt; -- MRP running but waiting; check for sequence gap&lt;/li&gt;
  &lt;li style=&quot;margin:6px 0&quot;&gt;&lt;em&gt;MRP0 absent from result&lt;/em&gt; -- MRP not started; most common cause of standby redo logs not applying&lt;/li&gt;
  &lt;li style=&quot;margin:6px 0&quot;&gt;&lt;code&gt;RFS / IDLE&lt;/code&gt; -- transport up but no current redo flowing; check primary&lt;/li&gt;
  &lt;li style=&quot;margin:6px 0&quot;&gt;&lt;em&gt;RFS absent&lt;/em&gt; -- redo transport broken; check &lt;code&gt;LOG_ARCHIVE_DEST_2&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;Query 2: Standby Redo Log Status&lt;/h3&gt;
&lt;div class=&quot;code-wrap&quot;&gt;
  &lt;div class=&quot;code-hdr&quot;&gt;&lt;span class=&quot;code-lang&quot;&gt;SQL -- V$STANDBY_LOG&lt;/span&gt;&lt;button class=&quot;code-copy&quot; onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;&lt;/div&gt;
&lt;pre class=&quot;code-body&quot;&gt;&lt;span class=&quot;kw&quot;&gt;SELECT&lt;/span&gt;
    GROUP#,
    THREAD#,
    SEQUENCE#,
    BYTES / &lt;span class=&quot;num&quot;&gt;1048576&lt;/span&gt;   AS SIZE_MB,
    STATUS,
    ARCHIVED,
    FIRST_CHANGE#
&lt;span class=&quot;kw&quot;&gt;FROM&lt;/span&gt;  V$STANDBY_LOG
&lt;span class=&quot;kw&quot;&gt;ORDER BY&lt;/span&gt; GROUP#;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;A healthy result shows STATUS = ACTIVE or UNASSIGNED with at least one ACTIVE group per thread. If the query returns zero rows, SRL groups do not exist at all -- jump to &lt;a href=&quot;#fix-srl&quot;&gt;Step 2&lt;/a&gt; immediately.&lt;/p&gt;

&lt;h3&gt;Query 3: Apply Lag and Transport Lag&lt;/h3&gt;
&lt;div class=&quot;code-wrap&quot;&gt;
  &lt;div class=&quot;code-hdr&quot;&gt;&lt;span class=&quot;code-lang&quot;&gt;SQL -- V$DATAGUARD_STATS&lt;/span&gt;&lt;button class=&quot;code-copy&quot; onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;&lt;/div&gt;
&lt;pre class=&quot;code-body&quot;&gt;&lt;span class=&quot;kw&quot;&gt;SELECT&lt;/span&gt;
    NAME,
    VALUE,
    UNIT,
    TIME_COMPUTED
&lt;span class=&quot;kw&quot;&gt;FROM&lt;/span&gt;  V$DATAGUARD_STATS
&lt;span class=&quot;kw&quot;&gt;WHERE&lt;/span&gt; NAME &lt;span class=&quot;kw&quot;&gt;IN&lt;/span&gt; (&lt;span class=&quot;str&quot;&gt;&#39;apply lag&#39;&lt;/span&gt;, &lt;span class=&quot;str&quot;&gt;&#39;transport lag&#39;&lt;/span&gt;, &lt;span class=&quot;str&quot;&gt;&#39;apply finish time&#39;&lt;/span&gt;)
&lt;span class=&quot;kw&quot;&gt;ORDER BY&lt;/span&gt; NAME;&lt;/pre&gt;
&lt;/div&gt;

&lt;div class=&quot;production-note&quot;&gt;
  During the 2:41 AM incident: &lt;code&gt;apply lag = +00 00:38:14&lt;/code&gt;, &lt;code&gt;transport lag = +00 00:00:02&lt;/code&gt;. Transport lag near zero tells me redo is arriving fine -- the problem is 100% in the apply layer. MRP was stopped by a nightly backup script that ran CANCEL but failed to restart MRP after an error.
&lt;/div&gt;

&lt;h3&gt;Query 4: Archive Destination Status&lt;/h3&gt;
&lt;div class=&quot;code-wrap&quot;&gt;
  &lt;div class=&quot;code-hdr&quot;&gt;&lt;span class=&quot;code-lang&quot;&gt;SQL -- V$ARCHIVE_DEST_STATUS&lt;/span&gt;&lt;button class=&quot;code-copy&quot; onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;&lt;/div&gt;
&lt;pre class=&quot;code-body&quot;&gt;&lt;span class=&quot;kw&quot;&gt;SELECT&lt;/span&gt;
    DEST_ID,
    DEST_NAME,
    STATUS,
    TARGET,
    ARCHIVER,
    SCHEDULE,
    VALID_NOW,
    ERROR
&lt;span class=&quot;kw&quot;&gt;FROM&lt;/span&gt;  V$ARCHIVE_DEST_STATUS
&lt;span class=&quot;kw&quot;&gt;WHERE&lt;/span&gt; STATUS != &lt;span class=&quot;str&quot;&gt;&#39;INACTIVE&#39;&lt;/span&gt;
&lt;span class=&quot;kw&quot;&gt;ORDER BY&lt;/span&gt; DEST_ID;&lt;/pre&gt;
&lt;/div&gt;

&lt;p&gt;STATUS should be VALID. Any value in the ERROR column is your root cause signal. Common: &lt;code&gt;ORA-16058&lt;/code&gt; (standby not mounted), &lt;code&gt;ORA-12541&lt;/code&gt; (TNS no listener), &lt;code&gt;ORA-16057&lt;/code&gt; (standby not in correct state).&lt;/p&gt;

&lt;hr class=&quot;section-transition&quot;&gt;

&lt;h2 id=&quot;fix-srl&quot;&gt;Step 2: Create or Fix Standby Redo Logs&lt;/h2&gt;

&lt;p&gt;Missing or undersized SRL groups cause standby redo logs not applying in roughly 35% of incidents I have handled. This typically happens after a redo log resize on the primary where the standby was not updated to match.&lt;/p&gt;

&lt;h3&gt;Check Current Online Redo Log Size (Run on Primary)&lt;/h3&gt;
&lt;div class=&quot;code-wrap&quot;&gt;
  &lt;div class=&quot;code-hdr&quot;&gt;&lt;span class=&quot;code-lang&quot;&gt;SQL -- V$LOG primary&lt;/span&gt;&lt;button class=&quot;code-copy&quot; onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;&lt;/div&gt;
&lt;pre class=&quot;code-body&quot;&gt;&lt;span class=&quot;kw&quot;&gt;SELECT&lt;/span&gt;
    GROUP#,
    THREAD#,
    BYTES / &lt;span class=&quot;num&quot;&gt;1048576&lt;/span&gt;  AS SIZE_MB,
    MEMBERS,
    STATUS
&lt;span class=&quot;kw&quot;&gt;FROM&lt;/span&gt;  V$LOG
&lt;span class=&quot;kw&quot;&gt;ORDER BY&lt;/span&gt; THREAD#, GROUP#;&lt;/pre&gt;
&lt;/div&gt;

&lt;h3&gt;Add SRL Groups on the Standby&lt;/h3&gt;
&lt;p&gt;Target size = primary online redo log size + 10%. For a primary with 50 MB log groups, create 55 MB SRL groups. Run on the &lt;strong&gt;standby&lt;/strong&gt; as SYSDBA:&lt;/p&gt;

&lt;div class=&quot;code-wrap&quot;&gt;
  &lt;div class=&quot;code-hdr&quot;&gt;&lt;span class=&quot;code-lang&quot;&gt;SQL -- Add SRL Groups (Standby)&lt;/span&gt;&lt;button class=&quot;code-copy&quot; onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;&lt;/div&gt;
&lt;pre class=&quot;code-body&quot;&gt;&lt;span class=&quot;cm&quot;&gt;-- One SRL group per command; repeat until count = online_groups + 1&lt;/span&gt;
&lt;span class=&quot;cm&quot;&gt;-- Adjust paths to match your ASM diskgroup or filesystem&lt;/span&gt;

&lt;span class=&quot;kw&quot;&gt;ALTER DATABASE ADD STANDBY LOGFILE&lt;/span&gt; GROUP &lt;span class=&quot;num&quot;&gt;4&lt;/span&gt;
    (&lt;span class=&quot;str&quot;&gt;&#39;/u01/oradata/ORCL_STBY/srl_4.log&#39;&lt;/span&gt;)
    &lt;span class=&quot;kw&quot;&gt;SIZE&lt;/span&gt; &lt;span class=&quot;num&quot;&gt;55&lt;/span&gt;M;

&lt;span class=&quot;kw&quot;&gt;ALTER DATABASE ADD STANDBY LOGFILE&lt;/span&gt; GROUP &lt;span class=&quot;num&quot;&gt;5&lt;/span&gt;
    (&lt;span class=&quot;str&quot;&gt;&#39;/u01/oradata/ORCL_STBY/srl_5.log&#39;&lt;/span&gt;)
    &lt;span class=&quot;kw&quot;&gt;SIZE&lt;/span&gt; &lt;span class=&quot;num&quot;&gt;55&lt;/span&gt;M;

&lt;span class=&quot;kw&quot;&gt;ALTER DATABASE ADD STANDBY LOGFILE&lt;/span&gt; GROUP &lt;span class=&quot;num&quot;&gt;6&lt;/span&gt;
    (&lt;span class=&quot;str&quot;&gt;&#39;/u01/oradata/ORCL_STBY/srl_6.log&#39;&lt;/span&gt;)
    &lt;span class=&quot;kw&quot;&gt;SIZE&lt;/span&gt; &lt;span class=&quot;num&quot;&gt;55&lt;/span&gt;M;

&lt;span class=&quot;cm&quot;&gt;-- ASM example:&lt;/span&gt;
&lt;span class=&quot;cm&quot;&gt;-- ALTER DATABASE ADD STANDBY LOGFILE GROUP 4 (&#39;+RECO&#39;) SIZE 55M;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;h3&gt;Drop and Re-create Undersized SRL Groups&lt;/h3&gt;
&lt;div class=&quot;code-wrap&quot;&gt;
  &lt;div class=&quot;code-hdr&quot;&gt;&lt;span class=&quot;code-lang&quot;&gt;SQL -- Drop Undersized SRL&lt;/span&gt;&lt;button class=&quot;code-copy&quot; onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;&lt;/div&gt;
&lt;pre class=&quot;code-body&quot;&gt;&lt;span class=&quot;cm&quot;&gt;-- Only drop INACTIVE / UNASSIGNED groups; never drop ACTIVE groups&lt;/span&gt;
&lt;span class=&quot;kw&quot;&gt;SELECT&lt;/span&gt; GROUP#, STATUS &lt;span class=&quot;kw&quot;&gt;FROM&lt;/span&gt; V$STANDBY_LOG;

&lt;span class=&quot;kw&quot;&gt;ALTER DATABASE DROP STANDBY LOGFILE&lt;/span&gt; GROUP &lt;span class=&quot;num&quot;&gt;4&lt;/span&gt;;
&lt;span class=&quot;kw&quot;&gt;ALTER DATABASE DROP STANDBY LOGFILE&lt;/span&gt; GROUP &lt;span class=&quot;num&quot;&gt;5&lt;/span&gt;;

&lt;span class=&quot;kw&quot;&gt;ALTER DATABASE ADD STANDBY LOGFILE&lt;/span&gt; GROUP &lt;span class=&quot;num&quot;&gt;4&lt;/span&gt;
    (&lt;span class=&quot;str&quot;&gt;&#39;/u01/oradata/ORCL_STBY/srl_4.log&#39;&lt;/span&gt;) &lt;span class=&quot;kw&quot;&gt;SIZE&lt;/span&gt; &lt;span class=&quot;num&quot;&gt;55&lt;/span&gt;M;

&lt;span class=&quot;kw&quot;&gt;ALTER DATABASE ADD STANDBY LOGFILE&lt;/span&gt; GROUP &lt;span class=&quot;num&quot;&gt;5&lt;/span&gt;
    (&lt;span class=&quot;str&quot;&gt;&#39;/u01/oradata/ORCL_STBY/srl_5.log&#39;&lt;/span&gt;) &lt;span class=&quot;kw&quot;&gt;SIZE&lt;/span&gt; &lt;span class=&quot;num&quot;&gt;55&lt;/span&gt;M;&lt;/pre&gt;
&lt;/div&gt;

&lt;div class=&quot;tip-box&quot;&gt;
  &lt;strong&gt;RAC Primary Note:&lt;/strong&gt; For a RAC primary with 2 threads, add SRL groups for each thread using the THREAD# clause: &lt;code&gt;ALTER DATABASE ADD STANDBY LOGFILE THREAD 2 GROUP 10 ...&lt;/code&gt;. Without per-thread SRLs, Thread 2 redo transport has no SRL to write into.
&lt;/div&gt;

&lt;hr class=&quot;section-transition&quot;&gt;

&lt;h2 id=&quot;fix-mrp&quot;&gt;Step 3: Start or Restart the MRP Process&lt;/h2&gt;

&lt;p&gt;The MRP0 process is the engine that applies redo to standby datafiles. It must be explicitly started unless the standby uses broker with fast-start failover configured.&lt;/p&gt;

&lt;h3&gt;Start MRP in Background (Recommended)&lt;/h3&gt;
&lt;div class=&quot;code-wrap&quot;&gt;
  &lt;div class=&quot;code-hdr&quot;&gt;&lt;span class=&quot;code-lang&quot;&gt;SQL -- Start MRP&lt;/span&gt;&lt;button class=&quot;code-copy&quot; onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;&lt;/div&gt;
&lt;pre class=&quot;code-body&quot;&gt;&lt;span class=&quot;cm&quot;&gt;-- DISCONNECT FROM SESSION keeps MRP running after you log off&lt;/span&gt;
&lt;span class=&quot;cm&quot;&gt;-- Run on standby as SYSDBA&lt;/span&gt;

&lt;span class=&quot;kw&quot;&gt;ALTER DATABASE RECOVER MANAGED STANDBY DATABASE&lt;/span&gt;
    &lt;span class=&quot;kw&quot;&gt;DISCONNECT FROM SESSION&lt;/span&gt;;&lt;/pre&gt;
&lt;/div&gt;

&lt;h3&gt;Stop MRP Cleanly Before Restarting&lt;/h3&gt;
&lt;div class=&quot;code-wrap&quot;&gt;
  &lt;div class=&quot;code-hdr&quot;&gt;&lt;span class=&quot;code-lang&quot;&gt;SQL -- Stop then Restart MRP&lt;/span&gt;&lt;button class=&quot;code-copy&quot; onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;&lt;/div&gt;
&lt;pre class=&quot;code-body&quot;&gt;&lt;span class=&quot;cm&quot;&gt;-- Use CANCEL to stop; never kill MRP with OS kill -9&lt;/span&gt;
&lt;span class=&quot;kw&quot;&gt;ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL&lt;/span&gt;;

&lt;span class=&quot;cm&quot;&gt;-- Wait 30 seconds; confirm MRP0 is gone:&lt;/span&gt;
&lt;span class=&quot;kw&quot;&gt;SELECT&lt;/span&gt; PROCESS, STATUS &lt;span class=&quot;kw&quot;&gt;FROM&lt;/span&gt; V$MANAGED_STANDBY
&lt;span class=&quot;kw&quot;&gt;WHERE&lt;/span&gt;  PROCESS = &lt;span class=&quot;str&quot;&gt;&#39;MRP0&#39;&lt;/span&gt;;

&lt;span class=&quot;cm&quot;&gt;-- Restart:&lt;/span&gt;
&lt;span class=&quot;kw&quot;&gt;ALTER DATABASE RECOVER MANAGED STANDBY DATABASE&lt;/span&gt;
    &lt;span class=&quot;kw&quot;&gt;DISCONNECT FROM SESSION&lt;/span&gt;;&lt;/pre&gt;
&lt;/div&gt;

&lt;div class=&quot;incident-box&quot;&gt;
  &lt;strong&gt;Root Cause I Have Seen Repeatedly:&lt;/strong&gt; A nightly RMAN backup script on the standby that runs CANCEL to pause apply during backup, but fails to restart MRP if the backup errors out. The result is standby redo logs not applying all night, discovered at morning alerting. Fix: wrap the backup script in a shell error trap that always restarts MRP regardless of backup exit code.
&lt;/div&gt;

&lt;h3&gt;Verify MRP Started Correctly&lt;/h3&gt;
&lt;div class=&quot;code-wrap&quot;&gt;
  &lt;div class=&quot;code-hdr&quot;&gt;&lt;span class=&quot;code-lang&quot;&gt;SQL -- Verify MRP&lt;/span&gt;&lt;button class=&quot;code-copy&quot; onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;&lt;/div&gt;
&lt;pre class=&quot;code-body&quot;&gt;&lt;span class=&quot;kw&quot;&gt;SELECT&lt;/span&gt;
    PROCESS,
    STATUS,
    SEQUENCE#,
    BLOCK#,
    DELAY_MINS
&lt;span class=&quot;kw&quot;&gt;FROM&lt;/span&gt;  V$MANAGED_STANDBY
&lt;span class=&quot;kw&quot;&gt;ORDER BY&lt;/span&gt; PROCESS;

&lt;span class=&quot;cm&quot;&gt;-- Expected: MRP0 STATUS=APPLYING_LOG, SEQUENCE# incrementing&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;hr class=&quot;section-transition&quot;&gt;

&lt;h2 id=&quot;fix-dest&quot;&gt;Step 4: Fix LOG_ARCHIVE_DEST Configuration&lt;/h2&gt;

&lt;p&gt;A misconfigured &lt;code&gt;LOG_ARCHIVE_DEST_2&lt;/code&gt; on the primary prevents redo from reaching the standby entirely. The most common error I see is an incorrect VALID_FOR clause that excludes the current redo stream.&lt;/p&gt;

&lt;h3&gt;Check Current Configuration (Primary)&lt;/h3&gt;
&lt;div class=&quot;code-wrap&quot;&gt;
  &lt;div class=&quot;code-hdr&quot;&gt;&lt;span class=&quot;code-lang&quot;&gt;SQL -- Check LOG_ARCHIVE_DEST_2&lt;/span&gt;&lt;button class=&quot;code-copy&quot; onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;&lt;/div&gt;
&lt;pre class=&quot;code-body&quot;&gt;&lt;span class=&quot;kw&quot;&gt;SHOW PARAMETER&lt;/span&gt; log_archive_dest_2;

&lt;span class=&quot;kw&quot;&gt;SELECT&lt;/span&gt; DEST_ID, STATUS, TARGET, ARCHIVER, VALID_NOW, ERROR
&lt;span class=&quot;kw&quot;&gt;FROM&lt;/span&gt;  V$ARCHIVE_DEST_STATUS
&lt;span class=&quot;kw&quot;&gt;WHERE&lt;/span&gt; DEST_ID = &lt;span class=&quot;num&quot;&gt;2&lt;/span&gt;;&lt;/pre&gt;
&lt;/div&gt;

&lt;div class=&quot;compare-wrap&quot;&gt;
  &lt;div class=&quot;compare-col bad&quot;&gt;
    &lt;h4&gt;Wrong Configuration&lt;/h4&gt;
    &lt;ul&gt;
      &lt;li&gt;&lt;code&gt;VALID_FOR=(ONLINE_LOGFILES, ALL_ROLES)&lt;/code&gt;&lt;/li&gt;
      &lt;li&gt;&lt;code&gt;VALID_FOR=(ALL_LOGFILES, STANDBY_ROLE)&lt;/code&gt; excludes primary role&lt;/li&gt;
      &lt;li&gt;No &lt;code&gt;DB_UNIQUE_NAME&lt;/code&gt; when broker is in use&lt;/li&gt;
      &lt;li&gt;&lt;code&gt;REOPEN=0&lt;/code&gt; disables retry on transport failure&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/div&gt;
  &lt;div class=&quot;compare-col good&quot;&gt;
    &lt;h4&gt;Correct Configuration&lt;/h4&gt;
    &lt;ul&gt;
      &lt;li&gt;&lt;code&gt;VALID_FOR=(ALL_LOGFILES, PRIMARY_ROLE)&lt;/code&gt;&lt;/li&gt;
      &lt;li&gt;&lt;code&gt;DB_UNIQUE_NAME=&lt;/code&gt; set to standby unique name&lt;/li&gt;
      &lt;li&gt;&lt;code&gt;REOPEN=300&lt;/code&gt; retries every 5 minutes on failure&lt;/li&gt;
      &lt;li&gt;&lt;code&gt;SERVICE=&lt;/code&gt; matches TNS alias for standby&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;div class=&quot;code-wrap&quot;&gt;
  &lt;div class=&quot;code-hdr&quot;&gt;&lt;span class=&quot;code-lang&quot;&gt;SQL -- Fix LOG_ARCHIVE_DEST_2 (Primary)&lt;/span&gt;&lt;button class=&quot;code-copy&quot; onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;&lt;/div&gt;
&lt;pre class=&quot;code-body&quot;&gt;&lt;span class=&quot;cm&quot;&gt;-- Run on PRIMARY as SYSDBA&lt;/span&gt;
&lt;span class=&quot;cm&quot;&gt;-- Adjust SERVICE and DB_UNIQUE_NAME to match your environment&lt;/span&gt;

&lt;span class=&quot;kw&quot;&gt;ALTER SYSTEM SET&lt;/span&gt; log_archive_dest_2 =
    &lt;span class=&quot;str&quot;&gt;&#39;SERVICE=ORCL_STBY
     ASYNC
     VALID_FOR=(ALL_LOGFILES,PRIMARY_ROLE)
     DB_UNIQUE_NAME=ORCL_STBY
     REOPEN=300
     COMPRESSION=DISABLE&#39;&lt;/span&gt;
    &lt;span class=&quot;kw&quot;&gt;SCOPE=BOTH&lt;/span&gt;;

&lt;span class=&quot;cm&quot;&gt;-- For SYNC (zero data loss): replace ASYNC with SYNC AFFIRM&lt;/span&gt;
&lt;span class=&quot;cm&quot;&gt;-- and add NET_TIMEOUT=30 to prevent hanging the primary&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;hr class=&quot;section-transition&quot;&gt;

&lt;h2 id=&quot;fix-gap&quot;&gt;Step 5: Resolve an Archive Gap&lt;/h2&gt;

&lt;p&gt;An archive gap means the standby is missing one or more archived log files that MRP needs before it can advance. The FAL (Fetch Archive Log) process resolves gaps automatically, but it can fail if FAL parameters are wrong or the primary archive area is full.&lt;/p&gt;

&lt;h3&gt;Detect Gaps&lt;/h3&gt;
&lt;div class=&quot;code-wrap&quot;&gt;
  &lt;div class=&quot;code-hdr&quot;&gt;&lt;span class=&quot;code-lang&quot;&gt;SQL -- V$ARCHIVE_GAP&lt;/span&gt;&lt;button class=&quot;code-copy&quot; onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;&lt;/div&gt;
&lt;pre class=&quot;code-body&quot;&gt;&lt;span class=&quot;kw&quot;&gt;SELECT&lt;/span&gt;
    THREAD#,
    LOW_SEQUENCE#,
    HIGH_SEQUENCE#
&lt;span class=&quot;kw&quot;&gt;FROM&lt;/span&gt;  V$ARCHIVE_GAP;

&lt;span class=&quot;cm&quot;&gt;-- Rows returned = gap exists; archivelogs must be registered before MRP can proceed&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;h3&gt;Register Missing Archivelogs Manually&lt;/h3&gt;
&lt;div class=&quot;code-wrap&quot;&gt;
  &lt;div class=&quot;code-hdr&quot;&gt;&lt;span class=&quot;code-lang&quot;&gt;SQL -- Register Archivelog&lt;/span&gt;&lt;button class=&quot;code-copy&quot; onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;&lt;/div&gt;
&lt;pre class=&quot;code-body&quot;&gt;&lt;span class=&quot;cm&quot;&gt;-- Copy missing archivelog from primary to standby first&lt;/span&gt;
&lt;span class=&quot;cm&quot;&gt;-- Then register on standby:&lt;/span&gt;

&lt;span class=&quot;kw&quot;&gt;ALTER DATABASE REGISTER LOGFILE&lt;/span&gt;
    &lt;span class=&quot;str&quot;&gt;&#39;/u02/arch/1_998_1145678901.dbf&#39;&lt;/span&gt;;

&lt;span class=&quot;kw&quot;&gt;ALTER DATABASE REGISTER LOGFILE&lt;/span&gt;
    &lt;span class=&quot;str&quot;&gt;&#39;/u02/arch/1_999_1145678901.dbf&#39;&lt;/span&gt;;

&lt;span class=&quot;cm&quot;&gt;-- Confirm:&lt;/span&gt;
&lt;span class=&quot;kw&quot;&gt;SELECT&lt;/span&gt; SEQUENCE#, APPLIED, REGISTRAR
&lt;span class=&quot;kw&quot;&gt;FROM&lt;/span&gt;  V$ARCHIVED_LOG
&lt;span class=&quot;kw&quot;&gt;WHERE&lt;/span&gt; SEQUENCE# &lt;span class=&quot;kw&quot;&gt;BETWEEN&lt;/span&gt; &lt;span class=&quot;num&quot;&gt;998&lt;/span&gt; &lt;span class=&quot;kw&quot;&gt;AND&lt;/span&gt; &lt;span class=&quot;num&quot;&gt;1000&lt;/span&gt;
&lt;span class=&quot;kw&quot;&gt;ORDER BY&lt;/span&gt; SEQUENCE#;&lt;/pre&gt;
&lt;/div&gt;

&lt;h3&gt;Fix FAL Parameters (Prevents Future Gaps)&lt;/h3&gt;
&lt;div class=&quot;code-wrap&quot;&gt;
  &lt;div class=&quot;code-hdr&quot;&gt;&lt;span class=&quot;code-lang&quot;&gt;SQL -- FAL Parameters on Standby&lt;/span&gt;&lt;button class=&quot;code-copy&quot; onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;&lt;/div&gt;
&lt;pre class=&quot;code-body&quot;&gt;&lt;span class=&quot;kw&quot;&gt;ALTER SYSTEM SET&lt;/span&gt; fal_server  = &lt;span class=&quot;str&quot;&gt;&#39;ORCL_PRIM&#39;&lt;/span&gt; &lt;span class=&quot;kw&quot;&gt;SCOPE=BOTH&lt;/span&gt;;
&lt;span class=&quot;kw&quot;&gt;ALTER SYSTEM SET&lt;/span&gt; fal_client  = &lt;span class=&quot;str&quot;&gt;&#39;ORCL_STBY&#39;&lt;/span&gt; &lt;span class=&quot;kw&quot;&gt;SCOPE=BOTH&lt;/span&gt;;

&lt;span class=&quot;cm&quot;&gt;-- fal_server = TNS service name for the primary&lt;/span&gt;
&lt;span class=&quot;cm&quot;&gt;-- fal_client = this standby&#39;s TNS service name&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;div class=&quot;production-note&quot;&gt;
  After a 4-hour network outage on a 6 TB standby, I had a gap of 288 archive sequences. FAL automatic recovery handled all 288 in 23 minutes once fal_server was corrected. Always fix FAL parameters first and give the FAL process 10-15 minutes before manually copying archivelogs.
&lt;/div&gt;

&lt;hr class=&quot;section-transition&quot;&gt;

&lt;h2 id=&quot;parallel-apply&quot;&gt;Step 6: Tune Parallel Apply to Burn Down Lag Faster&lt;/h2&gt;

&lt;p&gt;Once MRP is running and SRLs are healthy, the standby may still have accumulated lag to work through. Enabling parallel apply dramatically increases recovery throughput on multi-core standby systems.&lt;/p&gt;

&lt;div class=&quot;code-wrap&quot;&gt;
  &lt;div class=&quot;code-hdr&quot;&gt;&lt;span class=&quot;code-lang&quot;&gt;SQL -- Enable Parallel Apply&lt;/span&gt;&lt;button class=&quot;code-copy&quot; onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;&lt;/div&gt;
&lt;pre class=&quot;code-body&quot;&gt;&lt;span class=&quot;cm&quot;&gt;-- Stop MRP first&lt;/span&gt;
&lt;span class=&quot;kw&quot;&gt;ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL&lt;/span&gt;;

&lt;span class=&quot;cm&quot;&gt;-- Set parallel apply workers (start with 2x CPU count)&lt;/span&gt;
&lt;span class=&quot;kw&quot;&gt;ALTER SYSTEM SET&lt;/span&gt; recovery_parallelism = &lt;span class=&quot;num&quot;&gt;8&lt;/span&gt; &lt;span class=&quot;kw&quot;&gt;SCOPE=BOTH&lt;/span&gt;;

&lt;span class=&quot;cm&quot;&gt;-- Restart MRP with parallel option&lt;/span&gt;
&lt;span class=&quot;kw&quot;&gt;ALTER DATABASE RECOVER MANAGED STANDBY DATABASE&lt;/span&gt;
    &lt;span class=&quot;kw&quot;&gt;USING CURRENT LOGFILE&lt;/span&gt;
    &lt;span class=&quot;kw&quot;&gt;PARALLEL&lt;/span&gt; &lt;span class=&quot;num&quot;&gt;8&lt;/span&gt;
    &lt;span class=&quot;kw&quot;&gt;DISCONNECT FROM SESSION&lt;/span&gt;;&lt;/pre&gt;
&lt;/div&gt;

&lt;div class=&quot;stat-highlight&quot;&gt;
  &lt;span class=&quot;stat-num&quot;&gt;4x&lt;/span&gt;
  &lt;div class=&quot;stat-label&quot;&gt;Apply throughput improvement: moving from serial to parallel=8 on an 8-core standby cleared 38 minutes of lag in 14 minutes vs. an estimated 58 minutes serial.&lt;/div&gt;
&lt;/div&gt;

&lt;div class=&quot;warn-box&quot;&gt;
  &lt;strong&gt;Caution:&lt;/strong&gt; &lt;code&gt;USING CURRENT LOGFILE&lt;/code&gt; is required when SRLs are present. Without it, MRP applies only archived logs and ignores the active SRL, reverting to archivelog-mode apply and reintroducing structural lag.
&lt;/div&gt;

&lt;hr class=&quot;section-transition&quot;&gt;

&lt;h2 id=&quot;verify&quot;&gt;Post-Fix Verification Checklist&lt;/h2&gt;

&lt;p&gt;Run all of these before closing the incident ticket.&lt;/p&gt;

&lt;ul class=&quot;checklist&quot;&gt;
  &lt;li&gt;&lt;strong&gt;MRP0 STATUS = APPLYING_LOG&lt;/strong&gt; in V$MANAGED_STANDBY with incrementing SEQUENCE#&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Apply lag &amp;lt; 30 seconds&lt;/strong&gt; in V$DATAGUARD_STATS (allow 5 min to normalize after restart)&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;All SRL groups STATUS = ACTIVE or UNASSIGNED&lt;/strong&gt; in V$STANDBY_LOG; no INACTIVE&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;V$ARCHIVE_DEST_STATUS DEST_ID=2 STATUS = VALID&lt;/strong&gt; with blank ERROR column&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;V$ARCHIVE_GAP returns zero rows&lt;/strong&gt; after gap resolution&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;DGMGRL show database verbose [standby_name]&lt;/strong&gt; shows no warnings&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Standby alert log&lt;/strong&gt; -- no new ORA-16xxx errors in last 5 minutes&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;code-wrap&quot;&gt;
  &lt;div class=&quot;code-hdr&quot;&gt;&lt;span class=&quot;code-lang&quot;&gt;DGMGRL -- Final Verification&lt;/span&gt;&lt;button class=&quot;code-copy&quot; onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;&lt;/div&gt;
&lt;pre class=&quot;code-body&quot;&gt;DGMGRL&gt; connect sysdg/password@ORCL_PRIM
DGMGRL&gt; show configuration;
DGMGRL&gt; show database verbose ORCL_STBY;

&lt;span class=&quot;cm&quot;&gt;-- Target output:&lt;/span&gt;
&lt;span class=&quot;cm&quot;&gt;-- Database Status: SUCCESS&lt;/span&gt;
&lt;span class=&quot;cm&quot;&gt;-- Apply Lag:       0 seconds&lt;/span&gt;
&lt;span class=&quot;cm&quot;&gt;-- Transport Lag:   0 seconds&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;hr class=&quot;section-transition&quot;&gt;

&lt;h2 id=&quot;what-not-to-do&quot;&gt;What NOT to Do When Standby Redo Logs Are Not Applying&lt;/h2&gt;

&lt;div class=&quot;incident-box&quot;&gt;
  &lt;strong&gt;Do NOT kill MRP with OS-level kill -9.&lt;/strong&gt; Killing MRP at the OS level can corrupt the standby control file&#39;s recovery position, forcing a full resync. Always use &lt;code&gt;ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL&lt;/code&gt;.
&lt;/div&gt;

&lt;div class=&quot;incident-box&quot;&gt;
  &lt;strong&gt;Do NOT assume a snapshot standby conversion fixes apply issues.&lt;/strong&gt; Converting to snapshot standby and back resets apply but does not fix the underlying cause -- SRL misconfiguration or MRP issues will recur immediately after.
&lt;/div&gt;

&lt;div class=&quot;incident-box&quot;&gt;
  &lt;strong&gt;Do NOT add SRL groups while MRP is actively applying.&lt;/strong&gt; While Oracle supports it, I have seen MRP stall for up to 8 minutes while new SRL groups initialize on a busy system. Cancel MRP first, add the SRLs, then restart.
&lt;/div&gt;

&lt;div class=&quot;incident-box&quot;&gt;
  &lt;strong&gt;Do NOT let the FRA fill while SRLs live inside it.&lt;/strong&gt; If SRLs reside inside the Flash Recovery Area and the FRA fills, Oracle cannot write to SRLs, which silently stops RFS and apply. Always size FRA at 3x daily redo volume.
&lt;/div&gt;

&lt;hr class=&quot;section-transition&quot;&gt;

&lt;h2 id=&quot;faq&quot;&gt;Frequently Asked Questions&lt;/h2&gt;
&lt;div class=&quot;faq-list&quot;&gt;

  &lt;div class=&quot;faq-item open&quot;&gt;
    &lt;div class=&quot;faq-q&quot; onclick=&quot;toggleFaq(this)&quot;&gt;Why are standby redo logs not applying in Oracle Data Guard?&lt;span&gt;+&lt;/span&gt;&lt;/div&gt;
    &lt;div class=&quot;faq-a&quot;&gt;Standby redo logs not applying in Oracle Data Guard is most often caused by one of four issues: the MRP process is stopped or was never started, the Standby Redo Log (SRL) groups are missing or misconfigured, a LOG_ARCHIVE_DEST_2 parameter has an incorrect VALID_FOR clause, or there is a redo sequence gap. Run &lt;code&gt;SELECT PROCESS, STATUS FROM V$MANAGED_STANDBY WHERE PROCESS=&#39;MRP0&#39;&lt;/code&gt; as your first diagnostic step.&lt;/div&gt;
  &lt;/div&gt;

  &lt;div class=&quot;faq-item&quot;&gt;
    &lt;div class=&quot;faq-q&quot; onclick=&quot;toggleFaq(this)&quot;&gt;How do I check if standby redo logs are applying in Oracle Data Guard?&lt;span&gt;+&lt;/span&gt;&lt;/div&gt;
    &lt;div class=&quot;faq-a&quot;&gt;Run &lt;code&gt;SELECT PROCESS, STATUS, SEQUENCE# FROM V$MANAGED_STANDBY&lt;/code&gt; on the standby. Look for MRP0 with STATUS = APPLYING_LOG and an incrementing SEQUENCE#. Also check &lt;code&gt;V$DATAGUARD_STATS WHERE NAME=&#39;apply lag&#39;&lt;/code&gt; to confirm lag is near zero. If MRP0 is absent or shows WAIT_FOR_LOG, apply has stalled and you need to investigate SRL and gap status.&lt;/div&gt;
  &lt;/div&gt;

  &lt;div class=&quot;faq-item&quot;&gt;
    &lt;div class=&quot;faq-q&quot; onclick=&quot;toggleFaq(this)&quot;&gt;How many standby redo log groups should I create?&lt;span&gt;+&lt;/span&gt;&lt;/div&gt;
    &lt;div class=&quot;faq-a&quot;&gt;Oracle recommends at least one more SRL group than the number of online redo log groups per thread on the primary. For a single-instance primary with 3 online redo log groups, create 4 SRL groups on the standby. For a 2-node RAC primary with 3 groups per thread, create at least 7 SRL groups total. Each SRL member must be at least as large as the largest online redo log member, with 10% extra space recommended.&lt;/div&gt;
  &lt;/div&gt;

  &lt;div class=&quot;faq-item&quot;&gt;
    &lt;div class=&quot;faq-q&quot; onclick=&quot;toggleFaq(this)&quot;&gt;What does ORA-16766 mean in a Data Guard environment?&lt;span&gt;+&lt;/span&gt;&lt;/div&gt;
    &lt;div class=&quot;faq-a&quot;&gt;ORA-16766 means the redo apply service is disabled on the standby database. This fires when MRP is stopped or crashed unexpectedly. The fix is to confirm SRL groups exist at the correct size, then issue &lt;code&gt;ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION&lt;/code&gt;. Monitor V$MANAGED_STANDBY until MRP0 shows STATUS = APPLYING_LOG. If MRP keeps crashing, check the standby alert log for underlying ORA-600 or ORA-10567 errors.&lt;/div&gt;
  &lt;/div&gt;

  &lt;div class=&quot;faq-item&quot;&gt;
    &lt;div class=&quot;faq-q&quot; onclick=&quot;toggleFaq(this)&quot;&gt;Can I fix Data Guard apply lag without a full resync?&lt;span&gt;+&lt;/span&gt;&lt;/div&gt;
    &lt;div class=&quot;faq-a&quot;&gt;Yes. For most apply-lag incidents caused by MRP outages or SRL misconfiguration, a full resync is not required. Restart MRP, verify SRL status in V$STANDBY_LOG, and check for archive gaps using V$ARCHIVE_GAP. The FAL process automatically fetches missing archivelogs once its parameters are correct. A full resync is only necessary when the standby SCN has diverged from the primary, which typically occurs only after an incomplete recovery or an improperly reversed switchover.&lt;/div&gt;
  &lt;/div&gt;

&lt;/div&gt;

&lt;hr class=&quot;section-transition&quot;&gt;

&lt;div class=&quot;cta-box&quot;&gt;
  &lt;h3&gt;Want the Full Data Guard Troubleshooting Runbook?&lt;/h3&gt;
  &lt;p&gt;Comment &lt;strong&gt;DG&lt;/strong&gt; below and I will send you the production-ready DBA PDF covering SRL, MRP, transport gaps, switchover, and DGMGRL commands -- all in one sheet.&lt;/p&gt;
  &lt;a href=&quot;https://www.youtube.com/@levelup_careers&quot; class=&quot;cta-btn&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Watch on YouTube&lt;/a&gt;
  &lt;a href=&quot;https://linkedin.com/in/chetanyadavvds&quot; class=&quot;cta-btn sec&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Connect on LinkedIn&lt;/a&gt;
&lt;/div&gt;

&lt;h2 id=&quot;related&quot;&gt;Related Reading&lt;/h2&gt;
&lt;div class=&quot;related-grid&quot;&gt;
  &lt;a href=&quot;/oracle-data-guard-switchover-failover&quot; class=&quot;related-card&quot;&gt;
    &lt;div class=&quot;rc-tag&quot;&gt;Data Guard&lt;/div&gt;
    &lt;h4&gt;Oracle Data Guard Switchover vs Failover: Step-by-Step Guide&lt;/h4&gt;
  &lt;/a&gt;
  &lt;a href=&quot;/oracle-data-guard-lag-troubleshooting&quot; class=&quot;related-card&quot;&gt;
    &lt;div class=&quot;rc-tag&quot;&gt;Data Guard&lt;/div&gt;
    &lt;h4&gt;Oracle Data Guard Apply Lag: Root Causes and Fixes&lt;/h4&gt;
  &lt;/a&gt;
  &lt;a href=&quot;/oracle-rac-19c-architecture&quot; class=&quot;related-card&quot;&gt;
    &lt;div class=&quot;rc-tag&quot;&gt;RAC&lt;/div&gt;
    &lt;h4&gt;Oracle 19c RAC Architecture: Complete DBA Guide&lt;/h4&gt;
  &lt;/a&gt;
  &lt;a href=&quot;/oracle-high-availability-solutions&quot; class=&quot;related-card&quot;&gt;
    &lt;div class=&quot;rc-tag&quot;&gt;HA / DR&lt;/div&gt;
    &lt;h4&gt;Oracle High Availability: RAC, Data Guard, GoldenGate Compared&lt;/h4&gt;
  &lt;/a&gt;
  &lt;a href=&quot;/oracle-dba-resume-guide&quot; class=&quot;related-card&quot;&gt;
    &lt;div class=&quot;rc-tag&quot;&gt;Career&lt;/div&gt;
    &lt;h4&gt;Oracle DBA Resume Guide: Get Shortlisted in 2026&lt;/h4&gt;
  &lt;/a&gt;
&lt;/div&gt;

&lt;div class=&quot;author-box&quot;&gt;
  &lt;div class=&quot;author-avatar&quot;&gt;CY&lt;/div&gt;
  &lt;div class=&quot;author-info&quot;&gt;
    &lt;h4&gt;Chetan Yadav&lt;/h4&gt;
    &lt;div class=&quot;author-title&quot;&gt;Senior Oracle and Cloud DBA | Oracle ACE Apprentice | 15+ Years Production Experience&lt;/div&gt;
    &lt;p&gt;I manage large-scale Oracle production environments and share real incidents, fixes, and career guidance through LevelUp Careers. Content covers Oracle 19c/21c/23ai, Data Guard, RAC, performance tuning, and cloud DBA careers.&lt;/p&gt;
    &lt;div class=&quot;author-links&quot;&gt;
      &lt;a href=&quot;https://www.youtube.com/@levelup_careers&quot; class=&quot;author-link&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;YouTube&lt;/a&gt;
      &lt;a href=&quot;https://linkedin.com/in/chetanyadavvds&quot; class=&quot;author-link&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;LinkedIn&lt;/a&gt;
      &lt;a href=&quot;https://www.instagram.com/levelup_careers&quot; class=&quot;author-link&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Instagram&lt;/a&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;div class=&quot;post-footer&quot;&gt;
  &lt;p&gt;LevelUp Careers | Oracle DBA Blog | Chetan Yadav |
    &lt;a href=&quot;https://linkedin.com/in/chetanyadavvds&quot;&gt;LinkedIn&lt;/a&gt; |
    &lt;a href=&quot;https://www.youtube.com/@levelup_careers&quot;&gt;YouTube @levelup_careers&lt;/a&gt;
  &lt;/p&gt;
  &lt;p style=&quot;margin-top:8px;font-size:.75rem&quot;&gt;All SQL tested on Oracle 19c (19.19 RU). Always test in a non-production environment first.&lt;/p&gt;
&lt;/div&gt;

&lt;/div&gt;

&lt;script&gt;
function copyCode(btn){var pre=btn.closest(&#39;.code-wrap&#39;).querySelector(&#39;pre.code-body&#39;);var text=pre.innerText||pre.textContent;navigator.clipboard.writeText(text).then(function(){btn.textContent=&#39;Copied!&#39;;setTimeout(function(){btn.textContent=&#39;Copy&#39;;},2000);})}
function toggleFaq(el){var item=el.closest(&#39;.faq-item&#39;);var isOpen=item.classList.contains(&#39;open&#39;);document.querySelectorAll(&#39;.faq-item&#39;).forEach(function(i){i.classList.remove(&#39;open&#39;);});if(!isOpen)item.classList.add(&#39;open&#39;);}
&lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;</content><link rel='replies' type='application/atom+xml' href='http://chetanyadavds.blogspot.com/feeds/23921234798943885/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://chetanyadavds.blogspot.com/2026/05/standby-redo-logs-not-applying-oracle-data-guard.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/436196721812840248/posts/default/23921234798943885'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/436196721812840248/posts/default/23921234798943885'/><link rel='alternate' type='text/html' href='http://chetanyadavds.blogspot.com/2026/05/standby-redo-logs-not-applying-oracle-data-guard.html' title='Standby Redo Logs Not Applying Oracle Data Guard Fix'/><author><name>Chetan Yadav</name><uri>http://www.blogger.com/profile/02557500437758632199</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiE0TgifWM4l1b3sy_cK2y41bpqyfY1U25-p5IBKkSg8pJLFRvjYr_kF7W_MgsYdc21DutWF9H6qlShQDQspQLbZEQ5CSUA51Wp6Mh9l5Ygd4NPSuQyqwSMrKitCWwSLr0oHBg9TGjxAvAM7TTkkehHLL1MFWg0wSb31CxywQxIokg9pg/s1600/IMG-20251013-WA0038.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-436196721812840248.post-615318369876744458</id><published>2026-05-21T11:00:00.000+05:30</published><updated>2026-05-21T11:00:00.121+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="Beginner Friendly"/><category scheme="http://www.blogger.com/atom/ns#" term="Career Tips"/><category scheme="http://www.blogger.com/atom/ns#" term="Fresher Jobs"/><category scheme="http://www.blogger.com/atom/ns#" term="Job Search"/><category scheme="http://www.blogger.com/atom/ns#" term="LevelUp Careers"/><category scheme="http://www.blogger.com/atom/ns#" term="Resume Writing"/><title type='text'>Fresher Resume Format for Tech Jobs 2026: ATS Tips</title><content type='html'>&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;en&quot;&gt;
&lt;head&gt;
&lt;meta charset=&quot;UTF-8&quot;/&gt;
&lt;meta name=&quot;viewport&quot; content=&quot;width=device-width,initial-scale=1&quot;/&gt;
&lt;title&gt;Fresher Resume Format for Tech Jobs 2026: ATS Tips&lt;/title&gt;
&lt;meta name=&quot;description&quot; content=&quot;Build a fresher resume that passes ATS and gets recruiter callbacks in 2026. Includes structure, impact writing, and copy-ready templates.&quot;/&gt;
&lt;link rel=&quot;canonical&quot; href=&quot;https://levelupcareers.blog/fresher-resume-format-tech-jobs-2026&quot;/&gt;

&lt;!-- Open Graph --&gt;
&lt;meta property=&quot;og:type&quot;        content=&quot;article&quot;/&gt;
&lt;meta property=&quot;og:title&quot;       content=&quot;Fresher Resume Format for Tech Jobs 2026: ATS Tips&quot;/&gt;
&lt;meta property=&quot;og:description&quot; content=&quot;Build a fresher resume that passes ATS and gets recruiter callbacks in 2026. Includes structure, impact writing, and copy-ready templates.&quot;/&gt;
&lt;meta property=&quot;og:url&quot;         content=&quot;https://levelupcareers.blog/fresher-resume-format-tech-jobs-2026&quot;/&gt;
&lt;meta property=&quot;og:image&quot;       content=&quot;https://images.unsplash.com/photo-1586281380349-632531db7ed4?w=1400&amp;h=500&amp;fit=crop&amp;q=85&amp;auto=format&quot;/&gt;
&lt;meta property=&quot;article:author&quot; content=&quot;Chetan Yadav&quot;/&gt;
&lt;meta property=&quot;article:published_time&quot; content=&quot;2026-05-21&quot;/&gt;

&lt;!-- Article Schema --&gt;
&lt;script type=&quot;application/ld+json&quot;&gt;
{
  &quot;@context&quot;:&quot;https://schema.org&quot;,
  &quot;@type&quot;:&quot;Article&quot;,
  &quot;headline&quot;:&quot;Fresher Resume Format for Tech Jobs 2026: ATS Tips&quot;,
  &quot;description&quot;:&quot;Build a fresher resume that passes ATS and gets recruiter callbacks in 2026. Includes structure, impact writing, and copy-ready templates.&quot;,
  &quot;image&quot;:&quot;https://images.unsplash.com/photo-1586281380349-632531db7ed4?w=1400&amp;h=500&amp;fit=crop&amp;q=85&amp;auto=format&quot;,
  &quot;datePublished&quot;:&quot;2026-05-21&quot;,
  &quot;author&quot;:{
    &quot;@type&quot;:&quot;Person&quot;,
    &quot;name&quot;:&quot;Chetan Yadav&quot;,
    &quot;jobTitle&quot;:&quot;Senior Oracle and Cloud DBA, Oracle ACE Apprentice&quot;,
    &quot;url&quot;:&quot;https://www.linkedin.com/in/chetanyadav-dba/&quot;
  },
  &quot;publisher&quot;:{
    &quot;@type&quot;:&quot;Organization&quot;,
    &quot;name&quot;:&quot;LevelUp Careers&quot;
  }
}
&lt;/script&gt;

&lt;!-- FAQPage Schema --&gt;
&lt;script type=&quot;application/ld+json&quot;&gt;
{
  &quot;@context&quot;:&quot;https://schema.org&quot;,
  &quot;@type&quot;:&quot;FAQPage&quot;,
  &quot;mainEntity&quot;:[
    {
      &quot;@type&quot;:&quot;Question&quot;,
      &quot;name&quot;:&quot;What is the best fresher resume format for tech jobs in 2026?&quot;,
      &quot;acceptedAnswer&quot;:{
        &quot;@type&quot;:&quot;Answer&quot;,
        &quot;text&quot;:&quot;A reverse-chronological, single-column, one-page format works best. The order should be: Summary, Skills, Projects, Education, Certifications. ATS parsers reject multi-column layouts, graphics, and tables. Use standard section headings and match keywords from the job description exactly.&quot;
      }
    },
    {
      &quot;@type&quot;:&quot;Question&quot;,
      &quot;name&quot;:&quot;Does fresher resume format matter for ATS screening in India?&quot;,
      &quot;acceptedAnswer&quot;:{
        &quot;@type&quot;:&quot;Answer&quot;,
        &quot;text&quot;:&quot;Yes. Most Indian tech companies and MNCs use ATS tools. A resume with columns, icons, or non-standard headings is parsed incorrectly and rejected before a human sees it. A plain, keyword-matched .docx or single-column PDF scores significantly higher.&quot;
      }
    },
    {
      &quot;@type&quot;:&quot;Question&quot;,
      &quot;name&quot;:&quot;What should a fresher put on a resume with no experience?&quot;,
      &quot;acceptedAnswer&quot;:{
        &quot;@type&quot;:&quot;Answer&quot;,
        &quot;text&quot;:&quot;Projects are the direct replacement for experience. Build 2-3 projects tied to your target role, host them on GitHub, and write each one as Problem, Action, Outcome. This is more valuable to a recruiter than 10 certifications with no applied work. One real project beats three Udemy certificates.&quot;
      }
    },
    {
      &quot;@type&quot;:&quot;Question&quot;,
      &quot;name&quot;:&quot;How long should a fresher resume be in 2026?&quot;,
      &quot;acceptedAnswer&quot;:{
        &quot;@type&quot;:&quot;Answer&quot;,
        &quot;text&quot;:&quot;One page. Always. In hiring discussions I have been part of, multi-page fresher resumes are almost never read past page one. If you cannot fit on one page, you are including irrelevant content. Remove hobbies, outdated school-level achievements, and the objective statement.&quot;
      }
    },
    {
      &quot;@type&quot;:&quot;Question&quot;,
      &quot;name&quot;:&quot;Should I use a creative resume template as a fresher applying to tech companies?&quot;,
      &quot;acceptedAnswer&quot;:{
        &quot;@type&quot;:&quot;Answer&quot;,
        &quot;text&quot;:&quot;No. Creative templates with columns, charts, and graphics fail ATS parsing. Save the creative design for your portfolio site. Your resume needs to be ATS-readable first. A plain, well-structured resume with strong project bullets outperforms a visually impressive one that gets filtered out before a human sees it.&quot;
      }
    }
  ]
}
&lt;/script&gt;

&lt;style&gt;
/* ── Blogger: hide duplicate post title ── */
.post-title{display:none!important}

/* ── Base ── */
*{box-sizing:border-box;margin:0;padding:0}
body{font-family:&#39;Segoe UI&#39;,system-ui,sans-serif;background:#f8fafc;color:#1e293b;line-height:1.7}
a{color:#2563eb;text-decoration:none}
a:hover{text-decoration:underline}

/* ── Hero ── */
.hero{background:linear-gradient(135deg,#0f172a 0%,#1e3a5f 50%,#0f172a 100%);color:#fff;padding:56px 40px 44px;text-align:center}
.hero h1{font-size:clamp(1.6rem,3.5vw,2.5rem);font-weight:700;line-height:1.25;margin-bottom:14px;letter-spacing:-0.02em}
.hero .subtitle{font-size:1.1rem;color:#93c5fd;margin-bottom:22px;font-weight:400}
.meta-pills{display:flex;flex-wrap:wrap;gap:10px;justify-content:center}
.meta-pill{background:rgba(255,255,255,0.1);border:1px solid rgba(255,255,255,0.2);border-radius:20px;padding:5px 14px;font-size:.82rem;color:#cbd5e1}
.meta-pill.audience{background:#2563eb;border-color:#2563eb;color:#fff;font-weight:600}

/* ── Hero image ── */
.hero-img{width:100%;max-height:380px;object-fit:cover;display:block}

/* ── Layout ── */
.container{max-width:860px;margin:0 auto;padding:0 20px}
.post-body{padding:40px 0 60px}

/* ── Section spacing ── */
h2{font-size:1.5rem;font-weight:700;color:#0f172a;margin:40px 0 16px;padding-left:14px;border-left:4px solid #2563eb}
h3{font-size:1.15rem;font-weight:600;color:#1e3a5f;margin:28px 0 12px}
p{margin-bottom:16px;font-size:1rem;color:#334155}
ul,ol{margin:0 0 18px 24px;color:#334155}
li{margin-bottom:8px}

/* ── Info boxes ── */
.info-box{background:#fffbeb;border-left:4px solid #f59e0b;border-radius:8px;padding:20px 22px;margin:28px 0}
.info-box strong{color:#92400e}
.tip-box{background:#eff6ff;border-left:4px solid #2563eb;border-radius:8px;padding:20px 22px;margin:28px 0}
.tip-box strong{color:#1e3a5f}
.incident-box{background:#fef2f2;border-left:4px solid #dc2626;border-radius:8px;padding:20px 22px;margin:28px 0}
.incident-box strong{color:#991b1b}
.success-box{background:#f0fdf4;border-left:4px solid #16a34a;border-radius:8px;padding:20px 22px;margin:28px 0}
.success-box strong{color:#14532d}

/* ── Production note (hiring) ── */
.production-note{background:#1e293b;border:1px solid #f59e0b;border-radius:8px;padding:20px 22px;margin:28px 0;color:#f8fafc;position:relative}
.production-note::before{content:&quot;FROM HIRING&quot;;position:absolute;top:-12px;left:18px;background:#f59e0b;color:#1e293b;font-size:.72rem;font-weight:700;padding:2px 10px;border-radius:4px;letter-spacing:.08em}

/* ── Stats ── */
.stat-highlight{background:linear-gradient(135deg,#0f172a,#1e3a5f);border-radius:12px;padding:28px 32px;margin:28px 0;text-align:center;color:#fff}
.stat-highlight .stat-num{font-size:3.2rem;font-weight:700;color:#2563eb;line-height:1}
.stat-highlight .stat-label{font-size:1rem;color:#93c5fd;margin-top:6px}
.stats-row{display:flex;gap:20px;flex-wrap:wrap;margin:28px 0}
.stats-row .stat-highlight{flex:1;min-width:180px;padding:22px 18px}
.stats-row .stat-num{font-size:2.4rem}

/* ── Compare wrap ── */
.compare-wrap{display:grid;grid-template-columns:1fr 1fr;gap:20px;margin:28px 0}
@media(max-width:600px){.compare-wrap{grid-template-columns:1fr}}
.compare-before{background:#fef2f2;border:1.5px solid #dc2626;border-radius:8px;padding:20px}
.compare-after{background:#f0fdf4;border:1.5px solid #16a34a;border-radius:8px;padding:20px}
.compare-before h4{color:#dc2626;font-size:.85rem;text-transform:uppercase;letter-spacing:.08em;margin-bottom:12px}
.compare-after h4{color:#16a34a;font-size:.85rem;text-transform:uppercase;letter-spacing:.08em;margin-bottom:12px}
.compare-before p,.compare-before li{color:#7f1d1d;font-size:.93rem}
.compare-after p,.compare-after li{color:#14532d;font-size:.93rem}

/* ── Tags ── */
.tag-good{display:inline-block;background:#dcfce7;color:#14532d;border-radius:4px;padding:2px 8px;font-size:.78rem;font-weight:600;margin-right:4px}
.tag-bad{display:inline-block;background:#fee2e2;color:#991b1b;border-radius:4px;padding:2px 8px;font-size:.78rem;font-weight:600;margin-right:4px}
.tag-warn{display:inline-block;background:#fef9c3;color:#713f12;border-radius:4px;padding:2px 8px;font-size:.78rem;font-weight:600;margin-right:4px}
.tag-rule{display:inline-block;background:#dbeafe;color:#1e3a5f;border-radius:4px;padding:2px 8px;font-size:.78rem;font-weight:600;margin-right:4px}
.tag-cause{display:inline-block;background:#dc2626;color:#fff;border-radius:12px;padding:2px 10px;font-size:.75rem;font-weight:600;margin-right:6px}
.tag-fix{display:inline-block;background:#16a34a;color:#fff;border-radius:12px;padding:2px 10px;font-size:.75rem;font-weight:600;margin-right:6px}

/* ── Error badge ── */
.error-badge{border:1.5px solid #dc2626;background:#fef2f2;border-radius:8px;padding:16px 18px;margin:14px 0}
.error-badge .error-title{font-weight:700;color:#dc2626;margin-bottom:6px}
.error-badge p{color:#7f1d1d;margin:0;font-size:.93rem}

/* ── Code block (templates) ── */
.code-block{background:#0f172a;border-radius:10px;overflow:hidden;margin:28px 0;font-family:&#39;Courier New&#39;,monospace}
.code-header{background:#1e293b;padding:12px 18px;display:flex;justify-content:space-between;align-items:center;border-bottom:1px solid #334155}
.code-header span{color:#94a3b8;font-size:.82rem;font-weight:600;letter-spacing:.06em;text-transform:uppercase}
.copy-btn{background:#2563eb;color:#fff;border:none;padding:6px 14px;border-radius:5px;font-size:.78rem;cursor:pointer;font-weight:600}
.copy-btn:hover{background:#1d4ed8}
.code-content{padding:22px 20px;color:#e2e8f0;font-size:.85rem;white-space:pre;overflow-x:auto;line-height:1.65}

/* ── Checklist ── */
.checklist{background:#f8fafc;border:1.5px solid #e2e8f0;border-radius:10px;padding:24px 28px;margin:32px 0}
.checklist h3{margin-top:0;margin-bottom:16px;color:#0f172a}
.checklist ol{margin-left:22px}
.checklist li{margin-bottom:12px;font-size:.97rem;color:#1e293b}
.checklist li strong{color:#1e3a5f}

/* ── TOC ── */
.toc{background:#f1f5f9;border:1.5px solid #2563eb;border-radius:10px;padding:22px 28px;margin:32px 0}
.toc h2{font-size:1.1rem;margin:0 0 14px;padding:0;border:none;color:#0f172a}
.toc ol{margin-left:20px}
.toc li{margin-bottom:8px;font-size:.93rem}

/* ── Section transition ── */
.section-transition{border:none;border-top:2px dashed #e2e8f0;margin:44px 0}

/* ── Diagram section ── */
.diagram-section{background:#fff;border-radius:12px;box-shadow:0 4px 24px rgba(0,0,0,.08);overflow:hidden;margin:36px 0;padding:4px}
.diagram-section img{width:100%;display:block;border-radius:8px}
.diagram-caption{text-align:center;font-size:.83rem;color:#64748b;padding:10px 0 6px}

/* ── CTA box ── */
.cta-box{background:linear-gradient(135deg,#0f172a,#1e3a5f);border-radius:12px;padding:36px 32px;margin:44px 0;text-align:center;color:#fff}
.cta-box h3{font-size:1.3rem;margin-bottom:10px;color:#fff}
.cta-box p{color:#93c5fd;margin-bottom:18px;font-size:.97rem}
.cta-box .cta-keyword{display:inline-block;background:#2563eb;color:#fff;font-size:1.4rem;font-weight:700;padding:10px 28px;border-radius:8px;letter-spacing:.04em;margin-top:6px}

/* ── Related reading ── */
.related-reading{background:#f1f5f9;border-radius:10px;padding:24px 28px;margin:36px 0}
.related-reading h3{margin-top:0;color:#0f172a;margin-bottom:14px}
.related-reading ul{margin-left:20px}
.related-reading li{margin-bottom:10px;font-size:.95rem}

/* ── Author box ── */
.author-box{background:#fff;border:1.5px solid #e2e8f0;border-radius:12px;padding:26px 28px;margin:36px 0;display:flex;gap:22px;align-items:flex-start}
.author-box .author-info h4{margin:0 0 6px;font-size:1.05rem;color:#0f172a}
.author-box .author-info p{margin:0 0 10px;font-size:.9rem;color:#475569}

/* ── Post footer ── */
.post-footer{border-top:1.5px solid #e2e8f0;padding:22px 0 10px;margin-top:36px;display:flex;flex-wrap:wrap;gap:12px;justify-content:space-between;align-items:center;font-size:.85rem;color:#64748b}
.tag-pill{background:#e2e8f0;color:#334155;padding:4px 12px;border-radius:20px;font-size:.8rem}

/* ── FAQ ── */
.faq-section h2{margin-bottom:20px}
.faq-item{border-bottom:1px solid #e2e8f0;padding:18px 0}
.faq-item:last-child{border-bottom:none}
.faq-item summary{font-weight:600;color:#0f172a;cursor:pointer;font-size:1rem;list-style:none;display:flex;justify-content:space-between;align-items:center}
.faq-item summary::after{content:&quot;+&quot;;font-size:1.3rem;color:#2563eb;margin-left:12px;flex-shrink:0}
details[open] summary::after{content:&quot;x&quot;}
.faq-item p{margin:12px 0 0;color:#475569;font-size:.94rem}

/* ── Responsive ── */
@media(max-width:600px){
  .hero{padding:36px 20px 30px}
  h2{font-size:1.25rem}
  .stats-row{flex-direction:column}
  .author-box{flex-direction:column}
}
&lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;

&lt;!-- ═══════════════ HERO ═══════════════ --&gt;
&lt;div class=&quot;hero&quot;&gt;
  &lt;h1&gt;Fresher Resume Format for Tech Jobs 2026&lt;/h1&gt;
  &lt;p class=&quot;subtitle&quot;&gt;What ATS filters, what recruiters actually read, and the exact structure that gets callbacks in India&#39;s tech hiring market&lt;/p&gt;
  &lt;div class=&quot;meta-pills&quot;&gt;
    &lt;span class=&quot;meta-pill&quot;&gt;May 21, 2026&lt;/span&gt;
    &lt;span class=&quot;meta-pill&quot;&gt;Chetan Yadav&lt;/span&gt;
    &lt;span class=&quot;meta-pill&quot;&gt;9 min read&lt;/span&gt;
    &lt;span class=&quot;meta-pill audience&quot;&gt;Freshers&lt;/span&gt;
    &lt;span class=&quot;meta-pill&quot;&gt;Resume Writing&lt;/span&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;!-- Hero Image --&gt;
&lt;img
  class=&quot;hero-img&quot;
  src=&quot;https://images.unsplash.com/photo-1586281380349-632531db7ed4?w=1400&amp;h=500&amp;fit=crop&amp;q=85&amp;auto=format&quot;
  alt=&quot;fresher resume format tech jobs 2026 guide laptop desk&quot;
  loading=&quot;lazy&quot;
/&gt;

&lt;!-- ═══════════════ BODY ═══════════════ --&gt;
&lt;div class=&quot;container&quot;&gt;
&lt;div class=&quot;post-body&quot;&gt;

&lt;!-- WHO THIS IS FOR --&gt;
&lt;div class=&quot;info-box&quot;&gt;
  &lt;strong&gt;Who this is for:&lt;/strong&gt; Final-year students, recent graduates, and career switchers applying to tech companies in India and globally in 2026. If you have sent 50+ applications and heard nothing back, the problem is almost certainly your resume format and ATS compatibility, not your skills. After reading this post you will have: the correct fresher resume structure, a copy-ready template, the five most common mistakes to fix today, and an action checklist you can execute this week.
&lt;/div&gt;

&lt;!-- Blogger more tag --&gt;
&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;

&lt;!-- TABLE OF CONTENTS --&gt;
&lt;nav class=&quot;toc&quot; aria-label=&quot;Table of Contents&quot;&gt;
  &lt;h2&gt;Table of Contents&lt;/h2&gt;
  &lt;ol&gt;
    &lt;li&gt;&lt;a href=&quot;#why-resumes-fail&quot;&gt;Why Fresher Resumes Fail Before a Human Reads Them&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#correct-format&quot;&gt;The Correct Fresher Resume Format for Tech Jobs 2026&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#step-by-step&quot;&gt;Step-by-Step: Build Your Resume This Week&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#mistakes&quot;&gt;5 Mistakes That Guarantee Rejection&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#templates&quot;&gt;Copy-Ready Templates and Before vs After Examples&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#faq&quot;&gt;Frequently Asked Questions&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#checklist&quot;&gt;Action Checklist&lt;/a&gt;&lt;/li&gt;
  &lt;/ol&gt;
&lt;/nav&gt;

&lt;!-- ════════════════════════════════════
     SECTION 1: WHY RESUMES FAIL
════════════════════════════════════ --&gt;
&lt;h2 id=&quot;why-resumes-fail&quot;&gt;Why Fresher Resumes Fail Before a Human Reads Them&lt;/h2&gt;

&lt;p&gt;Last quarter I was sitting in on a hiring discussion for a backend developer opening. The recruiter had 200 applications in the queue. She spent eight seconds on each resume during the first pass. Of those 200, 148 were filtered out by the ATS before she even saw them. The remaining 52 were reviewed manually. Of those, 38 were rejected in the first scroll. The shortlist was 14 people. Not because 186 candidates lacked skills. Because 186 candidates did not understand how the screening process actually works.&lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;fresher resume format for tech jobs 2026&lt;/strong&gt; is not about design or length or putting your photo in the corner. It is about surviving two filters in sequence: the automated keyword scan and the eight-second human glance. Most resumes fail the first filter before anyone reads a single line.&lt;/p&gt;

&lt;div class=&quot;stats-row&quot;&gt;
  &lt;div class=&quot;stat-highlight&quot;&gt;
    &lt;div class=&quot;stat-num&quot;&gt;75%&lt;/div&gt;
    &lt;div class=&quot;stat-label&quot;&gt;of resumes rejected by ATS before a recruiter sees them (Jobscan, 2025)&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class=&quot;stat-highlight&quot;&gt;
    &lt;div class=&quot;stat-num&quot;&gt;8 sec&lt;/div&gt;
    &lt;div class=&quot;stat-label&quot;&gt;average time a recruiter spends on first manual pass of a fresher resume&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class=&quot;stat-highlight&quot;&gt;
    &lt;div class=&quot;stat-num&quot;&gt;#1&lt;/div&gt;
    &lt;div class=&quot;stat-label&quot;&gt;cause of ATS rejection: keyword mismatch between resume and job description&lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;In hiring discussions I have been part of, the single biggest reason freshers in India are not getting callbacks is not their CGPA or their college. It is that their resume is formatted in a way the ATS cannot parse correctly, or that it is missing the exact keywords the system is scanning for. A two-column resume built in a Canva template looks professional to a human and is completely unreadable to an ATS. The name field gets mixed with the skills section. The section headings do not match what the ATS expects. The resume scores near zero and is rejected automatically.&lt;/p&gt;

&lt;div class=&quot;production-note&quot;&gt;
  &lt;p&gt;Having reviewed hundreds of fresher profiles across multiple hiring cycles, the pattern is consistent: candidates with 7+ certifications and no projects get screened out faster than candidates with one live GitHub project and a clean, keyword-matched resume. The ATS does not count certifications. It matches keywords.&lt;/p&gt;
&lt;/div&gt;

&lt;hr class=&quot;section-transition&quot;/&gt;

&lt;!-- ════════════════════════════════════
     SECTION 2: CORRECT FORMAT
════════════════════════════════════ --&gt;
&lt;h2 id=&quot;correct-format&quot;&gt;The Correct Fresher Resume Format for Tech Jobs 2026&lt;/h2&gt;

&lt;p&gt;The format that consistently passes ATS filters and survives the first human scan follows a specific structure. Every section has a job. Nothing is decorative.&lt;/p&gt;

&lt;h3&gt;The Section Order That Works&lt;/h3&gt;

&lt;ol&gt;
  &lt;li&gt;&lt;strong&gt;Name and Contact (top):&lt;/strong&gt; Name, email, mobile, LinkedIn URL, GitHub or portfolio link. No photo, no date of birth, no address beyond city. These fields belong in the main text body, never in a header or footer, because ATS parsers frequently skip header and footer regions entirely.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Professional Summary (40 words max):&lt;/strong&gt; Not an objective. A summary. Objective says what you want. Summary says what you offer. One sentence: role target + primary skill + one proof point. This is the most underused section on fresher resumes and the first thing a recruiter reads after your name.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Technical Skills:&lt;/strong&gt; A clean table or grouped list. Split by category: Languages, Frameworks, Databases, Tools, Cloud Platforms. Match the exact terms from the job descriptions you are targeting. Not &quot;good knowledge of Java&quot; but simply &quot;Java.&quot; ATS systems match exact keywords.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Projects (2-3 projects):&lt;/strong&gt; This replaces Experience for freshers. Each project follows the same structure: the problem it solved, the technology and action you took, and the measurable outcome. Include a GitHub or live URL on every project. Recruiters click these.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Education:&lt;/strong&gt; Degree, college name, graduation year, CGPA (include only if 7.5 or above). If you have relevant coursework, add 2-3 course names in a single line. No need to list every subject.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Certifications:&lt;/strong&gt; Name, platform, year. Only include certifications directly relevant to the role. A cloud certification on a backend developer resume is relevant. A digital marketing certificate is not.&lt;/li&gt;
&lt;/ol&gt;

&lt;div class=&quot;tip-box&quot;&gt;
  &lt;strong&gt;Format rules that directly affect ATS score:&lt;/strong&gt; Single column only. Save as .docx or text-clean PDF. Use standard section headings: Experience, Education, Skills, Projects. No tables for layout. No text boxes. No graphics or icons. No coloured backgrounds. Arial, Calibri, or similar readable font at 10-12pt. Margins between 0.5 and 1 inch on all sides.
&lt;/div&gt;

&lt;!-- Diagram --&gt;
&lt;div class=&quot;diagram-section&quot;&gt;
  &lt;img src=&quot;PASTE_YOUR_BLOGGER_DIAGRAM_URL_HERE&quot; alt=&quot;fresher resume format tech jobs 2026 structure diagram&quot; loading=&quot;lazy&quot;/&gt;
  &lt;div class=&quot;diagram-caption&quot;&gt;Resume structure breakdown, ATS rules, before/after comparison, and 5-step action plan for fresher tech resumes in 2026&lt;/div&gt;
&lt;/div&gt;

&lt;hr class=&quot;section-transition&quot;/&gt;

&lt;!-- ════════════════════════════════════
     SECTION 3: STEP BY STEP
════════════════════════════════════ --&gt;
&lt;h2 id=&quot;step-by-step&quot;&gt;Step-by-Step: Build Your Resume This Week&lt;/h2&gt;

&lt;h3&gt;Step 1: Collect Three Target Job Descriptions&lt;/h3&gt;

&lt;p&gt;Before you write a single word on your resume, open three job postings on LinkedIn or Naukri that match the role you want. Copy the entire requirements and responsibilities sections into a text file. Highlight every technical term that appears more than once across all three JDs. These repeated terms are your keyword targets. Your resume must contain these exact phrases in your Skills section and in your project bullets. This is not gaming the system. This is basic relevance matching.&lt;/p&gt;

&lt;p&gt;&lt;span class=&quot;tag-rule&quot;&gt;Rule&lt;/span&gt; Do not start writing your resume before you have done this. Without target keywords, your resume is written in the dark.&lt;/p&gt;

&lt;h3&gt;Step 2: Write Your Projects in PAO Format&lt;/h3&gt;

&lt;p&gt;PAO stands for Problem, Action, Outcome. Every project bullet follows this pattern. The mistake most freshers make is listing what the project was instead of what it did. Recruiters do not want to know what the project is called. They want to know what problem it solved, what you built, and what the result was.&lt;/p&gt;

&lt;div class=&quot;compare-wrap&quot;&gt;
  &lt;div class=&quot;compare-before&quot;&gt;
    &lt;h4&gt;Weak Version (what most freshers write)&lt;/h4&gt;
    &lt;ul&gt;
      &lt;li&gt;Built a student attendance management system using Java and MySQL&lt;/li&gt;
      &lt;li&gt;Created a web application for the college fest&lt;/li&gt;
      &lt;li&gt;Developed a chatbot using Python&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/div&gt;
  &lt;div class=&quot;compare-after&quot;&gt;
    &lt;h4&gt;Strong Version (PAO format)&lt;/h4&gt;
    &lt;ul&gt;
      &lt;li&gt;Automated manual attendance tracking for 800-student college; built Java/Spring Boot REST API with MySQL, reducing admin time by 4 hours/week. GitHub: [link]&lt;/li&gt;
      &lt;li&gt;Built event registration portal serving 1,200 users over 3-day college fest; deployed on AWS EC2. Zero downtime during event.&lt;/li&gt;
      &lt;li&gt;Built FAQ chatbot for college helpdesk using Python and Rasa; deflected 60% of common queries without human intervention.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;h3&gt;Step 3: Write a Targeted Summary, Not an Objective&lt;/h3&gt;

&lt;p&gt;The Objective section has been obsolete in tech hiring for at least five years. Recruiters skip it. Replace it with a three-line Summary that tells them exactly who you are and why they should read further. The format: current status + primary technical strength + one proof point from your projects or internships.&lt;/p&gt;

&lt;div class=&quot;code-block&quot;&gt;
  &lt;div class=&quot;code-header&quot;&gt;
    &lt;span&gt;SUMMARY TEMPLATE&lt;/span&gt;
    &lt;button class=&quot;copy-btn&quot; onclick=&quot;copyCode(&#39;code-summary&#39;)&quot;&gt;Copy&lt;/button&gt;
  &lt;/div&gt;
  &lt;pre id=&quot;code-summary&quot; class=&quot;code-content&quot;&gt;Final-year Computer Science graduate (graduating June 2026) with hands-on
experience in Java, Spring Boot, and REST API development. Built 3 live
projects on GitHub including a scalable task management API handling
10K+ requests. Targeting backend developer roles at product companies.

--- Customise these fields ---
[Graduation month/year]
[Your primary technical stack: Python/Django, React/Node, Java/Spring Boot]
[Your top project outcome: stars, users, scale, performance gain]
[Role and company type you are targeting]&lt;/pre&gt;
&lt;/div&gt;

&lt;h3&gt;Step 4: Build a Clean Skills Section&lt;/h3&gt;

&lt;p&gt;Group skills by category. Do not list them as a comma-separated paragraph. A grouped list is easier to scan in eight seconds and parses correctly in ATS. Only list skills you can answer questions about in an interview. If you list Docker on your resume, expect a Docker question in the screening call.&lt;/p&gt;

&lt;h3&gt;Step 5: Run Through a Free ATS Checker Before Applying&lt;/h3&gt;

&lt;p&gt;Jobscan (free tier) and Resume Worded (free tier) let you paste your resume and a job description and get an ATS compatibility score. Do this before every application. A score below 60% means you are almost certainly getting filtered out. Adjust keywords until you are above 75% for every role you care about.&lt;/p&gt;

&lt;p&gt;&lt;span class=&quot;tag-warn&quot;&gt;Warning&lt;/span&gt; Do not keyword-stuff. Paste the same keyword 15 times in white text. ATS systems have evolved to penalise this and some employers actively flag it.&lt;/p&gt;

&lt;hr class=&quot;section-transition&quot;/&gt;

&lt;!-- ════════════════════════════════════
     SECTION 4: MISTAKES
════════════════════════════════════ --&gt;
&lt;h2 id=&quot;mistakes&quot;&gt;5 Mistakes That Guarantee Rejection&lt;/h2&gt;

&lt;p&gt;These patterns repeat across every hiring cycle without exception. They are not character flaws. They come from outdated advice, college placement cell templates from 2015, and no one ever directly telling freshers what actually gets filtered.&lt;/p&gt;

&lt;div class=&quot;error-badge&quot;&gt;
  &lt;div class=&quot;error-title&quot;&gt;&lt;span class=&quot;tag-cause&quot;&gt;Mistake 1&lt;/span&gt; The Objective Statement&lt;/div&gt;
  &lt;p&gt;&quot;To obtain a challenging position in a reputed organisation where I can utilise my skills and grow professionally.&quot; No recruiter has ever read this and thought positively. It says nothing. It takes up the most valuable real estate on your resume. Replace it with a targeted summary immediately.&lt;/p&gt;
&lt;/div&gt;

&lt;div class=&quot;error-badge&quot;&gt;
  &lt;div class=&quot;error-title&quot;&gt;&lt;span class=&quot;tag-cause&quot;&gt;Mistake 2&lt;/span&gt; One Resume for Every Application&lt;/div&gt;
  &lt;p&gt;ATS systems score your resume based on how well it matches the specific job description. A single resume sent to 200 jobs will score low on all of them. You do not need 200 different resumes. You need 3-4 targeted versions, one for each role type you are applying to: backend developer, data analyst, frontend developer, DevOps. Adjust keywords for each.&lt;/p&gt;
&lt;/div&gt;

&lt;div class=&quot;error-badge&quot;&gt;
  &lt;div class=&quot;error-title&quot;&gt;&lt;span class=&quot;tag-cause&quot;&gt;Mistake 3&lt;/span&gt; Creative Templates with Columns and Graphics&lt;/div&gt;
  &lt;p&gt;Canva templates, Novoresume two-column layouts, and visually impressive designs with skill bars and icons fail ATS parsing. The parser reads left to right, column by column, and mixes your name with your skills. The output is garbled and the resume is rejected. Plain single-column format only for applications going through any portal or applicant tracking system.&lt;/p&gt;
&lt;/div&gt;

&lt;div class=&quot;error-badge&quot;&gt;
  &lt;div class=&quot;error-title&quot;&gt;&lt;span class=&quot;tag-cause&quot;&gt;Mistake 4&lt;/span&gt; Skills That Are Not Skills&lt;/div&gt;
  &lt;p&gt;&quot;Good communication,&quot; &quot;team player,&quot; &quot;MS Word,&quot; &quot;Photoshop,&quot; &quot;hard working.&quot; These are not technical skills. They waste space, dilute your keyword density, and signal to the recruiter that you do not understand what the role requires. Every skill on your resume should be something an interviewer could ask a technical question about.&lt;/p&gt;
&lt;/div&gt;

&lt;div class=&quot;error-badge&quot;&gt;
  &lt;div class=&quot;error-title&quot;&gt;&lt;span class=&quot;tag-cause&quot;&gt;Mistake 5&lt;/span&gt; Three Pages with No Projects&lt;/div&gt;
  &lt;p&gt;A three-page fresher resume padded with hobbies, school-level achievements from 2019, and detailed descriptions of every college club activity is a red flag. Recruiters expect freshers to have one page. If you cannot fit in one page, you are including irrelevant content. Cut ruthlessly. Keep what is relevant to the role you are applying for.&lt;/p&gt;
&lt;/div&gt;

&lt;hr class=&quot;section-transition&quot;/&gt;

&lt;!-- ════════════════════════════════════
     SECTION 5: TEMPLATES
════════════════════════════════════ --&gt;
&lt;h2 id=&quot;templates&quot;&gt;Copy-Ready Templates and Before vs After Examples&lt;/h2&gt;

&lt;p&gt;The template below is a complete one-page fresher resume skeleton in plain text format. It is ATS-clean, keyword-ready, and works for any tech role. Personalise the fields in brackets, replace with your actual project data, and run it through an ATS checker before applying.&lt;/p&gt;

&lt;div class=&quot;code-block&quot;&gt;
  &lt;div class=&quot;code-header&quot;&gt;
    &lt;span&gt;FRESHER RESUME TEMPLATE (ATS-Clean, 2026)&lt;/span&gt;
    &lt;button class=&quot;copy-btn&quot; onclick=&quot;copyCode(&#39;code-resume&#39;)&quot;&gt;Copy&lt;/button&gt;
  &lt;/div&gt;
  &lt;pre id=&quot;code-resume&quot; class=&quot;code-content&quot;&gt;YOUR FULL NAME
[city], India | [mobile] | [email] | linkedin.com/in/[yourname] | github.com/[yourname]

SUMMARY
[Role target] with expertise in [primary skill 1] and [primary skill 2].
Built [number] live projects including [one-line project description].
Targeting [role type] roles at [company type: product company / MNC / startup].

TECHNICAL SKILLS
Languages:     [Java / Python / JavaScript / C++]
Frameworks:    [Spring Boot / Django / React / Node.js]
Databases:     [MySQL / PostgreSQL / MongoDB]
Tools:         [Git, GitHub, VS Code, Postman, Docker]
Cloud:         [AWS / GCP / Azure — only if you have used them]

PROJECTS
[Project Name]                                           [GitHub URL]
[Problem statement in one line — what was broken or missing]
Built [what you built] using [tech stack]; achieved [measurable outcome].
[Metric if available: users, performance improvement, stars, scale]

[Project Name]                                           [GitHub URL]
[Problem → Action → Outcome in 2-3 bullets]

EDUCATION
[Degree, e.g. B.Tech in Computer Science]
[College Name], [City] | [Year of passing] | CGPA: [X.X/10]
Relevant coursework: [Data Structures, DBMS, OS, CN — pick 3-4 relevant]

CERTIFICATIONS
[Certification Name] | [Platform: AWS / Oracle / Google / Coursera] | [Year]
[Certification Name] | [Platform] | [Year]

-- Remove any section that is empty. One page total. --&lt;/pre&gt;
&lt;/div&gt;

&lt;h3&gt;Project Bullet Before vs After&lt;/h3&gt;

&lt;div class=&quot;compare-wrap&quot;&gt;
  &lt;div class=&quot;compare-before&quot;&gt;
    &lt;h4&gt;&lt;span class=&quot;tag-bad&quot;&gt;Weak&lt;/span&gt; Most Freshers Submit This&lt;/h4&gt;
    &lt;p&gt;&lt;strong&gt;Resume Screening Tool&lt;/strong&gt;&lt;/p&gt;
    &lt;p&gt;Made a web application that helps recruiters screen resumes. Used Python and HTML. Worked in a team of 3.&lt;/p&gt;
  &lt;/div&gt;
  &lt;div class=&quot;compare-after&quot;&gt;
    &lt;h4&gt;&lt;span class=&quot;tag-good&quot;&gt;Strong&lt;/span&gt; What Gets Shortlisted&lt;/h4&gt;
    &lt;p&gt;&lt;strong&gt;Resume ATS Scorer&lt;/strong&gt; &amp;mdash; github.com/yourname/ats-scorer&lt;/p&gt;
    &lt;p&gt;Built a keyword-matching tool to score resumes against job descriptions; used Python/NLTK and Flask REST API. Tested with 500 resume-JD pairs. Accuracy: 84%. Used by 3 classmates during campus placement season.&lt;/p&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;div class=&quot;success-box&quot;&gt;
  &lt;strong&gt;What changes when you apply this:&lt;/strong&gt; In the hiring cycle I was reviewing, a candidate from a Tier-3 college with no internship experience got shortlisted for a product company because their resume had two well-written GitHub projects and a summary that matched the JD. The recruiter flagged it in the discussion specifically because the project descriptions were outcome-focused and the links were live. College and CGPA were not the deciding factor.
&lt;/div&gt;

&lt;hr class=&quot;section-transition&quot;/&gt;

&lt;!-- ════════════════════════════════════
     FAQ
════════════════════════════════════ --&gt;
&lt;section class=&quot;faq-section&quot; id=&quot;faq&quot;&gt;
&lt;h2&gt;Frequently Asked Questions&lt;/h2&gt;

&lt;div class=&quot;faq-item&quot;&gt;
  &lt;details&gt;
    &lt;summary&gt;What is the best fresher resume format for tech jobs in 2026?&lt;/summary&gt;
    &lt;p&gt;A reverse-chronological, single-column, one-page format is the correct choice. The section order should be: Summary, Skills, Projects, Education, Certifications. ATS parsers reject multi-column layouts, graphics, and tables. Use standard section headings and match keywords from the job description exactly. Save as .docx or a text-clean single-column PDF.&lt;/p&gt;
  &lt;/details&gt;
&lt;/div&gt;

&lt;div class=&quot;faq-item&quot;&gt;
  &lt;details&gt;
    &lt;summary&gt;Does fresher resume format matter for ATS screening in India in 2026?&lt;/summary&gt;
    &lt;p&gt;Yes, it is the primary filter. Most Indian tech companies, MNCs, and global product firms hiring in India use ATS tools including Workday, Greenhouse, and Taleo. A resume with columns, icons, or non-standard headings is parsed incorrectly and rejected before a human ever sees it. A plain, keyword-matched resume consistently scores higher and passes to human review.&lt;/p&gt;
  &lt;/details&gt;
&lt;/div&gt;

&lt;div class=&quot;faq-item&quot;&gt;
  &lt;details&gt;
    &lt;summary&gt;What should a fresher put on a resume with no experience?&lt;/summary&gt;
    &lt;p&gt;Projects are the direct replacement for work experience. Build 2-3 projects tied to your target role, host them on GitHub, and write each one using the Problem, Action, Outcome format. This is more valuable to a recruiter than ten certifications with no applied work. One live project with a working demo link outperforms three Udemy completion certificates in an ATS scan and in a recruiter&#39;s first pass.&lt;/p&gt;
  &lt;/details&gt;
&lt;/div&gt;

&lt;div class=&quot;faq-item&quot;&gt;
  &lt;details&gt;
    &lt;summary&gt;How long should a fresher resume be in 2026?&lt;/summary&gt;
    &lt;p&gt;One page. Always. In hiring discussions I have been part of, multi-page fresher resumes are almost never read past the first page. If you cannot fit your resume on one page, you are including irrelevant content. Remove hobbies, the objective statement, outdated school-level achievements, and any certification unrelated to the target role.&lt;/p&gt;
  &lt;/details&gt;
&lt;/div&gt;

&lt;div class=&quot;faq-item&quot;&gt;
  &lt;details&gt;
    &lt;summary&gt;Should I use a creative Canva or Novoresume template as a fresher applying to tech companies?&lt;/summary&gt;
    &lt;p&gt;No. Creative templates with two columns, skill bars, and icons fail ATS parsing. The parser reads left to right and mixes content from adjacent columns. Your name can end up merged with your skills section. Save the design for your portfolio site. Your resume needs to be ATS-readable first. A plain, well-structured resume with strong project bullets consistently outperforms a visually impressive one that gets filtered before a human sees it.&lt;/p&gt;
  &lt;/details&gt;
&lt;/div&gt;

&lt;/section&gt;

&lt;hr class=&quot;section-transition&quot;/&gt;

&lt;!-- ════════════════════════════════════
     ACTION CHECKLIST
════════════════════════════════════ --&gt;
&lt;div class=&quot;checklist&quot; id=&quot;checklist&quot;&gt;
  &lt;h3&gt;Action Checklist: Do This This Week&lt;/h3&gt;
  &lt;ol&gt;
    &lt;li&gt;&lt;strong&gt;Collect 3 target JDs&lt;/strong&gt; from LinkedIn or Naukri for the exact role you want. Copy every repeated technical keyword into a list.&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Rebuild your Skills section&lt;/strong&gt; to match those exact keywords verbatim. Group by category: Languages, Frameworks, Databases, Tools, Cloud.&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Write or rewrite 2-3 project bullets&lt;/strong&gt; in Problem, Action, Outcome format. Add GitHub or live demo links to every project.&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Delete the Objective statement.&lt;/strong&gt; Replace it with a 40-word targeted Summary: role target + primary skill + one proof point.&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Convert to single-column format.&lt;/strong&gt; If you are using a Canva or two-column template, switch to a plain single-column layout now.&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Run through Jobscan or Resume Worded&lt;/strong&gt; (free tier) against each JD you care about. Target a score above 75% before applying.&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Cut to one page.&lt;/strong&gt; Remove hobbies, outdated achievements, and certifications irrelevant to the target role.&lt;/li&gt;
    &lt;li&gt;&lt;strong&gt;Check that your LinkedIn URL and GitHub URL are active&lt;/strong&gt; and match what is on your resume. Recruiters click these.&lt;/li&gt;
  &lt;/ol&gt;
&lt;/div&gt;

&lt;!-- CTA BOX --&gt;
&lt;div class=&quot;cta-box&quot;&gt;
  &lt;h3&gt;Want a Free Resume Review?&lt;/h3&gt;
  &lt;p&gt;Drop a comment below with the word &lt;strong&gt;RESUME&lt;/strong&gt; and I will share specific feedback on the most common mistake I see in fresher tech resumes right now. I read every comment.&lt;/p&gt;
  &lt;span class=&quot;cta-keyword&quot;&gt;RESUME&lt;/span&gt;
&lt;/div&gt;

&lt;!-- RELATED READING --&gt;
&lt;div class=&quot;related-reading&quot;&gt;
  &lt;h3&gt;Related Reading&lt;/h3&gt;
  &lt;ul&gt;
    &lt;li&gt;&lt;a href=&quot;/linkedin-profile-tips-freshers-2026&quot;&gt;How to optimise your LinkedIn profile as a fresher before applying to tech jobs in 2026&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;/fresher-interview-prep-tech-companies-india&quot;&gt;Interview preparation checklist for freshers targeting product companies in India&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;/certifications-that-actually-matter-tech-jobs-2026&quot;&gt;Which certifications actually improve your shortlist rate in tech hiring 2026&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;/job-search-strategy-freshers-india&quot;&gt;Job search strategy for freshers in India: beyond Naukri and LinkedIn Easy Apply&lt;/a&gt;&lt;/li&gt;
  &lt;/ul&gt;
&lt;/div&gt;

&lt;!-- AUTHOR BOX --&gt;
&lt;div class=&quot;author-box&quot;&gt;
  &lt;div class=&quot;author-info&quot;&gt;
    &lt;h4&gt;Chetan Yadav&lt;/h4&gt;
    &lt;p&gt;Senior Oracle and Cloud DBA | 15+ years production experience | Oracle ACE Apprentice | LevelUp Careers&lt;/p&gt;
    &lt;p&gt;Chetan has reviewed hundreds of fresher profiles across multiple hiring cycles and has been part of hiring discussions at both large enterprises and growth-stage tech companies. He writes career guidance specifically for freshers and early-career professionals who are missing the direct, practitioner-level information that actually changes outcomes.&lt;/p&gt;
    &lt;div class=&quot;author-links&quot;&gt;
      &lt;a class=&quot;author-link author-link--linkedin&quot; href=&quot;https://www.linkedin.com/in/chetanyadavvds/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;
        &lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot; aria-hidden=&quot;true&quot;&gt;&lt;path d=&quot;M20.447 20.452H17.01v-5.569c0-1.328-.027-3.037-1.852-3.037-1.853 0-2.136 1.445-2.136 2.939v5.667H9.584V9h3.298v1.561h.046c.477-.9 1.637-1.85 3.37-1.85 3.601 0 4.267 2.37 4.267 5.455v6.286zM5.337 7.433a1.914 1.914 0 1 1 0-3.828 1.914 1.914 0 0 1 0 3.828zm1.65 13.019H3.685V9h3.302v11.452zM22.225 0H1.771C.792 0 0 .774 0 1.729v20.542C0 23.227.792 24 1.771 24h20.451C23.2 24 24 23.227 24 22.271V1.729C24 .774 23.2 0 22.222 0h.003z&quot;/&gt;&lt;/svg&gt;
        LinkedIn
      &lt;/a&gt;
      &lt;a class=&quot;author-link author-link--telegram&quot; href=&quot;http://t.me/LevelUp_Careers&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;
        &lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot; aria-hidden=&quot;true&quot;&gt;&lt;path d=&quot;M11.944 0A12 12 0 0 0 0 12a12 12 0 0 0 12 12 12 12 0 0 0 12-12A12 12 0 0 0 12 0a12 12 0 0 0-.056 0zm4.962 7.224c.1-.002.321.023.465.14a.506.506 0 0 1 .171.325c.016.093.036.306.02.472-.18 1.898-.962 6.502-1.36 8.627-.168.9-.499 1.201-.82 1.23-.696.065-1.225-.46-1.9-.902-1.056-.693-1.653-1.124-2.678-1.8-1.185-.78-.417-1.21.258-1.91.177-.184 3.247-2.977 3.307-3.23.007-.032.014-.15-.056-.212s-.174-.041-.249-.024c-.106.024-1.793 1.14-5.061 3.345-.48.33-.913.49-1.302.48-.428-.008-1.252-.241-1.865-.44-.752-.245-1.349-.374-1.297-.789.027-.216.325-.437.893-.663 3.498-1.524 5.83-2.529 6.998-3.014 3.332-1.386 4.025-1.627 4.476-1.635z&quot;/&gt;&lt;/svg&gt;
        Telegram
      &lt;/a&gt;
      &lt;a class=&quot;author-link author-link--whatsapp&quot; href=&quot;https://whatsapp.com/channel/0029Vb714M1IyPtQtcQNMq3R&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;
        &lt;svg width=&quot;16&quot; height=&quot;16&quot; viewBox=&quot;0 0 24 24&quot; fill=&quot;currentColor&quot; aria-hidden=&quot;true&quot;&gt;&lt;path d=&quot;M17.472 14.382c-.297-.149-1.758-.867-2.03-.967-.273-.099-.471-.148-.67.15-.197.297-.767.966-.94 1.164-.173.199-.347.223-.644.075-.297-.15-1.255-.463-2.39-1.475-.883-.788-1.48-1.761-1.653-2.059-.173-.297-.018-.458.13-.606.134-.133.298-.347.446-.52.149-.174.198-.298.298-.497.099-.198.05-.371-.025-.52-.075-.149-.669-1.612-.916-2.207-.242-.579-.487-.5-.669-.51a12.8 12.8 0 0 0-.57-.01c-.198 0-.52.074-.792.372-.272.297-1.04 1.016-1.04 2.479 0 1.462 1.065 2.875 1.213 3.074.149.198 2.096 3.2 5.077 4.487.709.306 1.262.489 1.694.625.712.227 1.36.195 1.871.118.571-.085 1.758-.719 2.006-1.413.248-.694.248-1.289.173-1.413-.074-.124-.272-.198-.57-.347m-5.421 7.403h-.004a9.87 9.87 0 0 1-5.031-1.378l-.361-.214-3.741.982.998-3.648-.235-.374a9.86 9.86 0 0 1-1.51-5.26c.001-5.45 4.436-9.884 9.888-9.884 2.64 0 5.122 1.03 6.988 2.898a9.825 9.825 0 0 1 2.893 6.994c-.003 5.45-4.437 9.884-9.885 9.884m8.413-18.297A11.815 11.815 0 0 0 12.05 0C5.495 0 .16 5.335.157 11.892c0 2.096.547 4.142 1.588 5.945L.057 24l6.305-1.654a11.882 11.882 0 0 0 5.683 1.448h.005c6.554 0 11.89-5.335 11.893-11.893a11.821 11.821 0 0 0-3.48-8.413z&quot;/&gt;&lt;/svg&gt;
        WhatsApp Channel
      &lt;/a&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;
 

&lt;!-- POST FOOTER --&gt;
&lt;div class=&quot;post-footer&quot;&gt;
  &lt;div&gt;
    &lt;span class=&quot;tag-pill&quot;&gt;Career Tips&lt;/span&gt;
    &lt;span class=&quot;tag-pill&quot;&gt;Resume Writing&lt;/span&gt;
    &lt;span class=&quot;tag-pill&quot;&gt;Fresher Jobs&lt;/span&gt;
    &lt;span class=&quot;tag-pill&quot;&gt;Job Search&lt;/span&gt;
    &lt;span class=&quot;tag-pill&quot;&gt;LevelUp Careers&lt;/span&gt;
  &lt;/div&gt;
  &lt;div&gt;Share: &lt;a href=&quot;#&quot;&gt;LinkedIn&lt;/a&gt; &amp;bull; &lt;a href=&quot;#&quot;&gt;Twitter/X&lt;/a&gt; &amp;bull; &lt;a href=&quot;#&quot;&gt;WhatsApp&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;&lt;!-- /post-body --&gt;
&lt;/div&gt;&lt;!-- /container --&gt;

&lt;script&gt;
function copyCode(id) {
  const el = document.getElementById(id);
  if (!el) return;
  const text = el.innerText || el.textContent;
  navigator.clipboard.writeText(text).then(function() {
    const btn = el.closest(&#39;.code-block&#39;).querySelector(&#39;.copy-btn&#39;);
    if (btn) { btn.textContent = &#39;Copied!&#39;; setTimeout(function(){btn.textContent=&#39;Copy&#39;;}, 2000); }
  });
}
&lt;/script&gt;

&lt;/body&gt;
&lt;/html&gt;</content><link rel='replies' type='application/atom+xml' href='http://chetanyadavds.blogspot.com/feeds/615318369876744458/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://chetanyadavds.blogspot.com/2026/05/fresher-resume-format-tech-jobs-2026.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/436196721812840248/posts/default/615318369876744458'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/436196721812840248/posts/default/615318369876744458'/><link rel='alternate' type='text/html' href='http://chetanyadavds.blogspot.com/2026/05/fresher-resume-format-tech-jobs-2026.html' title='Fresher Resume Format for Tech Jobs 2026: ATS Tips'/><author><name>Chetan Yadav</name><uri>http://www.blogger.com/profile/02557500437758632199</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiE0TgifWM4l1b3sy_cK2y41bpqyfY1U25-p5IBKkSg8pJLFRvjYr_kF7W_MgsYdc21DutWF9H6qlShQDQspQLbZEQ5CSUA51Wp6Mh9l5Ygd4NPSuQyqwSMrKitCWwSLr0oHBg9TGjxAvAM7TTkkehHLL1MFWg0wSb31CxywQxIokg9pg/s1600/IMG-20251013-WA0038.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-436196721812840248.post-7096055892977472188</id><published>2026-05-11T11:00:00.009+05:30</published><updated>2026-05-11T11:00:00.116+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="Data Guard"/><category scheme="http://www.blogger.com/atom/ns#" term="High Availability"/><category scheme="http://www.blogger.com/atom/ns#" term="LevelUp Careers"/><category scheme="http://www.blogger.com/atom/ns#" term="Oracle 19c"/><category scheme="http://www.blogger.com/atom/ns#" term="Oracle DBA"/><category scheme="http://www.blogger.com/atom/ns#" term="Production DBA"/><title type='text'>MRP Process Not Running in Data Guard: Fix in Oracle 19c</title><content type='html'>&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;en&quot;&gt;
&lt;head&gt;
&lt;meta charset=&quot;UTF-8&quot;&gt;
&lt;title&gt;MRP Process Not Running in Data Guard: Fix It Step-by-Step (Oracle 19c)&lt;/title&gt;
&lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;
&lt;meta name=&quot;description&quot; content=&quot;Fix MRP process not running in Oracle Data Guard 19c. Covers 5 root causes, DGMGRL diagnosis, SRL creation, broker state fix and auto-start trigger. Real DBA guide.&quot;&gt;
&lt;meta name=&quot;keywords&quot; content=&quot;mrp process not running data guard, MRP stopped oracle 19c, managed recovery process not running, data guard apply stopped, ora-16766 mrp fix&quot;&gt;
&lt;meta name=&quot;author&quot; content=&quot;Chetan Yadav&quot;&gt;
&lt;link rel=&quot;canonical&quot; href=&quot;https://chetanyadavds.blogspot.com/2026/04/mrp-process-not-running-data-guard-fix&quot;&gt;

&lt;meta property=&quot;og:title&quot; content=&quot;MRP Process Not Running in Data Guard: Fix It Step-by-Step (Oracle 19c)&quot;&gt;
&lt;meta property=&quot;og:description&quot; content=&quot;Fix the MRP process not running error in Oracle Data Guard 19c with 5 root cause fixes, DGMGRL commands, SRL creation and auto-start trigger.&quot;&gt;
&lt;meta property=&quot;og:type&quot; content=&quot;article&quot;&gt;
&lt;meta property=&quot;og:image&quot; content=&quot;https://images.unsplash.com/photo-1558494949-ef010cbdcc31?w=1200&amp;h=630&amp;fit=crop&amp;q=85&quot;&gt;

&lt;script type=&quot;application/ld+json&quot;&gt;
{
  &quot;@context&quot;: &quot;https://schema.org&quot;,
  &quot;@type&quot;: &quot;TechArticle&quot;,
  &quot;headline&quot;: &quot;MRP Process Not Running in Data Guard: Fix It Step-by-Step (Oracle 19c)&quot;,
  &quot;description&quot;: &quot;Fix MRP process not running in Oracle Data Guard 19c. Covers 5 root causes, DGMGRL diagnosis, SRL creation, broker state fix and auto-start trigger.&quot;,
  &quot;author&quot;: {
    &quot;@type&quot;: &quot;Person&quot;,
    &quot;name&quot;: &quot;Chetan Yadav&quot;,
    &quot;jobTitle&quot;: &quot;Senior Oracle and Cloud DBA&quot;,
    &quot;url&quot;: &quot;https://www.linkedin.com/in/chetanyadavvds/&quot;
  },
  &quot;publisher&quot;: {
    &quot;@type&quot;: &quot;Organization&quot;,
    &quot;name&quot;: &quot;LevelUp Careers&quot;,
    &quot;url&quot;: &quot;https://chetanyadavds.blogspot.com&quot;
  },
  &quot;datePublished&quot;: &quot;2026-04-01&quot;,
  &quot;dateModified&quot;: &quot;2026-04-01&quot;
}
&lt;/script&gt;

&lt;script type=&quot;application/ld+json&quot;&gt;
{
  &quot;@context&quot;: &quot;https://schema.org&quot;,
  &quot;@type&quot;: &quot;FAQPage&quot;,
  &quot;mainEntity&quot;: [
    {
      &quot;@type&quot;: &quot;Question&quot;,
      &quot;name&quot;: &quot;Why is the MRP process not running in Oracle Data Guard?&quot;,
      &quot;acceptedAnswer&quot;: {
        &quot;@type&quot;: &quot;Answer&quot;,
        &quot;text&quot;: &quot;The MRP process stops in Oracle Data Guard for five main reasons: manual cancellation during maintenance, missing Standby Redo Logs preventing real-time apply, Data Guard Broker setting apply state to OFF, protection mode conflict causing MRP abort, or no auto-start after standby instance crash. Each cause has a different fix command.&quot;
      }
    },
    {
      &quot;@type&quot;: &quot;Question&quot;,
      &quot;name&quot;: &quot;How do I restart the MRP process in Oracle Data Guard 19c?&quot;,
      &quot;acceptedAnswer&quot;: {
        &quot;@type&quot;: &quot;Answer&quot;,
        &quot;text&quot;: &quot;Run on the standby: ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION; Then verify with: SELECT process, status FROM v$managed_standby WHERE process=&#39;MRP0&#39;; If using Data Guard Broker, run in DGMGRL: EDIT DATABASE standby_db SET STATE=&#39;APPLY-ON&#39;;&quot;
      }
    },
    {
      &quot;@type&quot;: &quot;Question&quot;,
      &quot;name&quot;: &quot;What is the difference between MRP not running and ORA-16766?&quot;,
      &quot;acceptedAnswer&quot;: {
        &quot;@type&quot;: &quot;Answer&quot;,
        &quot;text&quot;: &quot;They describe the same condition from different perspectives. ORA-16766 is the error code Oracle reports in DGMGRL SHOW CONFIGURATION output. MRP not running is the underlying technical reason for that error. Both mean the Managed Recovery Process on the standby has stopped and redo is no longer being applied.&quot;
      }
    },
    {
      &quot;@type&quot;: &quot;Question&quot;,
      &quot;name&quot;: &quot;Why does MRP stop immediately after I restart it?&quot;,
      &quot;acceptedAnswer&quot;: {
        &quot;@type&quot;: &quot;Answer&quot;,
        &quot;text&quot;: &quot;Recurring MRP stop after restart points to three causes: Data Guard Broker has apply set to OFF and overrides your manual restart (fix via DGMGRL), missing Standby Redo Logs cause MRP to fail on start (create SRLs first), or Maximum Protection mode with an unstable standby connection causes repeated abort (lower to Maximum Availability).&quot;
      }
    },
    {
      &quot;@type&quot;: &quot;Question&quot;,
      &quot;name&quot;: &quot;How do I prevent MRP from stopping after a standby reboot?&quot;,
      &quot;acceptedAnswer&quot;: {
        &quot;@type&quot;: &quot;Answer&quot;,
        &quot;text&quot;: &quot;Create an AFTER STARTUP database trigger on the standby that checks the database role and automatically runs ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT. Alternatively, enable Data Guard Broker with dg_broker_start=TRUE and set the database state to APPLY-ON, which makes the broker auto-restart MRP after any restart.&quot;
      }
    }
  ]
}
&lt;/script&gt;

&lt;style&gt;
*{margin:0;padding:0;box-sizing:border-box}
body{background:#fff;color:#333;font-family:Arial,Helvetica,sans-serif;font-size:16px;line-height:1.7}
.post-title,.entry-title,h1.post-title,h3.post-title{display:none!important}

.hero-header{background:linear-gradient(135deg,#1e3a5f 0%,#7c1c1c 50%,#1e3a5f 100%);color:#fff;padding:60px 40px;width:100%}
.hero-header-content{max-width:1200px;margin:0 auto;padding:0 20px}
.hero-header h1{font-size:42px;font-weight:700;color:#fff;line-height:1.3;margin-bottom:20px}
.hero-subtitle{font-size:20px;font-weight:300;color:#fca5a5;opacity:.95;margin-bottom:30px}
.hero-meta{display:flex;gap:30px;align-items:center;flex-wrap:wrap;font-size:15px;color:#fecaca}
.hero-meta-item{display:flex;align-items:center;gap:8px}

.hero-image-section{width:100%;margin:0;padding:0;overflow:hidden;background:#000}
.hero-image-section img{width:100%;height:auto;display:block;max-height:480px;object-fit:cover;object-position:center center}

.main-content-wrapper{width:100%;background:#fff}
.container{max-width:800px;margin:0 auto;padding:30px 20px;background:#fff}

.reading-time-badge{display:inline-block;background:linear-gradient(135deg,#dc2626 0%,#991b1b 100%);color:#fff;padding:12px 28px;border-radius:50px;font-size:15px;font-weight:500;margin-bottom:30px;box-shadow:0 4px 12px rgba(220,38,38,.3)}
.page-tagline{color:#666;font-size:15px;font-style:italic;text-align:center;margin-bottom:35px}

.diagram-section{width:100%;margin:28px 0;overflow:hidden;border-radius:10px;box-shadow:0 4px 16px rgba(0,0,0,.12)}
.diagram-section img{width:100%;height:auto;display:block}
.diagram-caption{background:#f8f9fa;border-top:1px solid #e0e0e0;padding:10px 16px;font-size:13px;color:#666;font-style:italic}

.section-transition{border:none;border-top:2px dashed #fecaca;margin:40px 0}

.toc{background:#fef2f2;border-left:4px solid #dc2626;padding:28px 32px;margin:35px 0;border-radius:8px;box-shadow:0 1px 3px rgba(0,0,0,.05)}
.toc-header{display:flex;align-items:center;gap:10px;font-size:24px;font-weight:bold;color:#000;margin-bottom:20px}
.toc ol{margin-left:20px;line-height:1.9;counter-reset:toc-counter;list-style:none}
.toc ol li{counter-increment:toc-counter;margin:12px 0;font-size:16px;padding-bottom:12px;border-bottom:1px solid #fecaca;transition:all .2s ease}
.toc ol li:last-child{border-bottom:none}
.toc ol li:hover{padding-left:8px}
.toc ol li::before{content:counter(toc-counter) &quot;. &quot;;font-weight:600;color:#dc2626;margin-right:8px}
.toc a{color:#dc2626;text-decoration:none}
.toc a:hover{text-decoration:underline}

h2{font-size:28px;font-weight:bold;color:#000;margin:45px 0 20px;line-height:1.3}
h3{font-size:22px;font-weight:600;color:#333;margin:30px 0 15px}
p{margin:16px 0;color:#333;line-height:1.7}
ul,ol{margin:18px 0 18px 35px;color:#333;line-height:1.7}
ul li,ol li{margin:10px 0}
strong{font-weight:bold;color:#333}
em{font-style:italic}
a{color:#dc2626;text-decoration:none}
a:hover{text-decoration:underline}

.tag-good{display:inline-block;background:#e6f4ea;color:#137333;border:1px solid #a8d5b5;border-radius:4px;padding:1px 8px;font-size:13px;font-weight:600;margin-right:6px;vertical-align:middle}
.tag-bad{display:inline-block;background:#fce8e6;color:#c5221f;border:1px solid #f5a8a4;border-radius:4px;padding:1px 8px;font-size:13px;font-weight:600;margin-right:6px;vertical-align:middle}
.tag-rule{display:inline-block;background:#eff6ff;color:#1d4ed8;border:1px solid #93c5fd;border-radius:4px;padding:1px 8px;font-size:13px;font-weight:600;margin-right:6px;vertical-align:middle}
.tag-cause{display:inline-block;background:#fef2f2;color:#991b1b;border:1px solid #fca5a5;border-radius:4px;padding:2px 10px;font-size:12px;font-weight:700;margin-right:6px;vertical-align:middle}
.tag-fix{display:inline-block;background:#f0fdf4;color:#15803d;border:1px solid #86efac;border-radius:4px;padding:2px 10px;font-size:12px;font-weight:700;margin-right:6px;vertical-align:middle}

.code-container{position:relative;margin:24px 0}
.code-header{background:#1e1b2e;color:#fff;padding:10px 16px;border-radius:8px 8px 0 0;display:flex;justify-content:space-between;align-items:center;font-size:14px}
.code-label{font-weight:500}
.copy-btn{background:#dc2626;color:#fff;border:none;padding:6px 14px;border-radius:5px;cursor:pointer;font-size:13px;transition:background .2s;font-family:Arial,sans-serif}
.copy-btn:hover{background:#b91c1c}
.copy-btn.copied{background:#10b981}
.code-block{background:#f8f9fa;border:1px solid #e0e0e0;border-radius:0 0 8px 8px;padding:18px 20px;margin:0;overflow-x:auto;font-family:&#39;Courier New&#39;,Courier,monospace;font-size:14px;line-height:1.7;white-space:pre;tab-size:4}
code{background:#f8f9fa;padding:2px 6px;border-radius:3px;font-family:&#39;Courier New&#39;,monospace;font-size:14px;color:#dc2626}

.info-box{background:#fffbeb;border-left:4px solid #f59e0b;padding:18px 22px;border-radius:0 8px 8px 0;margin:25px 0}
.info-box strong{color:#92400e}
.tip-box{background:#fef2f2;border-left:4px solid #dc2626;padding:18px 22px;border-radius:0 8px 8px 0;margin:25px 0}
.tip-box strong{color:#991b1b}
.incident-box{background:#fef2f2;border-left:4px solid #ef4444;padding:18px 22px;border-radius:0 8px 8px 0;margin:25px 0}
.incident-box strong{color:#991b1b}
.success-box{background:#f0fdf4;border-left:4px solid #22c55e;padding:18px 22px;border-radius:0 8px 8px 0;margin:25px 0}
.success-box strong{color:#15803d}
.production-note{background:#fff8f0;border:2px solid #f59e0b;border-radius:10px;padding:20px 24px;margin:28px 0;position:relative}
.production-note::before{content:&quot;FROM PRODUCTION&quot;;position:absolute;top:-13px;left:20px;background:#f59e0b;color:#fff;font-size:11px;font-weight:700;padding:2px 10px;border-radius:4px;letter-spacing:.08em}
.production-note p{margin:0;color:#333;font-size:15px;line-height:1.7}

.cta-box{background:linear-gradient(135deg,#1e1b2e 0%,#7c1c1c 100%);border-radius:12px;padding:32px 36px;margin:40px 0;text-align:center}
.cta-box h3{color:#fff;font-size:22px;margin-bottom:12px}
.cta-box p{color:#fca5a5;font-size:15px;margin-bottom:20px}
.cta-box .cta-keyword{display:inline-block;background:#fff;color:#dc2626;font-weight:700;font-size:20px;padding:8px 24px;border-radius:6px;letter-spacing:.04em}

table{width:100%;border-collapse:collapse;margin:25px 0;background:#fff;border:1px solid #e0e0e0}
thead{background:#1e1b2e}
th{padding:12px;text-align:left;font-weight:bold;color:#fff;border-bottom:2px solid #e0e0e0;font-size:15px}
td{padding:12px;border-bottom:1px solid #e0e0e0;color:#333;font-size:15px}
tr:last-child td{border-bottom:none}
tbody tr:hover{background:#fef2f2}

.checklist{background:#fef2f2;border:1px solid #fecaca;border-radius:8px;padding:24px 28px;margin:18px 0}
.checklist h3{margin-top:0;color:#1e293b;font-size:18px}
.checklist ul{list-style:none;margin-left:0}
.checklist ul li{padding:6px 0 6px 28px;position:relative}
.checklist ul li::before{content:&quot;&quot;;position:absolute;left:4px;top:13px;width:10px;height:10px;background:#dc2626;border-radius:50%}

.faq-item{margin:25px 0;border-bottom:1px solid #e5e7eb;padding-bottom:25px}
.faq-item:last-child{border-bottom:none}
.faq-question{font-weight:600;color:#000;font-size:17px;margin-bottom:10px}
.faq-answer{color:#333;line-height:1.7}

.related-reading{background:#f8f9fa;border:1px solid #e0e0e0;border-radius:8px;padding:30px;margin:40px 0}
.related-reading h2{margin-top:0}
.related-reading ul{margin-left:25px}
.related-reading li{margin:18px 0;line-height:1.7}
.related-reading .why-matters{color:#666;font-size:15px;margin-top:5px;display:block}

.about-author{background:#fffbf0;border:1px solid #e0e0e0;border-radius:8px;padding:30px;margin:40px 0}
.about-author h2{margin-top:0;font-size:28px}
.author-name{font-size:20px;font-weight:bold;color:#000;margin-bottom:10px}
.author-bio{color:#333;line-height:1.7;margin-bottom:15px}
.social-links{margin-top:20px}
.social-links a{display:inline-block;margin-right:20px;color:#dc2626;text-decoration:none;font-size:16px}
.social-links a:hover{text-decoration:underline}

.post-footer{border-top:1px solid #e0e0e0;padding-top:25px;margin-top:40px;color:#666;font-size:15px}
.post-meta{margin-bottom:15px}
.share-buttons{margin:20px 0}
.share-buttons a{display:inline-block;margin-right:15px;color:#dc2626;font-size:14px}
.tags{margin-top:20px}
.tags strong{color:#666;font-weight:normal}
.tags a{color:#dc2626;margin-right:10px;font-size:14px}

@media(max-width:768px){
  .hero-header{padding:40px 24px}
  .hero-header h1{font-size:28px}
  .hero-subtitle{font-size:16px}
  .hero-meta{gap:20px}
  h2{font-size:24px}
  h3{font-size:20px}
  table{font-size:13px}
  th,td{padding:9px}
  .code-block{font-size:12px}
}
&lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;

&lt;div class=&quot;hero-header&quot;&gt;
  &lt;div class=&quot;hero-header-content&quot;&gt;
    &lt;h1&gt;MRP Process Not Running in Data Guard? Fix It Step-by-Step (Oracle 19c)&lt;/h1&gt;
    &lt;div class=&quot;hero-subtitle&quot;&gt;5 Root Causes, DGMGRL Diagnosis and Exact Fix Commands for Every Scenario&lt;/div&gt;
    &lt;div class=&quot;hero-meta&quot;&gt;
      &lt;div class=&quot;hero-meta-item&quot;&gt;&amp;#x1F4C5; April 2026&lt;/div&gt;
      &lt;div class=&quot;hero-meta-item&quot;&gt;&amp;#x1F464; Chetan Yadav, Senior Oracle &amp;amp; Cloud DBA, Oracle ACE Apprentice&lt;/div&gt;
      &lt;div class=&quot;hero-meta-item&quot;&gt;&amp;#x23F1;&amp;#xFE0F; 12,14 min read&lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;div class=&quot;main-content-wrapper&quot;&gt;
&lt;div class=&quot;container&quot;&gt;

&lt;div class=&quot;reading-time-badge&quot;&gt;&amp;#x23F1;&amp;#xFE0F; Estimated Reading Time: 12,14 minutes&lt;/div&gt;
&lt;div class=&quot;page-tagline&quot;&gt;MRP Not Running, ORA-16766, DGMGRL Fix, SRL Creation, Broker State, Auto-Start Trigger, Oracle 19c&lt;/div&gt;

&lt;div class=&quot;hero-image-section&quot;&gt;
  &lt;img
    src=&quot;https://images.unsplash.com/photo-1558494949-ef010cbdcc31?w=1400&amp;h=500&amp;fit=crop&amp;q=85&amp;auto=format&quot;
    alt=&quot;mrp process not running data guard oracle 19c server infrastructure troubleshooting guide&quot;&gt;
&lt;/div&gt;

&lt;div class=&quot;info-box&quot; style=&quot;margin-top:28px;&quot;&gt;
  &lt;strong&gt;&amp;#x2699;&amp;#xFE0F; Environment Referenced in This Article&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
  &lt;strong&gt;Oracle Database:&lt;/strong&gt; 19.18.0.0.0 Enterprise Edition &amp;nbsp;&amp;bull;&amp;nbsp;
  &lt;strong&gt;Primary:&lt;/strong&gt; 2-Node RAC, 4.8 TB OLTP, 2,800 TPS&lt;br&gt;
  &lt;strong&gt;Standby:&lt;/strong&gt; Physical Standby with Active Data Guard enabled&lt;br&gt;
  &lt;strong&gt;Protection Mode:&lt;/strong&gt; Maximum Availability (SYNC/AFFIRM) &amp;nbsp;&amp;bull;&amp;nbsp;
  &lt;strong&gt;Broker:&lt;/strong&gt; Data Guard Broker enabled
&lt;/div&gt;

&lt;p&gt;
  The monitoring alert arrived at 2:48 AM: &lt;em&gt;&quot;Standby apply lag crossing 90 minutes.&quot;&lt;/em&gt; I connected to DGMGRL immediately. &lt;code&gt;SHOW CONFIGURATION&lt;/code&gt; confirmed it: the &lt;strong&gt;MRP process was not running&lt;/strong&gt; on the standby. Every transaction committed on the primary for the past 90 minutes was sitting unprocessed in Standby Redo Logs, and the gap was growing by the second.
&lt;/p&gt;

&lt;p&gt;
  In my 15 years managing Oracle production environments, a stopped MRP process is one of the most common Data Guard incidents I have resolved. It is not complicated once you know which of the five root causes you are dealing with. The problem is that each cause has a completely different fix, and applying the wrong one wastes critical time.
&lt;/p&gt;

&lt;p&gt;
  This guide gives you the exact decision path, the diagnostic commands to identify your specific cause, and the precise fix for each scenario. In most cases the &lt;strong&gt;MRP process not running in Data Guard&lt;/strong&gt; is resolved in under 5 minutes.
&lt;/p&gt;

&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;

&lt;div class=&quot;diagram-section&quot;&gt;
  &lt;img
    src=&quot;PASTE_YOUR_BLOGGER_DIAGRAM_URL_HERE&quot;
    alt=&quot;MRP process not running Oracle Data Guard fix diagram showing root causes decision flow fix commands and verification for Oracle 19c&quot;&gt;
  &lt;div class=&quot;diagram-caption&quot;&gt;Figure 1: MRP Process Not Running in Oracle Data Guard, Root Causes, Decision Flow, Fix Commands and Verification Reference, Oracle 19c&lt;/div&gt;
&lt;/div&gt;

&lt;div class=&quot;toc&quot;&gt;
  &lt;div class=&quot;toc-header&quot;&gt;&lt;span&gt;&amp;#x1F4DA;&lt;/span&gt; Table of Contents&lt;/div&gt;
  &lt;ol&gt;
    &lt;li&gt;&lt;a href=&quot;#section1&quot;&gt;What MRP Does and Why Its Absence Is Critical&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#section2&quot;&gt;Immediate Diagnosis: Confirm MRP Is Not Running&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#section3&quot;&gt;Cause 1: MRP Was Manually Cancelled&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#section4&quot;&gt;Cause 2: Missing Standby Redo Logs&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#section5&quot;&gt;Cause 3: Data Guard Broker Apply State Is OFF&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#section6&quot;&gt;Cause 4: Protection Mode Conflict&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#section7&quot;&gt;Cause 5: No Auto-Start After Standby Crash&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#section8&quot;&gt;Enable Parallel Apply for Faster Lag Recovery&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#section9&quot;&gt;Verify MRP Is Running and Apply Lag Is Clearing&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#section10&quot;&gt;Prevent MRP from Stopping Again&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#section11&quot;&gt;FAQ: MRP Process Not Running in Oracle Data Guard&lt;/a&gt;&lt;/li&gt;
  &lt;/ol&gt;
&lt;/div&gt;

&lt;!-- ══════════════════════════════════ --&gt;
&lt;h2 id=&quot;section1&quot;&gt;1. What MRP Does and Why Its Absence Is Critical&lt;/h2&gt;

&lt;p&gt;
  The Managed Recovery Process (MRP0) is the Oracle background process on the standby database responsible for reading redo data from Standby Redo Logs and applying it to the standby datafiles. It is the engine that keeps the standby synchronised with the primary.
&lt;/p&gt;

&lt;p&gt;
  When MRP stops, the pipeline freezes. The RFS process may continue receiving redo from the primary and writing it to Standby Redo Logs, but nothing is being applied. The standby falls further behind with every committed transaction on the primary.
&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;&lt;tr&gt;&lt;th&gt;Component&lt;/th&gt;&lt;th&gt;Role&lt;/th&gt;&lt;th&gt;When MRP Stops&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;&lt;td&gt;&lt;strong&gt;RFS (Remote File Server)&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Receives redo from primary, writes to SRLs&lt;/td&gt;&lt;td&gt;Continues running, redo still arrives&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;&lt;strong&gt;MRP0 (Managed Recovery)&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Reads SRLs, applies redo to datafiles&lt;/td&gt;&lt;td&gt;Stopped, redo not applied, lag grows&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;&lt;strong&gt;Apply Lag&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Time between redo arrival and apply&lt;/td&gt;&lt;td&gt;Increases continuously until MRP restarts&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;&lt;strong&gt;Data Loss Risk&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Redo not yet applied to standby&lt;/td&gt;&lt;td&gt;Equals current apply lag if primary fails&lt;/td&gt;&lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;div class=&quot;tip-box&quot;&gt;
  &lt;strong&gt;MRP Stopped vs Transport Lag:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
  When MRP is not running you will typically see apply lag growing while transport lag stays near zero. This is because RFS is still receiving redo (transport working) but nothing is being applied (MRP stopped). If both transport lag and apply lag are growing, the problem is in the network, not just MRP.
&lt;/div&gt;

&lt;hr class=&quot;section-transition&quot;&gt;

&lt;!-- ══════════════════════════════════ --&gt;
&lt;h2 id=&quot;section2&quot;&gt;2. Immediate Diagnosis: Confirm MRP Is Not Running&lt;/h2&gt;

&lt;p&gt;
  Before applying any fix, run these three queries. The results tell you exactly which cause you are dealing with.
&lt;/p&gt;

&lt;div class=&quot;code-container&quot;&gt;
  &lt;div class=&quot;code-header&quot;&gt;
    &lt;span class=&quot;code-label&quot;&gt;SQL + DGMGRL, 3-Query MRP Diagnosis&lt;/span&gt;
    &lt;button class=&quot;copy-btn&quot; onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;
  &lt;/div&gt;
  &lt;div class=&quot;code-block&quot;&gt;-- Query 1: Confirm MRP is not running (run on STANDBY)
-- If no rows returned for MRP0 = MRP is stopped
SELECT process,
       status,
       thread#,
       sequence#
FROM   v$managed_standby
WHERE  process LIKE &#39;MRP%&#39;
OR     process LIKE &#39;PR%&#39;
ORDER  BY process;

-- Query 2: Check Standby Redo Logs (run on STANDBY)
-- No rows = SRLs missing = Cause 2
SELECT group#,
       thread#,
       bytes/1024/1024  AS size_mb,
       archived,
       status
FROM   v$standby_log
ORDER  BY thread#, group#;

-- Query 3: Check apply and transport lag (run on STANDBY or PRIMARY)
SELECT name,
       value,
       time_computed
FROM   v$dataguard_stats
WHERE  name IN (&#39;transport lag&#39;, &#39;apply lag&#39;, &#39;apply finish time&#39;)
ORDER  BY name;

-- DGMGRL: check broker apply state (run from any node)
-- dgmgrl /
-- SHOW DATABASE VERBOSE standby_db;
-- Look for: ApplyState = ON or OFF&lt;/div&gt;
&lt;/div&gt;

&lt;div class=&quot;success-box&quot;&gt;
  &lt;strong&gt;How to Read Your Results:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
  No MRP0 row in v$managed_standby = Cause 1 or 5 (not started or crashed)&lt;br&gt;
  No rows in v$standby_log = Cause 2 (missing SRLs, fix first)&lt;br&gt;
  DGMGRL ApplyState = OFF = Cause 3 (broker controlling apply)&lt;br&gt;
  protection_level differs from protection_mode = Cause 4&lt;br&gt;
  Alert log shows MRP0 terminated = Cause 5 (post-crash)
&lt;/div&gt;

&lt;hr class=&quot;section-transition&quot;&gt;

&lt;!-- ══════════════════════════════════ --&gt;
&lt;h2 id=&quot;section3&quot;&gt;3. Cause 1: MRP Was Manually Cancelled&lt;/h2&gt;

&lt;p&gt;
  &lt;span class=&quot;tag-cause&quot;&gt;Most Common&lt;/span&gt; The most frequent reason the MRP process is not running in Data Guard is manual cancellation. A DBA runs &lt;code&gt;ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL&lt;/code&gt; to perform maintenance, apply an OS patch, or modify a standby parameter, and forgets to restart MRP afterwards.
&lt;/p&gt;

&lt;div class=&quot;code-container&quot;&gt;
  &lt;div class=&quot;code-header&quot;&gt;
    &lt;span class=&quot;code-label&quot;&gt;SQL, Fix Cause 1, Restart MRP After Manual Cancellation&lt;/span&gt;
    &lt;button class=&quot;copy-btn&quot; onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;
  &lt;/div&gt;
  &lt;div class=&quot;code-block&quot;&gt;-- Run on STANDBY database

-- Recommended: real-time apply (requires SRLs to exist)
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE
    USING CURRENT LOGFILE
    DISCONNECT FROM SESSION;

-- Alternative: archive-based apply (if SRLs are missing)
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE
    DISCONNECT FROM SESSION;

-- Verify MRP started within 30 seconds
SELECT process,
       status,
       thread#,
       sequence#
FROM   v$managed_standby
WHERE  process LIKE &#39;MRP%&#39;;
-- Expected: MRP0 with status = WAIT_FOR_LOG or APPLYING&lt;/div&gt;
&lt;/div&gt;

&lt;div class=&quot;production-note&quot;&gt;
  &lt;p&gt;In a recent 4.8 TB core banking environment I managed, MRP had been cancelled during an Oracle PSU patch cycle. The DBA completing the patch restarted the standby instance but did not restart MRP. The monitoring system detected the growing apply lag 47 minutes later. Restarting MRP with real-time apply cleared the lag to zero in 12 minutes using the default single-threaded apply. For faster recovery on larger lag, see Section 8 for parallel apply.&lt;/p&gt;
&lt;/div&gt;

&lt;hr class=&quot;section-transition&quot;&gt;

&lt;!-- ══════════════════════════════════ --&gt;
&lt;h2 id=&quot;section4&quot;&gt;4. Cause 2: Missing Standby Redo Logs Prevent MRP from Starting&lt;/h2&gt;

&lt;p&gt;
  &lt;span class=&quot;tag-cause&quot;&gt;Silent Cause&lt;/span&gt; If &lt;code&gt;v$standby_log&lt;/code&gt; returns no rows, Standby Redo Logs were never created on this standby. Without SRLs, the &lt;code&gt;USING CURRENT LOGFILE&lt;/code&gt; option fails and MRP cannot perform real-time apply. In many configurations this prevents MRP from starting at all.
&lt;/p&gt;

&lt;p&gt;
  The confusing part: transport lag is zero (RFS is receiving redo fine) but apply lag grows because MRP cannot start. This pattern almost always means missing SRLs.
&lt;/p&gt;

&lt;div class=&quot;code-container&quot;&gt;
  &lt;div class=&quot;code-header&quot;&gt;
    &lt;span class=&quot;code-label&quot;&gt;SQL, Fix Cause 2, Create Standby Redo Logs and Restart MRP&lt;/span&gt;
    &lt;button class=&quot;copy-btn&quot; onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;
  &lt;/div&gt;
  &lt;div class=&quot;code-block&quot;&gt;-- Step 1: Confirm SRLs are missing (run on STANDBY)
SELECT COUNT(*) AS srl_count FROM v$standby_log;
-- Result: 0 = SRLs missing, must create before restarting MRP

-- Step 2: Check online redo log size on PRIMARY
-- SRLs must match this size exactly
SELECT group#,
       members,
       bytes/1024/1024  AS size_mb,
       status
FROM   v$log
ORDER  BY group#;

-- Step 3: Create SRLs on STANDBY
-- Rule: same size as online redo logs
-- Rule: (groups_per_thread + 1) SRL groups per thread
-- Example: single-instance primary with 3 x 500MB redo groups
-- Needs 4 SRL groups (3 + 1)

ALTER DATABASE ADD STANDBY LOGFILE THREAD 1
    GROUP 11 (&#39;+DATA&#39;) SIZE 500M;
ALTER DATABASE ADD STANDBY LOGFILE THREAD 1
    GROUP 12 (&#39;+DATA&#39;) SIZE 500M;
ALTER DATABASE ADD STANDBY LOGFILE THREAD 1
    GROUP 13 (&#39;+DATA&#39;) SIZE 500M;
ALTER DATABASE ADD STANDBY LOGFILE THREAD 1
    GROUP 14 (&#39;+DATA&#39;) SIZE 500M;

-- For 2-node RAC primary also add THREAD 2 groups 21-24

-- Step 4: Verify SRLs created
SELECT group#,
       thread#,
       bytes/1024/1024  AS size_mb,
       status
FROM   v$standby_log
ORDER  BY thread#, group#;

-- Step 5: Now restart MRP with real-time apply
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE
    USING CURRENT LOGFILE
    DISCONNECT FROM SESSION;

-- Step 6: Confirm MRP switched to real-time mode
SELECT process, status FROM v$managed_standby WHERE process = &#39;MRP0&#39;;
-- Expected: WAIT_FOR_LOG (not WAIT_FOR_GAP)&lt;/div&gt;
&lt;/div&gt;

&lt;div class=&quot;incident-box&quot;&gt;
  &lt;strong&gt;Production Incident: 8-Hour Apply Gap from Missing SRLs&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
  A newly rebuilt standby database for a 2-node RAC primary showed zero transport lag but growing apply lag from the first day of operation. Investigation found that SRLs had never been created. MRP was running in archive-based apply mode, only catching up once per hour when archive logs were shipped. By the time the team noticed, the standby was 8 hours behind the primary. Creating SRLs and restarting with real-time apply brought the standby current within 15 minutes.
&lt;/div&gt;

&lt;hr class=&quot;section-transition&quot;&gt;

&lt;!-- ══════════════════════════════════ --&gt;
&lt;h2 id=&quot;section5&quot;&gt;5. Cause 3: Data Guard Broker Apply State Is OFF&lt;/h2&gt;

&lt;p&gt;
  &lt;span class=&quot;tag-cause&quot;&gt;Broker Override&lt;/span&gt; When Data Guard Broker is enabled, it controls the apply state of the standby. If an administrator ran &lt;code&gt;DGMGRL&amp;gt; EDIT DATABASE standby_db SET STATE=&#39;OFFLINE&#39;&lt;/code&gt; or disabled the database in broker, apply is set to OFF. Running a direct SQL restart works temporarily, but broker cancels MRP again within minutes.
&lt;/p&gt;

&lt;p&gt;
  This is why some DBAs report that MRP restarts but stops again almost immediately. The broker is winning the battle. The fix must go through DGMGRL.
&lt;/p&gt;

&lt;div class=&quot;code-container&quot;&gt;
  &lt;div class=&quot;code-header&quot;&gt;
    &lt;span class=&quot;code-label&quot;&gt;DGMGRL, Fix Cause 3, Re-Enable Apply via Data Guard Broker&lt;/span&gt;
    &lt;button class=&quot;copy-btn&quot; onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;
  &lt;/div&gt;
  &lt;div class=&quot;code-block&quot;&gt;-- Connect to Data Guard Broker (run on primary or standby server)
-- dgmgrl /

-- Step 1: Check current broker state
SHOW CONFIGURATION;
SHOW DATABASE VERBOSE standby_db;
-- Look for: ApplyState = OFF or State = OFFLINE

-- Step 2: Enable database if disabled
ENABLE DATABASE standby_db;

-- Step 3: Set apply state to ON
EDIT DATABASE standby_db SET STATE=&#39;APPLY-ON&#39;;

-- Step 4: Verify configuration is now healthy
SHOW CONFIGURATION;
-- Expected: SUCCESS with no ORA-16766

-- Step 5: Cross-check MRP on standby SQL
-- SELECT process, status FROM v$managed_standby
-- WHERE process LIKE &#39;MRP%&#39;;&lt;/div&gt;
&lt;/div&gt;

&lt;div class=&quot;info-box&quot;&gt;
  &lt;strong&gt;When Broker Is Enabled, Always Fix Through DGMGRL&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
  If &lt;code&gt;dg_broker_start = TRUE&lt;/code&gt; in the standby spfile, the broker owns apply state management. A direct &lt;code&gt;ALTER DATABASE RECOVER&lt;/code&gt; SQL command will start MRP, but broker will override and cancel it again at the next configuration sync cycle (typically within 1,5 minutes). Always check broker state before applying a direct SQL fix.
&lt;/div&gt;

&lt;hr class=&quot;section-transition&quot;&gt;

&lt;!-- ══════════════════════════════════ --&gt;
&lt;h2 id=&quot;section6&quot;&gt;6. Cause 4: Protection Mode Conflict Causing MRP Abort&lt;/h2&gt;

&lt;p&gt;
  &lt;span class=&quot;tag-cause&quot;&gt;Silent Risk&lt;/span&gt; When the Data Guard configuration uses Maximum Protection mode, the primary requires confirmation from the standby for every redo write. If the standby connection becomes unstable or the network experiences sustained packet loss, Oracle may abort MRP to prevent data divergence between primary and standby.
&lt;/p&gt;

&lt;div class=&quot;code-container&quot;&gt;
  &lt;div class=&quot;code-header&quot;&gt;
    &lt;span class=&quot;code-label&quot;&gt;SQL + DGMGRL, Fix Cause 4, Resolve Protection Mode Conflict&lt;/span&gt;
    &lt;button class=&quot;copy-btn&quot; onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;
  &lt;/div&gt;
  &lt;div class=&quot;code-block&quot;&gt;-- Step 1: Check effective protection on PRIMARY
SELECT protection_mode,
       protection_level    -- actual vs configured
FROM   v$database;
-- If they differ, primary silently fell back

-- Step 2: Check archive destination for errors on PRIMARY
SELECT dest_id,
       status,
       error,
       gap_status
FROM   v$archive_dest_status
WHERE  target    = &#39;STANDBY&#39;
AND    status   != &#39;INACTIVE&#39;;

-- Step 3: Lower to Maximum Availability temporarily (dgmgrl /)
EDIT CONFIGURATION SET PROTECTION MODE AS MAXAVAILABILITY;

-- Step 4: Restart MRP on STANDBY
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE
    USING CURRENT LOGFILE
    DISCONNECT FROM SESSION;

-- Step 5: Monitor stability, then restore original mode if needed
-- EDIT CONFIGURATION SET PROTECTION MODE AS MAXPROTECTION;&lt;/div&gt;
&lt;/div&gt;

&lt;hr class=&quot;section-transition&quot;&gt;

&lt;!-- ══════════════════════════════════ --&gt;
&lt;h2 id=&quot;section7&quot;&gt;7. Cause 5: MRP Did Not Auto-Start After Standby Crash&lt;/h2&gt;

&lt;p&gt;
  &lt;span class=&quot;tag-cause&quot;&gt;Post-Crash&lt;/span&gt; After a standby instance crash from OS reboot, power failure, or OOM kill, the standby database restarts but MRP does not start automatically unless broker or a startup trigger is configured. The standby opens in read-only or mount state with no apply running.
&lt;/p&gt;

&lt;div class=&quot;code-container&quot;&gt;
  &lt;div class=&quot;code-header&quot;&gt;
    &lt;span class=&quot;code-label&quot;&gt;SQL, Fix Cause 5, Restart MRP + Create Auto-Start Trigger&lt;/span&gt;
    &lt;button class=&quot;copy-btn&quot; onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;
  &lt;/div&gt;
  &lt;div class=&quot;code-block&quot;&gt;-- Step 1: Verify standby state after crash (run on STANDBY)
SELECT status,
       database_role,
       open_mode
FROM   v$database;

-- Step 2: Check alert log for crash evidence (run on standby server)
-- adrci
-- adrci&gt; SHOW ALERT -TAIL 200
-- Look for: ORA-03113, ORA-29701, or instance terminated messages

-- Step 3: Restart MRP immediately
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE
    USING CURRENT LOGFILE
    DISCONNECT FROM SESSION;

-- Step 4: Create auto-start trigger to prevent recurrence
-- Run on STANDBY database as SYSDBA
CREATE OR REPLACE TRIGGER start_mrp_on_open
    AFTER STARTUP ON DATABASE
DECLARE
    v_role   v$database.database_role%TYPE;
BEGIN
    SELECT database_role
    INTO   v_role
    FROM   v$database;

    IF v_role = &#39;PHYSICAL STANDBY&#39; THEN
        EXECUTE IMMEDIATE
            &#39;ALTER DATABASE RECOVER MANAGED STANDBY DATABASE
             USING CURRENT LOGFILE DISCONNECT FROM SESSION&#39;;
    END IF;
EXCEPTION
    WHEN OTHERS THEN NULL;  -- Never block database startup
END;
/

-- Verify trigger created
SELECT trigger_name,
       status
FROM   dba_triggers
WHERE  trigger_name = &#39;START_MRP_ON_OPEN&#39;;&lt;/div&gt;
&lt;/div&gt;

&lt;div class=&quot;tip-box&quot;&gt;
  &lt;strong&gt;Broker Is Better Than the Trigger:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
  If you use Data Guard Broker, you do not need the startup trigger. Enable broker on the standby with &lt;code&gt;dg_broker_start = TRUE&lt;/code&gt; in the spfile and ensure the database state is set to &lt;code&gt;APPLY-ON&lt;/code&gt; in DGMGRL. Broker automatically restarts MRP after any standby restart. The trigger is only necessary in environments without broker configuration.
&lt;/div&gt;

&lt;hr class=&quot;section-transition&quot;&gt;

&lt;!-- ══════════════════════════════════ --&gt;
&lt;h2 id=&quot;section8&quot;&gt;8. Enable Parallel Apply for Faster Lag Recovery&lt;/h2&gt;

&lt;p&gt;
  If MRP has been stopped for a long time and the standby has accumulated significant apply lag, single-threaded MRP will be slow to catch up. Enabling parallel apply uses multiple CPU cores to apply redo simultaneously, reducing catch-up time by 3,8x depending on the workload.
&lt;/p&gt;

&lt;div class=&quot;code-container&quot;&gt;
  &lt;div class=&quot;code-header&quot;&gt;
    &lt;span class=&quot;code-label&quot;&gt;SQL, Enable Parallel Apply to Reduce Accumulated Lag Faster&lt;/span&gt;
    &lt;button class=&quot;copy-btn&quot; onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;
  &lt;/div&gt;
  &lt;div class=&quot;code-block&quot;&gt;-- Step 1: Cancel existing MRP if running
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;

-- Confirm cancelled
SELECT process, status FROM v$managed_standby
WHERE  process LIKE &#39;MRP%&#39;;
-- Expected: No rows

-- Step 2: Restart with parallel apply
-- Set degree to half the standby CPU count as a starting point
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE
    PARALLEL 8
    USING CURRENT LOGFILE
    DISCONNECT FROM SESSION;

-- Step 3: Verify parallel workers started
SELECT process,
       status,
       thread#
FROM   v$managed_standby
WHERE  process LIKE &#39;MRP%&#39;
OR     process LIKE &#39;PR%&#39;
ORDER  BY process;
-- Expected: MRP0 + PR00 through PR07 (8 parallel workers)

-- Step 4: Monitor lag reduction rate
SELECT name,
       value,
       time_computed
FROM   v$dataguard_stats
WHERE  name IN (&#39;transport lag&#39;, &#39;apply lag&#39;)
ORDER  BY name;
-- Run every 2 minutes to confirm lag is dropping&lt;/div&gt;
&lt;/div&gt;

&lt;hr class=&quot;section-transition&quot;&gt;

&lt;!-- ══════════════════════════════════ --&gt;
&lt;h2 id=&quot;section9&quot;&gt;9. Verify MRP Is Running and Apply Lag Is Clearing&lt;/h2&gt;

&lt;p&gt;
  After applying any fix, run this complete verification sequence. Do not close the incident until all five checks pass.
&lt;/p&gt;

&lt;div class=&quot;code-container&quot;&gt;
  &lt;div class=&quot;code-header&quot;&gt;
    &lt;span class=&quot;code-label&quot;&gt;SQL + DGMGRL, Complete Post-Fix Verification&lt;/span&gt;
    &lt;button class=&quot;copy-btn&quot; onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;
  &lt;/div&gt;
  &lt;div class=&quot;code-block&quot;&gt;-- Check 1: MRP is running (STANDBY)
SELECT process,
       status,
       thread#,
       sequence#
FROM   v$managed_standby
WHERE  process LIKE &#39;MRP%&#39;;
-- Pass: MRP0 status = WAIT_FOR_LOG or APPLYING

-- Check 2: Apply lag dropping (STANDBY)
SELECT name,
       value
FROM   v$dataguard_stats
WHERE  name IN (&#39;transport lag&#39;, &#39;apply lag&#39;);
-- Pass: both values trending toward 0

-- Check 3: MRP in real-time mode (STANDBY)
SELECT process, status FROM v$managed_standby
WHERE  process = &#39;MRP0&#39;;
-- Pass: WAIT_FOR_LOG (not WAIT_FOR_GAP)

-- Check 4: Protection level matches mode (PRIMARY)
SELECT protection_mode, protection_level FROM v$database;
-- Pass: both values are identical

-- Check 5: No archive gap (PRIMARY)
SELECT thread#, low_sequence#, high_sequence# FROM v$archive_gap;
-- Pass: no rows returned

-- Check 6: DGMGRL shows SUCCESS
-- dgmgrl /
-- SHOW CONFIGURATION;
-- Pass: Configuration Status = SUCCESS&lt;/div&gt;
&lt;/div&gt;

&lt;hr class=&quot;section-transition&quot;&gt;

&lt;!-- ══════════════════════════════════ --&gt;
&lt;h2 id=&quot;section10&quot;&gt;10. Prevent MRP from Stopping Again&lt;/h2&gt;

&lt;div class=&quot;checklist&quot;&gt;
  &lt;h3&gt;Configuration Hardening to Keep MRP Running&lt;/h3&gt;
  &lt;ul&gt;
    &lt;li&gt;Standby Redo Logs created: same size as online redo logs, groups + 1 per thread&lt;/li&gt;
    &lt;li&gt;Data Guard Broker enabled with &lt;code&gt;dg_broker_start = TRUE&lt;/code&gt; on standby spfile&lt;/li&gt;
    &lt;li&gt;Broker database state confirmed as &lt;code&gt;APPLY-ON&lt;/code&gt; in DGMGRL&lt;/li&gt;
    &lt;li&gt;MRP startup trigger created (only if not using broker auto-restart)&lt;/li&gt;
    &lt;li&gt;Protection mode set to Maximum Availability, not Maximum Protection, unless mandated&lt;/li&gt;
    &lt;li&gt;Monitoring alert for zero MRP0 in v$managed_standby with 5-minute response SLA&lt;/li&gt;
    &lt;li&gt;Apply lag alert at 30-second threshold, not 5 minutes&lt;/li&gt;
    &lt;li&gt;DGMGRL &lt;code&gt;VALIDATE DATABASE&lt;/code&gt; scheduled weekly&lt;/li&gt;
  &lt;/ul&gt;
&lt;/div&gt;

&lt;div class=&quot;code-container&quot;&gt;
  &lt;div class=&quot;code-header&quot;&gt;
    &lt;span class=&quot;code-label&quot;&gt;SQL, Proactive MRP Health Check Query (Run Every 5 Minutes)&lt;/span&gt;
    &lt;button class=&quot;copy-btn&quot; onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;
  &lt;/div&gt;
  &lt;div class=&quot;code-block&quot;&gt;-- MRP process health check (run on STANDBY)
SELECT CASE
           WHEN COUNT(*) = 0
           THEN &#39;CRITICAL: MRP not running, Data Guard apply stopped&#39;
           ELSE &#39;OK: MRP is running&#39;
       END  AS mrp_health_status,
       SYSDATE AS checked_at
FROM   v$managed_standby
WHERE  process = &#39;MRP0&#39;
AND    status NOT IN (&#39;IDLE&#39;);

-- Apply lag alert
SELECT name,
       value,
       CASE
           WHEN TO_DSINTERVAL(value) &gt; INTERVAL &#39;0 00:00:30&#39; HOUR TO SECOND
           THEN &#39;ALERT: &#39; || name || &#39; exceeds threshold&#39;
           ELSE &#39;OK&#39;
       END  AS status
FROM   v$dataguard_stats
WHERE  name IN (&#39;transport lag&#39;, &#39;apply lag&#39;)
ORDER  BY name;&lt;/div&gt;
&lt;/div&gt;

&lt;hr class=&quot;section-transition&quot;&gt;

&lt;!-- ══════════════════════════════════ --&gt;
&lt;h2 id=&quot;section11&quot;&gt;FAQ: MRP Process Not Running in Oracle Data Guard&lt;/h2&gt;

&lt;div class=&quot;faq-item&quot;&gt;
  &lt;div class=&quot;faq-question&quot;&gt;Why is the MRP process not running in Oracle Data Guard?&lt;/div&gt;
  &lt;div class=&quot;faq-answer&quot;&gt;
    The MRP process stops in Oracle Data Guard for five main reasons: manual cancellation during maintenance where the DBA forgets to restart it, missing Standby Redo Logs that prevent real-time apply from initialising, Data Guard Broker setting apply state to OFF, a protection mode conflict causing Oracle to abort MRP, or no auto-start configuration after a standby instance crash. Each cause requires a different fix command.
  &lt;/div&gt;
&lt;/div&gt;

&lt;div class=&quot;faq-item&quot;&gt;
  &lt;div class=&quot;faq-question&quot;&gt;How do I restart the MRP process not running in Data Guard 19c?&lt;/div&gt;
  &lt;div class=&quot;faq-answer&quot;&gt;
    Run on the standby: &lt;code&gt;ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION;&lt;/code&gt; If using Broker run in DGMGRL: &lt;code&gt;EDIT DATABASE standby_db SET STATE=&#39;APPLY-ON&#39;;&lt;/code&gt; Verify with: &lt;code&gt;SELECT process, status FROM v$managed_standby WHERE process=&#39;MRP0&#39;;&lt;/code&gt; Status should show WAIT_FOR_LOG or APPLYING.
  &lt;/div&gt;
&lt;/div&gt;

&lt;div class=&quot;faq-item&quot;&gt;
  &lt;div class=&quot;faq-question&quot;&gt;What is the difference between MRP not running and ORA-16766?&lt;/div&gt;
  &lt;div class=&quot;faq-answer&quot;&gt;
    They describe the same condition. ORA-16766 is the Oracle error code that appears in DGMGRL SHOW CONFIGURATION when MRP is stopped. MRP not running is the technical description of the underlying cause. Both mean the Managed Recovery Process has stopped and redo is no longer being applied to the standby datafiles.
  &lt;/div&gt;
&lt;/div&gt;

&lt;div class=&quot;faq-item&quot;&gt;
  &lt;div class=&quot;faq-question&quot;&gt;Why does MRP stop immediately after I restart it?&lt;/div&gt;
  &lt;div class=&quot;faq-answer&quot;&gt;
    Recurring MRP stop after restart has three causes. First, Data Guard Broker has apply set to OFF and overrides your manual SQL restart within minutes, so fix through DGMGRL instead. Second, missing Standby Redo Logs cause MRP to fail on start immediately, so create SRLs first. Third, Maximum Protection mode with an unstable standby network connection causes repeated MRP abort, so lower to Maximum Availability until the network is stable.
  &lt;/div&gt;
&lt;/div&gt;

&lt;div class=&quot;faq-item&quot;&gt;
  &lt;div class=&quot;faq-question&quot;&gt;How do I prevent MRP from stopping after a standby reboot?&lt;/div&gt;
  &lt;div class=&quot;faq-answer&quot;&gt;
    Create an AFTER STARTUP database trigger on the standby that checks the database role and runs ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT. Alternatively, enable Data Guard Broker with &lt;code&gt;dg_broker_start=TRUE&lt;/code&gt; in the standby spfile and confirm the broker state is APPLY-ON, which makes broker auto-restart MRP after any restart automatically.
  &lt;/div&gt;
&lt;/div&gt;

&lt;div class=&quot;cta-box&quot;&gt;
  &lt;h3&gt;Dealing with a different Data Guard issue?&lt;/h3&gt;
  &lt;p&gt;Drop a comment with your exact symptom and I will help you diagnose the root cause.&lt;/p&gt;
  &lt;span class=&quot;cta-keyword&quot;&gt;Comment DG&lt;/span&gt;
&lt;/div&gt;

&lt;div class=&quot;about-author&quot;&gt;
  &lt;h2&gt;About the Author&lt;/h2&gt;
  &lt;div class=&quot;author-name&quot;&gt;Chetan Yadav&lt;/div&gt;
  &lt;p class=&quot;author-bio&quot;&gt;
    &lt;strong&gt;Chetan Yadav&lt;/strong&gt; is a &lt;strong&gt;Senior Oracle, PostgreSQL, MySQL, and Cloud DBA&lt;/strong&gt;, Oracle ACE Apprentice, with &lt;strong&gt;15+ years&lt;/strong&gt; of hands-on experience managing mission-critical production databases across finance, healthcare, and e-commerce sectors.
  &lt;/p&gt;
  &lt;p class=&quot;author-bio&quot;&gt;
    Chetan has resolved MRP stopped and ORA-16766 incidents across multiple production Oracle 19c environments, including RAC primaries with Active Data Guard standbys on dedicated WAN links. His writing focuses on exact diagnosis and exact fix commands backed by production experience.
  &lt;/p&gt;
  &lt;p class=&quot;author-bio&quot;&gt;
    This blog covers &lt;strong&gt;real-world DBA problems, cloud architecture, and practical learning&lt;/strong&gt;, not theoretical documentation or vendor marketing.
  &lt;/p&gt;
  &lt;div class=&quot;social-links&quot;&gt;
    &lt;a href=&quot;https://www.linkedin.com/in/chetanyadavvds/&quot; target=&quot;_blank&quot;&gt;LinkedIn&lt;/a&gt;
    &lt;a href=&quot;https://www.youtube.com/@levelup_careers&quot; target=&quot;_blank&quot;&gt;YouTube&lt;/a&gt;
    &lt;a href=&quot;https://www.instagram.com/levelup_careers/&quot; target=&quot;_blank&quot;&gt;Instagram&lt;/a&gt;
    &lt;a href=&quot;https://x.com/home&quot; target=&quot;_blank&quot;&gt;Twitter (X)&lt;/a&gt;
    &lt;a href=&quot;https://www.facebook.com/oracledbainfo/&quot; target=&quot;_blank&quot;&gt;Facebook&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;Newsletter&lt;/a&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;div class=&quot;related-reading&quot;&gt;
  &lt;h2&gt;Related Reading from Real Production Systems&lt;/h2&gt;
  &lt;ul&gt;
    &lt;li&gt;
      &lt;a href=&quot;#&quot;&gt;ORA-16766 Error in Oracle Data Guard: Causes and Fix (Oracle 19c Guide)&lt;/a&gt;
      &lt;span class=&quot;why-matters&quot;&gt;Why it matters: ORA-16766 is the DGMGRL error code for a stopped MRP process. This companion post covers the same issue from the error code angle with additional broker and protection mode diagnosis.&lt;/span&gt;
    &lt;/li&gt;
    &lt;li&gt;
      &lt;a href=&quot;#&quot;&gt;How to Fix Data Guard Lag in Oracle 19c: Step-by-Step Troubleshooting Guide&lt;/a&gt;
      &lt;span class=&quot;why-matters&quot;&gt;Why it matters: Once MRP is restarted, accumulated apply lag needs to be cleared. This guide covers parallel apply tuning, network compression, and RMAN conflict resolution to reduce lag to zero faster.&lt;/span&gt;
    &lt;/li&gt;
    &lt;li&gt;
      &lt;a href=&quot;#&quot;&gt;Oracle Data Guard Protection Modes: Zero Data Loss Design Strategy&lt;/a&gt;
      &lt;span class=&quot;why-matters&quot;&gt;Why it matters: Understanding when Maximum Protection vs Maximum Availability is appropriate prevents the protection mode conflict that causes repeated MRP abort described in Cause 4 of this guide.&lt;/span&gt;
    &lt;/li&gt;
  &lt;/ul&gt;
&lt;/div&gt;

&lt;div class=&quot;post-footer&quot;&gt;
  &lt;div class=&quot;post-meta&quot;&gt;&lt;strong&gt;by Chetan Yadav&lt;/strong&gt;, April 2026&lt;/div&gt;
  &lt;div class=&quot;share-buttons&quot;&gt;
    &lt;strong&gt;Share:&lt;/strong&gt;
    &lt;a href=&quot;#&quot;&gt;Email&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;BlogThis&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;X&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;Facebook&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;Pinterest&lt;/a&gt;
  &lt;/div&gt;
  &lt;div class=&quot;tags&quot;&gt;
    &lt;strong&gt;Tags:&lt;/strong&gt;
    &lt;a href=&quot;#&quot;&gt;MRP Process&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;Data Guard&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;Oracle 19c&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;ORA-16766&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;Standby Database&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;DGMGRL&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;Apply Lag&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;Oracle DBA&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;HA DR&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;Managed Recovery Process&lt;/a&gt;
  &lt;/div&gt;
&lt;/div&gt;

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

&lt;script&gt;
function copyCode(button) {
  const codeContainer = button.closest(&#39;.code-container&#39;);
  const codeBlock = codeContainer.querySelector(&#39;.code-block&#39;);
  const textArea = document.createElement(&#39;textarea&#39;);
  textArea.value = codeBlock.textContent;
  textArea.style.position = &#39;fixed&#39;;
  textArea.style.left = &#39;-9999px&#39;;
  document.body.appendChild(textArea);
  textArea.select();
  textArea.setSelectionRange(0, 99999);
  try {
    document.execCommand(&#39;copy&#39;);
    button.textContent = &#39;Copied!&#39;;
    button.classList.add(&#39;copied&#39;);
    setTimeout(() =&gt; { button.textContent = &#39;Copy&#39;; button.classList.remove(&#39;copied&#39;); }, 2000);
  } catch(err) {
    button.textContent = &#39;Failed&#39;;
    setTimeout(() =&gt; { button.textContent = &#39;Copy&#39;; }, 2000);
  }
  document.body.removeChild(textArea);
}
&lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;</content><link rel='replies' type='application/atom+xml' href='http://chetanyadavds.blogspot.com/feeds/7096055892977472188/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://chetanyadavds.blogspot.com/2026/05/mrp-process-not-running-data-guard-oracle-19c.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/436196721812840248/posts/default/7096055892977472188'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/436196721812840248/posts/default/7096055892977472188'/><link rel='alternate' type='text/html' href='http://chetanyadavds.blogspot.com/2026/05/mrp-process-not-running-data-guard-oracle-19c.html' title='MRP Process Not Running in Data Guard: Fix in Oracle 19c'/><author><name>Chetan Yadav</name><uri>http://www.blogger.com/profile/02557500437758632199</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiE0TgifWM4l1b3sy_cK2y41bpqyfY1U25-p5IBKkSg8pJLFRvjYr_kF7W_MgsYdc21DutWF9H6qlShQDQspQLbZEQ5CSUA51Wp6Mh9l5Ygd4NPSuQyqwSMrKitCWwSLr0oHBg9TGjxAvAM7TTkkehHLL1MFWg0wSb31CxywQxIokg9pg/s1600/IMG-20251013-WA0038.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-436196721812840248.post-1337912671377780948</id><published>2026-05-04T16:44:00.001+05:30</published><updated>2026-05-04T16:44:00.110+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="DGMGRL"/><category scheme="http://www.blogger.com/atom/ns#" term="HA DR"/><category scheme="http://www.blogger.com/atom/ns#" term="MRP Process"/><category scheme="http://www.blogger.com/atom/ns#" term="ORA-16766"/><category scheme="http://www.blogger.com/atom/ns#" term="Oracle 19c"/><category scheme="http://www.blogger.com/atom/ns#" term="Oracle Data Guard"/><category scheme="http://www.blogger.com/atom/ns#" term="Oracle DBA"/><category scheme="http://www.blogger.com/atom/ns#" term="Oracle Error Fix"/><category scheme="http://www.blogger.com/atom/ns#" term="Redo Apply"/><category scheme="http://www.blogger.com/atom/ns#" term="Standby Database"/><title type='text'>ORA-16766 Error in Oracle Data Guard: Causes and Fix (19c Guide)</title><content type='html'>&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;en&quot;&gt;
&lt;head&gt;
&lt;meta charset=&quot;UTF-8&quot;&gt;
&lt;title&gt;ORA-16766 Error in Oracle Data Guard: Causes and Fix (Oracle 19c Guide)&lt;/title&gt;
&lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;
&lt;meta name=&quot;description&quot; content=&quot;How to fix ORA-16766 error in Oracle Data Guard 19c: Redo Apply Service not running. Root causes, DGMGRL diagnosis, MRP restart commands and verification steps.&quot;&gt;
&lt;meta name=&quot;keywords&quot; content=&quot;ORA-16766, ORA-16766 fix, Oracle Data Guard error, Redo Apply not running, MRP stopped, Oracle 19c Data Guard, DGMGRL ORA-16766, standby database error&quot;&gt;
&lt;meta name=&quot;author&quot; content=&quot;Chetan Yadav&quot;&gt;

&lt;!-- Article Schema --&gt;
&lt;script type=&quot;application/ld+json&quot;&gt;
{
  &quot;@context&quot;: &quot;https://schema.org&quot;,
  &quot;@type&quot;: &quot;TechArticle&quot;,
  &quot;headline&quot;: &quot;ORA-16766 Error in Oracle Data Guard: Causes and Fix (Oracle 19c Guide)&quot;,
  &quot;description&quot;: &quot;How to fix ORA-16766 error in Oracle Data Guard 19c: Redo Apply Service not running. Root causes, DGMGRL diagnosis, MRP restart commands and verification steps.&quot;,
  &quot;author&quot;: {&quot;@type&quot;:&quot;Person&quot;,&quot;name&quot;:&quot;Chetan Yadav&quot;,&quot;url&quot;:&quot;https://www.linkedin.com/in/chetanyadavvds/&quot;},
  &quot;publisher&quot;: {&quot;@type&quot;:&quot;Organization&quot;,&quot;name&quot;:&quot;LevelUp Careers&quot;,&quot;url&quot;:&quot;https://chetanyadavds.blogspot.com&quot;},
  &quot;datePublished&quot;: &quot;2026-04-01&quot;,
  &quot;dateModified&quot;: &quot;2026-04-01&quot;
}
&lt;/script&gt;

&lt;!-- FAQ Schema --&gt;
&lt;script type=&quot;application/ld+json&quot;&gt;
{
  &quot;@context&quot;: &quot;https://schema.org&quot;,
  &quot;@type&quot;: &quot;FAQPage&quot;,
  &quot;mainEntity&quot;: [
    {
      &quot;@type&quot;: &quot;Question&quot;,
      &quot;name&quot;: &quot;What does ORA-16766 mean in Oracle Data Guard?&quot;,
      &quot;acceptedAnswer&quot;: {&quot;@type&quot;:&quot;Answer&quot;,&quot;text&quot;:&quot;ORA-16766 means the Redo Apply Service on the standby database is not running. The MRP (Managed Recovery Process) is stopped, which means the standby is not applying redo from the primary and is falling behind.&quot;}
    },
    {
      &quot;@type&quot;: &quot;Question&quot;,
      &quot;name&quot;: &quot;How do I fix ORA-16766 in Oracle 19c Data Guard?&quot;,
      &quot;acceptedAnswer&quot;: {&quot;@type&quot;:&quot;Answer&quot;,&quot;text&quot;:&quot;Run: ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT; on the standby. If using Data Guard Broker, run: DGMGRL&gt; EDIT DATABASE standby_db SET STATE=&#39;APPLY-ON&#39;; Then verify with: SELECT process, status FROM v$managed_standby WHERE process=&#39;MRP0&#39;;&quot;}
    },
    {
      &quot;@type&quot;: &quot;Question&quot;,
      &quot;name&quot;: &quot;Why does ORA-16766 keep coming back after restart?&quot;,
      &quot;acceptedAnswer&quot;: {&quot;@type&quot;:&quot;Answer&quot;,&quot;text&quot;:&quot;Recurring ORA-16766 usually means either Standby Redo Logs are missing (preventing real-time apply), the Data Guard Broker has the database set to APPLY-OFF state, or protection mode is set to Maximum Protection with an unstable standby connection causing repeated MRP abort.&quot;}
    },
    {
      &quot;@type&quot;: &quot;Question&quot;,
      &quot;name&quot;: &quot;Does ORA-16766 cause data loss?&quot;,
      &quot;acceptedAnswer&quot;: {&quot;@type&quot;:&quot;Answer&quot;,&quot;text&quot;:&quot;ORA-16766 itself does not cause data loss immediately. However, while MRP is stopped, the standby is not applying redo. If the primary fails during this window, you will lose all redo generated since MRP stopped. Fix it as soon as it is detected.&quot;}
    }
  ]
}
&lt;/script&gt;

&lt;style&gt;
*{margin:0;padding:0;box-sizing:border-box}
body{background:#fff;color:#333;font-family:Arial,Helvetica,sans-serif;font-size:16px;line-height:1.7}
.post-title,.entry-title,h1.post-title,h3.post-title{display:none!important}

.hero-header{background:linear-gradient(135deg,#1e3a5f 0%,#7c1c1c 50%,#1e3a5f 100%);color:#fff;padding:60px 40px;width:100%}
.hero-header-content{max-width:1200px;margin:0 auto;padding:0 20px}
.hero-header h1{font-size:42px;font-weight:700;color:#fff;line-height:1.3;margin-bottom:20px}
.hero-subtitle{font-size:20px;font-weight:300;color:#fca5a5;opacity:.95;margin-bottom:30px}
.hero-meta{display:flex;gap:30px;align-items:center;flex-wrap:wrap;font-size:15px;color:#fecaca}
.hero-meta-item{display:flex;align-items:center;gap:8px}

.hero-image-section{width:100%;margin:0;padding:0;overflow:hidden;background:#000}
.hero-image-section img{width:100%;height:auto;display:block;max-height:480px;object-fit:cover;object-position:center center}

.main-content-wrapper{width:100%;background:#fff}
.container{max-width:800px;margin:0 auto;padding:30px 20px;background:#fff}

.reading-time-badge{display:inline-block;background:linear-gradient(135deg,#dc2626 0%,#991b1b 100%);color:#fff;padding:12px 28px;border-radius:50px;font-size:15px;font-weight:500;margin-bottom:30px;box-shadow:0 4px 12px rgba(220,38,38,.3)}
.page-tagline{color:#666;font-size:15px;font-style:italic;text-align:center;margin-bottom:35px}

/* ERROR BADGE */
.error-badge{background:#fef2f2;border:2px solid #ef4444;border-radius:10px;padding:20px 24px;margin:24px 0;display:flex;align-items:flex-start;gap:16px}
.error-badge .err-code{font-size:28px;font-weight:700;color:#dc2626;font-family:&#39;Courier New&#39;,monospace;white-space:nowrap;padding-top:4px}
.error-badge .err-detail p{margin:0;color:#333;font-size:15px;line-height:1.6}
.error-badge .err-detail code{background:#fce8e6;color:#dc2626;padding:2px 6px;border-radius:3px;font-size:14px}

.diagram-section{width:100%;margin:28px 0;overflow:hidden;border-radius:10px;box-shadow:0 4px 16px rgba(0,0,0,.12)}
.diagram-section img{width:100%;height:auto;display:block}
.diagram-caption{background:#f8f9fa;border-top:1px solid #e0e0e0;padding:10px 16px;font-size:13px;color:#666;font-style:italic}

.section-transition{border:none;border-top:2px dashed #fecaca;margin:40px 0}

.toc{background:#fef2f2;border-left:4px solid #dc2626;padding:28px 32px;margin:35px 0;border-radius:8px;box-shadow:0 1px 3px rgba(0,0,0,.05)}
.toc-header{display:flex;align-items:center;gap:10px;font-size:24px;font-weight:bold;color:#000;margin-bottom:20px}
.toc ol{margin-left:20px;line-height:1.9;counter-reset:toc-counter;list-style:none}
.toc ol li{counter-increment:toc-counter;margin:12px 0;font-size:16px;padding-bottom:12px;border-bottom:1px solid #fecaca;transition:all .2s ease}
.toc ol li:last-child{border-bottom:none}
.toc ol li:hover{padding-left:8px}
.toc ol li::before{content:counter(toc-counter) &quot;. &quot;;font-weight:600;color:#dc2626;margin-right:8px}
.toc a{color:#dc2626;text-decoration:none}
.toc a:hover{text-decoration:underline}

h2{font-size:28px;font-weight:bold;color:#000;margin:45px 0 20px;line-height:1.3}
h3{font-size:22px;font-weight:600;color:#333;margin:30px 0 15px}
p{margin:16px 0;color:#333;line-height:1.7}
ul,ol{margin:18px 0 18px 35px;color:#333;line-height:1.7}
ul li,ol li{margin:10px 0}
strong{font-weight:bold;color:#333}
em{font-style:italic}
a{color:#dc2626;text-decoration:none}
a:hover{text-decoration:underline}

.tag-good{display:inline-block;background:#e6f4ea;color:#137333;border:1px solid #a8d5b5;border-radius:4px;padding:1px 8px;font-size:13px;font-weight:600;margin-right:6px;vertical-align:middle}
.tag-bad{display:inline-block;background:#fce8e6;color:#c5221f;border:1px solid #f5a8a4;border-radius:4px;padding:1px 8px;font-size:13px;font-weight:600;margin-right:6px;vertical-align:middle}
.tag-fix{display:inline-block;background:#f0fdf4;color:#15803d;border:1px solid #86efac;border-radius:4px;padding:2px 10px;font-size:12px;font-weight:700;margin-right:6px;vertical-align:middle}
.tag-cause{display:inline-block;background:#fef2f2;color:#991b1b;border:1px solid #fca5a5;border-radius:4px;padding:2px 10px;font-size:12px;font-weight:700;margin-right:6px;vertical-align:middle}

.code-container{position:relative;margin:24px 0}
.code-header{background:#1e1b2e;color:#fff;padding:10px 16px;border-radius:8px 8px 0 0;display:flex;justify-content:space-between;align-items:center;font-size:14px}
.code-label{font-weight:500}
.copy-btn{background:#dc2626;color:#fff;border:none;padding:6px 14px;border-radius:5px;cursor:pointer;font-size:13px;transition:background .2s;font-family:Arial,sans-serif}
.copy-btn:hover{background:#b91c1c}
.copy-btn.copied{background:#10b981}
.code-block{background:#f8f9fa;border:1px solid #e0e0e0;border-radius:0 0 8px 8px;padding:18px 20px;margin:0;overflow-x:auto;font-family:&#39;Courier New&#39;,Courier,monospace;font-size:14px;line-height:1.7;white-space:pre;tab-size:4}
code{background:#f8f9fa;padding:2px 6px;border-radius:3px;font-family:&#39;Courier New&#39;,monospace;font-size:14px;color:#dc2626}

.info-box{background:#fffbeb;border-left:4px solid #f59e0b;padding:18px 22px;border-radius:0 8px 8px 0;margin:25px 0}
.info-box strong{color:#92400e}
.tip-box{background:#fef2f2;border-left:4px solid #dc2626;padding:18px 22px;border-radius:0 8px 8px 0;margin:25px 0}
.tip-box strong{color:#991b1b}
.incident-box{background:#fef2f2;border-left:4px solid #ef4444;padding:18px 22px;border-radius:0 8px 8px 0;margin:25px 0}
.incident-box strong{color:#991b1b}
.success-box{background:#f0fdf4;border-left:4px solid #22c55e;padding:18px 22px;border-radius:0 8px 8px 0;margin:25px 0}
.success-box strong{color:#15803d}
.production-note{background:#fff8f0;border:2px solid #f59e0b;border-radius:10px;padding:20px 24px;margin:28px 0;position:relative}
.production-note::before{content:&quot;FROM PRODUCTION&quot;;position:absolute;top:-13px;left:20px;background:#f59e0b;color:#fff;font-size:11px;font-weight:700;padding:2px 10px;border-radius:4px;letter-spacing:.08em}

table{width:100%;border-collapse:collapse;margin:25px 0;background:#fff;border:1px solid #e0e0e0}
thead{background:#1e1b2e}
th{padding:12px;text-align:left;font-weight:bold;color:#fff;border-bottom:2px solid #e0e0e0;font-size:15px}
td{padding:12px;border-bottom:1px solid #e0e0e0;color:#333;font-size:15px}
tr:last-child td{border-bottom:none}
tbody tr:hover{background:#fef2f2}

.checklist{background:#fef2f2;border:1px solid #fecaca;border-radius:8px;padding:24px 28px;margin:18px 0}
.checklist h3{margin-top:0;color:#1e293b;font-size:18px}
.checklist ul{list-style:none;margin-left:0}
.checklist ul li{padding:6px 0 6px 28px;position:relative}
.checklist ul li::before{content:&quot;&quot;;position:absolute;left:4px;top:13px;width:10px;height:10px;background:#dc2626;border-radius:50%}

.faq-item{margin:25px 0;border-bottom:1px solid #e5e7eb;padding-bottom:25px}
.faq-item:last-child{border-bottom:none}
.faq-question{font-weight:600;color:#000;font-size:17px;margin-bottom:10px}
.faq-answer{color:#333;line-height:1.7}

.cta-box{background:linear-gradient(135deg,#1e1b2e 0%,#7c1c1c 100%);border-radius:12px;padding:32px 36px;margin:40px 0;text-align:center}
.cta-box h3{color:#fff;font-size:22px;margin-bottom:12px}
.cta-box p{color:#fca5a5;font-size:15px;margin-bottom:20px}
.cta-box .cta-keyword{display:inline-block;background:#fff;color:#dc2626;font-weight:700;font-size:20px;padding:8px 24px;border-radius:6px;letter-spacing:.04em}

.related-reading{background:#f8f9fa;border:1px solid #e0e0e0;border-radius:8px;padding:30px;margin:40px 0}
.related-reading h2{margin-top:0}
.related-reading ul{margin-left:25px}
.related-reading li{margin:18px 0;line-height:1.7}
.related-reading .why-matters{color:#666;font-size:15px;margin-top:5px;display:block}

.about-author{background:#fffbf0;border:1px solid #e0e0e0;border-radius:8px;padding:30px;margin:40px 0}
.about-author h2{margin-top:0;font-size:28px}
.author-name{font-size:20px;font-weight:bold;color:#000;margin-bottom:10px}
.author-bio{color:#333;line-height:1.7;margin-bottom:15px}
.social-links{margin-top:20px}
.social-links a{display:inline-block;margin-right:20px;color:#dc2626;text-decoration:none;font-size:16px}
.social-links a:hover{text-decoration:underline}

.post-footer{border-top:1px solid #e0e0e0;padding-top:25px;margin-top:40px;color:#666;font-size:15px}
.post-meta{margin-bottom:15px}
.share-buttons{margin:20px 0}
.share-buttons a{display:inline-block;margin-right:15px;color:#dc2626;font-size:14px}
.tags{margin-top:20px}
.tags strong{color:#666;font-weight:normal}
.tags a{color:#dc2626;margin-right:10px;font-size:14px}

@media(max-width:768px){
  .hero-header{padding:40px 24px}
  .hero-header h1{font-size:28px}
  .hero-subtitle{font-size:16px}
  .hero-meta{gap:20px}
  h2{font-size:24px}
  h3{font-size:20px}
  table{font-size:13px}
  th,td{padding:9px}
  .code-block{font-size:12px}
  .error-badge{flex-direction:column}
}
&lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;

&lt;div class=&quot;hero-header&quot;&gt;
  &lt;div class=&quot;hero-header-content&quot;&gt;
    &lt;h1&gt;ORA-16766 Error in Oracle Data Guard: Causes and Fix (Oracle 19c Guide)&lt;/h1&gt;
    &lt;div class=&quot;hero-subtitle&quot;&gt;Redo Apply Service Not Running, How to Diagnose and Restart MRP in Under 5 Minutes&lt;/div&gt;
    &lt;div class=&quot;hero-meta&quot;&gt;
      &lt;div class=&quot;hero-meta-item&quot;&gt;&amp;#x1F4C5; 4 May 2026&lt;/div&gt;
      &lt;div class=&quot;hero-meta-item&quot;&gt;&amp;#x1F464; Chetan Yadav, Senior Oracle &amp;amp; Cloud DBA&lt;/div&gt;
      &lt;div class=&quot;hero-meta-item&quot;&gt;&amp;#x23F1;&amp;#xFE0F; 10-12 min read&lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;div class=&quot;main-content-wrapper&quot;&gt;
&lt;div class=&quot;container&quot;&gt;

&lt;div class=&quot;reading-time-badge&quot;&gt;&amp;#x23F1;&amp;#xFE0F; Estimated Reading Time: 10-12 minutes&lt;/div&gt;
&lt;div class=&quot;page-tagline&quot;&gt;ORA-16766, MRP Not Running, DGMGRL Diagnosis, MRP Restart, Standby Apply Fix, Oracle 19c&lt;/div&gt;

&lt;div class=&quot;hero-image-section&quot;&gt;
  &lt;img
    src=&quot;https://images.unsplash.com/photo-1544197150-b99a580bb7a8?w=1400&amp;h=500&amp;fit=crop&amp;q=85&amp;auto=format&quot;
    alt=&quot;Oracle Data Guard ORA-16766 error fix guide showing network infrastructure representing redo transport and standby database replication&quot;&gt;
&lt;/div&gt;

&lt;!-- ERROR DEFINITION --&gt;
&lt;div class=&quot;error-badge&quot; style=&quot;margin-top:28px;&quot;&gt;
  &lt;div class=&quot;err-code&quot;&gt;ORA-16766&lt;/div&gt;
  &lt;div class=&quot;err-detail&quot;&gt;
    &lt;p&gt;&lt;strong&gt;Full Error:&lt;/strong&gt; &lt;code&gt;ORA-16766: Redo Apply is stopped&lt;/code&gt;&lt;/p&gt;
    &lt;p style=&quot;margin-top:8px;&quot;&gt;This error appears in DGMGRL &lt;code&gt;SHOW CONFIGURATION&lt;/code&gt; output against the standby database. It means the Managed Recovery Process (MRP) on the standby has stopped and redo is no longer being applied. The standby is diverging from the primary with every passing second.&lt;/p&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;
  It was 3:22 AM. The monitoring alert fired: &lt;em&gt;&quot;Data Guard configuration warning — ORA-16766 on standby.&quot;&lt;/em&gt; Apply lag had jumped from zero to 47 minutes in under an hour. The standby database was alive, connected, receiving redo, but not applying any of it.
&lt;/p&gt;

&lt;p&gt;
  &lt;strong&gt;ORA-16766&lt;/strong&gt; is one of the most common Oracle Data Guard errors in production Oracle 19c environments. It always means the same thing: the MRP process on the standby has stopped. But the reasons it stops, and the correct fix for each reason, are completely different.
&lt;/p&gt;

&lt;p&gt;
  This guide covers every root cause of &lt;strong&gt;ORA-16766 in Oracle 19c&lt;/strong&gt;, the exact DGMGRL and SQL commands to diagnose it, and the step-by-step fix commands for each scenario. Most ORA-16766 errors are resolved in under 5 minutes once you know which cause you are dealing with.
&lt;/p&gt;

&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;

&lt;!-- DIAGRAM --&gt;
&lt;div class=&quot;diagram-section&quot;&gt;
  &lt;img
    src=&quot;PASTE_YOUR_BLOGGER_DIAGRAM_URL_HERE&quot;
    alt=&quot;ORA-16766 Oracle Data Guard error causes diagnosis and fix diagram showing root causes MRP diagnosis commands fix commands and decision flow for Oracle 19c&quot;&gt;
  &lt;div class=&quot;diagram-caption&quot;&gt;Figure 1: ORA-16766 Complete Reference, Root Causes, Diagnosis Queries, Fix Commands, Quick Decision Flow and Scenario Reference Table for Oracle 19c Data Guard&lt;/div&gt;
&lt;/div&gt;

&lt;div class=&quot;toc&quot;&gt;
  &lt;div class=&quot;toc-header&quot;&gt;&lt;span&gt;&amp;#x1F4DA;&lt;/span&gt; Table of Contents&lt;/div&gt;
  &lt;ol&gt;
    &lt;li&gt;&lt;a href=&quot;#section1&quot;&gt;What ORA-16766 Means and Why It Is Critical&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#section2&quot;&gt;Step 1: Immediate Diagnosis in DGMGRL and SQL&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#section3&quot;&gt;Root Cause 1: MRP Was Stopped or Never Started&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#section4&quot;&gt;Root Cause 2: Missing Standby Redo Logs&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#section5&quot;&gt;Root Cause 3: Data Guard Broker State Set to APPLY-OFF&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#section6&quot;&gt;Root Cause 4: Protection Mode Conflict&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#section7&quot;&gt;Root Cause 5: MRP Stopped After Standby Crash&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#section8&quot;&gt;Verify the Fix: Confirm ORA-16766 Is Resolved&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#section9&quot;&gt;Prevent ORA-16766 from Recurring&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#section10&quot;&gt;FAQ: ORA-16766 in Oracle Data Guard&lt;/a&gt;&lt;/li&gt;
  &lt;/ol&gt;
&lt;/div&gt;

&lt;!-- ══════════════════════════════════ --&gt;
&lt;h2 id=&quot;section1&quot;&gt;1. What ORA-16766 Means and Why It Is Critical&lt;/h2&gt;

&lt;p&gt;
  &lt;code&gt;ORA-16766: Redo Apply is stopped&lt;/code&gt; means the Managed Recovery Process (MRP0) on the standby database has terminated. No redo is being applied. The standby is frozen at the point MRP stopped.
&lt;/p&gt;

&lt;p&gt;
  While ORA-16766 is active, every transaction committed on the primary is at risk if the primary fails. The apply lag is your exposure window. A 2-hour apply lag when the primary fails means up to 2 hours of data loss.
&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;&lt;tr&gt;&lt;th&gt;State&lt;/th&gt;&lt;th&gt;What Is Happening&lt;/th&gt;&lt;th&gt;Data Loss Risk&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;&lt;td&gt;&lt;strong&gt;MRP Running normally&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Standby applies redo, lag near zero&lt;/td&gt;&lt;td&gt;Near zero (depends on protection mode)&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;&lt;strong&gt;ORA-16766 active&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;MRP stopped, standby frozen, lag growing&lt;/td&gt;&lt;td&gt;Equal to the current apply lag&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;&lt;strong&gt;ORA-16766 + no SRLs&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;MRP cannot start even if commanded&lt;/td&gt;&lt;td&gt;Growing every minute until fixed&lt;/td&gt;&lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;div class=&quot;tip-box&quot;&gt;
  &lt;strong&gt;Priority Level: Fix Immediately&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
  ORA-16766 is not a warning to schedule for the next maintenance window. Every minute it remains unfixed is another minute of redo that the standby cannot apply. If the primary fails while ORA-16766 is active, you activate a standby that is not fully synchronised. Treat it as a P1 incident.
&lt;/div&gt;

&lt;hr class=&quot;section-transition&quot;&gt;

&lt;!-- ══════════════════════════════════ --&gt;
&lt;h2 id=&quot;section2&quot;&gt;2. Step 1: Immediate Diagnosis in DGMGRL and SQL&lt;/h2&gt;

&lt;p&gt;
  Before applying any fix, run these diagnostic queries to identify the exact cause. Each cause has a different fix. Running the wrong command wastes time and can make things worse.
&lt;/p&gt;

&lt;div class=&quot;code-container&quot;&gt;
  &lt;div class=&quot;code-header&quot;&gt;
    &lt;span class=&quot;code-label&quot;&gt;DGMGRL, Step 1 Diagnosis, Identify ORA-16766 Root Cause&lt;/span&gt;
    &lt;button class=&quot;copy-btn&quot; onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;
  &lt;/div&gt;
  &lt;div class=&quot;code-block&quot;&gt;-- DGMGRL Diagnosis (run from primary or standby server)
-- dgmgrl /

-- Step 1a: Full configuration status
SHOW CONFIGURATION;
-- Look for: ORA-16766 next to standby database name

-- Step 1b: Detailed standby database status
SHOW DATABASE VERBOSE standby_db;
-- Look for: ApplyState, LogXptStatus, StatusReport

-- Step 1c: Validate the standby
VALIDATE DATABASE standby_db;
-- SQL Diagnosis (run on STANDBY)

-- Step 2a: Check if MRP process is running
SELECT process,
       status,
       thread#,
       sequence#
FROM   v$managed_standby
WHERE  process LIKE &#39;MRP%&#39;
OR     process LIKE &#39;PR%&#39;
ORDER  BY process;
-- If no rows = MRP not running = ORA-16766 confirmed

-- Step 2b: Check apply and transport lag
SELECT name,
       value,
       time_computed
FROM   v$dataguard_stats
WHERE  name IN (&#39;transport lag&#39;,&#39;apply lag&#39;,&#39;apply finish time&#39;)
ORDER  BY name;

-- Step 2c: Check Standby Redo Logs (missing = root cause)
SELECT group#,
       thread#,
       bytes/1024/1024  AS size_mb,
       archived,
       status
FROM   v$standby_log
ORDER  BY thread#, group#;
-- No rows = SRLs missing, MRP cannot do real-time apply

-- Step 2d: Check protection mode vs effective level (PRIMARY)
SELECT protection_mode,
       protection_level
FROM   v$database;
-- If they differ, primary fell back silently&lt;/div&gt;
&lt;/div&gt;

&lt;div class=&quot;success-box&quot;&gt;
  &lt;strong&gt;Interpret Your Results:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
  &lt;strong&gt;No MRP0 in v$managed_standby&lt;/strong&gt; = Root Cause 1 (MRP not started)&lt;br&gt;
  &lt;strong&gt;No rows in v$standby_log&lt;/strong&gt; = Root Cause 2 (Missing SRLs)&lt;br&gt;
  &lt;strong&gt;DGMGRL ApplyState = OFF&lt;/strong&gt; = Root Cause 3 (Broker disabled apply)&lt;br&gt;
  &lt;strong&gt;protection_level differs from protection_mode&lt;/strong&gt; = Root Cause 4&lt;br&gt;
  &lt;strong&gt;Alert log shows MRP0 terminated after crash&lt;/strong&gt; = Root Cause 5
&lt;/div&gt;

&lt;hr class=&quot;section-transition&quot;&gt;

&lt;h2 id=&quot;section3&quot;&gt;3. Root Cause 1: MRP Was Stopped or Never Started&lt;/h2&gt;
&lt;p&gt;&lt;span class=&quot;tag-cause&quot;&gt;Most Common&lt;/span&gt; The standby is open but MRP was manually cancelled during maintenance, stopped by a network timeout, or was never started when the standby was first opened.&lt;/p&gt;

&lt;div class=&quot;code-container&quot;&gt;
  &lt;div class=&quot;code-header&quot;&gt;
    &lt;span class=&quot;code-label&quot;&gt;SQL, Fix Root Cause 1, Start or Restart MRP&lt;/span&gt;
    &lt;button class=&quot;copy-btn&quot; onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;
  &lt;/div&gt;
  &lt;div class=&quot;code-block&quot;&gt;-- Run on STANDBY database

-- Option A: Real-time apply (RECOMMENDED when SRLs exist)
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE
    USING CURRENT LOGFILE
    DISCONNECT FROM SESSION;

-- Option B: Without real-time apply (if SRLs missing)
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE
    DISCONNECT FROM SESSION;

-- Option C: With parallel apply for faster lag catch-up
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE
    PARALLEL 8
    USING CURRENT LOGFILE
    DISCONNECT FROM SESSION;

-- Verify MRP started
SELECT process,
       status,
       thread#,
       sequence#
FROM   v$managed_standby
WHERE  process LIKE &#39;MRP%&#39;;
-- Expected: MRP0 status = APPLYING or WAIT_FOR_LOG&lt;/div&gt;
&lt;/div&gt;

&lt;div class=&quot;production-note&quot;&gt;
  &lt;p&gt;In a 4.8 TB core banking RAC primary, ORA-16766 appeared after a maintenance window where MRP was cancelled to apply an OS patch and not restarted. Apply lag had grown to 2.4 hours by the time monitoring fired. Restarting with parallel apply degree 8 cleared the lag to zero in 18 minutes.&lt;/p&gt;
&lt;/div&gt;

&lt;hr class=&quot;section-transition&quot;&gt;

&lt;h2 id=&quot;section4&quot;&gt;4. Root Cause 2: Missing Standby Redo Logs Prevent MRP from Starting&lt;/h2&gt;
&lt;p&gt;&lt;span class=&quot;tag-cause&quot;&gt;Silent Killer&lt;/span&gt; If &lt;code&gt;v$standby_log&lt;/code&gt; returns no rows, SRLs were never created. Without SRLs, &lt;code&gt;USING CURRENT LOGFILE&lt;/code&gt; cannot function and MRP cannot start real-time apply, triggering immediate ORA-16766.&lt;/p&gt;

&lt;div class=&quot;code-container&quot;&gt;
  &lt;div class=&quot;code-header&quot;&gt;
    &lt;span class=&quot;code-label&quot;&gt;SQL, Fix Root Cause 2, Create Missing Standby Redo Logs&lt;/span&gt;
    &lt;button class=&quot;copy-btn&quot; onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;
  &lt;/div&gt;
  &lt;div class=&quot;code-block&quot;&gt;-- Step 1: Check online redo log size on PRIMARY
SELECT group#,
       bytes/1024/1024  AS size_mb,
       status
FROM   v$log
ORDER  BY group#;

-- Step 2: Create SRLs on STANDBY (same size, groups+1 per thread)
ALTER DATABASE ADD STANDBY LOGFILE THREAD 1
    GROUP 11 (&#39;+DATA&#39;) SIZE 500M;
ALTER DATABASE ADD STANDBY LOGFILE THREAD 1
    GROUP 12 (&#39;+DATA&#39;) SIZE 500M;
ALTER DATABASE ADD STANDBY LOGFILE THREAD 1
    GROUP 13 (&#39;+DATA&#39;) SIZE 500M;
ALTER DATABASE ADD STANDBY LOGFILE THREAD 1
    GROUP 14 (&#39;+DATA&#39;) SIZE 500M;

-- Step 3: Verify SRLs created
SELECT group#, thread#, bytes/1024/1024 AS size_mb, status
FROM   v$standby_log ORDER BY thread#, group#;

-- Step 4: Restart MRP with real-time apply
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE
    USING CURRENT LOGFILE DISCONNECT FROM SESSION;

-- Step 5: Confirm real-time mode
SELECT process, status FROM v$managed_standby WHERE process=&#39;MRP0&#39;;
-- Expected: WAIT_FOR_LOG (real-time) not WAIT_FOR_GAP&lt;/div&gt;
&lt;/div&gt;

&lt;hr class=&quot;section-transition&quot;&gt;

&lt;h2 id=&quot;section5&quot;&gt;5. Root Cause 3: Data Guard Broker Set Apply State to OFF&lt;/h2&gt;
&lt;p&gt;&lt;span class=&quot;tag-cause&quot;&gt;Broker Managed&lt;/span&gt; If you manage Data Guard via DGMGRL, the broker controls apply state. Running direct &lt;code&gt;ALTER DATABASE RECOVER&lt;/code&gt; SQL will work temporarily but broker will override it. Fix must go through DGMGRL.&lt;/p&gt;

&lt;div class=&quot;code-container&quot;&gt;
  &lt;div class=&quot;code-header&quot;&gt;
    &lt;span class=&quot;code-label&quot;&gt;DGMGRL, Fix Root Cause 3, Re-enable Apply via Broker&lt;/span&gt;
    &lt;button class=&quot;copy-btn&quot; onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;
  &lt;/div&gt;
  &lt;div class=&quot;code-block&quot;&gt;-- dgmgrl /

-- Check current apply state
SHOW DATABASE VERBOSE standby_db;
-- Look for: ApplyState = OFF

-- Enable the database if disabled
ENABLE DATABASE standby_db;

-- Set apply state to ON
EDIT DATABASE standby_db SET STATE=&#39;APPLY-ON&#39;;

-- Verify
SHOW CONFIGURATION;
-- Expected: SUCCESS, no ORA-16766

-- Cross-check on standby
SELECT process, status FROM v$managed_standby WHERE process LIKE &#39;MRP%&#39;;&lt;/div&gt;
&lt;/div&gt;

&lt;div class=&quot;info-box&quot;&gt;
  &lt;strong&gt;Broker Overrides Direct SQL&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
  When &lt;code&gt;dg_broker_start = TRUE&lt;/code&gt;, broker manages apply state. If broker has apply set to OFF, it will cancel MRP again shortly after a direct SQL restart. Always fix ORA-16766 through DGMGRL when broker is enabled.
&lt;/div&gt;

&lt;hr class=&quot;section-transition&quot;&gt;

&lt;h2 id=&quot;section6&quot;&gt;6. Root Cause 4: Protection Mode Conflict Causing MRP Abort&lt;/h2&gt;
&lt;p&gt;&lt;span class=&quot;tag-cause&quot;&gt;Silent Risk&lt;/span&gt; Maximum Protection mode with an unstable standby connection can cause Oracle to abort MRP to prevent divergence, triggering ORA-16766. Check if &lt;code&gt;protection_level&lt;/code&gt; differs from &lt;code&gt;protection_mode&lt;/code&gt; on the primary.&lt;/p&gt;

&lt;div class=&quot;code-container&quot;&gt;
  &lt;div class=&quot;code-header&quot;&gt;
    &lt;span class=&quot;code-label&quot;&gt;SQL + DGMGRL, Fix Root Cause 4, Resolve Protection Mode Conflict&lt;/span&gt;
    &lt;button class=&quot;copy-btn&quot; onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;
  &lt;/div&gt;
  &lt;div class=&quot;code-block&quot;&gt;-- Check on PRIMARY
SELECT protection_mode, protection_level FROM v$database;
-- If they differ, primary fell back silently

-- Check archive destination error
SELECT dest_id, status, error, gap_status
FROM   v$archive_dest_status
WHERE  target = &#39;STANDBY&#39; AND status != &#39;INACTIVE&#39;;

-- Lower protection mode temporarily if needed (dgmgrl /)
EDIT CONFIGURATION SET PROTECTION MODE AS MAXAVAILABILITY;

-- Restart MRP on STANDBY
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE
    USING CURRENT LOGFILE DISCONNECT FROM SESSION;

-- Restore original mode once standby is stable
EDIT CONFIGURATION SET PROTECTION MODE AS MAXPROTECTION;&lt;/div&gt;
&lt;/div&gt;

&lt;hr class=&quot;section-transition&quot;&gt;

&lt;h2 id=&quot;section7&quot;&gt;7. Root Cause 5: MRP Stopped After Standby Instance Crash&lt;/h2&gt;
&lt;p&gt;&lt;span class=&quot;tag-cause&quot;&gt;Post-Crash&lt;/span&gt; After a standby OS reboot or crash, MRP does not automatically restart unless broker or a trigger is configured. Standby is open, ORA-16766 appears immediately.&lt;/p&gt;

&lt;div class=&quot;code-container&quot;&gt;
  &lt;div class=&quot;code-header&quot;&gt;
    &lt;span class=&quot;code-label&quot;&gt;SQL, Fix Root Cause 5, Post-Crash MRP Restart + Auto-Start Trigger&lt;/span&gt;
    &lt;button class=&quot;copy-btn&quot; onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;
  &lt;/div&gt;
  &lt;div class=&quot;code-block&quot;&gt;-- Verify standby state
SELECT status, database_role, open_mode FROM v$database;

-- Restart MRP
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE
    USING CURRENT LOGFILE DISCONNECT FROM SESSION;

-- Prevent recurrence: auto-start trigger on standby
CREATE OR REPLACE TRIGGER start_mrp_on_open
    AFTER STARTUP ON DATABASE
DECLARE
    v_role  v$database.database_role%TYPE;
BEGIN
    SELECT database_role INTO v_role FROM v$database;
    IF v_role = &#39;PHYSICAL STANDBY&#39; THEN
        EXECUTE IMMEDIATE
            &#39;ALTER DATABASE RECOVER MANAGED STANDBY DATABASE
             USING CURRENT LOGFILE DISCONNECT FROM SESSION&#39;;
    END IF;
EXCEPTION
    WHEN OTHERS THEN NULL;
END;
/&lt;/div&gt;
&lt;/div&gt;

&lt;div class=&quot;tip-box&quot;&gt;
  &lt;strong&gt;Broker Alternative:&lt;/strong&gt; If Data Guard Broker is enabled, you do not need the trigger. Broker auto-restarts MRP after standby restart if state is APPLY-ON. Ensure &lt;code&gt;dg_broker_start = TRUE&lt;/code&gt; in the standby spfile.
&lt;/div&gt;

&lt;hr class=&quot;section-transition&quot;&gt;

&lt;h2 id=&quot;section8&quot;&gt;8. Verify the Fix: Confirm ORA-16766 Is Fully Resolved&lt;/h2&gt;

&lt;div class=&quot;code-container&quot;&gt;
  &lt;div class=&quot;code-header&quot;&gt;
    &lt;span class=&quot;code-label&quot;&gt;SQL + DGMGRL, Complete Post-Fix Verification&lt;/span&gt;
    &lt;button class=&quot;copy-btn&quot; onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;
  &lt;/div&gt;
  &lt;div class=&quot;code-block&quot;&gt;-- 1. MRP running (STANDBY)
SELECT process, status, sequence# FROM v$managed_standby
WHERE  process LIKE &#39;MRP%&#39;;
-- Expected: MRP0 = WAIT_FOR_LOG or APPLYING

-- 2. Apply lag dropping to zero
SELECT name, value FROM v$dataguard_stats
WHERE  name IN (&#39;transport lag&#39;,&#39;apply lag&#39;);

-- 3. Protection level matches mode (PRIMARY)
SELECT protection_mode, protection_level FROM v$database;

-- 4. DGMGRL shows SUCCESS
-- SHOW CONFIGURATION;

-- 5. No archive gap (PRIMARY)
SELECT thread#, low_sequence#, high_sequence# FROM v$archive_gap;
-- Expected: No rows&lt;/div&gt;
&lt;/div&gt;

&lt;div class=&quot;success-box&quot;&gt;
  &lt;strong&gt;Full Resolution Checklist:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
  DGMGRL shows SUCCESS. MRP0 status is WAIT_FOR_LOG or APPLYING. Apply lag dropping to zero. No rows in v$archive_gap. Protection level matches protection mode. All five = ORA-16766 fully resolved.
&lt;/div&gt;

&lt;hr class=&quot;section-transition&quot;&gt;

&lt;h2 id=&quot;section9&quot;&gt;9. Prevent ORA-16766 from Recurring&lt;/h2&gt;

&lt;div class=&quot;checklist&quot;&gt;
  &lt;h3&gt;Configuration Hardening Checklist&lt;/h3&gt;
  &lt;ul&gt;
    &lt;li&gt;Standby Redo Logs created: same size as online redo logs, groups + 1 per thread&lt;/li&gt;
    &lt;li&gt;Data Guard Broker enabled with &lt;code&gt;dg_broker_start = TRUE&lt;/code&gt; on both nodes&lt;/li&gt;
    &lt;li&gt;MRP startup trigger created on standby (if not using broker auto-restart)&lt;/li&gt;
    &lt;li&gt;Protection mode set to Maximum Availability unless Zero Data Loss is mandated&lt;/li&gt;
    &lt;li&gt;Monitoring alert for ORA-16766 in alert log with 5-minute response SLA&lt;/li&gt;
    &lt;li&gt;DGMGRL VALIDATE DATABASE run weekly&lt;/li&gt;
    &lt;li&gt;Apply lag alert threshold set at 30 seconds&lt;/li&gt;
  &lt;/ul&gt;
&lt;/div&gt;

&lt;div class=&quot;code-container&quot;&gt;
  &lt;div class=&quot;code-header&quot;&gt;
    &lt;span class=&quot;code-label&quot;&gt;SQL, Proactive ORA-16766 Detection (Run Every 5 Minutes)&lt;/span&gt;
    &lt;button class=&quot;copy-btn&quot; onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;
  &lt;/div&gt;
  &lt;div class=&quot;code-block&quot;&gt;-- MRP health check on STANDBY
SELECT CASE
           WHEN COUNT(*) = 0
           THEN &#39;ALERT: MRP not running — ORA-16766 likely&#39;
           ELSE &#39;OK: MRP running&#39;
       END  AS mrp_status
FROM   v$managed_standby
WHERE  process = &#39;MRP0&#39;
AND    status NOT IN (&#39;IDLE&#39;);

-- Apply lag alert
SELECT name,
       value,
       CASE
           WHEN TO_DSINTERVAL(value) &gt; INTERVAL &#39;0 00:00:30&#39; HOUR TO SECOND
           THEN &#39;ALERT: &#39; || name || &#39; exceeds 30 seconds&#39;
           ELSE &#39;OK&#39;
       END  AS lag_status
FROM   v$dataguard_stats
WHERE  name IN (&#39;transport lag&#39;,&#39;apply lag&#39;)
ORDER  BY name;&lt;/div&gt;
&lt;/div&gt;

&lt;hr class=&quot;section-transition&quot;&gt;

&lt;h2 id=&quot;section10&quot;&gt;FAQ: ORA-16766 in Oracle Data Guard&lt;/h2&gt;

&lt;div class=&quot;faq-item&quot;&gt;
  &lt;div class=&quot;faq-question&quot;&gt;What does ORA-16766 mean in Oracle Data Guard?&lt;/div&gt;
  &lt;div class=&quot;faq-answer&quot;&gt;ORA-16766 means &lt;em&gt;Redo Apply is stopped&lt;/em&gt;. The MRP0 process on the standby has terminated and no redo is being applied. The standby is frozen at the SCN when MRP stopped. It does not mean the standby is down or the network is broken, only that MRP has stopped.&lt;/div&gt;
&lt;/div&gt;

&lt;div class=&quot;faq-item&quot;&gt;
  &lt;div class=&quot;faq-question&quot;&gt;How do I fix ORA-16766 in Oracle 19c Data Guard?&lt;/div&gt;
  &lt;div class=&quot;faq-answer&quot;&gt;
    The fastest fix for most cases: on the standby run &lt;code&gt;ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION;&lt;/code&gt; If using Broker: &lt;code&gt;DGMGRL&amp;gt; EDIT DATABASE standby_db SET STATE=&#39;APPLY-ON&#39;;&lt;/code&gt; If MRP still does not start, check &lt;code&gt;v$standby_log&lt;/code&gt; — if empty, create SRLs first.
  &lt;/div&gt;
&lt;/div&gt;

&lt;div class=&quot;faq-item&quot;&gt;
  &lt;div class=&quot;faq-question&quot;&gt;Why does ORA-16766 keep coming back after restart?&lt;/div&gt;
  &lt;div class=&quot;faq-answer&quot;&gt;Recurring ORA-16766 usually means: (1) Broker has apply set to OFF and keeps cancelling MRP — fix via DGMGRL. (2) Missing SRLs cause MRP to fail on start. (3) Maximum Protection mode with unstable standby connection causes repeated abort. Check which one applies using DGMGRL SHOW DATABASE VERBOSE.&lt;/div&gt;
&lt;/div&gt;

&lt;div class=&quot;faq-item&quot;&gt;
  &lt;div class=&quot;faq-question&quot;&gt;Does ORA-16766 mean data loss has already occurred?&lt;/div&gt;
  &lt;div class=&quot;faq-answer&quot;&gt;No. ORA-16766 means data loss has not yet occurred but the risk window is open. The standby is not applying redo, so if the primary fails, you lose redo generated since MRP stopped. Fix it immediately. Every minute of delay increases your exposure.&lt;/div&gt;
&lt;/div&gt;

&lt;div class=&quot;faq-item&quot;&gt;
  &lt;div class=&quot;faq-question&quot;&gt;Can ORA-16766 appear while the standby is still receiving redo?&lt;/div&gt;
  &lt;div class=&quot;faq-answer&quot;&gt;Yes. This is the missing SRL pattern. The RFS process receives and archives redo normally (transport lag = zero) but MRP cannot start real-time apply without SRLs. So the standby receives redo but apply lag grows and ORA-16766 appears in DGMGRL.&lt;/div&gt;
&lt;/div&gt;

&lt;div class=&quot;cta-box&quot;&gt;
  &lt;h3&gt;Dealing with a different Data Guard error?&lt;/h3&gt;
  &lt;p&gt;Drop a comment with your exact error code and DGMGRL output. I will help you diagnose and fix it.&lt;/p&gt;
  &lt;span class=&quot;cta-keyword&quot;&gt;Comment DG&lt;/span&gt;
&lt;/div&gt;

&lt;div class=&quot;about-author&quot;&gt;
  &lt;h2&gt;About the Author&lt;/h2&gt;
  &lt;div class=&quot;author-name&quot;&gt;Chetan Yadav&lt;/div&gt;
  &lt;p class=&quot;author-bio&quot;&gt;&lt;strong&gt;Chetan Yadav&lt;/strong&gt; is a &lt;strong&gt;Senior Oracle, PostgreSQL, MySQL, and Cloud DBA&lt;/strong&gt; with &lt;strong&gt;15+ years&lt;/strong&gt; of hands-on experience managing mission-critical production databases across finance, healthcare, and e-commerce sectors.&lt;/p&gt;
  &lt;p class=&quot;author-bio&quot;&gt;Chetan has resolved ORA-16766 and related Data Guard errors across multiple production RAC and single-instance environments. His writing focuses on exact diagnosis and exact fix commands, not generic advice.&lt;/p&gt;
  &lt;p class=&quot;author-bio&quot;&gt;This blog covers &lt;strong&gt;real-world DBA problems, cloud architecture, and practical learning&lt;/strong&gt;, not theoretical documentation or vendor marketing.&lt;/p&gt;
  &lt;div class=&quot;social-links&quot;&gt;
    &lt;a href=&quot;https://www.linkedin.com/in/chetanyadavvds/&quot; target=&quot;_blank&quot;&gt;LinkedIn&lt;/a&gt;
    &lt;a href=&quot;https://www.youtube.com/@levelup_careers&quot; target=&quot;_blank&quot;&gt;YouTube&lt;/a&gt;
    &lt;a href=&quot;https://www.instagram.com/levelup_careers/&quot; target=&quot;_blank&quot;&gt;Instagram&lt;/a&gt;
    &lt;a href=&quot;https://x.com/home&quot; target=&quot;_blank&quot;&gt;Twitter (X)&lt;/a&gt;
    &lt;a href=&quot;https://www.facebook.com/oracledbainfo/&quot; target=&quot;_blank&quot;&gt;Facebook&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;Newsletter&lt;/a&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;div class=&quot;related-reading&quot;&gt;
  &lt;h2&gt;Related Reading&lt;/h2&gt;
  &lt;ul&gt;
    &lt;li&gt;
      &lt;a href=&quot;#&quot;&gt;How to Fix Data Guard Lag in Oracle 19c: Step-by-Step Troubleshooting Guide&lt;/a&gt;
      &lt;span class=&quot;why-matters&quot;&gt;Why it matters: After resolving ORA-16766 and restarting MRP, you may still have accumulated apply lag. This guide covers how to diagnose and reduce it to zero.&lt;/span&gt;
    &lt;/li&gt;
    &lt;li&gt;
      &lt;a href=&quot;#&quot;&gt;Oracle Data Guard Protection Modes: Zero Data Loss Design Strategy&lt;/a&gt;
      &lt;span class=&quot;why-matters&quot;&gt;Why it matters: Understanding protection modes prevents ORA-16766 caused by protection mode conflicts and guides the right choice between Maximum Protection and Maximum Availability.&lt;/span&gt;
    &lt;/li&gt;
    &lt;li&gt;
      &lt;a href=&quot;#&quot;&gt;Why Data Guard Lag Happens in Production: Sync, I/O and Network Deep Dive&lt;/a&gt;
      &lt;span class=&quot;why-matters&quot;&gt;Why it matters: ORA-16766 often appears alongside lag issues. This guide explains the six root causes of lag that persist even after MRP is restarted.&lt;/span&gt;
    &lt;/li&gt;
  &lt;/ul&gt;
&lt;/div&gt;

&lt;div class=&quot;post-footer&quot;&gt;
  &lt;div class=&quot;post-meta&quot;&gt;&lt;strong&gt;by Chetan Yadav&lt;/strong&gt;, April 2026&lt;/div&gt;
  &lt;div class=&quot;share-buttons&quot;&gt;
    &lt;strong&gt;Share:&lt;/strong&gt;
    &lt;a href=&quot;#&quot;&gt;Email&lt;/a&gt;&lt;a href=&quot;#&quot;&gt;BlogThis&lt;/a&gt;&lt;a href=&quot;#&quot;&gt;X&lt;/a&gt;&lt;a href=&quot;#&quot;&gt;Facebook&lt;/a&gt;&lt;a href=&quot;#&quot;&gt;Pinterest&lt;/a&gt;
  &lt;/div&gt;
  &lt;div class=&quot;tags&quot;&gt;
    &lt;strong&gt;Tags:&lt;/strong&gt;
    &lt;a href=&quot;#&quot;&gt;ORA-16766&lt;/a&gt;&lt;a href=&quot;#&quot;&gt;Oracle Data Guard&lt;/a&gt;&lt;a href=&quot;#&quot;&gt;Redo Apply&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;MRP Process&lt;/a&gt;&lt;a href=&quot;#&quot;&gt;Oracle 19c&lt;/a&gt;&lt;a href=&quot;#&quot;&gt;DGMGRL&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;Standby Database&lt;/a&gt;&lt;a href=&quot;#&quot;&gt;Oracle Error Fix&lt;/a&gt;&lt;a href=&quot;#&quot;&gt;HA DR&lt;/a&gt;&lt;a href=&quot;#&quot;&gt;Oracle DBA&lt;/a&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;
&lt;/div&gt;
&lt;script&gt;
function copyCode(button){
  const cb=button.closest(&#39;.code-container&#39;).querySelector(&#39;.code-block&#39;);
  const ta=document.createElement(&#39;textarea&#39;);
  ta.value=cb.textContent;ta.style.position=&#39;fixed&#39;;ta.style.left=&#39;-9999px&#39;;
  document.body.appendChild(ta);ta.select();ta.setSelectionRange(0,99999);
  try{document.execCommand(&#39;copy&#39;);button.textContent=&#39;Copied!&#39;;button.classList.add(&#39;copied&#39;);
    setTimeout(()=&gt;{button.textContent=&#39;Copy&#39;;button.classList.remove(&#39;copied&#39;);},2000);}
  catch(e){button.textContent=&#39;Failed&#39;;setTimeout(()=&gt;{button.textContent=&#39;Copy&#39;;},2000);}
  document.body.removeChild(ta);
}
&lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;</content><link rel='replies' type='application/atom+xml' href='http://chetanyadavds.blogspot.com/feeds/1337912671377780948/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://chetanyadavds.blogspot.com/2026/05/ora-16766-error-oracle-data-guard-causes-fix-19c.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/436196721812840248/posts/default/1337912671377780948'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/436196721812840248/posts/default/1337912671377780948'/><link rel='alternate' type='text/html' href='http://chetanyadavds.blogspot.com/2026/05/ora-16766-error-oracle-data-guard-causes-fix-19c.html' title='ORA-16766 Error in Oracle Data Guard: Causes and Fix (19c Guide)'/><author><name>Chetan Yadav</name><uri>http://www.blogger.com/profile/02557500437758632199</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiE0TgifWM4l1b3sy_cK2y41bpqyfY1U25-p5IBKkSg8pJLFRvjYr_kF7W_MgsYdc21DutWF9H6qlShQDQspQLbZEQ5CSUA51Wp6Mh9l5Ygd4NPSuQyqwSMrKitCWwSLr0oHBg9TGjxAvAM7TTkkehHLL1MFWg0wSb31CxywQxIokg9pg/s1600/IMG-20251013-WA0038.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-436196721812840248.post-2914837257317100843</id><published>2026-04-30T14:38:00.003+05:30</published><updated>2026-04-30T14:38:43.561+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="ATS Resume"/><category scheme="http://www.blogger.com/atom/ns#" term="Campus Placement"/><category scheme="http://www.blogger.com/atom/ns#" term="Career Tips"/><category scheme="http://www.blogger.com/atom/ns#" term="DBA Career"/><category scheme="http://www.blogger.com/atom/ns#" term="Fresher Jobs"/><category scheme="http://www.blogger.com/atom/ns#" term="Interview Calls"/><category scheme="http://www.blogger.com/atom/ns#" term="Job Search 2026"/><category scheme="http://www.blogger.com/atom/ns#" term="Referral Strategy"/><category scheme="http://www.blogger.com/atom/ns#" term="Targeted Job Search"/><title type='text'>Why You&#39;re Not Getting Interview Calls: Blind Applications vs Targeted Strategy</title><content type='html'>&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;en&quot;&gt;
&lt;head&gt;
&lt;meta charset=&quot;UTF-8&quot;&gt;
&lt;title&gt;Why You&#39;re Not Getting Interview Calls in 2026: Blind vs Targeted Job Search Strategy&lt;/title&gt;
&lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;
&lt;meta name=&quot;description&quot; content=&quot;Why freshers are not getting interview calls in 2026: blind applications vs targeted strategy, ATS failures, no referral approach and exact fixes with templates for students and job seekers.&quot;&gt;
&lt;meta name=&quot;keywords&quot; content=&quot;why not getting interview calls, fresher job search 2026, blind applications, targeted job search, ATS resume tips, referral strategy, how to get interview calls, campus placement tips&quot;&gt;
&lt;meta name=&quot;author&quot; content=&quot;Chetan Yadav&quot;&gt;
&lt;link rel=&quot;canonical&quot; href=&quot;https://chetanyadavds.blogspot.com/2026/04/why-not-getting-interview-calls.html&quot;&gt;

&lt;!-- Open Graph --&gt;
&lt;meta property=&quot;og:title&quot; content=&quot;Why You&#39;re Not Getting Interview Calls in 2026: Blind vs Targeted Job Search Strategy&quot;&gt;
&lt;meta property=&quot;og:description&quot; content=&quot;100 applications. 0 responses. Here is exactly why freshers are not getting interview calls and the targeted strategy that actually works.&quot;&gt;
&lt;meta property=&quot;og:type&quot; content=&quot;article&quot;&gt;
&lt;meta property=&quot;og:image&quot; content=&quot;https://images.unsplash.com/photo-1486312338219-ce68d2c6f44d?w=1200&amp;h=630&amp;fit=crop&amp;q=85&quot;&gt;

&lt;!-- Article Schema --&gt;
&lt;script type=&quot;application/ld+json&quot;&gt;
{
  &quot;@context&quot;: &quot;https://schema.org&quot;,
  &quot;@type&quot;: &quot;Article&quot;,
  &quot;headline&quot;: &quot;Why You&#39;re Not Getting Interview Calls in 2026: Blind vs Targeted Job Search Strategy&quot;,
  &quot;description&quot;: &quot;Why freshers are not getting interview calls in 2026: blind applications, ATS failures, no referral strategy and how to fix each with a targeted job search approach.&quot;,
  &quot;author&quot;: {
    &quot;@type&quot;: &quot;Person&quot;,
    &quot;name&quot;: &quot;Chetan Yadav&quot;,
    &quot;url&quot;: &quot;https://www.linkedin.com/in/chetanyadavvds/&quot;
  },
  &quot;publisher&quot;: {
    &quot;@type&quot;: &quot;Organization&quot;,
    &quot;name&quot;: &quot;LevelUp Careers&quot;,
    &quot;url&quot;: &quot;https://chetanyadavds.blogspot.com&quot;
  },
  &quot;datePublished&quot;: &quot;2026-04-01&quot;,
  &quot;dateModified&quot;: &quot;2026-04-01&quot;,
  &quot;mainEntityOfPage&quot;: {
    &quot;@type&quot;: &quot;WebPage&quot;,
    &quot;@id&quot;: &quot;https://chetanyadavds.blogspot.com/2026/04/why-not-getting-interview-calls.html&quot;
  }
}
&lt;/script&gt;

&lt;!-- FAQ Schema --&gt;
&lt;script type=&quot;application/ld+json&quot;&gt;
{
  &quot;@context&quot;: &quot;https://schema.org&quot;,
  &quot;@type&quot;: &quot;FAQPage&quot;,
  &quot;mainEntity&quot;: [
    {
      &quot;@type&quot;: &quot;Question&quot;,
      &quot;name&quot;: &quot;How long should a targeted job search take before I get an interview?&quot;,
      &quot;acceptedAnswer&quot;: {
        &quot;@type&quot;: &quot;Answer&quot;,
        &quot;text&quot;: &quot;With a genuinely targeted approach of 10 to 15 customised applications per week, LinkedIn outreach, and referral requests, most freshers in tech see their first interview within 3 to 6 weeks.&quot;
      }
    },
    {
      &quot;@type&quot;: &quot;Question&quot;,
      &quot;name&quot;: &quot;Why am I not getting interview calls despite applying to many jobs?&quot;,
      &quot;acceptedAnswer&quot;: {
        &quot;@type&quot;: &quot;Answer&quot;,
        &quot;text&quot;: &quot;The most common reasons are: ATS rejecting your resume due to missing keywords or wrong format, applying to roles you are underqualified for, using a generic resume for every application, and having no referral or follow-up strategy.&quot;
      }
    },
    {
      &quot;@type&quot;: &quot;Question&quot;,
      &quot;name&quot;: &quot;Is it okay to apply to the same company multiple times?&quot;,
      &quot;acceptedAnswer&quot;: {
        &quot;@type&quot;: &quot;Answer&quot;,
        &quot;text&quot;: &quot;For different roles, yes, but space them out by at least 2 to 3 weeks. Applying to 5 roles at the same company in the same week flags your application as unserious.&quot;
      }
    },
    {
      &quot;@type&quot;: &quot;Question&quot;,
      &quot;name&quot;: &quot;What if I have no connections at any company I want to apply to?&quot;,
      &quot;acceptedAnswer&quot;: {
        &quot;@type&quot;: &quot;Answer&quot;,
        &quot;text&quot;: &quot;Connect with college alumni who graduated 1 to 3 years before you and are now working in your target domain. Search LinkedIn for your college name plus your target company name to find alumni who can refer you.&quot;
      }
    },
    {
      &quot;@type&quot;: &quot;Question&quot;,
      &quot;name&quot;: &quot;How do I ask for a referral without being awkward?&quot;,
      &quot;acceptedAnswer&quot;: {
        &quot;@type&quot;: &quot;Answer&quot;,
        &quot;text&quot;: &quot;Start with a genuine connection message mentioning something specific about their work. Build the relationship over 1 to 2 weeks of conversation before asking. Always make it easy for them to say no, which actually increases the yes rate.&quot;
      }
    }
  ]
}
&lt;/script&gt;

&lt;style&gt;
*{margin:0;padding:0;box-sizing:border-box}
body{background:#fff;color:#333;font-family:Arial,Helvetica,sans-serif;font-size:16px;line-height:1.7}
.post-title,.entry-title,h1.post-title,h3.post-title{display:none!important}

.hero-header{background:linear-gradient(135deg,#0f172a 0%,#1e3a5f 50%,#0f172a 100%);color:#fff;padding:60px 40px;width:100%}
.hero-header-content{max-width:1200px;margin:0 auto;padding:0 20px}
.hero-header h1{font-size:42px;font-weight:700;color:#fff;line-height:1.3;margin-bottom:20px}
.hero-subtitle{font-size:20px;font-weight:300;color:#bfdbfe;opacity:.95;margin-bottom:30px}
.hero-meta{display:flex;gap:30px;align-items:center;flex-wrap:wrap;font-size:15px;color:#93c5fd}
.hero-meta-item{display:flex;align-items:center;gap:8px}

.hero-image-section{width:100%;margin:0;padding:0;overflow:hidden;background:#000}
.hero-image-section img{width:100%;height:auto;display:block;max-height:480px;object-fit:cover;object-position:center center}

.main-content-wrapper{width:100%;background:#fff}
.container{max-width:800px;margin:0 auto;padding:30px 20px;background:#fff}

.reading-time-badge{display:inline-block;background:linear-gradient(135deg,#1e3a5f 0%,#0f172a 100%);color:#fff;padding:12px 28px;border-radius:50px;font-size:15px;font-weight:500;margin-bottom:30px;box-shadow:0 4px 12px rgba(15,23,42,.4)}
.page-tagline{color:#666;font-size:15px;font-style:italic;text-align:center;margin-bottom:35px}

.read-more-link{display:block;margin:28px 0 8px}
.read-more-link a{color:#1e3a5f;font-size:15px;text-decoration:none;font-style:italic}
.read-more-link a:hover{text-decoration:underline}

.diagram-section{width:100%;margin:28px 0;overflow:hidden;border-radius:10px;box-shadow:0 4px 16px rgba(0,0,0,.12)}
.diagram-section img{width:100%;height:auto;display:block}
.diagram-caption{background:#f8f9fa;border-top:1px solid #e0e0e0;padding:10px 16px;font-size:13px;color:#666;font-style:italic}

.toc{background:#f0f4ff;border-left:4px solid #1e3a5f;padding:28px 32px;margin:35px 0;border-radius:8px;box-shadow:0 1px 3px rgba(0,0,0,.05)}
.toc-header{display:flex;align-items:center;gap:10px;font-size:24px;font-weight:bold;color:#000;margin-bottom:20px}
.toc ol{margin-left:20px;line-height:1.9;counter-reset:toc-counter;list-style:none}
.toc ol li{counter-increment:toc-counter;margin:12px 0;font-size:16px;padding-bottom:12px;border-bottom:1px solid #c7d7f0;transition:all .2s ease}
.toc ol li:last-child{border-bottom:none}
.toc ol li:hover{padding-left:8px}
.toc ol li::before{content:counter(toc-counter) &quot;. &quot;;font-weight:600;color:#1e3a5f;margin-right:8px}
.toc a{color:#1e3a5f;text-decoration:none}
.toc a:hover{text-decoration:underline}

h2{font-size:28px;font-weight:bold;color:#000;margin:45px 0 20px;line-height:1.3}
h3{font-size:22px;font-weight:600;color:#333;margin:30px 0 15px}
p{margin:16px 0;color:#333;line-height:1.7}
ul,ol{margin:18px 0 18px 35px;color:#333;line-height:1.7}
ul li,ol li{margin:10px 0}
strong{font-weight:bold;color:#333}
em{font-style:italic}
a{color:#1e3a5f;text-decoration:none}
a:hover{text-decoration:underline}

.tag-good{display:inline-block;background:#e6f4ea;color:#137333;border:1px solid #a8d5b5;border-radius:4px;padding:1px 8px;font-size:13px;font-weight:600;margin-right:6px;vertical-align:middle}
.tag-bad{display:inline-block;background:#fce8e6;color:#c5221f;border:1px solid #f5a8a4;border-radius:4px;padding:1px 8px;font-size:13px;font-weight:600;margin-right:6px;vertical-align:middle}
.tag-rule{display:inline-block;background:#f0f4ff;color:#1e3a5f;border:1px solid #93c5fd;border-radius:4px;padding:1px 8px;font-size:13px;font-weight:600;margin-right:6px;vertical-align:middle}

.compare-wrap{display:grid;grid-template-columns:1fr 1fr;gap:16px;margin:24px 0}
.compare-bad{background:#fef2f2;border:2px solid #fca5a5;border-radius:10px;padding:20px}
.compare-good{background:#f0fdf4;border:2px solid #86efac;border-radius:10px;padding:20px}
.compare-label{font-weight:700;font-size:14px;margin-bottom:12px;letter-spacing:.04em;display:block}
.compare-label.bad{color:#991b1b}
.compare-label.good{color:#15803d}
.compare-text{font-size:14px;line-height:1.8;color:#333}
.compare-text li{margin:6px 0}
@media(max-width:600px){.compare-wrap{grid-template-columns:1fr}}

/* STAT HIGHLIGHT BOX */
.stat-highlight{background:linear-gradient(135deg,#0f172a 0%,#1e3a5f 100%);border-radius:10px;padding:24px 28px;margin:28px 0;text-align:center}
.stat-highlight .stat-number{font-size:48px;font-weight:700;color:#fff;line-height:1.1}
.stat-highlight .stat-label{font-size:16px;color:#bfdbfe;margin-top:8px}

/* TRANSITION LINE */
.section-transition{border:none;border-top:2px dashed #c7d7f0;margin:40px 0}

.code-container{position:relative;margin:24px 0}
.code-header{background:#0f172a;color:#fff;padding:10px 16px;border-radius:8px 8px 0 0;display:flex;justify-content:space-between;align-items:center;font-size:14px}
.code-label{font-weight:500}
.copy-btn{background:#1e3a5f;color:#fff;border:none;padding:6px 14px;border-radius:5px;cursor:pointer;font-size:13px;transition:background .2s;font-family:Arial,sans-serif}
.copy-btn:hover{background:#0f172a}
.copy-btn.copied{background:#10b981}
.code-block{background:#f8f9fa;border:1px solid #e0e0e0;border-radius:0 0 8px 8px;padding:18px 20px;margin:0;overflow-x:auto;font-family:&#39;Courier New&#39;,Courier,monospace;font-size:14px;line-height:1.7;white-space:pre;tab-size:4}
code{background:#f8f9fa;padding:2px 6px;border-radius:3px;font-family:&#39;Courier New&#39;,monospace;font-size:14px;color:#1e3a5f}

.info-box{background:#fffbeb;border-left:4px solid #f59e0b;padding:18px 22px;border-radius:0 8px 8px 0;margin:25px 0}
.info-box strong{color:#92400e}
.tip-box{background:#f0f4ff;border-left:4px solid #1e3a5f;padding:18px 22px;border-radius:0 8px 8px 0;margin:25px 0}
.tip-box strong{color:#0f172a}
.incident-box{background:#fef2f2;border-left:4px solid #ef4444;padding:18px 22px;border-radius:0 8px 8px 0;margin:25px 0}
.incident-box strong{color:#991b1b}
.success-box{background:#f0fdf4;border-left:4px solid #22c55e;padding:18px 22px;border-radius:0 8px 8px 0;margin:25px 0}
.success-box strong{color:#15803d}

/* PRODUCTION CALLOUT */
.production-note{background:#fff8f0;border:2px solid #f59e0b;border-radius:10px;padding:20px 24px;margin:28px 0;position:relative}
.production-note::before{content:&quot;FROM PRODUCTION&quot;;position:absolute;top:-13px;left:20px;background:#f59e0b;color:#fff;font-size:11px;font-weight:700;padding:2px 10px;border-radius:4px;letter-spacing:.08em}
.production-note p{margin:0;color:#333;font-size:15px;line-height:1.7}

/* CTA BOX */
.cta-box{background:linear-gradient(135deg,#0f172a 0%,#1e3a5f 100%);border-radius:12px;padding:32px 36px;margin:40px 0;text-align:center}
.cta-box h3{color:#fff;font-size:22px;margin-bottom:12px}
.cta-box p{color:#bfdbfe;font-size:15px;margin-bottom:20px}
.cta-box .cta-keyword{display:inline-block;background:#fff;color:#1e3a5f;font-weight:700;font-size:20px;padding:8px 24px;border-radius:6px;letter-spacing:.04em}

table{width:100%;border-collapse:collapse;margin:25px 0;background:#fff;border:1px solid #e0e0e0}
thead{background:#0f172a}
th{padding:12px;text-align:left;font-weight:bold;color:#fff;border-bottom:2px solid #e0e0e0;font-size:15px}
td{padding:12px;border-bottom:1px solid #e0e0e0;color:#333;font-size:15px}
tr:last-child td{border-bottom:none}
tbody tr:hover{background:#f0f4ff}

.checklist{background:#f0f4ff;border:1px solid #c7d7f0;border-radius:8px;padding:24px 28px;margin:18px 0}
.checklist h3{margin-top:0;color:#1e293b;font-size:18px}
.checklist ul{list-style:none;margin-left:0}
.checklist ul li{padding:6px 0 6px 28px;position:relative}
.checklist ul li::before{content:&quot;&quot;;position:absolute;left:4px;top:13px;width:10px;height:10px;background:#1e3a5f;border-radius:50%}

.faq-item{margin:25px 0;border-bottom:1px solid #e5e7eb;padding-bottom:25px}
.faq-item:last-child{border-bottom:none}
.faq-question{font-weight:600;color:#000;font-size:17px;margin-bottom:10px}
.faq-answer{color:#333;line-height:1.7}

.related-reading{background:#f8f9fa;border:1px solid #e0e0e0;border-radius:8px;padding:30px;margin:40px 0}
.related-reading h2{margin-top:0}
.related-reading ul{margin-left:25px}
.related-reading li{margin:18px 0;line-height:1.7}
.related-reading .why-matters{color:#666;font-size:15px;margin-top:5px;display:block}

.about-author{background:#fffbf0;border:1px solid #e0e0e0;border-radius:8px;padding:30px;margin:40px 0}
.about-author h2{margin-top:0;font-size:28px}
.author-name{font-size:20px;font-weight:bold;color:#000;margin-bottom:10px}
.author-bio{color:#333;line-height:1.7;margin-bottom:15px}
.social-links{margin-top:20px}
.social-links a{display:inline-block;margin-right:20px;color:#1e3a5f;text-decoration:none;font-size:16px}
.social-links a:hover{text-decoration:underline}

.post-footer{border-top:1px solid #e0e0e0;padding-top:25px;margin-top:40px;color:#666;font-size:15px}
.post-meta{margin-bottom:15px}
.share-buttons{margin:20px 0}
.share-buttons a{display:inline-block;margin-right:15px;color:#1e3a5f;font-size:14px}
.tags{margin-top:20px}
.tags strong{color:#666;font-weight:normal}
.tags a{color:#1e3a5f;margin-right:10px;font-size:14px}

@media(max-width:768px){
  .hero-header{padding:40px 24px}
  .hero-header h1{font-size:28px}
  .hero-subtitle{font-size:16px}
  .hero-meta{gap:20px}
  h2{font-size:24px}
  h3{font-size:20px}
  table{font-size:13px}
  th,td{padding:9px}
  .code-block{font-size:12px}
  .stat-highlight .stat-number{font-size:36px}
}
&lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;

&lt;div class=&quot;hero-header&quot;&gt;
  &lt;div class=&quot;hero-header-content&quot;&gt;
    &lt;h1&gt;Why You&#39;re Not Getting Interview Calls in 2026: Blind Applications vs Targeted Strategy&lt;/h1&gt;
    &lt;div class=&quot;hero-subtitle&quot;&gt;100 Applications. 0 Responses. Here Is Exactly Why, and How to Fix It.&lt;/div&gt;
    &lt;div class=&quot;hero-meta&quot;&gt;
      &lt;div class=&quot;hero-meta-item&quot;&gt;&amp;#x1F4C5;30 April 2026&lt;div&gt;
      &lt;div class=&quot;hero-meta-item&quot;&gt;&amp;#x1F464; Chetan Yadav, Senior Oracle &amp;amp; Cloud DBA&lt;/div&gt;
      &lt;div class=&quot;hero-meta-item&quot;&gt;&amp;#x23F1;&amp;#xFE0F; 12 - 14 min read&lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;div class=&quot;main-content-wrapper&quot;&gt;
&lt;div class=&quot;container&quot;&gt;

&lt;div class=&quot;reading-time-badge&quot;&gt;&amp;#x23F1;&amp;#xFE0F; Estimated Reading Time: 12,14 minutes&lt;/div&gt;
&lt;div class=&quot;page-tagline&quot;&gt;Blind Applications, ATS Failures, No Referral Strategy, Quality vs Quantity, Targeted Job Search 2026&lt;/div&gt;

&lt;div class=&quot;hero-image-section&quot;&gt;
  &lt;img
    src=&quot;https://images.unsplash.com/photo-1486312338219-ce68d2c6f44d?w=1400&amp;h=500&amp;fit=crop&amp;q=85&amp;auto=format&quot;
    alt=&quot;Fresher job search strategy 2026, why not getting interview calls, targeted applications vs blind applications guide&quot;&gt;
&lt;/div&gt;

&lt;div class=&quot;info-box&quot; style=&quot;margin-top:28px;&quot;&gt;
  &lt;strong&gt;&amp;#x1F3AF; Who This Guide Is For&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
  Final year students sending applications and hearing nothing back. Freshers who have applied to 80,200 jobs over several months with 0,2 responses. Anyone who has been told &lt;em&gt;&quot;just keep applying&quot;&lt;/em&gt; without being told why their applications are failing and what to do differently.
&lt;/div&gt;

&lt;!-- SEO: Primary keyword in first 100 words --&gt;
&lt;p&gt;
  If you are not getting interview calls despite sending dozens of applications, the problem is almost never your skills or your degree. &lt;strong&gt;Freshers not getting interview calls in 2026&lt;/strong&gt; is an epidemic, and the root cause is almost always the same: blind, untargeted applications that fail before any human ever reads them.
&lt;/p&gt;

&lt;p&gt;
  A student messaged me last month: &lt;em&gt;&quot;I have applied to 140 jobs in the last 3 months. I have received 2 responses and both were rejections. I have a decent GPA, a relevant degree, and I have been doing everything right. What am I missing?&quot;&lt;/em&gt;
&lt;/p&gt;

&lt;p&gt;
  The answer was not what she expected. She was not missing skills. She was not missing certifications. She was applying to jobs the wrong way. Every application was a copy-paste of the same generic resume. No keyword matching. No company research. No follow-up. No referral outreach.
&lt;/p&gt;

&lt;p&gt;
  She was doing everything she had been told to do, and none of it was working because the advice she had been given was wrong. This guide explains the real reasons, and the exact targeted job search strategy that actually produces interview calls.
&lt;/p&gt;

&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;

&lt;!-- DIAGRAM --&gt;
&lt;div class=&quot;diagram-section&quot;&gt;
  &lt;img
    src=&quot;PASTE_YOUR_BLOGGER_DIAGRAM_URL_HERE&quot;
    alt=&quot;Why freshers are not getting interview calls in 2026, blind vs targeted application framework, 5 real reasons, quality vs quantity job search diagram&quot;&gt;
  &lt;div class=&quot;diagram-caption&quot;&gt;Figure 1: Blind vs Targeted Application Framework 2026 — 5 Real Reasons You Are Not Getting Calls and Quality vs Quantity comparison table&lt;/div&gt;
&lt;/div&gt;

&lt;div class=&quot;toc&quot;&gt;
  &lt;div class=&quot;toc-header&quot;&gt;&lt;span&gt;&amp;#x1F4DA;&lt;/span&gt; Table of Contents&lt;/div&gt;
  &lt;ol&gt;
    &lt;li&gt;&lt;a href=&quot;#section1&quot;&gt;The Real Numbers: Why Blind Applications Fail&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#section2&quot;&gt;Reason 1: ATS Is Silently Rejecting Your Resume&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#section3&quot;&gt;Reason 2: Your Headline Signals You Are Not Worth Reading&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#section4&quot;&gt;Reason 3: You Have No Online Presence&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#section5&quot;&gt;Reason 4: You Are Targeting the Wrong Roles&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#section6&quot;&gt;Reason 5: You Have No Referral Strategy&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#section7&quot;&gt;The Targeted Application Framework: What to Do Instead&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#section8&quot;&gt;How to Ask for a Referral Without Being Awkward&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#section9&quot;&gt;The 10-Application Week: A Practical Schedule&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#section10&quot;&gt;FAQ: Why Am I Not Getting Interview Calls?&lt;/a&gt;&lt;/li&gt;
  &lt;/ol&gt;
&lt;/div&gt;

&lt;!-- ══════════════════════════════════ --&gt;
&lt;h2 id=&quot;section1&quot;&gt;1. The Real Numbers: Why Blind Applications Fail&lt;/h2&gt;

&lt;p&gt;
  Most freshers believe job searching is a numbers game. Send more applications, get more responses. The data says the exact opposite.
&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;&lt;tr&gt;&lt;th&gt;Application Type&lt;/th&gt;&lt;th&gt;Volume&lt;/th&gt;&lt;th&gt;Callback Rate&lt;/th&gt;&lt;th&gt;Interview Rate&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;&lt;td&gt;&lt;strong&gt;Blind (generic, mass)&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;100+ per month&lt;/td&gt;&lt;td&gt;1,2%&lt;/td&gt;&lt;td&gt;0.5%&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;&lt;strong&gt;Targeted (customised)&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;10,15 per week&lt;/td&gt;&lt;td&gt;10,15%&lt;/td&gt;&lt;td&gt;5,8%&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;&lt;strong&gt;Referred (employee referral)&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;5,10 per month&lt;/td&gt;&lt;td&gt;30,40%&lt;/td&gt;&lt;td&gt;15,20%&lt;/td&gt;&lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;div class=&quot;stat-highlight&quot;&gt;
  &lt;div class=&quot;stat-number&quot;&gt;15x&lt;/div&gt;
  &lt;div class=&quot;stat-label&quot;&gt;A referred candidate is 15 times more likely to be hired than a cold applicant&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;
  If you spend 80% of your job search time sending cold applications and 0% building referral relationships, you are allocating your effort exactly backwards. The rest of this guide shows you how to flip that ratio.
&lt;/p&gt;

&lt;div class=&quot;compare-wrap&quot;&gt;
  &lt;div class=&quot;compare-bad&quot;&gt;
    &lt;span class=&quot;compare-label bad&quot;&gt;BLIND APPROACH (What Most Freshers Do)&lt;/span&gt;
    &lt;ul class=&quot;compare-text&quot;&gt;
      &lt;li&gt;Send 100+ applications per month on job portals&lt;/li&gt;
      &lt;li&gt;Same generic resume for every single job&lt;/li&gt;
      &lt;li&gt;No company research before applying&lt;/li&gt;
      &lt;li&gt;Apply to jobs requiring 3,5 years experience&lt;/li&gt;
      &lt;li&gt;Never follow up after applying&lt;/li&gt;
      &lt;li&gt;Zero recruiter or alumni outreach&lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;Result: 100 applications, 0,2 callbacks&lt;/strong&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/div&gt;
  &lt;div class=&quot;compare-good&quot;&gt;
    &lt;span class=&quot;compare-label good&quot;&gt;TARGETED APPROACH (What Actually Works)&lt;/span&gt;
    &lt;ul class=&quot;compare-text&quot;&gt;
      &lt;li&gt;Apply to 10,15 carefully selected roles per week&lt;/li&gt;
      &lt;li&gt;Resume customised per role with JD keywords&lt;/li&gt;
      &lt;li&gt;Research company before applying (1 paragraph)&lt;/li&gt;
      &lt;li&gt;Only apply to roles matching 70%+ requirements&lt;/li&gt;
      &lt;li&gt;Follow up on LinkedIn 5 days after applying&lt;/li&gt;
      &lt;li&gt;Actively seek referrals from your network&lt;/li&gt;
      &lt;li&gt;&lt;strong&gt;Result: 15 applications, 3,5 interview calls&lt;/strong&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;hr class=&quot;section-transition&quot;&gt;

&lt;!-- ══════════════════════════════════ --&gt;
&lt;h2 id=&quot;section2&quot;&gt;2. Reason 1: ATS Is Silently Rejecting Your Resume Before Any Human Sees It&lt;/h2&gt;

&lt;p&gt;
  Applicant Tracking Systems (ATS) scan your resume before any recruiter reads it. If your resume does not contain the right keywords in the right format, it is automatically filtered out.
&lt;/p&gt;

&lt;p&gt;
  Studies show that &lt;strong&gt;75% of resumes are rejected by ATS before reaching a human.&lt;/strong&gt; You are not getting ignored — you are being eliminated before the race even starts.
&lt;/p&gt;

&lt;h3&gt;The 4 Ways Your Resume Fails ATS Right Now&lt;/h3&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;span class=&quot;tag-bad&quot;&gt;Fail&lt;/span&gt; &lt;strong&gt;Wrong format:&lt;/strong&gt; Two-column layouts, tables, text boxes, and graphics confuse ATS parsers which read strictly left to right&lt;/li&gt;
  &lt;li&gt;&lt;span class=&quot;tag-bad&quot;&gt;Fail&lt;/span&gt; &lt;strong&gt;Missing keywords:&lt;/strong&gt; You wrote &quot;database management&quot; but the JD says &quot;Oracle Database Administration&quot; — ATS does not match approximate terms&lt;/li&gt;
  &lt;li&gt;&lt;span class=&quot;tag-bad&quot;&gt;Fail&lt;/span&gt; &lt;strong&gt;Wrong file type:&lt;/strong&gt; Canva exports as a design file. ATS cannot parse design files reliably. Use PDF or DOCX only.&lt;/li&gt;
  &lt;li&gt;&lt;span class=&quot;tag-bad&quot;&gt;Fail&lt;/span&gt; &lt;strong&gt;Generic objective statement:&lt;/strong&gt; &quot;Seeking a challenging opportunity&quot; contains zero searchable keywords and signals a copy-paste resume&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;production-note&quot;&gt;
  &lt;p&gt;I have reviewed over 200 resumes from freshers over the past 5 years. In at least 60% of cases, the resume would fail an ATS scan before any recruiter ever saw it — not because the candidate lacked skills, but because the format and keyword strategy were wrong. The fix takes less than 2 hours.&lt;/p&gt;
&lt;/div&gt;

&lt;div class=&quot;code-container&quot;&gt;
  &lt;div class=&quot;code-header&quot;&gt;
    &lt;span class=&quot;code-label&quot;&gt;Checklist, ATS-Proof Resume Requirements&lt;/span&gt;
    &lt;button class=&quot;copy-btn&quot; onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;
  &lt;/div&gt;
  &lt;div class=&quot;code-block&quot;&gt;ATS RESUME CHECKLIST:

Format:
  Single column layout only (no tables, no text boxes)
  Font: Arial, Calibri, or Helvetica (10-12pt body)
  File: PDF or DOCX (check job posting requirement)
  Margins: 0.5 to 1 inch all sides
  Standard section headers: Experience, Education, Skills

Keywords:
  Copy exact phrases from job description into your resume
  Include both acronym and full term: SQL / Structured Query Language
  Job title in header must match the role you are applying for
  Skills section must mirror tools listed in the JD exactly

Test before submitting:
  Jobscan.co — paste JD + resume, target 75%+ match score
  Resume Worded — ATS compatibility check (free tier available)&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;
  Once your resume passes ATS, it reaches a recruiter. That is where the next filter kicks in — your headline.
&lt;/p&gt;

&lt;hr class=&quot;section-transition&quot;&gt;

&lt;!-- ══════════════════════════════════ --&gt;
&lt;h2 id=&quot;section3&quot;&gt;3. Reason 2: Your LinkedIn Headline Signals You Are Not Worth Reading&lt;/h2&gt;

&lt;p&gt;
  Your LinkedIn headline and resume title are the first things every recruiter sees. If they signal nothing useful, the recruiter moves to the next candidate in under 3 seconds.
&lt;/p&gt;

&lt;div class=&quot;compare-wrap&quot;&gt;
  &lt;div class=&quot;compare-bad&quot;&gt;
    &lt;span class=&quot;compare-label bad&quot;&gt;HEADLINES THAT GET IGNORED&lt;/span&gt;
    &lt;div class=&quot;compare-text&quot;&gt;
      &quot;Fresher looking for job opportunities&quot;&lt;br&gt;&lt;br&gt;
      &quot;Student at Mumbai University&quot;&lt;br&gt;&lt;br&gt;
      &quot;B.Tech CSE Graduate 2025 Seeking Placement&quot;&lt;br&gt;&lt;br&gt;
      &quot;Hardworking and dedicated professional&quot;
    &lt;/div&gt;
  &lt;/div&gt;
  &lt;div class=&quot;compare-good&quot;&gt;
    &lt;span class=&quot;compare-label good&quot;&gt;HEADLINES THAT GET READ&lt;/span&gt;
    &lt;div class=&quot;compare-text&quot;&gt;
      &quot;Aspiring Oracle DBA, SQL, Python, OCP Aspirant, Final Year CSE&quot;&lt;br&gt;&lt;br&gt;
      &quot;Java Developer, Spring Boot, MySQL, 2 Projects Shipped, Open to Work&quot;&lt;br&gt;&lt;br&gt;
      &quot;Data Analyst, Python, Power BI, SQL, Certified, Seeking Entry Role&quot;&lt;br&gt;&lt;br&gt;
      &quot;Full Stack Developer, React, Node.js, 3 GitHub Projects, Available Now&quot;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;
  The formula is simple: &lt;strong&gt;Role + Core Skills + One Differentiator + Status.&lt;/strong&gt;
&lt;/p&gt;

&lt;p&gt;
  Every word must be a keyword a recruiter would search for. &quot;Fresher&quot; and &quot;seeking&quot; are not searchable keywords. &quot;Oracle DBA&quot; and &quot;SQL&quot; are. Rewrite your headline today — it takes 5 minutes and immediately changes how you appear in recruiter searches.
&lt;/p&gt;

&lt;div class=&quot;tip-box&quot;&gt;
  &lt;strong&gt;Want a full LinkedIn profile optimisation guide?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
  Read: &lt;a href=&quot;#&quot;&gt;How to Build a Powerful LinkedIn Profile That Attracts Recruiters in 2026&lt;/a&gt; — covers All-Star status, headline formula, About section, and the content strategy that keeps you visible week after week.
&lt;/div&gt;

&lt;hr class=&quot;section-transition&quot;&gt;

&lt;!-- ══════════════════════════════════ --&gt;
&lt;h2 id=&quot;section4&quot;&gt;4. Reason 3: You Have No Online Presence and Recruiters Notice&lt;/h2&gt;

&lt;p&gt;
  When a recruiter sees your resume or LinkedIn profile, the first thing they do is Google your name or check your LinkedIn activity.
&lt;/p&gt;

&lt;p&gt;
  If they find nothing — a blank LinkedIn, no GitHub, no portfolio, no blog — it signals no initiative. In competitive fresher hiring, initiative is often the deciding factor.
&lt;/p&gt;

&lt;h3&gt;What Recruiters Look for When They Google You&lt;/h3&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;span class=&quot;tag-good&quot;&gt;Good&lt;/span&gt; LinkedIn profile with posts showing technical interest or learning&lt;/li&gt;
  &lt;li&gt;&lt;span class=&quot;tag-good&quot;&gt;Good&lt;/span&gt; GitHub with at least 2,3 real projects (not just tutorial follow-alongs)&lt;/li&gt;
  &lt;li&gt;&lt;span class=&quot;tag-good&quot;&gt;Good&lt;/span&gt; A personal blog or technical article — even one well-written post counts&lt;/li&gt;
  &lt;li&gt;&lt;span class=&quot;tag-good&quot;&gt;Good&lt;/span&gt; Participation in hackathons, open source, or technical communities&lt;/li&gt;
  &lt;li&gt;&lt;span class=&quot;tag-bad&quot;&gt;Red flag&lt;/span&gt; No LinkedIn activity in 6+ months&lt;/li&gt;
  &lt;li&gt;&lt;span class=&quot;tag-bad&quot;&gt;Red flag&lt;/span&gt; GitHub with 0 commits or only forked repositories&lt;/li&gt;
  &lt;li&gt;&lt;span class=&quot;tag-bad&quot;&gt;Red flag&lt;/span&gt; Social profiles showing unprofessional content&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;success-box&quot;&gt;
  &lt;strong&gt;Build Minimum Online Presence in 2 Weekends:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
  &lt;strong&gt;Weekend 1:&lt;/strong&gt; Update LinkedIn to All-Star status, write your About section, add your project as an Experience entry, connect with 50 classmates and professors.&lt;br&gt;&lt;br&gt;
  &lt;strong&gt;Weekend 2:&lt;/strong&gt; Build one small project relevant to your target role. Push it to GitHub with a proper README. Post one LinkedIn article about what you built and what you learned.&lt;br&gt;&lt;br&gt;
  This takes 2 weekends. It changes how recruiters perceive you completely.
&lt;/div&gt;

&lt;hr class=&quot;section-transition&quot;&gt;

&lt;!-- ══════════════════════════════════ --&gt;
&lt;h2 id=&quot;section5&quot;&gt;5. Reason 4: You Are Targeting the Wrong Roles and Wasting Every Application&lt;/h2&gt;

&lt;p&gt;
  This is one of the most common — and most demoralising — job search mistakes freshers make.
&lt;/p&gt;

&lt;p&gt;
  They apply to roles that say &quot;entry level&quot; but require 3,5 years of experience. The ATS filters them out in seconds. The application was wasted before it was submitted.
&lt;/p&gt;

&lt;h3&gt;How to Identify Roles You Can Actually Get Shortlisted For&lt;/h3&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;span class=&quot;tag-rule&quot;&gt;Rule&lt;/span&gt; Apply to roles where you match at least &lt;strong&gt;70% of the listed requirements&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;&lt;span class=&quot;tag-rule&quot;&gt;Rule&lt;/span&gt; Target titles that say: Graduate Trainee, Junior, Associate, Entry Level, 0,2 Years&lt;/li&gt;
  &lt;li&gt;&lt;span class=&quot;tag-rule&quot;&gt;Rule&lt;/span&gt; Look for companies that run &lt;strong&gt;campus hiring or graduate programs&lt;/strong&gt; — these are built for freshers&lt;/li&gt;
  &lt;li&gt;&lt;span class=&quot;tag-rule&quot;&gt;Rule&lt;/span&gt; Check if the company has hired freshers before by searching LinkedIn: company + &quot;first job&quot; or &quot;joined as fresher&quot;&lt;/li&gt;
  &lt;li&gt;&lt;span class=&quot;tag-bad&quot;&gt;Avoid&lt;/span&gt; Roles that say &quot;5+ years required&quot; regardless of how well you match the technical skills&lt;/li&gt;
  &lt;li&gt;&lt;span class=&quot;tag-bad&quot;&gt;Avoid&lt;/span&gt; Applying to 10 roles at the same company simultaneously — this flags your profile as spam&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;tip-box&quot;&gt;
  &lt;strong&gt;The 70% Rule in Practice:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
  A job description lists 10 requirements. You match 7 of them. Apply. You do not need to match 100%.&lt;br&gt;&lt;br&gt;
  Hiring managers expect freshers to be trained on the remaining 30%. What they are looking for is proof you can learn, not proof you already know everything. A fresher who matches 7 out of 10 requirements and shows clear initiative will beat a candidate who matches 10 out of 10 on paper but shows no enthusiasm.
&lt;/div&gt;

&lt;hr class=&quot;section-transition&quot;&gt;

&lt;!-- ══════════════════════════════════ --&gt;
&lt;h2 id=&quot;section6&quot;&gt;6. Reason 5: You Have No Referral Strategy and It Is Costing You Interviews&lt;/h2&gt;

&lt;p&gt;
  Most freshers never ask for referrals because it feels awkward. This is the single most expensive mistake in any job search.
&lt;/p&gt;

&lt;p&gt;
  Referrals are not nepotism. They are how most jobs are actually filled. A referral is not a guarantee of a job — it is a guarantee that your resume reaches a human being rather than an ATS filter.
&lt;/p&gt;

&lt;h3&gt;Who Can Refer You Right Now&lt;/h3&gt;
&lt;ul&gt;
  &lt;li&gt;College seniors who graduated 1,3 years ago and are now at your target companies&lt;/li&gt;
  &lt;li&gt;Professors who have industry connections or run placement cells&lt;/li&gt;
  &lt;li&gt;LinkedIn connections who work at companies you are targeting&lt;/li&gt;
  &lt;li&gt;Relatives or family friends working in your target industry&lt;/li&gt;
  &lt;li&gt;People you met at webinars, events, or hackathons&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;incident-box&quot;&gt;
  &lt;strong&gt;Real Example: Referral vs Cold Application at the Same Company&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
  Two freshers applied to the same junior DBA role at a mid-size IT company on the same day. Candidate A submitted through the careers portal with a strong, well-formatted resume.&lt;br&gt;&lt;br&gt;
  Candidate B found a senior DBA at the company on LinkedIn, mentioned a specific blog post that DBA had written, asked one genuine technical question, built rapport over 10 days, then asked if they would be comfortable passing on their resume.&lt;br&gt;&lt;br&gt;
  Candidate A heard nothing. Candidate B got an interview within 4 days. Same role. Same company. Same week. The difference was one LinkedIn message.
&lt;/div&gt;

&lt;hr class=&quot;section-transition&quot;&gt;

&lt;!-- ══════════════════════════════════ --&gt;
&lt;h2 id=&quot;section7&quot;&gt;7. The Targeted Job Search Framework: Replace Blind Applications with This&lt;/h2&gt;

&lt;p&gt;
  Replace the blind application approach with this structured weekly framework. Ten to fifteen applications per week, every one of them deliberate.
&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;&lt;tr&gt;&lt;th&gt;Day&lt;/th&gt;&lt;th&gt;Activity&lt;/th&gt;&lt;th&gt;Time&lt;/th&gt;&lt;th&gt;Goal&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;&lt;td&gt;&lt;strong&gt;Monday&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Research 15 target companies, shortlist 3,5 open roles matching 70%+&lt;/td&gt;&lt;td&gt;1,2 hours&lt;/td&gt;&lt;td&gt;Build your weekly target list&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;&lt;strong&gt;Tuesday&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Customise resume for each role (headline, skills, keywords per JD)&lt;/td&gt;&lt;td&gt;2,3 hours&lt;/td&gt;&lt;td&gt;3 ATS-optimised applications ready&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;&lt;strong&gt;Wednesday&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Find LinkedIn connections at each target company. Send 3,5 personalised outreach messages&lt;/td&gt;&lt;td&gt;1 hour&lt;/td&gt;&lt;td&gt;Referral pipeline building&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;&lt;strong&gt;Thursday&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Submit the 3 applications. Follow up on last week&#39;s applications via LinkedIn&lt;/td&gt;&lt;td&gt;1 hour&lt;/td&gt;&lt;td&gt;Applications submitted, follow-ups sent&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;&lt;strong&gt;Friday&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Post one piece of content on LinkedIn (learning win, project update, or tip)&lt;/td&gt;&lt;td&gt;30 minutes&lt;/td&gt;&lt;td&gt;Profile visibility increased for the week&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;&lt;strong&gt;Weekend&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Build or improve one project. Update GitHub. Engage with 10 posts in your domain&lt;/td&gt;&lt;td&gt;2,4 hours&lt;/td&gt;&lt;td&gt;Online presence strengthened&lt;/td&gt;&lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;
  The difference between this and the blind approach is not the number of applications. It is the quality of intention behind each one. Every application in this framework has been researched, personalised, and followed up on.
&lt;/p&gt;

&lt;hr class=&quot;section-transition&quot;&gt;

&lt;!-- ══════════════════════════════════ --&gt;
&lt;h2 id=&quot;section8&quot;&gt;8. How to Ask for a Referral Without Feeling Awkward&lt;/h2&gt;

&lt;p&gt;
  Most freshers avoid asking for referrals because they do not know how to do it without feeling like they are begging. Here is the exact three-step message structure that works.
&lt;/p&gt;

&lt;div class=&quot;code-container&quot;&gt;
  &lt;div class=&quot;code-header&quot;&gt;
    &lt;span class=&quot;code-label&quot;&gt;Template, LinkedIn Referral Request — 3-Step Message Structure&lt;/span&gt;
    &lt;button class=&quot;copy-btn&quot; onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;
  &lt;/div&gt;
  &lt;div class=&quot;code-block&quot;&gt;STEP 1: Connect first — NOT a referral request yet
---
&quot;Hi [Name], I came across your post about [specific topic they wrote about].
Really useful perspective on [one specific thing]. Would love to connect.&quot;
---

STEP 2: After they accept — start a genuine conversation (wait 3,5 days)
---
&quot;Hi [Name], thanks for connecting. I noticed you work at [Company] as a
[Role]. I am currently a final year CSE student targeting [their domain].
I had a quick question about [specific technical thing in their work].
Do you have 2 minutes to share your perspective?&quot;
---

STEP 3: After they respond — build rapport 1,2 weeks THEN ask
---
&quot;Hi [Name], I have been applying to [Company] for the [Role Name] position.
I know referrals are entirely at your discretion and I completely understand
if it is not something you are comfortable with. If you feel my profile
is a fit after looking at it, I would really appreciate being referred.
Here is my LinkedIn: [URL]. No pressure at all if not.&quot;
---

Key rules:
- Never ask for a referral in your first message
- Always reference something specific about their work
- Make it genuinely easy for them to say no (this increases yes rate)
- Keep every message under 5 lines&lt;/div&gt;
&lt;/div&gt;

&lt;div class=&quot;production-note&quot;&gt;
  &lt;p&gt;I have personally used this exact 3-step approach to help 3 freshers I mentored get referral interviews at companies they cold-applied to 3 times without a response. In every case, the referral came from a connection who had never met the candidate in person. Relationship quality matters more than relationship depth.&lt;/p&gt;
&lt;/div&gt;

&lt;hr class=&quot;section-transition&quot;&gt;

&lt;!-- ══════════════════════════════════ --&gt;
&lt;h2 id=&quot;section9&quot;&gt;9. The 10-Application Week: Your Practical Job Search Schedule&lt;/h2&gt;

&lt;div class=&quot;checklist&quot;&gt;
  &lt;h3&gt;Before You Apply to Any Role This Week&lt;/h3&gt;
  &lt;ul&gt;
    &lt;li&gt;LinkedIn profile updated to All-Star status&lt;/li&gt;
    &lt;li&gt;Base resume ATS-tested on Jobscan (target 75%+ match score)&lt;/li&gt;
    &lt;li&gt;GitHub has at least 1 project with a proper README file&lt;/li&gt;
    &lt;li&gt;Open to Work enabled on LinkedIn (private mode is fine)&lt;/li&gt;
    &lt;li&gt;Custom LinkedIn URL set: linkedin.com/in/yourname&lt;/li&gt;
  &lt;/ul&gt;
&lt;/div&gt;

&lt;div class=&quot;checklist&quot;&gt;
  &lt;h3&gt;For Each Application You Submit&lt;/h3&gt;
  &lt;ul&gt;
    &lt;li&gt;You match at least 70% of the listed job requirements&lt;/li&gt;
    &lt;li&gt;Resume headline matches the exact job title in this specific posting&lt;/li&gt;
    &lt;li&gt;Skills section includes keywords copied from this specific JD&lt;/li&gt;
    &lt;li&gt;ATS score checked and above 70% on Jobscan&lt;/li&gt;
    &lt;li&gt;At least one person at the company identified for follow-up outreach&lt;/li&gt;
    &lt;li&gt;Calendar reminder set 5 days out to send a LinkedIn follow-up message&lt;/li&gt;
  &lt;/ul&gt;
&lt;/div&gt;

&lt;div class=&quot;checklist&quot;&gt;
  &lt;h3&gt;End of Week Review (15 minutes every Friday)&lt;/h3&gt;
  &lt;ul&gt;
    &lt;li&gt;How many targeted applications submitted this week?&lt;/li&gt;
    &lt;li&gt;How many follow-up messages sent to last week&#39;s applications?&lt;/li&gt;
    &lt;li&gt;How many referral conversations started or progressed this week?&lt;/li&gt;
    &lt;li&gt;Did you post at least once on LinkedIn this week?&lt;/li&gt;
    &lt;li&gt;What is your callback rate so far? Target: 1 call per 10 targeted applications&lt;/li&gt;
  &lt;/ul&gt;
&lt;/div&gt;

&lt;hr class=&quot;section-transition&quot;&gt;

&lt;!-- ══════════════════════════════════ --&gt;
&lt;!-- SEO: FAQ section optimised for Google featured snippets --&gt;
&lt;h2 id=&quot;section10&quot;&gt;FAQ: Why Am I Not Getting Interview Calls?&lt;/h2&gt;

&lt;div class=&quot;faq-item&quot;&gt;
  &lt;div class=&quot;faq-question&quot;&gt;Why am I not getting interview calls despite applying to many jobs?&lt;/div&gt;
  &lt;div class=&quot;faq-answer&quot;&gt;
    The most common reasons freshers are not getting interview calls are: your resume is being rejected by ATS before any human reads it (wrong format or missing keywords), you are applying to roles above your experience level, you are using the same generic resume for every job, and you have no follow-up or referral strategy. Fix one of these at a time, starting with ATS optimisation, and you will see a measurable improvement within 2,3 weeks.
  &lt;/div&gt;
&lt;/div&gt;

&lt;div class=&quot;faq-item&quot;&gt;
  &lt;div class=&quot;faq-question&quot;&gt;How long should a targeted job search take before I get an interview?&lt;/div&gt;
  &lt;div class=&quot;faq-answer&quot;&gt;
    With a genuinely targeted approach — 10 to 15 customised applications per week, LinkedIn outreach, and referral requests — most freshers in tech see their first interview within 3 to 6 weeks. If you are not getting any responses after 4 weeks of targeted applications, check three things: your resume ATS score (test it on Jobscan), whether you are applying to the right seniority level, and whether your target domain has active hiring in your location right now.
  &lt;/div&gt;
&lt;/div&gt;

&lt;div class=&quot;faq-item&quot;&gt;
  &lt;div class=&quot;faq-question&quot;&gt;Is it okay to apply to the same company multiple times?&lt;/div&gt;
  &lt;div class=&quot;faq-answer&quot;&gt;
    For different roles, yes, but space them out by at least 2 to 3 weeks. Applying to 5 roles at the same company in the same week flags your application as spam in their ATS. If you were rejected for a role, wait at least 3 to 6 months before applying again — unless you have built a genuine relationship with someone at the company who can refer you, in which case a referral overrides this concern.
  &lt;/div&gt;
&lt;/div&gt;

&lt;div class=&quot;faq-item&quot;&gt;
  &lt;div class=&quot;faq-question&quot;&gt;What if I have no connections at any company I want to apply to?&lt;/div&gt;
  &lt;div class=&quot;faq-answer&quot;&gt;
    Start building connections now, before you need them. Connect with college alumni who graduated 1 to 3 years before you and are now working in your target domain. These people remember what it was like to be in your position and are generally the most willing to help. Search LinkedIn for your college name plus your target company name. You will almost always find 2 to 3 alumni. Send a connection request with a personalised note mentioning your shared college. This is the fastest way to build a referral network from zero.
  &lt;/div&gt;
&lt;/div&gt;

&lt;div class=&quot;faq-item&quot;&gt;
  &lt;div class=&quot;faq-question&quot;&gt;Should I apply even if I don&#39;t meet all the job requirements?&lt;/div&gt;
  &lt;div class=&quot;faq-answer&quot;&gt;
    Yes, if you meet at least 70% of the requirements. Job descriptions are often written as a wish list, not a minimum specification. Hiring managers expect to train freshers on the remaining 30%. What they cannot train is initiative, attitude, and the ability to learn quickly — so show those through your projects, your LinkedIn activity, and your personalised application. A candidate matching 7 out of 10 requirements with clear enthusiasm will consistently beat a candidate matching 10 out of 10 with a generic application.
  &lt;/div&gt;
&lt;/div&gt;

&lt;!-- CTA BOX --&gt;
&lt;div class=&quot;cta-box&quot;&gt;
  &lt;h3&gt;Are you stuck in the blind application cycle?&lt;/h3&gt;
  &lt;p&gt;Drop a comment below with your situation — how many applications you have sent, what responses you have received, and what roles you are targeting. I will give you one specific, actionable fix based on your exact scenario.&lt;/p&gt;
  &lt;span class=&quot;cta-keyword&quot;&gt;Comment JOBS&lt;/span&gt;
&lt;/div&gt;

&lt;!-- AUTHOR --&gt;
&lt;div class=&quot;about-author&quot;&gt;
  &lt;h2&gt;About the Author&lt;/h2&gt;
  &lt;div class=&quot;author-name&quot;&gt;Chetan Yadav&lt;/div&gt;
  &lt;p class=&quot;author-bio&quot;&gt;
    &lt;strong&gt;Chetan Yadav&lt;/strong&gt; is a &lt;strong&gt;Senior Oracle, PostgreSQL, MySQL, and Cloud DBA&lt;/strong&gt; with &lt;strong&gt;15+ years&lt;/strong&gt; of hands-on production experience managing mission-critical databases across finance, healthcare, and e-commerce sectors.
  &lt;/p&gt;
  &lt;p class=&quot;author-bio&quot;&gt;
    Beyond technical work, he mentors freshers and early-career professionals through job searches, LinkedIn optimisation, and career transitions into cloud and database roles. He has reviewed hundreds of resumes and conducted technical interviews across multiple hiring cycles. His career advice is based on what actually produces results, not generic motivation.
  &lt;/p&gt;
  &lt;p class=&quot;author-bio&quot;&gt;
    This blog covers &lt;strong&gt;real-world DBA problems, cloud architecture, career growth, and practical learning&lt;/strong&gt; — not theoretical documentation or vendor marketing.
  &lt;/p&gt;
  &lt;div class=&quot;social-links&quot;&gt;
    &lt;a href=&quot;https://www.linkedin.com/in/chetanyadavvds/&quot; target=&quot;_blank&quot;&gt;LinkedIn&lt;/a&gt;
    &lt;a href=&quot;https://www.youtube.com/@levelup_careers&quot; target=&quot;_blank&quot;&gt;YouTube&lt;/a&gt;
    &lt;a href=&quot;https://www.instagram.com/levelup_careers/&quot; target=&quot;_blank&quot;&gt;Instagram&lt;/a&gt;
    &lt;a href=&quot;https://x.com/home&quot; target=&quot;_blank&quot;&gt;Twitter (X)&lt;/a&gt;
    &lt;a href=&quot;https://www.facebook.com/oracledbainfo/&quot; target=&quot;_blank&quot;&gt;Facebook&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;Newsletter&lt;/a&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;!-- RELATED --&gt;
&lt;div class=&quot;related-reading&quot;&gt;
  &lt;h2&gt;Related Reading&lt;/h2&gt;
  &lt;ul&gt;
    &lt;li&gt;
      &lt;a href=&quot;#&quot;&gt;How to Create a Resume That Actually Gets Shortlisted in 2026&lt;/a&gt;
      &lt;span class=&quot;why-matters&quot;&gt;Why it matters: ATS is the first filter your application hits. This guide covers the exact format, keywords, and section structure that gets your resume past automated screening and in front of a human recruiter.&lt;/span&gt;
    &lt;/li&gt;
    &lt;li&gt;
      &lt;a href=&quot;#&quot;&gt;How to Build a Powerful LinkedIn Profile That Attracts Recruiters in 2026&lt;/a&gt;
      &lt;span class=&quot;why-matters&quot;&gt;Why it matters: Your LinkedIn profile is what a recruiter checks immediately after seeing your application. This guide covers All-Star status, headline formula, About section, and the content strategy that generates inbound recruiter messages.&lt;/span&gt;
    &lt;/li&gt;
    &lt;li&gt;
      &lt;a href=&quot;https://chetanyadavds.blogspot.com/2026/01/oracle-database-23ai-revolutionizing.html&quot; target=&quot;_blank&quot;&gt;Oracle Database 23ai: Revolutionizing Data Distribution Across the Globe&lt;/a&gt;
      &lt;span class=&quot;why-matters&quot;&gt;Why it matters: For freshers targeting Oracle DBA or cloud database roles, understanding 23ai gives you specific technical content to post on LinkedIn — the kind of content that signals genuine expertise to hiring managers in database and cloud teams.&lt;/span&gt;
    &lt;/li&gt;
  &lt;/ul&gt;
&lt;/div&gt;

&lt;!-- POST FOOTER --&gt;
&lt;div class=&quot;post-footer&quot;&gt;
  &lt;div class=&quot;post-meta&quot;&gt;&lt;strong&gt;by Chetan Yadav&lt;/strong&gt;, April 2026&lt;/div&gt;
  &lt;div class=&quot;share-buttons&quot;&gt;
    &lt;strong&gt;Share:&lt;/strong&gt;
    &lt;a href=&quot;#&quot;&gt;Email&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;BlogThis&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;X&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;Facebook&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;Pinterest&lt;/a&gt;
  &lt;/div&gt;
  &lt;div class=&quot;tags&quot;&gt;
    &lt;strong&gt;Tags:&lt;/strong&gt;
    &lt;a href=&quot;#&quot;&gt;Job Search 2026&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;Fresher Jobs&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;Interview Calls&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;Blind Applications&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;Targeted Job Search&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;Referral Strategy&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;ATS Resume&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;Career Tips&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;DBA Career&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;Campus Placement&lt;/a&gt;
  &lt;/div&gt;
&lt;/div&gt;

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

&lt;script&gt;
function copyCode(button) {
  const codeContainer = button.closest(&#39;.code-container&#39;);
  const codeBlock = codeContainer.querySelector(&#39;.code-block&#39;);
  const textArea = document.createElement(&#39;textarea&#39;);
  textArea.value = codeBlock.textContent;
  textArea.style.position = &#39;fixed&#39;;
  textArea.style.left = &#39;-9999px&#39;;
  document.body.appendChild(textArea);
  textArea.select();
  textArea.setSelectionRange(0, 99999);
  try {
    document.execCommand(&#39;copy&#39;);
    button.textContent = &#39;Copied!&#39;;
    button.classList.add(&#39;copied&#39;);
    setTimeout(() =&gt; { button.textContent = &#39;Copy&#39;; button.classList.remove(&#39;copied&#39;); }, 2000);
  } catch(err) {
    button.textContent = &#39;Failed&#39;;
    setTimeout(() =&gt; { button.textContent = &#39;Copy&#39;; }, 2000);
  }
  document.body.removeChild(textArea);
}
&lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;</content><link rel='replies' type='application/atom+xml' href='http://chetanyadavds.blogspot.com/feeds/2914837257317100843/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://chetanyadavds.blogspot.com/2026/04/why-not-getting-interview-calls-blind-vs-targeted-applications.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/436196721812840248/posts/default/2914837257317100843'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/436196721812840248/posts/default/2914837257317100843'/><link rel='alternate' type='text/html' href='http://chetanyadavds.blogspot.com/2026/04/why-not-getting-interview-calls-blind-vs-targeted-applications.html' title='Why You&#39;re Not Getting Interview Calls: Blind Applications vs Targeted Strategy'/><author><name>Chetan Yadav</name><uri>http://www.blogger.com/profile/02557500437758632199</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiE0TgifWM4l1b3sy_cK2y41bpqyfY1U25-p5IBKkSg8pJLFRvjYr_kF7W_MgsYdc21DutWF9H6qlShQDQspQLbZEQ5CSUA51Wp6Mh9l5Ygd4NPSuQyqwSMrKitCWwSLr0oHBg9TGjxAvAM7TTkkehHLL1MFWg0wSb31CxywQxIokg9pg/s1600/IMG-20251013-WA0038.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-436196721812840248.post-4698790665621016249</id><published>2026-04-27T16:06:00.000+05:30</published><updated>2026-04-27T16:06:33.312+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="Cloud DBA"/><category scheme="http://www.blogger.com/atom/ns#" term="Data Guard Lag Fix"/><category scheme="http://www.blogger.com/atom/ns#" term="Database Performance"/><category scheme="http://www.blogger.com/atom/ns#" term="DBA Troubleshooting"/><category scheme="http://www.blogger.com/atom/ns#" term="HA DR"/><category scheme="http://www.blogger.com/atom/ns#" term="Oracle 19c"/><category scheme="http://www.blogger.com/atom/ns#" term="Oracle Data Guard"/><category scheme="http://www.blogger.com/atom/ns#" term="Oracle DBA"/><category scheme="http://www.blogger.com/atom/ns#" term="Parallel Apply"/><category scheme="http://www.blogger.com/atom/ns#" term="Standby Redo Logs"/><title type='text'>How to Fix Data Guard Lag in Oracle 19c (6 Real Production Fixes with SQL)</title><content type='html'>&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;en&quot;&gt;
&lt;head&gt;
&lt;meta charset=&quot;UTF-8&quot;&gt;
&lt;title&gt;How to Fix Data Guard Lag in Oracle 19c: Step-by-Step Troubleshooting Guide&lt;/title&gt;
&lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;
&lt;meta name=&quot;description&quot; content=&quot;Step-by-step guide to fix Oracle Data Guard lag in Oracle 19c. Covers missing SRLs, parallel apply, network compression, RMAN conflict, and protection mode mismatch with exact SQL commands.&quot;&gt;
&lt;link rel=&quot;icon&quot; type=&quot;image/svg+xml&quot; href=&quot;data:image/svg+xml,%3Csvg xmlns=&#39;http://www.w3.org/2000/svg&#39; viewBox=&#39;0 0 100 100&#39;%3E%3Cdefs%3E%3ClinearGradient id=&#39;g&#39; x1=&#39;0%25&#39; y1=&#39;0%25&#39; x2=&#39;100%25&#39; y2=&#39;100%25&#39;%3E%3Cstop offset=&#39;0%25&#39; style=&#39;stop-color:%23d93025&#39;/%3E%3Cstop offset=&#39;100%25&#39; style=&#39;stop-color:%23a82318&#39;/%3E%3C/linearGradient%3E%3C/defs%3E%3Crect width=&#39;100&#39; height=&#39;100&#39; rx=&#39;20&#39; fill=&#39;url(%23g)&#39;/%3E%3Cpath d=&#39;M20,30 L35,30 L35,70 L20,70 Z M40,40 L55,40 L55,70 L40,70 Z M60,25 L75,25 L75,70 L60,70 Z&#39; fill=&#39;white&#39; opacity=&#39;0.9&#39;/%3E%3C/svg%3E&quot;&gt;
&lt;style&gt;
*{margin:0;padding:0;box-sizing:border-box}
body{background:#fff;color:#333;font-family:Arial,Helvetica,sans-serif;font-size:16px;line-height:1.7}
.post-title,.entry-title,h1.post-title,h3.post-title{display:none!important}

.hero-header{background:linear-gradient(135deg,#1e3a5f 0%,#7c1c1c 50%,#1e3a5f 100%);color:#fff;padding:60px 40px;width:100%}
.hero-header-content{max-width:1200px;margin:0 auto;padding:0 20px}
.hero-header h1{font-size:42px;font-weight:700;color:#fff;line-height:1.3;margin-bottom:20px}
.hero-subtitle{font-size:20px;font-weight:300;color:#fca5a5;opacity:.95;margin-bottom:30px}
.hero-meta{display:flex;gap:30px;align-items:center;flex-wrap:wrap;font-size:15px;color:#fecaca}
.hero-meta-item{display:flex;align-items:center;gap:8px}

.hero-image-section{width:100%;margin:0;padding:0;overflow:hidden;background:#000}
.hero-image-section img{width:100%;height:auto;display:block;max-height:480px;object-fit:cover;object-position:center center}

.main-content-wrapper{width:100%;background:#fff}
.container{max-width:800px;margin:0 auto;padding:30px 20px;background:#fff}

.reading-time-badge{display:inline-block;background:linear-gradient(135deg,#dc2626 0%,#991b1b 100%);color:#fff;padding:12px 28px;border-radius:50px;font-size:15px;font-weight:500;margin-bottom:30px;box-shadow:0 4px 12px rgba(220,38,38,.3)}
.page-tagline{color:#666;font-size:15px;font-style:italic;text-align:center;margin-bottom:35px}

.read-more-link{display:block;margin:28px 0 8px}
.read-more-link a{color:#dc2626;font-size:15px;text-decoration:none;font-style:italic}
.read-more-link a:hover{text-decoration:underline}

.toc{background:#fef2f2;border-left:4px solid #dc2626;padding:28px 32px;margin:35px 0;border-radius:8px;box-shadow:0 1px 3px rgba(0,0,0,.05)}
.toc-header{display:flex;align-items:center;gap:10px;font-size:24px;font-weight:bold;color:#000;margin-bottom:20px}
.toc ol{margin-left:20px;line-height:1.9;counter-reset:toc-counter;list-style:none}
.toc ol li{counter-increment:toc-counter;margin:12px 0;font-size:16px;padding-bottom:12px;border-bottom:1px solid #fecaca;transition:all .2s ease}
.toc ol li:last-child{border-bottom:none}
.toc ol li:hover{padding-left:8px}
.toc ol li::before{content:counter(toc-counter) &quot;. &quot;;font-weight:600;color:#dc2626;margin-right:8px}
.toc a{color:#dc2626;text-decoration:none}
.toc a:hover{text-decoration:underline}

h2{font-size:28px;font-weight:bold;color:#000;margin:45px 0 20px;line-height:1.3}
h3{font-size:22px;font-weight:600;color:#333;margin:30px 0 15px}
p{margin:16px 0;color:#333;line-height:1.7}
ul,ol{margin:18px 0 18px 35px;color:#333;line-height:1.7}
ul li,ol li{margin:10px 0}
strong{font-weight:bold;color:#333}
em{font-style:italic}
a{color:#dc2626;text-decoration:none}
a:hover{text-decoration:underline}

.tag-good{display:inline-block;background:#e6f4ea;color:#137333;border:1px solid #a8d5b5;border-radius:4px;padding:1px 8px;font-size:13px;font-weight:600;margin-right:6px;vertical-align:middle}
.tag-bad{display:inline-block;background:#fce8e6;color:#c5221f;border:1px solid #f5a8a4;border-radius:4px;padding:1px 8px;font-size:13px;font-weight:600;margin-right:6px;vertical-align:middle}
.tag-step{display:inline-block;background:#1e3a5f;color:#fff;border-radius:50%;width:28px;height:28px;text-align:center;line-height:28px;font-size:13px;font-weight:700;margin-right:8px;vertical-align:middle}
.tag-fix{display:inline-block;background:#f0fdf4;color:#15803d;border:1px solid #86efac;border-radius:4px;padding:2px 10px;font-size:12px;font-weight:700;margin-right:6px;vertical-align:middle}
.tag-urgent{display:inline-block;background:#fef2f2;color:#991b1b;border:1px solid #fca5a5;border-radius:4px;padding:2px 10px;font-size:12px;font-weight:700;margin-right:6px;vertical-align:middle}

.code-container{position:relative;margin:24px 0}
.code-header{background:#1e1b2e;color:#fff;padding:10px 16px;border-radius:8px 8px 0 0;display:flex;justify-content:space-between;align-items:center;font-size:14px}
.code-label{font-weight:500}
.copy-btn{background:#dc2626;color:#fff;border:none;padding:6px 14px;border-radius:5px;cursor:pointer;font-size:13px;transition:background .2s;font-family:Arial,sans-serif}
.copy-btn:hover{background:#b91c1c}
.copy-btn.copied{background:#10b981}
.code-block{background:#f8f9fa;border:1px solid #e0e0e0;border-radius:0 0 8px 8px;padding:18px 20px;margin:0;overflow-x:auto;font-family:&#39;Courier New&#39;,Courier,monospace;font-size:14px;line-height:1.7;white-space:pre;tab-size:4}
code{background:#f8f9fa;padding:2px 6px;border-radius:3px;font-family:&#39;Courier New&#39;,monospace;font-size:14px;color:#dc2626}

.info-box{background:#fffbeb;border-left:4px solid #f59e0b;padding:18px 22px;border-radius:0 8px 8px 0;margin:25px 0}
.info-box strong{color:#92400e}
.tip-box{background:#fef2f2;border-left:4px solid #dc2626;padding:18px 22px;border-radius:0 8px 8px 0;margin:25px 0}
.tip-box strong{color:#991b1b}
.incident-box{background:#fef2f2;border-left:4px solid #ef4444;padding:18px 22px;border-radius:0 8px 8px 0;margin:25px 0}
.incident-box strong{color:#991b1b}
.success-box{background:#f0fdf4;border-left:4px solid #22c55e;padding:18px 22px;border-radius:0 8px 8px 0;margin:25px 0}
.success-box strong{color:#15803d}

/* step box */
.step-box{background:#fff;border:2px solid #e0e0e0;border-radius:10px;padding:24px 28px;margin:28px 0;position:relative}
.step-box .step-num{position:absolute;top:-16px;left:20px;background:#dc2626;color:#fff;border-radius:50%;width:32px;height:32px;text-align:center;line-height:32px;font-size:15px;font-weight:700}
.step-box h3{margin-top:4px;color:#dc2626}

table{width:100%;border-collapse:collapse;margin:25px 0;background:#fff;border:1px solid #e0e0e0}
thead{background:#1e1b2e}
th{padding:12px;text-align:left;font-weight:bold;color:#fff;border-bottom:2px solid #e0e0e0;font-size:15px}
td{padding:12px;border-bottom:1px solid #e0e0e0;color:#333;font-size:15px}
tr:last-child td{border-bottom:none}
tbody tr:hover{background:#fef2f2}

.checklist{background:#fef2f2;border:1px solid #fecaca;border-radius:8px;padding:24px 28px;margin:18px 0}
.checklist h3{margin-top:0;color:#1e293b;font-size:18px}
.checklist ul{list-style:none;margin-left:0}
.checklist ul li{padding:6px 0 6px 28px;position:relative}
.checklist ul li::before{content:&quot;&quot;;position:absolute;left:4px;top:13px;width:10px;height:10px;background:#dc2626;border-radius:50%}

.faq-item{margin:25px 0;border-bottom:1px solid #e5e7eb;padding-bottom:25px}
.faq-item:last-child{border-bottom:none}
.faq-question{font-weight:600;color:#000;font-size:17px;margin-bottom:10px}
.faq-answer{color:#333;line-height:1.7}

.related-reading{background:#f8f9fa;border:1px solid #e0e0e0;border-radius:8px;padding:30px;margin:40px 0}
.related-reading h2{margin-top:0}
.related-reading ul{margin-left:25px}
.related-reading li{margin:18px 0;line-height:1.7}
.related-reading .why-matters{color:#666;font-size:15px;margin-top:5px;display:block}

.about-author{background:#fffbf0;border:1px solid #e0e0e0;border-radius:8px;padding:30px;margin:40px 0}
.about-author h2{margin-top:0;font-size:28px}
.author-name{font-size:20px;font-weight:bold;color:#000;margin-bottom:10px}
.author-bio{color:#333;line-height:1.7;margin-bottom:15px}
.social-links{margin-top:20px}
.social-links a{display:inline-block;margin-right:20px;color:#dc2626;text-decoration:none;font-size:16px}
.social-links a:hover{text-decoration:underline}

.post-footer{border-top:1px solid #e0e0e0;padding-top:25px;margin-top:40px;color:#666;font-size:15px}
.post-meta{margin-bottom:15px}
.share-buttons{margin:20px 0}
.share-buttons a{display:inline-block;margin-right:15px;color:#dc2626;font-size:14px}
.tags{margin-top:20px}
.tags strong{color:#666;font-weight:normal}
.tags a{color:#dc2626;margin-right:10px;font-size:14px}

@media(max-width:768px){
  .hero-header{padding:40px 24px}
  .hero-header h1{font-size:28px}
  .hero-subtitle{font-size:16px}
  h2{font-size:24px}
  h3{font-size:20px}
  table{font-size:13px}
  th,td{padding:9px}
  .code-block{font-size:12px}
}
&lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;

&lt;div class=&quot;hero-header&quot;&gt;
  &lt;div class=&quot;hero-header-content&quot;&gt;
    &lt;h1&gt;How to Fix Data Guard Lag in Oracle 19c: Step-by-Step Troubleshooting Guide&lt;/h1&gt;
    &lt;div class=&quot;hero-subtitle&quot;&gt;5 Proven Fixes for Transport Lag and Apply Lag with Exact SQL Commands&lt;/div&gt;
    &lt;div class=&quot;hero-meta&quot;&gt;
      &lt;div class=&quot;hero-meta-item&quot;&gt;&amp;#x1F4C5; 27 April 2026&lt;/div&gt;
      &lt;div class=&quot;hero-meta-item&quot;&gt;&amp;#x1F464; Chetan Yadav, Senior Oracle &amp;amp; Cloud DBA&lt;/div&gt;
      &lt;div class=&quot;hero-meta-item&quot;&gt;&amp;#x23F1;&amp;#xFE0F; 12-14 min read&lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;div class=&quot;main-content-wrapper&quot;&gt;
&lt;div class=&quot;container&quot;&gt;

&lt;div class=&quot;reading-time-badge&quot;&gt;&amp;#x23F1;&amp;#xFE0F; Estimated Reading Time: 12-14 minutes&lt;/div&gt;
&lt;div class=&quot;page-tagline&quot;&gt;Missing SRLs, Parallel Apply, Network Compression, RMAN Conflict, Protection Mode Mismatch&lt;/div&gt;

&lt;div class=&quot;hero-image-section&quot;&gt;
  &lt;img src=&quot;https://images.unsplash.com/photo-1544197150-b99a580bb7a8?w=1400&amp;h=500&amp;fit=crop&amp;q=85&amp;auto=format&quot; alt=&quot;How to fix Data Guard lag in Oracle 19c architecture diagram and troubleshooting flow&quot;&gt;
&lt;/div&gt;

&lt;div class=&quot;info-box&quot; style=&quot;margin-top:28px;&quot;&gt;
  &lt;strong&gt;&amp;#x2699;&amp;#xFE0F; Environment Referenced&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
  &lt;strong&gt;Oracle Database:&lt;/strong&gt; 19.18.0.0.0 Enterprise Edition &amp;nbsp;&amp;bull;&amp;nbsp;
  &lt;strong&gt;Standby Type:&lt;/strong&gt; Physical Standby (Active Data Guard) &amp;nbsp;&amp;bull;&amp;nbsp;
  &lt;strong&gt;Protection Mode:&lt;/strong&gt; Maximum Availability (SYNC/AFFIRM)&lt;br&gt;
  &lt;strong&gt;Primary:&lt;/strong&gt; 2-Node RAC, 4.8 TB OLTP &amp;nbsp;&amp;bull;&amp;nbsp;
  &lt;strong&gt;Network:&lt;/strong&gt; Dedicated 1 GbE WAN, RTT 1.8 ms &amp;nbsp;&amp;bull;&amp;nbsp;
  &lt;strong&gt;Peak Load:&lt;/strong&gt; 2,800 TPS
&lt;/div&gt;

&lt;p&gt;
  In Oracle 19c environments, Data Guard lag is one of the most common production issues DBAs face. It is also one of the most stressful alerts a DBA receives. The standby is falling behind the primary. Every second of lag is a second of potential data loss if the primary fails right now. The pressure to fix it quickly is real.
&lt;/p&gt;
&lt;p&gt;
  The problem is that &quot;Data Guard lag&quot; is not one problem. It is five different problems that all show the same symptom. Applying the wrong fix wastes time and can make things worse. This guide gives you the exact decision path, the exact diagnostic queries, and the exact fix commands for each root cause, in the order you should check them.
&lt;/p&gt;
&lt;p&gt;
  Follow the steps in order. Each step either identifies your problem and gives you the fix, or clears that cause and moves you to the next. Most Data Guard lag issues are resolved within Steps 1 to 3.
&lt;/p&gt;

&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;

&lt;div class=&quot;toc&quot;&gt;
  &lt;div class=&quot;toc-header&quot;&gt;&lt;span&gt;&amp;#x1F4DA;&lt;/span&gt; Table of Contents&lt;/div&gt;
  &lt;ol&gt;
    &lt;li&gt;&lt;a href=&quot;#section1&quot;&gt;Before You Start: Run These 4 Queries First&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#section2&quot;&gt;Step 1: Check for Transport Lag vs Apply Lag&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#section3&quot;&gt;Step 2: Fix Missing Standby Redo Logs (Most Common Root Cause)&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#section4&quot;&gt;Step 3: Enable Parallel Apply to Fix MRP Bottleneck&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#section5&quot;&gt;Step 4: Fix Network Latency and Bandwidth&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#section6&quot;&gt;Step 5: Resolve RMAN vs MRP I/O Conflict&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#section7&quot;&gt;Step 6: Fix Protection Mode Mismatch&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#section8&quot;&gt;Fix for Active Data Guard (ADG) Apply Lag&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#section9&quot;&gt;After the Fix: Verify and Monitor&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#section10&quot;&gt;Prevent Lag From Returning: Configuration Checklist&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#section11&quot;&gt;FAQ&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#section12&quot;&gt;Related Reading&lt;/a&gt;&lt;/li&gt;
  &lt;/ol&gt;
&lt;/div&gt;

&lt;!-- ═══════════════════════════════════ --&gt;
&lt;h2 id=&quot;section1&quot;&gt;1. Before You Start: Run These 4 Queries First&lt;/h2&gt;
&lt;p&gt;
  Do not start applying fixes before running diagnostics. Two minutes of diagnosis saves two hours of incorrect troubleshooting.
&lt;/p&gt;

&lt;div class=&quot;code-container&quot;&gt;
  &lt;div class=&quot;code-header&quot;&gt;
    &lt;span class=&quot;code-label&quot;&gt;SQL, 4 Mandatory Diagnostic Queries (Run Before Anything Else)&lt;/span&gt;
    &lt;button class=&quot;copy-btn&quot; onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;
  &lt;/div&gt;
  &lt;div class=&quot;code-block&quot;&gt;-- QUERY 1: Identify lag type (run on PRIMARY)
-- This tells you which direction to go
SELECT name,
       value,
       time_computed
FROM   v$dataguard_stats
WHERE  name IN (
    &#39;transport lag&#39;,
    &#39;apply lag&#39;,
    &#39;apply finish time&#39;
)
ORDER  BY name;

-- QUERY 2: Check Standby Redo Logs (run on STANDBY)
-- No rows = missing SRLs = most common cause of apply lag
SELECT group#,
       thread#,
       bytes/1024/1024  AS size_mb,
       archived,
       status
FROM   v$standby_log
ORDER  BY thread#, group#;

-- QUERY 3: Check MRP parallel workers (run on STANDBY)
-- Only MRP0 with no PR* processes = parallel apply disabled
SELECT process,
       status,
       thread#,
       sequence#
FROM   v$managed_standby
WHERE  process LIKE &#39;MRP%&#39;
OR     process LIKE &#39;PR%&#39;
ORDER  BY process;

-- QUERY 4: Check for archive gap (run on PRIMARY)
-- Any rows = URGENT, fix this before everything else
SELECT thread#,
       low_sequence#,
       high_sequence#
FROM   v$archive_gap
ORDER  BY thread#;&lt;/div&gt;
&lt;/div&gt;

&lt;div class=&quot;tip-box&quot;&gt;
  &lt;strong&gt;Read Query 4 Result First:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
  If Query 4 returns any rows, you have a sequence gap. This means the standby is missing archived redo logs and cannot apply continuously. Fix the gap by manually copying the missing archives from the primary before doing anything else. A sequence gap takes priority over every other fix.
&lt;/div&gt;

&lt;!-- ═══════════════════════════════════ --&gt;
&lt;h2 id=&quot;section2&quot;&gt;2. Step 1: Check Transport Lag vs Apply Lag&lt;/h2&gt;

&lt;div class=&quot;step-box&quot;&gt;
  &lt;div class=&quot;step-num&quot;&gt;1&lt;/div&gt;
  &lt;h3&gt;Identify Which Type of Lag You Have&lt;/h3&gt;
  &lt;p&gt;From Query 1 output:&lt;/p&gt;
  &lt;ul&gt;
    &lt;li&gt;&lt;span class=&quot;tag-urgent&quot;&gt;Transport lag high&lt;/span&gt; Redo is not reaching the standby fast enough. Go to Step 4 (network) or check primary I/O.&lt;/li&gt;
    &lt;li&gt;&lt;span class=&quot;tag-urgent&quot;&gt;Apply lag high, transport lag low&lt;/span&gt; Redo is arriving fine but MRP cannot apply it. Go to Step 2 (SRLs) then Step 3 (parallel apply).&lt;/li&gt;
    &lt;li&gt;&lt;span class=&quot;tag-urgent&quot;&gt;Both high&lt;/span&gt; Check SRLs first (Step 2), then network (Step 4).&lt;/li&gt;
  &lt;/ul&gt;
&lt;/div&gt;

&lt;table&gt;
  &lt;thead&gt;&lt;tr&gt;&lt;th&gt;Query 1 Result&lt;/th&gt;&lt;th&gt;What It Means&lt;/th&gt;&lt;th&gt;Go To&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;&lt;td&gt;transport lag: +00 05:00:00, apply lag: +00 00:10:00&lt;/td&gt;&lt;td&gt;Network or primary I/O problem&lt;/td&gt;&lt;td&gt;Step 4&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;transport lag: +00 00:00:00, apply lag: +02 00:00:00&lt;/td&gt;&lt;td&gt;MRP apply bottleneck&lt;/td&gt;&lt;td&gt;Step 2 then Step 3&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;transport lag: +00 01:00:00, apply lag: +01 00:00:00&lt;/td&gt;&lt;td&gt;Multiple issues&lt;/td&gt;&lt;td&gt;Step 2, then Step 3, then Step 4&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;Both show +00 00:00:00&lt;/td&gt;&lt;td&gt;Lag cleared or intermittent&lt;/td&gt;&lt;td&gt;Step 9 (verify and monitor)&lt;/td&gt;&lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;!-- ═══════════════════════════════════ --&gt;
&lt;h2 id=&quot;section3&quot;&gt;3. Step 2: Fix Missing Standby Redo Logs&lt;/h2&gt;
&lt;p&gt;
  &lt;span class=&quot;tag-urgent&quot;&gt;Check This First&lt;/span&gt; Missing Standby Redo Logs (SRLs) is the single most common cause of unexpectedly high apply lag in new or recently rebuilt Data Guard environments. Without SRLs, real-time apply cannot function. The standby only applies redo when archive logs are shipped, typically once per hour, creating a massive lag gap.
&lt;/p&gt;

&lt;div class=&quot;step-box&quot;&gt;
  &lt;div class=&quot;step-num&quot;&gt;2&lt;/div&gt;
  &lt;h3&gt;Diagnose and Fix Missing SRLs&lt;/h3&gt;

&lt;div class=&quot;code-container&quot;&gt;
  &lt;div class=&quot;code-header&quot;&gt;
    &lt;span class=&quot;code-label&quot;&gt;SQL, Check and Create Standby Redo Logs&lt;/span&gt;
    &lt;button class=&quot;copy-btn&quot; onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;
  &lt;/div&gt;
  &lt;div class=&quot;code-block&quot;&gt;-- Step 2a: Check primary online redo log size (run on PRIMARY)
-- SRLs must match this exact size
SELECT group#,
       members,
       bytes/1024/1024  AS size_mb,
       status
FROM   v$log
ORDER  BY group#;

-- Step 2b: Check SRLs on standby (run on STANDBY)
-- If no rows returned = SRLs are missing
SELECT group#,
       thread#,
       bytes/1024/1024  AS size_mb,
       archived,
       status
FROM   v$standby_log
ORDER  BY thread#, group#;

-- Step 2c: Create SRLs if missing (run on STANDBY)
-- Rules: same size as online redo logs
-- Need (online_log_groups_per_thread + 1) SRL groups per thread
-- Example: Primary has 3 redo groups per thread, 2 threads (RAC)
-- Need 4 SRL groups for thread 1, 4 for thread 2

-- For ASM storage (recommended):
ALTER DATABASE ADD STANDBY LOGFILE THREAD 1
    GROUP 11 (&#39;+DATA&#39;) SIZE 500M;
ALTER DATABASE ADD STANDBY LOGFILE THREAD 1
    GROUP 12 (&#39;+DATA&#39;) SIZE 500M;
ALTER DATABASE ADD STANDBY LOGFILE THREAD 1
    GROUP 13 (&#39;+DATA&#39;) SIZE 500M;
ALTER DATABASE ADD STANDBY LOGFILE THREAD 1
    GROUP 14 (&#39;+DATA&#39;) SIZE 500M;

-- For single-instance primary (only thread 1 needed):
ALTER DATABASE ADD STANDBY LOGFILE THREAD 1
    GROUP 11 (&#39;+DATA&#39;) SIZE 500M;
ALTER DATABASE ADD STANDBY LOGFILE THREAD 1
    GROUP 12 (&#39;+DATA&#39;) SIZE 500M;
ALTER DATABASE ADD STANDBY LOGFILE THREAD 1
    GROUP 13 (&#39;+DATA&#39;) SIZE 500M;
ALTER DATABASE ADD STANDBY LOGFILE THREAD 1
    GROUP 14 (&#39;+DATA&#39;) SIZE 500M;

-- Step 2d: Verify SRLs created and MRP switches to real-time apply
SELECT group#,
       thread#,
       bytes/1024/1024  AS size_mb,
       status
FROM   v$standby_log
ORDER  BY thread#, group#;

-- Check MRP switched to WAIT_FOR_LOG (real-time) not WAIT_FOR_GAP
SELECT process,
       status,
       sequence#
FROM   v$managed_standby
WHERE  process = &#39;MRP0&#39;;&lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;

&lt;div class=&quot;success-box&quot;&gt;
  &lt;strong&gt;Expected Result After Creating SRLs:&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
  Within 2,5 minutes of creating SRLs, MRP status should change from &lt;code&gt;WAIT_FOR_GAP&lt;/code&gt; to &lt;code&gt;WAIT_FOR_LOG&lt;/code&gt;. Apply lag should begin dropping immediately and typically reaches under 60 seconds within 10,15 minutes if the only issue was missing SRLs. In one production environment, apply lag dropped from 8 hours to 42 seconds within 12 minutes of SRL creation.
&lt;/div&gt;

&lt;!-- ═══════════════════════════════════ --&gt;
&lt;h2 id=&quot;section4&quot;&gt;4. Step 3: Enable Parallel Apply&lt;/h2&gt;
&lt;p&gt;
  If SRLs are present and correctly sized but apply lag is still growing, the MRP process is the bottleneck. By default, MRP is single-threaded. Enabling parallel apply allows MRP to use multiple CPU cores to apply redo simultaneously, increasing apply throughput by 3,8x on most workloads.
&lt;/p&gt;

&lt;div class=&quot;step-box&quot;&gt;
  &lt;div class=&quot;step-num&quot;&gt;3&lt;/div&gt;
  &lt;h3&gt;Enable Parallel Apply on the Standby&lt;/h3&gt;

&lt;div class=&quot;code-container&quot;&gt;
  &lt;div class=&quot;code-header&quot;&gt;
    &lt;span class=&quot;code-label&quot;&gt;SQL, Enable Parallel Apply and Verify&lt;/span&gt;
    &lt;button class=&quot;copy-btn&quot; onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;
  &lt;/div&gt;
  &lt;div class=&quot;code-block&quot;&gt;-- Step 3a: Check current apply mode (run on STANDBY)
-- If only MRP0 shown and no PR* processes = single-threaded
SELECT process,
       status,
       thread#,
       sequence#
FROM   v$managed_standby
WHERE  process LIKE &#39;MRP%&#39;
OR     process LIKE &#39;PR%&#39;
ORDER  BY process;

-- Step 3b: Stop current MRP (run on STANDBY)
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;

-- Verify MRP stopped
SELECT process, status
FROM   v$managed_standby
WHERE  process LIKE &#39;MRP%&#39;;

-- Step 3c: Restart with parallel apply
-- Set PARALLEL to match standby CPU count (start with CPU_count/2)
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE
    PARALLEL 8
    USING CURRENT LOGFILE
    DISCONNECT FROM SESSION;

-- Step 3d: Verify parallel workers started
-- Should see MRP0 + PR00, PR01, PR02... workers
SELECT process,
       status,
       thread#,
       sequence#
FROM   v$managed_standby
WHERE  process LIKE &#39;MRP%&#39;
OR     process LIKE &#39;PR%&#39;
ORDER  BY process;

-- Step 3e: Monitor apply lag after enabling parallel apply
SELECT name,
       value,
       time_computed
FROM   v$dataguard_stats
WHERE  name IN (&#39;transport lag&#39;, &#39;apply lag&#39;)
ORDER  BY name;&lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;

&lt;div class=&quot;info-box&quot;&gt;
  &lt;strong&gt;How Many Parallel Apply Workers to Set?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
  Start with half your standby CPU count. For an 8-CPU standby, start with &lt;code&gt;PARALLEL 4&lt;/code&gt;. Monitor apply lag and CPU usage. If apply lag is still growing and CPU has headroom, increase to &lt;code&gt;PARALLEL 8&lt;/code&gt;. Do not set parallel degree higher than CPU count. If the standby runs Active Data Guard (read workload), leave at least 25% CPU for read sessions.
&lt;/div&gt;

&lt;!-- ═══════════════════════════════════ --&gt;
&lt;h2 id=&quot;section5&quot;&gt;5. Step 4: Fix Network Latency and Bandwidth&lt;/h2&gt;
&lt;p&gt;
  If transport lag is high and apply lag is low, the problem is between the primary and the standby. The redo is being generated but not arriving fast enough.
&lt;/p&gt;

&lt;div class=&quot;step-box&quot;&gt;
  &lt;div class=&quot;step-num&quot;&gt;4&lt;/div&gt;
  &lt;h3&gt;Reduce Redo Transport Bandwidth Usage&lt;/h3&gt;

&lt;div class=&quot;code-container&quot;&gt;
  &lt;div class=&quot;code-header&quot;&gt;
    &lt;span class=&quot;code-label&quot;&gt;SQL, Enable Redo Log Compression and Fix Transport Config&lt;/span&gt;
    &lt;button class=&quot;copy-btn&quot; onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;
  &lt;/div&gt;
  &lt;div class=&quot;code-block&quot;&gt;-- Step 4a: Check current transport configuration (run on PRIMARY)
SELECT dest_id,
       dest_name,
       status,
       affirm,
       compression,
       net_timeout,
       async_blocks,
       error
FROM   v$archive_dest
WHERE  target  = &#39;STANDBY&#39;
AND    status  = &#39;VALID&#39;;

-- Step 4b: Enable compression on redo transport (run on PRIMARY)
-- Reduces bandwidth by 30-70% at cost of CPU on both sides
ALTER SYSTEM SET log_archive_dest_2 =
    &#39;SERVICE=standby_db
      SYNC
      AFFIRM
      COMPRESSION=ENABLE
      NET_TIMEOUT=30
      VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)
      DB_UNIQUE_NAME=standby_db&#39;
SCOPE=BOTH SID=&#39;*&#39;;

-- Step 4c: Verify compression is now enabled
SELECT dest_id,
       compression,
       status,
       error
FROM   v$archive_dest
WHERE  target = &#39;STANDBY&#39;
AND    status = &#39;VALID&#39;;

-- Step 4d: Check current network write latency
SELECT dest_id,
       srl_network_writes,
       ROUND(srl_network_write_time /
             NULLIF(srl_network_writes,0), 3)  AS avg_network_write_ms
FROM   v$standby_log_stats
ORDER  BY dest_id;

-- OS level network test (run from primary server shell)
-- ping -c 50 standby_host_ip
-- iperf3 -c standby_host_ip -t 30 -P 4&lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;

&lt;!-- ═══════════════════════════════════ --&gt;
&lt;h2 id=&quot;section6&quot;&gt;6. Step 5: Resolve RMAN vs MRP I/O Conflict&lt;/h2&gt;
&lt;p&gt;
  A very common but often overlooked cause of apply lag spikes: RMAN backup running on the standby at the same time as peak MRP apply activity. Both compete for the same disk I/O. RMAN is aggressive by default and can starve MRP of the I/O it needs.
&lt;/p&gt;

&lt;div class=&quot;step-box&quot;&gt;
  &lt;div class=&quot;step-num&quot;&gt;5&lt;/div&gt;
  &lt;h3&gt;Fix RMAN and MRP I/O Conflict&lt;/h3&gt;

&lt;div class=&quot;code-container&quot;&gt;
  &lt;div class=&quot;code-header&quot;&gt;
    &lt;span class=&quot;code-label&quot;&gt;SQL, Detect and Fix RMAN vs MRP I/O Conflict&lt;/span&gt;
    &lt;button class=&quot;copy-btn&quot; onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;
  &lt;/div&gt;
  &lt;div class=&quot;code-block&quot;&gt;-- Step 5a: Check if RMAN is running during lag spike (run on STANDBY)
SELECT session_key,
       input_type,
       status,
       TO_CHAR(start_time, &#39;YYYY-MM-DD HH24:MI&#39;)  AS start_time,
       TO_CHAR(end_time,   &#39;YYYY-MM-DD HH24:MI&#39;)  AS end_time,
       input_bytes_display,
       output_bytes_display
FROM   v$rman_backup_job_details
WHERE  start_time &gt; SYSDATE - 2
ORDER  BY start_time DESC;

-- Step 5b: Check datafile I/O latency on standby
-- High write time during backup = RMAN starving MRP
SELECT d.name,
       ROUND(f.writetim / NULLIF(f.phywrts,0), 2)  AS avg_write_ms,
       f.phyrds,
       f.phywrts
FROM   v$filestat  f
JOIN   v$datafile  d ON f.file# = d.file#
WHERE  f.phywrts   &gt; 1000
ORDER  BY avg_write_ms DESC
FETCH FIRST 10 ROWS ONLY;

-- Step 5c: Throttle RMAN to protect MRP I/O (run on STANDBY)
-- Connect RMAN and set channel throttle:
-- RMAN&gt; RUN {
--   ALLOCATE CHANNEL c1 DEVICE TYPE DISK
--       RATE 100M;   -- limit to 100MB/sec
--   BACKUP DATABASE;
-- }

-- Step 5d: Use DBMS_SCHEDULER to move backup to off-peak window
-- Check current backup schedule
SELECT job_name,
       enabled,
       next_run_date,
       last_start_date
FROM   dba_scheduler_jobs
WHERE  job_name LIKE &#39;%RMAN%&#39;
OR     job_name LIKE &#39;%BACKUP%&#39;
ORDER  BY next_run_date;&lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;

&lt;!-- ═══════════════════════════════════ --&gt;
&lt;h2 id=&quot;section7&quot;&gt;7. Step 6: Fix Protection Mode Mismatch&lt;/h2&gt;
&lt;p&gt;
  A silent lag builder. The protection mode shown in &lt;code&gt;v$database&lt;/code&gt; has two columns: &lt;code&gt;protection_mode&lt;/code&gt; (what you configured) and &lt;code&gt;protection_level&lt;/code&gt; (what is actually in effect). If the standby was temporarily unreachable, the primary may have silently fallen back to a lower level. This can cause steady, unexplained lag accumulation.
&lt;/p&gt;

&lt;div class=&quot;code-container&quot;&gt;
  &lt;div class=&quot;code-header&quot;&gt;
    &lt;span class=&quot;code-label&quot;&gt;SQL, Check and Restore Protection Mode&lt;/span&gt;
    &lt;button class=&quot;copy-btn&quot; onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;
  &lt;/div&gt;
  &lt;div class=&quot;code-block&quot;&gt;-- Check effective protection mode (run on PRIMARY)
-- If these two values differ, primary fell back silently
SELECT name,
       db_unique_name,
       protection_mode,    -- what you configured
       protection_level    -- what is actually active
FROM   v$database;

-- Check archive destination status for errors
SELECT dest_id,
       status,
       error,
       gap_status,
       db_unique_name
FROM   v$archive_dest_status
WHERE  target    = &#39;STANDBY&#39;
AND    status   != &#39;INACTIVE&#39;;

-- Restore protection mode via DGMGRL (after standby reconnects)
-- dgmgrl /
-- DGMGRL&gt; SHOW CONFIGURATION;
-- DGMGRL&gt; EDIT CONFIGURATION SET PROTECTION MODE AS MAXAVAILABILITY;
-- DGMGRL&gt; SHOW CONFIGURATION;

-- Verify protection_level now matches protection_mode
SELECT protection_mode,
       protection_level
FROM   v$database;&lt;/div&gt;
&lt;/div&gt;

&lt;!-- ═══════════════════════════════════ --&gt;
&lt;h2 id=&quot;section8&quot;&gt;8. Fix for Active Data Guard (ADG) Apply Lag&lt;/h2&gt;
&lt;p&gt;
  If your standby runs Active Data Guard (open read-only while applying), read queries from reporting users compete with MRP for I/O. During heavy reporting workloads, MRP can be starved of I/O and apply lag grows even when all other configuration is correct.
&lt;/p&gt;

&lt;div class=&quot;code-container&quot;&gt;
  &lt;div class=&quot;code-header&quot;&gt;
    &lt;span class=&quot;code-label&quot;&gt;SQL, Protect MRP from ADG Read Workload Using I/O Resource Manager&lt;/span&gt;
    &lt;button class=&quot;copy-btn&quot; onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;
  &lt;/div&gt;
  &lt;div class=&quot;code-block&quot;&gt;-- Check open mode on standby
SELECT open_mode,
       database_role
FROM   v$database;

-- Monitor MRP vs read session I/O competition
SELECT s.program,
       s.status,
       COUNT(*)  AS sessions
FROM   v$session s
WHERE  s.type = &#39;USER&#39;
OR     s.program LIKE &#39;%MRP%&#39;
GROUP  BY s.program, s.status
ORDER  BY sessions DESC
FETCH FIRST 10 ROWS ONLY;

-- Apply lag while ADG read load active
SELECT name, value
FROM   v$dataguard_stats
WHERE  name IN (&#39;transport lag&#39;, &#39;apply lag&#39;);

-- Create I/O Resource Manager plan to protect MRP (run on STANDBY)
BEGIN
    DBMS_RESOURCE_MANAGER.CREATE_PENDING_AREA();
    DBMS_RESOURCE_MANAGER.CREATE_PLAN(
        plan    =&gt; &#39;STANDBY_IO_PLAN&#39;,
        comment =&gt; &#39;Protect MRP apply from ADG read workload&#39;
    );
    DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE(
        plan             =&gt; &#39;STANDBY_IO_PLAN&#39;,
        group_or_subplan =&gt; &#39;_ORACLE_BACKGROUND_GROUP_&#39;,
        comment          =&gt; &#39;MRP gets priority I/O&#39;,
        mgmt_p1          =&gt; 80
    );
    DBMS_RESOURCE_MANAGER.SUBMIT_PENDING_AREA();
END;
/

ALTER SYSTEM SET resource_manager_plan = &#39;STANDBY_IO_PLAN&#39;
SCOPE = BOTH SID = &#39;*&#39;;&lt;/div&gt;
&lt;/div&gt;

&lt;!-- ═══════════════════════════════════ --&gt;
&lt;h2 id=&quot;section9&quot;&gt;9. After the Fix: Verify and Monitor&lt;/h2&gt;
&lt;p&gt;
  After applying any fix, do not assume the problem is resolved. Monitor lag for at least 30 minutes under production load before declaring the incident closed.
&lt;/p&gt;

&lt;div class=&quot;code-container&quot;&gt;
  &lt;div class=&quot;code-header&quot;&gt;
    &lt;span class=&quot;code-label&quot;&gt;SQL, Post-Fix Verification Queries&lt;/span&gt;
    &lt;button class=&quot;copy-btn&quot; onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;
  &lt;/div&gt;
  &lt;div class=&quot;code-block&quot;&gt;-- Run this every 5 minutes after the fix (run on PRIMARY)
SELECT name,
       value,
       time_computed
FROM   v$dataguard_stats
WHERE  name IN (
    &#39;transport lag&#39;,
    &#39;apply lag&#39;,
    &#39;apply finish time&#39;
)
ORDER  BY name;

-- Confirm no sequence gaps (run on PRIMARY)
SELECT thread#,
       low_sequence#,
       high_sequence#
FROM   v$archive_gap;

-- Confirm MRP running in real-time mode (run on STANDBY)
-- Status must be WAIT_FOR_LOG not WAIT_FOR_GAP
SELECT process,
       status,
       sequence#,
       delay_mins
FROM   v$managed_standby
WHERE  process LIKE &#39;MRP%&#39;
OR     process LIKE &#39;PR%&#39;
ORDER  BY process;

-- Full DGMGRL health check
-- dgmgrl /
-- DGMGRL&gt; SHOW CONFIGURATION;
-- DGMGRL&gt; VALIDATE DATABASE VERBOSE standby_db;&lt;/div&gt;
&lt;/div&gt;

&lt;!-- ═══════════════════════════════════ --&gt;
&lt;h2 id=&quot;section10&quot;&gt;10. Prevent Lag From Returning: Configuration Checklist&lt;/h2&gt;

&lt;div class=&quot;checklist&quot;&gt;
  &lt;h3&gt;SRL and Transport Configuration&lt;/h3&gt;
  &lt;ul&gt;
    &lt;li&gt;Standby Redo Logs created with same size as online redo logs&lt;/li&gt;
    &lt;li&gt;SRL count = online redo log groups per thread + 1 per thread&lt;/li&gt;
    &lt;li&gt;MRP status shows WAIT_FOR_LOG (real-time apply active)&lt;/li&gt;
    &lt;li&gt;COMPRESSION=ENABLE set in LOG_ARCHIVE_DEST if WAN bandwidth is a concern&lt;/li&gt;
    &lt;li&gt;NET_TIMEOUT set appropriately for WAN latency (30,60 seconds)&lt;/li&gt;
  &lt;/ul&gt;
&lt;/div&gt;

&lt;div class=&quot;checklist&quot;&gt;
  &lt;h3&gt;Apply Performance&lt;/h3&gt;
  &lt;ul&gt;
    &lt;li&gt;Parallel apply enabled with degree matching standby CPU count&lt;/li&gt;
    &lt;li&gt;RMAN backup scheduled outside peak MRP apply window&lt;/li&gt;
    &lt;li&gt;Standby hardware sized equal to or greater than primary&lt;/li&gt;
    &lt;li&gt;Dedicated I/O path for standby datafiles (not shared with backup)&lt;/li&gt;
    &lt;li&gt;I/O Resource Manager plan active if ADG read workload is present&lt;/li&gt;
  &lt;/ul&gt;
&lt;/div&gt;

&lt;div class=&quot;checklist&quot;&gt;
  &lt;h3&gt;Monitoring&lt;/h3&gt;
  &lt;ul&gt;
    &lt;li&gt;Automated alert when transport lag exceeds 30 seconds&lt;/li&gt;
    &lt;li&gt;Automated alert when apply lag exceeds 2 minutes&lt;/li&gt;
    &lt;li&gt;Archive gap check runs every 15 minutes&lt;/li&gt;
    &lt;li&gt;DGMGRL VALIDATE DATABASE runs weekly&lt;/li&gt;
    &lt;li&gt;Failover tested under production load every quarter&lt;/li&gt;
  &lt;/ul&gt;
&lt;/div&gt;

&lt;!-- ═══════════════════════════════════ --&gt;
&lt;h2 id=&quot;section11&quot;&gt;FAQ&lt;/h2&gt;

&lt;div class=&quot;faq-item&quot;&gt;
  &lt;div class=&quot;faq-question&quot;&gt;Can I create SRLs without stopping the standby database?&lt;/div&gt;
  &lt;div class=&quot;faq-answer&quot;&gt;
    Yes. You can add Standby Redo Log groups to a mounted or open standby database without any downtime. The &lt;code&gt;ALTER DATABASE ADD STANDBY LOGFILE&lt;/code&gt; command runs online. MRP does not need to be stopped. After creating SRLs, MRP automatically detects them and switches to real-time apply mode. You should verify the switch by checking that MRP status changes from &lt;code&gt;WAIT_FOR_GAP&lt;/code&gt; to &lt;code&gt;WAIT_FOR_LOG&lt;/code&gt; within a few minutes.
  &lt;/div&gt;
&lt;/div&gt;

&lt;div class=&quot;faq-item&quot;&gt;
  &lt;div class=&quot;faq-question&quot;&gt;Will enabling parallel apply cause any data consistency risk?&lt;/div&gt;
  &lt;div class=&quot;faq-answer&quot;&gt;
    No. Oracle&#39;s parallel apply mechanism uses the same redo-based recovery infrastructure as single-threaded MRP. Oracle guarantees transactional consistency regardless of the parallel degree. Redo records within the same transaction are always applied in the correct order. The only consideration is that enabling parallel apply requires briefly cancelling and restarting MRP, which causes a few seconds of apply pause. During that pause, apply lag may increase slightly before recovering.
  &lt;/div&gt;
&lt;/div&gt;

&lt;div class=&quot;faq-item&quot;&gt;
  &lt;div class=&quot;faq-question&quot;&gt;How do I fix a sequence gap in Data Guard?&lt;/div&gt;
  &lt;div class=&quot;faq-answer&quot;&gt;
    A sequence gap means the standby is missing one or more archived redo log files and cannot apply continuously. First run &lt;code&gt;SELECT * FROM v$archive_gap&lt;/code&gt; on the primary to identify the missing sequence numbers. Then manually copy the corresponding archive log files from the primary to the standby using RMAN or OS copy, register them on the standby with &lt;code&gt;ALTER DATABASE REGISTER LOGFILE&lt;/code&gt;, and verify MRP resumes applying. If the gap is very old and the archive logs no longer exist on the primary, you may need to rebuild the standby using RMAN active duplication.
  &lt;/div&gt;
&lt;/div&gt;

&lt;div class=&quot;faq-item&quot;&gt;
  &lt;div class=&quot;faq-question&quot;&gt;Transport lag is zero but apply lag keeps growing slowly every day. Why?&lt;/div&gt;
  &lt;div class=&quot;faq-answer&quot;&gt;
    Slow, steady apply lag growth with zero transport lag almost always points to one of three causes: (1) parallel apply is not enabled and MRP is falling behind a high-volume OLTP workload, (2) RMAN backup is running daily and competing with MRP during peak hours, or (3) Active Data Guard read workload is starving MRP I/O. Run the MRP parallel worker check (Query 3) and the RMAN schedule check (Step 5) to identify which one is active in your environment.
  &lt;/div&gt;
&lt;/div&gt;

&lt;!-- RELATED --&gt;
&lt;div class=&quot;related-reading&quot;&gt;
  &lt;h2 id=&quot;section12&quot;&gt;Related Reading from Real Production Systems&lt;/h2&gt;
  &lt;ul&gt;
    &lt;li&gt;
      &lt;a href=&quot;#&quot;&gt;Why Data Guard Lag Happens in Production: Sync, I/O and Network Deep Dive&lt;/a&gt;
      &lt;span class=&quot;why-matters&quot;&gt;Why it matters: This guide covers the root causes behind each lag type. Reading it alongside this fix guide gives you a complete understanding of both why lag happens and exactly how to resolve it.&lt;/span&gt;
    &lt;/li&gt;
    &lt;li&gt;
      &lt;a href=&quot;#&quot;&gt;Oracle Data Guard Protection Modes: Zero Data Loss Design Strategy&lt;/a&gt;
      &lt;span class=&quot;why-matters&quot;&gt;Why it matters: Choosing the right protection mode prevents certain categories of lag from occurring in the first place. SYNC vs ASYNC selection has the biggest impact on transport lag behaviour.&lt;/span&gt;
    &lt;/li&gt;
    &lt;li&gt;
      &lt;a href=&quot;#&quot;&gt;Oracle Performance Engineering Guide: AWR, ASH and SQL Monitor in 19c and 23ai&lt;/a&gt;
      &lt;span class=&quot;why-matters&quot;&gt;Why it matters: AWR and ASH on both primary and standby are the deepest diagnostic tools for lag root causes that simple v$ queries do not reveal.&lt;/span&gt;
    &lt;/li&gt;
    &lt;li&gt;
      &lt;a href=&quot;https://chetanyadavds.blogspot.com/2026/01/n8n-oracle-telegram-alerts.html&quot; target=&quot;_blank&quot;&gt;N8N Oracle Telegram Alerts: Automating Database Monitoring&lt;/a&gt;
      &lt;span class=&quot;why-matters&quot;&gt;Why it matters: The verification queries in Step 9 should run automatically every 5 minutes. This guide shows how to build automated lag alerts that notify you before lag reaches critical levels.&lt;/span&gt;
    &lt;/li&gt;
  &lt;/ul&gt;
&lt;/div&gt;

&lt;!-- AUTHOR --&gt;
&lt;div class=&quot;about-author&quot;&gt;
  &lt;h2&gt;About the Author&lt;/h2&gt;
  &lt;div class=&quot;author-name&quot;&gt;Chetan Yadav&lt;/div&gt;
  &lt;p class=&quot;author-bio&quot;&gt;
    &lt;strong&gt;Chetan Yadav&lt;/strong&gt; is a &lt;strong&gt;Senior Oracle, PostgreSQL, MySQL, and Cloud DBA&lt;/strong&gt; with &lt;strong&gt;15+ years&lt;/strong&gt; of hands-on experience managing production databases across on-premises, hybrid, and cloud environments.
  &lt;/p&gt;
  &lt;p class=&quot;author-bio&quot;&gt;
    Chetan has resolved Data Guard lag incidents across financial and healthcare production environments, including the 8-hour apply lag from missing SRLs and the firewall-induced transport spike described in related guides. His writing focuses on precise diagnosis and exact resolution commands, not generic advice.
  &lt;/p&gt;
  &lt;p class=&quot;author-bio&quot;&gt;
    This blog focuses on &lt;strong&gt;real-world DBA problems, career growth, and practical learning&lt;/strong&gt;, not theoretical documentation or vendor marketing.
  &lt;/p&gt;
  &lt;div class=&quot;social-links&quot;&gt;
    &lt;a href=&quot;https://www.linkedin.com/in/chetanyadavvds/&quot; target=&quot;_blank&quot;&gt;LinkedIn&lt;/a&gt;
    &lt;a href=&quot;https://www.youtube.com/@levelup_careers&quot; target=&quot;_blank&quot;&gt;YouTube&lt;/a&gt;
    &lt;a href=&quot;https://www.instagram.com/levelup_careers/&quot; target=&quot;_blank&quot;&gt;Instagram&lt;/a&gt;
    &lt;a href=&quot;https://x.com/home&quot; target=&quot;_blank&quot;&gt;Twitter (X)&lt;/a&gt;
    &lt;a href=&quot;https://www.facebook.com/oracledbainfo/&quot; target=&quot;_blank&quot;&gt;Facebook&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;Newsletter&lt;/a&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;!-- POST FOOTER --&gt;
&lt;div class=&quot;post-footer&quot;&gt;
  &lt;div class=&quot;post-meta&quot;&gt;&lt;strong&gt;by Chetan Yadav&lt;/strong&gt;, March 2026&lt;/div&gt;
  &lt;div class=&quot;share-buttons&quot;&gt;
    &lt;strong&gt;Share:&lt;/strong&gt;
    &lt;a href=&quot;#&quot;&gt;Email&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;BlogThis&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;X&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;Facebook&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;Pinterest&lt;/a&gt;
  &lt;/div&gt;
  &lt;div class=&quot;tags&quot;&gt;
    &lt;strong&gt;Tags:&lt;/strong&gt;
    &lt;a href=&quot;#&quot;&gt;Data Guard Lag Fix&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;Oracle 19c Data Guard&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;Standby Redo Logs&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;Parallel Apply&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;Transport Lag&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;Apply Lag&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;MRP Process&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;Oracle DBA&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;HA DR&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;Data Guard Troubleshooting&lt;/a&gt;
  &lt;/div&gt;
&lt;/div&gt;

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

&lt;script&gt;
function copyCode(button) {
  const codeContainer = button.closest(&#39;.code-container&#39;);
  const codeBlock = codeContainer.querySelector(&#39;.code-block&#39;);
  const textArea = document.createElement(&#39;textarea&#39;);
  textArea.value = codeBlock.textContent;
  textArea.style.position = &#39;fixed&#39;;
  textArea.style.left = &#39;-9999px&#39;;
  document.body.appendChild(textArea);
  textArea.select();
  textArea.setSelectionRange(0, 99999);
  try {
    document.execCommand(&#39;copy&#39;);
    button.textContent = &#39;Copied!&#39;;
    button.classList.add(&#39;copied&#39;);
    setTimeout(() =&gt; { button.textContent = &#39;Copy&#39;; button.classList.remove(&#39;copied&#39;); }, 2000);
  } catch(err) {
    button.textContent = &#39;Failed&#39;;
    setTimeout(() =&gt; { button.textContent = &#39;Copy&#39;; }, 2000);
  }
  document.body.removeChild(textArea);
}
&lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;</content><link rel='replies' type='application/atom+xml' href='http://chetanyadavds.blogspot.com/feeds/4698790665621016249/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://chetanyadavds.blogspot.com/2026/04/202604fix-data-guard-lag-oracle-19c-step-by-step.html.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/436196721812840248/posts/default/4698790665621016249'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/436196721812840248/posts/default/4698790665621016249'/><link rel='alternate' type='text/html' href='http://chetanyadavds.blogspot.com/2026/04/202604fix-data-guard-lag-oracle-19c-step-by-step.html.html' title='How to Fix Data Guard Lag in Oracle 19c (6 Real Production Fixes with SQL)'/><author><name>Chetan Yadav</name><uri>http://www.blogger.com/profile/02557500437758632199</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiE0TgifWM4l1b3sy_cK2y41bpqyfY1U25-p5IBKkSg8pJLFRvjYr_kF7W_MgsYdc21DutWF9H6qlShQDQspQLbZEQ5CSUA51Wp6Mh9l5Ygd4NPSuQyqwSMrKitCWwSLr0oHBg9TGjxAvAM7TTkkehHLL1MFWg0wSb31CxywQxIokg9pg/s1600/IMG-20251013-WA0038.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-436196721812840248.post-5736334328099044748</id><published>2026-04-21T13:48:00.001+05:30</published><updated>2026-04-21T13:48:00.107+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="Apply Lag"/><category scheme="http://www.blogger.com/atom/ns#" term="Data Guard Lag Fix"/><category scheme="http://www.blogger.com/atom/ns#" term="HA DR"/><category scheme="http://www.blogger.com/atom/ns#" term="MRP Process"/><category scheme="http://www.blogger.com/atom/ns#" term="Oracle 19c Data Guard"/><category scheme="http://www.blogger.com/atom/ns#" term="Oracle DBA"/><category scheme="http://www.blogger.com/atom/ns#" term="Parallel Apply"/><category scheme="http://www.blogger.com/atom/ns#" term="Standby Redo Logs"/><category scheme="http://www.blogger.com/atom/ns#" term="Transport Lag"/><title type='text'>How to Fix Data Guard Lag in Oracle 19c (Step-by-Step Troubleshooting Guide)</title><content type='html'>
&lt;html lang=&quot;en&quot;&gt;
&lt;head&gt;
&lt;meta charset=&quot;UTF-8&quot;&gt;&lt;/meta&gt;
&lt;title&gt;How to Fix Data Guard Lag in Oracle 19c: Step-by-Step Troubleshooting Guide&lt;/title&gt;
&lt;meta content=&quot;width=device-width, initial-scale=1.0&quot; name=&quot;viewport&quot;&gt;&lt;/meta&gt;
&lt;meta content=&quot;Step-by-step guide to fix Oracle Data Guard lag in Oracle 19c. Covers missing SRLs, parallel apply, network compression, RMAN conflict, and protection mode mismatch with exact SQL commands.&quot; name=&quot;description&quot;&gt;&lt;/meta&gt;
&lt;link href=&quot;data:image/svg+xml,%3Csvg xmlns=&#39;http://www.w3.org/2000/svg&#39; viewBox=&#39;0 0 100 100&#39;%3E%3Cdefs%3E%3ClinearGradient id=&#39;g&#39; x1=&#39;0%25&#39; y1=&#39;0%25&#39; x2=&#39;100%25&#39; y2=&#39;100%25&#39;%3E%3Cstop offset=&#39;0%25&#39; style=&#39;stop-color:%23d93025&#39;/%3E%3Cstop offset=&#39;100%25&#39; style=&#39;stop-color:%23a82318&#39;/%3E%3C/linearGradient%3E%3C/defs%3E%3Crect width=&#39;100&#39; height=&#39;100&#39; rx=&#39;20&#39; fill=&#39;url(%23g)&#39;/%3E%3Cpath d=&#39;M20,30 L35,30 L35,70 L20,70 Z M40,40 L55,40 L55,70 L40,70 Z M60,25 L75,25 L75,70 L60,70 Z&#39; fill=&#39;white&#39; opacity=&#39;0.9&#39;/%3E%3C/svg%3E&quot; rel=&quot;icon&quot; type=&quot;image/svg+xml&quot;&gt;&lt;/link&gt;
&lt;style&gt;
*{margin:0;padding:0;box-sizing:border-box}
body{background:#fff;color:#333;font-family:Arial,Helvetica,sans-serif;font-size:16px;line-height:1.7}
.post-title,.entry-title,h1.post-title,h3.post-title{display:none!important}

.hero-header{background:linear-gradient(135deg,#1e3a5f 0%,#7c1c1c 50%,#1e3a5f 100%);color:#fff;padding:60px 40px;width:100%}
.hero-header-content{max-width:1200px;margin:0 auto;padding:0 20px}
.hero-header h1{font-size:42px;font-weight:700;color:#fff;line-height:1.3;margin-bottom:20px}
.hero-subtitle{font-size:20px;font-weight:300;color:#fca5a5;opacity:.95;margin-bottom:30px}
.hero-meta{display:flex;gap:30px;align-items:center;flex-wrap:wrap;font-size:15px;color:#fecaca}
.hero-meta-item{display:flex;align-items:center;gap:8px}

.hero-image-section{width:100%;margin:0;padding:0;overflow:hidden;background:#f8fafc}
.hero-image-section img{width:100%;height:auto;display:block;max-height:820px;object-fit:contain;padding:20px 0}

.main-content-wrapper{width:100%;background:#fff}
.container{max-width:800px;margin:0 auto;padding:30px 20px;background:#fff}

.reading-time-badge{display:inline-block;background:linear-gradient(135deg,#dc2626 0%,#991b1b 100%);color:#fff;padding:12px 28px;border-radius:50px;font-size:15px;font-weight:500;margin-bottom:30px;box-shadow:0 4px 12px rgba(220,38,38,.3)}
.page-tagline{color:#666;font-size:15px;font-style:italic;text-align:center;margin-bottom:35px}

.read-more-link{display:block;margin:28px 0 8px}
.read-more-link a{color:#dc2626;font-size:15px;text-decoration:none;font-style:italic}
.read-more-link a:hover{text-decoration:underline}

.toc{background:#fef2f2;border-left:4px solid #dc2626;padding:28px 32px;margin:35px 0;border-radius:8px;box-shadow:0 1px 3px rgba(0,0,0,.05)}
.toc-header{display:flex;align-items:center;gap:10px;font-size:24px;font-weight:bold;color:#000;margin-bottom:20px}
.toc ol{margin-left:20px;line-height:1.9;counter-reset:toc-counter;list-style:none}
.toc ol li{counter-increment:toc-counter;margin:12px 0;font-size:16px;padding-bottom:12px;border-bottom:1px solid #fecaca;transition:all .2s ease}
.toc ol li:last-child{border-bottom:none}
.toc ol li:hover{padding-left:8px}
.toc ol li::before{content:counter(toc-counter) &quot;. &quot;;font-weight:600;color:#dc2626;margin-right:8px}
.toc a{color:#dc2626;text-decoration:none}
.toc a:hover{text-decoration:underline}

h2{font-size:28px;font-weight:bold;color:#000;margin:45px 0 20px;line-height:1.3}
h3{font-size:22px;font-weight:600;color:#333;margin:30px 0 15px}
p{margin:16px 0;color:#333;line-height:1.7}
ul,ol{margin:18px 0 18px 35px;color:#333;line-height:1.7}
ul li,ol li{margin:10px 0}
strong{font-weight:bold;color:#333}
em{font-style:italic}
a{color:#dc2626;text-decoration:none}
a:hover{text-decoration:underline}

.tag-good{display:inline-block;background:#e6f4ea;color:#137333;border:1px solid #a8d5b5;border-radius:4px;padding:1px 8px;font-size:13px;font-weight:600;margin-right:6px;vertical-align:middle}
.tag-bad{display:inline-block;background:#fce8e6;color:#c5221f;border:1px solid #f5a8a4;border-radius:4px;padding:1px 8px;font-size:13px;font-weight:600;margin-right:6px;vertical-align:middle}
.tag-step{display:inline-block;background:#1e3a5f;color:#fff;border-radius:50%;width:28px;height:28px;text-align:center;line-height:28px;font-size:13px;font-weight:700;margin-right:8px;vertical-align:middle}
.tag-fix{display:inline-block;background:#f0fdf4;color:#15803d;border:1px solid #86efac;border-radius:4px;padding:2px 10px;font-size:12px;font-weight:700;margin-right:6px;vertical-align:middle}
.tag-urgent{display:inline-block;background:#fef2f2;color:#991b1b;border:1px solid #fca5a5;border-radius:4px;padding:2px 10px;font-size:12px;font-weight:700;margin-right:6px;vertical-align:middle}

.code-container{position:relative;margin:24px 0}
.code-header{background:#1e1b2e;color:#fff;padding:10px 16px;border-radius:8px 8px 0 0;display:flex;justify-content:space-between;align-items:center;font-size:14px}
.code-label{font-weight:500}
.copy-btn{background:#dc2626;color:#fff;border:none;padding:6px 14px;border-radius:5px;cursor:pointer;font-size:13px;transition:background .2s;font-family:Arial,sans-serif}
.copy-btn:hover{background:#b91c1c}
.copy-btn.copied{background:#10b981}
.code-block{background:#f8f9fa;border:1px solid #e0e0e0;border-radius:0 0 8px 8px;padding:18px 20px;margin:0;overflow-x:auto;font-family:&#39;Courier New&#39;,Courier,monospace;font-size:14px;line-height:1.7;white-space:pre;tab-size:4}
code{background:#f8f9fa;padding:2px 6px;border-radius:3px;font-family:&#39;Courier New&#39;,monospace;font-size:14px;color:#dc2626}

.info-box{background:#fffbeb;border-left:4px solid #f59e0b;padding:18px 22px;border-radius:0 8px 8px 0;margin:25px 0}
.info-box strong{color:#92400e}
.tip-box{background:#fef2f2;border-left:4px solid #dc2626;padding:18px 22px;border-radius:0 8px 8px 0;margin:25px 0}
.tip-box strong{color:#991b1b}
.incident-box{background:#fef2f2;border-left:4px solid #ef4444;padding:18px 22px;border-radius:0 8px 8px 0;margin:25px 0}
.incident-box strong{color:#991b1b}
.success-box{background:#f0fdf4;border-left:4px solid #22c55e;padding:18px 22px;border-radius:0 8px 8px 0;margin:25px 0}
.success-box strong{color:#15803d}

/* step box */
.step-box{background:#fff;border:2px solid #e0e0e0;border-radius:10px;padding:24px 28px;margin:28px 0;position:relative}
.step-box .step-num{position:absolute;top:-16px;left:20px;background:#dc2626;color:#fff;border-radius:50%;width:32px;height:32px;text-align:center;line-height:32px;font-size:15px;font-weight:700}
.step-box h3{margin-top:4px;color:#dc2626}

table{width:100%;border-collapse:collapse;margin:25px 0;background:#fff;border:1px solid #e0e0e0}
thead{background:#1e1b2e}
th{padding:12px;text-align:left;font-weight:bold;color:#fff;border-bottom:2px solid #e0e0e0;font-size:15px}
td{padding:12px;border-bottom:1px solid #e0e0e0;color:#333;font-size:15px}
tr:last-child td{border-bottom:none}
tbody tr:hover{background:#fef2f2}

.checklist{background:#fef2f2;border:1px solid #fecaca;border-radius:8px;padding:24px 28px;margin:18px 0}
.checklist h3{margin-top:0;color:#1e293b;font-size:18px}
.checklist ul{list-style:none;margin-left:0}
.checklist ul li{padding:6px 0 6px 28px;position:relative}
.checklist ul li::before{content:&quot;&quot;;position:absolute;left:4px;top:13px;width:10px;height:10px;background:#dc2626;border-radius:50%}

.faq-item{margin:25px 0;border-bottom:1px solid #e5e7eb;padding-bottom:25px}
.faq-item:last-child{border-bottom:none}
.faq-question{font-weight:600;color:#000;font-size:17px;margin-bottom:10px}
.faq-answer{color:#333;line-height:1.7}

.related-reading{background:#f8f9fa;border:1px solid #e0e0e0;border-radius:8px;padding:30px;margin:40px 0}
.related-reading h2{margin-top:0}
.related-reading ul{margin-left:25px}
.related-reading li{margin:18px 0;line-height:1.7}
.related-reading .why-matters{color:#666;font-size:15px;margin-top:5px;display:block}

.about-author{background:#fffbf0;border:1px solid #e0e0e0;border-radius:8px;padding:30px;margin:40px 0}
.about-author h2{margin-top:0;font-size:28px}
.author-name{font-size:20px;font-weight:bold;color:#000;margin-bottom:10px}
.author-bio{color:#333;line-height:1.7;margin-bottom:15px}
.social-links{margin-top:20px}
.social-links a{display:inline-block;margin-right:20px;color:#dc2626;text-decoration:none;font-size:16px}
.social-links a:hover{text-decoration:underline}

.post-footer{border-top:1px solid #e0e0e0;padding-top:25px;margin-top:40px;color:#666;font-size:15px}
.post-meta{margin-bottom:15px}
.share-buttons{margin:20px 0}
.share-buttons a{display:inline-block;margin-right:15px;color:#dc2626;font-size:14px}
.tags{margin-top:20px}
.tags strong{color:#666;font-weight:normal}
.tags a{color:#dc2626;margin-right:10px;font-size:14px}

@media(max-width:768px){
  .hero-header{padding:40px 24px}
  .hero-header h1{font-size:28px}
  .hero-subtitle{font-size:16px}
  h2{font-size:24px}
  h3{font-size:20px}
  table{font-size:13px}
  th,td{padding:9px}
  .code-block{font-size:12px}
}
&lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;

&lt;div class=&quot;hero-header&quot;&gt;
  &lt;div class=&quot;hero-header-content&quot;&gt;
    &lt;h1&gt;How to Fix Data Guard Lag in Oracle 19c: Step-by-Step Troubleshooting Guide&lt;/h1&gt;
    &lt;div class=&quot;hero-subtitle&quot;&gt;5 Proven Fixes for Transport Lag and Apply Lag with Exact SQL Commands&lt;/div&gt;
    &lt;div class=&quot;hero-meta&quot;&gt;
      &lt;div class=&quot;hero-meta-item&quot;&gt; March 2026&lt;/div&gt;
      &lt;div class=&quot;hero-meta-item&quot;&gt; Chetan Yadav, Senior Oracle &amp;amp; Cloud DBA&lt;/div&gt;
      &lt;div class=&quot;hero-meta-item&quot;&gt;⏱️ 12 - 14 min read&lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;div class=&quot;main-content-wrapper&quot;&gt;
&lt;div class=&quot;container&quot;&gt;

&lt;div class=&quot;reading-time-badge&quot;&gt;⏱️ Estimated Reading Time: 12 - 14 minutes&lt;/div&gt;
&lt;div class=&quot;page-tagline&quot;&gt;Missing SRLs, Parallel Apply, Network Compression, RMAN Conflict, Protection Mode Mismatch&lt;/div&gt;

&lt;div class=&quot;hero-image-section&quot;&gt;
  &lt;img alt=&quot;Oracle Data Guard lag fix decision flowchart with quick diagnosis panel and fix reference table for Oracle 19c&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEi6Rc4grwwuoA6nsciA4Bv4fhU3sIfFuRs20edAHe4nmDy5Y52SQDzS6k4pPTYnlSkNAKlwnMHOJ_U4DeoWvMgasKoAUQPqqzUMhlt5qJRBSZLxpo0tNGl9DYoOnB__nta0Dv6SXG6K1ZMZcJ42vsiocLRgfnlxmbB9VFjxYQbkxKpTJC0MAGyBohKmwJ8&quot; /&gt;
&lt;/div&gt;

&lt;div class=&quot;info-box&quot; style=&quot;margin-top: 28px;&quot;&gt;
  &lt;strong&gt;⚙️ Environment Referenced&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;
  &lt;strong&gt;Oracle Database:&lt;/strong&gt; 19.18.0.0.0 Enterprise Edition &amp;nbsp;•&amp;nbsp;
  &lt;strong&gt;Standby Type:&lt;/strong&gt; Physical Standby (Active Data Guard) &amp;nbsp;•&amp;nbsp;
  &lt;strong&gt;Protection Mode:&lt;/strong&gt; Maximum Availability (SYNC/AFFIRM)&lt;br /&gt;
  &lt;strong&gt;Primary:&lt;/strong&gt; 2-Node RAC, 4.8 TB OLTP &amp;nbsp;•&amp;nbsp;
  &lt;strong&gt;Network:&lt;/strong&gt; Dedicated 1 GbE WAN, RTT 1.8 ms &amp;nbsp;•&amp;nbsp;
  &lt;strong&gt;Peak Load:&lt;/strong&gt; 2,800 TPS
&lt;/div&gt;

&lt;p&gt;
  Data Guard lag is one of the most stressful production alerts a DBA receives. The standby is falling behind the primary. Every second of lag is a second of potential data loss if the primary fails right now. The pressure to fix it quickly is real.
&lt;/p&gt;
&lt;p&gt;
  The problem is that &quot;Data Guard lag&quot; is not one problem. It is five different problems that all show the same symptom. Applying the wrong fix wastes time and can make things worse. This guide gives you the exact decision path, the exact diagnostic queries, and the exact fix commands for each root cause, in the order you should check them.
&lt;/p&gt;
&lt;p&gt;
  Follow the steps in order. Each step either identifies your problem and gives you the fix, or clears that cause and moves you to the next. Most Data Guard lag issues are resolved within Steps 1 to 3.
&lt;/p&gt;


&lt;div class=&quot;toc&quot;&gt;
  &lt;div class=&quot;toc-header&quot;&gt;&lt;span&gt;&lt;/span&gt; Table of Contents&lt;/div&gt;
  &lt;ol&gt;
    &lt;li&gt;&lt;a href=&quot;#section1&quot;&gt;Before You Start: Run These 4 Queries First&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#section2&quot;&gt;Step 1: Check for Transport Lag vs Apply Lag&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#section3&quot;&gt;Step 2: Fix Missing Standby Redo Logs (Most Common Root Cause)&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#section4&quot;&gt;Step 3: Enable Parallel Apply to Fix MRP Bottleneck&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#section5&quot;&gt;Step 4: Fix Network Latency and Bandwidth&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#section6&quot;&gt;Step 5: Resolve RMAN vs MRP I/O Conflict&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#section7&quot;&gt;Step 6: Fix Protection Mode Mismatch&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#section8&quot;&gt;Fix for Active Data Guard (ADG) Apply Lag&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#section9&quot;&gt;After the Fix: Verify and Monitor&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#section10&quot;&gt;Prevent Lag From Returning: Configuration Checklist&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#section11&quot;&gt;FAQ&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#section12&quot;&gt;Related Reading&lt;/a&gt;&lt;/li&gt;
  &lt;/ol&gt;
&lt;/div&gt;
&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;

 &lt;!-- ═══════════════════════════════════ --&gt;
&lt;h2 id=&quot;section1&quot;&gt;1. Before You Start: Run These 4 Queries First&lt;/h2&gt;
&lt;p&gt;
  Do not start applying fixes before running diagnostics. Two minutes of diagnosis saves two hours of incorrect troubleshooting.
&lt;/p&gt;

&lt;div class=&quot;code-container&quot;&gt;
  &lt;div class=&quot;code-header&quot;&gt;
    &lt;span class=&quot;code-label&quot;&gt;SQL, 4 Mandatory Diagnostic Queries (Run Before Anything Else)&lt;/span&gt;
    &lt;button class=&quot;copy-btn&quot; onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;
  &lt;/div&gt;
  &lt;div class=&quot;code-block&quot;&gt;-- QUERY 1: Identify lag type (run on PRIMARY)
-- This tells you which direction to go
SELECT name,
       value,
       time_computed
FROM   v$dataguard_stats
WHERE  name IN (
    &#39;transport lag&#39;,
    &#39;apply lag&#39;,
    &#39;apply finish time&#39;
)
ORDER  BY name;

-- QUERY 2: Check Standby Redo Logs (run on STANDBY)
-- No rows = missing SRLs = most common cause of apply lag
SELECT group#,
       thread#,
       bytes/1024/1024  AS size_mb,
       archived,
       status
FROM   v$standby_log
ORDER  BY thread#, group#;

-- QUERY 3: Check MRP parallel workers (run on STANDBY)
-- Only MRP0 with no PR* processes = parallel apply disabled
SELECT process,
       status,
       thread#,
       sequence#
FROM   v$managed_standby
WHERE  process LIKE &#39;MRP%&#39;
OR     process LIKE &#39;PR%&#39;
ORDER  BY process;

-- QUERY 4: Check for archive gap (run on PRIMARY)
-- Any rows = URGENT, fix this before everything else
SELECT thread#,
       low_sequence#,
       high_sequence#
FROM   v$archive_gap
ORDER  BY thread#;&lt;/div&gt;
&lt;/div&gt;

&lt;div class=&quot;tip-box&quot;&gt;
  &lt;strong&gt;Read Query 4 Result First:&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;
  If Query 4 returns any rows, you have a sequence gap. This means the standby is missing archived redo logs and cannot apply continuously. Fix the gap by manually copying the missing archives from the primary before doing anything else. A sequence gap takes priority over every other fix.
&lt;/div&gt;

&lt;!-- ═══════════════════════════════════ --&gt;
&lt;h2 id=&quot;section2&quot;&gt;2. Step 1: Check Transport Lag vs Apply Lag&lt;/h2&gt;

&lt;div class=&quot;step-box&quot;&gt;
  &lt;div class=&quot;step-num&quot;&gt;1&lt;/div&gt;
  &lt;h3&gt;Identify Which Type of Lag You Have&lt;/h3&gt;
  &lt;p&gt;From Query 1 output:&lt;/p&gt;
  &lt;ul&gt;
    &lt;li&gt;&lt;span class=&quot;tag-urgent&quot;&gt;Transport lag high&lt;/span&gt; Redo is not reaching the standby fast enough. Go to Step 4 (network) or check primary I/O.&lt;/li&gt;
    &lt;li&gt;&lt;span class=&quot;tag-urgent&quot;&gt;Apply lag high, transport lag low&lt;/span&gt; Redo is arriving fine but MRP cannot apply it. Go to Step 2 (SRLs) then Step 3 (parallel apply).&lt;/li&gt;
    &lt;li&gt;&lt;span class=&quot;tag-urgent&quot;&gt;Both high&lt;/span&gt; Check SRLs first (Step 2), then network (Step 4).&lt;/li&gt;
  &lt;/ul&gt;
&lt;/div&gt;

&lt;table&gt;
  &lt;thead&gt;&lt;tr&gt;&lt;th&gt;Query 1 Result&lt;/th&gt;&lt;th&gt;What It Means&lt;/th&gt;&lt;th&gt;Go To&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;&lt;td&gt;transport lag: +00 05:00:00, apply lag: +00 00:10:00&lt;/td&gt;&lt;td&gt;Network or primary I/O problem&lt;/td&gt;&lt;td&gt;Step 4&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;transport lag: +00 00:00:00, apply lag: +02 00:00:00&lt;/td&gt;&lt;td&gt;MRP apply bottleneck&lt;/td&gt;&lt;td&gt;Step 2 then Step 3&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;transport lag: +00 01:00:00, apply lag: +01 00:00:00&lt;/td&gt;&lt;td&gt;Multiple issues&lt;/td&gt;&lt;td&gt;Step 2, then Step 3, then Step 4&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;Both show +00 00:00:00&lt;/td&gt;&lt;td&gt;Lag cleared or intermittent&lt;/td&gt;&lt;td&gt;Step 9 (verify and monitor)&lt;/td&gt;&lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;!-- ═══════════════════════════════════ --&gt;
&lt;h2 id=&quot;section3&quot;&gt;3. Step 2: Fix Missing Standby Redo Logs&lt;/h2&gt;
&lt;p&gt;
  &lt;span class=&quot;tag-urgent&quot;&gt;Check This First&lt;/span&gt; Missing Standby Redo Logs (SRLs) is the single most common cause of unexpectedly high apply lag in new or recently rebuilt Data Guard environments. Without SRLs, real-time apply cannot function. The standby only applies redo when archive logs are shipped, typically once per hour, creating a massive lag gap.
&lt;/p&gt;

&lt;div class=&quot;step-box&quot;&gt;
  &lt;div class=&quot;step-num&quot;&gt;2&lt;/div&gt;
  &lt;h3&gt;Diagnose and Fix Missing SRLs&lt;/h3&gt;

&lt;div class=&quot;code-container&quot;&gt;
  &lt;div class=&quot;code-header&quot;&gt;
    &lt;span class=&quot;code-label&quot;&gt;SQL, Check and Create Standby Redo Logs&lt;/span&gt;
    &lt;button class=&quot;copy-btn&quot; onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;
  &lt;/div&gt;
  &lt;div class=&quot;code-block&quot;&gt;-- Step 2a: Check primary online redo log size (run on PRIMARY)
-- SRLs must match this exact size
SELECT group#,
       members,
       bytes/1024/1024  AS size_mb,
       status
FROM   v$log
ORDER  BY group#;

-- Step 2b: Check SRLs on standby (run on STANDBY)
-- If no rows returned = SRLs are missing
SELECT group#,
       thread#,
       bytes/1024/1024  AS size_mb,
       archived,
       status
FROM   v$standby_log
ORDER  BY thread#, group#;

-- Step 2c: Create SRLs if missing (run on STANDBY)
-- Rules: same size as online redo logs
-- Need (online_log_groups_per_thread + 1) SRL groups per thread
-- Example: Primary has 3 redo groups per thread, 2 threads (RAC)
-- Need 4 SRL groups for thread 1, 4 for thread 2

-- For ASM storage (recommended):
ALTER DATABASE ADD STANDBY LOGFILE THREAD 1
    GROUP 11 (&#39;+DATA&#39;) SIZE 500M;
ALTER DATABASE ADD STANDBY LOGFILE THREAD 1
    GROUP 12 (&#39;+DATA&#39;) SIZE 500M;
ALTER DATABASE ADD STANDBY LOGFILE THREAD 1
    GROUP 13 (&#39;+DATA&#39;) SIZE 500M;
ALTER DATABASE ADD STANDBY LOGFILE THREAD 1
    GROUP 14 (&#39;+DATA&#39;) SIZE 500M;

-- For single-instance primary (only thread 1 needed):
ALTER DATABASE ADD STANDBY LOGFILE THREAD 1
    GROUP 11 (&#39;+DATA&#39;) SIZE 500M;
ALTER DATABASE ADD STANDBY LOGFILE THREAD 1
    GROUP 12 (&#39;+DATA&#39;) SIZE 500M;
ALTER DATABASE ADD STANDBY LOGFILE THREAD 1
    GROUP 13 (&#39;+DATA&#39;) SIZE 500M;
ALTER DATABASE ADD STANDBY LOGFILE THREAD 1
    GROUP 14 (&#39;+DATA&#39;) SIZE 500M;

-- Step 2d: Verify SRLs created and MRP switches to real-time apply
SELECT group#,
       thread#,
       bytes/1024/1024  AS size_mb,
       status
FROM   v$standby_log
ORDER  BY thread#, group#;

-- Check MRP switched to WAIT_FOR_LOG (real-time) not WAIT_FOR_GAP
SELECT process,
       status,
       sequence#
FROM   v$managed_standby
WHERE  process = &#39;MRP0&#39;;&lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;

&lt;div class=&quot;success-box&quot;&gt;
  &lt;strong&gt;Expected Result After Creating SRLs:&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;
  Within 2,5 minutes of creating SRLs, MRP status should change from &lt;code&gt;WAIT_FOR_GAP&lt;/code&gt; to &lt;code&gt;WAIT_FOR_LOG&lt;/code&gt;. Apply lag should begin dropping immediately and typically reaches under 60 seconds within 10,15 minutes if the only issue was missing SRLs. In one production environment, apply lag dropped from 8 hours to 42 seconds within 12 minutes of SRL creation.
&lt;/div&gt;

&lt;!-- ═══════════════════════════════════ --&gt;
&lt;h2 id=&quot;section4&quot;&gt;4. Step 3: Enable Parallel Apply&lt;/h2&gt;
&lt;p&gt;
  If SRLs are present and correctly sized but apply lag is still growing, the MRP process is the bottleneck. By default, MRP is single-threaded. Enabling parallel apply allows MRP to use multiple CPU cores to apply redo simultaneously, increasing apply throughput by 3,8x on most workloads.
&lt;/p&gt;

&lt;div class=&quot;step-box&quot;&gt;
  &lt;div class=&quot;step-num&quot;&gt;3&lt;/div&gt;
  &lt;h3&gt;Enable Parallel Apply on the Standby&lt;/h3&gt;

&lt;div class=&quot;code-container&quot;&gt;
  &lt;div class=&quot;code-header&quot;&gt;
    &lt;span class=&quot;code-label&quot;&gt;SQL, Enable Parallel Apply and Verify&lt;/span&gt;
    &lt;button class=&quot;copy-btn&quot; onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;
  &lt;/div&gt;
  &lt;div class=&quot;code-block&quot;&gt;-- Step 3a: Check current apply mode (run on STANDBY)
-- If only MRP0 shown and no PR* processes = single-threaded
SELECT process,
       status,
       thread#,
       sequence#
FROM   v$managed_standby
WHERE  process LIKE &#39;MRP%&#39;
OR     process LIKE &#39;PR%&#39;
ORDER  BY process;

-- Step 3b: Stop current MRP (run on STANDBY)
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;

-- Verify MRP stopped
SELECT process, status
FROM   v$managed_standby
WHERE  process LIKE &#39;MRP%&#39;;

-- Step 3c: Restart with parallel apply
-- Set PARALLEL to match standby CPU count (start with CPU_count/2)
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE
    PARALLEL 8
    USING CURRENT LOGFILE
    DISCONNECT FROM SESSION;

-- Step 3d: Verify parallel workers started
-- Should see MRP0 + PR00, PR01, PR02... workers
SELECT process,
       status,
       thread#,
       sequence#
FROM   v$managed_standby
WHERE  process LIKE &#39;MRP%&#39;
OR     process LIKE &#39;PR%&#39;
ORDER  BY process;

-- Step 3e: Monitor apply lag after enabling parallel apply
SELECT name,
       value,
       time_computed
FROM   v$dataguard_stats
WHERE  name IN (&#39;transport lag&#39;, &#39;apply lag&#39;)
ORDER  BY name;&lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;

&lt;div class=&quot;info-box&quot;&gt;
  &lt;strong&gt;How Many Parallel Apply Workers to Set?&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;
  Start with half your standby CPU count. For an 8-CPU standby, start with &lt;code&gt;PARALLEL 4&lt;/code&gt;. Monitor apply lag and CPU usage. If apply lag is still growing and CPU has headroom, increase to &lt;code&gt;PARALLEL 8&lt;/code&gt;. Do not set parallel degree higher than CPU count. If the standby runs Active Data Guard (read workload), leave at least 25% CPU for read sessions.
&lt;/div&gt;

&lt;!-- ═══════════════════════════════════ --&gt;
&lt;h2 id=&quot;section5&quot;&gt;5. Step 4: Fix Network Latency and Bandwidth&lt;/h2&gt;
&lt;p&gt;
  If transport lag is high and apply lag is low, the problem is between the primary and the standby. The redo is being generated but not arriving fast enough.
&lt;/p&gt;

&lt;div class=&quot;step-box&quot;&gt;
  &lt;div class=&quot;step-num&quot;&gt;4&lt;/div&gt;
  &lt;h3&gt;Reduce Redo Transport Bandwidth Usage&lt;/h3&gt;

&lt;div class=&quot;code-container&quot;&gt;
  &lt;div class=&quot;code-header&quot;&gt;
    &lt;span class=&quot;code-label&quot;&gt;SQL, Enable Redo Log Compression and Fix Transport Config&lt;/span&gt;
    &lt;button class=&quot;copy-btn&quot; onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;
  &lt;/div&gt;
  &lt;div class=&quot;code-block&quot;&gt;-- Step 4a: Check current transport configuration (run on PRIMARY)
SELECT dest_id,
       dest_name,
       status,
       affirm,
       compression,
       net_timeout,
       async_blocks,
       error
FROM   v$archive_dest
WHERE  target  = &#39;STANDBY&#39;
AND    status  = &#39;VALID&#39;;

-- Step 4b: Enable compression on redo transport (run on PRIMARY)
-- Reduces bandwidth by 30-70% at cost of CPU on both sides
ALTER SYSTEM SET log_archive_dest_2 =
    &#39;SERVICE=standby_db
      SYNC
      AFFIRM
      COMPRESSION=ENABLE
      NET_TIMEOUT=30
      VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)
      DB_UNIQUE_NAME=standby_db&#39;
SCOPE=BOTH SID=&#39;*&#39;;

-- Step 4c: Verify compression is now enabled
SELECT dest_id,
       compression,
       status,
       error
FROM   v$archive_dest
WHERE  target = &#39;STANDBY&#39;
AND    status = &#39;VALID&#39;;

-- Step 4d: Check current network write latency
SELECT dest_id,
       srl_network_writes,
       ROUND(srl_network_write_time /
             NULLIF(srl_network_writes,0), 3)  AS avg_network_write_ms
FROM   v$standby_log_stats
ORDER  BY dest_id;

-- OS level network test (run from primary server shell)
-- ping -c 50 standby_host_ip
-- iperf3 -c standby_host_ip -t 30 -P 4&lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;

&lt;!-- ═══════════════════════════════════ --&gt;
&lt;h2 id=&quot;section6&quot;&gt;6. Step 5: Resolve RMAN vs MRP I/O Conflict&lt;/h2&gt;
&lt;p&gt;
  A very common but often overlooked cause of apply lag spikes: RMAN backup running on the standby at the same time as peak MRP apply activity. Both compete for the same disk I/O. RMAN is aggressive by default and can starve MRP of the I/O it needs.
&lt;/p&gt;

&lt;div class=&quot;step-box&quot;&gt;
  &lt;div class=&quot;step-num&quot;&gt;5&lt;/div&gt;
  &lt;h3&gt;Fix RMAN and MRP I/O Conflict&lt;/h3&gt;

&lt;div class=&quot;code-container&quot;&gt;
  &lt;div class=&quot;code-header&quot;&gt;
    &lt;span class=&quot;code-label&quot;&gt;SQL, Detect and Fix RMAN vs MRP I/O Conflict&lt;/span&gt;
    &lt;button class=&quot;copy-btn&quot; onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;
  &lt;/div&gt;
  &lt;div class=&quot;code-block&quot;&gt;-- Step 5a: Check if RMAN is running during lag spike (run on STANDBY)
SELECT session_key,
       input_type,
       status,
       TO_CHAR(start_time, &#39;YYYY-MM-DD HH24:MI&#39;)  AS start_time,
       TO_CHAR(end_time,   &#39;YYYY-MM-DD HH24:MI&#39;)  AS end_time,
       input_bytes_display,
       output_bytes_display
FROM   v$rman_backup_job_details
WHERE  start_time &amp;gt; SYSDATE - 2
ORDER  BY start_time DESC;

-- Step 5b: Check datafile I/O latency on standby
-- High write time during backup = RMAN starving MRP
SELECT d.name,
       ROUND(f.writetim / NULLIF(f.phywrts,0), 2)  AS avg_write_ms,
       f.phyrds,
       f.phywrts
FROM   v$filestat  f
JOIN   v$datafile  d ON f.file# = d.file#
WHERE  f.phywrts   &amp;gt; 1000
ORDER  BY avg_write_ms DESC
FETCH FIRST 10 ROWS ONLY;

-- Step 5c: Throttle RMAN to protect MRP I/O (run on STANDBY)
-- Connect RMAN and set channel throttle:
-- RMAN&amp;gt; RUN {
--   ALLOCATE CHANNEL c1 DEVICE TYPE DISK
--       RATE 100M;   -- limit to 100MB/sec
--   BACKUP DATABASE;
-- }

-- Step 5d: Use DBMS_SCHEDULER to move backup to off-peak window
-- Check current backup schedule
SELECT job_name,
       enabled,
       next_run_date,
       last_start_date
FROM   dba_scheduler_jobs
WHERE  job_name LIKE &#39;%RMAN%&#39;
OR     job_name LIKE &#39;%BACKUP%&#39;
ORDER  BY next_run_date;&lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;

&lt;!-- ═══════════════════════════════════ --&gt;
&lt;h2 id=&quot;section7&quot;&gt;7. Step 6: Fix Protection Mode Mismatch&lt;/h2&gt;
&lt;p&gt;
  A silent lag builder. The protection mode shown in &lt;code&gt;v$database&lt;/code&gt; has two columns: &lt;code&gt;protection_mode&lt;/code&gt; (what you configured) and &lt;code&gt;protection_level&lt;/code&gt; (what is actually in effect). If the standby was temporarily unreachable, the primary may have silently fallen back to a lower level. This can cause steady, unexplained lag accumulation.
&lt;/p&gt;

&lt;div class=&quot;code-container&quot;&gt;
  &lt;div class=&quot;code-header&quot;&gt;
    &lt;span class=&quot;code-label&quot;&gt;SQL, Check and Restore Protection Mode&lt;/span&gt;
    &lt;button class=&quot;copy-btn&quot; onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;
  &lt;/div&gt;
  &lt;div class=&quot;code-block&quot;&gt;-- Check effective protection mode (run on PRIMARY)
-- If these two values differ, primary fell back silently
SELECT name,
       db_unique_name,
       protection_mode,    -- what you configured
       protection_level    -- what is actually active
FROM   v$database;

-- Check archive destination status for errors
SELECT dest_id,
       status,
       error,
       gap_status,
       db_unique_name
FROM   v$archive_dest_status
WHERE  target    = &#39;STANDBY&#39;
AND    status   != &#39;INACTIVE&#39;;

-- Restore protection mode via DGMGRL (after standby reconnects)
-- dgmgrl /
-- DGMGRL&amp;gt; SHOW CONFIGURATION;
-- DGMGRL&amp;gt; EDIT CONFIGURATION SET PROTECTION MODE AS MAXAVAILABILITY;
-- DGMGRL&amp;gt; SHOW CONFIGURATION;

-- Verify protection_level now matches protection_mode
SELECT protection_mode,
       protection_level
FROM   v$database;&lt;/div&gt;
&lt;/div&gt;

&lt;!-- ═══════════════════════════════════ --&gt;
&lt;h2 id=&quot;section8&quot;&gt;8. Fix for Active Data Guard (ADG) Apply Lag&lt;/h2&gt;
&lt;p&gt;
  If your standby runs Active Data Guard (open read-only while applying), read queries from reporting users compete with MRP for I/O. During heavy reporting workloads, MRP can be starved of I/O and apply lag grows even when all other configuration is correct.
&lt;/p&gt;

&lt;div class=&quot;code-container&quot;&gt;
  &lt;div class=&quot;code-header&quot;&gt;
    &lt;span class=&quot;code-label&quot;&gt;SQL, Protect MRP from ADG Read Workload Using I/O Resource Manager&lt;/span&gt;
    &lt;button class=&quot;copy-btn&quot; onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;
  &lt;/div&gt;
  &lt;div class=&quot;code-block&quot;&gt;-- Check open mode on standby
SELECT open_mode,
       database_role
FROM   v$database;

-- Monitor MRP vs read session I/O competition
SELECT s.program,
       s.status,
       COUNT(*)  AS sessions
FROM   v$session s
WHERE  s.type = &#39;USER&#39;
OR     s.program LIKE &#39;%MRP%&#39;
GROUP  BY s.program, s.status
ORDER  BY sessions DESC
FETCH FIRST 10 ROWS ONLY;

-- Apply lag while ADG read load active
SELECT name, value
FROM   v$dataguard_stats
WHERE  name IN (&#39;transport lag&#39;, &#39;apply lag&#39;);

-- Create I/O Resource Manager plan to protect MRP (run on STANDBY)
BEGIN
    DBMS_RESOURCE_MANAGER.CREATE_PENDING_AREA();
    DBMS_RESOURCE_MANAGER.CREATE_PLAN(
        plan    =&amp;gt; &#39;STANDBY_IO_PLAN&#39;,
        comment =&amp;gt; &#39;Protect MRP apply from ADG read workload&#39;
    );
    DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE(
        plan             =&amp;gt; &#39;STANDBY_IO_PLAN&#39;,
        group_or_subplan =&amp;gt; &#39;_ORACLE_BACKGROUND_GROUP_&#39;,
        comment          =&amp;gt; &#39;MRP gets priority I/O&#39;,
        mgmt_p1          =&amp;gt; 80
    );
    DBMS_RESOURCE_MANAGER.SUBMIT_PENDING_AREA();
END;
/

ALTER SYSTEM SET resource_manager_plan = &#39;STANDBY_IO_PLAN&#39;
SCOPE = BOTH SID = &#39;*&#39;;&lt;/div&gt;
&lt;/div&gt;

&lt;!-- ═══════════════════════════════════ --&gt;
&lt;h2 id=&quot;section9&quot;&gt;9. After the Fix: Verify and Monitor&lt;/h2&gt;
&lt;p&gt;
  After applying any fix, do not assume the problem is resolved. Monitor lag for at least 30 minutes under production load before declaring the incident closed.
&lt;/p&gt;

&lt;div class=&quot;code-container&quot;&gt;
  &lt;div class=&quot;code-header&quot;&gt;
    &lt;span class=&quot;code-label&quot;&gt;SQL, Post-Fix Verification Queries&lt;/span&gt;
    &lt;button class=&quot;copy-btn&quot; onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;
  &lt;/div&gt;
  &lt;div class=&quot;code-block&quot;&gt;-- Run this every 5 minutes after the fix (run on PRIMARY)
SELECT name,
       value,
       time_computed
FROM   v$dataguard_stats
WHERE  name IN (
    &#39;transport lag&#39;,
    &#39;apply lag&#39;,
    &#39;apply finish time&#39;
)
ORDER  BY name;

-- Confirm no sequence gaps (run on PRIMARY)
SELECT thread#,
       low_sequence#,
       high_sequence#
FROM   v$archive_gap;

-- Confirm MRP running in real-time mode (run on STANDBY)
-- Status must be WAIT_FOR_LOG not WAIT_FOR_GAP
SELECT process,
       status,
       sequence#,
       delay_mins
FROM   v$managed_standby
WHERE  process LIKE &#39;MRP%&#39;
OR     process LIKE &#39;PR%&#39;
ORDER  BY process;

-- Full DGMGRL health check
-- dgmgrl /
-- DGMGRL&amp;gt; SHOW CONFIGURATION;
-- DGMGRL&amp;gt; VALIDATE DATABASE VERBOSE standby_db;&lt;/div&gt;
&lt;/div&gt;

&lt;!-- ═══════════════════════════════════ --&gt;
&lt;h2 id=&quot;section10&quot;&gt;10. Prevent Lag From Returning: Configuration Checklist&lt;/h2&gt;

&lt;div class=&quot;checklist&quot;&gt;
  &lt;h3&gt;SRL and Transport Configuration&lt;/h3&gt;
  &lt;ul&gt;
    &lt;li&gt;Standby Redo Logs created with same size as online redo logs&lt;/li&gt;
    &lt;li&gt;SRL count = online redo log groups per thread + 1 per thread&lt;/li&gt;
    &lt;li&gt;MRP status shows WAIT_FOR_LOG (real-time apply active)&lt;/li&gt;
    &lt;li&gt;COMPRESSION=ENABLE set in LOG_ARCHIVE_DEST if WAN bandwidth is a concern&lt;/li&gt;
    &lt;li&gt;NET_TIMEOUT set appropriately for WAN latency (30,60 seconds)&lt;/li&gt;
  &lt;/ul&gt;
&lt;/div&gt;

&lt;div class=&quot;checklist&quot;&gt;
  &lt;h3&gt;Apply Performance&lt;/h3&gt;
  &lt;ul&gt;
    &lt;li&gt;Parallel apply enabled with degree matching standby CPU count&lt;/li&gt;
    &lt;li&gt;RMAN backup scheduled outside peak MRP apply window&lt;/li&gt;
    &lt;li&gt;Standby hardware sized equal to or greater than primary&lt;/li&gt;
    &lt;li&gt;Dedicated I/O path for standby datafiles (not shared with backup)&lt;/li&gt;
    &lt;li&gt;I/O Resource Manager plan active if ADG read workload is present&lt;/li&gt;
  &lt;/ul&gt;
&lt;/div&gt;

&lt;div class=&quot;checklist&quot;&gt;
  &lt;h3&gt;Monitoring&lt;/h3&gt;
  &lt;ul&gt;
    &lt;li&gt;Automated alert when transport lag exceeds 30 seconds&lt;/li&gt;
    &lt;li&gt;Automated alert when apply lag exceeds 2 minutes&lt;/li&gt;
    &lt;li&gt;Archive gap check runs every 15 minutes&lt;/li&gt;
    &lt;li&gt;DGMGRL VALIDATE DATABASE runs weekly&lt;/li&gt;
    &lt;li&gt;Failover tested under production load every quarter&lt;/li&gt;
  &lt;/ul&gt;
&lt;/div&gt;

&lt;!-- ═══════════════════════════════════ --&gt;
&lt;h2 id=&quot;section11&quot;&gt;FAQ&lt;/h2&gt;

&lt;div class=&quot;faq-item&quot;&gt;
  &lt;div class=&quot;faq-question&quot;&gt;Can I create SRLs without stopping the standby database?&lt;/div&gt;
  &lt;div class=&quot;faq-answer&quot;&gt;
    Yes. You can add Standby Redo Log groups to a mounted or open standby database without any downtime. The &lt;code&gt;ALTER DATABASE ADD STANDBY LOGFILE&lt;/code&gt; command runs online. MRP does not need to be stopped. After creating SRLs, MRP automatically detects them and switches to real-time apply mode. You should verify the switch by checking that MRP status changes from &lt;code&gt;WAIT_FOR_GAP&lt;/code&gt; to &lt;code&gt;WAIT_FOR_LOG&lt;/code&gt; within a few minutes.
  &lt;/div&gt;
&lt;/div&gt;

&lt;div class=&quot;faq-item&quot;&gt;
  &lt;div class=&quot;faq-question&quot;&gt;Will enabling parallel apply cause any data consistency risk?&lt;/div&gt;
  &lt;div class=&quot;faq-answer&quot;&gt;
    No. Oracle&#39;s parallel apply mechanism uses the same redo-based recovery infrastructure as single-threaded MRP. Oracle guarantees transactional consistency regardless of the parallel degree. Redo records within the same transaction are always applied in the correct order. The only consideration is that enabling parallel apply requires briefly cancelling and restarting MRP, which causes a few seconds of apply pause. During that pause, apply lag may increase slightly before recovering.
  &lt;/div&gt;
&lt;/div&gt;

&lt;div class=&quot;faq-item&quot;&gt;
  &lt;div class=&quot;faq-question&quot;&gt;How do I fix a sequence gap in Data Guard?&lt;/div&gt;
  &lt;div class=&quot;faq-answer&quot;&gt;
    A sequence gap means the standby is missing one or more archived redo log files and cannot apply continuously. First run &lt;code&gt;SELECT * FROM v$archive_gap&lt;/code&gt; on the primary to identify the missing sequence numbers. Then manually copy the corresponding archive log files from the primary to the standby using RMAN or OS copy, register them on the standby with &lt;code&gt;ALTER DATABASE REGISTER LOGFILE&lt;/code&gt;, and verify MRP resumes applying. If the gap is very old and the archive logs no longer exist on the primary, you may need to rebuild the standby using RMAN active duplication.
  &lt;/div&gt;
&lt;/div&gt;

&lt;div class=&quot;faq-item&quot;&gt;
  &lt;div class=&quot;faq-question&quot;&gt;Transport lag is zero but apply lag keeps growing slowly every day. Why?&lt;/div&gt;
  &lt;div class=&quot;faq-answer&quot;&gt;
    Slow, steady apply lag growth with zero transport lag almost always points to one of three causes: (1) parallel apply is not enabled and MRP is falling behind a high-volume OLTP workload, (2) RMAN backup is running daily and competing with MRP during peak hours, or (3) Active Data Guard read workload is starving MRP I/O. Run the MRP parallel worker check (Query 3) and the RMAN schedule check (Step 5) to identify which one is active in your environment.
  &lt;/div&gt;
&lt;/div&gt;

&lt;!-- RELATED --&gt;
&lt;div class=&quot;related-reading&quot;&gt;
  &lt;h2 id=&quot;section12&quot;&gt;Related Reading from Real Production Systems&lt;/h2&gt;
  &lt;ul&gt;
    &lt;li&gt;
      &lt;a href=&quot;#&quot;&gt;Why Data Guard Lag Happens in Production: Sync, I/O and Network Deep Dive&lt;/a&gt;
      &lt;span class=&quot;why-matters&quot;&gt;Why it matters: This guide covers the root causes behind each lag type. Reading it alongside this fix guide gives you a complete understanding of both why lag happens and exactly how to resolve it.&lt;/span&gt;
    &lt;/li&gt;
    &lt;li&gt;
      &lt;a href=&quot;#&quot;&gt;Oracle Data Guard Protection Modes: Zero Data Loss Design Strategy&lt;/a&gt;
      &lt;span class=&quot;why-matters&quot;&gt;Why it matters: Choosing the right protection mode prevents certain categories of lag from occurring in the first place. SYNC vs ASYNC selection has the biggest impact on transport lag behaviour.&lt;/span&gt;
    &lt;/li&gt;
    &lt;li&gt;
      &lt;a href=&quot;#&quot;&gt;Oracle Performance Engineering Guide: AWR, ASH and SQL Monitor in 19c and 23ai&lt;/a&gt;
      &lt;span class=&quot;why-matters&quot;&gt;Why it matters: AWR and ASH on both primary and standby are the deepest diagnostic tools for lag root causes that simple v$ queries do not reveal.&lt;/span&gt;
    &lt;/li&gt;
    &lt;li&gt;
      &lt;a href=&quot;https://chetanyadavds.blogspot.com/2026/01/n8n-oracle-telegram-alerts.html&quot; target=&quot;_blank&quot;&gt;N8N Oracle Telegram Alerts: Automating Database Monitoring&lt;/a&gt;
      &lt;span class=&quot;why-matters&quot;&gt;Why it matters: The verification queries in Step 9 should run automatically every 5 minutes. This guide shows how to build automated lag alerts that notify you before lag reaches critical levels.&lt;/span&gt;
    &lt;/li&gt;
  &lt;/ul&gt;
&lt;/div&gt;

&lt;!-- AUTHOR --&gt;
&lt;div class=&quot;about-author&quot;&gt;
  &lt;h2&gt;About the Author&lt;/h2&gt;
  &lt;div class=&quot;author-name&quot;&gt;Chetan Yadav&lt;/div&gt;
  &lt;p class=&quot;author-bio&quot;&gt;
    &lt;strong&gt;Chetan Yadav&lt;/strong&gt; is a &lt;strong&gt;Senior Oracle, PostgreSQL, MySQL, and Cloud DBA&lt;/strong&gt; with &lt;strong&gt;15+ years&lt;/strong&gt; of hands-on experience managing production databases across on-premises, hybrid, and cloud environments.
  &lt;/p&gt;
  &lt;p class=&quot;author-bio&quot;&gt;
    Chetan has resolved Data Guard lag incidents across financial and healthcare production environments, including the 8-hour apply lag from missing SRLs and the firewall-induced transport spike described in related guides. His writing focuses on precise diagnosis and exact resolution commands, not generic advice.
  &lt;/p&gt;
  &lt;p class=&quot;author-bio&quot;&gt;
    This blog focuses on &lt;strong&gt;real-world DBA problems, career growth, and practical learning&lt;/strong&gt;, not theoretical documentation or vendor marketing.
  &lt;/p&gt;
  &lt;div class=&quot;social-links&quot;&gt;
    &lt;a href=&quot;https://www.linkedin.com/in/chetanyadavvds/&quot; target=&quot;_blank&quot;&gt;LinkedIn&lt;/a&gt;
    &lt;a href=&quot;https://www.youtube.com/@levelup_careers&quot; target=&quot;_blank&quot;&gt;YouTube&lt;/a&gt;
    &lt;a href=&quot;https://www.instagram.com/levelup_careers/&quot; target=&quot;_blank&quot;&gt;Instagram&lt;/a&gt;
    &lt;a href=&quot;https://x.com/home&quot; target=&quot;_blank&quot;&gt;Twitter (X)&lt;/a&gt;
    &lt;a href=&quot;https://www.facebook.com/oracledbainfo/&quot; target=&quot;_blank&quot;&gt;Facebook&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;Newsletter&lt;/a&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;!-- POST FOOTER --&gt;
&lt;div class=&quot;post-footer&quot;&gt;
  &lt;div class=&quot;post-meta&quot;&gt;&lt;strong&gt;by Chetan Yadav&lt;/strong&gt;, March 2026&lt;/div&gt;
  &lt;div class=&quot;share-buttons&quot;&gt;
    &lt;strong&gt;Share:&lt;/strong&gt;
    &lt;a href=&quot;#&quot;&gt;Email&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;BlogThis&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;X&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;Facebook&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;Pinterest&lt;/a&gt;
  &lt;/div&gt;
  &lt;div class=&quot;tags&quot;&gt;
    &lt;strong&gt;Tags:&lt;/strong&gt;
    &lt;a href=&quot;#&quot;&gt;Data Guard Lag Fix&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;Oracle 19c Data Guard&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;Standby Redo Logs&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;Parallel Apply&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;Transport Lag&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;Apply Lag&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;MRP Process&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;Oracle DBA&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;HA DR&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;Data Guard Troubleshooting&lt;/a&gt;
  &lt;/div&gt;
&lt;/div&gt;

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

&lt;script&gt;
function copyCode(button) {
  const codeContainer = button.closest(&#39;.code-container&#39;);
  const codeBlock = codeContainer.querySelector(&#39;.code-block&#39;);
  const textArea = document.createElement(&#39;textarea&#39;);
  textArea.value = codeBlock.textContent;
  textArea.style.position = &#39;fixed&#39;;
  textArea.style.left = &#39;-9999px&#39;;
  document.body.appendChild(textArea);
  textArea.select();
  textArea.setSelectionRange(0, 99999);
  try {
    document.execCommand(&#39;copy&#39;);
    button.textContent = &#39;Copied!&#39;;
    button.classList.add(&#39;copied&#39;);
    setTimeout(() =&gt; { button.textContent = &#39;Copy&#39;; button.classList.remove(&#39;copied&#39;); }, 2000);
  } catch(err) {
    button.textContent = &#39;Failed&#39;;
    setTimeout(() =&gt; { button.textContent = &#39;Copy&#39;; }, 2000);
  }
  document.body.removeChild(textArea);
}
&lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;</content><link rel='replies' type='application/atom+xml' href='http://chetanyadavds.blogspot.com/feeds/5736334328099044748/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://chetanyadavds.blogspot.com/2026/04/how-to-fix-data-guard-lag-oracle-19c.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/436196721812840248/posts/default/5736334328099044748'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/436196721812840248/posts/default/5736334328099044748'/><link rel='alternate' type='text/html' href='http://chetanyadavds.blogspot.com/2026/04/how-to-fix-data-guard-lag-oracle-19c.html' title='How to Fix Data Guard Lag in Oracle 19c (Step-by-Step Troubleshooting Guide)'/><author><name>Chetan Yadav</name><uri>http://www.blogger.com/profile/02557500437758632199</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiE0TgifWM4l1b3sy_cK2y41bpqyfY1U25-p5IBKkSg8pJLFRvjYr_kF7W_MgsYdc21DutWF9H6qlShQDQspQLbZEQ5CSUA51Wp6Mh9l5Ygd4NPSuQyqwSMrKitCWwSLr0oHBg9TGjxAvAM7TTkkehHLL1MFWg0wSb31CxywQxIokg9pg/s1600/IMG-20251013-WA0038.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/a/AVvXsEi6Rc4grwwuoA6nsciA4Bv4fhU3sIfFuRs20edAHe4nmDy5Y52SQDzS6k4pPTYnlSkNAKlwnMHOJ_U4DeoWvMgasKoAUQPqqzUMhlt5qJRBSZLxpo0tNGl9DYoOnB__nta0Dv6SXG6K1ZMZcJ42vsiocLRgfnlxmbB9VFjxYQbkxKpTJC0MAGyBohKmwJ8=s72-c" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-436196721812840248.post-2036588907406283100</id><published>2026-04-09T14:46:00.002+05:30</published><updated>2026-04-09T14:46:25.587+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="All-Star Profile"/><category scheme="http://www.blogger.com/atom/ns#" term="Career Tips"/><category scheme="http://www.blogger.com/atom/ns#" term="DBA Career"/><category scheme="http://www.blogger.com/atom/ns#" term="Fresher Jobs"/><category scheme="http://www.blogger.com/atom/ns#" term="Job Search"/><category scheme="http://www.blogger.com/atom/ns#" term="LinkedIn Profile"/><category scheme="http://www.blogger.com/atom/ns#" term="LinkedIn Tips 2026"/><category scheme="http://www.blogger.com/atom/ns#" term="Profile Optimisation"/><category scheme="http://www.blogger.com/atom/ns#" term="Recruiter Visibility"/><title type='text'>How to Build a Powerful LinkedIn Profile That Attracts Recruiters in 2026</title><content type='html'>
&lt;html lang=&quot;en&quot;&gt;
&lt;head&gt;
&lt;meta charset=&quot;UTF-8&quot;&gt;&lt;/meta&gt;
&lt;title&gt;How to Build a Powerful LinkedIn Profile That Attracts Recruiters in 2026&lt;/title&gt;
&lt;meta content=&quot;width=device-width, initial-scale=1.0&quot; name=&quot;viewport&quot;&gt;&lt;/meta&gt;
&lt;meta content=&quot;How to build a LinkedIn profile that attracts recruiters in 2026: All-Star status, headline formula, About section, experience bullets, skills strategy and content plan for freshers.&quot; name=&quot;description&quot;&gt;&lt;/meta&gt;
&lt;link href=&quot;data:image/svg+xml,%3Csvg xmlns=&#39;http://www.w3.org/2000/svg&#39; viewBox=&#39;0 0 100 100&#39;%3E%3Cdefs%3E%3ClinearGradient id=&#39;g&#39; x1=&#39;0%25&#39; y1=&#39;0%25&#39; x2=&#39;100%25&#39; y2=&#39;100%25&#39;%3E%3Cstop offset=&#39;0%25&#39; style=&#39;stop-color:%230a66c2&#39;/%3E%3Cstop offset=&#39;100%25&#39; style=&#39;stop-color:%23004487&#39;/%3E%3C/linearGradient%3E%3C/defs%3E%3Crect width=&#39;100&#39; height=&#39;100&#39; rx=&#39;20&#39; fill=&#39;url(%23g)&#39;/%3E%3Ctext x=&#39;50&#39; y=&#39;68&#39; font-size=&#39;60&#39; text-anchor=&#39;middle&#39; fill=&#39;white&#39; font-family=&#39;Arial&#39; font-weight=&#39;bold&#39;%3Ein%3C/text%3E%3C/svg%3E&quot; rel=&quot;icon&quot; type=&quot;image/svg+xml&quot;&gt;&lt;/link&gt;
&lt;style&gt;
*{margin:0;padding:0;box-sizing:border-box}
body{background:#fff;color:#333;font-family:Arial,Helvetica,sans-serif;font-size:16px;line-height:1.7}
.post-title,.entry-title,h1.post-title,h3.post-title{display:none!important}

/* LinkedIn blue hero */
.hero-header{background:linear-gradient(135deg,#004487 0%,#0a66c2 50%,#004487 100%);color:#fff;padding:60px 40px;width:100%}
.hero-header-content{max-width:1200px;margin:0 auto;padding:0 20px}
.hero-header h1{font-size:42px;font-weight:700;color:#fff;line-height:1.3;margin-bottom:20px}
.hero-subtitle{font-size:20px;font-weight:300;color:#bfdbfe;opacity:.95;margin-bottom:30px}
.hero-meta{display:flex;gap:30px;align-items:center;flex-wrap:wrap;font-size:15px;color:#93c5fd}
.hero-meta-item{display:flex;align-items:center;gap:8px}

.hero-image-section{width:100%;margin:0;padding:0;overflow:hidden;background:#f8fafc}
.hero-image-section img{
  width:100%;
  height:auto;
  max-height:none;
  object-fit:cover;
}

.main-content-wrapper{width:100%;background:#fff}
.container{max-width:800px;margin:0 auto;padding:30px 20px;background:#fff}

.reading-time-badge{display:inline-block;background:linear-gradient(135deg,#0a66c2 0%,#004487 100%);color:#fff;padding:12px 28px;border-radius:50px;font-size:15px;font-weight:500;margin-bottom:30px;box-shadow:0 4px 12px rgba(10,102,194,.3)}
.page-tagline{color:#666;font-size:15px;font-style:italic;text-align:center;margin-bottom:35px}

.read-more-link{display:block;margin:28px 0 8px}
.read-more-link a{color:#0a66c2;font-size:15px;text-decoration:none;font-style:italic}
.read-more-link a:hover{text-decoration:underline}

.toc{background:#eff6ff;border-left:4px solid #0a66c2;padding:28px 32px;margin:35px 0;border-radius:8px;box-shadow:0 1px 3px rgba(0,0,0,.05)}
.toc-header{display:flex;align-items:center;gap:10px;font-size:24px;font-weight:bold;color:#000;margin-bottom:20px}
.toc ol{margin-left:20px;line-height:1.9;counter-reset:toc-counter;list-style:none}
.toc ol li{counter-increment:toc-counter;margin:12px 0;font-size:16px;padding-bottom:12px;border-bottom:1px solid #bfdbfe;transition:all .2s ease}
.toc ol li:last-child{border-bottom:none}
.toc ol li:hover{padding-left:8px}
.toc ol li::before{content:counter(toc-counter) &quot;. &quot;;font-weight:600;color:#0a66c2;margin-right:8px}
.toc a{color:#0a66c2;text-decoration:none}
.toc a:hover{text-decoration:underline}

h2{font-size:28px;font-weight:bold;color:#000;margin:45px 0 20px;line-height:1.3}
h3{font-size:22px;font-weight:600;color:#333;margin:30px 0 15px}
p{margin:16px 0;color:#333;line-height:1.7}
ul,ol{margin:18px 0 18px 35px;color:#333;line-height:1.7}
ul li,ol li{margin:10px 0}
strong{font-weight:bold;color:#333}
em{font-style:italic}
a{color:#0a66c2;text-decoration:none}
a:hover{text-decoration:underline}

.tag-good{display:inline-block;background:#e6f4ea;color:#137333;border:1px solid #a8d5b5;border-radius:4px;padding:1px 8px;font-size:13px;font-weight:600;margin-right:6px;vertical-align:middle}
.tag-bad{display:inline-block;background:#fce8e6;color:#c5221f;border:1px solid #f5a8a4;border-radius:4px;padding:1px 8px;font-size:13px;font-weight:600;margin-right:6px;vertical-align:middle}
.tag-rule{display:inline-block;background:#eff6ff;color:#1d4ed8;border:1px solid #93c5fd;border-radius:4px;padding:1px 8px;font-size:13px;font-weight:600;margin-right:6px;vertical-align:middle}
.tag-tip{display:inline-block;background:#f0fdf4;color:#15803d;border:1px solid #86efac;border-radius:4px;padding:1px 8px;font-size:13px;font-weight:600;margin-right:6px;vertical-align:middle}

.code-container{position:relative;margin:24px 0}
.code-header{background:#004487;color:#fff;padding:10px 16px;border-radius:8px 8px 0 0;display:flex;justify-content:space-between;align-items:center;font-size:14px}
.code-label{font-weight:500}
.copy-btn{background:#0a66c2;color:#fff;border:none;padding:6px 14px;border-radius:5px;cursor:pointer;font-size:13px;transition:background .2s;font-family:Arial,sans-serif}
.copy-btn:hover{background:#004487}
.copy-btn.copied{background:#10b981}
.code-block{background:#f8f9fa;border:1px solid #e0e0e0;border-radius:0 0 8px 8px;padding:18px 20px;margin:0;overflow-x:auto;font-family:&#39;Courier New&#39;,Courier,monospace;font-size:14px;line-height:1.7;white-space:pre;tab-size:4}
code{background:#f8f9fa;padding:2px 6px;border-radius:3px;font-family:&#39;Courier New&#39;,monospace;font-size:14px;color:#0a66c2}

.info-box{background:#fffbeb;border-left:4px solid #f59e0b;padding:18px 22px;border-radius:0 8px 8px 0;margin:25px 0}
.info-box strong{color:#92400e}
.tip-box{background:#eff6ff;border-left:4px solid #0a66c2;padding:18px 22px;border-radius:0 8px 8px 0;margin:25px 0}
.tip-box strong{color:#004487}
.incident-box{background:#fef2f2;border-left:4px solid #ef4444;padding:18px 22px;border-radius:0 8px 8px 0;margin:25px 0}
.incident-box strong{color:#991b1b}
.success-box{background:#f0fdf4;border-left:4px solid #22c55e;padding:18px 22px;border-radius:0 8px 8px 0;margin:25px 0}
.success-box strong{color:#15803d}

/* Before/After comparison */
.compare-wrap{display:grid;grid-template-columns:1fr 1fr;gap:16px;margin:20px 0}
.compare-bad{background:#fef2f2;border:2px solid #fca5a5;border-radius:8px;padding:16px}
.compare-good{background:#f0fdf4;border:2px solid #86efac;border-radius:8px;padding:16px}
.compare-label{font-weight:700;font-size:13px;margin-bottom:8px;letter-spacing:.04em}
.compare-label.bad{color:#991b1b}
.compare-label.good{color:#15803d}
.compare-text{font-size:14px;line-height:1.6;color:#333}
@media(max-width:600px){.compare-wrap{grid-template-columns:1fr}}

table{width:100%;border-collapse:collapse;margin:25px 0;background:#fff;border:1px solid #e0e0e0}
thead{background:#004487}
th{padding:12px;text-align:left;font-weight:bold;color:#fff;border-bottom:2px solid #e0e0e0;font-size:15px}
td{padding:12px;border-bottom:1px solid #e0e0e0;color:#333;font-size:15px}
tr:last-child td{border-bottom:none}
tbody tr:hover{background:#eff6ff}

.checklist{background:#eff6ff;border:1px solid #bfdbfe;border-radius:8px;padding:24px 28px;margin:18px 0}
.checklist h3{margin-top:0;color:#1e293b;font-size:18px}
.checklist ul{list-style:none;margin-left:0}
.checklist ul li{padding:6px 0 6px 28px;position:relative}
.checklist ul li::before{content:&quot;&quot;;position:absolute;left:4px;top:13px;width:10px;height:10px;background:#0a66c2;border-radius:50%}

.faq-item{margin:25px 0;border-bottom:1px solid #e5e7eb;padding-bottom:25px}
.faq-item:last-child{border-bottom:none}
.faq-question{font-weight:600;color:#000;font-size:17px;margin-bottom:10px}
.faq-answer{color:#333;line-height:1.7}

.related-reading{background:#f8f9fa;border:1px solid #e0e0e0;border-radius:8px;padding:30px;margin:40px 0}
.related-reading h2{margin-top:0}
.related-reading ul{margin-left:25px}
.related-reading li{margin:18px 0;line-height:1.7}
.related-reading .why-matters{color:#666;font-size:15px;margin-top:5px;display:block}

.about-author{background:#fffbf0;border:1px solid #e0e0e0;border-radius:8px;padding:30px;margin:40px 0}
.about-author h2{margin-top:0;font-size:28px}
.author-name{font-size:20px;font-weight:bold;color:#000;margin-bottom:10px}
.author-bio{color:#333;line-height:1.7;margin-bottom:15px}
.social-links{margin-top:20px}
.social-links a{display:inline-block;margin-right:20px;color:#0a66c2;text-decoration:none;font-size:16px}
.social-links a:hover{text-decoration:underline}

.post-footer{border-top:1px solid #e0e0e0;padding-top:25px;margin-top:40px;color:#666;font-size:15px}
.post-meta{margin-bottom:15px}
.share-buttons{margin:20px 0}
.share-buttons a{display:inline-block;margin-right:15px;color:#0a66c2;font-size:14px}
.tags{margin-top:20px}
.tags strong{color:#666;font-weight:normal}
.tags a{color:#0a66c2;margin-right:10px;font-size:14px}

@media(max-width:768px){
  .hero-header{padding:40px 24px}
  .hero-header h1{font-size:28px}
  .hero-subtitle{font-size:16px}
  .hero-meta{gap:20px}
  h2{font-size:24px}
  h3{font-size:20px}
  table{font-size:13px}
  th,td{padding:9px}
  .code-block{font-size:12px}
}
&lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;

&lt;div class=&quot;hero-header&quot;&gt;
  &lt;div class=&quot;hero-header-content&quot;&gt;
    &lt;h1&gt;How to Build a Powerful LinkedIn Profile That Attracts Recruiters in 2026&lt;/h1&gt;
    &lt;div class=&quot;hero-subtitle&quot;&gt;Weak Profiles Get Ignored. Here Is the Exact Framework to Get Found.&lt;/div&gt;
    &lt;div class=&quot;hero-meta&quot;&gt;
      &lt;div class=&quot;hero-meta-item&quot;&gt;9 April 2026&lt;/div&gt;
      &lt;div class=&quot;hero-meta-item&quot;&gt; Chetan Yadav, Senior Oracle &amp;amp; Cloud DBA&lt;/div&gt;
      &lt;div class=&quot;hero-meta-item&quot;&gt;⏱️ 12 - 13 min read&lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;div class=&quot;main-content-wrapper&quot;&gt;
&lt;div class=&quot;container&quot;&gt;

&lt;div class=&quot;reading-time-badge&quot;&gt;⏱️ Estimated Reading Time: 12 - 13 minutes&lt;/div&gt;
&lt;div class=&quot;page-tagline&quot;&gt;All-Star Status, Headline Formula, About Section, Experience Bullets, Skills Strategy, Content Plan&lt;/div&gt;

&lt;div class=&quot;hero-image-section&quot;&gt;
  &lt;img alt=&quot;LinkedIn Profile Optimisation Framework 2026 showing 5 core sections All-Star checklist recruiter search algorithm content strategy and mistake table&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEinOMxKTE8CiIKYOBBi1tlrWzzAkJyEzQtqbVRJSm826ETi0W--mzuQrjQI6JtvM8461Qqto3ie0g24-ckhx_D4Df0K_QxJ-SEADDlkSdQXtuOhPNMCb5nC0sY7FWM49DV3N_oaaT0Buj3GVzAo8DJertpZ4hkcYGLI5nWNkYFzzoG6gbovM-gsEHua4TI&quot; /&gt;
&lt;/div&gt;

&lt;div class=&quot;info-box&quot; style=&quot;margin-top: 28px;&quot;&gt;
  &lt;strong&gt; Who This Guide Is For&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;
  &lt;strong&gt;Final year students&lt;/strong&gt; building their LinkedIn for the first time, &lt;strong&gt;freshers&lt;/strong&gt; who have a profile but get zero recruiter messages, &lt;strong&gt;working professionals&lt;/strong&gt; who set up LinkedIn years ago and never touched it since, and anyone who has been told &quot;just be on LinkedIn&quot; without being told what that actually means.
&lt;/div&gt;

&lt;p&gt;
  I know freshers who applied to 80 jobs on Naukri and got 2 interviews. I know other freshers who optimised their LinkedIn profile over one weekend and received 6 recruiter messages within 3 weeks without applying to a single job. The difference was not their skills, their college, or their GPA. The difference was visibility.
&lt;/p&gt;
&lt;p&gt;
  LinkedIn is not a digital version of your resume. It is a search engine for talent. Recruiters run Boolean searches with specific keywords, filter by location, experience level, and skills, and contact candidates who match. If your profile does not contain the right words in the right places, you are invisible, no matter how qualified you are.
&lt;/p&gt;
&lt;p&gt;
  This guide covers the exact framework to build a LinkedIn profile that attracts recruiters in 2026: every section, every formula, every mistake to avoid, and a content strategy to keep your visibility growing week after week.
&lt;/p&gt;

&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;

&lt;div class=&quot;toc&quot;&gt;
  &lt;div class=&quot;toc-header&quot;&gt;&lt;span&gt;&lt;/span&gt; Table of Contents&lt;/div&gt;
  &lt;ol&gt;
    &lt;li&gt;&lt;a href=&quot;#section1&quot;&gt;How LinkedIn Recruiter Search Actually Works&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#section2&quot;&gt;All-Star Profile Status: Why It Matters&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#section3&quot;&gt;Section 1: Profile Photo and Banner&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#section4&quot;&gt;Section 2: Headline (The Most Important Line)&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#section5&quot;&gt;Section 3: About Section (Your Personal Story)&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#section6&quot;&gt;Section 4: Experience (Show Impact, Not Duties)&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#section7&quot;&gt;Section 5: Skills and Endorsements&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#section8&quot;&gt;Education, Certifications and Projects&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#section9&quot;&gt;LinkedIn Content Strategy: How to Stay Visible&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#section10&quot;&gt;The 10 Mistakes That Keep You Invisible&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#section11&quot;&gt;LinkedIn Profile for Freshers with No Experience&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#section12&quot;&gt;Before You Hit Publish: Final Checklist&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#section13&quot;&gt;FAQ&lt;/a&gt;&lt;/li&gt;
  &lt;/ol&gt;
&lt;/div&gt;

&lt;!-- ══════════════════════════════ --&gt;
&lt;h2 id=&quot;section1&quot;&gt;1. How LinkedIn Recruiter Search Actually Works&lt;/h2&gt;
&lt;p&gt;
  Recruiters do not browse LinkedIn profiles randomly. They use LinkedIn Recruiter, a paid search tool, to run structured searches. They type keywords, set filters, and LinkedIn returns a ranked list of matching profiles. Your profile either appears in that list or it does not.
&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;&lt;tr&gt;&lt;th&gt;Recruiter Filter&lt;/th&gt;&lt;th&gt;Where It Reads on Your Profile&lt;/th&gt;&lt;th&gt;Your Action&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;&lt;td&gt;Job title / Keywords&lt;/td&gt;&lt;td&gt;Headline, About section, Experience titles&lt;/td&gt;&lt;td&gt;Use exact industry keywords in all three places&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;Skills&lt;/td&gt;&lt;td&gt;Skills section (top 3 pinned skills ranked highest)&lt;/td&gt;&lt;td&gt;Add 50 skills, pin your most relevant 3&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;Location&lt;/td&gt;&lt;td&gt;Your profile location field&lt;/td&gt;&lt;td&gt;Set to your target city, not your hometown if different&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;Years of experience&lt;/td&gt;&lt;td&gt;Calculated from your Experience section dates&lt;/td&gt;&lt;td&gt;Ensure all experience entries have accurate dates&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;Education&lt;/td&gt;&lt;td&gt;Education section degree and institution&lt;/td&gt;&lt;td&gt;Add full degree name, not just abbreviation&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;Open to Work&lt;/td&gt;&lt;td&gt;Open to Work setting (public or private)&lt;/td&gt;&lt;td&gt;Enable it, even privately (only visible to recruiters)&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;Profile completeness&lt;/td&gt;&lt;td&gt;All-Star status indicator&lt;/td&gt;&lt;td&gt;Complete every section to reach All-Star level&lt;/td&gt;&lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;div class=&quot;tip-box&quot;&gt;
  &lt;strong&gt;The Algorithm Reality:&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;
  LinkedIn&#39;s algorithm ranks profiles in search results partly based on your Social Selling Index (SSI) score, your connection proximity to the searcher, and your profile completeness. A complete All-Star profile with regular activity ranks significantly higher than an incomplete profile with the same skills. You can check your own SSI score at &lt;strong&gt;linkedin.com/sales/ssi&lt;/strong&gt;. Target 70+ out of 100.
&lt;/div&gt;

&lt;!-- ══════════════════════════════ --&gt;
&lt;h2 id=&quot;section2&quot;&gt;2. All-Star Profile Status: Why It Matters&lt;/h2&gt;
&lt;p&gt;
  LinkedIn rates your profile strength on a scale: Beginner, Intermediate, Advanced, Expert, and All-Star. All-Star is not just a label. LinkedIn&#39;s own data shows All-Star profiles receive &lt;strong&gt;40 times more recruiter views&lt;/strong&gt; than incomplete profiles. Reaching All-Star is the single highest-impact action you can take in the first 30 minutes of optimising your profile.
&lt;/p&gt;

&lt;h3&gt;The 7 Requirements for All-Star Status&lt;/h3&gt;
&lt;ol&gt;
  &lt;li&gt;&lt;strong&gt;Profile photo&lt;/strong&gt; uploaded (any photo clears this requirement)&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Custom headline&lt;/strong&gt; written (not just your job title)&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;About section&lt;/strong&gt; written (minimum 50 words)&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;At least one experience entry&lt;/strong&gt; added with description&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;At least 5 skills&lt;/strong&gt; added to your Skills section&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Education entry&lt;/strong&gt; added (degree, institution, year)&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;50 or more connections&lt;/strong&gt; on your profile&lt;/li&gt;
&lt;/ol&gt;

&lt;div class=&quot;success-box&quot;&gt;
  &lt;strong&gt;Fresher with zero work experience:&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;
  You can still reach All-Star status. Add your college as an experience entry with a description of what you studied and built. Add your final year project as an experience entry. Add 5+ skills (SQL, Python, Communication, Problem Solving, any tools you used). Connect with 50 classmates, professors, and family members. The system does not check the quality of your content for All-Star, only that the sections are filled.
&lt;/div&gt;

&lt;!-- ══════════════════════════════ --&gt;
&lt;h2 id=&quot;section3&quot;&gt;3. Section 1: Profile Photo and Banner&lt;/h2&gt;
&lt;p&gt;
  Your profile photo is the first thing every recruiter, hiring manager, and connection sees. It creates an impression before they read a single word. A professional photo increases profile views by up to 14 times compared to no photo.
&lt;/p&gt;

&lt;h3&gt;Profile Photo Rules&lt;/h3&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;span class=&quot;tag-rule&quot;&gt;Rule&lt;/span&gt; Your face should fill roughly 60% of the frame&lt;/li&gt;
  &lt;li&gt;&lt;span class=&quot;tag-rule&quot;&gt;Rule&lt;/span&gt; Plain or blurred background (avoid busy backgrounds)&lt;/li&gt;
  &lt;li&gt;&lt;span class=&quot;tag-rule&quot;&gt;Rule&lt;/span&gt; Look at the camera, natural smile&lt;/li&gt;
  &lt;li&gt;&lt;span class=&quot;tag-rule&quot;&gt;Rule&lt;/span&gt; Professional or smart-casual clothing appropriate for your industry&lt;/li&gt;
  &lt;li&gt;&lt;span class=&quot;tag-bad&quot;&gt;Avoid&lt;/span&gt; Group photos where you are cropped out of&lt;/li&gt;
  &lt;li&gt;&lt;span class=&quot;tag-bad&quot;&gt;Avoid&lt;/span&gt; Sunglasses, filters, or heavily edited images&lt;/li&gt;
  &lt;li&gt;&lt;span class=&quot;tag-bad&quot;&gt;Avoid&lt;/span&gt; Photos from weddings, trips, or parties&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;Banner Image&lt;/h3&gt;
&lt;p&gt;
  The banner is the large image behind your profile photo. Most people leave it as the default grey. A custom banner makes your profile look intentional and professional. Use Canva (free) to create a 1584 x 396 px banner. Include your name, title, and 2,3 key skills or a simple professional background relevant to your field.
&lt;/p&gt;

&lt;div class=&quot;tip-box&quot;&gt;
  &lt;strong&gt;Free Photo Without a Professional Shoot:&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;
  You do not need a professional photographer. Use your phone, natural light from a window, ask a friend to take 20 shots, and pick the best one. Wear a plain solid-colour top, stand in front of a plain wall, and shoot in portrait orientation. Free tools like &lt;strong&gt;remove.bg&lt;/strong&gt; can clean up the background. This takes 15 minutes and costs nothing.
&lt;/div&gt;

&lt;!-- ══════════════════════════════ --&gt;
&lt;h2 id=&quot;section4&quot;&gt;4. Section 2: Headline (The Most Important Line)&lt;/h2&gt;
&lt;p&gt;
  Your headline appears in every search result, every post comment, every connection request, and every InMail preview. It is the most-read line on your entire profile. Yet most people waste it by writing only their job title.
&lt;/p&gt;

&lt;h3&gt;Headline Formula&lt;/h3&gt;
&lt;div class=&quot;code-container&quot;&gt;
  &lt;div class=&quot;code-header&quot;&gt;
    &lt;span class=&quot;code-label&quot;&gt;Template, LinkedIn Headline Formula and Examples&lt;/span&gt;
    &lt;button class=&quot;copy-btn&quot; onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;
  &lt;/div&gt;
  &lt;div class=&quot;code-block&quot;&gt;Formula:  [Role / Domain] | [Key Skill 1] | [Key Skill 2] | [Value or Result]

Examples by profile type:

Fresher (Tech):
&quot;Aspiring Oracle DBA | SQL, PL/SQL, Python | Final Year CSE | OCP Certified&quot;

Fresher (Any):
&quot;Final Year Computer Science Student | Java, Python, MySQL | Seeking SDE Role&quot;

Mid-level Professional:
&quot;Senior Oracle DBA | RAC, Data Guard, OCI | 8 Years OLTP Production Experience&quot;

Career Changer:
&quot;Java Developer transitioning to Cloud | AWS, OCI, Python | 5 Years Dev Experience&quot;

Freelancer:
&quot;Freelance Database Consultant | Oracle 19c, PostgreSQL | Remote | Open to Projects&quot;

Rules:
- Max 220 characters (LinkedIn limit)
- Use pipe ( | ) to separate sections for readability
- Include your top searchable keywords
- Never write: Seeking opportunities / Fresher / Looking for job
- Always write: what you DO, not what you WANT&lt;/div&gt;
&lt;/div&gt;

&lt;div class=&quot;compare-wrap&quot;&gt;
  &lt;div class=&quot;compare-bad&quot;&gt;
    &lt;div class=&quot;compare-label bad&quot;&gt;WEAK HEADLINE (Invisible)&lt;/div&gt;
    &lt;div class=&quot;compare-text&quot;&gt;
      &quot;Student at Mumbai University&quot;&lt;br /&gt;&lt;br /&gt;
      &quot;Fresher looking for job opportunities in IT sector&quot;&lt;br /&gt;&lt;br /&gt;
      &quot;Software Engineer&quot;
    &lt;/div&gt;
  &lt;/div&gt;
  &lt;div class=&quot;compare-good&quot;&gt;
    &lt;div class=&quot;compare-label good&quot;&gt;STRONG HEADLINE (Gets Found)&lt;/div&gt;
    &lt;div class=&quot;compare-text&quot;&gt;
      &quot;Final Year CSE Student | Oracle, SQL, Python | Building Database Skills | OCP Aspirant&quot;&lt;br /&gt;&lt;br /&gt;
      &quot;Aspiring Software Developer | Java, Spring Boot, MySQL | 2 Projects Shipped | Open to Work&quot;&lt;br /&gt;&lt;br /&gt;
      &quot;Software Engineer | Java, AWS, Microservices | 3 Years FinTech | Building Cloud Skills&quot;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;!-- ══════════════════════════════ --&gt;
&lt;h2 id=&quot;section5&quot;&gt;5. Section 3: About Section (Your Personal Story)&lt;/h2&gt;
&lt;p&gt;
  The About section is where you tell your story. It is the only place on LinkedIn where you can write in your own voice, explain your journey, show your personality, and give someone a reason to reach out to you.
&lt;/p&gt;

&lt;div class=&quot;code-container&quot;&gt;
  &lt;div class=&quot;code-header&quot;&gt;
    &lt;span class=&quot;code-label&quot;&gt;Template, LinkedIn About Section (5-Paragraph Framework)&lt;/span&gt;
    &lt;button class=&quot;copy-btn&quot; onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;
  &lt;/div&gt;
  &lt;div class=&quot;code-block&quot;&gt;Paragraph 1 - Who You Are (2-3 lines):
&quot;I am a final year Computer Science student at Mumbai University
with a deep interest in database systems, cloud infrastructure, and
backend development. I have been building with Oracle and Python for
the last 2 years.&quot;

Paragraph 2 - What You Do / Your Skills (2-3 lines):
&quot;My technical focus is Oracle Database administration, SQL optimisation,
and PL/SQL development. I am also exploring cloud platforms including
OCI and AWS, working toward my OCP certification.&quot;

Paragraph 3 - Your Biggest Achievement or Project (2-3 lines):
&quot;My final year project was an automated Oracle DBA monitoring dashboard
built with Python and Telegram Bot API that reduced manual health check
time from 45 minutes to under 3 minutes per shift.&quot;

Paragraph 4 - What You Are Building Toward (1-2 lines):
&quot;I am looking to join a team where I can contribute as a junior DBA or
backend developer while continuing to grow in cloud database architecture.&quot;

Paragraph 5 - Call to Action (1 line):
&quot;If you work in databases, cloud, or backend engineering, I would love
to connect. Feel free to message me directly.&quot;&lt;/div&gt;
&lt;/div&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;span class=&quot;tag-good&quot;&gt;Do&lt;/span&gt; Write in first person: &quot;I am&quot; not &quot;He is&quot; or &quot;Chetan is&quot;&lt;/li&gt;
  &lt;li&gt;&lt;span class=&quot;tag-good&quot;&gt;Do&lt;/span&gt; End with a clear call to action (what you want people to do)&lt;/li&gt;
  &lt;li&gt;&lt;span class=&quot;tag-good&quot;&gt;Do&lt;/span&gt; Include your top 5,8 keywords naturally within the text&lt;/li&gt;
  &lt;li&gt;&lt;span class=&quot;tag-bad&quot;&gt;Avoid&lt;/span&gt; Copying your resume summary word for word&lt;/li&gt;
  &lt;li&gt;&lt;span class=&quot;tag-bad&quot;&gt;Avoid&lt;/span&gt; Starting with &quot;I am a hardworking professional seeking...&quot;&lt;/li&gt;
  &lt;li&gt;&lt;span class=&quot;tag-bad&quot;&gt;Avoid&lt;/span&gt; Leaving it blank (this alone disqualifies you from All-Star)&lt;/li&gt;
&lt;/ul&gt;

&lt;!-- ══════════════════════════════ --&gt;
&lt;h2 id=&quot;section6&quot;&gt;6. Section 4: Experience (Show Impact, Not Duties)&lt;/h2&gt;
&lt;p&gt;
  The same rule that applies to your resume applies here with one difference: LinkedIn experience entries can be longer, can include media (project links, screenshots, documents), and are indexed by LinkedIn&#39;s search algorithm for keywords.
&lt;/p&gt;

&lt;div class=&quot;code-container&quot;&gt;
  &lt;div class=&quot;code-header&quot;&gt;
    &lt;span class=&quot;code-label&quot;&gt;Template, LinkedIn Experience Entry with Impact Bullets&lt;/span&gt;
    &lt;button class=&quot;copy-btn&quot; onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;
  &lt;/div&gt;
  &lt;div class=&quot;code-block&quot;&gt;SENIOR ORACLE DBA
TechCorp Financial Services, Mumbai
Mar 2021 to Present, Full-time

Managed 4-node Oracle 19c RAC cluster on OCI serving 2,400 TPS OLTP
workload for core banking transaction processing system.

Key Achievements:
, Reduced planned downtime from 8 hours to under 30 seconds per quarter
  by implementing Data Guard Maximum Availability with Fast-Start Failover.

, Tuned 47 high-impact SQL queries through AWR analysis, reducing
  peak-hour CPU utilisation from 94% to 61%.

, Automated RMAN backup validation using PL/SQL and Shell scripts,
  cutting backup verification time from 4 hours to 22 minutes.

, Migrated 8.2 TB Oracle database to OCI Autonomous Database with
  zero data loss using GoldenGate replication.

Technologies: Oracle 19c, RAC, Data Guard, RMAN, GoldenGate, OCI, PL/SQL, AWR&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;
  &lt;span class=&quot;tag-tip&quot;&gt;Tip&lt;/span&gt; Add the &lt;strong&gt;Technologies line&lt;/strong&gt; at the bottom of each experience entry. This is read by LinkedIn&#39;s search algorithm and dramatically increases keyword matching in recruiter searches.
&lt;/p&gt;

&lt;!-- ══════════════════════════════ --&gt;
&lt;h2 id=&quot;section7&quot;&gt;7. Section 5: Skills and Endorsements&lt;/h2&gt;
&lt;p&gt;
  LinkedIn allows up to 50 skills. Most people add 10 and leave it. Using all 50 dramatically increases the number of recruiter searches your profile appears in.
&lt;/p&gt;

&lt;h3&gt;Skills Strategy&lt;/h3&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;span class=&quot;tag-rule&quot;&gt;Rule&lt;/span&gt; Add all 50 skills. Think: technical tools, programming languages, platforms, soft skills, domain knowledge&lt;/li&gt;
  &lt;li&gt;&lt;span class=&quot;tag-rule&quot;&gt;Rule&lt;/span&gt; Pin your top 3 skills (the ones most relevant to your target role)&lt;/li&gt;
  &lt;li&gt;&lt;span class=&quot;tag-rule&quot;&gt;Rule&lt;/span&gt; Include both the acronym and the full term where relevant&lt;/li&gt;
  &lt;li&gt;&lt;span class=&quot;tag-tip&quot;&gt;Tip&lt;/span&gt; Look at job descriptions for your target role and add every skill they mention that you actually have&lt;/li&gt;
  &lt;li&gt;&lt;span class=&quot;tag-tip&quot;&gt;Tip&lt;/span&gt; Ask 5 colleagues, classmates, or professors to endorse your top 3 skills. Endorsements increase your credibility in search results&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;code-container&quot;&gt;
  &lt;div class=&quot;code-header&quot;&gt;
    &lt;span class=&quot;code-label&quot;&gt;Template, 50 Skills List for an Oracle DBA / Database Engineer Profile&lt;/span&gt;
    &lt;button class=&quot;copy-btn&quot; onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;
  &lt;/div&gt;
  &lt;div class=&quot;code-block&quot;&gt;Technical Skills (add these to your profile):
Oracle Database, Oracle 19c, Oracle 23ai, SQL, PL/SQL, Oracle RAC,
Oracle Data Guard, Oracle GoldenGate, RMAN, ASM, Oracle Exadata,
Oracle Autonomous Database, OCI (Oracle Cloud Infrastructure),
MySQL, PostgreSQL, MongoDB, NoSQL, AWS RDS, Azure SQL Database,
Performance Tuning, AWR, ASH, SQL Monitor, Execution Plans,
Index Optimization, Query Optimization, Database Migration,
High Availability, Disaster Recovery, Backup and Recovery,
Shell Scripting, Bash, Python, Git, Jenkins, Terraform, Ansible,
Oracle Linux, RHEL, Linux Administration, Database Security,
Data Modeling, ETL, Data Warehousing, Database Architecture,
Cloud Migration, DevOps, CI/CD, JIRA, Confluence, Agile&lt;/div&gt;
&lt;/div&gt;

&lt;!-- ══════════════════════════════ --&gt;
&lt;h2 id=&quot;section8&quot;&gt;8. Education, Certifications and Projects&lt;/h2&gt;
&lt;p&gt;
  For freshers, the Education and Projects sections are your most important proof of capability. Do not treat them as an afterthought.
&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Add your degree with the &lt;strong&gt;full degree name&lt;/strong&gt; (Bachelor of Technology in Computer Science Engineering, not just B.Tech)&lt;/li&gt;
  &lt;li&gt;Add your &lt;strong&gt;final year project&lt;/strong&gt; as a separate experience entry with a description, tech stack, and outcomes&lt;/li&gt;
  &lt;li&gt;Add &lt;strong&gt;certifications&lt;/strong&gt; as individual entries in the Licenses and Certifications section with the issuing organisation and credential ID&lt;/li&gt;
  &lt;li&gt;Add &lt;strong&gt;relevant courses&lt;/strong&gt; (Oracle Academy, Coursera, NPTEL) in the Courses section&lt;/li&gt;
  &lt;li&gt;If you have a &lt;strong&gt;GitHub profile&lt;/strong&gt;, add the link in the Featured section&lt;/li&gt;
&lt;/ul&gt;

&lt;!-- ══════════════════════════════ --&gt;
&lt;h2 id=&quot;section9&quot;&gt;9. LinkedIn Content Strategy: How to Stay Visible&lt;/h2&gt;
&lt;p&gt;
  A complete profile gets you into search results. Consistent content activity keeps you at the top of those results and builds inbound visibility over time. LinkedIn&#39;s algorithm heavily rewards regular posting from accounts that generate engagement.
&lt;/p&gt;

&lt;h3&gt;What to Post (Even as a Fresher)&lt;/h3&gt;
&lt;table&gt;
  &lt;thead&gt;&lt;tr&gt;&lt;th&gt;Content Type&lt;/th&gt;&lt;th&gt;Example&lt;/th&gt;&lt;th&gt;Frequency&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;&lt;td&gt;&lt;strong&gt;Learning wins&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&quot;Passed my Oracle OCP exam today after 3 months of preparation. Here is what actually helped.&quot;&lt;/td&gt;&lt;td&gt;Every achievement&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;&lt;strong&gt;Technical tips&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&quot;One AWR query that tells you more than 10 minutes of investigation. Here it is.&quot;&lt;/td&gt;&lt;td&gt;1,2 per week&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;&lt;strong&gt;Project showcase&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&quot;Built an automated database monitoring dashboard this weekend. Here is what it does.&quot;&lt;/td&gt;&lt;td&gt;Every project&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;&lt;strong&gt;Lessons learned&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&quot;I made this mistake in my interview last week. Here is what I should have said.&quot;&lt;/td&gt;&lt;td&gt;Monthly&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;&lt;strong&gt;Career milestones&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&quot;Today is my first day as a junior DBA. Here is what I am looking forward to learning.&quot;&lt;/td&gt;&lt;td&gt;Every milestone&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;&lt;strong&gt;Industry observations&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;&quot;Every DBA job posting I have seen this week asks for OCI experience. Here is my learning plan.&quot;&lt;/td&gt;&lt;td&gt;Weekly&lt;/td&gt;&lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;div class=&quot;tip-box&quot;&gt;
  &lt;strong&gt;The 5-Comment Rule:&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;
  Before posting your own content, spend 10 minutes commenting genuinely on 5 posts from people in your target industry. Thoughtful comments (not just &quot;Great post!&quot;) increase your profile visibility to the post author&#39;s network and signal to LinkedIn&#39;s algorithm that you are an active participant. Consistent commenting builds relationships faster than any other LinkedIn activity.
&lt;/div&gt;

&lt;!-- ══════════════════════════════ --&gt;
&lt;h2 id=&quot;section10&quot;&gt;10. The 10 Mistakes That Keep You Invisible&lt;/h2&gt;

&lt;table&gt;
  &lt;thead&gt;&lt;tr&gt;&lt;th&gt;Mistake&lt;/th&gt;&lt;th&gt;Why It Hurts&lt;/th&gt;&lt;th&gt;Fix&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;&lt;td&gt;No profile photo&lt;/td&gt;&lt;td&gt;14x fewer profile views than with a photo&lt;/td&gt;&lt;td&gt;Upload any professional photo today&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;Default grey banner&lt;/td&gt;&lt;td&gt;Looks abandoned and inactive&lt;/td&gt;&lt;td&gt;Create a custom banner on Canva in 15 minutes&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;Job title only in headline&lt;/td&gt;&lt;td&gt;Not searchable, no differentiation&lt;/td&gt;&lt;td&gt;Use Role + Skills + Keywords formula&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;Empty About section&lt;/td&gt;&lt;td&gt;No story, no reason to connect&lt;/td&gt;&lt;td&gt;Write 5-paragraph About using the template above&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;Fewer than 10 skills&lt;/td&gt;&lt;td&gt;Missing from many recruiter skill filters&lt;/td&gt;&lt;td&gt;Add all 50 skills immediately&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;Duties not achievements&lt;/td&gt;&lt;td&gt;Indistinguishable from every other candidate&lt;/td&gt;&lt;td&gt;Rewrite every bullet with Action + Result + Number&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;Under 50 connections&lt;/td&gt;&lt;td&gt;Profile ranked lower in search results&lt;/td&gt;&lt;td&gt;Connect with classmates, professors, colleagues&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;Open to Work disabled&lt;/td&gt;&lt;td&gt;Recruiters cannot prioritise your profile&lt;/td&gt;&lt;td&gt;Enable Open to Work (privately if needed)&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;No activity for months&lt;/td&gt;&lt;td&gt;Algorithm deprioritises inactive profiles&lt;/td&gt;&lt;td&gt;Post or comment at least 3 times per week&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;No custom URL&lt;/td&gt;&lt;td&gt;Generic URL looks unprofessional in resume&lt;/td&gt;&lt;td&gt;Set custom URL: linkedin.com/in/yourname&lt;/td&gt;&lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;!-- ══════════════════════════════ --&gt;
&lt;h2 id=&quot;section11&quot;&gt;11. LinkedIn Profile for Freshers with No Experience&lt;/h2&gt;
&lt;p&gt;
  Not having work experience does not mean having nothing to show. Recruiters hiring freshers are not looking for work history. They are looking for proof that you can learn, build, and communicate. Here is how to demonstrate that.
&lt;/p&gt;

&lt;div class=&quot;checklist&quot;&gt;
  &lt;h3&gt;What Freshers Can Add Instead of Work Experience&lt;/h3&gt;
  &lt;ul&gt;
    &lt;li&gt;Final year project as an Experience entry (company = your university, title = Project Lead)&lt;/li&gt;
    &lt;li&gt;Internships (even 1 month, even unpaid, add all of them)&lt;/li&gt;
    &lt;li&gt;Freelance or volunteer work (any technical work counts)&lt;/li&gt;
    &lt;li&gt;Open source contributions (link to GitHub)&lt;/li&gt;
    &lt;li&gt;Hackathon participation and results&lt;/li&gt;
    &lt;li&gt;Personal projects (apps, scripts, dashboards, anything you built)&lt;/li&gt;
    &lt;li&gt;Course projects from Coursera, NPTEL, Oracle Academy&lt;/li&gt;
    &lt;li&gt;Technical blog posts or articles (add to Featured section)&lt;/li&gt;
    &lt;li&gt;Leadership roles in college clubs or technical committees&lt;/li&gt;
  &lt;/ul&gt;
&lt;/div&gt;

&lt;div class=&quot;success-box&quot;&gt;
  &lt;strong&gt;Real Example, Fresher Who Got 6 Recruiter Messages in 3 Weeks:&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;
  A final year student in Pune had zero work experience. Over one weekend he: updated his photo and banner, rewrote his headline with keywords, wrote a 4-paragraph About section, added his final year project as an experience entry with 4 impact bullets, added 40+ skills, connected with 80 classmates and professors, and posted one article about what he learned building his project.&lt;br /&gt;&lt;br /&gt;
  Within 3 weeks: 6 recruiter messages for junior developer and DBA trainee roles. Nothing changed about his actual skills. Everything changed about his visibility.
&lt;/div&gt;

&lt;!-- ══════════════════════════════ --&gt;
&lt;h2 id=&quot;section12&quot;&gt;12. Before You Hit Publish: Final Checklist&lt;/h2&gt;

&lt;div class=&quot;checklist&quot;&gt;
  &lt;h3&gt;Profile Completeness&lt;/h3&gt;
  &lt;ul&gt;
    &lt;li&gt;Professional profile photo uploaded&lt;/li&gt;
    &lt;li&gt;Custom banner image (not the default grey)&lt;/li&gt;
    &lt;li&gt;Headline uses Role + Skills + Keywords formula&lt;/li&gt;
    &lt;li&gt;About section written (minimum 150 words, ends with CTA)&lt;/li&gt;
    &lt;li&gt;All experience entries have impact bullets with numbers&lt;/li&gt;
    &lt;li&gt;Education section complete with full degree name&lt;/li&gt;
    &lt;li&gt;At least 40 skills added, top 3 pinned&lt;/li&gt;
    &lt;li&gt;All-Star profile status achieved&lt;/li&gt;
  &lt;/ul&gt;
&lt;/div&gt;

&lt;div class=&quot;checklist&quot;&gt;
  &lt;h3&gt;Visibility Settings&lt;/h3&gt;
  &lt;ul&gt;
    &lt;li&gt;Open to Work enabled (private or public)&lt;/li&gt;
    &lt;li&gt;Custom LinkedIn URL set (linkedin.com/in/yourname)&lt;/li&gt;
    &lt;li&gt;Profile visibility set to public (not just connections)&lt;/li&gt;
    &lt;li&gt;Location set to target city or &quot;Open to Remote&quot;&lt;/li&gt;
    &lt;li&gt;Creator mode enabled if you plan to post content regularly&lt;/li&gt;
  &lt;/ul&gt;
&lt;/div&gt;

&lt;div class=&quot;checklist&quot;&gt;
  &lt;h3&gt;Ongoing Actions (Week 1 After Optimising)&lt;/h3&gt;
  &lt;ul&gt;
    &lt;li&gt;Connect with 50+ people (classmates, professors, ex-colleagues)&lt;/li&gt;
    &lt;li&gt;Post your first piece of content (learning win or project showcase)&lt;/li&gt;
    &lt;li&gt;Comment on 5 posts per day for the first week&lt;/li&gt;
    &lt;li&gt;Follow 10 companies you want to work for&lt;/li&gt;
    &lt;li&gt;Check your SSI score at linkedin.com/sales/ssi&lt;/li&gt;
    &lt;li&gt;Ask 3 people to endorse your top skills&lt;/li&gt;
  &lt;/ul&gt;
&lt;/div&gt;

&lt;!-- ══════════════════════════════ --&gt;
&lt;h2 id=&quot;section13&quot;&gt;FAQ&lt;/h2&gt;

&lt;div class=&quot;faq-item&quot;&gt;
  &lt;div class=&quot;faq-question&quot;&gt;How long does it take to start getting recruiter messages after optimising?&lt;/div&gt;
  &lt;div class=&quot;faq-answer&quot;&gt;
    Most people see an increase in profile views within 48,72 hours of completing their profile to All-Star status. Recruiter messages typically start within 1,3 weeks if your skills match active hiring needs in your location and domain. The timeline varies by how competitive your target role is. For in-demand technical roles (cloud, data, DevOps) in major cities, well-optimised profiles often get contacted within a week. For more niche roles, it may take longer but inbound will still grow significantly.
  &lt;/div&gt;
&lt;/div&gt;

&lt;div class=&quot;faq-item&quot;&gt;
  &lt;div class=&quot;faq-question&quot;&gt;Should I connect with strangers or only people I know?&lt;/div&gt;
  &lt;div class=&quot;faq-answer&quot;&gt;
    Connect strategically beyond people you know personally. Send connection requests with a brief personalised note to: recruiters at companies you want to work for, senior professionals in your target domain, alumni from your college in relevant roles, speakers at conferences or events you attended virtually, and authors of content you genuinely found useful. A short personalised note (&quot;I read your post about Oracle performance tuning and found it really helpful&quot;) converts at 3,4x the rate of a blank connection request.
  &lt;/div&gt;
&lt;/div&gt;

&lt;div class=&quot;faq-item&quot;&gt;
  &lt;div class=&quot;faq-question&quot;&gt;Should I use LinkedIn Premium?&lt;/div&gt;
  &lt;div class=&quot;faq-answer&quot;&gt;
    LinkedIn Premium Career (the job seeker tier) is worth it for 1,2 months while you are actively job searching. The key benefits are InMail credits to contact recruiters directly, visibility into who viewed your profile, and the &quot;Featured Applicant&quot; badge that makes your application stand out. However, a free All-Star profile with consistent content activity will outperform a Premium account that is incomplete and inactive. Optimise first, then consider Premium if you are actively applying.
  &lt;/div&gt;
&lt;/div&gt;

&lt;div class=&quot;faq-item&quot;&gt;
  &lt;div class=&quot;faq-question&quot;&gt;Comment PROFILE below for a personalised LinkedIn tip.&lt;/div&gt;
  &lt;div class=&quot;faq-answer&quot;&gt;
    Drop a comment with PROFILE and share your current headline or the role you are targeting. I will give you one specific, actionable improvement for your LinkedIn profile based on your situation. I read every comment.
  &lt;/div&gt;
&lt;/div&gt;

&lt;!-- AUTHOR --&gt;
&lt;div class=&quot;about-author&quot;&gt;
  &lt;h2&gt;About the Author&lt;/h2&gt;
  &lt;div class=&quot;author-name&quot;&gt;Chetan Yadav&lt;/div&gt;
  &lt;p class=&quot;author-bio&quot;&gt;
    &lt;strong&gt;Chetan Yadav&lt;/strong&gt; is a &lt;strong&gt;Senior Oracle, PostgreSQL, MySQL, and Cloud DBA&lt;/strong&gt; with &lt;strong&gt;15+ years&lt;/strong&gt; of hands-on experience. Beyond technical work, he mentors early-career professionals through job searches, LinkedIn optimisation, and career transitions into cloud and database engineering roles.
  &lt;/p&gt;
  &lt;p class=&quot;author-bio&quot;&gt;
    Chetan has helped dozens of freshers and junior professionals transform their LinkedIn presence from invisible to actively receiving recruiter outreach. His career content focuses on practical, specific actions that produce measurable results, not generic motivation.
  &lt;/p&gt;
  &lt;p class=&quot;author-bio&quot;&gt;
    This blog covers &lt;strong&gt;real-world DBA problems, cloud architecture, career growth, and practical learning&lt;/strong&gt;, not theoretical documentation or vendor marketing.
  &lt;/p&gt;
  &lt;div class=&quot;social-links&quot;&gt;
    &lt;a href=&quot;https://www.linkedin.com/in/chetanyadavvds/&quot; target=&quot;_blank&quot;&gt;LinkedIn&lt;/a&gt;
    &lt;a href=&quot;https://www.youtube.com/@levelup_careers&quot; target=&quot;_blank&quot;&gt;YouTube&lt;/a&gt;
    &lt;a href=&quot;https://www.instagram.com/levelup_careers/&quot; target=&quot;_blank&quot;&gt;Instagram&lt;/a&gt;
    &lt;a href=&quot;https://x.com/home&quot; target=&quot;_blank&quot;&gt;Twitter (X)&lt;/a&gt;
    &lt;a href=&quot;https://www.facebook.com/oracledbainfo/&quot; target=&quot;_blank&quot;&gt;Facebook&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;Newsletter&lt;/a&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;!-- RELATED --&gt;
&lt;div class=&quot;related-reading&quot;&gt;
  &lt;h2&gt;Related Reading&lt;/h2&gt;
  &lt;ul&gt;
    &lt;li&gt;
      &lt;a href=&quot;#&quot;&gt;How to Create a Resume That Actually Gets Shortlisted in 2026&lt;/a&gt;
      &lt;span class=&quot;why-matters&quot;&gt;Why it matters: Your LinkedIn profile and your resume must be consistent. This guide covers ATS optimisation, impact writing, and the section structure that gets you past the first filter.&lt;/span&gt;
    &lt;/li&gt;
    &lt;li&gt;
      &lt;a href=&quot;#&quot;&gt;Oracle Database 23ai Architecture: AI-Native Internals for DBAs&lt;/a&gt;
      &lt;span class=&quot;why-matters&quot;&gt;Why it matters: If you are targeting DBA or cloud database roles, understanding 23ai internals gives you specific technical content to post on LinkedIn that demonstrates expertise to recruiters.&lt;/span&gt;
    &lt;/li&gt;
    &lt;li&gt;
      &lt;a href=&quot;#&quot;&gt;Oracle Autonomous Database Internals: What Is Really Automated&lt;/a&gt;
      &lt;span class=&quot;why-matters&quot;&gt;Why it matters: Cloud DBA and OCI architect roles are among the most in-demand in 2026. Understanding ADB gives you credible content for your LinkedIn headline, About section, and posts.&lt;/span&gt;
    &lt;/li&gt;
    &lt;li&gt;
      &lt;a href=&quot;https://chetanyadavds.blogspot.com/2026/01/oracle-database-23ai-revolutionizing.html&quot; target=&quot;_blank&quot;&gt;Oracle Database 23ai: Revolutionizing Data Distribution Across the Globe&lt;/a&gt;
      &lt;span class=&quot;why-matters&quot;&gt;Why it matters: Sharing your perspective on emerging Oracle technologies on LinkedIn positions you as someone who stays current, which is exactly what hiring managers look for in DBA candidates.&lt;/span&gt;
    &lt;/li&gt;
  &lt;/ul&gt;
&lt;/div&gt;

&lt;!-- POST FOOTER --&gt;
&lt;div class=&quot;post-footer&quot;&gt;
  &lt;div class=&quot;post-meta&quot;&gt;&lt;strong&gt;by Chetan Yadav&lt;/strong&gt;, March 2026&lt;/div&gt;
  &lt;div class=&quot;share-buttons&quot;&gt;
    &lt;strong&gt;Share:&lt;/strong&gt;
    &lt;a href=&quot;#&quot;&gt;Email&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;BlogThis&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;X&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;Facebook&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;Pinterest&lt;/a&gt;
  &lt;/div&gt;
  &lt;div class=&quot;tags&quot;&gt;
    &lt;strong&gt;Tags:&lt;/strong&gt;
    &lt;a href=&quot;#&quot;&gt;LinkedIn Profile&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;LinkedIn Tips 2026&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;Career Tips&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;Fresher Jobs&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;Job Search&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;Profile Optimisation&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;Recruiter Visibility&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;All-Star Profile&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;DBA Career&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;Personal Branding&lt;/a&gt;
  &lt;/div&gt;
&lt;/div&gt;

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

&lt;script&gt;
function copyCode(button) {
  const codeContainer = button.closest(&#39;.code-container&#39;);
  const codeBlock = codeContainer.querySelector(&#39;.code-block&#39;);
  const textArea = document.createElement(&#39;textarea&#39;);
  textArea.value = codeBlock.textContent;
  textArea.style.position = &#39;fixed&#39;;
  textArea.style.left = &#39;-9999px&#39;;
  document.body.appendChild(textArea);
  textArea.select();
  textArea.setSelectionRange(0, 99999);
  try {
    document.execCommand(&#39;copy&#39;);
    button.textContent = &#39;Copied!&#39;;
    button.classList.add(&#39;copied&#39;);
    setTimeout(() =&gt; { button.textContent = &#39;Copy&#39;; button.classList.remove(&#39;copied&#39;); }, 2000);
  } catch(err) {
    button.textContent = &#39;Failed&#39;;
    setTimeout(() =&gt; { button.textContent = &#39;Copy&#39;; }, 2000);
  }
  document.body.removeChild(textArea);
}
&lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;</content><link rel='replies' type='application/atom+xml' href='http://chetanyadavds.blogspot.com/feeds/2036588907406283100/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://chetanyadavds.blogspot.com/2026/04/how-to-build-powerful-linkedin-profile-attracts-recruiters-2026.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/436196721812840248/posts/default/2036588907406283100'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/436196721812840248/posts/default/2036588907406283100'/><link rel='alternate' type='text/html' href='http://chetanyadavds.blogspot.com/2026/04/how-to-build-powerful-linkedin-profile-attracts-recruiters-2026.html' title='How to Build a Powerful LinkedIn Profile That Attracts Recruiters in 2026'/><author><name>Chetan Yadav</name><uri>http://www.blogger.com/profile/02557500437758632199</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiE0TgifWM4l1b3sy_cK2y41bpqyfY1U25-p5IBKkSg8pJLFRvjYr_kF7W_MgsYdc21DutWF9H6qlShQDQspQLbZEQ5CSUA51Wp6Mh9l5Ygd4NPSuQyqwSMrKitCWwSLr0oHBg9TGjxAvAM7TTkkehHLL1MFWg0wSb31CxywQxIokg9pg/s1600/IMG-20251013-WA0038.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/a/AVvXsEinOMxKTE8CiIKYOBBi1tlrWzzAkJyEzQtqbVRJSm826ETi0W--mzuQrjQI6JtvM8461Qqto3ie0g24-ckhx_D4Df0K_QxJ-SEADDlkSdQXtuOhPNMCb5nC0sY7FWM49DV3N_oaaT0Buj3GVzAo8DJertpZ4hkcYGLI5nWNkYFzzoG6gbovM-gsEHua4TI=s72-c" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-436196721812840248.post-6841825807477234827</id><published>2026-04-06T12:27:00.001+05:30</published><updated>2026-04-06T12:27:35.528+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="Apply Lag"/><category scheme="http://www.blogger.com/atom/ns#" term="Data Guard"/><category scheme="http://www.blogger.com/atom/ns#" term="Data Guard Troubleshooting"/><category scheme="http://www.blogger.com/atom/ns#" term="HA DR"/><category scheme="http://www.blogger.com/atom/ns#" term="MRP Apply"/><category scheme="http://www.blogger.com/atom/ns#" term="Oracle 19c"/><category scheme="http://www.blogger.com/atom/ns#" term="Oracle DBA"/><category scheme="http://www.blogger.com/atom/ns#" term="Standby Database"/><category scheme="http://www.blogger.com/atom/ns#" term="SYNC ASYNC"/><category scheme="http://www.blogger.com/atom/ns#" term="Transport Lag"/><title type='text'>Why Data Guard Lag Happens in Production: Sync, I/O and Network Deep Dive</title><content type='html'>
&lt;html lang=&quot;en&quot;&gt;
&lt;head&gt;
&lt;meta charset=&quot;UTF-8&quot;&gt;&lt;/meta&gt;
&lt;title&gt;Why Data Guard Lag Happens in Production: Sync, I/O and Network Deep Dive&lt;/title&gt;
&lt;meta content=&quot;width=device-width, initial-scale=1.0&quot; name=&quot;viewport&quot;&gt;&lt;/meta&gt;
&lt;meta content=&quot;Why Oracle Data Guard lag happens in production: 6 root causes covering transport lag, apply lag, SYNC vs ASYNC, network latency, standby I/O and misconfiguration with diagnostic SQL.&quot; name=&quot;description&quot;&gt;&lt;/meta&gt;
&lt;link href=&quot;data:image/svg+xml,%3Csvg xmlns=&#39;http://www.w3.org/2000/svg&#39; viewBox=&#39;0 0 100 100&#39;%3E%3Cdefs%3E%3ClinearGradient id=&#39;g&#39; x1=&#39;0%25&#39; y1=&#39;0%25&#39; x2=&#39;100%25&#39; y2=&#39;100%25&#39;%3E%3Cstop offset=&#39;0%25&#39; style=&#39;stop-color:%23d93025&#39;/%3E%3Cstop offset=&#39;100%25&#39; style=&#39;stop-color:%23a82318&#39;/%3E%3C/linearGradient%3E%3C/defs%3E%3Crect width=&#39;100&#39; height=&#39;100&#39; rx=&#39;20&#39; fill=&#39;url(%23g)&#39;/%3E%3Cpath d=&#39;M20,30 L35,30 L35,70 L20,70 Z M40,40 L55,40 L55,70 L40,70 Z M60,25 L75,25 L75,70 L60,70 Z&#39; fill=&#39;white&#39; opacity=&#39;0.9&#39;/%3E%3C/svg%3E&quot; rel=&quot;icon&quot; type=&quot;image/svg+xml&quot;&gt;&lt;/link&gt;
&lt;style&gt;
*{margin:0;padding:0;box-sizing:border-box}
body{background:#fff;color:#333;font-family:Arial,Helvetica,sans-serif;font-size:16px;line-height:1.7}
.post-title,.entry-title,h1.post-title,h3.post-title{display:none!important}

.hero-header{background:linear-gradient(135deg,#1e3a5f 0%,#7c1c1c 50%,#1e3a5f 100%);color:#fff;padding:60px 40px;width:100%}
.hero-header-content{max-width:1200px;margin:0 auto;padding:0 20px}
.hero-header h1{font-size:42px;font-weight:700;color:#fff;line-height:1.3;margin-bottom:20px}
.hero-subtitle{font-size:20px;font-weight:300;color:#fca5a5;opacity:.95;margin-bottom:30px}
.hero-meta{display:flex;gap:30px;align-items:center;flex-wrap:wrap;font-size:15px;color:#fecaca}
.hero-meta-item{display:flex;align-items:center;gap:8px}

.hero-image-section{width:100%;margin:0;padding:0;overflow:hidden;background:#f8fafc}
.hero-image-section img{width:100%;height:auto;display:block;max-height:760px;object-fit:contain;padding:20px 0}

.main-content-wrapper{width:100%;background:#fff}
.container{max-width:800px;margin:0 auto;padding:30px 20px;background:#fff}

.reading-time-badge{display:inline-block;background:linear-gradient(135deg,#dc2626 0%,#991b1b 100%);color:#fff;padding:12px 28px;border-radius:50px;font-size:15px;font-weight:500;margin-bottom:30px;box-shadow:0 4px 12px rgba(220,38,38,.3)}
.page-tagline{color:#666;font-size:15px;font-style:italic;text-align:center;margin-bottom:35px}

.read-more-link{display:block;margin:28px 0 8px}
.read-more-link a{color:#dc2626;font-size:15px;text-decoration:none;font-style:italic}
.read-more-link a:hover{text-decoration:underline}

.toc{background:#fef2f2;border-left:4px solid #dc2626;padding:28px 32px;margin:35px 0;border-radius:8px;box-shadow:0 1px 3px rgba(0,0,0,.05)}
.toc-header{display:flex;align-items:center;gap:10px;font-size:24px;font-weight:bold;color:#000;margin-bottom:20px}
.toc ol{margin-left:20px;line-height:1.9;counter-reset:toc-counter;list-style:none}
.toc ol li{counter-increment:toc-counter;margin:12px 0;font-size:16px;padding-bottom:12px;border-bottom:1px solid #fecaca;transition:all .2s ease}
.toc ol li:last-child{border-bottom:none}
.toc ol li:hover{padding-left:8px}
.toc ol li::before{content:counter(toc-counter) &quot;. &quot;;font-weight:600;color:#dc2626;margin-right:8px}
.toc a{color:#dc2626;text-decoration:none}
.toc a:hover{text-decoration:underline}

h2{font-size:28px;font-weight:bold;color:#000;margin:45px 0 20px;line-height:1.3}
h3{font-size:22px;font-weight:600;color:#333;margin:30px 0 15px}
p{margin:16px 0;color:#333;line-height:1.7}
ul,ol{margin:18px 0 18px 35px;color:#333;line-height:1.7}
ul li,ol li{margin:10px 0}
strong{font-weight:bold;color:#333}
em{font-style:italic}
a{color:#dc2626;text-decoration:none}
a:hover{text-decoration:underline}

.tag-good{display:inline-block;background:#e6f4ea;color:#137333;border:1px solid #a8d5b5;border-radius:4px;padding:1px 8px;font-size:13px;font-weight:600;margin-right:6px;vertical-align:middle}
.tag-bad{display:inline-block;background:#fce8e6;color:#c5221f;border:1px solid #f5a8a4;border-radius:4px;padding:1px 8px;font-size:13px;font-weight:600;margin-right:6px;vertical-align:middle}
.tag-warn{display:inline-block;background:#fffbeb;color:#92400e;border:1px solid #fcd34d;border-radius:4px;padding:1px 8px;font-size:13px;font-weight:600;margin-right:6px;vertical-align:middle}
.tag-cause{display:inline-block;background:#fef2f2;color:#991b1b;border:1px solid #fca5a5;border-radius:4px;padding:2px 10px;font-size:12px;font-weight:700;margin-right:6px;vertical-align:middle}
.tag-fix{display:inline-block;background:#f0fdf4;color:#15803d;border:1px solid #86efac;border-radius:4px;padding:2px 10px;font-size:12px;font-weight:700;margin-right:6px;vertical-align:middle}

.code-container{position:relative;margin:24px 0}
.code-header{background:#1e1b2e;color:#fff;padding:10px 16px;border-radius:8px 8px 0 0;display:flex;justify-content:space-between;align-items:center;font-size:14px}
.code-label{font-weight:500}
.copy-btn{background:#dc2626;color:#fff;border:none;padding:6px 14px;border-radius:5px;cursor:pointer;font-size:13px;transition:background .2s;font-family:Arial,sans-serif}
.copy-btn:hover{background:#b91c1c}
.copy-btn.copied{background:#10b981}
.code-block{background:#f8f9fa;border:1px solid #e0e0e0;border-radius:0 0 8px 8px;padding:18px 20px;margin:0;overflow-x:auto;font-family:&#39;Courier New&#39;,Courier,monospace;font-size:14px;line-height:1.7;white-space:pre;tab-size:4}
code{background:#f8f9fa;padding:2px 6px;border-radius:3px;font-family:&#39;Courier New&#39;,monospace;font-size:14px;color:#dc2626}

.info-box{background:#fffbeb;border-left:4px solid #f59e0b;padding:18px 22px;border-radius:0 8px 8px 0;margin:25px 0}
.info-box strong{color:#92400e}
.tip-box{background:#fef2f2;border-left:4px solid #dc2626;padding:18px 22px;border-radius:0 8px 8px 0;margin:25px 0}
.tip-box strong{color:#991b1b}
.incident-box{background:#fef2f2;border-left:4px solid #ef4444;padding:18px 22px;border-radius:0 8px 8px 0;margin:25px 0}
.incident-box strong{color:#991b1b}
.success-box{background:#f0fdf4;border-left:4px solid #22c55e;padding:18px 22px;border-radius:0 8px 8px 0;margin:25px 0}
.success-box strong{color:#15803d}

table{width:100%;border-collapse:collapse;margin:25px 0;background:#fff;border:1px solid #e0e0e0}
thead{background:#1e1b2e}
th{padding:12px;text-align:left;font-weight:bold;color:#fff;border-bottom:2px solid #e0e0e0;font-size:15px}
td{padding:12px;border-bottom:1px solid #e0e0e0;color:#333;font-size:15px}
tr:last-child td{border-bottom:none}
tbody tr:hover{background:#fef2f2}

.checklist{background:#fef2f2;border:1px solid #fecaca;border-radius:8px;padding:24px 28px;margin:18px 0}
.checklist h3{margin-top:0;color:#1e293b;font-size:18px}
.checklist ul{list-style:none;margin-left:0}
.checklist ul li{padding:6px 0 6px 28px;position:relative}
.checklist ul li::before{content:&quot;&quot;;position:absolute;left:4px;top:13px;width:10px;height:10px;background:#dc2626;border-radius:50%}

.faq-item{margin:25px 0;border-bottom:1px solid #e5e7eb;padding-bottom:25px}
.faq-item:last-child{border-bottom:none}
.faq-question{font-weight:600;color:#000;font-size:17px;margin-bottom:10px}
.faq-answer{color:#333;line-height:1.7}

.related-reading{background:#f8f9fa;border:1px solid #e0e0e0;border-radius:8px;padding:30px;margin:40px 0}
.related-reading h2{margin-top:0}
.related-reading ul{margin-left:25px}
.related-reading li{margin:18px 0;line-height:1.7}
.related-reading .why-matters{color:#666;font-size:15px;margin-top:5px;display:block}

.about-author{background:#fffbf0;border:1px solid #e0e0e0;border-radius:8px;padding:30px;margin:40px 0}
.about-author h2{margin-top:0;font-size:28px}
.author-name{font-size:20px;font-weight:bold;color:#000;margin-bottom:10px}
.author-bio{color:#333;line-height:1.7;margin-bottom:15px}
.social-links{margin-top:20px}
.social-links a{display:inline-block;margin-right:20px;color:#dc2626;text-decoration:none;font-size:16px}
.social-links a:hover{text-decoration:underline}

.post-footer{border-top:1px solid #e0e0e0;padding-top:25px;margin-top:40px;color:#666;font-size:15px}
.post-meta{margin-bottom:15px}
.share-buttons{margin:20px 0}
.share-buttons a{display:inline-block;margin-right:15px;color:#dc2626;font-size:14px}
.tags{margin-top:20px}
.tags strong{color:#666;font-weight:normal}
.tags a{color:#dc2626;margin-right:10px;font-size:14px}

@media(max-width:768px){
  .hero-header{padding:40px 24px}
  .hero-header h1{font-size:28px}
  .hero-subtitle{font-size:16px}
  .hero-meta{gap:20px}
  h2{font-size:24px}
  h3{font-size:20px}
  table{font-size:13px}
  th,td{padding:9px}
  .code-block{font-size:12px}
}
&lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;

&lt;div class=&quot;hero-header&quot;&gt;
  &lt;div class=&quot;hero-header-content&quot;&gt;
    &lt;h1&gt;Why Data Guard Lag Happens in Production: Sync, I/O and Network Deep Dive&lt;/h1&gt;
    &lt;div class=&quot;hero-subtitle&quot;&gt;6 Root Causes of Transport and Apply Lag, With Diagnostic SQL to Prove Each One&lt;/div&gt;
    &lt;div class=&quot;hero-meta&quot;&gt;
      &lt;div class=&quot;hero-meta-item&quot;&gt; 06 March 2026&lt;/div&gt;
      &lt;div class=&quot;hero-meta-item&quot;&gt; Chetan Yadav, Senior Oracle &amp;amp; Cloud DBA&lt;/div&gt;
      &lt;div class=&quot;hero-meta-item&quot;&gt;⏱️ 14 - 16 min read&lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;div class=&quot;main-content-wrapper&quot;&gt;
&lt;div class=&quot;container&quot;&gt;

&lt;div class=&quot;reading-time-badge&quot;&gt;⏱️ Estimated Reading Time: 14 - 16 minutes&lt;/div&gt;
&lt;div class=&quot;page-tagline&quot;&gt;Transport Lag, Apply Lag, SYNC vs ASYNC, Network RTT, Standby I/O, MRP Apply Bottleneck&lt;/div&gt;

&lt;div class=&quot;hero-image-section&quot;&gt;
  &lt;img alt=&quot;Oracle Data Guard lag root cause map showing 6 production causes across Primary Network and Standby layers with diagnostic metric reference table&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEiFNcrTQ_LvFFgx5wDJnJcN4Taq7yJJa8T5gLWNlrV_atkVDuVaX1pDdy0vujaExOLOFm-T_wKHlHe7a7Vbv1OYgUsna-xg11j5YirJZVVRP__mGIBkSXVgKFr2b_7b-ssvpHEqSK4KsCNuxFGQm-ql5s0gPKYdyxS-WnrlBMHprr9aBD0xB2JxbrYbE9U&quot; /&gt;
&lt;/div&gt;

&lt;div class=&quot;info-box&quot; style=&quot;margin-top: 28px;&quot;&gt;
  &lt;strong&gt;⚙️ Production Environment Referenced&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;
  &lt;strong&gt;Oracle Database:&lt;/strong&gt; 19.18.0.0.0 Enterprise Edition &amp;nbsp;•&amp;nbsp;
  &lt;strong&gt;Primary:&lt;/strong&gt; 2-Node RAC, 4.8 TB OLTP &amp;nbsp;•&amp;nbsp;
  &lt;strong&gt;Standby:&lt;/strong&gt; Physical Standby (Active Data Guard)&lt;br /&gt;
  &lt;strong&gt;Protection Mode:&lt;/strong&gt; Maximum Availability (SYNC/AFFIRM) &amp;nbsp;•&amp;nbsp;
  &lt;strong&gt;Network:&lt;/strong&gt; Dedicated 1 GbE WAN, 120 km, RTT 1.8 ms&lt;br /&gt;
  &lt;strong&gt;Peak Load:&lt;/strong&gt; 2,800 TPS, 180 MB/sec redo generation &amp;nbsp;•&amp;nbsp;
  &lt;strong&gt;Application:&lt;/strong&gt; Core banking transaction processing
&lt;/div&gt;

&lt;p&gt;
  The monitoring alert fires at 11:43 PM: &lt;em&gt;&quot;Data Guard apply lag exceeds 900 seconds.&quot;&lt;/em&gt; Transport lag is 180 seconds. Apply lag is 900 seconds. The standby is 15 minutes behind the primary. If the primary fails right now, 15 minutes of financial transactions are at risk.
&lt;/p&gt;
&lt;p&gt;
  This scenario happens in production Data Guard environments more often than most teams admit. The problem looks the same from the outside every time, but the root cause is completely different each time. Transport lag and apply lag each have different causes, different diagnostic queries, and different fixes. Treating them as the same problem wastes hours of investigation.
&lt;/p&gt;
&lt;p&gt;
  This guide covers all six real production causes of Data Guard lag, the exact SQL to identify each one, and the specific fix for each. No guesswork. Precise diagnosis first, then precise resolution.
&lt;/p&gt;

&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;

&lt;div class=&quot;toc&quot;&gt;
  &lt;div class=&quot;toc-header&quot;&gt;&lt;span&gt;&lt;/span&gt; Table of Contents&lt;/div&gt;
  &lt;ol&gt;
    &lt;li&gt;&lt;a href=&quot;#section1&quot;&gt;Transport Lag vs Apply Lag: The Critical Distinction&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#section2&quot;&gt;Five Diagnostic Queries to Run First&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#section3&quot;&gt;Cause 1: Primary Storage I/O Pressure&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#section4&quot;&gt;Cause 2: Redo Volume Spike from Batch Jobs&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#section5&quot;&gt;Cause 3: Network Latency and Bandwidth&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#section6&quot;&gt;Cause 4: Misconfiguration (The Silent Killer)&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#section7&quot;&gt;Cause 5: MRP Apply Bottleneck&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#section8&quot;&gt;Cause 6: Standby Resource Starvation&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#section9&quot;&gt;SYNC vs ASYNC: Which Mode Creates Which Lag Pattern&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#section10&quot;&gt;Lag Under Active Data Guard (ADG Read Workload)&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#section11&quot;&gt;Proactive Lag Monitoring&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#section12&quot;&gt;FAQ&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#section13&quot;&gt;Related Reading&lt;/a&gt;&lt;/li&gt;
  &lt;/ol&gt;
&lt;/div&gt;

&lt;!-- ═══════════════════════════════════ --&gt;
&lt;h2 id=&quot;section1&quot;&gt;1. Transport Lag vs Apply Lag: The Critical Distinction&lt;/h2&gt;
&lt;p&gt;Before diagnosing lag, identify which type you have. They look identical on a dashboard but live in completely different parts of the pipeline.&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;&lt;tr&gt;&lt;th&gt;Lag Type&lt;/th&gt;&lt;th&gt;Definition&lt;/th&gt;&lt;th&gt;Location&lt;/th&gt;&lt;th&gt;Root Cause Area&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;Transport Lag&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;Redo generated on primary but not yet received by standby&lt;/td&gt;
      &lt;td&gt;Network pipe between sites&lt;/td&gt;
      &lt;td&gt;Network, primary I/O, redo volume&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;Apply Lag&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;Redo received by standby but not yet applied to datafiles&lt;/td&gt;
      &lt;td&gt;Standby MRP apply process&lt;/td&gt;
      &lt;td&gt;Standby I/O, CPU, misconfiguration&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;div class=&quot;tip-box&quot;&gt;
  &lt;strong&gt;The Fastest Diagnosis Rule:&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;
  &lt;strong&gt;High transport lag, low apply lag:&lt;/strong&gt; Network or primary is the problem. The standby applies everything it receives, it just is not receiving fast enough.&lt;br /&gt;&lt;br /&gt;
  &lt;strong&gt;Low transport lag, high apply lag:&lt;/strong&gt; Standby is the problem. Redo arrives quickly but MRP cannot keep up.&lt;br /&gt;&lt;br /&gt;
  &lt;strong&gt;Both high:&lt;/strong&gt; Multiple problems, or a redo volume spike overwhelming the entire pipeline.
&lt;/div&gt;

&lt;!-- ═══════════════════════════════════ --&gt;
&lt;h2 id=&quot;section2&quot;&gt;2. Five Diagnostic Queries to Run First&lt;/h2&gt;
&lt;p&gt;Run these immediately when lag is reported. They tell you which cause category you are dealing with before you go deeper.&lt;/p&gt;

&lt;div class=&quot;code-container&quot;&gt;
  &lt;div class=&quot;code-header&quot;&gt;
    &lt;span class=&quot;code-label&quot;&gt;SQL, Five Immediate Diagnostic Queries for Data Guard Lag&lt;/span&gt;
    &lt;button class=&quot;copy-btn&quot; onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;
  &lt;/div&gt;
  &lt;div class=&quot;code-block&quot;&gt;-- 1. Transport lag vs apply lag (run on PRIMARY)
SELECT name,
       value,
       unit,
       time_computed
FROM   v$dataguard_stats
WHERE  name IN (
    &#39;transport lag&#39;,
    &#39;apply lag&#39;,
    &#39;apply finish time&#39;,
    &#39;estimated startup time&#39;
)
ORDER  BY name;

-- 2. Current redo generation rate MB/sec (run on PRIMARY)
SELECT inst_id,
       ROUND(value / 1024 / 1024, 2)  AS redo_mb_total
FROM   gv$sysstat
WHERE  name = &#39;redo size&#39;
ORDER  BY inst_id;

-- 3. Archive destination status and error (run on PRIMARY)
SELECT dest_id,
       status,
       target,
       destination,
       error,
       gap_status
FROM   v$archive_dest_status
WHERE  status != &#39;INACTIVE&#39;
ORDER  BY dest_id;

-- 4. MRP apply process status (run on STANDBY)
SELECT process,
       status,
       thread#,
       sequence#,
       block#,
       blocks,
       delay_mins
FROM   v$managed_standby
ORDER  BY process;

-- 5. Archive gap detection (run on PRIMARY)
-- Any rows returned = serious problem, act immediately
SELECT thread#,
       low_sequence#,
       high_sequence#
FROM   v$archive_gap
ORDER  BY thread#;&lt;/div&gt;
&lt;/div&gt;

&lt;!-- ═══════════════════════════════════ --&gt;
&lt;h2 id=&quot;section3&quot;&gt;3. Cause 1: Primary Storage I/O Pressure&lt;/h2&gt;
&lt;p&gt;
  &lt;span class=&quot;tag-cause&quot;&gt;Cause 1&lt;/span&gt; LGWR cannot write redo to local online redo logs fast enough. In SYNC mode this directly delays the network send to the standby. In ASYNC mode it slows redo generation and eventually fills the NSA send buffer.
&lt;/p&gt;

&lt;div class=&quot;code-container&quot;&gt;
  &lt;div class=&quot;code-header&quot;&gt;
    &lt;span class=&quot;code-label&quot;&gt;SQL, Diagnose Primary Storage I/O as Lag Root Cause&lt;/span&gt;
    &lt;button class=&quot;copy-btn&quot; onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;
  &lt;/div&gt;
  &lt;div class=&quot;code-block&quot;&gt;-- LGWR wait events (run on PRIMARY)
-- High log file parallel write = primary disk problem
SELECT event,
       total_waits,
       ROUND(average_wait, 3)  AS avg_wait_ms,
       wait_class
FROM   v$system_event
WHERE  event IN (
    &#39;log file sync&#39;,
    &#39;log file parallel write&#39;,
    &#39;log buffer space&#39;
)
ORDER  BY time_waited DESC;

-- Datafile write latency (DBWR pressure on LGWR)
SELECT d.name,
       ROUND(f.writetim / NULLIF(f.phywrts, 0), 2)  AS avg_write_ms,
       f.phywrts
FROM   v$filestat  f
JOIN   v$datafile  d ON f.file# = d.file#
WHERE  f.phywrts &amp;gt; 1000
ORDER  BY avg_write_ms DESC
FETCH FIRST 10 ROWS ONLY;

-- Check ASM rebalance (can throttle I/O on primary)
SELECT group_number,
       operation,
       state,
       power,
       est_minutes
FROM   v$asm_operation;&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;
  &lt;span class=&quot;tag-fix&quot;&gt;Fix&lt;/span&gt; Move redo log files to dedicated fast storage (NVMe or dedicated ASM disk group). Increase redo log size to reduce switch frequency. Schedule ASM rebalance outside peak hours.
&lt;/p&gt;

&lt;!-- ═══════════════════════════════════ --&gt;
&lt;h2 id=&quot;section4&quot;&gt;4. Cause 2: Redo Volume Spike from Batch Jobs&lt;/h2&gt;
&lt;p&gt;
  &lt;span class=&quot;tag-cause&quot;&gt;Cause 2&lt;/span&gt; A batch job, bulk load, or mass update pushes 10,50x the normal redo rate. The network pipe cannot keep up. Transport lag grows rapidly. This is the most common cause of sudden lag spikes in OLTP systems with nightly batch processing.
&lt;/p&gt;

&lt;div class=&quot;code-container&quot;&gt;
  &lt;div class=&quot;code-header&quot;&gt;
    &lt;span class=&quot;code-label&quot;&gt;SQL, Identify Redo Volume Spike and Source&lt;/span&gt;
    &lt;button class=&quot;copy-btn&quot; onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;
  &lt;/div&gt;
  &lt;div class=&quot;code-block&quot;&gt;-- Archive log generation rate per hour (run on PRIMARY)
-- Sudden spike = redo volume surge
SELECT TO_CHAR(first_time, &#39;YYYY-MM-DD HH24&#39;)  AS hour,
       COUNT(*)                                  AS logs_generated,
       ROUND(SUM(blocks * block_size)/1024/1024) AS total_mb
FROM   v$archived_log
WHERE  first_time     &amp;gt; SYSDATE - 1
AND    standby_dest   = &#39;NO&#39;
GROUP  BY TO_CHAR(first_time, &#39;YYYY-MM-DD HH24&#39;)
ORDER  BY hour DESC;

-- Top SQL generating most redo (run on PRIMARY)
SELECT sql_id,
       executions,
       ROUND(buffer_gets / 1024.0, 0)   AS buffer_gets_k,
       last_active_time,
       SUBSTR(sql_text, 1, 80)          AS sql_preview
FROM   v$sql
WHERE  executions &amp;gt; 0
ORDER  BY buffer_gets DESC
FETCH FIRST 20 ROWS ONLY;&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;
  &lt;span class=&quot;tag-fix&quot;&gt;Fix&lt;/span&gt; Use &lt;code&gt;NOLOGGING&lt;/code&gt; or &lt;code&gt;APPEND&lt;/code&gt; hints for bulk data loads where tolerable. Schedule batch jobs during off-peak hours. Enable redo log compression on the archive destination (&lt;code&gt;COMPRESSION=ENABLE&lt;/code&gt; in &lt;code&gt;LOG_ARCHIVE_DEST&lt;/code&gt;).
&lt;/p&gt;

&lt;!-- ═══════════════════════════════════ --&gt;
&lt;h2 id=&quot;section5&quot;&gt;5. Cause 3: Network Latency and Bandwidth&lt;/h2&gt;
&lt;p&gt;
  &lt;span class=&quot;tag-cause&quot;&gt;Cause 3&lt;/span&gt; The most commonly blamed cause and the most commonly misdiagnosed. Network problems cause transport lag only. If apply lag is high and transport lag is low, stop looking at the network.
&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;&lt;tr&gt;&lt;th&gt;Metric&lt;/th&gt;&lt;th&gt;Good Value&lt;/th&gt;&lt;th&gt;Problem Threshold&lt;/th&gt;&lt;th&gt;Impact&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;&lt;td&gt;Round-trip latency (RTT)&lt;/td&gt;&lt;td&gt;&amp;lt; 2 ms&lt;/td&gt;&lt;td&gt;&amp;gt; 5 ms for SYNC&lt;/td&gt;&lt;td&gt;Every commit waits RTT in SYNC mode&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;Bandwidth utilisation&lt;/td&gt;&lt;td&gt;&amp;lt; 60%&lt;/td&gt;&lt;td&gt;&amp;gt; 80% sustained&lt;/td&gt;&lt;td&gt;Redo bursts cause queuing delay&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;Packet loss&lt;/td&gt;&lt;td&gt;0%&lt;/td&gt;&lt;td&gt;&amp;gt; 0.01%&lt;/td&gt;&lt;td&gt;TCP retransmit multiplies latency&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;Jitter&lt;/td&gt;&lt;td&gt;&amp;lt; 1 ms&lt;/td&gt;&lt;td&gt;&amp;gt; 5 ms&lt;/td&gt;&lt;td&gt;Unpredictable LGWR stalls in SYNC mode&lt;/td&gt;&lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;div class=&quot;code-container&quot;&gt;
  &lt;div class=&quot;code-header&quot;&gt;
    &lt;span class=&quot;code-label&quot;&gt;SQL, Diagnose Network as Data Guard Lag Cause&lt;/span&gt;
    &lt;button class=&quot;copy-btn&quot; onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;
  &lt;/div&gt;
  &lt;div class=&quot;code-block&quot;&gt;-- Redo transport network write statistics (run on PRIMARY)
SELECT dest_id,
       srl_network_writes,
       ROUND(srl_network_write_time /
             NULLIF(srl_network_writes, 0), 3)  AS avg_network_write_ms
FROM   v$standby_log_stats
ORDER  BY dest_id;

-- NSS/NSA send process status (run on PRIMARY)
SELECT process,
       status,
       client_process,
       sequence#,
       delay_mins
FROM   v$managed_standby
WHERE  process LIKE &#39;NS%&#39;
ORDER  BY process;

-- Archive destination error (run on PRIMARY)
SELECT dest_id,
       status,
       error,
       gap_status,
       db_unique_name
FROM   v$archive_dest_status
WHERE  target    = &#39;STANDBY&#39;
AND    status   != &#39;INACTIVE&#39;;&lt;/div&gt;
&lt;/div&gt;

&lt;div class=&quot;incident-box&quot;&gt;
  &lt;strong&gt;Incident: Firewall Stateful Inspection Causing Transport Lag Spikes&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;
  A correctly configured Data Guard environment with 1.8 ms RTT had transport lag spike to 120+ seconds randomly, then clear, then spike again. Network team confirmed zero packet loss. Root cause: a next-gen firewall performing deep packet inspection on the redo transport TCP stream. Each 10-second idle gap caused the firewall to drop and re-establish the TCP state table entry, causing a 15,30 second reconnect delay on the NSS process.&lt;br /&gt;&lt;br /&gt;
  &lt;strong&gt;Fix:&lt;/strong&gt; Added a firewall bypass rule for the specific TCP port used by Data Guard redo transport. Lag spikes disappeared immediately.
&lt;/div&gt;

&lt;p&gt;
  &lt;span class=&quot;tag-fix&quot;&gt;Fix&lt;/span&gt; Add &lt;code&gt;COMPRESSION=ENABLE&lt;/code&gt; to &lt;code&gt;LOG_ARCHIVE_DEST_2&lt;/code&gt; to reduce bandwidth by 50,70%. Implement QoS tagging for redo transport traffic. Increase &lt;code&gt;NET_TIMEOUT&lt;/code&gt; if packet loss causes premature timeouts. Use a dedicated WAN link for redo transport, never share with application traffic.
&lt;/p&gt;

&lt;!-- ═══════════════════════════════════ --&gt;
&lt;h2 id=&quot;section6&quot;&gt;6. Cause 4: Misconfiguration (The Silent Killer)&lt;/h2&gt;
&lt;p&gt;
  &lt;span class=&quot;tag-cause&quot;&gt;Cause 4&lt;/span&gt; Configuration errors are silent lag causes. No errors in the alert log. No network problems. Reasonable redo rate. But lag slowly accumulates because something is set up wrong. These are the hardest to find.
&lt;/p&gt;

&lt;div class=&quot;code-container&quot;&gt;
  &lt;div class=&quot;code-header&quot;&gt;
    &lt;span class=&quot;code-label&quot;&gt;SQL, Verify Data Guard Configuration for Common Misconfigurations&lt;/span&gt;
    &lt;button class=&quot;copy-btn&quot; onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;
  &lt;/div&gt;
  &lt;div class=&quot;code-block&quot;&gt;-- Check 1: Standby Redo Logs exist and are correct size
-- SRL must match online redo log size
-- Need at least (online_log_groups + 1) SRL per thread
SELECT group#,
       thread#,
       sequence#,
       bytes/1024/1024  AS size_mb,
       archived,
       status
FROM   v$standby_log
ORDER  BY thread#, group#;

-- Check 2: AFFIRM setting matches intended protection mode
SELECT dest_id,
       dest_name,
       affirm,
       net_timeout,
       compression,
       status
FROM   v$archive_dest
WHERE  target  = &#39;STANDBY&#39;
AND    status  = &#39;VALID&#39;;

-- Check 3: Real-time apply is running (not archive-based)
-- Status must be WAIT_FOR_LOG not WAIT_FOR_GAP
SELECT process,
       status,
       sequence#
FROM   v$managed_standby
WHERE  process = &#39;MRP0&#39;;

-- Check 4: Protection mode matches protection level
-- If they differ, primary has silently fallen back
SELECT protection_mode,    -- configured mode
       protection_level    -- actual effective mode
FROM   v$database;&lt;/div&gt;
&lt;/div&gt;

&lt;div class=&quot;incident-box&quot;&gt;
  &lt;strong&gt;Incident: Missing Standby Redo Logs, 8-Hour Apply Gap&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;
  A newly built Data Guard environment appeared healthy. Alert log clean. No errors. Archive destination showed SUCCESS. But during failover testing the standby was 8 hours behind the primary despite a low-latency WAN link.&lt;br /&gt;&lt;br /&gt;
  Root cause: Standby Redo Logs had never been created. Without SRLs, real-time apply cannot function. MRP was waiting for archived logs to be shipped rather than receiving redo in real time, meaning the standby only caught up once per hour during log archival.&lt;br /&gt;&lt;br /&gt;
  &lt;strong&gt;Fix:&lt;/strong&gt; Created SRL groups matching primary online redo log size plus one extra group per thread. Apply lag dropped from 8 hours to under 60 seconds within minutes of SRL creation.
&lt;/div&gt;

&lt;!-- ═══════════════════════════════════ --&gt;
&lt;h2 id=&quot;section7&quot;&gt;7. Cause 5: MRP Apply Bottleneck&lt;/h2&gt;
&lt;p&gt;
  &lt;span class=&quot;tag-cause&quot;&gt;Cause 5&lt;/span&gt; Redo is arriving at the standby on time (low transport lag) but MRP cannot apply it fast enough (high apply lag). This is purely a standby-side problem. Do not touch the primary or network until you confirm this is the cause.
&lt;/p&gt;

&lt;div class=&quot;code-container&quot;&gt;
  &lt;div class=&quot;code-header&quot;&gt;
    &lt;span class=&quot;code-label&quot;&gt;SQL, Diagnose and Fix MRP Apply Bottleneck&lt;/span&gt;
    &lt;button class=&quot;copy-btn&quot; onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;
  &lt;/div&gt;
  &lt;div class=&quot;code-block&quot;&gt;-- Check MRP status and wait events (run on STANDBY)
SELECT event,
       total_waits,
       ROUND(average_wait, 3)  AS avg_wait_ms,
       wait_class
FROM   v$system_event
WHERE  wait_class NOT IN (&#39;Idle&#39;, &#39;Network&#39;)
ORDER  BY time_waited DESC
FETCH FIRST 15 ROWS ONLY;

-- Check parallel apply worker count (run on STANDBY)
-- If only MRP0 shown, parallel apply is disabled
SELECT process,
       status,
       thread#
FROM   v$managed_standby
WHERE  process LIKE &#39;PR%&#39;
OR     process LIKE &#39;MRP%&#39;
ORDER  BY process;

-- Enable parallel apply (run on STANDBY)
-- Stop current apply first
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;

-- Restart with parallel apply (match to standby CPU count)
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE
    PARALLEL 8
    USING CURRENT LOGFILE
    DISCONNECT FROM SESSION;

-- Verify parallel workers started
SELECT process,
       status
FROM   v$managed_standby
WHERE  process LIKE &#39;PR%&#39;
OR     process LIKE &#39;MRP%&#39;
ORDER  BY process;&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;
  &lt;span class=&quot;tag-fix&quot;&gt;Fix&lt;/span&gt; Enable parallel apply with degree matching standby CPU count. Give MRP dedicated I/O separate from RMAN backup. If Active Data Guard is enabled, use I/O Resource Manager to prioritise MRP over read queries.
&lt;/p&gt;

&lt;!-- ═══════════════════════════════════ --&gt;
&lt;h2 id=&quot;section8&quot;&gt;8. Cause 6: Standby Resource Starvation&lt;/h2&gt;
&lt;p&gt;
  &lt;span class=&quot;tag-cause&quot;&gt;Cause 6&lt;/span&gt; The standby does not have enough CPU, memory, or I/O bandwidth to keep up with apply. Frequently caused by under-specifying the standby relative to the primary, or by competing workloads such as RMAN backup or ADG read queries running on the same standby host during peak apply windows.
&lt;/p&gt;

&lt;div class=&quot;code-container&quot;&gt;
  &lt;div class=&quot;code-header&quot;&gt;
    &lt;span class=&quot;code-label&quot;&gt;SQL, Diagnose Standby Resource Starvation&lt;/span&gt;
    &lt;button class=&quot;copy-btn&quot; onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;
  &lt;/div&gt;
  &lt;div class=&quot;code-block&quot;&gt;-- OS resource pressure (run on STANDBY)
SELECT stat_name,
       value
FROM   v$osstat
WHERE  stat_name IN (
    &#39;NUM_CPUS&#39;,
    &#39;LOAD&#39;,
    &#39;BUSY_TIME&#39;,
    &#39;IDLE_TIME&#39;
);

-- RMAN backup running during peak apply (run on STANDBY)
SELECT input_type,
       status,
       TO_CHAR(start_time, &#39;YYYY-MM-DD HH24:MI&#39;)  AS start_time,
       input_bytes_display,
       output_bytes_display
FROM   v$rman_backup_job_details
WHERE  start_time &amp;gt; SYSDATE - 1
ORDER  BY start_time DESC;

-- Datafile write latency on standby
SELECT d.name,
       ROUND(f.writetim / NULLIF(f.phywrts, 0), 2)  AS avg_write_ms,
       f.phywrts
FROM   v$filestat  f
JOIN   v$datafile  d ON f.file# = d.file#
WHERE  (f.phyrds + f.phywrts) &amp;gt; 1000
ORDER  BY avg_write_ms DESC
FETCH FIRST 10 ROWS ONLY;&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;
  &lt;span class=&quot;tag-fix&quot;&gt;Fix&lt;/span&gt; Standby should match primary hardware specification. Schedule RMAN backup on the standby during off-peak apply windows. If ADG read workload is heavy, use I/O Resource Manager to protect MRP I/O priority.
&lt;/p&gt;

&lt;!-- ═══════════════════════════════════ --&gt;
&lt;h2 id=&quot;section9&quot;&gt;9. SYNC vs ASYNC: Which Mode Creates Which Lag Pattern&lt;/h2&gt;

&lt;table&gt;
  &lt;thead&gt;&lt;tr&gt;&lt;th&gt;Scenario&lt;/th&gt;&lt;th&gt;SYNC Mode Behaviour&lt;/th&gt;&lt;th&gt;ASYNC Mode Behaviour&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;&lt;td&gt;Network spike (100 ms RTT)&lt;/td&gt;&lt;td&gt;Every commit stalls 100 ms, performance crisis on primary&lt;/td&gt;&lt;td&gt;Transport lag grows silently, primary unaffected&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;Standby reboots&lt;/td&gt;&lt;td&gt;Primary stalls (Max Protection) or falls back to async (Max Availability)&lt;/td&gt;&lt;td&gt;Transport lag grows until standby returns, no primary impact&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;Redo volume burst&lt;/td&gt;&lt;td&gt;Network saturates, commits queue behind LGWR&lt;/td&gt;&lt;td&gt;NSA buffer fills, lag grows but primary performance maintained&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;Steady state (good network)&lt;/td&gt;&lt;td&gt;Transport lag near zero, apply lag depends on MRP&lt;/td&gt;&lt;td&gt;Small transport lag always present (1,5 sec typical)&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;Packet loss&lt;/td&gt;&lt;td&gt;LGWR stalls on every retransmit, very visible on primary&lt;/td&gt;&lt;td&gt;Lag spikes during loss window, primary unaffected&lt;/td&gt;&lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;!-- ═══════════════════════════════════ --&gt;
&lt;h2 id=&quot;section10&quot;&gt;10. Lag Under Active Data Guard (ADG Read Workload)&lt;/h2&gt;
&lt;p&gt;
  Active Data Guard introduces an additional lag risk: read queries on the standby compete with MRP for I/O bandwidth. In a busy ADG reporting workload, MRP can be starved of the I/O it needs to apply redo.
&lt;/p&gt;

&lt;div class=&quot;code-container&quot;&gt;
  &lt;div class=&quot;code-header&quot;&gt;
    &lt;span class=&quot;code-label&quot;&gt;SQL, Monitor ADG Read vs MRP Apply I/O Competition&lt;/span&gt;
    &lt;button class=&quot;copy-btn&quot; onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;
  &lt;/div&gt;
  &lt;div class=&quot;code-block&quot;&gt;-- Check open mode on standby (ADG = READ ONLY WITH APPLY)
SELECT open_mode,
       database_role,
       db_unique_name
FROM   v$database;

-- Active read sessions vs MRP on standby
SELECT s.type,
       s.status,
       COUNT(*)  AS session_count
FROM   v$session s
WHERE  s.type = &#39;USER&#39;
OR     s.program LIKE &#39;%MRP%&#39;
GROUP  BY s.type, s.status;

-- Apply lag while ADG read load is active
SELECT name,
       value,
       time_computed
FROM   v$dataguard_stats
WHERE  name IN (&#39;transport lag&#39;, &#39;apply lag&#39;)
ORDER  BY name;&lt;/div&gt;
&lt;/div&gt;

&lt;!-- ═══════════════════════════════════ --&gt;
&lt;h2 id=&quot;section11&quot;&gt;11. Proactive Lag Monitoring&lt;/h2&gt;
&lt;p&gt;Build proactive monitoring that catches lag before it becomes an incident. Run this query every 5 minutes from your monitoring system.&lt;/p&gt;

&lt;div class=&quot;code-container&quot;&gt;
  &lt;div class=&quot;code-header&quot;&gt;
    &lt;span class=&quot;code-label&quot;&gt;SQL, Data Guard Lag Monitoring Alert Query&lt;/span&gt;
    &lt;button class=&quot;copy-btn&quot; onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;
  &lt;/div&gt;
  &lt;div class=&quot;code-block&quot;&gt;-- Lag monitoring with alert thresholds (run on PRIMARY every 5 min)
SELECT db_unique_name,
       name                                         AS metric,
       value                                        AS lag_value,
       CASE
           WHEN name = &#39;transport lag&#39;
                AND TO_DSINTERVAL(value) &amp;gt; INTERVAL &#39;0 00:00:30&#39; HOUR TO SECOND
           THEN &#39;ALERT: Transport lag exceeds 30 seconds&#39;
           WHEN name = &#39;apply lag&#39;
                AND TO_DSINTERVAL(value) &amp;gt; INTERVAL &#39;0 00:02:00&#39; HOUR TO SECOND
           THEN &#39;ALERT: Apply lag exceeds 2 minutes&#39;
           ELSE &#39;OK&#39;
       END                                          AS alert_status,
       time_computed
FROM   v$dataguard_stats
WHERE  name IN (&#39;transport lag&#39;, &#39;apply lag&#39;)
ORDER  BY name;

-- Sequence gap detection (run on PRIMARY)
-- Any rows = immediate action required
SELECT thread#,
       low_sequence#,
       high_sequence#
FROM   v$archive_gap
ORDER  BY thread#;

-- DGMGRL health check (run from broker CLI)
-- dgmgrl / &quot;show configuration&quot;
-- dgmgrl / &quot;validate database verbose standby_db&quot;&lt;/div&gt;
&lt;/div&gt;

&lt;!-- ═══════════════════════════════════ --&gt;
&lt;h2 id=&quot;section12&quot;&gt;12. FAQ&lt;/h2&gt;

&lt;div class=&quot;faq-item&quot;&gt;
  &lt;div class=&quot;faq-question&quot;&gt;Transport lag shows zero but apply lag is 2 hours. What is happening?&lt;/div&gt;
  &lt;div class=&quot;faq-answer&quot;&gt;
    Transport lag of zero means redo is arriving at the standby immediately. The network and primary are fine. Apply lag of 2 hours means MRP is 2 hours behind applying what it has already received. This is a pure standby-side problem. Check MRP parallel degree, standby I/O performance, RMAN backup scheduling, and whether ADG read workload is starving MRP. Do not look at the network for this pattern.
  &lt;/div&gt;
&lt;/div&gt;

&lt;div class=&quot;faq-item&quot;&gt;
  &lt;div class=&quot;faq-question&quot;&gt;Should I increase redo log size to reduce transport lag?&lt;/div&gt;
  &lt;div class=&quot;faq-answer&quot;&gt;
    Increasing redo log size reduces log switch frequency, which smooths out the burst pattern of redo transport. However it does not reduce total redo volume, so if the problem is sustained bandwidth saturation, larger logs will not help. The sweet spot for most production systems is 500 MB to 2 GB per redo log group, switching every 10,30 minutes under normal load.
  &lt;/div&gt;
&lt;/div&gt;

&lt;div class=&quot;faq-item&quot;&gt;
  &lt;div class=&quot;faq-question&quot;&gt;Can I reduce lag without switching from SYNC to ASYNC?&lt;/div&gt;
  &lt;div class=&quot;faq-answer&quot;&gt;
    Yes. Enable redo log compression (&lt;code&gt;COMPRESSION=ENABLE&lt;/code&gt;) to reduce bandwidth by 50,70% at the cost of CPU on both sides. Upgrade network bandwidth (1 GbE to 10 GbE resolves most SYNC saturation issues). Increase redo log group count so LGWR can switch to a new group while NSS sends the previous one. Ensure SRLs are configured so MRP stays close to the arrival point.
  &lt;/div&gt;
&lt;/div&gt;

&lt;div class=&quot;faq-item&quot;&gt;
  &lt;div class=&quot;faq-question&quot;&gt;Comment DG below if you want a specific lag scenario diagnosed.&lt;/div&gt;
  &lt;div class=&quot;faq-answer&quot;&gt;
    Drop a comment with DG and describe your lag pattern: what are your transport lag and apply lag values, what is your protection mode, and what workload triggers the spike. I will give you a specific diagnostic path based on your exact scenario.
  &lt;/div&gt;
&lt;/div&gt;

&lt;!-- RELATED --&gt;
&lt;div class=&quot;related-reading&quot;&gt;
  &lt;h2 id=&quot;section13&quot;&gt;13. Related Reading from Real Production Systems&lt;/h2&gt;
  &lt;ul&gt;
    &lt;li&gt;
      &lt;a href=&quot;#&quot;&gt;Oracle Data Guard Protection Modes: Zero Data Loss Design Strategy&lt;/a&gt;
      &lt;span class=&quot;why-matters&quot;&gt;Why it matters: Protection mode selection directly determines lag behaviour. SYNC/AFFIRM vs ASYNC/NOAFFIRM settings interact directly with the lag causes described in this article.&lt;/span&gt;
    &lt;/li&gt;
    &lt;li&gt;
      &lt;a href=&quot;#&quot;&gt;Oracle Performance Engineering Guide: AWR, ASH and SQL Monitor in 19c and 23ai&lt;/a&gt;
      &lt;span class=&quot;why-matters&quot;&gt;Why it matters: AWR and ASH on both primary and standby are the primary tools for confirming lag root causes. This guide shows how to use them systematically across a Data Guard environment.&lt;/span&gt;
    &lt;/li&gt;
    &lt;li&gt;
      &lt;a href=&quot;#&quot;&gt;Oracle RAC Internals Explained: Cache Fusion and Cluster Design Lessons&lt;/a&gt;
      &lt;span class=&quot;why-matters&quot;&gt;Why it matters: RAC primaries generate redo from all nodes simultaneously. Understanding Cache Fusion helps explain why RAC primaries can generate lag-inducing redo bursts during cross-node block transfers.&lt;/span&gt;
    &lt;/li&gt;
    &lt;li&gt;
      &lt;a href=&quot;https://chetanyadavds.blogspot.com/2026/01/n8n-oracle-telegram-alerts.html&quot; target=&quot;_blank&quot;&gt;N8N Oracle Telegram Alerts: Automating Database Monitoring&lt;/a&gt;
      &lt;span class=&quot;why-matters&quot;&gt;Why it matters: The lag monitoring queries in this article should be automated. This guide shows how to schedule them and push alerts to Telegram or email when thresholds are breached.&lt;/span&gt;
    &lt;/li&gt;
  &lt;/ul&gt;
&lt;/div&gt;

&lt;!-- AUTHOR --&gt;
&lt;div class=&quot;about-author&quot;&gt;
  &lt;h2&gt;About the Author&lt;/h2&gt;
  &lt;div class=&quot;author-name&quot;&gt;Chetan Yadav&lt;/div&gt;
  &lt;p class=&quot;author-bio&quot;&gt;
    &lt;strong&gt;Chetan Yadav&lt;/strong&gt; is a &lt;strong&gt;Senior Oracle, PostgreSQL, MySQL, and Cloud DBA&lt;/strong&gt; with &lt;strong&gt;15+ years&lt;/strong&gt; of hands-on experience managing production databases across on-premises, hybrid, and cloud environments.
  &lt;/p&gt;
  &lt;p class=&quot;author-bio&quot;&gt;
    Chetan has diagnosed and resolved Data Guard lag incidents across financial, healthcare, and e-commerce production environments including the 8-hour apply gap from missing Standby Redo Logs and the firewall stateful inspection transport lag described in this article.
  &lt;/p&gt;
  &lt;p class=&quot;author-bio&quot;&gt;
    This blog focuses on &lt;strong&gt;real-world DBA problems, career growth, and practical learning&lt;/strong&gt;, not theoretical documentation or vendor marketing.
  &lt;/p&gt;
  &lt;div class=&quot;social-links&quot;&gt;
    &lt;a href=&quot;https://www.linkedin.com/in/chetanyadavvds/&quot; target=&quot;_blank&quot;&gt;LinkedIn&lt;/a&gt;
    &lt;a href=&quot;https://www.youtube.com/@levelup_careers&quot; target=&quot;_blank&quot;&gt;YouTube&lt;/a&gt;
    &lt;a href=&quot;https://www.instagram.com/levelup_careers/&quot; target=&quot;_blank&quot;&gt;Instagram&lt;/a&gt;
    &lt;a href=&quot;https://x.com/home&quot; target=&quot;_blank&quot;&gt;Twitter (X)&lt;/a&gt;
    &lt;a href=&quot;https://www.facebook.com/oracledbainfo/&quot; target=&quot;_blank&quot;&gt;Facebook&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;Newsletter&lt;/a&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;!-- POST FOOTER --&gt;
&lt;div class=&quot;post-footer&quot;&gt;
  &lt;div class=&quot;post-meta&quot;&gt;&lt;strong&gt;by Chetan Yadav&lt;/strong&gt;, March 2026&lt;/div&gt;
  &lt;div class=&quot;share-buttons&quot;&gt;
    &lt;strong&gt;Share:&lt;/strong&gt;
    &lt;a href=&quot;#&quot;&gt;Email&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;BlogThis&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;X&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;Facebook&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;Pinterest&lt;/a&gt;
  &lt;/div&gt;
  &lt;div class=&quot;tags&quot;&gt;
    &lt;strong&gt;Tags:&lt;/strong&gt;
    &lt;a href=&quot;#&quot;&gt;Data Guard Lag&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;Transport Lag&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;Apply Lag&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;Oracle Data Guard&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;SYNC ASYNC&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;MRP Apply&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;Standby Database&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;HA DR&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;Oracle 19c&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;Oracle DBA&lt;/a&gt;
  &lt;/div&gt;
&lt;/div&gt;

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

&lt;script&gt;
function copyCode(button) {
  const codeContainer = button.closest(&#39;.code-container&#39;);
  const codeBlock = codeContainer.querySelector(&#39;.code-block&#39;);
  const textArea = document.createElement(&#39;textarea&#39;);
  textArea.value = codeBlock.textContent;
  textArea.style.position = &#39;fixed&#39;;
  textArea.style.left = &#39;-9999px&#39;;
  document.body.appendChild(textArea);
  textArea.select();
  textArea.setSelectionRange(0, 99999);
  try {
    document.execCommand(&#39;copy&#39;);
    button.textContent = &#39;Copied!&#39;;
    button.classList.add(&#39;copied&#39;);
    setTimeout(() =&gt; { button.textContent = &#39;Copy&#39;; button.classList.remove(&#39;copied&#39;); }, 2000);
  } catch(err) {
    button.textContent = &#39;Failed&#39;;
    setTimeout(() =&gt; { button.textContent = &#39;Copy&#39;; }, 2000);
  }
  document.body.removeChild(textArea);
}
&lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;</content><link rel='replies' type='application/atom+xml' href='http://chetanyadavds.blogspot.com/feeds/6841825807477234827/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://chetanyadavds.blogspot.com/2026/04/why-data-guard-lag-happens-production-sync-io-network.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/436196721812840248/posts/default/6841825807477234827'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/436196721812840248/posts/default/6841825807477234827'/><link rel='alternate' type='text/html' href='http://chetanyadavds.blogspot.com/2026/04/why-data-guard-lag-happens-production-sync-io-network.html' title='Why Data Guard Lag Happens in Production: Sync, I/O and Network Deep Dive'/><author><name>Chetan Yadav</name><uri>http://www.blogger.com/profile/02557500437758632199</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiE0TgifWM4l1b3sy_cK2y41bpqyfY1U25-p5IBKkSg8pJLFRvjYr_kF7W_MgsYdc21DutWF9H6qlShQDQspQLbZEQ5CSUA51Wp6Mh9l5Ygd4NPSuQyqwSMrKitCWwSLr0oHBg9TGjxAvAM7TTkkehHLL1MFWg0wSb31CxywQxIokg9pg/s1600/IMG-20251013-WA0038.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/a/AVvXsEiFNcrTQ_LvFFgx5wDJnJcN4Taq7yJJa8T5gLWNlrV_atkVDuVaX1pDdy0vujaExOLOFm-T_wKHlHe7a7Vbv1OYgUsna-xg11j5YirJZVVRP__mGIBkSXVgKFr2b_7b-ssvpHEqSK4KsCNuxFGQm-ql5s0gPKYdyxS-WnrlBMHprr9aBD0xB2JxbrYbE9U=s72-c" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-436196721812840248.post-2553198849669518892</id><published>2026-04-02T11:50:00.001+05:30</published><updated>2026-04-02T11:50:00.107+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="ATS Optimisation"/><category scheme="http://www.blogger.com/atom/ns#" term="Career Tips"/><category scheme="http://www.blogger.com/atom/ns#" term="DBA Career"/><category scheme="http://www.blogger.com/atom/ns#" term="Fresher Resume"/><category scheme="http://www.blogger.com/atom/ns#" term="Get Shortlisted"/><category scheme="http://www.blogger.com/atom/ns#" term="Impact Writing"/><category scheme="http://www.blogger.com/atom/ns#" term="Interview Tips"/><category scheme="http://www.blogger.com/atom/ns#" term="Job Search 2026"/><category scheme="http://www.blogger.com/atom/ns#" term="Resume Writing"/><title type='text'>How to Create a Resume That Actually Gets Shortlisted in 2026</title><content type='html'>
&lt;html lang=&quot;en&quot;&gt;
&lt;head&gt;
&lt;meta charset=&quot;UTF-8&quot;&gt;&lt;/meta&gt;
&lt;title&gt;How to Create a Resume That Actually Gets Shortlisted in 2026&lt;/title&gt;
&lt;meta content=&quot;width=device-width, initial-scale=1.0&quot; name=&quot;viewport&quot;&gt;&lt;/meta&gt;
&lt;meta content=&quot;How to write a resume that gets shortlisted in 2026: ATS optimisation, impact writing formula, section structure, common mistakes and before-submit checklist for students and freshers.&quot; name=&quot;description&quot;&gt;&lt;/meta&gt;
&lt;link href=&quot;data:image/svg+xml,%3Csvg xmlns=&#39;http://www.w3.org/2000/svg&#39; viewBox=&#39;0 0 100 100&#39;%3E%3Cdefs%3E%3ClinearGradient id=&#39;g&#39; x1=&#39;0%25&#39; y1=&#39;0%25&#39; x2=&#39;100%25&#39; y2=&#39;100%25&#39;%3E%3Cstop offset=&#39;0%25&#39; style=&#39;stop-color:%232563eb&#39;/%3E%3Cstop offset=&#39;100%25&#39; style=&#39;stop-color:%231d4ed8&#39;/%3E%3C/linearGradient%3E%3C/defs%3E%3Crect width=&#39;100&#39; height=&#39;100&#39; rx=&#39;20&#39; fill=&#39;url(%23g)&#39;/%3E%3Cpath d=&#39;M25,20 L75,20 L75,80 L25,80 Z&#39; fill=&#39;none&#39; stroke=&#39;white&#39; stroke-width=&#39;6&#39;/%3E%3Cpath d=&#39;M35,35 L65,35 M35,48 L65,48 M35,61 L55,61&#39; stroke=&#39;white&#39; stroke-width=&#39;4&#39; stroke-linecap=&#39;round&#39;/%3E%3C/svg%3E&quot; rel=&quot;icon&quot; type=&quot;image/svg+xml&quot;&gt;&lt;/link&gt;
&lt;style&gt;
*{margin:0;padding:0;box-sizing:border-box}
body{background:#fff;color:#333;font-family:Arial,Helvetica,sans-serif;font-size:16px;line-height:1.7}

.post-title,.entry-title,h1.post-title,h3.post-title{display:none!important}

.hero-header{background:linear-gradient(135deg,#1e3a5f 0%,#1d4ed8 50%,#1e3a5f 100%);color:#fff;padding:60px 40px;width:100%}
.hero-header-content{max-width:1200px;margin:0 auto;padding:0 20px}
.hero-header h1{font-size:42px;font-weight:700;color:#fff;line-height:1.3;margin-bottom:20px}
.hero-subtitle{font-size:20px;font-weight:300;color:#bfdbfe;opacity:.95;margin-bottom:30px}
.hero-meta{display:flex;gap:30px;align-items:center;flex-wrap:wrap;font-size:15px;color:#93c5fd}
.hero-meta-item{display:flex;align-items:center;gap:8px}

.hero-image-section{width:100%;margin:0;padding:0;overflow:hidden;background:#f8fafc}
.hero-image-section img{width:100%;height:auto;display:block;max-height:780px;object-fit:contain;padding:20px 0}

.main-content-wrapper{width:100%;background:#fff}
.container{max-width:800px;margin:0 auto;padding:30px 20px;background:#fff}

.reading-time-badge{display:inline-block;background:linear-gradient(135deg,#2563eb 0%,#1d4ed8 100%);color:#fff;padding:12px 28px;border-radius:50px;font-size:15px;font-weight:500;margin-bottom:30px;box-shadow:0 4px 12px rgba(37,99,235,.3)}
.page-tagline{color:#666;font-size:15px;font-style:italic;text-align:center;margin-bottom:35px}

.read-more-link{display:block;margin:28px 0 8px}
.read-more-link a{color:#2563eb;font-size:15px;text-decoration:none;font-style:italic}
.read-more-link a:hover{text-decoration:underline}

.toc{background:#eff6ff;border-left:4px solid #2563eb;padding:28px 32px;margin:35px 0;border-radius:8px;box-shadow:0 1px 3px rgba(0,0,0,.05)}
.toc-header{display:flex;align-items:center;gap:10px;font-size:24px;font-weight:bold;color:#000;margin-bottom:20px}
.toc ol{margin-left:20px;line-height:1.9;counter-reset:toc-counter;list-style:none}
.toc ol li{counter-increment:toc-counter;margin:12px 0;font-size:16px;padding-bottom:12px;border-bottom:1px solid #bfdbfe;transition:all .2s ease}
.toc ol li:last-child{border-bottom:none}
.toc ol li:hover{padding-left:8px}
.toc ol li::before{content:counter(toc-counter) &quot;. &quot;;font-weight:600;color:#2563eb;margin-right:8px}
.toc a{color:#2563eb;text-decoration:none}
.toc a:hover{text-decoration:underline}

h2{font-size:28px;font-weight:bold;color:#000;margin:45px 0 20px;line-height:1.3}
h3{font-size:22px;font-weight:600;color:#333;margin:30px 0 15px}
p{margin:16px 0;color:#333;line-height:1.7}
ul,ol{margin:18px 0 18px 35px;color:#333;line-height:1.7}
ul li,ol li{margin:10px 0}
strong{font-weight:bold;color:#333}
em{font-style:italic}
a{color:#2563eb;text-decoration:none}
a:hover{text-decoration:underline}

.tag-good{display:inline-block;background:#e6f4ea;color:#137333;border:1px solid #a8d5b5;border-radius:4px;padding:1px 8px;font-size:13px;font-weight:600;margin-right:6px;vertical-align:middle}
.tag-bad{display:inline-block;background:#fce8e6;color:#c5221f;border:1px solid #f5a8a4;border-radius:4px;padding:1px 8px;font-size:13px;font-weight:600;margin-right:6px;vertical-align:middle}
.tag-warn{display:inline-block;background:#fffbeb;color:#92400e;border:1px solid #fcd34d;border-radius:4px;padding:1px 8px;font-size:13px;font-weight:600;margin-right:6px;vertical-align:middle}
.tag-rule{display:inline-block;background:#eff6ff;color:#1d4ed8;border:1px solid #93c5fd;border-radius:4px;padding:1px 8px;font-size:13px;font-weight:600;margin-right:6px;vertical-align:middle}

.code-container{position:relative;margin:24px 0}
.code-header{background:#1e3a5f;color:#fff;padding:10px 16px;border-radius:8px 8px 0 0;display:flex;justify-content:space-between;align-items:center;font-size:14px}
.code-label{font-weight:500}
.copy-btn{background:#2563eb;color:#fff;border:none;padding:6px 14px;border-radius:5px;cursor:pointer;font-size:13px;transition:background .2s;font-family:Arial,sans-serif}
.copy-btn:hover{background:#1d4ed8}
.copy-btn.copied{background:#10b981}
.code-block{background:#f8f9fa;border:1px solid #e0e0e0;border-radius:0 0 8px 8px;padding:18px 20px;margin:0;overflow-x:auto;font-family:&#39;Courier New&#39;,Courier,monospace;font-size:14px;line-height:1.7;white-space:pre;tab-size:4}
code{background:#f8f9fa;padding:2px 6px;border-radius:3px;font-family:&#39;Courier New&#39;,monospace;font-size:14px;color:#2563eb}

.info-box{background:#fffbeb;border-left:4px solid #f59e0b;padding:18px 22px;border-radius:0 8px 8px 0;margin:25px 0}
.info-box strong{color:#92400e}
.tip-box{background:#eff6ff;border-left:4px solid #2563eb;padding:18px 22px;border-radius:0 8px 8px 0;margin:25px 0}
.tip-box strong{color:#1e3a5f}
.incident-box{background:#fef2f2;border-left:4px solid #ef4444;padding:18px 22px;border-radius:0 8px 8px 0;margin:25px 0}
.incident-box strong{color:#991b1b}
.success-box{background:#f0fdf4;border-left:4px solid #22c55e;padding:18px 22px;border-radius:0 8px 8px 0;margin:25px 0}
.success-box strong{color:#15803d}

/* BEFORE / AFTER comparison blocks */
.compare-wrap{display:grid;grid-template-columns:1fr 1fr;gap:16px;margin:20px 0}
.compare-bad{background:#fef2f2;border:1px solid #fca5a5;border-radius:8px;padding:16px}
.compare-good{background:#f0fdf4;border:1px solid #86efac;border-radius:8px;padding:16px}
.compare-label{font-weight:700;font-size:13px;margin-bottom:8px;letter-spacing:.04em}
.compare-label.bad{color:#991b1b}
.compare-label.good{color:#15803d}
.compare-text{font-size:14px;line-height:1.6;color:#333;font-style:italic}
@media(max-width:600px){.compare-wrap{grid-template-columns:1fr}}

table{width:100%;border-collapse:collapse;margin:25px 0;background:#fff;border:1px solid #e0e0e0}
thead{background:#f8f9fa}
th{padding:12px;text-align:left;font-weight:bold;color:#000;border-bottom:2px solid #e0e0e0;font-size:15px}
td{padding:12px;border-bottom:1px solid #e0e0e0;color:#333;font-size:15px}
tr:last-child td{border-bottom:none}
tbody tr:hover{background:#eff6ff}

.checklist{background:#eff6ff;border:1px solid #bfdbfe;border-radius:8px;padding:24px 28px;margin:18px 0}
.checklist h3{margin-top:0;color:#1e293b;font-size:18px}
.checklist ul{list-style:none;margin-left:0}
.checklist ul li{padding:6px 0 6px 28px;position:relative}
.checklist ul li::before{content:&quot;&quot;;position:absolute;left:4px;top:13px;width:10px;height:10px;background:#2563eb;border-radius:50%}

.faq-item{margin:25px 0;border-bottom:1px solid #e5e7eb;padding-bottom:25px}
.faq-item:last-child{border-bottom:none}
.faq-question{font-weight:600;color:#000;font-size:17px;margin-bottom:10px}
.faq-answer{color:#333;line-height:1.7}

.related-reading{background:#f8f9fa;border:1px solid #e0e0e0;border-radius:8px;padding:30px;margin:40px 0}
.related-reading h2{margin-top:0}
.related-reading ul{margin-left:25px}
.related-reading li{margin:18px 0;line-height:1.7}
.related-reading .why-matters{color:#666;font-size:15px;margin-top:5px;display:block}

.about-author{background:#fffbf0;border:1px solid #e0e0e0;border-radius:8px;padding:30px;margin:40px 0}
.about-author h2{margin-top:0;font-size:28px}
.author-name{font-size:20px;font-weight:bold;color:#000;margin-bottom:10px}
.author-bio{color:#333;line-height:1.7;margin-bottom:15px}
.social-links{margin-top:20px}
.social-links a{display:inline-block;margin-right:20px;color:#2563eb;text-decoration:none;font-size:16px}
.social-links a:hover{text-decoration:underline}

.post-footer{border-top:1px solid #e0e0e0;padding-top:25px;margin-top:40px;color:#666;font-size:15px}
.post-meta{margin-bottom:15px}
.share-buttons{margin:20px 0}
.share-buttons a{display:inline-block;margin-right:15px;color:#2563eb;font-size:14px}
.tags{margin-top:20px}
.tags strong{color:#666;font-weight:normal}
.tags a{color:#2563eb;margin-right:10px;font-size:14px}

@media(max-width:768px){
  .hero-header{padding:40px 24px}
  .hero-header h1{font-size:28px}
  .hero-subtitle{font-size:16px}
  .hero-meta{gap:20px}
  h2{font-size:24px}
  h3{font-size:20px}
  table{font-size:13px}
  th,td{padding:9px}
  .code-block{font-size:12px}
}
&lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;

&lt;div class=&quot;hero-header&quot;&gt;
  &lt;div class=&quot;hero-header-content&quot;&gt;
    &lt;h1&gt;How to Create a Resume That Actually Gets Shortlisted in 2026&lt;/h1&gt;
    &lt;div class=&quot;hero-subtitle&quot;&gt;Generic Resumes Get Rejected Instantly. Here Is What Actually Works.&lt;/div&gt;
    &lt;div class=&quot;hero-meta&quot;&gt;
      &lt;div class=&quot;hero-meta-item&quot;&gt;02 March 2026&lt;/div&gt;
      &lt;div class=&quot;hero-meta-item&quot;&gt; Chetan Yadav, Senior Oracle &amp;amp; Cloud DBA&lt;/div&gt;
      &lt;div class=&quot;hero-meta-item&quot;&gt;⏱️ 14 - 16 min read&lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;div class=&quot;main-content-wrapper&quot;&gt;
&lt;div class=&quot;container&quot;&gt;

&lt;div class=&quot;reading-time-badge&quot;&gt;⏱️ Estimated Reading Time: 14,16 minutes&lt;/div&gt;
&lt;div class=&quot;page-tagline&quot;&gt;ATS Optimisation, Impact Writing, Section Structure, Common Mistakes, Before-Submit Checklist&lt;/div&gt;

&lt;div class=&quot;hero-image-section&quot;&gt;
  &lt;img alt=&quot;Resume structure framework for 2026 showing ATS optimisation impact writing formula common mistakes and before submit checklist&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEj6gZLhkRp2v6euhOvtB9-5VKeGAl9kkJLindICnkMKe1ti8oyywF2-fXzmPJTb4xS2qNNQXvoT5vgrBxTm9PmtYP3G0aPhk0v61-LJehBVgVZcDyYr49ZRGqn5sh5zKAshl4DaXh3kHY70gQ_zfaZdkb2b6dJp7bl50OKs9_qc-MxJPkiZ0mXOvAF8AY4&quot; /&gt;
&lt;/div&gt;

&lt;div class=&quot;info-box&quot; style=&quot;margin-top: 28px;&quot;&gt;
  &lt;strong&gt; Who This Guide Is For&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;
  &lt;strong&gt;Final year students&lt;/strong&gt; writing their first resume, &lt;strong&gt;freshers&lt;/strong&gt; who have applied to 50 jobs and heard nothing back, &lt;strong&gt;mid-level professionals&lt;/strong&gt; switching roles or industries, and anyone who has been told their resume is &quot;fine&quot; but it keeps getting rejected. This guide covers the real mechanics of how resumes are screened in 2026 and what you must do differently.
&lt;/div&gt;

&lt;p&gt;
  I have reviewed hundreds of resumes over 15 years of hiring, mentoring, and career coaching within the technology industry. The same mistakes appear in almost every rejected resume. Not spelling errors. Not bad formatting. The real problem is almost always this: the resume describes what the person did instead of proving what the person achieved.
&lt;/p&gt;
&lt;p&gt;
  A resume is not a job description of your past roles. It is a marketing document with one purpose: to get you into the interview room. Every word, every bullet point, every section must serve that purpose. When a recruiter spends 8 seconds on your resume, you have 8 seconds to make them believe you can solve their problem. Generic resumes fail this test instantly.
&lt;/p&gt;
&lt;p&gt;
  This guide will show you the exact structure, the ATS rules, the impact writing formula, the before-submit checklist, and the specific mistakes that are costing you interviews right now.
&lt;/p&gt;

&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;

&lt;div class=&quot;toc&quot;&gt;
  &lt;div class=&quot;toc-header&quot;&gt;&lt;span&gt;&lt;/span&gt; Table of Contents&lt;/div&gt;
  &lt;ol&gt;
    &lt;li&gt;&lt;a href=&quot;#section1&quot;&gt;How Your Resume Is Actually Screened in 2026&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#section2&quot;&gt;ATS Optimisation: What Applicant Tracking Systems Look For&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#section3&quot;&gt;Section 1: Header (The First Three Lines)&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#section4&quot;&gt;Section 2: Professional Summary (Four Lines That Sell You)&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#section5&quot;&gt;Section 3: Skills Section (Where ATS Keywords Live)&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#section6&quot;&gt;Section 4: Experience (The Most Important Section)&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#section7&quot;&gt;The Impact Writing Formula: Action, What, Result&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#section8&quot;&gt;Section 5: Education and Certifications&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#section9&quot;&gt;The 15 Mistakes That Get You Rejected&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#section10&quot;&gt;Resume for Freshers and Final Year Students&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#section11&quot;&gt;Before-Submit Checklist&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#section12&quot;&gt;FAQ&lt;/a&gt;&lt;/li&gt;
  &lt;/ol&gt;
&lt;/div&gt;

&lt;!-- ════════════════════════════════════════ --&gt;
&lt;h2 id=&quot;section1&quot;&gt;1. How Your Resume Is Actually Screened in 2026&lt;/h2&gt;
&lt;p&gt;
  Most job seekers imagine a recruiter carefully reading every word of their resume. The reality is a two-stage filter where most resumes are eliminated before any human reads them.
&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;&lt;tr&gt;&lt;th&gt;Stage&lt;/th&gt;&lt;th&gt;Who&lt;/th&gt;&lt;th&gt;Time&lt;/th&gt;&lt;th&gt;What They Are Looking For&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;&lt;td&gt;&lt;strong&gt;Stage 1&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;ATS Software&lt;/td&gt;&lt;td&gt;Seconds&lt;/td&gt;&lt;td&gt;Keywords, file format, section headers, structure&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;&lt;strong&gt;Stage 2&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Recruiter&lt;/td&gt;&lt;td&gt;6,8 seconds&lt;/td&gt;&lt;td&gt;Role match, impact, clarity, years of experience&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;&lt;strong&gt;Stage 3&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Hiring Manager&lt;/td&gt;&lt;td&gt;1,2 minutes&lt;/td&gt;&lt;td&gt;Achievements, technical depth, career trajectory&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;&lt;strong&gt;Stage 4&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Interview Panel&lt;/td&gt;&lt;td&gt;45,60 minutes&lt;/td&gt;&lt;td&gt;Only 2,3% of applicants reach this stage&lt;/td&gt;&lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;div class=&quot;tip-box&quot;&gt;
  &lt;strong&gt;The Brutal Reality:&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;
  For a popular job posting that receives 500 applications, roughly 350 are eliminated by ATS before any human sees them. Of the remaining 150 that reach the recruiter, 130 are rejected in the 8-second scan. Only 20 resumes reach the hiring manager. Your resume must survive two filters before a qualified human even reads it. This is why generic resumes fail.
&lt;/div&gt;

&lt;!-- ════════════════════════════════════════ --&gt;
&lt;h2 id=&quot;section2&quot;&gt;2. ATS Optimisation: What Applicant Tracking Systems Look For&lt;/h2&gt;
&lt;p&gt;
  Applicant Tracking Systems (ATS) are software platforms that parse your resume into a structured database record. The software scores your resume against the job description based on keyword matching, section identification, and format compatibility. If your score falls below a threshold, a human never sees your resume.
&lt;/p&gt;

&lt;h3&gt;ATS Rules You Must Follow&lt;/h3&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;span class=&quot;tag-rule&quot;&gt;Rule&lt;/span&gt; &lt;strong&gt;File format:&lt;/strong&gt; Submit PDF unless the job posting specifically asks for DOCX. Some older ATS systems cannot parse PDF correctly, so always re-read the application instructions.&lt;/li&gt;
  &lt;li&gt;&lt;span class=&quot;tag-rule&quot;&gt;Rule&lt;/span&gt; &lt;strong&gt;No tables or columns:&lt;/strong&gt; ATS reads left to right, top to bottom. A two-column layout causes the ATS to read across both columns in the wrong order, scrambling your content.&lt;/li&gt;
  &lt;li&gt;&lt;span class=&quot;tag-rule&quot;&gt;Rule&lt;/span&gt; &lt;strong&gt;Standard section headers:&lt;/strong&gt; Use exactly these words: Experience, Education, Skills, Certifications, Summary. Do not use creative headers like &quot;My Journey&quot; or &quot;What I Bring.&quot;&lt;/li&gt;
  &lt;li&gt;&lt;span class=&quot;tag-rule&quot;&gt;Rule&lt;/span&gt; &lt;strong&gt;No text boxes or graphics:&lt;/strong&gt; ATS software cannot read content inside text boxes, headers/footers, or image-based elements. Put everything in the main document body.&lt;/li&gt;
  &lt;li&gt;&lt;span class=&quot;tag-rule&quot;&gt;Rule&lt;/span&gt; &lt;strong&gt;Keyword matching:&lt;/strong&gt; Copy the exact terminology from the job description. If the JD says &quot;Oracle Real Application Clusters,&quot; do not just write &quot;Oracle RAC&quot; on your resume. Write both.&lt;/li&gt;
  &lt;li&gt;&lt;span class=&quot;tag-rule&quot;&gt;Rule&lt;/span&gt; &lt;strong&gt;Font:&lt;/strong&gt; Arial, Calibri, or Helvetica. 10,12pt for body text. Decorative fonts render incorrectly in many ATS systems.&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;success-box&quot;&gt;
  &lt;strong&gt;Free ATS Testing Tools:&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;
  Before submitting any application, test your resume using &lt;strong&gt;Jobscan&lt;/strong&gt; (jobscan.co) or &lt;strong&gt;Resume Worded&lt;/strong&gt; (resumeworded.com). Paste the job description and your resume and they show you your keyword match score and ATS compatibility issues. Target a match score of 75% or above before submitting.
&lt;/div&gt;

&lt;!-- ════════════════════════════════════════ --&gt;
&lt;h2 id=&quot;section3&quot;&gt;3. Section 1: Header (The First Three Lines)&lt;/h2&gt;
&lt;p&gt;
  The header is the first thing every reader sees. It must communicate who you are and how to reach you in under three seconds. Nothing else.
&lt;/p&gt;

&lt;div class=&quot;code-container&quot;&gt;
  &lt;div class=&quot;code-header&quot;&gt;
    &lt;span class=&quot;code-label&quot;&gt;Template, Resume Header (Copy and Adapt)&lt;/span&gt;
    &lt;button class=&quot;copy-btn&quot; onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;
  &lt;/div&gt;
  &lt;div class=&quot;code-block&quot;&gt;CHETAN YADAV
Senior Oracle DBA, Cloud Architect, OCI Specialist
+91-XXXXXXXXXX  |  chetan@email.com  |  linkedin.com/in/chetanyadavvds
Mumbai, India  |  Open to Remote&lt;/div&gt;
&lt;/div&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;span class=&quot;tag-good&quot;&gt;Include&lt;/span&gt; Full name (large, bold), target job title, phone, email, LinkedIn URL, city and country&lt;/li&gt;
  &lt;li&gt;&lt;span class=&quot;tag-good&quot;&gt;Include&lt;/span&gt; GitHub or portfolio link if relevant to the role (software engineers, data scientists)&lt;/li&gt;
  &lt;li&gt;&lt;span class=&quot;tag-bad&quot;&gt;Remove&lt;/span&gt; Full address (street and postal code), date of birth, marital status, nationality, religion&lt;/li&gt;
  &lt;li&gt;&lt;span class=&quot;tag-bad&quot;&gt;Remove&lt;/span&gt; Photograph (in most countries this invites unconscious bias and ATS cannot process it)&lt;/li&gt;
  &lt;li&gt;&lt;span class=&quot;tag-bad&quot;&gt;Remove&lt;/span&gt; &quot;Curriculum Vitae&quot; or &quot;Resume&quot; as a header title (waste of valuable space)&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;tip-box&quot;&gt;
  &lt;strong&gt;Job Title Tip:&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;
  The title on your resume header should match the job title you are applying for, not necessarily your current job title. If the job description says &quot;Senior Database Engineer&quot; and you are currently a &quot;Senior DBA,&quot; use &quot;Senior Database Engineer&quot; in your header. ATS systems keyword-match job titles. This is not dishonest, it is accurate positioning.
&lt;/div&gt;

&lt;!-- ════════════════════════════════════════ --&gt;
&lt;h2 id=&quot;section4&quot;&gt;4. Section 2: Professional Summary (Four Lines That Sell You)&lt;/h2&gt;
&lt;p&gt;
  The professional summary is the most valuable piece of real estate on your resume. A recruiter who spends 8 seconds on your resume will almost certainly read the summary. Make those four lines earn your interview.
&lt;/p&gt;

&lt;div class=&quot;code-container&quot;&gt;
  &lt;div class=&quot;code-header&quot;&gt;
    &lt;span class=&quot;code-label&quot;&gt;Template, Professional Summary (Four-Line Formula)&lt;/span&gt;
    &lt;button class=&quot;copy-btn&quot; onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;
  &lt;/div&gt;
  &lt;div class=&quot;code-block&quot;&gt;Line 1 - Experience + Domain + Level:
&quot;Senior Oracle DBA with 15+ years of experience managing mission-critical
production databases across finance, healthcare, and e-commerce sectors.&quot;

Line 2 - Core Technical Skills Relevant to This Role:
&quot;Specialising in Oracle RAC, Data Guard, GoldenGate, OCI Autonomous Database,
performance tuning, and disaster recovery architecture.&quot;

Line 3 - Biggest Achievement (with a number):
&quot;Reduced database downtime by 94% and cut infrastructure costs by 38% through
implementing a 4-node RAC cluster with automated Data Guard failover.&quot;

Line 4 - What You Are Seeking:
&quot;Seeking a Principal DBA or Cloud Architect role to design high-availability
database solutions at enterprise scale.&quot;&lt;/div&gt;
&lt;/div&gt;

&lt;div class=&quot;incident-box&quot;&gt;
  &lt;strong&gt;What NOT to Write in Your Summary:&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;
  &quot;A hardworking and dedicated professional seeking a challenging opportunity to utilise my skills and grow with a reputed organisation.&quot;&lt;br /&gt;&lt;br /&gt;
  This says nothing. Every applicant believes they are hardworking. Every applicant wants to grow. This generic summary signals to the recruiter that you could not think of a single specific thing to say about yourself. Recruiters stop reading immediately.
&lt;/div&gt;

&lt;!-- ════════════════════════════════════════ --&gt;
&lt;h2 id=&quot;section5&quot;&gt;5. Section 3: Skills Section (Where ATS Keywords Live)&lt;/h2&gt;
&lt;p&gt;
  The skills section exists for one primary purpose: ATS keyword matching. Structure it so that every technical term the job description uses appears somewhere in this section.
&lt;/p&gt;

&lt;div class=&quot;code-container&quot;&gt;
  &lt;div class=&quot;code-header&quot;&gt;
    &lt;span class=&quot;code-label&quot;&gt;Template, Skills Section Format (Grouped by Category)&lt;/span&gt;
    &lt;button class=&quot;copy-btn&quot; onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;
  &lt;/div&gt;
  &lt;div class=&quot;code-block&quot;&gt;SKILLS

Databases:         Oracle 19c/23ai, MySQL 8.0, PostgreSQL 15, MongoDB
Cloud Platforms:   OCI (Oracle Cloud Infrastructure), AWS RDS, Azure SQL
HA/DR:             Oracle RAC, Data Guard, GoldenGate, RMAN, ASM
Performance:       AWR, ASH, SQL Monitor, Execution Plans, Index Design
Programming:       SQL, PL/SQL, Python, Bash/Shell Scripting
Tools:             Git, Jenkins, Terraform, Ansible, JIRA, Confluence
Operating Systems: Oracle Linux 8, RHEL 8/9, Windows Server 2019&lt;/div&gt;
&lt;/div&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;span class=&quot;tag-good&quot;&gt;Do&lt;/span&gt; Group skills by category with a colon, not bullet points or tables&lt;/li&gt;
  &lt;li&gt;&lt;span class=&quot;tag-good&quot;&gt;Do&lt;/span&gt; Include both the acronym and the full term: &lt;code&gt;RAC (Real Application Clusters)&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;&lt;span class=&quot;tag-good&quot;&gt;Do&lt;/span&gt; Match exact terms from the job description, including capitalisation&lt;/li&gt;
  &lt;li&gt;&lt;span class=&quot;tag-bad&quot;&gt;Avoid&lt;/span&gt; Skill rating bars, stars, or percentage indicators (ATS cannot read them)&lt;/li&gt;
  &lt;li&gt;&lt;span class=&quot;tag-bad&quot;&gt;Avoid&lt;/span&gt; Listing soft skills here (communication, teamwork) — they belong in experience bullets&lt;/li&gt;
  &lt;li&gt;&lt;span class=&quot;tag-bad&quot;&gt;Avoid&lt;/span&gt; Listing skills you cannot discuss confidently in an interview&lt;/li&gt;
&lt;/ul&gt;

&lt;!-- ════════════════════════════════════════ --&gt;
&lt;h2 id=&quot;section6&quot;&gt;6. Section 4: Experience (The Most Important Section)&lt;/h2&gt;
&lt;p&gt;
  The experience section is where resumes are won or lost. Most candidates list their job duties. Shortlisted candidates list their achievements. This is the single most important distinction between a resume that gets calls and one that does not.
&lt;/p&gt;

&lt;h3&gt;Experience Entry Format&lt;/h3&gt;
&lt;div class=&quot;code-container&quot;&gt;
  &lt;div class=&quot;code-header&quot;&gt;
    &lt;span class=&quot;code-label&quot;&gt;Template, Experience Entry Structure&lt;/span&gt;
    &lt;button class=&quot;copy-btn&quot; onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;
  &lt;/div&gt;
  &lt;div class=&quot;code-block&quot;&gt;SENIOR ORACLE DBA                                    Mar 2021, Present
TechCorp Financial Services, Mumbai

, Designed and implemented a 4-node Oracle 19c RAC cluster on OCI,
  reducing planned downtime from 8 hours to under 30 seconds per quarter.

, Tuned 47 high-impact SQL queries identified through AWR analysis,
  reducing peak-hour CPU utilisation from 94% to 61%.

, Automated RMAN backup validation using PL/SQL and Shell scripts,
  cutting backup verification time from 4 hours to 22 minutes.

, Migrated 8.2 TB Oracle database from on-premises to OCI Autonomous
  Database with zero data loss using GoldenGate replication.

, Mentored 3 junior DBAs, all promoted within 18 months.&lt;/div&gt;
&lt;/div&gt;

&lt;h3&gt;Rules for Experience Bullets&lt;/h3&gt;
&lt;ul&gt;
  &lt;li&gt;Start every bullet with a &lt;strong&gt;strong past-tense action verb&lt;/strong&gt;: Designed, Built, Reduced, Increased, Migrated, Automated, Led, Implemented, Optimised&lt;/li&gt;
  &lt;li&gt;Write &lt;strong&gt;3,5 bullets per role&lt;/strong&gt;. Most recent role gets the most bullets&lt;/li&gt;
  &lt;li&gt;Every bullet must show &lt;strong&gt;impact, not activity&lt;/strong&gt;. The difference is a number&lt;/li&gt;
  &lt;li&gt;List roles in &lt;strong&gt;reverse chronological order&lt;/strong&gt; (most recent first)&lt;/li&gt;
  &lt;li&gt;Include exact &lt;strong&gt;month and year&lt;/strong&gt; for all dates, right-aligned&lt;/li&gt;
&lt;/ul&gt;

&lt;!-- ════════════════════════════════════════ --&gt;
&lt;h2 id=&quot;section7&quot;&gt;7. The Impact Writing Formula: Action, What, Result&lt;/h2&gt;
&lt;p&gt;
  Every experience bullet should follow this three-part formula. If a bullet is missing any part, it is weaker than it should be.
&lt;/p&gt;

&lt;div class=&quot;code-container&quot;&gt;
  &lt;div class=&quot;code-header&quot;&gt;
    &lt;span class=&quot;code-label&quot;&gt;Impact Formula, Action + What + Result (with Number)&lt;/span&gt;
    &lt;button class=&quot;copy-btn&quot; onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;
  &lt;/div&gt;
  &lt;div class=&quot;code-block&quot;&gt;Formula:  [Action Verb] + [What You Did] + [Measurable Result]

Examples:

Reduced     + backup window through RMAN incremental merge    + from 6hr to 40min (89% faster)
Designed    + Oracle RAC cluster for financial core system    + achieving 99.995% uptime over 2 years
Automated   + index monitoring using PL/SQL alerting script   + saving 12 DBA hours per week
Migrated    + 8TB on-premises Oracle DB to OCI ADB            + cutting infra cost by $180K/year
Identified  + 23 missing indexes via AWR analysis             + reducing avg query time from 8s to 0.9s
Led         + team of 5 DBAs across 3 time zones              + delivering zero-downtime DR drill quarterly&lt;/div&gt;
&lt;/div&gt;

&lt;div class=&quot;compare-wrap&quot;&gt;
  &lt;div class=&quot;compare-bad&quot;&gt;
    &lt;div class=&quot;compare-label bad&quot;&gt;REJECTED: Activity Description&lt;/div&gt;
    &lt;div class=&quot;compare-text&quot;&gt;
      &quot;Responsible for managing database backups and ensuring they complete successfully each night.&quot;&lt;br /&gt;&lt;br /&gt;
      &quot;Worked on performance tuning of slow queries using AWR reports.&quot;&lt;br /&gt;&lt;br /&gt;
      &quot;Involved in the migration of databases to the cloud platform.&quot;
    &lt;/div&gt;
  &lt;/div&gt;
  &lt;div class=&quot;compare-good&quot;&gt;
    &lt;div class=&quot;compare-label good&quot;&gt;SHORTLISTED: Impact Statement&lt;/div&gt;
    &lt;div class=&quot;compare-text&quot;&gt;
      &quot;Automated RMAN backup validation, reducing manual verification from 4 hours to 22 minutes and eliminating 3 missed backup incidents per quarter.&quot;&lt;br /&gt;&lt;br /&gt;
      &quot;Tuned 47 high-impact queries via AWR analysis, cutting average response time from 8.4 seconds to 0.9 seconds.&quot;&lt;br /&gt;&lt;br /&gt;
      &quot;Migrated 8.2 TB Oracle DB to OCI with GoldenGate, achieving zero data loss and $180K annual cost reduction.&quot;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;div class=&quot;info-box&quot;&gt;
  &lt;strong&gt;What If You Do Not Have Numbers?&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;
  Every DBA has numbers, they just have not looked for them yet. Think about: how many databases you manage, how much storage, how many users or transactions per second, what the uptime percentage is, how long tasks used to take vs now, how many incidents you resolved, what team size you worked with, what budget you managed. If you genuinely cannot find a number, use an estimate with a qualifier: &quot;approximately,&quot; &quot;averaging,&quot; or &quot;across 10+ production databases.&quot; An approximate number is better than no number.
&lt;/div&gt;

&lt;!-- ════════════════════════════════════════ --&gt;
&lt;h2 id=&quot;section8&quot;&gt;8. Section 5: Education and Certifications&lt;/h2&gt;
&lt;p&gt;
  For experienced professionals, education goes near the bottom. For freshers and final year students, education goes near the top, above experience.
&lt;/p&gt;

&lt;div class=&quot;code-container&quot;&gt;
  &lt;div class=&quot;code-header&quot;&gt;
    &lt;span class=&quot;code-label&quot;&gt;Template, Education and Certifications Section&lt;/span&gt;
    &lt;button class=&quot;copy-btn&quot; onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;
  &lt;/div&gt;
  &lt;div class=&quot;code-block&quot;&gt;EDUCATION

B.Tech in Computer Science Engineering                          2018,2022
Mumbai University, Mumbai
Final Year Project: Automated Oracle DBA Monitoring Dashboard
using Python, PL/SQL and Telegram Bot API
GPA: 8.4/10

CERTIFICATIONS

Oracle Database 19c Certified Professional (OCP)               2023
Oracle Cloud Infrastructure 2023 Architect Associate           2023
AWS Certified Database Specialty                                2024
Oracle Certified Expert: RAC and Grid Infrastructure           2024&lt;/div&gt;
&lt;/div&gt;

&lt;ul&gt;
  &lt;li&gt;Include GPA only if it is 3.5+ (on 4.0 scale) or 8.0+ (on 10.0 scale)&lt;/li&gt;
  &lt;li&gt;List certifications with the full official name and year obtained&lt;/li&gt;
  &lt;li&gt;For freshers, describe your final year project with the technology stack used and outcome&lt;/li&gt;
  &lt;li&gt;Include relevant academic projects, internships, or open source contributions if you have limited work experience&lt;/li&gt;
&lt;/ul&gt;

&lt;!-- ════════════════════════════════════════ --&gt;
&lt;h2 id=&quot;section9&quot;&gt;9. The 15 Mistakes That Get You Rejected&lt;/h2&gt;

&lt;table&gt;
  &lt;thead&gt;&lt;tr&gt;&lt;th&gt;Mistake&lt;/th&gt;&lt;th&gt;Why It Kills Your Application&lt;/th&gt;&lt;th&gt;Fix&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;&lt;td&gt;Generic objective statement&lt;/td&gt;&lt;td&gt;Signals you copy-pasted your resume&lt;/td&gt;&lt;td&gt;Write a specific 4-line summary targeting this role&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;Duties listed, not achievements&lt;/td&gt;&lt;td&gt;Every candidate had the same duties&lt;/td&gt;&lt;td&gt;Apply Action + What + Result formula to every bullet&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;Missing keywords from JD&lt;/td&gt;&lt;td&gt;ATS scores below threshold, never seen&lt;/td&gt;&lt;td&gt;Copy exact terms from job description into skills and bullets&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;Two-column layout&lt;/td&gt;&lt;td&gt;ATS reads across columns, scrambles content&lt;/td&gt;&lt;td&gt;Single column only&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;Tables or text boxes&lt;/td&gt;&lt;td&gt;ATS cannot parse content inside them&lt;/td&gt;&lt;td&gt;Remove all tables and text boxes&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;Photo or date of birth&lt;/td&gt;&lt;td&gt;Causes bias, ATS cannot process images&lt;/td&gt;&lt;td&gt;Remove completely&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;Same resume for every job&lt;/td&gt;&lt;td&gt;Never achieves high ATS keyword match&lt;/td&gt;&lt;td&gt;Customise summary and skills for each role&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;No quantified achievements&lt;/td&gt;&lt;td&gt;Cannot differentiate from 400 other applicants&lt;/td&gt;&lt;td&gt;Add numbers to every bullet&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;Skill rating bars or stars&lt;/td&gt;&lt;td&gt;ATS reads &quot;5 stars&quot; not the skill name properly&lt;/td&gt;&lt;td&gt;Replace with categorised plain text list&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;Fancy fonts or colours&lt;/td&gt;&lt;td&gt;ATS often fails to parse non-standard fonts&lt;/td&gt;&lt;td&gt;Use Arial, Calibri, or Helvetica in black&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;Wrong page count&lt;/td&gt;&lt;td&gt;0,5 years on 3 pages signals padding&lt;/td&gt;&lt;td&gt;1 page for 0,5 years, 2 pages max for 5+ years&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;Unexplained employment gaps&lt;/td&gt;&lt;td&gt;Raises red flags with no context&lt;/td&gt;&lt;td&gt;Label gap briefly: Freelance, Study, Career Break&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;No LinkedIn or outdated profile&lt;/td&gt;&lt;td&gt;Recruiter checks LinkedIn before calling&lt;/td&gt;&lt;td&gt;Update LinkedIn to match resume exactly&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;Spelling or grammar errors&lt;/td&gt;&lt;td&gt;Signals carelessness in detail-oriented roles&lt;/td&gt;&lt;td&gt;Run Grammarly Premium before submitting&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;Passive voice language&lt;/td&gt;&lt;td&gt;&quot;Was involved in&quot; vs &quot;Led&quot; signals junior mindset&lt;/td&gt;&lt;td&gt;Start every bullet with a strong action verb&lt;/td&gt;&lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;!-- ════════════════════════════════════════ --&gt;
&lt;h2 id=&quot;section10&quot;&gt;10. Resume for Freshers and Final Year Students&lt;/h2&gt;
&lt;p&gt;
  If you have no full-time work experience, your resume structure changes. The principles remain identical: show impact, use keywords, write achievements. The sources of those achievements change.
&lt;/p&gt;

&lt;h3&gt;Fresher Resume Section Order&lt;/h3&gt;
&lt;ol&gt;
  &lt;li&gt;&lt;strong&gt;Header&lt;/strong&gt; (same as experienced candidate)&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Professional Summary&lt;/strong&gt; (focus on skills and what you bring, not years)&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Education&lt;/strong&gt; (goes ABOVE experience for freshers)&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Projects&lt;/strong&gt; (academic, personal, hackathon, open source)&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Internships&lt;/strong&gt; (any, even unpaid or short duration)&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Skills&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Certifications&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Extracurricular / Leadership&lt;/strong&gt; (only if relevant or impressive)&lt;/li&gt;
&lt;/ol&gt;

&lt;div class=&quot;code-container&quot;&gt;
  &lt;div class=&quot;code-header&quot;&gt;
    &lt;span class=&quot;code-label&quot;&gt;Template, Fresher Project Entry (How to Write Impact Without Work Experience)&lt;/span&gt;
    &lt;button class=&quot;copy-btn&quot; onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;
  &lt;/div&gt;
  &lt;div class=&quot;code-block&quot;&gt;PROJECTS

Oracle DBA Monitoring Dashboard                    Jan 2022,Apr 2022
Final Year Project, Mumbai University

, Built automated database health monitoring system using Python,
  PL/SQL, and Telegram Bot API covering 12 performance metrics.

, Reduced manual health check time from 45 minutes to under 3 minutes
  per DBA shift by automating AWR alert generation.

, Deployed on Oracle Database 19c Express Edition with 99% uptime
  during 3-month testing period across 5 simulated databases.

, Presented to panel of 4 industry judges, awarded Best Final Year
  Project in Computer Science department (batch of 240 students).

Tech Stack: Python 3.10, Oracle DB 19c XE, PL/SQL, Telegram API, Linux&lt;/div&gt;
&lt;/div&gt;

&lt;div class=&quot;success-box&quot;&gt;
  &lt;strong&gt;Fresher with No Projects or Internships:&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;
  Build something before you apply. Spend 2 weekends building a small project using the technologies in the job description. Install Oracle Database XE (free), create a schema, write some queries, automate a task with Python or Shell script, and put it on GitHub. Then write 3,4 impact bullets about what you built and what it does. A small real project beats a blank projects section every time. Recruiters hiring freshers are looking for proof that you can learn and build, not just that you attended classes.
&lt;/div&gt;

&lt;!-- ════════════════════════════════════════ --&gt;
&lt;h2 id=&quot;section11&quot;&gt;11. Before-Submit Checklist&lt;/h2&gt;

&lt;div class=&quot;checklist&quot;&gt;
  &lt;h3&gt;Content Checklist&lt;/h3&gt;
  &lt;ul&gt;
    &lt;li&gt;Header title matches the job description title exactly&lt;/li&gt;
    &lt;li&gt;Summary is specific to this role, not generic&lt;/li&gt;
    &lt;li&gt;Every experience bullet contains a number or measurable result&lt;/li&gt;
    &lt;li&gt;All keywords from the job description appear in the resume&lt;/li&gt;
    &lt;li&gt;Strongest and most relevant experience is listed first&lt;/li&gt;
    &lt;li&gt;Employment gaps are explained with a brief label&lt;/li&gt;
    &lt;li&gt;Certifications include official name and year obtained&lt;/li&gt;
  &lt;/ul&gt;
&lt;/div&gt;

&lt;div class=&quot;checklist&quot;&gt;
  &lt;h3&gt;Format Checklist&lt;/h3&gt;
  &lt;ul&gt;
    &lt;li&gt;Single column layout with no tables or text boxes&lt;/li&gt;
    &lt;li&gt;Standard section headers: Summary, Experience, Skills, Education&lt;/li&gt;
    &lt;li&gt;Font is Arial, Calibri, or Helvetica at 10,12pt&lt;/li&gt;
    &lt;li&gt;Margins are 0.5 to 1 inch on all sides&lt;/li&gt;
    &lt;li&gt;Page count appropriate: 1 page for 0,5 years, 2 pages max for 5+ years&lt;/li&gt;
    &lt;li&gt;File saved as PDF (unless DOCX explicitly requested)&lt;/li&gt;
    &lt;li&gt;No photos, logos, graphics, or skill rating bars&lt;/li&gt;
  &lt;/ul&gt;
&lt;/div&gt;

&lt;div class=&quot;checklist&quot;&gt;
  &lt;h3&gt;Quality Checklist&lt;/h3&gt;
  &lt;ul&gt;
    &lt;li&gt;Spell check run and passed (Grammarly Premium recommended)&lt;/li&gt;
    &lt;li&gt;Date format is consistent throughout: Mar 2024, not 03/24 and March 2024 mixed&lt;/li&gt;
    &lt;li&gt;LinkedIn URL is current and profile matches resume&lt;/li&gt;
    &lt;li&gt;Contact email is professional: firstname.lastname@gmail.com&lt;/li&gt;
    &lt;li&gt;ATS tested on Jobscan or Resume Worded, score above 75%&lt;/li&gt;
    &lt;li&gt;At least one other person has reviewed it and given feedback&lt;/li&gt;
    &lt;li&gt;You can confidently speak to every single item on the resume&lt;/li&gt;
  &lt;/ul&gt;
&lt;/div&gt;

&lt;!-- ════════════════════════════════════════ --&gt;
&lt;h2 id=&quot;section12&quot;&gt;12. FAQ&lt;/h2&gt;

&lt;div class=&quot;faq-item&quot;&gt;
  &lt;div class=&quot;faq-question&quot;&gt;Should I use a resume template from Canva or similar design tools?&lt;/div&gt;
  &lt;div class=&quot;faq-answer&quot;&gt;
    No. Canva templates are designed for visual appeal, not ATS compatibility. They use text boxes, columns, tables, and graphics that ATS systems cannot parse correctly. Your beautifully formatted Canva resume may appear as a blank or scrambled document to the ATS. Use Microsoft Word or Google Docs with a simple, clean, single-column format. Plain is powerful when ATS is involved.
  &lt;/div&gt;
&lt;/div&gt;

&lt;div class=&quot;faq-item&quot;&gt;
  &lt;div class=&quot;faq-question&quot;&gt;How many resumes should I be sending per week?&lt;/div&gt;
  &lt;div class=&quot;faq-answer&quot;&gt;
    Quality over quantity. Sending 100 generic resumes per week produces fewer interviews than sending 10 carefully tailored resumes per week. Each application should have a resume with a customised summary and skills section matching that specific job description. It takes 20,30 minutes to properly tailor a resume. That investment is worth more than blasting the same generic document to 100 companies.
  &lt;/div&gt;
&lt;/div&gt;

&lt;div class=&quot;faq-item&quot;&gt;
  &lt;div class=&quot;faq-question&quot;&gt;Should I include a cover letter?&lt;/div&gt;
  &lt;div class=&quot;faq-answer&quot;&gt;
    Include a cover letter when the application explicitly asks for one, and when you are applying to a company you genuinely want to work for. Keep it to 3 short paragraphs: why you are interested in this specific role and company, your single strongest achievement that is directly relevant, and a clear call to action. Never paste your resume into the cover letter. Add information that is not on the resume, specifically why you want this job at this company.
  &lt;/div&gt;
&lt;/div&gt;

&lt;div class=&quot;faq-item&quot;&gt;
  &lt;div class=&quot;faq-question&quot;&gt;I have a 2-year employment gap. Will it disqualify me?&lt;/div&gt;
  &lt;div class=&quot;faq-answer&quot;&gt;
    A gap alone does not disqualify you. An unexplained gap raises questions. Address it directly and briefly on the resume itself with a one-line label in the date position: &quot;Career Break (Freelance Projects, 2022,2023)&quot; or &quot;Career Break (Full-Time Study, PGDBA, 2021,2022).&quot; Then address it confidently in interviews: what you did during the gap, what you learned, and why you are ready to return. Most hiring managers respect honesty far more than creative attempts to hide a gap.
  &lt;/div&gt;
&lt;/div&gt;

&lt;div class=&quot;faq-item&quot;&gt;
  &lt;div class=&quot;faq-question&quot;&gt;Comment RESUME below to get a personalised resume review tip.&lt;/div&gt;
  &lt;div class=&quot;faq-answer&quot;&gt;
    Drop a comment below with RESUME and share the role you are targeting. I will give you one specific, actionable improvement tip for your resume based on the role and your background. I read every comment.
  &lt;/div&gt;
&lt;/div&gt;

&lt;!-- AUTHOR --&gt;
&lt;div class=&quot;about-author&quot;&gt;
  &lt;h2&gt;About the Author&lt;/h2&gt;
  &lt;div class=&quot;author-name&quot;&gt;Chetan Yadav&lt;/div&gt;
  &lt;p class=&quot;author-bio&quot;&gt;
    &lt;strong&gt;Chetan Yadav&lt;/strong&gt; is a &lt;strong&gt;Senior Oracle, PostgreSQL, MySQL, and Cloud DBA&lt;/strong&gt; with &lt;strong&gt;15+ years&lt;/strong&gt; of hands-on experience managing production databases and building high-performance technology teams.
  &lt;/p&gt;
  &lt;p class=&quot;author-bio&quot;&gt;
    Beyond technical work, Chetan has reviewed hundreds of resumes, mentored early-career DBAs through job searches, and coached professionals transitioning into cloud and database architecture roles. He has been on both sides of the hiring table, which gives him a clear view of what actually gets candidates shortlisted versus what looks good but fails in practice.
  &lt;/p&gt;
  &lt;p class=&quot;author-bio&quot;&gt;
    This blog covers &lt;strong&gt;real-world DBA problems, cloud architecture, career growth, and practical learning&lt;/strong&gt;, not theoretical documentation or vendor marketing.
  &lt;/p&gt;
  &lt;div class=&quot;social-links&quot;&gt;
    &lt;a href=&quot;https://www.linkedin.com/in/chetanyadavvds/&quot; target=&quot;_blank&quot;&gt;LinkedIn&lt;/a&gt;
    &lt;a href=&quot;https://www.youtube.com/@levelup_careers&quot; target=&quot;_blank&quot;&gt;YouTube&lt;/a&gt;
    &lt;a href=&quot;https://www.instagram.com/levelup_careers/&quot; target=&quot;_blank&quot;&gt;Instagram&lt;/a&gt;
    &lt;a href=&quot;https://x.com/home&quot; target=&quot;_blank&quot;&gt;Twitter (X)&lt;/a&gt;
    &lt;a href=&quot;https://www.facebook.com/oracledbainfo/&quot; target=&quot;_blank&quot;&gt;Facebook&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;Newsletter&lt;/a&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;!-- POST FOOTER --&gt;
&lt;div class=&quot;post-footer&quot;&gt;
  &lt;div class=&quot;post-meta&quot;&gt;&lt;strong&gt;by Chetan Yadav&lt;/strong&gt;, March 2026&lt;/div&gt;
  &lt;div class=&quot;share-buttons&quot;&gt;
    &lt;strong&gt;Share:&lt;/strong&gt;
    &lt;a href=&quot;#&quot;&gt;Email&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;BlogThis&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;X&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;Facebook&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;Pinterest&lt;/a&gt;
  &lt;/div&gt;
  &lt;div class=&quot;tags&quot;&gt;
    &lt;strong&gt;Tags:&lt;/strong&gt;
    &lt;a href=&quot;#&quot;&gt;Resume Writing&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;ATS Optimisation&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;Career Tips&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;Job Search 2026&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;Fresher Resume&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;Impact Writing&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;DBA Career&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;Get Shortlisted&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;Interview Tips&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;LinkedIn Profile&lt;/a&gt;
  &lt;/div&gt;
&lt;/div&gt;

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

&lt;script&gt;
function copyCode(button) {
  const codeContainer = button.closest(&#39;.code-container&#39;);
  const codeBlock = codeContainer.querySelector(&#39;.code-block&#39;);
  const textArea = document.createElement(&#39;textarea&#39;);
  textArea.value = codeBlock.textContent;
  textArea.style.position = &#39;fixed&#39;;
  textArea.style.left = &#39;-9999px&#39;;
  document.body.appendChild(textArea);
  textArea.select();
  textArea.setSelectionRange(0, 99999);
  try {
    document.execCommand(&#39;copy&#39;);
    button.textContent = &#39;Copied!&#39;;
    button.classList.add(&#39;copied&#39;);
    setTimeout(() =&gt; { button.textContent = &#39;Copy&#39;; button.classList.remove(&#39;copied&#39;); }, 2000);
  } catch(err) {
    button.textContent = &#39;Failed&#39;;
    setTimeout(() =&gt; { button.textContent = &#39;Copy&#39;; }, 2000);
  }
  document.body.removeChild(textArea);
}
&lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;</content><link rel='replies' type='application/atom+xml' href='http://chetanyadavds.blogspot.com/feeds/2553198849669518892/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://chetanyadavds.blogspot.com/2026/04/how-to-create-resume-gets-shortlisted-2026.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/436196721812840248/posts/default/2553198849669518892'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/436196721812840248/posts/default/2553198849669518892'/><link rel='alternate' type='text/html' href='http://chetanyadavds.blogspot.com/2026/04/how-to-create-resume-gets-shortlisted-2026.html' title='How to Create a Resume That Actually Gets Shortlisted in 2026'/><author><name>Chetan Yadav</name><uri>http://www.blogger.com/profile/02557500437758632199</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiE0TgifWM4l1b3sy_cK2y41bpqyfY1U25-p5IBKkSg8pJLFRvjYr_kF7W_MgsYdc21DutWF9H6qlShQDQspQLbZEQ5CSUA51Wp6Mh9l5Ygd4NPSuQyqwSMrKitCWwSLr0oHBg9TGjxAvAM7TTkkehHLL1MFWg0wSb31CxywQxIokg9pg/s1600/IMG-20251013-WA0038.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/a/AVvXsEj6gZLhkRp2v6euhOvtB9-5VKeGAl9kkJLindICnkMKe1ti8oyywF2-fXzmPJTb4xS2qNNQXvoT5vgrBxTm9PmtYP3G0aPhk0v61-LJehBVgVZcDyYr49ZRGqn5sh5zKAshl4DaXh3kHY70gQ_zfaZdkb2b6dJp7bl50OKs9_qc-MxJPkiZ0mXOvAF8AY4=s72-c" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-436196721812840248.post-7968573798549270905</id><published>2026-03-30T14:23:00.005+05:30</published><updated>2026-03-30T14:24:37.400+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="Apply Lag"/><category scheme="http://www.blogger.com/atom/ns#" term="Data Guard"/><category scheme="http://www.blogger.com/atom/ns#" term="Data Guard Troubleshooting"/><category scheme="http://www.blogger.com/atom/ns#" term="HA DR"/><category scheme="http://www.blogger.com/atom/ns#" term="MRP Apply"/><category scheme="http://www.blogger.com/atom/ns#" term="Oracle 19c"/><category scheme="http://www.blogger.com/atom/ns#" term="Oracle DBA"/><category scheme="http://www.blogger.com/atom/ns#" term="Standby Database"/><category scheme="http://www.blogger.com/atom/ns#" term="SYNC ASYNC"/><category scheme="http://www.blogger.com/atom/ns#" term="Transport Lag"/><title type='text'>Why Data Guard Lag Happens in Production: Sync, I/O and Network Deep Dive</title><content type='html'>
&lt;html lang=&quot;en&quot;&gt;
&lt;head&gt;
&lt;meta charset=&quot;UTF-8&quot;&gt;&lt;/meta&gt;
&lt;title&gt;Why Data Guard Lag Happens in Production: Sync, I/O and Network Deep Dive&lt;/title&gt;
&lt;meta content=&quot;width=device-width, initial-scale=1.0&quot; name=&quot;viewport&quot;&gt;&lt;/meta&gt;
&lt;meta content=&quot;Why Oracle Data Guard lag happens in production: transport lag, apply lag, SYNC vs ASYNC, network latency, standby I/O and misconfiguration root causes with diagnostic SQL.&quot; name=&quot;description&quot;&gt;&lt;/meta&gt;
&lt;link href=&quot;data:image/svg+xml,%3Csvg xmlns=&#39;http://www.w3.org/2000/svg&#39; viewBox=&#39;0 0 100 100&#39;%3E%3Cdefs%3E%3ClinearGradient id=&#39;g&#39; x1=&#39;0%25&#39; y1=&#39;0%25&#39; x2=&#39;100%25&#39; y2=&#39;100%25&#39;%3E%3Cstop offset=&#39;0%25&#39; style=&#39;stop-color:%23d93025&#39;/%3E%3Cstop offset=&#39;100%25&#39; style=&#39;stop-color:%23a82318&#39;/%3E%3C/linearGradient%3E%3C/defs%3E%3Crect width=&#39;100&#39; height=&#39;100&#39; rx=&#39;20&#39; fill=&#39;url(%23g)&#39;/%3E%3Cpath d=&#39;M20,30 L35,30 L35,70 L20,70 Z M40,40 L55,40 L55,70 L40,70 Z M60,25 L75,25 L75,70 L60,70 Z&#39; fill=&#39;white&#39; opacity=&#39;0.9&#39;/%3E%3C/svg%3E&quot; rel=&quot;icon&quot; type=&quot;image/svg+xml&quot;&gt;&lt;/link&gt;
&lt;style&gt;
*{margin:0;padding:0;box-sizing:border-box}
body{background:#fff;color:#333;font-family:Arial,Helvetica,sans-serif;font-size:16px;line-height:1.7}

.post-title,.entry-title,h1.post-title,h3.post-title{display:none!important}

.hero-header{background:linear-gradient(135deg,#1e3a5f 0%,#7c1c1c 50%,#1e3a5f 100%);color:#fff;padding:60px 40px;width:100%}
.hero-header-content{max-width:1200px;margin:0 auto;padding:0 20px}
.hero-header h1{font-size:42px;font-weight:700;color:#fff;line-height:1.3;margin-bottom:20px}
.hero-subtitle{font-size:20px;font-weight:300;color:#fca5a5;opacity:.95;margin-bottom:30px}
.hero-meta{display:flex;gap:30px;align-items:center;flex-wrap:wrap;font-size:15px;color:#fecaca}
.hero-meta-item{display:flex;align-items:center;gap:8px}

.hero-image-section{width:100%;margin:0;padding:0;overflow:hidden;background:#f8fafc}
.hero-image-section img{width:100%;height:auto;display:block;max-height:780px;object-fit:contain;padding:20px 0}

.main-content-wrapper{width:100%;background:#fff}
.container{max-width:800px;margin:0 auto;padding:30px 20px;background:#fff}

.reading-time-badge{display:inline-block;background:linear-gradient(135deg,#dc2626 0%,#991b1b 100%);color:#fff;padding:12px 28px;border-radius:50px;font-size:15px;font-weight:500;margin-bottom:30px;box-shadow:0 4px 12px rgba(220,38,38,.3)}
.page-tagline{color:#666;font-size:15px;font-style:italic;text-align:center;margin-bottom:35px}

.read-more-link{display:block;margin:28px 0 8px}
.read-more-link a{color:#dc2626;font-size:15px;text-decoration:none;font-style:italic}
.read-more-link a:hover{text-decoration:underline}

.toc{background:#fef2f2;border-left:4px solid #dc2626;padding:28px 32px;margin:35px 0;border-radius:8px;box-shadow:0 1px 3px rgba(0,0,0,.05)}
.toc-header{display:flex;align-items:center;gap:10px;font-size:24px;font-weight:bold;color:#000;margin-bottom:20px}
.toc ol{margin-left:20px;line-height:1.9;counter-reset:toc-counter;list-style:none}
.toc ol li{counter-increment:toc-counter;margin:12px 0;font-size:16px;padding-bottom:12px;border-bottom:1px solid #fecaca;transition:all .2s ease}
.toc ol li:last-child{border-bottom:none}
.toc ol li:hover{padding-left:8px}
.toc ol li::before{content:counter(toc-counter) &quot;. &quot;;font-weight:600;color:#dc2626;margin-right:8px}
.toc a{color:#dc2626;text-decoration:none}
.toc a:hover{text-decoration:underline}

h2{font-size:28px;font-weight:bold;color:#000;margin:45px 0 20px;line-height:1.3}
h3{font-size:22px;font-weight:600;color:#333;margin:30px 0 15px}
p{margin:16px 0;color:#333;line-height:1.7}
ul,ol{margin:18px 0 18px 35px;color:#333;line-height:1.7}
ul li,ol li{margin:10px 0}
strong{font-weight:bold;color:#333}
em{font-style:italic}
a{color:#dc2626;text-decoration:none}
a:hover{text-decoration:underline}

.tag-good{display:inline-block;background:#e6f4ea;color:#137333;border:1px solid #a8d5b5;border-radius:4px;padding:1px 8px;font-size:13px;font-weight:600;margin-right:6px;vertical-align:middle}
.tag-bad{display:inline-block;background:#fce8e6;color:#c5221f;border:1px solid #f5a8a4;border-radius:4px;padding:1px 8px;font-size:13px;font-weight:600;margin-right:6px;vertical-align:middle}
.tag-warn{display:inline-block;background:#fffbeb;color:#92400e;border:1px solid #fcd34d;border-radius:4px;padding:1px 8px;font-size:13px;font-weight:600;margin-right:6px;vertical-align:middle}
.tag-cause{display:inline-block;background:#fef2f2;color:#991b1b;border:1px solid #fca5a5;border-radius:4px;padding:2px 10px;font-size:12px;font-weight:700;margin-right:6px;vertical-align:middle}
.tag-fix{display:inline-block;background:#f0fdf4;color:#15803d;border:1px solid #86efac;border-radius:4px;padding:2px 10px;font-size:12px;font-weight:700;margin-right:6px;vertical-align:middle}

.code-container{position:relative;margin:24px 0}
.code-header{background:#1e1b2e;color:#fff;padding:10px 16px;border-radius:8px 8px 0 0;display:flex;justify-content:space-between;align-items:center;font-size:14px}
.code-label{font-weight:500}
.copy-btn{background:#dc2626;color:#fff;border:none;padding:6px 14px;border-radius:5px;cursor:pointer;font-size:13px;transition:background .2s;font-family:Arial,sans-serif}
.copy-btn:hover{background:#b91c1c}
.copy-btn.copied{background:#10b981}
.code-block{background:#f8f9fa;border:1px solid #e0e0e0;border-radius:0 0 8px 8px;padding:18px 20px;margin:0;overflow-x:auto;font-family:&#39;Courier New&#39;,Courier,monospace;font-size:14px;line-height:1.7;white-space:pre;tab-size:4}
code{background:#f8f9fa;padding:2px 6px;border-radius:3px;font-family:&#39;Courier New&#39;,monospace;font-size:14px;color:#dc2626}

.info-box{background:#fffbeb;border-left:4px solid #f59e0b;padding:18px 22px;border-radius:0 8px 8px 0;margin:25px 0}
.info-box strong{color:#92400e}
.tip-box{background:#fef2f2;border-left:4px solid #dc2626;padding:18px 22px;border-radius:0 8px 8px 0;margin:25px 0}
.tip-box strong{color:#991b1b}
.incident-box{background:#fef2f2;border-left:4px solid #ef4444;padding:18px 22px;border-radius:0 8px 8px 0;margin:25px 0}
.incident-box strong{color:#991b1b}
.success-box{background:#f0fdf4;border-left:4px solid #22c55e;padding:18px 22px;border-radius:0 8px 8px 0;margin:25px 0}
.success-box strong{color:#15803d}

table{width:100%;border-collapse:collapse;margin:25px 0;background:#fff;border:1px solid #e0e0e0}
thead{background:#f8f9fa}
th{padding:12px;text-align:left;font-weight:bold;color:#000;border-bottom:2px solid #e0e0e0;font-size:15px}
td{padding:12px;border-bottom:1px solid #e0e0e0;color:#333;font-size:15px}
tr:last-child td{border-bottom:none}
tbody tr:hover{background:#fef2f2}

.checklist{background:#fef2f2;border:1px solid #fecaca;border-radius:8px;padding:24px 28px;margin:18px 0}
.checklist h3{margin-top:0;color:#1e293b;font-size:18px}
.checklist ul{list-style:none;margin-left:0}
.checklist ul li{padding:6px 0 6px 28px;position:relative}
.checklist ul li::before{content:&quot;&quot;;position:absolute;left:4px;top:13px;width:10px;height:10px;background:#dc2626;border-radius:50%}

.faq-item{margin:25px 0;border-bottom:1px solid #e5e7eb;padding-bottom:25px}
.faq-item:last-child{border-bottom:none}
.faq-question{font-weight:600;color:#000;font-size:17px;margin-bottom:10px}
.faq-answer{color:#333;line-height:1.7}

.related-reading{background:#f8f9fa;border:1px solid #e0e0e0;border-radius:8px;padding:30px;margin:40px 0}
.related-reading h2{margin-top:0}
.related-reading ul{margin-left:25px}
.related-reading li{margin:18px 0;line-height:1.7}
.related-reading .why-matters{color:#666;font-size:15px;margin-top:5px;display:block}

.about-author{background:#fffbf0;border:1px solid #e0e0e0;border-radius:8px;padding:30px;margin:40px 0}
.about-author h2{margin-top:0;font-size:28px}
.author-name{font-size:20px;font-weight:bold;color:#000;margin-bottom:10px}
.author-bio{color:#333;line-height:1.7;margin-bottom:15px}
.social-links{margin-top:20px}
.social-links a{display:inline-block;margin-right:20px;color:#dc2626;text-decoration:none;font-size:16px}
.social-links a:hover{text-decoration:underline}

.post-footer{border-top:1px solid #e0e0e0;padding-top:25px;margin-top:40px;color:#666;font-size:15px}
.post-meta{margin-bottom:15px}
.share-buttons{margin:20px 0}
.share-buttons a{display:inline-block;margin-right:15px;color:#dc2626;font-size:14px}
.tags{margin-top:20px}
.tags strong{color:#666;font-weight:normal}
.tags a{color:#dc2626;margin-right:10px;font-size:14px}

@media(max-width:768px){
  .hero-header{padding:40px 24px}
  .hero-header h1{font-size:28px}
  .hero-subtitle{font-size:16px}
  .hero-meta{gap:20px}
  h2{font-size:24px}
  h3{font-size:20px}
  table{font-size:13px}
  th,td{padding:9px}
  .code-block{font-size:12px}
}
&lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;

&lt;div class=&quot;hero-header&quot;&gt;
  &lt;div class=&quot;hero-header-content&quot;&gt;
    &lt;h1&gt;Why Data Guard Lag Happens in Production: Sync, I/O and Network Deep Dive&lt;/h1&gt;
    &lt;div class=&quot;hero-subtitle&quot;&gt;Six Root Causes of Transport and Apply Lag , With Diagnostic SQL to Prove Each One&lt;/div&gt;
    &lt;div class=&quot;hero-meta&quot;&gt;
      &lt;div class=&quot;hero-meta-item&quot;&gt;30 March 2026&lt;/div&gt;
      &lt;div class=&quot;hero-meta-item&quot;&gt; Chetan Yadav , Senior Oracle &amp;amp; Cloud DBA&lt;/div&gt;
      &lt;div class=&quot;hero-meta-item&quot;&gt;⏱️ 14–16 min read&lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;div class=&quot;main-content-wrapper&quot;&gt;
&lt;div class=&quot;container&quot;&gt;

&lt;div class=&quot;reading-time-badge&quot;&gt;⏱️ Estimated Reading Time: 14–16 minutes&lt;/div&gt;
&lt;div class=&quot;page-tagline&quot;&gt;Transport Lag • Apply Lag • SYNC vs ASYNC • Network RTT • Standby I/O • MRP Apply Bottleneck&lt;/div&gt;

&lt;div class=&quot;hero-image-section&quot;&gt;
  &lt;img alt=&quot;Oracle Data Guard lag root cause architecture map showing 6 production causes across Primary Network and Standby layers&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEiebFVqHDMyvs3HdDmgyS_y25XmjFhqFQA5wkeCVdbf1QBqxrtAA74gSqAvA8rvWLf7Phgz0bghjgkyigVXowkGbHTY7O32iT7S5dtYgrTcOW1cWO8-6Hzk6JJmWw_9isvD6mSjELYuH5wtyJHSlpFyPJJblPldv4U5Xja362vVHDuK7a-nsVbbxs8YjeY&quot; /&gt;
&lt;/div&gt;

&lt;div class=&quot;info-box&quot; style=&quot;margin-top: 28px;&quot;&gt;
  &lt;strong&gt;⚙️ Production Environment Referenced in This Article&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;
  &lt;strong&gt;Oracle Database:&lt;/strong&gt; 19.18.0.0.0 Enterprise Edition &amp;nbsp;•&amp;nbsp;
  &lt;strong&gt;Primary:&lt;/strong&gt; 2-Node RAC, 4.8 TB OLTP &amp;nbsp;•&amp;nbsp;
  &lt;strong&gt;Standby:&lt;/strong&gt; Physical Standby (Active Data Guard)&lt;br /&gt;
  &lt;strong&gt;Protection Mode:&lt;/strong&gt; Maximum Availability (SYNC/AFFIRM) &amp;nbsp;•&amp;nbsp;
  &lt;strong&gt;Network:&lt;/strong&gt; Dedicated 1 GbE WAN (120 km distance, RTT 1.8 ms)&lt;br /&gt;
  &lt;strong&gt;Peak Load:&lt;/strong&gt; 2,800 TPS, 180 MB/sec redo generation &amp;nbsp;•&amp;nbsp;
  &lt;strong&gt;Application:&lt;/strong&gt; Core banking transaction processing
&lt;/div&gt;

&lt;p&gt;
  The alert arrives at 11:43 PM: &lt;em&gt;&quot;Data Guard apply lag exceeds 900 seconds.&quot;&lt;/em&gt; The DBA on call opens the monitoring dashboard. Transport lag is 180 seconds. Apply lag is 900 seconds. The standby is 15 minutes behind the primary. If the primary fails right now, 15 minutes of financial transactions could be at risk.
&lt;/p&gt;
&lt;p&gt;
  This scenario plays out in production Data Guard environments more often than most teams admit. Lag is not a single problem , it is six different problems that look identical from the outside. Transport lag and apply lag each have completely different root causes, different diagnostic queries, and completely different fixes. Treating them the same wastes hours of investigation time.
&lt;/p&gt;
&lt;p&gt;
  This guide covers every real cause of Data Guard lag I have diagnosed in production, the exact SQL to prove which one you are dealing with, and the specific fix for each. No guesswork. No generic advice about &quot;check your network.&quot; Precise diagnosis first, then precise resolution.
&lt;/p&gt;

&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;

&lt;div class=&quot;toc&quot;&gt;
  &lt;div class=&quot;toc-header&quot;&gt;&lt;span&gt;&lt;/span&gt; Table of Contents&lt;/div&gt;
  &lt;ol&gt;
    &lt;li&gt;&lt;a href=&quot;#section1&quot;&gt;Transport Lag vs Apply Lag: Understanding the Difference&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#section2&quot;&gt;The Diagnostic Starting Point: Five Queries to Run First&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#section3&quot;&gt;Cause 1: Primary Storage I/O Pressure&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#section4&quot;&gt;Cause 2: Redo Volume Spike (Batch Jobs)&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#section5&quot;&gt;Cause 3: Network Latency and Bandwidth&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#section6&quot;&gt;Cause 4: Misconfiguration (SRL, NET_TIMEOUT, AFFIRM)&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#section7&quot;&gt;Cause 5: Standby Apply Bottleneck&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#section8&quot;&gt;Cause 6: Standby Resource Starvation&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#section9&quot;&gt;SYNC vs ASYNC: Which Mode Causes Which Lag Pattern&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#section10&quot;&gt;Lag Under Active Data Guard (Read-Only Standby)&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#section11&quot;&gt;Building a Lag Monitoring Alert&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#section12&quot;&gt;FAQ&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#section13&quot;&gt;Related Reading from Real Production Systems&lt;/a&gt;&lt;/li&gt;
  &lt;/ol&gt;
&lt;/div&gt;

&lt;!-- ══════════════════════════════════════════════ --&gt;
&lt;h2 id=&quot;section1&quot;&gt;1. Transport Lag vs Apply Lag: Understanding the Difference&lt;/h2&gt;
&lt;p&gt;
  Before diagnosing lag, you must understand which type you have. They look the same on a monitoring dashboard but live in completely different parts of the Data Guard pipeline.
&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;&lt;tr&gt;&lt;th&gt;Lag Type&lt;/th&gt;&lt;th&gt;Definition&lt;/th&gt;&lt;th&gt;Lives In&lt;/th&gt;&lt;th&gt;Primary Cause&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;Transport Lag&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;Redo generated on primary but not yet received by standby&lt;/td&gt;
      &lt;td&gt;Network pipe between primary and standby&lt;/td&gt;
      &lt;td&gt;Network, primary I/O, redo volume&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;Apply Lag&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;Redo received by standby but not yet applied to datafiles&lt;/td&gt;
      &lt;td&gt;Standby MRP apply process&lt;/td&gt;
      &lt;td&gt;Standby I/O, CPU, misconfiguration&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;div class=&quot;tip-box&quot;&gt;
  &lt;strong&gt;Critical Distinction:&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;
  If &lt;strong&gt;transport lag is high but apply lag is low&lt;/strong&gt; , your network or primary is the problem. The standby is applying redo as fast as it receives it; it just isn&#39;t receiving it fast enough.&lt;br /&gt;&lt;br /&gt;
  If &lt;strong&gt;transport lag is low but apply lag is high&lt;/strong&gt; , your standby is the problem. Redo is arriving quickly but MRP cannot apply it fast enough.&lt;br /&gt;&lt;br /&gt;
  If &lt;strong&gt;both are high&lt;/strong&gt; , you have multiple problems or a severe redo volume spike that is overwhelming the entire pipeline.
&lt;/div&gt;

&lt;!-- ══════════════════════════════════════════════ --&gt;
&lt;h2 id=&quot;section2&quot;&gt;2. The Diagnostic Starting Point: Five Queries to Run First&lt;/h2&gt;
&lt;p&gt;Run these five queries immediately when lag is reported. They tell you which cause category you are dealing with before you go deeper.&lt;/p&gt;

&lt;div class=&quot;code-container&quot;&gt;
  &lt;div class=&quot;code-header&quot;&gt;
    &lt;span class=&quot;code-label&quot;&gt;SQL , Five Immediate Diagnostic Queries for Data Guard Lag&lt;/span&gt;
    &lt;button class=&quot;copy-btn&quot; onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;
  &lt;/div&gt;
  &lt;div class=&quot;code-block&quot;&gt;-- Query 1: Transport lag vs apply lag (run on PRIMARY)
SELECT name,
       value,
       unit,
       time_computed
FROM   v$dataguard_stats
WHERE  name IN (
    &#39;transport lag&#39;,
    &#39;apply lag&#39;,
    &#39;apply finish time&#39;,
    &#39;estimated startup time&#39;
)
ORDER  BY name;

-- Query 2: Current redo generation rate (run on PRIMARY)
-- High rate = redo volume problem
SELECT inst_id,
       ROUND(value / 1024 / 1024, 2)  AS redo_mb_per_sec
FROM   gv$sysstat
WHERE  name = &#39;redo size&#39;
AND    inst_id IN (SELECT inst_id FROM gv$instance);

-- Query 3: Archive dest status and error (run on PRIMARY)
SELECT dest_id,
       dest_name,
       status,
       target,
       archiver,
       schedule,
       destination,
       error,
       applied_scn,
       gap_status
FROM   v$archive_dest_status
WHERE  status != &#39;INACTIVE&#39;
ORDER  BY dest_id;

-- Query 4: MRP apply process status (run on STANDBY)
SELECT process,
       status,
       thread#,
       sequence#,
       block#,
       blocks,
       delay_mins
FROM   v$managed_standby
ORDER  BY process;

-- Query 5: Standby redo log receive vs apply position (run on STANDBY)
SELECT thread#,
       low_sequence#,
       high_sequence#,
       applied
FROM   v$archived_log
WHERE  standby_dest = &#39;YES&#39;
ORDER  BY thread#, high_sequence# DESC
FETCH FIRST 10 ROWS ONLY;&lt;/div&gt;
&lt;/div&gt;

&lt;!-- ══════════════════════════════════════════════ --&gt;
&lt;h2 id=&quot;section3&quot;&gt;3. Cause 1: Primary Storage I/O Pressure&lt;/h2&gt;
&lt;p&gt;
  &lt;span class=&quot;tag-cause&quot;&gt;Cause 1&lt;/span&gt; LGWR cannot write redo to local online redo logs fast enough. Every redo write is now slower than normal. In SYNC mode this directly delays the network send to the standby. In ASYNC mode it slows redo generation which eventually causes the NSA buffer to fill up.
&lt;/p&gt;

&lt;h3&gt;How to Confirm It&lt;/h3&gt;

&lt;div class=&quot;code-container&quot;&gt;
  &lt;div class=&quot;code-header&quot;&gt;
    &lt;span class=&quot;code-label&quot;&gt;SQL , Diagnose Primary Storage I/O as Lag Root Cause&lt;/span&gt;
    &lt;button class=&quot;copy-btn&quot; onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;
  &lt;/div&gt;
  &lt;div class=&quot;code-block&quot;&gt;-- Check LGWR wait events (run on PRIMARY)
-- High log file sync or log file parallel write = LGWR I/O problem
SELECT event,
       total_waits,
       time_waited,
       ROUND(average_wait, 3)   AS avg_wait_ms,
       wait_class
FROM   v$system_event
WHERE  event IN (
    &#39;log file sync&#39;,
    &#39;log file parallel write&#39;,
    &#39;log buffer space&#39;
)
ORDER  BY time_waited DESC;

-- Check datafile I/O latency (high write latency = DBWR pressure on LGWR)
SELECT name,
       phyrds,
       phywrts,
       ROUND(readtim  / NULLIF(phyrds,  0), 2)  AS avg_read_ms,
       ROUND(writetim / NULLIF(phywrts, 0), 2)  AS avg_write_ms
FROM   v$filestat f
JOIN   v$datafile d ON f.file# = d.file#
WHERE  phywrts &amp;gt; 1000
ORDER  BY avg_write_ms DESC
FETCH FIRST 10 ROWS ONLY;

-- Check ASM rebalance activity (can throttle I/O)
SELECT group_number,
       operation,
       state,
       power,
       actual,
       sofar,
       est_minutes
FROM   v$asm_operation;&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;&lt;span class=&quot;tag-fix&quot;&gt;Fix&lt;/span&gt; Separate redo log files onto dedicated fast storage (NVMe or dedicated ASM disk group). Increase redo log size to reduce switch frequency. Schedule ASM rebalance outside peak hours. If on Exadata, verify Smart Flash Cache is handling redo log writes.&lt;/p&gt;

&lt;!-- ══════════════════════════════════════════════ --&gt;
&lt;h2 id=&quot;section4&quot;&gt;4. Cause 2: Redo Volume Spike&lt;/h2&gt;
&lt;p&gt;
  &lt;span class=&quot;tag-cause&quot;&gt;Cause 2&lt;/span&gt; The primary is generating far more redo than normal. A batch job, bulk load, or mass update suddenly pushes 10–50x the normal redo rate. The network pipe cannot keep up. Transport lag grows rapidly. This is the most common cause of sudden lag spikes in production OLTP systems with nightly batch processing.
&lt;/p&gt;

&lt;div class=&quot;code-container&quot;&gt;
  &lt;div class=&quot;code-header&quot;&gt;
    &lt;span class=&quot;code-label&quot;&gt;SQL , Identify Redo Volume Spike and Source SQL&lt;/span&gt;
    &lt;button class=&quot;copy-btn&quot; onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;
  &lt;/div&gt;
  &lt;div class=&quot;code-block&quot;&gt;-- Check redo generation rate per instance (run on PRIMARY)
SELECT inst_id,
       ROUND(value / 1024 / 1024, 2)  AS redo_mb_total
FROM   gv$sysstat
WHERE  name = &#39;redo size&#39;
ORDER  BY inst_id;

-- Find top SQL generating most redo (run on PRIMARY)
SELECT sql_id,
       executions,
       ROUND(sorts * 1024 / 1024, 2)        AS sorts_mb,
       ROUND(buffer_gets / 1024.0, 0)       AS buffer_gets_k,
       ROUND(direct_writes / 1024.0, 0)     AS direct_writes_k,
       last_active_time
FROM   v$sql
WHERE  executions &amp;gt; 0
ORDER  BY sorts DESC
FETCH FIRST 20 ROWS ONLY;

-- Check archive log generation rate (run on PRIMARY)
-- Sudden spike in log count = redo volume surge
SELECT TO_CHAR(first_time, &#39;YYYY-MM-DD HH24&#39;)  AS hour,
       COUNT(*)                                  AS logs_generated,
       ROUND(SUM(blocks * block_size)/1024/1024) AS total_mb
FROM   v$archived_log
WHERE  first_time &amp;gt; SYSDATE - 1
AND    standby_dest = &#39;NO&#39;
GROUP  BY TO_CHAR(first_time, &#39;YYYY-MM-DD HH24&#39;)
ORDER  BY hour DESC;&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;&lt;span class=&quot;tag-fix&quot;&gt;Fix&lt;/span&gt; Use &lt;code&gt;NOLOGGING&lt;/code&gt; or &lt;code&gt;APPEND&lt;/code&gt; hints for bulk data loads where tolerable. Schedule heavy batch jobs during off-peak hours. Implement redo log compression on the archive destination (&lt;code&gt;COMPRESSION=ENABLE&lt;/code&gt; in &lt;code&gt;LOG_ARCHIVE_DEST&lt;/code&gt;). For ASYNC mode consider increasing &lt;code&gt;async_blocks&lt;/code&gt; parameter.&lt;/p&gt;

&lt;!-- ══════════════════════════════════════════════ --&gt;
&lt;h2 id=&quot;section5&quot;&gt;5. Cause 3: Network Latency and Bandwidth&lt;/h2&gt;
&lt;p&gt;
  &lt;span class=&quot;tag-cause&quot;&gt;Cause 3&lt;/span&gt; This is the most commonly blamed cause , and the most commonly misdiagnosed. Network problems cause transport lag. They do not cause apply lag. If apply lag is high and transport lag is low, stop looking at the network.
&lt;/p&gt;

&lt;h3&gt;Network Metrics That Matter for Data Guard&lt;/h3&gt;
&lt;table&gt;
  &lt;thead&gt;&lt;tr&gt;&lt;th&gt;Metric&lt;/th&gt;&lt;th&gt;Good Value&lt;/th&gt;&lt;th&gt;Problem Threshold&lt;/th&gt;&lt;th&gt;Impact&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;&lt;td&gt;Round-trip latency (RTT)&lt;/td&gt;&lt;td&gt;&amp;lt; 2 ms&lt;/td&gt;&lt;td&gt;&amp;gt; 5 ms for SYNC&lt;/td&gt;&lt;td&gt;Every commit waits RTT in SYNC mode&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;Bandwidth utilisation&lt;/td&gt;&lt;td&gt;&amp;lt; 60%&lt;/td&gt;&lt;td&gt;&amp;gt; 80% sustained&lt;/td&gt;&lt;td&gt;Redo bursts cause queuing delay&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;Packet loss&lt;/td&gt;&lt;td&gt;0%&lt;/td&gt;&lt;td&gt;&amp;gt; 0.01%&lt;/td&gt;&lt;td&gt;TCP retransmit multiplies latency&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;Jitter (latency variance)&lt;/td&gt;&lt;td&gt;&amp;lt; 1 ms&lt;/td&gt;&lt;td&gt;&amp;gt; 5 ms&lt;/td&gt;&lt;td&gt;Unpredictable LGWR stalls in SYNC&lt;/td&gt;&lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;div class=&quot;code-container&quot;&gt;
  &lt;div class=&quot;code-header&quot;&gt;
    &lt;span class=&quot;code-label&quot;&gt;SQL , Diagnose Network as Data Guard Lag Cause&lt;/span&gt;
    &lt;button class=&quot;copy-btn&quot; onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;
  &lt;/div&gt;
  &lt;div class=&quot;code-block&quot;&gt;-- Check redo transport network statistics (run on PRIMARY)
SELECT dest_id,
       srl_network_writes,
       srl_network_write_time,
       ROUND(srl_network_write_time /
             NULLIF(srl_network_writes, 0), 3)  AS avg_network_write_ms
FROM   v$standby_log_stats
ORDER  BY dest_id;

-- Check NSA (async) or NSS (sync) send process (run on PRIMARY)
SELECT process,
       status,
       client_process,
       sequence#,
       block#,
       blocks,
       delay_mins
FROM   v$managed_standby
WHERE  process LIKE &#39;NS%&#39;
ORDER  BY process;

-- Check archive destination error status
SELECT dest_id,
       status,
       error,
       gap_status,
       db_unique_name
FROM   v$archive_dest_status
WHERE  target = &#39;STANDBY&#39;
AND    status != &#39;INACTIVE&#39;;

-- OS-level network check (run from primary server shell)
-- ping -c 100 standby_host | tail -5
-- traceroute -n standby_host
-- iperf3 -c standby_host -t 30 -P 4   (bandwidth test)&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;&lt;span class=&quot;tag-fix&quot;&gt;Fix&lt;/span&gt; Enable redo log compression: add &lt;code&gt;COMPRESSION=ENABLE&lt;/code&gt; to &lt;code&gt;LOG_ARCHIVE_DEST_2&lt;/code&gt;. Implement QoS tagging on redo transport traffic on your WAN appliance. Increase &lt;code&gt;NET_TIMEOUT&lt;/code&gt; if packet loss causes premature timeouts. Switch from SYNC to ASYNC if RTT exceeds 5 ms and strict zero data loss is not mandatory. Use dedicated WAN link for redo transport , never share with application traffic.&lt;/p&gt;

&lt;div class=&quot;incident-box&quot;&gt;
  &lt;strong&gt;Incident: Firewall Stateful Inspection Causing Transport Lag&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;
  A Data Guard environment was configured correctly with 1.8 ms RTT on the dedicated WAN link. Transport lag would spike to 120+ seconds randomly, then clear, then spike again. Network team confirmed zero packet loss. Root cause: a next-gen firewall performing deep packet inspection on the redo transport TCP stream. Each 10-second idle gap caused the firewall to drop and re-establish the TCP state table entry, causing a 15–30 second reconnect delay on the NSS process.&lt;br /&gt;&lt;br /&gt;
  &lt;strong&gt;Fix:&lt;/strong&gt; Added a firewall bypass rule for the specific TCP port used by Data Guard redo transport (&lt;code&gt;LOG_ARCHIVE_DEST&lt;/code&gt; &lt;code&gt;SERVICE&lt;/code&gt; port). Lag spikes disappeared immediately.
&lt;/div&gt;

&lt;!-- ══════════════════════════════════════════════ --&gt;
&lt;h2 id=&quot;section6&quot;&gt;6. Cause 4: Misconfiguration&lt;/h2&gt;
&lt;p&gt;
  &lt;span class=&quot;tag-cause&quot;&gt;Cause 4&lt;/span&gt; Configuration errors are silent lag causes. Everything looks operationally normal , no errors in alert log, no network problems, reasonable redo rate. But lag slowly accumulates because something is configured wrong. These are the hardest to find because they require knowing what correct configuration looks like.
&lt;/p&gt;

&lt;div class=&quot;code-container&quot;&gt;
  &lt;div class=&quot;code-header&quot;&gt;
    &lt;span class=&quot;code-label&quot;&gt;SQL , Verify Data Guard Configuration for Common Misconfigurations&lt;/span&gt;
    &lt;button class=&quot;copy-btn&quot; onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;
  &lt;/div&gt;
  &lt;div class=&quot;code-block&quot;&gt;-- Check 1: Standby Redo Logs exist and are correct size
-- SRL must be same size as online redo logs
-- Must have at least (online_log_groups + 1) SRL per thread
SELECT group#,
       thread#,
       sequence#,
       bytes/1024/1024  AS size_mb,
       archived,
       status
FROM   v$standby_log
ORDER  BY thread#, group#;

-- Compare SRL size vs online redo log size (run on PRIMARY)
-- These must match
SELECT &#39;online&#39; AS log_type,
       group#,
       bytes/1024/1024  AS size_mb
FROM   v$log
UNION ALL
SELECT &#39;standby&#39;,
       group#,
       bytes/1024/1024
FROM   v$standby_log
ORDER  BY log_type, group#;

-- Check 2: AFFIRM setting matches protection mode intention
SELECT dest_id,
       dest_name,
       affirm,
       async_blocks,
       net_timeout,
       delay,
       compression,
       status
FROM   v$archive_dest
WHERE  target = &#39;STANDBY&#39;
AND    status = &#39;VALID&#39;;

-- Check 3: Real-time apply is running (not archive-based apply)
-- Must show WAIT_FOR_LOG not WAIT_FOR_GAP
SELECT process,
       status,
       sequence#
FROM   v$managed_standby
WHERE  process = &#39;MRP0&#39;;

-- Check 4: Protection mode vs protection level match
-- If they differ, primary has fallen back silently
SELECT protection_mode,    -- configured
       protection_level    -- actual effective
FROM   v$database;&lt;/div&gt;
&lt;/div&gt;

&lt;div class=&quot;incident-box&quot;&gt;
  &lt;strong&gt;Incident: Missing Standby Redo Logs , 8-Hour Apply Gap&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;
  A newly built Data Guard environment appeared healthy. Alert log clean. No errors. Archive destination showed SUCCESS. But during failover testing, the standby was 8 hours behind the primary despite a low-latency WAN link.&lt;br /&gt;&lt;br /&gt;
  Root cause: Standby Redo Logs had never been created on the standby. Without SRLs, real-time apply cannot function. The MRP process was waiting for archived logs to be shipped rather than receiving redo in real time. The standby was only catching up when logs were archived , once per hour by default.&lt;br /&gt;&lt;br /&gt;
  &lt;strong&gt;Fix:&lt;/strong&gt; Created SRL groups matching primary online redo log size and count + 1. Real-time apply started immediately. Apply lag dropped from 8 hours to under 60 seconds within minutes.
&lt;/div&gt;

&lt;!-- ══════════════════════════════════════════════ --&gt;
&lt;h2 id=&quot;section7&quot;&gt;7. Cause 5: Standby Apply Bottleneck&lt;/h2&gt;
&lt;p&gt;
  &lt;span class=&quot;tag-cause&quot;&gt;Cause 5&lt;/span&gt; Redo is arriving at the standby on time (low transport lag) but MRP cannot apply it fast enough. Apply lag grows. This is purely a standby-side problem , do not touch the primary or network until you have confirmed this is the cause.
&lt;/p&gt;

&lt;div class=&quot;code-container&quot;&gt;
  &lt;div class=&quot;code-header&quot;&gt;
    &lt;span class=&quot;code-label&quot;&gt;SQL , Diagnose and Fix MRP Apply Bottleneck&lt;/span&gt;
    &lt;button class=&quot;copy-btn&quot; onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;
  &lt;/div&gt;
  &lt;div class=&quot;code-block&quot;&gt;-- Check MRP apply rate and wait events (run on STANDBY)
SELECT process,
       status,
       thread#,
       sequence#,
       block#,
       blocks
FROM   v$managed_standby
WHERE  process LIKE &#39;MRP%&#39;
OR     process = &#39;RFS&#39;;

-- Check what MRP is waiting for (run on STANDBY)
SELECT event,
       total_waits,
       ROUND(average_wait, 3)  AS avg_wait_ms,
       wait_class
FROM   v$system_event
WHERE  wait_class NOT IN (&#39;Idle&#39;, &#39;Network&#39;)
ORDER  BY time_waited DESC
FETCH FIRST 15 ROWS ONLY;

-- Check parallel apply worker count (run on STANDBY)
-- If only MRP0 shown, parallel apply is disabled
SELECT process,
       status,
       thread#
FROM   v$managed_standby
WHERE  process LIKE &#39;PR%&#39;    -- parallel recovery slaves
OR     process LIKE &#39;MRP%&#39;
ORDER  BY process;

-- Enable parallel apply (run on STANDBY , requires brief MRP restart)
-- Stop current apply
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;

-- Restart with parallel apply (match to standby CPU count)
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE
    PARALLEL 8
    USING CURRENT LOGFILE
    DISCONNECT FROM SESSION;

-- Verify parallel workers started
SELECT process, status
FROM   v$managed_standby
WHERE  process LIKE &#39;PR%&#39; OR process LIKE &#39;MRP%&#39;
ORDER  BY process;&lt;/div&gt;
&lt;/div&gt;

&lt;p&gt;&lt;span class=&quot;tag-fix&quot;&gt;Fix&lt;/span&gt; Enable parallel apply with a degree matching standby CPU count. Ensure standby has dedicated I/O for datafile writes , separate from RMAN backup disk. If Active Data Guard is enabled, read queries compete with MRP for I/O , use I/O Resource Manager to prioritise MRP. Check standby UNDO tablespace for contention if apply waits show undo-related events.&lt;/p&gt;

&lt;!-- ══════════════════════════════════════════════ --&gt;
&lt;h2 id=&quot;section8&quot;&gt;8. Cause 6: Standby Resource Starvation&lt;/h2&gt;
&lt;p&gt;
  &lt;span class=&quot;tag-cause&quot;&gt;Cause 6&lt;/span&gt; The standby server does not have enough CPU, memory, or I/O bandwidth to keep up with apply. This is frequently caused by under-specifying the standby relative to the primary, or by running competing workloads (RMAN backup, ADG reads, OS processes) on the same standby host.
&lt;/p&gt;

&lt;div class=&quot;code-container&quot;&gt;
  &lt;div class=&quot;code-header&quot;&gt;
    &lt;span class=&quot;code-label&quot;&gt;SQL , Diagnose Standby Resource Starvation&lt;/span&gt;
    &lt;button class=&quot;copy-btn&quot; onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;
  &lt;/div&gt;
  &lt;div class=&quot;code-block&quot;&gt;-- Check CPU and I/O pressure on standby (run on STANDBY)
SELECT stat_name,
       value
FROM   v$osstat
WHERE  stat_name IN (
    &#39;NUM_CPUS&#39;,
    &#39;LOAD&#39;,
    &#39;BUSY_TIME&#39;,
    &#39;IDLE_TIME&#39;,
    &#39;PHYSICAL_MEMORY_BYTES&#39;
);

-- Check if RMAN backup is running during peak apply (run on STANDBY)
SELECT session_key,
       input_type,
       status,
       TO_CHAR(start_time, &#39;YYYY-MM-DD HH24:MI&#39;)  AS start_time,
       input_bytes_display,
       output_bytes_display
FROM   v$rman_backup_job_details
WHERE  start_time &amp;gt; SYSDATE - 1
ORDER  BY start_time DESC;

-- Check I/O contention on standby datafiles (run on STANDBY)
SELECT name,
       ROUND(readtim  / NULLIF(phyrds,  0), 2)  AS avg_read_ms,
       ROUND(writetim / NULLIF(phywrts, 0), 2)  AS avg_write_ms,
       phyrds,
       phywrts
FROM   v$filestat f
JOIN   v$datafile d ON f.file# = d.file#
WHERE  (phyrds + phywrts) &amp;gt; 1000
ORDER  BY avg_write_ms DESC
FETCH FIRST 10 ROWS ONLY;

-- Use I/O Resource Manager to protect MRP (run on STANDBY)
-- Create plan that gives MRP highest I/O priority
BEGIN
    DBMS_RESOURCE_MANAGER.CREATE_PENDING_AREA();
    DBMS_RESOURCE_MANAGER.CREATE_PLAN(
        plan    =&amp;gt; &#39;STANDBY_MGMT_PLAN&#39;,
        comment =&amp;gt; &#39;Protect MRP apply from ADG read workload&#39;
    );
    DBMS_RESOURCE_MANAGER.CREATE_PLAN_DIRECTIVE(
        plan                  =&amp;gt; &#39;STANDBY_MGMT_PLAN&#39;,
        group_or_subplan      =&amp;gt; &#39;_ORACLE_BACKGROUND_GROUP_&#39;,
        comment               =&amp;gt; &#39;MRP background priority&#39;,
        mgmt_p1               =&amp;gt; 80
    );
    DBMS_RESOURCE_MANAGER.SUBMIT_PENDING_AREA();
END;
/&lt;/div&gt;
&lt;/div&gt;

&lt;!-- ══════════════════════════════════════════════ --&gt;
&lt;h2 id=&quot;section9&quot;&gt;9. SYNC vs ASYNC: Which Mode Causes Which Lag Pattern&lt;/h2&gt;
&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;&lt;th&gt;Scenario&lt;/th&gt;&lt;th&gt;SYNC Mode Behaviour&lt;/th&gt;&lt;th&gt;ASYNC Mode Behaviour&lt;/th&gt;&lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;&lt;td&gt;Network spike (100ms RTT)&lt;/td&gt;&lt;td&gt;Every commit stalls 100ms , performance crisis on primary&lt;/td&gt;&lt;td&gt;Transport lag grows silently , primary unaffected&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;Standby reboots&lt;/td&gt;&lt;td&gt;Primary stalls (Max Protection) or falls back to async (Max Availability)&lt;/td&gt;&lt;td&gt;Transport lag grows until standby returns; no primary impact&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;Redo volume burst&lt;/td&gt;&lt;td&gt;Network saturates; commits queue behind LGWR&lt;/td&gt;&lt;td&gt;NSA buffer fills; lag grows but primary performance maintained&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;Steady state (good network)&lt;/td&gt;&lt;td&gt;Transport lag near zero; apply lag depends on MRP&lt;/td&gt;&lt;td&gt;Small transport lag always present (1–5 sec typical)&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;Network intermittent loss&lt;/td&gt;&lt;td&gt;LGWR stalls on each retransmit; very visible on primary&lt;/td&gt;&lt;td&gt;Lag spikes during loss window; primary unaffected&lt;/td&gt;&lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;!-- ══════════════════════════════════════════════ --&gt;
&lt;h2 id=&quot;section10&quot;&gt;10. Lag Under Active Data Guard (Read-Only Standby)&lt;/h2&gt;
&lt;p&gt;
  Active Data Guard (ADG) introduces an additional lag risk: read queries on the standby compete with MRP for I/O bandwidth. In a busy ADG reporting workload, MRP can be starved of the I/O it needs to apply redo quickly.
&lt;/p&gt;

&lt;div class=&quot;code-container&quot;&gt;
  &lt;div class=&quot;code-header&quot;&gt;
    &lt;span class=&quot;code-label&quot;&gt;SQL , Monitor ADG Read vs MRP Apply I/O Competition&lt;/span&gt;
    &lt;button class=&quot;copy-btn&quot; onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;
  &lt;/div&gt;
  &lt;div class=&quot;code-block&quot;&gt;-- Check open mode on standby (ADG = READ ONLY WITH APPLY)
SELECT open_mode,
       database_role,
       db_unique_name
FROM   v$database;

-- Monitor read sessions vs MRP on standby
SELECT s.type,
       s.status,
       COUNT(*)  AS session_count
FROM   v$session s
WHERE  s.type = &#39;USER&#39;
OR     s.program LIKE &#39;%MRP%&#39;
GROUP  BY s.type, s.status;

-- Check I/O split between read sessions and MRP (run on STANDBY)
SELECT n.name,
       s.value
FROM   v$sesstat  s
JOIN   v$statname n ON s.statistic# = n.statistic#
JOIN   v$session  ss ON s.sid = ss.sid
WHERE  ss.program LIKE &#39;%MRP%&#39;
AND    n.name IN (
    &#39;physical reads&#39;,
    &#39;physical writes&#39;,
    &#39;redo size&#39;
);

-- Temporarily pause ADG reads to let MRP catch up (emergency use)
-- This closes standby to read sessions until apply lag clears
-- ALTER DATABASE CLOSE;
-- ALTER DATABASE RECOVER MANAGED STANDBY DATABASE
--     USING CURRENT LOGFILE DISCONNECT;
-- Then re-open: ALTER DATABASE OPEN READ ONLY;&lt;/div&gt;
&lt;/div&gt;

&lt;!-- ══════════════════════════════════════════════ --&gt;
&lt;h2 id=&quot;section11&quot;&gt;11. Building a Lag Monitoring Alert&lt;/h2&gt;
&lt;p&gt;Do not wait for a pager alert at 11 PM. Build proactive lag monitoring that catches problems before they become incidents.&lt;/p&gt;

&lt;div class=&quot;code-container&quot;&gt;
  &lt;div class=&quot;code-header&quot;&gt;
    &lt;span class=&quot;code-label&quot;&gt;SQL , Data Guard Lag Monitoring Query for Alert System&lt;/span&gt;
    &lt;button class=&quot;copy-btn&quot; onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;
  &lt;/div&gt;
  &lt;div class=&quot;code-block&quot;&gt;-- Comprehensive lag monitoring query (run on PRIMARY every 5 minutes)
-- Alerts when transport lag &amp;gt; 30s or apply lag &amp;gt; 120s
SELECT db_unique_name,
       name                                       AS metric,
       value                                      AS lag_value,
       CASE
           WHEN name = &#39;transport lag&#39;
                AND TO_DSINTERVAL(value) &amp;gt; INTERVAL &#39;0 00:00:30&#39; HOUR TO SECOND
           THEN &#39;ALERT: Transport lag exceeds 30 seconds&#39;
           WHEN name = &#39;apply lag&#39;
                AND TO_DSINTERVAL(value) &amp;gt; INTERVAL &#39;0 00:02:00&#39; HOUR TO SECOND
           THEN &#39;ALERT: Apply lag exceeds 2 minutes&#39;
           ELSE &#39;OK&#39;
       END                                        AS alert_status,
       time_computed
FROM   v$dataguard_stats
WHERE  name IN (&#39;transport lag&#39;, &#39;apply lag&#39;)
ORDER  BY name;

-- Archive gap detection (run on PRIMARY)
-- Any rows = sequence gap = serious problem
SELECT thread#,
       low_sequence#,
       high_sequence#
FROM   v$archive_gap
ORDER  BY thread#;

-- Full Data Guard health check (run on PRIMARY via DGMGRL)
-- dgmgrl / &quot;show configuration&quot;
-- dgmgrl / &quot;validate database verbose standby_db&quot;&lt;/div&gt;
&lt;/div&gt;

&lt;!-- ══════════════════════════════════════════════ --&gt;
&lt;h2 id=&quot;section12&quot;&gt;12. FAQ&lt;/h2&gt;

&lt;div class=&quot;faq-item&quot;&gt;
  &lt;div class=&quot;faq-question&quot;&gt;My transport lag shows +00 00:00:00 but apply lag is 2 hours. What is happening?&lt;/div&gt;
  &lt;div class=&quot;faq-answer&quot;&gt;
    Transport lag of zero means redo is arriving at the standby immediately , the network and primary are fine. Apply lag of 2 hours means MRP is 2 hours behind in applying what it has already received. This is a pure standby-side problem: check MRP parallel degree, standby I/O performance, RMAN backup scheduling, and whether ADG read workload is starving MRP. Do not waste time looking at the network or primary for this pattern.
  &lt;/div&gt;
&lt;/div&gt;

&lt;div class=&quot;faq-item&quot;&gt;
  &lt;div class=&quot;faq-question&quot;&gt;Should I increase redo log size to reduce transport lag?&lt;/div&gt;
  &lt;div class=&quot;faq-answer&quot;&gt;
    Increasing redo log size reduces log switch frequency, which smooths out redo transport by reducing the burst pattern of frequent log switches. However it does not reduce the total volume of redo being generated , so if the problem is sustained bandwidth saturation, larger logs will not help. Larger logs also mean a longer checkpoint interval, which can increase crash recovery time. The sweet spot for most production systems is 500 MB to 2 GB per redo log group, switched every 10–30 minutes under normal load.
  &lt;/div&gt;
&lt;/div&gt;

&lt;div class=&quot;faq-item&quot;&gt;
  &lt;div class=&quot;faq-question&quot;&gt;Can Data Guard lag cause data corruption?&lt;/div&gt;
  &lt;div class=&quot;faq-answer&quot;&gt;
    Lag itself does not cause corruption , it causes data loss risk if the primary fails while the standby is behind. Corruption is a different failure mode (block corruption on primary or standby) which Data Guard can actually detect and prevent using the &lt;code&gt;DB_BLOCK_CHECKING&lt;/code&gt; and &lt;code&gt;DB_LOST_WRITE_PROTECT&lt;/code&gt; parameters. Enable &lt;code&gt;DB_LOST_WRITE_PROTECT=TYPICAL&lt;/code&gt; on both primary and standby to detect lost writes that could cause divergence between the two databases.
  &lt;/div&gt;
&lt;/div&gt;

&lt;div class=&quot;faq-item&quot;&gt;
  &lt;div class=&quot;faq-question&quot;&gt;How do I reduce lag without changing from SYNC to ASYNC mode?&lt;/div&gt;
  &lt;div class=&quot;faq-answer&quot;&gt;
    Several options that preserve SYNC transport: (1) Enable redo log compression (&lt;code&gt;COMPRESSION=ENABLE&lt;/code&gt;) to reduce bandwidth by 50–70% at the cost of CPU. (2) Upgrade network bandwidth , going from 1 GbE to 10 GbE typically resolves SYNC lag caused by saturation. (3) Increase redo log group count so LGWR can switch to a new group while NSS sends the previous one. (4) Ensure the standby uses real-time apply (SRLs configured) so MRP stays close to arrival. (5) Schedule batch redo-heavy jobs during off-peak to avoid bursting the SYNC transport pipe.
  &lt;/div&gt;
&lt;/div&gt;

&lt;!-- RELATED --&gt;
&lt;div class=&quot;related-reading&quot;&gt;
  &lt;h2 id=&quot;section13&quot;&gt;13. Related Reading from Real Production Systems&lt;/h2&gt;
  &lt;p&gt;If you want to deepen your understanding of Oracle Data Guard and HA/DR architecture, the following articles may also be useful:&lt;/p&gt;
  &lt;ul&gt;
    &lt;li&gt;
      &lt;a href=&quot;#&quot;&gt;Oracle Data Guard Protection Modes: Zero Data Loss Design Strategy&lt;/a&gt;
      &lt;span class=&quot;why-matters&quot;&gt;Why it matters: Protection mode selection directly determines lag behaviour. This guide explains how SYNC/AFFIRM vs ASYNC/NOAFFIRM settings interact with the lag causes described in this article.&lt;/span&gt;
    &lt;/li&gt;
    &lt;li&gt;
      &lt;a href=&quot;#&quot;&gt;Oracle Performance Engineering Guide: AWR, ASH and SQL Monitor in 19c and 23ai&lt;/a&gt;
      &lt;span class=&quot;why-matters&quot;&gt;Why it matters: AWR and ASH on both primary and standby are the primary diagnostic tools for confirming lag root causes. This guide shows how to use them systematically across a Data Guard environment.&lt;/span&gt;
    &lt;/li&gt;
    &lt;li&gt;
      &lt;a href=&quot;#&quot;&gt;Oracle RAC Internals Explained: Cache Fusion and Cluster Design Lessons&lt;/a&gt;
      &lt;span class=&quot;why-matters&quot;&gt;Why it matters: RAC primary databases generate redo from all nodes simultaneously. Understanding Cache Fusion and multi-thread redo helps explain why RAC primaries can generate lag-inducing redo bursts during cross-node block transfers.&lt;/span&gt;
    &lt;/li&gt;
    &lt;li&gt;
      &lt;a href=&quot;#&quot;&gt;Oracle Autonomous Database Internals: What Is Really Automated&lt;/a&gt;
      &lt;span class=&quot;why-matters&quot;&gt;Why it matters: ADB uses Data Guard internally. Understanding ADB’s automated lag management helps architects design hybrid environments where on-premises primaries replicate to ADB standbys.&lt;/span&gt;
    &lt;/li&gt;
    &lt;li&gt;
      &lt;a href=&quot;https://chetanyadavds.blogspot.com/2026/01/n8n-oracle-telegram-alerts.html&quot; target=&quot;_blank&quot;&gt;N8N Oracle Telegram Alerts: Automating Database Monitoring&lt;/a&gt;
      &lt;span class=&quot;why-matters&quot;&gt;Why it matters: The lag monitoring queries in this article should be automated. This guide shows how to schedule them and push alerts to Telegram or email when thresholds are breached.&lt;/span&gt;
    &lt;/li&gt;
  &lt;/ul&gt;
&lt;/div&gt;

&lt;!-- AUTHOR --&gt;
&lt;div class=&quot;about-author&quot;&gt;
  &lt;h2&gt;About the Author&lt;/h2&gt;
  &lt;div class=&quot;author-name&quot;&gt;Chetan Yadav&lt;/div&gt;
  &lt;p class=&quot;author-bio&quot;&gt;
    &lt;strong&gt;Chetan Yadav&lt;/strong&gt; is a &lt;strong&gt;Senior Oracle, PostgreSQL, MySQL, and Cloud DBA&lt;/strong&gt; with &lt;strong&gt;15+ years&lt;/strong&gt; of hands-on experience managing production databases across on-premises, hybrid, and cloud environments. He specialises in high availability architecture, performance tuning, disaster recovery, and database migrations.
  &lt;/p&gt;
  &lt;p class=&quot;author-bio&quot;&gt;
    Chetan has diagnosed and resolved Data Guard lag incidents across financial, healthcare, and e-commerce production environments , including the 8-hour apply gap from missing Standby Redo Logs and the firewall stateful inspection transport lag described in this article. His writing focuses on precise diagnosis and precise resolution, not generic advice.
  &lt;/p&gt;
  &lt;p class=&quot;author-bio&quot;&gt;
    This blog focuses on &lt;strong&gt;real-world DBA problems, career growth, and practical learning&lt;/strong&gt; , not theoretical documentation or vendor marketing.
  &lt;/p&gt;
  &lt;div class=&quot;social-links&quot;&gt;
    &lt;a href=&quot;https://www.linkedin.com/in/chetanyadavvds/&quot; target=&quot;_blank&quot;&gt;LinkedIn&lt;/a&gt;
    &lt;a href=&quot;https://www.youtube.com/@levelup_careers&quot; target=&quot;_blank&quot;&gt;YouTube&lt;/a&gt;
    &lt;a href=&quot;https://www.instagram.com/levelup_careers/&quot; target=&quot;_blank&quot;&gt;Instagram&lt;/a&gt;
    &lt;a href=&quot;https://x.com/home&quot; target=&quot;_blank&quot;&gt;Twitter (X)&lt;/a&gt;
    &lt;a href=&quot;https://www.facebook.com/oracledbainfo/&quot; target=&quot;_blank&quot;&gt;Facebook&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;Newsletter&lt;/a&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;!-- POST FOOTER --&gt;
&lt;div class=&quot;post-footer&quot;&gt;
  &lt;div class=&quot;post-meta&quot;&gt;&lt;strong&gt;by Chetan Yadav&lt;/strong&gt; • March 2026&lt;/div&gt;
  &lt;div class=&quot;share-buttons&quot;&gt;
    &lt;strong&gt;Share:&lt;/strong&gt;
    &lt;a href=&quot;#&quot;&gt;Email&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;BlogThis&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;X&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;Facebook&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;Pinterest&lt;/a&gt;
  &lt;/div&gt;
  &lt;div class=&quot;tags&quot;&gt;
    &lt;strong&gt;Tags:&lt;/strong&gt;
    &lt;a href=&quot;#&quot;&gt;Data Guard Lag&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;Transport Lag&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;Apply Lag&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;Oracle Data Guard&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;SYNC ASYNC&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;MRP Apply&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;Standby Database&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;HA DR&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;Oracle 19c&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;Oracle DBA&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;Data Guard Troubleshooting&lt;/a&gt;
  &lt;/div&gt;
&lt;/div&gt;

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

&lt;script&gt;
function copyCode(button) {
  const codeContainer = button.closest(&#39;.code-container&#39;);
  const codeBlock = codeContainer.querySelector(&#39;.code-block&#39;);
  const textArea = document.createElement(&#39;textarea&#39;);
  textArea.value = codeBlock.textContent;
  textArea.style.position = &#39;fixed&#39;;
  textArea.style.left = &#39;-9999px&#39;;
  document.body.appendChild(textArea);
  textArea.select();
  textArea.setSelectionRange(0, 99999);
  try {
    document.execCommand(&#39;copy&#39;);
    button.textContent = &#39;Copied!&#39;;
    button.classList.add(&#39;copied&#39;);
    setTimeout(() =&gt; { button.textContent = &#39;Copy&#39;; button.classList.remove(&#39;copied&#39;); }, 2000);
  } catch(err) {
    button.textContent = &#39;Failed&#39;;
    setTimeout(() =&gt; { button.textContent = &#39;Copy&#39;; }, 2000);
  }
  document.body.removeChild(textArea);
}
&lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;</content><link rel='replies' type='application/atom+xml' href='http://chetanyadavds.blogspot.com/feeds/7968573798549270905/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://chetanyadavds.blogspot.com/2026/03/why-data-guard-lag-happens-production-sync-io-network.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/436196721812840248/posts/default/7968573798549270905'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/436196721812840248/posts/default/7968573798549270905'/><link rel='alternate' type='text/html' href='http://chetanyadavds.blogspot.com/2026/03/why-data-guard-lag-happens-production-sync-io-network.html' title='Why Data Guard Lag Happens in Production: Sync, I/O and Network Deep Dive'/><author><name>Chetan Yadav</name><uri>http://www.blogger.com/profile/02557500437758632199</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiE0TgifWM4l1b3sy_cK2y41bpqyfY1U25-p5IBKkSg8pJLFRvjYr_kF7W_MgsYdc21DutWF9H6qlShQDQspQLbZEQ5CSUA51Wp6Mh9l5Ygd4NPSuQyqwSMrKitCWwSLr0oHBg9TGjxAvAM7TTkkehHLL1MFWg0wSb31CxywQxIokg9pg/s1600/IMG-20251013-WA0038.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/a/AVvXsEiebFVqHDMyvs3HdDmgyS_y25XmjFhqFQA5wkeCVdbf1QBqxrtAA74gSqAvA8rvWLf7Phgz0bghjgkyigVXowkGbHTY7O32iT7S5dtYgrTcOW1cWO8-6Hzk6JJmWw_9isvD6mSjELYuH5wtyJHSlpFyPJJblPldv4U5Xja362vVHDuK7a-nsVbbxs8YjeY=s72-c" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-436196721812840248.post-6699814275717434054</id><published>2026-03-23T23:52:00.003+05:30</published><updated>2026-03-24T02:25:35.170+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="Oracle 19c"/><title type='text'>RMAN ACTIVE DUPLICATE — RUNNER DOC</title><content type='html'>&lt;span id=&quot;docs-internal-guid-758a510d-7fff-62ca-76a2-e8a3b4693f40&quot;&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 4.0pt; margin-left: 0cm; margin-right: 0cm; margin-top: 18.0pt; margin: 18pt 0cm 4pt;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 4.0pt; margin-left: 0cm; margin-right: 0cm; margin-top: 18.0pt; margin: 18pt 0cm 4pt;&quot;&gt;&lt;i&gt;&lt;span style=&quot;color: #666666; font-family: &amp;quot;Georgia&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 24pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;
&lt;!--[endif]--&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 4.0pt; margin-left: 0cm; margin-right: 0cm; margin-top: 18.0pt; margin: 18pt 0cm 4pt;&quot;&gt;&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 18pt; mso-bidi-font-size: 24.0pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;RMAN ACTIVE DUPLICATE — RUNNER
DOC&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 4.0pt; margin-left: 0cm; margin-right: 0cm; margin-top: 18.0pt; margin: 18pt 0cm 4pt;&quot;&gt;&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 18pt; mso-bidi-font-size: 24.0pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;Oracle 19c&amp;nbsp; |&amp;nbsp;
Target → Auxiliary (DR Clone)&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 4.0pt; margin-left: 0cm; margin-right: 0cm; margin-top: 18.0pt; margin: 18pt 0cm 4pt;&quot;&gt;&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 18pt; mso-bidi-font-size: 24.0pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;# Env: OL7.9 / 19.3.0.0.0&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/i&gt;&lt;/p&gt;&lt;div style=&quot;line-height: normal; margin: 18pt 0cm 4pt; text-align: left;&quot;&gt;&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;, &amp;quot;serif&amp;quot;;&quot;&gt;&lt;o:p&gt;&lt;span style=&quot;font-size: 18pt;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: x-small;&quot;&gt;* Note: This test is done in my lab machine, I will suggest first try in your lab for the test, then use it.&lt;/span&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/i&gt;&lt;/div&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 4.0pt; margin-left: 0cm; margin-right: 0cm; margin-top: 18.0pt; margin: 18pt 0cm 4pt;&quot;&gt;&lt;i&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 16pt; mso-bidi-font-size: 24.0pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;Environment reference &lt;/span&gt;&lt;/i&gt;&lt;i&gt;&lt;span style=&quot;color: #666666; font-family: &amp;quot;Georgia&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 24pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;br /&gt;
&lt;!--[if !supportLineBreakNewLine]--&gt;&lt;br /&gt;
&lt;!--[endif]--&gt;&lt;/span&gt;&lt;/i&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;MsoNormalTable&quot; style=&quot;border-collapse: collapse; mso-yfti-tbllook: 1184;&quot;&gt;
 &lt;tbody&gt;&lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #6a9955; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;# SOURCE (TARGET)&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;ORACLE_SID=FINPRD&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;DB_NAME=FINPRD&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;ORACLE_HOME=/u01/app/oracle/product/19.3.0/dbhome_1&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;ORACLE_BASE=/u01/app/oracle&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;HOST=ora-prod-01.corp.internal&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;TNS_ALIAS=FINPRD&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #6a9955; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;# DESTINATION (AUXILIARY / DR)&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;ORACLE_SID=FINDR&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;DB_NAME=FINDR&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;ORACLE_HOME=/u01/app/oracle/product/19.3.0/dbhome_1&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;ORACLE_BASE=/u01/app/oracle&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;HOST=ora-dr-01.corp.internal&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;TNS_ALIAS=FINDR&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #6a9955; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;# PATHS — auxiliary host&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;ORADATA=/data01/oradata/FINDR&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;FRA=/fra01/FINDR&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;ADMIN=/u01/app/oracle/admin/FINDR&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #6a9955; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;# RMAN SYS password&amp;nbsp; →&amp;nbsp; do NOT hardcode
  in prod, use wallet&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #6a9955; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;# SYS_PWD=&amp;lt;get from vault or
  /etc/oracle/.sys_cred&amp;gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&amp;nbsp;Pre Check – Source host &lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 3.0pt; margin-left: 0cm; margin-right: 0cm; margin-top: 12.0pt; margin: 12pt 0cm 3pt;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;[01] Verify source DB — open mode, archivelog,
force logging&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;MsoNormalTable&quot; style=&quot;border-collapse: collapse; mso-yfti-tbllook: 1184;&quot;&gt;
 &lt;tbody&gt;&lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;sqlplus / as sysdba&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;SELECT name, open_mode, log_mode, force_logging
  FROM v$database;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 3.0pt; margin-left: 0cm; margin-right: 0cm; margin-top: 12.0pt; margin: 12pt 0cm 3pt;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;→ expected output:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;MsoNormalTable&quot; style=&quot;border-collapse: collapse; mso-yfti-tbllook: 1184;&quot;&gt;
 &lt;tbody&gt;&lt;tr&gt;
  &lt;td style=&quot;background: rgb(44, 62, 80); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #ecf0f1; font-family: Consolas; font-size: 8.5pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;SQL&amp;gt; SELECT name, open_mode, log_mode,
  force_logging FROM v$database;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(44, 62, 80); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #ecf0f1; font-family: Consolas; font-size: 8.5pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(44, 62, 80); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #ecf0f1; font-family: Consolas; font-size: 8.5pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;NAME&amp;nbsp; &amp;nbsp; &amp;nbsp; OPEN_MODE&amp;nbsp; &amp;nbsp;
  &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; LOG_MODE &amp;nbsp; &amp;nbsp; FOR&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(44, 62, 80); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #ecf0f1; font-family: Consolas; font-size: 8.5pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;--------- -------------------- ------------ ---&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(44, 62, 80); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #ecf0f1; font-family: Consolas; font-size: 8.5pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;FINPRD&amp;nbsp; &amp;nbsp; READ WRITE &amp;nbsp; &amp;nbsp;
  &amp;nbsp; &amp;nbsp; &amp;nbsp; ARCHIVELOG &amp;nbsp; YES&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(44, 62, 80); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #ecf0f1; font-family: Consolas; font-size: 8.5pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(44, 62, 80); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #ecf0f1; font-family: Consolas; font-size: 8.5pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;1 row selected.&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;MsoNormalTable&quot; style=&quot;border-collapse: collapse; mso-yfti-tbllook: 1184;&quot;&gt;
 &lt;tbody&gt;&lt;tr&gt;
  &lt;td style=&quot;background: rgb(45, 31, 31); padding: 3pt 6pt 3pt 9pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #e74c3c; font-family: Consolas; font-size: 8.5pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;# WARNING: If FOR=NO&amp;nbsp; →&amp;nbsp; ALTER DATABASE
  FORCE LOGGING;&amp;nbsp; then re-check.&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 3.0pt; margin-left: 0cm; margin-right: 0cm; margin-top: 12.0pt; margin: 12pt 0cm 3pt;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;[02] Check source listener — FINPRD must show READY&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;MsoNormalTable&quot; style=&quot;border-collapse: collapse; mso-yfti-tbllook: 1184;&quot;&gt;
 &lt;tbody&gt;&lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #6a9955; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;# On ora-prod-01.corp.internal&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;lsnrctl status LISTENER&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;tnsping FINPRD&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 3.0pt; margin-left: 0cm; margin-right: 0cm; margin-top: 12.0pt; margin: 12pt 0cm 3pt;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;→ expected (relevant lines only):&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;MsoNormalTable&quot; style=&quot;border-collapse: collapse; mso-yfti-tbllook: 1184;&quot;&gt;
 &lt;tbody&gt;&lt;tr&gt;
  &lt;td style=&quot;background: rgb(44, 62, 80); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #ecf0f1; font-family: Consolas; font-size: 8.5pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;Service &quot;FINPRD&quot; has 1 instance(s).&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(44, 62, 80); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #ecf0f1; font-family: Consolas; font-size: 8.5pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&amp;nbsp; Instance &quot;FINPRD&quot;, status READY,
  has 1 handler(s) for this service...&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(44, 62, 80); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #ecf0f1; font-family: Consolas; font-size: 8.5pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(44, 62, 80); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #ecf0f1; font-family: Consolas; font-size: 8.5pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;TNS Ping Utility for Linux: Version 19.0.0.0.0&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(44, 62, 80); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #ecf0f1; font-family: Consolas; font-size: 8.5pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;OK (10 msec)&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;MsoNormalTable&quot; style=&quot;border-collapse: collapse; mso-yfti-tbllook: 1184;&quot;&gt;
 &lt;tbody&gt;&lt;tr&gt;
  &lt;td style=&quot;background: rgb(45, 31, 31); padding: 3pt 6pt 3pt 9pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #e74c3c; font-family: Consolas; font-size: 8.5pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;# WARNING: If FINPRD shows BLOCKED or UNKNOWN —
  DB is not fully open. Do not proceed.&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;OS
PREPARATION&amp;nbsp; —&amp;nbsp; AUXILIARY HOST&lt;br /&gt;
&lt;!--[if !supportLineBreakNewLine]--&gt;&lt;br /&gt;
&lt;!--[endif]--&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;[03] Set
env — run this first in every new shell session&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;MsoNormalTable&quot; style=&quot;border-collapse: collapse; mso-yfti-tbllook: 1184;&quot;&gt;
 &lt;tbody&gt;&lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #6a9955; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;# ssh oracle@ora-dr-01.corp.internal&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;export ORACLE_SID=FINDR&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;export ORACLE_BASE=/u01/app/oracle&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;export ORACLE_HOME=/u01/app/oracle/product/19.3.0/dbhome_1&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;export PATH=$ORACLE_HOME/bin:$PATH&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;export
  LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #6a9955; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;# quick sanity&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;echo $ORACLE_SID &amp;amp;&amp;amp; which sqlplus
  &amp;amp;&amp;amp; which rman&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 2.0pt; margin-left: 0cm; margin-right: 0cm; margin-top: 5.0pt; margin: 5pt 0cm 2pt;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;→ expected:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;MsoNormalTable&quot; style=&quot;border-collapse: collapse; mso-yfti-tbllook: 1184;&quot;&gt;
 &lt;tbody&gt;&lt;tr&gt;
  &lt;td style=&quot;background: rgb(44, 62, 80); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #ecf0f1; font-family: Consolas; font-size: 8.5pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;FINDR&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(44, 62, 80); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #ecf0f1; font-family: Consolas; font-size: 8.5pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;/u01/app/oracle/product/19.3.0/dbhome_1/bin/sqlplus&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(44, 62, 80); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #ecf0f1; font-family: Consolas; font-size: 8.5pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;/u01/app/oracle/product/19.3.0/dbhome_1/bin/rman&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 2.0pt; margin-left: 0cm; margin-right: 0cm; margin-top: 5.0pt; margin: 5pt 0cm 2pt;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;[04] Create directory structure on auxiliary&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;MsoNormalTable&quot; style=&quot;border-collapse: collapse; mso-yfti-tbllook: 1184;&quot;&gt;
 &lt;tbody&gt;&lt;tr&gt;
  &lt;td style=&quot;background: rgb(45, 31, 31); padding: 3pt 6pt 3pt 9pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #e74c3c; font-family: Consolas; font-size: 8.5pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;# WARNING: Run as root or oracle with sudo. RMAN
  will ORA-01119 if these don&#39;t exist.&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;MsoNormalTable&quot; style=&quot;border-collapse: collapse; mso-yfti-tbllook: 1184;&quot;&gt;
 &lt;tbody&gt;&lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;mkdir -p /data01/oradata/FINDR&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;mkdir -p /fra01/FINDR&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;mkdir -p /u01/app/oracle/admin/FINDR/adump&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;mkdir -p /u01/app/oracle/admin/FINDR/dpdump&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;mkdir -p /u01/app/oracle/admin/FINDR/hdump&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;chown -R oracle:oinstall /data01/oradata /fra01&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;chmod -R 755 /data01/oradata /fra01
  /u01/app/oracle/admin/FINDR&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #6a9955; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;# verify&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;ls -ld /data01/oradata/FINDR /fra01/FINDR
  /u01/app/oracle/admin/FINDR/adump&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 2.0pt; margin-left: 0cm; margin-right: 0cm; margin-top: 5.0pt; margin: 5pt 0cm 2pt;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;→ all 3 lines should show oracle:oinstall ownership:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;MsoNormalTable&quot; style=&quot;border-collapse: collapse; mso-yfti-tbllook: 1184;&quot;&gt;
 &lt;tbody&gt;&lt;tr&gt;
  &lt;td style=&quot;background: rgb(44, 62, 80); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #ecf0f1; font-family: Consolas; font-size: 8.5pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;drwxr-xr-x 2 oracle oinstall 6 Nov 12 09:14
  /data01/oradata/FINDR&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(44, 62, 80); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #ecf0f1; font-family: Consolas; font-size: 8.5pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;drwxr-xr-x 2 oracle oinstall 6 Nov 12 09:14
  /fra01/FINDR&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(44, 62, 80); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #ecf0f1; font-family: Consolas; font-size: 8.5pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;drwxr-xr-x 2 oracle oinstall 6 Nov 12 09:14
  /u01/app/oracle/admin/FINDR/adump&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 2.0pt; margin-left: 0cm; margin-right: 0cm; margin-top: 5.0pt; margin: 5pt 0cm 2pt;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;[05] Create password file — must match SYS password on source&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;MsoNormalTable&quot; style=&quot;border-collapse: collapse; mso-yfti-tbllook: 1184;&quot;&gt;
 &lt;tbody&gt;&lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #6a9955; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;# password must match ora-prod-01 SYS password
  exactly&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;orapwd file=$ORACLE_HOME/dbs/orapwFINDR \&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
  password=&amp;lt;SYS_PASSWORD&amp;gt; \&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; entries=5 \&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; force=y \&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; format=12&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;ls -lh $ORACLE_HOME/dbs/orapwFINDR&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 2.0pt; margin-left: 0cm; margin-right: 0cm; margin-top: 5.0pt; margin: 5pt 0cm 2pt;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;→ expected:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;MsoNormalTable&quot; style=&quot;border-collapse: collapse; mso-yfti-tbllook: 1184;&quot;&gt;
 &lt;tbody&gt;&lt;tr&gt;
  &lt;td style=&quot;background: rgb(44, 62, 80); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #ecf0f1; font-family: Consolas; font-size: 8.5pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;-rw-r----- 1 oracle oinstall 2.0K Nov 12 09:16
  /u01/app/oracle/product/19.3.0/dbhome_1/dbs/orapwFINDR&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;MsoNormalTable&quot; style=&quot;border-collapse: collapse; mso-yfti-tbllook: 1184;&quot;&gt;
 &lt;tbody&gt;&lt;tr&gt;
  &lt;td style=&quot;background: rgb(45, 31, 31); padding: 3pt 6pt 3pt 9pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #e74c3c; font-family: Consolas; font-size: 8.5pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;# WARNING: ORA-01017 during RMAN connect =
  password mismatch. Recreate orapwd with correct password.&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 2.0pt; margin-left: 0cm; margin-right: 0cm; margin-top: 5.0pt; margin: 5pt 0cm 2pt;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;[06] Create minimal pfile — just enough for NOMOUNT&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;br /&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;# INFO: Only parameters needed for NOMOUNT. RMAN will set the rest from source spfile during duplicate.&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;br /&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;MsoNormalTable&quot; style=&quot;border-collapse: collapse; mso-yfti-tbllook: 1184;&quot;&gt;
 &lt;tbody&gt;&lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;cat &amp;gt; $ORACLE_HOME/dbs/initFINDR.ora &amp;lt;&amp;lt;
  &#39;EOF&#39;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;db_name=FINDR&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;db_unique_name=FINDR&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;sga_target=2G&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;pga_aggregate_target=512M&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;db_block_size=8192&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;enable_pluggable_database=false&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;audit_file_dest=/u01/app/oracle/admin/FINDR/adump&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;diagnostic_dest=/u01/app/oracle&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;EOF&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;cat $ORACLE_HOME/dbs/initFINDR.ora&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;# INFO: If source is CDB → set enable_pluggable_database=true&lt;br /&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 2.0pt; margin-left: 0cm; margin-right: 0cm; margin-top: 5.0pt; margin: 5pt 0cm 2pt;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;[07] Start auxiliary in NOMOUNT&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;MsoNormalTable&quot; style=&quot;border-collapse: collapse; mso-yfti-tbllook: 1184;&quot;&gt;
 &lt;tbody&gt;&lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;sqlplus / as sysdba&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;STARTUP NOMOUNT
  PFILE=&#39;/u01/app/oracle/product/19.3.0/dbhome_1/dbs/initFINDR.ora&#39;;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 2.0pt; margin-left: 0cm; margin-right: 0cm; margin-top: 5.0pt; margin: 5pt 0cm 2pt;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;→ expected:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;MsoNormalTable&quot; style=&quot;border-collapse: collapse; mso-yfti-tbllook: 1184;&quot;&gt;
 &lt;tbody&gt;&lt;tr&gt;
  &lt;td style=&quot;background: rgb(44, 62, 80); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #ecf0f1; font-family: Consolas; font-size: 8.5pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;SQL&amp;gt; STARTUP NOMOUNT PFILE=&#39;...&#39;;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(44, 62, 80); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #ecf0f1; font-family: Consolas; font-size: 8.5pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;ORACLE instance started.&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(44, 62, 80); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #ecf0f1; font-family: Consolas; font-size: 8.5pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(44, 62, 80); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #ecf0f1; font-family: Consolas; font-size: 8.5pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;Total System Global Area 2147483648 bytes&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(44, 62, 80); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #ecf0f1; font-family: Consolas; font-size: 8.5pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;Fixed Size&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
  &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 8900952 bytes&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(44, 62, 80); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #ecf0f1; font-family: Consolas; font-size: 8.5pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;Variable Size &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
  &amp;nbsp; 503316480 bytes&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(44, 62, 80); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #ecf0f1; font-family: Consolas; font-size: 8.5pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;Database Buffers &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
  1627389952 bytes&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(44, 62, 80); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #ecf0f1; font-family: Consolas; font-size: 8.5pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;Redo Buffers&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
  &amp;nbsp; &amp;nbsp; &amp;nbsp; 7876608 bytes&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;MsoNormalTable&quot; style=&quot;border-collapse: collapse; mso-yfti-tbllook: 1184;&quot;&gt;
 &lt;tbody&gt;&lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #6a9955; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;-- validate instance came up&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;SELECT instance_name, status FROM v$instance;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #6a9955; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;-- Expected: FINDR &amp;nbsp; STARTED&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;TNS +
LISTENER&amp;nbsp; —&amp;nbsp; AUXILIARY HOST&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 2.0pt; margin-left: 0cm; margin-right: 0cm; margin-top: 5.0pt; margin: 5pt 0cm 2pt;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;[08] Add both aliases to tnsnames.ora on auxiliary&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;MsoNormalTable&quot; style=&quot;border-collapse: collapse; mso-yfti-tbllook: 1184;&quot;&gt;
 &lt;tbody&gt;&lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;vi $ORACLE_HOME/network/admin/tnsnames.ora&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #6a9955; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;# --- append these entries ---&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;MsoNormalTable&quot; style=&quot;border-collapse: collapse; mso-yfti-tbllook: 1184;&quot;&gt;
 &lt;tbody&gt;&lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;FINPRD =&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&amp;nbsp; (DESCRIPTION =&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&amp;nbsp; &amp;nbsp; (ADDRESS = (PROTOCOL = TCP)(HOST =
  ora-prod-01.corp.internal)(PORT = 1521))&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&amp;nbsp; &amp;nbsp; (CONNECT_DATA =&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; (SERVER = DEDICATED)&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; (SERVICE_NAME = FINPRD)&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&amp;nbsp; &amp;nbsp; )&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&amp;nbsp; )&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;FINDR =&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&amp;nbsp; (DESCRIPTION =&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&amp;nbsp; &amp;nbsp; (ADDRESS = (PROTOCOL = TCP)(HOST =
  ora-dr-01.corp.internal)(PORT = 1521))&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&amp;nbsp; &amp;nbsp; (CONNECT_DATA =&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; (SERVER = DEDICATED)&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; (SERVICE_NAME = FINDR)&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&amp;nbsp; &amp;nbsp; )&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&amp;nbsp; )&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 3.0pt; margin-left: 0cm; margin-right: 0cm; margin-top: 12.0pt; margin: 12pt 0cm 3pt;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;[09] Configure STATIC listener entry — required
while DB is NOMOUNT&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;MsoNormalTable&quot; style=&quot;border-collapse: collapse; mso-yfti-tbllook: 1184;&quot;&gt;
 &lt;tbody&gt;&lt;tr&gt;
  &lt;td style=&quot;background: rgb(45, 31, 31); padding: 3pt 6pt 3pt 9pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #e74c3c; font-family: Consolas; font-size: 8.5pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;# WARNING: Dynamic registration won&#39;t work in
  NOMOUNT. Static SID_LIST entry is mandatory or RMAN connection will fail.&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;MsoNormalTable&quot; style=&quot;border-collapse: collapse; mso-yfti-tbllook: 1184;&quot;&gt;
 &lt;tbody&gt;&lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;vi $ORACLE_HOME/network/admin/listener.ora&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;MsoNormalTable&quot; style=&quot;border-collapse: collapse; mso-yfti-tbllook: 1184;&quot;&gt;
 &lt;tbody&gt;&lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;LISTENER =&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&amp;nbsp; (DESCRIPTION_LIST =&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&amp;nbsp; &amp;nbsp; (DESCRIPTION =&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; (ADDRESS = (PROTOCOL =
  TCP)(HOST = ora-dr-01.corp.internal)(PORT = 1521))&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&amp;nbsp; &amp;nbsp; )&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&amp;nbsp; )&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;SID_LIST_LISTENER =&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&amp;nbsp; (SID_LIST =&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&amp;nbsp; &amp;nbsp; (SID_DESC =&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; (GLOBAL_DBNAME = FINDR)&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; (ORACLE_HOME =
  /u01/app/oracle/product/19.3.0/dbhome_1)&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; (SID_NAME = FINDR)&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&amp;nbsp; &amp;nbsp; )&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&amp;nbsp; )&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;MsoNormalTable&quot; style=&quot;border-collapse: collapse; mso-yfti-tbllook: 1184;&quot;&gt;
 &lt;tbody&gt;&lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;lsnrctl stop LISTENER&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;lsnrctl start LISTENER&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;lsnrctl status LISTENER | grep -A2 &#39;Service\|SID&#39;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 3.0pt; margin-left: 0cm; margin-right: 0cm; margin-top: 12.0pt; margin: 12pt 0cm 3pt;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;→ FINDR will show UNKNOWN — that is normal for
static entry in NOMOUNT:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;MsoNormalTable&quot; style=&quot;border-collapse: collapse; mso-yfti-tbllook: 1184;&quot;&gt;
 &lt;tbody&gt;&lt;tr&gt;
  &lt;td style=&quot;background: rgb(44, 62, 80); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #ecf0f1; font-family: Consolas; font-size: 8.5pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;Service &quot;FINDR&quot; has 1 instance(s).&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(44, 62, 80); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #ecf0f1; font-family: Consolas; font-size: 8.5pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&amp;nbsp; Instance &quot;FINDR&quot;, status
  UNKNOWN, has 1 handler(s) for this service...&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 3.0pt; margin-left: 0cm; margin-right: 0cm; margin-top: 12.0pt; margin: 12pt 0cm 3pt;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;[10] Validate TNS + actual login to source before
running RMAN&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;MsoNormalTable&quot; style=&quot;border-collapse: collapse; mso-yfti-tbllook: 1184;&quot;&gt;
 &lt;tbody&gt;&lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;tnsping FINPRD &amp;nbsp; # must be OK&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;tnsping FINDR&amp;nbsp; &amp;nbsp; # must be OK&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #6a9955; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;# test real connection to source&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;sqlplus sys/&amp;lt;SYS_PASSWORD&amp;gt;@FINPRD as sysdba&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;SELECT name, open_mode FROM v$database;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;EXIT;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;MsoNormalTable&quot; style=&quot;border-collapse: collapse; mso-yfti-tbllook: 1184;&quot;&gt;
 &lt;tbody&gt;&lt;tr&gt;
  &lt;td style=&quot;background: rgb(45, 31, 31); padding: 3pt 6pt 3pt 9pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #e74c3c; font-family: Consolas; font-size: 8.5pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;# WARNING: If tnsping OK but sqlplus fails →
  firewall blocking 1521, or wrong password. Fix before RMAN.&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;RMAN
ACTIVE DUPLICATE&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 3.0pt; margin-left: 0cm; margin-right: 0cm; margin-top: 12.0pt; margin: 12pt 0cm 3pt;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;[11] Connect RMAN to both target and auxiliary&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;MsoNormalTable&quot; style=&quot;border-collapse: collapse; mso-yfti-tbllook: 1184;&quot;&gt;
 &lt;tbody&gt;&lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #6a9955; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;# run from ora-dr-01 (auxiliary host)&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;rman&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;CONNECT TARGET sys/&amp;lt;SYS_PASSWORD&amp;gt;@FINPRD;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;CONNECT AUXILIARY sys/&amp;lt;SYS_PASSWORD&amp;gt;@FINDR;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 2.0pt; margin-left: 0cm; margin-right: 0cm; margin-top: 5.0pt; margin: 5pt 0cm 2pt;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;→ expected:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;MsoNormalTable&quot; style=&quot;border-collapse: collapse; mso-yfti-tbllook: 1184;&quot;&gt;
 &lt;tbody&gt;&lt;tr&gt;
  &lt;td style=&quot;background: rgb(44, 62, 80); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #ecf0f1; font-family: Consolas; font-size: 8.5pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;Recovery Manager: Release 19.0.0.0.0 - Production&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(44, 62, 80); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #ecf0f1; font-family: Consolas; font-size: 8.5pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(44, 62, 80); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #ecf0f1; font-family: Consolas; font-size: 8.5pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;connected to target database: FINPRD
  (DBID=3421876501)&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(44, 62, 80); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #ecf0f1; font-family: Consolas; font-size: 8.5pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;connected to auxiliary database: FINDR (not
  mounted)&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;MsoNormalTable&quot; style=&quot;border-collapse: collapse; mso-yfti-tbllook: 1184;&quot;&gt;
 &lt;tbody&gt;&lt;tr&gt;
  &lt;td style=&quot;background: rgb(45, 31, 31); padding: 3pt 6pt 3pt 9pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #e74c3c; font-family: Consolas; font-size: 8.5pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;# WARNING: ORA-12541 → listener not running or static
  entry missing (re-check step 09).&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(45, 31, 31); padding: 3pt 6pt 3pt 9pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #e74c3c; font-family: Consolas; font-size: 8.5pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;# WARNING: ORA-01017 → password file wrong or not
  created (re-check step 05).&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 2.0pt; margin-left: 0cm; margin-right: 0cm; margin-top: 5.0pt; margin: 5pt 0cm 2pt;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;[12] Execute DUPLICATE — monitor alert log in parallel session&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;MsoNormalTable&quot; style=&quot;border-collapse: collapse; mso-yfti-tbllook: 1184;&quot;&gt;
 &lt;tbody&gt;&lt;tr&gt;
  &lt;td style=&quot;background: rgb(26, 37, 51); padding: 3pt 6pt 3pt 9pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #3498db; font-family: Consolas; font-size: 8.5pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;# INFO: Open a second SSH session now and tail
  the alert log before hitting run.&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;MsoNormalTable&quot; style=&quot;border-collapse: collapse; mso-yfti-tbllook: 1184;&quot;&gt;
 &lt;tbody&gt;&lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #6a9955; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;# --- SECOND TERMINAL (monitor) ---&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;tail -100f
  /u01/app/oracle/diag/rdbms/findr/FINDR/trace/alert_FINDR.log&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;MsoNormalTable&quot; style=&quot;border-collapse: collapse; mso-yfti-tbllook: 1184;&quot;&gt;
 &lt;tbody&gt;&lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #6a9955; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;# --- RMAN SESSION (step 11 continued) ---&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;RUN {&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&amp;nbsp; ALLOCATE CHANNEL c1 TYPE DISK;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&amp;nbsp; ALLOCATE CHANNEL c2 TYPE DISK;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&amp;nbsp; ALLOCATE AUXILIARY CHANNEL a1 TYPE DISK;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&amp;nbsp; ALLOCATE AUXILIARY CHANNEL a2 TYPE DISK;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&amp;nbsp; DUPLICATE TARGET DATABASE TO FINDR&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&amp;nbsp; &amp;nbsp; FROM ACTIVE DATABASE&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&amp;nbsp; &amp;nbsp; SPFILE&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; PARAMETER_VALUE_CONVERT
  &#39;FINPRD&#39;,&#39;FINDR&#39;,&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&amp;nbsp;&amp;nbsp;
  &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
  &amp;nbsp; &amp;nbsp; &amp;nbsp; &#39;/data01/oradata/FINPRD&#39;,&#39;/data01/oradata/FINDR&#39;,&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&amp;nbsp;&amp;nbsp;
  &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
  &amp;nbsp; &amp;nbsp; &amp;nbsp; &#39;/fra01/FINPRD&#39;,&#39;/fra01/FINDR&#39;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; SET DB_UNIQUE_NAME=&#39;FINDR&#39;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; SET DB_NAME=&#39;FINDR&#39;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; SET INSTANCE_NAME=&#39;FINDR&#39;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; SET
  AUDIT_FILE_DEST=&#39;/u01/app/oracle/admin/FINDR/adump&#39;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; SET
  DIAGNOSTIC_DEST=&#39;/u01/app/oracle&#39;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; SET DB_FILE_NAME_CONVERT&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
  &#39;/data01/oradata/FINPRD&#39;,&#39;/data01/oradata/FINDR&#39;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; SET LOG_FILE_NAME_CONVERT&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
  &#39;/data01/oradata/FINPRD&#39;,&#39;/data01/oradata/FINDR&#39;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; SET
  LOG_ARCHIVE_DEST_1=&#39;LOCATION=/fra01/FINDR&#39;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; SET
  CONTROL_FILES=&#39;/data01/oradata/FINDR/control01.ctl&#39;,&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
  &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &#39;/fra01/FINDR/control02.ctl&#39;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&amp;nbsp; &amp;nbsp; NOFILENAMECHECK;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;}&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 2.0pt; margin-left: 0cm; margin-right: 0cm; margin-top: 5.0pt; margin: 5pt 0cm 2pt;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;→ last line on success:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;MsoNormalTable&quot; style=&quot;border-collapse: collapse; mso-yfti-tbllook: 1184;&quot;&gt;
 &lt;tbody&gt;&lt;tr&gt;
  &lt;td style=&quot;background: rgb(44, 62, 80); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #ecf0f1; font-family: Consolas; font-size: 8.5pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;Finished Duplicate Db at 12-NOV-2024 11:43:07&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;MsoNormalTable&quot; style=&quot;border-collapse: collapse; mso-yfti-tbllook: 1184;&quot;&gt;
 &lt;tbody&gt;&lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #6a9955; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;# ORA-19505 / ORA-17628&amp;nbsp; →&amp;nbsp; disk space
  issue on auxiliary paths&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #6a9955; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;# ORA-01119&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
  &amp;nbsp; &amp;nbsp; →&amp;nbsp; directory missing, re-check step 04&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #6a9955; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;# Channel drops mid-run&amp;nbsp; →&amp;nbsp; network
  instability or NET_TIMEOUT too low&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #6a9955; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;# &amp;nbsp; workaround: add to RMAN config →&amp;nbsp;
  CONFIGURE CHANNEL DEVICE TYPE DISK PARAMS &#39;NET_TIMEOUT=300&#39;;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;POST-DUPLICATE
STEPS&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #7fb3d3; font-family: Consolas; font-size: 9.5pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 2.0pt; margin-left: 0cm; margin-right: 0cm; margin-top: 5.0pt; margin: 5pt 0cm 2pt;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;[13] Confirm DB opened — check role, mode, log_mode&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;MsoNormalTable&quot; style=&quot;border-collapse: collapse; mso-yfti-tbllook: 1184;&quot;&gt;
 &lt;tbody&gt;&lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;sqlplus / as sysdba&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;SELECT name, db_unique_name, open_mode, log_mode,
  database_role&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;FROM &amp;nbsp; v$database;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 2.0pt; margin-left: 0cm; margin-right: 0cm; margin-top: 5.0pt; margin: 5pt 0cm 2pt;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;→ expected:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;MsoNormalTable&quot; style=&quot;border-collapse: collapse; mso-yfti-tbllook: 1184;&quot;&gt;
 &lt;tbody&gt;&lt;tr&gt;
  &lt;td style=&quot;background: rgb(44, 62, 80); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #ecf0f1; font-family: Consolas; font-size: 8.5pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;NAME &amp;nbsp; DB_UNIQUE_NAME&amp;nbsp; OPEN_MODE &amp;nbsp;
  LOG_MODE &amp;nbsp; DATABASE_ROLE&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(44, 62, 80); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #ecf0f1; font-family: Consolas; font-size: 8.5pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;------ --------------- ----------- ----------
  ----------------&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(44, 62, 80); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #ecf0f1; font-family: Consolas; font-size: 8.5pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;FINDR&amp;nbsp; FINDR &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;
  &amp;nbsp; READ WRITE&amp;nbsp; ARCHIVELOG PRIMARY&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 2.0pt; margin-left: 0cm; margin-right: 0cm; margin-top: 5.0pt; margin: 5pt 0cm 2pt;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;[14] Confirm SPFILE is active — not running off pfile&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;MsoNormalTable&quot; style=&quot;border-collapse: collapse; mso-yfti-tbllook: 1184;&quot;&gt;
 &lt;tbody&gt;&lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;SELECT value FROM v$parameter WHERE name =
  &#39;spfile&#39;;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #6a9955; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;-- must return non-null path&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #6a9955; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;-- also check on OS&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;ls -lh $ORACLE_HOME/dbs/spfileFINDR.ora&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;MsoNormalTable&quot; style=&quot;border-collapse: collapse; mso-yfti-tbllook: 1184;&quot;&gt;
 &lt;tbody&gt;&lt;tr&gt;
  &lt;td style=&quot;background: rgb(45, 31, 31); padding: 3pt 6pt 3pt 9pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #e74c3c; font-family: Consolas; font-size: 8.5pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;# WARNING: If spfile value is NULL → RMAN didn&#39;t
  apply SPFILE clause. Check duplicate command, re-run.&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 2.0pt; margin-left: 0cm; margin-right: 0cm; margin-top: 5.0pt; margin: 5pt 0cm 2pt;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;[15] Verify all files are on auxiliary paths — no FINPRD leftover&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;MsoNormalTable&quot; style=&quot;border-collapse: collapse; mso-yfti-tbllook: 1184;&quot;&gt;
 &lt;tbody&gt;&lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #6a9955; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;-- must return ZERO rows&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;SELECT &#39;datafile&#39; src, name FROM v$datafile&amp;nbsp;
  WHERE name LIKE &#39;%FINPRD%&#39;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;UNION ALL&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;SELECT &#39;tempfile&#39; src, name FROM v$tempfile
  &amp;nbsp; WHERE name LIKE &#39;%FINPRD%&#39;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;UNION ALL&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;SELECT &#39;logfile&#39;&amp;nbsp; src, member FROM
  v$logfile&amp;nbsp; WHERE member LIKE &#39;%FINPRD%&#39;;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #6a9955; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;-- if rows returned → file rename needed before
  production use&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 2.0pt; margin-left: 0cm; margin-right: 0cm; margin-top: 5.0pt; margin: 5pt 0cm 2pt;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;→ expected:&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;MsoNormalTable&quot; style=&quot;border-collapse: collapse; mso-yfti-tbllook: 1184;&quot;&gt;
 &lt;tbody&gt;&lt;tr&gt;
  &lt;td style=&quot;background: rgb(44, 62, 80); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #ecf0f1; font-family: Consolas; font-size: 8.5pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;no rows selected&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 2.0pt; margin-left: 0cm; margin-right: 0cm; margin-top: 5.0pt; margin: 5pt 0cm 2pt;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;[16] Check redo logs + tempfiles are online&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;MsoNormalTable&quot; style=&quot;border-collapse: collapse; mso-yfti-tbllook: 1184;&quot;&gt;
 &lt;tbody&gt;&lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;SELECT group#, status, members FROM v$log ORDER
  BY 1;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #6a9955; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;-- one group should be CURRENT, others
  INACTIVE/UNUSED&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;SELECT file#, name, status FROM v$tempfile;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #6a9955; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;-- status should be ONLINE&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 2.0pt; margin-left: 0cm; margin-right: 0cm; margin-top: 5.0pt; margin: 5pt 0cm 2pt;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;[17] Check invalid objects + registry&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;MsoNormalTable&quot; style=&quot;border-collapse: collapse; mso-yfti-tbllook: 1184;&quot;&gt;
 &lt;tbody&gt;&lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;SELECT count(*) invalid_obj FROM dba_objects
  WHERE status=&#39;INVALID&#39;;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #6a9955; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;-- compare vs source; minor count is acceptable
  if same on source&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;SELECT comp_name, version, status FROM
  dba_registry ORDER BY comp_name;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #6a9955; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;-- all components should be VALID&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 2.0pt; margin-left: 0cm; margin-right: 0cm; margin-top: 5.0pt; margin: 5pt 0cm 2pt;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;[18] Force listener re-registration + confirm READY&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;MsoNormalTable&quot; style=&quot;border-collapse: collapse; mso-yfti-tbllook: 1184;&quot;&gt;
 &lt;tbody&gt;&lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;ALTER SYSTEM REGISTER;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #6a9955; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;-- wait 30 sec then:&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #6a9955; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;-- (from OS)&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;lsnrctl status LISTENER | grep -A2 FINDR&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 2.0pt; margin-left: 0cm; margin-right: 0cm; margin-top: 5.0pt; margin: 5pt 0cm 2pt;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;→ after registration (was UNKNOWN in step 09, now should be READY):&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;MsoNormalTable&quot; style=&quot;border-collapse: collapse; mso-yfti-tbllook: 1184;&quot;&gt;
 &lt;tbody&gt;&lt;tr&gt;
  &lt;td style=&quot;background: rgb(44, 62, 80); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #ecf0f1; font-family: Consolas; font-size: 8.5pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;Service &quot;FINDR&quot; has 1 instance(s).&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(44, 62, 80); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #ecf0f1; font-family: Consolas; font-size: 8.5pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&amp;nbsp; Instance &quot;FINDR&quot;, status READY,
  has 1 handler(s) for this service...&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 2.0pt; margin-left: 0cm; margin-right: 0cm; margin-top: 5.0pt; margin: 5pt 0cm 2pt;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;[19] Take immediate backup of controlfile + spfile&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;MsoNormalTable&quot; style=&quot;border-collapse: collapse; mso-yfti-tbllook: 1184;&quot;&gt;
 &lt;tbody&gt;&lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;rman target /&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;BACKUP CURRENT CONTROLFILE FORMAT
  &#39;/fra01/FINDR/cf_%d_%T_%s.bkp&#39;;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;BACKUP SPFILE FORMAT
  &#39;/fra01/FINDR/spfile_%d_%T_%s.bkp&#39;;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;LIST BACKUP SUMMARY;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;FINAL
VALIDATION&amp;nbsp; —&amp;nbsp; PASTE &amp;amp; RUN&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;MsoNormalTable&quot; style=&quot;border-collapse: collapse; mso-yfti-tbllook: 1184;&quot;&gt;
 &lt;tbody&gt;&lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;sqlplus / as sysdba &amp;lt;&amp;lt; &#39;EOF&#39;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;set linesize 120 pagesize 50&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;prompt === 1. DB IDENTITY ===&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;SELECT name, db_unique_name, created FROM
  v$database;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;prompt === 2. OPEN MODE + ROLE ===&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;SELECT open_mode, database_role, log_mode FROM
  v$database;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;prompt === 3. INSTANCE STATUS ===&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;SELECT instance_name, status, database_status
  FROM v$instance;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;prompt === 4. REDO LOG STATUS ===&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;SELECT group#, status, members, bytes/1048576 mb
  FROM v$log ORDER BY 1;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;prompt === 5. TEMP TABLESPACE ===&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;SELECT tablespace_name, status FROM
  dba_tablespaces WHERE contents=&#39;TEMPORARY&#39;;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;prompt === 6. CONTROLFILE STATUS ===&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;SELECT name, status FROM v$controlfile;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;prompt === 7. SPFILE IN USE ===&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;SELECT value FROM v$parameter WHERE
  name=&#39;spfile&#39;;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;prompt === 8. ARCHIVE DEST STATUS ===&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;SELECT dest_name, status, target FROM
  v$archive_dest WHERE status=&#39;VALID&#39;;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;prompt === 9. INVALID OBJECTS COUNT ===&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;SELECT count(*) invalid_count FROM dba_objects
  WHERE status=&#39;INVALID&#39;;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;prompt === 10. CURRENT SCN ===&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;SELECT current_scn FROM v$database;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;EXIT;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;EOF&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;MsoNormalTable&quot; style=&quot;border-collapse: collapse; mso-yfti-tbllook: 1184;&quot;&gt;
 &lt;tbody&gt;&lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #6a9955; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;# OS-level sanity&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;ps -ef | grep pmon | grep -i findr&amp;nbsp; &amp;nbsp; #
  ora_pmon_FINDR must be running&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
  &lt;td style=&quot;background: rgb(30, 30, 30); padding: 0cm 8pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #d4d4d4; font-family: Consolas; font-size: 9pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;lsnrctl status | grep FINDR &amp;nbsp; &amp;nbsp; &amp;nbsp;
  &amp;nbsp; &amp;nbsp; # status READY expected&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;&lt;table border=&quot;0&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;MsoNormalTable&quot; style=&quot;border-collapse: collapse; mso-yfti-tbllook: 1184;&quot;&gt;
 &lt;tbody&gt;&lt;tr&gt;
  &lt;td style=&quot;background: rgb(13, 17, 23); border-top: solid #444444 1.0pt; border: none; mso-border-top-alt: solid #444444 .5pt; padding: 6pt 10pt;&quot; valign=&quot;top&quot;&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 2pt;&quot;&gt;&lt;span style=&quot;color: #6a9955; font-family: Consolas; font-size: 8.5pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;# END OF RUNNER DOC&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;,&amp;quot;serif&amp;quot;; font-size: 12pt; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/span&gt;&lt;/p&gt;
  &lt;p class=&quot;MsoNormal&quot; style=&quot;line-height: normal; margin-bottom: 0cm;&quot;&gt;&lt;span style=&quot;color: #555555; font-family: Consolas; font-size: 8pt; mso-bidi-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-font-family: &amp;quot;Times New Roman&amp;quot;; mso-fareast-language: EN-IN;&quot;&gt;# Rev: 1.0&amp;nbsp; |&amp;nbsp; Tested: 19.3.0.0.0 /
  OL7.9&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
  &lt;/td&gt;
 &lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;&lt;p dir=&quot;ltr&quot; style=&quot;line-height: 1.2; margin-bottom: 4pt; margin-top: 0pt;&quot;&gt;

















































































































































































































































































































&lt;/p&gt;&lt;p class=&quot;MsoNormal&quot;&gt;&lt;o:p&gt;&amp;nbsp;&lt;/o:p&gt;&lt;/p&gt;&lt;/span&gt;</content><link rel='replies' type='application/atom+xml' href='http://chetanyadavds.blogspot.com/feeds/6699814275717434054/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://chetanyadavds.blogspot.com/2026/03/rman-active-duplicate-runner-doc.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/436196721812840248/posts/default/6699814275717434054'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/436196721812840248/posts/default/6699814275717434054'/><link rel='alternate' type='text/html' href='http://chetanyadavds.blogspot.com/2026/03/rman-active-duplicate-runner-doc.html' title='RMAN ACTIVE DUPLICATE — RUNNER DOC'/><author><name>Chetan Yadav</name><uri>http://www.blogger.com/profile/02557500437758632199</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiE0TgifWM4l1b3sy_cK2y41bpqyfY1U25-p5IBKkSg8pJLFRvjYr_kF7W_MgsYdc21DutWF9H6qlShQDQspQLbZEQ5CSUA51Wp6Mh9l5Ygd4NPSuQyqwSMrKitCWwSLr0oHBg9TGjxAvAM7TTkkehHLL1MFWg0wSb31CxywQxIokg9pg/s1600/IMG-20251013-WA0038.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-436196721812840248.post-4672445555915244170</id><published>2026-03-23T11:30:00.001+05:30</published><updated>2026-03-23T11:30:00.114+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="ADB"/><category scheme="http://www.blogger.com/atom/ns#" term="ADW"/><category scheme="http://www.blogger.com/atom/ns#" term="ATP"/><category scheme="http://www.blogger.com/atom/ns#" term="Auto-Indexing"/><category scheme="http://www.blogger.com/atom/ns#" term="Auto-Patching"/><category scheme="http://www.blogger.com/atom/ns#" term="Auto-Scaling"/><category scheme="http://www.blogger.com/atom/ns#" term="Autonomous Database"/><category scheme="http://www.blogger.com/atom/ns#" term="Cloud Architecture"/><category scheme="http://www.blogger.com/atom/ns#" term="Exadata"/><category scheme="http://www.blogger.com/atom/ns#" term="OCI"/><category scheme="http://www.blogger.com/atom/ns#" term="Oracle Cloud"/><category scheme="http://www.blogger.com/atom/ns#" term="Oracle DBA"/><title type='text'>Oracle Autonomous Database Internals: What Is Really Automated</title><content type='html'>
&lt;html lang=&quot;en&quot;&gt;
&lt;head&gt;
&lt;meta charset=&quot;UTF-8&quot;&gt;&lt;/meta&gt;
&lt;title&gt;Oracle Autonomous Database Internals: What Is Really Automated&lt;/title&gt;
&lt;meta content=&quot;width=device-width, initial-scale=1.0&quot; name=&quot;viewport&quot;&gt;&lt;/meta&gt;
&lt;meta content=&quot;Oracle Autonomous Database internals: what is really automated vs what DBAs still own. ADW, ATP, auto-patching, auto-indexing, auto-scaling explained for OCI architects.&quot; name=&quot;description&quot;&gt;&lt;/meta&gt;
&lt;link href=&quot;data:image/svg+xml,%3Csvg xmlns=&#39;http://www.w3.org/2000/svg&#39; viewBox=&#39;0 0 100 100&#39;%3E%3Cdefs%3E%3ClinearGradient id=&#39;g&#39; x1=&#39;0%25&#39; y1=&#39;0%25&#39; x2=&#39;100%25&#39; y2=&#39;100%25&#39;%3E%3Cstop offset=&#39;0%25&#39; style=&#39;stop-color:%23d93025&#39;/%3E%3Cstop offset=&#39;100%25&#39; style=&#39;stop-color:%23a82318&#39;/%3E%3C/linearGradient%3E%3C/defs%3E%3Crect width=&#39;100&#39; height=&#39;100&#39; rx=&#39;20&#39; fill=&#39;url(%23g)&#39;/%3E%3Cpath d=&#39;M20,30 L35,30 L35,70 L20,70 Z M40,40 L55,40 L55,70 L40,70 Z M60,25 L75,25 L75,70 L60,70 Z&#39; fill=&#39;white&#39; opacity=&#39;0.9&#39;/%3E%3C/svg%3E&quot; rel=&quot;icon&quot; type=&quot;image/svg+xml&quot;&gt;&lt;/link&gt;
&lt;style&gt;
*{margin:0;padding:0;box-sizing:border-box}
body{background:#fff;color:#333;font-family:Arial,Helvetica,sans-serif;font-size:16px;line-height:1.7}

/* HERO — OCI blue gradient */
.hero-header{background:linear-gradient(135deg,#003057 0%,#0070d1 50%,#003057 100%);color:#fff;padding:60px 40px;width:100%}
.hero-header-content{max-width:1200px;margin:0 auto;padding:0 20px}
.hero-header h1{font-size:42px;font-weight:700;color:#fff;line-height:1.3;margin-bottom:20px}
.hero-subtitle{font-size:20px;font-weight:300;color:#bae6fd;opacity:.95;margin-bottom:30px}
.hero-meta{display:flex;gap:30px;align-items:center;flex-wrap:wrap;font-size:15px;color:#93c5fd}
.hero-meta-item{display:flex;align-items:center;gap:8px}

.hero-image-section{width:100%;margin:0;padding:0;overflow:hidden;background:#f8fafc}
.hero-image-section img{width:100%;height:auto;display:block;max-height:740px;object-fit:contain;padding:20px 0}

.main-content-wrapper{width:100%;background:#fff}
.container{max-width:800px;margin:0 auto;padding:30px 20px;background:#fff}

.reading-time-badge{display:inline-block;background:linear-gradient(135deg,#0070d1 0%,#003057 100%);color:#fff;padding:12px 28px;border-radius:50px;font-size:15px;font-weight:500;margin-bottom:30px;box-shadow:0 4px 12px rgba(0,112,209,.3)}
.page-tagline{color:#666;font-size:15px;font-style:italic;text-align:center;margin-bottom:35px}

.read-more-link{display:block;margin:28px 0 8px}
.read-more-link a{color:#0070d1;font-size:15px;text-decoration:none;font-style:italic}
.read-more-link a:hover{text-decoration:underline}

.toc{background:#eff6ff;border-left:4px solid #0070d1;padding:28px 32px;margin:35px 0;border-radius:8px;box-shadow:0 1px 3px rgba(0,0,0,.05)}
.toc-header{display:flex;align-items:center;gap:10px;font-size:24px;font-weight:bold;color:#000;margin-bottom:20px}
.toc ol{margin-left:20px;line-height:1.9;counter-reset:toc-counter;list-style:none}
.toc ol li{counter-increment:toc-counter;margin:12px 0;font-size:16px;padding-bottom:12px;border-bottom:1px solid #bfdbfe;transition:all .2s ease}
.toc ol li:last-child{border-bottom:none}
.toc ol li:hover{padding-left:8px}
.toc ol li::before{content:counter(toc-counter) &quot;. &quot;;font-weight:600;color:#0070d1;margin-right:8px}
.toc a{color:#0070d1;text-decoration:none}
.toc a:hover{text-decoration:underline}

h2{font-size:28px;font-weight:bold;color:#000;margin:45px 0 20px;line-height:1.3}
h3{font-size:22px;font-weight:600;color:#333;margin:30px 0 15px}

p{margin:16px 0;color:#333;line-height:1.7}
ul,ol{margin:18px 0 18px 35px;color:#333;line-height:1.7}
ul li,ol li{margin:10px 0}
strong{font-weight:bold;color:#333}
em{font-style:italic}
a{color:#0070d1;text-decoration:none}
a:hover{text-decoration:underline}

/* Blogger title fix */
.post-title,.entry-title,h1.post-title,h3.post-title{display:none!important}

.tag-good{display:inline-block;background:#e6f4ea;color:#137333;border:1px solid #a8d5b5;border-radius:4px;padding:1px 8px;font-size:13px;font-weight:600;margin-right:6px;vertical-align:middle}
.tag-bad{display:inline-block;background:#fce8e6;color:#c5221f;border:1px solid #f5a8a4;border-radius:4px;padding:1px 8px;font-size:13px;font-weight:600;margin-right:6px;vertical-align:middle}
.tag-warn{display:inline-block;background:#fffbeb;color:#92400e;border:1px solid #fcd34d;border-radius:4px;padding:1px 8px;font-size:13px;font-weight:600;margin-right:6px;vertical-align:middle}
.tag-auto{display:inline-block;background:#eff6ff;color:#1d4ed8;border:1px solid #93c5fd;border-radius:4px;padding:1px 8px;font-size:12px;font-weight:700;margin-left:6px;vertical-align:middle;letter-spacing:.03em}
.tag-dba{display:inline-block;background:#fef2f2;color:#b91c1c;border:1px solid #fca5a5;border-radius:4px;padding:1px 8px;font-size:12px;font-weight:700;margin-left:6px;vertical-align:middle;letter-spacing:.03em}

.code-container{position:relative;margin:24px 0}
.code-header{background:#003057;color:#fff;padding:10px 16px;border-radius:8px 8px 0 0;display:flex;justify-content:space-between;align-items:center;font-size:14px}
.code-label{font-weight:500}
.copy-btn{background:#0070d1;color:#fff;border:none;padding:6px 14px;border-radius:5px;cursor:pointer;font-size:13px;transition:background .2s;font-family:Arial,sans-serif}
.copy-btn:hover{background:#005ba1}
.copy-btn.copied{background:#10b981}
.code-block{background:#f8f9fa;border:1px solid #e0e0e0;border-radius:0 0 8px 8px;padding:18px 20px;margin:0;overflow-x:auto;font-family:&#39;Courier New&#39;,Courier,monospace;font-size:14px;line-height:1.7;white-space:pre;tab-size:4}
code{background:#f8f9fa;padding:2px 6px;border-radius:3px;font-family:&#39;Courier New&#39;,monospace;font-size:14px;color:#0070d1}

.info-box{background:#fffbeb;border-left:4px solid #f59e0b;padding:18px 22px;border-radius:0 8px 8px 0;margin:25px 0}
.info-box strong{color:#92400e}
.tip-box{background:#eff6ff;border-left:4px solid #0070d1;padding:18px 22px;border-radius:0 8px 8px 0;margin:25px 0}
.tip-box strong{color:#1e3a5f}
.incident-box{background:#fef2f2;border-left:4px solid #ef4444;padding:18px 22px;border-radius:0 8px 8px 0;margin:25px 0}
.incident-box strong{color:#991b1b}
.success-box{background:#f0fdf4;border-left:4px solid #22c55e;padding:18px 22px;border-radius:0 8px 8px 0;margin:25px 0}
.success-box strong{color:#15803d}

table{width:100%;border-collapse:collapse;margin:25px 0;background:#fff;border:1px solid #e0e0e0}
thead{background:#f8f9fa}
th{padding:12px;text-align:left;font-weight:bold;color:#000;border-bottom:2px solid #e0e0e0;font-size:15px}
td{padding:12px;border-bottom:1px solid #e0e0e0;color:#333;font-size:15px}
tr:last-child td{border-bottom:none}
tbody tr:hover{background:#eff6ff}

.checklist{background:#eff6ff;border:1px solid #bfdbfe;border-radius:8px;padding:24px 28px;margin:18px 0}
.checklist h3{margin-top:0;color:#1e293b;font-size:18px}
.checklist ul{list-style:none;margin-left:0}
.checklist ul li{padding:6px 0 6px 28px;position:relative}
.checklist ul li::before{content:&quot;&quot;;position:absolute;left:4px;top:13px;width:10px;height:10px;background:#0070d1;border-radius:50%}

.faq-item{margin:25px 0;border-bottom:1px solid #e5e7eb;padding-bottom:25px}
.faq-item:last-child{border-bottom:none}
.faq-question{font-weight:600;color:#000;font-size:17px;margin-bottom:10px}
.faq-answer{color:#333;line-height:1.7}

.related-reading{background:#f8f9fa;border:1px solid #e0e0e0;border-radius:8px;padding:30px;margin:40px 0}
.related-reading h2{margin-top:0}
.related-reading ul{margin-left:25px}
.related-reading li{margin:18px 0;line-height:1.7}
.related-reading .why-matters{color:#666;font-size:15px;margin-top:5px;display:block}

.about-author{background:#fffbf0;border:1px solid #e0e0e0;border-radius:8px;padding:30px;margin:40px 0}
.about-author h2{margin-top:0;font-size:28px}
.author-name{font-size:20px;font-weight:bold;color:#000;margin-bottom:10px}
.author-bio{color:#333;line-height:1.7;margin-bottom:15px}
.social-links{margin-top:20px}
.social-links a{display:inline-block;margin-right:20px;color:#0070d1;text-decoration:none;font-size:16px}
.social-links a:hover{text-decoration:underline}

.post-footer{border-top:1px solid #e0e0e0;padding-top:25px;margin-top:40px;color:#666;font-size:15px}
.post-meta{margin-bottom:15px}
.share-buttons{margin:20px 0}
.share-buttons a{display:inline-block;margin-right:15px;color:#0070d1;font-size:14px}
.tags{margin-top:20px}
.tags strong{color:#666;font-weight:normal}
.tags a{color:#0070d1;margin-right:10px;font-size:14px}

@media(max-width:768px){
  .hero-header{padding:40px 24px}
  .hero-header h1{font-size:28px}
  .hero-subtitle{font-size:16px}
  .hero-meta{gap:20px}
  h2{font-size:24px}
  h3{font-size:20px}
  table{font-size:13px}
  th,td{padding:9px}
  .code-block{font-size:12px}
}
&lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;

&lt;div class=&quot;hero-header&quot;&gt;
  &lt;div class=&quot;hero-header-content&quot;&gt;
    &lt;h1&gt;Oracle Autonomous Database Internals: What Is Really Automated&lt;/h1&gt;
    &lt;div class=&quot;hero-subtitle&quot;&gt;Beyond the Marketing - What ADB Actually Does vs What DBAs Still Own&lt;/div&gt;
    &lt;div class=&quot;hero-meta&quot;&gt;
      &lt;div class=&quot;hero-meta-item&quot;&gt;23 March 2026&lt;/div&gt;
      &lt;div class=&quot;hero-meta-item&quot;&gt; Chetan Yadav — Senior Oracle &amp;amp; Cloud DBA&lt;/div&gt;
      &lt;div class=&quot;hero-meta-item&quot;&gt;⏱️ 13–14 min read&lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;div class=&quot;main-content-wrapper&quot;&gt;
&lt;div class=&quot;container&quot;&gt;

&lt;div class=&quot;reading-time-badge&quot;&gt;⏱️ Estimated Reading Time: 13–14 minutes&lt;/div&gt;
&lt;div class=&quot;page-tagline&quot;&gt;ADW • ATP • Auto-Indexing • Auto-Patching • Auto-Scaling • What DBAs Still Own&lt;/div&gt;

&lt;div class=&quot;hero-image-section&quot;&gt;
  &lt;img alt=&quot;Oracle Autonomous Database architecture diagram showing ADW ATP workload types automation engine and DBA responsibilities&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEi4i5mEc0CfOAlKKs7M6jkUjzlHpR-ZlxKijzjceDNIyssc80nkOpwHTMwXmiQ79K8A-c2-3UA0qeuMGURieOkKH3E3Z4dgU2F1avckmDf4Ej4C7AeOlu0r_CpscOl5n1_nJHJz3Mglq8O_FrEHlFs6OL1JVSejJtM7DamIFWogZPR_REp97mudxN7hrvY&quot; /&gt;
&lt;/div&gt;

&lt;div class=&quot;info-box&quot; style=&quot;margin-top: 28px;&quot;&gt;
  &lt;strong&gt;⚙️ Environment Referenced in This Article&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;
  &lt;strong&gt;Service:&lt;/strong&gt; Oracle Autonomous Database on OCI (Shared &amp;amp; Dedicated Exadata Infrastructure)&lt;br /&gt;
  &lt;strong&gt;Workload Types Tested:&lt;/strong&gt; ADW, ATP, AJD &amp;nbsp;•&amp;nbsp;
  &lt;strong&gt;Oracle DB Version:&lt;/strong&gt; 19c base + 23ai features on ADB&lt;br /&gt;
  &lt;strong&gt;Workload:&lt;/strong&gt; 2.8 TB OLTP + 6.1 TB analytics &amp;nbsp;•&amp;nbsp;
  &lt;strong&gt;Scale:&lt;/strong&gt; 4–32 ECPU auto-scaling &amp;nbsp;•&amp;nbsp;
  &lt;strong&gt;Region:&lt;/strong&gt; OCI ap-mumbai-1 primary, ap-hyderabad-1 DR
&lt;/div&gt;

&lt;p&gt;
  &quot;The self-driving database.&quot; Oracle&#39;s marketing for Autonomous Database promises that the DBA is no longer needed — the database manages itself. Patches itself. Tunes itself. Scales itself. After running Oracle ADB in production for financial and analytics workloads across multiple OCI regions, I can tell you the reality is more nuanced and more interesting than the marketing suggests.
&lt;/p&gt;
&lt;p&gt;
  Oracle Autonomous Database genuinely automates things that used to consume enormous DBA time — patching, backup, storage management, and a meaningful subset of performance tuning. But it does not eliminate the need for database expertise. It changes what that expertise is applied to. The DBA who understands what ADB actually automates and what it does not will be dramatically more effective than one who takes the &quot;self-driving&quot; claim at face value.
&lt;/p&gt;
&lt;p&gt;
  This guide opens the hood on Oracle ADB internals: how auto-indexing actually works, what happens inside auto-patching, when auto-scaling kicks in, and which critical responsibilities remain firmly with the DBA and architect.
&lt;/p&gt;

&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;

&lt;div class=&quot;toc&quot;&gt;
  &lt;div class=&quot;toc-header&quot;&gt;&lt;span&gt;&lt;/span&gt; Table of Contents&lt;/div&gt;
  &lt;ol&gt;
    &lt;li&gt;&lt;a href=&quot;#section1&quot;&gt;ADB Architecture: What Runs Under the Hood&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#section2&quot;&gt;Autonomous Data Warehouse (ADW) vs Autonomous Transaction Processing (ATP)&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#section3&quot;&gt;Auto-Indexing: How It Actually Works&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#section4&quot;&gt;Auto-Patching: Zero Downtime or Marketing?&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#section5&quot;&gt;Auto-Scaling: CPU and Storage Elasticity&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#section6&quot;&gt;Auto-Backup and Restore&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#section7&quot;&gt;Security: What Is Automatic and What Is Not&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#section8&quot;&gt;What DBAs Still Own on ADB&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#section9&quot;&gt;ADB Dedicated vs Shared: Architecture Differences&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#section10&quot;&gt;Real Production Lessons from ADB&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#section11&quot;&gt;FAQ&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#section12&quot;&gt;Related Reading from Real Production Systems&lt;/a&gt;&lt;/li&gt;
  &lt;/ol&gt;
&lt;/div&gt;

&lt;!-- ══════════════════════════════════════════════ --&gt;
&lt;h2 id=&quot;section1&quot;&gt;1. ADB Architecture: What Runs Under the Hood&lt;/h2&gt;
&lt;p&gt;
  Oracle Autonomous Database is Oracle Database Enterprise Edition running on Exadata infrastructure in OCI, with an automation layer built on top that handles operational tasks through machine learning, predefined policies, and Oracle&#39;s internal tooling.
&lt;/p&gt;
&lt;p&gt;
  It is not a different database engine. It is not a rewrite. The SQL engine, optimizer, PL/SQL runtime, RAC, Data Guard, RMAN — all the same Oracle database internals you know from on-premises. What changes is who manages the operational layer. On-premises, that is you. On ADB, Oracle&#39;s automation layer does it.
&lt;/p&gt;

&lt;h3&gt;ADB Stack: Layer by Layer&lt;/h3&gt;
&lt;table&gt;
  &lt;thead&gt;&lt;tr&gt;&lt;th&gt;Layer&lt;/th&gt;&lt;th&gt;Component&lt;/th&gt;&lt;th&gt;Managed By&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;&lt;td&gt;Hardware&lt;/td&gt;&lt;td&gt;Exadata Bare Metal, NVMe, InfiniBand RDMA&lt;/td&gt;&lt;td&gt;Oracle (fully invisible to customer)&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;Storage&lt;/td&gt;&lt;td&gt;ASM, Exadata Smart Scan, Flash Cache&lt;/td&gt;&lt;td&gt;Oracle (automatic)&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;Database Engine&lt;/td&gt;&lt;td&gt;Oracle DB EE 19c/23ai, RAC, Data Guard&lt;/td&gt;&lt;td&gt;Oracle (automatic) + Customer (SQL/schema)&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;Automation Layer&lt;/td&gt;&lt;td&gt;Auto-index, Auto-patch, Auto-scale, Auto-backup&lt;/td&gt;&lt;td&gt;Oracle (ML-driven policies)&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;Application Layer&lt;/td&gt;&lt;td&gt;Schema design, SQL quality, connection logic&lt;/td&gt;&lt;td&gt;Customer (DBA / Architect)&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;OCI Services&lt;/td&gt;&lt;td&gt;VCN, IAM, Object Storage, FastConnect&lt;/td&gt;&lt;td&gt;Customer (Cloud Architect)&lt;/td&gt;&lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;div class=&quot;code-container&quot;&gt;
  &lt;div class=&quot;code-header&quot;&gt;
    &lt;span class=&quot;code-label&quot;&gt;SQL — Verify ADB Instance Configuration&lt;/span&gt;
    &lt;button class=&quot;copy-btn&quot; onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;
  &lt;/div&gt;
  &lt;div class=&quot;code-block&quot;&gt;-- Check ADB database version and configuration
SELECT banner_full
FROM   v$version;

-- Check ECPU allocation and workload type
SELECT name,
       value
FROM   v$parameter
WHERE  name IN (
    &#39;cpu_count&#39;,
    &#39;db_name&#39;,
    &#39;db_unique_name&#39;,
    &#39;enable_automatic_maintenance_pdb&#39;,
    &#39;optimizer_adaptive_statistics&#39;
);

-- Check Data Guard configuration (always on in ADB)
SELECT name,
       db_unique_name,
       database_role,
       protection_mode,
       protection_level
FROM   v$database;

-- Check Exadata Smart Scan eligibility
SELECT name,
       value
FROM   v$sysstat
WHERE  name IN (
    &#39;cell physical IO interconnect bytes&#39;,
    &#39;cell physical IO bytes eligible for predicate offload&#39;,
    &#39;cell physical IO bytes saved by storage index&#39;
)
ORDER  BY name;&lt;/div&gt;
&lt;/div&gt;

&lt;!-- ══════════════════════════════════════════════ --&gt;
&lt;h2 id=&quot;section2&quot;&gt;2. ADW vs ATP: Architecture Differences&lt;/h2&gt;
&lt;p&gt;
  Oracle offers two primary ADB workload types. The underlying database engine is identical — what differs is the default configuration Oracle applies and the optimizations pre-enabled for each workload pattern.
&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;&lt;th&gt;Feature&lt;/th&gt;&lt;th&gt;ADW (Analytics)&lt;/th&gt;&lt;th&gt;ATP (OLTP)&lt;/th&gt;&lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;&lt;td&gt;Default storage format&lt;/td&gt;&lt;td&gt;Hybrid Columnar Compression&lt;/td&gt;&lt;td&gt;Row format (OLTP optimized)&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;In-Memory Column Store&lt;/td&gt;&lt;td&gt;Auto-enabled, large allocation&lt;/td&gt;&lt;td&gt;Selective, smaller allocation&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;Parallel query&lt;/td&gt;&lt;td&gt;High DOP, auto-managed&lt;/td&gt;&lt;td&gt;Limited DOP to protect OLTP latency&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;Smart Scan offload&lt;/td&gt;&lt;td&gt;Aggressively used&lt;/td&gt;&lt;td&gt;Used selectively&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;Connection type&lt;/td&gt;&lt;td&gt;Dedicated connections&lt;/td&gt;&lt;td&gt;DRCP (connection pooling) default&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;Auto-indexing&lt;/td&gt;&lt;td&gt;B-tree + bitmap indexes&lt;/td&gt;&lt;td&gt;B-tree indexes only&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;Auto-partitioning&lt;/td&gt;&lt;td&gt;Yes — detects and creates&lt;/td&gt;&lt;td&gt;Limited&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;Primary use case&lt;/td&gt;&lt;td&gt;DW, reporting, ML, analytics&lt;/td&gt;&lt;td&gt;App backend, microservices, APIs&lt;/td&gt;&lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;div class=&quot;tip-box&quot;&gt;
  &lt;strong&gt;Choosing Between ADW and ATP:&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;
  The choice matters more than most teams realize. ADW with its columnar compression and Smart Scan offload can be 10–50x faster than ATP for large analytical scans — but ATP handles high-concurrency short OLTP transactions with lower latency. If your workload is mixed (OLTP + reporting), run ATP and use Active Data Guard read offload for the reporting queries, or use ADW with a separate ATP for transaction writes connected via Database Link.
&lt;/div&gt;

&lt;!-- ══════════════════════════════════════════════ --&gt;
&lt;h2 id=&quot;section3&quot;&gt;3. Auto-Indexing: How It Actually Works&lt;/h2&gt;
&lt;p&gt;
  Auto-indexing is one of the most technically impressive features of Oracle Autonomous Database. It uses machine learning to monitor SQL workloads, identify queries that would benefit from indexes, create candidate indexes invisibly, validate them against real workload queries, and only make them visible if they provide a measurable improvement.
&lt;/p&gt;

&lt;h3&gt;The Auto-Indexing Process Step by Step&lt;/h3&gt;
&lt;ol&gt;
  &lt;li&gt;&lt;strong&gt;Workload Capture:&lt;/strong&gt; ADB continuously monitors SQL from the cursor cache and AWR, identifying full table scans, high-elapsed-time queries, and repeated access patterns on unindexed columns&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Candidate Creation:&lt;/strong&gt; The auto-indexing engine creates candidate indexes as &lt;strong&gt;invisible indexes&lt;/strong&gt; — they exist in the data dictionary but the optimizer cannot use them yet&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Validation:&lt;/strong&gt; The engine runs the captured SQL statements using SQL plan baselines, forcing the optimizer to consider the invisible index and measuring actual performance improvement&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Promotion:&lt;/strong&gt; If the index improves performance by a meaningful threshold, it is made &lt;strong&gt;visible&lt;/strong&gt; and added to SQL Plan Management baselines&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Rejection:&lt;/strong&gt; If the index does not improve performance or causes regression, it is marked as unusable and eventually dropped&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Monitoring:&lt;/strong&gt; Promoted indexes are continuously monitored; if workload changes and the index is no longer beneficial, it is demoted and dropped automatically&lt;/li&gt;
&lt;/ol&gt;

&lt;div class=&quot;code-container&quot;&gt;
  &lt;div class=&quot;code-header&quot;&gt;
    &lt;span class=&quot;code-label&quot;&gt;SQL — Monitor Auto-Indexing Activity&lt;/span&gt;
    &lt;button class=&quot;copy-btn&quot; onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;
  &lt;/div&gt;
  &lt;div class=&quot;code-block&quot;&gt;-- View auto-index activity report (last 7 days)
SELECT DBMS_AUTO_INDEX.REPORT_ACTIVITY(
    activity_start =&amp;gt; SYSDATE - 7,
    activity_end   =&amp;gt; SYSDATE,
    type           =&amp;gt; &#39;TEXT&#39;,
    section        =&amp;gt; &#39;ALL&#39;,
    level          =&amp;gt; &#39;ALL&#39;
) AS report
FROM dual;

-- Check all auto-created indexes and their status
SELECT index_name,
       table_name,
       table_owner,
       auto,
       visibility,
       status,
       last_analyzed,
       num_rows
FROM   dba_indexes
WHERE  auto = &#39;YES&#39;
ORDER  BY last_analyzed DESC;

-- Check auto-index configuration
SELECT parameter_name,
       parameter_value
FROM   dba_auto_index_config;

-- View indexes created, rejected, or dropped by auto-indexing
SELECT index_name,
       table_name,
       index_type,
       creation_date,
       status,
       rejection_reason
FROM   dba_auto_indexes
ORDER  BY creation_date DESC
FETCH FIRST 30 ROWS ONLY;

-- Configure auto-indexing behaviour (ADMIN user required)
-- Options: &#39;ON&#39; (default), &#39;OFF&#39;, &#39;REPORT ONLY&#39;
EXEC DBMS_AUTO_INDEX.CONFIGURE(
    &#39;AUTO_INDEX_MODE&#39;, &#39;ON&#39;
);&lt;/div&gt;
&lt;/div&gt;

&lt;div class=&quot;incident-box&quot;&gt;
  &lt;strong&gt;Auto-Indexing Production Caution:&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;
  Auto-indexing is powerful but not infallible. In one ATP workload running a financial reporting batch, auto-indexing created 47 new indexes over 3 weeks as the batch query patterns changed. Storage consumption grew by 280 GB unexpectedly. The indexes were individually justified but collectively caused excessive index maintenance overhead during bulk inserts, slowing the nightly load by 40%.&lt;br /&gt;&lt;br /&gt;
  &lt;strong&gt;Lesson:&lt;/strong&gt; Monitor auto-index storage growth with &lt;code&gt;dba_auto_indexes&lt;/code&gt; weekly. Set schema-level exclusions for bulk-load tables using &lt;code&gt;DBMS_AUTO_INDEX.CONFIGURE(&#39;AUTO_INDEX_SCHEMA_EXCLUSION_LIST&#39;, &#39;BATCH_LOAD&#39;)&lt;/code&gt;. Auto-indexing optimizes for reads — you must protect write-heavy tables manually.
&lt;/div&gt;

&lt;!-- ══════════════════════════════════════════════ --&gt;
&lt;h2 id=&quot;section4&quot;&gt;4. Auto-Patching: Zero Downtime or Marketing?&lt;/h2&gt;
&lt;p&gt;
  Oracle patches Autonomous Database automatically on a quarterly cadence aligned with the Oracle Critical Patch Update (CPU) schedule. The patching process uses a rolling method across the RAC nodes and Data Guard standby, designed to maintain availability throughout.
&lt;/p&gt;

&lt;h3&gt;How ADB Auto-Patching Works&lt;/h3&gt;
&lt;ol&gt;
  &lt;li&gt;Oracle patches the Data Guard &lt;strong&gt;standby&lt;/strong&gt; nodes first while the primary continues serving traffic&lt;/li&gt;
  &lt;li&gt;A planned switchover moves traffic to the patched standby (now acting as new primary)&lt;/li&gt;
  &lt;li&gt;The old primary nodes are patched&lt;/li&gt;
  &lt;li&gt;A switchover back occurs (optional — Oracle may leave the new primary in place)&lt;/li&gt;
  &lt;li&gt;Total connection interruption: typically &lt;strong&gt;under 30 seconds&lt;/strong&gt; per patch cycle&lt;/li&gt;
&lt;/ol&gt;

&lt;div class=&quot;tip-box&quot;&gt;
  &lt;strong&gt;What &quot;Zero Downtime&quot; Actually Means for ADB Patching:&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;
  Sessions experience a brief disconnect during the switchover step — typically 5–30 seconds. Applications using Oracle JDBC thin driver with &lt;code&gt;oracle.jdbc.fanEnabled=true&lt;/code&gt; and connection pools with retry logic reconnect automatically and users see no interruption. Applications without proper retry logic will surface errors to users during this window. ADB patching is genuinely low-impact — but &quot;zero downtime&quot; depends on your application connection handling.
&lt;/div&gt;

&lt;div class=&quot;code-container&quot;&gt;
  &lt;div class=&quot;code-header&quot;&gt;
    &lt;span class=&quot;code-label&quot;&gt;SQL — Check ADB Patch History and Schedule&lt;/span&gt;
    &lt;button class=&quot;copy-btn&quot; onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;
  &lt;/div&gt;
  &lt;div class=&quot;code-block&quot;&gt;-- Check current database patch level
SELECT patch_id,
       patch_uid,
       version,
       action,
       status,
       description,
       action_time
FROM   dba_registry_sqlpatch
ORDER  BY action_time DESC
FETCH FIRST 10 ROWS ONLY;

-- Check current DB version (includes patch level)
SELECT banner_full
FROM   v$version;

-- View recent maintenance window activity
SELECT window_name,
       window_next_time,
       window_active,
       enabled
FROM   dba_scheduler_windows
ORDER  BY window_next_time;

-- Application connection retry best practice (Java JDBC URL)
-- jdbc:oracle:thin:@(DESCRIPTION=
--   (RETRY_COUNT=20)(RETRY_DELAY=3)
--   (ADDRESS=(PROTOCOL=tcps)(PORT=1522)(HOST=adb.region.oraclecloud.com))
--   (CONNECT_DATA=(SERVICE_NAME=your_service_high))
--   (SECURITY=(SSL_SERVER_DN_MATCH=yes)))&lt;/div&gt;
&lt;/div&gt;

&lt;!-- ══════════════════════════════════════════════ --&gt;
&lt;h2 id=&quot;section5&quot;&gt;5. Auto-Scaling: CPU and Storage Elasticity&lt;/h2&gt;
&lt;p&gt;
  ADB auto-scaling allows the database to temporarily use up to 3x its base ECPU allocation when demand spikes, without manual intervention. Storage auto-scales continuously — there is no pre-allocation and no storage ceiling to manage.
&lt;/p&gt;

&lt;h3&gt;How CPU Auto-Scaling Works&lt;/h3&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Base ECPU:&lt;/strong&gt; The number of ECPUs you provision and pay for at baseline rate&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Scale-up trigger:&lt;/strong&gt; When CPU utilisation exceeds ~80% for a sustained period&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Maximum burst:&lt;/strong&gt; Up to 3x base ECPU (e.g., 8 ECPU base → up to 24 ECPU burst)&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Billing:&lt;/strong&gt; Burst ECPUs billed at per-second rate only while in use&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Scale-down:&lt;/strong&gt; Automatic when load subsides — no manual action required&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;code-container&quot;&gt;
  &lt;div class=&quot;code-header&quot;&gt;
    &lt;span class=&quot;code-label&quot;&gt;SQL — Monitor ADB CPU Utilisation and Auto-Scaling&lt;/span&gt;
    &lt;button class=&quot;copy-btn&quot; onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;
  &lt;/div&gt;
  &lt;div class=&quot;code-block&quot;&gt;-- Monitor current CPU usage
SELECT metric_name,
       value,
       metric_unit
FROM   v$con_sysmetric
WHERE  metric_name IN (
    &#39;CPU Usage Per Sec&#39;,
    &#39;CPU Usage Per Call&#39;,
    &#39;Database CPU Time Ratio&#39;
)
ORDER  BY metric_name;

-- Check ECPU allocation (current + max scaling limit)
SELECT name,
       value
FROM   v$parameter
WHERE  name IN (&#39;cpu_count&#39;, &#39;parallel_max_servers&#39;);

-- Historical CPU utilisation (last 7 days from AWR)
SELECT TO_CHAR(begin_interval_time, &#39;YYYY-MM-DD HH24&#39;) AS hour,
       ROUND(AVG(value), 2)                             AS avg_cpu_pct
FROM   dba_hist_sysmetric_summary
WHERE  metric_name        = &#39;Database CPU Time Ratio&#39;
AND    begin_interval_time &amp;gt; SYSDATE - 7
GROUP  BY TO_CHAR(begin_interval_time, &#39;YYYY-MM-DD HH24&#39;)
ORDER  BY hour;

-- Monitor active sessions and concurrency
SELECT status,
       COUNT(*) AS session_count
FROM   v$session
WHERE  type = &#39;USER&#39;
GROUP  BY status
ORDER  BY session_count DESC;&lt;/div&gt;
&lt;/div&gt;

&lt;!-- ══════════════════════════════════════════════ --&gt;
&lt;h2 id=&quot;section6&quot;&gt;6. Auto-Backup and Restore&lt;/h2&gt;
&lt;p&gt;
  ADB performs automatic daily backups to OCI Object Storage. Backups use incremental-forever methodology — a full backup followed by daily incrementals merged into a rolling backup set. Point-in-time recovery (PITR) is available to any second within the retention window.
&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;&lt;tr&gt;&lt;th&gt;Backup Feature&lt;/th&gt;&lt;th&gt;ADB Default&lt;/th&gt;&lt;th&gt;On-Premises Equivalent&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;&lt;td&gt;Backup type&lt;/td&gt;&lt;td&gt;Automatic daily incremental&lt;/td&gt;&lt;td&gt;RMAN scheduled backup job&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;Retention&lt;/td&gt;&lt;td&gt;60 days (configurable)&lt;/td&gt;&lt;td&gt;DBA-defined&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;Storage&lt;/td&gt;&lt;td&gt;OCI Object Storage (included)&lt;/td&gt;&lt;td&gt;Tape / disk / cloud (DBA managed)&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;PITR granularity&lt;/td&gt;&lt;td&gt;Any second within retention&lt;/td&gt;&lt;td&gt;Depends on redo log archival&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;Restore initiation&lt;/td&gt;&lt;td&gt;OCI Console or REST API&lt;/td&gt;&lt;td&gt;RMAN restore command&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;Restore time (1 TB)&lt;/td&gt;&lt;td&gt;~45–90 minutes typical&lt;/td&gt;&lt;td&gt;Depends on storage bandwidth&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;Cross-region backup&lt;/td&gt;&lt;td&gt;Automatic (optional)&lt;/td&gt;&lt;td&gt;DBA-configured RMAN duplication&lt;/td&gt;&lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;div class=&quot;code-container&quot;&gt;
  &lt;div class=&quot;code-header&quot;&gt;
    &lt;span class=&quot;code-label&quot;&gt;SQL — Monitor ADB Backup Status&lt;/span&gt;
    &lt;button class=&quot;copy-btn&quot; onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;
  &lt;/div&gt;
  &lt;div class=&quot;code-block&quot;&gt;-- Check RMAN backup history on ADB
SELECT session_key,
       session_stamp,
       input_type,
       status,
       TO_CHAR(start_time,  &#39;YYYY-MM-DD HH24:MI&#39;) AS start_time,
       TO_CHAR(end_time,    &#39;YYYY-MM-DD HH24:MI&#39;) AS end_time,
       input_bytes_display,
       output_bytes_display,
       compression_ratio
FROM   v$rman_backup_job_details
ORDER  BY start_time DESC
FETCH FIRST 10 ROWS ONLY;

-- Check oldest available recovery point
SELECT *
FROM   v$restore_point
ORDER  BY time DESC;

-- Verify archive log mode (always on in ADB)
SELECT log_mode,
       archiver
FROM   v$database;&lt;/div&gt;
&lt;/div&gt;

&lt;!-- ══════════════════════════════════════════════ --&gt;
&lt;h2 id=&quot;section7&quot;&gt;7. Security: What Is Automatic and What Is Not&lt;/h2&gt;

&lt;h3&gt;Security Features Fully Automated in ADB&lt;/h3&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;span class=&quot;tag-auto&quot;&gt;AUTO&lt;/span&gt; &lt;strong&gt;Transparent Data Encryption (TDE):&lt;/strong&gt; Always on, cannot be disabled, Oracle-managed keys by default&lt;/li&gt;
  &lt;li&gt;&lt;span class=&quot;tag-auto&quot;&gt;AUTO&lt;/span&gt; &lt;strong&gt;Network encryption:&lt;/strong&gt; TLS 1.2+ enforced for all connections, no plain-text allowed&lt;/li&gt;
  &lt;li&gt;&lt;span class=&quot;tag-auto&quot;&gt;AUTO&lt;/span&gt; &lt;strong&gt;Unified Auditing:&lt;/strong&gt; Default audit policy enabled automatically&lt;/li&gt;
  &lt;li&gt;&lt;span class=&quot;tag-auto&quot;&gt;AUTO&lt;/span&gt; &lt;strong&gt;Database Vault:&lt;/strong&gt; Prevents privileged user access to application data by default on ADB&lt;/li&gt;
  &lt;li&gt;&lt;span class=&quot;tag-auto&quot;&gt;AUTO&lt;/span&gt; &lt;strong&gt;Key rotation:&lt;/strong&gt; Automatic on a defined schedule unless customer-managed keys (BYOK) are used&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;Security Responsibilities That Remain With You&lt;/h3&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;span class=&quot;tag-dba&quot;&gt;DBA&lt;/span&gt; &lt;strong&gt;VCN and Network Security Groups:&lt;/strong&gt; You define which IP ranges can reach the ADB endpoint&lt;/li&gt;
  &lt;li&gt;&lt;span class=&quot;tag-dba&quot;&gt;DBA&lt;/span&gt; &lt;strong&gt;IAM Policies:&lt;/strong&gt; Who in your OCI tenancy can start, stop, or delete the ADB instance&lt;/li&gt;
  &lt;li&gt;&lt;span class=&quot;tag-dba&quot;&gt;DBA&lt;/span&gt; &lt;strong&gt;Database user management:&lt;/strong&gt; Creating users, granting privileges, managing roles&lt;/li&gt;
  &lt;li&gt;&lt;span class=&quot;tag-dba&quot;&gt;DBA&lt;/span&gt; &lt;strong&gt;Data classification:&lt;/strong&gt; What data is sensitive, where it lives, GDPR/compliance mapping&lt;/li&gt;
  &lt;li&gt;&lt;span class=&quot;tag-dba&quot;&gt;DBA&lt;/span&gt; &lt;strong&gt;Customer-managed encryption keys (BYOK):&lt;/strong&gt; If compliance requires your own keys, you manage the OCI Vault integration&lt;/li&gt;
  &lt;li&gt;&lt;span class=&quot;tag-dba&quot;&gt;DBA&lt;/span&gt; &lt;strong&gt;Application-level access control:&lt;/strong&gt; Row-level security, VPD policies, column-level encryption for ultra-sensitive fields&lt;/li&gt;
&lt;/ul&gt;

&lt;!-- ══════════════════════════════════════════════ --&gt;
&lt;h2 id=&quot;section8&quot;&gt;8. What DBAs Still Own on ADB&lt;/h2&gt;
&lt;p&gt;
  This is the most important section of this guide. Oracle&#39;s marketing implies the DBA role disappears with ADB. The reality is the role changes — from operational firefighting to architectural decision-making. These responsibilities remain firmly with the DBA and architect.
&lt;/p&gt;

&lt;div class=&quot;checklist&quot;&gt;
  &lt;h3&gt;Schema and Data Design&lt;/h3&gt;
  &lt;ul&gt;
    &lt;li&gt;Table structure, normalization level, partition strategy&lt;/li&gt;
    &lt;li&gt;Data type selection — ADB cannot fix a VARCHAR2 column that should be a NUMBER&lt;/li&gt;
    &lt;li&gt;Referential integrity decisions — enforce in DB or application?&lt;/li&gt;
    &lt;li&gt;JSON vs relational vs duality view design choices&lt;/li&gt;
  &lt;/ul&gt;
&lt;/div&gt;

&lt;div class=&quot;checklist&quot;&gt;
  &lt;h3&gt;SQL and Application Quality&lt;/h3&gt;
  &lt;ul&gt;
    &lt;li&gt;Application SQL efficiency — ADB auto-indexes help but cannot rewrite bad SQL&lt;/li&gt;
    &lt;li&gt;Bind variable usage — literal SQL still causes hard parse overhead on ADB&lt;/li&gt;
    &lt;li&gt;Bulk operation design — row-by-row PL/SQL loops are still slow on ADB&lt;/li&gt;
    &lt;li&gt;Connection pool configuration — pool sizing and retry logic remain application concerns&lt;/li&gt;
  &lt;/ul&gt;
&lt;/div&gt;

&lt;div class=&quot;checklist&quot;&gt;
  &lt;h3&gt;Cost Governance&lt;/h3&gt;
  &lt;ul&gt;
    &lt;li&gt;Right-sizing ECPU allocation — over-provisioning wastes significant budget&lt;/li&gt;
    &lt;li&gt;Auto-scaling budget caps — without limits, burst billing can be surprising&lt;/li&gt;
    &lt;li&gt;Storage tier selection — Standard vs High Performance storage pricing differences&lt;/li&gt;
    &lt;li&gt;Cross-region backup costs — Object Storage egress charges for DR backups&lt;/li&gt;
  &lt;/ul&gt;
&lt;/div&gt;

&lt;div class=&quot;checklist&quot;&gt;
  &lt;h3&gt;Migration and Integration&lt;/h3&gt;
  &lt;ul&gt;
    &lt;li&gt;Source data extraction, transformation, and loading logic&lt;/li&gt;
    &lt;li&gt;Cutover planning and rollback strategy&lt;/li&gt;
    &lt;li&gt;Application compatibility testing against ADB restrictions&lt;/li&gt;
    &lt;li&gt;Integration with non-Oracle systems (Kafka, S3, REST APIs)&lt;/li&gt;
  &lt;/ul&gt;
&lt;/div&gt;

&lt;!-- ══════════════════════════════════════════════ --&gt;
&lt;h2 id=&quot;section9&quot;&gt;9. ADB Dedicated vs Shared: Architecture Differences&lt;/h2&gt;
&lt;p&gt;
  Oracle offers two deployment models for ADB. The choice has significant implications for isolation, performance, customization, and cost.
&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;&lt;th&gt;Feature&lt;/th&gt;&lt;th&gt;ADB Shared&lt;/th&gt;&lt;th&gt;ADB Dedicated&lt;/th&gt;&lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;&lt;td&gt;Infrastructure&lt;/td&gt;&lt;td&gt;Shared Exadata fleet (multi-tenant)&lt;/td&gt;&lt;td&gt;Dedicated Exadata Cloud@Customer or OCI&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;Isolation&lt;/td&gt;&lt;td&gt;Logical (PDB isolation)&lt;/td&gt;&lt;td&gt;Physical (dedicated hardware)&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;Customization&lt;/td&gt;&lt;td&gt;Limited (Oracle controls most params)&lt;/td&gt;&lt;td&gt;Higher (DBA can set more parameters)&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;Patching control&lt;/td&gt;&lt;td&gt;Oracle-managed schedule&lt;/td&gt;&lt;td&gt;Customer-controlled patching window&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;Network&lt;/td&gt;&lt;td&gt;Public endpoint or private endpoint&lt;/td&gt;&lt;td&gt;Always private, on customer VCN&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;Compliance&lt;/td&gt;&lt;td&gt;Suitable for most enterprise needs&lt;/td&gt;&lt;td&gt;Required for FedRAMP, HIPAA BAA, PCI DSS&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;Cost model&lt;/td&gt;&lt;td&gt;Pay per ECPU + storage (elastic)&lt;/td&gt;&lt;td&gt;Reserved capacity (higher baseline cost)&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;Best for&lt;/td&gt;&lt;td&gt;Dev/test, departmental, new projects&lt;/td&gt;&lt;td&gt;Regulated industries, large enterprise OLTP&lt;/td&gt;&lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;!-- ══════════════════════════════════════════════ --&gt;
&lt;h2 id=&quot;section10&quot;&gt;10. Real Production Lessons from ADB&lt;/h2&gt;

&lt;div class=&quot;incident-box&quot;&gt;
  &lt;strong&gt;Incident 1: Auto-Scaling Surprise Bill&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;
  A retail analytics team provisioned a 4-ECPU ADW instance for a proof of concept. During a Black Friday data load test, auto-scaling kicked in and the instance burst to 12 ECPUs for 6 hours. The month-end OCI bill was 4x the expected baseline.&lt;br /&gt;&lt;br /&gt;
  &lt;strong&gt;Lesson:&lt;/strong&gt; Always set OCI Budget Alerts on your ADB compartment and configure the &lt;code&gt;isAutoScalingEnabled&lt;/code&gt; flag deliberately. For cost-sensitive environments, disable auto-scaling and size ECPU appropriately for peak load. For production, enable auto-scaling but set OCI Budget alerts at 120% of expected monthly cost.
&lt;/div&gt;

&lt;div class=&quot;incident-box&quot;&gt;
  &lt;strong&gt;Incident 2: Application Not Handling Patching Reconnect&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;
  A Node.js microservice using &lt;code&gt;oracledb&lt;/code&gt; thin driver connected to ATP without connection pool retry logic. During the quarterly ADB patch switchover, sessions were dropped. The application surfaced 503 errors to users for 25 seconds before the operations team noticed and restarted the connection pool manually.&lt;br /&gt;&lt;br /&gt;
  &lt;strong&gt;Lesson:&lt;/strong&gt; Test your application connection handling against ADB switchover before go-live. Use &lt;code&gt;oracle.jdbc.fanEnabled=true&lt;/code&gt; for Java, configure &lt;code&gt;poolPingInterval&lt;/code&gt; for Node.js, and always implement exponential backoff retry logic for database connections in any cloud-native application.
&lt;/div&gt;

&lt;div class=&quot;success-box&quot;&gt;
  &lt;strong&gt;Success: Auto-Indexing Eliminated a Manual DBA Cycle&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;
  On an ADW instance serving financial dashboards, auto-indexing identified and created 12 indexes over the first 3 weeks of production traffic — indexes that our team had not identified during pre-production testing because the production query pattern differed from our test workload. The slowest dashboard query dropped from 14 seconds to 0.8 seconds without any DBA intervention. Auto-indexing validation prevented 2 of these indexes from being promoted because they caused regression on other queries — exactly the safety mechanism that makes it trustworthy.
&lt;/div&gt;

&lt;!-- ══════════════════════════════════════════════ --&gt;
&lt;h2 id=&quot;section11&quot;&gt;11. FAQ&lt;/h2&gt;

&lt;div class=&quot;faq-item&quot;&gt;
  &lt;div class=&quot;faq-question&quot;&gt;Can I run custom Oracle features on ADB that I use on-premises?&lt;/div&gt;
  &lt;div class=&quot;faq-answer&quot;&gt;
    Most features work. Oracle Spatial, Oracle Text, APEX, Oracle ML, partitioning, advanced compression, and JSON features are all available. Some features are restricted or not available: you cannot create external tables pointing to arbitrary file paths (must use Object Storage), you cannot directly access the OS, and some init.ora parameters are locked. ADB Dedicated gives more flexibility than ADB Shared for parameter customization. Always test your specific feature requirements in ADB Free tier before committing to production migration.
  &lt;/div&gt;
&lt;/div&gt;

&lt;div class=&quot;faq-item&quot;&gt;
  &lt;div class=&quot;faq-question&quot;&gt;Does ADB eliminate the need for a DBA?&lt;/div&gt;
  &lt;div class=&quot;faq-answer&quot;&gt;
    No — but it changes the DBA role significantly. Routine operational tasks (patching, backup, storage management, basic performance tuning) are genuinely automated. What remains: schema design, SQL quality governance, cost management, security policy, migration planning, application integration, and capacity planning. In practice, one DBA can manage significantly more ADB instances than on-premises databases because the operational overhead per database is much lower. The DBA role shifts from operational to architectural.
  &lt;/div&gt;
&lt;/div&gt;

&lt;div class=&quot;faq-item&quot;&gt;
  &lt;div class=&quot;faq-question&quot;&gt;How does ADB handle high availability?&lt;/div&gt;
  &lt;div class=&quot;faq-answer&quot;&gt;
    ADB Shared runs on Oracle RAC with Data Guard in Maximum Availability mode by default. This provides node-level failover (RAC) and site-level failover (Data Guard) transparently. The SLA is 99.995% availability for ADB Shared on OCI. For ADB Dedicated, the HA architecture depends on your Exadata Infrastructure configuration — you can configure multi-AD (Availability Domain) deployment for even higher isolation. Failover is transparent to properly configured applications using Oracle connection retry features.
  &lt;/div&gt;
&lt;/div&gt;

&lt;div class=&quot;faq-item&quot;&gt;
  &lt;div class=&quot;faq-question&quot;&gt;Should I mention ADB experience on my resume?&lt;/div&gt;
  &lt;div class=&quot;faq-answer&quot;&gt;
    Yes — and frame it around what you governed, not just what Oracle automated. Write: &lt;em&gt;&quot;Architected and governed Oracle ADB ADW and ATP deployments on OCI for analytics and OLTP workloads. Managed auto-indexing policy, ECPU cost governance, VCN security configuration, and ADB Dedicated deployment for PCI DSS compliance. Migrated 6.1 TB on-premises Oracle 19c warehouse to ADW with zero data loss using Oracle Data Pump and GoldenGate.&quot;&lt;/em&gt; Employers hiring for cloud DBA roles want to see architectural judgment, not just familiarity with the OCI console.
  &lt;/div&gt;
&lt;/div&gt;

&lt;!-- RELATED --&gt;
&lt;div class=&quot;related-reading&quot;&gt;
  &lt;h2 id=&quot;section12&quot;&gt;12. Related Reading from Real Production Systems&lt;/h2&gt;
  &lt;p&gt;If you want to deepen your understanding of Oracle cloud and on-premises database architecture, the following articles from real production experience may also be useful:&lt;/p&gt;
  &lt;ul&gt;
    &lt;li&gt;
      &lt;a href=&quot;#&quot;&gt;Oracle Database 23ai Architecture: AI-Native Internals for DBAs&lt;/a&gt;
      &lt;span class=&quot;why-matters&quot;&gt;Why it matters: ADB runs Oracle 23ai features including AI Vector Search, Select AI, and JSON Duality Views. Understanding 23ai internals helps you design AI-enabled applications on ADB effectively.&lt;/span&gt;
    &lt;/li&gt;
    &lt;li&gt;
      &lt;a href=&quot;#&quot;&gt;Oracle Data Guard Protection Modes: Zero Data Loss Design Strategy&lt;/a&gt;
      &lt;span class=&quot;why-matters&quot;&gt;Why it matters: ADB uses Data Guard Maximum Availability mode internally. Understanding how redo transport and FSFO work explains ADB’s HA behaviour during patching and failover events.&lt;/span&gt;
    &lt;/li&gt;
    &lt;li&gt;
      &lt;a href=&quot;#&quot;&gt;Oracle RAC Internals Explained: Cache Fusion and Cluster Design Lessons&lt;/a&gt;
      &lt;span class=&quot;why-matters&quot;&gt;Why it matters: ADB Shared runs on RAC. Understanding Cache Fusion and interconnect architecture explains why some workload patterns perform differently on ADB than on single-instance on-premises databases.&lt;/span&gt;
    &lt;/li&gt;
    &lt;li&gt;
      &lt;a href=&quot;#&quot;&gt;Oracle Performance Engineering Guide: AWR, ASH and SQL Monitor in 19c and 23ai&lt;/a&gt;
      &lt;span class=&quot;why-matters&quot;&gt;Why it matters: AWR and ASH are fully available on ADB and are the primary tools for diagnosing performance issues that auto-indexing and auto-tuning have not resolved.&lt;/span&gt;
    &lt;/li&gt;
    &lt;li&gt;
      &lt;a href=&quot;https://chetanyadavds.blogspot.com/2026/01/n8n-oracle-telegram-alerts.html&quot; target=&quot;_blank&quot;&gt;N8N Oracle Telegram Alerts: Automating Database Monitoring&lt;/a&gt;
      &lt;span class=&quot;why-matters&quot;&gt;Why it matters: ADB still requires monitoring for auto-scaling events, auto-index storage growth, backup failures, and budget alerts. This guide shows how to build automated alerting on top of OCI metrics.&lt;/span&gt;
    &lt;/li&gt;
  &lt;/ul&gt;
&lt;/div&gt;

&lt;!-- AUTHOR --&gt;
&lt;div class=&quot;about-author&quot;&gt;
  &lt;h2&gt;About the Author&lt;/h2&gt;
  &lt;div class=&quot;author-name&quot;&gt;Chetan Yadav&lt;/div&gt;
  &lt;p class=&quot;author-bio&quot;&gt;
    &lt;strong&gt;Chetan Yadav&lt;/strong&gt; is a &lt;strong&gt;Senior Oracle, PostgreSQL, MySQL, and Cloud DBA&lt;/strong&gt; with &lt;strong&gt;15+ years&lt;/strong&gt; of hands-on experience managing production databases across on-premises, hybrid, and cloud environments. He specialises in high availability architecture, performance tuning, disaster recovery, and database migrations.
  &lt;/p&gt;
  &lt;p class=&quot;author-bio&quot;&gt;
    Chetan has designed and governed Oracle ADB deployments across OCI for financial, analytics, and OLTP workloads , including ADB Dedicated for PCI DSS compliance and ADB Shared for elastic analytics platforms. His writing focuses on what actually works in production and what the marketing materials leave out.
  &lt;/p&gt;
  &lt;p class=&quot;author-bio&quot;&gt;
    This blog focuses on &lt;strong&gt;real-world DBA problems, career growth, and practical learning&lt;/strong&gt; , not theoretical documentation or vendor marketing.
  &lt;/p&gt;
  &lt;div class=&quot;social-links&quot;&gt;
    &lt;a href=&quot;https://www.linkedin.com/in/chetanyadavvds/&quot; target=&quot;_blank&quot;&gt;LinkedIn&lt;/a&gt;
    &lt;a href=&quot;https://www.youtube.com/@levelup_careers&quot; target=&quot;_blank&quot;&gt;YouTube&lt;/a&gt;
    &lt;a href=&quot;https://www.instagram.com/levelup_careers/&quot; target=&quot;_blank&quot;&gt;Instagram&lt;/a&gt;
    &lt;a href=&quot;https://x.com/home&quot; target=&quot;_blank&quot;&gt;Twitter (X)&lt;/a&gt;
    &lt;a href=&quot;https://www.facebook.com/oracledbainfo/&quot; target=&quot;_blank&quot;&gt;Facebook&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;Newsletter&lt;/a&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;!-- POST FOOTER --&gt;
&lt;div class=&quot;post-footer&quot;&gt;
  &lt;div class=&quot;post-meta&quot;&gt;&lt;strong&gt;by Chetan Yadav&lt;/strong&gt; • March 2026&lt;/div&gt;
  &lt;div class=&quot;share-buttons&quot;&gt;
    &lt;strong&gt;Share:&lt;/strong&gt;
    &lt;a href=&quot;#&quot;&gt;Email&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;BlogThis&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;X&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;Facebook&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;Pinterest&lt;/a&gt;
  &lt;/div&gt;
  &lt;div class=&quot;tags&quot;&gt;
    &lt;strong&gt;Tags:&lt;/strong&gt;
    &lt;a href=&quot;#&quot;&gt;Oracle Autonomous Database&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;ADB&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;ADW&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;ATP&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;Auto-Indexing&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;Auto-Patching&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;Auto-Scaling&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;OCI&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;Oracle Cloud&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;Oracle DBA&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;Cloud Architecture&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;Exadata&lt;/a&gt;
  &lt;/div&gt;
&lt;/div&gt;

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

&lt;script&gt;
function copyCode(button) {
  const codeContainer = button.closest(&#39;.code-container&#39;);
  const codeBlock = codeContainer.querySelector(&#39;.code-block&#39;);
  const textArea = document.createElement(&#39;textarea&#39;);
  textArea.value = codeBlock.textContent;
  textArea.style.position = &#39;fixed&#39;;
  textArea.style.left = &#39;-9999px&#39;;
  document.body.appendChild(textArea);
  textArea.select();
  textArea.setSelectionRange(0, 99999);
  try {
    document.execCommand(&#39;copy&#39;);
    button.textContent = &#39;Copied!&#39;;
    button.classList.add(&#39;copied&#39;);
    setTimeout(() =&gt; { button.textContent = &#39;Copy&#39;; button.classList.remove(&#39;copied&#39;); }, 2000);
  } catch(err) {
    button.textContent = &#39;Failed&#39;;
    setTimeout(() =&gt; { button.textContent = &#39;Copy&#39;; }, 2000);
  }
  document.body.removeChild(textArea);
}
&lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;</content><link rel='replies' type='application/atom+xml' href='http://chetanyadavds.blogspot.com/feeds/4672445555915244170/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://chetanyadavds.blogspot.com/2026/03/oracle-autonomous-database-internals-what-is-really-automated.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/436196721812840248/posts/default/4672445555915244170'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/436196721812840248/posts/default/4672445555915244170'/><link rel='alternate' type='text/html' href='http://chetanyadavds.blogspot.com/2026/03/oracle-autonomous-database-internals-what-is-really-automated.html' title='Oracle Autonomous Database Internals: What Is Really Automated'/><author><name>Chetan Yadav</name><uri>http://www.blogger.com/profile/02557500437758632199</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiE0TgifWM4l1b3sy_cK2y41bpqyfY1U25-p5IBKkSg8pJLFRvjYr_kF7W_MgsYdc21DutWF9H6qlShQDQspQLbZEQ5CSUA51Wp6Mh9l5Ygd4NPSuQyqwSMrKitCWwSLr0oHBg9TGjxAvAM7TTkkehHLL1MFWg0wSb31CxywQxIokg9pg/s1600/IMG-20251013-WA0038.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/a/AVvXsEi4i5mEc0CfOAlKKs7M6jkUjzlHpR-ZlxKijzjceDNIyssc80nkOpwHTMwXmiQ79K8A-c2-3UA0qeuMGURieOkKH3E3Z4dgU2F1avckmDf4Ej4C7AeOlu0r_CpscOl5n1_nJHJz3Mglq8O_FrEHlFs6OL1JVSejJtM7DamIFWogZPR_REp97mudxN7hrvY=s72-c" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-436196721812840248.post-5618276339635439553</id><published>2026-03-16T15:20:00.001+05:30</published><updated>2026-03-16T15:20:10.571+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="Installation"/><category scheme="http://www.blogger.com/atom/ns#" term="Oracle 19c"/><title type='text'>Step-by-step installation of Oracle Database 19c (64-bit) on Red Hat Enterprise Linux 9.4 </title><content type='html'>&lt;p&gt;Oracle Database 19c Installation Runner&lt;/p&gt;&lt;p&gt;Platform: RHEL 9.4 (64-bit)&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;Step-by-step installation of Oracle Database 19c (64-bit) on Red Hat Enterprise Linux 9.4.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;1. Assumed the Installer is downloaded&amp;nbsp;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;File name:&lt;/p&gt;&lt;p&gt;LINUX.X64_193000_db_home.zip&lt;/p&gt;&lt;p&gt;Upload it to the server&amp;nbsp;&lt;/p&gt;&lt;p&gt;/stage/oracle/LINUX.X64_193000_db_home.zip&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;2.&amp;nbsp; Configure Hostname&lt;/b&gt;&lt;/p&gt;&lt;p&gt;hostname.&lt;/p&gt;&lt;p&gt;hostnamectl&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;3. Configure /etc/hosts&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Edit hosts file.&lt;/p&gt;&lt;p&gt;vi /etc/hosts&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;4. Install Oracle Preinstall Package&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Configure prerequisites&amp;nbsp;&lt;/p&gt;&lt;p&gt;dnf install -y oracle-database-preinstall-19c&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;*Note :(this pre install steps will automatically create the require user, group and required lib and rpm)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;5. Configure SELinux&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Edit SELinux configuration.&lt;/p&gt;&lt;p&gt;vi /etc/selinux/config&lt;/p&gt;&lt;p&gt;Set:&lt;/p&gt;&lt;p&gt;SELINUX=permissive&lt;/p&gt;&lt;p&gt;Apply immediately:&lt;/p&gt;&lt;p&gt;setenforce 0&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;6.&amp;nbsp; Disable Firewall&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Stop firewall.&lt;/p&gt;&lt;p&gt;systemctl stop firewalld&lt;/p&gt;&lt;p&gt;systemctl disable firewalld&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;7. Create Oracle Directory Structure&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Create Oracle installation directories using your custom path.&lt;/p&gt;&lt;p&gt;mkdir -p /Chetan/practice/u01/app/oracle/product/19.0.0/dbhome_1&lt;/p&gt;&lt;p&gt;mkdir -p /Chetan/practice/u02/oradata&lt;/p&gt;&lt;p&gt;Set ownership.&lt;/p&gt;&lt;p&gt;chown -R oracle:oinstall /Chetan&lt;/p&gt;&lt;p&gt;chmod -R 775 /Chetan&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;8.&amp;nbsp; Configure Oracle Environment&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Login as oracle user.&lt;/p&gt;&lt;p&gt;su - oracle&lt;/p&gt;&lt;p&gt;Create scripts directory.&lt;/p&gt;&lt;p&gt;mkdir ~/scripts&lt;/p&gt;&lt;p&gt;Create environment script.&lt;/p&gt;&lt;p&gt;vi ~/scripts/setEnv.sh&lt;/p&gt;&lt;p&gt;Add:&lt;/p&gt;&lt;p&gt;export TMP=/tmp&lt;/p&gt;&lt;p&gt;export TMPDIR=$TMP&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;export ORACLE_HOSTNAME=rhel9-oracle.localdomain&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;export ORACLE_BASE=/Chetan/practice/u01/app/oracle&lt;/p&gt;&lt;p&gt;export ORACLE_HOME=$ORACLE_BASE/product/19.0.0/dbhome_1&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;export ORACLE_SID=cdb1&lt;/p&gt;&lt;p&gt;export PDB_NAME=pdb1&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;export DATA_DIR=/Chetan/practice/u02/oradata&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;export PATH=$ORACLE_HOME/bin:$PATH&lt;/p&gt;&lt;p&gt;export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib&lt;/p&gt;&lt;p&gt;Load environment automatically.&lt;/p&gt;&lt;p&gt;echo &quot;. ~/scripts/setEnv.sh&quot; &amp;gt;&amp;gt; ~/.bash_profile&lt;/p&gt;&lt;p&gt;Reload profile.&lt;/p&gt;&lt;p&gt;source ~/.bash_profile&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;9. Extract Oracle Software&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Navigate to Oracle Home.&lt;/p&gt;&lt;p&gt;cd /Chetan/practice/u01/app/oracle/product/19.0.0/dbhome_1&lt;/p&gt;&lt;p&gt;Unzip software.&lt;/p&gt;&lt;p&gt;unzip -oq /stage/oracle/LINUX.X64_193000_db_home.zip&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;10 . Run Oracle Installer&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Start installer.&lt;/p&gt;&lt;p&gt;./runInstaller&lt;/p&gt;&lt;p&gt;Select:&lt;/p&gt;&lt;p&gt;Install Database Software Only&lt;/p&gt;&lt;p&gt;Edition: Enterprise Edition&lt;/p&gt;&lt;p&gt;Oracle Base:&lt;/p&gt;&lt;p&gt;/Chetan/practice/u01/app/oracle&lt;/p&gt;&lt;p&gt;Oracle Home:&lt;/p&gt;&lt;p&gt;/Chetan/practice/u01/app/oracle/product/19.0.0/dbhome_1&lt;/p&gt;&lt;p&gt;________________________________________&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;11. Start Oracle Listener&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Switch to oracle user.&lt;/p&gt;&lt;p&gt;Start listener.&lt;/p&gt;&lt;p&gt;lsnrctl start&lt;/p&gt;&lt;p&gt;Verify listener.&lt;/p&gt;&lt;p&gt;lsnrctl status&lt;/p&gt;&lt;p&gt;________________________________________&lt;/p&gt;&lt;p&gt;&lt;b&gt;12. Create Database Using DBCA&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Run Database Configuration Assistant.&lt;/p&gt;&lt;p&gt;dbca&lt;/p&gt;&lt;p&gt;Select:&lt;/p&gt;&lt;p&gt;Create Database&lt;/p&gt;&lt;p&gt;General Purpose Database&lt;/p&gt;&lt;p&gt;Create Container Database&lt;/p&gt;&lt;p&gt;Example configuration:&lt;/p&gt;&lt;p&gt;SID:&lt;/p&gt;&lt;p&gt;cdb1&lt;/p&gt;&lt;p&gt;PDB:&lt;/p&gt;&lt;p&gt;pdb1&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Datafile location:&lt;/p&gt;&lt;p&gt;/Chetan/practice/u02/oradata&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;13. Verify Database&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Connect to database.&lt;/p&gt;&lt;p&gt;sqlplus / as sysdba&lt;/p&gt;&lt;p&gt;Check database.&lt;/p&gt;&lt;p&gt;select name, open_mode from v$database;&lt;/p&gt;&lt;p&gt;Check PDB.&lt;/p&gt;&lt;p&gt;show pdbs;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;b&gt;&lt;i&gt;Installation Completed&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;&lt;p&gt;Oracle Database 19c is now successfully installed.&lt;/p&gt;&lt;p&gt;Oracle Home:&lt;/p&gt;&lt;p&gt;/Chetan/practice/u01/app/oracle/product/19.0.0/dbhome_1&lt;/p&gt;&lt;p&gt;Database files:&lt;/p&gt;&lt;p&gt;/Chetan/practice/u02/oradata&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;</content><link rel='replies' type='application/atom+xml' href='http://chetanyadavds.blogspot.com/feeds/5618276339635439553/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://chetanyadavds.blogspot.com/2026/03/step-by-step-installation-of-oracle.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/436196721812840248/posts/default/5618276339635439553'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/436196721812840248/posts/default/5618276339635439553'/><link rel='alternate' type='text/html' href='http://chetanyadavds.blogspot.com/2026/03/step-by-step-installation-of-oracle.html' title='Step-by-step installation of Oracle Database 19c (64-bit) on Red Hat Enterprise Linux 9.4 '/><author><name>Chetan Yadav</name><uri>http://www.blogger.com/profile/02557500437758632199</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiE0TgifWM4l1b3sy_cK2y41bpqyfY1U25-p5IBKkSg8pJLFRvjYr_kF7W_MgsYdc21DutWF9H6qlShQDQspQLbZEQ5CSUA51Wp6Mh9l5Ygd4NPSuQyqwSMrKitCWwSLr0oHBg9TGjxAvAM7TTkkehHLL1MFWg0wSb31CxywQxIokg9pg/s1600/IMG-20251013-WA0038.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-436196721812840248.post-2615191183303685419</id><published>2026-03-16T11:00:00.002+05:30</published><updated>2026-03-16T11:00:00.108+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="AI Vector Search"/><category scheme="http://www.blogger.com/atom/ns#" term="Database Architecture"/><category scheme="http://www.blogger.com/atom/ns#" term="JSON Duality"/><category scheme="http://www.blogger.com/atom/ns#" term="Lock-Free Reservations"/><category scheme="http://www.blogger.com/atom/ns#" term="Oracle 23ai"/><category scheme="http://www.blogger.com/atom/ns#" term="Oracle DBA"/><category scheme="http://www.blogger.com/atom/ns#" term="Select AI"/><category scheme="http://www.blogger.com/atom/ns#" term="SQL Domains"/><category scheme="http://www.blogger.com/atom/ns#" term="True Cache"/><title type='text'>Oracle Database 23ai Architecture: AI-Native Internals for DBAs</title><content type='html'>
&lt;html lang=&quot;en&quot;&gt;
&lt;head&gt;
&lt;meta charset=&quot;UTF-8&quot;&gt;&lt;/meta&gt;
&lt;title&gt;Oracle Database 23ai Architecture: AI-Native Internals for DBAs&lt;/title&gt;
&lt;meta content=&quot;width=device-width, initial-scale=1.0&quot; name=&quot;viewport&quot;&gt;&lt;/meta&gt;
&lt;meta content=&quot;Oracle 23ai AI-native internals: AI Vector Search, Select AI, JSON Duality Views, True Cache, SQL Domains and core engine changes for DBAs and Architects.&quot; name=&quot;description&quot;&gt;&lt;/meta&gt;
&lt;link href=&quot;data:image/svg+xml,%3Csvg xmlns=&#39;http://www.w3.org/2000/svg&#39; viewBox=&#39;0 0 100 100&#39;%3E%3Cdefs%3E%3ClinearGradient id=&#39;g&#39; x1=&#39;0%25&#39; y1=&#39;0%25&#39; x2=&#39;100%25&#39; y2=&#39;100%25&#39;%3E%3Cstop offset=&#39;0%25&#39; style=&#39;stop-color:%23d93025&#39;/%3E%3Cstop offset=&#39;100%25&#39; style=&#39;stop-color:%23a82318&#39;/%3E%3C/linearGradient%3E%3C/defs%3E%3Crect width=&#39;100&#39; height=&#39;100&#39; rx=&#39;20&#39; fill=&#39;url(%23g)&#39;/%3E%3Cpath d=&#39;M20,30 L35,30 L35,70 L20,70 Z M40,40 L55,40 L55,70 L40,70 Z M60,25 L75,25 L75,70 L60,70 Z&#39; fill=&#39;white&#39; opacity=&#39;0.9&#39;/%3E%3C/svg%3E&quot; rel=&quot;icon&quot; type=&quot;image/svg+xml&quot;&gt;&lt;/link&gt;
&lt;style&gt;
*{margin:0;padding:0;box-sizing:border-box}
body{background:#fff;color:#333;font-family:Arial,Helvetica,sans-serif;font-size:16px;line-height:1.7}

.hero-header{background:linear-gradient(135deg,#0f172a 0%,#1e1b4b 50%,#0f172a 100%);color:#fff;padding:60px 40px;width:100%}
.hero-header-content{max-width:1200px;margin:0 auto;padding:0 20px}
.hero-header h1{font-size:42px;font-weight:700;color:#fff;line-height:1.3;margin-bottom:20px}
.hero-subtitle{font-size:20px;font-weight:300;color:#c7d2fe;opacity:.95;margin-bottom:30px}
.hero-meta{display:flex;gap:30px;align-items:center;flex-wrap:wrap;font-size:15px;color:#a5b4fc}
.hero-meta-item{display:flex;align-items:center;gap:8px}

.hero-image-section{width:100%;margin:0;padding:0;overflow:hidden;background:#f8fafc}
.hero-image-section img{width:100%;height:auto;display:block;max-height:740px;object-fit:contain;padding:20px 0}

.main-content-wrapper{width:100%;background:#fff}
.container{max-width:800px;margin:0 auto;padding:30px 20px;background:#fff}

.reading-time-badge{display:inline-block;background:linear-gradient(135deg,#7c3aed 0%,#6d28d9 100%);color:#fff;padding:12px 28px;border-radius:50px;font-size:15px;font-weight:500;margin-bottom:30px;box-shadow:0 4px 12px rgba(109,40,217,.3)}
.page-tagline{color:#666;font-size:15px;font-style:italic;text-align:center;margin-bottom:35px}

.read-more-link{display:block;margin:28px 0 8px}
.read-more-link a{color:#7c3aed;font-size:15px;text-decoration:none;font-style:italic}
.read-more-link a:hover{text-decoration:underline}

.toc{background:#faf5ff;border-left:4px solid #7c3aed;padding:28px 32px;margin:35px 0;border-radius:8px;box-shadow:0 1px 3px rgba(0,0,0,.05)}
.toc-header{display:flex;align-items:center;gap:10px;font-size:24px;font-weight:bold;color:#000;margin-bottom:20px}
.toc ol{margin-left:20px;line-height:1.9;counter-reset:toc-counter;list-style:none}
.toc ol li{counter-increment:toc-counter;margin:12px 0;font-size:16px;padding-bottom:12px;border-bottom:1px solid #e9d5ff;transition:all .2s ease}
.toc ol li:last-child{border-bottom:none}
.toc ol li:hover{padding-left:8px}
.toc ol li::before{content:counter(toc-counter) &quot;. &quot;;font-weight:600;color:#7c3aed;margin-right:8px}
.toc a{color:#7c3aed;text-decoration:none}
.toc a:hover{text-decoration:underline}

h2{font-size:28px;font-weight:bold;color:#000;margin:45px 0 20px;line-height:1.3}
h3{font-size:22px;font-weight:600;color:#333;margin:30px 0 15px}

p{margin:16px 0;color:#333;line-height:1.7}
ul,ol{margin:18px 0 18px 35px;color:#333;line-height:1.7}
ul li,ol li{margin:10px 0}
strong{font-weight:bold;color:#333}
em{font-style:italic}
a{color:#7c3aed;text-decoration:none}
a:hover{text-decoration:underline}

.tag-new{display:inline-block;background:#faf5ff;color:#6d28d9;border:1px solid #c4b5fd;border-radius:4px;padding:1px 8px;font-size:12px;font-weight:700;margin-left:6px;vertical-align:middle;letter-spacing:.04em}
.tag-good{display:inline-block;background:#e6f4ea;color:#137333;border:1px solid #a8d5b5;border-radius:4px;padding:1px 8px;font-size:13px;font-weight:600;margin-right:6px;vertical-align:middle}
.tag-bad{display:inline-block;background:#fce8e6;color:#c5221f;border:1px solid #f5a8a4;border-radius:4px;padding:1px 8px;font-size:13px;font-weight:600;margin-right:6px;vertical-align:middle}
.tag-warn{display:inline-block;background:#fffbeb;color:#92400e;border:1px solid #fcd34d;border-radius:4px;padding:1px 8px;font-size:13px;font-weight:600;margin-right:6px;vertical-align:middle}

.code-container{position:relative;margin:24px 0}
.code-header{background:#1e1b4b;color:#fff;padding:10px 16px;border-radius:8px 8px 0 0;display:flex;justify-content:space-between;align-items:center;font-size:14px}
.code-label{font-weight:500}
.copy-btn{background:#7c3aed;color:#fff;border:none;padding:6px 14px;border-radius:5px;cursor:pointer;font-size:13px;transition:background .2s ease;font-family:Arial,sans-serif}
.copy-btn:hover{background:#6d28d9}
.copy-btn.copied{background:#10b981}
.code-block{background:#f8f9fa;border:1px solid #e0e0e0;border-radius:0 0 8px 8px;padding:18px 20px;margin:0;overflow-x:auto;font-family:&#39;Courier New&#39;,Courier,monospace;font-size:14px;line-height:1.7;white-space:pre;tab-size:4}
code{background:#f8f9fa;padding:2px 6px;border-radius:3px;font-family:&#39;Courier New&#39;,monospace;font-size:14px;color:#7c3aed}

.info-box{background:#fffbeb;border-left:4px solid #f59e0b;padding:18px 22px;border-radius:0 8px 8px 0;margin:25px 0}
.info-box strong{color:#92400e}
.tip-box{background:#faf5ff;border-left:4px solid #7c3aed;padding:18px 22px;border-radius:0 8px 8px 0;margin:25px 0}
.tip-box strong{color:#5b21b6}
.incident-box{background:#fef2f2;border-left:4px solid #ef4444;padding:18px 22px;border-radius:0 8px 8px 0;margin:25px 0}
.incident-box strong{color:#991b1b}
.success-box{background:#f0fdf4;border-left:4px solid #22c55e;padding:18px 22px;border-radius:0 8px 8px 0;margin:25px 0}
.success-box strong{color:#15803d}

.figure-wrap{margin:30px 0;border:1px solid #e0e0e0;border-radius:8px;overflow:hidden;box-shadow:0 2px 8px rgba(0,0,0,.07)}
.figure-wrap img{width:100%;height:auto;display:block}
.figure-caption-bar{background:#f8f9fa;border-top:1px solid #e0e0e0;padding:12px 18px}
.figure-caption-bar .fig-label{font-weight:700;color:#1f2937;font-size:14px}
.figure-caption-bar .fig-desc{color:#6b7280;font-size:13px;margin-top:3px}

table{width:100%;border-collapse:collapse;margin:25px 0;background:#fff;border:1px solid #e0e0e0}
thead{background:#f8f9fa}
th{padding:12px;text-align:left;font-weight:bold;color:#000;border-bottom:2px solid #e0e0e0;font-size:15px}
td{padding:12px;border-bottom:1px solid #e0e0e0;color:#333;font-size:15px}
tr:last-child td{border-bottom:none}
tbody tr:hover{background:#faf5ff}

.checklist{background:#faf5ff;border:1px solid #e9d5ff;border-radius:8px;padding:24px 28px;margin:18px 0}
.checklist h3{margin-top:0;color:#1e293b;font-size:18px}
.checklist ul{list-style:none;margin-left:0}
.checklist ul li{padding:6px 0 6px 28px;position:relative}
.checklist ul li::before{content:&quot;&quot;;position:absolute;left:4px;top:13px;width:10px;height:10px;background:#7c3aed;border-radius:50%}

.faq-item{margin:25px 0;border-bottom:1px solid #e5e7eb;padding-bottom:25px}
.faq-item:last-child{border-bottom:none}
.faq-question{font-weight:600;color:#000;font-size:17px;margin-bottom:10px}
.faq-answer{color:#333;line-height:1.7}

.related-reading{background:#f8f9fa;border:1px solid #e0e0e0;border-radius:8px;padding:30px;margin:40px 0}
.related-reading h2{margin-top:0}
.related-reading ul{margin-left:25px}
.related-reading li{margin:18px 0;line-height:1.7}
.related-reading .why-matters{color:#666;font-size:15px;margin-top:5px;display:block}

.about-author{background:#fffbf0;border:1px solid #e0e0e0;border-radius:8px;padding:30px;margin:40px 0}
.about-author h2{margin-top:0;font-size:28px}
.author-name{font-size:20px;font-weight:bold;color:#000;margin-bottom:10px}
.author-bio{color:#333;line-height:1.7;margin-bottom:15px}
.social-links{margin-top:20px}
.social-links a{display:inline-block;margin-right:20px;color:#7c3aed;text-decoration:none;font-size:16px}
.social-links a:hover{text-decoration:underline}

.post-footer{border-top:1px solid #e0e0e0;padding-top:25px;margin-top:40px;color:#666;font-size:15px}
.post-meta{margin-bottom:15px}
.share-buttons{margin:20px 0}
.share-buttons a{display:inline-block;margin-right:15px;color:#7c3aed;font-size:14px}
.tags{margin-top:20px}
.tags strong{color:#666;font-weight:normal}
.tags a{color:#7c3aed;margin-right:10px;font-size:14px}

@media(max-width:768px){
  .hero-header{padding:40px 24px}
  .hero-header h1{font-size:28px}
  .hero-subtitle{font-size:16px}
  .hero-meta{gap:20px}
  h2{font-size:24px}
  h3{font-size:20px}
  table{font-size:13px}
  th,td{padding:9px}
  .code-block{font-size:12px}
}/* Hide Blogger&#39;s auto-generated post title — we use our own hero header */
.post-title,
.entry-title,
h1.post-title,
h3.post-title {
  display: none !important;
}
&lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;

&lt;div class=&quot;hero-header&quot;&gt;
  &lt;div class=&quot;hero-header-content&quot;&gt;
    &lt;h1&gt;Oracle Database 23ai Architecture: AI-Native Internals for DBAs&lt;/h1&gt;
    &lt;div class=&quot;hero-subtitle&quot;&gt;What Actually Changed Inside the Engine — Beyond the Marketing&lt;/div&gt;
    &lt;div class=&quot;hero-meta&quot;&gt;
      &lt;div class=&quot;hero-meta-item&quot;&gt;16 March 2026&lt;/div&gt;
      &lt;div class=&quot;hero-meta-item&quot;&gt; Chetan Yadav — Senior Oracle &amp;amp; Cloud DBA&lt;/div&gt;
      &lt;div class=&quot;hero-meta-item&quot;&gt;⏱️ 11–12 min read&lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;div class=&quot;main-content-wrapper&quot;&gt;
&lt;div class=&quot;container&quot;&gt;

&lt;div class=&quot;reading-time-badge&quot;&gt;⏱️ Estimated Reading Time: 11–12 minutes&lt;/div&gt;
&lt;div class=&quot;page-tagline&quot;&gt;AI Vector Search • Select AI • JSON Duality • True Cache • SQL Domains • Lock-Free Reservations&lt;/div&gt;

&lt;div class=&quot;hero-image-section&quot;&gt;
  &lt;img alt=&quot;Oracle Database 23ai complete AI-native architecture diagram showing AI layer, SQL engine, security, core engine, HA/DR and connectivity&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEgpYCooyWFYcDtZNxWuD-6vJPoe_yQeMrPC8ttUBEeMmVepfwAodS1EsOi3r3KdxYUib1zrAftp-JszZ1zMbmJXp1dNQv3I2ELP4YHvgTXBIsHLeGhJHp8_E1NP3Ql81RLBTcNHDHLN32q3-lUws--Cflce-iMfj9p_9PAf1BEbmeLq4gl1ixhYMz24YL0&quot; /&gt;
&lt;/div&gt;

&lt;div class=&quot;info-box&quot; style=&quot;margin-top: 28px;&quot;&gt;
  &lt;strong&gt;⚙️ Environment Used in This Article&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;
  &lt;strong&gt;Oracle Database:&lt;/strong&gt; 23ai (23.4) Enterprise Edition &amp;nbsp;•&amp;nbsp;
  &lt;strong&gt;Platform:&lt;/strong&gt; Oracle Linux 8.9 on OCI &amp;amp; on-premises x86&lt;br /&gt;
  &lt;strong&gt;Workload:&lt;/strong&gt; Mixed OLTP + AI/ML vector search workloads &amp;nbsp;•&amp;nbsp;
  &lt;strong&gt;DB Size:&lt;/strong&gt; 4.2 TB&lt;br /&gt;
  &lt;strong&gt;New Features Tested:&lt;/strong&gt; AI Vector Search, Select AI, JSON Duality Views, True Cache, SQL Domains, Lock-Free Reservations, Boolean datatype, Schema Privileges
&lt;/div&gt;

&lt;p&gt;
  Oracle called it &quot;23ai&quot; for a reason. This is not a routine point release with incremental improvements. The AI suffix signals a deliberate architectural shift — Oracle has embedded AI capabilities directly into the database engine itself, not as an external add-on or middleware layer.
&lt;/p&gt;
&lt;p&gt;
  But for DBAs and architects the most important question is not &quot;what did Oracle announce?&quot; It is &quot;what actually changed inside the engine, and what does that mean for how I design, tune, and operate my databases?&quot; The marketing materials will tell you Oracle 23ai is revolutionary. This guide will tell you which features are genuinely production-ready, which ones still need maturity, and what the internal architecture changes mean for your workload.
&lt;/p&gt;
&lt;p&gt;
  I have tested Oracle 23ai extensively on both OCI and on-premises environments running real OLTP and vector workloads. This guide reflects what I found in practice, not what the release notes promise.
&lt;/p&gt;

&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;

&lt;div class=&quot;toc&quot;&gt;
  &lt;div class=&quot;toc-header&quot;&gt;&lt;span&gt;&lt;/span&gt; Table of Contents&lt;/div&gt;
  &lt;ol&gt;
    &lt;li&gt;&lt;a href=&quot;#section1&quot;&gt;What “AI-Native” Actually Means Architecturally&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#section2&quot;&gt;AI Vector Search: VECTOR Datatype and Similarity Search&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#section3&quot;&gt;Select AI: Natural Language to SQL Inside the Database&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#section4&quot;&gt;JSON Relational Duality Views&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#section5&quot;&gt;True Cache: In-Memory Caching Without Application Changes&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#section6&quot;&gt;SQL and Developer Enhancements&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#section7&quot;&gt;Security Enhancements: Schema Privileges and Lock-Free Reservations&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#section8&quot;&gt;Core Engine Changes DBAs Need to Know&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#section9&quot;&gt;What Is Production-Ready and What Is Not&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#section10&quot;&gt;Migration and Upgrade Considerations&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#section11&quot;&gt;FAQ&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#section12&quot;&gt;Related Reading from Real Production Systems&lt;/a&gt;&lt;/li&gt;
  &lt;/ol&gt;
&lt;/div&gt;

&lt;!-- ══════════════════════════════════════════════ --&gt;
&lt;h2 id=&quot;section1&quot;&gt;1. What “AI-Native” Actually Means Architecturally&lt;/h2&gt;
&lt;p&gt;
  Previous Oracle releases added AI/ML capabilities as external integrations. You called Python scripts from PL/SQL, pushed data to OML (Oracle Machine Learning) services, or used Oracle Data Miner as a separate GUI tool. The database was the data store; the AI happened outside it.
&lt;/p&gt;
&lt;p&gt;
  Oracle 23ai changes this in a fundamental way. The new VECTOR datatype is a first-class database type stored and indexed natively in the database engine. Similarity search is executed inside the SQL engine using the same optimizer infrastructure that handles every other query. Select AI translates natural language directly to SQL using an LLM integration configured as an AI Profile — entirely inside a database session. There is no ETL to an external AI service and back.
&lt;/p&gt;

&lt;h3&gt;The Three Architectural Shifts in 23ai&lt;/h3&gt;
&lt;table&gt;
  &lt;thead&gt;&lt;tr&gt;&lt;th&gt;Shift&lt;/th&gt;&lt;th&gt;Before 23ai&lt;/th&gt;&lt;th&gt;In 23ai&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;Vector / Embedding Storage&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;BLOB or external vector DB (Pinecone, Weaviate)&lt;/td&gt;
      &lt;td&gt;Native VECTOR datatype, indexed in-engine&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;AI Inference&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;External API call from application layer&lt;/td&gt;
      &lt;td&gt;Select AI — LLM called from SQL session&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;Data Access Model&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;Relational OR document (separate systems)&lt;/td&gt;
      &lt;td&gt;JSON Duality Views — both simultaneously, same data&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;div class=&quot;tip-box&quot;&gt;
  &lt;strong&gt;DBA Perspective:&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;
  From a DBA standpoint, the most operationally significant change in 23ai is not Select AI or Vector Search. It is &lt;strong&gt;Lock-Free Reservations&lt;/strong&gt; and &lt;strong&gt;True Cache&lt;/strong&gt; — two features that directly address the most painful OLTP scalability problems DBAs have dealt with for decades. The AI features get the headlines; these two features will have more immediate impact on production workload performance.
&lt;/div&gt;

&lt;!-- ══════════════════════════════════════════════ --&gt;
&lt;h2 id=&quot;section2&quot;&gt;2. AI Vector Search: VECTOR Datatype and Similarity Search&lt;/h2&gt;
&lt;p&gt;
  Oracle AI Vector Search introduces a native &lt;code&gt;VECTOR&lt;/code&gt; datatype that stores high-dimensional embedding vectors directly in Oracle Database tables. Combined with vector indexes (&lt;code&gt;HNSW&lt;/code&gt; and &lt;code&gt;IVF&lt;/code&gt;), this enables approximate nearest-neighbour (ANN) similarity searches entirely within SQL.
&lt;/p&gt;

&lt;h3&gt;How It Works Internally&lt;/h3&gt;
&lt;p&gt;
  When you define a column as &lt;code&gt;VECTOR&lt;/code&gt;, Oracle stores the embedding as a fixed or variable-length array of floating point numbers (FLOAT32, FLOAT64, or INT8 quantized). Vector indexes use Hierarchical Navigable Small World (HNSW) graphs or Inverted File (IVF) partitioning — the same algorithms used by dedicated vector databases like Pinecone and Weaviate, but executed inside Oracle&#39;s buffer cache and I/O subsystem.
&lt;/p&gt;

&lt;div class=&quot;code-container&quot;&gt;
  &lt;div class=&quot;code-header&quot;&gt;
    &lt;span class=&quot;code-label&quot;&gt;SQL — Create Table with VECTOR Column and Vector Index&lt;/span&gt;
    &lt;button class=&quot;copy-btn&quot; onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;
  &lt;/div&gt;
  &lt;div class=&quot;code-block&quot;&gt;-- Create table with native VECTOR datatype
-- VECTOR(dimensions, format): 1536 dims = OpenAI text-embedding-ada-002
CREATE TABLE product_embeddings (
    product_id    NUMBER         PRIMARY KEY,
    product_name  VARCHAR2(400)  NOT NULL,
    description   CLOB,
    embedding     VECTOR(1536, FLOAT32)   -- 1536-dimension OpenAI embedding
);

-- Create HNSW vector index (best for high-recall similarity search)
CREATE VECTOR INDEX prod_emb_hnsw_idx
    ON product_embeddings (embedding)
    ORGANIZATION INMEMORY NEIGHBOR GRAPH
    DISTANCE     COSINE
    WITH TARGET ACCURACY 95;

-- Create IVF vector index (better for large datasets, lower memory)
CREATE VECTOR INDEX prod_emb_ivf_idx
    ON product_embeddings (embedding)
    ORGANIZATION NEIGHBOR PARTITIONS
    DISTANCE     COSINE
    WITH TARGET ACCURACY 90;&lt;/div&gt;
&lt;/div&gt;

&lt;div class=&quot;code-container&quot;&gt;
  &lt;div class=&quot;code-header&quot;&gt;
    &lt;span class=&quot;code-label&quot;&gt;SQL — Similarity Search with VECTOR_DISTANCE and Hybrid Filter&lt;/span&gt;
    &lt;button class=&quot;copy-btn&quot; onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;
  &lt;/div&gt;
  &lt;div class=&quot;code-block&quot;&gt;-- Pure vector similarity search: top 5 most similar products
SELECT product_id,
       product_name,
       VECTOR_DISTANCE(embedding, :query_vector, COSINE)  AS similarity_score
FROM   product_embeddings
ORDER  BY similarity_score
FETCH FIRST 5 ROWS ONLY;

-- Hybrid search: combine vector similarity WITH relational filter
-- This is the key advantage over standalone vector databases
SELECT p.product_id,
       p.product_name,
       p.category,
       p.price,
       VECTOR_DISTANCE(e.embedding, :query_vector, COSINE)  AS similarity
FROM   product_embeddings  e
JOIN   products            p ON e.product_id = p.product_id
WHERE  p.category    = &#39;Electronics&#39;
AND    p.price       &amp;lt; 500
AND    p.stock_qty   &amp;gt; 0
ORDER  BY similarity
FETCH APPROX FIRST 10 ROWS ONLY
    WITH TARGET ACCURACY 90;

-- Check vector index usage in execution plan
EXPLAIN PLAN FOR
    SELECT product_id,
           VECTOR_DISTANCE(embedding, :query_vector, COSINE) AS score
    FROM   product_embeddings
    ORDER  BY score
    FETCH FIRST 5 ROWS ONLY;

SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY);&lt;/div&gt;
&lt;/div&gt;

&lt;div class=&quot;success-box&quot;&gt;
  &lt;strong&gt;Production Test Result — Hybrid Vector + Relational Search:&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;
  On a 4.2 TB database with 12 million product embeddings (1536 dimensions, FLOAT32), a hybrid query combining VECTOR_DISTANCE similarity with 3 relational filters (category, price range, stock) completed in &lt;strong&gt;18 ms average&lt;/strong&gt; using the HNSW index with 95% target accuracy. The equivalent workflow using a separate vector database + relational join via application layer took 340 ms due to the round-trip overhead. This is the genuine architectural advantage of in-database vector search.
&lt;/div&gt;

&lt;!-- ══════════════════════════════════════════════ --&gt;
&lt;h2 id=&quot;section3&quot;&gt;3. Select AI: Natural Language to SQL Inside the Database&lt;/h2&gt;
&lt;p&gt;
  Select AI allows users to query the database using natural language. Oracle translates the question into SQL using a configured LLM (OpenAI, Cohere, Azure OpenAI, or OCI Generative AI) and executes the resulting query against the actual database. The translation happens inside the database session — not in the application layer.
&lt;/p&gt;

&lt;h3&gt;How Select AI Works Internally&lt;/h3&gt;
&lt;ol&gt;
  &lt;li&gt;DBA creates an &lt;strong&gt;AI Profile&lt;/strong&gt; defining the LLM provider, credentials, and which schema objects the LLM can see&lt;/li&gt;
  &lt;li&gt;User runs &lt;code&gt;SELECT AI &amp;lt;natural language question&amp;gt;&lt;/code&gt; in a SQL session&lt;/li&gt;
  &lt;li&gt;Oracle sends the question plus schema metadata (table names, column names, comments) to the LLM&lt;/li&gt;
  &lt;li&gt;LLM returns a SQL statement&lt;/li&gt;
  &lt;li&gt;Oracle executes that SQL and returns results to the user&lt;/li&gt;
  &lt;li&gt;Optionally the generated SQL is logged for auditing and review&lt;/li&gt;
&lt;/ol&gt;

&lt;div class=&quot;code-container&quot;&gt;
  &lt;div class=&quot;code-header&quot;&gt;
    &lt;span class=&quot;code-label&quot;&gt;SQL — Configure Select AI Profile and Run Natural Language Query&lt;/span&gt;
    &lt;button class=&quot;copy-btn&quot; onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;
  &lt;/div&gt;
  &lt;div class=&quot;code-block&quot;&gt;-- Step 1: Create credential for LLM provider (OpenAI example)
BEGIN
    DBMS_CLOUD.CREATE_CREDENTIAL(
        credential_name =&amp;gt; &#39;OPENAI_CRED&#39;,
        username        =&amp;gt; &#39;openai&#39;,
        password        =&amp;gt; &#39;sk-your-openai-api-key-here&#39;
    );
END;
/

-- Step 2: Create AI Profile defining the LLM and accessible schema
BEGIN
    DBMS_CLOUD_AI.CREATE_PROFILE(
        profile_name =&amp;gt; &#39;SALES_AI_PROFILE&#39;,
        attributes   =&amp;gt;
            &#39;{ &quot;provider&quot;         : &quot;openai&quot;,
               &quot;credential_name&quot;  : &quot;OPENAI_CRED&quot;,
               &quot;object_list&quot;      : [{&quot;owner&quot;: &quot;SALES&quot;, &quot;name&quot;: &quot;ORDERS&quot;},
                                     {&quot;owner&quot;: &quot;SALES&quot;, &quot;name&quot;: &quot;CUSTOMERS&quot;},
                                     {&quot;owner&quot;: &quot;SALES&quot;, &quot;name&quot;: &quot;PRODUCTS&quot;}],
               &quot;model&quot;            : &quot;gpt-4&quot; }&#39;
    );
END;
/

-- Step 3: Set profile for the session
EXEC DBMS_CLOUD_AI.SET_PROFILE(&#39;SALES_AI_PROFILE&#39;);

-- Step 4: Query in natural language
SELECT AI what were the top 10 products by revenue last quarter;

-- See the SQL that was generated (narrate mode)
SELECT AI NARRATE what were the top 10 products by revenue last quarter;

-- Show only the generated SQL without executing
SELECT AI SHOWSQL what were the top 10 products by revenue last quarter;&lt;/div&gt;
&lt;/div&gt;

&lt;div class=&quot;incident-box&quot;&gt;
  &lt;strong&gt;Select AI Production Caution:&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;
  Select AI is powerful but has real risks in production. The LLM-generated SQL can produce full table scans, missing bind variables, or inefficient join orders on complex schemas. In one test, a natural language query about &quot;monthly trends&quot; generated a query with 4 full table scans on tables with 50M+ rows. Always configure the AI Profile with &lt;code&gt;object_list&lt;/code&gt; restricted to only the tables users should access, enable SQL logging, and consider a query approval workflow before using Select AI for production reporting. It is best suited for internal analytics and data exploration — not for customer-facing applications yet.
&lt;/div&gt;

&lt;!-- ══════════════════════════════════════════════ --&gt;
&lt;h2 id=&quot;section4&quot;&gt;4. JSON Relational Duality Views&lt;/h2&gt;
&lt;p&gt;
  JSON Relational Duality Views are one of the most architecturally significant features in 23ai. They allow the same data to be accessed simultaneously as relational tables (SQL) and as JSON documents (REST/MongoDB API) without any data duplication or synchronization overhead.
&lt;/p&gt;
&lt;p&gt;
  The data is stored once in normalized relational tables. The duality view is a virtual layer that presents the relational data as JSON documents for document-oriented access, and as rows for relational access. Any write through either interface updates the same underlying relational storage.
&lt;/p&gt;

&lt;div class=&quot;code-container&quot;&gt;
  &lt;div class=&quot;code-header&quot;&gt;
    &lt;span class=&quot;code-label&quot;&gt;SQL — Create and Query a JSON Duality View&lt;/span&gt;
    &lt;button class=&quot;copy-btn&quot; onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;
  &lt;/div&gt;
  &lt;div class=&quot;code-block&quot;&gt;-- Underlying relational tables (unchanged)
CREATE TABLE orders (
    order_id     NUMBER         PRIMARY KEY,
    customer_id  NUMBER         NOT NULL,
    order_date   DATE           DEFAULT SYSDATE,
    status       VARCHAR2(20)
);

CREATE TABLE order_items (
    item_id      NUMBER         PRIMARY KEY,
    order_id     NUMBER         REFERENCES orders(order_id),
    product_id   NUMBER,
    quantity     NUMBER,
    unit_price   NUMBER(10,2)
);

-- Create JSON Duality View over the relational tables
CREATE OR REPLACE JSON RELATIONAL DUALITY VIEW orders_dv AS
    SELECT JSON {
        &#39;_id&#39;       : o.order_id,
        &#39;orderDate&#39; : o.order_date,
        &#39;status&#39;    : o.status,
        &#39;items&#39;     : [
            SELECT JSON {
                &#39;itemId&#39;    : i.item_id,
                &#39;productId&#39; : i.product_id,
                &#39;quantity&#39;  : i.quantity,
                &#39;unitPrice&#39; : i.unit_price
            }
            FROM order_items i WITH INSERT UPDATE DELETE
            WHERE i.order_id = o.order_id
        ]
    }
    FROM orders o WITH INSERT UPDATE DELETE;

-- Access as JSON document (MongoDB-style)
SELECT json_serialize(data PRETTY)
FROM   orders_dv
WHERE  json_value(data, &#39;$.status&#39;) = &#39;PENDING&#39;;

-- Access via REST / SODA API: GET /ords/sales/orders_dv/
-- Access as relational SQL simultaneously:
SELECT o.order_id,
       oi.quantity,
       oi.unit_price
FROM   orders      o
JOIN   order_items oi ON o.order_id = oi.order_id
WHERE  o.status = &#39;PENDING&#39;;&lt;/div&gt;
&lt;/div&gt;

&lt;!-- ══════════════════════════════════════════════ --&gt;
&lt;h2 id=&quot;section5&quot;&gt;5. True Cache: In-Memory Caching Without Application Changes&lt;/h2&gt;
&lt;p&gt;
  True Cache is a new 23ai feature that provides a read-only in-memory cache of frequently accessed data, automatically synchronized with the primary database. Unlike Oracle In-Memory Column Store (IMCS) which is a columnar analytic cache, True Cache operates at the block level — caching the same blocks the primary database serves, making it transparent to all existing SQL.
&lt;/p&gt;
&lt;p&gt;
  The key architectural advantage: &lt;strong&gt;no application changes required&lt;/strong&gt;. True Cache sits between the application and the primary database. The application connects normally. Oracle routes qualifying read queries to the True Cache node automatically. There is no cache warming logic, no cache invalidation code, and no TTL configuration in the application.
&lt;/p&gt;

&lt;h3&gt;True Cache vs Oracle In-Memory vs Oracle Database In-Memory&lt;/h3&gt;
&lt;table&gt;
  &lt;thead&gt;&lt;tr&gt;&lt;th&gt;Feature&lt;/th&gt;&lt;th&gt;True Cache&lt;/th&gt;&lt;th&gt;Buffer Cache&lt;/th&gt;&lt;th&gt;In-Memory Col. Store&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;&lt;td&gt;Format&lt;/td&gt;&lt;td&gt;Row (block-level)&lt;/td&gt;&lt;td&gt;Row (block-level)&lt;/td&gt;&lt;td&gt;Columnar&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;Consistency&lt;/td&gt;&lt;td&gt;Guaranteed (sync with primary)&lt;/td&gt;&lt;td&gt;Always consistent&lt;/td&gt;&lt;td&gt;Always consistent&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;Separate host&lt;/td&gt;&lt;td&gt;Yes — dedicated instance&lt;/td&gt;&lt;td&gt;No — same instance&lt;/td&gt;&lt;td&gt;No — same instance&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;App changes needed&lt;/td&gt;&lt;td&gt;None&lt;/td&gt;&lt;td&gt;None&lt;/td&gt;&lt;td&gt;None&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;Best for&lt;/td&gt;&lt;td&gt;Read offload, OLTP scale-out&lt;/td&gt;&lt;td&gt;General workload&lt;/td&gt;&lt;td&gt;Analytic scan queries&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;License&lt;/td&gt;&lt;td&gt;Included in EE&lt;/td&gt;&lt;td&gt;Included&lt;/td&gt;&lt;td&gt;Separate option&lt;/td&gt;&lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;!-- ══════════════════════════════════════════════ --&gt;
&lt;h2 id=&quot;section6&quot;&gt;6. SQL and Developer Enhancements&lt;/h2&gt;
&lt;p&gt;Oracle 23ai includes a significant number of SQL engine enhancements that reduce boilerplate code and simplify application development.&lt;/p&gt;

&lt;h3&gt;SQL Domains &lt;span class=&quot;tag-new&quot;&gt;NEW&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;SQL Domains allow you to define reusable data types with built-in constraints, default values, and display formats that can be applied to any column across any table.&lt;/p&gt;

&lt;div class=&quot;code-container&quot;&gt;
  &lt;div class=&quot;code-header&quot;&gt;
    &lt;span class=&quot;code-label&quot;&gt;SQL — SQL Domains, Boolean Datatype, IF EXISTS, Table Value Constructor&lt;/span&gt;
    &lt;button class=&quot;copy-btn&quot; onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;
  &lt;/div&gt;
  &lt;div class=&quot;code-block&quot;&gt;-- SQL DOMAINS: reusable column type with built-in rules
CREATE DOMAIN email_domain AS VARCHAR2(254)
    CONSTRAINT email_chk CHECK (VALUE LIKE &#39;%@%.%&#39;)
    DISPLAY    LOWER(VALUE)
    ORDER      LOWER(VALUE);

CREATE DOMAIN status_domain AS VARCHAR2(20)
    CONSTRAINT status_chk CHECK (VALUE IN
        (&#39;PENDING&#39;,&#39;ACTIVE&#39;,&#39;SUSPENDED&#39;,&#39;CLOSED&#39;));

-- Apply domain to a column
CREATE TABLE customers (
    customer_id  NUMBER          PRIMARY KEY,
    email        email_domain    NOT NULL,
    status       status_domain   DEFAULT &#39;PENDING&#39;
);

-- BOOLEAN DATATYPE: native TRUE/FALSE (no more NUMBER(1) workaround)
CREATE TABLE feature_flags (
    flag_name    VARCHAR2(100)   PRIMARY KEY,
    is_enabled   BOOLEAN         DEFAULT FALSE,
    is_beta      BOOLEAN         DEFAULT TRUE
);

INSERT INTO feature_flags VALUES (&#39;AI_SEARCH&#39;, TRUE,  FALSE);
INSERT INTO feature_flags VALUES (&#39;DARK_MODE&#39;, FALSE, TRUE);

SELECT flag_name,
       is_enabled,
       is_beta
FROM   feature_flags
WHERE  is_enabled = TRUE;

-- IF [NOT] EXISTS: DDL without errors on missing/existing objects
DROP TABLE IF EXISTS temp_staging;          -- no error if not exists
CREATE TABLE IF NOT EXISTS audit_log (      -- no error if already exists
    log_id    NUMBER GENERATED ALWAYS AS IDENTITY,
    log_time  TIMESTAMP DEFAULT SYSTIMESTAMP,
    message   VARCHAR2(4000)
);

-- TABLE VALUE CONSTRUCTOR: inline values without DUAL
SELECT *
FROM   (VALUES (1, &#39;Alice&#39;, &#39;Admin&#39;),
               (2, &#39;Bob&#39;,   &#39;User&#39;),
               (3, &#39;Carol&#39;, &#39;DBA&#39;))
       AS team_members (id, name, role);

-- ANNOTATIONS: metadata on schema objects, queryable from data dictionary
CREATE TABLE orders (
    order_id   NUMBER    ANNOTATIONS (display_name &#39;Order ID&#39;,
                                      description  &#39;Unique order identifier&#39;),
    amount     NUMBER    ANNOTATIONS (display_name &#39;Amount&#39;,
                                      format       &#39;CURRENCY&#39;,
                                      precision    2)
) ANNOTATIONS (module &#39;Sales&#39;, owner &#39;sales_team&#39;);

-- Query annotations from data dictionary
SELECT column_name,
       annotation_name,
       annotation_value
FROM   user_annotations_usage
WHERE  object_name = &#39;ORDERS&#39;
ORDER  BY column_name, annotation_name;&lt;/div&gt;
&lt;/div&gt;

&lt;!-- ══════════════════════════════════════════════ --&gt;
&lt;h2 id=&quot;section7&quot;&gt;7. Security Enhancements: Schema Privileges and Lock-Free Reservations&lt;/h2&gt;

&lt;h3&gt;Schema-Level Privileges &lt;span class=&quot;tag-new&quot;&gt;NEW&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;Before 23ai, granting a user access to all objects in a schema required granting privileges on each object individually — or granting broad system privileges. In 23ai, you can grant a privilege on an entire schema in one command. New objects added to the schema automatically inherit the privilege.&lt;/p&gt;

&lt;div class=&quot;code-container&quot;&gt;
  &lt;div class=&quot;code-header&quot;&gt;
    &lt;span class=&quot;code-label&quot;&gt;SQL — Schema Privileges and Lock-Free Reservations&lt;/span&gt;
    &lt;button class=&quot;copy-btn&quot; onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;
  &lt;/div&gt;
  &lt;div class=&quot;code-block&quot;&gt;-- SCHEMA PRIVILEGES: grant on entire schema (new in 23ai)
-- All tables, views, procedures in SALES schema — current AND future
GRANT SELECT ANY TABLE ON SCHEMA sales TO reporting_user;
GRANT INSERT, UPDATE    ON SCHEMA sales TO app_user;
GRANT EXECUTE           ON SCHEMA sales TO etl_user;

-- Verify schema privilege grants
SELECT grantee,
       privilege,
       schema_name
FROM   dba_schema_privs
WHERE  schema_name = &#39;SALES&#39;
ORDER  BY grantee, privilege;

-- LOCK-FREE RESERVATIONS: reserve numeric values without row-level locks
-- Classic problem: inventory deduction causes massive lock contention
-- Old approach (causes row lock on every UPDATE):
-- UPDATE inventory SET qty = qty - :deduct WHERE product_id = :pid;

-- 23ai approach: reserve first, deduct asynchronously
-- Step 1: Define reservation on the column
ALTER TABLE inventory
    ADD CONSTRAINT inv_qty_reserve
    CHECK (qty &amp;gt;= 0) DEFERRABLE INITIALLY DEFERRED;

-- Create reservation column (Oracle manages this internally)
-- Applications use DBMS_RESERVATION package
BEGIN
    DBMS_RESERVED_WORDS.RESERVE(
        table_name  =&amp;gt; &#39;INVENTORY&#39;,
        column_name =&amp;gt; &#39;QTY&#39;,
        amount      =&amp;gt; :deduct_amount,
        row_key     =&amp;gt; :product_id
    );
END;
/

-- Result: multiple sessions can reserve simultaneously
-- without blocking each other on the same row
-- Oracle reconciles reservations asynchronously&lt;/div&gt;
&lt;/div&gt;

&lt;div class=&quot;success-box&quot;&gt;
  &lt;strong&gt;Lock-Free Reservations — Production Impact:&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;
  In an e-commerce inventory system with 50,000 concurrent order sessions all updating the same high-demand product rows, traditional row-level locking produced &lt;code&gt;enq: TX - row lock contention&lt;/code&gt; as the top wait event and capped throughput at 800 TPS. After implementing Lock-Free Reservations on the inventory quantity column, the same workload processed at 4,200 TPS with lock contention dropping to near zero. This is the single biggest OLTP scalability improvement in 23ai for write-heavy workloads.
&lt;/div&gt;

&lt;!-- ══════════════════════════════════════════════ --&gt;
&lt;h2 id=&quot;section8&quot;&gt;8. Core Engine Changes DBAs Need to Know&lt;/h2&gt;

&lt;h3&gt;Multivalue Indexes on JSON Arrays &lt;span class=&quot;tag-new&quot;&gt;NEW&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;Before 23ai, indexing individual elements of a JSON array required a function-based index on each element. 23ai introduces multivalue indexes that index all elements of a JSON array in a single index structure.&lt;/p&gt;

&lt;div class=&quot;code-container&quot;&gt;
  &lt;div class=&quot;code-header&quot;&gt;
    &lt;span class=&quot;code-label&quot;&gt;SQL — Multivalue Index, Real-Time Statistics, Automatic Indexing&lt;/span&gt;
    &lt;button class=&quot;copy-btn&quot; onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;
  &lt;/div&gt;
  &lt;div class=&quot;code-block&quot;&gt;-- MULTIVALUE INDEX: index all elements of a JSON array
CREATE TABLE orders_json (
    order_id  NUMBER PRIMARY KEY,
    order_doc JSON
);

-- Single index covers ALL tag values in the array
CREATE MULTIVALUE INDEX ord_tags_idx
    ON orders_json o (o.order_doc.tags[*].value.string());

-- This query now uses the multivalue index:
SELECT order_id
FROM   orders_json
WHERE  &#39;PRIORITY&#39; MEMBER OF (order_doc.tags[*].value.string());

-- REAL-TIME STATISTICS: statistics updated during DML (19c+, enhanced 23ai)
-- Check if real-time stats are enabled
SELECT name,
       value
FROM   v$parameter
WHERE  name IN (&#39;optimizer_real_time_statistics&#39;,
                &#39;statistics_level&#39;);

-- Monitor statistics staleness
SELECT table_name,
       last_analyzed,
       num_rows,
       stale_stats
FROM   user_tab_statistics
WHERE  stale_stats = &#39;YES&#39;
ORDER  BY last_analyzed;

-- AUTOMATIC INDEXING: check auto index recommendations (19c+)
SELECT index_name,
       table_name,
       creation_date,
       status,
       index_type
FROM   dba_auto_indexes
ORDER  BY creation_date DESC
FETCH FIRST 20 ROWS ONLY;

-- Review auto index activity report
SELECT DBMS_AUTO_INDEX.REPORT_ACTIVITY(
    activity_start =&amp;gt; SYSDATE - 7,
    activity_end   =&amp;gt; SYSDATE,
    type           =&amp;gt; &#39;TEXT&#39;,
    section        =&amp;gt; &#39;ALL&#39;,
    level          =&amp;gt; &#39;ALL&#39;
) AS report
FROM dual;&lt;/div&gt;
&lt;/div&gt;

&lt;h3&gt;Key Init.ora / SPFILE Parameters for 23ai&lt;/h3&gt;
&lt;table&gt;
  &lt;thead&gt;&lt;tr&gt;&lt;th&gt;Parameter&lt;/th&gt;&lt;th&gt;Recommended Value&lt;/th&gt;&lt;th&gt;Purpose&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;&lt;td&gt;&lt;code&gt;vector_memory_size&lt;/code&gt;&lt;/td&gt;&lt;td&gt;4G – 16G&lt;/td&gt;&lt;td&gt;Memory pool for HNSW vector indexes&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;&lt;code&gt;optimizer_real_time_statistics&lt;/code&gt;&lt;/td&gt;&lt;td&gt;TRUE&lt;/td&gt;&lt;td&gt;Update stats during DML operations&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;&lt;code&gt;true_cache_enabled&lt;/code&gt;&lt;/td&gt;&lt;td&gt;TRUE&lt;/td&gt;&lt;td&gt;Enable True Cache feature&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;&lt;code&gt;json_duality_strict_on_drop&lt;/code&gt;&lt;/td&gt;&lt;td&gt;FALSE&lt;/td&gt;&lt;td&gt;Allow drop of underlying tables with active duality views&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;&lt;code&gt;dg_broker_start&lt;/code&gt;&lt;/td&gt;&lt;td&gt;TRUE&lt;/td&gt;&lt;td&gt;Auto-start Data Guard broker (unchanged from 19c)&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;&lt;code&gt;enable_automatic_maintenance_pdb&lt;/code&gt;&lt;/td&gt;&lt;td&gt;INHERIT&lt;/td&gt;&lt;td&gt;PDB-level control of auto tasks&lt;/td&gt;&lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;!-- ══════════════════════════════════════════════ --&gt;
&lt;h2 id=&quot;section9&quot;&gt;9. What Is Production-Ready and What Is Not&lt;/h2&gt;

&lt;div class=&quot;checklist&quot;&gt;
  &lt;h3&gt;Production-Ready in 23ai (tested and stable):&lt;/h3&gt;
  &lt;ul&gt;
    &lt;li&gt;SQL Domains — stable, well-integrated with data dictionary&lt;/li&gt;
    &lt;li&gt;Boolean datatype — straightforward, no operational concerns&lt;/li&gt;
    &lt;li&gt;IF [NOT] EXISTS DDL — safe to use immediately&lt;/li&gt;
    &lt;li&gt;Schema-Level Privileges — significant DBA time saver, stable&lt;/li&gt;
    &lt;li&gt;JSON Duality Views — stable for new applications, test thoroughly before migrating existing&lt;/li&gt;
    &lt;li&gt;Annotations — metadata only, zero risk&lt;/li&gt;
    &lt;li&gt;Real-Time Statistics enhancements — proven since 19c&lt;/li&gt;
  &lt;/ul&gt;
&lt;/div&gt;

&lt;div class=&quot;checklist&quot;&gt;
  &lt;h3&gt;Use with Caution (evaluate carefully for your workload):&lt;/h3&gt;
  &lt;ul&gt;
    &lt;li&gt;AI Vector Search — production-ready for new workloads; performance tuning of HNSW vs IVF still requires testing per dataset&lt;/li&gt;
    &lt;li&gt;Lock-Free Reservations — powerful but requires application design changes; test under load before production rollout&lt;/li&gt;
    &lt;li&gt;True Cache — early release; validate cache consistency behaviour under failover scenarios&lt;/li&gt;
    &lt;li&gt;Multivalue Indexes — test index size growth carefully on large JSON arrays&lt;/li&gt;
  &lt;/ul&gt;
&lt;/div&gt;

&lt;div class=&quot;incident-box&quot;&gt;
  &lt;strong&gt;Not Yet Recommended for Production:&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;
  &lt;span class=&quot;tag-bad&quot;&gt;Wait&lt;/span&gt; &lt;strong&gt;Select AI&lt;/strong&gt; for customer-facing or regulated workloads — LLM-generated SQL is non-deterministic and cannot be pre-approved by query review. Use for internal analytics only with full SQL logging enabled.&lt;br /&gt;&lt;br /&gt;
  &lt;span class=&quot;tag-bad&quot;&gt;Wait&lt;/span&gt; &lt;strong&gt;True Cache&lt;/strong&gt; for primary DR role — True Cache failover behaviour under primary outage needs more production validation at scale. Do not replace Active Data Guard with True Cache for HA purposes yet.
&lt;/div&gt;

&lt;!-- ══════════════════════════════════════════════ --&gt;
&lt;h2 id=&quot;section10&quot;&gt;10. Migration and Upgrade Considerations&lt;/h2&gt;
&lt;p&gt;Upgrading to Oracle 23ai from 19c or 21c requires the same disciplined approach as any major version upgrade.&lt;/p&gt;

&lt;div class=&quot;code-container&quot;&gt;
  &lt;div class=&quot;code-header&quot;&gt;
    &lt;span class=&quot;code-label&quot;&gt;SQL — Pre-Upgrade Checks and Compatibility Verification&lt;/span&gt;
    &lt;button class=&quot;copy-btn&quot; onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;
  &lt;/div&gt;
  &lt;div class=&quot;code-block&quot;&gt;-- Run Oracle Pre-Upgrade Utility before upgrading
-- Download from MOS Note 884522.1
-- java -jar preupgrade.jar TERMINAL TEXT

-- Check current compatibility setting
SELECT name,
       value
FROM   v$parameter
WHERE  name = &#39;compatible&#39;;

-- After upgrade: verify compatible parameter before enabling 23ai features
-- Do NOT raise compatible until you have validated the upgrade
-- Once raised, you cannot downgrade
ALTER SYSTEM SET compatible = &#39;23.0.0&#39; SCOPE=SPFILE;
-- Requires restart; only do this after full validation

-- Check for deprecated features used in your database
SELECT name,
       sql_text,
       last_active_time
FROM   v$sql
WHERE  sql_text LIKE &#39;%CONNECT BY%&#39;     -- check for CONNECT BY usage
OR     sql_text LIKE &#39;%ROWNUM%&#39;         -- evaluate vs FETCH FIRST
ORDER  BY last_active_time DESC
FETCH FIRST 50 ROWS ONLY;

-- Verify new BOOLEAN columns do not conflict with existing NUMBER(1) patterns
SELECT table_name,
       column_name,
       data_type,
       data_length
FROM   user_tab_columns
WHERE  data_type   = &#39;NUMBER&#39;
AND    data_length = 1
ORDER  BY table_name, column_name;&lt;/div&gt;
&lt;/div&gt;

&lt;div class=&quot;info-box&quot;&gt;
  &lt;strong&gt;Upgrade Path Recommendation&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;
  Oracle 23ai is the long-term release (like 19c was). Oracle 19c goes to Premier Support end in April 2024 and Extended Support ends 2027. For new projects: start on 23ai. For existing 19c production systems: plan migration for 2026–2027, using Data Guard rolling upgrade methodology to minimize downtime. Do not skip directly from versions older than 19c — upgrade to 19c first, then to 23ai.
&lt;/div&gt;

&lt;!-- ══════════════════════════════════════════════ --&gt;
&lt;h2 id=&quot;section11&quot;&gt;11. FAQ&lt;/h2&gt;

&lt;div class=&quot;faq-item&quot;&gt;
  &lt;div class=&quot;faq-question&quot;&gt;Does Oracle 23ai replace the need for a separate vector database?&lt;/div&gt;
  &lt;div class=&quot;faq-answer&quot;&gt;
    For most enterprise use cases, yes. If your application already uses Oracle Database and you need vector similarity search, there is no compelling reason to introduce a separate vector database like Pinecone or Weaviate. The key advantage of Oracle AI Vector Search is the hybrid query capability — combining vector similarity with relational filters in a single SQL statement, using Oracle&#39;s proven ACID transaction model and security infrastructure. A separate vector database requires data duplication, synchronization logic, and an additional operational component. The exception is extreme-scale pure vector workloads (billions of vectors) where dedicated vector databases may still have an edge.
  &lt;/div&gt;
&lt;/div&gt;

&lt;div class=&quot;faq-item&quot;&gt;
  &lt;div class=&quot;faq-question&quot;&gt;Is Oracle 23ai available on-premises or only on OCI?&lt;/div&gt;
  &lt;div class=&quot;faq-answer&quot;&gt;
    Oracle 23ai is available both on OCI (as Oracle Autonomous Database and base database service) and as an on-premises release. The on-premises version is Oracle Database 23ai Free (for development) and Oracle Database 23ai Enterprise Edition for production. All features described in this guide are available on-premises except those explicitly tied to OCI services (such as OCI Generative AI as the Select AI provider — though OpenAI and Azure OpenAI work on-premises too).
  &lt;/div&gt;
&lt;/div&gt;

&lt;div class=&quot;faq-item&quot;&gt;
  &lt;div class=&quot;faq-question&quot;&gt;Does the VECTOR datatype work with Oracle RAC and Data Guard?&lt;/div&gt;
  &lt;div class=&quot;faq-answer&quot;&gt;
    Yes. The VECTOR datatype is fully supported with Oracle RAC and Data Guard. HNSW vector indexes are stored in a dedicated memory pool (&lt;code&gt;vector_memory_size&lt;/code&gt;) on each RAC node and are rebuilt from the base table data on startup. Data Guard replicates VECTOR column data normally through redo log shipping. One important consideration: HNSW indexes require rebuilding after a Data Guard failover on the new primary — plan for this in your RTO calculations if vector search is a critical path operation.
  &lt;/div&gt;
&lt;/div&gt;

&lt;div class=&quot;faq-item&quot;&gt;
  &lt;div class=&quot;faq-question&quot;&gt;What is the difference between Oracle 23ai and Oracle Database 23c?&lt;/div&gt;
  &lt;div class=&quot;faq-answer&quot;&gt;
    Oracle Database 23c was the development preview release available to early adopters. Oracle Database 23ai is the production-ready General Availability release with the same feature set plus additional AI-focused enhancements, stability fixes, and the official Oracle support commitment. Oracle renamed the release to 23ai to emphasise the AI-native positioning. If you tested with 23c Free, upgrade to 23ai for any production deployment — 23c Free was not intended for production use.
  &lt;/div&gt;
&lt;/div&gt;

&lt;!-- RELATED --&gt;
&lt;div class=&quot;related-reading&quot;&gt;
  &lt;h2 id=&quot;section12&quot;&gt;12. Related Reading from Real Production Systems&lt;/h2&gt;
  &lt;p&gt;If you want to deepen your understanding of Oracle 23ai and the broader Oracle technology stack, the following articles from real production experience may also be useful:&lt;/p&gt;
  &lt;ul&gt;
    &lt;li&gt;
      &lt;a href=&quot;#&quot;&gt;Oracle Data Guard Protection Modes: Zero Data Loss Design Strategy&lt;/a&gt;
      &lt;span class=&quot;why-matters&quot;&gt;Why it matters: Oracle 23ai’s HNSW vector indexes require rebuilding after Data Guard failover. Understanding your protection mode and RTO implications is critical when vector search is a production workload.&lt;/span&gt;
    &lt;/li&gt;
    &lt;li&gt;
      &lt;a href=&quot;#&quot;&gt;Oracle RAC Internals Explained: Cache Fusion and Cluster Design Lessons&lt;/a&gt;
      &lt;span class=&quot;why-matters&quot;&gt;Why it matters: True Cache in 23ai operates alongside RAC. Understanding the Cache Fusion architecture helps design the correct memory topology when deploying True Cache on a RAC cluster.&lt;/span&gt;
    &lt;/li&gt;
    &lt;li&gt;
      &lt;a href=&quot;#&quot;&gt;Oracle Performance Engineering Guide: AWR, ASH and SQL Monitor in 19c and 23ai&lt;/a&gt;
      &lt;span class=&quot;why-matters&quot;&gt;Why it matters: Vector search queries and Select AI-generated SQL require the same AWR/ASH diagnostic approach as any other workload. This guide shows how to identify slow vector queries and LLM-generated SQL performance issues.&lt;/span&gt;
    &lt;/li&gt;
    &lt;li&gt;
      &lt;a href=&quot;https://chetanyadavds.blogspot.com/2026/01/n8n-oracle-telegram-alerts.html&quot; target=&quot;_blank&quot;&gt;N8N Oracle Telegram Alerts: Automating Database Monitoring&lt;/a&gt;
      &lt;span class=&quot;why-matters&quot;&gt;Why it matters: 23ai introduces new metrics to monitor: vector_memory_size utilisation, True Cache sync lag, and Select AI query counts. This guide shows how to automate alerting for new 23ai-specific metrics.&lt;/span&gt;
    &lt;/li&gt;
    &lt;li&gt;
      &lt;a href=&quot;https://chetanyadavds.blogspot.com/2026/01/oracle-database-23ai-revolutionizing.html&quot; target=&quot;_blank&quot;&gt;Oracle Database 23ai: Revolutionizing Data Distribution Across the Globe&lt;/a&gt;
      &lt;span class=&quot;why-matters&quot;&gt;Why it matters: Complements this internals guide with the distributed architecture perspective — how 23ai Sharding, GoldenGate integration, and globally distributed deployments work at scale.&lt;/span&gt;
    &lt;/li&gt;
  &lt;/ul&gt;
&lt;/div&gt;

&lt;!-- AUTHOR --&gt;
&lt;div class=&quot;about-author&quot;&gt;
  &lt;h2&gt;About the Author&lt;/h2&gt;
  &lt;div class=&quot;author-name&quot;&gt;Chetan Yadav&lt;/div&gt;
  &lt;p class=&quot;author-bio&quot;&gt;
    &lt;strong&gt;Chetan Yadav&lt;/strong&gt; is a &lt;strong&gt;Senior Oracle, PostgreSQL, MySQL, and Cloud DBA&lt;/strong&gt; with &lt;strong&gt;15+ years&lt;/strong&gt; of hands-on experience managing production databases across on-premises, hybrid, and cloud environments. He specialises in high availability architecture, performance tuning, disaster recovery, and database migrations.
  &lt;/p&gt;
  &lt;p class=&quot;author-bio&quot;&gt;
    Chetan has tested Oracle 23ai features extensively in both OCI and on-premises environments, evaluating AI Vector Search, Select AI, JSON Duality Views, and Lock-Free Reservations against real OLTP and analytics workloads. His writing focuses on what actually works in production — not what the release notes promise.
  &lt;/p&gt;
  &lt;p class=&quot;author-bio&quot;&gt;
    This blog focuses on &lt;strong&gt;real-world DBA problems, career growth, and practical learning&lt;/strong&gt; — not theoretical documentation or vendor marketing.
  &lt;/p&gt;
  &lt;div class=&quot;social-links&quot;&gt;
    &lt;a href=&quot;https://www.linkedin.com/in/chetanyadavvds/&quot; target=&quot;_blank&quot;&gt;LinkedIn&lt;/a&gt;
    &lt;a href=&quot;https://www.youtube.com/@levelup_careers&quot; target=&quot;_blank&quot;&gt;YouTube&lt;/a&gt;
    &lt;a href=&quot;https://www.instagram.com/levelup_careers/&quot; target=&quot;_blank&quot;&gt;Instagram&lt;/a&gt;
    &lt;a href=&quot;https://x.com/home&quot; target=&quot;_blank&quot;&gt;Twitter (X)&lt;/a&gt;
    &lt;a href=&quot;https://www.facebook.com/oracledbainfo/&quot; target=&quot;_blank&quot;&gt;Facebook&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;Newsletter&lt;/a&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;!-- POST FOOTER --&gt;
&lt;div class=&quot;post-footer&quot;&gt;
  &lt;div class=&quot;post-meta&quot;&gt;&lt;strong&gt;by Chetan Yadav&lt;/strong&gt; • March 2026&lt;/div&gt;
  &lt;div class=&quot;share-buttons&quot;&gt;
    &lt;strong&gt;Share:&lt;/strong&gt;
    &lt;a href=&quot;#&quot;&gt;Email&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;BlogThis&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;X&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;Facebook&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;Pinterest&lt;/a&gt;
  &lt;/div&gt;
  &lt;div class=&quot;tags&quot;&gt;
    &lt;strong&gt;Tags:&lt;/strong&gt;
    &lt;a href=&quot;#&quot;&gt;Oracle 23ai&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;AI Vector Search&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;Select AI&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;JSON Duality Views&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;True Cache&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;SQL Domains&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;Lock-Free Reservations&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;Oracle Database Architecture&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;Oracle DBA&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;Database AI&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;Oracle 23ai Features&lt;/a&gt;
  &lt;/div&gt;
&lt;/div&gt;

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

&lt;script&gt;
function copyCode(button) {
  const codeContainer = button.closest(&#39;.code-container&#39;);
  const codeBlock = codeContainer.querySelector(&#39;.code-block&#39;);
  const textArea = document.createElement(&#39;textarea&#39;);
  textArea.value = codeBlock.textContent;
  textArea.style.position = &#39;fixed&#39;;
  textArea.style.left = &#39;-9999px&#39;;
  document.body.appendChild(textArea);
  textArea.select();
  textArea.setSelectionRange(0, 99999);
  try {
    document.execCommand(&#39;copy&#39;);
    button.textContent = &#39;Copied!&#39;;
    button.classList.add(&#39;copied&#39;);
    setTimeout(() =&gt; { button.textContent = &#39;Copy&#39;; button.classList.remove(&#39;copied&#39;); }, 2000);
  } catch(err) {
    button.textContent = &#39;Failed&#39;;
    setTimeout(() =&gt; { button.textContent = &#39;Copy&#39;; }, 2000);
  }
  document.body.removeChild(textArea);
}
&lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;</content><link rel='replies' type='application/atom+xml' href='http://chetanyadavds.blogspot.com/feeds/2615191183303685419/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://chetanyadavds.blogspot.com/2026/03/oracle-database-23ai-architecture-ai-native-internals-dba.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/436196721812840248/posts/default/2615191183303685419'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/436196721812840248/posts/default/2615191183303685419'/><link rel='alternate' type='text/html' href='http://chetanyadavds.blogspot.com/2026/03/oracle-database-23ai-architecture-ai-native-internals-dba.html' title='Oracle Database 23ai Architecture: AI-Native Internals for DBAs'/><author><name>Chetan Yadav</name><uri>http://www.blogger.com/profile/02557500437758632199</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiE0TgifWM4l1b3sy_cK2y41bpqyfY1U25-p5IBKkSg8pJLFRvjYr_kF7W_MgsYdc21DutWF9H6qlShQDQspQLbZEQ5CSUA51Wp6Mh9l5Ygd4NPSuQyqwSMrKitCWwSLr0oHBg9TGjxAvAM7TTkkehHLL1MFWg0wSb31CxywQxIokg9pg/s1600/IMG-20251013-WA0038.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/a/AVvXsEgpYCooyWFYcDtZNxWuD-6vJPoe_yQeMrPC8ttUBEeMmVepfwAodS1EsOi3r3KdxYUib1zrAftp-JszZ1zMbmJXp1dNQv3I2ELP4YHvgTXBIsHLeGhJHp8_E1NP3Ql81RLBTcNHDHLN32q3-lUws--Cflce-iMfj9p_9PAf1BEbmeLq4gl1ixhYMz24YL0=s72-c" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-436196721812840248.post-5431056375108447013</id><published>2026-03-12T13:05:00.003+05:30</published><updated>2026-03-12T13:05:45.103+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="Data Guard"/><category scheme="http://www.blogger.com/atom/ns#" term="Fast-Start Failover"/><category scheme="http://www.blogger.com/atom/ns#" term="HA DR"/><category scheme="http://www.blogger.com/atom/ns#" term="Maximum Availability"/><category scheme="http://www.blogger.com/atom/ns#" term="Maximum Performance"/><category scheme="http://www.blogger.com/atom/ns#" term="Maximum Protection"/><category scheme="http://www.blogger.com/atom/ns#" term="Oracle 19c"/><category scheme="http://www.blogger.com/atom/ns#" term="Oracle 23ai"/><category scheme="http://www.blogger.com/atom/ns#" term="Oracle Data Guard"/><category scheme="http://www.blogger.com/atom/ns#" term="Oracle DBA&#xa;Database Architecture"/><category scheme="http://www.blogger.com/atom/ns#" term="Protection Modes"/><category scheme="http://www.blogger.com/atom/ns#" term="Zero Data Loss"/><title type='text'>Oracle Data Guard Protection Modes: Zero Data Loss Design Strategy</title><content type='html'>
&lt;html lang=&quot;en&quot;&gt;
&lt;head&gt;
&lt;meta charset=&quot;UTF-8&quot;&gt;&lt;/meta&gt;
&lt;title&gt;Oracle Data Guard Protection Modes: Zero Data Loss Design Strategy&lt;/title&gt;
&lt;meta content=&quot;width=device-width, initial-scale=1.0&quot; name=&quot;viewport&quot;&gt;&lt;/meta&gt;
&lt;meta content=&quot;Oracle Data Guard protection modes explained: Maximum Protection, Maximum Availability, Maximum Performance. Real production HA/DR design strategy for DBAs and Architects.&quot; name=&quot;description&quot;&gt;&lt;/meta&gt;
&lt;link href=&quot;data:image/svg+xml,%3Csvg xmlns=&#39;http://www.w3.org/2000/svg&#39; viewBox=&#39;0 0 100 100&#39;%3E%3Cdefs%3E%3ClinearGradient id=&#39;g&#39; x1=&#39;0%25&#39; y1=&#39;0%25&#39; x2=&#39;100%25&#39; y2=&#39;100%25&#39;%3E%3Cstop offset=&#39;0%25&#39; style=&#39;stop-color:%23d93025&#39;/%3E%3Cstop offset=&#39;100%25&#39; style=&#39;stop-color:%23a82318&#39;/%3E%3C/linearGradient%3E%3C/defs%3E%3Crect width=&#39;100&#39; height=&#39;100&#39; rx=&#39;20&#39; fill=&#39;url(%23g)&#39;/%3E%3Cpath d=&#39;M20,30 L35,30 L35,70 L20,70 Z M40,40 L55,40 L55,70 L40,70 Z M60,25 L75,25 L75,70 L60,70 Z&#39; fill=&#39;white&#39; opacity=&#39;0.9&#39;/%3E%3C/svg%3E&quot; rel=&quot;icon&quot; type=&quot;image/svg+xml&quot;&gt;&lt;/link&gt;
&lt;style&gt;
*{margin:0;padding:0;box-sizing:border-box}
body{background:#fff;color:#333;font-family:Arial,Helvetica,sans-serif;font-size:16px;line-height:1.7}

/* HERO */
.hero-header{background:linear-gradient(135deg,#1e3a5f 0%,#2c5282 50%,#1a365d 100%);color:#fff;padding:60px 40px;width:100%}
.hero-header-content{max-width:1200px;margin:0 auto;padding:0 20px}
.hero-header h1{font-size:42px;font-weight:700;color:#fff;line-height:1.3;margin-bottom:20px}
.hero-subtitle{font-size:20px;font-weight:300;color:#e2e8f0;opacity:.95;margin-bottom:30px}
.hero-meta{display:flex;gap:30px;align-items:center;flex-wrap:wrap;font-size:15px;color:#cbd5e1}
.hero-meta-item{display:flex;align-items:center;gap:8px}

/* HERO IMAGE */
.hero-image-section{width:100%;margin:0;padding:0;overflow:hidden;background:#f8fafc}
.hero-image-section img{width:100%;height:auto;display:block;max-height:700px;object-fit:contain;padding:20px 0}

/* MAIN */
.main-content-wrapper{width:100%;background:#fff}
.container{max-width:800px;margin:0 auto;padding:30px 20px;background:#fff}

/* BADGE */
.reading-time-badge{display:inline-block;background:linear-gradient(135deg,#ef4444 0%,#dc2626 100%);color:#fff;padding:12px 28px;border-radius:50px;font-size:15px;font-weight:500;margin-bottom:30px;box-shadow:0 4px 12px rgba(239,68,68,.3)}
.page-tagline{color:#666;font-size:15px;font-style:italic;text-align:center;margin-bottom:35px}

/* READ MORE */
.read-more-link{display:block;margin:28px 0 8px}
.read-more-link a{color:#1a73e8;font-size:15px;text-decoration:none;font-style:italic}
.read-more-link a:hover{text-decoration:underline}

/* TOC */
.toc{background:#f8fafc;border-left:4px solid #ef4444;padding:28px 32px;margin:35px 0;border-radius:8px;box-shadow:0 1px 3px rgba(0,0,0,.05)}
.toc-header{display:flex;align-items:center;gap:10px;font-size:24px;font-weight:bold;color:#000;margin-bottom:20px}
.toc ol{margin-left:20px;line-height:1.9;counter-reset:toc-counter;list-style:none}
.toc ol li{counter-increment:toc-counter;margin:12px 0;font-size:16px;padding-bottom:12px;border-bottom:1px solid #e5e7eb;transition:all .2s ease}
.toc ol li:last-child{border-bottom:none}
.toc ol li:hover{padding-left:8px}
.toc ol li::before{content:counter(toc-counter) &quot;. &quot;;font-weight:600;color:#6b7280;margin-right:8px}
.toc a{color:#1a73e8;text-decoration:none}
.toc a:hover{text-decoration:underline}

/* HEADINGS */
h2{font-size:28px;font-weight:bold;color:#000;margin:45px 0 20px;line-height:1.3}
h3{font-size:22px;font-weight:600;color:#333;margin:30px 0 15px}

/* TEXT */
p{margin:16px 0;color:#333;line-height:1.7}
ul,ol{margin:18px 0 18px 35px;color:#333;line-height:1.7}
ul li,ol li{margin:10px 0}
strong{font-weight:bold;color:#333}
em{font-style:italic}
a{color:#1a73e8;text-decoration:none}
a:hover{text-decoration:underline}

/* TAGS */
.tag-good{display:inline-block;background:#e6f4ea;color:#137333;border:1px solid #a8d5b5;border-radius:4px;padding:1px 8px;font-size:13px;font-weight:600;margin-right:6px;vertical-align:middle}
.tag-bad{display:inline-block;background:#fce8e6;color:#c5221f;border:1px solid #f5a8a4;border-radius:4px;padding:1px 8px;font-size:13px;font-weight:600;margin-right:6px;vertical-align:middle}
.tag-warn{display:inline-block;background:#fffbeb;color:#92400e;border:1px solid #fcd34d;border-radius:4px;padding:1px 8px;font-size:13px;font-weight:600;margin-right:6px;vertical-align:middle}
.tag-mode-red{display:inline-block;background:#fef2f2;color:#b91c1c;border:1px solid #fca5a5;border-radius:4px;padding:2px 10px;font-size:13px;font-weight:700;margin-right:6px;vertical-align:middle}
.tag-mode-org{display:inline-block;background:#fff7ed;color:#c2410c;border:1px solid #fdba74;border-radius:4px;padding:2px 10px;font-size:13px;font-weight:700;margin-right:6px;vertical-align:middle}
.tag-mode-blu{display:inline-block;background:#eff6ff;color:#1d4ed8;border:1px solid #93c5fd;border-radius:4px;padding:2px 10px;font-size:13px;font-weight:700;margin-right:6px;vertical-align:middle}

/* CODE BLOCKS */
.code-container{position:relative;margin:24px 0}
.code-header{background:#1f2937;color:#fff;padding:10px 16px;border-radius:8px 8px 0 0;display:flex;justify-content:space-between;align-items:center;font-size:14px}
.code-label{font-weight:500}
.copy-btn{background:#3b82f6;color:#fff;border:none;padding:6px 14px;border-radius:5px;cursor:pointer;font-size:13px;transition:background .2s ease;font-family:Arial,sans-serif}
.copy-btn:hover{background:#2563eb}
.copy-btn.copied{background:#10b981}
.code-block{background:#f8f9fa;border:1px solid #e0e0e0;border-radius:0 0 8px 8px;padding:18px 20px;margin:0;overflow-x:auto;font-family:&#39;Courier New&#39;,Courier,monospace;font-size:14px;line-height:1.7;white-space:pre;tab-size:4}
code{background:#f8f9fa;padding:2px 6px;border-radius:3px;font-family:&#39;Courier New&#39;,monospace;font-size:14px;color:#d93025}

/* INFO / INCIDENT BOXES */
.info-box{background:#fffbeb;border-left:4px solid #f59e0b;padding:18px 22px;border-radius:0 8px 8px 0;margin:25px 0}
.info-box strong{color:#92400e}
.incident-box{background:#fef2f2;border-left:4px solid #ef4444;padding:18px 22px;border-radius:0 8px 8px 0;margin:25px 0}
.incident-box strong{color:#991b1b}
.success-box{background:#f0fdf4;border-left:4px solid #22c55e;padding:18px 22px;border-radius:0 8px 8px 0;margin:25px 0}
.success-box strong{color:#15803d}

/* FIGURE */
.figure-wrap{margin:30px 0;border:1px solid #e0e0e0;border-radius:8px;overflow:hidden;box-shadow:0 2px 8px rgba(0,0,0,.07)}
.figure-wrap img{width:100%;height:auto;display:block}
.figure-caption-bar{background:#f8f9fa;border-top:1px solid #e0e0e0;padding:12px 18px}
.figure-caption-bar .fig-label{font-weight:700;color:#1f2937;font-size:14px}
.figure-caption-bar .fig-desc{color:#6b7280;font-size:13px;margin-top:3px}

/* TABLES */
table{width:100%;border-collapse:collapse;margin:25px 0;background:#fff;border:1px solid #e0e0e0}
thead{background:#f8f9fa}
th{padding:12px;text-align:left;font-weight:bold;color:#000;border-bottom:2px solid #e0e0e0;font-size:15px}
td{padding:12px;border-bottom:1px solid #e0e0e0;color:#333;font-size:15px}
tr:last-child td{border-bottom:none}
tbody tr:hover{background:#f9fafb}

/* CHECKLIST */
.checklist{background:#f8fafc;border:1px solid #e2e8f0;border-radius:8px;padding:24px 28px;margin:18px 0}
.checklist h3{margin-top:0;color:#1e293b;font-size:18px}
.checklist ul{list-style:none;margin-left:0}
.checklist ul li{padding:6px 0 6px 28px;position:relative}
.checklist ul li::before{content:&quot;&quot;;position:absolute;left:4px;top:13px;width:10px;height:10px;background:#0f9d58;border-radius:50%}

/* FAQ */
.faq-item{margin:25px 0;border-bottom:1px solid #e5e7eb;padding-bottom:25px}
.faq-item:last-child{border-bottom:none}
.faq-question{font-weight:600;color:#000;font-size:17px;margin-bottom:10px}
.faq-answer{color:#333;line-height:1.7}

/* RELATED */
.related-reading{background:#f8f9fa;border:1px solid #e0e0e0;border-radius:8px;padding:30px;margin:40px 0}
.related-reading h2{margin-top:0}
.related-reading ul{margin-left:25px}
.related-reading li{margin:18px 0;line-height:1.7}
.related-reading .why-matters{color:#666;font-size:15px;margin-top:5px;display:block}

/* AUTHOR */
.about-author{background:#fffbf0;border:1px solid #e0e0e0;border-radius:8px;padding:30px;margin:40px 0}
.about-author h2{margin-top:0;font-size:28px}
.author-name{font-size:20px;font-weight:bold;color:#000;margin-bottom:10px}
.author-bio{color:#333;line-height:1.7;margin-bottom:15px}
.social-links{margin-top:20px}
.social-links a{display:inline-block;margin-right:20px;color:#1a73e8;text-decoration:none;font-size:16px}
.social-links a:hover{text-decoration:underline}

/* FOOTER */
.post-footer{border-top:1px solid #e0e0e0;padding-top:25px;margin-top:40px;color:#666;font-size:15px}
.post-meta{margin-bottom:15px}
.share-buttons{margin:20px 0}
.share-buttons a{display:inline-block;margin-right:15px;color:#1a73e8;font-size:14px}
.tags{margin-top:20px}
.tags strong{color:#666;font-weight:normal}
.tags a{color:#1a73e8;margin-right:10px;font-size:14px}

@media(max-width:768px){
  .hero-header{padding:40px 24px}
  .hero-header h1{font-size:28px}
  .hero-subtitle{font-size:16px}
  .hero-meta{gap:20px}
  h2{font-size:24px}
  h3{font-size:20px}
  table{font-size:13px}
  th,td{padding:9px}
  .code-block{font-size:12px}
}
&lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;

&lt;!-- HERO HEADER --&gt;
&lt;div class=&quot;hero-header&quot;&gt;
  &lt;div class=&quot;hero-header-content&quot;&gt;
    &lt;h1&gt;Oracle Data Guard Protection Modes: Zero Data Loss Design Strategy&lt;/h1&gt;
    &lt;div class=&quot;hero-subtitle&quot;&gt;Production HA/DR Architecture for DBAs and Architects&lt;/div&gt;
    &lt;div class=&quot;hero-meta&quot;&gt;
      &lt;div class=&quot;hero-meta-item&quot;&gt;12 March 2026&lt;/div&gt;
      &lt;div class=&quot;hero-meta-item&quot;&gt;  Chetan Yadav — Senior Oracle &amp;amp; Cloud DBA&lt;/div&gt;
      &lt;div class=&quot;hero-meta-item&quot;&gt;⏱️ 12–13 min read&lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;div class=&quot;main-content-wrapper&quot;&gt;
&lt;div class=&quot;container&quot;&gt;

&lt;div class=&quot;reading-time-badge&quot;&gt;⏱️ Estimated Reading Time: 12–13 minutes&lt;/div&gt;
&lt;div class=&quot;page-tagline&quot;&gt;Maximum Protection • Maximum Availability • Maximum Performance — Choose Wisely&lt;/div&gt;

&lt;!-- HERO DIAGRAM --&gt;
&lt;div class=&quot;hero-image-section&quot;&gt;
  &lt;img alt=&quot;Oracle Data Guard Protection Modes architecture diagram showing Primary, Standby, GCS, GES, redo transport and RPO RTO comparison&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEj24v262cDBkFKpJ_2VDBlcn_FN2clWb8pyj4EB8JGeT3X7rLToxzpbVv6TeXILslfMWWcRDfq9ZFmSgS52LwoZadJ22mj81N5BMkRnJz153CRkzILunHn-g5d6q4fI084gT4n_1ZS6qEBENRTzm9vtPuh9r-mhIqleCIpEWU5svX_vPIyvnEjjMKRiGsY&quot; /&gt;
&lt;/div&gt;

&lt;!-- ENV BOX --&gt;
&lt;div class=&quot;info-box&quot; style=&quot;margin-top: 28px;&quot;&gt;
  &lt;strong&gt;⚙️ Production Environment Referenced in This Article&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;
  &lt;strong&gt;Oracle Database:&lt;/strong&gt; 19.18.0.0.0 &amp;amp; 23ai Enterprise Edition &amp;nbsp;•&amp;nbsp;
  &lt;strong&gt;Data Guard Broker:&lt;/strong&gt; Enabled with Fast-Start Failover&lt;br /&gt;
  &lt;strong&gt;Primary:&lt;/strong&gt; 2-Node RAC, 6 TB OLTP &amp;nbsp;•&amp;nbsp;
  &lt;strong&gt;Standby:&lt;/strong&gt; Physical Standby, separate data center (120 km)&lt;br /&gt;
  &lt;strong&gt;Network:&lt;/strong&gt; Dedicated 10 GbE WAN link &amp;nbsp;•&amp;nbsp;
  &lt;strong&gt;RTO Target:&lt;/strong&gt; &amp;lt; 30 seconds &amp;nbsp;•&amp;nbsp;
  &lt;strong&gt;RPO Target:&lt;/strong&gt; Zero data loss&lt;br /&gt;
  &lt;strong&gt;Application:&lt;/strong&gt; Core banking transaction processing system
&lt;/div&gt;

&lt;p&gt;
  2:14 AM. A storage array at the primary data center suffered a catastrophic controller failure. The entire primary RAC cluster went offline. No warning. No graceful shutdown. Just gone.
&lt;/p&gt;
&lt;p&gt;
  Within 23 seconds, Oracle Data Guard Fast-Start Failover had detected the outage, confirmed quorum with the observer, and automatically activated the physical standby database. The application connection pool reconnected. Transactions resumed. The on-call team received the alert after the failover had already completed.
&lt;/p&gt;
&lt;p&gt;
  That outcome — 23 seconds, zero data loss, no manual intervention — was not luck. It was the result of choosing the right Data Guard protection mode, designing the redo transport correctly, and validating failover under load before the incident happened. Most organizations running Data Guard never validate their failover until disaster strikes. By then it is too late to discover the configuration was wrong.
&lt;/p&gt;
&lt;p&gt;
  This guide explains Oracle Data Guard protection modes in depth: what each mode actually guarantees, how redo transport works under the hood, when to use each mode, and the production design decisions that determine whether your standby database saves you or fails you at the worst possible moment.
&lt;/p&gt;

&lt;!-- READ MORE --&gt;
&lt;div class=&quot;read-more-link&quot;&gt;&lt;a href=&quot;#section1&quot;&gt;Read more »&lt;/a&gt;&lt;/div&gt;

&lt;!-- TOC --&gt;
&lt;div class=&quot;toc&quot;&gt;
  &lt;div class=&quot;toc-header&quot;&gt;&lt;span&gt;&lt;/span&gt; Table of Contents&lt;/div&gt;
  &lt;ol&gt;
    &lt;li&gt;&lt;a href=&quot;#section1&quot;&gt;Data Guard Architecture: How It Actually Works&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#section2&quot;&gt;The Three Protection Modes Explained&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#section3&quot;&gt;Redo Transport Deep Dive: SYNC vs ASYNC&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#section4&quot;&gt;Standby Database Types: Physical vs Logical vs Snapshot&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#section5&quot;&gt;Fast-Start Failover: Automatic DR Activation&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#section6&quot;&gt;Active Data Guard: Read-Only Standby While Applying Redo&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#section7&quot;&gt;Data Guard Broker: Centralized Configuration Management&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#section8&quot;&gt;Real Production Failover: What Actually Happens&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#section9&quot;&gt;Protection Mode Decision Framework&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#section10&quot;&gt;FAQ&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#section11&quot;&gt;Related Reading from Real Production Systems&lt;/a&gt;&lt;/li&gt;
  &lt;/ol&gt;
&lt;/div&gt;

&lt;!-- ═══════════════════════════════════════════════ --&gt;
&lt;h2 id=&quot;section1&quot;&gt;1. Data Guard Architecture: How It Actually Works&lt;/h2&gt;
&lt;p&gt;
  Oracle Data Guard maintains one or more synchronized copies of a primary database called standby databases. When the primary fails, a standby can take over as the new primary — either automatically via Fast-Start Failover or manually via a DBA-initiated failover command.
&lt;/p&gt;
&lt;p&gt;
  The core mechanism is &lt;strong&gt;redo log shipping&lt;/strong&gt;. Every change made to the primary database is recorded in redo logs. Data Guard ships those redo records to the standby in real time, where they are applied to keep the standby synchronized.
&lt;/p&gt;

&lt;h3&gt;Key Data Guard Components&lt;/h3&gt;
&lt;table&gt;
  &lt;thead&gt;&lt;tr&gt;&lt;th&gt;Component&lt;/th&gt;&lt;th&gt;Location&lt;/th&gt;&lt;th&gt;Role&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;&lt;td&gt;&lt;strong&gt;LGWR / DMON&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Primary&lt;/td&gt;&lt;td&gt;Captures redo and initiates shipping to standby&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;&lt;strong&gt;NSA / NSS Process&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Primary&lt;/td&gt;&lt;td&gt;Network Server process — sends redo over the network&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;&lt;strong&gt;RFS Process&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Standby&lt;/td&gt;&lt;td&gt;Remote File Server — receives redo from primary&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;&lt;strong&gt;MRP Process&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Standby&lt;/td&gt;&lt;td&gt;Managed Recovery Process — applies redo to standby&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;&lt;strong&gt;LSP Process&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Standby (logical)&lt;/td&gt;&lt;td&gt;LogMiner Server Process — applies SQL for logical standby&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;&lt;strong&gt;DMON Process&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Both&lt;/td&gt;&lt;td&gt;Data Guard Monitor — manages broker configuration&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;&lt;strong&gt;Observer&lt;/strong&gt;&lt;/td&gt;&lt;td&gt;Third site&lt;/td&gt;&lt;td&gt;Monitors primary for Fast-Start Failover quorum&lt;/td&gt;&lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;div class=&quot;code-container&quot;&gt;
  &lt;div class=&quot;code-header&quot;&gt;
    &lt;span class=&quot;code-label&quot;&gt;SQL — Verify Data Guard Configuration Status&lt;/span&gt;
    &lt;button class=&quot;copy-btn&quot; onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;
  &lt;/div&gt;
  &lt;div class=&quot;code-block&quot;&gt;-- Check Data Guard status on primary
SELECT name,
       db_unique_name,
       database_role,
       protection_mode,
       protection_level,
       switchover_status,
       dataguard_broker
FROM   v$database;

-- Check redo transport status to all standbys
SELECT dest_id,
       dest_name,
       status,
       target,
       archiver,
       schedule,
       destination,
       applied_scn,
       error
FROM   v$archive_dest
WHERE  status != &#39;INACTIVE&#39;
ORDER  BY dest_id;

-- Check standby apply lag
SELECT name,
       value,
       datum_time
FROM   v$dataguard_stats
WHERE  name IN (&#39;transport lag&#39;, &#39;apply lag&#39;, &#39;apply finish time&#39;)
ORDER  BY name;&lt;/div&gt;
&lt;/div&gt;

&lt;!-- ═══════════════════════════════════════════════ --&gt;
&lt;h2 id=&quot;section2&quot;&gt;2. The Three Protection Modes Explained&lt;/h2&gt;
&lt;p&gt;
  Oracle Data Guard offers three protection modes. Each makes a different trade-off between data loss guarantee, performance impact, and availability. Choosing the wrong mode for your workload is one of the most common — and most dangerous — Data Guard mistakes.
&lt;/p&gt;

&lt;h3&gt;&lt;span class=&quot;tag-mode-red&quot;&gt;Maximum Protection&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;
  Every redo record must be written to at least one standby redo log on the standby database before the primary acknowledges the transaction commit. If the standby becomes unreachable, the primary database &lt;strong&gt;shuts itself down&lt;/strong&gt; rather than risk any data divergence.
&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Transport:&lt;/strong&gt; &lt;code&gt;SYNC&lt;/code&gt; — synchronous redo shipping&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Affirm:&lt;/strong&gt; &lt;code&gt;AFFIRM&lt;/code&gt; — standby must confirm disk write&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;RPO:&lt;/strong&gt; Zero — absolutely no data loss under any failure scenario&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;RTO:&lt;/strong&gt; Fast — standby is fully synchronized at all times&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Risk:&lt;/strong&gt; Primary shuts down if standby is unreachable — availability depends on standby health&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Use case:&lt;/strong&gt; Regulatory compliance, core banking, financial settlement systems&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;incident-box&quot;&gt;
  &lt;strong&gt;Production Reality — Maximum Protection:&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;
  A core banking client ran Maximum Protection mode. During a routine standby server reboot for OS patching, the primary database shut itself down — taking the entire production system offline for 18 minutes. The team had forgotten that Maximum Protection means the primary cannot run without the standby. Always maintain a second standby or use Maximum Availability instead for most production workloads.
&lt;/div&gt;

&lt;h3&gt;&lt;span class=&quot;tag-mode-org&quot;&gt;Maximum Availability&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;
  The default recommended mode for most production systems. Like Maximum Protection, it uses synchronous redo shipping. However, if the standby becomes unreachable, the primary automatically falls back to &lt;strong&gt;asynchronous mode&lt;/strong&gt; and continues running. When the standby reconnects, it resynchronizes and the primary returns to synchronous mode automatically.
&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Transport:&lt;/strong&gt; &lt;code&gt;SYNC&lt;/code&gt; — synchronous when standby is available&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Affirm:&lt;/strong&gt; &lt;code&gt;AFFIRM&lt;/code&gt; — confirms disk write on standby&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;RPO:&lt;/strong&gt; Zero under normal conditions; seconds of exposure during fallback&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;RTO:&lt;/strong&gt; Fast — standby synchronized within seconds of primary failure&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Risk:&lt;/strong&gt; Brief data loss window during the fallback period&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Use case:&lt;/strong&gt; Enterprise OLTP, e-commerce, healthcare systems&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;&lt;span class=&quot;tag-mode-blu&quot;&gt;Maximum Performance&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;
  The default mode when Data Guard is first configured. Redo is shipped asynchronously — the primary does not wait for the standby to confirm receipt before acknowledging the commit. This provides the best primary performance but at the cost of a potential data loss window.
&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Transport:&lt;/strong&gt; &lt;code&gt;ASYNC&lt;/code&gt; — asynchronous redo shipping&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Affirm:&lt;/strong&gt; &lt;code&gt;NOAFFIRM&lt;/code&gt; — no standby disk write confirmation required&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;RPO:&lt;/strong&gt; Seconds to minutes depending on network latency and redo volume&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;RTO:&lt;/strong&gt; Fast but standby may lag behind primary&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Risk:&lt;/strong&gt; Data loss equal to the apply lag at time of failure&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Use case:&lt;/strong&gt; Reporting standbys, development/test environments, geographically distant DR sites&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;code-container&quot;&gt;
  &lt;div class=&quot;code-header&quot;&gt;
    &lt;span class=&quot;code-label&quot;&gt;SQL — Change Protection Mode (via Data Guard Broker)&lt;/span&gt;
    &lt;button class=&quot;copy-btn&quot; onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;
  &lt;/div&gt;
  &lt;div class=&quot;code-block&quot;&gt;-- Connect to DGMGRL as SYSDG or SYSDBA
-- dgmgrl sys/password@primary

-- Check current protection mode
SHOW CONFIGURATION;
SHOW DATABASE VERBOSE primary_db;

-- Change to Maximum Availability (recommended for most production)
EDIT CONFIGURATION SET PROTECTION MODE AS MAXAVAILABILITY;

-- Change to Maximum Protection (zero data loss, primary shuts down without standby)
EDIT CONFIGURATION SET PROTECTION MODE AS MAXPROTECTION;

-- Change to Maximum Performance (async, best performance)
EDIT CONFIGURATION SET PROTECTION MODE AS MAXPERFORMANCE;

-- Verify after change
SHOW CONFIGURATION;&lt;/div&gt;
&lt;/div&gt;

&lt;!-- ═══════════════════════════════════════════════ --&gt;
&lt;h2 id=&quot;section3&quot;&gt;3. Redo Transport Deep Dive: SYNC vs ASYNC&lt;/h2&gt;
&lt;p&gt;
  The protection mode you choose determines the redo transport mechanism. Understanding the difference between SYNC and ASYNC transport is essential for making the right design choice.
&lt;/p&gt;

&lt;h3&gt;Synchronous Transport (SYNC)&lt;/h3&gt;
&lt;p&gt;
  With synchronous transport, the primary database Log Writer (LGWR) process sends the redo record to the standby &lt;em&gt;at the same time&lt;/em&gt; it writes to the local online redo log. The commit does not complete until both the local write and the standby acknowledgment have been received. This introduces latency equal to the round-trip time between primary and standby.
&lt;/p&gt;

&lt;div class=&quot;info-box&quot;&gt;
  &lt;strong&gt;Network Latency Rule for SYNC Transport&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;
  For synchronous redo transport, the round-trip network latency between primary and standby should be &lt;strong&gt;under 5 ms&lt;/strong&gt; for OLTP workloads. Beyond 5 ms, commit latency becomes noticeable to applications. Beyond 20 ms, SYNC transport typically causes unacceptable performance degradation. In our production environment with a 120 km dark fiber link, round-trip latency is 1.8 ms — well within acceptable range for Maximum Availability mode.
&lt;/div&gt;

&lt;h3&gt;Asynchronous Transport (ASYNC)&lt;/h3&gt;
&lt;p&gt;
  With asynchronous transport, the primary LGWR writes to the local redo log and acknowledges the commit immediately. A separate background process (NSA — Network Server Async) ships redo to the standby independently. The standby typically lags behind the primary by the amount of redo generated during the network transfer time.
&lt;/p&gt;

&lt;div class=&quot;code-container&quot;&gt;
  &lt;div class=&quot;code-header&quot;&gt;
    &lt;span class=&quot;code-label&quot;&gt;SQL — Configure Redo Transport (LOG_ARCHIVE_DEST)&lt;/span&gt;
    &lt;button class=&quot;copy-btn&quot; onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;
  &lt;/div&gt;
  &lt;div class=&quot;code-block&quot;&gt;-- Maximum Availability: SYNC transport with AFFIRM
ALTER SYSTEM SET log_archive_dest_2 =
    &#39;SERVICE=standby_db
      SYNC
      AFFIRM
      NET_TIMEOUT=30
      VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)
      DB_UNIQUE_NAME=standby_db&#39;
SCOPE=BOTH SID=&#39;*&#39;;

-- Maximum Performance: ASYNC transport with NOAFFIRM
ALTER SYSTEM SET log_archive_dest_2 =
    &#39;SERVICE=standby_db
      ASYNC
      NOAFFIRM
      NET_TIMEOUT=30
      VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)
      DB_UNIQUE_NAME=standby_db&#39;
SCOPE=BOTH SID=&#39;*&#39;;

-- Verify redo transport configuration
SELECT dest_id,
       dest_name,
       target,
       archiver,
       net_timeout,
       affirm,
       async_blocks,
       status
FROM   v$archive_dest
WHERE  dest_id = 2;&lt;/div&gt;
&lt;/div&gt;

&lt;h3&gt;Standby Redo Logs (SRL) — Critical Requirement&lt;/h3&gt;
&lt;p&gt;
  Standby Redo Logs (SRLs) are required for real-time apply and for synchronous transport. They must be the same size as the primary online redo logs and there must be at least one more SRL group per thread than the number of online redo log groups on the primary.
&lt;/p&gt;

&lt;div class=&quot;code-container&quot;&gt;
  &lt;div class=&quot;code-header&quot;&gt;
    &lt;span class=&quot;code-label&quot;&gt;SQL — Add Standby Redo Logs on Standby Database&lt;/span&gt;
    &lt;button class=&quot;copy-btn&quot; onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;
  &lt;/div&gt;
  &lt;div class=&quot;code-block&quot;&gt;-- Check existing online redo log sizes on primary
SELECT group#,
       members,
       bytes/1024/1024  AS size_mb,
       status
FROM   v$log
ORDER  BY group#;

-- Add standby redo logs on standby (same size, one extra group per thread)
-- For a 2-node RAC primary with 3 redo groups per thread:
-- Add 4 SRL groups per thread (3 + 1 = 4)
ALTER DATABASE ADD STANDBY LOGFILE THREAD 1
    GROUP 11 (&#39;+DATA/stdby/srl_t1_g11.log&#39;) SIZE 200M;
ALTER DATABASE ADD STANDBY LOGFILE THREAD 1
    GROUP 12 (&#39;+DATA/stdby/srl_t1_g12.log&#39;) SIZE 200M;
ALTER DATABASE ADD STANDBY LOGFILE THREAD 1
    GROUP 13 (&#39;+DATA/stdby/srl_t1_g13.log&#39;) SIZE 200M;
ALTER DATABASE ADD STANDBY LOGFILE THREAD 1
    GROUP 14 (&#39;+DATA/stdby/srl_t1_g14.log&#39;) SIZE 200M;

-- Verify SRL configuration
SELECT group#,
       thread#,
       sequence#,
       bytes/1024/1024  AS size_mb,
       archived,
       status
FROM   v$standby_log
ORDER  BY thread#, group#;&lt;/div&gt;
&lt;/div&gt;

&lt;!-- ═══════════════════════════════════════════════ --&gt;
&lt;h2 id=&quot;section4&quot;&gt;4. Standby Database Types: Physical vs Logical vs Snapshot&lt;/h2&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;&lt;th&gt;Type&lt;/th&gt;&lt;th&gt;Apply Method&lt;/th&gt;&lt;th&gt;Open for Reads?&lt;/th&gt;&lt;th&gt;Best Use Case&lt;/th&gt;&lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;Physical Standby&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;Block-for-block redo apply (MRP)&lt;/td&gt;
      &lt;td&gt;Yes (Active Data Guard, extra license)&lt;/td&gt;
      &lt;td&gt;Primary DR target, zero data loss&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;Logical Standby&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;SQL Apply via LogMiner (LSP)&lt;/td&gt;
      &lt;td&gt;Yes (read/write, some restrictions)&lt;/td&gt;
      &lt;td&gt;Reporting, DDL testing, heterogeneous environments&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;Snapshot Standby&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;Redo buffered but not applied&lt;/td&gt;
      &lt;td&gt;Yes (full read/write)&lt;/td&gt;
      &lt;td&gt;Testing, QA, patch validation against production data&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;div class=&quot;code-container&quot;&gt;
  &lt;div class=&quot;code-header&quot;&gt;
    &lt;span class=&quot;code-label&quot;&gt;DGMGRL — Convert Physical Standby to Snapshot Standby&lt;/span&gt;
    &lt;button class=&quot;copy-btn&quot; onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;
  &lt;/div&gt;
  &lt;div class=&quot;code-block&quot;&gt;-- Convert to snapshot standby (opens for read/write, buffers redo)
CONVERT DATABASE standby_db TO SNAPSHOT STANDBY;

-- Verify conversion
SHOW DATABASE standby_db;

-- Convert back to physical standby (discards all changes, resumes apply)
CONVERT DATABASE standby_db TO PHYSICAL STANDBY;&lt;/div&gt;
&lt;/div&gt;

&lt;!-- ═══════════════════════════════════════════════ --&gt;
&lt;h2 id=&quot;section5&quot;&gt;5. Fast-Start Failover: Automatic DR Activation&lt;/h2&gt;
&lt;p&gt;
  Fast-Start Failover (FSFO) enables Oracle Data Guard to automatically fail over to the standby database without any DBA intervention when the primary becomes unavailable. This is what enabled the 23-second failover described in the introduction.
&lt;/p&gt;

&lt;h3&gt;FSFO Requirements&lt;/h3&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Data Guard Broker&lt;/strong&gt; must be enabled and configured&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Observer process&lt;/strong&gt; running on a third independent host&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Protection mode&lt;/strong&gt; must be Maximum Availability or Maximum Protection&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Standby Redo Logs&lt;/strong&gt; must be configured on the standby&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Flashback Database&lt;/strong&gt; recommended for reinstating the old primary&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;code-container&quot;&gt;
  &lt;div class=&quot;code-header&quot;&gt;
    &lt;span class=&quot;code-label&quot;&gt;DGMGRL — Configure Fast-Start Failover&lt;/span&gt;
    &lt;button class=&quot;copy-btn&quot; onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;
  &lt;/div&gt;
  &lt;div class=&quot;code-block&quot;&gt;-- Enable Fast-Start Failover
ENABLE FAST_START FAILOVER;

-- Set failover threshold (seconds primary must be unreachable before failover)
EDIT CONFIGURATION SET PROPERTY FastStartFailoverThreshold = 30;

-- Set lag limit (max apply lag allowed when FSFO is enabled)
EDIT CONFIGURATION SET PROPERTY FastStartFailoverLagLimit = 30;

-- Start the observer (run on third independent host)
-- dgmgrl sys/password@primary
START OBSERVER;

-- Verify FSFO configuration
SHOW FAST_START FAILOVER;
SHOW CONFIGURATION VERBOSE;

-- Simulate failover for testing (without data loss)
-- Run from observer host
FAILOVER TO standby_db;&lt;/div&gt;
&lt;/div&gt;

&lt;div class=&quot;success-box&quot;&gt;
  &lt;strong&gt;Production FSFO Design Tip:&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;
  Always run the FSFO observer on a &lt;strong&gt;third independent host&lt;/strong&gt; — not on the primary server and not on the standby server. If both the primary and the observer are on the same network segment and that segment fails, the standby may not receive quorum to activate FSFO. In our production setup, the observer runs on a small VM in a separate availability zone with network access to both primary and standby. Test FSFO every quarter by deliberately shutting down the primary during a low-traffic window.
&lt;/div&gt;

&lt;!-- ═══════════════════════════════════════════════ --&gt;
&lt;h2 id=&quot;section6&quot;&gt;6. Active Data Guard: Read-Only Standby While Applying Redo&lt;/h2&gt;
&lt;p&gt;
  Active Data Guard (ADG) allows the physical standby database to be open in read-only mode while redo apply continues in the background. This means the standby can serve reporting queries, offload read traffic from the primary, and still be ready to fail over at any moment.
&lt;/p&gt;

&lt;div class=&quot;info-box&quot;&gt;
  &lt;strong&gt;Licensing Note&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;
  Active Data Guard requires the &lt;strong&gt;Oracle Active Data Guard option&lt;/strong&gt;, which is a separately licensed Enterprise Edition add-on. A physical standby open in read-only mode &lt;em&gt;without&lt;/em&gt; redo apply is available without ADG license. Real-time redo apply while open read-only requires the ADG license. Always verify licensing before enabling ADG in production.
&lt;/div&gt;

&lt;div class=&quot;code-container&quot;&gt;
  &lt;div class=&quot;code-header&quot;&gt;
    &lt;span class=&quot;code-label&quot;&gt;SQL — Enable Active Data Guard (Real-Time Apply + Read-Only)&lt;/span&gt;
    &lt;button class=&quot;copy-btn&quot; onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;
  &lt;/div&gt;
  &lt;div class=&quot;code-block&quot;&gt;-- On standby database: open read-only with real-time apply
ALTER DATABASE OPEN READ ONLY;
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE
    USING CURRENT LOGFILE DISCONNECT FROM SESSION;

-- Verify ADG status
SELECT open_mode,
       database_role,
       db_unique_name
FROM   v$database;

-- Monitor apply lag on ADG standby
SELECT name,
       value,
       unit,
       time_computed
FROM   v$dataguard_stats
WHERE  name IN (&#39;transport lag&#39;,
                &#39;apply lag&#39;,
                &#39;apply finish time&#39;,
                &#39;estimated startup time&#39;)
ORDER  BY name;

-- Check active sessions using standby for reads
SELECT COUNT(*)         AS read_sessions,
       module,
       action
FROM   gv$session
WHERE  status = &#39;ACTIVE&#39;
AND    type   = &#39;USER&#39;
GROUP  BY module, action
ORDER  BY read_sessions DESC
FETCH FIRST 10 ROWS ONLY;&lt;/div&gt;
&lt;/div&gt;

&lt;!-- ═══════════════════════════════════════════════ --&gt;
&lt;h2 id=&quot;section7&quot;&gt;7. Data Guard Broker: Centralized Configuration Management&lt;/h2&gt;
&lt;p&gt;
  Data Guard Broker provides a unified interface for managing the entire Data Guard configuration. Without Broker, you manage each database individually through &lt;code&gt;LOG_ARCHIVE_DEST&lt;/code&gt; parameters and manual commands. With Broker, you manage the entire configuration through a single &lt;code&gt;DGMGRL&lt;/code&gt; command-line interface.
&lt;/p&gt;

&lt;div class=&quot;code-container&quot;&gt;
  &lt;div class=&quot;code-header&quot;&gt;
    &lt;span class=&quot;code-label&quot;&gt;SQL &amp;amp; DGMGRL — Data Guard Broker Setup and Health Check&lt;/span&gt;
    &lt;button class=&quot;copy-btn&quot; onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;
  &lt;/div&gt;
  &lt;div class=&quot;code-block&quot;&gt;-- Enable Data Guard Broker on both primary and standby
ALTER SYSTEM SET dg_broker_start = TRUE SCOPE=BOTH SID=&#39;*&#39;;

-- Connect to broker (run on primary or standby)
-- dgmgrl /

-- Create broker configuration
CREATE CONFIGURATION dg_config
    AS PRIMARY DATABASE IS primary_db
    CONNECT IDENTIFIER IS primary_db;

-- Add standby database to configuration
ADD DATABASE standby_db
    AS CONNECT IDENTIFIER IS standby_db
    MAINTAINED AS PHYSICAL;

-- Enable the configuration
ENABLE CONFIGURATION;

-- Full health check
SHOW CONFIGURATION;
SHOW DATABASE VERBOSE primary_db;
SHOW DATABASE VERBOSE standby_db;

-- Validate configuration (checks for issues proactively)
VALIDATE DATABASE primary_db;
VALIDATE DATABASE standby_db;&lt;/div&gt;
&lt;/div&gt;

&lt;div class=&quot;code-container&quot;&gt;
  &lt;div class=&quot;code-header&quot;&gt;
    &lt;span class=&quot;code-label&quot;&gt;DGMGRL — Switchover (Planned Role Transition)&lt;/span&gt;
    &lt;button class=&quot;copy-btn&quot; onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;
  &lt;/div&gt;
  &lt;div class=&quot;code-block&quot;&gt;-- Switchover: planned, zero data loss, reversible
-- Use for maintenance, patching, or DR testing

-- Verify configuration is ready for switchover
VALIDATE DATABASE primary_db;
SHOW CONFIGURATION;

-- Initiate switchover to standby
SWITCHOVER TO standby_db;

-- After switchover: verify new primary is active
SHOW CONFIGURATION;
SHOW DATABASE VERBOSE standby_db;   -- now primary
SHOW DATABASE VERBOSE primary_db;   -- now standby

-- Switchover back when maintenance is complete
SWITCHOVER TO primary_db;&lt;/div&gt;
&lt;/div&gt;

&lt;!-- ═══════════════════════════════════════════════ --&gt;
&lt;h2 id=&quot;section8&quot;&gt;8. Real Production Failover: What Actually Happens&lt;/h2&gt;
&lt;p&gt;These are real Data Guard incidents from production environments and the lessons they produced.&lt;/p&gt;

&lt;div class=&quot;incident-box&quot;&gt;
  &lt;strong&gt;Incident 1: Protection Mode Mismatch Caused Silent Data Loss&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;
  A financial services client had Data Guard configured but in Maximum Performance mode (the default). They believed they had zero data loss protection. During a primary storage failure, the standby was 47 seconds behind the primary due to ASYNC transport lag. 47 seconds of financial transactions were permanently lost.&lt;br /&gt;&lt;br /&gt;
  &lt;strong&gt;Lesson:&lt;/strong&gt; Always verify protection mode AND transport mode with &lt;code&gt;SELECT protection_mode, protection_level FROM v$database&lt;/code&gt;. The &lt;code&gt;protection_level&lt;/code&gt; column shows the actual effective mode — it differs from &lt;code&gt;protection_mode&lt;/code&gt; when the standby has fallen back to async.
&lt;/div&gt;

&lt;div class=&quot;incident-box&quot;&gt;
  &lt;strong&gt;Incident 2: Standby Redo Logs Not Configured — Real-Time Apply Silently Disabled&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;
  A team set up Data Guard correctly — or so they thought. Failover testing revealed the standby was 8 hours behind the primary. Investigation showed Standby Redo Logs had never been created. Without SRLs, real-time apply cannot function and the standby only catches up during log archive shipping, leaving a massive gap.&lt;br /&gt;&lt;br /&gt;
  &lt;strong&gt;Lesson:&lt;/strong&gt; Always verify SRLs exist and are active: &lt;code&gt;SELECT * FROM v$standby_log&lt;/code&gt;. If this view is empty, real-time apply is not running.
&lt;/div&gt;

&lt;div class=&quot;success-box&quot;&gt;
  &lt;strong&gt;Success: 23-Second Automatic Failover (The Introduction Story)&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;
  Configuration that made it work: Maximum Availability mode, SYNC/AFFIRM transport on 1.8 ms latency link, Standby Redo Logs sized identically to primary, FSFO enabled with threshold of 15 seconds, observer on independent host, Flashback Database enabled on both primary and standby, and quarterly failover testing under full production load.&lt;br /&gt;&lt;br /&gt;
  &lt;strong&gt;Key lesson:&lt;/strong&gt; Fast-Start Failover only works reliably when every component is validated together under real load — not just configured and assumed to work.
&lt;/div&gt;

&lt;div class=&quot;code-container&quot;&gt;
  &lt;div class=&quot;code-header&quot;&gt;
    &lt;span class=&quot;code-label&quot;&gt;SQL — Data Guard Health Check Queries&lt;/span&gt;
    &lt;button class=&quot;copy-btn&quot; onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;
  &lt;/div&gt;
  &lt;div class=&quot;code-block&quot;&gt;-- 1. Verify effective protection mode (must match intended mode)
SELECT name,
       db_unique_name,
       database_role,
       protection_mode,    -- configured mode
       protection_level    -- actual effective mode (may differ)
FROM   v$database;

-- 2. Check transport lag and apply lag
SELECT name,
       value,
       datum_time
FROM   v$dataguard_stats
WHERE  name IN (&#39;transport lag&#39;, &#39;apply lag&#39;)
ORDER  BY name;

-- 3. Verify standby redo logs exist and are active
SELECT group#,
       thread#,
       sequence#,
       bytes/1024/1024  AS size_mb,
       archived,
       status
FROM   v$standby_log
ORDER  BY thread#, group#;

-- 4. Check MRP (apply) process is running on standby
SELECT process,
       status,
       thread#,
       sequence#,
       block#,
       blocks
FROM   v$managed_standby
WHERE  process LIKE &#39;MRP%&#39;
OR     process LIKE &#39;RFS%&#39;
ORDER  BY process;&lt;/div&gt;
&lt;/div&gt;

&lt;!-- ═══════════════════════════════════════════════ --&gt;
&lt;h2 id=&quot;section9&quot;&gt;9. Protection Mode Decision Framework&lt;/h2&gt;
&lt;p&gt;Use this framework to choose the right protection mode for your workload.&lt;/p&gt;

&lt;div class=&quot;checklist&quot;&gt;
  &lt;h3&gt;Choose Maximum Protection if ALL of these are true:&lt;/h3&gt;
  &lt;ul&gt;
    &lt;li&gt;Regulatory zero data loss is a hard legal requirement (banking, finance, government)&lt;/li&gt;
    &lt;li&gt;You have a second standby or can tolerate primary shutdown if standby fails&lt;/li&gt;
    &lt;li&gt;Network latency between primary and standby is under 2 ms&lt;/li&gt;
    &lt;li&gt;Your application can tolerate slightly higher commit latency&lt;/li&gt;
  &lt;/ul&gt;
&lt;/div&gt;

&lt;div class=&quot;checklist&quot;&gt;
  &lt;h3&gt;Choose Maximum Availability if ANY of these are true:&lt;/h3&gt;
  &lt;ul&gt;
    &lt;li&gt;You need near-zero data loss but cannot accept primary shutdown risk&lt;/li&gt;
    &lt;li&gt;Network latency is under 5 ms and workload is standard OLTP&lt;/li&gt;
    &lt;li&gt;You want Fast-Start Failover with automatic activation&lt;/li&gt;
    &lt;li&gt;This is your primary DR configuration for an enterprise system&lt;/li&gt;
  &lt;/ul&gt;
&lt;/div&gt;

&lt;div class=&quot;checklist&quot;&gt;
  &lt;h3&gt;Choose Maximum Performance if ANY of these are true:&lt;/h3&gt;
  &lt;ul&gt;
    &lt;li&gt;This standby is for reporting or dev/test only — not primary DR&lt;/li&gt;
    &lt;li&gt;The standby is geographically distant (WAN latency &amp;gt; 10 ms)&lt;/li&gt;
    &lt;li&gt;Some data loss is acceptable and primary performance is the priority&lt;/li&gt;
    &lt;li&gt;You are running a second standby in addition to a sync standby&lt;/li&gt;
  &lt;/ul&gt;
&lt;/div&gt;

&lt;!-- ═══════════════════════════════════════════════ --&gt;
&lt;h2 id=&quot;section10&quot;&gt;10. FAQ&lt;/h2&gt;

&lt;div class=&quot;faq-item&quot;&gt;
  &lt;div class=&quot;faq-question&quot;&gt;What is the difference between Switchover and Failover?&lt;/div&gt;
  &lt;div class=&quot;faq-answer&quot;&gt;
    &lt;strong&gt;Switchover&lt;/strong&gt; is a planned, graceful role transition. Both primary and standby participate cooperatively. There is zero data loss and the operation is fully reversible. Use switchover for planned maintenance, patching, or DR testing.&lt;br /&gt;&lt;br /&gt;
    &lt;strong&gt;Failover&lt;/strong&gt; is an unplanned activation of the standby when the primary is unavailable. Data loss depends on the protection mode in effect at the time. The old primary must be reinstated (using Flashback Database) before it can rejoin as a standby. Fast-Start Failover automates this process.
  &lt;/div&gt;
&lt;/div&gt;

&lt;div class=&quot;faq-item&quot;&gt;
  &lt;div class=&quot;faq-question&quot;&gt;Does Data Guard protect against logical corruption?&lt;/div&gt;
  &lt;div class=&quot;faq-answer&quot;&gt;
    No. Data Guard replicates every redo record including those caused by user errors like accidental &lt;code&gt;DROP TABLE&lt;/code&gt; or &lt;code&gt;DELETE&lt;/code&gt; without &lt;code&gt;WHERE&lt;/code&gt;. The corruption is applied to the standby within seconds. For protection against logical corruption, use &lt;strong&gt;Flashback Database&lt;/strong&gt; (which can rewind both primary and standby to a point before the error) or maintain a time-delayed standby using the &lt;code&gt;DELAY&lt;/code&gt; parameter in &lt;code&gt;LOG_ARCHIVE_DEST&lt;/code&gt;.
  &lt;/div&gt;
&lt;/div&gt;

&lt;div class=&quot;faq-item&quot;&gt;
  &lt;div class=&quot;faq-question&quot;&gt;Can Data Guard work with Oracle RAC on the primary?&lt;/div&gt;
  &lt;div class=&quot;faq-answer&quot;&gt;
    Yes. RAC primary with a single-instance physical standby is a very common and fully supported architecture. The standby receives redo from all RAC threads and applies them in order. The standby can also be a RAC database for maximum availability on both sides. This RAC + Data Guard combination is called MAA (Maximum Availability Architecture) — Oracle&#39;s reference architecture for mission-critical systems.
  &lt;/div&gt;
&lt;/div&gt;

&lt;div class=&quot;faq-item&quot;&gt;
  &lt;div class=&quot;faq-question&quot;&gt;How often should I test failover?&lt;/div&gt;
  &lt;div class=&quot;faq-answer&quot;&gt;
    At minimum, &lt;strong&gt;quarterly&lt;/strong&gt; — and ideally monthly for critical systems. Test under realistic load, not during off-peak hours with zero activity. A failover that works at 2 AM with no users connected may fail at 2 PM under full load due to session cleanup issues, long-running transactions, or application reconnection pool exhaustion. Document RTO measurements from every test and track them over time.
  &lt;/div&gt;
&lt;/div&gt;

&lt;div class=&quot;faq-item&quot;&gt;
  &lt;div class=&quot;faq-question&quot;&gt;Should I mention Data Guard on my resume?&lt;/div&gt;
  &lt;div class=&quot;faq-answer&quot;&gt;
    Absolutely — with specifics. Instead of &quot;Oracle Data Guard experience,&quot; write: &lt;em&gt;&quot;Designed and maintained Oracle Data Guard Maximum Availability configuration with Fast-Start Failover for a 6 TB core banking database. Achieved RTO of 23 seconds and RPO of zero through SYNC/AFFIRM transport on dedicated 10 GbE WAN link. Conducted quarterly failover validation under production load.&quot;&lt;/em&gt; Metrics and architecture decisions demonstrate real expertise.
  &lt;/div&gt;
&lt;/div&gt;

&lt;!-- RELATED --&gt;
&lt;div class=&quot;related-reading&quot;&gt;
  &lt;h2 id=&quot;section11&quot;&gt;11. Related Reading from Real Production Systems&lt;/h2&gt;
  &lt;p&gt;If you want to deepen your understanding of Oracle high availability and disaster recovery, the following articles from real production experience may also be useful:&lt;/p&gt;
  &lt;ul&gt;
    &lt;li&gt;
      &lt;a href=&quot;#&quot;&gt;Oracle RAC Internals Explained: Cache Fusion and Cluster Design Lessons&lt;/a&gt;
      &lt;span class=&quot;why-matters&quot;&gt;Why it matters: Combining RAC (local HA) with Data Guard (DR) is Oracle&#39;s Maximum Availability Architecture. Understanding RAC internals helps design the complete HA/DR stack.&lt;/span&gt;
    &lt;/li&gt;
    &lt;li&gt;
      &lt;a href=&quot;#&quot;&gt;Oracle Performance Engineering Guide: AWR, ASH and SQL Monitor in 19c and 23ai&lt;/a&gt;
      &lt;span class=&quot;why-matters&quot;&gt;Why it matters: After a Data Guard failover, AWR and ASH are essential for validating the new primary is performing correctly and identifying any workload issues on the activated standby.&lt;/span&gt;
    &lt;/li&gt;
    &lt;li&gt;
      &lt;a href=&quot;https://chetanyadavds.blogspot.com/2026/01/oracle-database-23ai-revolutionizing.html&quot; target=&quot;_blank&quot;&gt;Oracle Database 23ai: Revolutionizing Data Distribution Across the Globe&lt;/a&gt;
      &lt;span class=&quot;why-matters&quot;&gt;Why it matters: Oracle 23ai introduces enhancements to Data Guard including improved FSFO response times and new Availability group features relevant to globally distributed HA architectures.&lt;/span&gt;
    &lt;/li&gt;
    &lt;li&gt;
      &lt;a href=&quot;https://chetanyadavds.blogspot.com/2026/01/n8n-oracle-telegram-alerts.html&quot; target=&quot;_blank&quot;&gt;N8N Oracle Telegram Alerts: Automating Database Monitoring&lt;/a&gt;
      &lt;span class=&quot;why-matters&quot;&gt;Why it matters: Data Guard environments require monitoring of transport lag, apply lag, and FSFO observer status across multiple sites. This guide shows how to automate real-time alerting.&lt;/span&gt;
    &lt;/li&gt;
    &lt;li&gt;
      &lt;a href=&quot;#&quot;&gt;Automating Backup and Restore in Oracle 19c and 23ai: Complete DBA Guide&lt;/a&gt;
      &lt;span class=&quot;why-matters&quot;&gt;Why it matters: RMAN backup strategy changes significantly in a Data Guard environment. Understanding offloaded backups from the standby and cross-site recovery is critical for complete DR planning.&lt;/span&gt;
    &lt;/li&gt;
  &lt;/ul&gt;
&lt;/div&gt;

&lt;!-- AUTHOR --&gt;
&lt;div class=&quot;about-author&quot;&gt;
  &lt;h2&gt;About the Author&lt;/h2&gt;
  &lt;div class=&quot;author-name&quot;&gt;Chetan Yadav&lt;/div&gt;
  &lt;p class=&quot;author-bio&quot;&gt;
    &lt;strong&gt;Chetan Yadav&lt;/strong&gt; is a &lt;strong&gt;Senior Oracle, PostgreSQL, MySQL, and Cloud DBA&lt;/strong&gt; with &lt;strong&gt;15+ years&lt;/strong&gt; of hands-on experience managing production databases across on-premises, hybrid, and cloud environments. He specializes in high availability architecture, performance tuning, disaster recovery, and database migrations.
  &lt;/p&gt;
  &lt;p class=&quot;author-bio&quot;&gt;
    Throughout his career, Chetan has designed and implemented Oracle Data Guard configurations for mission-critical systems in finance, healthcare, and e-commerce sectors. He has architected zero data loss DR solutions with sub-30-second RTO targets and validated them through real failover testing under production load.
  &lt;/p&gt;
  &lt;p class=&quot;author-bio&quot;&gt;
    This blog focuses on &lt;strong&gt;real-world DBA problems, career growth, and practical learning&lt;/strong&gt; — not theoretical documentation or vendor marketing.
  &lt;/p&gt;
  &lt;div class=&quot;social-links&quot;&gt;
    &lt;a href=&quot;https://www.linkedin.com/in/chetanyadavvds/&quot; target=&quot;_blank&quot;&gt;LinkedIn&lt;/a&gt;
    &lt;a href=&quot;https://www.youtube.com/@levelup_careers&quot; target=&quot;_blank&quot;&gt;YouTube&lt;/a&gt;
    &lt;a href=&quot;https://www.instagram.com/levelup_careers/&quot; target=&quot;_blank&quot;&gt;Instagram&lt;/a&gt;
    &lt;a href=&quot;https://x.com/home&quot; target=&quot;_blank&quot;&gt;Twitter (X)&lt;/a&gt;
    &lt;a href=&quot;https://www.facebook.com/oracledbainfo/&quot; target=&quot;_blank&quot;&gt;Facebook&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;Newsletter&lt;/a&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;!-- POST FOOTER --&gt;
&lt;div class=&quot;post-footer&quot;&gt;
  &lt;div class=&quot;post-meta&quot;&gt;&lt;strong&gt;by Chetan Yadav&lt;/strong&gt; • March 2026&lt;/div&gt;
  &lt;div class=&quot;share-buttons&quot;&gt;
    &lt;strong&gt;Share:&lt;/strong&gt;
    &lt;a href=&quot;#&quot;&gt;Email&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;BlogThis&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;X&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;Facebook&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;Pinterest&lt;/a&gt;
  &lt;/div&gt;
  &lt;div class=&quot;tags&quot;&gt;
    &lt;strong&gt;Tags:&lt;/strong&gt;
    &lt;a href=&quot;#&quot;&gt;Oracle Data Guard&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;Zero Data Loss&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;Maximum Availability&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;HA/DR&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;Fast-Start Failover&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;Active Data Guard&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;Oracle 19c&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;Oracle 23ai&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;DBA Architecture&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;Protection Modes&lt;/a&gt;
  &lt;/div&gt;
&lt;/div&gt;

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

&lt;script&gt;
function copyCode(button) {
  const codeContainer = button.closest(&#39;.code-container&#39;);
  const codeBlock = codeContainer.querySelector(&#39;.code-block&#39;);
  const textArea = document.createElement(&#39;textarea&#39;);
  textArea.value = codeBlock.textContent;
  textArea.style.position = &#39;fixed&#39;;
  textArea.style.left = &#39;-9999px&#39;;
  document.body.appendChild(textArea);
  textArea.select();
  textArea.setSelectionRange(0, 99999);
  try {
    document.execCommand(&#39;copy&#39;);
    button.textContent = &#39;Copied!&#39;;
    button.classList.add(&#39;copied&#39;);
    setTimeout(() =&gt; { button.textContent = &#39;Copy&#39;; button.classList.remove(&#39;copied&#39;); }, 2000);
  } catch(err) {
    button.textContent = &#39;Failed&#39;;
    setTimeout(() =&gt; { button.textContent = &#39;Copy&#39;; }, 2000);
  }
  document.body.removeChild(textArea);
}
&lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;</content><link rel='replies' type='application/atom+xml' href='http://chetanyadavds.blogspot.com/feeds/5431056375108447013/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://chetanyadavds.blogspot.com/2026/03/oracle-data-guard-protection-modes-zero-data-loss.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/436196721812840248/posts/default/5431056375108447013'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/436196721812840248/posts/default/5431056375108447013'/><link rel='alternate' type='text/html' href='http://chetanyadavds.blogspot.com/2026/03/oracle-data-guard-protection-modes-zero-data-loss.html' title='Oracle Data Guard Protection Modes: Zero Data Loss Design Strategy'/><author><name>Chetan Yadav</name><uri>http://www.blogger.com/profile/02557500437758632199</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiE0TgifWM4l1b3sy_cK2y41bpqyfY1U25-p5IBKkSg8pJLFRvjYr_kF7W_MgsYdc21DutWF9H6qlShQDQspQLbZEQ5CSUA51Wp6Mh9l5Ygd4NPSuQyqwSMrKitCWwSLr0oHBg9TGjxAvAM7TTkkehHLL1MFWg0wSb31CxywQxIokg9pg/s1600/IMG-20251013-WA0038.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/a/AVvXsEj24v262cDBkFKpJ_2VDBlcn_FN2clWb8pyj4EB8JGeT3X7rLToxzpbVv6TeXILslfMWWcRDfq9ZFmSgS52LwoZadJ22mj81N5BMkRnJz153CRkzILunHn-g5d6q4fI084gT4n_1ZS6qEBENRTzm9vtPuh9r-mhIqleCIpEWU5svX_vPIyvnEjjMKRiGsY=s72-c" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-436196721812840248.post-9201268157804705703</id><published>2026-03-09T23:33:00.008+05:30</published><updated>2026-03-10T09:41:21.940+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="Cache Fusion"/><category scheme="http://www.blogger.com/atom/ns#" term="Cluster Architecture"/><category scheme="http://www.blogger.com/atom/ns#" term="Cluster Design"/><category scheme="http://www.blogger.com/atom/ns#" term="GCS GES"/><category scheme="http://www.blogger.com/atom/ns#" term="Global Cache"/><category scheme="http://www.blogger.com/atom/ns#" term="High Availability"/><category scheme="http://www.blogger.com/atom/ns#" term="Interconnect Design"/><category scheme="http://www.blogger.com/atom/ns#" term="Oracle Clustering"/><category scheme="http://www.blogger.com/atom/ns#" term="Oracle DBA"/><category scheme="http://www.blogger.com/atom/ns#" term="Oracle RAC"/><category scheme="http://www.blogger.com/atom/ns#" term="RAC Internals"/><category scheme="http://www.blogger.com/atom/ns#" term="RAC Performance"/><category scheme="http://www.blogger.com/atom/ns#" term="Split Brain"/><title type='text'>Oracle RAC Internals Explained: Cache Fusion and Cluster Design Lessons</title><content type='html'>
&lt;html lang=&quot;en&quot;&gt;
&lt;head&gt;
&lt;meta charset=&quot;UTF-8&quot;&gt;&lt;/meta&gt;
&lt;title&gt;Oracle RAC Internals Explained: Cache Fusion and Cluster Design Lessons&lt;/title&gt;
&lt;meta content=&quot;width=device-width, initial-scale=1.0&quot; name=&quot;viewport&quot;&gt;&lt;/meta&gt;
&lt;meta content=&quot;Oracle RAC internals deep dive: Cache Fusion architecture, cluster interconnect design, split-brain prevention, and real production failure lessons for Oracle DBAs.&quot; name=&quot;description&quot;&gt;&lt;/meta&gt;
&lt;link href=&quot;data:image/svg+xml,%3Csvg xmlns=&#39;http://www.w3.org/2000/svg&#39; viewBox=&#39;0 0 100 100&#39;%3E%3Cdefs%3E%3ClinearGradient id=&#39;oracleGrad&#39; x1=&#39;0%25&#39; y1=&#39;0%25&#39; x2=&#39;100%25&#39; y2=&#39;100%25&#39;%3E%3Cstop offset=&#39;0%25&#39; style=&#39;stop-color:%23d93025;stop-opacity:1&#39;/%3E%3Cstop offset=&#39;100%25&#39; style=&#39;stop-color:%23a82318;stop-opacity:1&#39;/%3E%3C/linearGradient%3E%3C/defs%3E%3Crect width=&#39;100&#39; height=&#39;100&#39; rx=&#39;20&#39; fill=&#39;url(%23oracleGrad)&#39;/%3E%3Cpath d=&#39;M20,30 L35,30 L35,70 L20,70 Z M40,40 L55,40 L55,70 L40,70 Z M60,25 L75,25 L75,70 L60,70 Z&#39; fill=&#39;white&#39; opacity=&#39;0.9&#39;/%3E%3Cpath d=&#39;M25,75 L50,85 L75,75&#39; stroke=&#39;white&#39; stroke-width=&#39;2.5&#39; fill=&#39;none&#39; opacity=&#39;0.9&#39;/%3E%3Ccircle cx=&#39;50&#39; cy=&#39;88&#39; r=&#39;3&#39; fill=&#39;%234285F4&#39; opacity=&#39;0.95&#39;/%3E%3C/svg%3E&quot; rel=&quot;icon&quot; type=&quot;image/svg+xml&quot;&gt;&lt;/link&gt;
&lt;style&gt;
* { margin: 0; padding: 0; box-sizing: border-box; }
body { background: #ffffff; color: #333333; font-family: Arial, Helvetica, sans-serif; font-size: 16px; line-height: 1.7; }

/* HERO */
.hero-header { background: linear-gradient(135deg, #1e3a5f 0%, #2c5282 50%, #1a365d 100%); color: #ffffff; padding: 60px 40px; width: 100%; }
.hero-header-content { max-width: 1200px; margin: 0 auto; padding: 0 20px; }
.hero-header h1 { font-size: 42px; font-weight: 700; color: #ffffff; line-height: 1.3; margin-bottom: 20px; }
.hero-subtitle { font-size: 20px; font-weight: 300; color: #e2e8f0; opacity: 0.95; margin-bottom: 30px; }
.hero-meta { display: flex; gap: 30px; align-items: center; flex-wrap: wrap; font-size: 15px; color: #cbd5e1; }
.hero-meta-item { display: flex; align-items: center; gap: 8px; }

/* HERO IMAGE */
.hero-image-section { width: 100%; margin: 0; padding: 0; overflow: hidden; }
.hero-image-section img { width: 100%; height: auto; display: block; max-height: 680px; object-fit: contain; padding: 20px 0; object-position: center center; background: #ffffff; }

/* MAIN */
.main-content-wrapper { width: 100%; background: #ffffff; }
.container { max-width: 800px; margin: 0 auto; padding: 30px 20px; background: #ffffff; }

/* BADGE */
.reading-time-badge { display: inline-block; background: linear-gradient(135deg, #ef4444 0%, #dc2626 100%); color: #ffffff; padding: 12px 28px; border-radius: 50px; font-size: 15px; font-weight: 500; margin-bottom: 30px; box-shadow: 0 4px 12px rgba(239,68,68,0.3); }
.page-tagline { color: #666666; font-size: 15px; font-style: italic; text-align: center; margin-bottom: 35px; }

/* READ MORE */
.read-more-link { display: block; margin: 28px 0 8px 0; }
.read-more-link a { color: #1a73e8; font-size: 15px; text-decoration: none; font-style: italic; }
.read-more-link a:hover { text-decoration: underline; }

/* TOC */
.toc { background: #f8fafc; border-left: 4px solid #ef4444; padding: 28px 32px; margin: 35px 0; border-radius: 8px; box-shadow: 0 1px 3px rgba(0,0,0,0.05); }
.toc-header { display: flex; align-items: center; gap: 10px; font-size: 24px; font-weight: bold; color: #000000; margin-bottom: 20px; }
.toc ol { margin-left: 20px; line-height: 1.9; counter-reset: toc-counter; list-style: none; }
.toc ol li { counter-increment: toc-counter; margin: 12px 0; font-size: 16px; padding-bottom: 12px; border-bottom: 1px solid #e5e7eb; transition: all 0.2s ease; }
.toc ol li:last-child { border-bottom: none; }
.toc ol li:hover { padding-left: 8px; }
.toc ol li::before { content: counter(toc-counter) &quot;. &quot;; font-weight: 600; color: #6b7280; margin-right: 8px; }
.toc a { color: #1a73e8; text-decoration: none; }
.toc a:hover { text-decoration: underline; }

/* HEADINGS */
h2 { font-size: 28px; font-weight: bold; color: #000000; margin: 45px 0 20px 0; line-height: 1.3; }
h3 { font-size: 22px; font-weight: 600; color: #333333; margin: 30px 0 15px 0; }

/* TEXT */
p { margin: 16px 0; color: #333333; line-height: 1.7; }
ul, ol { margin: 18px 0 18px 35px; color: #333333; line-height: 1.7; }
ul li, ol li { margin: 10px 0; }
strong { font-weight: bold; color: #333333; }
em { font-style: italic; }
a { color: #1a73e8; text-decoration: none; }
a:hover { text-decoration: underline; }

/* STATUS TAGS */
.tag-good { display: inline-block; background: #e6f4ea; color: #137333; border: 1px solid #a8d5b5; border-radius: 4px; padding: 1px 8px; font-size: 13px; font-weight: 600; margin-right: 6px; vertical-align: middle; }
.tag-bad  { display: inline-block; background: #fce8e6; color: #c5221f; border: 1px solid #f5a8a4; border-radius: 4px; padding: 1px 8px; font-size: 13px; font-weight: 600; margin-right: 6px; vertical-align: middle; }

/* CODE BLOCKS */
.code-container { position: relative; margin: 24px 0; }
.code-header { background: #1f2937; color: #ffffff; padding: 10px 16px; border-radius: 8px 8px 0 0; display: flex; justify-content: space-between; align-items: center; font-size: 14px; }
.code-label { font-weight: 500; }
.copy-btn { background: #3b82f6; color: #ffffff; border: none; padding: 6px 14px; border-radius: 5px; cursor: pointer; font-size: 13px; transition: background 0.2s ease; font-family: Arial, sans-serif; }
.copy-btn:hover { background: #2563eb; }
.copy-btn.copied { background: #10b981; }
.code-block {
  background: #f8f9fa;
  border: 1px solid #e0e0e0;
  border-radius: 0 0 8px 8px;
  padding: 18px 20px;
  margin: 0;
  overflow-x: auto;
  font-family: &#39;Courier New&#39;, Courier, monospace;
  font-size: 14px;
  line-height: 1.7;
  white-space: pre;
  tab-size: 4;
}
code { background: #f8f9fa; padding: 2px 6px; border-radius: 3px; font-family: &#39;Courier New&#39;, monospace; font-size: 14px; color: #d93025; }

/* INFO BOX */
.info-box { background: #fffbeb; border-left: 4px solid #f59e0b; padding: 18px 22px; border-radius: 0 8px 8px 0; margin: 25px 0; }
.info-box strong { color: #92400e; }

/* INCIDENT BOX */
.incident-box { background: #fef2f2; border-left: 4px solid #ef4444; padding: 18px 22px; border-radius: 0 8px 8px 0; margin: 25px 0; }
.incident-box strong { color: #991b1b; }

/* TABLES */
table { width: 100%; border-collapse: collapse; margin: 25px 0; background: #ffffff; border: 1px solid #e0e0e0; }
thead { background: #f8f9fa; }
th { padding: 12px; text-align: left; font-weight: bold; color: #000000; border-bottom: 2px solid #e0e0e0; font-size: 15px; }
td { padding: 12px; border-bottom: 1px solid #e0e0e0; color: #333333; font-size: 15px; }
tr:last-child td { border-bottom: none; }
tbody tr:hover { background: #f9fafb; }

/* CHECKLIST */
.checklist { background: #f8fafc; border: 1px solid #e2e8f0; border-radius: 8px; padding: 24px 28px; margin: 18px 0; }
.checklist h3 { margin-top: 0; color: #1e293b; font-size: 18px; }
.checklist ul { list-style: none; margin-left: 0; }
.checklist ul li { padding: 6px 0 6px 28px; position: relative; }
.checklist ul li::before { content: &quot;&quot;; position: absolute; left: 4px; top: 13px; width: 10px; height: 10px; background: #0f9d58; border-radius: 50%; }

/* FAQ */
.faq-item { margin: 25px 0; border-bottom: 1px solid #e5e7eb; padding-bottom: 25px; }
.faq-item:last-child { border-bottom: none; }
.faq-question { font-weight: 600; color: #000000; font-size: 17px; margin-bottom: 10px; }
.faq-answer { color: #333333; line-height: 1.7; }

/* RELATED READING */
.related-reading { background: #f8f9fa; border: 1px solid #e0e0e0; border-radius: 8px; padding: 30px; margin: 40px 0; }
.related-reading h2 { margin-top: 0; }
.related-reading ul { margin-left: 25px; }
.related-reading li { margin: 18px 0; line-height: 1.7; }
.related-reading .why-matters { color: #666666; font-size: 15px; margin-top: 5px; display: block; }

/* AUTHOR */
.about-author { background: #fffbf0; border: 1px solid #e0e0e0; border-radius: 8px; padding: 30px; margin: 40px 0; }
.about-author h2 { margin-top: 0; font-size: 28px; }
.author-name { font-size: 20px; font-weight: bold; color: #000000; margin-bottom: 10px; }
.author-bio { color: #333333; line-height: 1.7; margin-bottom: 15px; }
.social-links { margin-top: 20px; }
.social-links a { display: inline-block; margin-right: 20px; color: #1a73e8; text-decoration: none; font-size: 16px; }
.social-links a:hover { text-decoration: underline; }

/* POST FOOTER */
.post-footer { border-top: 1px solid #e0e0e0; padding-top: 25px; margin-top: 40px; color: #666666; font-size: 15px; }
.post-meta { margin-bottom: 15px; }
.share-buttons { margin: 20px 0; }
.share-buttons a { display: inline-block; margin-right: 15px; color: #1a73e8; font-size: 14px; }
.tags { margin-top: 20px; }
.tags strong { color: #666666; font-weight: normal; }
.tags a { color: #1a73e8; margin-right: 10px; font-size: 14px; }

@media (max-width: 768px) {
  .hero-header { padding: 40px 24px; }
  .hero-header h1 { font-size: 28px; }
  .hero-subtitle { font-size: 16px; }
  .hero-meta { gap: 20px; }
  h2 { font-size: 24px; }
  h3 { font-size: 20px; }
  table { font-size: 13px; }
  th, td { padding: 9px; }
  .code-block { font-size: 12px; }
}
&lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;

&lt;!-- HERO HEADER --&gt;
&lt;div class=&quot;hero-header&quot;&gt;
  &lt;div class=&quot;hero-header-content&quot;&gt;
    &lt;h1&gt;Oracle RAC Internals Explained: Cache Fusion and Cluster Design Lessons&lt;/h1&gt;
    &lt;div class=&quot;hero-subtitle&quot;&gt;Real Production High Availability Architecture and Clustering Deep Dive&lt;/div&gt;
    &lt;div class=&quot;hero-meta&quot;&gt;
      &lt;div class=&quot;hero-meta-item&quot;&gt; March 09, 2026&lt;/div&gt;
      &lt;div class=&quot;hero-meta-item&quot;&gt; Chetan Yadav — Senior Oracle &amp;amp; Cloud DBA&lt;/div&gt;
      &lt;div class=&quot;hero-meta-item&quot;&gt;⏱️ 12–13 min read&lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;!-- MAIN --&gt;
&lt;div class=&quot;main-content-wrapper&quot;&gt;
&lt;div class=&quot;container&quot;&gt;

&lt;div class=&quot;reading-time-badge&quot;&gt;⏱️ Estimated Reading Time: 12–13 minutes&lt;/div&gt;
&lt;div class=&quot;page-tagline&quot;&gt;Oracle RAC internals: Cache Fusion, Cluster Interconnect, Split-Brain, and Real Production Failures&lt;/div&gt;

&lt;!-- HERO IMAGE — server rack / data center hardware --&gt;
&lt;div class=&quot;hero-image-section&quot;&gt;
  &lt;img alt=&quot;Oracle RAC 4-node cluster architecture diagram showing Cache Fusion, GCS, GES, 10GbE Private Interconnect and Shared ASM Storage&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEgEf2Z8KiRyW4_bPMtKg_njiluxbuSoajYA9Ps3lHSRlmb51J8KJfq3-lTLNg38xXESRKKl5yCv0CJ6U_nrEuFUo3iMdDNRdVF6D3tiyLeFWbV4yL6VOGgo4X_9owWV3EfYBuA2XEt02rEPFtQ44ikKYFHkVZoRIoTN2RUky_YHX9BnAOtkpCrCdwj_SLo&quot; /&gt;
&lt;/div&gt;

&lt;!-- TEST ENVIRONMENT --&gt;
&lt;div class=&quot;info-box&quot; style=&quot;margin-top: 28px;&quot;&gt;
  &lt;strong&gt;⚙️ Test Environment&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;
  &lt;strong&gt;Oracle Database:&lt;/strong&gt; 19.18.0.0.0 Enterprise Edition &amp;nbsp;•&amp;nbsp;
  &lt;strong&gt;Cluster:&lt;/strong&gt; 4-Node Oracle RAC on Oracle Linux 8.7&lt;br /&gt;
  &lt;strong&gt;Storage:&lt;/strong&gt; Oracle ASM, 12 TB shared (Normal Redundancy) &amp;nbsp;•&amp;nbsp;
  &lt;strong&gt;DB Size:&lt;/strong&gt; 8.2 TB (6.8 TB data + 1.4 TB indexes)&lt;br /&gt;
  &lt;strong&gt;Workload:&lt;/strong&gt; Mixed OLTP/Batch &amp;nbsp;•&amp;nbsp;
  &lt;strong&gt;Peak Load:&lt;/strong&gt; 3,200 concurrent sessions, 2,400 TPS&lt;br /&gt;
  &lt;strong&gt;Interconnect:&lt;/strong&gt; Dual 10GbE bonded private network &amp;nbsp;•&amp;nbsp;
  &lt;strong&gt;Application:&lt;/strong&gt; Financial transaction processing system
&lt;/div&gt;

&lt;p&gt;
  3:47 AM. Pager alert: &lt;em&gt;&quot;RAC Node 2 evicted — cluster performance degraded.&quot;&lt;/em&gt; I logged into the surviving node running Oracle Database 19.18.0.0.0. The cluster had automatically failed over, but performance had collapsed. What should have been 2,400 transactions per second was now limping at 900 TPS.
&lt;/p&gt;
&lt;p&gt;
  I checked interconnect statistics immediately. The &lt;code&gt;gc cr block receive time&lt;/code&gt; averaged 247 milliseconds — it should be under 1 millisecond. This wasn&#39;t a failed-node problem; this was network infrastructure failure. The private interconnect switch had undergone a firmware upgrade during the maintenance window. The new firmware version had a packet forwarding bug causing random 200ms+ delays in Cache Fusion block transfers. Applications were technically connected, but every cross-node block request was timing out and retrying. We initiated emergency failover to the DR site while network engineering rolled back the switch firmware.
&lt;/p&gt;
&lt;p&gt;
  Oracle RAC is not just &quot;multiple databases sharing storage.&quot; It&#39;s a distributed cache coherency system where every node maintains its own buffer cache, but all nodes must coordinate which version of each data block is current. Cache Fusion is the mechanism that makes this work — transferring blocks between nodes over the private interconnect instead of forcing disk writes. Understanding this is the difference between an operational RAC cluster and a ticking time bomb.
&lt;/p&gt;
&lt;p&gt;
  This guide covers real Oracle RAC internals: how Cache Fusion actually works, why interconnect design matters more than CPU, what causes split-brain scenarios, and the production lessons learned from managing RAC clusters that can&#39;t afford downtime.
&lt;/p&gt;

&lt;!-- READ MORE --&gt;
&lt;div class=&quot;read-more-link&quot;&gt;&lt;a href=&quot;#section1&quot;&gt;Read more »&lt;/a&gt;&lt;/div&gt;

&lt;!-- TABLE OF CONTENTS --&gt;
&lt;div class=&quot;toc&quot;&gt;
  &lt;div class=&quot;toc-header&quot;&gt;&lt;span&gt;&lt;/span&gt; Table of Contents&lt;/div&gt;
  &lt;ol&gt;
    &lt;li&gt;&lt;a href=&quot;#section1&quot;&gt;RAC Architecture Fundamentals: Beyond the Marketing&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#section2&quot;&gt;Cache Fusion Explained: How Blocks Move Between Nodes&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#section3&quot;&gt;Global Cache Services (GCS) and Global Enqueue Services (GES)&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#section4&quot;&gt;Cluster Interconnect: The Most Critical Component&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#section5&quot;&gt;Split-Brain Scenarios and Voting Disk Protection&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#section6&quot;&gt;RAC Performance Tuning: What Actually Matters&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#section7&quot;&gt;Real Production Failures and Lessons Learned&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#section8&quot;&gt;When RAC Makes Sense (And When It Doesn&#39;t)&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#section9&quot;&gt;FAQ&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#section10&quot;&gt;Related Reading from Real Production Systems&lt;/a&gt;&lt;/li&gt;
  &lt;/ol&gt;
&lt;/div&gt;

&lt;!-- ============================================================ --&gt;
&lt;h2 id=&quot;section1&quot;&gt;1. RAC Architecture Fundamentals: Beyond the Marketing&lt;/h2&gt;
&lt;p&gt;Oracle RAC is sold as &quot;high availability and scalability.&quot; Reality is more nuanced.&lt;/p&gt;

&lt;h3&gt;What RAC Actually Provides&lt;/h3&gt;
&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;&lt;th&gt;Capability&lt;/th&gt;&lt;th&gt;Reality&lt;/th&gt;&lt;th&gt;Common Misconception&lt;/th&gt;&lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;&lt;td&gt;High Availability&lt;/td&gt;&lt;td&gt;Survives single node failure&lt;/td&gt;&lt;td&gt;&quot;Zero downtime&quot; — not true during network failures&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;Scalability&lt;/td&gt;&lt;td&gt;Read scaling works well&lt;/td&gt;&lt;td&gt;&quot;Linear scaling&quot; — write workloads don&#39;t scale linearly&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;Load Balancing&lt;/td&gt;&lt;td&gt;Distributes connections&lt;/td&gt;&lt;td&gt;&quot;Automatic query routing&quot; — application must handle&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;Maintenance&lt;/td&gt;&lt;td&gt;Rolling patches possible&lt;/td&gt;&lt;td&gt;&quot;No downtime patches&quot; — some still require outage&lt;/td&gt;&lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;h3&gt;Core RAC Components&lt;/h3&gt;
&lt;p&gt;Every RAC cluster requires:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Shared Storage:&lt;/strong&gt; ASM or certified cluster filesystem — all nodes access the same datafiles&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Private Interconnect:&lt;/strong&gt; Dedicated network for Cache Fusion messages (1 GB minimum, 10 GB+ recommended)&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Voting Disks:&lt;/strong&gt; Quorum mechanism to prevent split-brain (typically 3 or 5)&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;OCR (Oracle Cluster Registry):&lt;/strong&gt; Cluster configuration database&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Clusterware:&lt;/strong&gt; Grid Infrastructure managing node membership and resources&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;code-container&quot;&gt;
  &lt;div class=&quot;code-header&quot;&gt;
    &lt;span class=&quot;code-label&quot;&gt;SQL — Verify RAC Configuration&lt;/span&gt;
    &lt;button class=&quot;copy-btn&quot; onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;
  &lt;/div&gt;
  &lt;div class=&quot;code-block&quot;&gt;-- Check cluster database status
-- Verify RAC instances
SELECT inst_id,
       instance_name,
       host_name,
       status
FROM   gv$instance
ORDER  BY inst_id;

-- Check cluster interconnect configuration
SELECT inst_id,
       name,
       ip_address
FROM   gv$cluster_interconnects
ORDER  BY inst_id;&lt;/div&gt;
&lt;/div&gt;

&lt;div class=&quot;info-box&quot;&gt;
  &lt;strong&gt;Oracle Licensing Note&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;
  The queries in this article use dynamic performance views (&lt;code&gt;v$&lt;/code&gt; and &lt;code&gt;gv$&lt;/code&gt; views) which are available in all Oracle Database editions without additional licensing. When analyzing historical performance data, AWR and ASH queries require the Oracle Diagnostics Pack license. For unlicensed environments, use Statspack (free) or real-time &lt;code&gt;v$&lt;/code&gt; views as shown above.
&lt;/div&gt;

&lt;h3&gt;Single Instance vs RAC: Architectural Differences&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Single Instance:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;One SGA, one buffer cache&lt;/li&gt;
  &lt;li&gt;No coordination overhead&lt;/li&gt;
  &lt;li&gt;Simple lock management&lt;/li&gt;
  &lt;li&gt;Straightforward troubleshooting&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;RAC Cluster:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Multiple SGAs — one per node&lt;/li&gt;
  &lt;li&gt;Cache Fusion coordination required&lt;/li&gt;
  &lt;li&gt;Global lock management via GES&lt;/li&gt;
  &lt;li&gt;Complex distributed troubleshooting&lt;/li&gt;
&lt;/ul&gt;

&lt;!-- ============================================================ --&gt;
&lt;h2 id=&quot;section2&quot;&gt;2. Cache Fusion Explained: How Blocks Move Between Nodes&lt;/h2&gt;
&lt;p&gt;
  Cache Fusion is Oracle&#39;s distributed shared cache architecture used in Oracle Real Application Clusters (RAC). It was fully introduced with Oracle RAC in Oracle 9i, replacing the disk-based block pinging architecture used in earlier Oracle Parallel Server (OPS) environments.
&lt;/p&gt;
&lt;p&gt;
  Instead of forcing modified blocks to be written to disk before another instance reads them, RAC transfers blocks directly between instance buffer caches over the private interconnect. This memory-to-memory block transfer dramatically reduces latency compared with disk-based synchronization.
&lt;/p&gt;

&lt;h3&gt;The Problem Cache Fusion Solves&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Without Cache Fusion (Oracle Parallel Server 8i architecture):&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
  &lt;li&gt;Node 1 modifies block 1234567 in its buffer cache (8 KB block size)&lt;/li&gt;
  &lt;li&gt;Node 2 requests the same block for a SELECT query&lt;/li&gt;
  &lt;li&gt;Node 1 must write the dirty block to shared storage via LGWR and DBWR&lt;/li&gt;
  &lt;li&gt;Node 2 reads the block from disk via &lt;code&gt;db file sequential read&lt;/code&gt; wait event&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Result:&lt;/strong&gt; Forced disk I/O averaging 8–15 ms latency (ping-pong effect)&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Scalability ceiling:&lt;/strong&gt; 2–3 nodes maximum due to I/O contention&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;&lt;strong&gt;With Cache Fusion (Oracle 19.18.0.0.0 RAC):&lt;/strong&gt;&lt;/p&gt;
&lt;ol&gt;
  &lt;li&gt;Node 1 holds dirty block 1234567 in buffer cache (current mode)&lt;/li&gt;
  &lt;li&gt;Node 2 requests the block via Global Cache Services message&lt;/li&gt;
  &lt;li&gt;GCS coordinates transfer — Node 1 identified as master for this resource&lt;/li&gt;
  &lt;li&gt;Node 1 ships the block directly over the private interconnect (10 GbE)&lt;/li&gt;
  &lt;li&gt;Transfer completes in 0.5–2.0 milliseconds (10x faster than disk)&lt;/li&gt;
  &lt;li&gt;Node 2 receives the block in its buffer cache without disk I/O&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Result:&lt;/strong&gt; Memory-to-memory transfer; disk write deferred until checkpoint&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Scalability:&lt;/strong&gt; Proven deployments up to 16+ nodes in production&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;Cache Fusion Block Transfer Modes&lt;/h3&gt;
&lt;p&gt;
  &lt;strong&gt;Current Mode Block Transfer (&lt;code&gt;gc current&lt;/code&gt;):&lt;/strong&gt; When a session requests the most recent version of a block for UPDATE or DELETE operations, Oracle transfers the current mode block. In our 19.18.0.0.0 production RAC environment with 10 GbE interconnect, current mode transfers average 1.2 ms during peak load. If the block is dirty, the owning instance retains a past image (PI) for instance crash recovery purposes.
&lt;/p&gt;
&lt;p&gt;
  &lt;strong&gt;Consistent Read Mode Block Transfer (&lt;code&gt;gc cr&lt;/code&gt;):&lt;/strong&gt; For SELECT queries requiring read consistency, Oracle may construct consistent read (CR) versions of blocks using undo data. In our testing on Oracle 19.18.0.0.0, CR block transfers show slightly higher latency (1.5–2.0 ms average) because they may require block reconstruction from multiple undo records before transfer. The &lt;code&gt;gc cr block receive time&lt;/code&gt; metric in &lt;code&gt;v$system_event&lt;/code&gt; directly measures this latency.
&lt;/p&gt;

&lt;h3&gt;Cache Fusion Wait Events in Oracle 19.18.0.0.0&lt;/h3&gt;
&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;&lt;th&gt;Wait Event&lt;/th&gt;&lt;th&gt;Description&lt;/th&gt;&lt;th&gt;Typical Latency&lt;/th&gt;&lt;th&gt;Production Impact&lt;/th&gt;&lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code&gt;gc current block 2-way&lt;/code&gt;&lt;/td&gt;
      &lt;td&gt;Current block transfer between 2 instances&lt;/td&gt;
      &lt;td&gt;0.5–2.0 ms (10 GbE)&lt;br /&gt;3–8 ms (1 GbE)&lt;/td&gt;
      &lt;td&gt;Most common; acceptable if under 2 ms average&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code&gt;gc current block 3-way&lt;/code&gt;&lt;/td&gt;
      &lt;td&gt;Block transfer requiring 3-instance coordination&lt;/td&gt;
      &lt;td&gt;1.5–4.0 ms (10 GbE)&lt;/td&gt;
      &lt;td&gt;Higher cost; occurs when block has past images on multiple nodes&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code&gt;gc cr block 2-way&lt;/code&gt;&lt;/td&gt;
      &lt;td&gt;Consistent read block constructed and transferred&lt;/td&gt;
      &lt;td&gt;1.0–2.5 ms&lt;/td&gt;
      &lt;td&gt;Read-heavy workloads; check undo contention if high&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code&gt;gc current block busy&lt;/code&gt;&lt;/td&gt;
      &lt;td&gt;Waiting for in-flight block transfer to complete&lt;/td&gt;
      &lt;td&gt;Variable&lt;/td&gt;
      &lt;td&gt;Hot block contention; redesign needed if persistent&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;code&gt;gc buffer busy acquire&lt;/code&gt;&lt;/td&gt;
      &lt;td&gt;Multiple sessions contending for the same buffer&lt;/td&gt;
      &lt;td&gt;Variable&lt;/td&gt;
      &lt;td&gt;Severe: indicates same block being modified by multiple nodes simultaneously&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;div class=&quot;code-container&quot;&gt;
  &lt;div class=&quot;code-header&quot;&gt;
    &lt;span class=&quot;code-label&quot;&gt;SQL — Calculate Real-Time Cache Fusion Efficiency (Oracle 19c)&lt;/span&gt;
    &lt;button class=&quot;copy-btn&quot; onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;
  &lt;/div&gt;
  &lt;div class=&quot;code-block&quot;&gt;-- Cache Fusion latency analysis per instance
-- Run this during a performance investigation
SELECT inst_id,
       ROUND(
           (SELECT SUM(time_waited_micro)
            FROM   gv$system_event
            WHERE  event    LIKE &#39;gc cr block%way&#39;
            AND    inst_id  = s.inst_id)
           /
           NULLIF(
               (SELECT SUM(total_waits)
                FROM   gv$system_event
                WHERE  event   LIKE &#39;gc cr block%way&#39;
                AND    inst_id = s.inst_id),
           0) / 1000, 2)  AS avg_gc_cr_latency_ms,
       ROUND(
           (SELECT SUM(time_waited_micro)
            FROM   gv$system_event
            WHERE  event   LIKE &#39;gc current block%way&#39;
            AND    inst_id = s.inst_id)
           /
           NULLIF(
               (SELECT SUM(total_waits)
                FROM   gv$system_event
                WHERE  event   LIKE &#39;gc current block%way&#39;
                AND    inst_id = s.inst_id),
           0) / 1000, 2)  AS avg_gc_current_latency_ms
FROM   gv$instance s
ORDER  BY inst_id;&lt;/div&gt;
&lt;/div&gt;

&lt;div class=&quot;code-container&quot;&gt;
  &lt;div class=&quot;code-header&quot;&gt;
    &lt;span class=&quot;code-label&quot;&gt;SQL — Identify Hot Blocks Causing Excessive Cache Fusion Transfers&lt;/span&gt;
    &lt;button class=&quot;copy-btn&quot; onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;
  &lt;/div&gt;
  &lt;div class=&quot;code-block&quot;&gt;-- Identify hot blocks causing excessive transfers
SELECT o.object_name,
       o.object_type,
       c.file#,
       c.block#,
       c.class#,
       c.status,
       COUNT(*)  AS contention_count
FROM   gv$bh       c
JOIN   dba_objects o ON c.objd = o.data_object_id
WHERE  c.status IN (&#39;xcur&#39;, &#39;scur&#39;, &#39;cr&#39;, &#39;read&#39;)
AND    c.forced_reads &amp;gt; 10
GROUP  BY o.object_name,
          o.object_type,
          c.file#,
          c.block#,
          c.class#,
          c.status
HAVING COUNT(*) &amp;gt; 5
ORDER  BY contention_count DESC
FETCH FIRST 20 ROWS ONLY;&lt;/div&gt;
&lt;/div&gt;

&lt;div class=&quot;incident-box&quot;&gt;
  &lt;strong&gt;Real Production Example — Our 19.18 RAC Cluster:&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;
  During peak batch processing at 11 PM, we observed &lt;code&gt;gc current block 2-way&lt;/code&gt; latency spike to 12 ms (baseline 1.2 ms). Analysis revealed the batch job was performing mass updates on a single table with a right-growing index (order_id sequence). All four RAC instances were contending for the rightmost leaf block of the index.&lt;br /&gt;&lt;br /&gt;
  &lt;strong&gt;Solution:&lt;/strong&gt; We partitioned the index by range and implemented four separate sequences with &lt;code&gt;CACHE 1000&lt;/code&gt; and &lt;code&gt;ORDER&lt;/code&gt; settings. Post-change, &lt;code&gt;gc current&lt;/code&gt; latency returned to baseline 1.3 ms and batch completion time reduced from 4.2 hours to 2.8 hours.
&lt;/div&gt;

&lt;div class=&quot;code-container&quot;&gt;
  &lt;div class=&quot;code-header&quot;&gt;
    &lt;span class=&quot;code-label&quot;&gt;SQL — Monitor Cache Fusion Wait Events&lt;/span&gt;
    &lt;button class=&quot;copy-btn&quot; onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;
  &lt;/div&gt;
  &lt;div class=&quot;code-block&quot;&gt;-- Cache Fusion wait events across all instances
SELECT inst_id,
       event,
       total_waits,
       time_waited,
       ROUND(average_wait, 3)  AS avg_wait_ms
FROM   gv$system_event
WHERE  event LIKE &#39;gc%&#39;
AND    total_waits &amp;gt; 0
ORDER  BY time_waited DESC;

-- Interconnect transfer rates per instance
SELECT inst_id,
       name,
       value
FROM   gv$sysstat
WHERE  name IN (
    &#39;gcs messages sent&#39;,
    &#39;ges messages sent&#39;,
    &#39;global cache blocks received&#39;,
    &#39;global cache blocks served&#39;
)
ORDER  BY inst_id, name;&lt;/div&gt;
&lt;/div&gt;

&lt;!-- ============================================================ --&gt;
&lt;h2 id=&quot;section3&quot;&gt;3. Global Cache Services (GCS) and Global Enqueue Services (GES)&lt;/h2&gt;
&lt;p&gt;GCS and GES are the coordination layers that make RAC work.&lt;/p&gt;

&lt;h3&gt;Global Cache Services (GCS)&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Responsibilities:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Tracks which node holds which blocks&lt;/li&gt;
  &lt;li&gt;Maintains block ownership information&lt;/li&gt;
  &lt;li&gt;Coordinates block transfers between nodes&lt;/li&gt;
  &lt;li&gt;Manages cache coherency across the cluster&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;Global Enqueue Services (GES)&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Responsibilities:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Manages global enqueues across the RAC cluster&lt;/li&gt;
  &lt;li&gt;Coordinates locking for shared database resources&lt;/li&gt;
  &lt;li&gt;Ensures consistent lock state across all instances&lt;/li&gt;
  &lt;li&gt;Maintains global enqueue structures for cluster coordination&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;code-container&quot;&gt;
  &lt;div class=&quot;code-header&quot;&gt;
    &lt;span class=&quot;code-label&quot;&gt;SQL — GCS/GES Resource Distribution&lt;/span&gt;
    &lt;button class=&quot;copy-btn&quot; onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;
  &lt;/div&gt;
  &lt;div class=&quot;code-block&quot;&gt;-- Blocked global enqueues across cluster
SELECT inst_id,
       resource_name,
       current_mode,
       blocked
FROM   gv$ges_enqueue
WHERE  blocked = 1;

-- GCS latch statistics per instance
SELECT inst_id,
       name,
       gets,
       misses,
       sleeps
FROM   gv$latch
WHERE  name LIKE &#39;%cache%&#39;
ORDER  BY gets DESC;&lt;/div&gt;
&lt;/div&gt;

&lt;h3&gt;Resource Mastering&lt;/h3&gt;
&lt;p&gt;Each resource (block, lock) has a master node responsible for coordinating access.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Master node responsibilities:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Tracks current owner of the resource&lt;/li&gt;
  &lt;li&gt;Grants access to requesting nodes&lt;/li&gt;
  &lt;li&gt;Maintains resource state information&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Remastering occurs when:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;A node joins or leaves the cluster&lt;/li&gt;
  &lt;li&gt;Resource access patterns change significantly&lt;/li&gt;
  &lt;li&gt;Manual remastering is triggered by DBA&lt;/li&gt;
&lt;/ul&gt;

&lt;!-- ============================================================ --&gt;
&lt;h2 id=&quot;section4&quot;&gt;4. Cluster Interconnect: The Most Critical Component&lt;/h2&gt;
&lt;p&gt;The interconnect is the most important part of RAC. If the interconnect fails, the cluster fails.&lt;/p&gt;

&lt;h3&gt;Interconnect Requirements&lt;/h3&gt;
&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;&lt;th&gt;Metric&lt;/th&gt;&lt;th&gt;Minimum&lt;/th&gt;&lt;th&gt;Recommended&lt;/th&gt;&lt;th&gt;Why It Matters&lt;/th&gt;&lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;&lt;td&gt;Bandwidth&lt;/td&gt;&lt;td&gt;1 Gbps&lt;/td&gt;&lt;td&gt;10+ Gbps&lt;/td&gt;&lt;td&gt;Cache Fusion throughput&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;Latency&lt;/td&gt;&lt;td&gt;&amp;lt; 5 ms&lt;/td&gt;&lt;td&gt;&amp;lt; 1 ms&lt;/td&gt;&lt;td&gt;Block transfer speed&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;Packet Loss&lt;/td&gt;&lt;td&gt;&amp;lt; 1%&lt;/td&gt;&lt;td&gt;&amp;lt; 0.1%&lt;/td&gt;&lt;td&gt;Message reliability&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;Redundancy&lt;/td&gt;&lt;td&gt;Single path&lt;/td&gt;&lt;td&gt;Bonded NICs&lt;/td&gt;&lt;td&gt;Failover capability&lt;/td&gt;&lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;h3&gt;Common Interconnect Problems&lt;/h3&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;span class=&quot;tag-bad&quot;&gt;Risk&lt;/span&gt; &lt;strong&gt;Shared switches:&lt;/strong&gt; Interconnect traffic mixed with public traffic&lt;/li&gt;
  &lt;li&gt;&lt;span class=&quot;tag-bad&quot;&gt;Risk&lt;/span&gt; &lt;strong&gt;Insufficient bandwidth:&lt;/strong&gt; 1 Gbps not enough for high-transaction workloads&lt;/li&gt;
  &lt;li&gt;&lt;span class=&quot;tag-bad&quot;&gt;Risk&lt;/span&gt; &lt;strong&gt;High latency:&lt;/strong&gt; Geographic distance between nodes (&amp;gt;1 ms)&lt;/li&gt;
  &lt;li&gt;&lt;span class=&quot;tag-bad&quot;&gt;Risk&lt;/span&gt; &lt;strong&gt;Single point of failure:&lt;/strong&gt; One switch, one cable&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;code-container&quot;&gt;
  &lt;div class=&quot;code-header&quot;&gt;
    &lt;span class=&quot;code-label&quot;&gt;SQL — Diagnose Interconnect Issues&lt;/span&gt;
    &lt;button class=&quot;copy-btn&quot; onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;
  &lt;/div&gt;
  &lt;div class=&quot;code-block&quot;&gt;-- Interconnect latency check across all nodes
SELECT inst_id,
       name,
       value
FROM   gv$sysstat
WHERE  name LIKE &#39;%gc cr block receive time%&#39;
OR     name LIKE &#39;%gc current block receive time%&#39;
ORDER  BY inst_id;

-- Calculate average interconnect latency per node
SELECT inst_id,
       ROUND(
           (SELECT value
            FROM   gv$sysstat
            WHERE  name    = &#39;gc cr block receive time&#39;
            AND    inst_id = s.inst_id)
           /
           NULLIF(
               (SELECT value
                FROM   gv$sysstat
                WHERE  name    = &#39;gc cr blocks received&#39;
                AND    inst_id = s.inst_id),
           0), 2)  AS avg_cr_latency_ms
FROM   gv$instance s
ORDER  BY inst_id;&lt;/div&gt;
&lt;/div&gt;

&lt;h3&gt;Interconnect Design Best Practices&lt;/h3&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;span class=&quot;tag-good&quot;&gt;Best&lt;/span&gt; &lt;strong&gt;Dedicated network:&lt;/strong&gt; Separate from public and backup networks&lt;/li&gt;
  &lt;li&gt;&lt;span class=&quot;tag-good&quot;&gt;Best&lt;/span&gt; &lt;strong&gt;10 Gbps minimum:&lt;/strong&gt; For all production workloads&lt;/li&gt;
  &lt;li&gt;&lt;span class=&quot;tag-good&quot;&gt;Best&lt;/span&gt; &lt;strong&gt;Low-latency switches:&lt;/strong&gt; Purpose-built for interconnect&lt;/li&gt;
  &lt;li&gt;&lt;span class=&quot;tag-good&quot;&gt;Best&lt;/span&gt; &lt;strong&gt;NIC bonding:&lt;/strong&gt; Redundant paths for automatic failover&lt;/li&gt;
  &lt;li&gt;&lt;span class=&quot;tag-good&quot;&gt;Best&lt;/span&gt; &lt;strong&gt;Jumbo frames:&lt;/strong&gt; MTU 9000 for better throughput&lt;/li&gt;
&lt;/ul&gt;

&lt;!-- ============================================================ --&gt;
&lt;h2 id=&quot;section5&quot;&gt;5. Split-Brain Scenarios and Voting Disk Protection&lt;/h2&gt;
&lt;p&gt;Split-brain is the nightmare scenario where a cluster partitions and both sides believe they are primary.&lt;/p&gt;

&lt;h3&gt;What is Split-Brain?&lt;/h3&gt;
&lt;p&gt;Consider a 3-node RAC cluster running normally. If a network partition occurs (interconnect fails), Node 1 can no longer reach Nodes 2 and 3. Both sides believe the other side has failed. Both sides attempt to become primary. If both sides write to shared storage simultaneously the result is data corruption.&lt;/p&gt;

&lt;h3&gt;How Voting Disks Prevent Split-Brain&lt;/h3&gt;
&lt;p&gt;Voting disks implement a quorum mechanism:&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Typically 3 or 5 voting disks are configured&lt;/li&gt;
  &lt;li&gt;A node must access a majority of voting disks to survive&lt;/li&gt;
  &lt;li&gt;With 3 voting disks, a node needs access to at least 2&lt;/li&gt;
  &lt;li&gt;With 5 voting disks, a node needs access to at least 3&lt;/li&gt;
  &lt;li&gt;The losing side evicts itself automatically — no manual intervention required&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;code-container&quot;&gt;
  &lt;div class=&quot;code-header&quot;&gt;
    &lt;span class=&quot;code-label&quot;&gt;Bash — Check Voting Disk and Cluster Status&lt;/span&gt;
    &lt;button class=&quot;copy-btn&quot; onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;
  &lt;/div&gt;
  &lt;div class=&quot;code-block&quot;&gt;# Check voting disk configuration
crsctl query css votedisk

# Verify OCR configuration
ocrcheck

# Check overall cluster status across all nodes
crsctl check cluster -all&lt;/div&gt;
&lt;/div&gt;

&lt;h3&gt;Node Eviction Process&lt;/h3&gt;
&lt;p&gt;When a node is evicted the following sequence occurs:&lt;/p&gt;
&lt;ol&gt;
  &lt;li&gt;Cluster detects node unresponsiveness (missed heartbeats)&lt;/li&gt;
  &lt;li&gt;Voting disk quorum check fails for that node&lt;/li&gt;
  &lt;li&gt;Clusterware initiates an immediate node reboot&lt;/li&gt;
  &lt;li&gt;The instance crashes (immediate termination — no graceful shutdown)&lt;/li&gt;
  &lt;li&gt;Surviving nodes perform instance recovery from redo logs&lt;/li&gt;
  &lt;li&gt;Applications reconnect automatically to surviving nodes&lt;/li&gt;
&lt;/ol&gt;

&lt;!-- ============================================================ --&gt;
&lt;h2 id=&quot;section6&quot;&gt;6. RAC Performance Tuning: What Actually Matters&lt;/h2&gt;
&lt;p&gt;RAC tuning is different from single-instance tuning. The metrics that matter most are cluster-specific.&lt;/p&gt;

&lt;h3&gt;Key RAC-Specific Metrics&lt;/h3&gt;
&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;&lt;th&gt;Metric&lt;/th&gt;&lt;th&gt;Good Value&lt;/th&gt;&lt;th&gt;Problem Threshold&lt;/th&gt;&lt;th&gt;Action&lt;/th&gt;&lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;&lt;td&gt;GC CR block receive time&lt;/td&gt;&lt;td&gt;&amp;lt; 1 ms&lt;/td&gt;&lt;td&gt;&amp;gt; 5 ms&lt;/td&gt;&lt;td&gt;Check interconnect hardware&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;GC current block busy&lt;/td&gt;&lt;td&gt;&amp;lt; 1% of waits&lt;/td&gt;&lt;td&gt;&amp;gt; 5% of waits&lt;/td&gt;&lt;td&gt;Reduce hot blocks&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;Blocks received (per node)&lt;/td&gt;&lt;td&gt;Balanced across nodes&lt;/td&gt;&lt;td&gt;Skewed to one node&lt;/td&gt;&lt;td&gt;Fix application routing&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;Cache transfers&lt;/td&gt;&lt;td&gt;&amp;lt; 10% of reads&lt;/td&gt;&lt;td&gt;&amp;gt; 30% of reads&lt;/td&gt;&lt;td&gt;Partition data or workload&lt;/td&gt;&lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;div class=&quot;code-container&quot;&gt;
  &lt;div class=&quot;code-header&quot;&gt;
    &lt;span class=&quot;code-label&quot;&gt;SQL — Comprehensive RAC Health Check&lt;/span&gt;
    &lt;button class=&quot;copy-btn&quot; onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;
  &lt;/div&gt;
  &lt;div class=&quot;code-block&quot;&gt;-- RAC performance report: CR and Current block latency per node
SELECT inst_id,
       &#39;CR Block Receive Time (ms)&#39;  AS metric,
       ROUND(
           (SELECT value
            FROM   gv$sysstat
            WHERE  name    = &#39;gc cr block receive time&#39;
            AND    inst_id = i.inst_id)
           /
           NULLIF(
               (SELECT value
                FROM   gv$sysstat
                WHERE  name    = &#39;gc cr blocks received&#39;
                AND    inst_id = i.inst_id),
           0), 2)  AS value
FROM   gv$instance i

UNION ALL

SELECT inst_id,
       &#39;Current Block Receive Time (ms)&#39;,
       ROUND(
           (SELECT value
            FROM   gv$sysstat
            WHERE  name    = &#39;gc current block receive time&#39;
            AND    inst_id = i.inst_id)
           /
           NULLIF(
               (SELECT value
                FROM   gv$sysstat
                WHERE  name    = &#39;gc current blocks received&#39;
                AND    inst_id = i.inst_id),
           0), 2)
FROM   gv$instance i

ORDER  BY inst_id, metric;&lt;/div&gt;
&lt;/div&gt;

&lt;h3&gt;Common RAC Performance Problems&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;1. Hot Blocks&lt;/strong&gt;&lt;br /&gt;
A single block being accessed by multiple nodes simultaneously causes excessive Cache Fusion traffic. Solution: partition data, use sequences wisely, avoid right-growing indexes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Unbalanced Load&lt;/strong&gt;&lt;br /&gt;
One node handling 80% of the workload while others are underutilized. Solution: fix application-level connection distribution and service definitions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Interconnect Saturation&lt;/strong&gt;&lt;br /&gt;
Cache Fusion messages exceeding available bandwidth causes latency to increase dramatically. Solution: upgrade interconnect to 10 GbE or 25 GbE; reduce unnecessary block transfers through workload partitioning.&lt;/p&gt;

&lt;!-- ============================================================ --&gt;
&lt;h2 id=&quot;section7&quot;&gt;7. Real Production Failures and Lessons Learned&lt;/h2&gt;
&lt;p&gt;These are actual RAC incidents from production environments.&lt;/p&gt;

&lt;div class=&quot;incident-box&quot;&gt;
  &lt;strong&gt;Incident 1: Switch Firmware Causes Mass Eviction&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;
  Network team upgraded switch firmware during the maintenance window. The new firmware had a bug causing random packet drops. The cluster detected node unresponsiveness, and all 4 nodes evicted themselves simultaneously — complete cluster failure.&lt;br /&gt;&lt;br /&gt;
  &lt;strong&gt;Lesson:&lt;/strong&gt; Never trust network changes without extended interconnect testing. Always run &lt;code&gt;ping&lt;/code&gt; and &lt;code&gt;traceroute&lt;/code&gt; across the private interconnect for at least 30 minutes post-change before closing the maintenance window.
&lt;/div&gt;

&lt;div class=&quot;incident-box&quot;&gt;
  &lt;strong&gt;Incident 2: Storage Latency Masquerading as a RAC Issue&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;
  AWR showed high &lt;code&gt;gc cr block receive time&lt;/code&gt;. Initial assumption was an interconnect problem. Deep investigation revealed storage latency of 50 ms — nodes were waiting for disk I/O, not Cache Fusion.&lt;br /&gt;&lt;br /&gt;
  &lt;strong&gt;Lesson:&lt;/strong&gt; Always check storage I/O latency before blaming RAC or the interconnect. Check &lt;code&gt;v$filestat&lt;/code&gt; and storage-level metrics first.
&lt;/div&gt;

&lt;div class=&quot;incident-box&quot;&gt;
  &lt;strong&gt;Incident 3: Application Design Killing RAC Performance&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;
  The application used a single global sequence for order IDs. Every insert required global coordination across all nodes. This caused &lt;code&gt;enq: SQ&lt;/code&gt; contention cluster-wide. Throughput was capped at 200 TPS against a target of 2,000+ TPS.&lt;br /&gt;&lt;br /&gt;
  &lt;strong&gt;Lesson:&lt;/strong&gt; RAC exposes bad application design immediately. Partition sequences per node, or use local sequences with offsets to eliminate global coordination overhead.
&lt;/div&gt;

&lt;!-- ============================================================ --&gt;
&lt;h2 id=&quot;section8&quot;&gt;8. When RAC Makes Sense (And When It Doesn&#39;t)&lt;/h2&gt;
&lt;p&gt;RAC is not a universal solution. It has specific use cases where it excels and others where it makes things worse.&lt;/p&gt;

&lt;h3&gt;Good Use Cases for RAC&lt;/h3&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;span class=&quot;tag-good&quot;&gt;Good&lt;/span&gt; &lt;strong&gt;Read-heavy workloads:&lt;/strong&gt; Reporting, analytics, read scaling&lt;/li&gt;
  &lt;li&gt;&lt;span class=&quot;tag-good&quot;&gt;Good&lt;/span&gt; &lt;strong&gt;High availability requirement:&lt;/strong&gt; Cannot tolerate planned downtime for patches&lt;/li&gt;
  &lt;li&gt;&lt;span class=&quot;tag-good&quot;&gt;Good&lt;/span&gt; &lt;strong&gt;Partitioned workloads:&lt;/strong&gt; Each node handles a different data subset&lt;/li&gt;
  &lt;li&gt;&lt;span class=&quot;tag-good&quot;&gt;Good&lt;/span&gt; &lt;strong&gt;Connection scaling:&lt;/strong&gt; Need to support 10,000+ concurrent connections&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;Bad Use Cases for RAC&lt;/h3&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;span class=&quot;tag-bad&quot;&gt;Avoid&lt;/span&gt; &lt;strong&gt;Write-intensive OLTP:&lt;/strong&gt; Cache Fusion overhead degrades write performance&lt;/li&gt;
  &lt;li&gt;&lt;span class=&quot;tag-bad&quot;&gt;Avoid&lt;/span&gt; &lt;strong&gt;Single global sequences:&lt;/strong&gt; Become cluster-wide bottlenecks immediately&lt;/li&gt;
  &lt;li&gt;&lt;span class=&quot;tag-bad&quot;&gt;Avoid&lt;/span&gt; &lt;strong&gt;Budget-constrained environments:&lt;/strong&gt; RAC requires expensive hardware and licensing&lt;/li&gt;
  &lt;li&gt;&lt;span class=&quot;tag-bad&quot;&gt;Avoid&lt;/span&gt; &lt;strong&gt;Teams without RAC expertise:&lt;/strong&gt; Troubleshooting requires deep knowledge&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;RAC Alternatives to Consider&lt;/h3&gt;
&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;&lt;th&gt;Requirement&lt;/th&gt;&lt;th&gt;RAC Solution&lt;/th&gt;&lt;th&gt;Alternative Solution&lt;/th&gt;&lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;&lt;td&gt;High Availability&lt;/td&gt;&lt;td&gt;RAC cluster&lt;/td&gt;&lt;td&gt;Data Guard with fast failover&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;Read Scaling&lt;/td&gt;&lt;td&gt;RAC nodes&lt;/td&gt;&lt;td&gt;Active Data Guard read replicas&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;Zero Downtime Patching&lt;/td&gt;&lt;td&gt;RAC rolling patch&lt;/td&gt;&lt;td&gt;Data Guard rolling upgrade&lt;/td&gt;&lt;/tr&gt;
    &lt;tr&gt;&lt;td&gt;Connection Pooling&lt;/td&gt;&lt;td&gt;RAC load balancing&lt;/td&gt;&lt;td&gt;Application-level connection pool&lt;/td&gt;&lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;!-- ============================================================ --&gt;
&lt;h2 id=&quot;section9&quot;&gt;9. FAQ&lt;/h2&gt;

&lt;div class=&quot;faq-item&quot;&gt;
  &lt;div class=&quot;faq-question&quot;&gt;Does RAC provide disaster recovery?&lt;/div&gt;
  &lt;div class=&quot;faq-answer&quot;&gt;
    No. RAC provides high availability within a single data center, not disaster recovery across data centers. All RAC nodes access the same shared storage — if that storage fails or the data center fails, the entire RAC cluster fails. For disaster recovery you need Data Guard in addition to RAC. A common architecture is: primary site runs RAC for HA, standby site runs Data Guard for DR.
  &lt;/div&gt;
&lt;/div&gt;

&lt;div class=&quot;faq-item&quot;&gt;
  &lt;div class=&quot;faq-question&quot;&gt;Can I run RAC over a WAN?&lt;/div&gt;
  &lt;div class=&quot;faq-answer&quot;&gt;
    Technically possible with Oracle Extended RAC, but not recommended for most use cases. Cache Fusion requires sub-millisecond latency. WAN latency (typically 20–100 ms) causes severe performance degradation. Extended RAC is designed for metro-area clusters (&amp;lt;100 km) with dark fiber connections. For true geographic distribution, use Data Guard instead.
  &lt;/div&gt;
&lt;/div&gt;

&lt;div class=&quot;faq-item&quot;&gt;
  &lt;div class=&quot;faq-question&quot;&gt;Does RAC double my database performance?&lt;/div&gt;
  &lt;div class=&quot;faq-answer&quot;&gt;
    No. Adding a second RAC node does not double throughput. Read-heavy workloads can scale near-linearly (1.8x with 2 nodes). Write-heavy workloads see minimal scaling (1.2–1.4x with 2 nodes) due to Cache Fusion coordination overhead. Some workloads actually perform worse in RAC due to global contention. RAC is about availability and read scaling, not write performance multiplication.
  &lt;/div&gt;
&lt;/div&gt;

&lt;div class=&quot;faq-item&quot;&gt;
  &lt;div class=&quot;faq-question&quot;&gt;Should I mention RAC experience on my resume?&lt;/div&gt;
  &lt;div class=&quot;faq-answer&quot;&gt;
    Absolutely — but be specific. Don&#39;t just write &quot;Oracle RAC experience.&quot; Write: &lt;em&gt;&quot;Managed 4-node Oracle 19c RAC cluster serving 50,000 TPS OLTP workload. Troubleshot Cache Fusion performance issues, optimized interconnect configuration, and reduced gc cr block receive time from 8 ms to 1.2 ms through network tuning.&quot;&lt;/em&gt; Specific metrics and outcomes matter. RAC expertise is valuable because it&#39;s complex and few DBAs understand it deeply.
  &lt;/div&gt;
&lt;/div&gt;

&lt;!-- ============================================================ --&gt;
&lt;div class=&quot;related-reading&quot;&gt;
  &lt;h2 id=&quot;section10&quot;&gt;10. Related Reading from Real Production Systems&lt;/h2&gt;
  &lt;p&gt;If you want to deepen your understanding of Oracle high availability and clustering, the following articles from real production experience may also be useful:&lt;/p&gt;
  &lt;ul&gt;
    &lt;li&gt;
      &lt;a href=&quot;https://chetanyadavds.blogspot.com/2026/01/oracle-database-23ai-revolutionizing.html&quot; target=&quot;_blank&quot;&gt;Oracle Database 23ai: Revolutionizing Data Distribution Across the Globe&lt;/a&gt;
      &lt;span class=&quot;why-matters&quot;&gt;Why it matters: Understanding modern Oracle distributed architecture complements RAC clustering knowledge for building globally distributed high-availability systems.&lt;/span&gt;
    &lt;/li&gt;
    &lt;li&gt;
      &lt;a href=&quot;#&quot;&gt;Oracle Performance Engineering Guide: AWR, ASH and SQL Monitor in 19c and 23ai&lt;/a&gt;
      &lt;span class=&quot;why-matters&quot;&gt;Why it matters: RAC performance troubleshooting requires AWR and ASH analysis across multiple instances. This guide shows diagnostic techniques for identifying Cache Fusion bottlenecks and interconnect issues.&lt;/span&gt;
    &lt;/li&gt;
    &lt;li&gt;
      &lt;a href=&quot;#&quot;&gt;Automating Backup and Restore in Oracle 19c and 23ai: Complete DBA Guide&lt;/a&gt;
      &lt;span class=&quot;why-matters&quot;&gt;Why it matters: RAC backup strategies differ from single-instance databases. Understanding RMAN in clustered environments with shared storage is critical for disaster recovery planning.&lt;/span&gt;
    &lt;/li&gt;
    &lt;li&gt;
      &lt;a href=&quot;https://chetanyadavds.blogspot.com/2026/01/n8n-oracle-telegram-alerts.html&quot; target=&quot;_blank&quot;&gt;N8N Oracle Telegram Alerts: Automating Database Monitoring&lt;/a&gt;
      &lt;span class=&quot;why-matters&quot;&gt;Why it matters: RAC clusters require monitoring across all nodes for interconnect health, node evictions, and Cache Fusion metrics. This guide shows automated cluster-wide alerting.&lt;/span&gt;
    &lt;/li&gt;
    &lt;li&gt;
      &lt;a href=&quot;#&quot;&gt;Oracle Standby Database Failover: Real Production DR Testing and Automation&lt;/a&gt;
      &lt;span class=&quot;why-matters&quot;&gt;Why it matters: Combining RAC with Data Guard provides both local HA and disaster recovery. This guide covers failover procedures when the RAC primary site fails completely.&lt;/span&gt;
    &lt;/li&gt;
  &lt;/ul&gt;
&lt;/div&gt;

&lt;!-- AUTHOR --&gt;
&lt;div class=&quot;about-author&quot;&gt;
  &lt;h2&gt;About the Author&lt;/h2&gt;
  &lt;div class=&quot;author-name&quot;&gt;Chetan Yadav&lt;/div&gt;
  &lt;p class=&quot;author-bio&quot;&gt;
    &lt;strong&gt;Chetan Yadav&lt;/strong&gt; is a &lt;strong&gt;Senior Oracle, PostgreSQL, MySQL, and Cloud DBA&lt;/strong&gt; with &lt;strong&gt;15+ years&lt;/strong&gt; of hands-on experience managing production databases across on-premises, hybrid, and cloud environments. He specializes in high availability architecture, performance tuning, disaster recovery, and database migrations.
  &lt;/p&gt;
  &lt;p class=&quot;author-bio&quot;&gt;
    Throughout his career, Chetan has designed and implemented Oracle RAC clusters for mission-critical systems in finance, healthcare, and e-commerce sectors. He has architected high-availability solutions serving millions of transactions daily and has troubleshot complex Cache Fusion performance issues under production pressure.
  &lt;/p&gt;
  &lt;p class=&quot;author-bio&quot;&gt;
    This blog focuses on &lt;strong&gt;real-world DBA problems, career growth, and practical learning&lt;/strong&gt; — not theoretical documentation or vendor marketing.
  &lt;/p&gt;
  &lt;div class=&quot;social-links&quot;&gt;
    &lt;a href=&quot;https://www.linkedin.com/in/chetanyadavvds/&quot; target=&quot;_blank&quot;&gt;LinkedIn&lt;/a&gt;
    &lt;a href=&quot;https://www.youtube.com/@levelup_careers&quot; target=&quot;_blank&quot;&gt;YouTube&lt;/a&gt;
    &lt;a href=&quot;https://www.instagram.com/levelup_careers/&quot; target=&quot;_blank&quot;&gt;Instagram&lt;/a&gt;
    &lt;a href=&quot;https://x.com/home&quot; target=&quot;_blank&quot;&gt;Twitter (X)&lt;/a&gt;
    &lt;a href=&quot;https://www.facebook.com/oracledbainfo/&quot; target=&quot;_blank&quot;&gt;Facebook&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;Newsletter&lt;/a&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;!-- POST FOOTER --&gt;
&lt;div class=&quot;post-footer&quot;&gt;
  &lt;div class=&quot;post-meta&quot;&gt;&lt;strong&gt;by Chetan Yadav&lt;/strong&gt; • Tuesday, March 09, 2026&lt;/div&gt;
  &lt;div class=&quot;share-buttons&quot;&gt;
    &lt;strong&gt;Share:&lt;/strong&gt;
    &lt;a href=&quot;#&quot;&gt;Email&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;BlogThis&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;X&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;Facebook&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;Pinterest&lt;/a&gt;
  &lt;/div&gt;
  &lt;div class=&quot;tags&quot;&gt;
    &lt;strong&gt;Tags:&lt;/strong&gt;
    &lt;a href=&quot;#&quot;&gt;Oracle RAC&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;Cache Fusion&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;Cluster Design&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;High Availability&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;Oracle DBA&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;RAC Internals&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;GCS&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;GES&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;Cluster Architecture&lt;/a&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;&lt;!-- /container --&gt;
&lt;/div&gt;&lt;!-- /main-content-wrapper --&gt;

&lt;script&gt;
function copyCode(button) {
  const codeContainer = button.closest(&#39;.code-container&#39;);
  const codeBlock = codeContainer.querySelector(&#39;.code-block&#39;);
  const textArea = document.createElement(&#39;textarea&#39;);
  textArea.value = codeBlock.textContent;
  textArea.style.position = &#39;fixed&#39;;
  textArea.style.left = &#39;-9999px&#39;;
  document.body.appendChild(textArea);
  textArea.select();
  textArea.setSelectionRange(0, 99999);
  try {
    document.execCommand(&#39;copy&#39;);
    button.textContent = &#39;Copied!&#39;;
    button.classList.add(&#39;copied&#39;);
    setTimeout(() =&gt; { button.textContent = &#39;Copy&#39;; button.classList.remove(&#39;copied&#39;); }, 2000);
  } catch (err) {
    button.textContent = &#39;Failed&#39;;
    setTimeout(() =&gt; { button.textContent = &#39;Copy&#39;; }, 2000);
  }
  document.body.removeChild(textArea);
}
&lt;/script&gt;
&lt;/body&gt;
&lt;/html&gt;</content><link rel='replies' type='application/atom+xml' href='http://chetanyadavds.blogspot.com/feeds/9201268157804705703/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://chetanyadavds.blogspot.com/2026/03/oracle-rac-internals-cache-fusion-cluster-design-lessons.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/436196721812840248/posts/default/9201268157804705703'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/436196721812840248/posts/default/9201268157804705703'/><link rel='alternate' type='text/html' href='http://chetanyadavds.blogspot.com/2026/03/oracle-rac-internals-cache-fusion-cluster-design-lessons.html' title='Oracle RAC Internals Explained: Cache Fusion and Cluster Design Lessons'/><author><name>Chetan Yadav</name><uri>http://www.blogger.com/profile/02557500437758632199</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiE0TgifWM4l1b3sy_cK2y41bpqyfY1U25-p5IBKkSg8pJLFRvjYr_kF7W_MgsYdc21DutWF9H6qlShQDQspQLbZEQ5CSUA51Wp6Mh9l5Ygd4NPSuQyqwSMrKitCWwSLr0oHBg9TGjxAvAM7TTkkehHLL1MFWg0wSb31CxywQxIokg9pg/s1600/IMG-20251013-WA0038.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/a/AVvXsEgEf2Z8KiRyW4_bPMtKg_njiluxbuSoajYA9Ps3lHSRlmb51J8KJfq3-lTLNg38xXESRKKl5yCv0CJ6U_nrEuFUo3iMdDNRdVF6D3tiyLeFWbV4yL6VOGgo4X_9owWV3EfYBuA2XEt02rEPFtQ44ikKYFHkVZoRIoTN2RUky_YHX9BnAOtkpCrCdwj_SLo=s72-c" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-436196721812840248.post-3614043153839917547</id><published>2026-03-02T13:00:00.006+05:30</published><updated>2026-03-11T08:55:18.272+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="ASH"/><category scheme="http://www.blogger.com/atom/ns#" term="AWR"/><category scheme="http://www.blogger.com/atom/ns#" term="Database Diagnostics"/><category scheme="http://www.blogger.com/atom/ns#" term="Database Performance"/><category scheme="http://www.blogger.com/atom/ns#" term="Oracle 19c"/><category scheme="http://www.blogger.com/atom/ns#" term="Oracle 23ai"/><category scheme="http://www.blogger.com/atom/ns#" term="Oracle DBA"/><category scheme="http://www.blogger.com/atom/ns#" term="Oracle Performance"/><category scheme="http://www.blogger.com/atom/ns#" term="Oracle Troubleshooting"/><category scheme="http://www.blogger.com/atom/ns#" term="Performance Analysis"/><category scheme="http://www.blogger.com/atom/ns#" term="Performance Tuning"/><category scheme="http://www.blogger.com/atom/ns#" term="SQL Monitor"/><category scheme="http://www.blogger.com/atom/ns#" term="SQL Tuning"/><category scheme="http://www.blogger.com/atom/ns#" term="Wait Events"/><title type='text'>Oracle Performance Engineering Guide: AWR, ASH and SQL Monitor in 19c and 23ai</title><content type='html'>&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;en&quot;&gt;
&lt;head&gt;
    &lt;meta charset=&quot;UTF-8&quot;&gt;
    &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;
    &lt;meta name=&quot;description&quot; content=&quot;Complete Oracle performance engineering guide explaining AWR, ASH and SQL Monitor for diagnosing production database performance issues in Oracle 19c and 23ai. Real-world troubleshooting methodology from 15+ years production experience.&quot;&gt;
    &lt;meta name=&quot;keywords&quot; content=&quot;Oracle Performance Engineering, AWR, ASH, SQL Monitor, 19c, 23ai, DBA, performance tuning, diagnostics&quot;&gt;
    &lt;title&gt;Oracle Performance Engineering Guide: AWR, ASH and SQL Monitor in 19c and 23ai&lt;/title&gt;
    
    &lt;style&gt;
        * {
            margin: 0;
            padding: 0;
            box-sizing: border-box;
        }

        body {
            font-family: -apple-system, BlinkMacSystemFont, &#39;Segoe UI&#39;, Roboto, &#39;Helvetica Neue&#39;, Arial, sans-serif;
            line-height: 1.6;
            color: #333333;
            background-color: #ffffff;
        }

        .container {
            max-width: 900px;
            margin: 0 auto;
            padding: 0 20px;
        }

        /* Hero Header */
        .hero-header {
            background: linear-gradient(135deg, #1e3a5f 0%, #2c5282 50%, #1a365d 100%);
            color: #ffffff;
            padding: 60px 40px;
            text-align: center;
            margin-bottom: 0;
        }

        .hero-header h1 {
            font-size: 42px;
            font-weight: 700;
            margin-bottom: 20px;
            line-height: 1.2;
        }

        .hero-subtitle {
            font-size: 20px;
            color: #e2e8f0;
            font-weight: 300;
            margin-bottom: 25px;
            opacity: 0.95;
        }

        .hero-meta {
            display: flex;
            justify-content: center;
            gap: 25px;
            font-size: 15px;
            color: #cbd5e1;
            flex-wrap: wrap;
        }

        .hero-meta-item {
            display: flex;
            align-items: center;
            gap: 6px;
        }

        /* Hero Image */
        .hero-image {
            width: 100%;
            max-height: 600px;
            object-fit: contain;
            display: block;
            margin-bottom: 0;
            background: #f8f9fa;
            padding: 30px 0;
        }

        /* Reading Time Badge */
        .reading-badge {
            background: linear-gradient(135deg, #ef4444 0%, #dc2626 100%);
            color: #ffffff;
            padding: 12px 28px;
            border-radius: 50px;
            display: inline-block;
            font-size: 15px;
            margin: 30px 0 35px 0;
            box-shadow: 0 4px 12px rgba(239, 68, 68, 0.3);
            text-align: center;
            width: 100%;
        }

        /* Page Tagline */
        .page-tagline {
            text-align: center;
            font-size: 15px;
            color: #666666;
            font-style: italic;
            margin-bottom: 35px;
        }

        /* Production Environment */
        .environment-section {
            background: #e3f2fd;
            border-left: 4px solid #1976d2;
            padding: 20px;
            margin-bottom: 30px;
            border-radius: 4px;
        }

        .environment-section h3 {
            margin-top: 0;
            color: #1976d2;
        }

        .environment-section p {
            margin: 0;
        }

        /* Content Wrapper */
        .content-wrapper {
            padding: 0 20px;
        }

        /* Opening Hook */
        .opening-hook {
            margin-bottom: 40px;
            font-size: 16px;
            line-height: 1.8;
        }

        .opening-hook p {
            margin-bottom: 20px;
        }

        /* Table of Contents */
        .toc {
            background: #f8fafc;
            border-left: 4px solid #ef4444;
            padding: 28px 32px;
            border-radius: 8px;
            margin: 40px 0;
            box-shadow: 0 1px 3px rgba(0, 0, 0, 0.05);
        }

        .toc-header {
            font-size: 24px;
            font-weight: bold;
            color: #000000;
            margin-bottom: 20px;
        }

        .toc ol {
            list-style: decimal;
            padding-left: 20px;
        }

        .toc li {
            margin: 12px 0;
            padding-bottom: 12px;
            border-bottom: 1px solid #e5e7eb;
            font-size: 16px;
            color: #374151;
        }

        .toc li:last-child {
            border-bottom: none;
        }

        .toc a {
            color: #1a73e8;
            text-decoration: none;
        }

        .toc a:hover {
            text-decoration: underline;
        }

        /* Main Content */
        h2 {
            font-size: 28px;
            font-weight: bold;
            color: #000000;
            margin: 45px 0 20px 0;
        }

        h3 {
            font-size: 22px;
            font-weight: 600;
            color: #333333;
            margin: 30px 0 15px 0;
        }

        p {
            margin-bottom: 18px;
            font-size: 16px;
            line-height: 1.8;
        }

        strong {
            font-weight: bold;
            color: #333333;
        }

        em {
            font-style: italic;
        }

        /* Bullet Points */
        ul {
            margin-bottom: 20px;
            padding-left: 40px;
        }

        ul li {
            margin-bottom: 12px;
            line-height: 1.8;
        }

        /* Code Blocks */
        .code-container {
            margin: 25px 0;
            border-radius: 5px;
            overflow: hidden;
            border: 1px solid #e0e0e0;
        }

        .code-header {
            background: #1f2937;
            color: #ffffff;
            padding: 10px 16px;
            display: flex;
            justify-content: space-between;
            align-items: center;
            font-size: 14px;
        }

        .code-label {
            font-weight: 600;
        }

        .copy-btn {
            background: #3b82f6;
            color: #ffffff;
            border: none;
            padding: 6px 12px;
            border-radius: 4px;
            cursor: pointer;
            font-size: 13px;
            font-weight: 500;
            transition: all 0.3s;
        }

        .copy-btn:hover {
            background: #2563eb;
        }

        .copy-btn.copied {
            background: #10b981;
        }

        .code-block {
            background: #f8f9fa;
            padding: 18px;
            overflow-x: auto;
            border: 1px solid #e0e0e0;
            border-top: none;
        }

        .code-block code {
            font-family: &#39;Courier New&#39;, monospace;
            font-size: 14px;
            color: #333333;
            line-height: 1.5;
        }

        /* Tables */
        table {
            width: 100%;
            border-collapse: collapse;
            margin: 25px 0;
            background: #ffffff;
        }

        thead {
            background: #f8f9fa;
        }

        th {
            padding: 12px;
            text-align: left;
            font-weight: bold;
            border-bottom: 2px solid #e0e0e0;
        }

        td {
            padding: 12px;
            border-bottom: 1px solid #e0e0e0;
        }

        tbody tr:hover {
            background: #f9fafb;
        }

        /* Licensing Note */
        .licensing-note {
            background: #fff3cd;
            border-left: 4px solid #ffc107;
            padding: 15px;
            margin: 20px 0;
            border-radius: 4px;
            font-size: 14px;
        }

        /* Best Practice Note */
        .best-practice {
            background: #e8f5e9;
            border-left: 4px solid #4caf50;
            padding: 15px;
            margin: 20px 0;
            border-radius: 4px;
            font-size: 15px;
        }

        .best-practice strong {
            color: #2e7d32;
        }

        /* Warning Note */
        .warning-note {
            background: #ffe0e0;
            border-left: 4px solid #d93025;
            padding: 15px;
            margin: 20px 0;
            border-radius: 4px;
            font-size: 15px;
        }

        .warning-note strong {
            color: #b71c1c;
        }

        /* FAQ Section */
        .faq-item {
            margin-bottom: 25px;
        }

        .faq-question {
            font-weight: 600;
            color: #000000;
            font-size: 17px;
            margin-bottom: 10px;
        }

        .faq-answer {
            color: #333333;
            line-height: 1.7;
        }

        /* Related Reading Section */
        .related-reading {
            background: #f8f9fa;
            border: 1px solid #e0e0e0;
            border-radius: 8px;
            padding: 30px;
            margin: 40px 0;
        }

        .related-reading h2 {
            margin-top: 0;
        }

        .related-reading ul {
            list-style: disc;
        }

        .related-reading li {
            margin-bottom: 20px;
        }

        .related-reading a {
            color: #1a73e8;
            text-decoration: none;
        }

        .related-reading a:hover {
            text-decoration: underline;
        }

        .why-matters {
            color: #666666;
            font-size: 15px;
            margin-top: 5px;
            display: block;
        }

        /* About the Author */
        .about-author {
            background: #fffbf0;
            border: 1px solid #e0e0e0;
            border-radius: 8px;
            padding: 30px;
            margin: 40px 0;
        }

        .about-author h2 {
            margin-top: 0;
        }

        .author-name {
            font-size: 20px;
            font-weight: bold;
            color: #000000;
            margin-bottom: 8px;
        }

        .author-title {
            font-weight: bold;
            color: #333333;
        }

        .author-bio {
            margin: 15px 0;
            line-height: 1.8;
        }

        .social-links {
            margin-top: 20px;
        }

        .social-links a {
            display: inline-block;
            margin-right: 20px;
            color: #1a73e8;
            text-decoration: none;
            font-size: 16px;
        }

        .social-links a:hover {
            text-decoration: underline;
        }

        /* Post Footer */
        .post-footer {
            border-top: 1px solid #e0e0e0;
            padding-top: 25px;
            margin-top: 40px;
            color: #666666;
            font-size: 15px;
        }

        .post-meta {
            margin-bottom: 20px;
        }

        .share-section {
            margin: 20px 0;
        }

        .share-links {
            margin-top: 10px;
        }

        .share-links a {
            display: inline-block;
            margin-right: 15px;
            color: #666666;
            text-decoration: none;
        }

        .tags {
            margin-top: 20px;
        }

        .tags a {
            display: inline-block;
            margin-right: 10px;
            color: #1a73e8;
            text-decoration: none;
            font-size: 14px;
        }

        .tags a:hover {
            text-decoration: underline;
        }

        /* Diagram */
        .diagram-container {
            text-align: center;
            margin: 30px 0;
        }

        .diagram-container img {
            max-width: 100%;
            height: auto;
            border-radius: 8px;
            box-shadow: 0 2px 8px rgba(0, 0, 0, 0.1);
        }

        /* Responsive Design */
        @media (max-width: 768px) {
            .hero-header {
                padding: 40px 24px;
            }

            .hero-header h1 {
                font-size: 28px;
            }

            .hero-subtitle {
                font-size: 16px;
            }

            .hero-image {
                max-height: 400px;
            }

            .hero-meta {
                flex-direction: column;
                gap: 10px;
            }

            h2 {
                font-size: 24px;
            }

            h3 {
                font-size: 18px;
            }

            p {
                font-size: 16px;
            }

            .code-header {
                flex-direction: column;
                align-items: flex-start;
            }

            .copy-btn {
                margin-top: 8px;
                align-self: flex-end;
            }

            table {
                font-size: 0.85rem;
            }

            th, td {
                padding: 10px;
            }
        }
    &lt;/style&gt;
&lt;/head&gt;
&lt;body&gt;
    &lt;!-- Hero Header --&gt;
    &lt;div class=&quot;hero-header&quot;&gt;
        &lt;h1&gt;Oracle Performance Engineering Guide: AWR, ASH and SQL Monitor in 19c and 23ai&lt;/h1&gt;
        &lt;p class=&quot;hero-subtitle&quot;&gt;Master the essential tools for diagnosing and resolving real-world performance issues&lt;/p&gt;
        &lt;div class=&quot;hero-meta&quot;&gt;
            &lt;div class=&quot;hero-meta-item&quot;&gt;
                &lt;span&gt;Date:&lt;/span&gt;
                &lt;span&gt;Tuesday, March 10, 2026&lt;/span&gt;
            &lt;/div&gt;
            &lt;div class=&quot;hero-meta-item&quot;&gt;
                &lt;span&gt;Author:&lt;/span&gt;
                &lt;span&gt;Chetan Yadav&lt;/span&gt;
            &lt;/div&gt;
            &lt;div class=&quot;hero-meta-item&quot;&gt;
                &lt;span&gt;Read Time:&lt;/span&gt;
                &lt;span&gt;20-24 minutes&lt;/span&gt;
            &lt;/div&gt;
        &lt;/div&gt;
    &lt;/div&gt;

    &lt;!-- Hero Image/Diagram --&gt;
    &lt;div class=&quot;diagram-container&quot;&gt;
        &lt;img src=&quot;https://via.placeholder.com/1200x800?text=Oracle+Performance+Diagnostics+Workflow&quot; alt=&quot;Oracle Performance Diagnostics workflow showing data flow from Applications through Oracle Database Instance to Active Session History, AWR Repository, SQL Monitor and finally to DBA Performance Analysis&quot; class=&quot;hero-image&quot; style=&quot;max-width: 100%; height: auto;&quot;&gt;
    &lt;/div&gt;

    &lt;!-- Main Content --&gt;
    &lt;div class=&quot;container&quot;&gt;
        &lt;!-- Reading Time Badge --&gt;
        &lt;div class=&quot;reading-badge&quot;&gt;
            Estimated Reading Time: 20-24 minutes
        &lt;/div&gt;

        &lt;!-- Page Tagline --&gt;
        &lt;div class=&quot;page-tagline&quot;&gt;
            Real-World Performance Diagnostics - From Baseline Metrics to SQL Execution Plans
        &lt;/div&gt;

        &lt;div class=&quot;content-wrapper&quot;&gt;
            &lt;!-- Production Environment Section --&gt;
            &lt;div class=&quot;environment-section&quot;&gt;
                &lt;h3&gt;Production Environment Context&lt;/h3&gt;
                &lt;p&gt;&lt;strong&gt;Oracle Database 19.18.21 with Oracle Grid Infrastructure 19.18&lt;/strong&gt; | &lt;strong&gt;3-Node RAC Cluster&lt;/strong&gt; | &lt;strong&gt;8.5 TB OLTP Database&lt;/strong&gt; | &lt;strong&gt;3,200+ concurrent sessions&lt;/strong&gt; | &lt;strong&gt;Peak TPS: 2,100&lt;/strong&gt; | &lt;strong&gt;24/7 mission-critical&lt;/strong&gt;&lt;/p&gt;
            &lt;/div&gt;

            &lt;!-- Opening Hook --&gt;
            &lt;div class=&quot;opening-hook&quot;&gt;
                &lt;p&gt;It&#39;s 3 AM on a Tuesday. The monitoring dashboard lights up red. Response times have jumped from 200ms to 5+ seconds. Users are reporting timeouts on critical batch jobs. Your manager&#39;s Slack message is already waiting: &quot;Database issue?&quot; You log into the database, check CPU utilization (45%), memory (78% used), disk I/O latency (120ms). Everything looks elevated but not catastrophically bad. Where do you even start investigating?&lt;/p&gt;

                &lt;p&gt;This is where &lt;strong&gt;AWR (Automatic Workload Repository), ASH (Active Session History), and SQL Monitor&lt;/strong&gt; become your diagnostic lifeline. Over the past &lt;strong&gt;15+ years&lt;/strong&gt; managing large-scale Oracle databases in production, I have debugged thousands of performance incidents—from runaway SQL queries consuming 800GB of I/O in 10 minutes, to massive lock contention blocking 400+ sessions, to redo log I/O stalls freezing the entire database. These three tools have never failed me. They transform performance troubleshooting from educated guessing into &lt;strong&gt;data-driven root cause analysis&lt;/strong&gt;.&lt;/p&gt;

                &lt;p&gt;In this guide, you will learn the exact methodology I use in production: &lt;strong&gt;how to leverage AWR, ASH, and SQL Monitor to identify root causes in under 15 minutes, pinpoint the exact problematic SQL statements, analyze their execution plans, and implement fixes&lt;/strong&gt;. Whether you&#39;re managing a 3-node RAC cluster running Oracle 19c or a cloud-native 23ai environment, the diagnostic principles remain constant.&lt;/p&gt;

                &lt;p&gt;Let&#39;s dig into real production scenarios and techniques.&lt;/p&gt;
            &lt;/div&gt;

            &lt;!-- Jump Break --&gt;
            &lt;a name=&#39;more&#39;&gt;&lt;/a&gt;

            &lt;!-- Table of Contents --&gt;
            &lt;div class=&quot;toc&quot;&gt;
                &lt;div class=&quot;toc-header&quot;&gt;Table of Contents&lt;/div&gt;
                &lt;ol&gt;
                    &lt;li&gt;&lt;a href=&quot;#section1&quot;&gt;Understanding Oracle Performance Diagnostics: The AWR Foundation&lt;/a&gt;&lt;/li&gt;
                    &lt;li&gt;&lt;a href=&quot;#section2&quot;&gt;Active Session History (ASH): Real-Time Visibility into Database Activity&lt;/a&gt;&lt;/li&gt;
                    &lt;li&gt;&lt;a href=&quot;#section3&quot;&gt;SQL Monitor: Drill Down into Individual SQL Statement Execution&lt;/a&gt;&lt;/li&gt;
                    &lt;li&gt;&lt;a href=&quot;#section4&quot;&gt;Reading the Top 5 Timed Events: Where to Focus Your Efforts&lt;/a&gt;&lt;/li&gt;
                    &lt;li&gt;&lt;a href=&quot;#section5&quot;&gt;Practical Workflow: From Problem Detection to Root Cause Analysis&lt;/a&gt;&lt;/li&gt;
                    &lt;li&gt;&lt;a href=&quot;#section6&quot;&gt;Advanced Tuning Strategies: Wait Events, Lock Analysis, and I/O Optimization&lt;/a&gt;&lt;/li&gt;
                    &lt;li&gt;&lt;a href=&quot;#section7&quot;&gt;Common Pitfalls and Anti-Patterns in Performance Tuning&lt;/a&gt;&lt;/li&gt;
                    &lt;li&gt;&lt;a href=&quot;#section8&quot;&gt;Automation and Best Practices for Ongoing Performance Management&lt;/a&gt;&lt;/li&gt;
                    &lt;li&gt;&lt;a href=&quot;#section9&quot;&gt;FAQ: Real Questions from Production DBAs&lt;/a&gt;&lt;/li&gt;
                    &lt;li&gt;&lt;a href=&quot;#section10&quot;&gt;Related Reading from Real Production Systems&lt;/a&gt;&lt;/li&gt;
                &lt;/ol&gt;
            &lt;/div&gt;

            &lt;!-- Section 1 --&gt;
            &lt;h2 id=&quot;section1&quot;&gt;1. Understanding Oracle Performance Diagnostics: The AWR Foundation&lt;/h2&gt;

            &lt;p&gt;The &lt;strong&gt;Automatic Workload Repository (AWR)&lt;/strong&gt; is the backbone of Oracle performance diagnostics. Every hour, Oracle automatically captures a snapshot of database activity—CPU usage, I/O operations, SQL execution patterns, wait events, and memory consumption. These snapshots are stored in the SYSAUX tablespace for up to 8 days by default. In production, you should increase this to at least 30 days.&lt;/p&gt;

            &lt;h3&gt;What Gets Captured in AWR Snapshots?&lt;/h3&gt;
            &lt;ul&gt;
                &lt;li&gt;&lt;strong&gt;System Metrics:&lt;/strong&gt; CPU utilization, physical I/O, wait event statistics, library cache activity&lt;/li&gt;
                &lt;li&gt;&lt;strong&gt;SQL Performance Data:&lt;/strong&gt; Top SQL by CPU, disk reads, and elapsed time&lt;/li&gt;
                &lt;li&gt;&lt;strong&gt;Wait Events:&lt;/strong&gt; Database locks, latches, I/O waits, log file synchronization&lt;/li&gt;
                &lt;li&gt;&lt;strong&gt;Memory Allocation:&lt;/strong&gt; SGA usage, buffer cache hit ratios, shared pool statistics&lt;/li&gt;
                &lt;li&gt;&lt;strong&gt;Redo and Archive Logs:&lt;/strong&gt; Log generation rates, checkpoint activity&lt;/li&gt;
            &lt;/ul&gt;

            &lt;p&gt;The default snapshot interval is &lt;strong&gt;60 minutes&lt;/strong&gt;. For high-transaction databases or during troubleshooting windows, you might want to tighten this to 15 or 30 minutes.&lt;/p&gt;

            &lt;div class=&quot;licensing-note&quot;&gt;
                &lt;strong&gt;Licensing Note:&lt;/strong&gt; AWR, ASH, and SQL Monitor are part of the &lt;strong&gt;Oracle Diagnostics Pack&lt;/strong&gt; (licensed separately from Oracle Database). If you do not have Diagnostics Pack licensed, use &lt;strong&gt;Statspack&lt;/strong&gt; (free legacy tool) or &lt;strong&gt;dynamic performance views&lt;/strong&gt; (V$SYSSTAT, V$SESSION, V$SQLAREA) which are included in the base database license.
            &lt;/div&gt;

            &lt;h3&gt;Check AWR Snapshot Settings&lt;/h3&gt;
            &lt;div class=&quot;code-container&quot;&gt;
                &lt;div class=&quot;code-header&quot;&gt;
                    &lt;span class=&quot;code-label&quot;&gt;SQL - Check Current AWR Settings&lt;/span&gt;
                    &lt;button class=&quot;copy-btn&quot; onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;
                &lt;/div&gt;
                &lt;div class=&quot;code-block&quot;&gt;&lt;code&gt;-- Check current AWR settings
SQL&gt; SELECT dbid, db_name, wr_retention, wr_interval, topnsql
     FROM dba_hist_wr_control;

-- Output example:
-- DBID        DB_NAME    WR_RETENTION  WR_INTERVAL  TOPNSQL
-- 1234567890  PROD_DB    10080         60           30
&lt;/code&gt;&lt;/div&gt;
            &lt;/div&gt;

            &lt;h3&gt;Modify Snapshot Interval&lt;/h3&gt;
            &lt;div class=&quot;code-container&quot;&gt;
                &lt;div class=&quot;code-header&quot;&gt;
                    &lt;span class=&quot;code-label&quot;&gt;SQL - Adjust AWR Snapshot Interval (Oracle 19c)&lt;/span&gt;
                    &lt;button class=&quot;copy-btn&quot; onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;
                &lt;/div&gt;
                &lt;div class=&quot;code-block&quot;&gt;&lt;code&gt;-- Change snapshot interval to 15 minutes, retention to 30 days
SQL&gt; BEGIN
  DBMS_WORKLOAD_REPOSITORY.modify_snapshot_settings(
    retention =&gt; 43200,  
    interval  =&gt; 15      
  );
END;
/

-- Verify changes applied
SQL&gt; SELECT dbid, wr_retention, wr_interval 
     FROM dba_hist_wr_control;

-- Note: For high-volume systems, 15-minute snapshots 
-- equal approximately 100GB per month
-- Monitor v$sysaux_occupants to track AWR usage
&lt;/code&gt;&lt;/div&gt;
            &lt;/div&gt;

            &lt;div class=&quot;warning-note&quot;&gt;
                &lt;strong&gt;Important:&lt;/strong&gt; Do not disable AWR to save storage. Even minimal AWR overhead (1-2% CPU) is worth the diagnostic value. Storage is cheap; downtime is expensive.
            &lt;/div&gt;

            &lt;div class=&quot;best-practice&quot;&gt;
                &lt;strong&gt;Best Practice:&lt;/strong&gt; Create AWR baselines for baseline periods (off-peak hours, stable performance windows) so you can compare against known-good performance later.
            &lt;/div&gt;

            &lt;!-- Section 2 --&gt;
            &lt;h2 id=&quot;section2&quot;&gt;2. Active Session History (ASH): Real-Time Visibility into Database Activity&lt;/h2&gt;

            &lt;p&gt;If AWR is your historical lens, &lt;strong&gt;ASH (Active Session History)&lt;/strong&gt; is your real-time microscope. ASH captures sessions that are actively consuming database time—CPU, I/O waits, locks—approximately every second. By default, the last 1 hour of ASH data is kept in memory (in V$ACTIVE_SESSION_HISTORY). Older data is written to disk and merged into AWR snapshots.&lt;/p&gt;

            &lt;p&gt;&lt;strong&gt;Critical Detail:&lt;/strong&gt; ASH uses circular buffer sampling. Not every session is captured every second. Only &lt;strong&gt;one sample per 10 milliseconds of active session time&lt;/strong&gt; is recorded. In a 3,000-session database, this means roughly 300 samples per second. If a session runs for only 50 milliseconds, it might not appear in ASH at all. This is why SQL Monitor (which captures actual execution) is essential for short-lived queries.&lt;/p&gt;

            &lt;p&gt;When you have a performance problem happening right now, ASH is your first diagnostic tool. AWR report generation can take 5-10 minutes on large databases. ASH gives you answers in seconds and does not require waiting for the next snapshot.&lt;/p&gt;

            &lt;h3&gt;When to Use ASH Reports&lt;/h3&gt;

            &lt;table&gt;
                &lt;thead&gt;
                    &lt;tr&gt;
                        &lt;th&gt;Scenario&lt;/th&gt;
                        &lt;th&gt;Time Window&lt;/th&gt;
                        &lt;th&gt;Why ASH&lt;/th&gt;
                    &lt;/tr&gt;
                &lt;/thead&gt;
                &lt;tbody&gt;
                    &lt;tr&gt;
                        &lt;td&gt;Ongoing, real-time slowdown&lt;/td&gt;
                        &lt;td&gt;Last 5-60 minutes&lt;/td&gt;
                        &lt;td&gt;Immediate visibility; no delay&lt;/td&gt;
                    &lt;/tr&gt;
                    &lt;tr&gt;
                        &lt;td&gt;Batch job hangs suddenly&lt;/td&gt;
                        &lt;td&gt;Last 10 minutes&lt;/td&gt;
                        &lt;td&gt;Pinpoint exact hang condition&lt;/td&gt;
                    &lt;/tr&gt;
                    &lt;tr&gt;
                        &lt;td&gt;Session-level blocking locks&lt;/td&gt;
                        &lt;td&gt;Last 5-15 minutes&lt;/td&gt;
                        &lt;td&gt;See blocking session ID and wait chain&lt;/td&gt;
                    &lt;/tr&gt;
                    &lt;tr&gt;
                        &lt;td&gt;Spike in disk I/O&lt;/td&gt;
                        &lt;td&gt;Last 2-5 minutes&lt;/td&gt;
                        &lt;td&gt;Isolate which SQL is reading&lt;/td&gt;
                    &lt;/tr&gt;
                &lt;/tbody&gt;
            &lt;/table&gt;

            &lt;div class=&quot;code-container&quot;&gt;
                &lt;div class=&quot;code-header&quot;&gt;
                    &lt;span class=&quot;code-label&quot;&gt;SQL - Generate ASH Report from Command Line&lt;/span&gt;
                    &lt;button class=&quot;copy-btn&quot; onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;
                &lt;/div&gt;
                &lt;div class=&quot;code-block&quot;&gt;&lt;code&gt;-- Connect as SYSDBA
sqlplus / as sysdba

-- Generate ASH report for last 30 minutes (HTML format)
SQL&gt; @$ORACLE_HOME/rdbms/admin/ashrpt.sql

-- When prompted:
-- Enter report type: HTML
-- Enter begin time: -30 (for last 30 minutes, relative)
-- Press Enter for end time (defaults to now)
&lt;/code&gt;&lt;/div&gt;
            &lt;/div&gt;

            &lt;p&gt;The ASH report will provide:&lt;/p&gt;
            &lt;ul&gt;
                &lt;li&gt;&lt;strong&gt;Top Wait Events:&lt;/strong&gt; What sessions are waiting for (CPU, I/O, locks)&lt;/li&gt;
                &lt;li&gt;&lt;strong&gt;Top SQL:&lt;/strong&gt; Which SQL statements are consuming the most time&lt;/li&gt;
                &lt;li&gt;&lt;strong&gt;Top Sessions:&lt;/strong&gt; Which user or application is causing the load&lt;/li&gt;
                &lt;li&gt;&lt;strong&gt;Activity Timeline:&lt;/strong&gt; When the problem started and peaked&lt;/li&gt;
            &lt;/ul&gt;

            &lt;!-- Section 3 --&gt;
            &lt;h2 id=&quot;section3&quot;&gt;3. SQL Monitor: Drill Down into Individual SQL Statement Execution&lt;/h2&gt;

            &lt;p&gt;&lt;strong&gt;SQL Monitor&lt;/strong&gt; is your surgical instrument. While AWR and ASH tell you what is slow, SQL Monitor shows you why—down to the execution plan step, the number of rows processed, buffer gets, physical reads, and wait events per operation.&lt;/p&gt;

            &lt;p&gt;Starting in Oracle 19c, any SQL statement that &lt;strong&gt;executes for more than 5 seconds&lt;/strong&gt; is automatically monitored and retained for 24 hours. In Oracle 23ai, the monitoring threshold is now configurable, and AI-powered recommendations are automatically generated for problematic statements.&lt;/p&gt;

            &lt;p&gt;&lt;strong&gt;Key Advantage:&lt;/strong&gt; SQL Monitor captures &lt;strong&gt;actual execution statistics&lt;/strong&gt;, not estimated values. If a query runs for 45 seconds but the execution plan shows &quot;Estimated Rows=100, Actual Rows=10,000,000,&quot; that is immediate proof of a cardinality estimation problem—your first action should be gathering statistics, not rewriting SQL.&lt;/p&gt;

            &lt;h3&gt;Key Advantages of SQL Monitor&lt;/h3&gt;

            &lt;ul&gt;
                &lt;li&gt;&lt;strong&gt;Per-Operation Breakdown:&lt;/strong&gt; See CPU, I/O, and rows for each step in the execution plan&lt;/li&gt;
                &lt;li&gt;&lt;strong&gt;Actual vs. Estimated Rows:&lt;/strong&gt; Detect cardinality mismatches—a root cause of many bad plans&lt;/li&gt;
                &lt;li&gt;&lt;strong&gt;Parallel Execution Insights:&lt;/strong&gt; For parallel query statements, see load balancing and skew&lt;/li&gt;
                &lt;li&gt;&lt;strong&gt;Buffer Gets and Reads:&lt;/strong&gt; See logical and physical I/O at the operation level&lt;/li&gt;
                &lt;li&gt;&lt;strong&gt;Real-Time Monitoring:&lt;/strong&gt; Monitor a running query while it is still executing&lt;/li&gt;
            &lt;/ul&gt;

            &lt;div class=&quot;code-container&quot;&gt;
                &lt;div class=&quot;code-header&quot;&gt;
                    &lt;span class=&quot;code-label&quot;&gt;SQL - Generate SQL Monitor Report for a SQL Statement&lt;/span&gt;
                    &lt;button class=&quot;copy-btn&quot; onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;
                &lt;/div&gt;
                &lt;div class=&quot;code-block&quot;&gt;&lt;code&gt;-- Find SQL_ID of the statement (from AWR or ASH)
-- Example: Let us say SQL_ID is &#39;8h4kpnf0zqr2a&#39;

SET LONG 20000 LONGCHUNKSIZE 20000 PAGESIZE 0 
SET LINESIZE 1000 FEEDBACK OFF VERIFY OFF TRIMSPOOL ON
SET HEAD OFF ECHO OFF

-- Generate report to screen
SQL&gt; SELECT DBMS_SQLTUNE.REPORT_SQL_MONITOR(
       sql_id     =&gt; &#39;8h4kpnf0zqr2a&#39;,
       type       =&gt; &#39;HTML&#39;,
       report_level =&gt; &#39;ALL&#39;
     ) FROM DUAL;

-- Or save to file
SQL&gt; SPOOL /tmp/sql_monitor_report.html
SELECT DBMS_SQLTUNE.REPORT_SQL_MONITOR(
  sql_id =&gt; &#39;8h4kpnf0zqr2a&#39;,
  type   =&gt; &#39;HTML&#39;
) FROM DUAL;
SQL&gt; SPOOL OFF
&lt;/code&gt;&lt;/div&gt;
            &lt;/div&gt;

            &lt;p&gt;In Oracle 23ai, the &lt;strong&gt;DBMS_SQLDIAG.REPORT_SQL&lt;/strong&gt; function is even more powerful—it captures optimizer statistics, schema metadata, and configuration parameters alongside the execution plan.&lt;/p&gt;

            &lt;!-- Section 4 --&gt;
            &lt;h2 id=&quot;section4&quot;&gt;4. Reading the Top 5 Timed Events: Where to Focus Your Efforts&lt;/h2&gt;

            &lt;p&gt;This is the critical insight: &lt;strong&gt;Most performance issues fall into a handful of categories.&lt;/strong&gt; AWR highlights them as &quot;Top 5 Timed Events&quot;—the wait events consuming the most database time.&lt;/p&gt;

            &lt;h3&gt;The Most Common Top 5 Events (and What They Mean)&lt;/h3&gt;

            &lt;table&gt;
                &lt;thead&gt;
                    &lt;tr&gt;
                        &lt;th&gt;Wait Event&lt;/th&gt;
                        &lt;th&gt;What It Means&lt;/th&gt;
                        &lt;th&gt;Root Cause&lt;/th&gt;
                        &lt;th&gt;Diagnostic Query&lt;/th&gt;
                    &lt;/tr&gt;
                &lt;/thead&gt;
                &lt;tbody&gt;
                    &lt;tr&gt;
                        &lt;td&gt;&lt;strong&gt;CPU time&lt;/strong&gt;&lt;/td&gt;
                        &lt;td&gt;Actual CPU consumption (non-idle)&lt;/td&gt;
                        &lt;td&gt;Inefficient SQL, missing or bad indexes, poor execution plans, high recursive SQL&lt;/td&gt;
                        &lt;td&gt;&lt;code&gt;SELECT * FROM v$sqlarea WHERE executions &gt; 1000 ORDER BY cpu_time DESC;&lt;/code&gt;&lt;/td&gt;
                    &lt;/tr&gt;
                    &lt;tr&gt;
                        &lt;td&gt;&lt;strong&gt;db file sequential read&lt;/strong&gt;&lt;/td&gt;
                        &lt;td&gt;Single-block I/O (typically index reads)&lt;/td&gt;
                        &lt;td&gt;Too many index seeks, unselective indexes, high clustering factor&lt;/td&gt;
                        &lt;td&gt;&lt;code&gt;SELECT name FROM v$event_name WHERE name LIKE &#39;%sequential%&#39;;&lt;/code&gt;&lt;/td&gt;
                    &lt;/tr&gt;
                    &lt;tr&gt;
                        &lt;td&gt;&lt;strong&gt;db file scattered read&lt;/strong&gt;&lt;/td&gt;
                        &lt;td&gt;Multi-block I/O (full table or index scans)&lt;/td&gt;
                        &lt;td&gt;Full table scans, missing partition pruning, undersized indexes&lt;/td&gt;
                        &lt;td&gt;&lt;code&gt;SELECT * FROM dba_hist_event_name WHERE event_name LIKE &#39;%scattered%&#39;;&lt;/code&gt;&lt;/td&gt;
                    &lt;/tr&gt;
                    &lt;tr&gt;
                        &lt;td&gt;&lt;strong&gt;log file sync&lt;/strong&gt;&lt;/td&gt;
                        &lt;td&gt;Waiting for redo log write to disk (commit and LGWR synchronization)&lt;/td&gt;
                        &lt;td&gt;Undersized redo logs, slow disk I/O, high commit frequency, inadequate redo log groups&lt;/td&gt;
                        &lt;td&gt;&lt;code&gt;SELECT group#, thread#, bytes/1024/1024 MB FROM v$logfile;&lt;/code&gt;&lt;/td&gt;
                    &lt;/tr&gt;
                    &lt;tr&gt;
                        &lt;td&gt;&lt;strong&gt;enq: TX - row lock contention&lt;/strong&gt;&lt;/td&gt;
                        &lt;td&gt;Row-level locking (transaction enqueue)&lt;/td&gt;
                        &lt;td&gt;Concurrent DML on same rows, missing indexes on foreign key columns, ITL exhaustion&lt;/td&gt;
                        &lt;td&gt;&lt;code&gt;SELECT blocking_session, sid FROM v$session WHERE blocking_session IS NOT NULL;&lt;/code&gt;&lt;/td&gt;
                    &lt;/tr&gt;
                &lt;/tbody&gt;
            &lt;/table&gt;

            &lt;div class=&quot;best-practice&quot;&gt;
                &lt;strong&gt;Pro Tip:&lt;/strong&gt; The Top 5 Timed Events tells you where &lt;strong&gt;60-75% of database time&lt;/strong&gt; is spent. Focus there first. A 20% improvement on the first event equals 12-15% overall database speedup. Optimizing event number 8 will not move the needle.
            &lt;/div&gt;

            &lt;!-- Section 5 --&gt;
            &lt;h2 id=&quot;section5&quot;&gt;5. Practical Workflow: From Problem Detection to Root Cause Analysis&lt;/h2&gt;

            &lt;h3&gt;The 4-Step Performance Troubleshooting Framework&lt;/h3&gt;

            &lt;p&gt;Here is the systematic approach I use in every production incident:&lt;/p&gt;

            &lt;h3&gt;Step 1: Confirm the Problem and Set the Time Window&lt;/h3&gt;
            &lt;ul&gt;
                &lt;li&gt;When did the problem start? (exact time from user or monitoring tool)&lt;/li&gt;
                &lt;li&gt;Is it still happening now?&lt;/li&gt;
                &lt;li&gt;What changed? (new job, code release, data growth)&lt;/li&gt;
                &lt;li&gt;Identify AWR snapshots for the affected period&lt;/li&gt;
            &lt;/ul&gt;

            &lt;div class=&quot;code-container&quot;&gt;
                &lt;div class=&quot;code-header&quot;&gt;
                    &lt;span class=&quot;code-label&quot;&gt;SQL - Find AWR Snapshots for a Time Window&lt;/span&gt;
                    &lt;button class=&quot;copy-btn&quot; onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;
                &lt;/div&gt;
                &lt;div class=&quot;code-block&quot;&gt;&lt;code&gt;-- Real production scenario: Problem reported at 03:15 AM
-- Find snapshots bracketing the incident window

SQL&gt; SELECT snap_id, 
     TO_CHAR(begin_interval_time, &#39;DD-MON-YYYY HH24:MI&#39;) begin_time,
     TO_CHAR(end_interval_time, &#39;DD-MON-YYYY HH24:MI&#39;) end_time,
     ROUND((end_interval_time - begin_interval_time)*24*60, 2) 
          duration_min
     FROM dba_hist_snapshot
     WHERE begin_interval_time &gt;= TRUNC(SYSDATE) - 1
     AND begin_interval_time &lt;= SYSDATE
     ORDER BY snap_id DESC;

-- Output example (3-node RAC):
-- SNAP_ID  BEGIN_TIME             END_TIME               DURATION_MIN
-- 3156     10-MAR-26 03:00:00    10-MAR-26 04:00:00    60.02
-- 3155     10-MAR-26 02:00:00    10-MAR-26 03:00:00    59.98
-- 3154     10-MAR-26 01:00:00    10-MAR-26 02:00:00    60.01
&lt;/code&gt;&lt;/div&gt;
            &lt;/div&gt;

            &lt;h3&gt;Step 2: Generate AWR Report and Review Top 5 Timed Events&lt;/h3&gt;

            &lt;div class=&quot;code-container&quot;&gt;
                &lt;div class=&quot;code-header&quot;&gt;
                    &lt;span class=&quot;code-label&quot;&gt;SQL - Generate AWR Report (Specific Snapshot Range)&lt;/span&gt;
                    &lt;button class=&quot;copy-btn&quot; onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;
                &lt;/div&gt;
                &lt;div class=&quot;code-block&quot;&gt;&lt;code&gt;-- Connect as SYSDBA to any RAC instance
sqlplus / as sysdba

-- For single-instance database:
SQL&gt; @$ORACLE_HOME/rdbms/admin/awrrpt.sql

-- When prompted by awrrpt.sql:
-- Report type: Enter &#39;html&#39; (default is &#39;text&#39;)
-- Begin snap ID: 3154  (start of problem window)
-- End snap ID: 3156   (end of problem window)

-- For RAC databases, generate cluster-wide report:
SQL&gt; @$ORACLE_HOME/rdbms/admin/awrgrpt.sql

-- Note: AWR report generation locks in several DBA_HIST tables
-- On 8.5TB or larger databases, this can consume 20-40GB 
-- of temporary space and take 10-15 minutes.
-- Run during low-activity windows.
&lt;/code&gt;&lt;/div&gt;
            &lt;/div&gt;

            &lt;p&gt;&lt;strong&gt;What to Look For in the AWR Report:&lt;/strong&gt;&lt;/p&gt;
            &lt;ul&gt;
                &lt;li&gt;&lt;strong&gt;&quot;Top 5 Timed Events&quot;&lt;/strong&gt; (Section 1) - Where your database spent most time&lt;/li&gt;
                &lt;li&gt;&lt;strong&gt;&quot;Load Profile&quot;&lt;/strong&gt; - Transactions per second, logical reads per second, physical reads per second&lt;/li&gt;
                &lt;li&gt;&lt;strong&gt;&quot;Top 20 Foreground Events by Total Wait Time&quot;&lt;/strong&gt; - Full wait event breakdown&lt;/li&gt;
                &lt;li&gt;&lt;strong&gt;&quot;Top SQL by Elapsed Time&quot;&lt;/strong&gt; - Which statements consumed most time&lt;/li&gt;
                &lt;li&gt;&lt;strong&gt;&quot;Instance Activity Stats&quot;&lt;/strong&gt; - Buffer cache hit ratio, parse ratio, redo allocation&lt;/li&gt;
                &lt;li&gt;&lt;strong&gt;&quot;Cache Size Advisory&quot;&lt;/strong&gt; - Whether increasing SGA would help&lt;/li&gt;
            &lt;/ul&gt;

            &lt;h3&gt;Step 3: Identify the Culprit SQL&lt;/h3&gt;

            &lt;p&gt;AWR reports include a &quot;Top SQL&quot; section. Look for:&lt;/p&gt;
            &lt;ul&gt;
                &lt;li&gt;&lt;strong&gt;Top SQL by Elapsed Time:&lt;/strong&gt; Most total time spent&lt;/li&gt;
                &lt;li&gt;&lt;strong&gt;Top SQL by CPU Time:&lt;/strong&gt; Most CPU consumed (CPU problem)&lt;/li&gt;
                &lt;li&gt;&lt;strong&gt;Top SQL by Physical Reads:&lt;/strong&gt; Most disk I/O (I/O problem)&lt;/li&gt;
            &lt;/ul&gt;

            &lt;p&gt;Grab the SQL_ID from the report. Then generate a SQL Monitor report for that statement.&lt;/p&gt;

            &lt;h3&gt;Step 4: Drill Into SQL Monitor for the Detailed Execution Plan&lt;/h3&gt;

            &lt;p&gt;SQL Monitor will show you:&lt;/p&gt;
            &lt;ul&gt;
                &lt;li&gt;Which operation in the plan is slow&lt;/li&gt;
                &lt;li&gt;Actual rows versus estimated rows (cardinality mismatch?)&lt;/li&gt;
                &lt;li&gt;Buffer gets and reads per operation&lt;/li&gt;
                &lt;li&gt;For parallel statements: work distribution and skew&lt;/li&gt;
            &lt;/ul&gt;

            &lt;p&gt;If you see &quot;estimated rows = 1,000 but actual rows = 1,000,000,&quot; that is a cardinality problem. The optimizer made a bad decision based on stale statistics. Solution: use ANALYZE TABLE with COMPUTE STATISTICS or GATHER_TABLE_STATS.&lt;/p&gt;

            &lt;!-- Section 6 --&gt;
            &lt;h2 id=&quot;section6&quot;&gt;6. Advanced Tuning Strategies: Wait Events, Lock Analysis, and I/O Optimization&lt;/h2&gt;

            &lt;h3&gt;Diagnosing Specific Wait Events&lt;/h3&gt;

            &lt;p&gt;The Top 5 Timed Events tells you what is slow. Use V$ views to understand why.&lt;/p&gt;

            &lt;h3&gt;For &quot;db file sequential read&quot; (Index I/O Problem)&lt;/h3&gt;

            &lt;div class=&quot;code-container&quot;&gt;
                &lt;div class=&quot;code-header&quot;&gt;
                    &lt;span class=&quot;code-label&quot;&gt;SQL - Analyze Index Performance&lt;/span&gt;
                    &lt;button class=&quot;copy-btn&quot; onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;
                &lt;/div&gt;
                &lt;div class=&quot;code-block&quot;&gt;&lt;code&gt;-- Find the most used tables
SQL&gt; SELECT owner, table_name, num_rows
     FROM dba_tables
     WHERE owner NOT IN (&#39;SYS&#39;, &#39;SYSTEM&#39;)
     ORDER BY num_rows DESC;

-- Check existing indexes on the table
SQL&gt; SELECT index_name, column_name, column_position
     FROM dba_ind_columns
     WHERE table_name = &#39;YOUR_TABLE&#39;
     ORDER BY index_name, column_position;

-- Look for missing indexes in slow SQL
-- If your WHERE clause is on columns A and B:
-- CREATE INDEX idx_name ON table_name(A, B);

-- Verify index is being used
SQL&gt; SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY_CURSOR
     (&#39;sql_id&#39;, 0, &#39;ALLSTATS&#39;));
&lt;/code&gt;&lt;/div&gt;
            &lt;/div&gt;

            &lt;h3&gt;For &quot;enq: TX - row lock contention&quot; (Locking Problem)&lt;/h3&gt;

            &lt;p&gt;Row lock contention in RAC is particularly complex due to cross-instance deadlock detection. Distinguish between:&lt;/p&gt;
            &lt;ul&gt;
                &lt;li&gt;&lt;strong&gt;Row-level locks:&lt;/strong&gt; Two sessions updating the same row (wait event: &quot;enq: TX&quot;)&lt;/li&gt;
                &lt;li&gt;&lt;strong&gt;ITL exhaustion:&lt;/strong&gt; Transaction list too small (default 2-4 entries per block), causes &quot;buffer busy waits&quot;&lt;/li&gt;
                &lt;li&gt;&lt;strong&gt;Global locks (RAC):&lt;/strong&gt; Cross-instance locks (wait event: &quot;global lock&quot;)&lt;/li&gt;
            &lt;/ul&gt;

            &lt;div class=&quot;code-container&quot;&gt;
                &lt;div class=&quot;code-header&quot;&gt;
                    &lt;span class=&quot;code-label&quot;&gt;SQL - Comprehensive Lock Analysis (Single Instance and RAC)&lt;/span&gt;
                    &lt;button class=&quot;copy-btn&quot; onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;
                &lt;/div&gt;
                &lt;div class=&quot;code-block&quot;&gt;&lt;code&gt;-- Step 1: Find blocking sessions
SQL&gt; SELECT blocking_session, blocking_inst_id, sid, serial#, 
            username, sql_id, event, seconds_in_wait
     FROM v$session
     WHERE blocking_session IS NOT NULL
     ORDER BY blocking_session;

-- Step 2: Check for ITL exhaustion (common cause)
SQL&gt; SELECT table_name, pct_free, ini_trans, max_trans
     FROM dba_tables
     WHERE table_name = &#39;ORDERS&#39;;

-- Step 3: If ini_trans is low, increase it 
-- (requires table rebuild)
-- ALTER TABLE orders MOVE PCTFREE 20 INITRANS 10;
-- ALTER TABLE orders ENABLE ROW MOVEMENT;
&lt;/code&gt;&lt;/div&gt;
            &lt;/div&gt;

            &lt;h3&gt;For &quot;log file sync&quot; (Redo and Commit Problem)&lt;/h3&gt;

            &lt;div class=&quot;code-container&quot;&gt;
                &lt;div class=&quot;code-header&quot;&gt;
                    &lt;span class=&quot;code-label&quot;&gt;SQL - Check Redo Log Performance&lt;/span&gt;
                    &lt;button class=&quot;copy-btn&quot; onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;
                &lt;/div&gt;
                &lt;div class=&quot;code-block&quot;&gt;&lt;code&gt;-- Check redo log file sizes
SQL&gt; SELECT group#, member, bytes/1024/1024 AS size_mb
     FROM v$logfile
     ORDER BY group#;

-- If logs are small (less than 500MB), increase them
SQL&gt; ALTER DATABASE ADD LOGFILE GROUP 4 
     (&#39;/path/to/redo04.log&#39;) SIZE 1000M;

-- Monitor redo generation rate
SQL&gt; SELECT inst_id, stat_name, value
     FROM gv$sysstat
     WHERE stat_name IN (&#39;redo size&#39;, 
     &#39;redo log space requests&#39;);
&lt;/code&gt;&lt;/div&gt;
            &lt;/div&gt;

            &lt;!-- Section 7 --&gt;
            &lt;h2 id=&quot;section7&quot;&gt;7. Common Pitfalls and Anti-Patterns in Performance Tuning&lt;/h2&gt;

            &lt;h3&gt;Anti-Pattern 1: Tuning by Hunches, Not Data&lt;/h3&gt;

            &lt;div class=&quot;warning-note&quot;&gt;
                &lt;strong&gt;Wrong:&lt;/strong&gt; &quot;I think we need more memory. Let us increase SGA_TARGET.&quot;
            &lt;/div&gt;

            &lt;div class=&quot;best-practice&quot;&gt;
                &lt;strong&gt;Right:&lt;/strong&gt; Check the AWR report. Is the buffer cache hit ratio low (less than 95%)? Are you seeing &quot;free buffer waits&quot; in the top events? Only then increase memory.
            &lt;/div&gt;

            &lt;h3&gt;Anti-Pattern 2: Not Checking Cardinality Before Rewriting SQL&lt;/h3&gt;

            &lt;div class=&quot;warning-note&quot;&gt;
                &lt;strong&gt;Wrong:&lt;/strong&gt; Spend 2 weeks rewriting a query that is using a bad execution plan due to stale statistics.
            &lt;/div&gt;

            &lt;div class=&quot;best-practice&quot;&gt;
                &lt;strong&gt;Right:&lt;/strong&gt; Check &quot;actual rows&quot; versus &quot;estimated rows&quot; in SQL Monitor first. If they differ by orders of magnitude, gather statistics before rewriting.
            &lt;/div&gt;

            &lt;h3&gt;Anti-Pattern 3: Creating Indexes Without Testing&lt;/h3&gt;

            &lt;div class=&quot;warning-note&quot;&gt;
                &lt;strong&gt;Wrong:&lt;/strong&gt; Add an index to production without testing its impact on inserts, updates, and maintenance windows.
            &lt;/div&gt;

            &lt;div class=&quot;best-practice&quot;&gt;
                &lt;strong&gt;Right:&lt;/strong&gt; Test on a production-like environment first. Verify the index actually improves query performance and does not slow down DML.
            &lt;/div&gt;

            &lt;h3&gt;Anti-Pattern 4: Ignoring Baseline Performance&lt;/h3&gt;

            &lt;div class=&quot;warning-note&quot;&gt;
                &lt;strong&gt;Wrong:&lt;/strong&gt; Claim a query is slow without knowing what &quot;normal&quot; looks like.
            &lt;/div&gt;

            &lt;div class=&quot;best-practice&quot;&gt;
                &lt;strong&gt;Right:&lt;/strong&gt; Create AWR baselines during stable periods. Compare &quot;slow&quot; periods to baselines to quantify degradation.
            &lt;/div&gt;

            &lt;h3&gt;Anti-Pattern 5: Ignoring Interconnect Latency (RAC Databases)&lt;/h3&gt;

            &lt;div class=&quot;warning-note&quot;&gt;
                &lt;strong&gt;Wrong:&lt;/strong&gt; Assume high &quot;global cache cr request&quot; wait events are always application problems.
            &lt;/div&gt;

            &lt;div class=&quot;best-practice&quot;&gt;
                &lt;strong&gt;Right:&lt;/strong&gt; For RAC, check interconnect latency: &lt;code&gt;SELECT wait_count, time_waited FROM v$event_name WHERE name = &#39;gc cr request&#39;;&lt;/code&gt; If time_waited divided by wait_count is greater than 5 milliseconds per request, investigate network connectivity.
            &lt;/div&gt;

            &lt;!-- Section 8 --&gt;
            &lt;h2 id=&quot;section8&quot;&gt;8. Automation and Best Practices for Ongoing Performance Management&lt;/h2&gt;

            &lt;h3&gt;Set Up Automated Baseline Comparisons&lt;/h3&gt;

            &lt;div class=&quot;code-container&quot;&gt;
                &lt;div class=&quot;code-header&quot;&gt;
                    &lt;span class=&quot;code-label&quot;&gt;SQL - Create and Compare AWR Baselines&lt;/span&gt;
                    &lt;button class=&quot;copy-btn&quot; onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;
                &lt;/div&gt;
                &lt;div class=&quot;code-block&quot;&gt;&lt;code&gt;-- Create a baseline for a known-good period 
-- (example: 8 AM - 10 AM off-peak)
SQL&gt; BEGIN
  DBMS_WORKLOAD_REPOSITORY.create_baseline(
    start_snap_id =&gt; 12340,  -- Snapshot at 8:00 AM
    end_snap_id   =&gt; 12341,  -- Snapshot at 9:00 AM
    baseline_name =&gt; &#39;BASELINE_OFFPEAK&#39;
  );
END;
/

-- Later, when something goes slow, compare against baseline
SQL&gt; SELECT DBMS_WORKLOAD_REPOSITORY.compare_baseline_awr(
       db_name       =&gt; &#39;PROD_DB&#39;,
       baseline_name =&gt; &#39;BASELINE_OFFPEAK&#39;,
       snap_id1      =&gt; 12340,
       snap_id2      =&gt; 12350
     ) FROM DUAL;
&lt;/code&gt;&lt;/div&gt;
            &lt;/div&gt;

            &lt;h3&gt;Monitor AWR Regularly (Monthly)&lt;/h3&gt;

            &lt;ul&gt;
                &lt;li&gt;Set up a cron job to generate AWR reports weekly&lt;/li&gt;
                &lt;li&gt;Watch for trending: Is CPU increasing? Disk I/O? Memory pressure?&lt;/li&gt;
                &lt;li&gt;Act early. Do not wait for a crisis.&lt;/li&gt;
            &lt;/ul&gt;

            &lt;h3&gt;Document Your Findings&lt;/h3&gt;

            &lt;p&gt;Keep a log of performance issues: time, root cause, fix applied, result. Over time, you will see patterns. If row lock contention is your issue number 2 three times this year, that is a signal to redesign that batch process.&lt;/p&gt;

            &lt;!-- Section 9 --&gt;
            &lt;h2 id=&quot;section9&quot;&gt;9. FAQ: Real Questions from Production DBAs&lt;/h2&gt;

            &lt;div class=&quot;faq-item&quot;&gt;
                &lt;div class=&quot;faq-question&quot;&gt;Q: How do I explain performance tuning to non-technical managers?&lt;/div&gt;
                &lt;div class=&quot;faq-answer&quot;&gt;Tell them this: &quot;Our database is doing 1,000 things per second, but 60% of the time is wasted on inefficient index lookups. By creating the right indexes and fixing the SQL, we can cut that to 20% waste. That is like getting a 3x speedup for free.&quot; Show them the AWR &quot;Top 5 Timed Events&quot; as proof.&lt;/div&gt;
            &lt;/div&gt;

            &lt;div class=&quot;faq-item&quot;&gt;
                &lt;div class=&quot;faq-question&quot;&gt;Q: When should I enable extended statistics or histograms?&lt;/div&gt;
                &lt;div class=&quot;faq-answer&quot;&gt;If a query has a cardinality mismatch (actual rows not equal to estimated rows by 10x or more), check the SQL Monitor. If the columns involved are correlated or have non-uniform distribution, enable column group statistics: &lt;code&gt;DBMS_STATS.CREATE_EXTENDED_STATS(table_name, &#39;(col1,col2)&#39;);&lt;/code&gt;&lt;/div&gt;
            &lt;/div&gt;

            &lt;div class=&quot;faq-item&quot;&gt;
                &lt;div class=&quot;faq-question&quot;&gt;Q: Can I use SQL Tuning Advisor on every slow query?&lt;/div&gt;
                &lt;div class=&quot;faq-answer&quot;&gt;SQL Tuning Advisor is good for complex queries where you do not know what is wrong. But it is not a substitute for human judgment. Always review its recommendations. It might suggest index creation when the real issue is a join order problem. Use it as a starting point, not gospel.&lt;/div&gt;
            &lt;/div&gt;

            &lt;div class=&quot;faq-item&quot;&gt;
                &lt;div class=&quot;faq-question&quot;&gt;Q: How often should I gather statistics?&lt;/div&gt;
                &lt;div class=&quot;faq-answer&quot;&gt;For OLTP databases: nightly or weekly. For data warehouses: after major loads. For stable databases: monthly. Oracle 19c and later has auto-statistics gathering by default during maintenance windows. Check if it is working: &lt;code&gt;SELECT * FROM dba_scheduler_jobs WHERE job_name LIKE &#39;%GATHER_STATS%&#39;;&lt;/code&gt;&lt;/div&gt;
            &lt;/div&gt;

            &lt;div class=&quot;faq-item&quot;&gt;
                &lt;div class=&quot;faq-question&quot;&gt;Q: Is it okay to use DBMS_STATS.GATHER_TABLE_STATS for very large tables?&lt;/div&gt;
                &lt;div class=&quot;faq-answer&quot;&gt;Yes, if you use sampling. For a 1TB table, sampling 10% is usually accurate enough: &lt;code&gt;DBMS_STATS.GATHER_TABLE_STATS(ownname=&gt;&#39;SCHEMA&#39;, tabname=&gt;&#39;LARGE_TABLE&#39;, estimate_percent=&gt;10);&lt;/code&gt;&lt;/div&gt;
            &lt;/div&gt;

            &lt;!-- Section 10 --&gt;
            &lt;div class=&quot;related-reading&quot;&gt;
                &lt;h2 id=&quot;section10&quot;&gt;10. Related Reading from Real Production Systems&lt;/h2&gt;

                &lt;p&gt;If you found this guide valuable, the following articles will deepen your understanding of Oracle performance engineering and real-world tuning scenarios:&lt;/p&gt;

                &lt;ul&gt;
                    &lt;li&gt;
                        &lt;a href=&quot;https://chetanyadav.com/blog/oracle-awr-reports-analyzing-performance&quot; target=&quot;_blank&quot;&gt;How to Read and Interpret AWR Reports: A DBA Complete Guide to Performance Diagnostics&lt;/a&gt;
                        &lt;span class=&quot;why-matters&quot;&gt;Why it matters: Takes you deeper into AWR report sections, explaining each metric and how to act on findings.&lt;/span&gt;
                    &lt;/li&gt;
                    &lt;li&gt;
                        &lt;a href=&quot;https://chetanyadav.com/blog/oracle-index-tuning-strategies&quot; target=&quot;_blank&quot;&gt;Oracle Index Tuning: From Full Table Scans to Optimal Execution Plans&lt;/a&gt;
                        &lt;span class=&quot;why-matters&quot;&gt;Why it matters: Shows practical index creation strategies and how to avoid over-indexing, which is a common performance pitfall.&lt;/span&gt;
                    &lt;/li&gt;
                    &lt;li&gt;
                        &lt;a href=&quot;https://chetanyadav.com/blog/oracle-locking-contention-solutions&quot; target=&quot;_blank&quot;&gt;Solving Row Lock Contention in Oracle: Real-World Solutions from Production&lt;/a&gt;
                        &lt;span class=&quot;why-matters&quot;&gt;Why it matters: Covers the &quot;enq: TX&quot; locking scenarios in depth with code examples and batch strategy redesigns.&lt;/span&gt;
                    &lt;/li&gt;
                    &lt;li&gt;
                        &lt;a href=&quot;https://chetanyadav.com/blog/oracle-cardinality-estimation-fix&quot; target=&quot;_blank&quot;&gt;Fixing Cardinality Estimation: Histograms, Extended Stats, and Dynamic Sampling&lt;/a&gt;
                        &lt;span class=&quot;why-matters&quot;&gt;Why it matters: When SQL Monitor shows 1M actual rows versus 100 estimated rows, this guide shows how to fix the root cause.&lt;/span&gt;
                    &lt;/li&gt;
                    &lt;li&gt;
                        &lt;a href=&quot;https://chetanyadav.com/blog/oracle-23ai-performance-features&quot; target=&quot;_blank&quot;&gt;Oracle 23ai New Performance Features: AI-Driven Tuning and Autonomous Analytics&lt;/a&gt;
                        &lt;span class=&quot;why-matters&quot;&gt;Why it matters: Explores the next generation of diagnostic tools, including AI-powered recommendations in 23ai.&lt;/span&gt;
                    &lt;/li&gt;
                &lt;/ul&gt;
            &lt;/div&gt;

            &lt;!-- Licensing Section --&gt;
            &lt;div style=&quot;background: #f0f4c3; border-left: 4px solid #827717; padding: 20px; margin: 30px 0; border-radius: 4px;&quot;&gt;
                &lt;h3 style=&quot;margin-top: 0; color: #827717;&quot;&gt;Licensing Compliance and Free Alternatives&lt;/h3&gt;
                &lt;p&gt;&lt;strong&gt;Important Note:&lt;/strong&gt; AWR, ASH, and SQL Monitor are &lt;strong&gt;licensed features within Oracle Diagnostics Pack&lt;/strong&gt; and require separate licensing from the base Oracle Database.&lt;/p&gt;
                
                &lt;h4&gt;If You Have Diagnostics Pack Licensed:&lt;/h4&gt;
                &lt;ul style=&quot;margin: 10px 0;&quot;&gt;
                    &lt;li&gt;AWR, ASH, SQL Monitor, SQL Tuning Advisor - all available&lt;/li&gt;
                    &lt;li&gt;No additional configuration required&lt;/li&gt;
                    &lt;li&gt;Fully supported on Oracle 19c and 23ai&lt;/li&gt;
                &lt;/ul&gt;
                
                &lt;h4&gt;If You Do Not Have Diagnostics Pack:&lt;/h4&gt;
                &lt;ul style=&quot;margin: 10px 0;&quot;&gt;
                    &lt;li&gt;&lt;strong&gt;Statspack (Free):&lt;/strong&gt; Legacy tool, similar to AWR but without licensing restrictions. Use: &lt;code&gt;@$ORACLE_HOME/rdbms/admin/spcreate.sql&lt;/code&gt;&lt;/li&gt;
                    &lt;li&gt;&lt;strong&gt;Dynamic Performance Views (Free):&lt;/strong&gt; Included with base database. Use V$SYSSTAT, V$SESSION, V$SQLAREA, V$SESSION_WAIT for real-time diagnostics&lt;/li&gt;
                    &lt;li&gt;&lt;strong&gt;Execution Plans (Free):&lt;/strong&gt; Use &lt;code&gt;DBMS_XPLAN.DISPLAY_CURSOR()&lt;/code&gt; or &lt;code&gt;EXPLAIN PLAN FOR&lt;/code&gt; to analyze bad plans&lt;/li&gt;
                    &lt;li&gt;&lt;strong&gt;Oracle 23ai Automatic Optimizer Stats (Caution):&lt;/strong&gt; Separate license, verify before enabling&lt;/li&gt;
                &lt;/ul&gt;
            &lt;/div&gt;

            &lt;!-- About the Author --&gt;
            &lt;div class=&quot;about-author&quot;&gt;
                &lt;h2&gt;About the Author&lt;/h2&gt;
                &lt;div class=&quot;author-name&quot;&gt;Chetan Yadav&lt;/div&gt;
                &lt;div class=&quot;author-title&quot;&gt;Senior Oracle, PostgreSQL, MySQL, and Cloud DBA with 14+ years of hands-on experience&lt;/div&gt;
                &lt;div class=&quot;author-bio&quot;&gt;
                    &lt;p&gt;Chetan is a &lt;strong&gt;Senior Database Administrator&lt;/strong&gt; with &lt;strong&gt;14+ years&lt;/strong&gt; of real-world expertise in Oracle, PostgreSQL, MySQL, and cloud database systems. He specializes in &lt;strong&gt;performance engineering, infrastructure scaling, and database reliability&lt;/strong&gt;—not theoretical documentation, but battle-tested solutions from production environments.&lt;/p&gt;
                    &lt;p&gt;Over his career, Chetan has debugged thousands of performance issues, migrated petabyte-scale databases to the cloud, built high-availability clusters, and mentored junior DBAs. He believes that &lt;strong&gt;performance tuning is an art backed by science&lt;/strong&gt;—and that every DBA should understand the tools, not just memorize the commands.&lt;/p&gt;
                    &lt;p&gt;Through the &lt;strong&gt;LevelUp Careers Initiative&lt;/strong&gt;, Chetan is committed to &lt;strong&gt;elevating the DBA profession&lt;/strong&gt; by sharing real-world knowledge, career guidance, and practical strategies that actually work in production. This blog focuses on &lt;strong&gt;real-world DBA problems, career growth, and practical learning&lt;/strong&gt;—not theoretical documentation.&lt;/p&gt;
                &lt;/div&gt;
                &lt;div class=&quot;social-links&quot;&gt;
                    &lt;a href=&quot;https://www.linkedin.com/in/chetanyadavvds/&quot; target=&quot;_blank&quot;&gt;LinkedIn&lt;/a&gt;
                    &lt;a href=&quot;https://www.youtube.com/@levelup_careers&quot; target=&quot;_blank&quot;&gt;YouTube&lt;/a&gt;
                    &lt;a href=&quot;https://www.instagram.com/levelup_careers/&quot; target=&quot;_blank&quot;&gt;Instagram&lt;/a&gt;
                    &lt;a href=&quot;https://x.com/home&quot; target=&quot;_blank&quot;&gt;Twitter (X)&lt;/a&gt;
                    &lt;a href=&quot;https://www.facebook.com/oracledbainfo/&quot; target=&quot;_blank&quot;&gt;Facebook&lt;/a&gt;
                &lt;/div&gt;
            &lt;/div&gt;

            &lt;!-- Post Footer --&gt;
            &lt;div class=&quot;post-footer&quot;&gt;
                &lt;div class=&quot;post-meta&quot;&gt;
                    &lt;strong&gt;by &lt;a href=&quot;https://chetanyadav.com&quot; style=&quot;color: #1a73e8;&quot;&gt;Chetan Yadav&lt;/a&gt;&lt;/strong&gt; | 
                    Tuesday, March 10, 2026
                &lt;/div&gt;

                &lt;div class=&quot;share-section&quot;&gt;
                    &lt;strong&gt;Share this post:&lt;/strong&gt;
                    &lt;div class=&quot;share-links&quot;&gt;
                        &lt;a href=&quot;/cdn-cgi/l/email-protection#98a7ebedfaf2fdfbeca5d7eaf9fbf4fdb8c8fdeafef7eaf5f9f6fbfdb8ddf6fff1f6fdfdeaf1f6ffb8dfedf1fcfda2b8d9cfcab4b8d9cbd0b8f9f6fcb8cbc9d4b8d5f7f6f1ecf7eab8f1f6b8a9a1fbb8f9f6fcb8aaabf9f1&quot;&gt;Email&lt;/a&gt;
                        &lt;a href=&quot;https://www.linkedin.com/sharing/share-offsite/?url=https://chetanyadav.com/blog/oracle-performance-engineering&quot;&gt;LinkedIn&lt;/a&gt;
                        &lt;a href=&quot;https://twitter.com/intent/tweet?text=Oracle Performance Engineering Guide: AWR, ASH and SQL Monitor in 19c and 23ai&quot;&gt;Twitter&lt;/a&gt;
                        &lt;a href=&quot;https://www.facebook.com/sharer/sharer.php?u=https://chetanyadav.com/blog/oracle-performance-engineering&quot;&gt;Facebook&lt;/a&gt;
                    &lt;/div&gt;
                &lt;/div&gt;

                &lt;div class=&quot;tags&quot;&gt;
                    &lt;strong&gt;Tags:&lt;/strong&gt;
                    &lt;a href=&quot;/blog/tag/oracle-performance-tuning&quot;&gt;Oracle Performance Tuning&lt;/a&gt;
                    &lt;a href=&quot;/blog/tag/awr&quot;&gt;AWR&lt;/a&gt;
                    &lt;a href=&quot;/blog/tag/ash&quot;&gt;ASH&lt;/a&gt;
                    &lt;a href=&quot;/blog/tag/sql-monitor&quot;&gt;SQL Monitor&lt;/a&gt;
                    &lt;a href=&quot;/blog/tag/oracle-19c&quot;&gt;Oracle 19c&lt;/a&gt;
                    &lt;a href=&quot;/blog/tag/oracle-23ai&quot;&gt;Oracle 23ai&lt;/a&gt;
                    &lt;a href=&quot;/blog/tag/database-administration&quot;&gt;Database Administration&lt;/a&gt;
                &lt;/div&gt;
            &lt;/div&gt;
        &lt;/div&gt;
    &lt;/div&gt;

    &lt;!-- JavaScript for Copy Button --&gt;
    &lt;script data-cfasync=&quot;false&quot; src=&quot;/cdn-cgi/scripts/5c5dd728/cloudflare-static/email-decode.min.js&quot;&gt;&lt;/script&gt;&lt;script&gt;
        function copyCode(button) {
            const codeContainer = button.closest(&#39;.code-container&#39;);
            const codeBlock = codeContainer.querySelector(&#39;.code-block&#39;);
            const text = codeBlock.innerText;
            const textarea = document.createElement(&#39;textarea&#39;);
            textarea.value = text;
            document.body.appendChild(textarea);
            textarea.select();
            document.execCommand(&#39;copy&#39;);
            document.body.removeChild(textarea);
            const originalText = button.innerText;
            button.innerText = &#39;Copied!&#39;;
            button.</content><link rel='replies' type='application/atom+xml' href='http://chetanyadavds.blogspot.com/feeds/3614043153839917547/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://chetanyadavds.blogspot.com/2026/03/oracle-performance-engineering-awr-ash-sql-monitor-19c-23ai.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/436196721812840248/posts/default/3614043153839917547'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/436196721812840248/posts/default/3614043153839917547'/><link rel='alternate' type='text/html' href='http://chetanyadavds.blogspot.com/2026/03/oracle-performance-engineering-awr-ash-sql-monitor-19c-23ai.html' title='Oracle Performance Engineering Guide: AWR, ASH and SQL Monitor in 19c and 23ai'/><author><name>Chetan Yadav</name><uri>http://www.blogger.com/profile/02557500437758632199</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiE0TgifWM4l1b3sy_cK2y41bpqyfY1U25-p5IBKkSg8pJLFRvjYr_kF7W_MgsYdc21DutWF9H6qlShQDQspQLbZEQ5CSUA51Wp6Mh9l5Ygd4NPSuQyqwSMrKitCWwSLr0oHBg9TGjxAvAM7TTkkehHLL1MFWg0wSb31CxywQxIokg9pg/s1600/IMG-20251013-WA0038.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-436196721812840248.post-3569802153719858744</id><published>2026-02-26T15:30:00.001+05:30</published><updated>2026-02-26T15:30:00.111+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="AI Features"/><category scheme="http://www.blogger.com/atom/ns#" term="AI SQL Tuning"/><category scheme="http://www.blogger.com/atom/ns#" term="Database Automation"/><category scheme="http://www.blogger.com/atom/ns#" term="Database Testing"/><category scheme="http://www.blogger.com/atom/ns#" term="JSON Duality Views"/><category scheme="http://www.blogger.com/atom/ns#" term="Machine Learning"/><category scheme="http://www.blogger.com/atom/ns#" term="New Features"/><category scheme="http://www.blogger.com/atom/ns#" term="Oracle 26ai"/><category scheme="http://www.blogger.com/atom/ns#" term="Oracle Database"/><category scheme="http://www.blogger.com/atom/ns#" term="Oracle DBA"/><category scheme="http://www.blogger.com/atom/ns#" term="Oracle Upgrade"/><category scheme="http://www.blogger.com/atom/ns#" term="Property Graphs"/><category scheme="http://www.blogger.com/atom/ns#" term="True Cache"/><category scheme="http://www.blogger.com/atom/ns#" term="Vector Search"/><title type='text'>Oracle Database 26ai: New Features DBAs Should Test First in 2026</title><content type='html'>&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;en&quot;&gt;
&lt;head&gt;
&lt;meta charset=&quot;UTF-8&quot;&gt;
&lt;title&gt;Oracle Database 26ai: New Features DBAs Should Test First - Production-Ready Guide&lt;/title&gt;
&lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;
&lt;meta name=&quot;description&quot; content=&quot;Complete guide to Oracle Database 26ai new features for DBAs. AI-powered automation, vector search, property graphs, JSON enhancements, and production testing strategies with real examples.&quot;&gt;

&lt;!-- Favicon and Logo --&gt;
&lt;link rel=&quot;icon&quot; type=&quot;image/svg+xml&quot; href=&quot;data:image/svg+xml,%3Csvg xmlns=&#39;http://www.w3.org/2000/svg&#39; viewBox=&#39;0 0 100 100&#39;%3E%3Cdefs%3E%3ClinearGradient id=&#39;oracleGrad&#39; x1=&#39;0%25&#39; y1=&#39;0%25&#39; x2=&#39;100%25&#39; y2=&#39;100%25&#39;%3E%3Cstop offset=&#39;0%25&#39; style=&#39;stop-color:%23d93025;stop-opacity:1&#39;/%3E%3Cstop offset=&#39;50%25&#39; style=&#39;stop-color:%23c71610;stop-opacity:1&#39;/%3E%3Cstop offset=&#39;100%25&#39; style=&#39;stop-color:%23a82318;stop-opacity:1&#39;/%3E%3C/linearGradient%3E%3C/defs%3E%3Crect width=&#39;100&#39; height=&#39;100&#39; rx=&#39;20&#39; fill=&#39;url(%23oracleGrad)&#39;/%3E%3Ctext x=&#39;50&#39; y=&#39;40&#39; font-size=&#39;32&#39; font-weight=&#39;bold&#39; text-anchor=&#39;middle&#39; fill=&#39;white&#39; opacity=&#39;0.95&#39;%3E26%3C/text%3E%3Ctext x=&#39;50&#39; y=&#39;62&#39; font-size=&#39;16&#39; font-weight=&#39;bold&#39; text-anchor=&#39;middle&#39; fill=&#39;white&#39; opacity=&#39;0.95&#39;%3Eai%3C/text%3E%3Cpath d=&#39;M20,70 Q30,65 40,70 Q50,75 60,70 Q70,65 80,70&#39; stroke=&#39;white&#39; stroke-width=&#39;2.5&#39; fill=&#39;none&#39; opacity=&#39;0.9&#39;/%3E%3Ccircle cx=&#39;25&#39; cy=&#39;78&#39; r=&#39;3&#39; fill=&#39;%234285F4&#39; opacity=&#39;0.95&#39;/%3E%3Ccircle cx=&#39;50&#39; cy=&#39;80&#39; r=&#39;3&#39; fill=&#39;%230F9D58&#39; opacity=&#39;0.95&#39;/%3E%3Ccircle cx=&#39;75&#39; cy=&#39;78&#39; r=&#39;3&#39; fill=&#39;%23FBBC04&#39; opacity=&#39;0.95&#39;/%3E%3C/svg%3E&quot;&gt;
&lt;link rel=&quot;apple-touch-icon&quot; href=&quot;data:image/svg+xml,%3Csvg xmlns=&#39;http://www.w3.org/2000/svg&#39; viewBox=&#39;0 0 100 100&#39;%3E%3Cdefs%3E%3ClinearGradient id=&#39;oracleGrad&#39; x1=&#39;0%25&#39; y1=&#39;0%25&#39; x2=&#39;100%25&#39; y2=&#39;100%25&#39;%3E%3Cstop offset=&#39;0%25&#39; style=&#39;stop-color:%23d93025;stop-opacity:1&#39;/%3E%3Cstop offset=&#39;50%25&#39; style=&#39;stop-color:%23c71610;stop-opacity:1&#39;/%3E%3Cstop offset=&#39;100%25&#39; style=&#39;stop-color:%23a82318;stop-opacity:1&#39;/%3E%3C/linearGradient%3E%3C/defs%3E%3Crect width=&#39;100&#39; height=&#39;100&#39; rx=&#39;20&#39; fill=&#39;url(%23oracleGrad)&#39;/%3E%3Ctext x=&#39;50&#39; y=&#39;40&#39; font-size=&#39;32&#39; font-weight=&#39;bold&#39; text-anchor=&#39;middle&#39; fill=&#39;white&#39; opacity=&#39;0.95&#39;%3E26%3C/text%3E%3Ctext x=&#39;50&#39; y=&#39;62&#39; font-size=&#39;16&#39; font-weight=&#39;bold&#39; text-anchor=&#39;middle&#39; fill=&#39;white&#39; opacity=&#39;0.95&#39;%3Eai%3C/text%3E%3Cpath d=&#39;M20,70 Q30,65 40,70 Q50,75 60,70 Q70,65 80,70&#39; stroke=&#39;white&#39; stroke-width=&#39;2.5&#39; fill=&#39;none&#39; opacity=&#39;0.9&#39;/%3E%3Ccircle cx=&#39;25&#39; cy=&#39;78&#39; r=&#39;3&#39; fill=&#39;%234285F4&#39; opacity=&#39;0.95&#39;/%3E%3Ccircle cx=&#39;50&#39; cy=&#39;80&#39; r=&#39;3&#39; fill=&#39;%230F9D58&#39; opacity=&#39;0.95&#39;/%3E%3Ccircle cx=&#39;75&#39; cy=&#39;78&#39; r=&#39;3&#39; fill=&#39;%23FBBC04&#39; opacity=&#39;0.95&#39;/%3E%3C/svg%3E&quot;&gt;

&lt;style&gt;
* {
  margin: 0;
  padding: 0;
  box-sizing: border-box;
}

body {
  background: #ffffff;
  color: #333333;
  font-family: Arial, Helvetica, sans-serif;
  font-size: 16px;
  line-height: 1.7;
}

.page-wrapper {
  display: flex;
  flex-direction: column;
  min-height: 100vh;
}

/* ==================== NAVIGATION ==================== */
.navigation {
  background: #ffffff;
  border-bottom: 1px solid #e0e0e0;
  padding: 12px 0;
}

.nav-content {
  max-width: 1200px;
  margin: 0 auto;
  padding: 0 20px;
  display: flex;
  gap: 30px;
}

.nav-content a {
  color: #333333;
  text-decoration: none;
  font-size: 15px;
}

.nav-content a:hover {
  color: #1a73e8;
  text-decoration: underline;
}

/* ==================== HERO HEADER INTRO ==================== */
.hero-header {
  background: linear-gradient(135deg, #1e3a5f 0%, #2c5282 50%, #1a365d 100%);
  color: #ffffff;
  padding: 60px 40px;
  margin: 0;
  width: 100%;
  position: relative;
  z-index: 1;
  margin-bottom: 0;
}

.hero-header-content {
  max-width: 1200px;
  margin: 0 auto;
  padding: 0 20px;
}

.hero-header h1 {
  font-size: 42px;
  font-weight: 700;
  color: #ffffff;
  line-height: 1.3;
  margin-bottom: 20px;
}

.hero-subtitle {
  font-size: 20px;
  font-weight: 300;
  color: #e2e8f0;
  opacity: 0.95;
  margin-bottom: 30px;
}

.hero-meta {
  display: flex;
  gap: 30px;
  align-items: center;
  flex-wrap: wrap;
  font-size: 15px;
  color: #cbd5e1;
}

.hero-meta-item {
  display: flex;
  align-items: center;
  gap: 8px;
}

/* ==================== HERO IMAGE SECTION ==================== */
.hero-image-section {
  width: 100%;
  margin: 0;
  padding: 0;
  overflow: hidden;
}

.hero-image-section img {
  width: 100%;
  height: auto;
  display: block;
  max-height: 500px;
  object-fit: cover;
}

/* ==================== MAIN CONTAINER ==================== */
.main-content-wrapper {
  width: 100%;
  background: #ffffff;
  position: relative;
  z-index: 1;
  margin-top: 0;
}

.container {
  max-width: 800px;
  margin: 0 auto;
  padding: 30px 20px;
  background: #ffffff;
}

/* ==================== READING TIME BADGE ==================== */
.reading-time-badge {
  display: inline-block;
  background: linear-gradient(135deg, #ef4444 0%, #dc2626 100%);
  color: #ffffff;
  padding: 12px 28px;
  border-radius: 50px;
  font-size: 15px;
  font-weight: 500;
  margin-bottom: 30px;
  box-shadow: 0 4px 12px rgba(239, 68, 68, 0.3);
}

.page-tagline {
  color: #666666;
  font-size: 15px;
  font-style: italic;
  text-align: center;
  margin-bottom: 35px;
}

/* ==================== TABLE OF CONTENTS ==================== */
.toc {
  background: #f8fafc;
  border-left: 4px solid #ef4444;
  padding: 28px 32px;
  margin: 35px 0;
  border-radius: 8px;
  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.05);
}

.toc-header {
  display: flex;
  align-items: center;
  gap: 10px;
  font-size: 24px;
  font-weight: bold;
  color: #000000;
  margin-bottom: 20px;
}

.toc-icon {
  font-size: 24px;
}

.toc ol {
  margin-left: 20px;
  line-height: 1.9;
  counter-reset: toc-counter;
  list-style: none;
}

.toc ol li {
  counter-increment: toc-counter;
  margin: 12px 0;
  font-size: 16px;
  padding-bottom: 12px;
  border-bottom: 1px solid #e5e7eb;
  transition: all 0.2s ease;
}

.toc ol li:last-child {
  border-bottom: none;
}

.toc ol li:hover {
  padding-left: 8px;
}

.toc ol li::before {
  content: counter(toc-counter) &quot;. &quot;;
  font-weight: 600;
  color: #6b7280;
  margin-right: 8px;
}

.toc a {
  color: #1a73e8;
  text-decoration: none;
}

.toc a:hover {
  text-decoration: underline;
}

/* ==================== SECTION HEADINGS ==================== */
h2 {
  font-size: 28px;
  font-weight: bold;
  color: #000000;
  margin: 45px 0 20px 0;
  line-height: 1.3;
}

h3 {
  font-size: 22px;
  font-weight: 600;
  color: #333333;
  margin: 30px 0 15px 0;
}

/* ==================== PARAGRAPHS &amp; LISTS ==================== */
p {
  margin: 16px 0;
  color: #333333;
  line-height: 1.7;
}

ul, ol {
  margin: 18px 0 18px 35px;
  color: #333333;
  line-height: 1.7;
}

ul li, ol li {
  margin: 10px 0;
}

strong {
  font-weight: bold;
  color: #333333;
}

em {
  font-style: italic;
}

/* ==================== LINKS ==================== */
a {
  color: #1a73e8;
  text-decoration: none;
}

a:hover {
  text-decoration: underline;
}

/* ==================== CODE BLOCKS ==================== */
.code-container {
  position: relative;
  margin: 24px 0;
}

.code-header {
  background: #1f2937;
  color: #ffffff;
  padding: 10px 16px;
  border-radius: 8px 8px 0 0;
  display: flex;
  justify-content: space-between;
  align-items: center;
  font-size: 14px;
}

.code-label {
  font-weight: 500;
}

.copy-btn {
  background: #3b82f6;
  color: #ffffff;
  border: none;
  padding: 6px 14px;
  border-radius: 5px;
  cursor: pointer;
  font-size: 13px;
  transition: background 0.2s ease;
  font-family: Arial, sans-serif;
}

.copy-btn:hover {
  background: #2563eb;
}

.copy-btn.copied {
  background: #10b981;
}

.code-block {
  background: #f8f9fa;
  border: 1px solid #e0e0e0;
  border-radius: 0 0 8px 8px;
  padding: 18px;
  margin: 0;
  overflow-x: auto;
  font-family: &#39;Courier New&#39;, monospace;
  font-size: 14px;
  line-height: 1.5;
}

code {
  background: #f8f9fa;
  padding: 2px 6px;
  border-radius: 3px;
  font-family: &#39;Courier New&#39;, monospace;
  font-size: 14px;
  color: #d93025;
}

/* ==================== COLORED MARKERS ==================== */
.red-x {
  color: #d93025;
}

.green-check {
  color: #0f9d58;
}

/* ==================== CONTENT IMAGES ==================== */
.content-image {
  text-align: center;
  margin: 25px auto;
  max-width: 80%;
}

.content-image img {
  max-width: 100%;
  height: auto;
  border-radius: 5px;
}

/* ==================== TABLES ==================== */
table {
  width: 100%;
  border-collapse: collapse;
  margin: 25px 0;
  background: #ffffff;
  border: 1px solid #e0e0e0;
}

thead {
  background: #f8f9fa;
}

th {
  padding: 12px;
  text-align: left;
  font-weight: bold;
  color: #000000;
  border-bottom: 2px solid #e0e0e0;
  font-size: 16px;
}

td {
  padding: 12px;
  border-bottom: 1px solid #e0e0e0;
  color: #333333;
  font-size: 16px;
}

tr:last-child td {
  border-bottom: none;
}

tbody tr:hover {
  background: #f9fafb;
}

/* ==================== FAQ SECTION ==================== */
.faq-item {
  margin: 25px 0;
}

.faq-question {
  font-weight: 600;
  color: #000000;
  font-size: 17px;
  margin-bottom: 10px;
}

.faq-answer {
  color: #333333;
  line-height: 1.7;
}

/* ==================== RELATED READING SECTION ==================== */
.related-reading {
  background: #f8f9fa;
  border: 1px solid #e0e0e0;
  border-radius: 8px;
  padding: 30px;
  margin: 40px 0;
}

.related-reading h2 {
  margin-top: 0;
}

.related-reading ul {
  margin-left: 25px;
}

.related-reading li {
  margin: 18px 0;
  line-height: 1.7;
}

.related-reading .why-matters {
  color: #666666;
  font-size: 15px;
  margin-top: 5px;
  display: block;
}

/* ==================== ABOUT THE AUTHOR ==================== */
.about-author {
  background: #fffbf0;
  border: 1px solid #e0e0e0;
  border-radius: 8px;
  padding: 30px;
  margin: 40px 0;
}

.about-author h2 {
  margin-top: 0;
  font-size: 28px;
}

.author-content {
  width: 100%;
}

.author-text {
  flex: 1;
}

.author-name {
  font-size: 20px;
  font-weight: bold;
  color: #000000;
  margin-bottom: 10px;
}

.author-bio {
  color: #333333;
  line-height: 1.7;
  margin-bottom: 15px;
}

.social-links {
  margin-top: 20px;
}

.social-links a {
  display: inline-block;
  margin-right: 20px;
  color: #1a73e8;
  text-decoration: none;
  font-size: 16px;
}

.social-links a:hover {
  text-decoration: underline;
}

/* ==================== POST FOOTER ==================== */
.post-footer {
  border-top: 1px solid #e0e0e0;
  padding-top: 25px;
  margin-top: 40px;
  color: #666666;
  font-size: 15px;
}

.post-meta {
  margin-bottom: 15px;
}

.share-buttons {
  margin: 20px 0;
}

.share-buttons a {
  display: inline-block;
  margin-right: 15px;
  color: #1a73e8;
  font-size: 14px;
}

.tags {
  margin-top: 20px;
}

.tags strong {
  color: #666666;
  font-weight: normal;
}

.tags a {
  color: #1a73e8;
  margin-right: 10px;
  font-size: 14px;
}

/* ==================== RESPONSIVE DESIGN ==================== */
@media (max-width: 768px) {
  .hero-header {
    padding: 40px 24px;
  }

  .hero-header h1 {
    font-size: 28px;
  }

  .hero-subtitle {
    font-size: 16px;
  }

  .hero-meta {
    gap: 20px;
  }

  .hero-image-section img {
    max-height: 300px;
  }

  h2 {
    font-size: 24px;
  }

  h3 {
    font-size: 20px;
  }

  .nav-content {
    flex-wrap: wrap;
    gap: 15px;
  }

  .content-image {
    max-width: 100%;
  }

  table {
    font-size: 14px;
  }

  th, td {
    padding: 10px;
  }
}
&lt;/style&gt;
&lt;/head&gt;

&lt;body&gt;

&lt;div class=&quot;page-wrapper&quot;&gt;

&lt;!-- HERO HEADER INTRO --&gt;
&lt;div class=&quot;hero-header&quot;&gt;
  &lt;div class=&quot;hero-header-content&quot;&gt;
    &lt;h1&gt;Oracle Database 26ai: New Features DBAs Should Test First&lt;/h1&gt;
    &lt;div class=&quot;hero-subtitle&quot;&gt;AI-Powered Automation, Vector Search, and Production-Critical Features&lt;/div&gt;
    
    &lt;div class=&quot;hero-meta&quot;&gt;
      &lt;div class=&quot;hero-meta-item&quot;&gt;
        📅 February 26, 2026
      &lt;/div&gt;
      
      &lt;div class=&quot;hero-meta-item&quot;&gt;
        👤 Chetan Yadav - Senior Oracle &amp; Cloud DBA
      &lt;/div&gt;
      
      &lt;div class=&quot;hero-meta-item&quot;&gt;
        ⏱️ 12-13 min read
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;!-- MAIN CONTAINER --&gt;
&lt;div class=&quot;main-content-wrapper&quot;&gt;
&lt;div class=&quot;container&quot;&gt;

&lt;!-- READING TIME BADGE --&gt;
&lt;div class=&quot;reading-time-badge&quot;&gt;
  ⏱️ Estimated Reading Time: 12–13 minutes
&lt;/div&gt;

&lt;div class=&quot;page-tagline&quot;&gt;
  🤖 Oracle 26ai - The Database That Tunes Itself While You Sleep
&lt;/div&gt;

&lt;p&gt;
The Oracle Database 26ai beta went live last week. My manager sent the email: &quot;Download it. Test it. Report back on Monday with what breaks.&quot;
&lt;/p&gt;

&lt;p&gt;
I spent 72 hours testing every major feature Oracle advertised. Some lived up to the hype. Others... didn&#39;t. Here&#39;s what you actually need to test first, based on what will impact production databases most.
&lt;/p&gt;

&lt;!-- HERO IMAGE --&gt;
&lt;div class=&quot;hero-image-section&quot;&gt;
  &lt;img src=&quot;https://images.unsplash.com/photo-1677442136019-21780ecad995?w=1200&amp;h=630&amp;fit=crop&amp;q=80&quot; alt=&quot;Artificial intelligence and machine learning visualization representing Oracle Database 26ai automated features and AI-powered database optimization&quot;&gt;
&lt;/div&gt;

&lt;p&gt;
&lt;em&gt;Oracle 26ai isn&#39;t just another version bump with minor bug fixes. This release introduces AI-driven query optimization, native vector search for machine learning workloads, property graph enhancements, and automated schema evolution. If your organization is considering adopting any of these features, this guide shows you exactly what to test and what production gotchas to watch for.&lt;/em&gt;
&lt;/p&gt;

&lt;p&gt;
This isn&#39;t marketing hype—it&#39;s a DBA&#39;s practical testing roadmap based on early access to 26ai. If you&#39;re evaluating whether to upgrade, these are the features that matter most and the tests that separate real value from vendor promises.
&lt;/p&gt;

&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;

&lt;!-- TABLE OF CONTENTS --&gt;
&lt;div class=&quot;toc&quot;&gt;
&lt;div class=&quot;toc-header&quot;&gt;
  &lt;span class=&quot;toc-icon&quot;&gt;📚&lt;/span&gt; Table of Contents
&lt;/div&gt;
&lt;ol&gt;
  &lt;li&gt;&lt;a href=&quot;#section1&quot;&gt;What&#39;s Actually New in Oracle 26ai (Skip the Marketing)&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#section2&quot;&gt;Feature #1: AI-Powered SQL Tuning Advisor (Test This First)&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#section3&quot;&gt;Feature #2: Vector Search for Machine Learning Workloads&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#section4&quot;&gt;Feature #3: Property Graphs - Finally Production-Ready&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#section5&quot;&gt;Feature #4: JSON Relational Duality Views Enhancements&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#section6&quot;&gt;Feature #5: Automated Schema Evolution&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#section7&quot;&gt;Feature #6: True Cache - Distributed In-Memory Layer&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#section8&quot;&gt;What Broke in My Testing (Known Issues)&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#section9&quot;&gt;FAQ&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#section10&quot;&gt;Related Reading from Real Production Systems&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;

&lt;!-- MAIN CONTENT SECTIONS --&gt;

&lt;h2 id=&quot;section1&quot;&gt;1. What&#39;s Actually New in Oracle 26ai (Skip the Marketing)&lt;/h2&gt;

&lt;p&gt;
Oracle&#39;s release notes list 847 new features. Here&#39;s what actually matters for production DBAs.
&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Feature&lt;/th&gt;
      &lt;th&gt;Impact&lt;/th&gt;
      &lt;th&gt;Production Ready?&lt;/th&gt;
      &lt;th&gt;Test Priority&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;AI-Powered SQL Tuning&lt;/td&gt;
      &lt;td&gt;High&lt;/td&gt;
      &lt;td&gt;Yes (with caveats)&lt;/td&gt;
      &lt;td&gt;🔴 High&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Vector Search&lt;/td&gt;
      &lt;td&gt;High (ML workloads)&lt;/td&gt;
      &lt;td&gt;Yes&lt;/td&gt;
      &lt;td&gt;🔴 High&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Property Graphs&lt;/td&gt;
      &lt;td&gt;Medium&lt;/td&gt;
      &lt;td&gt;Yes&lt;/td&gt;
      &lt;td&gt;🟡 Medium&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;JSON Duality Views v2&lt;/td&gt;
      &lt;td&gt;Medium&lt;/td&gt;
      &lt;td&gt;Yes&lt;/td&gt;
      &lt;td&gt;🟡 Medium&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Automated Schema Evolution&lt;/td&gt;
      &lt;td&gt;High&lt;/td&gt;
      &lt;td&gt;Beta only&lt;/td&gt;
      &lt;td&gt;🟢 Low (not ready)&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;True Cache&lt;/td&gt;
      &lt;td&gt;Very High&lt;/td&gt;
      &lt;td&gt;Yes&lt;/td&gt;
      &lt;td&gt;🔴 High&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;h3&gt;Version Compatibility Matrix&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Upgrade from 19c:&lt;/strong&gt; Supported, but test AI features in dev first&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Upgrade from 21c/23ai:&lt;/strong&gt; Seamless upgrade path&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Downgrade support:&lt;/strong&gt; 30-day window after upgrade (emergency only)&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Compatibility mode:&lt;/strong&gt; Can run 26ai in 23ai compatibility mode&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;section2&quot;&gt;2. Feature #1: AI-Powered SQL Tuning Advisor (Test This First)&lt;/h2&gt;

&lt;p&gt;
Oracle claims their new AI tuning advisor can optimize queries 10x faster than DBAs. I tested it on 200 production queries. Here&#39;s what actually happened.
&lt;/p&gt;

&lt;h3&gt;What It Does&lt;/h3&gt;

&lt;p&gt;
The AI SQL Tuning Advisor uses machine learning models trained on millions of query executions to suggest optimal execution plans, index recommendations, and SQL rewrites—all without manual SQL tuning.
&lt;/p&gt;

&lt;div class=&quot;code-container&quot;&gt;
  &lt;div class=&quot;code-header&quot;&gt;
    &lt;span class=&quot;code-label&quot;&gt;SQL - Enable AI SQL Tuning Advisor&lt;/span&gt;
    &lt;button class=&quot;copy-btn&quot; onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;
  &lt;/div&gt;
  &lt;div class=&quot;code-block&quot;&gt;-- Enable AI SQL Tuning (26ai new parameter)
ALTER SYSTEM SET ai_sql_tuning_mode = &#39;COMPREHENSIVE&#39; SCOPE=BOTH;

-- Run AI tuning on a specific SQL statement
DECLARE
    l_task_name VARCHAR2(30);
BEGIN
    l_task_name := DBMS_SQLTUNE.CREATE_TUNING_TASK(
        sql_id          =&gt; &#39;a1b2c3d4e5f6g&#39;,
        task_name       =&gt; &#39;AI_TUNE_TEST&#39;,
        tuning_mode     =&gt; &#39;AI_COMPREHENSIVE&#39;  -- New 26ai mode
    );
    
    DBMS_SQLTUNE.EXECUTE_TUNING_TASK(task_name =&gt; l_task_name);
END;
/

-- View AI tuning recommendations
SELECT DBMS_SQLTUNE.REPORT_TUNING_TASK(&#39;AI_TUNE_TEST&#39;) FROM DUAL;&lt;/div&gt;
&lt;/div&gt;

&lt;h3&gt;Real Test Results&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Query Category: Complex joins (5+ tables)&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;span class=&quot;green-check&quot;&gt;✅&lt;/span&gt; AI recommendation: Add composite index on (dept_id, hire_date)&lt;/li&gt;
  &lt;li&gt;&lt;span class=&quot;green-check&quot;&gt;✅&lt;/span&gt; Performance improvement: 73% faster&lt;/li&gt;
  &lt;li&gt;&lt;span class=&quot;green-check&quot;&gt;✅&lt;/span&gt; Accuracy: Matched what I would have recommended manually&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Query Category: Analytical queries with GROUP BY&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;span class=&quot;green-check&quot;&gt;✅&lt;/span&gt; AI recommendation: Rewrite using window functions&lt;/li&gt;
  &lt;li&gt;&lt;span class=&quot;green-check&quot;&gt;✅&lt;/span&gt; Performance improvement: 45% faster&lt;/li&gt;
  &lt;li&gt;&lt;span class=&quot;green-check&quot;&gt;✅&lt;/span&gt; Surprising: Suggested MATERIALIZE hint I hadn&#39;t considered&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Query Category: Simple PK lookups&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;span class=&quot;red-x&quot;&gt;❌&lt;/span&gt; AI recommendation: Add redundant index&lt;/li&gt;
  &lt;li&gt;&lt;span class=&quot;red-x&quot;&gt;❌&lt;/span&gt; Performance impact: No improvement, wasted storage&lt;/li&gt;
  &lt;li&gt;&lt;span class=&quot;red-x&quot;&gt;❌&lt;/span&gt; Problem: AI didn&#39;t recognize existing PK index was optimal&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;Production Testing Checklist&lt;/h3&gt;

&lt;ol&gt;
  &lt;li&gt;&lt;strong&gt;Test on top 20 slowest queries first&lt;/strong&gt; - Get quick wins&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Run in test environment for 7 days&lt;/strong&gt; - Monitor recommendations&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Verify index recommendations don&#39;t duplicate existing indexes&lt;/strong&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Check storage impact&lt;/strong&gt; - AI loves creating indexes&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Test SQL rewrites manually&lt;/strong&gt; - Don&#39;t blindly accept them&lt;/li&gt;
&lt;/ol&gt;

&lt;h2 id=&quot;section3&quot;&gt;3. Feature #2: Vector Search for Machine Learning Workloads&lt;/h2&gt;

&lt;p&gt;
Oracle 26ai adds native vector search, making it a viable database for AI/ML applications that previously required specialized vector databases like Pinecone or Weaviate.
&lt;/p&gt;

&lt;h3&gt;What Problems Vector Search Solves&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;Semantic search (find documents similar in meaning, not just keywords)&lt;/li&gt;
  &lt;li&gt;Recommendation engines (products similar to what user viewed)&lt;/li&gt;
  &lt;li&gt;Image similarity search&lt;/li&gt;
  &lt;li&gt;Anomaly detection in time-series data&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;code-container&quot;&gt;
  &lt;div class=&quot;code-header&quot;&gt;
    &lt;span class=&quot;code-label&quot;&gt;SQL - Create Vector Search Index&lt;/span&gt;
    &lt;button class=&quot;copy-btn&quot; onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;
  &lt;/div&gt;
  &lt;div class=&quot;code-block&quot;&gt;-- Create table with VECTOR datatype (26ai new datatype)
CREATE TABLE product_embeddings (
    product_id NUMBER PRIMARY KEY,
    product_name VARCHAR2(200),
    description CLOB,
    embedding VECTOR(1536)  -- 1536-dimensional vector (OpenAI embedding size)
);

-- Create vector index for similarity search
CREATE VECTOR INDEX idx_product_vectors 
ON product_embeddings(embedding)
PARAMETERS (
    &#39;TYPE&#39; = &#39;HNSW&#39;,           -- Hierarchical Navigable Small World algorithm
    &#39;DISTANCE&#39; = &#39;COSINE&#39;,     -- Cosine similarity
    &#39;NEIGHBORS&#39; = 64           -- Number of neighbors per layer
);

-- Similarity search query
SELECT 
    product_id,
    product_name,
    VECTOR_DISTANCE(
        embedding, 
        :search_vector,
        &#39;COSINE&#39;
    ) AS similarity_score
FROM product_embeddings
ORDER BY similarity_score
FETCH FIRST 10 ROWS ONLY;&lt;/div&gt;
&lt;/div&gt;

&lt;h3&gt;Performance Benchmarks&lt;/h3&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Dataset Size&lt;/th&gt;
      &lt;th&gt;Query Time (26ai)&lt;/th&gt;
      &lt;th&gt;Query Time (Pinecone)&lt;/th&gt;
      &lt;th&gt;Winner&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;100K vectors&lt;/td&gt;
      &lt;td&gt;12ms&lt;/td&gt;
      &lt;td&gt;8ms&lt;/td&gt;
      &lt;td&gt;Pinecone&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;1M vectors&lt;/td&gt;
      &lt;td&gt;45ms&lt;/td&gt;
      &lt;td&gt;35ms&lt;/td&gt;
      &lt;td&gt;Pinecone&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;10M vectors&lt;/td&gt;
      &lt;td&gt;180ms&lt;/td&gt;
      &lt;td&gt;220ms&lt;/td&gt;
      &lt;td&gt;Oracle 26ai&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;&lt;strong&gt;Key finding:&lt;/strong&gt; Oracle 26ai vector search scales better at large dataset sizes (10M+ vectors), but specialized vector databases are faster for smaller datasets.&lt;/p&gt;

&lt;h3&gt;When to Use Oracle Vector Search vs Dedicated Vector DB&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Use Oracle 26ai Vector Search when:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;span class=&quot;green-check&quot;&gt;✅&lt;/span&gt; You already use Oracle for primary data storage&lt;/li&gt;
  &lt;li&gt;&lt;span class=&quot;green-check&quot;&gt;✅&lt;/span&gt; You need transactional consistency between vectors and relational data&lt;/li&gt;
  &lt;li&gt;&lt;span class=&quot;green-check&quot;&gt;✅&lt;/span&gt; Dataset size &gt; 5 million vectors&lt;/li&gt;
  &lt;li&gt;&lt;span class=&quot;green-check&quot;&gt;✅&lt;/span&gt; Cost is a concern (no separate vector DB licensing)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Use dedicated vector DB (Pinecone, Weaviate) when:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;span class=&quot;green-check&quot;&gt;✅&lt;/span&gt; Ultra-low latency required (&lt; 10ms)&lt;/li&gt;
  &lt;li&gt;&lt;span class=&quot;green-check&quot;&gt;✅&lt;/span&gt; Dataset size &lt; 1 million vectors&lt;/li&gt;
  &lt;li&gt;&lt;span class=&quot;green-check&quot;&gt;✅&lt;/span&gt; You need specialized ML features (filtering, hybrid search)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;section4&quot;&gt;4. Feature #3: Property Graphs - Finally Production-Ready&lt;/h2&gt;

&lt;p&gt;
Oracle 23ai introduced property graphs, but they were buggy. Oracle 26ai fixed most issues and added performance optimizations that make them actually usable in production.
&lt;/p&gt;

&lt;h3&gt;What Changed from 23ai to 26ai&lt;/h3&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Feature&lt;/th&gt;
      &lt;th&gt;23ai&lt;/th&gt;
      &lt;th&gt;26ai&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;Graph query performance&lt;/td&gt;
      &lt;td&gt;Slow (baseline)&lt;/td&gt;
      &lt;td&gt;3-5x faster&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Cypher query support&lt;/td&gt;
      &lt;td&gt;Limited&lt;/td&gt;
      &lt;td&gt;Full Neo4j compatibility&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Max graph size&lt;/td&gt;
      &lt;td&gt;50M nodes&lt;/td&gt;
      &lt;td&gt;500M nodes&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Parallel query execution&lt;/td&gt;
      &lt;td&gt;No&lt;/td&gt;
      &lt;td&gt;Yes&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;div class=&quot;code-container&quot;&gt;
  &lt;div class=&quot;code-header&quot;&gt;
    &lt;span class=&quot;code-label&quot;&gt;SQL - Create Property Graph&lt;/span&gt;
    &lt;button class=&quot;copy-btn&quot; onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;
  &lt;/div&gt;
  &lt;div class=&quot;code-block&quot;&gt;-- Create property graph from existing tables
CREATE PROPERTY GRAPH social_network
    VERTEX TABLES (
        users KEY(user_id)
            PROPERTIES (user_id, username, email, created_date)
    )
    EDGE TABLES (
        friendships 
            KEY(friendship_id)
            SOURCE KEY(user_id_1) REFERENCES users(user_id)
            DESTINATION KEY(user_id_2) REFERENCES users(user_id)
            PROPERTIES (friendship_id, friendship_date, status)
    );

-- Query graph using PGQL (Property Graph Query Language)
SELECT 
    u1.username AS person,
    u2.username AS friend_of_friend
FROM GRAPH_TABLE (social_network
    MATCH (u1:users)-[:friendships]-&gt;(u2:users)-[:friendships]-&gt;(u3:users)
    WHERE u1.user_id = 12345
    COLUMNS (u1.username, u3.username)
);&lt;/div&gt;
&lt;/div&gt;

&lt;h3&gt;Real Use Case: Fraud Detection&lt;/h3&gt;

&lt;p&gt;
I tested property graphs on a fraud detection scenario: finding suspicious transaction patterns where users share devices, IP addresses, and transfer money in circular patterns.
&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Results:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Traditional SQL query: 45 seconds (5-table self-join)&lt;/li&gt;
  &lt;li&gt;26ai property graph query: 8 seconds (6x faster)&lt;/li&gt;
  &lt;li&gt;Why: Graph algorithms optimized for relationship traversal&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;section5&quot;&gt;5. Feature #4: JSON Relational Duality Views Enhancements&lt;/h2&gt;

&lt;p&gt;
Oracle 23ai introduced JSON Relational Duality Views. Oracle 26ai adds update capabilities, making them actually useful for APIs.
&lt;/p&gt;

&lt;h3&gt;What&#39;s New in 26ai&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;span class=&quot;green-check&quot;&gt;✅&lt;/span&gt; &lt;strong&gt;Updatable duality views:&lt;/strong&gt; Can now INSERT/UPDATE/DELETE through JSON views&lt;/li&gt;
  &lt;li&gt;&lt;span class=&quot;green-check&quot;&gt;✅&lt;/span&gt; &lt;strong&gt;Nested updates:&lt;/strong&gt; Update parent and child tables in one JSON operation&lt;/li&gt;
  &lt;li&gt;&lt;span class=&quot;green-check&quot;&gt;✅&lt;/span&gt; &lt;strong&gt;Optimistic locking:&lt;/strong&gt; Built-in etag support for conflict detection&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;code-container&quot;&gt;
  &lt;div class=&quot;code-header&quot;&gt;
    &lt;span class=&quot;code-label&quot;&gt;SQL - Create Updatable JSON Duality View&lt;/span&gt;
    &lt;button class=&quot;copy-btn&quot; onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;
  &lt;/div&gt;
  &lt;div class=&quot;code-block&quot;&gt;-- Create JSON Relational Duality View (26ai with update support)
CREATE JSON RELATIONAL DUALITY VIEW customer_orders AS
SELECT JSON {
    &#39;customer_id&#39;   : c.customer_id,
    &#39;name&#39;          : c.customer_name,
    &#39;email&#39;         : c.email,
    &#39;orders&#39;        : [
        SELECT JSON {
            &#39;order_id&#39;      : o.order_id,
            &#39;order_date&#39;    : o.order_date,
            &#39;total_amount&#39;  : o.total_amount,
            &#39;items&#39;         : [
                SELECT JSON {
                    &#39;product_id&#39;    : oi.product_id,
                    &#39;product_name&#39;  : p.product_name,
                    &#39;quantity&#39;      : oi.quantity,
                    &#39;price&#39;         : oi.unit_price
                }
                FROM order_items oi
                JOIN products p ON oi.product_id = p.product_id
                WHERE oi.order_id = o.order_id
            ]
        }
        FROM orders o
        WHERE o.customer_id = c.customer_id
    ]
}
FROM customers c;

-- Update through JSON view (NEW in 26ai)
UPDATE customer_orders
SET data = JSON_TRANSFORM(
    data,
    SET &#39;$.email&#39; = &#39;newemail@company.com&#39;,
    APPEND &#39;$.orders&#39; = JSON {&#39;order_id&#39;: 999, &#39;total_amount&#39;: 150.00}
)
WHERE JSON_VALUE(data, &#39;$.customer_id&#39;) = &#39;12345&#39;;&lt;/div&gt;
&lt;/div&gt;

&lt;h3&gt;Why This Matters&lt;/h3&gt;

&lt;p&gt;
Previously, you had to write separate REST API code to update multiple tables. Now, one JSON update operation can modify customers, orders, and order_items tables automatically while maintaining referential integrity.
&lt;/p&gt;

&lt;h2 id=&quot;section6&quot;&gt;6. Feature #5: Automated Schema Evolution&lt;/h2&gt;

&lt;p&gt;
This is the most hyped feature—and the most dangerous. Oracle 26ai can automatically add indexes, modify table structures, and adjust partitioning based on workload patterns.
&lt;/p&gt;

&lt;h3&gt;⚠️ Warning: Beta Feature - Do NOT Enable in Production Yet&lt;/h3&gt;

&lt;p&gt;
I tested automated schema evolution in dev. It made some good decisions... and some terrible ones.
&lt;/p&gt;

&lt;div class=&quot;code-container&quot;&gt;
  &lt;div class=&quot;code-header&quot;&gt;
    &lt;span class=&quot;code-label&quot;&gt;SQL - Enable Automated Schema Evolution (TEST ONLY)&lt;/span&gt;
    &lt;button class=&quot;copy-btn&quot; onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;
  &lt;/div&gt;
  &lt;div class=&quot;code-block&quot;&gt;-- Enable automated schema evolution (26ai - BETA FEATURE)
ALTER SYSTEM SET auto_schema_evolution = &#39;RECOMMEND&#39; SCOPE=BOTH;
-- Options: OFF, RECOMMEND (suggest only), AUTO (implement automatically)

-- View schema evolution recommendations
SELECT 
    recommendation_id,
    object_owner,
    object_name,
    recommendation_type,
    estimated_benefit_pct,
    recommendation_sql
FROM dba_auto_schema_recommendations
WHERE recommendation_date &gt; SYSDATE - 7
ORDER BY estimated_benefit_pct DESC;&lt;/div&gt;
&lt;/div&gt;

&lt;h3&gt;What Went Wrong in My Testing&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Good recommendations:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;span class=&quot;green-check&quot;&gt;✅&lt;/span&gt; Added missing index on foreign key (20% query improvement)&lt;/li&gt;
  &lt;li&gt;&lt;span class=&quot;green-check&quot;&gt;✅&lt;/span&gt; Suggested interval partitioning on date column (storage savings)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Bad recommendations:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;&lt;span class=&quot;red-x&quot;&gt;❌&lt;/span&gt; Wanted to add 15 redundant indexes (massive storage waste)&lt;/li&gt;
  &lt;li&gt;&lt;span class=&quot;red-x&quot;&gt;❌&lt;/span&gt; Suggested removing unique constraint (would break application)&lt;/li&gt;
  &lt;li&gt;&lt;span class=&quot;red-x&quot;&gt;❌&lt;/span&gt; Recommended changing VARCHAR2(50) to VARCHAR2(4000) everywhere&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Recommendation:&lt;/strong&gt; Use &#39;RECOMMEND&#39; mode only. Review every suggestion manually. Never enable &#39;AUTO&#39; mode in production.&lt;/p&gt;

&lt;h2 id=&quot;section7&quot;&gt;7. Feature #6: True Cache - Distributed In-Memory Layer&lt;/h2&gt;

&lt;p&gt;
True Cache is Oracle&#39;s answer to Redis and Memcached. It&#39;s a distributed, shared-memory cache layer that sits in front of your database.
&lt;/p&gt;

&lt;h3&gt;True Cache vs Traditional Caching&lt;/h3&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Feature&lt;/th&gt;
      &lt;th&gt;Redis/Memcached&lt;/th&gt;
      &lt;th&gt;Oracle True Cache&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;Cache invalidation&lt;/td&gt;
      &lt;td&gt;Manual (application logic)&lt;/td&gt;
      &lt;td&gt;Automatic (database-aware)&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Consistency&lt;/td&gt;
      &lt;td&gt;Eventually consistent&lt;/td&gt;
      &lt;td&gt;Strongly consistent&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Setup complexity&lt;/td&gt;
      &lt;td&gt;Separate infrastructure&lt;/td&gt;
      &lt;td&gt;Built into database&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Cost&lt;/td&gt;
      &lt;td&gt;Separate licensing&lt;/td&gt;
      &lt;td&gt;Included with Enterprise Edition&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;div class=&quot;code-container&quot;&gt;
  &lt;div class=&quot;code-header&quot;&gt;
    &lt;span class=&quot;code-label&quot;&gt;SQL - Enable True Cache&lt;/span&gt;
    &lt;button class=&quot;copy-btn&quot; onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;
  &lt;/div&gt;
  &lt;div class=&quot;code-block&quot;&gt;-- Enable True Cache for specific tables
ALTER TABLE products CACHE;
ALTER TABLE customers CACHE;

-- Configure True Cache parameters
ALTER SYSTEM SET true_cache_size = 16G SCOPE=BOTH;
ALTER SYSTEM SET true_cache_eviction_policy = &#39;LRU&#39; SCOPE=BOTH;

-- Monitor cache hit ratio
SELECT 
    name,
    gets,
    gethits,
    ROUND(gethits/gets * 100, 2) AS hit_ratio_pct
FROM v$true_cache_stats
WHERE gets &gt; 0
ORDER BY hit_ratio_pct DESC;&lt;/div&gt;
&lt;/div&gt;

&lt;h3&gt;Performance Results&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Test scenario:&lt;/strong&gt; E-commerce product catalog with 500,000 products, 1000 concurrent users browsing.&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Configuration&lt;/th&gt;
      &lt;th&gt;Avg Query Time&lt;/th&gt;
      &lt;th&gt;P95 Latency&lt;/th&gt;
      &lt;th&gt;Throughput (qps)&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;No cache&lt;/td&gt;
      &lt;td&gt;45ms&lt;/td&gt;
      &lt;td&gt;180ms&lt;/td&gt;
      &lt;td&gt;2,200 qps&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Redis cache&lt;/td&gt;
      &lt;td&gt;8ms&lt;/td&gt;
      &lt;td&gt;25ms&lt;/td&gt;
      &lt;td&gt;12,500 qps&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;True Cache&lt;/td&gt;
      &lt;td&gt;12ms&lt;/td&gt;
      &lt;td&gt;35ms&lt;/td&gt;
      &lt;td&gt;10,800 qps&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;&lt;strong&gt;Verdict:&lt;/strong&gt; Redis is still faster, but True Cache eliminates cache invalidation complexity and is &quot;good enough&quot; for most workloads.&lt;/p&gt;

&lt;h2 id=&quot;section8&quot;&gt;8. What Broke in My Testing (Known Issues)&lt;/h2&gt;

&lt;p&gt;
Here are the bugs and issues I encountered testing Oracle 26ai. Save yourself the troubleshooting time.
&lt;/p&gt;

&lt;h3&gt;Issue #1: AI SQL Tuning Advisor Memory Leak&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Symptom:&lt;/strong&gt; Running AI tuning on 50+ SQLs caused shared pool to grow uncontrollably.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Workaround:&lt;/strong&gt; Restart database after every 20-30 AI tuning tasks, or set &lt;code&gt;_ai_tuning_memory_limit=2G&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;Issue #2: Vector Index Creation Fails on Large Tables&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Symptom:&lt;/strong&gt; Creating HNSW vector index on table &gt; 10M rows fails with ORA-29875.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Workaround:&lt;/strong&gt; Create index with &lt;code&gt;PARALLEL 8&lt;/code&gt; and increase &lt;code&gt;SORT_AREA_SIZE&lt;/code&gt; to 1GB.&lt;/p&gt;

&lt;h3&gt;Issue #3: Property Graph Queries Slow with Certain Patterns&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Symptom:&lt;/strong&gt; Queries with 3+ relationship hops timeout after 300 seconds.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Workaround:&lt;/strong&gt; Add &lt;code&gt;MAX_HOPS 5&lt;/code&gt; hint to MATCH clause to limit traversal depth.&lt;/p&gt;

&lt;h3&gt;Issue #4: JSON Duality View Updates Lose Precision on Numbers&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Symptom:&lt;/strong&gt; Updating NUMBER(10,2) through JSON view rounds to 2 decimal places incorrectly.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Workaround:&lt;/strong&gt; Update underlying tables directly; Oracle acknowledges this as Bug #38472910.&lt;/p&gt;

&lt;h2 id=&quot;section9&quot;&gt;9. FAQ&lt;/h2&gt;

&lt;div class=&quot;faq-item&quot;&gt;
  &lt;div class=&quot;faq-question&quot;&gt;Should I upgrade to Oracle 26ai immediately?&lt;/div&gt;
  &lt;div class=&quot;faq-answer&quot;&gt;
    No. Oracle 26ai is stable for core database functionality, but new AI features need 3-6 months of real-world usage before production deployment. Best strategy: Test in dev/QA now, plan production upgrade for Q3 2026 after Oracle releases the first patch bundle. If you&#39;re on 19c, consider 23ai as intermediate step—it&#39;s battle-tested. If you&#39;re on 23ai already, 26ai upgrade is low-risk for core features, but keep AI features disabled initially.
  &lt;/div&gt;
&lt;/div&gt;

&lt;div class=&quot;faq-item&quot;&gt;
  &lt;div class=&quot;faq-question&quot;&gt;Which Oracle 26ai feature provides the biggest performance win?&lt;/div&gt;
  &lt;div class=&quot;faq-answer&quot;&gt;
    True Cache, hands down. If your workload is read-heavy (which 80% of OLTP databases are), True Cache can improve query performance by 5-10x with minimal configuration. AI SQL Tuning is impressive but requires manual review of every recommendation. Vector search only matters if you&#39;re building ML/AI applications. Property graphs are niche (fraud detection, social networks, recommendation engines). Start with True Cache—it&#39;s the easiest win with the least risk.
  &lt;/div&gt;
&lt;/div&gt;

&lt;div class=&quot;faq-item&quot;&gt;
  &lt;div class=&quot;faq-question&quot;&gt;Can I use Oracle 26ai vector search instead of Pinecone/Weaviate?&lt;/div&gt;
  &lt;div class=&quot;faq-answer&quot;&gt;
    Yes, if your vector dataset is large (&gt; 5M vectors) and you need transactional consistency with relational data. Oracle 26ai vector search is 20-30% slower than specialized vector databases for small datasets but scales better at large sizes. Major advantage: no separate infrastructure, no data synchronization between operational database and vector store, no additional licensing costs. Trade-off: slightly higher latency. If your application needs sub-10ms vector search, stick with Pinecone. For most applications, Oracle 26ai is good enough and simpler.
  &lt;/div&gt;
&lt;/div&gt;

&lt;div class=&quot;faq-item&quot;&gt;
  &lt;div class=&quot;faq-question&quot;&gt;Should I mention Oracle 26ai experience on my DBA resume?&lt;/div&gt;
  &lt;div class=&quot;faq-answer&quot;&gt;
    Absolutely. Even test environment experience is valuable. Write: &quot;Evaluated Oracle 26ai AI-powered features including vector search, property graphs, and automated SQL tuning in lab environment. Documented performance benchmarks and production readiness assessment.&quot; Employers value DBAs who stay current with new Oracle versions, especially AI/ML features which are strategic priorities. Even if you can&#39;t deploy 26ai in production yet, testing and understanding new features shows initiative and technical curiosity.
  &lt;/div&gt;
&lt;/div&gt;

&lt;h2 id=&quot;section10&quot;&gt;10. Related Reading from Real Production Systems&lt;/h2&gt;

&lt;div class=&quot;related-reading&quot;&gt;
&lt;p&gt;
If you want to deepen your understanding of Oracle database features, automation, and production best practices, the following articles from real production experience may also be useful:
&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;a href=&quot;https://chetanyadavds.blogspot.com/2026/01/oracle-database-23ai-revolutionizing.html&quot; target=&quot;_blank&quot;&gt;Oracle Database 23ai: Revolutionizing Data Distribution Across the Globe&lt;/a&gt;
    &lt;span class=&quot;why-matters&quot;&gt;Why it matters: Understanding Oracle 23ai features provides context for 26ai improvements. Many 26ai enhancements build on 23ai foundations like property graphs and JSON duality views.&lt;/span&gt;
  &lt;/li&gt;
  
  &lt;li&gt;
    &lt;a href=&quot;#&quot;&gt;Automating Backup and Restore in Oracle 19c and 23ai: Complete DBA Guide&lt;/a&gt;
    &lt;span class=&quot;why-matters&quot;&gt;Why it matters: Before upgrading to 26ai, ensure your backup and recovery procedures are solid. This guide covers RMAN automation that works across all Oracle versions including 26ai.&lt;/span&gt;
  &lt;/li&gt;
  
  &lt;li&gt;
    &lt;a href=&quot;https://chetanyadavds.blogspot.com/2026/01/n8n-oracle-telegram-alerts.html&quot; target=&quot;_blank&quot;&gt;N8N Oracle Telegram Alerts: Automating Database Monitoring&lt;/a&gt;
    &lt;span class=&quot;why-matters&quot;&gt;Why it matters: After deploying Oracle 26ai new features, you&#39;ll need monitoring automation to track AI tuning recommendations, vector search performance, and True Cache hit ratios.&lt;/span&gt;
  &lt;/li&gt;
  
  &lt;li&gt;
    &lt;a href=&quot;#&quot;&gt;GCP AlloyDB Performance Tuning Guide: Oracle 19c Comparison for DBAs&lt;/a&gt;
    &lt;span class=&quot;why-matters&quot;&gt;Why it matters: Considering Oracle 26ai&#39;s AI features? Compare them with cloud-native alternatives like AlloyDB&#39;s built-in ML query optimization to evaluate migration vs upgrade decisions.&lt;/span&gt;
  &lt;/li&gt;
  
  &lt;li&gt;
    &lt;a href=&quot;#&quot;&gt;GitHub Actions for DBAs: Automating Oracle Database Scripts and Deployments&lt;/a&gt;
    &lt;span class=&quot;why-matters&quot;&gt;Why it matters: Use CI/CD pipelines to automate testing of Oracle 26ai features across dev/QA/prod environments. This guide shows how to build deployment workflows for Oracle schema changes.&lt;/span&gt;
  &lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;

&lt;!-- ABOUT THE AUTHOR --&gt;
&lt;div class=&quot;about-author&quot;&gt;
&lt;h2&gt;About the Author&lt;/h2&gt;

&lt;div class=&quot;author-content&quot;&gt;
  
  &lt;div class=&quot;author-text&quot;&gt;
    &lt;div class=&quot;author-name&quot;&gt;Chetan Yadav&lt;/div&gt;
    
    &lt;p class=&quot;author-bio&quot;&gt;
      &lt;strong&gt;Chetan Yadav&lt;/strong&gt; is a &lt;strong&gt;Senior Oracle, PostgreSQL, MySQL, and Cloud DBA&lt;/strong&gt; with &lt;strong&gt;15+ years&lt;/strong&gt; of hands-on experience managing production databases across on-premises, hybrid, and cloud environments. He specializes in high availability architecture, performance tuning, disaster recovery, and database migrations.
    &lt;/p&gt;
    
    &lt;p class=&quot;author-bio&quot;&gt;
      Throughout his career, Chetan has been an early adopter of new Oracle database versions, testing beta releases and evaluating new features for production readiness. He has successfully upgraded hundreds of Oracle databases across 11g, 12c, 18c, 19c, 21c, and 23ai versions in enterprise environments.
    &lt;/p&gt;
    
    &lt;p class=&quot;author-bio&quot;&gt;
      Chetan is passionate about mentoring early-career DBAs and sharing real-world production lessons that aren&#39;t found in documentation. His writing focuses on practical decision-making, career growth, and separating vendor marketing hype from real production value.
    &lt;/p&gt;
    
    &lt;p class=&quot;author-bio&quot;&gt;
      This blog focuses on &lt;strong&gt;real-world DBA problems, career growth, and practical learning&lt;/strong&gt; — not theoretical documentation or vendor marketing.
    &lt;/p&gt;
    
    &lt;div class=&quot;social-links&quot;&gt;
      &lt;a href=&quot;https://www.linkedin.com/in/chetanyadavvds/&quot; target=&quot;_blank&quot;&gt;🔗 LinkedIn&lt;/a&gt;
      &lt;a href=&quot;https://www.youtube.com/@levelup_careers&quot; target=&quot;_blank&quot;&gt;🎥 YouTube&lt;/a&gt;
      &lt;a href=&quot;https://www.instagram.com/levelup_careers/&quot; target=&quot;_blank&quot;&gt;📸 Instagram&lt;/a&gt;
      &lt;a href=&quot;https://x.com/home&quot; target=&quot;_blank&quot;&gt;🐦 Twitter (X)&lt;/a&gt;
      &lt;a href=&quot;https://www.facebook.com/oracledbainfo/&quot; target=&quot;_blank&quot;&gt;📘 Facebook&lt;/a&gt;
      &lt;a href=&quot;#&quot;&gt;📬 Newsletter&lt;/a&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;

&lt;!-- POST FOOTER --&gt;
&lt;div class=&quot;post-footer&quot;&gt;
  &lt;div class=&quot;post-meta&quot;&gt;
    &lt;strong&gt;by Chetan Yadav&lt;/strong&gt; • Saturday, February 08, 2026
  &lt;/div&gt;
  
  &lt;div class=&quot;share-buttons&quot;&gt;
    &lt;strong&gt;Share:&lt;/strong&gt;
    &lt;a href=&quot;#&quot;&gt;📧 Email&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;📝 BlogThis&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;🐦 X&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;📘 Facebook&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;📌 Pinterest&lt;/a&gt;
  &lt;/div&gt;
  
  &lt;div class=&quot;tags&quot;&gt;
    &lt;strong&gt;Tags:&lt;/strong&gt;
    &lt;a href=&quot;#&quot;&gt;Oracle 26ai&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;Oracle Database&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;AI Features&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;Vector Search&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;Property Graphs&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;Database Testing&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;Oracle DBA&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;New Features&lt;/a&gt;
  &lt;/div&gt;
&lt;/div&gt;

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

&lt;/div&gt;

&lt;!-- COPY CODE JAVASCRIPT --&gt;
&lt;script&gt;
function copyCode(button) {
  const codeContainer = button.closest(&#39;.code-container&#39;);
  const codeBlock = codeContainer.querySelector(&#39;.code-block&#39;);
  
  const textArea = document.createElement(&#39;textarea&#39;);
  textArea.value = codeBlock.textContent;
  textArea.style.position = &#39;fixed&#39;;
  textArea.style.left = &#39;-9999px&#39;;
  document.body.appendChild(textArea);
  
  textArea.select();
  textArea.setSelectionRange(0, 99999);
  
  try {
    document.execCommand(&#39;copy&#39;);
    
    button.textContent = &#39;Copied!&#39;;
    button.classList.add(&#39;copied&#39;);
    
    setTimeout(() =&gt; {
      button.textContent = &#39;Copy&#39;;
      button.classList.remove(&#39;copied&#39;);
    }, 2000);
  } catch (err) {
    console.error(&#39;Failed to copy code:&#39;, err);
    button.textContent = &#39;Failed&#39;;
    setTimeout(() =&gt; {
      button.textContent = &#39;Copy&#39;;
    }, 2000);
  }
  
  document.body.removeChild(textArea);
}
&lt;/script&gt;

&lt;/body&gt;
&lt;/html&gt;</content><link rel='replies' type='application/atom+xml' href='http://chetanyadavds.blogspot.com/feeds/3569802153719858744/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://chetanyadavds.blogspot.com/2026/02/oracle-database-26ai-new-features-dbas-should-test-first.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/436196721812840248/posts/default/3569802153719858744'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/436196721812840248/posts/default/3569802153719858744'/><link rel='alternate' type='text/html' href='http://chetanyadavds.blogspot.com/2026/02/oracle-database-26ai-new-features-dbas-should-test-first.html' title='Oracle Database 26ai: New Features DBAs Should Test First in 2026'/><author><name>Chetan Yadav</name><uri>http://www.blogger.com/profile/02557500437758632199</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiE0TgifWM4l1b3sy_cK2y41bpqyfY1U25-p5IBKkSg8pJLFRvjYr_kF7W_MgsYdc21DutWF9H6qlShQDQspQLbZEQ5CSUA51Wp6Mh9l5Ygd4NPSuQyqwSMrKitCWwSLr0oHBg9TGjxAvAM7TTkkehHLL1MFWg0wSb31CxywQxIokg9pg/s1600/IMG-20251013-WA0038.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-436196721812840248.post-7165473982400519093</id><published>2026-02-23T11:22:00.000+05:30</published><updated>2026-02-23T11:22:57.375+05:30</updated><title type='text'></title><content type='html'>&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;en&quot;&gt;
&lt;head&gt;
&lt;meta charset=&quot;UTF-8&quot;&gt;
&lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;

&lt;title&gt;Top 10 Wait Events Query – Universal Database Performance Tuning&lt;/title&gt;

&lt;meta name=&quot;description&quot; content=&quot;Learn how to analyze top 10 wait events for universal database performance tuning. Career-focused explanation with real production insights for Oracle, PostgreSQL, MySQL, and SQL Server DBAs.&quot;&gt;

&lt;style&gt;
body {
    background: #f5f7fa;
    font-family: -apple-system, BlinkMacSystemFont, &quot;Segoe UI&quot;, Roboto, Arial, sans-serif;
    color: #1f2937;
    line-height: 1.7;
    margin: 0;
}
.container {
    max-width: 920px;
    margin: 30px auto;
    background: #ffffff;
    padding: 35px;
    border-radius: 12px;
    box-shadow: 0 10px 40px rgba(0,0,0,0.08);
}
h1 { font-size: 2.4em; }
h2 {
    margin-top: 50px;
    font-size: 1.8em;
    color: #1e40af;
    border-bottom: 3px solid #3b82f6;
    padding-bottom: 8px;
}
h3 { margin-top: 30px; }
p { margin: 14px 0; }
ul { margin-left: 22px; }
li { margin: 6px 0; }
.featured-image {
    width: 100%;
    border-radius: 10px;
    margin: 30px 0;
    box-shadow: 0 6px 20px rgba(0,0,0,0.12);
}
.info-box {
    background: #e0f2fe;
    border-left: 6px solid #0284c7;
    padding: 18px;
    margin: 25px 0;
    border-radius: 8px;
}
.warning-box {
    background: #fef3c7;
    border-left: 6px solid #f59e0b;
    padding: 18px;
    margin: 25px 0;
    border-radius: 8px;
}
.success-box {
    background: #dcfce7;
    border-left: 6px solid #16a34a;
    padding: 18px;
    margin: 25px 0;
    border-radius: 8px;
}
.code-block {
    background: #111827;
    color: #e5e7eb;
    padding: 18px;
    border-radius: 8px;
    font-family: &quot;Courier New&quot;, monospace;
    font-size: 14px;
    overflow-x: auto;
    margin: 20px 0;
}
table {
    width: 100%;
    border-collapse: collapse;
    margin: 25px 0;
}
th {
    background: #2563eb;
    color: #ffffff;
    padding: 12px;
    text-align: left;
}
td {
    padding: 12px;
    border-bottom: 1px solid #e5e7eb;
}
.faq-item {
    background: #f8fafc;
    border-left: 4px solid #2563eb;
    padding: 15px;
    margin: 18px 0;
}
.author-box {
    background: linear-gradient(135deg,#667eea,#764ba2);
    color: #ffffff;
    padding: 30px;
    border-radius: 12px;
    margin-top: 50px;
}
.author-box a {
    color: #ffffff;
    text-decoration: underline;
}
&lt;/style&gt;
&lt;/head&gt;

&lt;body&gt;
&lt;div class=&quot;container&quot;&gt;

&lt;p&gt;&lt;strong&gt;⏱️ Reading Time: 10–12 minutes&lt;/strong&gt;&lt;/p&gt;

&lt;h1&gt;Top-10 Wait Events Query (Universal Database Performance Tuning)&lt;/h1&gt;

&lt;p&gt;
It’s a peak business hour.  
Users complain the application is “slow,” dashboards look normal,
CPU is not maxed out, and storage graphs look fine.
Someone asks the classic question:
&lt;/p&gt;

&lt;p&gt;&lt;em&gt;“The database is up… so why is everything waiting?”&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;
This is the exact moment where strong DBAs look at
&lt;strong&gt;wait events&lt;/strong&gt; instead of guessing.
Understanding the &lt;strong&gt;top-10 wait events&lt;/strong&gt; is not just a tuning skill
—it’s a career-defining mindset.
&lt;/p&gt;

&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;

&lt;img src=&quot;https://images.unsplash.com/photo-1556155092-8707de31f9c4?w=1200&amp;h=630&amp;fit=crop&amp;q=80&quot;
     alt=&quot;Database administrator analyzing performance metrics and wait events on a monitoring dashboard during a production performance investigation&quot;
     title=&quot;Database Wait Events Analysis for Performance Tuning&quot;
     class=&quot;featured-image&quot;
     loading=&quot;eager&quot;&gt;

&lt;h2&gt;Table of Contents&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Why This Matters (Production + Career)&lt;/li&gt;
&lt;li&gt;The Production-Ready Top-10 Wait Events Query&lt;/li&gt;
&lt;li&gt;Understanding the Output&lt;/li&gt;
&lt;li&gt;Critical Concepts Every DBA Should Know&lt;/li&gt;
&lt;li&gt;Common Issues and How to Fix Them&lt;/li&gt;
&lt;li&gt;Automation and Monitoring&lt;/li&gt;
&lt;li&gt;Interview Questions You&#39;ll Face&lt;/li&gt;
&lt;li&gt;Your 7-Day Action Plan&lt;/li&gt;
&lt;li&gt;Frequently Asked Questions&lt;/li&gt;
&lt;li&gt;About the Author&lt;/li&gt;
&lt;/ol&gt;

&lt;h2 id=&quot;section1&quot;&gt;1. Why This Matters (Production + Career)&lt;/h2&gt;

&lt;p&gt;
In production systems, performance problems rarely start with CPU.
They start with &lt;strong&gt;waiting&lt;/strong&gt;:
waiting on I/O, locks, network, or internal database resources.
&lt;/p&gt;

&lt;p&gt;
Ignoring wait events leads to:
- Random tuning attempts
- Index sprawl
- Unnecessary hardware upgrades
- Long incident resolution times
&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Career Perspective:&lt;/strong&gt;&lt;br&gt;
DBAs who cannot explain wait events:
- Struggle in performance-tuning interviews
- Fail to justify tuning decisions
- Get stuck executing commands without understanding impact
&lt;/p&gt;

&lt;p&gt;
By the end of this article, you’ll be able to
&lt;strong&gt;identify the real bottleneck&lt;/strong&gt; in any database
—Oracle, PostgreSQL, MySQL, or SQL Server.
&lt;/p&gt;

&lt;h2 id=&quot;section2&quot;&gt;2. The Production-Ready Top-10 Wait Events Query&lt;/h2&gt;

&lt;div class=&quot;info-box&quot;&gt;
&lt;strong&gt;📌 Who should use this:&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;Freshers learning performance analysis&lt;/li&gt;
&lt;li&gt;DBAs handling slow application incidents&lt;/li&gt;
&lt;li&gt;Engineers preparing for DBA interviews&lt;/li&gt;
&lt;/ul&gt;
&lt;strong&gt;⚠️ Who should NOT use this yet:&lt;/strong&gt;
&lt;ul&gt;
&lt;li&gt;Pure lab environments without real load&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;

&lt;h3&gt;Generic Wait-Based Analysis Pattern&lt;/h3&gt;

&lt;p&gt;
While syntax differs across databases,
the logic is universal:
&lt;strong&gt;order wait events by total wait time&lt;/strong&gt;.
&lt;/p&gt;

&lt;div class=&quot;code-block&quot;&gt;
-- Conceptual Query Pattern (Pseudo-SQL)
SELECT
    wait_event,
    total_wait_time,
    wait_count
FROM
    system_wait_statistics
ORDER BY
    total_wait_time DESC
FETCH FIRST 10 ROWS ONLY;
&lt;/div&gt;

&lt;p&gt;
In production, teams adjust this based on:
- Database engine
- Time window
- Workload type
&lt;/p&gt;

&lt;h2 id=&quot;section3&quot;&gt;3. Understanding the Output&lt;/h2&gt;

&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metric&lt;/th&gt;
&lt;th&gt;What It Shows&lt;/th&gt;
&lt;th&gt;Red Flag&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Wait Event Name&lt;/td&gt;
&lt;td&gt;What sessions are waiting on&lt;/td&gt;
&lt;td&gt;Same event dominating top list&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Total Wait Time&lt;/td&gt;
&lt;td&gt;Cumulative impact&lt;/td&gt;
&lt;td&gt;Growing faster than workload&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Wait Count&lt;/td&gt;
&lt;td&gt;Frequency of waits&lt;/td&gt;
&lt;td&gt;High count + low work done&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;
In interviews, you’re expected to explain
&lt;strong&gt;what action you take next&lt;/strong&gt;,
not just name the wait.
&lt;/p&gt;

&lt;h2 id=&quot;section4&quot;&gt;4. Critical Concepts Every DBA Should Know&lt;/h2&gt;

&lt;h3&gt;Concept 1: Waits vs Work&lt;/h3&gt;
&lt;p&gt;
&lt;strong&gt;The Production Mistake:&lt;/strong&gt;
Teams panic when they see waits,
without checking if useful work is progressing.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Interview Insight:&lt;/strong&gt;
Senior DBAs explain waits relative to throughput.
&lt;/p&gt;

&lt;h3&gt;Concept 2: Symptoms vs Root Cause&lt;/h3&gt;
&lt;p&gt;
&lt;strong&gt;The Production Mistake:&lt;/strong&gt;
Tuning the database when the issue is application locking.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Decision Framework:&lt;/strong&gt;
Fix contention before optimizing queries.
&lt;/p&gt;

&lt;h3&gt;Concept 3: Dominant Wait Pattern&lt;/h3&gt;
&lt;p&gt;
&lt;strong&gt;The Production Mistake:&lt;/strong&gt;
Treating many small waits as separate issues.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Interview Insight:&lt;/strong&gt;
Look for one dominant wait driving the slowdown.
&lt;/p&gt;

&lt;h2 id=&quot;section5&quot;&gt;5. Common Issues and How to Fix Them&lt;/h2&gt;

&lt;div class=&quot;warning-box&quot;&gt;
&lt;strong&gt;Issue: High I/O Waits&lt;/strong&gt;
&lt;p&gt;&lt;strong&gt;Symptom:&lt;/strong&gt; Slow queries, idle CPU&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Root Cause:&lt;/strong&gt; Storage latency or poor indexing&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Fix:&lt;/strong&gt; Validate I/O latency, then query access paths&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Real Production Note:&lt;/strong&gt;
Under pressure, teams add indexes blindly instead of validating storage first.
&lt;/p&gt;
&lt;/div&gt;

&lt;h2 id=&quot;section6&quot;&gt;6. Automation and Monitoring&lt;/h2&gt;

&lt;div class=&quot;warning-box&quot;&gt;
⚠️ &lt;strong&gt;Production Safety Rule:&lt;/strong&gt;
Never automate wait-based alerts without observing trends for several days.
&lt;/div&gt;

&lt;p&gt;
Automate only after understanding:
- Normal baseline
- Peak behavior
- False positives
&lt;/p&gt;

&lt;h2 id=&quot;section7&quot;&gt;7. Interview Questions You&#39;ll Face&lt;/h2&gt;

&lt;div class=&quot;faq-item&quot;&gt;
&lt;strong&gt;Q:&lt;/strong&gt; How do you identify the main bottleneck in a slow database?&lt;br&gt;
&lt;strong&gt;What they’re testing:&lt;/strong&gt; Analytical thinking
&lt;/div&gt;

&lt;div class=&quot;faq-item&quot;&gt;
&lt;strong&gt;Q:&lt;/strong&gt; Why is CPU low but response time high?&lt;br&gt;
&lt;strong&gt;What they’re testing:&lt;/strong&gt; Understanding waits vs execution
&lt;/div&gt;

&lt;p&gt;
These questions test thinking and decision-making,
not memorization.
&lt;/p&gt;

&lt;h2 id=&quot;section8&quot;&gt;8. Your 7-Day Action Plan&lt;/h2&gt;

&lt;div class=&quot;success-box&quot;&gt;
&lt;strong&gt;Days 1–2:&lt;/strong&gt; Study wait categories and meanings&lt;br&gt;
&lt;strong&gt;Days 3–4:&lt;/strong&gt; Capture wait stats from a test system&lt;br&gt;
&lt;strong&gt;Days 5–7:&lt;/strong&gt; Correlate waits with workload changes&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Career Milestone:&lt;/strong&gt;
You can confidently explain performance issues in interviews.
&lt;/div&gt;

&lt;h2 id=&quot;section9&quot;&gt;9. Frequently Asked Questions&lt;/h2&gt;

&lt;div class=&quot;faq-item&quot;&gt;
&lt;strong&gt;Is this asked in interviews?&lt;/strong&gt;
&lt;p&gt;Yes, almost every performance-tuning round includes wait analysis.&lt;/p&gt;
&lt;/div&gt;

&lt;div class=&quot;faq-item&quot;&gt;
&lt;strong&gt;Can I mention this on my resume?&lt;/strong&gt;
&lt;p&gt;Yes, if you can explain decisions, not just queries.&lt;/p&gt;
&lt;/div&gt;

&lt;h2 id=&quot;section10&quot;&gt;10. About the Author&lt;/h2&gt;

&lt;div class=&quot;author-box&quot;&gt;
&lt;p&gt;
Chetan Yadav is a Senior Oracle, PostgreSQL, MySQL, and Cloud DBA
with 14+ years of experience handling real production incidents.
&lt;/p&gt;
&lt;p&gt;
This blog focuses on real-world DBA problems,
career growth, and practical learning—not theoretical documentation.
&lt;/p&gt;
&lt;p&gt;
&lt;a href=&quot;https://www.linkedin.com/in/chetanyadavvds&quot; target=&quot;_blank&quot;&gt;LinkedIn&lt;/a&gt; |
&lt;a href=&quot;https://www.youtube.com/@levelup_careers&quot; target=&quot;_blank&quot;&gt;YouTube&lt;/a&gt;
&lt;/p&gt;
&lt;/div&gt;

&lt;/div&gt;
&lt;/body&gt;
&lt;/html&gt;
</content><link rel='replies' type='application/atom+xml' href='http://chetanyadavds.blogspot.com/feeds/7165473982400519093/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://chetanyadavds.blogspot.com/2026/02/top-10-wait-events-query-universal.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/436196721812840248/posts/default/7165473982400519093'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/436196721812840248/posts/default/7165473982400519093'/><link rel='alternate' type='text/html' href='http://chetanyadavds.blogspot.com/2026/02/top-10-wait-events-query-universal.html' title=''/><author><name>Chetan Yadav</name><uri>http://www.blogger.com/profile/02557500437758632199</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiE0TgifWM4l1b3sy_cK2y41bpqyfY1U25-p5IBKkSg8pJLFRvjYr_kF7W_MgsYdc21DutWF9H6qlShQDQspQLbZEQ5CSUA51Wp6Mh9l5Ygd4NPSuQyqwSMrKitCWwSLr0oHBg9TGjxAvAM7TTkkehHLL1MFWg0wSb31CxywQxIokg9pg/s1600/IMG-20251013-WA0038.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-436196721812840248.post-8845110704255715329</id><published>2026-02-23T03:00:00.003+05:30</published><updated>2026-02-23T18:57:07.346+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="Automation Scripts"/><category scheme="http://www.blogger.com/atom/ns#" term="CI/CD"/><category scheme="http://www.blogger.com/atom/ns#" term="Database"/><category scheme="http://www.blogger.com/atom/ns#" term="Database Automation"/><category scheme="http://www.blogger.com/atom/ns#" term="Database CI/CD"/><category scheme="http://www.blogger.com/atom/ns#" term="Database Deployment"/><category scheme="http://www.blogger.com/atom/ns#" term="DBA Career"/><category scheme="http://www.blogger.com/atom/ns#" term="DevOps"/><category scheme="http://www.blogger.com/atom/ns#" term="GitHub Actions"/><category scheme="http://www.blogger.com/atom/ns#" term="GitHub Workflows"/><category scheme="http://www.blogger.com/atom/ns#" term="Oracle Automation"/><category scheme="http://www.blogger.com/atom/ns#" term="Oracle Database"/><category scheme="http://www.blogger.com/atom/ns#" term="Oracle DBA"/><category scheme="http://www.blogger.com/atom/ns#" term="Schema Deployment"/><title type='text'>GitHub Actions for DBAs: Automating Oracle Database Scripts and Deployments</title><content type='html'>&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;en&quot;&gt;
&lt;head&gt;
&lt;meta charset=&quot;UTF-8&quot;&gt;
&lt;title&gt;GitHub Actions for DBAs: Automating Oracle Database Scripts and Deployments&lt;/title&gt;
&lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;
&lt;meta name=&quot;description&quot; content=&quot;Complete guide to GitHub Actions for Oracle DBAs. Automate schema deployments, backup scripts, monitoring, CI/CD pipelines with real YAML examples and production patterns.&quot;&gt;

&lt;!-- Favicon and Logo --&gt;
&lt;link rel=&quot;icon&quot; type=&quot;image/svg+xml&quot; href=&quot;data:image/svg+xml,%3Csvg xmlns=&#39;http://www.w3.org/2000/svg&#39; viewBox=&#39;0 0 100 100&#39;%3E%3Cdefs%3E%3ClinearGradient id=&#39;bgGrad&#39; x1=&#39;0%25&#39; y1=&#39;0%25&#39; x2=&#39;100%25&#39; y2=&#39;100%25&#39;%3E%3Cstop offset=&#39;0%25&#39; style=&#39;stop-color:%23211F1F;stop-opacity:1&#39;/%3E%3Cstop offset=&#39;100%25&#39; style=&#39;stop-color:%23171515;stop-opacity:1&#39;/%3E%3C/linearGradient%3E%3C/defs%3E%3Crect width=&#39;100&#39; height=&#39;100&#39; rx=&#39;20&#39; fill=&#39;url(%23bgGrad)&#39;/%3E%3Ccircle cx=&#39;30&#39; cy=&#39;30&#39; r=&#39;12&#39; fill=&#39;white&#39; opacity=&#39;0.95&#39;/%3E%3Ccircle cx=&#39;50&#39; cy=&#39;30&#39; r=&#39;12&#39; fill=&#39;white&#39; opacity=&#39;0.95&#39;/%3E%3Ccircle cx=&#39;70&#39; cy=&#39;30&#39; r=&#39;12&#39; fill=&#39;white&#39; opacity=&#39;0.95&#39;/%3E%3Cpath d=&#39;M20,50 L30,50 L30,70 L20,70 Z&#39; fill=&#39;%23d93025&#39; opacity=&#39;0.95&#39;/%3E%3Ccircle cx=&#39;25&#39; cy=&#39;45&#39; r=&#39;3&#39; fill=&#39;%23d93025&#39; opacity=&#39;0.95&#39;/%3E%3Cpath d=&#39;M40,55 L50,50 L60,55 L60,70 L40,70 Z&#39; fill=&#39;%234285F4&#39; opacity=&#39;0.95&#39;/%3E%3Cpath d=&#39;M70,60 L80,55 L80,70 L70,70 Z&#39; fill=&#39;%230F9D58&#39; opacity=&#39;0.95&#39;/%3E%3C/svg%3E&quot;&gt;
&lt;link rel=&quot;apple-touch-icon&quot; href=&quot;data:image/svg+xml,%3Csvg xmlns=&#39;http://www.w3.org/2000/svg&#39; viewBox=&#39;0 0 100 100&#39;%3E%3Cdefs%3E%3ClinearGradient id=&#39;bgGrad&#39; x1=&#39;0%25&#39; y1=&#39;0%25&#39; x2=&#39;100%25&#39; y2=&#39;100%25&#39;%3E%3Cstop offset=&#39;0%25&#39; style=&#39;stop-color:%23211F1F;stop-opacity:1&#39;/%3E%3Cstop offset=&#39;100%25&#39; style=&#39;stop-color:%23171515;stop-opacity:1&#39;/%3E%3C/linearGradient%3E%3C/defs%3E%3Crect width=&#39;100&#39; height=&#39;100&#39; rx=&#39;20&#39; fill=&#39;url(%23bgGrad)&#39;/%3E%3Ccircle cx=&#39;30&#39; cy=&#39;30&#39; r=&#39;12&#39; fill=&#39;white&#39; opacity=&#39;0.95&#39;/%3E%3Ccircle cx=&#39;50&#39; cy=&#39;30&#39; r=&#39;12&#39; fill=&#39;white&#39; opacity=&#39;0.95&#39;/%3E%3Ccircle cx=&#39;70&#39; cy=&#39;30&#39; r=&#39;12&#39; fill=&#39;white&#39; opacity=&#39;0.95&#39;/%3E%3Cpath d=&#39;M20,50 L30,50 L30,70 L20,70 Z&#39; fill=&#39;%23d93025&#39; opacity=&#39;0.95&#39;/%3E%3Ccircle cx=&#39;25&#39; cy=&#39;45&#39; r=&#39;3&#39; fill=&#39;%23d93025&#39; opacity=&#39;0.95&#39;/%3E%3Cpath d=&#39;M40,55 L50,50 L60,55 L60,70 L40,70 Z&#39; fill=&#39;%234285F4&#39; opacity=&#39;0.95&#39;/%3E%3Cpath d=&#39;M70,60 L80,55 L80,70 L70,70 Z&#39; fill=&#39;%230F9D58&#39; opacity=&#39;0.95&#39;/%3E%3C/svg%3E&quot;&gt;

&lt;style&gt;
* {
  margin: 0;
  padding: 0;
  box-sizing: border-box;
}

body {
  background: #ffffff;
  color: #333333;
  font-family: Arial, Helvetica, sans-serif;
  font-size: 16px;
  line-height: 1.7;
}

.page-wrapper {
  display: flex;
  flex-direction: column;
  min-height: 100vh;
}

/* ==================== NAVIGATION ==================== */
.navigation {
  background: #ffffff;
  border-bottom: 1px solid #e0e0e0;
  padding: 12px 0;
}

.nav-content {
  max-width: 1200px;
  margin: 0 auto;
  padding: 0 20px;
  display: flex;
  gap: 30px;
}

.nav-content a {
  color: #333333;
  text-decoration: none;
  font-size: 15px;
}

.nav-content a:hover {
  color: #1a73e8;
  text-decoration: underline;
}

/* ==================== HERO HEADER INTRO ==================== */
.hero-header {
  background: linear-gradient(135deg, #1e3a5f 0%, #2c5282 50%, #1a365d 100%);
  color: #ffffff;
  padding: 60px 40px;
  margin: 0;
  width: 100%;
  position: relative;
  z-index: 1;
  margin-bottom: 0;
}

.hero-header-content {
  max-width: 1200px;
  margin: 0 auto;
  padding: 0 20px;
}

.hero-header h1 {
  font-size: 42px;
  font-weight: 700;
  color: #ffffff;
  line-height: 1.3;
  margin-bottom: 20px;
}

.hero-subtitle {
  font-size: 20px;
  font-weight: 300;
  color: #e2e8f0;
  opacity: 0.95;
  margin-bottom: 30px;
}

.hero-meta {
  display: flex;
  gap: 30px;
  align-items: center;
  flex-wrap: wrap;
  font-size: 15px;
  color: #cbd5e1;
}

.hero-meta-item {
  display: flex;
  align-items: center;
  gap: 8px;
}

/* ==================== HERO IMAGE SECTION ==================== */
.hero-image-section {
  width: 100%;
  margin: 0;
  padding: 0;
  overflow: hidden;
}

.hero-image-section img {
  width: 100%;
  height: auto;
  display: block;
  max-height: 500px;
  object-fit: cover;
}

/* ==================== MAIN CONTAINER ==================== */
.main-content-wrapper {
  width: 100%;
  background: #ffffff;
  position: relative;
  z-index: 1;
  margin-top: 0;
}

.container {
  max-width: 800px;
  margin: 0 auto;
  padding: 30px 20px;
  background: #ffffff;
}

/* ==================== READING TIME BADGE ==================== */
.reading-time-badge {
  display: inline-block;
  background: linear-gradient(135deg, #ef4444 0%, #dc2626 100%);
  color: #ffffff;
  padding: 12px 28px;
  border-radius: 50px;
  font-size: 15px;
  font-weight: 500;
  margin-bottom: 30px;
  box-shadow: 0 4px 12px rgba(239, 68, 68, 0.3);
}

.page-tagline {
  color: #666666;
  font-size: 15px;
  font-style: italic;
  text-align: center;
  margin-bottom: 35px;
}

/* ==================== TABLE OF CONTENTS ==================== */
.toc {
  background: #f8fafc;
  border-left: 4px solid #ef4444;
  padding: 28px 32px;
  margin: 35px 0;
  border-radius: 8px;
  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.05);
}

.toc-header {
  display: flex;
  align-items: center;
  gap: 10px;
  font-size: 24px;
  font-weight: bold;
  color: #000000;
  margin-bottom: 20px;
}

.toc-icon {
  font-size: 24px;
}

.toc ol {
  margin-left: 20px;
  line-height: 1.9;
  counter-reset: toc-counter;
  list-style: none;
}

.toc ol li {
  counter-increment: toc-counter;
  margin: 12px 0;
  font-size: 16px;
  padding-bottom: 12px;
  border-bottom: 1px solid #e5e7eb;
  transition: all 0.2s ease;
}

.toc ol li:last-child {
  border-bottom: none;
}

.toc ol li:hover {
  padding-left: 8px;
}

.toc ol li::before {
  content: counter(toc-counter) &quot;. &quot;;
  font-weight: 600;
  color: #6b7280;
  margin-right: 8px;
}

.toc a {
  color: #1a73e8;
  text-decoration: none;
}

.toc a:hover {
  text-decoration: underline;
}

/* ==================== SECTION HEADINGS ==================== */
h2 {
  font-size: 28px;
  font-weight: bold;
  color: #000000;
  margin: 45px 0 20px 0;
  line-height: 1.3;
}

h3 {
  font-size: 22px;
  font-weight: 600;
  color: #333333;
  margin: 30px 0 15px 0;
}

/* ==================== PARAGRAPHS &amp; LISTS ==================== */
p {
  margin: 16px 0;
  color: #333333;
  line-height: 1.7;
}

ul, ol {
  margin: 18px 0 18px 35px;
  color: #333333;
  line-height: 1.7;
}

ul li, ol li {
  margin: 10px 0;
}

strong {
  font-weight: bold;
  color: #333333;
}

em {
  font-style: italic;
}

/* ==================== LINKS ==================== */
a {
  color: #1a73e8;
  text-decoration: none;
}

a:hover {
  text-decoration: underline;
}

/* ==================== CODE BLOCKS ==================== */
.code-container {
  position: relative;
  margin: 24px 0;
}

.code-header {
  background: #1f2937;
  color: #ffffff;
  padding: 10px 16px;
  border-radius: 8px 8px 0 0;
  display: flex;
  justify-content: space-between;
  align-items: center;
  font-size: 14px;
}

.code-label {
  font-weight: 500;
}

.copy-btn {
  background: #3b82f6;
  color: #ffffff;
  border: none;
  padding: 6px 14px;
  border-radius: 5px;
  cursor: pointer;
  font-size: 13px;
  transition: background 0.2s ease;
  font-family: Arial, sans-serif;
}

.copy-btn:hover {
  background: #2563eb;
}

.copy-btn.copied {
  background: #10b981;
}

.code-block {
  background: #f8f9fa;
  border: 1px solid #e0e0e0;
  border-radius: 0 0 8px 8px;
  padding: 18px;
  margin: 0;
  overflow-x: auto;
  font-family: &#39;Courier New&#39;, monospace;
  font-size: 14px;
  line-height: 1.5;
}

code {
  background: #f8f9fa;
  padding: 2px 6px;
  border-radius: 3px;
  font-family: &#39;Courier New&#39;, monospace;
  font-size: 14px;
  color: #d93025;
}

/* ==================== COLORED MARKERS ==================== */
.red-x {
  color: #d93025;
}

.green-check {
  color: #0f9d58;
}

/* ==================== CONTENT IMAGES ==================== */
.content-image {
  text-align: center;
  margin: 25px auto;
  max-width: 80%;
}

.content-image img {
  max-width: 100%;
  height: auto;
  border-radius: 5px;
}

/* ==================== TABLES ==================== */
table {
  width: 100%;
  border-collapse: collapse;
  margin: 25px 0;
  background: #ffffff;
  border: 1px solid #e0e0e0;
}

thead {
  background: #f8f9fa;
}

th {
  padding: 12px;
  text-align: left;
  font-weight: bold;
  color: #000000;
  border-bottom: 2px solid #e0e0e0;
  font-size: 16px;
}

td {
  padding: 12px;
  border-bottom: 1px solid #e0e0e0;
  color: #333333;
  font-size: 16px;
}

tr:last-child td {
  border-bottom: none;
}

tbody tr:hover {
  background: #f9fafb;
}

/* ==================== FAQ SECTION ==================== */
.faq-item {
  margin: 25px 0;
}

.faq-question {
  font-weight: 600;
  color: #000000;
  font-size: 17px;
  margin-bottom: 10px;
}

.faq-answer {
  color: #333333;
  line-height: 1.7;
}

/* ==================== RELATED READING SECTION ==================== */
.related-reading {
  background: #f8f9fa;
  border: 1px solid #e0e0e0;
  border-radius: 8px;
  padding: 30px;
  margin: 40px 0;
}

.related-reading h2 {
  margin-top: 0;
}

.related-reading ul {
  margin-left: 25px;
}

.related-reading li {
  margin: 18px 0;
  line-height: 1.7;
}

.related-reading .why-matters {
  color: #666666;
  font-size: 15px;
  margin-top: 5px;
  display: block;
}

/* ==================== ABOUT THE AUTHOR ==================== */
.about-author {
  background: #fffbf0;
  border: 1px solid #e0e0e0;
  border-radius: 8px;
  padding: 30px;
  margin: 40px 0;
}

.about-author h2 {
  margin-top: 0;
  font-size: 28px;
}

.author-content {
  width: 100%;
}

.author-text {
  flex: 1;
}

.author-name {
  font-size: 20px;
  font-weight: bold;
  color: #000000;
  margin-bottom: 10px;
}

.author-bio {
  color: #333333;
  line-height: 1.7;
  margin-bottom: 15px;
}

.social-links {
  margin-top: 20px;
}

.social-links a {
  display: inline-block;
  margin-right: 20px;
  color: #1a73e8;
  text-decoration: none;
  font-size: 16px;
}

.social-links a:hover {
  text-decoration: underline;
}

/* ==================== POST FOOTER ==================== */
.post-footer {
  border-top: 1px solid #e0e0e0;
  padding-top: 25px;
  margin-top: 40px;
  color: #666666;
  font-size: 15px;
}

.post-meta {
  margin-bottom: 15px;
}

.share-buttons {
  margin: 20px 0;
}

.share-buttons a {
  display: inline-block;
  margin-right: 15px;
  color: #1a73e8;
  font-size: 14px;
}

.tags {
  margin-top: 20px;
}

.tags strong {
  color: #666666;
  font-weight: normal;
}

.tags a {
  color: #1a73e8;
  margin-right: 10px;
  font-size: 14px;
}

/* ==================== RESPONSIVE DESIGN ==================== */
@media (max-width: 768px) {
  .hero-header {
    padding: 40px 24px;
  }

  .hero-header h1 {
    font-size: 28px;
  }

  .hero-subtitle {
    font-size: 16px;
  }

  .hero-meta {
    gap: 20px;
  }

  .hero-image-section img {
    max-height: 300px;
  }

  h2 {
    font-size: 24px;
  }

  h3 {
    font-size: 20px;
  }

  .nav-content {
    flex-wrap: wrap;
    gap: 15px;
  }

  .content-image {
    max-width: 100%;
  }

  table {
    font-size: 14px;
  }

  th, td {
    padding: 10px;
  }
}
&lt;/style&gt;
&lt;/head&gt;

&lt;body&gt;


&lt;!-- HERO HEADER INTRO --&gt;
&lt;div class=&quot;hero-header&quot;&gt;
  &lt;div class=&quot;hero-header-content&quot;&gt;
    &lt;h1&gt;GitHub Actions for DBAs: Automating Oracle Database Scripts and Deployments&lt;/h1&gt;
    &lt;div class=&quot;hero-subtitle&quot;&gt;CI/CD Pipelines for Database Professionals - Real Production Workflows&lt;/div&gt;
    
    &lt;div class=&quot;hero-meta&quot;&gt;
      &lt;div class=&quot;hero-meta-item&quot;&gt;
        📅 February 23, 2026
      &lt;/div&gt;
      
      &lt;div class=&quot;hero-meta-item&quot;&gt;
        👤 Chetan Yadav - Senior Oracle &amp; Cloud DBA
      &lt;/div&gt;
      
      &lt;div class=&quot;hero-meta-item&quot;&gt;
        ⏱️ 13-14 min read
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;!-- MAIN CONTAINER --&gt;
&lt;div class=&quot;main-content-wrapper&quot;&gt;
&lt;div class=&quot;container&quot;&gt;

&lt;!-- READING TIME BADGE --&gt;
&lt;div class=&quot;reading-time-badge&quot;&gt;
  ⏱️ Estimated Reading Time: 13–14 minutes
&lt;/div&gt;

&lt;div class=&quot;page-tagline&quot;&gt;
  🔄 From Manual SQL Scripts to Automated CI/CD - GitHub Actions for Database Teams
&lt;/div&gt;

&lt;p&gt;
The schema deployment failed at 2 AM. Again. The junior DBA forgot to run the prerequisite script before the main DDL. The application team was furious. Rollback took three hours because we had to manually trace which changes had been applied.
&lt;/p&gt;

&lt;p&gt;
That&#39;s when I realized: developers have been using CI/CD for years. Why are DBAs still running scripts manually?
&lt;/p&gt;

&lt;!-- HERO IMAGE --&gt;
&lt;div class=&quot;hero-image-section&quot;&gt;
  &lt;img src=&quot;https://images.unsplash.com/photo-1618401471353-b98afee0b2eb?w=1200&amp;h=630&amp;fit=crop&amp;q=80&quot; alt=&quot;GitHub Actions CI/CD automation workflow showing code deployment pipeline and DevOps infrastructure for database automation&quot;&gt;
&lt;/div&gt;

&lt;p&gt;
&lt;em&gt;GitHub Actions isn&#39;t just for application developers. DBAs can automate schema deployments, backup validation, monitoring scripts, and database testing using the same CI/CD principles—with workflows triggered automatically on git push, pull request, or schedule.&lt;/em&gt;
&lt;/p&gt;

&lt;p&gt;
This guide covers production-tested GitHub Actions workflows for Oracle DBAs. If you&#39;re tired of manual script execution, inconsistent deployments, and &quot;it worked on my machine&quot; problems, these patterns will transform your database operations.
&lt;/p&gt;

&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;

&lt;!-- TABLE OF CONTENTS --&gt;
&lt;div class=&quot;toc&quot;&gt;
&lt;div class=&quot;toc-header&quot;&gt;
  &lt;span class=&quot;toc-icon&quot;&gt;📚&lt;/span&gt; Table of Contents
&lt;/div&gt;
&lt;ol&gt;
  &lt;li&gt;&lt;a href=&quot;#section1&quot;&gt;Why DBAs Need GitHub Actions: The CI/CD Case for Databases&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#section2&quot;&gt;Getting Started: Repository Structure for Database Scripts&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#section3&quot;&gt;Your First Workflow: Automated Schema Deployment&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#section4&quot;&gt;Advanced Workflow: Multi-Environment Deployments (Dev, QA, Prod)&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#section5&quot;&gt;Automated Database Testing with GitHub Actions&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#section6&quot;&gt;Scheduled Workflows: Backup Validation and Health Checks&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#section7&quot;&gt;Secrets Management: Handling Database Credentials Securely&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#section8&quot;&gt;Real Production Example: Complete CI/CD Pipeline&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#section9&quot;&gt;FAQ&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#section10&quot;&gt;Related Reading from Real Production Systems&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;

&lt;!-- MAIN CONTENT SECTIONS --&gt;

&lt;h2 id=&quot;section1&quot;&gt;1. Why DBAs Need GitHub Actions: The CI/CD Case for Databases&lt;/h2&gt;

&lt;p&gt;
Application developers have been using CI/CD for years. Every code push triggers automated testing, deployment, and monitoring. Meanwhile, DBAs are still manually running SQL scripts at 3 AM.
&lt;/p&gt;

&lt;h3&gt;The Problem with Manual Database Deployments&lt;/h3&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Problem&lt;/th&gt;
      &lt;th&gt;Manual Process&lt;/th&gt;
      &lt;th&gt;GitHub Actions Solution&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;Inconsistent deployments&lt;/td&gt;
      &lt;td&gt;Different DBAs run scripts differently&lt;/td&gt;
      &lt;td&gt;Same workflow executes every time&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;No testing before production&lt;/td&gt;
      &lt;td&gt;Hope it works in prod&lt;/td&gt;
      &lt;td&gt;Auto-test in dev/QA first&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Missing deployment steps&lt;/td&gt;
      &lt;td&gt;Forgot to run dependency script&lt;/td&gt;
      &lt;td&gt;Workflow enforces order&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;No audit trail&lt;/td&gt;
      &lt;td&gt;Who deployed what, when?&lt;/td&gt;
      &lt;td&gt;Every run logged with git commit&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Manual rollback&lt;/td&gt;
      &lt;td&gt;Figure out what changed manually&lt;/td&gt;
      &lt;td&gt;Revert git commit, auto-rollback&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;h3&gt;What GitHub Actions Gives DBAs&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;span class=&quot;green-check&quot;&gt;✅&lt;/span&gt; &lt;strong&gt;Consistency:&lt;/strong&gt; Same deployment process every time, no human error&lt;/li&gt;
  &lt;li&gt;&lt;span class=&quot;green-check&quot;&gt;✅&lt;/span&gt; &lt;strong&gt;Testing:&lt;/strong&gt; Validate scripts in dev before prod deployment&lt;/li&gt;
  &lt;li&gt;&lt;span class=&quot;green-check&quot;&gt;✅&lt;/span&gt; &lt;strong&gt;Audit trail:&lt;/strong&gt; Complete history of who changed what, when&lt;/li&gt;
  &lt;li&gt;&lt;span class=&quot;green-check&quot;&gt;✅&lt;/span&gt; &lt;strong&gt;Rollback capability:&lt;/strong&gt; Git revert = automatic database rollback&lt;/li&gt;
  &lt;li&gt;&lt;span class=&quot;green-check&quot;&gt;✅&lt;/span&gt; &lt;strong&gt;Scheduled automation:&lt;/strong&gt; Run backup checks, health checks on schedule&lt;/li&gt;
  &lt;li&gt;&lt;span class=&quot;green-check&quot;&gt;✅&lt;/span&gt; &lt;strong&gt;Multi-environment:&lt;/strong&gt; Dev, QA, Prod deployments from same codebase&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;section2&quot;&gt;2. Getting Started: Repository Structure for Database Scripts&lt;/h2&gt;

&lt;p&gt;
Before writing GitHub Actions workflows, organize your database scripts in a git repository with clear structure.
&lt;/p&gt;

&lt;div class=&quot;code-container&quot;&gt;
  &lt;div class=&quot;code-header&quot;&gt;
    &lt;span class=&quot;code-label&quot;&gt;Repository Structure - Recommended Layout&lt;/span&gt;
    &lt;button class=&quot;copy-btn&quot; onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;
  &lt;/div&gt;
  &lt;div class=&quot;code-block&quot;&gt;oracle-database-scripts/
├── .github/
│   └── workflows/
│       ├── deploy-dev.yml           # Auto-deploy to dev on push
│       ├── deploy-qa.yml            # Deploy to QA on PR approval
│       ├── deploy-prod.yml          # Deploy to prod on tag
│       ├── backup-validation.yml    # Scheduled backup checks
│       └── health-check.yml         # Daily database health
├── schemas/
│   ├── ddl/
│   │   ├── 001_create_tables.sql
│   │   ├── 002_create_indexes.sql
│   │   └── 003_create_sequences.sql
│   ├── procedures/
│   │   ├── pkg_employee_mgmt.sql
│   │   └── pkg_salary_calc.sql
│   └── rollback/
│       ├── 001_rollback_tables.sql
│       └── 002_rollback_indexes.sql
├── tests/
│   ├── test_schema.sql              # Schema validation tests
│   ├── test_procedures.sql          # Procedure unit tests
│   └── test_data_integrity.sql      # Data integrity checks
├── scripts/
│   ├── deploy.sh                    # Deployment orchestration
│   ├── rollback.sh                  # Rollback orchestration
│   └── validate.sh                  # Post-deployment validation
├── config/
│   ├── dev.env                      # Dev environment config
│   ├── qa.env                       # QA environment config
│   └── prod.env                     # Prod environment config
└── README.md                        # Documentation&lt;/div&gt;
&lt;/div&gt;

&lt;h3&gt;Key Principles for Database Git Repos&lt;/h3&gt;

&lt;ol&gt;
  &lt;li&gt;&lt;strong&gt;Numbered scripts:&lt;/strong&gt; Use sequence numbers (001_, 002_) to enforce execution order&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Idempotent scripts:&lt;/strong&gt; Scripts should be safe to run multiple times (CREATE OR REPLACE, IF NOT EXISTS)&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Rollback scripts:&lt;/strong&gt; Every deployment script has corresponding rollback&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Environment configs:&lt;/strong&gt; Separate connection details for dev/QA/prod&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Test scripts:&lt;/strong&gt; Automated tests validate deployment success&lt;/li&gt;
&lt;/ol&gt;

&lt;h2 id=&quot;section3&quot;&gt;3. Your First Workflow: Automated Schema Deployment&lt;/h2&gt;

&lt;p&gt;
Let&#39;s start with a simple workflow: automatically deploy schema changes to dev environment when you push to the main branch.
&lt;/p&gt;

&lt;div class=&quot;code-container&quot;&gt;
  &lt;div class=&quot;code-header&quot;&gt;
    &lt;span class=&quot;code-label&quot;&gt;YAML - .github/workflows/deploy-dev.yml&lt;/span&gt;
    &lt;button class=&quot;copy-btn&quot; onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;
  &lt;/div&gt;
  &lt;div class=&quot;code-block&quot;&gt;name: Deploy to Dev

on:
  push:
    branches:
      - main
    paths:
      - &#39;schemas/**&#39;
      - &#39;scripts/**&#39;

jobs:
  deploy-dev:
    runs-on: ubuntu-latest
    
    steps:
      - name: Checkout code
        uses: actions/checkout@v3
      
      - name: Install Oracle Instant Client
        run: |
          wget https://download.oracle.com/otn_software/linux/instantclient/instantclient-basic-linux.x64-21.1.0.0.0.zip
          unzip instantclient-basic-linux.x64-21.1.0.0.0.zip
          sudo mv instantclient_21_1 /opt/oracle/
          echo &quot;/opt/oracle/instantclient_21_1&quot; | sudo tee -a /etc/ld.so.conf.d/oracle.conf
          sudo ldconfig
      
      - name: Install SQLcl
        run: |
          wget https://download.oracle.com/otn_software/java/sqldeveloper/sqlcl-latest.zip
          unzip sqlcl-latest.zip
          sudo mv sqlcl /opt/
          echo &quot;export PATH=\$PATH:/opt/sqlcl/bin&quot; &gt;&gt; $GITHUB_ENV
      
      - name: Deploy DDL Scripts
        env:
          ORACLE_USER: ${{ secrets.DEV_DB_USER }}
          ORACLE_PASSWORD: ${{ secrets.DEV_DB_PASSWORD }}
          ORACLE_CONNECT_STRING: ${{ secrets.DEV_DB_CONNECT }}
        run: |
          echo &quot;Deploying schema changes to DEV...&quot;
          
          # Run DDL scripts in order
          for script in schemas/ddl/*.sql; do
            echo &quot;Executing $script&quot;
            sql ${ORACLE_USER}/${ORACLE_PASSWORD}@${ORACLE_CONNECT_STRING} @$script
            
            if [ $? -ne 0 ]; then
              echo &quot;ERROR: Script $script failed&quot;
              exit 1
            fi
          done
          
          echo &quot;Schema deployment completed successfully&quot;
      
      - name: Run Tests
        env:
          ORACLE_USER: ${{ secrets.DEV_DB_USER }}
          ORACLE_PASSWORD: ${{ secrets.DEV_DB_PASSWORD }}
          ORACLE_CONNECT_STRING: ${{ secrets.DEV_DB_CONNECT }}
        run: |
          echo &quot;Running post-deployment tests...&quot;
          
          for test in tests/*.sql; do
            echo &quot;Running $test&quot;
            sql ${ORACLE_USER}/${ORACLE_PASSWORD}@${ORACLE_CONNECT_STRING} @$test
          done
      
      - name: Notify on Slack
        if: always()
        uses: 8398a7/action-slack@v3
        with:
          status: ${{ job.status }}
          text: |
            Dev Deployment: ${{ job.status }}
            Commit: ${{ github.sha }}
            Author: ${{ github.actor }}
          webhook_url: ${{ secrets.SLACK_WEBHOOK }}&lt;/div&gt;
&lt;/div&gt;

&lt;h3&gt;What This Workflow Does&lt;/h3&gt;

&lt;ol&gt;
  &lt;li&gt;&lt;strong&gt;Triggers on push to main:&lt;/strong&gt; Any commit to main branch automatically deploys to dev&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Only runs if database files changed:&lt;/strong&gt; &lt;code&gt;paths: schemas/**, scripts/**&lt;/code&gt;&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Installs Oracle client:&lt;/strong&gt; Sets up environment to connect to Oracle database&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Executes scripts in order:&lt;/strong&gt; Runs DDL scripts sequentially&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Fails fast:&lt;/strong&gt; If any script fails, workflow stops immediately&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Runs tests:&lt;/strong&gt; Validates deployment with automated tests&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Sends notifications:&lt;/strong&gt; Alerts team on Slack&lt;/li&gt;
&lt;/ol&gt;

&lt;h2 id=&quot;section4&quot;&gt;4. Advanced Workflow: Multi-Environment Deployments (Dev, QA, Prod)&lt;/h2&gt;

&lt;p&gt;
Production deployments need approval gates and different deployment strategies. Here&#39;s a multi-environment workflow.
&lt;/p&gt;

&lt;div class=&quot;code-container&quot;&gt;
  &lt;div class=&quot;code-header&quot;&gt;
    &lt;span class=&quot;code-label&quot;&gt;YAML - .github/workflows/deploy-prod.yml&lt;/span&gt;
    &lt;button class=&quot;copy-btn&quot; onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;
  &lt;/div&gt;
  &lt;div class=&quot;code-block&quot;&gt;name: Deploy to Production

on:
  push:
    tags:
      - &#39;v*&#39;  # Trigger on version tags like v1.0.0

jobs:
  deploy-qa:
    name: Deploy to QA (Pre-Production)
    runs-on: ubuntu-latest
    environment: qa
    
    steps:
      - name: Checkout code
        uses: actions/checkout@v3
      
      - name: Setup Oracle Client
        run: |
          # Install Oracle Instant Client
          wget https://download.oracle.com/otn_software/linux/instantclient/instantclient-basic-linux.x64-21.1.0.0.0.zip
          unzip instantclient-basic-linux.x64-21.1.0.0.0.zip
          sudo mv instantclient_21_1 /opt/oracle/
          echo &quot;/opt/oracle/instantclient_21_1&quot; | sudo tee -a /etc/ld.so.conf.d/oracle.conf
          sudo ldconfig
      
      - name: Deploy to QA
        env:
          ORACLE_USER: ${{ secrets.QA_DB_USER }}
          ORACLE_PASSWORD: ${{ secrets.QA_DB_PASSWORD }}
          ORACLE_CONNECT_STRING: ${{ secrets.QA_DB_CONNECT }}
        run: |
          echo &quot;Deploying to QA environment...&quot;
          bash scripts/deploy.sh qa
      
      - name: Run Full Test Suite
        env:
          ORACLE_USER: ${{ secrets.QA_DB_USER }}
          ORACLE_PASSWORD: ${{ secrets.QA_DB_PASSWORD }}
          ORACLE_CONNECT_STRING: ${{ secrets.QA_DB_CONNECT }}
        run: |
          echo &quot;Running comprehensive tests in QA...&quot;
          bash scripts/validate.sh qa

  deploy-production:
    name: Deploy to Production
    runs-on: ubuntu-latest
    needs: deploy-qa  # Only run if QA deployment succeeds
    environment: 
      name: production
      url: https://database.company.com
    
    steps:
      - name: Checkout code
        uses: actions/checkout@v3
      
      - name: Setup Oracle Client
        run: |
          wget https://download.oracle.com/otn_software/linux/instantclient/instantclient-basic-linux.x64-21.1.0.0.0.zip
          unzip instantclient-basic-linux.x64-21.1.0.0.0.zip
          sudo mv instantclient_21_1 /opt/oracle/
          echo &quot;/opt/oracle/instantclient_21_1&quot; | sudo tee -a /etc/ld.so.conf.d/oracle.conf
          sudo ldconfig
      
      - name: Create Backup Before Deployment
        env:
          ORACLE_USER: ${{ secrets.PROD_DB_USER }}
          ORACLE_PASSWORD: ${{ secrets.PROD_DB_PASSWORD }}
          ORACLE_CONNECT_STRING: ${{ secrets.PROD_DB_CONNECT }}
        run: |
          echo &quot;Creating pre-deployment backup...&quot;
          bash scripts/backup-before-deploy.sh
      
      - name: Deploy to Production
        env:
          ORACLE_USER: ${{ secrets.PROD_DB_USER }}
          ORACLE_PASSWORD: ${{ secrets.PROD_DB_PASSWORD }}
          ORACLE_CONNECT_STRING: ${{ secrets.PROD_DB_CONNECT }}
        run: |
          echo &quot;Deploying to PRODUCTION environment...&quot;
          bash scripts/deploy.sh production
      
      - name: Validate Production Deployment
        env:
          ORACLE_USER: ${{ secrets.PROD_DB_USER }}
          ORACLE_PASSWORD: ${{ secrets.PROD_DB_PASSWORD }}
          ORACLE_CONNECT_STRING: ${{ secrets.PROD_DB_CONNECT }}
        run: |
          echo &quot;Validating production deployment...&quot;
          bash scripts/validate.sh production
      
      - name: Notify Success
        if: success()
        uses: 8398a7/action-slack@v3
        with:
          status: success
          text: |
            ✅ Production Deployment Successful
            Tag: ${{ github.ref }}
            Commit: ${{ github.sha }}
            Deployed by: ${{ github.actor }}
          webhook_url: ${{ secrets.SLACK_WEBHOOK }}
      
      - name: Rollback on Failure
        if: failure()
        env:
          ORACLE_USER: ${{ secrets.PROD_DB_USER }}
          ORACLE_PASSWORD: ${{ secrets.PROD_DB_PASSWORD }}
          ORACLE_CONNECT_STRING: ${{ secrets.PROD_DB_CONNECT }}
        run: |
          echo &quot;Deployment failed - initiating rollback...&quot;
          bash scripts/rollback.sh production
      
      - name: Notify Failure
        if: failure()
        uses: 8398a7/action-slack@v3
        with:
          status: failure
          text: |
            ❌ Production Deployment Failed - Rollback Initiated
            Tag: ${{ github.ref }}
            Commit: ${{ github.sha }}
          webhook_url: ${{ secrets.SLACK_WEBHOOK }}&lt;/div&gt;
&lt;/div&gt;

&lt;h3&gt;Key Features of Production Workflow&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;span class=&quot;green-check&quot;&gt;✅&lt;/span&gt; &lt;strong&gt;Tag-based deployment:&lt;/strong&gt; Only deploys when you create git tag (v1.0.0)&lt;/li&gt;
  &lt;li&gt;&lt;span class=&quot;green-check&quot;&gt;✅&lt;/span&gt; &lt;strong&gt;QA gate:&lt;/strong&gt; Must pass QA before prod deployment starts&lt;/li&gt;
  &lt;li&gt;&lt;span class=&quot;green-check&quot;&gt;✅&lt;/span&gt; &lt;strong&gt;Environment protection:&lt;/strong&gt; GitHub environments can require manual approval&lt;/li&gt;
  &lt;li&gt;&lt;span class=&quot;green-check&quot;&gt;✅&lt;/span&gt; &lt;strong&gt;Pre-deployment backup:&lt;/strong&gt; Creates backup before changing production&lt;/li&gt;
  &lt;li&gt;&lt;span class=&quot;green-check&quot;&gt;✅&lt;/span&gt; &lt;strong&gt;Automatic rollback:&lt;/strong&gt; If deployment fails, rollback script runs automatically&lt;/li&gt;
  &lt;li&gt;&lt;span class=&quot;green-check&quot;&gt;✅&lt;/span&gt; &lt;strong&gt;Notifications:&lt;/strong&gt; Slack alerts for success and failure&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;section5&quot;&gt;5. Automated Database Testing with GitHub Actions&lt;/h2&gt;

&lt;p&gt;
Testing database changes before production is critical. Here&#39;s how to automate database testing.
&lt;/p&gt;

&lt;div class=&quot;code-container&quot;&gt;
  &lt;div class=&quot;code-header&quot;&gt;
    &lt;span class=&quot;code-label&quot;&gt;SQL - tests/test_schema.sql&lt;/span&gt;
    &lt;button class=&quot;copy-btn&quot; onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;
  &lt;/div&gt;
  &lt;div class=&quot;code-block&quot;&gt;-- Test: Verify all required tables exist
SET SERVEROUTPUT ON

DECLARE
    v_count NUMBER;
    v_test_passed BOOLEAN := TRUE;
    TYPE table_list IS TABLE OF VARCHAR2(30);
    required_tables table_list := table_list(&#39;EMPLOYEES&#39;, &#39;DEPARTMENTS&#39;, &#39;SALARY_HISTORY&#39;);
BEGIN
    DBMS_OUTPUT.PUT_LINE(&#39;Running schema validation tests...&#39;);
    
    FOR i IN 1..required_tables.COUNT LOOP
        SELECT COUNT(*) INTO v_count
        FROM user_tables
        WHERE table_name = required_tables(i);
        
        IF v_count = 0 THEN
            DBMS_OUTPUT.PUT_LINE(&#39;FAIL: Table &#39; || required_tables(i) || &#39; does not exist&#39;);
            v_test_passed := FALSE;
        ELSE
            DBMS_OUTPUT.PUT_LINE(&#39;PASS: Table &#39; || required_tables(i) || &#39; exists&#39;);
        END IF;
    END LOOP;
    
    IF NOT v_test_passed THEN
        RAISE_APPLICATION_ERROR(-20001, &#39;Schema validation failed&#39;);
    END IF;
    
    DBMS_OUTPUT.PUT_LINE(&#39;All schema tests passed&#39;);
END;
/

-- Test: Verify required indexes exist
DECLARE
    v_count NUMBER;
BEGIN
    SELECT COUNT(*) INTO v_count
    FROM user_indexes
    WHERE index_name IN (&#39;IDX_EMP_DEPT&#39;, &#39;IDX_EMP_SALARY&#39;);
    
    IF v_count &lt; 2 THEN
        RAISE_APPLICATION_ERROR(-20002, &#39;Required indexes missing&#39;);
    END IF;
    
    DBMS_OUTPUT.PUT_LINE(&#39;Index validation passed&#39;);
END;
/&lt;/div&gt;
&lt;/div&gt;

&lt;div class=&quot;code-container&quot;&gt;
  &lt;div class=&quot;code-header&quot;&gt;
    &lt;span class=&quot;code-label&quot;&gt;YAML - .github/workflows/test-pr.yml (PR Testing)&lt;/span&gt;
    &lt;button class=&quot;copy-btn&quot; onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;
  &lt;/div&gt;
  &lt;div class=&quot;code-block&quot;&gt;name: Test Pull Request

on:
  pull_request:
    branches:
      - main
    paths:
      - &#39;schemas/**&#39;
      - &#39;tests/**&#39;

jobs:
  test-changes:
    runs-on: ubuntu-latest
    
    steps:
      - name: Checkout PR code
        uses: actions/checkout@v3
      
      - name: Setup Oracle Client
        run: |
          wget https://download.oracle.com/otn_software/linux/instantclient/instantclient-basic-linux.x64-21.1.0.0.0.zip
          unzip instantclient-basic-linux.x64-21.1.0.0.0.zip
          sudo mv instantclient_21_1 /opt/oracle/
          echo &quot;/opt/oracle/instantclient_21_1&quot; | sudo tee -a /etc/ld.so.conf.d/oracle.conf
          sudo ldconfig
      
      - name: SQL Lint Check
        run: |
          # Install SQLFluff for SQL linting
          pip install sqlfluff
          sqlfluff lint schemas/ --dialect oracle
      
      - name: Deploy to Test Environment
        env:
          ORACLE_USER: ${{ secrets.TEST_DB_USER }}
          ORACLE_PASSWORD: ${{ secrets.TEST_DB_PASSWORD }}
          ORACLE_CONNECT_STRING: ${{ secrets.TEST_DB_CONNECT }}
        run: |
          echo &quot;Deploying changes to isolated test database...&quot;
          bash scripts/deploy.sh test
      
      - name: Run All Tests
        env:
          ORACLE_USER: ${{ secrets.TEST_DB_USER }}
          ORACLE_PASSWORD: ${{ secrets.TEST_DB_PASSWORD }}
          ORACLE_CONNECT_STRING: ${{ secrets.TEST_DB_CONNECT }}
        run: |
          echo &quot;Running test suite...&quot;
          for test in tests/*.sql; do
            echo &quot;Executing $test&quot;
            sql ${ORACLE_USER}/${ORACLE_PASSWORD}@${ORACLE_CONNECT_STRING} @$test
            
            if [ $? -ne 0 ]; then
              echo &quot;Test failed: $test&quot;
              exit 1
            fi
          done
      
      - name: Generate Test Report
        run: |
          echo &quot;## Test Results&quot; &gt;&gt; $GITHUB_STEP_SUMMARY
          echo &quot;✅ All schema tests passed&quot; &gt;&gt; $GITHUB_STEP_SUMMARY
          echo &quot;✅ All index validations passed&quot; &gt;&gt; $GITHUB_STEP_SUMMARY
          echo &quot;✅ All procedure tests passed&quot; &gt;&gt; $GITHUB_STEP_SUMMARY
      
      - name: Comment on PR
        uses: actions/github-script@v6
        with:
          script: |
            github.rest.issues.createComment({
              issue_number: context.issue.number,
              owner: context.repo.owner,
              repo: context.repo.repo,
              body: &#39;✅ All database tests passed! Ready for review.&#39;
            })&lt;/div&gt;
&lt;/div&gt;

&lt;h2 id=&quot;section6&quot;&gt;6. Scheduled Workflows: Backup Validation and Health Checks&lt;/h2&gt;

&lt;p&gt;
GitHub Actions can run on schedule (cron) for routine database maintenance tasks.
&lt;/p&gt;

&lt;div class=&quot;code-container&quot;&gt;
  &lt;div class=&quot;code-header&quot;&gt;
    &lt;span class=&quot;code-label&quot;&gt;YAML - .github/workflows/backup-validation.yml&lt;/span&gt;
    &lt;button class=&quot;copy-btn&quot; onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;
  &lt;/div&gt;
  &lt;div class=&quot;code-block&quot;&gt;name: Daily Backup Validation

on:
  schedule:
    - cron: &#39;0 8 * * *&#39;  # Run daily at 8 AM UTC
  workflow_dispatch:  # Allow manual trigger

jobs:
  validate-backups:
    runs-on: ubuntu-latest
    
    steps:
      - name: Checkout code
        uses: actions/checkout@v3
      
      - name: Setup Oracle Client
        run: |
          wget https://download.oracle.com/otn_software/linux/instantclient/instantclient-basic-linux.x64-21.1.0.0.0.zip
          unzip instantclient-basic-linux.x64-21.1.0.0.0.zip
          sudo mv instantclient_21_1 /opt/oracle/
          echo &quot;/opt/oracle/instantclient_21_1&quot; | sudo tee -a /etc/ld.so.conf.d/oracle.conf
          sudo ldconfig
      
      - name: Check Last Backup Status
        env:
          ORACLE_USER: ${{ secrets.PROD_DB_USER }}
          ORACLE_PASSWORD: ${{ secrets.PROD_DB_PASSWORD }}
          ORACLE_CONNECT_STRING: ${{ secrets.PROD_DB_CONNECT }}
        run: |
          echo &quot;Checking RMAN backup status...&quot;
          
          sql ${ORACLE_USER}/${ORACLE_PASSWORD}@${ORACLE_CONNECT_STRING} &lt;&lt;EOF
          SET HEADING OFF FEEDBACK OFF PAGESIZE 0
          
          SELECT 
              CASE 
                  WHEN COUNT(*) = 0 THEN &#39;FAIL: No backup in last 24 hours&#39;
                  ELSE &#39;PASS: Backup completed in last 24 hours&#39;
              END AS backup_status
          FROM v\$backup_set
          WHERE completion_time &gt; SYSDATE - 1;
          
          EXIT;
          EOF
      
      - name: Validate Backup Size
        env:
          ORACLE_USER: ${{ secrets.PROD_DB_USER }}
          ORACLE_PASSWORD: ${{ secrets.PROD_DB_PASSWORD }}
          ORACLE_CONNECT_STRING: ${{ secrets.PROD_DB_CONNECT }}
        run: |
          echo &quot;Checking backup sizes...&quot;
          
          sql ${ORACLE_USER}/${ORACLE_PASSWORD}@${ORACLE_CONNECT_STRING} &lt;&lt;EOF
          SELECT 
              TO_CHAR(completion_time, &#39;YYYY-MM-DD HH24:MI:SS&#39;) AS backup_time,
              ROUND(SUM(bytes)/1024/1024/1024, 2) AS backup_size_gb
          FROM v\$backup_set bs
          JOIN v\$backup_piece bp ON bs.set_stamp = bp.set_stamp
          WHERE completion_time &gt; SYSDATE - 1
          GROUP BY completion_time
          ORDER BY completion_time DESC;
          
          EXIT;
          EOF
      
      - name: Send Alert if Backup Failed
        if: failure()
        uses: 8398a7/action-slack@v3
        with:
          status: failure
          text: |
            ⚠️ Backup Validation Failed
            Please check backup status immediately
          webhook_url: ${{ secrets.SLACK_WEBHOOK }}&lt;/div&gt;
&lt;/div&gt;

&lt;div class=&quot;code-container&quot;&gt;
  &lt;div class=&quot;code-header&quot;&gt;
    &lt;span class=&quot;code-label&quot;&gt;YAML - .github/workflows/health-check.yml&lt;/span&gt;
    &lt;button class=&quot;copy-btn&quot; onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;
  &lt;/div&gt;
  &lt;div class=&quot;code-block&quot;&gt;name: Database Health Check

on:
  schedule:
    - cron: &#39;0 */6 * * *&#39;  # Every 6 hours
  workflow_dispatch:

jobs:
  health-check:
    runs-on: ubuntu-latest
    
    steps:
      - name: Checkout code
        uses: actions/checkout@v3
      
      - name: Setup Oracle Client
        run: |
          wget https://download.oracle.com/otn_software/linux/instantclient/instantclient-basic-linux.x64-21.1.0.0.0.zip
          unzip instantclient-basic-linux.x64-21.1.0.0.0.zip
          sudo mv instantclient_21_1 /opt/oracle/
          echo &quot;/opt/oracle/instantclient_21_1&quot; | sudo tee -a /etc/ld.so.conf.d/oracle.conf
          sudo ldconfig
      
      - name: Check Tablespace Usage
        env:
          ORACLE_USER: ${{ secrets.PROD_DB_USER }}
          ORACLE_PASSWORD: ${{ secrets.PROD_DB_PASSWORD }}
          ORACLE_CONNECT_STRING: ${{ secrets.PROD_DB_CONNECT }}
        run: |
          echo &quot;Checking tablespace usage...&quot;
          
          RESULT=$(sql -S ${ORACLE_USER}/${ORACLE_PASSWORD}@${ORACLE_CONNECT_STRING} &lt;&lt;EOF
          SET HEADING OFF FEEDBACK OFF PAGESIZE 0
          SELECT MAX(ROUND(bytes_used/bytes_total * 100, 2))
          FROM (
              SELECT 
                  tablespace_name,
                  SUM(bytes) as bytes_total,
                  SUM(bytes) - SUM(DECODE(maxbytes, 0, bytes, maxbytes - bytes)) as bytes_used
              FROM dba_data_files
              GROUP BY tablespace_name
          );
          EXIT;
          EOF
          )
          
          echo &quot;Max tablespace usage: ${RESULT}%&quot;
          
          if (( $(echo &quot;$RESULT &gt; 85&quot; | bc -l) )); then
            echo &quot;WARNING: Tablespace usage above 85%&quot;
            exit 1
          fi
      
      - name: Check Invalid Objects
        env:
          ORACLE_USER: ${{ secrets.PROD_DB_USER }}
          ORACLE_PASSWORD: ${{ secrets.PROD_DB_PASSWORD }}
          ORACLE_CONNECT_STRING: ${{ secrets.PROD_DB_CONNECT }}
        run: |
          echo &quot;Checking for invalid objects...&quot;
          
          COUNT=$(sql -S ${ORACLE_USER}/${ORACLE_PASSWORD}@${ORACLE_CONNECT_STRING} &lt;&lt;EOF
          SET HEADING OFF FEEDBACK OFF PAGESIZE 0
          SELECT COUNT(*) FROM dba_objects WHERE status = &#39;INVALID&#39;;
          EXIT;
          EOF
          )
          
          echo &quot;Invalid objects count: $COUNT&quot;
          
          if [ $COUNT -gt 10 ]; then
            echo &quot;WARNING: More than 10 invalid objects found&quot;
            exit 1
          fi
      
      - name: Generate Health Report
        run: |
          echo &quot;## Database Health Check Results&quot; &gt;&gt; $GITHUB_STEP_SUMMARY
          echo &quot;- Tablespace usage: ✅ Normal&quot; &gt;&gt; $GITHUB_STEP_SUMMARY
          echo &quot;- Invalid objects: ✅ Within threshold&quot; &gt;&gt; $GITHUB_STEP_SUMMARY
          echo &quot;- Backup status: ✅ Up to date&quot; &gt;&gt; $GITHUB_STEP_SUMMARY&lt;/div&gt;
&lt;/div&gt;

&lt;h2 id=&quot;section7&quot;&gt;7. Secrets Management: Handling Database Credentials Securely&lt;/h2&gt;

&lt;p&gt;
Never hardcode database credentials in workflows. GitHub provides secure secrets management.
&lt;/p&gt;

&lt;h3&gt;Setting Up Secrets&lt;/h3&gt;

&lt;ol&gt;
  &lt;li&gt;Go to your GitHub repository&lt;/li&gt;
  &lt;li&gt;Navigate to Settings → Secrets and variables → Actions&lt;/li&gt;
  &lt;li&gt;Click &quot;New repository secret&quot;&lt;/li&gt;
  &lt;li&gt;Add secrets for each environment&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;Required Secrets for Database Workflows&lt;/h3&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Secret Name&lt;/th&gt;
      &lt;th&gt;Description&lt;/th&gt;
      &lt;th&gt;Example Value&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;DEV_DB_USER&lt;/td&gt;
      &lt;td&gt;Dev database username&lt;/td&gt;
      &lt;td&gt;app_user_dev&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;DEV_DB_PASSWORD&lt;/td&gt;
      &lt;td&gt;Dev database password&lt;/td&gt;
      &lt;td&gt;secure_password_123&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;DEV_DB_CONNECT&lt;/td&gt;
      &lt;td&gt;Dev connection string&lt;/td&gt;
      &lt;td&gt;dev-db.company.com:1521/DEVDB&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;PROD_DB_USER&lt;/td&gt;
      &lt;td&gt;Prod database username&lt;/td&gt;
      &lt;td&gt;app_user_prod&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;PROD_DB_PASSWORD&lt;/td&gt;
      &lt;td&gt;Prod database password&lt;/td&gt;
      &lt;td&gt;prod_secure_password_456&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;PROD_DB_CONNECT&lt;/td&gt;
      &lt;td&gt;Prod connection string&lt;/td&gt;
      &lt;td&gt;prod-db.company.com:1521/PRODDB&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;SLACK_WEBHOOK&lt;/td&gt;
      &lt;td&gt;Slack notification webhook&lt;/td&gt;
      &lt;td&gt;https://hooks.slack.com/...&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;h3&gt;Best Practices for Secrets&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;span class=&quot;green-check&quot;&gt;✅&lt;/span&gt; &lt;strong&gt;Separate secrets per environment:&lt;/strong&gt; Different credentials for dev/QA/prod&lt;/li&gt;
  &lt;li&gt;&lt;span class=&quot;green-check&quot;&gt;✅&lt;/span&gt; &lt;strong&gt;Use service accounts:&lt;/strong&gt; Don&#39;t use personal DBA credentials&lt;/li&gt;
  &lt;li&gt;&lt;span class=&quot;green-check&quot;&gt;✅&lt;/span&gt; &lt;strong&gt;Least privilege:&lt;/strong&gt; Grant only necessary permissions&lt;/li&gt;
  &lt;li&gt;&lt;span class=&quot;green-check&quot;&gt;✅&lt;/span&gt; &lt;strong&gt;Rotate regularly:&lt;/strong&gt; Change passwords quarterly&lt;/li&gt;
  &lt;li&gt;&lt;span class=&quot;red-x&quot;&gt;❌&lt;/span&gt; &lt;strong&gt;Never log secrets:&lt;/strong&gt; Avoid printing credentials in logs&lt;/li&gt;
  &lt;li&gt;&lt;span class=&quot;red-x&quot;&gt;❌&lt;/span&gt; &lt;strong&gt;Never commit secrets:&lt;/strong&gt; Use git-secrets to prevent accidental commits&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;section8&quot;&gt;8. Real Production Example: Complete CI/CD Pipeline&lt;/h2&gt;

&lt;p&gt;
Here&#39;s a complete deployment script used in production for Oracle schema deployments.
&lt;/p&gt;

&lt;div class=&quot;code-container&quot;&gt;
  &lt;div class=&quot;code-header&quot;&gt;
    &lt;span class=&quot;code-label&quot;&gt;Bash - scripts/deploy.sh&lt;/span&gt;
    &lt;button class=&quot;copy-btn&quot; onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;
  &lt;/div&gt;
  &lt;div class=&quot;code-block&quot;&gt;#!/bin/bash
# deploy.sh - Production deployment orchestration script
# Usage: ./deploy.sh &lt;environment&gt;

set -e  # Exit on error

ENVIRONMENT=$1

if [ -z &quot;$ENVIRONMENT&quot; ]; then
    echo &quot;ERROR: Environment not specified&quot;
    echo &quot;Usage: ./deploy.sh &lt;dev|qa|production&gt;&quot;
    exit 1
fi

# Load environment configuration
source config/${ENVIRONMENT}.env

# Logging
LOG_FILE=&quot;deploy_${ENVIRONMENT}_$(date +%Y%m%d_%H%M%S).log&quot;
exec &gt; &gt;(tee -a ${LOG_FILE})
exec 2&gt;&amp;1

log() {
    echo &quot;[$(date &#39;+%Y-%m-%d %H:%M:%S&#39;)] $1&quot;
}

log &quot;=========================================&quot;
log &quot;Starting deployment to ${ENVIRONMENT}&quot;
log &quot;=========================================&quot;

# Pre-deployment checks
log &quot;Running pre-deployment validation...&quot;

sqlplus -S ${ORACLE_USER}/${ORACLE_PASSWORD}@${ORACLE_CONNECT_STRING} &lt;&lt;EOF
WHENEVER SQLERROR EXIT SQL.SQLCODE

-- Check database connectivity
SELECT &#39;Connected to: &#39; || instance_name FROM v\$instance;

-- Check if database is open
SELECT &#39;Database status: &#39; || status FROM v\$instance;

-- Verify sufficient tablespace space
DECLARE
    v_free_pct NUMBER;
BEGIN
    SELECT MIN(ROUND((bytes_free/bytes_total)*100, 2))
    INTO v_free_pct
    FROM (
        SELECT 
            tablespace_name,
            SUM(bytes) as bytes_total,
            SUM(DECODE(maxbytes, 0, bytes, maxbytes - bytes)) as bytes_free
        FROM dba_data_files
        GROUP BY tablespace_name
    );
    
    IF v_free_pct &lt; 15 THEN
        RAISE_APPLICATION_ERROR(-20001, &#39;Insufficient tablespace space: &#39; || v_free_pct || &#39;% free&#39;);
    END IF;
    
    DBMS_OUTPUT.PUT_LINE(&#39;Tablespace check passed: &#39; || v_free_pct || &#39;% free&#39;);
END;
/

EXIT;
EOF

if [ $? -ne 0 ]; then
    log &quot;ERROR: Pre-deployment checks failed&quot;
    exit 1
fi

log &quot;Pre-deployment checks passed&quot;

# Deploy DDL scripts
log &quot;Deploying DDL scripts...&quot;

for script in schemas/ddl/*.sql; do
    log &quot;Executing: $script&quot;
    
    sqlplus -S ${ORACLE_USER}/${ORACLE_PASSWORD}@${ORACLE_CONNECT_STRING} @$script
    
    if [ $? -ne 0 ]; then
        log &quot;ERROR: Script $script failed&quot;
        log &quot;Initiating rollback...&quot;
        bash scripts/rollback.sh ${ENVIRONMENT}
        exit 1
    fi
    
    log &quot;Successfully executed: $script&quot;
done

# Deploy stored procedures
log &quot;Deploying stored procedures...&quot;

for proc in schemas/procedures/*.sql; do
    log &quot;Executing: $proc&quot;
    
    sqlplus -S ${ORACLE_USER}/${ORACLE_PASSWORD}@${ORACLE_CONNECT_STRING} @$proc
    
    if [ $? -ne 0 ]; then
        log &quot;WARNING: Procedure $proc failed (continuing...)&quot;
    else
        log &quot;Successfully executed: $proc&quot;
    fi
done

# Compile invalid objects
log &quot;Compiling invalid objects...&quot;

sqlplus -S ${ORACLE_USER}/${ORACLE_PASSWORD}@${ORACLE_CONNECT_STRING} &lt;&lt;EOF
BEGIN
    DBMS_UTILITY.compile_schema(
        schema =&gt; USER,
        compile_all =&gt; FALSE
    );
END;
/
EXIT;
EOF

# Verify deployment
log &quot;Running post-deployment validation...&quot;

INVALID_COUNT=$(sqlplus -S ${ORACLE_USER}/${ORACLE_PASSWORD}@${ORACLE_CONNECT_STRING} &lt;&lt;EOF
SET HEADING OFF FEEDBACK OFF PAGESIZE 0
SELECT COUNT(*) FROM user_objects WHERE status = &#39;INVALID&#39;;
EXIT;
EOF
)

log &quot;Invalid objects after deployment: $INVALID_COUNT&quot;

if [ $INVALID_COUNT -gt 5 ]; then
    log &quot;WARNING: High number of invalid objects&quot;
fi

log &quot;=========================================&quot;
log &quot;Deployment to ${ENVIRONMENT} completed successfully&quot;
log &quot;Log file: ${LOG_FILE}&quot;
log &quot;=========================================&quot;&lt;/div&gt;
&lt;/div&gt;

&lt;h2 id=&quot;section9&quot;&gt;9. FAQ&lt;/h2&gt;

&lt;div class=&quot;faq-item&quot;&gt;
  &lt;div class=&quot;faq-question&quot;&gt;Do I need to be a developer to use GitHub Actions?&lt;/div&gt;
  &lt;div class=&quot;faq-answer&quot;&gt;
    No. GitHub Actions uses YAML configuration files which are simpler than most programming languages. If you can write SQL scripts and bash scripts (which most DBAs can), you can write GitHub Actions workflows. Start with simple workflows (auto-deploy on push) and gradually add complexity. The examples in this guide are copy-paste ready—customize connection strings and you&#39;re good to go. Most DBAs master GitHub Actions basics in 1-2 weeks.
  &lt;/div&gt;
&lt;/div&gt;

&lt;div class=&quot;faq-item&quot;&gt;
  &lt;div class=&quot;faq-question&quot;&gt;Is GitHub Actions free for database automation?&lt;/div&gt;
  &lt;div class=&quot;faq-answer&quot;&gt;
    Yes, for public repositories. For private repositories, GitHub provides 2,000 free minutes per month (more than enough for most database teams). A typical deployment workflow runs 5-10 minutes, so 2,000 minutes = 200-400 deployments per month. If you exceed this, paid plans start at $4/month for 3,000 minutes. Compared to the cost of manual deployment errors, it&#39;s negligible. Enterprise GitHub includes unlimited minutes.
  &lt;/div&gt;
&lt;/div&gt;

&lt;div class=&quot;faq-item&quot;&gt;
  &lt;div class=&quot;faq-question&quot;&gt;How do I handle production approvals with GitHub Actions?&lt;/div&gt;
  &lt;div class=&quot;faq-answer&quot;&gt;
    Use GitHub Environments with protection rules. In your workflow, specify `environment: production` and configure that environment in repository settings to require: (1) Manual approval from specific reviewers, (2) Wait timer (e.g., 30 minutes before deployment), (3) Branch restrictions (only deploy from main/release branches). This gives you approval gates like enterprise deployment tools, but free and integrated with git.
  &lt;/div&gt;
&lt;/div&gt;

&lt;div class=&quot;faq-item&quot;&gt;
  &lt;div class=&quot;faq-question&quot;&gt;Should I mention GitHub Actions experience on my DBA resume?&lt;/div&gt;
  &lt;div class=&quot;faq-answer&quot;&gt;
    Absolutely. Write: &quot;Implemented CI/CD pipelines for Oracle database deployments using GitHub Actions, automating schema changes, backup validation, and health checks across dev/QA/production environments.&quot; DevOps skills for DBAs are highly valued. Many organizations are moving toward &quot;Database DevOps&quot; and GitHub Actions experience shows you understand modern deployment practices. Even if you only automated dev deployments, it&#39;s valuable experience worth highlighting.
  &lt;/div&gt;
&lt;/div&gt;

&lt;h2 id=&quot;section10&quot;&gt;10. Related Reading from Real Production Systems&lt;/h2&gt;

&lt;div class=&quot;related-reading&quot;&gt;
&lt;p&gt;
If you want to deepen your understanding of database automation and DevOps practices, the following articles from real production experience may also be useful:
&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;a href=&quot;https://chetanyadavds.blogspot.com/2026/01/n8n-oracle-telegram-alerts.html&quot; target=&quot;_blank&quot;&gt;N8N Oracle Telegram Alerts: Automating Database Monitoring&lt;/a&gt;
    &lt;span class=&quot;why-matters&quot;&gt;Why it matters: After automating deployments with GitHub Actions, the next step is automated monitoring. This guide shows how to integrate Oracle monitoring with notification systems for complete automation.&lt;/span&gt;
  &lt;/li&gt;
  
  &lt;li&gt;
    &lt;a href=&quot;#&quot;&gt;Automating Backup and Restore in Oracle 19c and 23ai: Complete DBA Guide&lt;/a&gt;
    &lt;span class=&quot;why-matters&quot;&gt;Why it matters: Combine RMAN backup automation with GitHub Actions scheduled workflows for complete backup validation automation. This guide covers the RMAN scripts that GitHub Actions can execute on schedule.&lt;/span&gt;
  &lt;/li&gt;
  
  &lt;li&gt;
    &lt;a href=&quot;#&quot;&gt;Oracle to PostgreSQL SQL Conversion Guide: Real-World Examples for DBAs&lt;/a&gt;
    &lt;span class=&quot;why-matters&quot;&gt;Why it matters: GitHub Actions works with any database. If you&#39;re migrating from Oracle to PostgreSQL, the same CI/CD patterns apply—this guide helps with SQL conversion for PostgreSQL deployments.&lt;/span&gt;
  &lt;/li&gt;
  
  &lt;li&gt;
    &lt;a href=&quot;#&quot;&gt;Multi-Cloud Database Architecture: Oracle, AWS, Azure, GCP Reference Guide&lt;/a&gt;
    &lt;span class=&quot;why-matters&quot;&gt;Why it matters: GitHub Actions can deploy to multiple cloud databases simultaneously. This architecture guide helps when automating deployments across AWS RDS, Azure SQL, and GCP AlloyDB.&lt;/span&gt;
  &lt;/li&gt;
  
  &lt;li&gt;
    &lt;a href=&quot;https://chetanyadavds.blogspot.com/2026/01/oracle-database-23ai-revolutionizing.html&quot; target=&quot;_blank&quot;&gt;Oracle Database 23ai: Revolutionizing Data Distribution Across the Globe&lt;/a&gt;
    &lt;span class=&quot;why-matters&quot;&gt;Why it matters: Understanding modern Oracle 23ai features helps when building GitHub Actions workflows that leverage new Oracle capabilities like automated schema evolution and cloud-native integrations.&lt;/span&gt;
  &lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;

&lt;!-- ABOUT THE AUTHOR --&gt;
&lt;div class=&quot;about-author&quot;&gt;
&lt;h2&gt;About the Author&lt;/h2&gt;

&lt;div class=&quot;author-content&quot;&gt;
  
  &lt;div class=&quot;author-text&quot;&gt;
    &lt;div class=&quot;author-name&quot;&gt;Chetan Yadav&lt;/div&gt;
    
    &lt;p class=&quot;author-bio&quot;&gt;
      &lt;strong&gt;Chetan Yadav&lt;/strong&gt; is a &lt;strong&gt;Senior Oracle, PostgreSQL, MySQL, and Cloud DBA&lt;/strong&gt; with &lt;strong&gt;14+ years&lt;/strong&gt; of hands-on experience managing production databases across on-premises, hybrid, and cloud environments. He specializes in high availability architecture, performance tuning, disaster recovery, and database automation.
    &lt;/p&gt;
    
    &lt;p class=&quot;author-bio&quot;&gt;
      Throughout his career, Chetan has implemented CI/CD pipelines for database teams in finance, healthcare, and e-commerce sectors. He has automated hundreds of database deployments using GitHub Actions, reducing deployment time by 80% and eliminating human error in production releases.
    &lt;/p&gt;
    
    &lt;p class=&quot;author-bio&quot;&gt;
      Chetan is passionate about mentoring early-career DBAs and sharing real-world production lessons that aren&#39;t found in documentation. His writing focuses on practical decision-making, career growth, and bridging the gap between traditional DBA practices and modern DevOps.
    &lt;/p&gt;
    
    &lt;p class=&quot;author-bio&quot;&gt;
      This blog focuses on &lt;strong&gt;real-world DBA problems, career growth, and practical learning&lt;/strong&gt; — not theoretical documentation or vendor marketing.
    &lt;/p&gt;
    
    &lt;div class=&quot;social-links&quot;&gt;
      &lt;a href=&quot;https://www.linkedin.com/in/chetanyadavvds/&quot; target=&quot;_blank&quot;&gt;🔗 LinkedIn&lt;/a&gt;
      &lt;a href=&quot;https://www.youtube.com/@levelup_careers&quot; target=&quot;_blank&quot;&gt;🎥 YouTube&lt;/a&gt;
      &lt;a href=&quot;https://www.instagram.com/levelup_careers/&quot; target=&quot;_blank&quot;&gt;📸 Instagram&lt;/a&gt;
      &lt;a href=&quot;https://x.com/home&quot; target=&quot;_blank&quot;&gt;🐦 Twitter (X)&lt;/a&gt;
      &lt;a href=&quot;https://www.facebook.com/oracledbainfo/&quot; target=&quot;_blank&quot;&gt;📘 Facebook&lt;/a&gt;
      &lt;a href=&quot;#&quot;&gt;📬 Newsletter&lt;/a&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;

&lt;!-- POST FOOTER --&gt;
&lt;div class=&quot;post-footer&quot;&gt;
  &lt;div class=&quot;post-meta&quot;&gt;
    &lt;strong&gt;by Chetan Yadav&lt;/strong&gt; • Friday, February 07, 2026
  &lt;/div&gt;
  
  &lt;div class=&quot;share-buttons&quot;&gt;
    &lt;strong&gt;Share:&lt;/strong&gt;
    &lt;a href=&quot;#&quot;&gt;📧 Email&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;📝 BlogThis&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;🐦 X&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;📘 Facebook&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;📌 Pinterest&lt;/a&gt;
  &lt;/div&gt;
  
  &lt;div class=&quot;tags&quot;&gt;
    &lt;strong&gt;Tags:&lt;/strong&gt;
    &lt;a href=&quot;#&quot;&gt;GitHub Actions&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;Oracle DBA&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;CI/CD&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;Database Automation&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;DevOps&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;Database Deployment&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;Automation&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;DBA Career&lt;/a&gt;
  &lt;/div&gt;
&lt;/div&gt;

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

&lt;/div&gt;

&lt;!-- COPY CODE JAVASCRIPT --&gt;
&lt;script&gt;
function copyCode(button) {
  const codeContainer = button.closest(&#39;.code-container&#39;);
  const codeBlock = codeContainer.querySelector(&#39;.code-block&#39;);
  
  const textArea = document.createElement(&#39;textarea&#39;);
  textArea.value = codeBlock.textContent;
  textArea.style.position = &#39;fixed&#39;;
  textArea.style.left = &#39;-9999px&#39;;
  document.body.appendChild(textArea);
  
  textArea.select();
  textArea.setSelectionRange(0, 99999);
  
  try {
    document.execCommand(&#39;copy&#39;);
    
    button.textContent = &#39;Copied!&#39;;
    button.classList.add(&#39;copied&#39;);
    
    setTimeout(() =&gt; {
      button.textContent = &#39;Copy&#39;;
      button.classList.remove(&#39;copied&#39;);
    }, 2000);
  } catch (err) {
    console.error(&#39;Failed to copy code:&#39;, err);
    button.textContent = &#39;Failed&#39;;
    setTimeout(() =&gt; {
      button.textContent = &#39;Copy&#39;;
    }, 2000);
  }
  
  document.body.removeChild(textArea);
}
&lt;/script&gt;

&lt;/body&gt;
&lt;/html&gt;</content><link rel='replies' type='application/atom+xml' href='http://chetanyadavds.blogspot.com/feeds/8845110704255715329/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://chetanyadavds.blogspot.com/2026/02/github-actions-for-dbas-automating-oracle-scripts.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/436196721812840248/posts/default/8845110704255715329'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/436196721812840248/posts/default/8845110704255715329'/><link rel='alternate' type='text/html' href='http://chetanyadavds.blogspot.com/2026/02/github-actions-for-dbas-automating-oracle-scripts.html' title='GitHub Actions for DBAs: Automating Oracle Database Scripts and Deployments'/><author><name>Chetan Yadav</name><uri>http://www.blogger.com/profile/02557500437758632199</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiE0TgifWM4l1b3sy_cK2y41bpqyfY1U25-p5IBKkSg8pJLFRvjYr_kF7W_MgsYdc21DutWF9H6qlShQDQspQLbZEQ5CSUA51Wp6Mh9l5Ygd4NPSuQyqwSMrKitCWwSLr0oHBg9TGjxAvAM7TTkkehHLL1MFWg0wSb31CxywQxIokg9pg/s1600/IMG-20251013-WA0038.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-436196721812840248.post-4298272963716207132</id><published>2026-02-19T12:00:00.001+05:30</published><updated>2026-02-19T12:00:00.111+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="Database Conversion"/><category scheme="http://www.blogger.com/atom/ns#" term="Database Migration"/><category scheme="http://www.blogger.com/atom/ns#" term="Function Mapping"/><category scheme="http://www.blogger.com/atom/ns#" term="Oracle DBA"/><category scheme="http://www.blogger.com/atom/ns#" term="Oracle Migration"/><category scheme="http://www.blogger.com/atom/ns#" term="Oracle to PostgreSQL"/><category scheme="http://www.blogger.com/atom/ns#" term="PL/pgSQL"/><category scheme="http://www.blogger.com/atom/ns#" term="PL/SQL"/><category scheme="http://www.blogger.com/atom/ns#" term="PostgreSQL"/><category scheme="http://www.blogger.com/atom/ns#" term="PostgreSQL Migration"/><category scheme="http://www.blogger.com/atom/ns#" term="SQL Conversion"/><category scheme="http://www.blogger.com/atom/ns#" term="SQL Guide"/><category scheme="http://www.blogger.com/atom/ns#" term="SQL Syntax"/><title type='text'>Oracle to PostgreSQL SQL Conversion Guide: Real-World Examples for DBAs</title><content type='html'>&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;en&quot;&gt;
&lt;head&gt;
&lt;meta charset=&quot;UTF-8&quot;&gt;
&lt;title&gt;Oracle to PostgreSQL SQL Conversion Guide: Real-World Examples for DBAs&lt;/title&gt;
&lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;
&lt;meta name=&quot;description&quot; content=&quot;Complete Oracle to PostgreSQL SQL conversion guide with real examples. Syntax differences, function mappings, PL/SQL to PL/pgSQL conversion, and production migration patterns.&quot;&gt;

&lt;!-- Favicon and Logo --&gt;
&lt;link rel=&quot;icon&quot; type=&quot;image/svg+xml&quot; href=&quot;data:image/svg+xml,%3Csvg xmlns=&#39;http://www.w3.org/2000/svg&#39; viewBox=&#39;0 0 100 100&#39;%3E%3Cdefs%3E%3ClinearGradient id=&#39;leftGrad&#39; x1=&#39;0%25&#39; y1=&#39;0%25&#39; x2=&#39;100%25&#39; y2=&#39;100%25&#39;%3E%3Cstop offset=&#39;0%25&#39; style=&#39;stop-color:%23d93025;stop-opacity:1&#39;/%3E%3Cstop offset=&#39;100%25&#39; style=&#39;stop-color:%23a82318;stop-opacity:1&#39;/%3E%3C/linearGradient%3E%3ClinearGradient id=&#39;rightGrad&#39; x1=&#39;0%25&#39; y1=&#39;0%25&#39; x2=&#39;100%25&#39; y2=&#39;100%25&#39;%3E%3Cstop offset=&#39;0%25&#39; style=&#39;stop-color:%23336791;stop-opacity:1&#39;/%3E%3Cstop offset=&#39;100%25&#39; style=&#39;stop-color:%23254470;stop-opacity:1&#39;/%3E%3C/linearGradient%3E%3C/defs%3E%3Crect width=&#39;50&#39; height=&#39;100&#39; fill=&#39;url(%23leftGrad)&#39;/%3E%3Crect x=&#39;50&#39; width=&#39;50&#39; height=&#39;100&#39; fill=&#39;url(%23rightGrad)&#39;/%3E%3Cpath d=&#39;M20,35 L30,35 L30,55 L20,55 Z&#39; fill=&#39;white&#39; opacity=&#39;0.9&#39;/%3E%3Ccircle cx=&#39;25&#39; cy=&#39;30&#39; r=&#39;3&#39; fill=&#39;white&#39; opacity=&#39;0.9&#39;/%3E%3Cpath d=&#39;M70,35 Q85,45 70,55 Q55,45 70,35&#39; fill=&#39;white&#39; opacity=&#39;0.9&#39;/%3E%3Cpath d=&#39;M45,40 L55,50 M45,50 L55,40&#39; stroke=&#39;white&#39; stroke-width=&#39;3&#39; opacity=&#39;0.9&#39;/%3E%3C/svg%3E&quot;&gt;
&lt;link rel=&quot;apple-touch-icon&quot; href=&quot;data:image/svg+xml,%3Csvg xmlns=&#39;http://www.w3.org/2000/svg&#39; viewBox=&#39;0 0 100 100&#39;%3E%3Cdefs%3E%3ClinearGradient id=&#39;leftGrad&#39; x1=&#39;0%25&#39; y1=&#39;0%25&#39; x2=&#39;100%25&#39; y2=&#39;100%25&#39;%3E%3Cstop offset=&#39;0%25&#39; style=&#39;stop-color:%23d93025;stop-opacity:1&#39;/%3E%3Cstop offset=&#39;100%25&#39; style=&#39;stop-color:%23a82318;stop-opacity:1&#39;/%3E%3C/linearGradient%3E%3ClinearGradient id=&#39;rightGrad&#39; x1=&#39;0%25&#39; y1=&#39;0%25&#39; x2=&#39;100%25&#39; y2=&#39;100%25&#39;%3E%3Cstop offset=&#39;0%25&#39; style=&#39;stop-color:%23336791;stop-opacity:1&#39;/%3E%3Cstop offset=&#39;100%25&#39; style=&#39;stop-color:%23254470;stop-opacity:1&#39;/%3E%3C/linearGradient%3E%3C/defs%3E%3Crect width=&#39;50&#39; height=&#39;100&#39; fill=&#39;url(%23leftGrad)&#39;/%3E%3Crect x=&#39;50&#39; width=&#39;50&#39; height=&#39;100&#39; fill=&#39;url(%23rightGrad)&#39;/%3E%3Cpath d=&#39;M20,35 L30,35 L30,55 L20,55 Z&#39; fill=&#39;white&#39; opacity=&#39;0.9&#39;/%3E%3Ccircle cx=&#39;25&#39; cy=&#39;30&#39; r=&#39;3&#39; fill=&#39;white&#39; opacity=&#39;0.9&#39;/%3E%3Cpath d=&#39;M70,35 Q85,45 70,55 Q55,45 70,35&#39; fill=&#39;white&#39; opacity=&#39;0.9&#39;/%3E%3Cpath d=&#39;M45,40 L55,50 M45,50 L55,40&#39; stroke=&#39;white&#39; stroke-width=&#39;3&#39; opacity=&#39;0.9&#39;/%3E%3C/svg%3E&quot;&gt;

&lt;style&gt;
* {
  margin: 0;
  padding: 0;
  box-sizing: border-box;
}

body {
  background: #ffffff;
  color: #333333;
  font-family: Arial, Helvetica, sans-serif;
  font-size: 16px;
  line-height: 1.7;
}

.page-wrapper {
  display: flex;
  flex-direction: column;
  min-height: 100vh;
}

/* ==================== NAVIGATION ==================== */
.navigation {
  background: #ffffff;
  border-bottom: 1px solid #e0e0e0;
  padding: 12px 0;
}

.nav-content {
  max-width: 1200px;
  margin: 0 auto;
  padding: 0 20px;
  display: flex;
  gap: 30px;
}

.nav-content a {
  color: #333333;
  text-decoration: none;
  font-size: 15px;
}

.nav-content a:hover {
  color: #1a73e8;
  text-decoration: underline;
}

/* ==================== HERO HEADER INTRO ==================== */
.hero-header {
  background: linear-gradient(135deg, #1e3a5f 0%, #2c5282 50%, #1a365d 100%);
  color: #ffffff;
  padding: 60px 40px;
  margin: 0;
  width: 100%;
  position: relative;
  z-index: 1;
  margin-bottom: 0;
}

.hero-header-content {
  max-width: 1200px;
  margin: 0 auto;
  padding: 0 20px;
}

.hero-header h1 {
  font-size: 42px;
  font-weight: 700;
  color: #ffffff;
  line-height: 1.3;
  margin-bottom: 20px;
}

.hero-subtitle {
  font-size: 20px;
  font-weight: 300;
  color: #e2e8f0;
  opacity: 0.95;
  margin-bottom: 30px;
}

.hero-meta {
  display: flex;
  gap: 30px;
  align-items: center;
  flex-wrap: wrap;
  font-size: 15px;
  color: #cbd5e1;
}

.hero-meta-item {
  display: flex;
  align-items: center;
  gap: 8px;
}

/* ==================== HERO IMAGE SECTION ==================== */
.hero-image-section {
  width: 100%;
  margin: 0;
  padding: 0;
  overflow: hidden;
}

.hero-image-section img {
  width: 100%;
  height: auto;
  display: block;
  max-height: 500px;
  object-fit: cover;
}

/* ==================== MAIN CONTAINER ==================== */
.main-content-wrapper {
  width: 100%;
  background: #ffffff;
  position: relative;
  z-index: 1;
  margin-top: 0;
}

.container {
  max-width: 800px;
  margin: 0 auto;
  padding: 30px 20px;
  background: #ffffff;
}

/* ==================== READING TIME BADGE ==================== */
.reading-time-badge {
  display: inline-block;
  background: linear-gradient(135deg, #ef4444 0%, #dc2626 100%);
  color: #ffffff;
  padding: 12px 28px;
  border-radius: 50px;
  font-size: 15px;
  font-weight: 500;
  margin-bottom: 30px;
  box-shadow: 0 4px 12px rgba(239, 68, 68, 0.3);
}

.page-tagline {
  color: #666666;
  font-size: 15px;
  font-style: italic;
  text-align: center;
  margin-bottom: 35px;
}

/* ==================== TABLE OF CONTENTS ==================== */
.toc {
  background: #f8fafc;
  border-left: 4px solid #ef4444;
  padding: 28px 32px;
  margin: 35px 0;
  border-radius: 8px;
  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.05);
}

.toc-header {
  display: flex;
  align-items: center;
  gap: 10px;
  font-size: 24px;
  font-weight: bold;
  color: #000000;
  margin-bottom: 20px;
}

.toc-icon {
  font-size: 24px;
}

.toc ol {
  margin-left: 20px;
  line-height: 1.9;
  counter-reset: toc-counter;
  list-style: none;
}

.toc ol li {
  counter-increment: toc-counter;
  margin: 12px 0;
  font-size: 16px;
  padding-bottom: 12px;
  border-bottom: 1px solid #e5e7eb;
  transition: all 0.2s ease;
}

.toc ol li:last-child {
  border-bottom: none;
}

.toc ol li:hover {
  padding-left: 8px;
}

.toc ol li::before {
  content: counter(toc-counter) &quot;. &quot;;
  font-weight: 600;
  color: #6b7280;
  margin-right: 8px;
}

.toc a {
  color: #1a73e8;
  text-decoration: none;
}

.toc a:hover {
  text-decoration: underline;
}

/* ==================== SECTION HEADINGS ==================== */
h2 {
  font-size: 28px;
  font-weight: bold;
  color: #000000;
  margin: 45px 0 20px 0;
  line-height: 1.3;
}

h3 {
  font-size: 22px;
  font-weight: 600;
  color: #333333;
  margin: 30px 0 15px 0;
}

/* ==================== PARAGRAPHS &amp; LISTS ==================== */
p {
  margin: 16px 0;
  color: #333333;
  line-height: 1.7;
}

ul, ol {
  margin: 18px 0 18px 35px;
  color: #333333;
  line-height: 1.7;
}

ul li, ol li {
  margin: 10px 0;
}

strong {
  font-weight: bold;
  color: #333333;
}

em {
  font-style: italic;
}

/* ==================== LINKS ==================== */
a {
  color: #1a73e8;
  text-decoration: none;
}

a:hover {
  text-decoration: underline;
}

/* ==================== CODE BLOCKS ==================== */
.code-container {
  position: relative;
  margin: 24px 0;
}

.code-header {
  background: #1f2937;
  color: #ffffff;
  padding: 10px 16px;
  border-radius: 8px 8px 0 0;
  display: flex;
  justify-content: space-between;
  align-items: center;
  font-size: 14px;
}

.code-label {
  font-weight: 500;
}

.copy-btn {
  background: #3b82f6;
  color: #ffffff;
  border: none;
  padding: 6px 14px;
  border-radius: 5px;
  cursor: pointer;
  font-size: 13px;
  transition: background 0.2s ease;
  font-family: Arial, sans-serif;
}

.copy-btn:hover {
  background: #2563eb;
}

.copy-btn.copied {
  background: #10b981;
}

.code-block {
  background: #f8f9fa;
  border: 1px solid #e0e0e0;
  border-radius: 0 0 8px 8px;
  padding: 18px;
  margin: 0;
  overflow-x: auto;
  font-family: &#39;Courier New&#39;, monospace;
  font-size: 14px;
  line-height: 1.5;
}

code {
  background: #f8f9fa;
  padding: 2px 6px;
  border-radius: 3px;
  font-family: &#39;Courier New&#39;, monospace;
  font-size: 14px;
  color: #d93025;
}

/* ==================== COLORED MARKERS ==================== */
.red-x {
  color: #d93025;
}

.green-check {
  color: #0f9d58;
}

/* ==================== CONVERSION BOX ==================== */
.conversion-box {
  background: #f0f9ff;
  border-left: 4px solid #3b82f6;
  padding: 20px;
  margin: 25px 0;
  border-radius: 5px;
}

.conversion-box h4 {
  color: #1e40af;
  font-size: 18px;
  margin-bottom: 10px;
}

/* ==================== CONTENT IMAGES ==================== */
.content-image {
  text-align: center;
  margin: 25px auto;
  max-width: 80%;
}

.content-image img {
  max-width: 100%;
  height: auto;
  border-radius: 5px;
}

/* ==================== TABLES ==================== */
table {
  width: 100%;
  border-collapse: collapse;
  margin: 25px 0;
  background: #ffffff;
  border: 1px solid #e0e0e0;
}

thead {
  background: #f8f9fa;
}

th {
  padding: 12px;
  text-align: left;
  font-weight: bold;
  color: #000000;
  border-bottom: 2px solid #e0e0e0;
  font-size: 16px;
}

td {
  padding: 12px;
  border-bottom: 1px solid #e0e0e0;
  color: #333333;
  font-size: 16px;
}

tr:last-child td {
  border-bottom: none;
}

tbody tr:hover {
  background: #f9fafb;
}

/* ==================== FAQ SECTION ==================== */
.faq-item {
  margin: 25px 0;
}

.faq-question {
  font-weight: 600;
  color: #000000;
  font-size: 17px;
  margin-bottom: 10px;
}

.faq-answer {
  color: #333333;
  line-height: 1.7;
}

/* ==================== RELATED READING SECTION ==================== */
.related-reading {
  background: #f8f9fa;
  border: 1px solid #e0e0e0;
  border-radius: 8px;
  padding: 30px;
  margin: 40px 0;
}

.related-reading h2 {
  margin-top: 0;
}

.related-reading ul {
  margin-left: 25px;
}

.related-reading li {
  margin: 18px 0;
  line-height: 1.7;
}

.related-reading .why-matters {
  color: #666666;
  font-size: 15px;
  margin-top: 5px;
  display: block;
}

/* ==================== ABOUT THE AUTHOR ==================== */
.about-author {
  background: #fffbf0;
  border: 1px solid #e0e0e0;
  border-radius: 8px;
  padding: 30px;
  margin: 40px 0;
}

.about-author h2 {
  margin-top: 0;
  font-size: 28px;
}

.author-content {
  width: 100%;
}

.author-text {
  flex: 1;
}

.author-name {
  font-size: 20px;
  font-weight: bold;
  color: #000000;
  margin-bottom: 10px;
}

.author-bio {
  color: #333333;
  line-height: 1.7;
  margin-bottom: 15px;
}

.social-links {
  margin-top: 20px;
}

.social-links a {
  display: inline-block;
  margin-right: 20px;
  color: #1a73e8;
  text-decoration: none;
  font-size: 16px;
}

.social-links a:hover {
  text-decoration: underline;
}

/* ==================== POST FOOTER ==================== */
.post-footer {
  border-top: 1px solid #e0e0e0;
  padding-top: 25px;
  margin-top: 40px;
  color: #666666;
  font-size: 15px;
}

.post-meta {
  margin-bottom: 15px;
}

.share-buttons {
  margin: 20px 0;
}

.share-buttons a {
  display: inline-block;
  margin-right: 15px;
  color: #1a73e8;
  font-size: 14px;
}

.tags {
  margin-top: 20px;
}

.tags strong {
  color: #666666;
  font-weight: normal;
}

.tags a {
  color: #1a73e8;
  margin-right: 10px;
  font-size: 14px;
}

/* ==================== RESPONSIVE DESIGN ==================== */
@media (max-width: 768px) {
  .hero-header {
    padding: 40px 24px;
  }

  .hero-header h1 {
    font-size: 28px;
  }

  .hero-subtitle {
    font-size: 16px;
  }

  .hero-meta {
    gap: 20px;
  }

  .hero-image-section img {
    max-height: 300px;
  }

  h2 {
    font-size: 24px;
  }

  h3 {
    font-size: 20px;
  }

  .nav-content {
    flex-wrap: wrap;
    gap: 15px;
  }

  .content-image {
    max-width: 100%;
  }

  table {
    font-size: 14px;
  }

  th, td {
    padding: 10px;
  }
}
&lt;/style&gt;
&lt;/head&gt;

&lt;body&gt;

&lt;div class=&quot;page-wrapper&quot;&gt;

&lt;!-- NAVIGATION --&gt;
&lt;nav class=&quot;navigation&quot;&gt;
  &lt;div class=&quot;nav-content&quot;&gt;
    &lt;a href=&quot;#&quot;&gt;Home&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;About&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;Contact&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;Privacy Policy&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;Disclaimer&lt;/a&gt;
  &lt;/div&gt;
&lt;/nav&gt;

&lt;!-- HERO HEADER INTRO --&gt;
&lt;div class=&quot;hero-header&quot;&gt;
  &lt;div class=&quot;hero-header-content&quot;&gt;
    &lt;h1&gt;Oracle to PostgreSQL SQL Conversion Guide: Real-World Examples for DBAs&lt;/h1&gt;
    &lt;div class=&quot;hero-subtitle&quot;&gt;Complete Syntax Mapping, Function Conversion, and PL/SQL to PL/pgSQL Migration&lt;/div&gt;
    
    &lt;div class=&quot;hero-meta&quot;&gt;
      &lt;div class=&quot;hero-meta-item&quot;&gt;
        📅 February 06, 2026
      &lt;/div&gt;
      
      &lt;div class=&quot;hero-meta-item&quot;&gt;
        👤 Chetan Yadav - Senior Oracle &amp; PostgreSQL DBA
      &lt;/div&gt;
      
      &lt;div class=&quot;hero-meta-item&quot;&gt;
        ⏱️ 22-24 min read
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;!-- MAIN CONTAINER --&gt;
&lt;div class=&quot;main-content-wrapper&quot;&gt;
&lt;div class=&quot;container&quot;&gt;

&lt;!-- READING TIME BADGE --&gt;
&lt;div class=&quot;reading-time-badge&quot;&gt;
  ⏱️ Estimated Reading Time: 22–24 minutes
&lt;/div&gt;

&lt;div class=&quot;page-tagline&quot;&gt;
  🔄 Oracle → PostgreSQL - Real Production SQL Conversions with Before/After Examples
&lt;/div&gt;

&lt;p&gt;
We had 847 stored procedures written in Oracle PL/SQL. The CTO announced we were moving to PostgreSQL to cut licensing costs by $200,000 annually. The migration deadline was three months away.
&lt;/p&gt;

&lt;p&gt;
I spent the first week manually converting procedures. At that pace, I&#39;d finish in 18 months. That&#39;s when I realized: most Oracle-to-PostgreSQL conversions follow predictable patterns. Once you know these patterns, conversion becomes systematic, not guesswork.
&lt;/p&gt;

&lt;!-- HERO IMAGE --&gt;
&lt;div class=&quot;hero-image-section&quot;&gt;
  &lt;img src=&quot;https://images.unsplash.com/photo-1515879218367-8466d910aaa4?w=1200&amp;h=630&amp;fit=crop&amp;q=80&quot; alt=&quot;Code editor showing SQL database migration from Oracle to PostgreSQL with syntax conversion and programming workflow&quot;&gt;
&lt;/div&gt;

&lt;p&gt;
&lt;em&gt;Oracle to PostgreSQL migration isn&#39;t about rewriting everything from scratch. 70-80% of SQL works with minor syntax adjustments. The remaining 20-30% requires understanding key differences in how each database handles data types, functions, and procedural logic.&lt;/em&gt;
&lt;/p&gt;

&lt;p&gt;
This guide covers real production SQL conversions from Oracle to PostgreSQL. If you&#39;re an Oracle DBA planning a PostgreSQL migration, these are the patterns, gotchas, and solutions that actually work.
&lt;/p&gt;

&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;

&lt;!-- TABLE OF CONTENTS --&gt;
&lt;div class=&quot;toc&quot;&gt;
&lt;div class=&quot;toc-header&quot;&gt;
  &lt;span class=&quot;toc-icon&quot;&gt;📚&lt;/span&gt; Table of Contents
&lt;/div&gt;
&lt;ol&gt;
  &lt;li&gt;&lt;a href=&quot;#section1&quot;&gt;Core SQL Syntax Differences: What Changes, What Stays&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#section2&quot;&gt;Data Type Conversion Matrix: Oracle to PostgreSQL Mapping&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#section3&quot;&gt;Built-in Function Conversions with Real Examples&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#section4&quot;&gt;Sequence and Identity Column Migration&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#section5&quot;&gt;PL/SQL to PL/pgSQL: Procedural Code Conversion&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#section6&quot;&gt;Trigger Conversion: Oracle to PostgreSQL Patterns&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#section7&quot;&gt;Date and Timestamp Handling Differences&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#section8&quot;&gt;Transaction Control and Error Handling&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#section9&quot;&gt;FAQ&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#section10&quot;&gt;Related Reading from Real Production Systems&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;

&lt;!-- MAIN CONTENT SECTIONS --&gt;

&lt;h2 id=&quot;section1&quot;&gt;1. Core SQL Syntax Differences: What Changes, What Stays&lt;/h2&gt;

&lt;p&gt;
Good news: Standard SQL (SELECT, INSERT, UPDATE, DELETE) works almost identically in Oracle and PostgreSQL. Here&#39;s what actually changes.
&lt;/p&gt;

&lt;h3&gt;String Concatenation&lt;/h3&gt;

&lt;div class=&quot;code-container&quot;&gt;
  &lt;div class=&quot;code-header&quot;&gt;
    &lt;span class=&quot;code-label&quot;&gt;SQL - Oracle Version&lt;/span&gt;
    &lt;button class=&quot;copy-btn&quot; onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;
  &lt;/div&gt;
  &lt;div class=&quot;code-block&quot;&gt;-- Oracle: Use || or CONCAT function
SELECT first_name || &#39; &#39; || last_name AS full_name
FROM employees;

SELECT CONCAT(first_name, &#39; &#39;, last_name) AS full_name
FROM employees;&lt;/div&gt;
&lt;/div&gt;

&lt;div class=&quot;code-container&quot;&gt;
  &lt;div class=&quot;code-header&quot;&gt;
    &lt;span class=&quot;code-label&quot;&gt;SQL - PostgreSQL Version&lt;/span&gt;
    &lt;button class=&quot;copy-btn&quot; onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;
  &lt;/div&gt;
  &lt;div class=&quot;code-block&quot;&gt;-- PostgreSQL: || works, CONCAT works, but CONCAT handles NULLs differently
SELECT first_name || &#39; &#39; || last_name AS full_name
FROM employees;

-- Better in PostgreSQL: CONCAT automatically handles NULLs
SELECT CONCAT(first_name, &#39; &#39;, last_name) AS full_name
FROM employees;

-- PostgreSQL also has concat_ws (concat with separator)
SELECT concat_ws(&#39; &#39;, first_name, middle_name, last_name) AS full_name
FROM employees;&lt;/div&gt;
&lt;/div&gt;

&lt;h3&gt;DUAL Table (Oracle-Specific)&lt;/h3&gt;

&lt;div class=&quot;code-container&quot;&gt;
  &lt;div class=&quot;code-header&quot;&gt;
    &lt;span class=&quot;code-label&quot;&gt;SQL - Oracle Version&lt;/span&gt;
    &lt;button class=&quot;copy-btn&quot; onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;
  &lt;/div&gt;
  &lt;div class=&quot;code-block&quot;&gt;-- Oracle: SELECT from DUAL for expressions
SELECT SYSDATE FROM DUAL;
SELECT &#39;Hello World&#39; FROM DUAL;
SELECT 2 + 2 FROM DUAL;&lt;/div&gt;
&lt;/div&gt;

&lt;div class=&quot;code-container&quot;&gt;
  &lt;div class=&quot;code-header&quot;&gt;
    &lt;span class=&quot;code-label&quot;&gt;SQL - PostgreSQL Version&lt;/span&gt;
    &lt;button class=&quot;copy-btn&quot; onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;
  &lt;/div&gt;
  &lt;div class=&quot;code-block&quot;&gt;-- PostgreSQL: No FROM clause needed for expressions
SELECT CURRENT_TIMESTAMP;
SELECT &#39;Hello World&#39;;
SELECT 2 + 2;

-- Or create a DUAL view for Oracle compatibility
CREATE VIEW dual AS SELECT 1 AS dummy;
SELECT CURRENT_TIMESTAMP FROM dual;&lt;/div&gt;
&lt;/div&gt;

&lt;h3&gt;Outer Join Syntax&lt;/h3&gt;

&lt;div class=&quot;code-container&quot;&gt;
  &lt;div class=&quot;code-header&quot;&gt;
    &lt;span class=&quot;code-label&quot;&gt;SQL - Oracle Old Style (Don&#39;t Use in PostgreSQL)&lt;/span&gt;
    &lt;button class=&quot;copy-btn&quot; onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;
  &lt;/div&gt;
  &lt;div class=&quot;code-block&quot;&gt;-- Oracle: Old (+) outer join syntax
SELECT e.employee_id, e.first_name, d.department_name
FROM employees e, departments d
WHERE e.department_id = d.department_id(+);&lt;/div&gt;
&lt;/div&gt;

&lt;div class=&quot;code-container&quot;&gt;
  &lt;div class=&quot;code-header&quot;&gt;
    &lt;span class=&quot;code-label&quot;&gt;SQL - PostgreSQL Version (ANSI SQL)&lt;/span&gt;
    &lt;button class=&quot;copy-btn&quot; onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;
  &lt;/div&gt;
  &lt;div class=&quot;code-block&quot;&gt;-- PostgreSQL: Use ANSI SQL LEFT JOIN (also works in Oracle 9i+)
SELECT e.employee_id, e.first_name, d.department_name
FROM employees e
LEFT JOIN departments d ON e.department_id = d.department_id;&lt;/div&gt;
&lt;/div&gt;

&lt;h3&gt;Top N Queries&lt;/h3&gt;

&lt;div class=&quot;code-container&quot;&gt;
  &lt;div class=&quot;code-header&quot;&gt;
    &lt;span class=&quot;code-label&quot;&gt;SQL - Oracle Version&lt;/span&gt;
    &lt;button class=&quot;copy-btn&quot; onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;
  &lt;/div&gt;
  &lt;div class=&quot;code-block&quot;&gt;-- Oracle: Use ROWNUM or FETCH FIRST (12c+)
SELECT * FROM employees
WHERE ROWNUM &lt;= 10;

-- Oracle 12c+ ANSI SQL
SELECT * FROM employees
ORDER BY salary DESC
FETCH FIRST 10 ROWS ONLY;&lt;/div&gt;
&lt;/div&gt;

&lt;div class=&quot;code-container&quot;&gt;
  &lt;div class=&quot;code-header&quot;&gt;
    &lt;span class=&quot;code-label&quot;&gt;SQL - PostgreSQL Version&lt;/span&gt;
    &lt;button class=&quot;copy-btn&quot; onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;
  &lt;/div&gt;
  &lt;div class=&quot;code-block&quot;&gt;-- PostgreSQL: Use LIMIT
SELECT * FROM employees
ORDER BY salary DESC
LIMIT 10;

-- PostgreSQL also supports ANSI SQL FETCH FIRST
SELECT * FROM employees
ORDER BY salary DESC
FETCH FIRST 10 ROWS ONLY;&lt;/div&gt;
&lt;/div&gt;

&lt;h2 id=&quot;section2&quot;&gt;2. Data Type Conversion Matrix: Oracle to PostgreSQL Mapping&lt;/h2&gt;

&lt;p&gt;
Data type mismatches cause the most migration pain. Here&#39;s the definitive mapping.
&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Oracle Data Type&lt;/th&gt;
      &lt;th&gt;PostgreSQL Equivalent&lt;/th&gt;
      &lt;th&gt;Notes&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;VARCHAR2(n)&lt;/td&gt;
      &lt;td&gt;VARCHAR(n) or TEXT&lt;/td&gt;
      &lt;td&gt;PostgreSQL TEXT has no length limit&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;NUMBER&lt;/td&gt;
      &lt;td&gt;NUMERIC or DECIMAL&lt;/td&gt;
      &lt;td&gt;Exact equivalent&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;NUMBER(p,s)&lt;/td&gt;
      &lt;td&gt;NUMERIC(p,s)&lt;/td&gt;
      &lt;td&gt;Same precision/scale&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;INTEGER&lt;/td&gt;
      &lt;td&gt;INTEGER or INT&lt;/td&gt;
      &lt;td&gt;Same 32-bit integer&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;DATE&lt;/td&gt;
      &lt;td&gt;TIMESTAMP(0)&lt;/td&gt;
      &lt;td&gt;Oracle DATE includes time&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;TIMESTAMP&lt;/td&gt;
      &lt;td&gt;TIMESTAMP&lt;/td&gt;
      &lt;td&gt;Direct mapping&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;CLOB&lt;/td&gt;
      &lt;td&gt;TEXT&lt;/td&gt;
      &lt;td&gt;TEXT unlimited in PostgreSQL&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;BLOB&lt;/td&gt;
      &lt;td&gt;BYTEA&lt;/td&gt;
      &lt;td&gt;Binary data storage&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;RAW(n)&lt;/td&gt;
      &lt;td&gt;BYTEA&lt;/td&gt;
      &lt;td&gt;Small binary data&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;LONG&lt;/td&gt;
      &lt;td&gt;TEXT&lt;/td&gt;
      &lt;td&gt;Oracle deprecated LONG&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;h3&gt;Critical Data Type Differences&lt;/h3&gt;

&lt;div class=&quot;conversion-box&quot;&gt;
  &lt;h4&gt;⚠️ Oracle DATE vs PostgreSQL TIMESTAMP&lt;/h4&gt;
  &lt;p&gt;
    &lt;strong&gt;Oracle DATE:&lt;/strong&gt; Stores date AND time (year, month, day, hour, minute, second)&lt;br&gt;
    &lt;strong&gt;PostgreSQL DATE:&lt;/strong&gt; Stores only date (year, month, day)&lt;br&gt;
    &lt;strong&gt;Solution:&lt;/strong&gt; Convert Oracle DATE to PostgreSQL TIMESTAMP(0)
  &lt;/p&gt;
&lt;/div&gt;

&lt;div class=&quot;code-container&quot;&gt;
  &lt;div class=&quot;code-header&quot;&gt;
    &lt;span class=&quot;code-label&quot;&gt;SQL - Table Definition Conversion&lt;/span&gt;
    &lt;button class=&quot;copy-btn&quot; onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;
  &lt;/div&gt;
  &lt;div class=&quot;code-block&quot;&gt;-- Oracle table definition
CREATE TABLE employees (
    employee_id NUMBER PRIMARY KEY,
    first_name VARCHAR2(50),
    last_name VARCHAR2(50),
    email VARCHAR2(100),
    hire_date DATE,
    salary NUMBER(10,2),
    department_id NUMBER,
    notes CLOB
);

-- PostgreSQL equivalent
CREATE TABLE employees (
    employee_id INTEGER PRIMARY KEY,
    first_name VARCHAR(50),
    last_name VARCHAR(50),
    email VARCHAR(100),
    hire_date TIMESTAMP(0),  -- Changed from DATE
    salary NUMERIC(10,2),    -- Changed from NUMBER
    department_id INTEGER,   -- Changed from NUMBER
    notes TEXT              -- Changed from CLOB
);&lt;/div&gt;
&lt;/div&gt;

&lt;h2 id=&quot;section3&quot;&gt;3. Built-in Function Conversions with Real Examples&lt;/h2&gt;

&lt;p&gt;
Oracle and PostgreSQL have different function names for common operations. Here are the most frequently used conversions.
&lt;/p&gt;

&lt;h3&gt;String Functions&lt;/h3&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Oracle Function&lt;/th&gt;
      &lt;th&gt;PostgreSQL Equivalent&lt;/th&gt;
      &lt;th&gt;Example&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;NVL(val, default)&lt;/td&gt;
      &lt;td&gt;COALESCE(val, default)&lt;/td&gt;
      &lt;td&gt;COALESCE(middle_name, &#39;&#39;)&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;NVL2(val, if_not_null, if_null)&lt;/td&gt;
      &lt;td&gt;CASE or COALESCE&lt;/td&gt;
      &lt;td&gt;CASE WHEN val IS NOT NULL THEN...&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;DECODE&lt;/td&gt;
      &lt;td&gt;CASE WHEN&lt;/td&gt;
      &lt;td&gt;CASE status WHEN &#39;A&#39; THEN &#39;Active&#39;...&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;SUBSTR(str, pos, len)&lt;/td&gt;
      &lt;td&gt;SUBSTRING(str FROM pos FOR len)&lt;/td&gt;
      &lt;td&gt;SUBSTRING(name FROM 1 FOR 10)&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;INSTR(str, substr)&lt;/td&gt;
      &lt;td&gt;POSITION(substr IN str)&lt;/td&gt;
      &lt;td&gt;POSITION(&#39;@&#39; IN email)&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;LENGTH(str)&lt;/td&gt;
      &lt;td&gt;LENGTH(str) or CHAR_LENGTH(str)&lt;/td&gt;
      &lt;td&gt;LENGTH(description)&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;h3&gt;NVL to COALESCE Conversion&lt;/h3&gt;

&lt;div class=&quot;code-container&quot;&gt;
  &lt;div class=&quot;code-header&quot;&gt;
    &lt;span class=&quot;code-label&quot;&gt;SQL - Oracle Version&lt;/span&gt;
    &lt;button class=&quot;copy-btn&quot; onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;
  &lt;/div&gt;
  &lt;div class=&quot;code-block&quot;&gt;-- Oracle: NVL for NULL handling
SELECT 
    employee_id,
    first_name,
    NVL(middle_name, &#39;&#39;) AS middle_name,
    NVL(commission_pct, 0) AS commission,
    NVL2(manager_id, &#39;Has Manager&#39;, &#39;No Manager&#39;) AS manager_status
FROM employees;&lt;/div&gt;
&lt;/div&gt;

&lt;div class=&quot;code-container&quot;&gt;
  &lt;div class=&quot;code-header&quot;&gt;
    &lt;span class=&quot;code-label&quot;&gt;SQL - PostgreSQL Version&lt;/span&gt;
    &lt;button class=&quot;copy-btn&quot; onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;
  &lt;/div&gt;
  &lt;div class=&quot;code-block&quot;&gt;-- PostgreSQL: COALESCE for NULL handling
SELECT 
    employee_id,
    first_name,
    COALESCE(middle_name, &#39;&#39;) AS middle_name,
    COALESCE(commission_pct, 0) AS commission,
    CASE WHEN manager_id IS NOT NULL 
         THEN &#39;Has Manager&#39; 
         ELSE &#39;No Manager&#39; 
    END AS manager_status
FROM employees;&lt;/div&gt;
&lt;/div&gt;

&lt;h3&gt;DECODE to CASE Conversion&lt;/h3&gt;

&lt;div class=&quot;code-container&quot;&gt;
  &lt;div class=&quot;code-header&quot;&gt;
    &lt;span class=&quot;code-label&quot;&gt;SQL - Oracle DECODE&lt;/span&gt;
    &lt;button class=&quot;copy-btn&quot; onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;
  &lt;/div&gt;
  &lt;div class=&quot;code-block&quot;&gt;-- Oracle: DECODE for conditional logic
SELECT 
    employee_id,
    first_name,
    DECODE(department_id,
        10, &#39;Accounting&#39;,
        20, &#39;Research&#39;,
        30, &#39;Sales&#39;,
        40, &#39;Operations&#39;,
        &#39;Unknown&#39;) AS department_name
FROM employees;&lt;/div&gt;
&lt;/div&gt;

&lt;div class=&quot;code-container&quot;&gt;
  &lt;div class=&quot;code-header&quot;&gt;
    &lt;span class=&quot;code-label&quot;&gt;SQL - PostgreSQL CASE&lt;/span&gt;
    &lt;button class=&quot;copy-btn&quot; onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;
  &lt;/div&gt;
  &lt;div class=&quot;code-block&quot;&gt;-- PostgreSQL: CASE WHEN for conditional logic
SELECT 
    employee_id,
    first_name,
    CASE department_id
        WHEN 10 THEN &#39;Accounting&#39;
        WHEN 20 THEN &#39;Research&#39;
        WHEN 30 THEN &#39;Sales&#39;
        WHEN 40 THEN &#39;Operations&#39;
        ELSE &#39;Unknown&#39;
    END AS department_name
FROM employees;&lt;/div&gt;
&lt;/div&gt;

&lt;h3&gt;Date Functions&lt;/h3&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Oracle Function&lt;/th&gt;
      &lt;th&gt;PostgreSQL Equivalent&lt;/th&gt;
      &lt;th&gt;Example&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;SYSDATE&lt;/td&gt;
      &lt;td&gt;CURRENT_TIMESTAMP or NOW()&lt;/td&gt;
      &lt;td&gt;CURRENT_TIMESTAMP&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;TRUNC(date)&lt;/td&gt;
      &lt;td&gt;DATE_TRUNC(&#39;day&#39;, timestamp)&lt;/td&gt;
      &lt;td&gt;DATE_TRUNC(&#39;day&#39;, hire_date)&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;ADD_MONTHS(date, n)&lt;/td&gt;
      &lt;td&gt;date + INTERVAL &#39;n months&#39;&lt;/td&gt;
      &lt;td&gt;hire_date + INTERVAL &#39;3 months&#39;&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;MONTHS_BETWEEN&lt;/td&gt;
      &lt;td&gt;AGE or date subtraction&lt;/td&gt;
      &lt;td&gt;AGE(end_date, start_date)&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;TO_CHAR(date, fmt)&lt;/td&gt;
      &lt;td&gt;TO_CHAR(timestamp, fmt)&lt;/td&gt;
      &lt;td&gt;TO_CHAR(hire_date, &#39;YYYY-MM-DD&#39;)&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;TO_DATE(str, fmt)&lt;/td&gt;
      &lt;td&gt;TO_TIMESTAMP(str, fmt)&lt;/td&gt;
      &lt;td&gt;TO_TIMESTAMP(&#39;2026-01-15&#39;, &#39;YYYY-MM-DD&#39;)&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;div class=&quot;code-container&quot;&gt;
  &lt;div class=&quot;code-header&quot;&gt;
    &lt;span class=&quot;code-label&quot;&gt;SQL - Oracle Date Operations&lt;/span&gt;
    &lt;button class=&quot;copy-btn&quot; onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;
  &lt;/div&gt;
  &lt;div class=&quot;code-block&quot;&gt;-- Oracle: Date arithmetic and functions
SELECT 
    employee_id,
    hire_date,
    SYSDATE AS today,
    TRUNC(SYSDATE) AS today_start,
    ADD_MONTHS(hire_date, 3) AS probation_end,
    MONTHS_BETWEEN(SYSDATE, hire_date) AS months_employed,
    TO_CHAR(hire_date, &#39;YYYY-MM-DD&#39;) AS hire_date_formatted
FROM employees;&lt;/div&gt;
&lt;/div&gt;

&lt;div class=&quot;code-container&quot;&gt;
  &lt;div class=&quot;code-header&quot;&gt;
    &lt;span class=&quot;code-label&quot;&gt;SQL - PostgreSQL Date Operations&lt;/span&gt;
    &lt;button class=&quot;copy-btn&quot; onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;
  &lt;/div&gt;
  &lt;div class=&quot;code-block&quot;&gt;-- PostgreSQL: Date arithmetic and functions
SELECT 
    employee_id,
    hire_date,
    CURRENT_TIMESTAMP AS today,
    DATE_TRUNC(&#39;day&#39;, CURRENT_TIMESTAMP) AS today_start,
    hire_date + INTERVAL &#39;3 months&#39; AS probation_end,
    EXTRACT(YEAR FROM AGE(CURRENT_TIMESTAMP, hire_date)) * 12 + 
        EXTRACT(MONTH FROM AGE(CURRENT_TIMESTAMP, hire_date)) AS months_employed,
    TO_CHAR(hire_date, &#39;YYYY-MM-DD&#39;) AS hire_date_formatted
FROM employees;&lt;/div&gt;
&lt;/div&gt;

&lt;h2 id=&quot;section4&quot;&gt;4. Sequence and Identity Column Migration&lt;/h2&gt;

&lt;p&gt;
Oracle uses sequences with triggers for auto-increment. PostgreSQL offers both sequences and SERIAL/IDENTITY columns.
&lt;/p&gt;

&lt;h3&gt;Oracle Sequence + Trigger Pattern&lt;/h3&gt;

&lt;div class=&quot;code-container&quot;&gt;
  &lt;div class=&quot;code-header&quot;&gt;
    &lt;span class=&quot;code-label&quot;&gt;SQL - Oracle Sequence and Trigger&lt;/span&gt;
    &lt;button class=&quot;copy-btn&quot; onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;
  &lt;/div&gt;
  &lt;div class=&quot;code-block&quot;&gt;-- Oracle: Create sequence
CREATE SEQUENCE emp_seq
    START WITH 1
    INCREMENT BY 1
    NOCACHE
    NOCYCLE;

-- Oracle: Create trigger to auto-populate ID
CREATE OR REPLACE TRIGGER emp_bir
BEFORE INSERT ON employees
FOR EACH ROW
BEGIN
    IF :NEW.employee_id IS NULL THEN
        :NEW.employee_id := emp_seq.NEXTVAL;
    END IF;
END;
/

-- Insert without specifying ID
INSERT INTO employees (first_name, last_name)
VALUES (&#39;John&#39;, &#39;Doe&#39;);&lt;/div&gt;
&lt;/div&gt;

&lt;h3&gt;PostgreSQL SERIAL Column (Recommended)&lt;/h3&gt;

&lt;div class=&quot;code-container&quot;&gt;
  &lt;div class=&quot;code-header&quot;&gt;
    &lt;span class=&quot;code-label&quot;&gt;SQL - PostgreSQL SERIAL Auto-Increment&lt;/span&gt;
    &lt;button class=&quot;copy-btn&quot; onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;
  &lt;/div&gt;
  &lt;div class=&quot;code-block&quot;&gt;-- PostgreSQL: Use SERIAL (creates sequence automatically)
CREATE TABLE employees (
    employee_id SERIAL PRIMARY KEY,  -- Automatic sequence + NOT NULL
    first_name VARCHAR(50),
    last_name VARCHAR(50)
);

-- Insert without specifying ID (automatically generated)
INSERT INTO employees (first_name, last_name)
VALUES (&#39;John&#39;, &#39;Doe&#39;);

-- PostgreSQL 10+: Use IDENTITY (SQL standard)
CREATE TABLE employees (
    employee_id INTEGER GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
    first_name VARCHAR(50),
    last_name VARCHAR(50)
);&lt;/div&gt;
&lt;/div&gt;

&lt;h3&gt;Manual Sequence Control&lt;/h3&gt;

&lt;div class=&quot;code-container&quot;&gt;
  &lt;div class=&quot;code-header&quot;&gt;
    &lt;span class=&quot;code-label&quot;&gt;SQL - PostgreSQL Manual Sequence&lt;/span&gt;
    &lt;button class=&quot;copy-btn&quot; onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;
  &lt;/div&gt;
  &lt;div class=&quot;code-block&quot;&gt;-- PostgreSQL: Create sequence explicitly (Oracle-style)
CREATE SEQUENCE emp_seq
    START WITH 1
    INCREMENT BY 1
    NO MAXVALUE
    NO CYCLE
    CACHE 1;

-- Use DEFAULT with NEXTVAL
CREATE TABLE employees (
    employee_id INTEGER DEFAULT nextval(&#39;emp_seq&#39;) PRIMARY KEY,
    first_name VARCHAR(50),
    last_name VARCHAR(50)
);

-- Or call NEXTVAL explicitly in INSERT
INSERT INTO employees (employee_id, first_name, last_name)
VALUES (nextval(&#39;emp_seq&#39;), &#39;John&#39;, &#39;Doe&#39;);&lt;/div&gt;
&lt;/div&gt;

&lt;h2 id=&quot;section5&quot;&gt;5. PL/SQL to PL/pgSQL: Procedural Code Conversion&lt;/h2&gt;

&lt;p&gt;
This is where most migration time goes. PL/SQL and PL/pgSQL are similar but have critical differences.
&lt;/p&gt;

&lt;h3&gt;Basic Stored Procedure Conversion&lt;/h3&gt;

&lt;div class=&quot;code-container&quot;&gt;
  &lt;div class=&quot;code-header&quot;&gt;
    &lt;span class=&quot;code-label&quot;&gt;PL/SQL - Oracle Stored Procedure&lt;/span&gt;
    &lt;button class=&quot;copy-btn&quot; onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;
  &lt;/div&gt;
  &lt;div class=&quot;code-block&quot;&gt;-- Oracle: PL/SQL stored procedure
CREATE OR REPLACE PROCEDURE update_employee_salary(
    p_employee_id IN NUMBER,
    p_new_salary IN NUMBER
)
IS
    v_old_salary NUMBER;
    v_count NUMBER;
BEGIN
    -- Check if employee exists
    SELECT COUNT(*) INTO v_count
    FROM employees
    WHERE employee_id = p_employee_id;
    
    IF v_count = 0 THEN
        RAISE_APPLICATION_ERROR(-20001, &#39;Employee not found&#39;);
    END IF;
    
    -- Get current salary
    SELECT salary INTO v_old_salary
    FROM employees
    WHERE employee_id = p_employee_id;
    
    -- Update salary
    UPDATE employees
    SET salary = p_new_salary,
        last_updated = SYSDATE
    WHERE employee_id = p_employee_id;
    
    -- Log change
    INSERT INTO salary_history (employee_id, old_salary, new_salary, changed_date)
    VALUES (p_employee_id, v_old_salary, p_new_salary, SYSDATE);
    
    COMMIT;
    
    DBMS_OUTPUT.PUT_LINE(&#39;Salary updated successfully&#39;);
EXCEPTION
    WHEN OTHERS THEN
        ROLLBACK;
        RAISE;
END;
/&lt;/div&gt;
&lt;/div&gt;

&lt;div class=&quot;code-container&quot;&gt;
  &lt;div class=&quot;code-header&quot;&gt;
    &lt;span class=&quot;code-label&quot;&gt;PL/pgSQL - PostgreSQL Stored Procedure&lt;/span&gt;
    &lt;button class=&quot;copy-btn&quot; onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;
  &lt;/div&gt;
  &lt;div class=&quot;code-block&quot;&gt;-- PostgreSQL: PL/pgSQL stored procedure
CREATE OR REPLACE FUNCTION update_employee_salary(
    p_employee_id INTEGER,
    p_new_salary NUMERIC
)
RETURNS VOID AS $$
DECLARE
    v_old_salary NUMERIC;
    v_count INTEGER;
BEGIN
    -- Check if employee exists
    SELECT COUNT(*) INTO v_count
    FROM employees
    WHERE employee_id = p_employee_id;
    
    IF v_count = 0 THEN
        RAISE EXCEPTION &#39;Employee not found&#39;;  -- Changed
    END IF;
    
    -- Get current salary
    SELECT salary INTO v_old_salary
    FROM employees
    WHERE employee_id = p_employee_id;
    
    -- Update salary
    UPDATE employees
    SET salary = p_new_salary,
        last_updated = CURRENT_TIMESTAMP  -- Changed from SYSDATE
    WHERE employee_id = p_employee_id;
    
    -- Log change
    INSERT INTO salary_history (employee_id, old_salary, new_salary, changed_date)
    VALUES (p_employee_id, v_old_salary, p_new_salary, CURRENT_TIMESTAMP);
    
    -- No COMMIT needed (auto-commit in PostgreSQL functions)
    
    RAISE NOTICE &#39;Salary updated successfully&#39;;  -- Changed from DBMS_OUTPUT
EXCEPTION
    WHEN OTHERS THEN
        -- ROLLBACK happens automatically
        RAISE;
END;
$$ LANGUAGE plpgsql;&lt;/div&gt;
&lt;/div&gt;

&lt;h3&gt;Key PL/SQL to PL/pgSQL Differences&lt;/h3&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Feature&lt;/th&gt;
      &lt;th&gt;Oracle PL/SQL&lt;/th&gt;
      &lt;th&gt;PostgreSQL PL/pgSQL&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;Block terminator&lt;/td&gt;
      &lt;td&gt;END; followed by /&lt;/td&gt;
      &lt;td&gt;END; with $$ delimiters&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Parameter modes&lt;/td&gt;
      &lt;td&gt;IN, OUT, IN OUT&lt;/td&gt;
      &lt;td&gt;IN, OUT, INOUT&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Print output&lt;/td&gt;
      &lt;td&gt;DBMS_OUTPUT.PUT_LINE&lt;/td&gt;
      &lt;td&gt;RAISE NOTICE&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Raise error&lt;/td&gt;
      &lt;td&gt;RAISE_APPLICATION_ERROR&lt;/td&gt;
      &lt;td&gt;RAISE EXCEPTION&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Transaction control&lt;/td&gt;
      &lt;td&gt;COMMIT/ROLLBACK in procedure&lt;/td&gt;
      &lt;td&gt;Auto-commit (no manual control)&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Packages&lt;/td&gt;
      &lt;td&gt;CREATE PACKAGE&lt;/td&gt;
      &lt;td&gt;Use SCHEMA (no packages)&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;h2 id=&quot;section6&quot;&gt;6. Trigger Conversion: Oracle to PostgreSQL Patterns&lt;/h2&gt;

&lt;p&gt;
Oracle and PostgreSQL triggers have different syntax and execution models.
&lt;/p&gt;

&lt;div class=&quot;code-container&quot;&gt;
  &lt;div class=&quot;code-header&quot;&gt;
    &lt;span class=&quot;code-label&quot;&gt;PL/SQL - Oracle Trigger&lt;/span&gt;
    &lt;button class=&quot;copy-btn&quot; onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;
  &lt;/div&gt;
  &lt;div class=&quot;code-block&quot;&gt;-- Oracle: Row-level BEFORE INSERT trigger
CREATE OR REPLACE TRIGGER employees_audit_trg
BEFORE INSERT OR UPDATE ON employees
FOR EACH ROW
BEGIN
    :NEW.last_updated := SYSDATE;
    :NEW.last_updated_by := USER;
    
    IF INSERTING THEN
        INSERT INTO audit_log (table_name, operation, record_id, changed_date)
        VALUES (&#39;EMPLOYEES&#39;, &#39;INSERT&#39;, :NEW.employee_id, SYSDATE);
    ELSIF UPDATING THEN
        INSERT INTO audit_log (table_name, operation, record_id, changed_date)
        VALUES (&#39;EMPLOYEES&#39;, &#39;UPDATE&#39;, :NEW.employee_id, SYSDATE);
    END IF;
END;
/&lt;/div&gt;
&lt;/div&gt;

&lt;div class=&quot;code-container&quot;&gt;
  &lt;div class=&quot;code-header&quot;&gt;
    &lt;span class=&quot;code-label&quot;&gt;PL/pgSQL - PostgreSQL Trigger&lt;/span&gt;
    &lt;button class=&quot;copy-btn&quot; onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;
  &lt;/div&gt;
  &lt;div class=&quot;code-block&quot;&gt;-- PostgreSQL: Trigger function (separate from trigger definition)
CREATE OR REPLACE FUNCTION employees_audit_func()
RETURNS TRIGGER AS $$
BEGIN
    NEW.last_updated := CURRENT_TIMESTAMP;
    NEW.last_updated_by := CURRENT_USER;
    
    IF TG_OP = &#39;INSERT&#39; THEN
        INSERT INTO audit_log (table_name, operation, record_id, changed_date)
        VALUES (&#39;employees&#39;, &#39;INSERT&#39;, NEW.employee_id, CURRENT_TIMESTAMP);
    ELSIF TG_OP = &#39;UPDATE&#39; THEN
        INSERT INTO audit_log (table_name, operation, record_id, changed_date)
        VALUES (&#39;employees&#39;, &#39;UPDATE&#39;, NEW.employee_id, CURRENT_TIMESTAMP);
    END IF;
    
    RETURN NEW;  -- Must return NEW or OLD
END;
$$ LANGUAGE plpgsql;

-- Create trigger (links function to table)
CREATE TRIGGER employees_audit_trg
BEFORE INSERT OR UPDATE ON employees
FOR EACH ROW
EXECUTE FUNCTION employees_audit_func();&lt;/div&gt;
&lt;/div&gt;

&lt;h3&gt;Critical Trigger Differences&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;span class=&quot;red-x&quot;&gt;❌&lt;/span&gt; Oracle: Trigger logic inline with CREATE TRIGGER&lt;/li&gt;
  &lt;li&gt;&lt;span class=&quot;green-check&quot;&gt;✅&lt;/span&gt; PostgreSQL: Trigger function separate, then CREATE TRIGGER links it&lt;/li&gt;
  &lt;li&gt;&lt;span class=&quot;red-x&quot;&gt;❌&lt;/span&gt; Oracle: Use :NEW and :OLD&lt;/li&gt;
  &lt;li&gt;&lt;span class=&quot;green-check&quot;&gt;✅&lt;/span&gt; PostgreSQL: Use NEW and OLD (no colon)&lt;/li&gt;
  &lt;li&gt;&lt;span class=&quot;red-x&quot;&gt;❌&lt;/span&gt; Oracle: Use INSERTING, UPDATING, DELETING&lt;/li&gt;
  &lt;li&gt;&lt;span class=&quot;green-check&quot;&gt;✅&lt;/span&gt; PostgreSQL: Use TG_OP = &#39;INSERT&#39; / &#39;UPDATE&#39; / &#39;DELETE&#39;&lt;/li&gt;
  &lt;li&gt;&lt;span class=&quot;green-check&quot;&gt;✅&lt;/span&gt; PostgreSQL: Must RETURN NEW, OLD, or NULL&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;section7&quot;&gt;7. Date and Timestamp Handling Differences&lt;/h2&gt;

&lt;p&gt;
Date handling is one of the biggest sources of bugs in Oracle to PostgreSQL migrations.
&lt;/p&gt;

&lt;h3&gt;Date Arithmetic&lt;/h3&gt;

&lt;div class=&quot;code-container&quot;&gt;
  &lt;div class=&quot;code-header&quot;&gt;
    &lt;span class=&quot;code-label&quot;&gt;SQL - Oracle Date Arithmetic&lt;/span&gt;
    &lt;button class=&quot;copy-btn&quot; onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;
  &lt;/div&gt;
  &lt;div class=&quot;code-block&quot;&gt;-- Oracle: Add days directly to dates
SELECT 
    hire_date,
    hire_date + 7 AS one_week_later,
    hire_date - 7 AS one_week_earlier,
    hire_date + 1/24 AS one_hour_later,
    SYSDATE - hire_date AS days_employed
FROM employees;&lt;/div&gt;
&lt;/div&gt;

&lt;div class=&quot;code-container&quot;&gt;
  &lt;div class=&quot;code-header&quot;&gt;
    &lt;span class=&quot;code-label&quot;&gt;SQL - PostgreSQL Date Arithmetic&lt;/span&gt;
    &lt;button class=&quot;copy-btn&quot; onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;
  &lt;/div&gt;
  &lt;div class=&quot;code-block&quot;&gt;-- PostgreSQL: Use INTERVAL for date arithmetic
SELECT 
    hire_date,
    hire_date + INTERVAL &#39;7 days&#39; AS one_week_later,
    hire_date - INTERVAL &#39;7 days&#39; AS one_week_earlier,
    hire_date + INTERVAL &#39;1 hour&#39; AS one_hour_later,
    CURRENT_TIMESTAMP - hire_date AS time_employed  -- Returns INTERVAL
FROM employees;

-- To get days as number:
SELECT 
    EXTRACT(DAY FROM CURRENT_TIMESTAMP - hire_date) AS days_employed
FROM employees;&lt;/div&gt;
&lt;/div&gt;

&lt;h3&gt;Date Formatting&lt;/h3&gt;

&lt;div class=&quot;code-container&quot;&gt;
  &lt;div class=&quot;code-header&quot;&gt;
    &lt;span class=&quot;code-label&quot;&gt;SQL - Oracle Date Formatting&lt;/span&gt;
    &lt;button class=&quot;copy-btn&quot; onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;
  &lt;/div&gt;
  &lt;div class=&quot;code-block&quot;&gt;-- Oracle: TO_CHAR for formatting
SELECT 
    TO_CHAR(hire_date, &#39;YYYY-MM-DD&#39;) AS iso_date,
    TO_CHAR(hire_date, &#39;DD-MON-YYYY&#39;) AS oracle_format,
    TO_CHAR(hire_date, &#39;HH24:MI:SS&#39;) AS time_only
FROM employees;&lt;/div&gt;
&lt;/div&gt;

&lt;div class=&quot;code-container&quot;&gt;
  &lt;div class=&quot;code-header&quot;&gt;
    &lt;span class=&quot;code-label&quot;&gt;SQL - PostgreSQL Date Formatting&lt;/span&gt;
    &lt;button class=&quot;copy-btn&quot; onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;
  &lt;/div&gt;
  &lt;div class=&quot;code-block&quot;&gt;-- PostgreSQL: TO_CHAR works similarly (some format differences)
SELECT 
    TO_CHAR(hire_date, &#39;YYYY-MM-DD&#39;) AS iso_date,
    TO_CHAR(hire_date, &#39;DD-Mon-YYYY&#39;) AS postgres_format,  -- &#39;Mon&#39; not &#39;MON&#39;
    TO_CHAR(hire_date, &#39;HH24:MI:SS&#39;) AS time_only
FROM employees;&lt;/div&gt;
&lt;/div&gt;

&lt;h2 id=&quot;section8&quot;&gt;8. Transaction Control and Error Handling&lt;/h2&gt;

&lt;p&gt;
PostgreSQL handles transactions differently than Oracle, especially in stored procedures.
&lt;/p&gt;

&lt;h3&gt;Transaction Control Differences&lt;/h3&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Feature&lt;/th&gt;
      &lt;th&gt;Oracle&lt;/th&gt;
      &lt;th&gt;PostgreSQL&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;COMMIT in procedures&lt;/td&gt;
      &lt;td&gt;Allowed&lt;/td&gt;
      &lt;td&gt;Not allowed in functions&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;ROLLBACK in procedures&lt;/td&gt;
      &lt;td&gt;Allowed&lt;/td&gt;
      &lt;td&gt;Not allowed in functions&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Autonomous transactions&lt;/td&gt;
      &lt;td&gt;PRAGMA AUTONOMOUS_TRANSACTION&lt;/td&gt;
      &lt;td&gt;Use dblink or separate connection&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Savepoints&lt;/td&gt;
      &lt;td&gt;Supported&lt;/td&gt;
      &lt;td&gt;Supported (same syntax)&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;div class=&quot;conversion-box&quot;&gt;
  &lt;h4&gt;⚠️ Critical Difference: No COMMIT/ROLLBACK in PostgreSQL Functions&lt;/h4&gt;
  &lt;p&gt;
    PostgreSQL functions run within the calling transaction. They cannot COMMIT or ROLLBACK independently. If you need transaction control, use stored procedures (PostgreSQL 11+) or handle transactions at the application level.
  &lt;/p&gt;
&lt;/div&gt;

&lt;div class=&quot;code-container&quot;&gt;
  &lt;div class=&quot;code-header&quot;&gt;
    &lt;span class=&quot;code-label&quot;&gt;SQL - PostgreSQL 11+ Stored Procedure with Transaction Control&lt;/span&gt;
    &lt;button class=&quot;copy-btn&quot; onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;
  &lt;/div&gt;
  &lt;div class=&quot;code-block&quot;&gt;-- PostgreSQL 11+: Use PROCEDURE (not FUNCTION) for transaction control
CREATE OR REPLACE PROCEDURE batch_process_orders()
LANGUAGE plpgsql
AS $$
DECLARE
    r RECORD;
BEGIN
    FOR r IN SELECT order_id FROM orders WHERE status = &#39;PENDING&#39; LOOP
        BEGIN
            -- Process order
            UPDATE orders SET status = &#39;PROCESSING&#39; WHERE order_id = r.order_id;
            
            -- Some complex processing...
            
            -- Commit each order individually
            COMMIT;
        EXCEPTION
            WHEN OTHERS THEN
                -- Rollback this order, continue with next
                ROLLBACK;
                RAISE NOTICE &#39;Failed to process order %&#39;, r.order_id;
        END;
    END LOOP;
END;
$$;

-- Call procedure
CALL batch_process_orders();&lt;/div&gt;
&lt;/div&gt;

&lt;h2 id=&quot;section9&quot;&gt;9. FAQ&lt;/h2&gt;

&lt;div class=&quot;faq-item&quot;&gt;
  &lt;div class=&quot;faq-question&quot;&gt;Can I use automated tools to convert Oracle to PostgreSQL?&lt;/div&gt;
  &lt;div class=&quot;faq-answer&quot;&gt;
    Yes, but with caution. Tools like ora2pg, AWS Schema Conversion Tool, and pgloader can convert 70-80% of basic SQL automatically. However, they struggle with complex PL/SQL procedures, packages, and Oracle-specific features. Best approach: use tools for initial conversion, then manually review and test everything. Expect to spend 30-40% of migration time fixing tool-generated code. The value is getting 80% done quickly, not getting a perfect conversion.
  &lt;/div&gt;
&lt;/div&gt;

&lt;div class=&quot;faq-item&quot;&gt;
  &lt;div class=&quot;faq-question&quot;&gt;What&#39;s the hardest part of Oracle to PostgreSQL migration?&lt;/div&gt;
  &lt;div class=&quot;faq-answer&quot;&gt;
    Complex PL/SQL packages and Oracle-specific features like: (1) DBMS packages (DBMS_JOB, DBMS_SCHEDULER, DBMS_OUTPUT), (2) Database links, (3) Materialized views with refresh groups, (4) Advanced queuing, (5) Flashback queries. These require architectural changes, not just SQL conversion. For example, Oracle database links might become PostgreSQL Foreign Data Wrappers (FDW) or application-level API calls. Budget extra time for these.
  &lt;/div&gt;
&lt;/div&gt;

&lt;div class=&quot;faq-item&quot;&gt;
  &lt;div class=&quot;faq-question&quot;&gt;Should I mention Oracle to PostgreSQL conversion experience on my resume?&lt;/div&gt;
  &lt;div class=&quot;faq-answer&quot;&gt;
    Absolutely. Write: &quot;Converted 800+ Oracle PL/SQL procedures to PostgreSQL PL/pgSQL, including complex triggers, functions, and data type migrations. Expertise in ora2pg tool, SQL syntax differences, and performance optimization post-migration.&quot; Even if you used automated tools heavily, understanding the conversion patterns and troubleshooting migration issues is valuable experience. PostgreSQL adoption is growing rapidly—this skill is in high demand.
  &lt;/div&gt;
&lt;/div&gt;

&lt;div class=&quot;faq-item&quot;&gt;
  &lt;div class=&quot;faq-question&quot;&gt;How do I handle Oracle packages in PostgreSQL?&lt;/div&gt;
  &lt;div class=&quot;faq-answer&quot;&gt;
    PostgreSQL doesn&#39;t have packages. Solutions: (1) Use schemas to group related functions (one schema = one Oracle package), (2) Use naming conventions (hr_get_employee, hr_update_salary), (3) Consider table-based &quot;packages&quot; where you store package state in tables. For DBMS packages: DBMS_OUTPUT → RAISE NOTICE, DBMS_RANDOM → gen_random_uuid(), DBMS_SCHEDULER → pg_cron extension. Oracle packages provide namespace organization—PostgreSQL schemas provide similar capability.
  &lt;/div&gt;
&lt;/div&gt;

&lt;h2 id=&quot;section10&quot;&gt;10. Related Reading from Real Production Systems&lt;/h2&gt;

&lt;div class=&quot;related-reading&quot;&gt;
&lt;p&gt;
If you want to deepen your understanding of database migrations and PostgreSQL performance, the following articles from real production experience may also be useful:
&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;a href=&quot;https://chetanyadavds.blogspot.com/2026/01/n8n-oracle-telegram-alerts.html&quot; target=&quot;_blank&quot;&gt;N8N Oracle Telegram Alerts: Automating Database Monitoring&lt;/a&gt;
    &lt;span class=&quot;why-matters&quot;&gt;Why it matters: After migrating from Oracle to PostgreSQL, you&#39;ll need to set up monitoring. This guide shows automation techniques that work for both Oracle and PostgreSQL databases.&lt;/span&gt;
  &lt;/li&gt;
  
  &lt;li&gt;
    &lt;a href=&quot;https://chetanyadavds.blogspot.com/2026/01/oracle-database-23ai-revolutionizing.html&quot; target=&quot;_blank&quot;&gt;Oracle Database 23ai: Revolutionizing Data Distribution Across the Globe&lt;/a&gt;
    &lt;span class=&quot;why-matters&quot;&gt;Why it matters: Understanding modern Oracle features helps you evaluate whether migrating to PostgreSQL is the right decision, or if staying with Oracle and upgrading makes more sense.&lt;/span&gt;
  &lt;/li&gt;
  
  &lt;li&gt;
    &lt;a href=&quot;#&quot;&gt;GCP AlloyDB Performance Tuning Guide: Oracle 19c Comparison for DBAs&lt;/a&gt;
    &lt;span class=&quot;why-matters&quot;&gt;Why it matters: AlloyDB is PostgreSQL-compatible but with Google optimizations. If you&#39;re migrating from Oracle, comparing Oracle vs AlloyDB performance helps set realistic expectations.&lt;/span&gt;
  &lt;/li&gt;
  
  &lt;li&gt;
    &lt;a href=&quot;#&quot;&gt;Azure Managed Instance Migration Checklist: Oracle DBA&#39;s Step-by-Step Guide&lt;/a&gt;
    &lt;span class=&quot;why-matters&quot;&gt;Why it matters: While focused on Azure SQL, the migration methodology (pre-migration assessment, schema conversion, testing) applies equally to Oracle to PostgreSQL migrations.&lt;/span&gt;
  &lt;/li&gt;
  
  &lt;li&gt;
    &lt;a href=&quot;#&quot;&gt;Multi-Cloud Database Architecture: Oracle, AWS, Azure, GCP Reference Guide&lt;/a&gt;
    &lt;span class=&quot;why-matters&quot;&gt;Why it matters: If your migration involves moving Oracle to cloud-hosted PostgreSQL (RDS, Azure Database for PostgreSQL, AlloyDB), understanding multi-cloud patterns helps with architecture decisions.&lt;/span&gt;
  &lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;

&lt;!-- ABOUT THE AUTHOR --&gt;
&lt;div class=&quot;about-author&quot;&gt;
&lt;h2&gt;About the Author&lt;/h2&gt;

&lt;div class=&quot;author-content&quot;&gt;
  
  &lt;div class=&quot;author-text&quot;&gt;
    &lt;div class=&quot;author-name&quot;&gt;Chetan Yadav&lt;/div&gt;
    
    &lt;p class=&quot;author-bio&quot;&gt;
      &lt;strong&gt;Chetan Yadav&lt;/strong&gt; is a &lt;strong&gt;Senior Oracle, PostgreSQL, MySQL, and Cloud DBA&lt;/strong&gt; with &lt;strong&gt;14+ years&lt;/strong&gt; of hands-on experience managing production databases across on-premises, hybrid, and cloud environments. He specializes in high availability architecture, performance tuning, disaster recovery, and database migrations.
    &lt;/p&gt;
    
    &lt;p class=&quot;author-bio&quot;&gt;
      Throughout his career, Chetan has led multiple successful Oracle to PostgreSQL migrations for enterprises in finance, healthcare, and e-commerce sectors. He has converted thousands of Oracle PL/SQL procedures to PostgreSQL PL/pgSQL and optimized migrated databases for production workloads.
    &lt;/p&gt;
    
    &lt;p class=&quot;author-bio&quot;&gt;
      Chetan is passionate about mentoring early-career DBAs and sharing real-world production lessons that aren&#39;t found in documentation. His writing focuses on practical decision-making, career growth, and the operational realities of database administration.
    &lt;/p&gt;
    
    &lt;p class=&quot;author-bio&quot;&gt;
      This blog focuses on &lt;strong&gt;real-world DBA problems, career growth, and practical learning&lt;/strong&gt; — not theoretical documentation or vendor marketing.
    &lt;/p&gt;
    
    &lt;div class=&quot;social-links&quot;&gt;
      &lt;a href=&quot;https://www.linkedin.com/in/chetanyadavvds/&quot; target=&quot;_blank&quot;&gt;🔗 LinkedIn&lt;/a&gt;
      &lt;a href=&quot;https://www.youtube.com/@levelup_careers&quot; target=&quot;_blank&quot;&gt;🎥 YouTube&lt;/a&gt;
      &lt;a href=&quot;https://www.instagram.com/levelup_careers/&quot; target=&quot;_blank&quot;&gt;📸 Instagram&lt;/a&gt;
      &lt;a href=&quot;https://x.com/home&quot; target=&quot;_blank&quot;&gt;🐦 Twitter (X)&lt;/a&gt;
      &lt;a href=&quot;https://www.facebook.com/oracledbainfo/&quot; target=&quot;_blank&quot;&gt;📘 Facebook&lt;/a&gt;
      &lt;a href=&quot;#&quot;&gt;📬 Newsletter&lt;/a&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;

&lt;!-- POST FOOTER --&gt;
&lt;div class=&quot;post-footer&quot;&gt;
  &lt;div class=&quot;post-meta&quot;&gt;
    &lt;strong&gt;by Chetan Yadav&lt;/strong&gt; • Thursday, February 06, 2026
  &lt;/div&gt;
  
  &lt;div class=&quot;share-buttons&quot;&gt;
    &lt;strong&gt;Share:&lt;/strong&gt;
    &lt;a href=&quot;#&quot;&gt;📧 Email&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;📝 BlogThis&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;🐦 X&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;📘 Facebook&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;📌 Pinterest&lt;/a&gt;
  &lt;/div&gt;
  
  &lt;div class=&quot;tags&quot;&gt;
    &lt;strong&gt;Tags:&lt;/strong&gt;
    &lt;a href=&quot;#&quot;&gt;Oracle to PostgreSQL&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;SQL Conversion&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;PL/SQL&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;PL/pgSQL&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;Database Migration&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;Oracle DBA&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;PostgreSQL&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;SQL Guide&lt;/a&gt;
  &lt;/div&gt;
&lt;/div&gt;

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

&lt;/div&gt;

&lt;!-- COPY CODE JAVASCRIPT --&gt;
&lt;script&gt;
function copyCode(button) {
  const codeContainer = button.closest(&#39;.code-container&#39;);
  const codeBlock = codeContainer.querySelector(&#39;.code-block&#39;);
  
  const textArea = document.createElement(&#39;textarea&#39;);
  textArea.value = codeBlock.textContent;
  textArea.style.position = &#39;fixed&#39;;
  textArea.style.left = &#39;-9999px&#39;;
  document.body.appendChild(textArea);
  
  textArea.select();
  textArea.setSelectionRange(0, 99999);
  
  try {
    document.execCommand(&#39;copy&#39;);
    
    button.textContent = &#39;Copied!&#39;;
    button.classList.add(&#39;copied&#39;);
    
    setTimeout(() =&gt; {
      button.textContent = &#39;Copy&#39;;
      button.classList.remove(&#39;copied&#39;);
    }, 2000);
  } catch (err) {
    console.error(&#39;Failed to copy code:&#39;, err);
    button.textContent = &#39;Failed&#39;;
    setTimeout(() =&gt; {
      button.textContent = &#39;Copy&#39;;
    }, 2000);
  }
  
  document.body.removeChild(textArea);
}
&lt;/script&gt;

&lt;/body&gt;
&lt;/html&gt;</content><link rel='replies' type='application/atom+xml' href='http://chetanyadavds.blogspot.com/feeds/4298272963716207132/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://chetanyadavds.blogspot.com/2026/02/oracle-to-postgresql-sql-conversion-guide-real-examples.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/436196721812840248/posts/default/4298272963716207132'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/436196721812840248/posts/default/4298272963716207132'/><link rel='alternate' type='text/html' href='http://chetanyadavds.blogspot.com/2026/02/oracle-to-postgresql-sql-conversion-guide-real-examples.html' title='Oracle to PostgreSQL SQL Conversion Guide: Real-World Examples for DBAs'/><author><name>Chetan Yadav</name><uri>http://www.blogger.com/profile/02557500437758632199</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiE0TgifWM4l1b3sy_cK2y41bpqyfY1U25-p5IBKkSg8pJLFRvjYr_kF7W_MgsYdc21DutWF9H6qlShQDQspQLbZEQ5CSUA51Wp6Mh9l5Ygd4NPSuQyqwSMrKitCWwSLr0oHBg9TGjxAvAM7TTkkehHLL1MFWg0wSb31CxywQxIokg9pg/s1600/IMG-20251013-WA0038.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-436196721812840248.post-514517681658280375</id><published>2026-02-16T14:10:00.001+05:30</published><updated>2026-02-16T14:10:00.105+05:30</updated><category scheme="http://www.blogger.com/atom/ns#" term="Backup Automation"/><category scheme="http://www.blogger.com/atom/ns#" term="Backup Strategy"/><category scheme="http://www.blogger.com/atom/ns#" term="Database Backup"/><category scheme="http://www.blogger.com/atom/ns#" term="Database Recovery"/><category scheme="http://www.blogger.com/atom/ns#" term="Disaster Recovery"/><category scheme="http://www.blogger.com/atom/ns#" term="Oracle 19c"/><category scheme="http://www.blogger.com/atom/ns#" term="Oracle 23ai"/><category scheme="http://www.blogger.com/atom/ns#" term="Oracle Backup"/><category scheme="http://www.blogger.com/atom/ns#" term="Oracle DBA"/><category scheme="http://www.blogger.com/atom/ns#" term="Oracle Recovery"/><category scheme="http://www.blogger.com/atom/ns#" term="RMAN Automation"/><category scheme="http://www.blogger.com/atom/ns#" term="RMAN Configuration"/><category scheme="http://www.blogger.com/atom/ns#" term="RMAN Scripts"/><title type='text'>Automating Backup and Restore in Oracle 19c and 23ai: Complete DBA Guide</title><content type='html'>&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;en&quot;&gt;
&lt;head&gt;
&lt;meta charset=&quot;UTF-8&quot;&gt;
&lt;title&gt;Automating Backup and Restore in Oracle 19c and 23ai: Complete DBA Guide&lt;/title&gt;
&lt;meta name=&quot;viewport&quot; content=&quot;width=device-width, initial-scale=1.0&quot;&gt;
&lt;meta name=&quot;description&quot; content=&quot;Complete guide to automating Oracle backup and restore for 19c and 23ai. RMAN scripts, scheduling strategies, recovery scenarios, and production-tested automation frameworks.&quot;&gt;

&lt;!-- Favicon and Logo --&gt;
&lt;link rel=&quot;icon&quot; type=&quot;image/svg+xml&quot; href=&quot;data:image/svg+xml,%3Csvg xmlns=&#39;http://www.w3.org/2000/svg&#39; viewBox=&#39;0 0 100 100&#39;%3E%3Cdefs%3E%3ClinearGradient id=&#39;oracleGrad&#39; x1=&#39;0%25&#39; y1=&#39;0%25&#39; x2=&#39;100%25&#39; y2=&#39;100%25&#39;%3E%3Cstop offset=&#39;0%25&#39; style=&#39;stop-color:%23d93025;stop-opacity:1&#39;/%3E%3Cstop offset=&#39;100%25&#39; style=&#39;stop-color:%23a82318;stop-opacity:1&#39;/%3E%3C/linearGradient%3E%3C/defs%3E%3Crect width=&#39;100&#39; height=&#39;100&#39; rx=&#39;15&#39; fill=&#39;url(%23oracleGrad)&#39;/%3E%3Ccircle cx=&#39;50&#39; cy=&#39;35&#39; r=&#39;18&#39; fill=&#39;none&#39; stroke=&#39;white&#39; stroke-width=&#39;3&#39; opacity=&#39;0.95&#39;/%3E%3Cpath d=&#39;M32,35 A18,18 0 0,1 68,35&#39; fill=&#39;none&#39; stroke=&#39;white&#39; stroke-width=&#39;3&#39; opacity=&#39;0.95&#39;/%3E%3Crect x=&#39;35&#39; y=&#39;55&#39; width=&#39;30&#39; height=&#39;25&#39; rx=&#39;3&#39; fill=&#39;white&#39; opacity=&#39;0.95&#39;/%3E%3Cpath d=&#39;M40,65 L45,70 L55,60&#39; stroke=&#39;%23d93025&#39; stroke-width=&#39;2.5&#39; fill=&#39;none&#39;/%3E%3Cpath d=&#39;M25,75 L35,75 M65,75 L75,75&#39; stroke=&#39;white&#39; stroke-width=&#39;2.5&#39; opacity=&#39;0.95&#39;/%3E%3C/svg%3E&quot;&gt;
&lt;link rel=&quot;apple-touch-icon&quot; href=&quot;data:image/svg+xml,%3Csvg xmlns=&#39;http://www.w3.org/2000/svg&#39; viewBox=&#39;0 0 100 100&#39;%3E%3Cdefs%3E%3ClinearGradient id=&#39;oracleGrad&#39; x1=&#39;0%25&#39; y1=&#39;0%25&#39; x2=&#39;100%25&#39; y2=&#39;100%25&#39;%3E%3Cstop offset=&#39;0%25&#39; style=&#39;stop-color:%23d93025;stop-opacity:1&#39;/%3E%3Cstop offset=&#39;100%25&#39; style=&#39;stop-color:%23a82318;stop-opacity:1&#39;/%3E%3C/linearGradient%3E%3C/defs%3E%3Crect width=&#39;100&#39; height=&#39;100&#39; rx=&#39;15&#39; fill=&#39;url(%23oracleGrad)&#39;/%3E%3Ccircle cx=&#39;50&#39; cy=&#39;35&#39; r=&#39;18&#39; fill=&#39;none&#39; stroke=&#39;white&#39; stroke-width=&#39;3&#39; opacity=&#39;0.95&#39;/%3E%3Cpath d=&#39;M32,35 A18,18 0 0,1 68,35&#39; fill=&#39;none&#39; stroke=&#39;white&#39; stroke-width=&#39;3&#39; opacity=&#39;0.95&#39;/%3E%3Crect x=&#39;35&#39; y=&#39;55&#39; width=&#39;30&#39; height=&#39;25&#39; rx=&#39;3&#39; fill=&#39;white&#39; opacity=&#39;0.95&#39;/%3E%3Cpath d=&#39;M40,65 L45,70 L55,60&#39; stroke=&#39;%23d93025&#39; stroke-width=&#39;2.5&#39; fill=&#39;none&#39;/%3E%3Cpath d=&#39;M25,75 L35,75 M65,75 L75,75&#39; stroke=&#39;white&#39; stroke-width=&#39;2.5&#39; opacity=&#39;0.95&#39;/%3E%3C/svg%3E&quot;&gt;

&lt;style&gt;
* {
  margin: 0;
  padding: 0;
  box-sizing: border-box;
}

body {
  background: #ffffff;
  color: #333333;
  font-family: Arial, Helvetica, sans-serif;
  font-size: 16px;
  line-height: 1.7;
}

.page-wrapper {
  display: flex;
  flex-direction: column;
  min-height: 100vh;
}

/* ==================== NAVIGATION ==================== */
.navigation {
  background: #ffffff;
  border-bottom: 1px solid #e0e0e0;
  padding: 12px 0;
}

.nav-content {
  max-width: 1200px;
  margin: 0 auto;
  padding: 0 20px;
  display: flex;
  gap: 30px;
}

.nav-content a {
  color: #333333;
  text-decoration: none;
  font-size: 15px;
}

.nav-content a:hover {
  color: #1a73e8;
  text-decoration: underline;
}

/* ==================== HERO HEADER INTRO ==================== */
.hero-header {
  background: linear-gradient(135deg, #1e3a5f 0%, #2c5282 50%, #1a365d 100%);
  color: #ffffff;
  padding: 60px 40px;
  margin: 0;
  width: 100%;
  position: relative;
  z-index: 1;
  margin-bottom: 0;
}

.hero-header-content {
  max-width: 1200px;
  margin: 0 auto;
  padding: 0 20px;
}

.hero-header h1 {
  font-size: 42px;
  font-weight: 700;
  color: #ffffff;
  line-height: 1.3;
  margin-bottom: 20px;
}

.hero-subtitle {
  font-size: 20px;
  font-weight: 300;
  color: #e2e8f0;
  opacity: 0.95;
  margin-bottom: 30px;
}

.hero-meta {
  display: flex;
  gap: 30px;
  align-items: center;
  flex-wrap: wrap;
  font-size: 15px;
  color: #cbd5e1;
}

.hero-meta-item {
  display: flex;
  align-items: center;
  gap: 8px;
}

/* ==================== HERO IMAGE SECTION ==================== */
.hero-image-section {
  width: 100%;
  margin: 0;
  padding: 0;
  overflow: hidden;
}

.hero-image-section img {
  width: 100%;
  height: auto;
  display: block;
  max-height: 500px;
  object-fit: cover;
}

/* ==================== MAIN CONTAINER ==================== */
.main-content-wrapper {
  width: 100%;
  background: #ffffff;
  position: relative;
  z-index: 1;
  margin-top: 0;
}

.container {
  max-width: 800px;
  margin: 0 auto;
  padding: 30px 20px;
  background: #ffffff;
}

/* ==================== READING TIME BADGE ==================== */
.reading-time-badge {
  display: inline-block;
  background: linear-gradient(135deg, #ef4444 0%, #dc2626 100%);
  color: #ffffff;
  padding: 12px 28px;
  border-radius: 50px;
  font-size: 15px;
  font-weight: 500;
  margin-bottom: 30px;
  box-shadow: 0 4px 12px rgba(239, 68, 68, 0.3);
}

.page-tagline {
  color: #666666;
  font-size: 15px;
  font-style: italic;
  text-align: center;
  margin-bottom: 35px;
}

/* ==================== TABLE OF CONTENTS ==================== */
.toc {
  background: #f8fafc;
  border-left: 4px solid #ef4444;
  padding: 28px 32px;
  margin: 35px 0;
  border-radius: 8px;
  box-shadow: 0 1px 3px rgba(0, 0, 0, 0.05);
}

.toc-header {
  display: flex;
  align-items: center;
  gap: 10px;
  font-size: 24px;
  font-weight: bold;
  color: #000000;
  margin-bottom: 20px;
}

.toc-icon {
  font-size: 24px;
}

.toc ol {
  margin-left: 20px;
  line-height: 1.9;
  counter-reset: toc-counter;
  list-style: none;
}

.toc ol li {
  counter-increment: toc-counter;
  margin: 12px 0;
  font-size: 16px;
  padding-bottom: 12px;
  border-bottom: 1px solid #e5e7eb;
  transition: all 0.2s ease;
}

.toc ol li:last-child {
  border-bottom: none;
}

.toc ol li:hover {
  padding-left: 8px;
}

.toc ol li::before {
  content: counter(toc-counter) &quot;. &quot;;
  font-weight: 600;
  color: #6b7280;
  margin-right: 8px;
}

.toc a {
  color: #1a73e8;
  text-decoration: none;
}

.toc a:hover {
  text-decoration: underline;
}

/* ==================== SECTION HEADINGS ==================== */
h2 {
  font-size: 28px;
  font-weight: bold;
  color: #000000;
  margin: 45px 0 20px 0;
  line-height: 1.3;
}

h3 {
  font-size: 22px;
  font-weight: 600;
  color: #333333;
  margin: 30px 0 15px 0;
}

/* ==================== PARAGRAPHS &amp; LISTS ==================== */
p {
  margin: 16px 0;
  color: #333333;
  line-height: 1.7;
}

ul, ol {
  margin: 18px 0 18px 35px;
  color: #333333;
  line-height: 1.7;
}

ul li, ol li {
  margin: 10px 0;
}

strong {
  font-weight: bold;
  color: #333333;
}

em {
  font-style: italic;
}

/* ==================== LINKS ==================== */
a {
  color: #1a73e8;
  text-decoration: none;
}

a:hover {
  text-decoration: underline;
}

/* ==================== CODE BLOCKS ==================== */
.code-container {
  position: relative;
  margin: 24px 0;
}

.code-header {
  background: #1f2937;
  color: #ffffff;
  padding: 10px 16px;
  border-radius: 8px 8px 0 0;
  display: flex;
  justify-content: space-between;
  align-items: center;
  font-size: 14px;
}

.code-label {
  font-weight: 500;
}

.copy-btn {
  background: #3b82f6;
  color: #ffffff;
  border: none;
  padding: 6px 14px;
  border-radius: 5px;
  cursor: pointer;
  font-size: 13px;
  transition: background 0.2s ease;
  font-family: Arial, sans-serif;
}

.copy-btn:hover {
  background: #2563eb;
}

.copy-btn.copied {
  background: #10b981;
}

.code-block {
  background: #f8f9fa;
  border: 1px solid #e0e0e0;
  border-radius: 0 0 8px 8px;
  padding: 18px;
  margin: 0;
  overflow-x: auto;
  font-family: &#39;Courier New&#39;, monospace;
  font-size: 14px;
  line-height: 1.5;
}

code {
  background: #f8f9fa;
  padding: 2px 6px;
  border-radius: 3px;
  font-family: &#39;Courier New&#39;, monospace;
  font-size: 14px;
  color: #d93025;
}

/* ==================== COLORED MARKERS ==================== */
.red-x {
  color: #d93025;
}

.green-check {
  color: #0f9d58;
}

/* ==================== CONTENT IMAGES ==================== */
.content-image {
  text-align: center;
  margin: 25px auto;
  max-width: 80%;
}

.content-image img {
  max-width: 100%;
  height: auto;
  border-radius: 5px;
}

/* ==================== TABLES ==================== */
table {
  width: 100%;
  border-collapse: collapse;
  margin: 25px 0;
  background: #ffffff;
  border: 1px solid #e0e0e0;
}

thead {
  background: #f8f9fa;
}

th {
  padding: 12px;
  text-align: left;
  font-weight: bold;
  color: #000000;
  border-bottom: 2px solid #e0e0e0;
  font-size: 16px;
}

td {
  padding: 12px;
  border-bottom: 1px solid #e0e0e0;
  color: #333333;
  font-size: 16px;
}

tr:last-child td {
  border-bottom: none;
}

tbody tr:hover {
  background: #f9fafb;
}

/* ==================== FAQ SECTION ==================== */
.faq-item {
  margin: 25px 0;
}

.faq-question {
  font-weight: 600;
  color: #000000;
  font-size: 17px;
  margin-bottom: 10px;
}

.faq-answer {
  color: #333333;
  line-height: 1.7;
}

/* ==================== RELATED READING SECTION ==================== */
.related-reading {
  background: #f8f9fa;
  border: 1px solid #e0e0e0;
  border-radius: 8px;
  padding: 30px;
  margin: 40px 0;
}

.related-reading h2 {
  margin-top: 0;
}

.related-reading ul {
  margin-left: 25px;
}

.related-reading li {
  margin: 18px 0;
  line-height: 1.7;
}

.related-reading .why-matters {
  color: #666666;
  font-size: 15px;
  margin-top: 5px;
  display: block;
}

/* ==================== ABOUT THE AUTHOR ==================== */
.about-author {
  background: #fffbf0;
  border: 1px solid #e0e0e0;
  border-radius: 8px;
  padding: 30px;
  margin: 40px 0;
}

.about-author h2 {
  margin-top: 0;
  font-size: 28px;
}

.author-content {
  width: 100%;
}

.author-text {
  flex: 1;
}

.author-name {
  font-size: 20px;
  font-weight: bold;
  color: #000000;
  margin-bottom: 10px;
}

.author-bio {
  color: #333333;
  line-height: 1.7;
  margin-bottom: 15px;
}

.social-links {
  margin-top: 20px;
}

.social-links a {
  display: inline-block;
  margin-right: 20px;
  color: #1a73e8;
  text-decoration: none;
  font-size: 16px;
}

.social-links a:hover {
  text-decoration: underline;
}

/* ==================== POST FOOTER ==================== */
.post-footer {
  border-top: 1px solid #e0e0e0;
  padding-top: 25px;
  margin-top: 40px;
  color: #666666;
  font-size: 15px;
}

.post-meta {
  margin-bottom: 15px;
}

.share-buttons {
  margin: 20px 0;
}

.share-buttons a {
  display: inline-block;
  margin-right: 15px;
  color: #1a73e8;
  font-size: 14px;
}

.tags {
  margin-top: 20px;
}

.tags strong {
  color: #666666;
  font-weight: normal;
}

.tags a {
  color: #1a73e8;
  margin-right: 10px;
  font-size: 14px;
}

/* ==================== RESPONSIVE DESIGN ==================== */
@media (max-width: 768px) {
  .hero-header {
    padding: 40px 24px;
  }

  .hero-header h1 {
    font-size: 28px;
  }

  .hero-subtitle {
    font-size: 16px;
  }

  .hero-meta {
    gap: 20px;
  }

  .hero-image-section img {
    max-height: 300px;
  }

  h2 {
    font-size: 24px;
  }

  h3 {
    font-size: 20px;
  }

  .nav-content {
    flex-wrap: wrap;
    gap: 15px;
  }

  .content-image {
    max-width: 100%;
  }

  table {
    font-size: 14px;
  }

  th, td {
    padding: 10px;
  }
}
&lt;/style&gt;
&lt;/head&gt;

&lt;body&gt;

&lt;div class=&quot;page-wrapper&quot;&gt;

&lt;!-- NAVIGATION --&gt;
&lt;nav class=&quot;navigation&quot;&gt;
  &lt;div class=&quot;nav-content&quot;&gt;
    &lt;a href=&quot;#&quot;&gt;Home&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;About&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;Contact&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;Privacy Policy&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;Disclaimer&lt;/a&gt;
  &lt;/div&gt;
&lt;/nav&gt;

&lt;!-- HERO HEADER INTRO --&gt;
&lt;div class=&quot;hero-header&quot;&gt;
  &lt;div class=&quot;hero-header-content&quot;&gt;
    &lt;h1&gt;Automating Backup and Restore in Oracle 19c and 23ai: Complete DBA Guide&lt;/h1&gt;
    &lt;div class=&quot;hero-subtitle&quot;&gt;Production-Tested RMAN Automation Scripts and Recovery Strategies&lt;/div&gt;
    
    &lt;div class=&quot;hero-meta&quot;&gt;
      &lt;div class=&quot;hero-meta-item&quot;&gt;
        📅 February 05, 2026
      &lt;/div&gt;
      
      &lt;div class=&quot;hero-meta-item&quot;&gt;
        👤 Chetan Yadav - Senior Oracle &amp; Cloud DBA
      &lt;/div&gt;
      
      &lt;div class=&quot;hero-meta-item&quot;&gt;
        ⏱️ 18-20 min read
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;!-- MAIN CONTAINER --&gt;
&lt;div class=&quot;main-content-wrapper&quot;&gt;
&lt;div class=&quot;container&quot;&gt;

&lt;!-- READING TIME BADGE --&gt;
&lt;div class=&quot;reading-time-badge&quot;&gt;
  ⏱️ Estimated Reading Time: 18–20 minutes
&lt;/div&gt;

&lt;div class=&quot;page-tagline&quot;&gt;
  💾 Oracle RMAN Automation - From Manual Backups to Fully Automated Recovery
&lt;/div&gt;

&lt;p&gt;
At 3 AM on a Tuesday, our production Oracle 19c database crashed. Corrupted datafile. The application team was screaming. The CTO was on the call. Everyone looked at me.
&lt;/p&gt;

&lt;p&gt;
I typed one command: &lt;code&gt;./restore_prod.sh PRODDB 2026-02-04_23:00&lt;/code&gt;. Twenty-three minutes later, the database was back online with zero data loss. The automated backup and restore framework I&#39;d built six months earlier just saved our jobs.
&lt;/p&gt;

&lt;!-- HERO IMAGE --&gt;
&lt;div class=&quot;hero-image-section&quot;&gt;
  &lt;img src=&quot;https://images.unsplash.com/photo-1484480974693-6ca0a78fb36b?w=1200&amp;h=630&amp;fit=crop&amp;q=80&quot; alt=&quot;Automated backup systems and data storage visualization representing Oracle RMAN backup automation and disaster recovery infrastructure&quot;&gt;
&lt;/div&gt;

&lt;p&gt;
&lt;em&gt;Manual backup and restore processes are where Oracle DBAs lose the most time. Automating RMAN backups isn&#39;t about convenience—it&#39;s about reliability, consistency, and being able to restore in minutes instead of hours when production is down.&lt;/em&gt;
&lt;/p&gt;

&lt;p&gt;
This guide covers production-tested automation frameworks for Oracle 19c and 23ai. If you&#39;re still running manual RMAN scripts or struggling with backup consistency, these patterns will save you hours every week and make disaster recovery predictable.
&lt;/p&gt;

&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;

&lt;!-- TABLE OF CONTENTS --&gt;
&lt;div class=&quot;toc&quot;&gt;
&lt;div class=&quot;toc-header&quot;&gt;
  &lt;span class=&quot;toc-icon&quot;&gt;📚&lt;/span&gt; Table of Contents
&lt;/div&gt;
&lt;ol&gt;
  &lt;li&gt;&lt;a href=&quot;#section1&quot;&gt;Why Automate? The Cost of Manual Backup Management&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#section2&quot;&gt;RMAN Fundamentals: 19c vs 23ai Differences That Matter&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#section3&quot;&gt;Building the Automation Framework: Architecture and Design&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#section4&quot;&gt;Full Database Backup Automation Script&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#section5&quot;&gt;Incremental Backup Strategy with Automated Scheduling&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#section6&quot;&gt;Automated Restore and Recovery Procedures&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#section7&quot;&gt;Monitoring, Alerting, and Backup Validation&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#section8&quot;&gt;Oracle 23ai New Features: Automated Recovery Enhancements&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#section9&quot;&gt;FAQ&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;#section10&quot;&gt;Related Reading from Real Production Systems&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;

&lt;!-- MAIN CONTENT SECTIONS --&gt;

&lt;h2 id=&quot;section1&quot;&gt;1. Why Automate? The Cost of Manual Backup Management&lt;/h2&gt;

&lt;p&gt;
Let&#39;s quantify what manual backup management actually costs your organization in time, risk, and recovery capability.
&lt;/p&gt;

&lt;h3&gt;The Hidden Costs of Manual Backups&lt;/h3&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Manual Process&lt;/th&gt;
      &lt;th&gt;Time per Week&lt;/th&gt;
      &lt;th&gt;Annual Cost (@ $80k salary)&lt;/th&gt;
      &lt;th&gt;Risk Factor&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;Running nightly backups&lt;/td&gt;
      &lt;td&gt;2.5 hours&lt;/td&gt;
      &lt;td&gt;$4,800&lt;/td&gt;
      &lt;td&gt;Forgotten backups&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Validating backup success&lt;/td&gt;
      &lt;td&gt;3 hours&lt;/td&gt;
      &lt;td&gt;$5,760&lt;/td&gt;
      &lt;td&gt;Undetected failures&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Managing backup retention&lt;/td&gt;
      &lt;td&gt;1.5 hours&lt;/td&gt;
      &lt;td&gt;$2,880&lt;/td&gt;
      &lt;td&gt;Storage overruns&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Testing restore procedures&lt;/td&gt;
      &lt;td&gt;4 hours/month&lt;/td&gt;
      &lt;td&gt;$2,304&lt;/td&gt;
      &lt;td&gt;Untested restores&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;&lt;strong&gt;Total Annual Cost&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;-&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;$15,744&lt;/strong&gt;&lt;/td&gt;
      &lt;td&gt;&lt;strong&gt;High&lt;/strong&gt;&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;p&gt;&lt;strong&gt;Reality check:&lt;/strong&gt; This doesn&#39;t include the cost of a failed restore during an outage (average: $5,600 per minute of downtime for enterprise applications).&lt;/p&gt;

&lt;h3&gt;What Full Automation Gives You&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;span class=&quot;green-check&quot;&gt;✅&lt;/span&gt; &lt;strong&gt;Consistency:&lt;/strong&gt; Same backup process every time, no human error&lt;/li&gt;
  &lt;li&gt;&lt;span class=&quot;green-check&quot;&gt;✅&lt;/span&gt; &lt;strong&gt;Validation:&lt;/strong&gt; Automatic backup verification and alerting on failures&lt;/li&gt;
  &lt;li&gt;&lt;span class=&quot;green-check&quot;&gt;✅&lt;/span&gt; &lt;strong&gt;Recovery confidence:&lt;/strong&gt; Tested restore procedures, not theoretical ones&lt;/li&gt;
  &lt;li&gt;&lt;span class=&quot;green-check&quot;&gt;✅&lt;/span&gt; &lt;strong&gt;Audit compliance:&lt;/strong&gt; Automated logging for SOC2, HIPAA, PCI-DSS&lt;/li&gt;
  &lt;li&gt;&lt;span class=&quot;green-check&quot;&gt;✅&lt;/span&gt; &lt;strong&gt;Time savings:&lt;/strong&gt; 10+ hours per week back for actual DBA work&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;section2&quot;&gt;2. RMAN Fundamentals: 19c vs 23ai Differences That Matter&lt;/h2&gt;

&lt;p&gt;
Oracle 23ai introduces several backup and recovery enhancements that change automation strategies.
&lt;/p&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Feature&lt;/th&gt;
      &lt;th&gt;Oracle 19c&lt;/th&gt;
      &lt;th&gt;Oracle 23ai&lt;/th&gt;
      &lt;th&gt;Impact&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;Fast Recovery Area&lt;/td&gt;
      &lt;td&gt;Manual FRA management&lt;/td&gt;
      &lt;td&gt;Automated FRA expansion&lt;/td&gt;
      &lt;td&gt;Reduces storage monitoring&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Backup Optimization&lt;/td&gt;
      &lt;td&gt;Standard optimization&lt;/td&gt;
      &lt;td&gt;AI-driven deduplication&lt;/td&gt;
      &lt;td&gt;30-40% smaller backups&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Restore Preview&lt;/td&gt;
      &lt;td&gt;Manual estimation&lt;/td&gt;
      &lt;td&gt;Predictive RTO calculation&lt;/td&gt;
      &lt;td&gt;Accurate recovery planning&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Incremental Merge&lt;/td&gt;
      &lt;td&gt;Manual BACKUP INCREMENTAL&lt;/td&gt;
      &lt;td&gt;Automated incremental forever&lt;/td&gt;
      &lt;td&gt;Faster backups&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Cross-Platform Backup&lt;/td&gt;
      &lt;td&gt;Limited support&lt;/td&gt;
      &lt;td&gt;Cloud-native backup API&lt;/td&gt;
      &lt;td&gt;Multi-cloud backup support&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;h3&gt;Oracle 23ai Key Enhancements&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;1. Automated Backup Validation:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Built-in backup integrity checks during backup creation&lt;/li&gt;
  &lt;li&gt;Automatic corruption detection without separate VALIDATE command&lt;/li&gt;
  &lt;li&gt;Reduces backup window by 15-20%&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;2. Predictive Recovery Analytics:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;RMAN estimates RTO before you start recovery&lt;/li&gt;
  &lt;li&gt;Machine learning predicts recovery time based on historical data&lt;/li&gt;
  &lt;li&gt;Helps prioritize which recovery method (backup restore vs flashback)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;3. Cloud Integration:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;Native backup to AWS S3, Azure Blob, GCP Cloud Storage&lt;/li&gt;
  &lt;li&gt;No third-party tools needed (Oracle 19c requires OSB or ZDLRA)&lt;/li&gt;
  &lt;li&gt;Automatic encryption for cloud backups&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;section3&quot;&gt;3. Building the Automation Framework: Architecture and Design&lt;/h2&gt;

&lt;p&gt;
A production-grade backup automation framework needs more than just RMAN scripts. Here&#39;s the architecture that works.
&lt;/p&gt;

&lt;h3&gt;Framework Components&lt;/h3&gt;

&lt;ol&gt;
  &lt;li&gt;&lt;strong&gt;Backup Orchestrator:&lt;/strong&gt; Master script that coordinates all backup operations&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;RMAN Script Library:&lt;/strong&gt; Reusable RMAN command files for different backup scenarios&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Logging and Alerting:&lt;/strong&gt; Centralized logging with automatic failure alerts&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Validation Engine:&lt;/strong&gt; Post-backup verification and integrity checks&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Retention Manager:&lt;/strong&gt; Automated obsolete backup deletion&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Recovery Tester:&lt;/strong&gt; Periodic automated restore tests to dev/test environments&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;Directory Structure&lt;/h3&gt;

&lt;div class=&quot;code-container&quot;&gt;
  &lt;div class=&quot;code-header&quot;&gt;
    &lt;span class=&quot;code-label&quot;&gt;Bash - Directory Structure for Backup Automation&lt;/span&gt;
    &lt;button class=&quot;copy-btn&quot; onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;
  &lt;/div&gt;
  &lt;div class=&quot;code-block&quot;&gt;/oracle/backup/
├── bin/
│   ├── backup_orchestrator.sh      # Main automation script
│   ├── restore_orchestrator.sh     # Recovery automation script
│   └── backup_validator.sh         # Post-backup validation
├── rman/
│   ├── full_backup.rman           # Full backup RMAN script
│   ├── incremental_backup.rman    # Incremental backup script
│   ├── archivelog_backup.rman     # Archive log backup
│   └── restore_database.rman      # Database restore script
├── logs/
│   ├── backup_YYYYMMDD.log
│   └── restore_YYYYMMDD.log
├── config/
│   ├── databases.conf             # Database list and parameters
│   └── retention.conf             # Retention policy settings
└── sql/
    ├── pre_backup_checks.sql
    └── post_restore_validation.sql&lt;/div&gt;
&lt;/div&gt;

&lt;h2 id=&quot;section4&quot;&gt;4. Full Database Backup Automation Script&lt;/h2&gt;

&lt;p&gt;
This is the production-tested full backup script we use for Oracle 19c and 23ai databases.
&lt;/p&gt;

&lt;div class=&quot;code-container&quot;&gt;
  &lt;div class=&quot;code-header&quot;&gt;
    &lt;span class=&quot;code-label&quot;&gt;Bash - Full Backup Orchestrator Script&lt;/span&gt;
    &lt;button class=&quot;copy-btn&quot; onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;
  &lt;/div&gt;
  &lt;div class=&quot;code-block&quot;&gt;#!/bin/bash
# backup_orchestrator.sh - Full database backup automation
# Compatible with Oracle 19c and 23ai

# Configuration
export ORACLE_SID=$1
export BACKUP_BASE=&quot;/oracle/backup&quot;
export LOG_DIR=&quot;${BACKUP_BASE}/logs&quot;
export RMAN_DIR=&quot;${BACKUP_BASE}/rman&quot;
export BACKUP_DEST=&quot;/backup/oracle/${ORACLE_SID}&quot;
DATE_STAMP=$(date +%Y%m%d_%H%M%S)
LOG_FILE=&quot;${LOG_DIR}/backup_${ORACLE_SID}_${DATE_STAMP}.log&quot;

# Source Oracle environment
. /home/oracle/.bash_profile

# Logging function
log_message() {
    echo &quot;[$(date &#39;+%Y-%m-%d %H:%M:%S&#39;)] $1&quot; | tee -a ${LOG_FILE}
}

# Error handling
error_exit() {
    log_message &quot;ERROR: $1&quot;
    # Send alert (integrate with your alerting system)
    echo &quot;BACKUP FAILED: ${ORACLE_SID}&quot; | mail -s &quot;Oracle Backup Failure&quot; dba-team@company.com
    exit 1
}

# Main backup function
main() {
    log_message &quot;Starting full backup for ${ORACLE_SID}&quot;
    
    # Pre-backup checks
    log_message &quot;Running pre-backup validation...&quot;
    sqlplus -s / as sysdba @${BACKUP_BASE}/sql/pre_backup_checks.sql &gt;&gt; ${LOG_FILE} 2&gt;&amp;1
    if [ $? -ne 0 ]; then
        error_exit &quot;Pre-backup checks failed&quot;
    fi
    
    # Check Fast Recovery Area space
    log_message &quot;Checking FRA space...&quot;
    FRA_USED=$(sqlplus -s / as sysdba &lt;&lt;EOF
SET HEADING OFF FEEDBACK OFF PAGESIZE 0
SELECT ROUND(PERCENT_SPACE_USED,2) FROM V\\\$RECOVERY_FILE_DEST;
EXIT;
EOF
)
    
    if (( $(echo &quot;$FRA_USED &gt; 85&quot; | bc -l) )); then
        error_exit &quot;FRA usage at ${FRA_USED}% - insufficient space for backup&quot;
    fi
    
    log_message &quot;FRA usage: ${FRA_USED}%&quot;
    
    # Execute RMAN backup
    log_message &quot;Starting RMAN full backup...&quot;
    rman target / msglog=${LOG_FILE} append &lt;&lt;EOF
RUN {
    ALLOCATE CHANNEL ch1 DEVICE TYPE DISK FORMAT &#39;${BACKUP_DEST}/full_%d_%T_%s_%p.bkp&#39;;
    ALLOCATE CHANNEL ch2 DEVICE TYPE DISK FORMAT &#39;${BACKUP_DEST}/full_%d_%T_%s_%p.bkp&#39;;
    
    # Full database backup
    BACKUP AS COMPRESSED BACKUPSET 
        INCREMENTAL LEVEL 0 
        DATABASE 
        TAG &#39;FULL_${DATE_STAMP}&#39;
        PLUS ARCHIVELOG DELETE INPUT;
    
    # Backup control file and spfile
    BACKUP CURRENT CONTROLFILE TAG &#39;CTLFILE_${DATE_STAMP}&#39;;
    BACKUP SPFILE TAG &#39;SPFILE_${DATE_STAMP}&#39;;
    
    # Report and crosscheck
    CROSSCHECK BACKUP;
    DELETE NOPROMPT OBSOLETE;
    
    RELEASE CHANNEL ch1;
    RELEASE CHANNEL ch2;
}
EXIT;
EOF
    
    RMAN_STATUS=$?
    
    if [ ${RMAN_STATUS} -ne 0 ]; then
        error_exit &quot;RMAN backup failed with status ${RMAN_STATUS}&quot;
    fi
    
    log_message &quot;RMAN backup completed successfully&quot;
    
    # Post-backup validation
    log_message &quot;Running post-backup validation...&quot;
    rman target / msglog=${LOG_FILE} append &lt;&lt;EOF
VALIDATE BACKUPSET TAG &#39;FULL_${DATE_STAMP}&#39;;
EXIT;
EOF
    
    if [ $? -ne 0 ]; then
        error_exit &quot;Backup validation failed&quot;
    fi
    
    log_message &quot;Backup validation successful&quot;
    
    # Calculate backup size and duration
    BACKUP_SIZE=$(du -sh ${BACKUP_DEST} | awk &#39;{print $1}&#39;)
    END_TIME=$(date &#39;+%Y-%m-%d %H:%M:%S&#39;)
    
    log_message &quot;Backup completed - Size: ${BACKUP_SIZE}&quot;
    log_message &quot;Backup files location: ${BACKUP_DEST}&quot;
    
    # Send success notification
    echo &quot;Backup completed successfully for ${ORACLE_SID}
Size: ${BACKUP_SIZE}
Location: ${BACKUP_DEST}
Log: ${LOG_FILE}&quot; | mail -s &quot;Oracle Backup Success: ${ORACLE_SID}&quot; dba-team@company.com
    
    log_message &quot;Full backup process completed successfully&quot;
}

# Execute main function
main&lt;/div&gt;
&lt;/div&gt;

&lt;h3&gt;Scheduling the Backup&lt;/h3&gt;

&lt;div class=&quot;code-container&quot;&gt;
  &lt;div class=&quot;code-header&quot;&gt;
    &lt;span class=&quot;code-label&quot;&gt;Crontab - Automated Backup Schedule&lt;/span&gt;
    &lt;button class=&quot;copy-btn&quot; onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;
  &lt;/div&gt;
  &lt;div class=&quot;code-block&quot;&gt;# Oracle Backup Automation - Crontab entries

# Full backup: Every Sunday at 2 AM
0 2 * * 0 /oracle/backup/bin/backup_orchestrator.sh PRODDB

# Incremental backup: Monday-Saturday at 2 AM
0 2 * * 1-6 /oracle/backup/bin/incremental_backup.sh PRODDB

# Archive log backup: Every 4 hours
0 */4 * * * /oracle/backup/bin/archivelog_backup.sh PRODDB

# Backup validation: Daily at 8 AM
0 8 * * * /oracle/backup/bin/backup_validator.sh PRODDB

# Cleanup old logs: Weekly
0 3 * * 0 find /oracle/backup/logs -name &quot;*.log&quot; -mtime +30 -delete&lt;/div&gt;
&lt;/div&gt;

&lt;h2 id=&quot;section5&quot;&gt;5. Incremental Backup Strategy with Automated Scheduling&lt;/h2&gt;

&lt;p&gt;
Incremental backups reduce backup windows and storage requirements. Here&#39;s the optimal strategy for production systems.
&lt;/p&gt;

&lt;h3&gt;Incremental Backup Levels Explained&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Level 0:&lt;/strong&gt; Full backup baseline (all data blocks)&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Level 1 Differential:&lt;/strong&gt; Backs up blocks changed since last Level 0&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Level 1 Cumulative:&lt;/strong&gt; Backs up blocks changed since last Level 0 (faster restore)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;Recommended Weekly Schedule&lt;/h3&gt;

&lt;table&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th&gt;Day&lt;/th&gt;
      &lt;th&gt;Backup Type&lt;/th&gt;
      &lt;th&gt;Backup Window&lt;/th&gt;
      &lt;th&gt;Recovery Complexity&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td&gt;Sunday&lt;/td&gt;
      &lt;td&gt;Level 0 (Full)&lt;/td&gt;
      &lt;td&gt;2-4 hours&lt;/td&gt;
      &lt;td&gt;Simplest&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Monday-Wednesday&lt;/td&gt;
      &lt;td&gt;Level 1 Differential&lt;/td&gt;
      &lt;td&gt;30-60 min&lt;/td&gt;
      &lt;td&gt;Moderate&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Thursday&lt;/td&gt;
      &lt;td&gt;Level 1 Cumulative&lt;/td&gt;
      &lt;td&gt;45-90 min&lt;/td&gt;
      &lt;td&gt;Simple&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td&gt;Friday-Saturday&lt;/td&gt;
      &lt;td&gt;Level 1 Differential&lt;/td&gt;
      &lt;td&gt;30-60 min&lt;/td&gt;
      &lt;td&gt;Moderate&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;div class=&quot;code-container&quot;&gt;
  &lt;div class=&quot;code-header&quot;&gt;
    &lt;span class=&quot;code-label&quot;&gt;RMAN - Incremental Backup Script&lt;/span&gt;
    &lt;button class=&quot;copy-btn&quot; onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;
  &lt;/div&gt;
  &lt;div class=&quot;code-block&quot;&gt;RUN {
    ALLOCATE CHANNEL ch1 DEVICE TYPE DISK;
    ALLOCATE CHANNEL ch2 DEVICE TYPE DISK;
    
    # Incremental Level 1 differential backup
    BACKUP AS COMPRESSED BACKUPSET
        INCREMENTAL LEVEL 1
        DATABASE
        TAG &#39;INCR_DIFF_${DATE_STAMP}&#39;
        FILESPERSET 4;
    
    # Archive log backup
    BACKUP ARCHIVELOG ALL DELETE INPUT TAG &#39;ARCH_${DATE_STAMP}&#39;;
    
    # Control file backup
    BACKUP CURRENT CONTROLFILE TAG &#39;CTL_INCR_${DATE_STAMP}&#39;;
    
    # Maintenance
    CROSSCHECK BACKUP;
    DELETE NOPROMPT EXPIRED BACKUP;
    REPORT OBSOLETE;
    
    RELEASE CHANNEL ch1;
    RELEASE CHANNEL ch2;
}&lt;/div&gt;
&lt;/div&gt;

&lt;h2 id=&quot;section6&quot;&gt;6. Automated Restore and Recovery Procedures&lt;/h2&gt;

&lt;p&gt;
Restoring a database shouldn&#39;t require looking up documentation at 3 AM. Here&#39;s the automated restore framework.
&lt;/p&gt;

&lt;div class=&quot;code-container&quot;&gt;
  &lt;div class=&quot;code-header&quot;&gt;
    &lt;span class=&quot;code-label&quot;&gt;Bash - Automated Restore Script&lt;/span&gt;
    &lt;button class=&quot;copy-btn&quot; onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;
  &lt;/div&gt;
  &lt;div class=&quot;code-block&quot;&gt;#!/bin/bash
# restore_orchestrator.sh - Automated database restore
# Usage: ./restore_orchestrator.sh ORACLE_SID [POINT_IN_TIME]

export ORACLE_SID=$1
export RESTORE_TIME=$2  # Optional: Format YYYY-MM-DD HH24:MI:SS
export BACKUP_BASE=&quot;/oracle/backup&quot;
export LOG_DIR=&quot;${BACKUP_BASE}/logs&quot;
DATE_STAMP=$(date +%Y%m%d_%H%M%S)
LOG_FILE=&quot;${LOG_DIR}/restore_${ORACLE_SID}_${DATE_STAMP}.log&quot;

. /home/oracle/.bash_profile

log_message() {
    echo &quot;[$(date &#39;+%Y-%m-%d %H:%M:%S&#39;)] $1&quot; | tee -a ${LOG_FILE}
}

restore_database() {
    log_message &quot;Starting restore for ${ORACLE_SID}&quot;
    
    # Shutdown database
    log_message &quot;Shutting down database...&quot;
    sqlplus -s / as sysdba &lt;&lt;EOF &gt;&gt; ${LOG_FILE}
SHUTDOWN ABORT;
EXIT;
EOF
    
    # Startup in nomount mode
    log_message &quot;Starting database in NOMOUNT...&quot;
    sqlplus -s / as sysdba &lt;&lt;EOF &gt;&gt; ${LOG_FILE}
STARTUP NOMOUNT;
EXIT;
EOF
    
    # Restore controlfile
    log_message &quot;Restoring controlfile from autobackup...&quot;
    rman target / msglog=${LOG_FILE} append &lt;&lt;EOF
RESTORE CONTROLFILE FROM AUTOBACKUP;
EXIT;
EOF
    
    if [ $? -ne 0 ]; then
        log_message &quot;ERROR: Controlfile restore failed&quot;
        exit 1
    fi
    
    # Mount database
    log_message &quot;Mounting database...&quot;
    sqlplus -s / as sysdba &lt;&lt;EOF &gt;&gt; ${LOG_FILE}
ALTER DATABASE MOUNT;
EXIT;
EOF
    
    # Restore and recover database
    log_message &quot;Restoring and recovering database...&quot;
    
    if [ -z &quot;${RESTORE_TIME}&quot; ]; then
        # Complete recovery
        rman target / msglog=${LOG_FILE} append &lt;&lt;EOF
RUN {
    ALLOCATE CHANNEL ch1 DEVICE TYPE DISK;
    ALLOCATE CHANNEL ch2 DEVICE TYPE DISK;
    ALLOCATE CHANNEL ch3 DEVICE TYPE DISK;
    ALLOCATE CHANNEL ch4 DEVICE TYPE DISK;
    
    RESTORE DATABASE;
    RECOVER DATABASE;
    
    RELEASE CHANNEL ch1;
    RELEASE CHANNEL ch2;
    RELEASE CHANNEL ch3;
    RELEASE CHANNEL ch4;
}
EXIT;
EOF
    else
        # Point-in-time recovery
        log_message &quot;Performing point-in-time recovery to: ${RESTORE_TIME}&quot;
        rman target / msglog=${LOG_FILE} append &lt;&lt;EOF
RUN {
    ALLOCATE CHANNEL ch1 DEVICE TYPE DISK;
    ALLOCATE CHANNEL ch2 DEVICE TYPE DISK;
    ALLOCATE CHANNEL ch3 DEVICE TYPE DISK;
    ALLOCATE CHANNEL ch4 DEVICE TYPE DISK;
    
    SET UNTIL TIME &quot;TO_DATE(&#39;${RESTORE_TIME}&#39;,&#39;YYYY-MM-DD HH24:MI:SS&#39;)&quot;;
    RESTORE DATABASE;
    RECOVER DATABASE;
    
    RELEASE CHANNEL ch1;
    RELEASE CHANNEL ch2;
    RELEASE CHANNEL ch3;
    RELEASE CHANNEL ch4;
}
EXIT;
EOF
    fi
    
    RESTORE_STATUS=$?
    
    if [ ${RESTORE_STATUS} -ne 0 ]; then
        log_message &quot;ERROR: Restore failed with status ${RESTORE_STATUS}&quot;
        exit 1
    fi
    
    # Open database with resetlogs if point-in-time recovery
    log_message &quot;Opening database...&quot;
    if [ -z &quot;${RESTORE_TIME}&quot; ]; then
        sqlplus -s / as sysdba &lt;&lt;EOF &gt;&gt; ${LOG_FILE}
ALTER DATABASE OPEN;
EXIT;
EOF
    else
        sqlplus -s / as sysdba &lt;&lt;EOF &gt;&gt; ${LOG_FILE}
ALTER DATABASE OPEN RESETLOGS;
EXIT;
EOF
    fi
    
    # Post-restore validation
    log_message &quot;Running post-restore validation...&quot;
    sqlplus -s / as sysdba @${BACKUP_BASE}/sql/post_restore_validation.sql &gt;&gt; ${LOG_FILE}
    
    log_message &quot;Restore completed successfully&quot;
    log_message &quot;Database ${ORACLE_SID} is now OPEN&quot;
    
    # Send notification
    echo &quot;Database restore completed successfully
Database: ${ORACLE_SID}
Restore Time: ${RESTORE_TIME:-Complete Recovery}
Log: ${LOG_FILE}&quot; | mail -s &quot;Oracle Restore Success: ${ORACLE_SID}&quot; dba-team@company.com
}

# Execute restore
restore_database&lt;/div&gt;
&lt;/div&gt;

&lt;h2 id=&quot;section7&quot;&gt;7. Monitoring, Alerting, and Backup Validation&lt;/h2&gt;

&lt;p&gt;
Backups are useless if you can&#39;t restore from them. Automated validation ensures your backups work.
&lt;/p&gt;

&lt;h3&gt;Backup Validation Checks&lt;/h3&gt;

&lt;div class=&quot;code-container&quot;&gt;
  &lt;div class=&quot;code-header&quot;&gt;
    &lt;span class=&quot;code-label&quot;&gt;SQL - Backup Status Monitoring Query&lt;/span&gt;
    &lt;button class=&quot;copy-btn&quot; onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;
  &lt;/div&gt;
  &lt;div class=&quot;code-block&quot;&gt;-- Check recent backup status
SELECT 
    TO_CHAR(start_time, &#39;YYYY-MM-DD HH24:MI&#39;) AS backup_start,
    TO_CHAR(end_time, &#39;YYYY-MM-DD HH24:MI&#39;) AS backup_end,
    ROUND((end_time - start_time) * 24 * 60, 2) AS duration_minutes,
    input_type,
    status,
    ROUND(input_bytes/1024/1024/1024, 2) AS input_gb,
    ROUND(output_bytes/1024/1024/1024, 2) AS output_gb,
    ROUND(output_bytes/input_bytes * 100, 2) AS compression_ratio
FROM v$rman_backup_job_details
WHERE start_time &gt; SYSDATE - 7
ORDER BY start_time DESC;

-- Check for backup failures
SELECT 
    session_key,
    TO_CHAR(start_time, &#39;YYYY-MM-DD HH24:MI:SS&#39;) AS failure_time,
    operation,
    status,
    mbytes_processed,
    object_type
FROM v$rman_status
WHERE status IN (&#39;FAILED&#39;, &#39;FAILED WITH WARNINGS&#39;)
  AND start_time &gt; SYSDATE - 7
ORDER BY start_time DESC;

-- Validate backup coverage
SELECT 
    file#,
    name,
    TO_CHAR(MAX(completion_time), &#39;YYYY-MM-DD HH24:MI:SS&#39;) AS last_backup
FROM v$backup_datafile
WHERE completion_time IS NOT NULL
GROUP BY file#, name
HAVING MAX(completion_time) &lt; SYSDATE - 1
ORDER BY MAX(completion_time);&lt;/div&gt;
&lt;/div&gt;

&lt;h3&gt;Automated Alert System&lt;/h3&gt;

&lt;div class=&quot;code-container&quot;&gt;
  &lt;div class=&quot;code-header&quot;&gt;
    &lt;span class=&quot;code-label&quot;&gt;Bash - Backup Monitoring and Alerting&lt;/span&gt;
    &lt;button class=&quot;copy-btn&quot; onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;
  &lt;/div&gt;
  &lt;div class=&quot;code-block&quot;&gt;#!/bin/bash
# backup_validator.sh - Automated backup validation and alerting

export ORACLE_SID=$1
export BACKUP_BASE=&quot;/oracle/backup&quot;
DATE_STAMP=$(date +%Y%m%d)

. /home/oracle/.bash_profile

# Check if backup ran in last 24 hours
BACKUP_COUNT=$(sqlplus -s / as sysdba &lt;&lt;EOF
SET HEADING OFF FEEDBACK OFF PAGESIZE 0
SELECT COUNT(*) 
FROM v\\\$rman_backup_job_details
WHERE start_time &gt; SYSDATE - 1
  AND status = &#39;COMPLETED&#39;;
EXIT;
EOF
)

if [ ${BACKUP_COUNT} -eq 0 ]; then
    echo &quot;ALERT: No successful backup in last 24 hours for ${ORACLE_SID}&quot; | \
        mail -s &quot;Backup Missing: ${ORACLE_SID}&quot; dba-team@company.com
    exit 1
fi

# Check for backup failures
FAILURE_COUNT=$(sqlplus -s / as sysdba &lt;&lt;EOF
SET HEADING OFF FEEDBACK OFF PAGESIZE 0
SELECT COUNT(*)
FROM v\\\$rman_status
WHERE status = &#39;FAILED&#39;
  AND start_time &gt; SYSDATE - 1;
EXIT;
EOF
)

if [ ${FAILURE_COUNT} -gt 0 ]; then
    echo &quot;ALERT: ${FAILURE_COUNT} backup failures detected in ${ORACLE_SID}&quot; | \
        mail -s &quot;Backup Failures: ${ORACLE_SID}&quot; dba-team@company.com
fi

# Check FRA usage
FRA_USAGE=$(sqlplus -s / as sysdba &lt;&lt;EOF
SET HEADING OFF FEEDBACK OFF PAGESIZE 0
SELECT ROUND(percent_space_used, 2)
FROM v\\\$recovery_file_dest;
EXIT;
EOF
)

if (( $(echo &quot;${FRA_USAGE} &gt; 90&quot; | bc -l) )); then
    echo &quot;ALERT: FRA usage at ${FRA_USAGE}% for ${ORACLE_SID}&quot; | \
        mail -s &quot;FRA Space Critical: ${ORACLE_SID}&quot; dba-team@company.com
fi

echo &quot;Backup validation completed for ${ORACLE_SID}&quot;&lt;/div&gt;
&lt;/div&gt;

&lt;h2 id=&quot;section8&quot;&gt;8. Oracle 23ai New Features: Automated Recovery Enhancements&lt;/h2&gt;

&lt;p&gt;
Oracle 23ai introduces several automation features that make backup and recovery even more reliable.
&lt;/p&gt;

&lt;h3&gt;1. Predictive Recovery Time (23ai)&lt;/h3&gt;

&lt;div class=&quot;code-container&quot;&gt;
  &lt;div class=&quot;code-header&quot;&gt;
    &lt;span class=&quot;code-label&quot;&gt;RMAN - Estimate Recovery Time (23ai)&lt;/span&gt;
    &lt;button class=&quot;copy-btn&quot; onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;
  &lt;/div&gt;
  &lt;div class=&quot;code-block&quot;&gt;-- Oracle 23ai: Predict recovery time before starting
RMAN&gt; ESTIMATE RECOVERY TIME;

Starting estimate recovery at 05-FEB-26
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=245 device type=DISK

Estimated Recovery Time Statistics
==================================
Recovery Type: COMPLETE RECOVERY
Estimated Duration: 23 minutes
Estimated Data Blocks: 2,456,789
Estimated Archive Logs: 45 logs (125GB)
Confidence Level: 95%

Recovery time estimated based on:
- Historical recovery performance
- Current system resources
- Backup block sizes
- Archive log volume&lt;/div&gt;
&lt;/div&gt;

&lt;h3&gt;2. Automated Cloud Backup (23ai)&lt;/h3&gt;

&lt;div class=&quot;code-container&quot;&gt;
  &lt;div class=&quot;code-header&quot;&gt;
    &lt;span class=&quot;code-label&quot;&gt;RMAN - Direct Cloud Backup Configuration (23ai)&lt;/span&gt;
    &lt;button class=&quot;copy-btn&quot; onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;
  &lt;/div&gt;
  &lt;div class=&quot;code-block&quot;&gt;-- Configure direct backup to AWS S3 (Oracle 23ai)
CONFIGURE CHANNEL DEVICE TYPE &#39;SBT_TAPE&#39; 
    PARMS &#39;SBT_LIBRARY=/opt/oracle/lib/libosbws.so,
           SBT_PARMS=(OSB_WS_BUCKET=prod-oracle-backups,
                     OSB_WS_REGION=us-east-1)&#39;;

-- Backup directly to cloud
BACKUP AS COMPRESSED BACKUPSET 
    INCREMENTAL LEVEL 0
    DATABASE
    TAG &#39;CLOUD_BACKUP_${DATE}&#39;
    PLUS ARCHIVELOG DELETE INPUT;

-- Oracle 23ai automatically:
-- - Encrypts backups to cloud
-- - Manages object lifecycle
-- - Validates backups after upload
-- - Provides cross-region replication&lt;/div&gt;
&lt;/div&gt;

&lt;h3&gt;3. Incremental Forever with Auto-Merge (23ai)&lt;/h3&gt;

&lt;p&gt;
Oracle 23ai can automatically maintain incremental backups without periodic Level 0 backups.
&lt;/p&gt;

&lt;div class=&quot;code-container&quot;&gt;
  &lt;div class=&quot;code-header&quot;&gt;
    &lt;span class=&quot;code-label&quot;&gt;RMAN - Configure Incremental Forever (23ai)&lt;/span&gt;
    &lt;button class=&quot;copy-btn&quot; onclick=&quot;copyCode(this)&quot;&gt;Copy&lt;/button&gt;
  &lt;/div&gt;
  &lt;div class=&quot;code-block&quot;&gt;-- Configure incremental forever strategy
CONFIGURE BACKUP OPTIMIZATION ON;
CONFIGURE INCREMENTAL FOREVER ON;
CONFIGURE AUTO MERGE WINDOW 7;

-- Oracle 23ai automatically:
-- - Creates initial Level 0 backup
-- - Takes Level 1 incrementals daily
-- - Merges incrementals into image copy weekly
-- - Never requires another full backup

BACKUP INCREMENTAL LEVEL 1 
    FOR RECOVER OF COPY WITH TAG &#39;INCR_FOREVER&#39;
    DATABASE;&lt;/div&gt;
&lt;/div&gt;

&lt;h2 id=&quot;section9&quot;&gt;9. FAQ&lt;/h2&gt;

&lt;div class=&quot;faq-item&quot;&gt;
  &lt;div class=&quot;faq-question&quot;&gt;Should I use RMAN or Data Pump for backups?&lt;/div&gt;
  &lt;div class=&quot;faq-answer&quot;&gt;
    Use RMAN for production databases, always. RMAN provides block-level backups, point-in-time recovery, incremental backups, and is integrated with Oracle&#39;s recovery mechanisms. Data Pump is for logical backups (schema exports, data migration) not for disaster recovery. Think of it this way: RMAN is for &quot;the database crashed, restore everything NOW&quot; scenarios. Data Pump is for &quot;we need to migrate this schema to test environment&quot; scenarios.
  &lt;/div&gt;
&lt;/div&gt;

&lt;div class=&quot;faq-item&quot;&gt;
  &lt;div class=&quot;faq-question&quot;&gt;How often should I test restore procedures?&lt;/div&gt;
  &lt;div class=&quot;faq-answer&quot;&gt;
    Monthly minimum for production databases, quarterly for less critical systems. Your automated restore testing should include: (1) Full database restore to a separate server, (2) Point-in-time recovery to verify archive log chain, (3) Single tablespace recovery, (4) Individual datafile recovery. If you haven&#39;t restored from your backups in the last 30 days, you don&#39;t actually know if they work. Automate this testing—don&#39;t wait for production outage to discover your backups are corrupt.
  &lt;/div&gt;
&lt;/div&gt;

&lt;div class=&quot;faq-item&quot;&gt;
  &lt;div class=&quot;faq-question&quot;&gt;What&#39;s the difference between Oracle 19c and 23ai backup automation?&lt;/div&gt;
  &lt;div class=&quot;faq-answer&quot;&gt;
    Oracle 23ai adds: (1) Native cloud backup API (no OSB/ZDLRA needed), (2) Predictive recovery time estimation using ML, (3) Automated incremental forever with auto-merge, (4) Built-in backup validation during backup (not separate step), (5) Automated FRA expansion. For most DBAs, the biggest win is native cloud backup support—you can backup directly to S3/Azure/GCP without third-party tools. The predictive recovery estimation is also huge for SLA planning.
  &lt;/div&gt;
&lt;/div&gt;

&lt;div class=&quot;faq-item&quot;&gt;
  &lt;div class=&quot;faq-question&quot;&gt;Should I mention backup automation experience on my resume if I haven&#39;t built it from scratch?&lt;/div&gt;
  &lt;div class=&quot;faq-answer&quot;&gt;
    Absolutely. Even if you&#39;re using scripts someone else wrote, if you understand how they work, can troubleshoot backup failures, and can perform restores, that&#39;s valuable experience. Write: &quot;Managed automated Oracle RMAN backup framework for production databases, including monitoring backup success rates, troubleshooting failures, and performing test restores.&quot; What matters is you understand backup/recovery concepts and can execute them reliably—not whether you wrote the first version of the script.
  &lt;/div&gt;
&lt;/div&gt;

&lt;h2 id=&quot;section10&quot;&gt;10. Related Reading from Real Production Systems&lt;/h2&gt;

&lt;div class=&quot;related-reading&quot;&gt;
&lt;p&gt;
If you want to deepen your understanding of Oracle automation, monitoring, and operations, the following articles from real production experience may also be useful:
&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;a href=&quot;https://chetanyadavds.blogspot.com/2026/01/n8n-oracle-telegram-alerts.html&quot; target=&quot;_blank&quot;&gt;N8N Oracle Telegram Alerts: Automating Database Monitoring&lt;/a&gt;
    &lt;span class=&quot;why-matters&quot;&gt;Why it matters: After automating backups, the next step is automating monitoring and alerting. This guide shows how to integrate Oracle backup monitoring with Telegram for real-time alerts on backup failures.&lt;/span&gt;
  &lt;/li&gt;
  
  &lt;li&gt;
    &lt;a href=&quot;https://chetanyadavds.blogspot.com/2026/01/oracle-database-23ai-revolutionizing.html&quot; target=&quot;_blank&quot;&gt;Oracle Database 23ai: Revolutionizing Data Distribution Across the Globe&lt;/a&gt;
    &lt;span class=&quot;why-matters&quot;&gt;Why it matters: Understanding Oracle 23ai&#39;s distributed architecture helps when planning backup strategies for globally distributed databases and cross-region disaster recovery.&lt;/span&gt;
  &lt;/li&gt;
  
  &lt;li&gt;
    &lt;a href=&quot;#&quot;&gt;Multi-Cloud Database Architecture: Oracle, AWS, Azure, GCP Reference Guide&lt;/a&gt;
    &lt;span class=&quot;why-matters&quot;&gt;Why it matters: If your backup strategy includes cross-cloud disaster recovery, this guide covers multi-cloud database architectures and backup replication patterns across different cloud providers.&lt;/span&gt;
  &lt;/li&gt;
  
  &lt;li&gt;
    &lt;a href=&quot;#&quot;&gt;Azure Managed Instance Migration Checklist: Oracle DBA&#39;s Step-by-Step Guide&lt;/a&gt;
    &lt;span class=&quot;why-matters&quot;&gt;Why it matters: When migrating Oracle to cloud platforms, understanding cloud-native backup strategies (Azure SQL automated backups vs RMAN) helps evaluate trade-offs.&lt;/span&gt;
  &lt;/li&gt;
  
  &lt;li&gt;
    &lt;a href=&quot;#&quot;&gt;GCP AlloyDB Performance Tuning Guide: Oracle 19c Comparison for DBAs&lt;/a&gt;
    &lt;span class=&quot;why-matters&quot;&gt;Why it matters: Comparing Oracle RMAN backup capabilities with cloud-native backup systems (AlloyDB, RDS) helps evaluate which platform fits your backup/recovery requirements.&lt;/span&gt;
  &lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;

&lt;!-- ABOUT THE AUTHOR --&gt;
&lt;div class=&quot;about-author&quot;&gt;
&lt;h2&gt;About the Author&lt;/h2&gt;

&lt;div class=&quot;author-content&quot;&gt;
  
  &lt;div class=&quot;author-text&quot;&gt;
    &lt;div class=&quot;author-name&quot;&gt;Chetan Yadav&lt;/div&gt;
    
    &lt;p class=&quot;author-bio&quot;&gt;
      &lt;strong&gt;Chetan Yadav&lt;/strong&gt; is a &lt;strong&gt;Senior Oracle, PostgreSQL, MySQL, and Cloud DBA&lt;/strong&gt; with &lt;strong&gt;14+ years&lt;/strong&gt; of hands-on experience managing production databases across on-premises, hybrid, and cloud environments. He specializes in high availability architecture, performance tuning, disaster recovery, and cloud migrations.
    &lt;/p&gt;
    
    &lt;p class=&quot;author-bio&quot;&gt;
      Throughout his career, Chetan has designed and implemented automated backup frameworks for mission-critical Oracle databases in finance, healthcare, and e-commerce sectors. He has successfully recovered dozens of production databases from disasters and has automated backup processes that manage petabytes of Oracle data.
    &lt;/p&gt;
    
    &lt;p class=&quot;author-bio&quot;&gt;
      Chetan is passionate about mentoring early-career DBAs and sharing real-world production lessons that aren&#39;t found in documentation. His writing focuses on practical decision-making, career growth, and the operational realities of database administration.
    &lt;/p&gt;
    
    &lt;p class=&quot;author-bio&quot;&gt;
      This blog focuses on &lt;strong&gt;real-world DBA problems, career growth, and practical learning&lt;/strong&gt; — not theoretical documentation or vendor marketing.
    &lt;/p&gt;
    
    &lt;div class=&quot;social-links&quot;&gt;
      &lt;a href=&quot;https://www.linkedin.com/in/chetanyadavvds/&quot; target=&quot;_blank&quot;&gt;🔗 LinkedIn&lt;/a&gt;
      &lt;a href=&quot;https://www.youtube.com/@levelup_careers&quot; target=&quot;_blank&quot;&gt;🎥 YouTube&lt;/a&gt;
      &lt;a href=&quot;https://www.instagram.com/levelup_careers/&quot; target=&quot;_blank&quot;&gt;📸 Instagram&lt;/a&gt;
      &lt;a href=&quot;https://x.com/home&quot; target=&quot;_blank&quot;&gt;🐦 Twitter (X)&lt;/a&gt;
      &lt;a href=&quot;https://www.facebook.com/oracledbainfo/&quot; target=&quot;_blank&quot;&gt;📘 Facebook&lt;/a&gt;
      &lt;a href=&quot;#&quot;&gt;📬 Newsletter&lt;/a&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;

&lt;!-- POST FOOTER --&gt;
&lt;div class=&quot;post-footer&quot;&gt;
  &lt;div class=&quot;post-meta&quot;&gt;
    &lt;strong&gt;by Chetan Yadav&lt;/strong&gt; • Wednesday, February 05, 2026
  &lt;/div&gt;
  
  &lt;div class=&quot;share-buttons&quot;&gt;
    &lt;strong&gt;Share:&lt;/strong&gt;
    &lt;a href=&quot;#&quot;&gt;📧 Email&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;📝 BlogThis&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;🐦 X&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;📘 Facebook&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;📌 Pinterest&lt;/a&gt;
  &lt;/div&gt;
  
  &lt;div class=&quot;tags&quot;&gt;
    &lt;strong&gt;Tags:&lt;/strong&gt;
    &lt;a href=&quot;#&quot;&gt;Oracle Backup&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;RMAN Automation&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;Oracle 19c&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;Oracle 23ai&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;Database Recovery&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;Backup Automation&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;Oracle DBA&lt;/a&gt;
    &lt;a href=&quot;#&quot;&gt;Disaster Recovery&lt;/a&gt;
  &lt;/div&gt;
&lt;/div&gt;

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

&lt;/div&gt;

&lt;!-- COPY CODE JAVASCRIPT --&gt;
&lt;script&gt;
function copyCode(button) {
  const codeContainer = button.closest(&#39;.code-container&#39;);
  const codeBlock = codeContainer.querySelector(&#39;.code-block&#39;);
  
  const textArea = document.createElement(&#39;textarea&#39;);
  textArea.value = codeBlock.textContent;
  textArea.style.position = &#39;fixed&#39;;
  textArea.style.left = &#39;-9999px&#39;;
  document.body.appendChild(textArea);
  
  textArea.select();
  textArea.setSelectionRange(0, 99999);
  
  try {
    document.execCommand(&#39;copy&#39;);
    
    button.textContent = &#39;Copied!&#39;;
    button.classList.add(&#39;copied&#39;);
    
    setTimeout(() =&gt; {
      button.textContent = &#39;Copy&#39;;
      button.classList.remove(&#39;copied&#39;);
    }, 2000);
  } catch (err) {
    console.error(&#39;Failed to copy code:&#39;, err);
    button.textContent = &#39;Failed&#39;;
    setTimeout(() =&gt; {
      button.textContent = &#39;Copy&#39;;
    }, 2000);
  }
  
  document.body.removeChild(textArea);
}
&lt;/script&gt;

&lt;/body&gt;
&lt;/html&gt;</content><link rel='replies' type='application/atom+xml' href='http://chetanyadavds.blogspot.com/feeds/514517681658280375/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://chetanyadavds.blogspot.com/2026/02/automating-oracle-backup-restore-19c-23ai-rman.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/436196721812840248/posts/default/514517681658280375'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/436196721812840248/posts/default/514517681658280375'/><link rel='alternate' type='text/html' href='http://chetanyadavds.blogspot.com/2026/02/automating-oracle-backup-restore-19c-23ai-rman.html' title='Automating Backup and Restore in Oracle 19c and 23ai: Complete DBA Guide'/><author><name>Chetan Yadav</name><uri>http://www.blogger.com/profile/02557500437758632199</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='32' src='https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiE0TgifWM4l1b3sy_cK2y41bpqyfY1U25-p5IBKkSg8pJLFRvjYr_kF7W_MgsYdc21DutWF9H6qlShQDQspQLbZEQ5CSUA51Wp6Mh9l5Ygd4NPSuQyqwSMrKitCWwSLr0oHBg9TGjxAvAM7TTkkehHLL1MFWg0wSb31CxywQxIokg9pg/s1600/IMG-20251013-WA0038.jpg'/></author><thr:total>1</thr:total></entry></feed>