<?xml version='1.0' encoding='UTF-8'?><rss xmlns:atom="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" version="2.0"><channel><atom:id>tag:blogger.com,1999:blog-1375587508974804970</atom:id><lastBuildDate>Tue, 20 Oct 2026 11:15:00 +0000</lastBuildDate><category>Core DBA</category><category>Must Read</category><category>PostgreSQL</category><category>Frequently Asked</category><category>RMAN</category><category>Tuning</category><category>Interview Questions</category><category>DataGuard</category><category>ASM</category><category>Datapump</category><category>UNIX</category><category>26ai</category><category>MySQL</category><category>RAC</category><category>Goldengate</category><category>23ai</category><category>AI</category><category>Patching</category><category>19c</category><category>Auditing</category><category>Exam Prep</category><category>Logminer</category><category>MongoDB</category><category>Tricks</category><category>Upgradation</category><title>Learn DBA : A Life Long Learning Experience</title><description>Sharing knowledge is the ultimate key to gaining knowledge.. &lt;br&gt;&#xa; &lt;br&gt;&#xa;&#xa;The only two things that stay with you for life &#xa;are you &amp;amp; your knowledge !&#xa; &lt;br&gt; &lt;br&gt;&#xa;&lt;br&gt; &lt;br&gt; &#xa;Live while you can! &lt;br&gt; &#xa;                                    Teach &amp;amp; inspire while you could &amp;amp; &lt;br&gt; &#xa;                                                                  Smile while you have the teeth.. 😉&#xa;&#xa;&lt;br&gt;&#xa;&lt;br&gt;&#xa;</description><link>https://oracle-dba-help.blogspot.com/</link><managingEditor>noreply@blogger.com (Nikhil Kotak)</managingEditor><generator>Blogger</generator><openSearch:totalResults>414</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1375587508974804970.post-7466946378309629627</guid><pubDate>Tue, 20 Oct 2026 11:15:00 +0000</pubDate><atom:updated>2026-10-20T19:15:00.126+08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Core DBA</category><category domain="http://www.blogger.com/atom/ns#">Must Read</category><title>ORA-12514: Diagnose the Service, Not the Listener</title><description>&lt;h2 style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&amp;nbsp; A database maintenance window had just ended. The instance was open, the listener process was running, and TNSPING returned successfully. Yet the application connection pool continued to report ORA-12514. The first suggestion on the incident bridge was predictable: restart the listener. That would have changed the system before anyone had established what was actually wrong.&lt;/span&gt;&lt;/span&gt;&lt;/h2&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-weight: normal;&quot;&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;ORA-12514 is not a generic network failure. It tells us something specific: the client reached an Oracle listener, but that listener could not map the requested service name to a registered database service. The gap may be in the client connection string, dynamic registration, PDB state, Clusterware service configuration, or database role after a Data Guard transition. Each cause requires a different response.&lt;/span&gt;&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;This guide treats ORA-12514 as a service-routing problem. We will trace the client descriptor, compare it with the listener registry and database service state, determine when &lt;code style=&quot;font-family: courier;&quot;&gt;ALTER SYSTEM REGISTER&lt;/code&gt; is useful, and examine the multitenant, RAC, and Data Guard cases that simple listener checklists often miss.&lt;/p&gt;

&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
  &lt;!--Image idea: Client Application -&gt; TNS Alias or JDBC URL -&gt; Oracle Listener -&gt; Service Registry -&gt; Database Service -&gt; Instance or PDB. Mark the network path to the listener as successful and place a red stop between Service Registry and Database Service labelled Requested service not found - ORA-12514.--&gt;
&lt;/div&gt;

&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;&lt;br /&gt;&lt;/h2&gt;&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;What ORA-12514 Actually Proves&lt;/h2&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;The listener receives a client request containing a service name and searches its service registry for a handler capable of accepting the connection. If the requested service is absent, the listener returns ORA-12514.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;The error therefore confirms two useful facts:&lt;/p&gt;

&lt;ul style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;
  &lt;li&gt;The client successfully reached an Oracle listener.&lt;/li&gt;
  &lt;li&gt;That listener did not recognize the requested service.&lt;/li&gt;
&lt;/ul&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;This distinction immediately narrows the investigation. The following error comparison is useful during an outage:&lt;/p&gt;

&lt;table style=&quot;border-collapse: collapse; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal; width: 100%;&quot;&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th style=&quot;background-color: #e06666; border: 1px solid rgb(153, 153, 153); color: white; padding: 10px; text-align: left;&quot;&gt;Error&lt;/th&gt;
      &lt;th style=&quot;background-color: #e06666; border: 1px solid rgb(153, 153, 153); color: white; padding: 10px; text-align: left;&quot;&gt;What It Normally Indicates&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td style=&quot;border: 1px solid rgb(153, 153, 153); padding: 10px; text-align: left;&quot;&gt;ORA-12154&lt;/td&gt;
      &lt;td style=&quot;border: 1px solid rgb(153, 153, 153); padding: 10px; text-align: left;&quot;&gt;The client could not resolve the supplied connect identifier.&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;border: 1px solid rgb(153, 153, 153); padding: 10px; text-align: left;&quot;&gt;ORA-12541&lt;/td&gt;
      &lt;td style=&quot;border: 1px solid rgb(153, 153, 153); padding: 10px; text-align: left;&quot;&gt;No listener was reachable at the resolved network address.&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;border: 1px solid rgb(153, 153, 153); padding: 10px; text-align: left;&quot;&gt;ORA-12514&lt;/td&gt;
      &lt;td style=&quot;border: 1px solid rgb(153, 153, 153); padding: 10px; text-align: left;&quot;&gt;The listener was reached, but the requested service was unknown.&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;border: 1px solid rgb(153, 153, 153); padding: 10px; text-align: left;&quot;&gt;ORA-12505&lt;/td&gt;
      &lt;td style=&quot;border: 1px solid rgb(153, 153, 153); padding: 10px; text-align: left;&quot;&gt;The requested SID was not known to the listener.&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;border: 1px solid rgb(153, 153, 153); padding: 10px; text-align: left;&quot;&gt;ORA-12516 or ORA-12520&lt;/td&gt;
      &lt;td style=&quot;border: 1px solid rgb(153, 153, 153); padding: 10px; text-align: left;&quot;&gt;The service was known, but no suitable handler was available.&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;border: 1px solid rgb(153, 153, 153); padding: 10px; text-align: left;&quot;&gt;ORA-01017&lt;/td&gt;
      &lt;td style=&quot;border: 1px solid rgb(153, 153, 153); padding: 10px; text-align: left;&quot;&gt;The request reached the database, but authentication failed.&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Restarting the listener for every ORA-12514 can briefly interrupt new connections while leaving the actual problem untouched. It may also remove useful runtime evidence before the diagnosis is complete.&lt;/p&gt;

&lt;blockquote style=&quot;border: none; margin: 0 0 0 40px; padding: 0px;&quot;&gt;&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEh_CErGx_1hGCnu7matbD4m3Fd0FmXSsmWtGk6o9gghfV9n1TTQeNGJ_hz9fTVaz1hVztjMkNmWLjLQpCiNY2DFy7BmQtKOyb3dBa-E6YkAXDNMUACArDJp7umYheDlUIpJc0ipRmepSvuJnaI0AKVz2SH3DhIbHUEbRAMPhCZ4u9ahdFmEBEmzWS05v-Y&quot; style=&quot;clear: left; float: left; margin-bottom: 1em; margin-left: 1em;&quot;&gt;&lt;img alt=&quot;&quot; data-original-height=&quot;950&quot; data-original-width=&quot;1800&quot; height=&quot;467&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEh_CErGx_1hGCnu7matbD4m3Fd0FmXSsmWtGk6o9gghfV9n1TTQeNGJ_hz9fTVaz1hVztjMkNmWLjLQpCiNY2DFy7BmQtKOyb3dBa-E6YkAXDNMUACArDJp7umYheDlUIpJc0ipRmepSvuJnaI0AKVz2SH3DhIbHUEbRAMPhCZ4u9ahdFmEBEmzWS05v-Y=w884-h467&quot; width=&quot;884&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;/h2&gt;&lt;/blockquote&gt;&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;/h2&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;&lt;br /&gt;&lt;/h2&gt;&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;&lt;br /&gt;&lt;/h2&gt;&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;&lt;br /&gt;&lt;/h2&gt;&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;&lt;br /&gt;&lt;/h2&gt;&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;&lt;br /&gt;&lt;/h2&gt;&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;&lt;br /&gt;&lt;/h2&gt;&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;&lt;br /&gt;&lt;/h2&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;&lt;br /&gt;&lt;/h2&gt;&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;&lt;br /&gt;&lt;/h2&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/h2&gt;&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;Start With the Client&#39;s Actual Connect Descriptor&lt;/h2&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Do not begin with &lt;code style=&quot;font-family: courier;&quot;&gt;listener.ora&lt;/code&gt;. Begin with the connection information used by the failing client.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Applications frequently use a different Oracle Home, &lt;code style=&quot;font-family: courier;&quot;&gt;TNS_ADMIN&lt;/code&gt; location, DNS record, SCAN address, JDBC URL, or connection-pool configuration from the DBA workstation. A successful manual connection using another alias does not prove that the application configuration is correct.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Where possible, run the following checks from the affected application host:&lt;/p&gt;

&lt;div style=&quot;background: rgb(40, 42, 54); border-color: gray; border-image: none; border-style: solid; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;&quot;&gt;
&lt;pre style=&quot;line-height: 125%; margin: 0px;&quot;&gt;&lt;span style=&quot;color: #f8f8f2; font-family: courier; font-size: medium; font-weight: normal;&quot;&gt;which sqlplus
sqlplus -V
echo &quot;$TNS_ADMIN&quot;

tnsping PAY_RW

sqlplus -L app_probe@&#39;//db-vip.example.com:1521/pay_rw.example.com&#39;&lt;/span&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;&lt;code style=&quot;font-family: courier;&quot;&gt;tnsping&lt;/code&gt; displays the resolved address and the network configuration files used by the client. It confirms listener reachability, but it does not prove that the database is running or that the requested service can accept a login. An actual SQL*Plus connection is still required.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;For a JDBC Thin client, a service-based URL normally looks like this:&lt;/p&gt;

&lt;div style=&quot;background: rgb(40, 42, 54); border-color: gray; border-image: none; border-style: solid; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;&quot;&gt;
&lt;pre style=&quot;line-height: 125%; margin: 0px;&quot;&gt;&lt;span style=&quot;color: #f8f8f2; font-family: courier; font-size: medium; font-weight: normal;&quot;&gt;jdbc:oracle:thin:@//db-vip.example.com:1521/pay_rw.example.com&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Common application-side causes include:&lt;/p&gt;

&lt;ul style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;
  &lt;li&gt;A PDB service was renamed during migration, but the old JDBC URL remains deployed.&lt;/li&gt;
  &lt;li&gt;One connection pool uses a SID-style URL while another uses a service name.&lt;/li&gt;
  &lt;li&gt;A stale &lt;code style=&quot;font-family: courier;&quot;&gt;tnsnames.ora&lt;/code&gt; file is packaged inside an application container.&lt;/li&gt;
  &lt;li&gt;DNS directs the application to a listener different from the one checked by the DBA.&lt;/li&gt;
  &lt;li&gt;A load-balanced descriptor contains one outdated address.&lt;/li&gt;
  &lt;li&gt;Multiple Oracle Homes read different network configuration directories.&lt;/li&gt;
&lt;/ul&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Before changing anything, record the host, port, protocol, and requested service used by the failed connection.&lt;/p&gt;

&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;&lt;br /&gt;&lt;/h2&gt;&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;Compare Three Sources of Truth&lt;/h2&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;A reliable ORA-12514 investigation compares three different views:&lt;/p&gt;

&lt;ol style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;
  &lt;li&gt;What the client requests.&lt;/li&gt;
  &lt;li&gt;What the listener has registered.&lt;/li&gt;
  &lt;li&gt;What the database or Clusterware is currently offering.&lt;/li&gt;
&lt;/ol&gt;

&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
  &lt;!--Image idea: Triangle with Client Connect Descriptor at the top, Listener Registry - lsnrctl services at the bottom left, and Database State - DBA_SERVICES and V$ACTIVE_SERVICES at the bottom right. Place the requested service name in the centre.--&gt;
&lt;/div&gt;

&lt;h3 style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large;&quot;&gt;Check the Exact Listener&lt;/h3&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Run the commands against the listener handling the failed endpoint:&lt;/p&gt;

&lt;div style=&quot;background: rgb(40, 42, 54); border-color: gray; border-image: none; border-style: solid; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;&quot;&gt;
&lt;pre style=&quot;line-height: 125%; margin: 0px;&quot;&gt;&lt;span style=&quot;color: #f8f8f2; font-family: courier; font-size: medium; font-weight: normal;&quot;&gt;lsnrctl status LISTENER
lsnrctl services LISTENER&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;&lt;code style=&quot;font-family: courier;&quot;&gt;lsnrctl status&lt;/code&gt; confirms endpoints and provides a service summary. &lt;code style=&quot;font-family: courier;&quot;&gt;lsnrctl services&lt;/code&gt; is usually more useful during diagnosis because it displays registered services, instances, and handlers.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Do not assume that the listener is named &lt;code style=&quot;font-family: courier;&quot;&gt;LISTENER&lt;/code&gt;. Verify the listener name, Oracle Home, host, and port. On RAC systems, distinguish between local listeners and SCAN listeners.&lt;/p&gt;

&lt;h3 style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large;&quot;&gt;Check the Database and Service State&lt;/h3&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Connect locally as SYSDBA and compare defined services with services that are active in the instance:&lt;/p&gt;

&lt;div style=&quot;background: rgb(40, 42, 54); border-color: gray; border-image: none; border-style: solid; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;&quot;&gt;
&lt;pre style=&quot;line-height: 125%; margin: 0px;&quot;&gt;&lt;span style=&quot;color: #f8f8f2; font-family: courier; font-size: medium; font-weight: normal;&quot;&gt;&lt;span style=&quot;color: #ff79c6;&quot;&gt;SET&lt;/span&gt; LINESIZE 220
&lt;span style=&quot;color: #ff79c6;&quot;&gt;SET&lt;/span&gt; PAGESIZE 100

&lt;span style=&quot;color: #ff79c6;&quot;&gt;SELECT&lt;/span&gt; instance_name,
status,
database_status &lt;span style=&quot;color: #ff79c6;&quot;&gt;FROM&lt;/span&gt;   v$instance;

&lt;span style=&quot;color: #ff79c6;&quot;&gt;SELECT&lt;/span&gt; name,
db_unique_name,
database_role,
open_mode &lt;span style=&quot;color: #ff79c6;&quot;&gt;FROM&lt;/span&gt;   v$database;

&lt;span style=&quot;color: #ff79c6;&quot;&gt;SELECT&lt;/span&gt; name,
network_name,
pdb &lt;span style=&quot;color: #ff79c6;&quot;&gt;FROM&lt;/span&gt;   dba_services &lt;span style=&quot;color: #ff79c6;&quot;&gt;ORDER BY&lt;/span&gt; name;

&lt;span style=&quot;color: #ff79c6;&quot;&gt;SELECT&lt;/span&gt; name,
network_name,
pdb &lt;span style=&quot;color: #ff79c6;&quot;&gt;FROM&lt;/span&gt;   v$active_services &lt;span style=&quot;color: #ff79c6;&quot;&gt;ORDER BY&lt;/span&gt; name;

&lt;span style=&quot;color: #6272a4;&quot;&gt;-- Run in a multitenant database&lt;/span&gt; &lt;span style=&quot;color: #ff79c6;&quot;&gt;SELECT&lt;/span&gt; name,
open_mode,
restricted &lt;span style=&quot;color: #ff79c6;&quot;&gt;FROM&lt;/span&gt;   v$pdbs &lt;span style=&quot;color: #ff79c6;&quot;&gt;ORDER BY&lt;/span&gt; con_id;&lt;/span&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;&lt;code style=&quot;font-family: courier;&quot;&gt;DBA_SERVICES&lt;/code&gt; shows service definitions, while &lt;code style=&quot;font-family: courier;&quot;&gt;V$ACTIVE_SERVICES&lt;/code&gt; shows services currently active in the instance. The difference between these views is often where the diagnosis becomes clear.&lt;/p&gt;

&lt;table style=&quot;border-collapse: collapse; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal; width: 100%;&quot;&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th style=&quot;background-color: #e06666; border: 1px solid rgb(153, 153, 153); color: white; padding: 10px; text-align: left;&quot;&gt;Observation&lt;/th&gt;
      &lt;th style=&quot;background-color: #e06666; border: 1px solid rgb(153, 153, 153); color: white; padding: 10px; text-align: left;&quot;&gt;Likely Investigation Path&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td style=&quot;border: 1px solid rgb(153, 153, 153); padding: 10px; text-align: left;&quot;&gt;Service missing from &lt;code style=&quot;font-family: courier;&quot;&gt;DBA_SERVICES&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;border: 1px solid rgb(153, 153, 153); padding: 10px; text-align: left;&quot;&gt;Wrong client service name or a missing service definition.&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;border: 1px solid rgb(153, 153, 153); padding: 10px; text-align: left;&quot;&gt;Present in &lt;code style=&quot;font-family: courier;&quot;&gt;DBA_SERVICES&lt;/code&gt;, but absent from &lt;code style=&quot;font-family: courier;&quot;&gt;V$ACTIVE_SERVICES&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;border: 1px solid rgb(153, 153, 153); padding: 10px; text-align: left;&quot;&gt;Service stopped, PDB closed, or Clusterware policy not satisfied.&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;border: 1px solid rgb(153, 153, 153); padding: 10px; text-align: left;&quot;&gt;Active in the database, but absent from &lt;code style=&quot;font-family: courier;&quot;&gt;lsnrctl services&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;border: 1px solid rgb(153, 153, 153); padding: 10px; text-align: left;&quot;&gt;LREG registration problem or incorrect listener target.&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;border: 1px solid rgb(153, 153, 153); padding: 10px; text-align: left;&quot;&gt;Registered with another listener only&lt;/td&gt;
      &lt;td style=&quot;border: 1px solid rgb(153, 153, 153); padding: 10px; text-align: left;&quot;&gt;Wrong host, port, VIP, SCAN address, or listener configuration.&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;border: 1px solid rgb(153, 153, 153); padding: 10px; text-align: left;&quot;&gt;Registered correctly, but the application still fails&lt;/td&gt;
      &lt;td style=&quot;border: 1px solid rgb(153, 153, 153); padding: 10px; text-align: left;&quot;&gt;The application resolves another descriptor or retains stale pool configuration.&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;border: 1px solid rgb(153, 153, 153); padding: 10px; text-align: left;&quot;&gt;Available on only one RAC node&lt;/td&gt;
      &lt;td style=&quot;border: 1px solid rgb(153, 153, 153); padding: 10px; text-align: left;&quot;&gt;Service placement, preferred-instance policy, or remote registration issue.&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;&lt;br /&gt;&lt;/h2&gt;&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;How Dynamic Service Registration Works&lt;/h2&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Modern Oracle releases use the Listener Registration process, LREG, to publish database services. Older explanations often attribute registration to PMON, but LREG is the relevant background process in current releases.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;By default, LREG attempts to register with a local listener on TCP port 1521. &lt;code style=&quot;font-family: courier;&quot;&gt;LOCAL_LISTENER&lt;/code&gt; identifies non-default local endpoints, while &lt;code style=&quot;font-family: courier;&quot;&gt;REMOTE_LISTENER&lt;/code&gt; is commonly used for remote endpoints such as RAC SCAN listeners. Dynamic registration normally does not require a static database entry in &lt;code style=&quot;font-family: courier;&quot;&gt;listener.ora&lt;/code&gt;.&lt;/p&gt;

&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
  &lt;!--Image idea: Database Instance -&gt; LREG -&gt; Local Listener -&gt; Client Connections. Add a branch from LREG to Remote or SCAN Listener. Label the paths LOCAL_LISTENER and REMOTE_LISTENER. Add the warning: Registration does not create or start a service.--&gt;
&lt;/div&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Check the current registration-related parameters:&lt;/p&gt;

&lt;div style=&quot;background: rgb(40, 42, 54); border-color: gray; border-image: none; border-style: solid; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;&quot;&gt;
&lt;pre style=&quot;line-height: 125%; margin: 0px;&quot;&gt;&lt;span style=&quot;color: #f8f8f2; font-family: courier; font-size: medium; font-weight: normal;&quot;&gt;&lt;span style=&quot;color: #ff79c6;&quot;&gt;SHOW PARAMETER&lt;/span&gt; local_listener
&lt;span style=&quot;color: #ff79c6;&quot;&gt;SHOW PARAMETER&lt;/span&gt; remote_listener
&lt;span style=&quot;color: #ff79c6;&quot;&gt;SHOW PARAMETER&lt;/span&gt; service_names

&lt;span style=&quot;color: #ff79c6;&quot;&gt;SELECT&lt;/span&gt; name,
value &lt;span style=&quot;color: #ff79c6;&quot;&gt;FROM&lt;/span&gt;   v$parameter &lt;span style=&quot;color: #ff79c6;&quot;&gt;WHERE&lt;/span&gt;  name &lt;span style=&quot;color: #ff79c6;&quot;&gt;IN&lt;/span&gt; (&#39;local_listener&#39;,
&#39;remote_listener&#39;,
&#39;service_names&#39;);&lt;/span&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;If a single-instance database uses a listener on a non-default port, an explicit local listener address may be required:&lt;/p&gt;

&lt;div style=&quot;background: rgb(40, 42, 54); border-color: gray; border-image: none; border-style: solid; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;&quot;&gt;
&lt;pre style=&quot;line-height: 125%; margin: 0px;&quot;&gt;&lt;span style=&quot;color: #f8f8f2; font-family: courier; font-size: medium; font-weight: normal;&quot;&gt;&lt;span style=&quot;color: #ff79c6;&quot;&gt;ALTER SYSTEM SET&lt;/span&gt; local_listener =
  &#39;(ADDRESS=(PROTOCOL=TCP)
            (HOST=db-vip.example.com)
            (PORT=1522))&#39;
  &lt;span style=&quot;color: #ff79c6;&quot;&gt;SCOPE&lt;/span&gt;=BOTH;

&lt;span style=&quot;color: #ff79c6;&quot;&gt;ALTER SYSTEM REGISTER&lt;/span&gt;;&lt;/span&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Confirm the result afterward with &lt;code style=&quot;font-family: courier;&quot;&gt;lsnrctl services&lt;/code&gt;. Do not copy this parameter change blindly into RAC. Clusterware normally manages local listener and SCAN-related configuration, and manual changes can conflict with the cluster configuration.&lt;/p&gt;

&lt;h3 style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large;&quot;&gt;What ALTER SYSTEM REGISTER Does Not Do&lt;/h3&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;&lt;code style=&quot;font-family: courier;&quot;&gt;ALTER SYSTEM REGISTER&lt;/code&gt; asks LREG to publish the database&#39;s currently active services immediately. It does not:&lt;/p&gt;

&lt;ul style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;
  &lt;li&gt;Create a missing service.&lt;/li&gt;
  &lt;li&gt;Start a stopped service.&lt;/li&gt;
  &lt;li&gt;Open a PDB.&lt;/li&gt;
  &lt;li&gt;Correct the client&#39;s service name.&lt;/li&gt;
  &lt;li&gt;Change a Data Guard service role.&lt;/li&gt;
  &lt;li&gt;Override a disabled Clusterware resource.&lt;/li&gt;
  &lt;li&gt;Repair an unreachable listener address.&lt;/li&gt;
&lt;/ul&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;If the service is absent from &lt;code style=&quot;font-family: courier;&quot;&gt;V$ACTIVE_SERVICES&lt;/code&gt;, repeatedly forcing registration will not solve the underlying problem.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Starting with Oracle Database 19c, customer use of the &lt;code style=&quot;font-family: courier;&quot;&gt;SERVICE_NAMES&lt;/code&gt; initialization parameter is deprecated. Application services should be managed through tools such as SRVCTL, GDSCTL, or &lt;code style=&quot;font-family: courier;&quot;&gt;DBMS_SERVICE&lt;/code&gt;. In high-availability environments, &lt;code style=&quot;font-family: courier;&quot;&gt;SERVICE_NAMES&lt;/code&gt; should not be treated as the service-management mechanism.&lt;/p&gt;

&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;&lt;br /&gt;&lt;/h2&gt;&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;SERVICE_NAME, SID, and Database Name Are Different&lt;/h2&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Many ORA-12514 incidents begin with the assumption that the database name, instance SID, and application service must be identical. They represent different layers of the database architecture.&lt;/p&gt;

&lt;table style=&quot;border-collapse: collapse; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal; width: 100%;&quot;&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th style=&quot;background-color: #e06666; border: 1px solid rgb(153, 153, 153); color: white; padding: 10px; text-align: left;&quot;&gt;Name&lt;/th&gt;
      &lt;th style=&quot;background-color: #e06666; border: 1px solid rgb(153, 153, 153); color: white; padding: 10px; text-align: left;&quot;&gt;Purpose&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td style=&quot;border: 1px solid rgb(153, 153, 153); padding: 10px; text-align: left;&quot;&gt;&lt;code style=&quot;font-family: courier;&quot;&gt;SERVICE_NAME&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;border: 1px solid rgb(153, 153, 153); padding: 10px; text-align: left;&quot;&gt;Logical workload endpoint used by clients.&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;border: 1px solid rgb(153, 153, 153); padding: 10px; text-align: left;&quot;&gt;&lt;code style=&quot;font-family: courier;&quot;&gt;SID&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;border: 1px solid rgb(153, 153, 153); padding: 10px; text-align: left;&quot;&gt;Identifier for one Oracle database instance.&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;border: 1px solid rgb(153, 153, 153); padding: 10px; text-align: left;&quot;&gt;&lt;code style=&quot;font-family: courier;&quot;&gt;DB_NAME&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;border: 1px solid rgb(153, 153, 153); padding: 10px; text-align: left;&quot;&gt;Database identity recorded in the control file.&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;border: 1px solid rgb(153, 153, 153); padding: 10px; text-align: left;&quot;&gt;&lt;code style=&quot;font-family: courier;&quot;&gt;DB_UNIQUE_NAME&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;border: 1px solid rgb(153, 153, 153); padding: 10px; text-align: left;&quot;&gt;Unique database identity used in configurations such as Data Guard.&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;border: 1px solid rgb(153, 153, 153); padding: 10px; text-align: left;&quot;&gt;PDB name&lt;/td&gt;
      &lt;td style=&quot;border: 1px solid rgb(153, 153, 153); padding: 10px; text-align: left;&quot;&gt;Name of a pluggable container, which is not necessarily the preferred application service.&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;A service can run across several RAC instances, relocate during maintenance, or start only when a Data Guard database has a particular role. A SID cannot provide that abstraction.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;A good service name should describe workload intent. For example:&lt;/p&gt;

&lt;ul style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;
  &lt;li&gt;&lt;code style=&quot;font-family: courier;&quot;&gt;orders_rw.example.com&lt;/code&gt; for primary read-write traffic.&lt;/li&gt;
  &lt;li&gt;&lt;code style=&quot;font-family: courier;&quot;&gt;orders_ro.example.com&lt;/code&gt; for reporting on an Active Data Guard standby.&lt;/li&gt;
  &lt;li&gt;&lt;code style=&quot;font-family: courier;&quot;&gt;batch.example.com&lt;/code&gt; for scheduled processing with separate placement rules.&lt;/li&gt;
&lt;/ul&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Using one generic service for every workload makes draining, placement, failover, load balancing, and maintenance considerably harder.&lt;/p&gt;

&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
  &lt;!--Image idea: Split diagram. Left side shows Application Service routing to RAC Instance 1, RAC Instance 2, and the new primary after switchover. Right side shows SID routing to one database instance. Footer: Use services for application connectivity and HA.--&gt;
&lt;/div&gt;

&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;&lt;br /&gt;&lt;/h2&gt;&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;Multitenant Problems: The CDB Is Open but the PDB Is Not&lt;/h2&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;One of the easiest ways to misdiagnose ORA-12514 is to check only &lt;code style=&quot;font-family: courier;&quot;&gt;V$DATABASE.OPEN_MODE&lt;/code&gt;. The CDB may be open while the target PDB remains mounted. A service associated with that PDB may therefore be unavailable even though the instance appears healthy.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;For a routine single-instance environment, check the PDB and its active services:&lt;/p&gt;

&lt;div style=&quot;background: rgb(40, 42, 54); border-color: gray; border-image: none; border-style: solid; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;&quot;&gt;
&lt;pre style=&quot;line-height: 125%; margin: 0px;&quot;&gt;&lt;span style=&quot;color: #f8f8f2; font-family: courier; font-size: medium; font-weight: normal;&quot;&gt;&lt;span style=&quot;color: #ff79c6;&quot;&gt;SHOW PDBS&lt;/span&gt;

&lt;span style=&quot;color: #ff79c6;&quot;&gt;ALTER PLUGGABLE DATABASE&lt;/span&gt; orders_pdb &lt;span style=&quot;color: #ff79c6;&quot;&gt;OPEN&lt;/span&gt;;

&lt;span style=&quot;color: #6272a4;&quot;&gt;-- Consider this for restart persistence in a suitable non-Data Guard design&lt;/span&gt; &lt;span style=&quot;color: #ff79c6;&quot;&gt;ALTER PLUGGABLE DATABASE&lt;/span&gt; orders_pdb &lt;span style=&quot;color: #ff79c6;&quot;&gt;SAVE STATE&lt;/span&gt;;

&lt;span style=&quot;color: #ff79c6;&quot;&gt;SELECT&lt;/span&gt; name,
network_name,
pdb &lt;span style=&quot;color: #ff79c6;&quot;&gt;FROM&lt;/span&gt;   v$active_services &lt;span style=&quot;color: #ff79c6;&quot;&gt;WHERE&lt;/span&gt;  pdb = &#39;ORDERS_PDB&#39;;&lt;/span&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Saved PDB state is useful in straightforward deployments, but it should not replace role-aware service management in Data Guard. For high-availability applications, use a named application service associated with the correct PDB and database role.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Avoid relying on an automatically created PDB default service for an HA application. A separately managed application service provides proper control over placement, database role, failover behavior, and workload management.&lt;/p&gt;

&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
  &lt;!--Image idea: Application -&gt; Listener -&gt; orders_rw.example.com -&gt; CDB -&gt; ORDERS_PDB. Show OPEN - Service active in green and MOUNTED - Service unavailable in red. Add note: CDB OPEN does not prove the target PDB is open.--&gt;
&lt;/div&gt;

&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;&lt;br /&gt;&lt;/h2&gt;&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;RAC and Data Guard Require Clusterware-Level Checks&lt;/h2&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;In RAC, Oracle Restart, and Data Guard environments, an active instance does not automatically mean that an application service should run there. Clusterware decides service placement based on configuration, management policy, preferred instances, PDB association, and database role.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Use the Grid Infrastructure version of SRVCTL and check both configuration and runtime state:&lt;/p&gt;

&lt;div style=&quot;background: rgb(40, 42, 54); border-color: gray; border-image: none; border-style: solid; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;&quot;&gt;
&lt;pre style=&quot;line-height: 125%; margin: 0px;&quot;&gt;&lt;span style=&quot;color: #f8f8f2; font-family: courier; font-size: medium; font-weight: normal;&quot;&gt;srvctl status database -db PROD_A -verbose

srvctl config service -db PROD_A 
-service orders_rw -verbose

srvctl status service -db PROD_A 
-service orders_rw -verbose

srvctl status listener -listener LISTENER -verbose
srvctl status scan_listener -verbose&lt;/span&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;The service configuration should answer the following questions:&lt;/p&gt;

&lt;ul style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;
  &lt;li&gt;Is the service enabled?&lt;/li&gt;
  &lt;li&gt;Is its management policy automatic?&lt;/li&gt;
  &lt;li&gt;Which PDB owns the service?&lt;/li&gt;
  &lt;li&gt;Which RAC instances or server pool can run it?&lt;/li&gt;
  &lt;li&gt;Is it configured for the &lt;code style=&quot;font-family: courier;&quot;&gt;PRIMARY&lt;/code&gt; role, &lt;code style=&quot;font-family: courier;&quot;&gt;PHYSICAL_STANDBY&lt;/code&gt; role, or both?&lt;/li&gt;
  &lt;li&gt;Is the service currently running?&lt;/li&gt;
&lt;/ul&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;For Data Guard, verify the database role and broker configuration as well:&lt;/p&gt;

&lt;div style=&quot;background: rgb(40, 42, 54); border-color: gray; border-image: none; border-style: solid; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;&quot;&gt;
&lt;pre style=&quot;line-height: 125%; margin: 0px;&quot;&gt;&lt;span style=&quot;color: #f8f8f2; font-family: courier; font-size: medium; font-weight: normal;&quot;&gt;dgmgrl /

DGMGRL&amp;gt; SHOW CONFIGURATION VERBOSE;
DGMGRL&amp;gt; SHOW DATABASE VERBOSE &#39;PROD_A&#39;;
DGMGRL&amp;gt; VALIDATE DATABASE VERBOSE &#39;PROD_A&#39;;&lt;/span&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;A read-write application service should normally be configured with the &lt;code style=&quot;font-family: courier;&quot;&gt;PRIMARY&lt;/code&gt; role on both Data Guard sites. A reporting service can be configured separately for the &lt;code style=&quot;font-family: courier;&quot;&gt;PHYSICAL_STANDBY&lt;/code&gt; role.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;A role-related service correction might look like this:&lt;/p&gt;

&lt;div style=&quot;background: rgb(40, 42, 54); border-color: gray; border-image: none; border-style: solid; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;&quot;&gt;
&lt;pre style=&quot;line-height: 125%; margin: 0px;&quot;&gt;&lt;span style=&quot;color: #f8f8f2; font-family: courier; font-size: medium; font-weight: normal;&quot;&gt;srvctl modify service -db PROD_B \
  -service orders_rw \
  -role PRIMARY \
  -policy AUTOMATIC \
  -pdb ORDERS_PDB

srvctl start service -db PROD_B -service orders_rw&lt;/span&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Service changes can affect placement and existing sessions. Confirm the syntax supported by the installed Grid Infrastructure release and apply the change through the normal production change process.&lt;/p&gt;

&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
  &lt;!--Image idea: Two Data Guard sites. Site A shows Primary Database -&gt; orders_rw Service -&gt; Application. Site B shows Physical Standby -&gt; orders_ro Service -&gt; Reporting. Add a switchover arrow and show orders_rw moving to the new primary. Label services by PRIMARY and PHYSICAL_STANDBY roles.--&gt;
&lt;/div&gt;

&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;&lt;br /&gt;&lt;/h2&gt;&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;Performance and Monitoring Considerations&lt;/h2&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;ORA-12514 itself is generally returned quickly and is not usually a database performance problem. The secondary effect can still be serious.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;An application pool may retry failed connections without sufficient delay. Hundreds of application processes then create a connection storm as soon as the service returns. Listener logs grow rapidly, monitoring floods the support channel, and the restored database receives a sudden authentication and session-creation spike.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Production monitoring should therefore go beyond checking whether the listener process is running:&lt;/p&gt;

&lt;ul style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;
  &lt;li&gt;Confirm that each required application service is registered.&lt;/li&gt;
  &lt;li&gt;Run a controlled synthetic login through the application endpoint.&lt;/li&gt;
  &lt;li&gt;Check service availability after database and listener restarts.&lt;/li&gt;
  &lt;li&gt;Validate every RAC or SCAN path used by the application.&lt;/li&gt;
  &lt;li&gt;Test application services after Data Guard switchovers, not only before them.&lt;/li&gt;
  &lt;li&gt;Alert when a required service remains absent beyond the expected registration interval.&lt;/li&gt;
  &lt;li&gt;Configure application retries with delay, backoff, and sensible limits.&lt;/li&gt;
&lt;/ul&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;When an ORA-12514 message contains a &lt;code style=&quot;font-family: courier;&quot;&gt;CONNECTION_ID&lt;/code&gt;, preserve it. The identifier can help correlate the failed request with Oracle listener diagnostics. The &lt;code style=&quot;font-family: courier;&quot;&gt;lsnrctl status&lt;/code&gt; output also reports the active listener log location.&lt;/p&gt;

&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;&lt;br /&gt;&lt;/h2&gt;&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;Oracle Versus PostgreSQL Connection Routing&lt;/h2&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;PostgreSQL does not have an Oracle-style listener service registry. High-availability routing is normally provided through a proxy, virtual IP, DNS record, operator, or client connection string.&lt;/p&gt;

&lt;table style=&quot;border-collapse: collapse; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal; width: 100%;&quot;&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th style=&quot;background-color: #e06666; border: 1px solid rgb(153, 153, 153); color: white; padding: 10px; text-align: left;&quot;&gt;Oracle&lt;/th&gt;
      &lt;th style=&quot;background-color: #e06666; border: 1px solid rgb(153, 153, 153); color: white; padding: 10px; text-align: left;&quot;&gt;PostgreSQL&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td style=&quot;border: 1px solid rgb(153, 153, 153); padding: 10px; text-align: left;&quot;&gt;The client requests a logical database service.&lt;/td&gt;
      &lt;td style=&quot;border: 1px solid rgb(153, 153, 153); padding: 10px; text-align: left;&quot;&gt;The client specifies a host, port, and database.&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;border: 1px solid rgb(153, 153, 153); padding: 10px; text-align: left;&quot;&gt;LREG registers services with listeners.&lt;/td&gt;
      &lt;td style=&quot;border: 1px solid rgb(153, 153, 153); padding: 10px; text-align: left;&quot;&gt;The PostgreSQL server process accepts connections directly.&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;border: 1px solid rgb(153, 153, 153); padding: 10px; text-align: left;&quot;&gt;Services can map to PDBs, RAC instances, and database roles.&lt;/td&gt;
      &lt;td style=&quot;border: 1px solid rgb(153, 153, 153); padding: 10px; text-align: left;&quot;&gt;External HA components normally route clients to the correct server role.&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;border: 1px solid rgb(153, 153, 153); padding: 10px; text-align: left;&quot;&gt;An unknown service can return ORA-12514.&lt;/td&gt;
      &lt;td style=&quot;border: 1px solid rgb(153, 153, 153); padding: 10px; text-align: left;&quot;&gt;A missing database normally returns a PostgreSQL &lt;code style=&quot;font-family: courier;&quot;&gt;FATAL&lt;/code&gt; error.&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;border: 1px solid rgb(153, 153, 153); padding: 10px; text-align: left;&quot;&gt;&lt;code style=&quot;font-family: courier;&quot;&gt;tnsping&lt;/code&gt; checks listener reachability.&lt;/td&gt;
      &lt;td style=&quot;border: 1px solid rgb(153, 153, 153); padding: 10px; text-align: left;&quot;&gt;&lt;code style=&quot;font-family: courier;&quot;&gt;pg_isready&lt;/code&gt; checks PostgreSQL server status.&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;border: 1px solid rgb(153, 153, 153); padding: 10px; text-align: left;&quot;&gt;SQL*Plus validates an actual service login.&lt;/td&gt;
      &lt;td style=&quot;border: 1px solid rgb(153, 153, 153); padding: 10px; text-align: left;&quot;&gt;&lt;code style=&quot;font-family: courier;&quot;&gt;psql&lt;/code&gt; validates an actual database login.&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;The testing principle is similar on both platforms. &lt;code style=&quot;font-family: courier;&quot;&gt;pg_isready&lt;/code&gt; can report server status without proving that a specific user can connect to a valid database. It should not replace an actual &lt;code style=&quot;font-family: courier;&quot;&gt;psql&lt;/code&gt; connection test.&lt;/p&gt;

&lt;div style=&quot;background: rgb(40, 42, 54); border-color: gray; border-image: none; border-style: solid; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;&quot;&gt;
&lt;pre style=&quot;line-height: 125%; margin: 0px;&quot;&gt;&lt;span style=&quot;color: #f8f8f2; font-family: courier; font-size: medium; font-weight: normal;&quot;&gt;pg_isready -h pg-vip.example.com -p 5432

psql &quot;host=pg-vip.example.com port=5432 dbname=orders 
user=app_probe connect_timeout=5&quot;&lt;/span&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;For both platforms, an endpoint health check is weaker than a real application-path login test.&lt;/p&gt;

&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;&lt;br /&gt;&lt;/h2&gt;&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;Quick Takeaways&lt;/h2&gt;

&lt;ul style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;
  &lt;li&gt;ORA-12514 normally proves that the client reached a listener.&lt;/li&gt;
  &lt;li&gt;Check the application&#39;s resolved service name, host, and port first.&lt;/li&gt;
  &lt;li&gt;TNSPING success does not prove that the database service is available.&lt;/li&gt;
  &lt;li&gt;Compare &lt;code style=&quot;font-family: courier;&quot;&gt;DBA_SERVICES&lt;/code&gt;, &lt;code style=&quot;font-family: courier;&quot;&gt;V$ACTIVE_SERVICES&lt;/code&gt;, and &lt;code style=&quot;font-family: courier;&quot;&gt;lsnrctl services&lt;/code&gt;.&lt;/li&gt;
  &lt;li&gt;&lt;code style=&quot;font-family: courier;&quot;&gt;ALTER SYSTEM REGISTER&lt;/code&gt; publishes active services; it does not start them.&lt;/li&gt;
  &lt;li&gt;In RAC and Data Guard, use SRVCTL as the service-management source of truth.&lt;/li&gt;
  &lt;li&gt;Monitor actual application service logins, not only listener availability.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;&lt;br /&gt;&lt;/h2&gt;&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;Lessons From the Field: DBA Takeaways&lt;/h2&gt;

&lt;h3 style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large;&quot;&gt;The Wrong Listener Is Checked Surprisingly Often&lt;/h3&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Multi-home servers, custom ports, SCAN listeners, VIPs, and stale DNS records can make a healthy listener irrelevant to the failed application path. Always reproduce the connection from the same network path used by the application.&lt;/p&gt;

&lt;h3 style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large;&quot;&gt;Restarts Can Hide Weak Service Design&lt;/h3&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;If every incident is closed after restarting the listener or database, delayed registration, incorrect role policies, and closed PDBs remain in place for the next maintenance window.&lt;/p&gt;

&lt;h3 style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large;&quot;&gt;Application Retries Need Control&lt;/h3&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;A missing service can become a connection storm when thousands of pool retries arrive after recovery. Retry intervals and backoff settings should be reviewed as part of the database service design.&lt;/p&gt;

&lt;h3 style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large;&quot;&gt;Default Services Are Poor HA Contracts&lt;/h3&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Define application services according to workload and database role instead of exposing the raw database or PDB identity directly.&lt;/p&gt;

&lt;h3 style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large;&quot;&gt;Data Guard Testing Must Include Services&lt;/h3&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;A successful broker switchover does not prove that the application service started on the new primary. The runbook should include service checks and a real application connection test.&lt;/p&gt;

&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;&lt;br /&gt;&lt;/h2&gt;&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;Mini Case Study: Service Missing After Switchover&lt;/h2&gt;

&lt;h3 style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large;&quot;&gt;Problem&lt;/h3&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;After a planned Data Guard switchover, the new primary opened successfully and the broker reported a healthy configuration. The SCAN endpoint was reachable, but the application received ORA-12514 for &lt;code style=&quot;font-family: courier;&quot;&gt;orders_rw&lt;/code&gt;.&lt;/p&gt;

&lt;h3 style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large;&quot;&gt;Investigation&lt;/h3&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;&lt;code style=&quot;font-family: courier;&quot;&gt;lsnrctl services&lt;/code&gt; confirmed that &lt;code style=&quot;font-family: courier;&quot;&gt;orders_rw&lt;/code&gt; was missing. Running &lt;code style=&quot;font-family: courier;&quot;&gt;ALTER SYSTEM REGISTER&lt;/code&gt; made no difference.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;&lt;code style=&quot;font-family: courier;&quot;&gt;DBA_SERVICES&lt;/code&gt; showed that the service existed, but it was absent from &lt;code style=&quot;font-family: courier;&quot;&gt;V$ACTIVE_SERVICES&lt;/code&gt;. The decisive check was:&lt;/p&gt;

&lt;div style=&quot;background: rgb(40, 42, 54); border-color: gray; border-image: none; border-style: solid; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;&quot;&gt;
&lt;pre style=&quot;line-height: 125%; margin: 0px;&quot;&gt;&lt;span style=&quot;color: #f8f8f2; font-family: courier; font-size: medium; font-weight: normal;&quot;&gt;srvctl config service -db PROD_B \
  -service orders_rw -verbose&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;The service on the second site had been configured with the &lt;code style=&quot;font-family: courier;&quot;&gt;PHYSICAL_STANDBY&lt;/code&gt; role during an earlier build. Clusterware therefore did exactly what its configuration required and did not start the service when that database became primary.&lt;/p&gt;

&lt;h3 style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large;&quot;&gt;Root Cause&lt;/h3&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;The service definition was inconsistent between the two Data Guard sites. Database switchover had been tested, but application service relocation had not.&lt;/p&gt;

&lt;h3 style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large;&quot;&gt;Fix&lt;/h3&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;The service was changed to the &lt;code style=&quot;font-family: courier;&quot;&gt;PRIMARY&lt;/code&gt; role, associated with the correct PDB, enabled with an automatic management policy, and started through SRVCTL. The service then appeared in the listener registry and the application connection succeeded.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;The permanent remediation was to add service-role validation and an application login test to the switchover runbook.&lt;/p&gt;

&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;&lt;br /&gt;&lt;/h2&gt;&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;Frequently Asked Questions&lt;/h2&gt;

&lt;h3 style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large;&quot;&gt;1. Why does TNSPING succeed while SQL*Plus returns ORA-12514?&lt;/h3&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;TNSPING proves that the resolved listener can be reached. It does not establish a database session or confirm that the requested service is registered. Check &lt;code style=&quot;font-family: courier;&quot;&gt;lsnrctl services&lt;/code&gt; and perform an actual SQL*Plus connection.&lt;/p&gt;

&lt;h3 style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large;&quot;&gt;2. Will Restarting the Listener Fix ORA-12514?&lt;/h3&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;It may appear to help when registration is temporarily delayed, but it is rarely the correct first action. Verify the service name, active database services, PDB state, and registration targets before restarting anything.&lt;/p&gt;

&lt;h3 style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large;&quot;&gt;3. When Should I Run ALTER SYSTEM REGISTER?&lt;/h3&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Use it when the required service is active in the database and the listener endpoint is correct, but the listener has not yet received the registration. It is particularly useful after starting or reconfiguring a listener.&lt;/p&gt;

&lt;h3 style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large;&quot;&gt;4. Why Can ORA-12514 Occur After a PDB Restart?&lt;/h3&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;The CDB may be open while the target PDB remains mounted, or the PDB-associated application service may not have restarted. Check &lt;code style=&quot;font-family: courier;&quot;&gt;V$PDBS&lt;/code&gt;, &lt;code style=&quot;font-family: courier;&quot;&gt;V$ACTIVE_SERVICES&lt;/code&gt;, and the relevant SRVCTL service state.&lt;/p&gt;

&lt;h3 style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large;&quot;&gt;5. Can ORA-12514 Affect Performance?&lt;/h3&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;The error itself is normally returned quickly. Poorly configured application retries can still cause connection storms, rapid listener-log growth, and a session-creation spike when the service becomes available again.&lt;/p&gt;

&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;&lt;br /&gt;&lt;/h2&gt;&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;Conclusion&lt;/h2&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;ORA-12514 becomes easier to diagnose once it is treated as a failed service mapping rather than a vague Oracle Net problem. The client reached a listener. The DBA&#39;s task is to identify the service it requested, confirm whether that exact listener knows the service, and determine why the database or Clusterware is not offering it.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;The most reliable workflow is consistent: capture the resolved connection descriptor, run &lt;code style=&quot;font-family: courier;&quot;&gt;lsnrctl services&lt;/code&gt; against the correct listener, compare &lt;code style=&quot;font-family: courier;&quot;&gt;DBA_SERVICES&lt;/code&gt; with &lt;code style=&quot;font-family: courier;&quot;&gt;V$ACTIVE_SERVICES&lt;/code&gt;, and verify the instance, PDB, and Data Guard role. &lt;code style=&quot;font-family: courier;&quot;&gt;ALTER SYSTEM REGISTER&lt;/code&gt; is useful when LREG has an active service to publish. It cannot create a service, open a PDB, correct a stale client alias, or override a Clusterware role policy.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Modern Oracle environments need disciplined service management. Use named application services, manage RAC and Oracle Restart services through SRVCTL, associate PDB services explicitly, and configure Data Guard services by role. Do not use the PDB default service as the foundation of a production failover design.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Review one critical application&#39;s connection path. Record its host or SCAN address, port, service, PDB, preferred placement, Data Guard role, and monitoring check. Then test it after a restart and during the next planned role transition. A service that works only during normal operations is not yet production-ready.&lt;/p&gt;

&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;&lt;br /&gt;&lt;/h2&gt;&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;Official Oracle References&lt;/h2&gt;

&lt;ol style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;
  &lt;li&gt;&lt;a href=&quot;https://docs.oracle.com/en/error-help/db/ora-12514/&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;Oracle Error Help: ORA-12514&lt;/a&gt; - Official explanation, causes, and recommended actions for an unknown or unregistered service.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://docs.oracle.com/en/database/oracle/oracle-database/19/netag/configuring-and-administering-oracle-net-listener.html&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;Configuring and Administering Oracle Net Listener&lt;/a&gt; - Covers LREG, dynamic service registration, &lt;code style=&quot;font-family: courier;&quot;&gt;LOCAL_LISTENER&lt;/code&gt;, &lt;code style=&quot;font-family: courier;&quot;&gt;REMOTE_LISTENER&lt;/code&gt;, and listener administration.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://docs.oracle.com/en/database/oracle/oracle-database/19/racad/server-control-utility-reference.html&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;Oracle Database 19c SRVCTL Reference&lt;/a&gt; - Reference for managing RAC, Oracle Restart, PDB, and role-based application services.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;&lt;span style=&quot;font-size: large; font-weight: normal;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/h2&gt;&lt;div style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; text-align: left;&quot;&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;Have you encountered ORA-12514 after a PDB restart, RAC service relocation, or Data Guard switchover? Share the symptom and the check that exposed the real cause. Production patterns are often more useful than another listener restart checklist.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
</description><link>https://oracle-dba-help.blogspot.com/2026/10/ora-12514-diagnose-service-not-listener.html</link><author>noreply@blogger.com (Nikhil Kotak)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/a/AVvXsEh_CErGx_1hGCnu7matbD4m3Fd0FmXSsmWtGk6o9gghfV9n1TTQeNGJ_hz9fTVaz1hVztjMkNmWLjLQpCiNY2DFy7BmQtKOyb3dBa-E6YkAXDNMUACArDJp7umYheDlUIpJc0ipRmepSvuJnaI0AKVz2SH3DhIbHUEbRAMPhCZ4u9ahdFmEBEmzWS05v-Y=s72-w884-h467-c" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1375587508974804970.post-4083240221917091627</guid><pubDate>Sat, 17 Oct 2026 03:23:00 +0000</pubDate><atom:updated>2026-10-17T11:23:00.118+08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Must Read</category><title>Oracle DBA in 2030: What Will the Role Look Like?</title><description>&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;A production database alert arrives at 2:00 a.m. The monitoring platform detects increased commit latency, correlates it with storage response time and suggests several corrective actions. That is useful automation. The difficult part begins when someone must decide whether to wait, change the workload, fail over the database or accept the risk of an emergency configuration change.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;This is why I do not expect AI to eliminate the Oracle DBA role by 2030. It will, however, remove a significant amount of repetitive administration. The DBA who only performs standard checks manually may struggle. The DBA who understands Oracle internals, automates routine work and makes sound production decisions will remain valuable.&lt;/p&gt;

&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;&lt;br /&gt;&lt;/h2&gt;&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;Oracle Automation Is Not New&lt;/h2&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Oracle databases have provided automated diagnostics and recommendations for years. AWR, ADDM, SQL Tuning Advisor, Automatic Workload Repository baselines and automatic memory management already reduce the amount of manual analysis required. AutoUpgrade, Fleet Patching and Provisioning, Enterprise Manager and cloud-managed database services continue the same direction.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;AI extends this capability by processing more operational data, identifying patterns and presenting possible causes more quickly. It may summarise an incident, compare execution plans, identify unusual workload behaviour or generate a first version of a remediation script.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;The output still needs validation. Oracle recommendations are based on the information available to the tool. They may not include application release activity, business priorities, licensing restrictions, downstream dependencies or the recovery limitations of a particular environment.&lt;/p&gt;

&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;&lt;br /&gt;&lt;/h2&gt;&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;The Work Most Likely to Change&lt;/h2&gt;

&lt;table style=&quot;border-collapse: collapse; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal; width: 100%;&quot;&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th style=&quot;background-color: #e06666; border: 1px solid rgb(153, 153, 153); color: white; padding: 10px; text-align: left;&quot;&gt;Work Area&lt;/th&gt;
      &lt;th style=&quot;background-color: #e06666; border: 1px solid rgb(153, 153, 153); color: white; padding: 10px; text-align: left;&quot;&gt;Likely Direction&lt;/th&gt;
      &lt;th style=&quot;background-color: #e06666; border: 1px solid rgb(153, 153, 153); color: white; padding: 10px; text-align: left;&quot;&gt;DBA Responsibility&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td style=&quot;border: 1px solid rgb(153, 153, 153); padding: 10px; text-align: left;&quot;&gt;Health checks and routine reporting&lt;/td&gt;
      &lt;td style=&quot;border: 1px solid rgb(153, 153, 153); padding: 10px; text-align: left;&quot;&gt;Largely automated&lt;/td&gt;
      &lt;td style=&quot;border: 1px solid rgb(153, 153, 153); padding: 10px; text-align: left;&quot;&gt;Define thresholds, validate exceptions and improve coverage&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;border: 1px solid rgb(153, 153, 153); padding: 10px; text-align: left;&quot;&gt;SQL performance analysis&lt;/td&gt;
      &lt;td style=&quot;border: 1px solid rgb(153, 153, 153); padding: 10px; text-align: left;&quot;&gt;AI-assisted diagnosis and recommendations&lt;/td&gt;
      &lt;td style=&quot;border: 1px solid rgb(153, 153, 153); padding: 10px; text-align: left;&quot;&gt;Assess workload-wide impact before implementation&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;border: 1px solid rgb(153, 153, 153); padding: 10px; text-align: left;&quot;&gt;Backup and recovery validation&lt;/td&gt;
      &lt;td style=&quot;border: 1px solid rgb(153, 153, 153); padding: 10px; text-align: left;&quot;&gt;Automated checks and anomaly detection&lt;/td&gt;
      &lt;td style=&quot;border: 1px solid rgb(153, 153, 153); padding: 10px; text-align: left;&quot;&gt;Prove recoverability through restore and recovery testing&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;border: 1px solid rgb(153, 153, 153); padding: 10px; text-align: left;&quot;&gt;Patching and provisioning&lt;/td&gt;
      &lt;td style=&quot;border: 1px solid rgb(153, 153, 153); padding: 10px; text-align: left;&quot;&gt;Policy-driven orchestration&lt;/td&gt;
      &lt;td style=&quot;border: 1px solid rgb(153, 153, 153); padding: 10px; text-align: left;&quot;&gt;Control compatibility, rollback and operational risk&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;border: 1px solid rgb(153, 153, 153); padding: 10px; text-align: left;&quot;&gt;Outage and disaster recovery decisions&lt;/td&gt;
      &lt;td style=&quot;border: 1px solid rgb(153, 153, 153); padding: 10px; text-align: left;&quot;&gt;AI-supported but human-led&lt;/td&gt;
      &lt;td style=&quot;border: 1px solid rgb(153, 153, 153); padding: 10px; text-align: left;&quot;&gt;Own the decision, coordination and business impact&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;&lt;br /&gt;&lt;/h2&gt;&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;Where Production Experience Still Matters&lt;/h2&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Consider a Data Guard environment where transport lag suddenly increases. An AI-assisted platform may identify network latency, an archive destination error or heavy redo generation as possible causes. That helps reduce investigation time, but the operational decision is more complicated.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;A DBA must determine whether the standby is still suitable for failover, whether the defined RPO is at risk, whether the lag is temporary and whether the application can reconnect correctly after a role transition. The decision may also depend on broker configuration, standby redo logs, protection mode, Fast-Start Failover settings and the availability of application and infrastructure teams.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;The same applies to SQL tuning. Creating an index may improve one expensive query while increasing DML latency, storage consumption and maintenance time. Accepting a SQL profile may stabilise a plan but can also hide an underlying statistics or data-distribution problem. AI can suggest an action; the DBA must evaluate its wider effect.&lt;/p&gt;

&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;&lt;br /&gt;&lt;/h2&gt;&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;The Oracle DBA Will Become a Platform Engineer&lt;/h2&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;By 2030, managing databases one server at a time will be difficult to justify. Database estates are already moving towards standardised platforms, infrastructure as code, policy-based controls and self-service provisioning.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Oracle expertise will remain the foundation, but it will need to be combined with broader engineering skills:&lt;/p&gt;

&lt;ul style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;
  &lt;li&gt;Oracle RAC, Data Guard, RMAN and multitenant architecture&lt;/li&gt;
  &lt;li&gt;Exadata, Exadata Cloud@Customer and Oracle Cloud Infrastructure&lt;/li&gt;
  &lt;li&gt;Shell or Python scripting for operational automation&lt;/li&gt;
  &lt;li&gt;Ansible and Terraform for repeatable configuration and provisioning&lt;/li&gt;
  &lt;li&gt;APIs, Git and CI/CD practices for database changes&lt;/li&gt;
  &lt;li&gt;Security controls, encryption, auditing and access governance&lt;/li&gt;
  &lt;li&gt;Observability across the database, operating system, storage and application layers&lt;/li&gt;
&lt;/ul&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;This does not mean every DBA must become an expert in every tool. The practical goal is to stop treating database administration as a collection of manual server activities and start treating it as an engineered service.&lt;/p&gt;

&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;&lt;br /&gt;&lt;/h2&gt;&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;Common Mistakes DBAs Should Avoid&lt;/h2&gt;

&lt;h3 style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large;&quot;&gt;Trusting Recommendations Without Testing&lt;/h3&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;An AI-generated script should be reviewed like any other production change. Check its scope, privileges, locking behaviour, failure handling and rollback path. Test it with representative data before running it against a critical database.&lt;/p&gt;

&lt;h3 style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large;&quot;&gt;Automating a Broken Process&lt;/h3&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Automation makes a good process faster, but it can also repeat a bad decision consistently. Before automating patching, failover or cleanup, define the prerequisites, safety checks, stopping conditions and evidence required after completion.&lt;/p&gt;

&lt;h3 style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large;&quot;&gt;Ignoring Database Fundamentals&lt;/h3&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;AI assistance does not remove the need to understand wait events, execution plans, locking, undo, redo, checkpoints, recovery and Oracle memory structures. Without that foundation, it is difficult to recognise when a recommendation is incomplete or unsafe.&lt;/p&gt;

&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;&lt;br /&gt;&lt;/h2&gt;&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;Frequently Asked Questions&lt;/h2&gt;

&lt;h3 style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large;&quot;&gt;Will junior Oracle DBA positions disappear?&lt;/h3&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Entry-level work will change because many routine checks and standard requests can be automated. Junior DBAs will need earlier exposure to scripting, cloud platforms, observability and incident analysis instead of relying only on repetitive operational tasks.&lt;/p&gt;

&lt;h3 style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large;&quot;&gt;Should Oracle DBAs move completely into cloud roles?&lt;/h3&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Cloud knowledge is valuable, but many enterprises will continue operating hybrid environments. Experience with on-premises Oracle, Exadata, Exadata Cloud@Customer and OCI can be more useful than focusing on only one deployment model.&lt;/p&gt;

&lt;h3 style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large;&quot;&gt;Can AI make production database changes automatically?&lt;/h3&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Technically, automation can execute approved changes. For critical systems, organisations should still use access controls, testing, change approval, audit trails, rollback procedures and human oversight. The level of autonomy should depend on the risk and reversibility of the operation.&lt;/p&gt;

&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;&lt;br /&gt;&lt;/h2&gt;&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;Final Thoughts&lt;/h2&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;AI is unlikely to replace the Oracle DBA by 2030, but it will expose inefficient ways of working. Tasks based on predictable inputs and repeatable steps will increasingly move to automation. Architecture decisions, complex recovery, performance trade-offs, security and business-critical incident handling will continue to require experienced engineers.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;The safest career strategy is not to compete with automation. Use it to remove repetitive work, then invest the saved time in Oracle internals, platform engineering, cloud architecture and recovery design. The future Oracle DBA will manage fewer individual tasks but carry greater responsibility for the reliability of the entire database service.&lt;/p&gt;
</description><link>https://oracle-dba-help.blogspot.com/2026/10/oracle-dba-in-2030-what-will-role-look.html</link><author>noreply@blogger.com (Nikhil Kotak)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1375587508974804970.post-4681157720855376541</guid><pubDate>Sun, 04 Oct 2026 12:49:00 +0000</pubDate><atom:updated>2026-10-04T20:49:00.208+08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">MongoDB</category><title>MongoDB :  What DBAs Must Get Right</title><description>&lt;div style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-weight: normal; text-align: left;&quot;&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;MongoDB often looks simple during the first few application releases. Developers can add fields without waiting for a table change, nested-objects map naturally to application code, and a complete business record can be retrieved without several joins.&lt;br /&gt;&lt;/span&gt;The real test starts after the collection grows, multiple services begin writing to it, and the workload becomes operationally important. One service stores an identifier as a string while another writes it as a number. Arrays grow without limits. Queries that were fast during development begin examining millions of documents. A secondary falls behind during a batch update, or a shard key concentrates most traffic on one node.&lt;/span&gt;&lt;/div&gt;



&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-weight: normal;&quot;&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;MongoDB is not difficult because it uses documents instead of tables. It becomes difficult when flexible modelling is treated as a replacement for data governance, indexing, recovery planning, and capacity management. This article looks at MongoDB from a production DBA perspective and focuses on the design and operational decisions that usually determine whether the platform remains stable.&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;p&gt;&lt;/p&gt;

&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;Flexible Schema Does Not Mean No Schema&lt;/h2&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;MongoDB stores data as BSON documents inside collections. BSON supports nested documents, arrays, dates, decimal values, binary data, and several numeric types. This allows an application object to be stored close to the form in which the application uses it.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;A customer profile, for example, may contain contact details, preferences, addresses, and status information in one document. That can remove several joins and reduce application round trips.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;The problem is not flexibility itself. The problem is uncontrolled variation. Without validation, different application versions may gradually introduce conflicting field names, missing attributes, and inconsistent data types.&lt;/p&gt;

&lt;div style=&quot;background: rgb(40, 42, 54); border-color: gray; border-image: initial; border-style: solid; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;&quot;&gt;
&lt;pre style=&quot;line-height: 125%; margin: 0px;&quot;&gt;&lt;span style=&quot;color: #f8f8f2; font-family: courier; font-size: medium; font-weight: normal;&quot;&gt;use customer360

db.createCollection(&quot;profiles&quot;, {
validator: {
$jsonSchema: {
bsonType: &quot;object&quot;,
required: [&quot;customerId&quot;, &quot;email&quot;, &quot;status&quot;, &quot;createdAt&quot;],
properties: {
customerId: {
bsonType: &quot;string&quot;
},
email: {
bsonType: &quot;string&quot;
},
status: {
enum: [&quot;ACTIVE&quot;, &quot;SUSPENDED&quot;, &quot;CLOSED&quot;]
},
createdAt: {
bsonType: &quot;date&quot;
}
}
}
},
validationLevel: &quot;strict&quot;,
validationAction: &quot;error&quot;
})

db.profiles.aggregate([
{
$project: {
customerIdType: { $type: &quot;$customerId&quot; },
emailType: { $type: &quot;$email&quot; }
}
},
{
$group: {
_id: {
customerIdType: &quot;$customerIdType&quot;,
emailType: &quot;$emailType&quot;
},
documentCount: { $sum: 1 }
}
}
])&lt;/span&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;For an existing collection, inspect current documents before introducing strict validation. Enabling validation without understanding legacy data can reject application writes immediately after deployment.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;A safer rollout is to identify inconsistent documents, correct the data, introduce validation in a controlled manner, and then enforce the final rules.&lt;/p&gt;

&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
  &lt;!--Add Blogger image here: MongoDB flexible documents passing through schema validation, with valid and rejected document paths--&gt;
&lt;/div&gt;

&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;Model Around Business Operations&lt;/h2&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;A relational design should not be copied into MongoDB collection by collection. That often creates a system dependent on repeated &lt;code style=&quot;font-family: courier;&quot;&gt;$lookup&lt;/code&gt; operations and multiple application calls.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;The opposite approach is equally risky. Embedding every related object into one document can produce oversized documents, heavily updated arrays, and duplicated data that becomes difficult to maintain.&lt;/p&gt;

&lt;h3 style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large;&quot;&gt;Use embedding when the data belongs together&lt;/h3&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Embedding works well when the related data is normally read together, updated together, and has a predictable size. Order line items are a common example because the description, quantity, and purchase price belong to the historical order.&lt;/p&gt;

&lt;h3 style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large;&quot;&gt;Use references when the lifecycle is independent&lt;/h3&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;A product master, audit trail, login history, or notification history usually changes independently and may grow continuously. Referencing such data from a separate collection is generally safer.&lt;/p&gt;

&lt;h3 style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large;&quot;&gt;Unbounded arrays become operational debt&lt;/h3&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;A customer document containing the last five login locations is manageable. A document containing every login since account creation will become increasingly expensive to read, update, index, replicate, and back up.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;MongoDB documents also have a size limit. Even before that limit is reached, a growing document can create write amplification and contention. A practical design is to keep a small summary in the parent document and store the complete history separately.&lt;/p&gt;

&lt;div style=&quot;background: rgb(40, 42, 54); border-color: gray; border-image: initial; border-style: solid; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;&quot;&gt;
&lt;pre style=&quot;line-height: 125%; margin: 0px;&quot;&gt;&lt;span style=&quot;color: #f8f8f2; font-family: courier; font-size: medium; font-weight: normal;&quot;&gt;db.orders.aggregate([
  {
    $project: {
      orderId: 1,
      itemCount: {
        $size: {
          $ifNull: [&quot;$items&quot;, []]
        }
      },
      documentSizeBytes: {
        $bsonSize: &quot;$$ROOT&quot;
      }
    }
  },
  {
    $sort: {
      documentSizeBytes: -1
    }
  },
  {
    $limit: 20
  }
])&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
  &lt;!--Add Blogger image here: Embed versus reference decision flow showing bounded data and independent lifecycle--&gt;
&lt;/div&gt;

&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjxp1Wm_lUh8G7fS0ybQOR7XUgIR_GPtZ3u-csMl6msnLUIRltfZa2vy3JRo81fbyyaLEpQ9UTP5fwiJn77WgWTqHAoHTe6i_QnXEgicckCjQQiJUo8Za-M2rALnoD7XJpnRa0qUlT0XSkDlJpMu7BRBaD5biPkapvQU9V-IEEfjnQNSVVKFfrw8hZ9Z0Q/s1536/mongo1.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1024&quot; data-original-width=&quot;1536&quot; height=&quot;425&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjxp1Wm_lUh8G7fS0ybQOR7XUgIR_GPtZ3u-csMl6msnLUIRltfZa2vy3JRo81fbyyaLEpQ9UTP5fwiJn77WgWTqHAoHTe6i_QnXEgicckCjQQiJUo8Za-M2rALnoD7XJpnRa0qUlT0XSkDlJpMu7BRBaD5biPkapvQU9V-IEEfjnQNSVVKFfrw8hZ9Z0Q/w639-h425/mongo1.png&quot; width=&quot;639&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;&lt;br /&gt;&lt;/h2&gt;&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;&lt;br /&gt;&lt;/h2&gt;&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;Indexes Still Control Query Performance&lt;/h2&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;MongoDB does not remove the need for careful access-path design. A missing or poorly ordered index produces familiar symptoms: high CPU, excessive storage reads, slow application calls, cache pressure, and replica lag.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Consider an order service that frequently filters by tenant and status, then sorts by creation time.&lt;/p&gt;

&lt;div style=&quot;background: rgb(40, 42, 54); border-color: gray; border-image: initial; border-style: solid; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;&quot;&gt;
&lt;pre style=&quot;line-height: 125%; margin: 0px;&quot;&gt;&lt;span style=&quot;color: #f8f8f2; font-family: courier; font-size: medium; font-weight: normal;&quot;&gt;db.orders.createIndex(
  {
    tenantId: 1,
    status: 1,
    createdAt: -1
  },
  {
    name: &quot;idx_orders_tenant_status_created&quot;
  }
)

db.orders.explain(&quot;executionStats&quot;).find({
tenantId: &quot;TENANT-110&quot;,
status: &quot;OPEN&quot;,
createdAt: {
$gte: ISODate(&quot;2026-07-01T00:00:00Z&quot;)
}
}).sort({
createdAt: -1
}).limit(100)

db.orders.aggregate([
{ $indexStats: {} },
{ $sort: { accesses: 1 } }
])&lt;/span&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;An &lt;code style=&quot;font-family: courier;&quot;&gt;IXSCAN&lt;/code&gt; stage does not automatically mean the query is efficient. Review the relationship between &lt;code style=&quot;font-family: courier;&quot;&gt;nReturned&lt;/code&gt;, &lt;code style=&quot;font-family: courier;&quot;&gt;totalKeysExamined&lt;/code&gt;, and &lt;code style=&quot;font-family: courier;&quot;&gt;totalDocsExamined&lt;/code&gt;.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;If a query returns 100 documents after examining several million keys, the index is being used, but the access path is still expensive.&lt;/p&gt;

&lt;h3 style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large;&quot;&gt;Indexing mistakes seen in production&lt;/h3&gt;

&lt;ul&gt;
  &lt;li style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Creating an index for every application filter without measuring write overhead.&lt;/li&gt;
  &lt;li style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Selecting the wrong order for fields in a compound index.&lt;/li&gt;
  &lt;li style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Removing an index because it appears unused during a short monitoring window.&lt;/li&gt;
  &lt;li style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Ignoring different BSON types in the indexed field.&lt;/li&gt;
  &lt;li style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Adding more indexes instead of correcting an unsuitable document model.&lt;/li&gt;
&lt;/ul&gt;

&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
  &lt;!--Add Blogger image here: Collection scan reading all documents versus compound index performing targeted lookup--&gt;
&lt;/div&gt;

&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;Replica Sets: High Availability Needs More Than Three Nodes&lt;/h2&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;A replica set usually contains one primary and multiple secondaries. The primary accepts writes, and secondaries copy changes from the replication oplog. If the primary becomes unavailable, eligible members hold an election and one secondary may be promoted.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;This architecture provides redundancy, but durability depends on write concern. A three-member replica set does not prove that every acknowledged write has reached multiple nodes.&lt;/p&gt;

&lt;div style=&quot;background: rgb(40, 42, 54); border-color: gray; border-image: initial; border-style: solid; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;&quot;&gt;
&lt;pre style=&quot;line-height: 125%; margin: 0px;&quot;&gt;&lt;span style=&quot;color: #f8f8f2; font-family: courier; font-size: medium; font-weight: normal;&quot;&gt;db.orders.insertOne(
  {
    orderId: &quot;ORD-2026-10019&quot;,
    status: &quot;CREATED&quot;,
    createdAt: new Date()
  },
  {
    writeConcern: {
      w: &quot;majority&quot;,
      wtimeout: 5000
    }
  }
)

rs.status()
rs.printReplicationInfo()
rs.printSecondaryReplicationInfo()

db.adminCommand({
replSetGetStatus: 1
})&lt;/span&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Majority acknowledgment provides stronger durability but may add latency. A write concern timeout also requires careful application handling. It means the requested acknowledgment was not received within the configured time. It does not always prove that the write was never applied.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;For this reason, retry logic should be idempotent. Retrying an order creation, payment request, or account update without a business key can create duplicates.&lt;/p&gt;

&lt;h3 style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large;&quot;&gt;Replica lag is usually a capacity problem&lt;/h3&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;A lagging secondary is often receiving changes correctly but cannot apply them as quickly as the primary generates them. Common causes include slow storage, network problems, large batch updates, index maintenance, insufficient CPU, cache eviction pressure, and competing reporting or backup activity.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Increasing oplog size may provide more recovery time, but it does not fix a secondary whose replay capacity remains lower than the primary write rate.&lt;/p&gt;

&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
  &lt;!--Add Blogger image here: Replica set primary failure, election, new primary promotion and application reconnection--&gt;
&lt;/div&gt;

&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;WiredTiger: Look Beyond Cache Usage&lt;/h2&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;WiredTiger is responsible for storage, compression, cache management, checkpoints, concurrency, and journal-based recovery. The implementation differs from Oracle and PostgreSQL, but the production questions are familiar.&lt;/p&gt;

&lt;ul&gt;
  &lt;li style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Does the active working set fit in memory?&lt;/li&gt;
  &lt;li style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Are dirty pages being written efficiently?&lt;/li&gt;
  &lt;li style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Is storage latency affecting checkpoints or eviction?&lt;/li&gt;
  &lt;li style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Is a write-heavy workload overwhelming the node?&lt;/li&gt;
&lt;/ul&gt;

&lt;div style=&quot;background: rgb(40, 42, 54); border-color: gray; border-image: initial; border-style: solid; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;&quot;&gt;
&lt;pre style=&quot;line-height: 125%; margin: 0px;&quot;&gt;&lt;span style=&quot;color: #f8f8f2; font-family: courier; font-size: medium; font-weight: normal;&quot;&gt;const status = db.serverStatus()

status.mem
status.wiredTiger.cache
status.wiredTiger.transaction
status.wiredTiger.log

# Operating-system checks

iostat -xz 1 10
vmstat 1 10
pidstat -d -p &quot;$(pidof mongod)&quot; 1 10

grep -E &quot;WTCHKPT|WTEVICT|WTRECOV|Slow query&quot; 
/var/log/mongodb/mongod.log&lt;/span&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;High cache usage is not automatically a fault. A database cache is expected to remain busy. The warning signs are high cache pressure combined with aggressive eviction, growing dirty bytes, rising disk latency, checkpoint delays, and increasing application response time.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Increasing &lt;code style=&quot;font-family: courier;&quot;&gt;cacheSizeGB&lt;/code&gt; should not be the first response. More WiredTiger cache can reduce memory available to the filesystem cache, the operating system, connections, index builds, and aggregations.&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi4k4GMwDRmO-zj3tz_fOpfaMNwTb2mtSW3Vzqc4FSo9-H0xvNI3_-tjsg4vu_k5flS6nZ4fORrrBr0tK6RRhGZXHzvND53IsEInfIYeGLyYkGlEtFcT0Nj7Buvu08FEOhNPMusfIG2Z6GU_M6PcheWzZw-U9vDnPzZ50olJ16ooloGMR60Aul7XkMpQNs/s1448/mongo2.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1086&quot; data-original-width=&quot;1448&quot; height=&quot;414&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi4k4GMwDRmO-zj3tz_fOpfaMNwTb2mtSW3Vzqc4FSo9-H0xvNI3_-tjsg4vu_k5flS6nZ4fORrrBr0tK6RRhGZXHzvND53IsEInfIYeGLyYkGlEtFcT0Nj7Buvu08FEOhNPMusfIG2Z6GU_M6PcheWzZw-U9vDnPzZ50olJ16ooloGMR60Aul7XkMpQNs/w552-h414/mongo2.png&quot; width=&quot;552&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;&lt;br /&gt;&lt;/p&gt;

&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
  &lt;!--Add Blogger image here: Application write flowing through WiredTiger cache, journal, checkpoint and data files--&gt;
&lt;/div&gt;

&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;Transactions Should Not Hide a Poor Document Model&lt;/h2&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;MongoDB supports multi-document transactions on replica sets and sharded clusters. They are useful when several independent documents must change as one business operation.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;They are not a substitute for proper modelling. If most application requests require updates across several collections, the design may be reproducing a relational system without the natural advantages of a relational database.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Long-running transactions can increase cache and storage pressure, retain older document versions for longer, experience more write conflicts, and become more expensive when multiple shards are involved.&lt;/p&gt;

&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;Sharding Starts with the Shard Key&lt;/h2&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Replica sets provide redundancy, but one primary still has finite CPU, memory, storage, and write capacity. Sharding distributes collection data across multiple shards. Each shard is normally a replica set, applications connect through &lt;code style=&quot;font-family: courier;&quot;&gt;mongos&lt;/code&gt;, and the config server replica set maintains cluster metadata.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;The shard key determines how data is distributed and how queries are routed. A poor key can create a hot shard, uneven storage, excessive chunk movement, or scatter-gather queries that contact every shard.&lt;/p&gt;

&lt;div style=&quot;background: rgb(40, 42, 54); border-color: gray; border-image: initial; border-style: solid; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;&quot;&gt;
&lt;pre style=&quot;line-height: 125%; margin: 0px;&quot;&gt;&lt;span style=&quot;color: #f8f8f2; font-family: courier; font-size: medium; font-weight: normal;&quot;&gt;use commerce

db.orders.createIndex({
tenantId: 1,
orderDate: 1
})

sh.enableSharding(&quot;commerce&quot;)

sh.shardCollection(
&quot;commerce.orders&quot;,
{
tenantId: 1,
orderDate: 1
}
)

sh.status()
db.orders.getShardDistribution()&lt;/span&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h3 style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large;&quot;&gt;Shard-key warning signs&lt;/h3&gt;

&lt;ul&gt;
  &lt;li style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Low-cardinality fields such as status or a small number of regions.&lt;/li&gt;
  &lt;li style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Monotonically increasing values that concentrate new writes.&lt;/li&gt;
  &lt;li style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;A shard key missing from common application queries.&lt;/li&gt;
  &lt;li style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Tenant-based sharding when one tenant generates most of the traffic.&lt;/li&gt;
  &lt;li style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Hashed sharding selected without considering range-query requirements.&lt;/li&gt;
&lt;/ul&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;The balancer can move chunks between shards, but it cannot correct a workload that continually targets one logical key range. Shard-key selection should use actual query patterns, tenant distribution, write behaviour, and projected growth.&lt;/p&gt;

&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
  &lt;!--Add Blogger image here: Applications connecting through mongos to three sharded replica sets and config servers--&gt;
&lt;/div&gt;

&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;Practical Failure Scenario: Replica Lag During Batch Processing&lt;/h2&gt;

&lt;h3 style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large;&quot;&gt;Problem&lt;/h3&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;A three-member replica set supported an order-processing application. During a nightly batch update, the primary remained responsive, but one secondary gradually fell more than 15 minutes behind. Since every process was running, the environment initially appeared healthy.&lt;/p&gt;

&lt;h3 style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large;&quot;&gt;Root cause&lt;/h3&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;The batch job issued millions of small updates. Each update modified fields covered by several indexes. The primary also used faster storage than the lagging secondary. Oplog generation increased faster than the secondary could apply the changes.&lt;/p&gt;

&lt;h3 style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large;&quot;&gt;Fix&lt;/h3&gt;

&lt;ul&gt;
  &lt;li style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Converted individual operations into controlled bulk updates.&lt;/li&gt;
  &lt;li style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Reduced batch size and introduced pauses between batches.&lt;/li&gt;
  &lt;li style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Removed one redundant index after workload validation.&lt;/li&gt;
  &lt;li style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Aligned storage performance across replica-set members.&lt;/li&gt;
  &lt;li style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Increased oplog capacity as temporary protection.&lt;/li&gt;
  &lt;li style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Added alerts for apply-rate divergence and oplog-window reduction.&lt;/li&gt;
&lt;/ul&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Increasing the oplog alone would only have delayed the problem. The permanent fix was to reduce write amplification and improve secondary replay capacity.&lt;/p&gt;

&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;MongoDB Versus Oracle and PostgreSQL&lt;/h2&gt;&lt;div&gt;&lt;table style=&quot;border-collapse: collapse; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal; width: 100%;&quot;&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th style=&quot;background-color: #e06666; border: 1px solid rgb(153, 153, 153); color: white; padding: 10px; text-align: left;&quot;&gt;Workload Requirement&lt;/th&gt;
      &lt;th style=&quot;background-color: #e06666; border: 1px solid rgb(153, 153, 153); color: white; padding: 10px; text-align: left;&quot;&gt;MongoDB&lt;/th&gt;
      &lt;th style=&quot;background-color: #e06666; border: 1px solid rgb(153, 153, 153); color: white; padding: 10px; text-align: left;&quot;&gt;Oracle or PostgreSQL&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td style=&quot;border: 1px solid rgb(153, 153, 153); padding: 10px;&quot;&gt;Variable product attributes&lt;/td&gt;
      &lt;td style=&quot;border: 1px solid rgb(153, 153, 153); padding: 10px;&quot;&gt;Natural fit when different product categories require different fields and the document structure changes frequently.&lt;/td&gt;
      &lt;td style=&quot;border: 1px solid rgb(153, 153, 153); padding: 10px;&quot;&gt;Supported through relational modelling, JSON columns, or a hybrid design, although highly variable attributes may require additional schema and query planning.&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;border: 1px solid rgb(153, 153, 153); padding: 10px;&quot;&gt;Nested content records&lt;/td&gt;
      &lt;td style=&quot;border: 1px solid rgb(153, 153, 153); padding: 10px;&quot;&gt;Strong fit when related data can be stored and retrieved as a single document, reducing the need for joins.&lt;/td&gt;
      &lt;td style=&quot;border: 1px solid rgb(153, 153, 153); padding: 10px;&quot;&gt;Well suited when nested information must be normalized, independently maintained, or queried across multiple entities. JSON can also be used where appropriate.&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;border: 1px solid rgb(153, 153, 153); padding: 10px;&quot;&gt;Customer profile aggregation&lt;/td&gt;
      &lt;td style=&quot;border: 1px solid rgb(153, 153, 153); padding: 10px;&quot;&gt;Well suited for entity-centric profiles that combine preferences, addresses, activity summaries, and other related information in one document.&lt;/td&gt;
      &lt;td style=&quot;border: 1px solid rgb(153, 153, 153); padding: 10px;&quot;&gt;A strong option when profile data is shared across normalized entities or requires complex reporting, joins, and strict relationship management.&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;border: 1px solid rgb(153, 153, 153); padding: 10px;&quot;&gt;Core financial ledger&lt;/td&gt;
      &lt;td style=&quot;border: 1px solid rgb(153, 153, 153); padding: 10px;&quot;&gt;Supports ACID transactions, but is usually not the first choice for a highly relational ledger requiring extensive constraints, reconciliation, and audit controls.&lt;/td&gt;
      &lt;td style=&quot;border: 1px solid rgb(153, 153, 153); padding: 10px;&quot;&gt;Usually the safer starting point because of mature transaction handling, strong consistency, relational constraints, locking controls, and established auditing capabilities.&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;border: 1px solid rgb(153, 153, 153); padding: 10px;&quot;&gt;Complex cross-entity reporting&lt;/td&gt;
      &lt;td style=&quot;border: 1px solid rgb(153, 153, 153); padding: 10px;&quot;&gt;Aggregation pipelines can support advanced analysis, but repeated joins across many collections may indicate that the data model is becoming relational.&lt;/td&gt;
      &lt;td style=&quot;border: 1px solid rgb(153, 153, 153); padding: 10px;&quot;&gt;Strong fit for complex joins, window functions, analytical SQL, materialized views, and reporting across multiple related entities.&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;border: 1px solid rgb(153, 153, 153); padding: 10px;&quot;&gt;Strong relational integrity&lt;/td&gt;
      &lt;td style=&quot;border: 1px solid rgb(153, 153, 153); padding: 10px;&quot;&gt;Schema validation is available, but relationships between collections are generally enforced by the application or supporting services.&lt;/td&gt;
      &lt;td style=&quot;border: 1px solid rgb(153, 153, 153); padding: 10px;&quot;&gt;Strong fit because primary keys, foreign keys, unique constraints, checks, and transactional rules can be enforced directly by the database.&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;border: 1px solid rgb(153, 153, 153); padding: 10px;&quot;&gt;Rapid document evolution&lt;/td&gt;
      &lt;td style=&quot;border: 1px solid rgb(153, 153, 153); padding: 10px;&quot;&gt;Natural fit when fields are introduced gradually and multiple document versions must coexist during application changes.&lt;/td&gt;
      &lt;td style=&quot;border: 1px solid rgb(153, 153, 153); padding: 10px;&quot;&gt;Possible through controlled schema migrations or JSON-based designs, but relational changes normally require more formal deployment and compatibility planning.&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;border: 1px solid rgb(153, 153, 153); padding: 10px;&quot;&gt;Heavy distributed document writes&lt;/td&gt;
      &lt;td style=&quot;border: 1px solid rgb(153, 153, 153); padding: 10px;&quot;&gt;A strong candidate when writes can be distributed through sharding, provided the shard key avoids hotspots and supports the main query patterns.&lt;/td&gt;
      &lt;td style=&quot;border: 1px solid rgb(153, 153, 153); padding: 10px;&quot;&gt;Can scale through partitioning, replication, distributed extensions, or platform-specific architectures, but horizontal write scaling is not usually as transparent as native document sharding.&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;



&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;MongoDB is a strong option for product catalogues, customer profiles, content platforms, device metadata, and other hierarchical records. Oracle or PostgreSQL is usually the safer starting point for financial ledgers, complex cross-entity reporting, strict foreign-key enforcement, and heavily normalized transactional systems.&lt;/p&gt;

&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
  &lt;!--Add Blogger image here: MongoDB document model compared with Oracle and PostgreSQL relational model--&gt;
&lt;/div&gt;

&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;Production Lessons for DBAs&lt;/h2&gt;

&lt;ul&gt;
  &lt;li style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Flexible schema moves responsibility to validators, application contracts, and release governance.&lt;/li&gt;
  &lt;li style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Unbounded arrays should be corrected before they become storage and replication problems.&lt;/li&gt;
  &lt;li style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;An index can be used and still be inefficient. Always compare examined data with returned data.&lt;/li&gt;
  &lt;li style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Replica lag should be analysed as a difference between write generation and replay capacity.&lt;/li&gt;
  &lt;li style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;A successful election does not prove the application reconnected successfully.&lt;/li&gt;
  &lt;li style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Sharding should begin only after a shard key has been tested against real workload patterns.&lt;/li&gt;
  &lt;li style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Replication protects availability. Restore-tested backups protect recoverability.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;&lt;h2 style=&quot;display: inline; font-family: &amp;quot;Source Sans Pro&amp;quot;; text-align: left;&quot;&gt;&lt;span style=&quot;color: #e06666;&quot;&gt;When MongoDB Is the Better Choice&lt;/span&gt;&lt;/h2&gt;&lt;p class=&quot;isSelectedEnd&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large;&quot;&gt;MongoDB is a strong candidate when the data is naturally represented as a complete document and is usually read or changed as one unit.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large;&quot;&gt;Typical examples include:&lt;/p&gt;&lt;ul data-spread=&quot;false&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large;&quot;&gt;&lt;li&gt;Product catalogs with category-specific attributes&lt;/li&gt;&lt;li&gt;Customer profiles&lt;/li&gt;&lt;li&gt;Content management platforms&lt;/li&gt;&lt;li&gt;Configuration repositories&lt;/li&gt;&lt;li&gt;Mobile and web application backends&lt;/li&gt;&lt;li&gt;Session and preference data&lt;/li&gt;&lt;li&gt;Device metadata&lt;/li&gt;&lt;li&gt;Case-management records&lt;/li&gt;&lt;li&gt;APIs returning hierarchical objects&lt;/li&gt;&lt;/ul&gt;&lt;p class=&quot;isSelectedEnd&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large;&quot;&gt;It is especially useful when new fields must be introduced frequently and application teams cannot coordinate repeated relational schema migrations.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large;&quot;&gt;That flexibility should still be supported by:&lt;/p&gt;&lt;ul data-spread=&quot;false&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large;&quot;&gt;&lt;li&gt;Schema ownership&lt;/li&gt;&lt;li&gt;Versioning rules&lt;/li&gt;&lt;li&gt;Validation&lt;/li&gt;&lt;li&gt;Index reviews&lt;/li&gt;&lt;li&gt;Retention policies&lt;/li&gt;&lt;li&gt;Backup and recovery testing&lt;/li&gt;&lt;/ul&gt;&lt;div style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large;&quot;&gt;&lt;span style=&quot;color: #e06666;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;&lt;span style=&quot;color: #e06666;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;b&gt;When Oracle or PostgreSQL Is the Safer Choice&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;p class=&quot;isSelectedEnd&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large;&quot;&gt;MongoDB is not the natural first choice for every modern application.&lt;/p&gt;&lt;p class=&quot;isSelectedEnd&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large;&quot;&gt;A relational database is usually safer when the workload depends on:&lt;/p&gt;&lt;ul data-spread=&quot;false&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large;&quot;&gt;&lt;li&gt;Strong foreign-key enforcement&lt;/li&gt;&lt;li&gt;Complex joins across many entities&lt;/li&gt;&lt;li&gt;Highly normalized master data&lt;/li&gt;&lt;li&gt;Frequent multi-entity transactions&lt;/li&gt;&lt;li&gt;Financial ledger behavior&lt;/li&gt;&lt;li&gt;Mature SQL reporting&lt;/li&gt;&lt;li&gt;Complex ad hoc analytics&lt;/li&gt;&lt;li&gt;Strict database-side constraints&lt;/li&gt;&lt;/ul&gt;&lt;p class=&quot;isSelectedEnd&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large;&quot;&gt;A payment ledger, general ledger, securities position store, or ERP accounting engine should not be moved to MongoDB only because the development team prefers JSON.&lt;/p&gt;&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large;&quot;&gt;MongoDB can technically support many of these operations. Technical possibility is not the same as operational suitability.&lt;/p&gt;&lt;div&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: medium;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;

&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;Frequently Asked Questions&lt;/h2&gt;

&lt;h3 style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large;&quot;&gt;Does MongoDB really have no schema?&lt;/h3&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;No. MongoDB has a flexible schema. Documents in the same collection can have different structures by default, but production systems still require an agreed document model. Collection validation can enforce critical rules.&lt;/p&gt;

&lt;h3 style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large;&quot;&gt;Why is a query slow even when it uses an index?&lt;/h3&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;The index may still examine too many keys or fetch too many documents. Check execution statistics, compound index order, sort behaviour, field data types, and predicate selectivity.&lt;/p&gt;

&lt;h3 style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large;&quot;&gt;Can applications read from secondaries?&lt;/h3&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Yes, with an appropriate read preference. Secondary reads may be behind the primary, so read preference and read concern must match the application&#39;s consistency requirements.&lt;/p&gt;

&lt;h3 style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large;&quot;&gt;Should every write use majority write concern?&lt;/h3&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Not automatically. Majority acknowledgment provides stronger durability but may increase latency and affect write availability during member failures. The choice should follow the business impact of losing, delaying, or retrying a write.&lt;/p&gt;

&lt;h3 style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large;&quot;&gt;When should a collection be sharded?&lt;/h3&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Shard when one replica set can no longer meet projected storage or throughput requirements and the workload has a suitable shard key. Do not shard only because the collection is expected to grow.&lt;/p&gt;

&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;Conclusion&lt;/h2&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;MongoDB performs well when the workload is genuinely document-oriented and the operating model is designed around that reality. Flexible documents can simplify application development, replica sets provide high availability, and sharding offers a practical route beyond the limits of one server.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Those benefits do not remove the need for database engineering. Reliable MongoDB platforms define ownership for document structure, validate important fields, review execution plans before adding indexes, test elections with real application traffic, and monitor replication as a throughput problem rather than a simple process state.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;The operational mindset remains similar to Oracle and PostgreSQL. Capacity planning, workload baselines, recovery testing, index discipline, and failure simulation still matter. The terminology changes to oplog, write concern, WiredTiger cache, checkpoints, and shard keys, but the DBA questions remain familiar: what can be lost, what can become slow, what can fail over, and how quickly can the service recover?&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Review the largest collections, inspect slow queries with execution statistics, test application behaviour during elections, validate backup restores, and challenge every proposed shard key before the platform reaches its scaling limit.&lt;/p&gt;

&lt;!--SEO Search Description: MongoDB production guide covering schema design, indexing, replica sets, WiredTiger, sharding and practical DBA lessons.--&gt;
</description><link>https://oracle-dba-help.blogspot.com/2026/10/mongodb-what-dbas-must-get-right.html</link><author>noreply@blogger.com (Nikhil Kotak)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjxp1Wm_lUh8G7fS0ybQOR7XUgIR_GPtZ3u-csMl6msnLUIRltfZa2vy3JRo81fbyyaLEpQ9UTP5fwiJn77WgWTqHAoHTe6i_QnXEgicckCjQQiJUo8Za-M2rALnoD7XJpnRa0qUlT0XSkDlJpMu7BRBaD5biPkapvQU9V-IEEfjnQNSVVKFfrw8hZ9Z0Q/s72-w639-h425-c/mongo1.png" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1375587508974804970.post-2237072265010505798</guid><pubDate>Fri, 25 Sep 2026 12:25:00 +0000</pubDate><atom:updated>2026-09-25T20:25:00.206+08:00</atom:updated><title>PostgreSQL Shared Buffers: A Production DBA Guide</title><description>&lt;h2 style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;&lt;span style=&quot;font-size: large; font-weight: normal;&quot;&gt;A PostgreSQL server had just returned from planned operating-system maintenance. Recovery completed cleanly, connections were available, and the database log showed nothing unusual. Yet application latency was several times higher than before the restart, read IOPS had increased, and the first recommendation was to increase &lt;/span&gt;&lt;code style=&quot;font-family: courier; font-size: large; font-weight: normal;&quot;&gt;shared_buffers&lt;/code&gt;&lt;span style=&quot;font-size: large; font-weight: normal;&quot;&gt;.&lt;/span&gt;&lt;/h2&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;That may help, but it is not a diagnosis. The PostgreSQL cache is cold after a restart. A shared-buffer miss may be served by the operating-system page cache or may reach storage. A query can also have an excellent cache-hit ratio and still be slow because it processes millions of cached blocks. On the write side, dirty buffers bring WAL, the background writer, client backends, and the checkpointer into the same performance path.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;This article explains what PostgreSQL keeps in shared buffers, how cache hits and misses should be interpreted, and what happens when pages are modified. It also covers practical sizing, monitoring SQL, common production failures, and the operational differences Oracle DBAs should expect when moving from the SGA buffer cache to PostgreSQL.&lt;span&gt;&lt;/span&gt;&lt;/p&gt;&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;p&gt;&lt;/p&gt;&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;&lt;br /&gt;&lt;/p&gt;

&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;Why Buffer Sizing Becomes a Production Problem&lt;/h2&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;&lt;code style=&quot;font-family: courier;&quot;&gt;shared_buffers&lt;/code&gt; defines a fixed-size shared memory area allocated when PostgreSQL starts. All databases and normal backends in the same PostgreSQL cluster use the same pool. It normally contains pages from permanent relations, including heap tables, indexes, materialized views, and system catalogs.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Most installations use an 8 KB database block size. A 4 GB setting therefore provides approximately 524,288 block-sized buffer slots. PostgreSQL caches pages, not complete query results. Finding a page in memory does not remove the CPU work required for MVCC visibility checks, filtering, joins, aggregation, row locking, or result transfer.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;The setting is also not PostgreSQL&#39;s complete memory budget. Sorts and hash tables generally use &lt;code style=&quot;font-family: courier;&quot;&gt;work_mem&lt;/code&gt;. Temporary tables use session-local &lt;code style=&quot;font-family: courier;&quot;&gt;temp_buffers&lt;/code&gt;. WAL waiting to be written uses &lt;code style=&quot;font-family: courier;&quot;&gt;wal_buffers&lt;/code&gt;. The planner setting &lt;code style=&quot;font-family: courier;&quot;&gt;effective_cache_size&lt;/code&gt; allocates no memory at all; it only estimates the cache likely to be available.&lt;/p&gt;&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;&lt;br /&gt;&lt;/p&gt;

&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;What Really Happens During a Read&lt;/h2&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;When an execution plan requests a table or index block, the buffer manager checks whether that block is already in shared buffers. On a cache hit, the backend pins the buffer and works with the cached page. On a miss, PostgreSQL must find a reusable slot and request the page through the I/O path.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;A PostgreSQL read is not automatically a physical storage read. Linux may already have the file page in its page cache. PostgreSQL statistics generally cannot distinguish a page supplied by kernel memory from one retrieved from the storage device. That is why a low PostgreSQL hit ratio and low storage IOPS can exist at the same time.&lt;/p&gt;

&lt;ol style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;
  &lt;li style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;The executor requests a heap or index block.&lt;/li&gt;
  &lt;li style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;The buffer manager searches the shared buffer mapping.&lt;/li&gt;
  &lt;li style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;On a hit, PostgreSQL uses the cached page.&lt;/li&gt;
  &lt;li style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;On a miss, it selects an unused or replaceable buffer.&lt;/li&gt;
  &lt;li style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;A dirty victim may need to be written before reuse.&lt;/li&gt;
  &lt;li style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;The requested page is loaded and the executor continues processing.&lt;/li&gt;
&lt;/ol&gt;

&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
  &lt;!--Image Idea: Left-to-right flow showing Client Query -&gt; Executor -&gt; Shared Buffer Lookup. Split into Cache Hit and Cache Miss. Continue the miss path through OS Page Cache -&gt; Storage -&gt; Load Into Shared Buffers. Add the label: A PostgreSQL read does not always mean a physical disk read.--&gt;
&lt;/div&gt;

&lt;h3 style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large;&quot;&gt;How PostgreSQL Chooses a Victim Buffer&lt;/h3&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Once unused slots are exhausted, PostgreSQL uses a clock-sweep style replacement algorithm. Buffers have a usage count. Repeatedly used pages receive some protection, while pages with a low usage count become stronger replacement candidates. A pinned page cannot be replaced while a backend is actively using it.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Large scans use limited buffer-access strategies for several operations so that one scan does not automatically occupy the entire pool. Even with that protection, repeated reporting scans can displace useful OLTP pages or saturate storage. The useful signal is not simply a low hit ratio. It is a hot page being evicted and then read again shortly afterward.&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiGLvYKdw9MfmaSkMoYWatHViy8A2H0uIFUkW3E6fWvjYX4wcbpohC9Q_9lDQyrQ_xvqs9LNaU8mx3TFxSSrP6oCTx8GKoUqNGEn4fR8oNuyEQ6i682Ami0i_frQu1TkBSKisCxxD9grwrplXxD8fUzfg65uycWcveyuoEanWFJQHfABJHkz4FAGxz5214/s1800/postgresql-shared-buffers-read-path.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1000&quot; data-original-width=&quot;1800&quot; height=&quot;485&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiGLvYKdw9MfmaSkMoYWatHViy8A2H0uIFUkW3E6fWvjYX4wcbpohC9Q_9lDQyrQ_xvqs9LNaU8mx3TFxSSrP6oCTx8GKoUqNGEn4fR8oNuyEQ6i682Ami0i_frQu1TkBSKisCxxD9grwrplXxD8fUzfg65uycWcveyuoEanWFJQHfABJHkz4FAGxz5214/w868-h485/postgresql-shared-buffers-read-path.png&quot; width=&quot;868&quot; /&gt;&lt;br /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;&lt;br /&gt;&lt;/p&gt;

&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;Dirty Pages, WAL, and Data-File Writes&lt;/h2&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;An &lt;code style=&quot;font-family: courier;&quot;&gt;INSERT&lt;/code&gt;, &lt;code style=&quot;font-family: courier;&quot;&gt;UPDATE&lt;/code&gt;, or &lt;code style=&quot;font-family: courier;&quot;&gt;DELETE&lt;/code&gt; normally changes a page in shared buffers. Once the in-memory page differs from its current data-file copy, the buffer is dirty. PostgreSQL does not need to write that page to the data file at transaction commit.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;For a normal WAL-logged change, PostgreSQL generates the required WAL record, modifies the shared page, and marks it dirty. Commit normally waits for the required WAL to become durable. The data page can be written later because crash recovery can replay WAL if the instance fails before the page reaches disk.&lt;/p&gt;

&lt;table style=&quot;border-collapse: collapse; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal; width: 100%;&quot;&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th style=&quot;background-color: #e06666; border: 1px solid rgb(153, 153, 153); color: white; padding: 10px; text-align: left;&quot;&gt;Writer&lt;/th&gt;
      &lt;th style=&quot;background-color: #e06666; border: 1px solid rgb(153, 153, 153); color: white; padding: 10px; text-align: left;&quot;&gt;Role in Production&lt;/th&gt;
      &lt;th style=&quot;background-color: #e06666; border: 1px solid rgb(153, 153, 153); color: white; padding: 10px; text-align: left;&quot;&gt;DBA Signal&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td style=&quot;border: 1px solid rgb(153, 153, 153); padding: 10px; text-align: left;&quot;&gt;Background writer&lt;/td&gt;
      &lt;td style=&quot;border: 1px solid rgb(153, 153, 153); padding: 10px; text-align: left;&quot;&gt;Writes selected dirty buffers in advance to improve the supply of clean reusable buffers.&lt;/td&gt;
      &lt;td style=&quot;border: 1px solid rgb(153, 153, 153); padding: 10px; text-align: left;&quot;&gt;Cleaning volume and repeated stops at the configured limit.&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;border: 1px solid rgb(153, 153, 153); padding: 10px; text-align: left;&quot;&gt;Checkpointer&lt;/td&gt;
      &lt;td style=&quot;border: 1px solid rgb(153, 153, 153); padding: 10px; text-align: left;&quot;&gt;Writes and synchronizes pages required for a checkpoint recovery boundary.&lt;/td&gt;
      &lt;td style=&quot;border: 1px solid rgb(153, 153, 153); padding: 10px; text-align: left;&quot;&gt;Requested checkpoints, write time, sync time, and storage latency.&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;border: 1px solid rgb(153, 153, 153); padding: 10px; text-align: left;&quot;&gt;Client backend&lt;/td&gt;
      &lt;td style=&quot;border: 1px solid rgb(153, 153, 153); padding: 10px; text-align: left;&quot;&gt;Can write a dirty victim when it needs a reusable buffer and no clean one is ready.&lt;/td&gt;
      &lt;td style=&quot;border: 1px solid rgb(153, 153, 153); padding: 10px; text-align: left;&quot;&gt;Writes occurring directly in the application path.&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;A dirty page is not the same as an uncommitted page. One page can contain row versions created by several transactions. MVCC metadata determines visibility. WAL and the synchronization path protect durability.&lt;/p&gt;&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;&lt;br /&gt;&lt;/p&gt;

&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
  &lt;!--Image Idea: Top-down flow showing DML -&gt; WAL Record -&gt; Dirty Shared Buffer -&gt; Commit. From WAL show Flush Before Data Page. From the dirty buffer branch to Background Writer, Checkpointer, and Client Backend, then converge on Data Files.--&gt;
&lt;/div&gt;

&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;Too Small and Too Large Both Create Problems&lt;/h2&gt;

&lt;table style=&quot;border-collapse: collapse; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal; width: 100%;&quot;&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th style=&quot;background-color: #e06666; border: 1px solid rgb(153, 153, 153); color: white; padding: 10px; text-align: left;&quot;&gt;Condition&lt;/th&gt;
      &lt;th style=&quot;background-color: #e06666; border: 1px solid rgb(153, 153, 153); color: white; padding: 10px; text-align: left;&quot;&gt;Typical Symptoms&lt;/th&gt;
      &lt;th style=&quot;background-color: #e06666; border: 1px solid rgb(153, 153, 153); color: white; padding: 10px; text-align: left;&quot;&gt;What to Validate&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td style=&quot;border: 1px solid rgb(153, 153, 153); padding: 10px; text-align: left;&quot;&gt;&lt;code style=&quot;font-family: courier;&quot;&gt;shared_buffers&lt;/code&gt; too small&lt;/td&gt;
      &lt;td style=&quot;border: 1px solid rgb(153, 153, 153); padding: 10px; text-align: left;&quot;&gt;Repeated reads of hot relations, rising evictions, backend writes, and unstable peak latency.&lt;/td&gt;
      &lt;td style=&quot;border: 1px solid rgb(153, 153, 153); padding: 10px; text-align: left;&quot;&gt;Whether evicted pages are reused, storage latency, OS cache behavior, and available memory.&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;border: 1px solid rgb(153, 153, 153); padding: 10px; text-align: left;&quot;&gt;&lt;code style=&quot;font-family: courier;&quot;&gt;shared_buffers&lt;/code&gt; too large&lt;/td&gt;
      &lt;td style=&quot;border: 1px solid rgb(153, 153, 153); padding: 10px; text-align: left;&quot;&gt;Reduced OS cache, swap risk, memory pressure during concurrency peaks, and a larger dirty working set.&lt;/td&gt;
      &lt;td style=&quot;border: 1px solid rgb(153, 153, 153); padding: 10px; text-align: left;&quot;&gt;Full memory exposure, container limits, connection count, query memory, WAL, and checkpoints.&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;The PostgreSQL documentation suggests 25% of RAM as a reasonable starting point for a dedicated server with at least 1 GB of memory. It also notes that values above roughly 40% are unlikely to work better for most workloads because PostgreSQL relies on the operating-system cache. These are starting points, not universal targets.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Do not size from total database capacity. A 5 TB database may have a 20 GB active working set. A 200 GB reporting database may scan almost everything. The access pattern and reuse interval matter more than allocated size.&lt;/p&gt;&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;&lt;br /&gt;&lt;/p&gt;

&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;A Practical Production Scenario&lt;/h2&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;A pattern I have seen during platform migrations is a production host inheriting a lower-environment configuration. In one representative case, a server with 64 GB of RAM was running with only 512 MB of shared buffers. Query plans were unchanged, but p95 latency rose sharply during the morning peak.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;&lt;strong&gt;Problem:&lt;/strong&gt; Hot order and customer indexes were repeatedly read. &lt;code style=&quot;font-family: courier;&quot;&gt;pg_stat_io&lt;/code&gt; showed frequent evictions, storage telemetry confirmed physical reads, and client-backend writes increased during peak concurrency. The server still had safe memory headroom and no swap activity.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;&lt;strong&gt;Root cause:&lt;/strong&gt; The PostgreSQL cache was sized for a test workload, while the reusable OLTP working set was several gigabytes. The OS cache absorbed some misses but could not protect the workload when concurrent reporting started.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;&lt;strong&gt;Fix:&lt;/strong&gt; We replayed a representative workload with 8 GB and 16 GB settings, reviewed peak memory exposure, and adjusted &lt;code style=&quot;font-family: courier;&quot;&gt;max_wal_size&lt;/code&gt; to spread checkpoint-related writes. The final setting was applied during a planned restart.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;&lt;strong&gt;Result:&lt;/strong&gt; Repeated reads and evictions fell, backend writes became uncommon during the peak, and latency stabilized. The lesson was not that 25% is always correct. The improvement came from proving that a reusable working set was being displaced while the host had safe memory headroom.&lt;/p&gt;&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;&lt;br /&gt;&lt;/p&gt;

&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;SQL and Commands for Buffer Analysis&lt;/h2&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Start with configuration, database-level cache activity, and cluster I/O. Capture differences over a representative interval because cumulative counters can hide a short production incident.&lt;/p&gt;

&lt;div style=&quot;background: rgb(40, 42, 54); border-color: gray; border-image: none; border-style: solid; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;&quot;&gt;
&lt;pre style=&quot;line-height: 125%; margin: 0px;&quot;&gt;&lt;span style=&quot;color: #f8f8f2; font-family: courier; font-size: medium; font-weight: normal;&quot;&gt;&lt;span style=&quot;color: #ff79c6;&quot;&gt;SHOW&lt;/span&gt; shared_buffers;
&lt;span style=&quot;color: #ff79c6;&quot;&gt;SHOW&lt;/span&gt; block_size;

&lt;span style=&quot;color: #ff79c6;&quot;&gt;SELECT&lt;/span&gt; name, setting, unit, context, pending_restart &lt;span style=&quot;color: #ff79c6;&quot;&gt;FROM&lt;/span&gt; pg_settings &lt;span style=&quot;color: #ff79c6;&quot;&gt;WHERE&lt;/span&gt; name &lt;span style=&quot;color: #ff79c6;&quot;&gt;IN&lt;/span&gt; ( &lt;span style=&quot;color: #8be9fd;&quot;&gt;&#39;shared_buffers&#39;&lt;/span&gt;, &lt;span style=&quot;color: #8be9fd;&quot;&gt;&#39;effective_cache_size&#39;&lt;/span&gt;, &lt;span style=&quot;color: #8be9fd;&quot;&gt;&#39;work_mem&#39;&lt;/span&gt;, &lt;span style=&quot;color: #8be9fd;&quot;&gt;&#39;max_wal_size&#39;&lt;/span&gt;, &lt;span style=&quot;color: #8be9fd;&quot;&gt;&#39;checkpoint_timeout&#39;&lt;/span&gt;
) &lt;span style=&quot;color: #ff79c6;&quot;&gt;ORDER BY&lt;/span&gt; name;

&lt;span style=&quot;color: #ff79c6;&quot;&gt;SELECT&lt;/span&gt; datname,
blks_read,
blks_hit,
round(
100.0 * blks_hit /
nullif(blks_hit + blks_read, 0), 2
) &lt;span style=&quot;color: #ff79c6;&quot;&gt;AS&lt;/span&gt; shared_buffer_hit_pct &lt;span style=&quot;color: #ff79c6;&quot;&gt;FROM&lt;/span&gt; pg_stat_database &lt;span style=&quot;color: #ff79c6;&quot;&gt;WHERE&lt;/span&gt; datname &lt;span style=&quot;color: #ff79c6;&quot;&gt;IS NOT NULL&lt;/span&gt; &lt;span style=&quot;color: #ff79c6;&quot;&gt;ORDER BY&lt;/span&gt; shared_buffer_hit_pct;

&lt;span style=&quot;color: #ff79c6;&quot;&gt;SELECT&lt;/span&gt; backend_type, object, context,
reads, hits, evictions, writes, writebacks &lt;span style=&quot;color: #ff79c6;&quot;&gt;FROM&lt;/span&gt; pg_stat_io &lt;span style=&quot;color: #ff79c6;&quot;&gt;WHERE&lt;/span&gt; object = &lt;span style=&quot;color: #8be9fd;&quot;&gt;&#39;relation&#39;&lt;/span&gt; &lt;span style=&quot;color: #ff79c6;&quot;&gt;ORDER BY&lt;/span&gt; evictions &lt;span style=&quot;color: #ff79c6;&quot;&gt;DESC NULLS LAST&lt;/span&gt;;&lt;/span&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;&lt;code style=&quot;font-family: courier;&quot;&gt;pg_stat_io&lt;/code&gt; is available from PostgreSQL 16. PostgreSQL 17 introduced &lt;code style=&quot;font-family: courier;&quot;&gt;pg_stat_checkpointer&lt;/code&gt; and moved checkpoint-related fields out of &lt;code style=&quot;font-family: courier;&quot;&gt;pg_stat_bgwriter&lt;/code&gt;. Version-aware monitoring matters. Also, &lt;code style=&quot;font-family: courier;&quot;&gt;pg_stat_bgwriter&lt;/code&gt; has never been the view for calculating the cache-hit ratio.&lt;/p&gt;

&lt;h3 style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large;&quot;&gt;Query-Level and Cache Inspection&lt;/h3&gt;

&lt;div style=&quot;background: rgb(40, 42, 54); border-color: gray; border-image: none; border-style: solid; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;&quot;&gt;
&lt;pre style=&quot;line-height: 125%; margin: 0px;&quot;&gt;&lt;span style=&quot;color: #f8f8f2; font-family: courier; font-size: medium; font-weight: normal;&quot;&gt;&lt;span style=&quot;color: #ff79c6;&quot;&gt;EXPLAIN&lt;/span&gt; (ANALYZE, BUFFERS, WAL, TIMING OFF)
&lt;span style=&quot;color: #ff79c6;&quot;&gt;SELECT&lt;/span&gt; order_id, customer_id, order_status
&lt;span style=&quot;color: #ff79c6;&quot;&gt;FROM&lt;/span&gt; orders
&lt;span style=&quot;color: #ff79c6;&quot;&gt;WHERE&lt;/span&gt; customer_id = &lt;span style=&quot;color: #8be9fd;&quot;&gt;1001&lt;/span&gt;;

&lt;span style=&quot;color: #ff79c6;&quot;&gt;CREATE EXTENSION IF NOT EXISTS&lt;/span&gt; pg_buffercache;

&lt;span style=&quot;color: #ff79c6;&quot;&gt;SELECT&lt;/span&gt; count(*) &lt;span style=&quot;color: #ff79c6;&quot;&gt;AS&lt;/span&gt; total_buffers,
count(*) &lt;span style=&quot;color: #ff79c6;&quot;&gt;FILTER&lt;/span&gt; (&lt;span style=&quot;color: #ff79c6;&quot;&gt;WHERE&lt;/span&gt; relfilenode &lt;span style=&quot;color: #ff79c6;&quot;&gt;IS NOT NULL&lt;/span&gt;) &lt;span style=&quot;color: #ff79c6;&quot;&gt;AS&lt;/span&gt; used_buffers,
count(*) &lt;span style=&quot;color: #ff79c6;&quot;&gt;FILTER&lt;/span&gt; (&lt;span style=&quot;color: #ff79c6;&quot;&gt;WHERE&lt;/span&gt; isdirty) &lt;span style=&quot;color: #ff79c6;&quot;&gt;AS&lt;/span&gt; dirty_buffers,
round(avg(usagecount)::numeric, 2) &lt;span style=&quot;color: #ff79c6;&quot;&gt;AS&lt;/span&gt; avg_usage_count &lt;span style=&quot;color: #ff79c6;&quot;&gt;FROM&lt;/span&gt; pg_buffercache;&lt;/span&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;&lt;code style=&quot;font-family: courier;&quot;&gt;EXPLAIN (ANALYZE)&lt;/code&gt; executes the SQL. Do not run production DML casually to obtain buffer statistics. A plan reporting only shared hits can still be expensive if it touches hundreds of thousands of cached blocks. Logical I/O consumes CPU and can create contention.&lt;/p&gt;

&lt;h3 style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large;&quot;&gt;Operating-System Correlation and Configuration Review&lt;/h3&gt;

&lt;div style=&quot;background: rgb(40, 42, 54); border-color: gray; border-image: none; border-style: solid; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;&quot;&gt;
&lt;pre style=&quot;line-height: 125%; margin: 0px;&quot;&gt;&lt;span style=&quot;color: #f8f8f2; font-family: courier; font-size: medium; font-weight: normal;&quot;&gt;free -h
vmstat 1 10
iostat -xz 1 10

# Example values for review, not a universal recommendation

shared_buffers = &#39;16GB&#39;
effective_cache_size = &#39;44GB&#39;
max_wal_size = &#39;32GB&#39;
checkpoint_timeout = &#39;15min&#39;
checkpoint_completion_target = 0.9&lt;/span&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Check swap, run queue, device utilization, throughput, and read/write latency. Increasing shared buffers requires a restart. A substantial increase should be reviewed with WAL volume, &lt;code style=&quot;font-family: courier;&quot;&gt;max_wal_size&lt;/code&gt;, checkpoint frequency, recovery-time expectations, and disk-space planning.&lt;/p&gt;&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;&lt;br /&gt;&lt;/p&gt;

&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;Oracle Buffer Cache vs PostgreSQL&lt;/h2&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Oracle DBAs will recognize the basic design. Oracle&#39;s database buffer cache is a shared SGA component containing data blocks, while DBWn writes dirty buffers. PostgreSQL shared buffers serve a comparable purpose, but the sizing and write paths are not identical.&lt;/p&gt;

&lt;table style=&quot;border-collapse: collapse; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal; width: 100%;&quot;&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th style=&quot;background-color: #e06666; border: 1px solid rgb(153, 153, 153); color: white; padding: 10px; text-align: left;&quot;&gt;Area&lt;/th&gt;
      &lt;th style=&quot;background-color: #e06666; border: 1px solid rgb(153, 153, 153); color: white; padding: 10px; text-align: left;&quot;&gt;PostgreSQL&lt;/th&gt;
      &lt;th style=&quot;background-color: #e06666; border: 1px solid rgb(153, 153, 153); color: white; padding: 10px; text-align: left;&quot;&gt;Oracle&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td style=&quot;border: 1px solid rgb(153, 153, 153); padding: 10px; text-align: left;&quot;&gt;Primary cache&lt;/td&gt;
      &lt;td style=&quot;border: 1px solid rgb(153, 153, 153); padding: 10px; text-align: left;&quot;&gt;&lt;code style=&quot;font-family: courier;&quot;&gt;shared_buffers&lt;/code&gt;, shared across databases in one cluster.&lt;/td&gt;
      &lt;td style=&quot;border: 1px solid rgb(153, 153, 153); padding: 10px; text-align: left;&quot;&gt;Database buffer cache inside the SGA.&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;border: 1px solid rgb(153, 153, 153); padding: 10px; text-align: left;&quot;&gt;Durability&lt;/td&gt;
      &lt;td style=&quot;border: 1px solid rgb(153, 153, 153); padding: 10px; text-align: left;&quot;&gt;WAL protects changes before related data pages become durable.&lt;/td&gt;
      &lt;td style=&quot;border: 1px solid rgb(153, 153, 153); padding: 10px; text-align: left;&quot;&gt;Redo provides the corresponding instance-recovery protection.&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;border: 1px solid rgb(153, 153, 153); padding: 10px; text-align: left;&quot;&gt;Dirty-page writer&lt;/td&gt;
      &lt;td style=&quot;border: 1px solid rgb(153, 153, 153); padding: 10px; text-align: left;&quot;&gt;Background writer, checkpointer, and sometimes client backends.&lt;/td&gt;
      &lt;td style=&quot;border: 1px solid rgb(153, 153, 153); padding: 10px; text-align: left;&quot;&gt;DBWn writes dirty buffers and supports checkpoint progress.&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;border: 1px solid rgb(153, 153, 153); padding: 10px; text-align: left;&quot;&gt;Replacement&lt;/td&gt;
      &lt;td style=&quot;border: 1px solid rgb(153, 153, 153); padding: 10px; text-align: left;&quot;&gt;Clock-sweep behavior using usage counts and buffer pins.&lt;/td&gt;
      &lt;td style=&quot;border: 1px solid rgb(153, 153, 153); padding: 10px; text-align: left;&quot;&gt;LRU-based mechanisms using touch counts and internal lists.&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;border: 1px solid rgb(153, 153, 153); padding: 10px; text-align: left;&quot;&gt;Sizing model&lt;/td&gt;
      &lt;td style=&quot;border: 1px solid rgb(153, 153, 153); padding: 10px; text-align: left;&quot;&gt;Fixed at server start and deliberately leaves room for the OS cache.&lt;/td&gt;
      &lt;td style=&quot;border: 1px solid rgb(153, 153, 153); padding: 10px; text-align: left;&quot;&gt;&lt;code style=&quot;font-family: courier;&quot;&gt;DB_CACHE_SIZE&lt;/code&gt; can operate within SGA memory management such as ASMM.&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;div style=&quot;background: rgb(40, 42, 54); border-color: gray; border-image: none; border-style: solid; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;&quot;&gt;
&lt;pre style=&quot;line-height: 125%; margin: 0px;&quot;&gt;&lt;span style=&quot;color: #f8f8f2; font-family: courier; font-size: medium; font-weight: normal;&quot;&gt;&lt;span style=&quot;color: #ff79c6;&quot;&gt;SELECT&lt;/span&gt; name, display_value
&lt;span style=&quot;color: #ff79c6;&quot;&gt;FROM&lt;/span&gt; v$parameter
&lt;span style=&quot;color: #ff79c6;&quot;&gt;WHERE&lt;/span&gt; name &lt;span style=&quot;color: #ff79c6;&quot;&gt;IN&lt;/span&gt; (
  &lt;span style=&quot;color: #8be9fd;&quot;&gt;&#39;db_cache_size&#39;&lt;/span&gt;,
  &lt;span style=&quot;color: #8be9fd;&quot;&gt;&#39;sga_target&#39;&lt;/span&gt;,
  &lt;span style=&quot;color: #8be9fd;&quot;&gt;&#39;memory_target&#39;&lt;/span&gt;
);

&lt;span style=&quot;color: #ff79c6;&quot;&gt;SELECT&lt;/span&gt; name, block_size, current_size, buffers &lt;span style=&quot;color: #ff79c6;&quot;&gt;FROM&lt;/span&gt; v$buffer_pool;

&lt;span style=&quot;color: #ff79c6;&quot;&gt;SELECT&lt;/span&gt; name, physical_reads, db_block_gets, consistent_gets &lt;span style=&quot;color: #ff79c6;&quot;&gt;FROM&lt;/span&gt; v$buffer_pool_statistics;&lt;/span&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;In both products, the hit ratio can mislead. An Oracle query performing excessive consistent gets and a PostgreSQL query performing excessive shared hits can both be slow without generating many physical reads. Logical I/O is not free.&lt;/p&gt;&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;&lt;br /&gt;&lt;/p&gt;

&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
  &lt;!--Image Idea: Split diagram. PostgreSQL side shows Shared Buffers + OS Page Cache, WAL, Background Writer, Checkpointer, and Backend Writes. Oracle side shows SGA Buffer Cache, Redo, DBWn, and Checkpoint Queue. Add arrows from both caches to their data files.--&gt;
&lt;/div&gt;

&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;Common Failure and Troubleshooting Patterns&lt;/h2&gt;

&lt;h3 style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large;&quot;&gt;High Reads Immediately After Restart&lt;/h3&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;The cache is cold. Check whether read latency and IOPS fall as the workload warms the pool. Do not resize from the first few minutes unless warm-up itself breaks the service objective.&lt;/p&gt;

&lt;h3 style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large;&quot;&gt;Excellent Hit Ratio but Slow SQL&lt;/h3&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Review &lt;code style=&quot;font-family: courier;&quot;&gt;EXPLAIN (ANALYZE, BUFFERS)&lt;/code&gt;. Look for excessive block access, poor joins, missing predicates, repeated nested-loop reads, and rows removed by filters.&lt;/p&gt;

&lt;h3 style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large;&quot;&gt;Evictions Rise While the Host Has Free Memory&lt;/h3&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;This can support testing a larger pool, but first confirm that the evicted pages are needed again. A one-time sequential scan may not benefit from a permanent increase.&lt;/p&gt;

&lt;h3 style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large;&quot;&gt;Backend Writes Increase During Traffic Peaks&lt;/h3&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Review buffer pressure, background-writer activity, checkpoint timing, and storage latency together. More aggressive background cleaning may reduce backend work but can increase steady write traffic.&lt;/p&gt;

&lt;h3 style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large;&quot;&gt;Temporary Files Remain High After a Cache Increase&lt;/h3&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Shared buffers do not store sort and hash spill files. Review &lt;code style=&quot;font-family: courier;&quot;&gt;work_mem&lt;/code&gt;, plan shape, concurrency, and temporary-file logging instead of increasing the wrong memory area.&lt;/p&gt;

&lt;h3 style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large;&quot;&gt;The Server Starts Swapping&lt;/h3&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Revisit the full memory budget immediately. Include connections, parallel workers, autovacuum, per-operation memory, extensions, agents, and container limits. A larger cache is not an improvement if active PostgreSQL processes are paged out.&lt;/p&gt;&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;&lt;br /&gt;&lt;/p&gt;

&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
  &lt;!--Image Idea: Troubleshooting decision flow. Start with High PostgreSQL Reads. Branch to Just Restarted?, Storage I/O Also High?, Evictions Rising?, and Same Pages Read Repeatedly?. End with Normal Warm-Up, OS Cache Service, Query Tuning, Buffer Resize Test, and Storage Investigation.--&gt;
&lt;/div&gt;

&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;Lessons From the Field&lt;/h2&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;The first common mistake is treating 25% of RAM as a finished design. It is only a starting point. The useful cache size depends on reuse, concurrency, the OS cache, storage, and the memory needed outside the buffer pool.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;The second mistake is tuning from cumulative ratios. Capture deltas during the incident window. Separate restart warm-up, reporting, autovacuum, backup activity, and business traffic. One percentage covering all of them is rarely actionable.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;The third mistake is increasing memory before reviewing SQL. Cached block access still consumes CPU. A missing index or poor join remains expensive even if every required page is already in memory.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Finally, watch the write side. Backend writes, requested checkpoints, dirty-buffer volume, and storage sync latency can explain application spikes that a cache-hit ratio cannot. The real target is stable latency with predictable memory and I/O behavior at peak load.&lt;/p&gt;

&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;Quick Takeaways&lt;/h2&gt;

&lt;ul style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;
  &lt;li style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Shared buffers cache relation pages and hold the normal working pages modified by DML.&lt;/li&gt;
  &lt;li style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;A shared-buffer miss is not proof of physical storage I/O.&lt;/li&gt;
  &lt;li style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Dirty buffers can be written by the background writer, checkpointer, or a client backend.&lt;/li&gt;
  &lt;li style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;A high cache-hit ratio does not prove that a query is efficient.&lt;/li&gt;
  &lt;li style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Size for reusable working data and the full memory budget, not total database size.&lt;/li&gt;
  &lt;li style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Review WAL and checkpoint behavior when substantially increasing the pool.&lt;/li&gt;
  &lt;li style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Correlate PostgreSQL statistics with operating-system and storage telemetry.&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: medium;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;

&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;Frequently Asked Questions&lt;/h2&gt;

&lt;h3 style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large;&quot;&gt;Should shared_buffers always be 25% of RAM?&lt;/h3&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;No. Use it as a starting point for a dedicated server, then validate working-set reuse, OS memory, concurrency, checkpoints, and storage performance. Managed platforms may calculate or restrict the value differently.&lt;/p&gt;

&lt;h3 style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large;&quot;&gt;Why is the hit ratio low when storage latency is normal?&lt;/h3&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;The operating-system page cache may be satisfying PostgreSQL reads. The workload may also contain expected sequential or bulk reads. Compare PostgreSQL counters with device I/O.&lt;/p&gt;

&lt;h3 style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large;&quot;&gt;Will increasing shared_buffers eliminate disk reads?&lt;/h3&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;No. Cold starts, one-time scans, changing access patterns, and datasets larger than memory still generate reads. Poor SQL can also touch more blocks than any sensible cache should retain.&lt;/p&gt;

&lt;h3 style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large;&quot;&gt;Can the setting be changed without a restart?&lt;/h3&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;No. It is a server-start parameter. Check &lt;code style=&quot;font-family: courier;&quot;&gt;pg_settings.pending_restart&lt;/code&gt; to confirm whether a configured change is waiting for restart.&lt;/p&gt;

&lt;h3 style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large;&quot;&gt;Which view should be used for cache hits?&lt;/h3&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Use &lt;code style=&quot;font-family: courier;&quot;&gt;pg_stat_database&lt;/code&gt; for database-level hits, &lt;code style=&quot;font-family: courier;&quot;&gt;pg_statio_*&lt;/code&gt; for relations, &lt;code style=&quot;font-family: courier;&quot;&gt;EXPLAIN (BUFFERS)&lt;/code&gt; for a query, and &lt;code style=&quot;font-family: courier;&quot;&gt;pg_stat_io&lt;/code&gt; for cluster I/O by backend type and context.&lt;/p&gt;&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;&lt;br /&gt;&lt;/p&gt;

&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;Conclusion&lt;/h2&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Shared buffers sit at the center of PostgreSQL&#39;s normal table and index I/O path. They reduce repeated reads, hold pages changed by DML, and connect directly to WAL, checkpoints, background writing, and crash recovery. That makes &lt;code style=&quot;font-family: courier;&quot;&gt;shared_buffers&lt;/code&gt; one of the first parameters DBAs inspect, but it should not become the automatic answer to every performance problem.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;An undersized pool can repeatedly evict useful pages and expose applications to storage latency. An oversized pool can starve the operating system, increase total memory risk, and complicate write behavior. A cache hit avoids a PostgreSQL file read, but it does not make query processing free. A cache miss may still be served from kernel memory. These details explain why a cache-hit percentage alone is weak tuning evidence.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Start with a sensible allocation, then measure the workload that matters. Capture short-interval changes in reads, hits, evictions, backend writes, checkpoints, and storage latency. Review which relations and SQL statements are responsible. Test changes under realistic concurrency, leave headroom for the OS and per-session memory, and compare the same metrics after restart and cache warm-up.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Review your current setting, prove whether hot pages are being displaced, and confirm the finding outside PostgreSQL before scheduling a restart. Measure, test, change, and monitor. Do not size the buffer cache from folklore.&lt;/p&gt;

&lt;h2 style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;&lt;span style=&quot;font-size: large; font-weight: normal;&quot;&gt;Have you handled an incident caused by buffer churn, backend writes, or an oversized memory setting? Share the evidence you used and whether resizing the pool actually fixed the problem.&lt;/span&gt;&lt;/h2&gt;&lt;div&gt;&lt;span style=&quot;font-size: large; font-weight: normal;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;

&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;References&lt;/h2&gt;

&lt;ul style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;
  &lt;li style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;&lt;a href=&quot;https://www.postgresql.org/docs/current/runtime-config-resource.html&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;PostgreSQL Documentation: Resource Consumption&lt;/a&gt;&lt;/li&gt;
  &lt;li style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;&lt;a href=&quot;https://www.postgresql.org/docs/current/monitoring-stats.html&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;PostgreSQL Documentation: Cumulative Statistics&lt;/a&gt;&lt;/li&gt;
  &lt;li style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;&lt;a href=&quot;https://www.postgresql.org/docs/current/pgbuffercache.html&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;PostgreSQL Documentation: pg_buffercache&lt;/a&gt;&lt;/li&gt;
  &lt;li style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;&lt;a href=&quot;https://docs.oracle.com/en/database/oracle/oracle-database/26/dbiad/db_dbbuffercache.html&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;Oracle Database Documentation: Buffer Cache&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description><link>https://oracle-dba-help.blogspot.com/2026/09/postgresql-shared-buffers-production.html</link><author>noreply@blogger.com (Nikhil Kotak)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiGLvYKdw9MfmaSkMoYWatHViy8A2H0uIFUkW3E6fWvjYX4wcbpohC9Q_9lDQyrQ_xvqs9LNaU8mx3TFxSSrP6oCTx8GKoUqNGEn4fR8oNuyEQ6i682Ami0i_frQu1TkBSKisCxxD9grwrplXxD8fUzfg65uycWcveyuoEanWFJQHfABJHkz4FAGxz5214/s72-w868-h485-c/postgresql-shared-buffers-read-path.png" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1375587508974804970.post-455834374851991197</guid><pubDate>Mon, 21 Sep 2026 14:24:08 +0000</pubDate><atom:updated>2026-09-22T16:40:27.385+08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Interview Questions</category><category domain="http://www.blogger.com/atom/ns#">Must Read</category><category domain="http://www.blogger.com/atom/ns#">RAC</category><title>Oracle RAC - Oracle DBA Interview Questions with Practical Answers</title><description>&lt;div style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;
Oracle DBA interviews, especially for senior roles, usually go beyond definitions. The discussion often moves quickly into troubleshooting, recovery, RAC, Data Guard, patching, GoldenGate, and real production scenarios.
&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;
Below are some recent Oracle DBA interview questions reportedly asked in a product-based organization, along with practical answers and the checks I would expect a DBA to discuss during an interview.&lt;span&gt;&lt;/span&gt;&lt;/p&gt;&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;
&lt;p&gt;&lt;/p&gt;

&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;1. Explain the Oracle RAC startup sequence.&lt;/h2&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;
RAC startup is dependency-driven. Oracle does not simply start the database instances first.
&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;
A simplified startup sequence is:
&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;
&lt;strong&gt;OHASD → CSSD / CRSD / EVMD → ASM → VIP / Listener / SCAN → Database Instances → Services&lt;/strong&gt;
&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;
Clusterware first establishes cluster membership and access to voting resources. ASM must be available before the database can access its files. Database instances and application services are then started according to Clusterware resource dependencies.
&lt;/p&gt;

&lt;pre style=&quot;background-color: whitesmoke; border: 1px solid rgb(221, 221, 221); overflow-x: auto; padding: 12px;&quot;&gt;&lt;code&gt;crsctl check crs
crsctl stat res -t
srvctl status database -d &amp;lt;db_unique_name&amp;gt;&lt;/code&gt;&lt;/pre&gt;

&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;2. What are the ways to resolve lag in a standby database?&lt;/h2&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;
The first step is to determine whether the problem is &lt;strong&gt;transport lag&lt;/strong&gt; or &lt;strong&gt;apply lag&lt;/strong&gt;.
&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;
For transport lag, I would check redo shipping, archive destination errors, network latency, archive gaps and standby redo log configuration. For apply lag, I would check managed recovery, CPU and I/O pressure on the standby, recovery waits and whether real-time apply is being used.
&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;
Useful views include:
&lt;/p&gt;

&lt;pre style=&quot;background-color: whitesmoke; border: 1px solid rgb(221, 221, 221); overflow-x: auto; padding: 12px;&quot;&gt;&lt;code&gt;V$DATAGUARD_STATS
V$ARCHIVE_DEST_STATUS
V$ARCHIVED_LOG
V$DATAGUARD_PROCESS&lt;/code&gt;&lt;/pre&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;
Restarting MRP may recover a stopped recovery process, but it should not be treated as the solution until the actual reason for the lag is understood.
&lt;/p&gt;

&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;3. Explain the export steps for an audit trail table.&lt;/h2&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;
The approach depends on whether the database uses traditional auditing or Unified Auditing.
&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;
For Unified Auditing, the required records can be selected from &lt;code&gt;UNIFIED_AUDIT_TRAIL&lt;/code&gt; into an archive table and that table can then be exported using Data Pump.
&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;
For traditional auditing, &lt;code&gt;SYS.AUD$&lt;/code&gt; may be involved, but audit management should preferably be performed using &lt;code&gt;DBMS_AUDIT_MGMT&lt;/code&gt; rather than directly manipulating SYS-owned audit tables.
&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;
Before exporting, I would define the required date range and scope so that unnecessary historical audit data is not included.
&lt;/p&gt;

&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;4. Explain important RAC background processes.&lt;/h2&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;
Some important RAC-specific processes are:
&lt;/p&gt;

&lt;ul style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;
&lt;li&gt;&lt;strong&gt;LMON&lt;/strong&gt; – Monitors Global Enqueue Service activity and participates in cluster reconfiguration.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;LMD&lt;/strong&gt; – Handles global enqueue requests and global deadlock detection.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;LMS&lt;/strong&gt; – Handles Cache Fusion block transfers between RAC instances.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;LMHB&lt;/strong&gt; – Monitors RAC lock-management processes and detects hangs.&lt;/li&gt;
&lt;/ul&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;
These processes work with the Global Cache Service and Global Enqueue Service to coordinate resources across RAC instances.
&lt;/p&gt;

&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;5. If STANDBY_FILE_MANAGEMENT is MANUAL, what happens when a datafile is added on primary?&lt;/h2&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;
The standby does not automatically create and manage the corresponding datafile.
&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;
During managed recovery, Oracle may register the new file using a name such as &lt;code&gt;UNNAMEDxxxxx&lt;/code&gt;, and recovery can stop because the expected standby datafile does not exist.
&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;
After identifying the file number and correct destination, the file can be created at the required standby location and managed recovery restarted.
&lt;/p&gt;

&lt;pre style=&quot;background-color: whitesmoke; border: 1px solid rgb(221, 221, 221); overflow-x: auto; padding: 12px;&quot;&gt;&lt;code&gt;ALTER DATABASE CREATE DATAFILE
&#39;&amp;lt;UNNAMED_file&amp;gt;&#39;
AS &#39;&amp;lt;standby_datafile_path&amp;gt;&#39;;&lt;/code&gt;&lt;/pre&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;
With &lt;code&gt;STANDBY_FILE_MANAGEMENT=AUTO&lt;/code&gt;, Oracle can normally handle new files automatically when OMF or the relevant filename conversion configuration is correct.
&lt;/p&gt;

&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;6. A dump contains 10 schemas. How would you import only one?&lt;/h2&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;
Use the &lt;code&gt;SCHEMAS&lt;/code&gt; parameter with Data Pump Import.
&lt;/p&gt;

&lt;pre style=&quot;background-color: whitesmoke; border: 1px solid rgb(221, 221, 221); overflow-x: auto; padding: 12px;&quot;&gt;&lt;code&gt;impdp system/***** \
DIRECTORY=DP_DIR \
DUMPFILE=exp.dmp \
SCHEMAS=HR&lt;/code&gt;&lt;/pre&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;
If the schema has to be imported under a different name:
&lt;/p&gt;

&lt;pre style=&quot;background-color: whitesmoke; border: 1px solid rgb(221, 221, 221); overflow-x: auto; padding: 12px;&quot;&gt;&lt;code&gt;REMAP_SCHEMA=HR:HR_TEST&lt;/code&gt;&lt;/pre&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;
If the requirement is actually to import only one table, then &lt;code&gt;TABLES&lt;/code&gt; should be used instead. A table can also be renamed during import using &lt;code&gt;REMAP_TABLE&lt;/code&gt;.
&lt;/p&gt;

&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;7. What causes a split-brain scenario?&lt;/h2&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;
Split brain can occur when RAC nodes lose communication with each other while individual nodes remain alive and believe they can continue servicing the database.
&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;
Possible causes include private interconnect failure, network partitioning, severe latency, OS hangs, heartbeat failures or voting-disk accessibility problems.
&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;
Oracle Clusterware protects the cluster using network and disk heartbeats. A node that cannot maintain valid cluster membership can be evicted to protect database integrity.
&lt;/p&gt;

&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;8. If the whole RAC cluster goes down, how would you bring it back?&lt;/h2&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;
I would first determine why the cluster went down rather than immediately attempting database startup.
&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;
The basic validation order would be:
&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;
&lt;strong&gt;Servers → Storage → Interconnect → Voting/OCR → Clusterware → ASM → Listeners → Database → Services&lt;/strong&gt;
&lt;/p&gt;

&lt;pre style=&quot;background-color: whitesmoke; border: 1px solid rgb(221, 221, 221); overflow-x: auto; padding: 12px;&quot;&gt;&lt;code&gt;crsctl check crs
crsctl start crs
crsctl stat res -t&lt;/code&gt;&lt;/pre&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;
After recovery, I would verify instance status, ASM disk groups, services and both Clusterware and database alert logs to understand the original failure.
&lt;/p&gt;

&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;9. Explain Cache Fusion.&lt;/h2&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;
Cache Fusion allows RAC instances to transfer database blocks directly between their buffer caches through the private interconnect.
&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;
If Instance 1 has the required current block and Instance 2 requests it, Oracle can transfer the block through the interconnect instead of forcing Instance 1 to write it to disk and Instance 2 to read it back.
&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;
The Global Cache Service manages block ownership and LMS processes participate in the block transfer.
&lt;/p&gt;

&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;10. Explain Oracle patching steps.&lt;/h2&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;
A production patching activity normally follows this sequence:
&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;
&lt;strong&gt;Read README → Compatibility check → OPatch validation → Inventory check → Prerequisite checks → Backup → Apply patch → Start services → Run datapatch → Validate&lt;/strong&gt;
&lt;/p&gt;

&lt;pre style=&quot;background-color: whitesmoke; border: 1px solid rgb(221, 221, 221); overflow-x: auto; padding: 12px;&quot;&gt;&lt;code&gt;opatch lsinventory

datapatch -verbose&lt;/code&gt;&lt;/pre&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;
After patching, I would verify &lt;code&gt;DBA_REGISTRY_SQLPATCH&lt;/code&gt;, database and Clusterware logs, component status and application connectivity.
&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;
For RAC and Grid Infrastructure, whether the patch can be applied in rolling mode depends on the specific patch and Oracle&#39;s documented instructions.
&lt;/p&gt;

&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;11. I have a full database backup in two different locations. How would you restore the database?&lt;/h2&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;
First I would make sure RMAN can see the required backup pieces. If the backup files have been moved or copied, they may need to be cataloged.
&lt;/p&gt;

&lt;pre style=&quot;background-color: whitesmoke; border: 1px solid rgb(221, 221, 221); overflow-x: auto; padding: 12px;&quot;&gt;&lt;code&gt;CATALOG START WITH &#39;&amp;lt;backup_location&amp;gt;&#39;;

RESTORE DATABASE;
RECOVER DATABASE;&lt;/code&gt;&lt;/pre&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;
The complete sequence may include restoring the SPFILE and controlfile, mounting the database, cataloging backup pieces, restoring datafiles, recovering the database and finally opening it.
&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;
If incomplete recovery is performed or a backup controlfile is involved, opening with &lt;code&gt;RESETLOGS&lt;/code&gt; may be required.
&lt;/p&gt;

&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;12. Normally 100 processes run, but during peak hours it suddenly becomes 300. What would you check?&lt;/h2&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;
I would first identify where those additional connections came from instead of immediately increasing the &lt;code&gt;PROCESSES&lt;/code&gt; parameter.
&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;
I would group sessions by username, machine, program, module, service and session status.
&lt;/p&gt;

&lt;pre style=&quot;background-color: whitesmoke; border: 1px solid rgb(221, 221, 221); overflow-x: auto; padding: 12px;&quot;&gt;&lt;code&gt;V$SESSION
GV$SESSION
V$RESOURCE_LIMIT&lt;/code&gt;&lt;/pre&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;
Then I would investigate connection-pool behaviour, application connection leaks, batch jobs, deployments, idle session accumulation, blocking sessions, listener connection storms and CPU or memory pressure.
&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;
ASH and AWR can also help establish what changed during the spike.
&lt;/p&gt;

&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;13. What are the different switchover statuses and what do they mean?&lt;/h2&gt;

&lt;pre style=&quot;background-color: whitesmoke; border: 1px solid rgb(221, 221, 221); overflow-x: auto; padding: 12px;&quot;&gt;&lt;code&gt;SELECT switchover_status
FROM v$database;&lt;/code&gt;&lt;/pre&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;
Some important values are:
&lt;/p&gt;

&lt;ul style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;
&lt;li&gt;&lt;strong&gt;TO STANDBY&lt;/strong&gt; – Primary is ready to transition to standby.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;SESSIONS ACTIVE&lt;/strong&gt; – Switchover is possible, but active sessions are present.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;TO PRIMARY&lt;/strong&gt; – Standby is ready to become primary.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;RECOVERY NEEDED&lt;/strong&gt; – Additional redo must be applied before the transition.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;NOT ALLOWED&lt;/strong&gt; – The database is not currently ready for the requested transition.&lt;/li&gt;
&lt;/ul&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;
Other statuses can appear depending on redo gaps or the current stage of the switchover. The important point is to understand why the role transition is or is not currently possible.
&lt;/p&gt;

&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;14. What happens when active sessions are disconnected during switchover?&lt;/h2&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;
When the switchover is performed using the option that allows active sessions to be disconnected, Oracle can proceed with the role transition even when user sessions still exist.
&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;
Those sessions are disconnected and any uncommitted transactions may require rollback. Oracle then completes the required role-transition processing and updates the database role.
&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;
In production, application connections should still be drained gracefully wherever possible before the switchover.
&lt;/p&gt;

&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;15. Explain Oracle GoldenGate processes.&lt;/h2&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;
In a traditional GoldenGate architecture, the logical flow is:
&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;
&lt;strong&gt;Source Database → Extract → Local Trail → Data Pump → Remote Trail → Replicat → Target Database&lt;/strong&gt;
&lt;/p&gt;

&lt;ul style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;
&lt;li&gt;&lt;strong&gt;Manager&lt;/strong&gt; – Manages GoldenGate processes.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Extract&lt;/strong&gt; – Captures database changes.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Data Pump&lt;/strong&gt; – Optionally sends trail data to the target environment.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Trail Files&lt;/strong&gt; – Store captured change records.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Replicat&lt;/strong&gt; – Applies changes to the target database.&lt;/li&gt;
&lt;/ul&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;
Integrated Extract also uses Oracle database mining infrastructure to capture changes from redo.
&lt;/p&gt;

&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;16. What are the steps to drop an Oracle database?&lt;/h2&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;
Before dropping a database, I would confirm the database identity, verify approvals and make sure any required backups have been retained.
&lt;/p&gt;

&lt;pre style=&quot;background-color: whitesmoke; border: 1px solid rgb(221, 221, 221); overflow-x: auto; padding: 12px;&quot;&gt;&lt;code&gt;STARTUP FORCE MOUNT RESTRICT;

DROP DATABASE;&lt;/code&gt;&lt;/pre&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;
For RAC, the database configuration may also need to be removed from Clusterware using the appropriate &lt;code&gt;srvctl&lt;/code&gt; command.
&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;
Archived logs, RMAN backups, diagnostic files and other external configuration may require separate cleanup depending on the decommissioning procedure.
&lt;/p&gt;

&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;17. What redo and Data Guard parameters are normally configured?&lt;/h2&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;
Common Data Guard parameters include:
&lt;/p&gt;

&lt;pre style=&quot;background-color: whitesmoke; border: 1px solid rgb(221, 221, 221); overflow-x: auto; padding: 12px;&quot;&gt;&lt;code&gt;DB_UNIQUE_NAME
LOG_ARCHIVE_CONFIG
LOG_ARCHIVE_DEST_n
LOG_ARCHIVE_DEST_STATE_n
FAL_SERVER
STANDBY_FILE_MANAGEMENT
DB_FILE_NAME_CONVERT
LOG_FILE_NAME_CONVERT&lt;/code&gt;&lt;/pre&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;
The filename-conversion parameters are particularly relevant when primary and standby file locations differ and Oracle Managed Files are not being used.
&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;
I would also verify FORCE LOGGING, standby redo logs, password-file synchronization and redo transport configuration because Data Guard readiness is not only about initialization parameters.
&lt;/p&gt;

&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;18. Explain manual Grid Infrastructure patching steps.&lt;/h2&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;
The exact sequence should always come from the README supplied with the specific Grid Infrastructure Release Update.
&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;
For a rolling manual patch, the general approach is:
&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;
&lt;strong&gt;Prerequisite checks → Backup configuration → Prepatch → Patch Grid Home → Postpatch → Validate node → Continue with next node&lt;/strong&gt;
&lt;/p&gt;

&lt;pre style=&quot;background-color: whitesmoke; border: 1px solid rgb(221, 221, 221); overflow-x: auto; padding: 12px;&quot;&gt;&lt;code&gt;rootcrs.sh -prepatch

# Apply the required patch using the procedure
# documented for the specific RU.

rootcrs.sh -postpatch

crsctl stat res -t
opatch lsinventory&lt;/code&gt;&lt;/pre&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;
Once a node is healthy, the same procedure can be performed on the remaining nodes. If database homes are also patched, the required SQL patching with &lt;code&gt;datapatch&lt;/code&gt; must also be completed.
&lt;/p&gt;

&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;19. Even after killing a session, why might it still appear?&lt;/h2&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;
Executing &lt;code&gt;ALTER SYSTEM KILL SESSION&lt;/code&gt; does not necessarily mean that the corresponding operating-system process disappears immediately.
&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;
A session can remain in &lt;code&gt;KILLED&lt;/code&gt; state while Oracle completes cleanup.
&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;
Possible reasons include a large transaction rollback, PMON cleanup, an OS-level process stuck in an I/O call, network waits, distributed transaction cleanup or another uninterruptible operation.
&lt;/p&gt;

&lt;pre style=&quot;background-color: whitesmoke; border: 1px solid rgb(221, 221, 221); overflow-x: auto; padding: 12px;&quot;&gt;&lt;code&gt;V$SESSION
V$PROCESS
V$TRANSACTION&lt;/code&gt;&lt;/pre&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;
In RAC, I would also confirm which instance owns the session before attempting further action. Killing the operating-system process should only be considered after identifying exactly what that process is doing.
&lt;/p&gt;

&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;One Point Worth Remembering During DBA Interviews&lt;/h2&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;
For experienced DBA roles, knowing the command is usually only the beginning of the discussion.
&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;
The next questions are often:
&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;
&lt;strong&gt;How would you verify it?&lt;/strong&gt;&lt;br /&gt;
&lt;strong&gt;Which view or log would you check?&lt;/strong&gt;&lt;br /&gt;
&lt;strong&gt;What if the first solution does not work?&lt;/strong&gt;&lt;br /&gt;
&lt;strong&gt;How would you validate the database after the change?&lt;/strong&gt;
&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;
A practical way to structure most troubleshooting answers is:
&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal; text-align: center;&quot;&gt;
&lt;strong&gt;Symptom → Evidence → Component → Action → Validation&lt;/strong&gt;
&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;
That usually makes the difference between giving a memorized answer and showing how you would actually handle the situation as a DBA.
&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;
Have you encountered any of these questions in an Oracle DBA interview? And more importantly, how many of these scenarios have you actually tested in your own lab or environment? 🙂
&lt;/p&gt;

&lt;/div&gt;
</description><link>https://oracle-dba-help.blogspot.com/2026/09/oracle-rac-oracle-dba-interview.html</link><author>noreply@blogger.com (Nikhil Kotak)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1375587508974804970.post-6938129760613756304</guid><pubDate>Mon, 21 Sep 2026 08:02:02 +0000</pubDate><atom:updated>2026-09-21T18:50:35.412+08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">26ai</category><category domain="http://www.blogger.com/atom/ns#">AI</category><category domain="http://www.blogger.com/atom/ns#">Core DBA</category><category domain="http://www.blogger.com/atom/ns#">Exam Prep</category><title>My Learning and Exam Experience – Oracle  Agentic AI Foundations Associate [1Z0-1157-26]</title><description>&lt;p&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;I recently completed the &lt;/span&gt;&lt;strong style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;Oracle 1Z0-1157-26 – Agentic AI Foundations Associate&lt;/strong&gt;&lt;span style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt; exam.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro;&quot;&gt;I had been reading and learning about AI agents, MCP, vector search and some of the newer AI capabilities around Oracle for a while, so this certification came at a good time. I decided to go through the complete learning path rather than preparing only from an exam point of view.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;And I think that is the right way to approach this one.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;h2&gt;&lt;span&gt;&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;/span&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: medium;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/h2&gt;&lt;h2&gt;&lt;span style=&quot;color: #e06666; font-family: Source Sans Pro; font-size: large;&quot;&gt;What I liked about this course&lt;/span&gt;&lt;/h2&gt;&lt;p&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro;&quot;&gt;One thing I liked is that the course does not assume that everyone already understands how an AI agent works.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;It starts with a fairly simple question: &lt;/span&gt;&lt;strong style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;what actually makes something an AI agent?&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro;&quot;&gt;From there, it introduces the role of the LLM, tools and the orchestration loop, and then moves into reasoning patterns such as Chain-of-Thought and ReAct, along with safety and guardrails.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;That foundation helps because the later topics make much more sense once you understand the basic agent execution flow.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro;&quot;&gt;The course then moves through &lt;strong&gt;LangChain, Model Context Protocol (MCP), OpenAI Responses API and Agents SDK, OCI Enterprise AI Agents, and finally Agentic AI capabilities around Oracle AI Database&lt;/strong&gt;.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;It is not only about learning definitions. Oracle&#39;s current course also includes practical exposure to building AI agents and understanding how these pieces fit together. (Refer &amp;gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://mylearn.oracle.com/ou/course/oracle-agentic-ai-foundations/163240&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot; title=&quot;Oracle MyLearn&quot;&gt;Oracle MyLearn&lt;/a&gt;&lt;span style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;h2&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: medium;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/h2&gt;&lt;h2&gt;&lt;span style=&quot;color: #e06666; font-family: Source Sans Pro; font-size: large;&quot;&gt;MCP was one of the interesting parts for me&lt;/span&gt;&lt;/h2&gt;&lt;p&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: medium;&quot;&gt;Before going through this learning path, MCP was something I had seen mentioned more and more whenever AI agents were discussed.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: medium;&quot;&gt;The course gives a good foundation around &lt;strong&gt;MCP hosts, clients, servers, tools, resources and prompts&lt;/strong&gt;, along with JSON-RPC messaging and the different transport options.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: medium;&quot;&gt;Understanding MCP also makes it easier to see why it is becoming relevant. Instead of every AI application building its own custom integration for every external tool or data source, MCP provides a standard way for these components to communicate.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: medium;&quot;&gt;For anyone starting with Agentic AI, I think this is an area worth spending some extra time on rather than just remembering the terminology for the exam.&lt;/span&gt;&lt;/p&gt;&lt;h2&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: medium;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/h2&gt;&lt;h2&gt;&lt;span style=&quot;color: #e06666; font-family: Source Sans Pro; font-size: large;&quot;&gt;The Oracle Database part made it more relevant&lt;/span&gt;&lt;/h2&gt;&lt;p&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: medium;&quot;&gt;The later part of the course was particularly interesting because it brings Agentic AI closer to the database.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: medium;&quot;&gt;It covers &lt;i&gt;&lt;strong&gt;Oracle AI Vector Search, vector embeddings, similarity search, document chunking, Select AI, Private Agent Factory and the Autonomous AI Database MCP Server&lt;/strong&gt;.&lt;/i&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro;&quot;&gt;This is where some of the concepts from the earlier modules start connecting together.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;You first learn what an agent is, how it calls tools and how MCP works. Then you see how similar ideas can be used with enterprise data sitting inside Oracle AI Database.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: medium;&quot;&gt;For database professionals, I think this part is especially useful because AI is no longer something completely separate from the database world. We are gradually seeing these capabilities getting closer to where enterprise data actually resides.&lt;/span&gt;&lt;/p&gt;&lt;h2&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: medium;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/h2&gt;&lt;h2&gt;&lt;span style=&quot;color: #e06666; font-family: Source Sans Pro; font-size: large;&quot;&gt;About the 1Z0-1157-26 exam&lt;/span&gt;&lt;/h2&gt;&lt;p&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: medium;&quot;&gt;The exam format is quite straightforward:&lt;/span&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;p&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: medium;&quot;&gt;&lt;strong&gt;Exam:&lt;/strong&gt; 1Z0-1157-26 – Agentic AI Foundations Associate&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: medium;&quot;&gt;&lt;strong&gt;Questions:&lt;/strong&gt; 40&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: medium;&quot;&gt;&lt;strong&gt;Duration:&lt;/strong&gt; 60 minutes&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: medium;&quot;&gt;&lt;strong&gt;Passing score:&lt;/strong&gt; 65%&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro;&quot;&gt;The questions are mostly foundation and concept-oriented, but I would not recommend relying only on memorizing definitions.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;You should understand things such as what happens during an agent loop, how tools are invoked, the difference between various MCP components, how handoffs work between agents, the purpose of guardrails, and the basic workflow behind embeddings and vector search.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: medium;&quot;&gt;Oracle&#39;s learning path also includes skill checks, exam-preparation material and a practice exam before the certification exam. The certification is currently offered free of charge. (&lt;a href=&quot;https://blogs.oracle.com/oracleuniversity/oracle-agentic-ai-foundations-training-certification-now-available?utm_source=chatgpt.com&quot; title=&quot;Oracle Agentic AI Foundations: Get skilled for the Agentic AI Era | oracleuniversity&quot;&gt;Oracle Blogs&lt;/a&gt;)&lt;/span&gt;&lt;/p&gt;&lt;h2&gt;&lt;span style=&quot;font-family: Source Sans Pro;&quot;&gt;&lt;br /&gt;&lt;span style=&quot;color: #e06666; font-size: large;&quot;&gt;How I would prepare&lt;/span&gt;&lt;/span&gt;&lt;/h2&gt;&lt;p&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: medium;&quot;&gt;My suggestion would be to complete the learning material first and then use the practice exam to identify areas where the concepts are still not completely clear.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: medium;&quot;&gt;&lt;u&gt;I would pay particular attention to&lt;/u&gt;&amp;nbsp; -- &amp;gt;&amp;nbsp; agent architecture and execution flow, LangChain tools and agents, MCP architecture, OpenAI Agents SDK concepts, OCI Enterprise AI Agents, embeddings and Oracle AI Vector Search.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro;&quot;&gt;For several topics, understanding &lt;em&gt;why&lt;/em&gt; a particular component exists is more useful than simply remembering what it is called.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;That approach also makes the learning useful after the certification is finished.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;h2&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: medium;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/h2&gt;&lt;h2&gt;&lt;span style=&quot;color: #e06666; font-family: Source Sans Pro; font-size: large;&quot;&gt;Should you take this course ?&lt;/span&gt;&lt;/h2&gt;&lt;p&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: medium;&quot;&gt;I would encourage anyone who is curious about &lt;strong&gt;Agentic AI&lt;/strong&gt; to go through this course.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: medium;&quot;&gt;You do not necessarily need to be working as an AI or ML engineer to get value from it. If you are working with databases, cloud infrastructure, development, DevOps/SRE or OCI, it gives you a good starting point for understanding where AI agents are heading and how they can interact with existing enterprise systems.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: medium;&quot;&gt;Oracle describes the course as a practical introduction that starts from first principles and then works through LangChain, OpenAI Agents SDK, MCP, OCI Enterprise AI Agents and Oracle AI Database.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro;&quot;&gt;That is probably the part I liked most about it: you don&#39;t have to begin as an Agentic AI expert.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;Start with the fundamentals, understand how an agent works, and the rest of the pieces gradually start making sense.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;h2&gt;&lt;span style=&quot;color: #e06666; font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/h2&gt;&lt;h2&gt;&lt;span style=&quot;color: #e06666; font-family: Source Sans Pro; font-size: large;&quot;&gt;My Recommendation&lt;/span&gt;&lt;/h2&gt;&lt;p&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: medium;&quot;&gt;If Agentic AI is something you have been hearing about but haven&#39;t yet found a structured place to start, I would definitely recommend giving this learning path a try.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro;&quot;&gt;And I would not approach it only with the goal of clearing &lt;strong&gt;1Z0-1157-26&lt;/strong&gt;.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;Take some time to understand the agent loop. Build something small. Understand why tools are needed. Look at how MCP connects systems, and then see how those same ideas are being brought into OCI and Oracle AI Database.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: medium;&quot;&gt;The certification is a nice milestone at the end, but the real value is understanding how these technologies are beginning to fit together.&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: medium;&quot;&gt;If you have been planning to start learning Agentic AI, this is a good course to begin with.&lt;/span&gt;&lt;/p&gt;&lt;h2&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: medium;&quot;&gt;References&lt;/span&gt;&lt;/h2&gt;&lt;p&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: medium;&quot;&gt;&lt;strong&gt;Oracle Agentic AI Foundations (2026) – Oracle MyLearn&lt;/strong&gt;&lt;br /&gt;&lt;a href=&quot;https://mylearn.oracle.com/ou/course/oracle-agentic-ai-foundations/163240&quot;&gt;Oracle Agentic AI Foundations course&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: medium;&quot;&gt;&lt;strong&gt;Oracle University – Agentic AI Foundations Training &amp;amp; Certification&lt;/strong&gt;&lt;br /&gt;&lt;a href=&quot;https://blogs.oracle.com/oracleuniversity/oracle-agentic-ai-foundations-training-certification-now-available?&quot;&gt;Oracle Agentic AI Foundations: Get skilled for the Agentic AI Era&lt;/a&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEiodFF41NUDuGoz2Py9xv5YtIJ8u0iSpa3Q44zLafPKtidUpWWi7aomODqxd4Wv-pEgDGjmU9PCkX1MMi10-BuyI9S4RAH74bR_lE3SsWt4Bs1kPTnjfet5SQiVjzLhJ3SdDE05guQg6nCl-AfhcPVbXOz0oFS7O46k7gXgMgzNrz3geehysKKguIladGA&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img alt=&quot;&quot; data-original-height=&quot;797&quot; data-original-width=&quot;1157&quot; height=&quot;679&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEiodFF41NUDuGoz2Py9xv5YtIJ8u0iSpa3Q44zLafPKtidUpWWi7aomODqxd4Wv-pEgDGjmU9PCkX1MMi10-BuyI9S4RAH74bR_lE3SsWt4Bs1kPTnjfet5SQiVjzLhJ3SdDE05guQg6nCl-AfhcPVbXOz0oFS7O46k7gXgMgzNrz3geehysKKguIladGA=w986-h679&quot; width=&quot;986&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;p&gt;&lt;span style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large;&quot;&gt;Cheers..! 🫡🙌😊&lt;/span&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;</description><link>https://oracle-dba-help.blogspot.com/2026/09/oracle-1z0-1157-26-agentic-ai.html</link><author>noreply@blogger.com (Nikhil Kotak)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/a/AVvXsEiodFF41NUDuGoz2Py9xv5YtIJ8u0iSpa3Q44zLafPKtidUpWWi7aomODqxd4Wv-pEgDGjmU9PCkX1MMi10-BuyI9S4RAH74bR_lE3SsWt4Bs1kPTnjfet5SQiVjzLhJ3SdDE05guQg6nCl-AfhcPVbXOz0oFS7O46k7gXgMgzNrz3geehysKKguIladGA=s72-w986-h679-c" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1375587508974804970.post-772187452464741156</guid><pubDate>Sun, 20 Sep 2026 05:25:00 +0000</pubDate><atom:updated>2026-09-21T20:09:56.331+08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">19c</category><category domain="http://www.blogger.com/atom/ns#">DataGuard</category><title>Oracle Standby Redo Logs: The Gap Most DBAs Miss</title><description>&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;The first warning often appears during a DR drill. Redo transport is healthy, managed recovery is running, and the standby looks ready. Then Data Guard Broker reports insufficient standby redo logs, or apply lag starts rising after an online redo log resize even though the network has no visible problem.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;This is why I do not validate standby redo logs only by checking whether rows exist in &lt;code style=&quot;font-family: courier;&quot;&gt;V$STANDBY_LOG&lt;/code&gt;. The count must be correct for every redo thread, the sizes must match the primary redo layout, RFS must actually be using them, and the same preparation should exist on the current primary for the next role transition.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;There is another misconception worth clearing up early. Standby redo logs improve how received redo is stored and applied. They do not convert asynchronous transport into a guaranteed zero-data-loss service. Protection mode, transport progress and apply progress are three different parts of the Data Guard path.&lt;span&gt;&lt;/span&gt;&lt;/p&gt;&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;p&gt;&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;The discussion below focuses mainly on physical standby databases and the checks that matter in production: real-time apply, the required SRL count, RAC thread coverage, role readiness, storage pressure and the lag patterns that expose a broken receive path.&lt;/p&gt;

&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;What a Standby Redo Log Changes&lt;/h2&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;An online redo log belongs to the database while it is operating in the primary role. A standby redo log, or SRL, is a receiving structure. On a physical standby, the remote file server process, RFS, receives redo from the source database and writes it into the current SRL.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;The managed recovery process can read that SRL while it is still being filled. This is real-time apply. Recovery does not need to wait for the current redo sequence to complete and become an archived redo log before applying it to the standby datafiles.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;From Oracle Database 12.1 onward, the old &lt;code style=&quot;font-family: courier;&quot;&gt;USING CURRENT LOGFILE&lt;/code&gt; clause is deprecated and is no longer needed to start real-time apply. Starting managed recovery normally enables real-time apply when the standby is in &lt;code style=&quot;font-family: courier;&quot;&gt;ARCHIVELOG&lt;/code&gt; mode and usable SRLs are available.&lt;/p&gt;

&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
  &lt;!--Add Blogger image here: Primary redo transport to RFS, SRL, MRP and standby datafiles--&gt;
&lt;/div&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;If RFS cannot obtain a suitable SRL, Oracle can write received redo directly to a standby archived redo log. That does not mean modern ASYNC transport simply waits for the next primary log switch before sending redo. The visible penalty is usually on the apply side: recovery falls back to the completed archived-log path instead of applying the current stream from an SRL.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;In monitoring, this can produce a saw-tooth pattern. Transport lag remains low, apply lag grows during the current sequence, and then falls after the sequence is completed and applied. When I see that pattern, I verify real-time apply and SRL usage before blaming network bandwidth or increasing apply parallelism.&lt;/p&gt;

&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
  &lt;!--Add Blogger image here: Usable SRL with real-time apply versus archived redo fallback--&gt;
&lt;/div&gt;

&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;Protection Mode Is Not the Same as Apply Mode&lt;/h2&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;SRLs, synchronous transport and zero data loss are often discussed as though they are one feature. They are related, but each controls a different stage.&lt;/p&gt;

&lt;div style=&quot;overflow-x: auto;&quot;&gt;
  &lt;table style=&quot;border-collapse: collapse; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal; width: 100%;&quot;&gt;
    &lt;thead&gt;
      &lt;tr&gt;
        &lt;th style=&quot;background-color: #e06666; border: 1px solid rgb(153, 153, 153); color: white; padding: 10px; text-align: left;&quot;&gt;Production question&lt;/th&gt;
        &lt;th style=&quot;background-color: #e06666; border: 1px solid rgb(153, 153, 153); color: white; padding: 10px; text-align: left;&quot;&gt;Main control&lt;/th&gt;
      &lt;/tr&gt;
    &lt;/thead&gt;
    &lt;tbody&gt;
      &lt;tr&gt;
        &lt;td style=&quot;border: 1px solid rgb(153, 153, 153); padding: 10px; text-align: left;&quot;&gt;Does the primary wait before acknowledging a commit?&lt;/td&gt;
        &lt;td style=&quot;border: 1px solid rgb(153, 153, 153); padding: 10px; text-align: left;&quot;&gt;Protection mode and SYNC or ASYNC transport&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td style=&quot;border: 1px solid rgb(153, 153, 153); padding: 10px; text-align: left;&quot;&gt;Must the remote side acknowledge after writing to storage?&lt;/td&gt;
        &lt;td style=&quot;border: 1px solid rgb(153, 153, 153); padding: 10px; text-align: left;&quot;&gt;&lt;code style=&quot;font-family: courier;&quot;&gt;AFFIRM&lt;/code&gt; or &lt;code style=&quot;font-family: courier;&quot;&gt;NOAFFIRM&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td style=&quot;border: 1px solid rgb(153, 153, 153); padding: 10px; text-align: left;&quot;&gt;Can recovery apply the current incoming sequence?&lt;/td&gt;
        &lt;td style=&quot;border: 1px solid rgb(153, 153, 153); padding: 10px; text-align: left;&quot;&gt;A usable SRL and real-time apply&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td style=&quot;border: 1px solid rgb(153, 153, 153); padding: 10px; text-align: left;&quot;&gt;How much received redo is still unapplied?&lt;/td&gt;
        &lt;td style=&quot;border: 1px solid rgb(153, 153, 153); padding: 10px; text-align: left;&quot;&gt;Standby CPU, datafile I/O and apply capacity&lt;/td&gt;
      &lt;/tr&gt;
    &lt;/tbody&gt;
  &lt;/table&gt;
&lt;/div&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Maximum Availability and Maximum Protection depend on synchronous transport to an eligible standby and require SRLs. Maximum Performance normally uses ASYNC transport. In ASYNC mode, a primary transaction can commit before its redo reaches durable storage at the standby.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;A well-performing ASYNC configuration may show only a small exposure window, but SRLs do not make that window disappear. They protect and expose redo that has reached the destination. They cannot protect redo that was still buffered or in transit when the primary site was lost.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Storage latency also matters differently by mode. With &lt;code style=&quot;font-family: courier;&quot;&gt;SYNC AFFIRM&lt;/code&gt;, the primary commit path includes the remote durable write, so network latency and SRL write latency can affect application response time. With ASYNC transport, slow receiver storage may not delay every foreground commit, but sustained backpressure can increase transport lag and widen the RPO exposure.&lt;/p&gt;

&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;The SRL Count Rule: ORL Groups Plus One&lt;/h2&gt;

&lt;div style=&quot;background-color: #f6f7f9; border-left: 6px solid rgb(224, 102, 102); margin: 16px 0px; padding: 12px 16px;&quot;&gt;
  &lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal; margin: 0px;&quot;&gt;&lt;strong&gt;Required formula for every source redo thread:&lt;/strong&gt;&lt;br /&gt;SRL groups = primary online redo log groups + 1&lt;/p&gt;
&lt;/div&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;An equal number of online and standby redo log groups is not sufficient. Oracle requires at least one more SRL group than the online redo log count for each source thread. The additional group gives RFS another target while the previous SRL is being archived and made reusable.&lt;/p&gt;

&lt;ul style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;
  &lt;li&gt;A single-instance primary with three online redo groups needs at least four SRL groups.&lt;/li&gt;
  &lt;li&gt;A two-instance RAC primary with three online groups in each thread needs four SRLs for thread 1 and four for thread 2.&lt;/li&gt;
  &lt;li&gt;The same thread coverage is required even if the standby RAC cluster runs fewer instances. The receiver must support every redo thread at the source.&lt;/li&gt;
  &lt;li&gt;If completed SRLs cannot be archived quickly enough during heavy switching, more than the minimum may be required.&lt;/li&gt;
&lt;/ul&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Size the SRLs from &lt;code style=&quot;font-family: courier;&quot;&gt;V$LOG.BYTES&lt;/code&gt;. Each SRL must be at least as large as the largest source online redo log, and the cleanest operational layout is to keep the online and standby redo logs the same size. I prefer to use the exact byte value in the DDL instead of manually converting it to an approximate MB or GB value.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;If the primary online redo groups have mixed sizes, standardize that layout first. In RAC, assign every SRL to its intended thread and place the files on shared storage. Leaving groups at thread 0 may allow runtime assignment in some configurations, but explicit thread ownership is easier to validate and follows current Oracle guidance.&lt;/p&gt;

&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
  &lt;!--Add Blogger image here: Two RAC threads with three ORLs and four SRLs per thread--&gt;
&lt;/div&gt;

&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;Why SRLs Should Exist on the Primary Too&lt;/h2&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;A standby redo log is not used while the database is operating in the primary role. That sometimes leads teams to create SRLs only on the current standby. The design works until the first role transition.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;After a switchover, the old primary becomes the new redo receiver. If its SRLs were created in advance, it can immediately receive redo through the correct path. If they are missing, the DBA has additional work to perform and the configuration is not fully ready in the reverse direction.&lt;/p&gt;

&lt;div style=&quot;background-color: #f6f7f9; border-left: 6px solid rgb(224, 102, 102); margin: 16px 0px; padding: 12px 16px;&quot;&gt;
  &lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal; margin: 0px;&quot;&gt;&lt;strong&gt;Production best practice:&lt;/strong&gt; Create the complete SRL layout on both the primary and standby databases before a switchover.&lt;/p&gt;
&lt;/div&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Pre-created SRLs do not make Oracle&#39;s internal role-conversion step execute faster. They make the overall switchover cleaner and immediately role-ready because no post-switch SRL creation is required. Data Guard Broker validates SRLs on both sides before a role transition, and SRLs are required on the primary when Fast-Start Failover is enabled.&lt;/p&gt;

&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
  &lt;!--Add Blogger image here: Primary and standby both prepared with ORLs and SRLs before and after switchover--&gt;
&lt;/div&gt;

&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;Build and Inspect the SRL Layout&lt;/h2&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Keep the discovery and creation statements together in the runbook. Run the online redo queries on the source database and review &lt;code style=&quot;font-family: courier;&quot;&gt;V$STANDBY_LOG&lt;/code&gt; on every database that may receive redo.&lt;/p&gt;

&lt;div style=&quot;background: rgb(40, 42, 54); border-color: gray; border-image: none; border-style: solid; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;&quot;&gt;
&lt;pre style=&quot;line-height: 125%; margin: 0px;&quot;&gt;&lt;span style=&quot;color: #f8f8f2; font-family: courier; font-size: medium; font-weight: normal;&quot;&gt;&lt;span style=&quot;color: #6272a4;&quot;&gt;-- Primary: online redo count and exact size by thread&lt;/span&gt;
&lt;span style=&quot;color: #ff79c6;&quot;&gt;SELECT&lt;/span&gt; thread#, group#, bytes,
       ROUND(bytes / 1024 / 1024) AS size_mb,
       members, status
&lt;span style=&quot;color: #ff79c6;&quot;&gt;FROM&lt;/span&gt; v$log
&lt;span style=&quot;color: #ff79c6;&quot;&gt;ORDER BY&lt;/span&gt; thread#, group#;

&lt;span style=&quot;color: #ff79c6;&quot;&gt;SELECT&lt;/span&gt; thread#, COUNT(*) AS online_groups,
MIN(bytes) AS min_bytes,
MAX(bytes) AS max_bytes &lt;span style=&quot;color: #ff79c6;&quot;&gt;FROM&lt;/span&gt; v$log &lt;span style=&quot;color: #ff79c6;&quot;&gt;GROUP BY&lt;/span&gt; thread# &lt;span style=&quot;color: #ff79c6;&quot;&gt;ORDER BY&lt;/span&gt; thread#;

&lt;span style=&quot;color: #6272a4;&quot;&gt;-- Run on each role-capable database&lt;/span&gt; &lt;span style=&quot;color: #ff79c6;&quot;&gt;SELECT&lt;/span&gt; thread#, group#, bytes,
ROUND(bytes / 1024 / 1024) AS size_mb,
status, archived, sequence# &lt;span style=&quot;color: #ff79c6;&quot;&gt;FROM&lt;/span&gt; v$standby_log &lt;span style=&quot;color: #ff79c6;&quot;&gt;ORDER BY&lt;/span&gt; thread#, group#;

&lt;span style=&quot;color: #6272a4;&quot;&gt;-- Example: four 2 GB SRLs for thread 1 on ASM&lt;/span&gt; &lt;span style=&quot;color: #ff79c6;&quot;&gt;ALTER DATABASE ADD STANDBY LOGFILE&lt;/span&gt; THREAD 1 GROUP 11 (&lt;span style=&quot;color: #f1fa8c;&quot;&gt;&#39;+DATA&#39;&lt;/span&gt;) SIZE &lt;span style=&quot;color: #bd93f9;&quot;&gt;2147483648&lt;/span&gt;; &lt;span style=&quot;color: #ff79c6;&quot;&gt;ALTER DATABASE ADD STANDBY LOGFILE&lt;/span&gt; THREAD 1 GROUP 12 (&lt;span style=&quot;color: #f1fa8c;&quot;&gt;&#39;+DATA&#39;&lt;/span&gt;) SIZE &lt;span style=&quot;color: #bd93f9;&quot;&gt;2147483648&lt;/span&gt;; &lt;span style=&quot;color: #ff79c6;&quot;&gt;ALTER DATABASE ADD STANDBY LOGFILE&lt;/span&gt; THREAD 1 GROUP 13 (&lt;span style=&quot;color: #f1fa8c;&quot;&gt;&#39;+DATA&#39;&lt;/span&gt;) SIZE &lt;span style=&quot;color: #bd93f9;&quot;&gt;2147483648&lt;/span&gt;; &lt;span style=&quot;color: #ff79c6;&quot;&gt;ALTER DATABASE ADD STANDBY LOGFILE&lt;/span&gt; THREAD 1 GROUP 14 (&lt;span style=&quot;color: #f1fa8c;&quot;&gt;&#39;+DATA&#39;&lt;/span&gt;) SIZE &lt;span style=&quot;color: #bd93f9;&quot;&gt;2147483648&lt;/span&gt;;

&lt;span style=&quot;color: #6272a4;&quot;&gt;-- Physical standby, Oracle 12.1 and later&lt;/span&gt; &lt;span style=&quot;color: #ff79c6;&quot;&gt;ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT&lt;/span&gt;; &lt;/span&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Choose group numbers that do not collide with online redo groups or existing SRLs. Repeat the DDL for every source thread. Adding new groups is normally straightforward, but dropping or resizing old groups needs a controlled change. Never drop the group currently receiving redo. Confirm that it is safely reusable before running &lt;code style=&quot;font-family: courier;&quot;&gt;ALTER DATABASE DROP STANDBY LOGFILE GROUP group_number&lt;/code&gt;.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;SRL storage must sustain the peak redo rate. A slow or inaccessible disk group can create receiver backpressure even when the network is healthy. If SRLs are multiplexed, place the members in separate failure domains; two members on the same vulnerable file system provide little additional protection.&lt;/p&gt;

&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;How to prove That RFS Is Using the SRLs&lt;/h2&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;A clean configuration query is only the first layer. Runtime validation should cover RFS, recovery mode, lag freshness, archive health and broker readiness.&lt;/p&gt;

&lt;div style=&quot;background: rgb(40, 42, 54); border-color: gray; border-image: none; border-style: solid; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;&quot;&gt;
&lt;pre style=&quot;line-height: 125%; margin: 0px;&quot;&gt;&lt;span style=&quot;color: #f8f8f2; font-family: courier; font-size: medium; font-weight: normal;&quot;&gt;&lt;span style=&quot;color: #6272a4;&quot;&gt;-- Standby: RFS and managed recovery activity&lt;/span&gt;
&lt;span style=&quot;color: #ff79c6;&quot;&gt;SELECT&lt;/span&gt; name, role, action, client_role,
       thread#, sequence#, group#
&lt;span style=&quot;color: #ff79c6;&quot;&gt;FROM&lt;/span&gt; v$dataguard_process
&lt;span style=&quot;color: #ff79c6;&quot;&gt;ORDER BY&lt;/span&gt; name, thread#, sequence#;

&lt;span style=&quot;color: #6272a4;&quot;&gt;-- Standby: lag value and metric freshness&lt;/span&gt; &lt;span style=&quot;color: #ff79c6;&quot;&gt;SELECT&lt;/span&gt; name, value, unit, time_computed, datum_time &lt;span style=&quot;color: #ff79c6;&quot;&gt;FROM&lt;/span&gt; v$dataguard_stats &lt;span style=&quot;color: #ff79c6;&quot;&gt;WHERE&lt;/span&gt; name &lt;span style=&quot;color: #ff79c6;&quot;&gt;IN&lt;/span&gt; (&lt;span style=&quot;color: #f1fa8c;&quot;&gt;&#39;transport lag&#39;&lt;/span&gt;, &lt;span style=&quot;color: #f1fa8c;&quot;&gt;&#39;apply lag&#39;&lt;/span&gt;, &lt;span style=&quot;color: #f1fa8c;&quot;&gt;&#39;apply finish time&#39;&lt;/span&gt;) &lt;span style=&quot;color: #ff79c6;&quot;&gt;ORDER BY&lt;/span&gt; name;

&lt;span style=&quot;color: #6272a4;&quot;&gt;-- Primary: remote destination and SRL use&lt;/span&gt; &lt;span style=&quot;color: #ff79c6;&quot;&gt;SELECT&lt;/span&gt; dest_id, status, type, database_mode,
recovery_mode, srl, error &lt;span style=&quot;color: #ff79c6;&quot;&gt;FROM&lt;/span&gt; v$archive_dest_status &lt;span style=&quot;color: #ff79c6;&quot;&gt;WHERE&lt;/span&gt; type &lt;span style=&quot;color: #ff79c6;&quot;&gt;IN&lt;/span&gt; (&lt;span style=&quot;color: #f1fa8c;&quot;&gt;&#39;PHYSICAL&#39;&lt;/span&gt;, &lt;span style=&quot;color: #f1fa8c;&quot;&gt;&#39;LOGICAL&#39;&lt;/span&gt;, &lt;span style=&quot;color: #f1fa8c;&quot;&gt;&#39;FAR SYNC&#39;&lt;/span&gt;);

&lt;span style=&quot;color: #6272a4;&quot;&gt;-- Data Guard Broker&lt;/span&gt;
DGMGRL&amp;gt; SHOW CONFIGURATION;
DGMGRL&amp;gt; SHOW DATABASE VERBOSE &lt;span style=&quot;color: #f1fa8c;&quot;&gt;&#39;STBYDB&#39;&lt;/span&gt;;
DGMGRL&amp;gt; VALIDATE DATABASE VERBOSE &lt;span style=&quot;color: #f1fa8c;&quot;&gt;&#39;STBYDB&#39;&lt;/span&gt;; &lt;/span&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;For new monitoring, use &lt;code style=&quot;font-family: courier;&quot;&gt;V$DATAGUARD_PROCESS&lt;/code&gt; instead of building around &lt;code style=&quot;font-family: courier;&quot;&gt;V$MANAGED_STANDBY&lt;/code&gt;, which has been deprecated since Oracle Database 12.2.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Always read &lt;code style=&quot;font-family: courier;&quot;&gt;DATUM_TIME&lt;/code&gt; with the lag value. A transport lag of zero is not reassuring if &lt;code style=&quot;font-family: courier;&quot;&gt;DATUM_TIME&lt;/code&gt; stopped changing ten minutes ago. The last computed metric is stale because the standby is no longer receiving fresh data.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;One &lt;code style=&quot;font-family: courier;&quot;&gt;ACTIVE&lt;/code&gt; SRL for a receiving thread is normal. Use &lt;code style=&quot;font-family: courier;&quot;&gt;ARCHIVED&lt;/code&gt;, &lt;code style=&quot;font-family: courier;&quot;&gt;SEQUENCE#&lt;/code&gt;, process activity and the alert log to understand whether it is currently being written or has completed and is waiting for archival. Do not clear or drop a group simply because its status is &lt;code style=&quot;font-family: courier;&quot;&gt;ACTIVE&lt;/code&gt;.&lt;/p&gt;

&lt;h3 style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large;&quot;&gt;When RFS Is Not Using an SRL&lt;/h3&gt;

&lt;ol style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;
  &lt;li&gt;Compare the primary ORL byte size with the receiver SRL byte size.&lt;/li&gt;
  &lt;li&gt;Count SRL groups by thread, not only as a database total.&lt;/li&gt;
  &lt;li&gt;Verify that every source RAC thread is represented.&lt;/li&gt;
  &lt;li&gt;Check the SRL members, ASM disk groups or file-system paths.&lt;/li&gt;
  &lt;li&gt;Check the local archive destination and fast recovery area.&lt;/li&gt;
  &lt;li&gt;Review the standby alert log around the affected sequence.&lt;/li&gt;
&lt;/ol&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;A full FRA can look like an SRL shortage because completed groups cannot be archived and reused. Adding more SRLs may postpone the symptom, but it does not fix the archive destination.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Once RFS is writing to the expected group, separate transport lag from apply lag. Rising transport lag points toward the send-and-receive path, network capacity, destination errors, authentication or receiver I/O. Low transport lag with rising apply lag points toward MRP, standby CPU, datafile I/O, hot blocks or the redo workload. SRLs remove the wait for a completed log; they do not make an underpowered standby faster.&lt;/p&gt;&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi-f5Um5_2WdHrfclNIyPApk58iq7L0HWqrNgXQjRdP_SSESkRwDqs0UUU5hq97_SzQPkOwzW2YPqb21TVimVGFhswo_Z5W6hzhhGQIuHobm25qPgEB5XCaJit3tfYtgAMBzbfYGl-dPFgm2QcAUhOm1gCUC3RkrnDO48pty-ZzP81bk2em_O-bMzuK8fU/s1800/oracle-real-time-redo-path.png&quot; style=&quot;font-family: &amp;quot;Times New Roman&amp;quot;; font-size: medium; margin-left: 1em; margin-right: 1em; text-align: center;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1000&quot; data-original-width=&quot;1800&quot; height=&quot;525&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi-f5Um5_2WdHrfclNIyPApk58iq7L0HWqrNgXQjRdP_SSESkRwDqs0UUU5hq97_SzQPkOwzW2YPqb21TVimVGFhswo_Z5W6hzhhGQIuHobm25qPgEB5XCaJit3tfYtgAMBzbfYGl-dPFgm2QcAUhOm1gCUC3RkrnDO48pty-ZzP81bk2em_O-bMzuK8fU/w945-h525/oracle-real-time-redo-path.png&quot; width=&quot;945&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;&lt;br /&gt;&lt;/p&gt;

&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;Oracle SRLs Compared With PostgreSQL WAL Reception&lt;/h2&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;PostgreSQL does not have an object that a DBA creates as a direct equivalent of an Oracle SRL group. The receiver-side stages are still useful to compare.&lt;/p&gt;

&lt;div style=&quot;overflow-x: auto;&quot;&gt;
  &lt;table style=&quot;border-collapse: collapse; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal; width: 100%;&quot;&gt;
    &lt;thead&gt;
      &lt;tr&gt;
        &lt;th style=&quot;background-color: #e06666; border: 1px solid rgb(153, 153, 153); color: white; padding: 10px; text-align: left;&quot;&gt;Oracle Data Guard&lt;/th&gt;
        &lt;th style=&quot;background-color: #e06666; border: 1px solid rgb(153, 153, 153); color: white; padding: 10px; text-align: left;&quot;&gt;PostgreSQL physical replication&lt;/th&gt;
      &lt;/tr&gt;
    &lt;/thead&gt;
    &lt;tbody&gt;
      &lt;tr&gt;
        &lt;td style=&quot;border: 1px solid rgb(153, 153, 153); padding: 10px; text-align: left;&quot;&gt;Redo transport processes send redo&lt;/td&gt;
        &lt;td style=&quot;border: 1px solid rgb(153, 153, 153); padding: 10px; text-align: left;&quot;&gt;WAL sender streams WAL&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td style=&quot;border: 1px solid rgb(153, 153, 153); padding: 10px; text-align: left;&quot;&gt;RFS receives redo&lt;/td&gt;
        &lt;td style=&quot;border: 1px solid rgb(153, 153, 153); padding: 10px; text-align: left;&quot;&gt;WAL receiver receives WAL&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td style=&quot;border: 1px solid rgb(153, 153, 153); padding: 10px; text-align: left;&quot;&gt;Current redo is persisted in an SRL&lt;/td&gt;
        &lt;td style=&quot;border: 1px solid rgb(153, 153, 153); padding: 10px; text-align: left;&quot;&gt;Received WAL is persisted under &lt;code style=&quot;font-family: courier;&quot;&gt;pg_wal&lt;/code&gt;&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td style=&quot;border: 1px solid rgb(153, 153, 153); padding: 10px; text-align: left;&quot;&gt;MRP applies redo&lt;/td&gt;
        &lt;td style=&quot;border: 1px solid rgb(153, 153, 153); padding: 10px; text-align: left;&quot;&gt;Startup process replays WAL&lt;/td&gt;
      &lt;/tr&gt;
      &lt;tr&gt;
        &lt;td style=&quot;border: 1px solid rgb(153, 153, 153); padding: 10px; text-align: left;&quot;&gt;Archived redo can resolve gaps&lt;/td&gt;
        &lt;td style=&quot;border: 1px solid rgb(153, 153, 153); padding: 10px; text-align: left;&quot;&gt;WAL archive and &lt;code style=&quot;font-family: courier;&quot;&gt;restore_command&lt;/code&gt; can supply missing segments&lt;/td&gt;
      &lt;/tr&gt;
    &lt;/tbody&gt;
  &lt;/table&gt;
&lt;/div&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;The commit settings are comparable only at a high level. PostgreSQL &lt;code style=&quot;font-family: courier;&quot;&gt;synchronous_commit = remote_write&lt;/code&gt; waits until the standby operating system has written the WAL, while &lt;code style=&quot;font-family: courier;&quot;&gt;remote_apply&lt;/code&gt; waits until replay. Waiting for replay gives a stronger visibility point but can add significant commit latency. These settings should not be presented as exact equivalents of Oracle protection modes.&lt;/p&gt;

&lt;div style=&quot;background: rgb(40, 42, 54); border-color: gray; border-image: none; border-style: solid; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;&quot;&gt;
&lt;pre style=&quot;line-height: 125%; margin: 0px;&quot;&gt;&lt;span style=&quot;color: #f8f8f2; font-family: courier; font-size: medium; font-weight: normal;&quot;&gt;&lt;span style=&quot;color: #6272a4;&quot;&gt;-- PostgreSQL primary&lt;/span&gt;
&lt;span style=&quot;color: #ff79c6;&quot;&gt;SELECT&lt;/span&gt; application_name, client_addr, state, sync_state,
       write_lag, flush_lag, replay_lag,
       pg_size_pretty(
         pg_wal_lsn_diff(pg_current_wal_lsn(), replay_lsn)
       ) AS replay_gap
&lt;span style=&quot;color: #ff79c6;&quot;&gt;FROM&lt;/span&gt; pg_stat_replication;

&lt;span style=&quot;color: #6272a4;&quot;&gt;-- PostgreSQL standby&lt;/span&gt; &lt;span style=&quot;color: #ff79c6;&quot;&gt;SELECT&lt;/span&gt; status, sender_host, latest_end_lsn,
last_msg_send_time, last_msg_receipt_time &lt;span style=&quot;color: #ff79c6;&quot;&gt;FROM&lt;/span&gt; pg_stat_wal_receiver;

&lt;span style=&quot;color: #ff79c6;&quot;&gt;SELECT&lt;/span&gt; now() - pg_last_xact_replay_timestamp() AS replay_delay; &lt;/span&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;The time-based replay query is useful, but it is not an exact RPO measurement. It can return &lt;code style=&quot;font-family: courier;&quot;&gt;NULL&lt;/code&gt; before any transaction has been replayed, and an idle database can make a time delay look larger than the actual byte gap. As with Oracle, position, time and metric freshness should be read together.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhVfr_49M-fq3kOe7uVe7Ox_8HDq2dhI1dPbkWPMXPLw8FunGpMMiUrvGWk7zqvlYFfepWkQ9cUNUamx3nPz5mlctbFJNsO6NvbaHlMTBf1ZwRJJVPbt0FLYWv8Wf22iKrGx-kO4nKH8zQ5c3GP2fVNimgizrKEu58QKUA_pXULp3YB1uhHyoXLiNbEqFk/s1800/oracle%20vs%20pg.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1000&quot; data-original-width=&quot;1800&quot; height=&quot;521&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhVfr_49M-fq3kOe7uVe7Ox_8HDq2dhI1dPbkWPMXPLw8FunGpMMiUrvGWk7zqvlYFfepWkQ9cUNUamx3nPz5mlctbFJNsO6NvbaHlMTBf1ZwRJJVPbt0FLYWv8Wf22iKrGx-kO4nKH8zQ5c3GP2fVNimgizrKEu58QKUA_pXULp3YB1uhHyoXLiNbEqFk/w937-h521/oracle%20vs%20pg.png&quot; width=&quot;937&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;&lt;br /&gt;&lt;/p&gt;

&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
  &lt;!--Add Blogger image here: Oracle RFS to SRL to MRP versus PostgreSQL WAL receiver to pg_wal to startup process--&gt;
&lt;/div&gt;

&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;Mini Case Study: Apply Lag After a Redo Resize&lt;/h2&gt;

&lt;h3 style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large;&quot;&gt;Problem&amp;nbsp;&lt;/h3&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;A busy RAC database had its online redo logs increased from 1 GB to 4 GB to reduce excessive switching during batch processing. Transport lag remained low, but apply lag grew through every sequence and dropped after the next log switch. The first assumption was that MRP could not keep up.&lt;/p&gt;

&lt;h3 style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large;&quot;&gt;Root cause&lt;/h3&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Only the primary ORLs had been changed. The standby still had 1 GB SRLs. RFS could not use those smaller groups for the 4 GB incoming sequence and used the standby archived redo path. The alert log and an exact comparison between &lt;code style=&quot;font-family: courier;&quot;&gt;V$LOG&lt;/code&gt; and &lt;code style=&quot;font-family: courier;&quot;&gt;V$STANDBY_LOG&lt;/code&gt; exposed the mismatch.&lt;/p&gt;

&lt;h3 style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large;&quot;&gt;Fix we made&lt;/h3&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;New 4 GB SRLs were added for every RAC thread, using one more group per thread than the online redo count. The same layout was created on the primary for its future standby role. The old groups were removed only after they were no longer active. RFS resumed writing to the current SRL, and the saw-tooth apply lag disappeared.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;The operational lesson was simple: every online redo log change needs a Data Guard log-layout review. Redo sizing is not a primary-only activity.&lt;/p&gt;

&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;Lessons From the Field&lt;/h2&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Most SRL problems are configuration drift, not an Oracle defect. A DBA resizes online redo, adds a RAC thread, rebuilds a standby or moves storage and forgets to repeat the SRL review on every role-capable database.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;A small scheduled control is valuable here. Compare ORL and SRL counts per thread, exact byte sizes, member status and database role across the configuration. That check is more useful than discovering the mismatch during the next DR exercise.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;The FRA and local archive destination belong in the same monitoring story. A completed SRL must be archived before it can be reused. Destination errors and space pressure can therefore surface as an apparent SRL availability problem.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Finally, test the design in both directions. Broker validation is useful, but a controlled switchover proves the services, transport path, redo reception, apply behavior and ability to switch back. High availability is a tested behavior, not only a correct set of control-file records.&lt;/p&gt;

&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;Quick Takeaways&lt;/h2&gt;

&lt;ul style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;
  &lt;li&gt;SRLs allow recovery to apply the current incoming sequence without waiting for a completed archived log.&lt;/li&gt;
  &lt;li&gt;Every source thread requires at least one more SRL group than its primary online redo log groups.&lt;/li&gt;
  &lt;li&gt;Match the SRL size to the primary redo layout and assign RAC threads explicitly.&lt;/li&gt;
  &lt;li&gt;SRLs do not turn ASYNC transport into guaranteed zero data loss.&lt;/li&gt;
  &lt;li&gt;Create the complete SRL layout on both primary and standby before a role transition.&lt;/li&gt;
  &lt;li&gt;Validate actual RFS use, recovery mode, lag freshness, archive health and broker readiness.&lt;/li&gt;
  &lt;li&gt;Low transport lag with high apply lag normally points to the standby apply path.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;Conclusion&lt;/h2&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Standby redo logs sit directly between redo transport and recovery. When they are correctly sized, assigned and available, RFS can write the incoming stream to an SRL and MRP can apply it without waiting for a completed archived log. This reduces apply latency and leaves less recovery work during a role transition.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;The boundaries are equally important. SRLs do not change ASYNC transport into a zero-data-loss design, repair a slow standby or compensate for a full FRA. Protection mode determines when the primary can acknowledge a commit. Transport health shows what reached the standby. Apply capacity determines how quickly the standby datafiles catch up.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;For a single-instance database, use the primary ORL count plus one and verify the exact size. For RAC, apply the same formula separately to every source thread. Create the full layout on every database that may become a redo receiver, including the current primary.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Add this to the next Data Guard review: compare online and standby redo layouts across every member and check both current and future roles. Repeat the review after a redo resize, RAC topology change, standby rebuild or storage migration. Then validate the runtime path. Confirm RFS activity, real-time recovery mode, fresh lag timestamps, archive health and broker readiness before a DR test has to find the gap for you.&lt;/p&gt;

&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;Frequently Asked Questions&lt;/h2&gt;

&lt;h3 style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large;&quot;&gt;Are SRLs mandatory on the current primary database?&lt;/h3&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;SRLs are not used while the database remains in the primary role. Oracle recommends keeping them on the primary so it is immediately ready to receive redo after a switchover or failover. Broker-managed role transitions validate them on both sides, and Fast-Start Failover requires them on the primary.&lt;/p&gt;

&lt;h3 style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large;&quot;&gt;How many SRL groups are required?&lt;/h3&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Calculate the count separately for each source redo thread. The required baseline is the number of primary online redo log groups in that thread plus one. If thread 1 has three ORL groups, it needs at least four SRL groups.&lt;/p&gt;

&lt;h3 style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large;&quot;&gt;Do SRLs guarantee zero data loss with ASYNC transport?&lt;/h3&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;No. SRLs persist redo that has reached the standby. ASYNC commits can complete before the redo arrives, so the RPO still depends on transport progress and the exact failure sequence.&lt;/p&gt;

&lt;h3 style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large;&quot;&gt;Can an SRL simply be larger than the online redo log?&lt;/h3&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;An SRL must not be smaller than the largest source online redo log. For a clean and predictable layout, use matching sizes rather than treating a larger file as the normal standard.&lt;/p&gt;

&lt;h3 style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large;&quot;&gt;Is an ACTIVE SRL a problem?&lt;/h3&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Usually not. One active group for a receiving thread is expected. Investigate when completed groups cannot be archived or reused, no group is available for the next sequence, or the alert log reports an SRL error.&lt;/p&gt;

&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;What Have You Seen in Production?&lt;/h2&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Have you seen a Data Guard configuration where transport looked healthy but SRL drift caused delayed apply or a switchover warning? Was it exposed by a redo resize, RAC thread change, FRA issue, broker validation or an actual DR test? Share the check that helped you find it.&lt;/p&gt;

&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;Official References&lt;/h2&gt;

&lt;ol style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;
  &lt;li&gt;&lt;a href=&quot;https://docs.oracle.com/en/database/oracle/oracle-database/19/sbydb/oracle-data-guard-redo-transport-services.html&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;Oracle Database 19c Data Guard - Redo Transport Services&lt;/a&gt;&lt;br /&gt;Official guidance for managing standby redo logs, sizing, the per-thread ORL plus one requirement, RFS behavior and archived redo fallback.&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://docs.oracle.com/en/database/oracle/oracle-database/19/dgbkr/managing-oracle-data-guard-broker-configuration-members.html&quot; rel=&quot;noopener&quot; target=&quot;_blank&quot;&gt;Oracle Database 19c Data Guard Broker - Managing Configuration Members&lt;/a&gt;&lt;br /&gt;Official guidance for configuring SRLs on primary and standby databases, preparing for switchovers and failovers, and Fast-Start Failover requirements.&lt;/li&gt;&lt;/ol&gt;&lt;br /&gt;</description><link>https://oracle-dba-help.blogspot.com/2026/09/oracle-standby-redo-logs-gap-most-dbas.html</link><author>noreply@blogger.com (Nikhil Kotak)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi-f5Um5_2WdHrfclNIyPApk58iq7L0HWqrNgXQjRdP_SSESkRwDqs0UUU5hq97_SzQPkOwzW2YPqb21TVimVGFhswo_Z5W6hzhhGQIuHobm25qPgEB5XCaJit3tfYtgAMBzbfYGl-dPFgm2QcAUhOm1gCUC3RkrnDO48pty-ZzP81bk2em_O-bMzuK8fU/s72-w945-h525-c/oracle-real-time-redo-path.png" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1375587508974804970.post-3891740911198185957</guid><pubDate>Sat, 19 Sep 2026 13:09:00 +0000</pubDate><atom:updated>2026-09-19T21:09:00.111+08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Core DBA</category><category domain="http://www.blogger.com/atom/ns#">Must Read</category><category domain="http://www.blogger.com/atom/ns#">RAC</category><title>ORA-12547 from SRVCTL While SQL*Plus Startup Works – Tracing It Back to a Post-Patching Relink Issue</title><description>&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;I recently worked on an Oracle database that could be started normally from SQL*Plus, but failed every time Clusterware tried to start it through &lt;code style=&quot;font-family: courier;&quot;&gt;srvctl&lt;/code&gt;. The error returned by Clusterware was &lt;code style=&quot;font-family: courier;&quot;&gt;ORA-12547: TNS:lost contact&lt;/code&gt;.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;The final fix was to relink the database Oracle Home, but I did not reach that conclusion from the error message alone. The useful clues came from comparing SQL*Plus and SRVCTL startup behaviour, noticing what was happening to the Oracle executable during the SRVCTL attempt, and then going back through the last database startup and patching history.&lt;span&gt;&lt;/span&gt;&lt;/p&gt;&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;p&gt;&lt;/p&gt;

&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;The SRVCTL Startup Failure&lt;/h2&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;The database resource was registered with Clusterware, but the startup failed immediately:&lt;/p&gt;

&lt;div style=&quot;background: rgb(40, 42, 54); border-color: gray; border-image: none; border-style: solid; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;&quot;&gt;
&lt;pre style=&quot;line-height: 125%; margin: 0px;&quot;&gt;&lt;span style=&quot;font-family: courier; font-size: medium;&quot;&gt;&lt;span style=&quot;color: #f8f8f2; font-weight: normal;&quot;&gt;$ srvctl start database -d BPL1VODA

PRCR-1079 : Failed to start resource ora.bpl1voda&lt;/span&gt;&lt;db_unique_name&gt;&lt;span style=&quot;color: #f8f8f2; font-weight: normal;&quot;&gt;.db
CRS-5017: The resource action &quot;ora.bpl1voda&lt;/span&gt;&lt;db_unique_name&gt;&lt;span style=&quot;color: #f8f8f2; font-weight: normal;&quot;&gt;.db start&quot;
encountered the following error:

&lt;/span&gt;&lt;span style=&quot;color: #cc0000;&quot;&gt;&lt;b&gt;ORA-12547: TNS:lost contact&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2; font-weight: normal;&quot;&gt;

CRS-2674: Start of &#39;ora.bpl1voda&lt;/span&gt;&lt;db_unique_name style=&quot;color: #f8f8f2; font-weight: normal;&quot;&gt;.db&#39; failed&lt;/db_unique_name&gt;&lt;/db_unique_name&gt;&lt;/db_unique_name&gt;&lt;/span&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;&lt;code style=&quot;font-family: courier;&quot;&gt;ORA-12547&lt;/code&gt; is not very specific. Oracle describes it as the partner process unexpectedly disappearing, usually during process startup. In a local database startup like this, I would not immediately treat the word &lt;code style=&quot;font-family: courier;&quot;&gt;TNS&lt;/code&gt; as evidence of a listener or network problem. The process being launched by Clusterware may simply be terminating before the startup can complete.&lt;/p&gt;

&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;SQL*Plus Startup Worked&lt;/h2&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Before spending more time inside CRS, I wanted to know whether the database itself had a startup problem. I set the database environment and tried a direct startup as the Oracle software owner.&lt;/p&gt;

&lt;div style=&quot;background: rgb(40, 42, 54); border-color: gray; border-image: none; border-style: solid; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;&quot;&gt;
&lt;pre style=&quot;line-height: 125%; margin: 0px;&quot;&gt;&lt;span style=&quot;color: #f8f8f2; font-family: courier; font-size: medium; font-weight: normal;&quot;&gt;$ export ORACLE_SID=BPL1VODA
$ export ORACLE_HOME=/u01/app/oracle/product/19.0.0.0/BPL
$ export PATH=$ORACLE_HOME/bin:$PATH

$ sqlplus / as sysdba

SQL&amp;gt; startup;&lt;/span&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;The database started successfully.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;That was an important separation point. If there had been a basic problem with the SPFILE, control files, database files, ASM disk groups or recovery, I would normally expect the manual startup to expose it as well.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Instead, the behaviour was:&lt;/p&gt;

&lt;ul style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;
  &lt;li&gt;SQL*Plus startup worked.&lt;/li&gt;
  &lt;li&gt;SRVCTL startup consistently failed with &lt;code style=&quot;font-family: courier;&quot;&gt;ORA-12547&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;At that stage it looked as though something was different in the Clusterware-managed startup path. I also verified the Oracle Home registered with the database resource rather than assuming that SRVCTL was using the same environment as my shell.&lt;/p&gt;

&lt;div style=&quot;background: rgb(40, 42, 54); border-color: gray; border-image: none; border-style: solid; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;&quot;&gt;
&lt;pre style=&quot;line-height: 125%; margin: 0px;&quot;&gt;&lt;span style=&quot;color: #f8f8f2; font-family: courier; font-size: medium; font-weight: normal;&quot;&gt;$ echo $ORACLE_HOME&lt;br /&gt;$ ORACLE_HOME=/u01/app/oracle/product/19.0.0.0/BPL&lt;br /&gt;
$ which oracle

$ srvctl config database -d BLL1VODA&lt;db_unique_name&gt;
$ srvctl status database -d BPL1VODA&lt;db_unique_name&gt;&lt;/db_unique_name&gt;&lt;/db_unique_name&gt;&lt;/span&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;The configured database home was the expected one, so I continued looking at what happened when Clusterware actually attempted the startup.&lt;/p&gt;

&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;The Oracle Executable Kept Changing Back&lt;/h2&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;This was the first behaviour that made the Oracle Home itself suspicious.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;While troubleshooting, I checked &lt;code style=&quot;font-family: courier;&quot;&gt;$ORACLE_HOME/bin/oracle&lt;/code&gt;. Most of the executables in the same database home were owned by &lt;code style=&quot;font-family: courier;&quot;&gt;oracle:oinstall&lt;/code&gt;, but the main Oracle executable was showing this state:&lt;/p&gt;

&lt;div style=&quot;background: rgb(40, 42, 54); border-color: gray; border-image: none; border-style: solid; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;&quot;&gt;
&lt;pre style=&quot;line-height: 125%; margin: 0px;&quot;&gt;&lt;span style=&quot;color: #f8f8f2; font-family: courier; font-size: medium; font-weight: normal;&quot;&gt;-rwxr-s--x. 1 grid asmadmin 464944488 Sep 11 17:27 oracle&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;I corrected the ownership and permissions of the executable and verified them before trying another startup&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;The surprising part was that the correction did not stay in place. The moment I ran:&lt;/p&gt;

&lt;div style=&quot;background: rgb(40, 42, 54); border-color: gray; border-image: none; border-style: solid; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;&quot;&gt;
&lt;pre style=&quot;line-height: 125%; margin: 0px;&quot;&gt;&lt;span style=&quot;color: #f8f8f2; font-family: courier; font-size: medium; font-weight: normal;&quot;&gt;$ srvctl start database -d BLP1VODA&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;the executable returned to:&lt;/p&gt;

&lt;div style=&quot;background: rgb(40, 42, 54); border-color: gray; border-image: none; border-style: solid; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;&quot;&gt;
&lt;pre style=&quot;line-height: 125%; margin: 0px;&quot;&gt;&lt;span style=&quot;color: #cc0000; font-family: courier; font-size: medium;&quot;&gt;&lt;b&gt;grid&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2; font-family: courier; font-size: medium; font-weight: normal;&quot;&gt;:asmadmin
-rwxr-s--x&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;and the database startup failed again with the same &lt;code style=&quot;font-family: courier;&quot;&gt;ORA-12547&lt;/code&gt;&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;At first this looked like a straightforward executable permission problem. But repeatedly correcting the file manually was clearly not solving anything. Clusterware was touching the binary again during startup, so there was another reason behind the behaviour.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;The &lt;code style=&quot;font-family: courier;&quot;&gt;s&lt;/code&gt; in the group execute position also showed that the set-GID bit was being used. ASM environments have specific handling around the group and set-GID state of the RDBMS &lt;code style=&quot;font-family: courier;&quot;&gt;oracle&lt;/code&gt; executable, including Oracle&#39;s &lt;code style=&quot;font-family: courier;&quot;&gt;setasmgidwrap&lt;/code&gt; processing. For that reason, I did not use the permission change alone as proof of the root cause.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;What was more relevant was the complete behaviour: SQL*Plus could start the database, SRVCTL could not, and the state of the main executable was being changed again as soon as Clusterware tried to launch the database.&lt;/p&gt;

&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;Going Back to the Last Time the Database Was Running&lt;/h2&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Instead of continuing to retry the same startup, I went back through the timeline. I wanted to know when this database had last been running normally and, more importantly, why it had been stopped.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;That brought the recent patching activity into the investigation.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;I correlated the instance startup information with the SQL patch history and the Oracle Home inventory:&lt;/p&gt;

&lt;div style=&quot;background: rgb(40, 42, 54); border-color: gray; border-image: none; border-style: solid; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;&quot;&gt;
&lt;pre style=&quot;line-height: 125%; margin: 0px;&quot;&gt;&lt;span style=&quot;color: white; font-family: courier; font-size: medium; font-weight: normal;&quot;&gt;SQL&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #ff79c6; font-family: courier; font-size: medium; font-weight: normal;&quot;&gt; SELECT&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2; font-family: courier; font-size: medium; font-weight: normal;&quot;&gt; instance_name,
       host_name, SQL &amp;gt; 
       startup_time,
       status
&lt;/span&gt;&lt;span style=&quot;color: #ff79c6; font-family: courier; font-size: medium; font-weight: normal;&quot;&gt;FROM&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2; font-family: courier; font-size: medium; font-weight: normal;&quot;&gt; v$instance;
&lt;br /&gt;
&lt;/span&gt;&lt;span style=&quot;color: white; font-family: courier; font-size: medium; font-weight: normal;&quot;&gt;SQL&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #ff79c6; font-family: courier; font-size: medium; font-weight: normal;&quot;&gt; SELECT&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2; font-family: courier; font-size: medium; font-weight: normal;&quot;&gt; patch_id,
action,
status,
action_time,
description &lt;/span&gt;&lt;span style=&quot;color: #ff79c6; font-family: courier; font-size: medium; font-weight: normal;&quot;&gt;FROM&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2; font-family: courier; font-size: medium; font-weight: normal;&quot;&gt; dba_registry_sqlpatch &lt;/span&gt;&lt;span style=&quot;color: #ff79c6; font-family: courier; font-size: medium; font-weight: normal;&quot;&gt;ORDER BY&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2; font-family: courier; font-size: medium; font-weight: normal;&quot;&gt; action_time DESC;

$ORACLE_HOME/OPatch/opatch lsinventory&lt;/span&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;The database had been stopped as part of a patching activity. The patch information confirmed that patching had taken place, and when I correlated the timestamps with the database and Clusterware history, I could not find a successful normal SRVCTL-managed startup after that activity.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;One detail is worth being precise about. &lt;code style=&quot;font-family: courier;&quot;&gt;V$INSTANCE&lt;/code&gt; does not tell us whether an instance was started through SQL*Plus or SRVCTL, and &lt;code style=&quot;font-family: courier;&quot;&gt;DBA_REGISTRY_SQLPATCH&lt;/code&gt; does not record the startup method. I used these timestamps together with the patch and Clusterware history to reconstruct the sequence.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;What I now had was a much more useful timeline:&lt;/p&gt;

&lt;ul style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;
  &lt;li&gt;The database had previously been running normally.&lt;/li&gt;
  &lt;li&gt;It was stopped for patching.&lt;/li&gt;
  &lt;li&gt;The database Oracle Home had gone through patching.&lt;/li&gt;
  &lt;li&gt;There was no confirmed successful SRVCTL-managed startup afterwards.&lt;/li&gt;
  &lt;li&gt;A direct SQL*Plus startup still worked.&lt;/li&gt;
  &lt;li&gt;An SRVCTL startup failed with &lt;code style=&quot;font-family: courier;&quot;&gt;ORA-12547&lt;/code&gt;.&lt;/li&gt;
  &lt;li&gt;Correcting the Oracle executable manually did not persist; the SRVCTL attempt changed it back again.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;Why Relinking Became the Next Logical Test&lt;/h2&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;At this point there was still no single log line saying, &quot;the Oracle Home must be relinked.&quot; The direction came from the combination of evidence.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;The database engine itself could start, the problem appeared only through the Clusterware-managed path, the Oracle executable was being modified during that path, and the last significant change to the Oracle Home had been patching.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Rather than continuing to change file permissions manually, I decided to rebuild the executables in the database Oracle Home.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;With the database stopped, I ran:&lt;/p&gt;

&lt;div style=&quot;background: rgb(40, 42, 54); border-color: gray; border-image: none; border-style: solid; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;&quot;&gt;
&lt;pre style=&quot;line-height: 125%; margin: 0px;&quot;&gt;&lt;span style=&quot;color: #f8f8f2; font-family: courier; font-size: medium; font-weight: normal;&quot;&gt;$ cd $ORACLE_HOME/bin

$ relink all&lt;/span&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;The relink completed successfully. I then returned to the same operation that had been failing:&lt;/p&gt;

&lt;div style=&quot;background: rgb(40, 42, 54); border-color: gray; border-image: none; border-style: solid; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;&quot;&gt;
&lt;pre style=&quot;line-height: 125%; margin: 0px;&quot;&gt;&lt;span style=&quot;color: #f8f8f2; font-family: courier; font-size: medium; font-weight: normal;&quot;&gt;$ srvctl start database -d BPL1VODA

$ srvctl status database -d BPL1VODA&lt;db_unique_name&gt;&lt;/db_unique_name&gt;&lt;/span&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;This time the database started successfully through SRVCTL.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;That result was much more useful than simply seeing SQL*Plus work. The exact Clusterware-managed startup that had been failing before the relink was now working without manually changing the executable.&lt;/p&gt;

&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;What I Consider the Most Likely Root Cause&lt;/h2&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;I would not document this incident as &quot;ORA-12547 is fixed by relink.&quot; ORA-12547 has several possible causes, and relinking should not be used as a generic response to that error.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;For this case, the strongest explanation is that the database Oracle Home had been left in an inconsistent executable or linking state following the patching activity.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;The reasoning is based on the sequence:&lt;/p&gt;

&lt;ul style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;
  &lt;li&gt;The Oracle Home had recently been patched.&lt;/li&gt;
  &lt;li&gt;The problem appeared on the subsequent Clusterware-managed startup.&lt;/li&gt;
  &lt;li&gt;SQL*Plus could still start the instance.&lt;/li&gt;
  &lt;li&gt;SRVCTL repeatedly failed with ORA-12547.&lt;/li&gt;
  &lt;li&gt;The main Oracle executable was being returned to the same unexpected ownership/group state during the failed SRVCTL attempt.&lt;/li&gt;
  &lt;li&gt;Relinking the database Oracle Home corrected the condition.&lt;/li&gt;
  &lt;li&gt;The same SRVCTL startup succeeded immediately afterwards.&lt;/li&gt;
&lt;/ul&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Unless an older patching or relink log contains a definite linker error, I would still avoid claiming that a previous relink failure was conclusively proven. What the evidence does show is that rebuilding the Oracle executables corrected the post-patching state that was preventing Clusterware from starting the database.&lt;/p&gt;

&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;Where to Look for Evidence of a Relink Problem&lt;/h2&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;After recovering the database, it is worth going back through the logs rather than treating the successful startup as the end of the investigation.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Oracle writes relink output below &lt;code style=&quot;font-family: courier;&quot;&gt;$ORACLE_HOME/install&lt;/code&gt;. I would look for the logs created during the original patching window as well as the new successful relink log.&lt;/p&gt;

&lt;div style=&quot;background: rgb(40, 42, 54); border-color: gray; border-image: none; border-style: solid; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;&quot;&gt;
&lt;pre style=&quot;line-height: 125%; margin: 0px;&quot;&gt;&lt;span style=&quot;color: #f8f8f2; font-family: courier; font-size: medium; font-weight: normal;&quot;&gt;# Relink history
$ ls -ltr $ORACLE_HOME/install/relinkActions*

$ grep -Ein 
&#39;error|failed|fatal|undefined|cannot find|not found|ld:|collect2|make.*error&#39; 
$ORACLE_HOME/install/relinkActions*.log

# OPatch history

$ ls -ltr $ORACLE_HOME/cfgtoollogs/opatch/

$ grep -RniE &#39;relink|linking|make|error|failed&#39; ORACLE_HOME/cfgtoollogs/opatch/ 2&amp;gt;/dev/null

# Clusterware agent trace

$ grep -iE &#39;ORA-12547|&lt;db_unique_name&gt;|failed|error&#39; ORACLE_BASE/diag/crs/$(hostname -s)/crs/trace/crsd_oraagent_oracle.trc&lt;/db_unique_name&gt;&lt;/span&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;An older &lt;code style=&quot;font-family: courier;&quot;&gt;relinkActions&lt;/code&gt; log from the patching window is particularly useful. Messages such as &lt;code style=&quot;font-family: courier;&quot;&gt;undefined reference&lt;/code&gt;, &lt;code style=&quot;font-family: courier;&quot;&gt;cannot find&lt;/code&gt;, linker errors, &lt;code style=&quot;font-family: courier;&quot;&gt;make: *** Error&lt;/code&gt; or permission failures would provide direct evidence that a previous linking operation did not finish cleanly.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;The CRS agent trace may not contain an explicit relink error. Clusterware may only know that the process it launched terminated and therefore report &lt;code style=&quot;font-family: courier;&quot;&gt;ORA-12547&lt;/code&gt;. This is why the patching timeline and Oracle Home history can be more useful than searching for one specific error string.&lt;/p&gt;

&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;What the SQL*Plus Test Actually Proved&lt;/h2&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;The successful SQL*Plus startup was initially one reason to suspect SRVCTL itself, but it is important not to take that test further than it proves.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;It proved that the database instance could be started directly using that Oracle Home. It did not prove that the entire Oracle Home and the Clusterware/ASM-managed startup path were in the expected state.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;That difference was exactly where this issue was hiding.&lt;/p&gt;

&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;One Check I Would Add After Patching&lt;/h2&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;For a database managed by Oracle Clusterware, seeing an open database after patching is not enough for me to consider the startup validation complete.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;I also want to know that the database can be managed through the same path that will be used during the next restart or failover.&lt;/p&gt;

&lt;div style=&quot;background: rgb(40, 42, 54); border-color: gray; border-image: none; border-style: solid; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;&quot;&gt;
&lt;pre style=&quot;line-height: 125%; margin: 0px;&quot;&gt;&lt;span style=&quot;color: #f8f8f2; font-family: courier; font-size: medium; font-weight: normal;&quot;&gt;$ srvctl status database -d BPL1VODA

$ srvctl stop database -d BPL1VODA&lt;br /&gt;&lt;db_unique_name&gt;
$ srvctl start database -d BPL1VODA&lt;br /&gt;&lt;db_unique_name&gt;
$ srvctl status database -d BPL1VODA&lt;db_unique_name&gt;&lt;/db_unique_name&gt;&lt;/db_unique_name&gt;&lt;/db_unique_name&gt;&lt;/span&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;In this case, a manual startup would have given a false sense that everything was fine. The problem only became visible when Clusterware attempted to manage the database through SRVCTL.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;The error itself was only one part of the investigation. The useful path was to compare the two startup methods, observe what Clusterware was doing to the executable, trace the database back to the patching activity, and then test the Oracle Home rather than continuing to modify permissions manually.&lt;/p&gt;

&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;Oracle References&lt;/h2&gt;

&lt;ul style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;
  &lt;li&gt;
    &lt;a href=&quot;https://docs.oracle.com/en/error-help/db/ora-12547/&quot; rel=&quot;noopener noreferrer&quot; target=&quot;_blank&quot;&gt;Oracle Error Help – ORA-12547: TNS:lost contact&lt;/a&gt;&lt;br /&gt;
    Oracle describes ORA-12547 as the partner unexpectedly disappearing, usually during process startup.&lt;/li&gt;
  &lt;li&gt;
    &lt;a href=&quot;https://docs.oracle.com/en/database/oracle/oracle-database/19/racad/administering-database-instances-and-cluster-databases.html&quot; rel=&quot;noopener noreferrer&quot; target=&quot;_blank&quot;&gt;Oracle RAC 19c – Administering Database Instances and Cluster Databases&lt;/a&gt;&lt;br /&gt;
    Covers starting and stopping RAC databases and instances through SRVCTL.
  &lt;/li&gt;
  &lt;li&gt;
    &lt;a href=&quot;https://docs.oracle.com/en/database/oracle/oracle-database/19/racad/server-control-utility-reference.html&quot; rel=&quot;noopener noreferrer&quot; target=&quot;_blank&quot;&gt;Oracle RAC 19c – Server Control Utility Reference&lt;/a&gt;&lt;br /&gt;
    Official SRVCTL command reference for Oracle RAC resources.
  &lt;/li&gt;
&lt;/ul&gt;
</description><link>https://oracle-dba-help.blogspot.com/2026/09/ora-12547-from-srvctl-while-sqlplus.html</link><author>noreply@blogger.com (Nikhil Kotak)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1375587508974804970.post-6696147795993960978</guid><pubDate>Mon, 07 Sep 2026 05:58:00 +0000</pubDate><atom:updated>2026-09-21T15:48:30.663+08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Core DBA</category><category domain="http://www.blogger.com/atom/ns#">Tuning</category><title>Oracle CPU Spike After Statistics Gathering: A Real-World Optimizer Investigation</title><description>&lt;p&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Every Oracle DBA has experienced that moment when monitoring alerts suddenly explode across the dashboard. Everything was running smoothly, and then without a warning - the CPU utilization jumps to 95%, applications slow down, and users start reporting performance issues.&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;522&quot; data-start=&quot;330&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;One of the most frustrating parts of such incidents is when &lt;span data-end=&quot;417&quot; data-start=&quot;390&quot;&gt;nothing obvious changed&lt;/span&gt;. No deployments, no schema modifications, and no new batch jobs. Yet the database is clearly struggling.&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;825&quot; data-start=&quot;524&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;In many real-world cases, the root cause is surprisingly subtle: &lt;span data-end=&quot;663&quot; data-start=&quot;589&quot;&gt;a change in optimizer statistics leading to a different execution plan&lt;/span&gt;. Oracle&#39;s automatic statistics gathering is powerful, but it is not always perfect and especially when data distribution is skewed or histograms behave unexpectedly.&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;1139&quot; data-start=&quot;827&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;In this article, we will walk through a &lt;span data-end=&quot;912&quot; data-start=&quot;867&quot;&gt;real-world Oracle CPU spike investigation&lt;/span&gt;. You will see the step-by-step troubleshooting approach using AWR, execution plan history, and histogram analysis. We’ll also cover how the issue was fixed using manual statistics and SQL plan baselines to stabilize performance.&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;1335&quot; data-start=&quot;1141&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/p&gt;&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;p data-end=&quot;1335&quot; data-start=&quot;1141&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p data-end=&quot;1335&quot; data-start=&quot;1141&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;If you ar an &lt;span data-end=&quot;1208&quot; data-start=&quot;1154&quot;&gt;Oracle DBA responsible for production environments&lt;/span&gt;, this guide will help you recognize the warning signs and quickly resolve similar high CPU incidents before they impact users.&lt;/span&gt;&lt;/p&gt;
&lt;h2 data-end=&quot;1385&quot; data-section-id=&quot;w7acl1&quot; data-start=&quot;1342&quot;&gt;&lt;br /&gt;&lt;/h2&gt;&lt;h1 data-end=&quot;3063&quot; data-start=&quot;3022&quot;&gt;&lt;span style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;When the Database Suddenly Went High CPU&lt;/span&gt;&lt;/h1&gt;
&lt;p data-end=&quot;1459&quot; data-start=&quot;1387&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;It started as a normal afternoon when monitoring alerts began appearing.&lt;/span&gt;&lt;/p&gt;
&lt;ul data-end=&quot;1580&quot; data-start=&quot;1461&quot;&gt;
&lt;li data-end=&quot;1488&quot; data-section-id=&quot;18yhyn0&quot; data-start=&quot;1461&quot;&gt;
&lt;p data-end=&quot;1488&quot; data-start=&quot;1463&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro;&quot;&gt;CPU utilization: &lt;span data-end=&quot;1488&quot; data-start=&quot;1480&quot;&gt;95%+ and&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;Application response times was&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span data-end=&quot;1537&quot; data-start=&quot;1519&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;extremely slow&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li data-end=&quot;1580&quot; data-section-id=&quot;mfgers&quot; data-start=&quot;1538&quot;&gt;
&lt;p data-end=&quot;1580&quot; data-start=&quot;1540&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;No deployments, changes&amp;nbsp; or maintenance activities&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;1793&quot; data-start=&quot;1582&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;From an operational perspective, this scenario is common in large enterprise databases. Performance issues often arise &lt;span data-end=&quot;1792&quot; data-start=&quot;1701&quot;&gt;not from new changes, but from optimizer behaviour reacting to existing data differently&lt;/span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;1888&quot; data-start=&quot;1795&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;At this stage, the priority was clear- that is to&amp;nbsp; identify the &lt;span data-end=&quot;1887&quot; data-start=&quot;1847&quot;&gt;SQL statement consuming the most CPU&lt;/span&gt;.&lt;/span&gt;&lt;/p&gt;&lt;p data-end=&quot;1888&quot; data-start=&quot;1795&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p data-end=&quot;1888&quot; data-start=&quot;1795&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h2 data-end=&quot;1940&quot; data-section-id=&quot;1rlsb2j&quot; data-start=&quot;1895&quot;&gt;&lt;span style=&quot;color: #6fa8dc; font-family: Source Sans Pro; font-size: large;&quot;&gt;Step 1: Identify the Top SQL Consuming CPU&lt;/span&gt;&lt;/h2&gt;
&lt;p data-end=&quot;2069&quot; data-start=&quot;1942&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;The first step in any Oracle performance investigation is to determine &lt;span data-end=&quot;2068&quot; data-start=&quot;2013&quot;&gt;which SQL statement is responsible for the workload&lt;/span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;2132&quot; data-start=&quot;2071&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;A quick query against &lt;code data-end=&quot;2100&quot; data-start=&quot;2093&quot;&gt;v$sql&lt;/code&gt; revealed the top CPU consumers.&lt;/span&gt;&lt;/p&gt;&lt;!--HTML generated using hilite.me--&gt;&lt;div style=&quot;background: rgb(255, 255, 255); border-color: gray; border-image: initial; border-style: solid; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;&quot;&gt;&lt;pre style=&quot;line-height: 125%; margin: 0px;&quot;&gt;&lt;span&gt;&lt;/span&gt;SELECT&lt;span style=&quot;color: #bbbbbb;&quot;&gt; &lt;/span&gt;sql_id,&lt;span style=&quot;color: #bbbbbb;&quot;&gt; &lt;/span&gt;executions,&lt;span style=&quot;color: #bbbbbb;&quot;&gt; &lt;/span&gt;elapsed_time,&lt;span style=&quot;color: #bbbbbb;&quot;&gt; &lt;/span&gt;cpu_time,&lt;span style=&quot;color: #bbbbbb;&quot;&gt; &lt;/span&gt;sql_text
FROM&lt;span style=&quot;color: #bbbbbb;&quot;&gt; &lt;/span&gt;v$sql
ORDER&lt;span style=&quot;color: #bbbbbb;&quot;&gt; &lt;/span&gt;BY&lt;span style=&quot;color: #bbbbbb;&quot;&gt; &lt;/span&gt;cpu_time&lt;span style=&quot;color: #bbbbbb;&quot;&gt; &lt;/span&gt;DESC
FETCH&lt;span style=&quot;color: #bbbbbb;&quot;&gt; &lt;/span&gt;FIRST&lt;span style=&quot;color: #bbbbbb;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #0000dd; font-weight: bold;&quot;&gt;5&lt;/span&gt;&lt;span style=&quot;color: #bbbbbb;&quot;&gt; &lt;/span&gt;ROWS&lt;span style=&quot;color: #bbbbbb;&quot;&gt; &lt;/span&gt;ONLY;
&lt;/pre&gt;&lt;/div&gt;

&lt;pre class=&quot;overflow-visible! px-0!&quot; data-end=&quot;2263&quot; data-start=&quot;2134&quot;&gt;&lt;div class=&quot;relative w-full mt-4 mb-1&quot;&gt;&lt;div class=&quot;relative&quot;&gt;&lt;div class=&quot;h-full min-h-0 min-w-0&quot;&gt;&lt;div class=&quot;h-full min-h-0 min-w-0&quot;&gt;&lt;div class=&quot;border border-token-border-light border-radius-3xl corner-superellipse/1.1 rounded-3xl&quot;&gt;&lt;div class=&quot;h-full w-full border-radius-3xl bg-token-bg-elevated-secondary corner-superellipse/1.1 overflow-clip rounded-3xl lxnfua_clipPathFallback&quot;&gt;&lt;div class=&quot;pointer-events-none absolute inset-x-4 top-12 bottom-4&quot;&gt;&lt;div class=&quot;pointer-events-none sticky z-40 shrink-0 z-1!&quot;&gt;&lt;div class=&quot;sticky bg-token-border-light&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div class=&quot;relative z-0 flex max-w-full&quot;&gt;&lt;div class=&quot;q9tKkq_viewer cm-editor z-10 light:cm-light dark:cm-light flex h-full w-full flex-col items-stretch ͼ5 ͼj&quot; dir=&quot;ltr&quot; id=&quot;code-block-viewer&quot;&gt;&lt;div class=&quot;cm-scroller&quot;&gt;&lt;div class=&quot;cm-content q9tKkq_readonly&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;
&lt;p data-end=&quot;2321&quot; data-start=&quot;2265&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;One query clearly stood out that it was dominating CPU usage.&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;2485&quot; data-start=&quot;2323&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;This approach is widely recommended in Oracle performance tuning because &lt;span data-end=&quot;2484&quot; data-start=&quot;2396&quot;&gt;a small number of SQL statements typically account for the majority of database load&lt;/span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;2594&quot; data-start=&quot;2487&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Once the SQL ID was identified, the next step was to determine &lt;span data-end=&quot;2593&quot; data-start=&quot;2550&quot;&gt;why the query suddenly became expensive&lt;/span&gt;.&lt;/span&gt;&lt;/p&gt;&lt;p data-end=&quot;2594&quot; data-start=&quot;2487&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h2 data-end=&quot;2646&quot; data-section-id=&quot;1wd5t7q&quot; data-start=&quot;2601&quot;&gt;&lt;span style=&quot;color: #6fa8dc; font-family: Source Sans Pro; font-size: large;&quot;&gt;Step 2: Investigate Execution Plan Changes&lt;/span&gt;&lt;/h2&gt;
&lt;p data-end=&quot;2753&quot; data-start=&quot;2648&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Oracle queries can suddenly become slower if the optimizer decides to use a &lt;span data-end=&quot;2752&quot; data-start=&quot;2724&quot;&gt;different execution plan&lt;/span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;2821&quot; data-start=&quot;2755&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;To verify this, the historical execution plans were checked using:&lt;/span&gt;&lt;/p&gt;
&lt;pre class=&quot;overflow-visible! px-0!&quot; data-end=&quot;2912&quot; data-start=&quot;2823&quot;&gt;&lt;div class=&quot;relative w-full mt-4 mb-1&quot;&gt;&lt;div&gt;&lt;div class=&quot;relative&quot;&gt;&lt;div class=&quot;h-full min-h-0 min-w-0&quot;&gt;&lt;div class=&quot;h-full min-h-0 min-w-0&quot;&gt;&lt;div class=&quot;border border-token-border-light border-radius-3xl corner-superellipse/1.1 rounded-3xl&quot;&gt;&lt;div class=&quot;h-full w-full border-radius-3xl bg-token-bg-elevated-secondary corner-superellipse/1.1 overflow-clip rounded-3xl lxnfua_clipPathFallback&quot;&gt;&lt;div class=&quot;pointer-events-none absolute inset-x-4 top-12 bottom-4&quot;&gt;&lt;div class=&quot;pointer-events-none sticky z-40 shrink-0 z-1!&quot;&gt;&lt;div class=&quot;sticky bg-token-border-light&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div class=&quot;relative z-0 flex max-w-full&quot;&gt;&lt;div class=&quot;q9tKkq_viewer cm-editor z-10 light:cm-light dark:cm-light flex h-full w-full flex-col items-stretch ͼ5 ͼj&quot; dir=&quot;ltr&quot; id=&quot;code-block-viewer&quot;&gt;&lt;div class=&quot;cm-scroller&quot;&gt;&lt;div class=&quot;cm-content q9tKkq_readonly&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;span class=&quot;ͼ8&quot;&gt;SELECT&lt;/span&gt; &lt;span class=&quot;ͼ8&quot;&gt;*&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;ͼ8&quot;&gt;FROM&lt;/span&gt; dba_hist_sql_plan&lt;br /&gt;&lt;span class=&quot;ͼ8&quot;&gt;WHERE&lt;/span&gt; sql_id&lt;span class=&quot;ͼ8&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;ͼc&quot;&gt;&#39;sqlid0sqltext1&#39;&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;ͼ8&quot;&gt;ORDER&lt;/span&gt; &lt;span class=&quot;ͼ8&quot;&gt;BY&lt;/span&gt; &lt;span class=&quot;ͼe&quot;&gt;timestamp&lt;/span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;
&lt;p data-end=&quot;2954&quot; data-start=&quot;2914&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;The result showed something interesting.&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;3039&quot; data-start=&quot;2956&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;The query&#39;s execution plan &lt;span data-end=&quot;3038&quot; data-start=&quot;2983&quot;&gt;changed after the nightly statistics collection job&lt;/span&gt;.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large;&quot;&gt;This explained why the query had been performing well previously but suddenly started consuming excessive CPU resources.&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;3292&quot; data-start=&quot;3163&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Execution plan changes triggered by statistics updates are a well-known cause of performance issues in large Oracle environments.&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;3344&quot; data-start=&quot;3294&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro;&quot;&gt;But why did the optimizer choose a different plan?&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;The answer often lies in &lt;/span&gt;&lt;span data-end=&quot;3407&quot; data-start=&quot;3371&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;histograms and data distribution&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;

&lt;h2 data-end=&quot;3470&quot; data-section-id=&quot;icnia3&quot; data-start=&quot;3415&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large; font-weight: normal;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/h2&gt;&lt;h2 data-end=&quot;3470&quot; data-section-id=&quot;icnia3&quot; data-start=&quot;3415&quot;&gt;&lt;span style=&quot;color: #6fa8dc; font-family: Source Sans Pro; font-size: large;&quot;&gt;Step 3: Check Histogram Behaviour on Critical Columns&lt;/span&gt;&lt;/h2&gt;
&lt;p data-end=&quot;3604&quot; data-start=&quot;3472&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Histograms help Oracle understand &lt;span data-end=&quot;3542&quot; data-start=&quot;3506&quot;&gt;data distribution within columns&lt;/span&gt;, which is essential for generating efficient execution plans.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large;&quot;&gt;However, they can also introduce instability when data is skewed.&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;3748&quot; data-start=&quot;3673&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;To investigate further, the histogram for the relevant column was examined.&lt;/span&gt;&lt;/p&gt;&lt;!--HTML generated using hilite.me--&gt;&lt;div style=&quot;background: rgb(255, 255, 255); border-color: gray; border-image: initial; border-style: solid; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;&quot;&gt;&lt;pre style=&quot;line-height: 125%; margin: 0px;&quot;&gt;&lt;span&gt;&lt;/span&gt;SQL&lt;span style=&quot;color: #333333;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #bbbbbb;&quot;&gt; &lt;/span&gt;SELECT&lt;span style=&quot;color: #bbbbbb;&quot;&gt; &lt;/span&gt;endpoint_value&lt;span style=&quot;color: #333333;&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: #bbbbbb;&quot;&gt; &lt;/span&gt;endpoint_number
FROM&lt;span style=&quot;color: #bbbbbb;&quot;&gt; &lt;/span&gt;dba_tab_histograms
WHERE&lt;span style=&quot;color: #bbbbbb;&quot;&gt; &lt;/span&gt;table_name&lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt;&#39;EMPLOYEE&#39;
AND&lt;span style=&quot;color: #bbbbbb;&quot;&gt; &lt;/span&gt;column_name&lt;span style=&quot;color: #333333;&quot;&gt;=&lt;/span&gt;&#39;EMPLOYEE_FEED&#39;;
&lt;/pre&gt;&lt;/div&gt;

&lt;pre class=&quot;overflow-visible! px-0!&quot; data-end=&quot;3881&quot; data-start=&quot;3750&quot;&gt;&lt;div class=&quot;relative w-full mt-4 mb-1&quot;&gt;&lt;div class=&quot;relative&quot;&gt;&lt;div class=&quot;h-full min-h-0 min-w-0&quot;&gt;&lt;div class=&quot;h-full min-h-0 min-w-0&quot;&gt;&lt;div class=&quot;border border-token-border-light border-radius-3xl corner-superellipse/1.1 rounded-3xl&quot;&gt;&lt;div class=&quot;h-full w-full border-radius-3xl bg-token-bg-elevated-secondary corner-superellipse/1.1 overflow-clip rounded-3xl lxnfua_clipPathFallback&quot;&gt;&lt;div class=&quot;pointer-events-none absolute inset-x-4 top-12 bottom-4&quot;&gt;&lt;div class=&quot;pointer-events-none sticky z-40 shrink-0 z-1!&quot;&gt;&lt;div class=&quot;sticky bg-token-border-light&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div class=&quot;relative z-0 flex max-w-full&quot;&gt;&lt;div class=&quot;q9tKkq_viewer cm-editor z-10 light:cm-light dark:cm-light flex h-full w-full flex-col items-stretch ͼ5 ͼj&quot; dir=&quot;ltr&quot; id=&quot;code-block-viewer&quot;&gt;&lt;div class=&quot;cm-scroller&quot;&gt;&lt;div class=&quot;cm-content q9tKkq_readonly&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;
&lt;p data-end=&quot;3961&quot; data-start=&quot;3883&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro;&quot;&gt;The results showed a &lt;/span&gt;&lt;span data-end=&quot;3934&quot; data-start=&quot;3904&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;highly skewed distribution&lt;/span&gt;&lt;span style=&quot;font-family: Source Sans Pro;&quot;&gt; in the&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;white-space: pre;&quot;&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;EMPLOYEE_FEED &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-family: Source Sans Pro;&quot;&gt;column.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;4125&quot; data-start=&quot;3963&quot;&gt;&lt;span&gt;&lt;span style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large;&quot;&gt;When statistics were gathered using the default &lt;/span&gt;&lt;code data-end=&quot;4029&quot; data-start=&quot;4011&quot;&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;AUTO_SAMPLE_SIZE&lt;/span&gt;&lt;/code&gt;&lt;span style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large;&quot;&gt;, the optimizer misinterpreted the data distribution and selected an inefficient execution plan.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;4247&quot; data-start=&quot;4127&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;This is not uncommon in production environments with &lt;span data-end=&quot;4204&quot; data-start=&quot;4180&quot;&gt;skewed data patterns&lt;/span&gt;, such as regional or status-based columns.&lt;/span&gt;&lt;/p&gt;&lt;p data-end=&quot;4247&quot; data-start=&quot;4127&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h1 data-end=&quot;3063&quot; data-start=&quot;3022&quot;&gt;&lt;span style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: xx-large;&quot;&gt;Fixing the Issue: Stabilizing the Optimizer&lt;/span&gt;&lt;/h1&gt;
&lt;p data-end=&quot;4372&quot; data-start=&quot;4302&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Once the root cause was identified, two corrective actions were taken.&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-end=&quot;4425&quot; data-section-id=&quot;5inenh&quot; data-start=&quot;4374&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large; font-weight: normal;&quot;&gt;1. Regather Statistics with Controlled Sampling&lt;/span&gt;&lt;/h3&gt;
&lt;p data-end=&quot;4520&quot; data-start=&quot;4427&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Instead of relying on automatic sampling, statistics were gathered with a manual sample size.&lt;/span&gt;&lt;/p&gt;&lt;!--HTML generated using hilite.me--&gt;&lt;div style=&quot;background: rgb(255, 255, 255); border-color: gray; border-image: initial; border-style: solid; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;&quot;&gt;&lt;pre style=&quot;line-height: 125%; margin: 0px;&quot;&gt;&lt;span&gt;&lt;/span&gt;EXEC&lt;span style=&quot;color: #bbbbbb;&quot;&gt; &lt;/span&gt;DBMS_STATS&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;GATHER_TABLE_STATS(
&lt;span style=&quot;color: #bbbbbb;&quot;&gt;    &lt;/span&gt;&#39;SALES&#39;&lt;span style=&quot;color: #333333;&quot;&gt;,&lt;/span&gt;
&lt;span style=&quot;color: #bbbbbb;&quot;&gt;    &lt;/span&gt;&#39;CUSTOMERS&#39;&lt;span style=&quot;color: #333333;&quot;&gt;,&lt;/span&gt;
&lt;span style=&quot;color: #bbbbbb;&quot;&gt;    &lt;/span&gt;estimate_percent&lt;span style=&quot;color: #333333;&quot;&gt;=&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #0000dd; font-weight: bold;&quot;&gt;50&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;,&lt;/span&gt;
&lt;span style=&quot;color: #bbbbbb;&quot;&gt;    &lt;/span&gt;method_opt&lt;span style=&quot;color: #333333;&quot;&gt;=&amp;gt;&lt;/span&gt;&#39;FOR&lt;span style=&quot;color: #bbbbbb;&quot;&gt; &lt;/span&gt;ALL&lt;span style=&quot;color: #bbbbbb;&quot;&gt; &lt;/span&gt;COLUMNS&lt;span style=&quot;color: #bbbbbb;&quot;&gt; &lt;/span&gt;SIZE&lt;span style=&quot;color: #bbbbbb;&quot;&gt; &lt;/span&gt;AUTO&#39;
);
&lt;/pre&gt;&lt;/div&gt;

&lt;pre class=&quot;overflow-visible! px-0!&quot; data-end=&quot;4671&quot; data-start=&quot;4522&quot;&gt;&lt;div class=&quot;relative w-full mt-4 mb-1&quot;&gt;&lt;div class=&quot;relative&quot;&gt;&lt;div class=&quot;h-full min-h-0 min-w-0&quot;&gt;&lt;div class=&quot;h-full min-h-0 min-w-0&quot;&gt;&lt;div class=&quot;border border-token-border-light border-radius-3xl corner-superellipse/1.1 rounded-3xl&quot;&gt;&lt;div class=&quot;h-full w-full border-radius-3xl bg-token-bg-elevated-secondary corner-superellipse/1.1 overflow-clip rounded-3xl lxnfua_clipPathFallback&quot;&gt;&lt;div class=&quot;pointer-events-none absolute inset-x-4 top-12 bottom-4&quot;&gt;&lt;div class=&quot;pointer-events-none sticky z-40 shrink-0 z-1!&quot;&gt;&lt;div class=&quot;sticky bg-token-border-light&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div class=&quot;relative z-0 flex max-w-full&quot;&gt;&lt;div class=&quot;q9tKkq_viewer cm-editor z-10 light:cm-light dark:cm-light flex h-full w-full flex-col items-stretch ͼ5 ͼj&quot; dir=&quot;ltr&quot; id=&quot;code-block-viewer&quot;&gt;&lt;div class=&quot;cm-scroller&quot;&gt;&lt;div class=&quot;cm-content q9tKkq_readonly&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;
&lt;p data-end=&quot;4787&quot; data-start=&quot;4673&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Using a higher sample percentage provides &lt;span data-end=&quot;4754&quot; data-start=&quot;4715&quot;&gt;more accurate cardinality estimates&lt;/span&gt;, especially for skewed datasets.&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-end=&quot;4857&quot; data-section-id=&quot;vtyr12&quot; data-start=&quot;4794&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large; font-weight: normal;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/h3&gt;&lt;h3 data-end=&quot;4857&quot; data-section-id=&quot;vtyr12&quot; data-start=&quot;4794&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;2. Capture the Good Execution Plan Using SQL Plan Baselines&lt;/span&gt;&lt;/h3&gt;
&lt;p data-end=&quot;4976&quot; data-start=&quot;4859&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;To prevent the optimizer from choosing an unstable plan again, the working plan was locked using SQL Plan Management.&lt;/span&gt;&lt;/p&gt;&lt;!--HTML generated using hilite.me--&gt;&lt;div style=&quot;background: rgb(255, 255, 255); border-color: gray; border-image: initial; border-style: solid; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;&quot;&gt;&lt;pre style=&quot;line-height: 125%; margin: 0px;&quot;&gt;&lt;span&gt;&lt;/span&gt;EXEC&lt;span style=&quot;color: #bbbbbb;&quot;&gt; &lt;/span&gt;DBMS_SPM&lt;span style=&quot;color: #333333;&quot;&gt;.&lt;/span&gt;LOAD_PLANS_FROM_CURSOR_CACHE(
&lt;span style=&quot;color: #bbbbbb;&quot;&gt;    &lt;/span&gt;sql_id&lt;span style=&quot;color: #333333;&quot;&gt;=&amp;gt;&lt;/span&gt;&#39;sqlid0sqltext1&#39;
);
&lt;/pre&gt;&lt;/div&gt;

&lt;pre class=&quot;overflow-visible! px-0!&quot; data-end=&quot;5061&quot; data-start=&quot;4978&quot;&gt;&lt;div class=&quot;relative w-full mt-4 mb-1&quot;&gt;&lt;div class=&quot;relative&quot;&gt;&lt;div class=&quot;h-full min-h-0 min-w-0&quot;&gt;&lt;div class=&quot;h-full min-h-0 min-w-0&quot;&gt;&lt;div class=&quot;border border-token-border-light border-radius-3xl corner-superellipse/1.1 rounded-3xl&quot;&gt;&lt;div class=&quot;h-full w-full border-radius-3xl bg-token-bg-elevated-secondary corner-superellipse/1.1 overflow-clip rounded-3xl lxnfua_clipPathFallback&quot;&gt;&lt;div class=&quot;pointer-events-none absolute inset-x-4 top-12 bottom-4&quot;&gt;&lt;div class=&quot;pointer-events-none sticky z-40 shrink-0 z-1!&quot;&gt;&lt;div class=&quot;sticky bg-token-border-light&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div class=&quot;relative z-0 flex max-w-full&quot;&gt;&lt;div class=&quot;q9tKkq_viewer cm-editor z-10 light:cm-light dark:cm-light flex h-full w-full flex-col items-stretch ͼ5 ͼj&quot; dir=&quot;ltr&quot; id=&quot;code-block-viewer&quot;&gt;&lt;div class=&quot;cm-scroller&quot;&gt;&lt;div class=&quot;cm-content q9tKkq_readonly&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;
&lt;p data-end=&quot;5204&quot; data-start=&quot;5063&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;SQL Plan Baselines allow Oracle to &lt;span data-end=&quot;5127&quot; data-start=&quot;5098&quot;&gt;preserve known good plans&lt;/span&gt;, preventing unexpected performance regressions caused by statistics updates.&lt;/span&gt;&lt;/p&gt;
&lt;h2 data-end=&quot;5235&quot; data-section-id=&quot;1lqsij9&quot; data-start=&quot;5211&quot;&gt;&lt;br /&gt;&lt;/h2&gt;&lt;h2 data-end=&quot;5235&quot; data-section-id=&quot;1lqsij9&quot; data-start=&quot;5211&quot;&gt;&lt;span style=&quot;color: #6fa8dc; font-family: Source Sans Pro; font-size: large;&quot;&gt;Results After the Fix&lt;/span&gt;&lt;/h2&gt;
&lt;p data-end=&quot;5279&quot; data-start=&quot;5237&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;The impact of these changes was immediate.&lt;/span&gt;&lt;/p&gt;
&lt;ul data-end=&quot;5398&quot; data-start=&quot;5281&quot;&gt;
&lt;li data-end=&quot;5319&quot; data-section-id=&quot;x3nxxb&quot; data-start=&quot;5281&quot;&gt;
&lt;p data-end=&quot;5319&quot; data-start=&quot;5283&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;CPU usage dropped from &lt;span data-end=&quot;5319&quot; data-start=&quot;5306&quot;&gt;95% → 40%&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li data-end=&quot;5361&quot; data-section-id=&quot;so2d44&quot; data-start=&quot;5320&quot;&gt;
&lt;p data-end=&quot;5361&quot; data-start=&quot;5322&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Query response times returned to normal&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li data-end=&quot;5398&quot; data-section-id=&quot;154wes9&quot; data-start=&quot;5362&quot;&gt;
&lt;p data-end=&quot;5398&quot; data-start=&quot;5364&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Application performance stabilized&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;5524&quot; data-start=&quot;5400&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;This confirmed that the issue was entirely caused by &lt;span data-end=&quot;5523&quot; data-start=&quot;5453&quot;&gt;optimizer misestimation due to statistics sampling and skewed data&lt;/span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;h2 data-end=&quot;5584&quot; data-section-id=&quot;l2fx4m&quot; data-start=&quot;5531&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large; font-weight: normal;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/h2&gt;&lt;h2 data-end=&quot;5584&quot; data-section-id=&quot;l2fx4m&quot; data-start=&quot;5531&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large; font-weight: normal;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/h2&gt;&lt;h2 data-end=&quot;5584&quot; data-section-id=&quot;l2fx4m&quot; data-start=&quot;5531&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;span style=&quot;color: #6fa8dc;&quot;&gt;Unique Insight:&lt;/span&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt; Why Auto Statistics Sometimes Fail&lt;/span&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-end=&quot;5703&quot; data-start=&quot;5586&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Oracle&#39;s automatic statistics gathering works well in most environments, but it can struggle in situations involving:&lt;/span&gt;&lt;/p&gt;
&lt;ul data-end=&quot;5832&quot; data-start=&quot;5705&quot;&gt;
&lt;li data-end=&quot;5725&quot; data-section-id=&quot;ox1e3s&quot; data-start=&quot;5705&quot;&gt;
&lt;p data-end=&quot;5725&quot; data-start=&quot;5707&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Highly skewed data&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li data-end=&quot;5763&quot; data-section-id=&quot;7w7fop&quot; data-start=&quot;5726&quot;&gt;
&lt;p data-end=&quot;5763&quot; data-start=&quot;5728&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Rapidly changing data distributions&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li data-end=&quot;5790&quot; data-section-id=&quot;owxwrf&quot; data-start=&quot;5764&quot;&gt;
&lt;p data-end=&quot;5790&quot; data-start=&quot;5766&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Large partitioned tables&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li data-end=&quot;5832&quot; data-section-id=&quot;15kl1we&quot; data-start=&quot;5791&quot;&gt;
&lt;p data-end=&quot;5832&quot; data-start=&quot;5793&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Queries sensitive to histogram accuracy&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;5996&quot; data-start=&quot;5834&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Many DBAs assume automatic statistics are always safe, but in high-scale systems, &lt;span data-end=&quot;5995&quot; data-start=&quot;5916&quot;&gt;controlled statistics strategies often produce more predictable performance&lt;/span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;6036&quot; data-start=&quot;5998&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Experienced DBAs frequently implement:&lt;/span&gt;&lt;/p&gt;
&lt;ul data-end=&quot;6147&quot; data-start=&quot;6038&quot;&gt;
&lt;li data-end=&quot;6072&quot; data-section-id=&quot;zg0vup&quot; data-start=&quot;6038&quot;&gt;
&lt;p data-end=&quot;6072&quot; data-start=&quot;6040&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Custom stats gathering schedules&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li data-end=&quot;6105&quot; data-section-id=&quot;oyv7pu&quot; data-start=&quot;6073&quot;&gt;
&lt;p data-end=&quot;6105&quot; data-start=&quot;6075&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Column-level histogram control&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;li data-end=&quot;6105&quot; data-section-id=&quot;oyv7pu&quot; data-start=&quot;6073&quot;&gt;&lt;p data-end=&quot;6105&quot; data-start=&quot;6075&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large;&quot;&gt;SQL Plan Baselines for critical queries&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;6226&quot; data-start=&quot;6149&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;This combination provides both &lt;span data-end=&quot;6225&quot; data-start=&quot;6180&quot;&gt;optimizer intelligence and plan stability&lt;/span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;h2 data-end=&quot;6251&quot; data-section-id=&quot;3auoiu&quot; data-start=&quot;6233&quot;&gt;&lt;span style=&quot;color: #6fa8dc; font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/h2&gt;&lt;h2 data-end=&quot;6251&quot; data-section-id=&quot;3auoiu&quot; data-start=&quot;6233&quot;&gt;&lt;span style=&quot;color: #6fa8dc; font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/h2&gt;&lt;h2 data-end=&quot;6251&quot; data-section-id=&quot;3auoiu&quot; data-start=&quot;6233&quot;&gt;&lt;span style=&quot;color: #6fa8dc; font-family: Source Sans Pro; font-size: large;&quot;&gt;Quick Takeaways&lt;/span&gt;&lt;/h2&gt;
&lt;ul data-end=&quot;6749&quot; data-start=&quot;6253&quot;&gt;
&lt;li data-end=&quot;6338&quot; data-section-id=&quot;qmsr6c&quot; data-start=&quot;6253&quot;&gt;
&lt;p data-end=&quot;6338&quot; data-start=&quot;6255&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;High CPU spikes in Oracle databases are often caused by &lt;span data-end=&quot;6337&quot; data-start=&quot;6311&quot;&gt;execution plan changes&lt;/span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li data-end=&quot;6404&quot; data-section-id=&quot;1sg44o1&quot; data-start=&quot;6339&quot;&gt;
&lt;p data-end=&quot;6404&quot; data-start=&quot;6341&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Always identify the &lt;span data-end=&quot;6403&quot; data-start=&quot;6361&quot;&gt;top CPU-consuming SQL statements first&lt;/span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li data-end=&quot;6473&quot; data-section-id=&quot;1uglmoo&quot; data-start=&quot;6405&quot;&gt;
&lt;p data-end=&quot;6473&quot; data-start=&quot;6407&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Statistics updates can trigger unexpected &lt;span data-end=&quot;6472&quot; data-start=&quot;6449&quot;&gt;optimizer decisions&lt;/span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li data-end=&quot;6547&quot; data-section-id=&quot;2s83i0&quot; data-start=&quot;6474&quot;&gt;
&lt;p data-end=&quot;6547&quot; data-start=&quot;6476&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Histograms on skewed columns may cause incorrect cardinality estimates.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li data-end=&quot;6608&quot; data-section-id=&quot;17r35cq&quot; data-start=&quot;6548&quot;&gt;
&lt;p data-end=&quot;6608&quot; data-start=&quot;6550&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Manual statistics sampling can improve optimizer accuracy.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li data-end=&quot;6671&quot; data-section-id=&quot;q1tp0o&quot; data-start=&quot;6609&quot;&gt;
&lt;p data-end=&quot;6671&quot; data-start=&quot;6611&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;SQL Plan Baselines help &lt;span data-end=&quot;6670&quot; data-start=&quot;6635&quot;&gt;prevent performance regressions&lt;/span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li data-end=&quot;6749&quot; data-section-id=&quot;6rf8l9&quot; data-start=&quot;6672&quot;&gt;
&lt;p data-end=&quot;6749&quot; data-start=&quot;6674&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Stable statistics strategies are critical for &lt;span data-end=&quot;6748&quot; data-start=&quot;6720&quot;&gt;large production systems&lt;/span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-end=&quot;6769&quot; data-section-id=&quot;8dtpi&quot; data-start=&quot;6756&quot;&gt;&lt;br /&gt;&lt;/h2&gt;&lt;h1 data-end=&quot;3063&quot; data-start=&quot;3022&quot;&gt;&lt;span style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: xx-large;&quot;&gt;Conclusion&lt;/span&gt;&lt;/h1&gt;
&lt;p data-end=&quot;6960&quot; data-start=&quot;6771&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Unexpected CPU spikes are among the most stressful incidents for any Oracle DBA. What makes them particularly challenging is that they often occur &lt;span data-end=&quot;6959&quot; data-start=&quot;6918&quot;&gt;without obvious changes to the system&lt;/span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;7218&quot; data-start=&quot;6962&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;As this case demonstrated, the root cause can sometimes be hidden in something as routine as &lt;span data-end=&quot;7090&quot; data-start=&quot;7055&quot;&gt;automatic statistics collection&lt;/span&gt;. When data distribution is skewed, the optimizer may misinterpret cardinality estimates and choose inefficient execution plans.&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;7506&quot; data-start=&quot;7220&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;The key to resolving such issues quickly is a &lt;span data-end=&quot;7303&quot; data-start=&quot;7266&quot;&gt;structured investigation approach&lt;/span&gt;. Start by identifying the top SQL statements consuming resources, verify whether the execution plan has changed, and analyze histograms or statistics that might have influenced the optimizer’s decision.&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;7786&quot; data-start=&quot;7508&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;More importantly, prevention is just as critical as troubleshooting. Implementing &lt;span data-end=&quot;7713&quot; data-start=&quot;7590&quot;&gt;controlled statistics gathering, monitoring histogram behavior, and protecting critical queries with SQL Plan Baselines&lt;/span&gt; can significantly reduce the risk of unexpected performance regressions.&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;8051&quot; data-start=&quot;7788&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;For Oracle DBAs managing high-volume production systems, understanding how the optimizer interprets statistics is a crucial skill. The database optimizer is powerful—but like any intelligent system, it performs best when guided with the right data and safeguards.&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;8244&quot; data-start=&quot;8053&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;If you’ve encountered similar optimizer surprises in your environment, consider reviewing your statistics strategy today. A small adjustment could prevent the next major performance incident.&lt;/span&gt;&lt;/p&gt;
&lt;hr data-end=&quot;8249&quot; data-start=&quot;8246&quot; /&gt;&lt;h1 data-end=&quot;3063&quot; data-start=&quot;3022&quot;&gt;&lt;span style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: xx-large;&quot;&gt;Frequently Asked Questions (FAQs)&lt;/span&gt;&lt;/h1&gt;
&lt;h3 data-end=&quot;8360&quot; data-section-id=&quot;1set2bp&quot; data-start=&quot;8289&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large; font-weight: normal;&quot;&gt;1. Why do Oracle execution plans change after statistics gathering?&lt;/span&gt;&lt;/h3&gt;
&lt;p data-end=&quot;8575&quot; data-start=&quot;8362&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Execution plans may change because the optimizer uses updated statistics to estimate cardinality and costs. If the new statistics differ significantly from previous ones, the optimizer may choose a different plan.&lt;/span&gt;&lt;/p&gt;
&lt;hr data-end=&quot;8580&quot; data-start=&quot;8577&quot; /&gt;
&lt;h3 data-end=&quot;8645&quot; data-section-id=&quot;5jxt4w&quot; data-start=&quot;8582&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large; font-weight: normal;&quot;&gt;2. What is AUTO_SAMPLE_SIZE in Oracle statistics gathering?&lt;/span&gt;&lt;/h3&gt;
&lt;p data-end=&quot;8824&quot; data-start=&quot;8647&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;AUTO_SAMPLE_SIZE allows Oracle to automatically determine the sampling rate for statistics collection. While convenient, it may sometimes misrepresent skewed data distributions.&lt;/span&gt;&lt;/p&gt;
&lt;hr data-end=&quot;8829&quot; data-start=&quot;8826&quot; /&gt;
&lt;h3 data-end=&quot;8878&quot; data-section-id=&quot;1kmptzv&quot; data-start=&quot;8831&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large; font-weight: normal;&quot;&gt;3. When should DBAs use SQL Plan Baselines?&lt;/span&gt;&lt;/h3&gt;
&lt;p data-end=&quot;9032&quot; data-start=&quot;8880&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;SQL Plan Baselines are useful for &lt;span data-end=&quot;8975&quot; data-start=&quot;8914&quot;&gt;critical queries where performance stability is essential&lt;/span&gt;, especially in systems with frequent statistics updates.&lt;/span&gt;&lt;/p&gt;
&lt;hr data-end=&quot;9037&quot; data-start=&quot;9034&quot; /&gt;
&lt;h3 data-end=&quot;9089&quot; data-section-id=&quot;1ee5yka&quot; data-start=&quot;9039&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large; font-weight: normal;&quot;&gt;4. How do histograms affect query performance?&lt;/span&gt;&lt;/h3&gt;
&lt;p data-end=&quot;9285&quot; data-start=&quot;9091&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Histograms provide detailed information about data distribution. They help the optimizer estimate row counts accurately, but if misinterpreted, they can also lead to inefficient execution plans.&lt;/span&gt;&lt;/p&gt;
&lt;hr data-end=&quot;9290&quot; data-start=&quot;9287&quot; /&gt;
&lt;h3 data-end=&quot;9357&quot; data-section-id=&quot;l4ienz&quot; data-start=&quot;9292&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large; font-weight: normal;&quot;&gt;5. How can DBAs prevent optimizer-related performance issues?&lt;/span&gt;&lt;/h3&gt;
&lt;p data-end=&quot;9382&quot; data-start=&quot;9359&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Best practices include:&lt;/span&gt;&lt;/p&gt;
&lt;ul data-end=&quot;9533&quot; data-start=&quot;9384&quot;&gt;
&lt;li data-end=&quot;9421&quot; data-section-id=&quot;1k2h4gg&quot; data-start=&quot;9384&quot;&gt;
&lt;p data-end=&quot;9421&quot; data-start=&quot;9386&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Monitoring execution plan changes&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li data-end=&quot;9455&quot; data-section-id=&quot;1axjr3k&quot; data-start=&quot;9422&quot;&gt;
&lt;p data-end=&quot;9455&quot; data-start=&quot;9424&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Managing histograms carefully&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li data-end=&quot;9485&quot; data-section-id=&quot;s7smu8&quot; data-start=&quot;9456&quot;&gt;
&lt;p data-end=&quot;9485&quot; data-start=&quot;9458&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Using SQL Plan Management&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li data-end=&quot;9533&quot; data-section-id=&quot;mkbuvf&quot; data-start=&quot;9486&quot;&gt;
&lt;p data-end=&quot;9533&quot; data-start=&quot;9488&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Gathering statistics with controlled sampling&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-end=&quot;9538&quot; data-start=&quot;9535&quot; /&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;color: #e06666; font-family: Source Sans Pro; font-size: x-large;&quot;&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;color: #e06666; font-family: Source Sans Pro; font-size: x-large;&quot;&gt;&lt;b&gt;Share Your Thoughts&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;
&lt;p data-end=&quot;9651&quot; data-start=&quot;9564&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro;&quot;&gt;Have you ever experienced a sudden Oracle CPU spike caused by an optimizer plan change?&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;Would love to hear how you diagnosed and resolved it in your environment.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;9927&quot; data-start=&quot;9726&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;If you found this article useful, feel free to &lt;span data-end=&quot;9836&quot; data-start=&quot;9773&quot;&gt;share it with fellow DBAs or your database engineering team&lt;/span&gt;. Real-world troubleshooting stories often help others avoid the same production surprises.&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;9978&quot; data-is-last-node=&quot;&quot; data-is-only-node=&quot;&quot; data-start=&quot;9929&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Your feedback and experiences are always welcome!&lt;/span&gt;&lt;/p&gt;</description><link>https://oracle-dba-help.blogspot.com/2026/09/oracle-cpu-spike-fix.html</link><author>noreply@blogger.com (Nikhil Kotak)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1375587508974804970.post-2791962260503797057</guid><pubDate>Sun, 06 Sep 2026 10:55:00 +0000</pubDate><atom:updated>2026-09-21T15:49:06.711+08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Interview Questions</category><title>Split Brain in Oracle RAC: What Every DBA Must Know</title><description>&lt;div style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&amp;nbsp; &amp;nbsp;If you have worked with Oracle RAC long enough, you know the cluster is only as strong as its communication layer. Most days, RAC behaves beautifully ; instances coordinate, cache fusion works seamlessly, and life is good. But when inter-node communication breaks down, things can get ugly very quickly.&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;span&gt;&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;/span&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;br /&gt;One of the most dangerous scenarios in a RAC environment is a split brain condition. It is not just a theoretical concept., it is something that can bring your cluster to its knees if not handled correctly. I have personally seen environments where a poorly configured interconnect or a flaky switch triggered node evictions during peak hours&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;br /&gt;In this article, I will break down what split brain really means in practical terms, how Oracle RAC prevents it, and what you as a DBA should monitor proactively. We will also go through essential commands, real-world scenarios, and operational insights that are rarely discussed in documentation.&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro;&quot;&gt;&lt;span style=&quot;color: #e06666; font-size: x-large;&quot;&gt;&lt;b&gt;What Split Brain Actually Means in RAC&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;font-size: large;&quot;&gt;At its core, split brain is a communication failure between RAC nodes.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-size: large;&quot;&gt;When nodes stop seeing each other over the private interconnect, each node may assume it is the only surviving member of the cluster. Now imagine both nodes continuing to process transactions independently against the same storage—that is where data corruption risk comes in.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;color: #6fa8dc;&quot;&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;color: #6fa8dc;&quot;&gt;&lt;b&gt;In a healthy RAC setup:&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;/p&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;The Nodes exchange heartbeat signals over the private interconnect&lt;/li&gt;&lt;li&gt;Clusterware keeps track of node membership &amp;amp;&amp;nbsp;All nodes agree on cluster state&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;div style=&quot;color: #6fa8dc; font-weight: bold; text-align: left;&quot;&gt;&lt;span style=&quot;color: #6fa8dc; font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;span style=&quot;color: #6fa8dc; font-weight: bold;&quot;&gt;In a split scenario:&lt;/span&gt;&lt;br /&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Heartbeat is lost &amp;amp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Nodes cannot validate each other&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;
Each node believes the other is down&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/span&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Oracle does not allow both to continue. It forces a decision.&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro;&quot;&gt;&lt;span style=&quot;color: #e06666; font-size: x-large;&quot;&gt;&lt;b&gt;Why Split Brain Happens in Production&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;font-size: large;&quot;&gt;From experience, split brain is rarely caused by a single obvious failure. It is often a combination of infrastructure and configuration issues.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-size: large;&quot;&gt;Common triggers I have seen:&lt;/span&gt;&lt;/span&gt;&lt;ul data-end=&quot;2222&quot; data-start=&quot;2165&quot;&gt;&lt;li data-end=&quot;2222&quot; data-section-id=&quot;1r1g0qf&quot; data-start=&quot;2136&quot;&gt;&lt;strong data-end=&quot;2162&quot; data-start=&quot;2138&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Interconnect failure&amp;nbsp;&lt;/span&gt;&lt;/strong&gt;&lt;/li&gt;&lt;li data-end=&quot;2222&quot; data-section-id=&quot;10uj6a2&quot; data-start=&quot;2165&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;NIC issues, bonding misconfiguration, or cable problems
&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul data-end=&quot;2330&quot; data-start=&quot;2255&quot;&gt;&lt;li data-end=&quot;2330&quot; data-section-id=&quot;1b746ld&quot; data-start=&quot;2223&quot;&gt;&lt;strong data-end=&quot;2252&quot; data-start=&quot;2225&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Network switch problems&lt;/span&gt;&lt;/strong&gt;&lt;/li&gt;&lt;li data-end=&quot;2330&quot; data-section-id=&quot;nw6uvm&quot; data-start=&quot;2255&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Especially when interconnect traffic shares switches with other workloads
&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul data-end=&quot;2417&quot; data-start=&quot;2359&quot;&gt;&lt;li data-end=&quot;2417&quot; data-section-id=&quot;1oiadq4&quot; data-start=&quot;2331&quot;&gt;&lt;strong data-end=&quot;2356&quot; data-start=&quot;2333&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;High CPU or OS hang&lt;/span&gt;&lt;/strong&gt;&lt;/li&gt;&lt;li data-end=&quot;2417&quot; data-section-id=&quot;1g5wsqa&quot; data-start=&quot;2359&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Node becomes unresponsive and misses heartbeat intervals
&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul data-end=&quot;2504&quot; data-start=&quot;2462&quot;&gt;&lt;li data-end=&quot;2504&quot; data-section-id=&quot;5agrpm&quot; data-start=&quot;2418&quot;&gt;&lt;strong data-end=&quot;2459&quot; data-start=&quot;2420&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Improper interconnect configuration&lt;/span&gt;&lt;/strong&gt;&lt;/li&gt;&lt;li data-end=&quot;2504&quot; data-section-id=&quot;1ld9sqx&quot; data-start=&quot;2462&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Wrong interface priority or MTU mismatch
&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;Split brain is not always a &quot;network down&quot; scenario. Even latency spikes or packet drops can trigger it.&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro;&quot;&gt;&lt;span style=&quot;color: #e06666; font-size: x-large;&quot;&gt;&lt;b&gt;How Oracle RAC Protects Your Data&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;font-size: large;&quot;&gt;Oracle RAC is designed with a strong principle:&amp;nbsp;&lt;strong data-end=&quot;2914&quot; data-start=&quot;2859&quot;&gt;Data integrity is more important than availability.&lt;br /&gt;&lt;/strong&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;When a split condition is detected, Oracle Clusterware steps in immediately.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: large;&quot;&gt;1. Node Eviction&amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;/b&gt;&lt;span style=&quot;font-size: large;&quot;&gt;Oracle resolves the conflict by evicting one node from the cluster.&lt;br /&gt;&lt;/span&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;&lt;span style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;The node that loses quorum or heartbeat validation is removed&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;Its database instance is terminated &amp;amp;&amp;nbsp;&lt;/span&gt;Access to shared storage is blocked&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/span&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;This ensures only one side continues processing.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;b&gt;2. Voting Disk Mechanism&lt;br /&gt;&lt;/b&gt;Voting disks act as arbiters.&lt;br /&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;&lt;span style=&quot;font-family: Source Sans Pro;&quot;&gt;
Each node votes to confirm cluster membership&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;Majority wins &amp;amp; t&lt;/span&gt;he losing node is evicted&lt;/li&gt;&lt;/ul&gt;&lt;/span&gt;&lt;span style=&quot;font-family: Source Sans Pro;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;Hence, Always use an odd number of voting disks (3 or 5)&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;b&gt;3. Heartbeat Monitoring&lt;br /&gt;&lt;/b&gt;Cluster Synchronization Services (CSS):&lt;br /&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;
Tracks node liveness and&amp;nbsp;&lt;/span&gt;Uses heartbeat signals over interconnect&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;Missed heartbeats beyond threshold trigger eviction&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/span&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;b&gt;4. Fencing&lt;br /&gt;&lt;/b&gt;Once evicted, a&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;Node is completely isolated from shared storag and&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;Prevents accidental writes&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro;&quot;&gt;&lt;span style=&quot;color: #e06666; font-size: x-large;&quot;&gt;&lt;b&gt;Essential Commands Every RAC DBA Should Know&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;font-size: large;&quot;&gt;During an incident, speed matters. You do not have time to google commands.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-size: large;&quot;&gt;Cluster Health Checks :&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;crsctl check cluster &lt;span class=&quot;ͼf&quot;&gt;-all&lt;/span&gt;&lt;br /&gt;crsctl stat res &lt;span class=&quot;ͼf&quot;&gt;-t&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-family: Source Sans Pro;&quot;&gt;&lt;br /&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro;&quot;&gt;Node Information&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;olsnodes -n&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: courier; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large;&quot;&gt;Voting Disk Status&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: courier; font-size: large;&quot;&gt;crsctl query css votedisk&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: courier; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large;&quot;&gt;CRS Logs (Eviction Analysis)&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: courier; font-size: large;&quot;&gt;cd $GRID_HOME/log/&amp;lt;node_name&amp;gt;/crsd/&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: courier; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: courier; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;span style=&quot;color: #e06666;&quot;&gt;&lt;b&gt;When Node Eviction Becomes a Problem&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;/p&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro;&quot;&gt;While node eviction protects data, frequent evictions are a red flag.&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: Source Sans Pro;&quot;&gt;You might face some&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;Application disruptions /&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;Session drops / Performance instability&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;If evictions happen often, it is not a RAC problem-- it is an infrastructure problem.&lt;/span&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro;&quot;&gt;Focus on the areas such as&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;Interconnect latency /&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;Network packet drops /&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;CPU starvation&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro;&quot;&gt;&lt;span style=&quot;color: #e06666; font-size: x-large;&quot;&gt;&lt;b&gt;Mini Case Study: The Invisible Network Issue&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;font-size: large;&quot;&gt;In one production setup, we observed random node evictions during peak batch processing.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-size: large;&quot;&gt;Initial suspicion was&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;Database load &amp;amp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;High I/O&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;But the real issue was a&amp;nbsp;misconfigured network switch intermittently dropping jumbo frames.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Symptoms we noticed :&amp;nbsp;&lt;/span&gt;&lt;ul data-end=&quot;5567&quot; data-start=&quot;5498&quot;&gt;&lt;li data-end=&quot;5522&quot; data-section-id=&quot;l0wwrt&quot; data-start=&quot;5498&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;
No full network outage and&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul data-end=&quot;5567&quot; data-start=&quot;5498&quot;&gt;&lt;li data-end=&quot;5567&quot; data-section-id=&quot;xn3dw1&quot; data-start=&quot;5523&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;
Just enough packet loss to miss heartbeats
&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;Fix:&lt;/span&gt;&lt;ul data-end=&quot;5648&quot; data-start=&quot;5574&quot;&gt;&lt;li data-end=&quot;5618&quot; data-section-id=&quot;pbkdqm&quot; data-start=&quot;5574&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;
Standardized MTU across nodes and switches
&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul data-end=&quot;5648&quot; data-start=&quot;5574&quot;&gt;&lt;li data-end=&quot;5648&quot; data-section-id=&quot;1yu8wak&quot; data-start=&quot;5619&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;
Dedicated interconnect VLAN
&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;Lesson learnt : Split brain is often triggered by subtle network inconsistencies, not total failures.&lt;/span&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #e06666; font-size: x-large;&quot;&gt;DBA Perspective&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;ul data-end=&quot;6485&quot; data-start=&quot;5843&quot;&gt;&lt;li data-end=&quot;5973&quot; data-section-id=&quot;rri6vo&quot; data-start=&quot;5843&quot;&gt;&lt;strong data-end=&quot;5889&quot; data-start=&quot;5845&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Eviction is not failure- it is protection&lt;/span&gt;&lt;/strong&gt;&lt;/li&gt;&lt;li data-end=&quot;5973&quot; data-section-id=&quot;rri6vo&quot; data-start=&quot;5843&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Many teams panic when they see node eviction. It is actually RAC doing its job.
&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;ul data-end=&quot;6485&quot; data-start=&quot;5843&quot;&gt;&lt;li data-end=&quot;6074&quot; data-section-id=&quot;ii81m7&quot; data-start=&quot;5975&quot;&gt;&lt;strong data-end=&quot;6019&quot; data-start=&quot;5977&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Interconnect deserves dedicated design&lt;/span&gt;&lt;/strong&gt;&lt;/li&gt;&lt;li data-end=&quot;6074&quot; data-section-id=&quot;ii81m7&quot; data-start=&quot;5975&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Never treat it as &quot;just another network interface&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;span data-end=&quot;6116&quot; data-start=&quot;6078&quot;&gt;&lt;ul data-end=&quot;6485&quot; data-start=&quot;5843&quot; style=&quot;text-align: left;&quot;&gt;&lt;li style=&quot;font-weight: bold;&quot;&gt;&lt;strong data-end=&quot;6116&quot; data-start=&quot;6078&quot;&gt;&lt;strong data-end=&quot;6116&quot; data-start=&quot;6078&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Monitoring must go beyond database&lt;/span&gt;&lt;/strong&gt;&lt;/strong&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;/p&gt;&lt;ul data-end=&quot;6485&quot; data-start=&quot;5843&quot; style=&quot;text-align: left;&quot;&gt;&lt;li&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;span data-end=&quot;6116&quot; data-start=&quot;6078&quot;&gt;such as Network latency&amp;nbsp;&amp;nbsp;&lt;/span&gt;OS load &amp;amp;&amp;nbsp; NIC errors&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;&lt;div&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;ul data-end=&quot;6485&quot; data-start=&quot;5843&quot;&gt;&lt;li data-end=&quot;6253&quot; data-section-id=&quot;d2qbnb&quot; data-start=&quot;6178&quot; style=&quot;font-weight: bold;&quot;&gt;&lt;strong data-end=&quot;6218&quot; data-start=&quot;6180&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;CRS logs are gold during incidents&lt;/span&gt;&lt;/strong&gt;&lt;/li&gt;&lt;li data-end=&quot;6253&quot; data-section-id=&quot;d2qbnb&quot; data-start=&quot;6178&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Do not rely only on alert logs
&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;/span&gt;&lt;ul data-end=&quot;6485&quot; data-start=&quot;5843&quot;&gt;&lt;li data-end=&quot;6342&quot; data-section-id=&quot;nx4jfq&quot; data-start=&quot;6255&quot;&gt;&lt;strong data-end=&quot;6295&quot; data-start=&quot;6257&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Virtual environments increase risk&lt;/span&gt;&lt;/strong&gt;&lt;/li&gt;&lt;li data-end=&quot;6342&quot; data-section-id=&quot;nx4jfq&quot; data-start=&quot;6255&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Resource contention can mimic node failure&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;b&gt;&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;ul data-end=&quot;6485&quot; data-start=&quot;5843&quot;&gt;&lt;li data-end=&quot;6342&quot; data-section-id=&quot;nx4jfq&quot; data-start=&quot;6255&quot;&gt;&lt;strong data-end=&quot;6403&quot; data-start=&quot;6346&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Timeout parameters are not tuning knobs for beginners&lt;/span&gt;&lt;/strong&gt;&lt;/li&gt;&lt;li data-end=&quot;6485&quot; data-section-id=&quot;9s4vuo&quot; data-start=&quot;6344&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Changing misscount or disktimeout without understanding can make things worse&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;/div&gt;&lt;span style=&quot;font-family: Source Sans Pro;&quot;&gt;&lt;div style=&quot;font-size: x-large; text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;span style=&quot;font-size: x-large;&quot;&gt;&lt;span style=&quot;color: #e06666; font-weight: bold;&quot;&gt;Quick Takeaways&lt;/span&gt;&lt;br /&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;&lt;span style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;Split brain occurs when RAC nodes lose communication&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;Oracle resolves it using node eviction&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;Voting disks ensure majority-based decisions&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;Interconnect stability is critical&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;Frequent evictions indicate deeper infrastructure issues&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;Monitoring CRS logs is essential for diagnosis&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;Always prioritize data integrity over uptime&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;&lt;span style=&quot;color: #e06666; font-size: x-large;&quot;&gt;&lt;b&gt;Conclusion&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Split brain is one of those topics that sounds theoretical until you experience it in production. And when you do, it quickly becomes clear why Oracle designed RAC the way it did.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;The cluster does not try to be overly smart -, it simply ensures that only one consistent version of truth exists. That is why node eviction happens so aggressively. It may feel disruptive, but it is preventing something far worse: data corruption.&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;br /&gt;As a DBA, your responsibility is not just to understand split brain, but to prevent the conditions that lead to it. That means investing time in network design, validating interconnect configurations, and monitoring system health beyond the database layer.&lt;br /&gt;If you are running RAC today, take a moment to review your setup:&lt;/span&gt;&lt;ul data-end=&quot;7747&quot; data-start=&quot;7620&quot;&gt;&lt;li data-end=&quot;7659&quot; data-section-id=&quot;1tjfs0p&quot; data-start=&quot;7620&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;
Are voting disks properly configured?
&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul data-end=&quot;7747&quot; data-start=&quot;7620&quot;&gt;&lt;li data-end=&quot;7705&quot; data-section-id=&quot;rhbhp4&quot; data-start=&quot;7660&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;
Is your interconnect isolated and reliable?
&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul data-end=&quot;7747&quot; data-start=&quot;7620&quot;&gt;&lt;li data-end=&quot;7747&quot; data-section-id=&quot;1dnmik&quot; data-start=&quot;7706&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;
Do you actively monitor cluster health?
&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Because in RAC, stability is not accidental—it is engineered.&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro;&quot;&gt;&lt;span style=&quot;color: #e06666; font-size: x-large;&quot;&gt;&lt;b&gt;FAQs&lt;br /&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span data-end=&quot;7881&quot; data-start=&quot;7826&quot;&gt;1. Does split brain always lead to data corruption?&lt;/span&gt;&lt;br /&gt;&lt;span&gt;
No. Oracle prevents corruption using node eviction and fencing mechanisms.&lt;/span&gt;&lt;br /&gt;&lt;span data-end=&quot;8002&quot; data-start=&quot;7960&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;span data-end=&quot;8002&quot; data-start=&quot;7960&quot;&gt;2. Can I disable node eviction in RAC?&lt;/span&gt;&lt;br /&gt;&lt;span&gt;
No. It is a core safety feature and cannot be disabled.&lt;/span&gt;&lt;br /&gt;&lt;span data-end=&quot;8110&quot; data-start=&quot;8062&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;span data-end=&quot;8110&quot; data-start=&quot;8062&quot;&gt;3. What is the ideal number of voting disks?&lt;/span&gt;&lt;br /&gt;&lt;span&gt;
Always use an odd number -. typically 3 or 5.&lt;/span&gt;&lt;br /&gt;&lt;span data-end=&quot;8205&quot; data-start=&quot;8157&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span data-end=&quot;8205&quot; data-start=&quot;8157&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;4. How do I identify which node was evicted?&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;
Check CRS logs under &lt;/span&gt;&lt;code data-end=&quot;8258&quot; data-start=&quot;8229&quot;&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;$GRID_HOME/log/&amp;lt;node&amp;gt;/crsd/&lt;/span&gt;&lt;/code&gt;&lt;span style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt; and alert logs.&lt;/span&gt;&lt;br /&gt;&lt;span data-end=&quot;8314&quot; data-start=&quot;8276&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;span data-end=&quot;8314&quot; data-start=&quot;8276&quot;&gt;5. Can high CPU cause split brain?&lt;/span&gt;&lt;br /&gt;&lt;span&gt;
Yes. If a node cannot send heartbeat signals due to CPU starvation, it may be evicted.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;What is your experience with RAC node evictions in production?&lt;br /&gt;Have you ever traced a split brain issue back to something unexpected like network latency or OS load?&lt;br /&gt;Drop your insights in comments below., these are the scenarios every DBA learns from.&lt;/span&gt;&lt;/div&gt;&lt;div style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;











































&lt;pre class=&quot;overflow-visible! px-0!&quot; data-end=&quot;4148&quot; data-start=&quot;4092&quot; style=&quot;text-align: left;&quot;&gt;&lt;div class=&quot;relative w-full mt-4 mb-1&quot;&gt;&lt;div&gt;&lt;div class=&quot;relative&quot;&gt;&lt;div class=&quot;h-full min-h-0 min-w-0&quot;&gt;&lt;div class=&quot;h-full min-h-0 min-w-0&quot;&gt;&lt;div class=&quot;border border-token-border-light border-radius-3xl corner-superellipse/1.1 rounded-3xl&quot;&gt;&lt;div class=&quot;h-full w-full border-radius-3xl bg-token-bg-elevated-secondary corner-superellipse/1.1 overflow-clip rounded-3xl lxnfua_clipPathFallback&quot;&gt;&lt;div class=&quot;pointer-events-none absolute inset-x-4 top-12 bottom-4&quot;&gt;&lt;div class=&quot;pointer-events-none sticky z-40 shrink-0 z-1!&quot;&gt;&lt;div class=&quot;sticky bg-token-border-light&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;w-full overflow-x-hidden overflow-y-auto&quot;&gt;&lt;div class=&quot;relative z-0 flex max-w-full&quot;&gt;&lt;div class=&quot;q9tKkq_viewer cm-editor z-10 light:cm-light dark:cm-light flex h-full w-full flex-col items-stretch ͼ5 ͼj&quot; id=&quot;code-block-viewer&quot;&gt;&lt;div class=&quot;cm-scroller&quot;&gt;&lt;div class=&quot;cm-content q9tKkq_readonly&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;&lt;pre class=&quot;overflow-visible! px-0!&quot; data-end=&quot;4555&quot; data-start=&quot;4526&quot; style=&quot;text-align: left;&quot;&gt;&lt;div class=&quot;relative w-full mt-4 mb-1&quot;&gt;&lt;div&gt;&lt;div class=&quot;relative&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;

















































</description><link>https://oracle-dba-help.blogspot.com/2026/09/split-brain-in-oracle-rac-what-every.html</link><author>noreply@blogger.com (Nikhil Kotak)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1375587508974804970.post-1219786694872724519</guid><pubDate>Sat, 05 Sep 2026 12:29:00 +0000</pubDate><atom:updated>2026-09-05T20:29:00.144+08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">PostgreSQL</category><title>PostgreSQL Crash Recovery: An Oracle DBA’s View</title><description>&lt;h2 style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;&lt;span style=&quot;font-size: medium; font-weight: normal;&quot;&gt;&amp;nbsp; The first PostgreSQL crash I handled felt unusually quiet. I was prepared to mount the database, check the required logs and start a recovery procedure. Instead, PostgreSQL detected the unclean shutdown, replayed WAL and opened the database without any DBA command.&lt;/span&gt;&lt;/h2&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;That automatic restart can make crash recovery appear simpler than it really is. Recovery time still depends on checkpoint activity, WAL volume, storage performance and the availability of required WAL files. A database that normally starts in seconds can behave very differently after a write-heavy workload or storage incident.&lt;span&gt;&lt;/span&gt;&lt;/p&gt;&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;p&gt;&lt;/p&gt;

&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;What Happens During PostgreSQL Crash Recovery?&lt;/h2&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;When PostgreSQL starts after an operating system failure, forced termination or power loss, it checks the cluster control information and identifies the latest valid checkpoint. Recovery begins from the REDO location recorded in that checkpoint, which can be earlier than the checkpoint record itself.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;PostgreSQL then replays the required Write-Ahead Log records to restore physical consistency. After WAL replay completes, it performs an end-of-recovery checkpoint and starts accepting connections.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;The database log normally contains messages similar to:&lt;/p&gt;

&lt;div style=&quot;background: rgb(40, 42, 54); border-color: gray; border-image: none; border-style: solid; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;&quot;&gt;
&lt;pre style=&quot;line-height: 125%; margin: 0px;&quot;&gt;&lt;span style=&quot;color: #f8f8f2; font-family: courier; font-size: medium; font-weight: normal;&quot;&gt;LOG:  database system was interrupted
LOG:  database system was not properly shut down
LOG:  automatic recovery in progress
LOG:  redo starts at ...
LOG:  redo done at ...
LOG:  database system is ready to accept connections&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;An &lt;code style=&quot;font-family: courier;&quot;&gt;invalid record length&lt;/code&gt; message near the end of recovery does not always indicate corruption. It can simply mean PostgreSQL reached the end of valid WAL. Always read the messages around it before treating it as a failure.&lt;/p&gt;

&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
  &lt;!--Add Blogger image here: Server crash -&gt; Read control file -&gt; Locate checkpoint REDO position -&gt; Replay WAL -&gt; End-of-recovery checkpoint -&gt; Accept connections--&gt;
&lt;/div&gt;

&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;Oracle Redo and PostgreSQL WAL Are Not Identical&lt;/h2&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;The write-ahead principle is familiar to Oracle DBAs. Oracle writes redo before modified blocks reach the data files, while PostgreSQL writes WAL before dirty pages are flushed. Both use these records to recover from a crash.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;The main difference is how uncommitted work is handled. Oracle uses undo to roll back uncommitted transactions. PostgreSQL does not physically reverse every uncommitted tuple during startup. MVCC transaction visibility rules keep rows from uncommitted transactions invisible, and vacuum can reclaim the dead tuple versions later.&lt;/p&gt;

&lt;table style=&quot;border-collapse: collapse; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal; width: 100%;&quot;&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th style=&quot;background-color: #e06666; border: 1px solid rgb(153, 153, 153); color: white; padding: 10px; text-align: left;&quot;&gt;Recovery Area&lt;/th&gt;
      &lt;th style=&quot;background-color: #e06666; border: 1px solid rgb(153, 153, 153); color: white; padding: 10px; text-align: left;&quot;&gt;Oracle&lt;/th&gt;
      &lt;th style=&quot;background-color: #e06666; border: 1px solid rgb(153, 153, 153); color: white; padding: 10px; text-align: left;&quot;&gt;PostgreSQL&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td style=&quot;border: 1px solid rgb(153, 153, 153); padding: 10px; text-align: left;&quot;&gt;Recovery records&lt;/td&gt;
      &lt;td style=&quot;border: 1px solid rgb(153, 153, 153); padding: 10px; text-align: left;&quot;&gt;Online redo&lt;/td&gt;
      &lt;td style=&quot;border: 1px solid rgb(153, 153, 153); padding: 10px; text-align: left;&quot;&gt;Write-Ahead Log&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;border: 1px solid rgb(153, 153, 153); padding: 10px; text-align: left;&quot;&gt;Uncommitted transactions&lt;/td&gt;
      &lt;td style=&quot;border: 1px solid rgb(153, 153, 153); padding: 10px; text-align: left;&quot;&gt;Recovered using undo&lt;/td&gt;
      &lt;td style=&quot;border: 1px solid rgb(153, 153, 153); padding: 10px; text-align: left;&quot;&gt;Hidden through MVCC visibility&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;border: 1px solid rgb(153, 153, 153); padding: 10px; text-align: left;&quot;&gt;Recovery-time target&lt;/td&gt;
      &lt;td style=&quot;border: 1px solid rgb(153, 153, 153); padding: 10px; text-align: left;&quot;&gt;&lt;code style=&quot;font-family: courier;&quot;&gt;FAST_START_MTTR_TARGET&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;border: 1px solid rgb(153, 153, 153); padding: 10px; text-align: left;&quot;&gt;No direct equivalent&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;border: 1px solid rgb(153, 153, 153); padding: 10px; text-align: left;&quot;&gt;Recovery monitoring&lt;/td&gt;
      &lt;td style=&quot;border: 1px solid rgb(153, 153, 153); padding: 10px; text-align: left;&quot;&gt;&lt;code style=&quot;font-family: courier;&quot;&gt;V$INSTANCE_RECOVERY&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;border: 1px solid rgb(153, 153, 153); padding: 10px; text-align: left;&quot;&gt;Logs and operating-system metrics&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;&lt;br /&gt;&lt;/h2&gt;&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;How Checkpoints Affect Recovery Time&lt;/h2&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Checkpoint configuration influences how much work may be required after a crash, but PostgreSQL does not provide a guaranteed recovery-time target.&lt;/p&gt;

&lt;ul style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;
  &lt;li&gt;&lt;code style=&quot;font-family: courier;&quot;&gt;checkpoint_timeout&lt;/code&gt; limits the time between automatic checkpoints.&lt;/li&gt;
  &lt;li&gt;&lt;code style=&quot;font-family: courier;&quot;&gt;max_wal_size&lt;/code&gt; is a soft limit that can trigger checkpoints based on WAL volume.&lt;/li&gt;
  &lt;li&gt;&lt;code style=&quot;font-family: courier;&quot;&gt;checkpoint_completion_target&lt;/code&gt; spreads checkpoint writes across the available interval. It does not control checkpoint frequency directly.&lt;/li&gt;
&lt;/ul&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;More frequent checkpoints may reduce the amount of WAL replay required, but they can increase normal write I/O. They may also produce more full-page-image WAL because the first change to a page after a checkpoint can require the complete page image to be logged.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;This is the same broad performance-versus-recovery trade-off Oracle DBAs associate with &lt;code style=&quot;font-family: courier;&quot;&gt;FAST_START_MTTR_TARGET&lt;/code&gt;, but the controls are not equivalent.&lt;/p&gt;

&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;&lt;br /&gt;&lt;/h2&gt;&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;Useful Checks for the DBA&lt;/h2&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Start with the PostgreSQL and operating-system logs. If the cluster is stopped, &lt;code style=&quot;font-family: courier;&quot;&gt;pg_controldata&lt;/code&gt; can help identify the recorded cluster state and checkpoint positions. It is not a live recovery progress tool.&lt;/p&gt;

&lt;div style=&quot;background: rgb(40, 42, 54); border-color: gray; border-image: none; border-style: solid; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;&quot;&gt;
&lt;pre style=&quot;line-height: 125%; margin: 0px;&quot;&gt;&lt;span style=&quot;color: #f8f8f2; font-family: courier; font-size: medium; font-weight: normal;&quot;&gt;# Service, recovery and storage checks
systemctl status postgresql
journalctl -u postgresql --since &quot;30 minutes ago&quot;
pg_controldata &quot;$PGDATA&quot;
iostat -xz 1

# Active checkpoint configuration

&lt;/span&gt;&lt;span style=&quot;color: #ff79c6; font-family: courier; font-size: medium;&quot;&gt;SELECT&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2; font-family: courier; font-size: medium;&quot;&gt; name, setting, unit, source &lt;/span&gt;&lt;span style=&quot;color: #ff79c6; font-family: courier; font-size: medium;&quot;&gt;FROM&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2; font-family: courier; font-size: medium;&quot;&gt; pg_settings &lt;/span&gt;&lt;span style=&quot;color: #ff79c6; font-family: courier; font-size: medium;&quot;&gt;WHERE&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2; font-family: courier; font-size: medium;&quot;&gt; name &lt;/span&gt;&lt;span style=&quot;color: #ff79c6; font-family: courier; font-size: medium;&quot;&gt;IN&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2; font-family: courier; font-size: medium;&quot;&gt; (
&#39;checkpoint_timeout&#39;,
&#39;checkpoint_completion_target&#39;,
&#39;max_wal_size&#39;,
&#39;min_wal_size&#39;,
&#39;full_page_writes&#39;,
&#39;wal_compression&#39;
) &lt;/span&gt;&lt;span style=&quot;color: #ff79c6; font-family: courier; font-size: medium;&quot;&gt;ORDER BY&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2; font-family: courier; font-size: medium;&quot;&gt; name;

# PostgreSQL 17 and later

&lt;/span&gt;&lt;span style=&quot;color: #ff79c6; font-family: courier; font-size: medium;&quot;&gt;SELECT&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2; font-family: courier; font-size: medium;&quot;&gt; * &lt;/span&gt;&lt;span style=&quot;color: #ff79c6; font-family: courier; font-size: medium;&quot;&gt;FROM&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2; font-family: courier; font-size: medium;&quot;&gt; pg_stat_checkpointer;

# WAL generation

&lt;/span&gt;&lt;span style=&quot;color: #ff79c6; font-family: courier; font-size: medium;&quot;&gt;SELECT&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2; font-family: courier; font-size: medium;&quot;&gt;
wal_records,
wal_fpi,
wal_bytes,
wal_buffers_full,
stats_reset &lt;/span&gt;&lt;span style=&quot;color: #ff79c6; font-family: courier; font-size: medium;&quot;&gt;FROM&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2; font-family: courier; font-size: medium;&quot;&gt; pg_stat_wal;&lt;/span&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;On releases before PostgreSQL 17, checkpoint counters are available in &lt;code style=&quot;font-family: courier;&quot;&gt;pg_stat_bgwriter&lt;/code&gt;. Compare counter changes over a fixed interval instead of interpreting cumulative values in isolation.&lt;/p&gt;

&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;&lt;br /&gt;&lt;/h2&gt;&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;A Production Scenario&lt;/h2&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;On one write-heavy system, application latency showed regular spikes and recovery after a server failure took longer than expected. The production configuration had been inherited from a much smaller environment:&lt;/p&gt;

&lt;div style=&quot;background: rgb(40, 42, 54); border-color: gray; border-image: none; border-style: solid; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;&quot;&gt;
&lt;pre style=&quot;line-height: 125%; margin: 0px;&quot;&gt;&lt;span style=&quot;color: #f8f8f2; font-family: courier; font-size: medium; font-weight: normal;&quot;&gt;checkpoint_timeout = 5min
max_wal_size = 1GB
checkpoint_completion_target = 0.5&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Checkpoint statistics showed that WAL volume was repeatedly triggering requested checkpoints before the timeout. Checkpoint writes were also compressed into a relatively short period.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;After measuring WAL generation, disk capacity and storage latency, the team increased &lt;code style=&quot;font-family: courier;&quot;&gt;max_wal_size&lt;/code&gt;, extended the checkpoint interval and used a higher &lt;code style=&quot;font-family: courier;&quot;&gt;checkpoint_completion_target&lt;/code&gt;. The exact values were selected from workload measurements rather than copied from a generic recommendation.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Normal latency became more stable, but the work did not end there. Controlled crash testing was used to measure the new recovery time. Larger checkpoint intervals can improve normal performance while increasing the amount of WAL that may need to be replayed, so both sides of the change must be tested.&lt;/p&gt;

&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;&lt;br /&gt;&lt;/h2&gt;&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;Common Recovery Problems&lt;/h2&gt;

&lt;h3 style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large;&quot;&gt;Required WAL Is Missing&lt;/h3&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;This often happens because someone deleted files from &lt;code style=&quot;font-family: courier;&quot;&gt;pg_wal&lt;/code&gt;, a separate WAL filesystem was not mounted, or a restored data directory is inconsistent with the available WAL. Never delete WAL files manually to solve a space problem.&lt;/p&gt;

&lt;h3 style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large;&quot;&gt;Recovery Is Running but Very Slowly&lt;/h3&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Check storage latency before concluding that PostgreSQL is stuck. WAL replay can become slow on a throttled cloud volume or a storage device reporting repeated I/O errors.&lt;/p&gt;

&lt;h3 style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large;&quot;&gt;The WAL Filesystem Keeps Growing&lt;/h3&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Failed archiving, inactive replication slots, disconnected standbys and backup activity can retain WAL. Check these consumers before modifying checkpoint settings.&lt;/p&gt;

&lt;h3 style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large;&quot;&gt;Unlogged Tables Lose Their Contents&lt;/h3&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Unlogged tables are not crash-safe. PostgreSQL truncates them automatically after a crash. They should never be used for data that must survive an unexpected restart.&lt;/p&gt;

&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;&lt;br /&gt;&lt;/h2&gt;&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;Lessons from the Field&lt;/h2&gt;

&lt;ul style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;
  &lt;li&gt;A graceful restart does not test the crash-recovery path.&lt;/li&gt;
  &lt;li&gt;Recovery time depends on storage throughput as much as checkpoint configuration.&lt;/li&gt;
  &lt;li&gt;A large &lt;code style=&quot;font-family: courier;&quot;&gt;pg_wal&lt;/code&gt; directory does not automatically indicate a fault.&lt;/li&gt;
  &lt;li&gt;Do not use &lt;code style=&quot;font-family: courier;&quot;&gt;pg_resetwal&lt;/code&gt; as a routine startup fix. It is a last-resort salvage utility.&lt;/li&gt;
  &lt;li&gt;Measure checkpoint frequency, WAL generation, archive failures and actual restart duration.&lt;/li&gt;
  &lt;li&gt;Keep the expected recovery log sequence and escalation steps in the production runbook.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;&lt;br /&gt;&lt;/h2&gt;&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;Frequently Asked Questions&lt;/h2&gt;

&lt;h3 style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large;&quot;&gt;Does PostgreSQL require manual crash recovery?&lt;/h3&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Normally, no. PostgreSQL starts WAL replay automatically after detecting an unclean shutdown.&lt;/p&gt;

&lt;h3 style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large;&quot;&gt;Can applications connect during primary crash recovery?&lt;/h3&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Regular connections are normally accepted only after crash recovery has completed. A hot standby accepting read-only connections is a different recovery scenario.&lt;/p&gt;

&lt;h3 style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large;&quot;&gt;Will reducing checkpoint_timeout always improve recovery?&lt;/h3&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;No. It may reduce recovery work but can increase checkpoint I/O and full-page-image WAL generation during normal operation.&lt;/p&gt;

&lt;h3 style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large;&quot;&gt;Is there a PostgreSQL equivalent of V$INSTANCE_RECOVERY?&lt;/h3&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;PostgreSQL does not provide a direct view showing a reliable remaining-time estimate for primary crash recovery. DBAs normally follow the logs and operating-system I/O metrics.&lt;/p&gt;

&lt;h3 style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large;&quot;&gt;When should pg_resetwal be used?&lt;/h3&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Only after normal restore and WAL recovery options have been exhausted. If it is used to salvage a cluster, the safer approach is to extract the data and rebuild the database rather than return the same cluster directly to production.&lt;/p&gt;

&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg1IDSBcaAOaVUZPgfqrfZwMJ2WyuntBi_SkoP1SnFAlOECalnMTRf9PUQP7PREVMgl2g6Wu28pe2QYbbyLwCNgIBX_qWHAV8CSHgyRBShGOX8fTrEOH5KQHS14d4mRiVfyuZoEuW6PIz9zAjTHlZAszeoQwgHKIO2tqu0iU1gQla7E1RYJNAyuzi4jkgk/s1800/blogpost%20best%20image.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;900&quot; data-original-width=&quot;1800&quot; height=&quot;540&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg1IDSBcaAOaVUZPgfqrfZwMJ2WyuntBi_SkoP1SnFAlOECalnMTRf9PUQP7PREVMgl2g6Wu28pe2QYbbyLwCNgIBX_qWHAV8CSHgyRBShGOX8fTrEOH5KQHS14d4mRiVfyuZoEuW6PIz9zAjTHlZAszeoQwgHKIO2tqu0iU1gQla7E1RYJNAyuzi4jkgk/w1078-h540/blogpost%20best%20image.png&quot; width=&quot;1078&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;&lt;br /&gt;&lt;/h2&gt;&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;Conclusion&lt;/h2&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;PostgreSQL crash recovery is designed to be automatic, but it should never be treated as a black box. WAL restores physical consistency, MVCC keeps uncommitted tuples invisible, and later vacuum activity reclaims dead row versions.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;For Oracle DBAs, redo and checkpoint concepts provide a useful starting point. The major differences are the absence of an Oracle-style undo rollback phase and the lack of a direct PostgreSQL equivalent to &lt;code style=&quot;font-family: courier;&quot;&gt;FAST_START_MTTR_TARGET&lt;/code&gt; or &lt;code style=&quot;font-family: courier;&quot;&gt;V$INSTANCE_RECOVERY&lt;/code&gt;.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Review checkpoint statistics, monitor WAL retention, validate storage performance and test an unclean restart in a controlled environment. Until it has been measured under realistic workload conditions, the expected recovery time is only an assumption.&lt;/p&gt;
</description><link>https://oracle-dba-help.blogspot.com/2026/10/postgresql-crash-recovery-oracle-dbas.html</link><author>noreply@blogger.com (Nikhil Kotak)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg1IDSBcaAOaVUZPgfqrfZwMJ2WyuntBi_SkoP1SnFAlOECalnMTRf9PUQP7PREVMgl2g6Wu28pe2QYbbyLwCNgIBX_qWHAV8CSHgyRBShGOX8fTrEOH5KQHS14d4mRiVfyuZoEuW6PIz9zAjTHlZAszeoQwgHKIO2tqu0iU1gQla7E1RYJNAyuzi4jkgk/s72-w1078-h540-c/blogpost%20best%20image.png" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1375587508974804970.post-3799262910810249539</guid><pubDate>Mon, 31 Aug 2026 09:33:00 +0000</pubDate><atom:updated>2026-09-12T14:09:55.934+08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Must Read</category><category domain="http://www.blogger.com/atom/ns#">Tuning</category><title>Oracle Indexes: Fix Slow SQL Without Overdoing It</title><description>&lt;div style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; text-align: left;&quot;&gt;&lt;span style=&quot;font-size: medium; font-weight: normal;&quot;&gt;A SQL query running for 8 seconds may not create panic during testing. In production, the same query can become a real incident when it runs thousands of times from an application, report, or batch process.&lt;/span&gt;&lt;/div&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;I have seen queries drop from seconds to milliseconds after adding one correct index. I have also seen OLTP systems become slower because every column was indexed without understanding the workload. Both situations are common.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Indexes are powerful, but they are not free. They reduce unnecessary reads for SELECT queries, but they add cost to INSERT, UPDATE, DELETE, storage, statistics gathering, and maintenance. A good DBA does not create indexes blindly. A good DBA checks the SQL pattern, data volume, selectivity, execution plan, and write workload before touching production.&lt;span&gt;&lt;/span&gt;&lt;/p&gt;&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;p&gt;&lt;/p&gt;

&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;Why Indexes Matter in Production&lt;/h2&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;When Oracle does not have a useful access path, it may scan the entire table. For a small lookup table, that may be acceptable. For a large transaction table, it can mean high logical reads, CPU pressure, slow application response, and unnecessary I/O.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;The real question is not whether an index exists. The real question is whether the index matches how the application searches the data.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;A query filtering by &lt;code style=&quot;font-family: courier;&quot;&gt;customer_id&lt;/code&gt; needs a different indexing approach from a report filtering by &lt;code style=&quot;font-family: courier;&quot;&gt;status&lt;/code&gt;, &lt;code style=&quot;font-family: courier;&quot;&gt;region&lt;/code&gt;, and &lt;code style=&quot;font-family: courier;&quot;&gt;payment_mode&lt;/code&gt;. Similarly, a query using &lt;code style=&quot;font-family: courier;&quot;&gt;UPPER(name)&lt;/code&gt; may not benefit from a normal index on &lt;code style=&quot;font-family: courier;&quot;&gt;name&lt;/code&gt;.&lt;/p&gt;&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;&lt;br /&gt;&lt;/p&gt;

&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;B-tree Indexes: The Normal Choice for OLTP&lt;/h2&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;B-tree indexes are the default and most commonly used Oracle index type. In most OLTP systems, this is where DBAs should start.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;They work well for columns with many distinct values, such as order IDs, customer IDs, email addresses, account numbers, transaction IDs, and date columns. These indexes are useful for equality searches, range scans, joins, and primary key lookups.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;For example, if an application frequently searches orders by customer, a simple B-tree index can reduce unnecessary table reads.&lt;/p&gt;

&lt;div style=&quot;background: rgb(40, 42, 54); border-color: gray; border-image: initial; border-style: solid; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;&quot;&gt;
&lt;pre style=&quot;line-height: 125%; margin: 0px;&quot;&gt;&lt;span style=&quot;color: #f8f8f2; font-family: courier; font-size: medium; font-weight: normal;&quot;&gt;&lt;span style=&quot;color: #ff79c6;&quot;&gt;SELECT&lt;/span&gt; *
&lt;span style=&quot;color: #ff79c6;&quot;&gt;FROM&lt;/span&gt; orders
&lt;span style=&quot;color: #ff79c6;&quot;&gt;WHERE&lt;/span&gt; customer_id = 10045;

&lt;span style=&quot;color: #ff79c6;&quot;&gt;CREATE&lt;/span&gt; &lt;span style=&quot;color: #ff79c6;&quot;&gt;INDEX&lt;/span&gt; idx_orders_customer_id &lt;span style=&quot;color: #ff79c6;&quot;&gt;ON&lt;/span&gt; orders(customer_id);&lt;/span&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;For queries that regularly filter by multiple columns, a composite index may be better than multiple single-column indexes.&lt;/p&gt;

&lt;div style=&quot;background: rgb(40, 42, 54); border-color: gray; border-image: initial; border-style: solid; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;&quot;&gt;
&lt;pre style=&quot;line-height: 125%; margin: 0px;&quot;&gt;&lt;span style=&quot;color: #f8f8f2; font-family: courier; font-size: medium; font-weight: normal;&quot;&gt;&lt;span style=&quot;color: #ff79c6;&quot;&gt;CREATE&lt;/span&gt; &lt;span style=&quot;color: #ff79c6;&quot;&gt;INDEX&lt;/span&gt; idx_orders_customer_status
&lt;span style=&quot;color: #ff79c6;&quot;&gt;ON&lt;/span&gt; orders(customer_id, order_status);&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Column order matters in composite indexes. If the application usually searches by &lt;code style=&quot;font-family: courier;&quot;&gt;customer_id&lt;/code&gt; first, then &lt;code style=&quot;font-family: courier;&quot;&gt;customer_id&lt;/code&gt; should usually be the leading column. Index design should follow real SQL patterns, not assumptions.&lt;/p&gt;&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;&lt;br /&gt;&lt;/p&gt;

&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;Bitmap Indexes: Useful, But Not for Every System&lt;/h2&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Bitmap indexes are useful for columns with very few distinct values, such as status, gender, active flag, region, or processed flag. They can perform very well in reporting systems and data warehouses where queries combine multiple low-cardinality filters.&lt;/p&gt;

&lt;div style=&quot;background: rgb(40, 42, 54); border-color: gray; border-image: initial; border-style: solid; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;&quot;&gt;
&lt;pre style=&quot;line-height: 125%; margin: 0px;&quot;&gt;&lt;span style=&quot;color: #f8f8f2; font-family: courier; font-size: medium; font-weight: normal;&quot;&gt;&lt;span style=&quot;color: #ff79c6;&quot;&gt;CREATE&lt;/span&gt; BITMAP &lt;span style=&quot;color: #ff79c6;&quot;&gt;INDEX&lt;/span&gt; bix_orders_status
&lt;span style=&quot;color: #ff79c6;&quot;&gt;ON&lt;/span&gt; orders(order_status);&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;The problem starts when bitmap indexes are created on busy OLTP tables. Concurrent DML can suffer because bitmap locking can affect a range of rows, not just one row. If many sessions are inserting or updating at the same time, this can become a blocking issue.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;My practical rule is simple: bitmap indexes belong mostly to read-heavy reporting or warehouse-style workloads. On a hot transaction table, think twice before using them.&lt;/p&gt;

&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;Function-Based Indexes: When SQL Changes the Column&lt;/h2&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;One common production issue is that the index exists, but Oracle still does not use it as expected. Many times, the reason is that the SQL applies a function on the column.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;For example, an index on &lt;code style=&quot;font-family: courier;&quot;&gt;name&lt;/code&gt; may not help much if the application searches using &lt;code style=&quot;font-family: courier;&quot;&gt;UPPER(name)&lt;/code&gt;. Oracle is not searching the raw column anymore. It is searching the result of the function.&lt;/p&gt;

&lt;div style=&quot;background: rgb(40, 42, 54); border-color: gray; border-image: initial; border-style: solid; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;&quot;&gt;
&lt;pre style=&quot;line-height: 125%; margin: 0px;&quot;&gt;&lt;span style=&quot;color: #f8f8f2; font-family: courier; font-size: medium; font-weight: normal;&quot;&gt;&lt;span style=&quot;color: #ff79c6;&quot;&gt;SELECT&lt;/span&gt; *
&lt;span style=&quot;color: #ff79c6;&quot;&gt;FROM&lt;/span&gt; employees
&lt;span style=&quot;color: #ff79c6;&quot;&gt;WHERE&lt;/span&gt; UPPER(name) = &lt;span style=&quot;color: #8be9fd;&quot;&gt;&#39;JOHN&#39;&lt;/span&gt;;

&lt;span style=&quot;color: #ff79c6;&quot;&gt;CREATE&lt;/span&gt; &lt;span style=&quot;color: #ff79c6;&quot;&gt;INDEX&lt;/span&gt; idx_emp_upper_name &lt;span style=&quot;color: #ff79c6;&quot;&gt;ON&lt;/span&gt; employees(UPPER(name));&lt;/span&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Function-based indexes are useful when the application SQL cannot be changed quickly. But do not create them for every function you see. They still add storage and DML overhead.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;For date columns, rewriting the predicate is often better than creating another function-based index. Instead of using &lt;code style=&quot;font-family: courier;&quot;&gt;TRUNC(order_date)&lt;/code&gt; in the WHERE clause, use a date range when possible.&lt;/p&gt;

&lt;div style=&quot;background: rgb(40, 42, 54); border-color: gray; border-image: initial; border-style: solid; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;&quot;&gt;
&lt;pre style=&quot;line-height: 125%; margin: 0px;&quot;&gt;&lt;span style=&quot;color: #f8f8f2; font-family: courier; font-size: medium; font-weight: normal;&quot;&gt;&lt;span style=&quot;color: #ff79c6;&quot;&gt;WHERE&lt;/span&gt; order_date &amp;gt;= &lt;span style=&quot;color: #ff79c6;&quot;&gt;DATE&lt;/span&gt; &lt;span style=&quot;color: #8be9fd;&quot;&gt;&#39;2026-07-05&#39;&lt;/span&gt;
&lt;span style=&quot;color: #ff79c6;&quot;&gt;AND&lt;/span&gt;   order_date &amp;lt;  &lt;span style=&quot;color: #ff79c6;&quot;&gt;DATE&lt;/span&gt; &lt;span style=&quot;color: #8be9fd;&quot;&gt;&#39;2026-07-06&#39;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;Invisible Indexes: Safer Testing Before Dropping&lt;/h2&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Invisible indexes are helpful when you want to test whether an index can be removed. The index remains in the database and continues to be maintained, but the optimizer normally ignores it.&lt;/p&gt;

&lt;div style=&quot;background: rgb(40, 42, 54); border-color: gray; border-image: initial; border-style: solid; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;&quot;&gt;
&lt;pre style=&quot;line-height: 125%; margin: 0px;&quot;&gt;&lt;span style=&quot;color: #f8f8f2; font-family: courier; font-size: medium; font-weight: normal;&quot;&gt;&lt;span style=&quot;color: #ff79c6;&quot;&gt;ALTER&lt;/span&gt; &lt;span style=&quot;color: #ff79c6;&quot;&gt;INDEX&lt;/span&gt; idx_orders_status INVISIBLE;

&lt;span style=&quot;color: #ff79c6;&quot;&gt;ALTER&lt;/span&gt; &lt;span style=&quot;color: #ff79c6;&quot;&gt;INDEX&lt;/span&gt; idx_orders_status VISIBLE;&lt;/span&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;This is safer than dropping an index immediately. Some indexes are used only during month-end reports, audit jobs, quarterly reconciliation, or batch processing. A short observation window can give the wrong conclusion.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;However, remember that invisible indexes are still maintained during DML. If the goal is to reduce write overhead, the benefit comes only after the index is dropped.&lt;/p&gt;&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;&lt;br /&gt;&lt;/p&gt;

&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;Checking Index Usage Without Guesswork&lt;/h2&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Before removing an index, monitor its usage and review the workload. Oracle provides index usage monitoring, but the result should be interpreted carefully.&lt;/p&gt;

&lt;div style=&quot;background: rgb(40, 42, 54); border-color: gray; border-image: initial; border-style: solid; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;&quot;&gt;
&lt;pre style=&quot;line-height: 125%; margin: 0px;&quot;&gt;&lt;span style=&quot;color: #f8f8f2; font-family: courier; font-size: medium; font-weight: normal;&quot;&gt;&lt;span style=&quot;color: #ff79c6;&quot;&gt;ALTER&lt;/span&gt; &lt;span style=&quot;color: #ff79c6;&quot;&gt;INDEX&lt;/span&gt; idx_orders_status MONITORING USAGE;

&lt;span style=&quot;color: #ff79c6;&quot;&gt;SELECT&lt;/span&gt; index_name, used, start_monitoring &lt;span style=&quot;color: #ff79c6;&quot;&gt;FROM&lt;/span&gt; v$object_usage;

&lt;span style=&quot;color: #ff79c6;&quot;&gt;ALTER&lt;/span&gt; &lt;span style=&quot;color: #ff79c6;&quot;&gt;INDEX&lt;/span&gt; idx_orders_status NOMONITORING USAGE;&lt;/span&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Do not monitor for one quiet day and drop the index. A rarely used index may still protect an important business job. The safer approach is to monitor, review SQL history, make the index invisible, observe a full business cycle, and then decide.&lt;/p&gt;&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;&lt;br /&gt;&lt;/p&gt;

&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;Oracle vs PostgreSQL Indexing View&lt;/h2&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Oracle and PostgreSQL both use B-tree indexes as the normal default, but the operational handling differs.&lt;/p&gt;

&lt;ul&gt;
  &lt;li style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Oracle supports B-tree, bitmap, function-based, invisible, domain, reverse key, compressed, and other index options.&lt;/li&gt;
  &lt;li style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;PostgreSQL supports B-tree, Hash, GiST, SP-GiST, GIN, and BRIN indexes.&lt;/li&gt;
  &lt;li style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Oracle bitmap indexes are physical index structures. PostgreSQL may use bitmap scans during execution, but that is not the same as creating an Oracle bitmap index.&lt;/li&gt;
  &lt;li style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;PostgreSQL DBAs commonly use &lt;code style=&quot;font-family: courier;&quot;&gt;CREATE INDEX CONCURRENTLY&lt;/code&gt; to reduce blocking during index creation.&lt;/li&gt;
  &lt;li style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Oracle DBAs may use online index creation where available and licensed.&lt;/li&gt;
&lt;/ul&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;The common lesson is the same in both databases: indexing is workload-driven. The database engine can only help if the index design matches the query pattern.&lt;/p&gt;&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;&lt;br /&gt;&lt;/p&gt;

&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;Common Failure Scenarios&lt;/h2&gt;

&lt;h3 style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large;&quot;&gt;1. Index Exists, But Query Still Scans the Table&lt;/h3&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;This usually happens because of stale statistics, poor selectivity, function usage on the column, datatype conversion, or the optimizer deciding that a full scan is cheaper.&lt;/p&gt;

&lt;h3 style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large;&quot;&gt;2. Too Many Indexes on a Hot Table&lt;/h3&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Every insert or update becomes more expensive because Oracle must maintain multiple indexes. This is painful on audit, transaction, session, queue, and event tables.&lt;/p&gt;

&lt;h3 style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large;&quot;&gt;3. Bitmap Index on OLTP Table&lt;/h3&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Bitmap indexes can create blocking problems in concurrent DML workloads. They may look attractive because the column has few values, but the workload type matters more.&lt;/p&gt;

&lt;h3 style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large;&quot;&gt;4. Wrong Composite Index Order&lt;/h3&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;A composite index is not automatically useful. The leading column should match how the SQL filters data. Poor column order can make the index less effective.&lt;/p&gt;

&lt;h3 style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large;&quot;&gt;5. Index Dropped Too Quickly&lt;/h3&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;An index may not be used during normal daytime workload but may be critical during month-end or batch processing. Dropping it without a proper observation window can create a delayed production issue.&lt;/p&gt;&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;&lt;br /&gt;&lt;/p&gt;

&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;Mini Case Study: Query Slowed Down After Data Growth&lt;/h2&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;A customer order search was running fine for years. Later, the same SQL started taking several seconds during peak time. The application team said the query had not changed, and they were right. The table had changed.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;The table grew from a few million rows to hundreds of millions of rows. Existing single-column indexes were no longer enough for the actual search pattern. The SQL usually filtered by customer and order status together.&lt;/p&gt;

&lt;div style=&quot;background: rgb(40, 42, 54); border-color: gray; border-image: initial; border-style: solid; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;&quot;&gt;
&lt;pre style=&quot;line-height: 125%; margin: 0px;&quot;&gt;&lt;span style=&quot;color: #f8f8f2; font-family: courier; font-size: medium; font-weight: normal;&quot;&gt;&lt;span style=&quot;color: #ff79c6;&quot;&gt;WHERE&lt;/span&gt; customer_id = :b1
&lt;span style=&quot;color: #ff79c6;&quot;&gt;AND&lt;/span&gt;   order_status = :b2;

&lt;span style=&quot;color: #ff79c6;&quot;&gt;CREATE&lt;/span&gt; &lt;span style=&quot;color: #ff79c6;&quot;&gt;INDEX&lt;/span&gt; idx_orders_customer_status &lt;span style=&quot;color: #ff79c6;&quot;&gt;ON&lt;/span&gt; orders(customer_id, order_status)
ONLINE;&lt;/span&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;After testing and refreshing statistics, logical reads dropped sharply and the query became stable again. The lesson was simple: data growth exposes weak index design. A query that behaves well at 5 million rows may become expensive at 200 million rows.&lt;/p&gt;&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;&lt;br /&gt;&lt;/p&gt;

&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;DBA Insights From Production&lt;/h2&gt;

&lt;ul&gt;
  &lt;li style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Do not create indexes only because a query is slow. First check the execution plan and row selectivity.&lt;/li&gt;
  &lt;li style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Review existing indexes before adding new ones. Duplicate and overlapping indexes are common in old systems.&lt;/li&gt;
  &lt;li style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Be careful with bitmap indexes on transactional tables.&lt;/li&gt;
  &lt;li style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;For date filters, try range predicates before creating function-based indexes.&lt;/li&gt;
  &lt;li style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Use invisible indexes when testing index removal.&lt;/li&gt;
  &lt;li style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Monitor index usage across a real business cycle, not only during normal office hours.&lt;/li&gt;
  &lt;li style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Treat indexes like production code. They need review, testing, monitoring, and cleanup.&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: medium;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;

&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;FAQs&lt;/h2&gt;

&lt;h3 style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large;&quot;&gt;Why is Oracle not using my index?&lt;/h3&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Common reasons include stale statistics, poor selectivity, function usage on the column, datatype mismatch, bind variable behavior, or the optimizer estimating that a full table scan is cheaper.&lt;/p&gt;

&lt;h3 style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large;&quot;&gt;Should every foreign key be indexed?&lt;/h3&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Not blindly, but many OLTP systems benefit from indexing foreign keys, especially when parent rows are deleted or updated, or when joins frequently use the foreign key column.&lt;/p&gt;

&lt;h3 style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large;&quot;&gt;When should bitmap indexes be avoided?&lt;/h3&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Avoid bitmap indexes on tables with frequent concurrent inserts, updates, or deletes. They are usually better for reporting, warehouse, or read-heavy workloads.&lt;/p&gt;

&lt;h3 style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large;&quot;&gt;Is a composite index better than two single-column indexes?&lt;/h3&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Sometimes yes. If the SQL always filters by two columns together, one well-designed composite index can be better than two independent indexes. The leading column is important.&lt;/p&gt;

&lt;h3 style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large;&quot;&gt;How long should index usage be monitored before dropping?&lt;/h3&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Monitor long enough to include daily, weekly, month-end, batch, reporting, and audit workloads. A short monitoring window can miss rarely used but important indexes.&lt;/p&gt;&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;&lt;br /&gt;&lt;/p&gt;

&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;Conclusion&lt;/h2&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Indexes can fix slow SQL quickly, but they can also become hidden production debt. A good index reduces unnecessary reads and gives Oracle a better path to the data. A poor index adds storage, write overhead, maintenance effort, and sometimes confusion during troubleshooting.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;For most OLTP workloads, B-tree indexes are the practical default. Bitmap indexes should be handled carefully and are usually better suited for read-heavy reporting systems. Function-based indexes are useful when SQL applies expressions to columns, but rewriting the predicate may be cleaner. Invisible indexes are useful when cleaning up doubtful indexes safely.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;The best indexing decisions come from real workload evidence. Check the execution plan, data distribution, table growth, existing indexes, and DML volume. Do not add indexes emotionally, and do not drop them casually.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Review your top SQL regularly, clean up duplicate indexes carefully, test changes in a controlled way, and monitor the impact after every release. Index tuning is not a one-time task. It is part of healthy production database maintenance.&lt;/p&gt;&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh1en9lsGFWAd7iNXXRIE61_iRLYc28OEQFoLz9lM4J5ZRVYj8wwfR8S_PI6q19lJTOabbCBBx_9GwgL_U74Fw7wXqdcCwHbFnZGHNYuEIG1oz2RB-t6in6fhvJkVLzRjgSNyPjwcG7EmrAyebVcw2_2O3_UgPw5FcwfhJnMfSwM1XI_3AUJvBDfNNk0CQ/s1536/6.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1024&quot; data-original-width=&quot;1536&quot; height=&quot;497&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh1en9lsGFWAd7iNXXRIE61_iRLYc28OEQFoLz9lM4J5ZRVYj8wwfR8S_PI6q19lJTOabbCBBx_9GwgL_U74Fw7wXqdcCwHbFnZGHNYuEIG1oz2RB-t6in6fhvJkVLzRjgSNyPjwcG7EmrAyebVcw2_2O3_UgPw5FcwfhJnMfSwM1XI_3AUJvBDfNNk0CQ/w747-h497/6.png&quot; width=&quot;747&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;&lt;br /&gt;&lt;/p&gt;
</description><link>https://oracle-dba-help.blogspot.com/2026/08/oracle-indexes-fix-slow-sql-without.html</link><author>noreply@blogger.com (Nikhil Kotak)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh1en9lsGFWAd7iNXXRIE61_iRLYc28OEQFoLz9lM4J5ZRVYj8wwfR8S_PI6q19lJTOabbCBBx_9GwgL_U74Fw7wXqdcCwHbFnZGHNYuEIG1oz2RB-t6in6fhvJkVLzRjgSNyPjwcG7EmrAyebVcw2_2O3_UgPw5FcwfhJnMfSwM1XI_3AUJvBDfNNk0CQ/s72-w747-h497-c/6.png" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1375587508974804970.post-7160292956694353537</guid><pubDate>Sat, 22 Aug 2026 13:50:00 +0000</pubDate><atom:updated>2026-08-29T21:51:48.422+08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">23ai</category><category domain="http://www.blogger.com/atom/ns#">26ai</category><category domain="http://www.blogger.com/atom/ns#">AI</category><category domain="http://www.blogger.com/atom/ns#">Core DBA</category><title>The Oracle DBA Role in the AI Era - See how Oracle AI Database 26ai, Autonomous AI Database and MAA are reshaping the DBA role across reliability, security and enterprise AI</title><description>&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Database automation has removed plenty of manual effort, but it has not removed operational accountability. Oracle can now automate provisioning, patching, backup, scaling, and parts of performance management. At the same time, applications are becoming more distributed, security boundaries are expanding, and AI workloads are placing new demands on enterprise data.&lt;span&gt;&lt;/span&gt;&lt;/p&gt;&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;p&gt;&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;This has changed the DBA role rather than eliminated it. The focus is moving from performing every database task manually to selecting the right Oracle capability, defining safe operating boundaries, and proving that the complete service can meet its availability, recovery, security, performance, and cost objectives.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;The modern Oracle DBA is no longer responsible only for an instance. The responsibility now extends across the application-to-data path, including cloud services, AI access, identity, networking, observability, and recovery dependencies.&lt;/p&gt;

&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;Autonomous Does Not Mean Unmanaged&lt;/h2&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Oracle Autonomous AI Database demonstrates how far routine database administration has progressed. Provisioning, tuning, patching, monitoring, backup, and scaling can be automated, allowing teams to spend less time maintaining infrastructure and more time improving the service built on top of it.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;The important production questions, however, remain with the database and platform teams:&lt;/p&gt;

&lt;ul style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;
  &lt;li&gt;Does the selected deployment model meet the application’s availability requirement?&lt;/li&gt;
  &lt;li&gt;Are automatic scaling limits based on measured demand or optimistic estimates?&lt;/li&gt;
  &lt;li&gt;Can the database be restored within the agreed recovery time?&lt;/li&gt;
  &lt;li&gt;Are wallets, identities, private endpoints, and encryption keys available during recovery?&lt;/li&gt;
  &lt;li&gt;Will the application reconnect correctly after a role transition?&lt;/li&gt;
  &lt;li&gt;Are automated backups being periodically restored and validated?&lt;/li&gt;
&lt;/ul&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Automation changes how an operation is executed. It does not prove that the result satisfies the business requirement. A successful backup job is not the same as a tested recovery, and an available database endpoint does not guarantee that the application can reach it.&lt;/p&gt;

&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;Oracle’s Reliability Stack Still Needs DBA Judgement&lt;/h2&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Oracle has a mature set of products for mission-critical availability, but each addresses a different failure model.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;&lt;strong&gt;Oracle Real Application Clusters&lt;/strong&gt; provides instance-level availability and scale-out within a cluster. &lt;strong&gt;Oracle Active Data Guard&lt;/strong&gt; maintains physical standby databases for disaster recovery, data protection, and eligible read workload offloading. &lt;strong&gt;Oracle GoldenGate&lt;/strong&gt; supports logical replication, migrations, and real-time data integration across Oracle and non-Oracle platforms.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;&lt;strong&gt;Oracle Zero Data Loss Autonomous Recovery Service&lt;/strong&gt; adds database-aware backup protection, recovery validation, and an option for real-time redo protection. For demanding consolidation and performance requirements, &lt;strong&gt;Oracle Exadata&lt;/strong&gt; provides an engineered platform in which Oracle Database, compute, storage, and networking are designed to operate together.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;These technologies should not be treated as interchangeable checkboxes. RAC does not replace regional disaster recovery. GoldenGate does not automatically replace a physical standby. A standby database does not replace protected backups because corruption, accidental changes, or security incidents may also be replicated.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Oracle Maximum Availability Architecture helps organize these capabilities into validated availability and recovery patterns. The DBA’s contribution is translating business expectations into the appropriate architecture and then rehearsing the failure paths that matter.&lt;/p&gt;

&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;Oracle AI Database Brings AI Closer to Enterprise Data&lt;/h2&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;AI introduces another change to the DBA role. Application teams increasingly need semantic search, retrieval-augmented generation, natural-language access, and controlled agent interaction with business data.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Oracle AI Database 26ai supports this through capabilities such as AI Vector Search and Select AI. Vector embeddings can be stored alongside relational, JSON, text, spatial, and graph data instead of forcing every AI use case onto a separate specialist database.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;This matters because enterprise searches rarely depend on similarity alone. A support assistant might search product documentation semantically, but the results may also need to be filtered by customer, product version, geography, entitlement, and data-classification rules. Oracle can combine those business filters with vector similarity processing close to the governed source data.&lt;/p&gt;

&lt;h3 style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large;&quot;&gt;Select AI and Natural-Language Queries&lt;/h3&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Oracle Select AI can translate natural-language requests into SQL and support retrieval-augmented generation over private data. This can make enterprise information more accessible without requiring every user to understand the underlying schema.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Natural-language access does not remove the need for database controls. Generated SQL still consumes resources, accesses protected objects, and may return sensitive information. Production adoption therefore requires least-privilege access, approved schemas, auditing, workload controls, and testing against ambiguous requests.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;The DBA does not need to become a data scientist to support these workloads. However, the role should understand vector indexes, embedding dimensions, similarity metrics, data-refresh behaviour, and the performance effect of combining vector search with conventional SQL predicates.&lt;/p&gt;

&lt;h3 style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large;&quot;&gt;AI Agents Need Database Guardrails&lt;/h3&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Oracle’s Select AI Agent framework and Autonomous AI Database MCP Server can provide controlled ways for compatible agents to use defined database tools. This creates useful possibilities for analytics, support applications, and assisted operations.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;It also introduces a new class of service account. An agent should receive only the tools and data required for its purpose. Read-only access should be the default where possible, destructive actions should require explicit controls, and every operation should remain attributable through auditing.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Valid SQL is not automatically safe SQL. The same principle applies whether a statement comes from an application, a human administrator, or an AI agent.&lt;/p&gt;

&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;One Platform, Several Data Models&lt;/h2&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;One practical strength of Oracle AI Database is its converged design. Relational data, JSON documents, vectors, spatial data, and graph relationships can be managed within the same platform. This can reduce the number of separate systems required for an application and, with that, the number of security models, backup processes, monitoring stacks, and integration pipelines.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;&lt;strong&gt;JSON-Relational Duality&lt;/strong&gt; allows applications to access the same underlying data as relational tables or JSON documents. &lt;strong&gt;True Cache&lt;/strong&gt; provides an automatically maintained, transactionally consistent cache for read-intensive applications. &lt;strong&gt;SQL Firewall&lt;/strong&gt; can help identify and block unauthorized SQL activity based on approved SQL patterns.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Using one database for every workload is not automatically the correct design. The decision should still consider scalability, operational isolation, skills, licensing, service availability, and cost. The benefit is that Oracle gives architects the option to consolidate compatible data requirements without immediately introducing another specialist platform.&lt;/p&gt;&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjWHu3ClohsIFIEOl5ihnQJ3E6W6fuTPBIcfaVEIDyD9hJ5BrbQL1PQusV3-RT4GntV7y67ldZmBR238YqmPe8rkhxISRB2ngkyzGPyfy02tu65XOBFzMmuxPcitIDIkVi01jGKhdYAUsx4pd00JQcsMTKgVBe43ggZiN_FP-p-iOLFVc-UVKTnrCAoL8U/s1800/oracle-ai-application-production-stack.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1050&quot; data-original-width=&quot;1800&quot; height=&quot;590&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjWHu3ClohsIFIEOl5ihnQJ3E6W6fuTPBIcfaVEIDyD9hJ5BrbQL1PQusV3-RT4GntV7y67ldZmBR238YqmPe8rkhxISRB2ngkyzGPyfy02tu65XOBFzMmuxPcitIDIkVi01jGKhdYAUsx4pd00JQcsMTKgVBe43ggZiN_FP-p-iOLFVc-UVKTnrCAoL8U/w1009-h590/oracle-ai-application-production-stack.png&quot; width=&quot;1009&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;&lt;br /&gt;&lt;/p&gt;

&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;A Practical Oracle AI Scenario&lt;/h2&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Consider an internal support assistant that must answer questions using customer records, product documentation, operational procedures, and recent transaction information.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;AI Vector Search could locate relevant documents by meaning, while relational predicates restrict the results by business unit, customer entitlement, geography, and data classification. Select AI could provide natural-language interaction, and approved agent tools could retrieve specific operational information.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;The database may run on Autonomous AI Database or Exadata, depending on control, deployment, and workload requirements. RAC or the service’s built-in availability architecture can protect against local failures. Active Data Guard or Autonomous Data Guard can provide standby protection, while Recovery Service protects backups. GoldenGate may be introduced when selected data must be replicated to another platform.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Although this is presented as an AI project, its production readiness depends on familiar DBA questions:&lt;/p&gt;

&lt;ul style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;
  &lt;li&gt;Which data is the agent permitted to retrieve?&lt;/li&gt;
  &lt;li&gt;How are source documents refreshed, retained, and removed?&lt;/li&gt;
  &lt;li&gt;Are vector data and indexes included in the recovery design?&lt;/li&gt;
  &lt;li&gt;How will similarity searches affect database resources during peak periods?&lt;/li&gt;
  &lt;li&gt;Can generated SQL bypass an application-level security rule?&lt;/li&gt;
  &lt;li&gt;What happens to the complete service during database failover?&lt;/li&gt;
&lt;/ul&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;The AI feature may be new, but the requirement for controlled access, measurable performance, and tested recovery is not.&lt;/p&gt;

&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;&lt;br /&gt;&lt;/h2&gt;&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;A Modern Oracle DBA Responsibility Map&lt;/h2&gt;

&lt;table style=&quot;border-collapse: collapse; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal; width: 100%;&quot;&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th style=&quot;background-color: #e06666; border: 1px solid rgb(153, 153, 153); color: white; padding: 10px; text-align: left;&quot;&gt;Operational Area&lt;/th&gt;
      &lt;th style=&quot;background-color: #e06666; border: 1px solid rgb(153, 153, 153); color: white; padding: 10px; text-align: left;&quot;&gt;Oracle Capability&lt;/th&gt;
      &lt;th style=&quot;background-color: #e06666; border: 1px solid rgb(153, 153, 153); color: white; padding: 10px; text-align: left;&quot;&gt;DBA Decision or Validation&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td style=&quot;border: 1px solid rgb(153, 153, 153); padding: 10px; text-align: left;&quot;&gt;Routine Operations&lt;/td&gt;
      &lt;td style=&quot;border: 1px solid rgb(153, 153, 153); padding: 10px; text-align: left;&quot;&gt;Autonomous AI Database&lt;/td&gt;
      &lt;td style=&quot;border: 1px solid rgb(153, 153, 153); padding: 10px; text-align: left;&quot;&gt;Define scaling limits, maintenance expectations, backup policies, connectivity, and service ownership.&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;border: 1px solid rgb(153, 153, 153); padding: 10px; text-align: left;&quot;&gt;Local Availability&lt;/td&gt;
      &lt;td style=&quot;border: 1px solid rgb(153, 153, 153); padding: 10px; text-align: left;&quot;&gt;Oracle RAC and Exadata&lt;/td&gt;
      &lt;td style=&quot;border: 1px solid rgb(153, 153, 153); padding: 10px; text-align: left;&quot;&gt;Validate workload suitability, application continuity, service placement, and cluster failure behaviour.&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;border: 1px solid rgb(153, 153, 153); padding: 10px; text-align: left;&quot;&gt;Disaster Recovery&lt;/td&gt;
      &lt;td style=&quot;border: 1px solid rgb(153, 153, 153); padding: 10px; text-align: left;&quot;&gt;Active Data Guard or Autonomous Data Guard&lt;/td&gt;
      &lt;td style=&quot;border: 1px solid rgb(153, 153, 153); padding: 10px; text-align: left;&quot;&gt;Select the protection mode, measure transport and apply lag, test role transitions, and validate application recovery.&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;border: 1px solid rgb(153, 153, 153); padding: 10px; text-align: left;&quot;&gt;Backup Protection&lt;/td&gt;
      &lt;td style=&quot;border: 1px solid rgb(153, 153, 153); padding: 10px; text-align: left;&quot;&gt;Zero Data Loss Autonomous Recovery Service&lt;/td&gt;
      &lt;td style=&quot;border: 1px solid rgb(153, 153, 153); padding: 10px; text-align: left;&quot;&gt;Set retention policies, protect recovery credentials, test restores, and confirm the achievable recovery point.&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;border: 1px solid rgb(153, 153, 153); padding: 10px; text-align: left;&quot;&gt;AI Search&lt;/td&gt;
      &lt;td style=&quot;border: 1px solid rgb(153, 153, 153); padding: 10px; text-align: left;&quot;&gt;AI Vector Search&lt;/td&gt;
      &lt;td style=&quot;border: 1px solid rgb(153, 153, 153); padding: 10px; text-align: left;&quot;&gt;Choose the vector design, index strategy, similarity metric, data-refresh process, and workload controls.&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;border: 1px solid rgb(153, 153, 153); padding: 10px; text-align: left;&quot;&gt;Natural-Language Access&lt;/td&gt;
      &lt;td style=&quot;border: 1px solid rgb(153, 153, 153); padding: 10px; text-align: left;&quot;&gt;Select AI&lt;/td&gt;
      &lt;td style=&quot;border: 1px solid rgb(153, 153, 153); padding: 10px; text-align: left;&quot;&gt;Restrict schema access, audit generated SQL, protect sensitive data, and test ambiguous requests.&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;border: 1px solid rgb(153, 153, 153); padding: 10px; text-align: left;&quot;&gt;Real-Time Integration&lt;/td&gt;
      &lt;td style=&quot;border: 1px solid rgb(153, 153, 153); padding: 10px; text-align: left;&quot;&gt;Oracle GoldenGate&lt;/td&gt;
      &lt;td style=&quot;border: 1px solid rgb(153, 153, 153); padding: 10px; text-align: left;&quot;&gt;Define consistency expectations, conflict handling, replication scope, monitoring, and recovery procedures.&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;&lt;br /&gt;&lt;/h2&gt;&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;The Multicloud DBA Boundary&lt;/h2&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Oracle Database services are no longer limited to a single cloud strategy. Oracle Database@Azure, Oracle Database@Google Cloud, and Oracle Database@AWS allow organizations to place Oracle database services closer to applications running in their chosen hyperscaler.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;The database service may be managed on Oracle infrastructure, but the complete application can still depend on another provider’s compute, networking, identity, monitoring, and storage services. Incident ownership and disaster-recovery runbooks must reflect that split.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;A successful database switchover is only technical completion. Operational success means the application has reconnected, dependent services are working, monitoring has followed the new primary, and the business transaction has been validated.&lt;/p&gt;

&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;What DBAs Should Build Next&lt;/h2&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;The strongest path forward is not to abandon traditional Oracle knowledge. It is to combine that foundation with a wider operating view.&lt;/p&gt;

&lt;ul style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;
  &lt;li&gt;Keep performance, recovery, transaction knowledge current.&lt;/li&gt;
  &lt;li&gt;Learn how Autonomous AI Database changes operational ownership.&lt;/li&gt;
  &lt;li&gt;Understand where RAC, Data Guard, GoldenGate, Recovery Service, and Exadata fit.&lt;/li&gt;
  &lt;li&gt;Build practical knowledge of vectors, RAG, Select AI, and agent security.&lt;/li&gt;
  &lt;li&gt;Treat identity, certificates, networks, and key management as database dependencies.&lt;/li&gt;
  &lt;li&gt;Automate repeatable work like pre-checks, logging, exception handling, and safe recovery paths.&lt;/li&gt;
  &lt;li&gt;Measure performance and cloud consumption instead of relying only on provisioned capacity.&lt;/li&gt;
&lt;/ul&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large;&quot;&gt;&lt;b&gt;Good architecture in any environment or estate,- comes from selecting the smallest combination that meets the required performance, availability, security, recovery, and cost objectives., and later evaluating it and exploring &amp;amp; expanding it more&lt;/b&gt;&lt;/p&gt;

&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;&lt;br /&gt;&lt;/h2&gt;&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;Frequently Asked Questions&lt;/h2&gt;

&lt;h3 style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large;&quot;&gt;Will Autonomous AI Database replace Oracle DBAs?&lt;/h3&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;It reduces routine administration, but architecture, recovery validation, workload design, security, integration, governance, and business service requirements still need qualified ownership., so keep learning and exploring the Oracle Learnings and Certifications.&lt;/p&gt;&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;&lt;br /&gt;&lt;/p&gt;

&lt;h3 style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large;&quot;&gt;Is AI Vector Search a separate Oracle database?&lt;/h3&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;No. AI Vector Search is integrated with Oracle AI Database, allowing vector similarity processing to be combined with relational and other supported data searches.&lt;/p&gt;

&lt;h3 style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large;&quot;&gt;Does an AI agent need special database controls?&lt;/h3&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Yes. Agent access should follow least-privilege principles, use approved tools, remain auditable, and require stronger controls for any operation that can change production data or configuration.&lt;/p&gt;

&lt;h3 style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large;&quot;&gt;Are RAC and Data Guard alternatives to each other?&lt;/h3&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;No. RAC primarily addresses availability and scalability within a cluster, while Data Guard maintains standby databases for disaster recovery and data protection. Critical systems commonly use both for different failure scenarios.&lt;/p&gt;

&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;Conclusion&lt;/h2&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Oracle has automated many tasks that once defined daily database administration, but the DBA role has moved toward higher-value decisions. Autonomous AI Database reduces routine effort. RAC, Active Data Guard, GoldenGate, Recovery Service, Exadata, and Oracle MAA support demanding availability and recovery requirements. Oracle AI Database 26ai adds a practical foundation for vector search, natural-language access, and governed AI applications.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;The responsibility is therefore broader than keeping an instance online. The modern Oracle DBA must connect database behaviour with application continuity, security, cloud dependencies, AI access, recovery, and cost. The next practical step is to review one existing workload and confirm whether its architecture, automation, and recovery tests prove the business outcome rather than merely showing that individual components are healthy.&lt;/p&gt;

&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;Official References&lt;/h2&gt;

&lt;ul style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.oracle.com/database/features/&quot; target=&quot;_blank&quot;&gt;Oracle AI Database features&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.oracle.com/autonomous-database/&quot; target=&quot;_blank&quot;&gt;Oracle Autonomous AI Database&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;https://www.oracle.com/database/technologies/maximum-availability-architecture/&quot; target=&quot;_blank&quot;&gt;Oracle Maximum Availability Architecture&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;

&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;Relevant Oracle Learning and Certifications&lt;/h2&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;DBAs who want to build skills around Oracle AI Database, autonomous operations, vector search, agentic AI, multicloud architecture, and availability can consider the following Oracle University learning paths and certifications.&lt;/p&gt;

&lt;table style=&quot;border-collapse: collapse; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal; width: 100%;&quot;&gt;
  &lt;thead&gt;
    &lt;tr&gt;
      &lt;th style=&quot;background-color: #e06666; border: 1px solid rgb(153, 153, 153); color: white; padding: 10px; text-align: left;&quot;&gt;Priority&lt;/th&gt;
      &lt;th style=&quot;background-color: #e06666; border: 1px solid rgb(153, 153, 153); color: white; padding: 10px; text-align: left;&quot;&gt;Oracle Certification or Learning Path&lt;/th&gt;
      &lt;th style=&quot;background-color: #e06666; border: 1px solid rgb(153, 153, 153); color: white; padding: 10px; text-align: left;&quot;&gt;Relevant Learning&lt;/th&gt;
    &lt;/tr&gt;
  &lt;/thead&gt;
  &lt;tbody&gt;
    &lt;tr&gt;
      &lt;td style=&quot;border: 1px solid rgb(153, 153, 153); padding: 10px; text-align: left;&quot;&gt;1&lt;/td&gt;
      &lt;td style=&quot;border: 1px solid rgb(153, 153, 153); padding: 10px; text-align: left;&quot;&gt;&lt;a href=&quot;https://mylearn.oracle.com/ou/learning-path/become-an-oci-agentic-ai-foundations-associate/163239&quot; target=&quot;_blank&quot;&gt;Agentic AI Foundations Associate&lt;/a&gt;&lt;br /&gt;&lt;code style=&quot;font-family: courier;&quot;&gt;1Z0-1157-26&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;border: 1px solid rgb(153, 153, 153); padding: 10px; text-align: left;&quot;&gt;Introduces AI agents, agentic patterns, MCP, LangChain, OCI Enterprise AI, and the use of Oracle AI Database in agent-driven solutions.&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;border: 1px solid rgb(153, 153, 153); padding: 10px; text-align: left;&quot;&gt;2&lt;/td&gt;
      &lt;td style=&quot;border: 1px solid rgb(153, 153, 153); padding: 10px; text-align: left;&quot;&gt;&lt;a href=&quot;https://mylearn.oracle.com/ou/learning-path/become-an-oracle-ai-vector-search-professional/144854&quot; target=&quot;_blank&quot;&gt;Oracle AI Vector Search Professional&lt;/a&gt;&lt;/td&gt;
      &lt;td style=&quot;border: 1px solid rgb(153, 153, 153); padding: 10px; text-align: left;&quot;&gt;Covers vector fundamentals, embeddings, similarity searches, vector indexes, retrieval-augmented generation, and Select AI.&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;border: 1px solid rgb(153, 153, 153); padding: 10px; text-align: left;&quot;&gt;3&lt;/td&gt;
      &lt;td style=&quot;border: 1px solid rgb(153, 153, 153); padding: 10px; text-align: left;&quot;&gt;&lt;a href=&quot;https://mylearn.oracle.com/ou/learning-path/become-an-oracle-autonomous-ai-database-professional/163045&quot; target=&quot;_blank&quot;&gt;Oracle Autonomous AI Database Professional&lt;/a&gt;&lt;br /&gt;&lt;code style=&quot;font-family: courier;&quot;&gt;1Z0-931-26&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;border: 1px solid rgb(153, 153, 153); padding: 10px; text-align: left;&quot;&gt;Focuses on provisioning, scaling, patching, backup, security, performance management, and the operational lifecycle of Autonomous AI Database.&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;border: 1px solid rgb(153, 153, 153); padding: 10px; text-align: left;&quot;&gt;4&lt;/td&gt;
      &lt;td style=&quot;border: 1px solid rgb(153, 153, 153); padding: 10px; text-align: left;&quot;&gt;&lt;a href=&quot;https://mylearn.oracle.com/ou/learning-path/become-an-agentic-ai-for-oracle-ai-database-professional/163163&quot; target=&quot;_blank&quot;&gt;Agentic AI for Oracle AI Database Professional&lt;/a&gt;&lt;br /&gt;&lt;code style=&quot;font-family: courier;&quot;&gt;1Z0-1159-26&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;border: 1px solid rgb(153, 153, 153); padding: 10px; text-align: left;&quot;&gt;Provides advanced learning on agentic workflows, Select AI Agent, MCP integration, database tools, and governed access to enterprise data.&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;border: 1px solid rgb(153, 153, 153); padding: 10px; text-align: left;&quot;&gt;5&lt;/td&gt;
      &lt;td style=&quot;border: 1px solid rgb(153, 153, 153); padding: 10px; text-align: left;&quot;&gt;&lt;a href=&quot;https://education.oracle.com/ouexam-pexam_1z0-1147/pexam_1Z0-1147&quot; target=&quot;_blank&quot;&gt;Oracle AI Database@Azure Architect Professional&lt;/a&gt;&lt;br /&gt;&lt;code style=&quot;font-family: courier;&quot;&gt;1Z0-1147&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;border: 1px solid rgb(153, 153, 153); padding: 10px; text-align: left;&quot;&gt;Validates skills in designing, deploying, connecting, and managing Oracle Database services within Microsoft Azure environments.&lt;/td&gt;
    &lt;/tr&gt;
    &lt;tr&gt;
      &lt;td style=&quot;border: 1px solid rgb(153, 153, 153); padding: 10px; text-align: left;&quot;&gt;6&lt;/td&gt;
      &lt;td style=&quot;border: 1px solid rgb(153, 153, 153); padding: 10px; text-align: left;&quot;&gt;&lt;a href=&quot;https://education.oracle.com/ouexam-pexam_1z0-076/pexam_1Z0-076&quot; target=&quot;_blank&quot;&gt;Oracle Database 19c: Data Guard Administration&lt;/a&gt;&lt;br /&gt;&lt;code style=&quot;font-family: courier;&quot;&gt;1Z0-076&lt;/code&gt;&lt;/td&gt;
      &lt;td style=&quot;border: 1px solid rgb(153, 153, 153); padding: 10px; text-align: left;&quot;&gt;Strengthens practical knowledge of standby databases, redo transport, apply services, protection modes, role transitions, and disaster recovery.&lt;/td&gt;
    &lt;/tr&gt;
  &lt;/tbody&gt;
&lt;/table&gt;

&lt;h3 style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/h3&gt;&lt;h3 style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large;&quot;&gt;Suggested Learning Sequence&lt;/h3&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;For an Oracle DBA moving toward data, cloud, and AI reliability responsibilities, the following sequence provides a useful progression:&lt;/p&gt;

&lt;ol style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;
  &lt;li&gt;Build the agentic AI foundation.&lt;/li&gt;
  &lt;li&gt;Learn vector embeddings, similarity search, and RAG through Oracle AI Vector Search.&lt;/li&gt;
  &lt;li&gt;Develop operational knowledge of Autonomous AI Database.&lt;/li&gt;
  &lt;li&gt;Move into database-native agentic workflows and MCP integration.&lt;/li&gt;
  &lt;li&gt;Add Oracle Database@Azure or another relevant multicloud specialization.&lt;/li&gt;
  &lt;li&gt;Continue strengthening traditional availability skills through Data Guard and Oracle MAA.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3 style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/h3&gt;&lt;h3 style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large;&quot;&gt;Build Hands-On Skills with Oracle AI Database 26ai Free&lt;/h3&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Certification learning becomes more valuable when it is supported by practical testing. &lt;a href=&quot;https://www.oracle.com/database/free/&quot; target=&quot;_blank&quot;&gt;Oracle AI Database 26ai Free&lt;/a&gt; provides a suitable environment for experimenting with vector data types, embeddings, similarity queries, JSON-Relational Duality, SQL Firewall, and other 26ai capabilities.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;A useful learning exercise is to create a small document-search application, store embeddings with business metadata, perform semantic searches with relational filters, and then evaluate indexing, security, backup, and performance behaviour from a DBA perspective.&lt;/p&gt;

&lt;h3 style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/h3&gt;&lt;h3 style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large;&quot;&gt;Upcoming Oracle Learning&lt;/h3&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Oracle University has announced an Exadata Database Service professional-level certification planned for October 2026. This should be particularly relevant to DBAs working with Exadata cloud deployments, consolidation, performance, and mission-critical database services.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Oracle&#39;s Foundations learning and certification remain available without charge. Professional-level learning paths generally require paid access under Oracle University’s 2026 model. Certification titles are now evergreen, although individual exam codes may continue to contain release identifiers. Review the &lt;a href=&quot;https://blogs.oracle.com/oracleuniversity/oci-certification-learning-paths-and-exams-2026-updates-now-available&quot; target=&quot;_blank&quot;&gt;Oracle University 2026 certification update&lt;/a&gt; and the corresponding &lt;a href=&quot;https://mylearn.oracle.com/&quot; target=&quot;_blank&quot;&gt;MyLearn page&lt;/a&gt; before scheduling an exam.&lt;/p&gt;
</description><link>https://oracle-dba-help.blogspot.com/2026/11/the-oracle-dba-role-in-ai-era-see-how.html</link><author>noreply@blogger.com (Nikhil Kotak)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjWHu3ClohsIFIEOl5ihnQJ3E6W6fuTPBIcfaVEIDyD9hJ5BrbQL1PQusV3-RT4GntV7y67ldZmBR238YqmPe8rkhxISRB2ngkyzGPyfy02tu65XOBFzMmuxPcitIDIkVi01jGKhdYAUsx4pd00JQcsMTKgVBe43ggZiN_FP-p-iOLFVc-UVKTnrCAoL8U/s72-w1009-h590-c/oracle-ai-application-production-stack.png" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1375587508974804970.post-5568484228925327279</guid><pubDate>Sun, 16 Aug 2026 10:26:00 +0000</pubDate><atom:updated>2026-09-21T20:10:18.556+08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Core DBA</category><category domain="http://www.blogger.com/atom/ns#">Must Read</category><title>Oracle Key Vault: DBA Guide for TDE Keys and scenarios</title><description>&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-weight: bold; text-align: left;&quot;&gt;&lt;span style=&quot;font-size: medium; font-weight: normal;&quot;&gt;A database backup can finish successfully and still fail during recovery.&lt;/span&gt;&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-weight: normal; text-align: left;&quot;&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;That usually sounds strange until encryption enters the picture. RMAN backup is available, archive logs are available, Data Guard is in sync, but during restore someone asks the real question: where is the TDE wallet or master key?&lt;/span&gt;&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-weight: normal; text-align: left;&quot;&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;This is where many production environments become risky. TDE wallets are present on database servers, Java keystores are owned by middleware teams, SSH keys are copied between hosts, certificates are renewed manually, and old wallet backups are kept in folders nobody wants to touch.&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;p&gt;&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-weight: normal; text-align: left;&quot;&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;Oracle Key Vault helps reduce this spread by centralizing the management of TDE master keys, Oracle wallets, Java keystores, certificates, credential files, SSH keys, and other secrets. For a DBA, the value is not only security. It is also recoverability, auditability, controlled access, and cleaner operations during patching, migration, Data Guard switchover, and disaster recovery.&lt;/span&gt;&lt;/p&gt;

&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
  &lt;!--Add Blogger image here: Oracle Key Vault centralized key management diagram--&gt;
&lt;/div&gt;

&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;Why Key Management Becomes a DBA Problem&lt;/h2&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Encryption may start as a security requirement, but the operational impact often lands with the DBA team.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;A few common production situations are very familiar:&lt;/p&gt;

&lt;ul&gt;
  &lt;li style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;A TDE wallet was created on the primary database server but was never validated on the standby.&lt;/li&gt;
  &lt;li style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;A database restore completed, but encrypted tablespaces could not be opened.&lt;/li&gt;
  &lt;li style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;A RAC node was rebuilt, but the Oracle Key Vault endpoint client was missed.&lt;/li&gt;
  &lt;li style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;A certificate expired and the issue appeared during a maintenance window.&lt;/li&gt;
  &lt;li style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Audit asked who accessed or rotated a key, and the answer was scattered across tickets and server logs.&lt;/li&gt;
&lt;/ul&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Oracle Key Vault brings these security objects under central control. Instead of each database server becoming its own small vault, OKV becomes the controlled repository where access, lifecycle, backup, and reporting can be managed properly.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;The important production point is this: once a database depends on external key management, key availability becomes part of database availability.&lt;/p&gt;&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;&lt;br /&gt;&lt;/p&gt;

&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;How Oracle Key Vault Fits with TDE&lt;/h2&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Oracle Transparent Data Encryption protects data at rest. Oracle Key Vault does not replace TDE. It manages the keys and security objects used by TDE.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;In a typical setup, the database server is enrolled as an Oracle Key Vault endpoint. That endpoint gets access to the required virtual wallet or security objects. The database can then access its TDE master encryption keys through the OKV client configuration.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;For modern Oracle databases, the two parameters DBAs should pay attention to are &lt;code style=&quot;font-family: courier;&quot;&gt;WALLET_ROOT&lt;/code&gt; and &lt;code style=&quot;font-family: courier;&quot;&gt;TDE_CONFIGURATION&lt;/code&gt;. Older environments may still have wallet locations configured through &lt;code style=&quot;font-family: courier;&quot;&gt;sqlnet.ora&lt;/code&gt;, especially after upgrades or migrations, so it is worth checking the actual configuration before making assumptions.&lt;/p&gt;

&lt;div style=&quot;background: rgb(40, 42, 54); border-color: gray; border-image: initial; border-style: solid; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;&quot;&gt;
&lt;pre style=&quot;line-height: 125%; margin: 0px;&quot;&gt;&lt;span style=&quot;color: #f8f8f2; font-family: courier; font-size: medium; font-weight: normal;&quot;&gt;&lt;span style=&quot;color: #ff79c6;&quot;&gt;SHOW&lt;/span&gt; parameter wallet_root
&lt;span style=&quot;color: #ff79c6;&quot;&gt;SHOW&lt;/span&gt; parameter tde_configuration

&lt;span style=&quot;color: #ff79c6;&quot;&gt;SET&lt;/span&gt; lines 200 &lt;span style=&quot;color: #ff79c6;&quot;&gt;COL&lt;/span&gt; wallet_type &lt;span style=&quot;color: #ff79c6;&quot;&gt;FOR&lt;/span&gt; a20 &lt;span style=&quot;color: #ff79c6;&quot;&gt;COL&lt;/span&gt; status &lt;span style=&quot;color: #ff79c6;&quot;&gt;FOR&lt;/span&gt; a20 &lt;span style=&quot;color: #ff79c6;&quot;&gt;COL&lt;/span&gt; keystore_mode &lt;span style=&quot;color: #ff79c6;&quot;&gt;FOR&lt;/span&gt; a20 &lt;span style=&quot;color: #ff79c6;&quot;&gt;COL&lt;/span&gt; wrl_parameter &lt;span style=&quot;color: #ff79c6;&quot;&gt;FOR&lt;/span&gt; a60

&lt;span style=&quot;color: #ff79c6;&quot;&gt;SELECT&lt;/span&gt; con_id,
wallet_type,
status,
keystore_mode,
wrl_parameter &lt;span style=&quot;color: #ff79c6;&quot;&gt;FROM&lt;/span&gt; v$encryption_wallet &lt;span style=&quot;color: #ff79c6;&quot;&gt;ORDER BY&lt;/span&gt; con_id;

&lt;span style=&quot;color: #ff79c6;&quot;&gt;SELECT&lt;/span&gt; tablespace_name,
encrypted &lt;span style=&quot;color: #ff79c6;&quot;&gt;FROM&lt;/span&gt; dba_tablespaces &lt;span style=&quot;color: #ff79c6;&quot;&gt;WHERE&lt;/span&gt; encrypted = &lt;span style=&quot;color: #8be9fd;&quot;&gt;&#39;YES&#39;&lt;/span&gt; &lt;span style=&quot;color: #ff79c6;&quot;&gt;ORDER BY&lt;/span&gt; tablespace_name;

&lt;span style=&quot;color: #ff79c6;&quot;&gt;ALTER SYSTEM SET&lt;/span&gt; wallet_root=&lt;span style=&quot;color: #8be9fd;&quot;&gt;&#39;/u01/app/oracle/admin/PRODDB/wallet&#39;&lt;/span&gt; &lt;span style=&quot;color: #ff79c6;&quot;&gt;SCOPE&lt;/span&gt;=spfile;

&lt;span style=&quot;color: #ff79c6;&quot;&gt;SHUTDOWN IMMEDIATE&lt;/span&gt;; &lt;span style=&quot;color: #ff79c6;&quot;&gt;STARTUP&lt;/span&gt;;

&lt;span style=&quot;color: #ff79c6;&quot;&gt;ALTER SYSTEM SET&lt;/span&gt; tde_configuration=&lt;span style=&quot;color: #8be9fd;&quot;&gt;&#39;KEYSTORE_CONFIGURATION=OKV&#39;&lt;/span&gt; &lt;span style=&quot;color: #ff79c6;&quot;&gt;SCOPE&lt;/span&gt;=both;&lt;/span&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;In some environments, you may see values such as &lt;code style=&quot;font-family: courier;&quot;&gt;OKV|FILE&lt;/code&gt; or &lt;code style=&quot;font-family: courier;&quot;&gt;FILE|OKV&lt;/code&gt;. Do not treat these as random alternatives. They are commonly seen during migration or dual-keystore designs. Always verify the Oracle version, current wallet state, and whether the database is using united or isolated keystore mode in a multitenant setup.&lt;/p&gt;&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;&lt;br /&gt;&lt;/p&gt;

&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;The Endpoint Check DBAs Should Not Skip&lt;/h2&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;The database view gives one side of the story. The endpoint check gives another.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Oracle Key Vault uses endpoint software on the database or application server. The command-line utility &lt;code style=&quot;font-family: courier;&quot;&gt;okvutil&lt;/code&gt; is one of the quickest ways to confirm whether the endpoint can talk to OKV and access the assigned security objects.&lt;/p&gt;

&lt;div style=&quot;background: rgb(40, 42, 54); border-color: gray; border-image: initial; border-style: solid; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;&quot;&gt;
&lt;pre style=&quot;line-height: 125%; margin: 0px;&quot;&gt;&lt;span style=&quot;color: #04ff00; font-family: courier; font-size: medium; font-weight: normal;&quot;&gt;export &lt;/span&gt;&lt;span style=&quot;color: #f8f8f2; font-family: courier; font-size: medium; font-weight: normal;&quot;&gt;OKV_HOME=/u01/app/oracle/okv
&lt;/span&gt;&lt;span style=&quot;color: #04ff00; font-family: courier; font-size: medium; font-weight: normal;&quot;&gt;export &lt;/span&gt;&lt;span style=&quot;color: #f8f8f2; font-family: courier; font-size: medium; font-weight: normal;&quot;&gt;PATH=$OKV_HOME/bin:$PATH

okvutil list

grep -i server $OKV_HOME/conf/okvclient.ora
ls -l $OKV_HOME/conf

nslookup okv-vip.example.com
nc -vz okv-vip.example.com 5696

grep -Ei &quot;ORA-283|ORA-284|TDE|OKV|PKCS|wallet|keystore&quot; 
$ORACLE_BASE/diag/rdbms/*/*/trace/alert*.log&lt;/span&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;If &lt;code style=&quot;font-family: courier;&quot;&gt;okvutil list&lt;/code&gt; fails, do not immediately recreate wallets. Start with simple checks. Is &lt;code style=&quot;font-family: courier;&quot;&gt;OKV_HOME&lt;/code&gt; correct? Is &lt;code style=&quot;font-family: courier;&quot;&gt;okvclient.ora&lt;/code&gt; present? Was the endpoint enrolled? Can the host reach the OKV server or VIP? Was the endpoint certificate replaced? Did the database move to another Oracle home?&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;For RAC, validate from every node. A common operational miss is checking only node 1. Everything looks healthy until a service relocates or an instance restarts on node 2.&lt;/p&gt;&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;&lt;br /&gt;&lt;/p&gt;

&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;High Availability: Central Control Needs Strong Design&lt;/h2&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Centralizing keys improves governance, but it also introduces a dependency that must be designed properly.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;A running database may continue during a temporary OKV issue depending on cache behavior and whether the required key is already available. But that does not mean the design is safe. The real test is a database restart, PDB open, standby open read-only, key rotation, or restore to another host.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;For critical databases, OKV should be included in the same operational checklist as Data Guard, RAC, backup, and monitoring.&lt;/p&gt;

&lt;ul&gt;
  &lt;li style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;OKV high availability or cluster design&lt;/li&gt;
  &lt;li style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;OKV backup and restore testing&lt;/li&gt;
  &lt;li style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Endpoint configuration on all RAC nodes&lt;/li&gt;
  &lt;li style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Standby endpoint access&lt;/li&gt;
  &lt;li style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Firewall and DNS validation from primary and DR sites&lt;/li&gt;
  &lt;li style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Certificate expiry monitoring&lt;/li&gt;
  &lt;li style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Key rotation testing in lower environments&lt;/li&gt;
&lt;/ul&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;A DR test should not be marked successful only because redo apply worked. If TDE is enabled, encrypted data access after role transition must also be tested.&lt;/p&gt;&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;&lt;br /&gt;&lt;/p&gt;

&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;RAC, Data Guard, GoldenGate and Hybrid Estates&lt;/h2&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Oracle Key Vault is simple to understand in a single database setup. It becomes more interesting in a real enterprise estate.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;In RAC, every node must have a working OKV endpoint configuration. Service relocation, node restart, or instance failover can expose node-specific issues.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;In Data Guard, the standby must be able to access the required TDE keys. A standby can be perfect from a redo apply perspective but still fail after promotion if key access was never validated.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;In GoldenGate environments, wallets, certificates, database credentials, and encrypted source or target data can all become part of the security chain. OKV helps reduce unmanaged local copies, but endpoint access and operational ownership must be planned properly.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;In hybrid or multi-cloud setups, the difficult questions are often outside the database. Can the DR site reach OKV? Does DNS resolve correctly after failover? Are firewall rules open from all database subnets? Who owns certificate renewal? Is OKV monitored by both security and operations teams?&lt;/p&gt;&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;&lt;br /&gt;&lt;/p&gt;

&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;Oracle vs PostgreSQL: Same Goal, Different Model&lt;/h2&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Oracle has a strong database-native TDE model, and Oracle Key Vault integrates closely with that ecosystem.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;PostgreSQL is different. Community PostgreSQL usually follows a layered security model. DBAs commonly combine SSL/TLS, SCRAM authentication, &lt;code style=&quot;font-family: courier;&quot;&gt;pgcrypto&lt;/code&gt; for specific column-level encryption use cases, OS or storage-level encryption, cloud KMS, or external vault solutions. Some PostgreSQL vendors provide their own TDE features, but it is not the same operational model as Oracle TDE with OKV.&lt;/p&gt;

&lt;div style=&quot;background: rgb(40, 42, 54); border-color: gray; border-image: initial; border-style: solid; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;&quot;&gt;
&lt;pre style=&quot;line-height: 125%; margin: 0px;&quot;&gt;&lt;span style=&quot;color: #f8f8f2; font-family: courier; font-size: medium; font-weight: normal;&quot;&gt;&lt;span style=&quot;color: #ff79c6;&quot;&gt;SHOW&lt;/span&gt; ssl;

&lt;span style=&quot;color: #ff79c6;&quot;&gt;SELECT&lt;/span&gt; pid,
ssl,
version,
cipher &lt;span style=&quot;color: #ff79c6;&quot;&gt;FROM&lt;/span&gt; pg_stat_ssl &lt;span style=&quot;color: #ff79c6;&quot;&gt;WHERE&lt;/span&gt; ssl = &lt;span style=&quot;color: #8be9fd;&quot;&gt;true&lt;/span&gt;;

&lt;span style=&quot;color: #ff79c6;&quot;&gt;CREATE EXTENSION IF NOT EXISTS&lt;/span&gt; pgcrypto;

&lt;span style=&quot;color: #ff79c6;&quot;&gt;SELECT&lt;/span&gt; pgp_sym_encrypt(&lt;span style=&quot;color: #8be9fd;&quot;&gt;&#39;sensitive-value&#39;&lt;/span&gt;, &lt;span style=&quot;color: #8be9fd;&quot;&gt;&#39;do-not-hardcode-this-key&#39;&lt;/span&gt;);&lt;/span&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;The PostgreSQL example above is only to show the capability. In production, encryption keys should not be hardcoded inside SQL, scripts, or application configuration files. Key ownership, rotation, and auditability must be designed properly.&lt;/p&gt;&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;&lt;br /&gt;&lt;/p&gt;

&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;Common Failure Scenarios&lt;/h2&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Most OKV-related issues are not mysterious. They usually come from one missed endpoint step, one wrong permission, one network rule, or one assumption that was never tested.&lt;/p&gt;

&lt;ul&gt;
  &lt;li style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Database restart fails because the keystore cannot be opened.&lt;/li&gt;
  &lt;li style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Standby opens after failover but encrypted tablespaces are not accessible.&lt;/li&gt;
  &lt;li style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;RAC node 1 works, but node 2 fails after service relocation.&lt;/li&gt;
  &lt;li style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;OKV endpoint was re-enrolled, but the database server still has old configuration files.&lt;/li&gt;
  &lt;li style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Firewall or DNS changes break OKV connectivity from the DR site.&lt;/li&gt;
  &lt;li style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Key rotation was performed without validating standby, restore, and application behaviour.&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: medium;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;

&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;A Case Study about: Data Guard Failover and Missing Key Access&lt;/h2&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;A TDE-enabled Oracle database was protected by Data Guard. Redo transport was healthy, apply lag was under control, and the standby looked ready for DR.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;During a failover test, the standby was promoted successfully. The database opened, but application testing failed when encrypted data was accessed.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;The root cause was not Data Guard. The standby host did not have proper OKV endpoint access to the required virtual wallet. The team had validated replication but had not validated TDE key access from the standby server.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;The fix was to enroll the standby correctly as an OKV endpoint, grant access to the required virtual wallet, validate endpoint connectivity, check wallet status from the database, and test encrypted data access again after role transition.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;The lesson is simple: for encrypted databases, Data Guard readiness is not only redo apply. It also includes key availability.&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh2yaTeN4qL5rPMnuwKw4dN_qJtXbMkmCNMzqd653XviU7C4M1Wbg19HPiAgOupfsWE7TkgOOfvk_27dbRuszfATdZ0x8Qcmif84eotNk3adKk8Wymh_L3Hs56fVVcELmwY_A7sDvVtpYxvRR1KfRRvdWUzDfb9jiVj_oXdDjg4jdSBFcfqOPX9cWjeVSE/s1672/Nikhilkotak%20Image%20Jun%201,%202026,%2007_08_33%20PM.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;941&quot; data-original-width=&quot;1672&quot; height=&quot;360&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh2yaTeN4qL5rPMnuwKw4dN_qJtXbMkmCNMzqd653XviU7C4M1Wbg19HPiAgOupfsWE7TkgOOfvk_27dbRuszfATdZ0x8Qcmif84eotNk3adKk8Wymh_L3Hs56fVVcELmwY_A7sDvVtpYxvRR1KfRRvdWUzDfb9jiVj_oXdDjg4jdSBFcfqOPX9cWjeVSE/w640-h360/Nikhilkotak%20Image%20Jun%201,%202026,%2007_08_33%20PM.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;&lt;br /&gt;&lt;/p&gt;

&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;DBA Insights from Production&lt;/h2&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;The most dangerous encryption issue is the one discovered during recovery.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;A database can run for months without anyone noticing that a standby endpoint is wrong, a wallet backup is outdated, a RAC node cannot reach OKV, or a restore host does not have the correct access. These issues surface during patching, failover, restore, or migration, exactly when pressure is highest.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;My practical recommendations are:&lt;/p&gt;

&lt;ul&gt;
  &lt;li style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Add OKV checks to database health check scripts.&lt;/li&gt;
  &lt;li style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Validate endpoint connectivity from every RAC node.&lt;/li&gt;
  &lt;li style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Include OKV validation in Data Guard switchover and failover drills.&lt;/li&gt;
  &lt;li style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Test encrypted tablespace access after restore.&lt;/li&gt;
  &lt;li style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Track certificate expiry and endpoint re-enrollment.&lt;/li&gt;
  &lt;li style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Do not rotate keys in production without a tested rollback and communication plan.&lt;/li&gt;
  &lt;li style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Document ownership between DBA, security, Unix, network, and cloud teams.&lt;/li&gt;
&lt;/ul&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Oracle Key Vault gives control, but only when the operational process around it is strong.&lt;/p&gt;

&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;&lt;br /&gt;&lt;/h2&gt;

&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;Quick Takeaways&lt;/h2&gt;

&lt;ul&gt;
  &lt;li style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Oracle Key Vault reduces wallet and key sprawl, but it must be included in availability planning.&lt;/li&gt;
  &lt;li style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;&lt;code style=&quot;font-family: courier;&quot;&gt;WALLET_ROOT&lt;/code&gt; and &lt;code style=&quot;font-family: courier;&quot;&gt;TDE_CONFIGURATION&lt;/code&gt; are key parameters for modern Oracle TDE setup.&lt;/li&gt;
  &lt;li style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;&lt;code style=&quot;font-family: courier;&quot;&gt;okvutil list&lt;/code&gt; is a simple but powerful endpoint validation command.&lt;/li&gt;
  &lt;li style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;RAC nodes, standby servers, and restore hosts must all be checked separately.&lt;/li&gt;
  &lt;li style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Data Guard readiness is incomplete without TDE key access validation.&lt;/li&gt;
  &lt;li style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;PostgreSQL security usually needs a layered design rather than one OKV-style model.&lt;/li&gt;
&lt;/ul&gt;&lt;div&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: medium;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;

&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;FAQs&lt;/h2&gt;

&lt;h3 style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large;&quot;&gt;1. Does Oracle Key Vault replace TDE?&lt;/h3&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;No. TDE encrypts the database data. Oracle Key Vault centrally manages the keys and security objects used by TDE.&lt;/p&gt;

&lt;h3 style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large;&quot;&gt;2. Will OKV slow down every SQL query?&lt;/h3&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Normally, no. OKV is more relevant during key access, startup, keystore open, key rotation, migration, and recovery operations. It is not called for every row read.&lt;/p&gt;

&lt;h3 style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large;&quot;&gt;3. What should I check first during an OKV issue?&lt;/h3&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Start with &lt;code style=&quot;font-family: courier;&quot;&gt;v$encryption_wallet&lt;/code&gt; from the database and &lt;code style=&quot;font-family: courier;&quot;&gt;okvutil list&lt;/code&gt; from the database server. These two checks quickly separate database-side and endpoint-side issues.&lt;/p&gt;

&lt;h3 style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large;&quot;&gt;4. Is OKV mandatory for Data Guard?&lt;/h3&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;No, not in every design. But if the primary database uses OKV-managed TDE keys, the standby must also be able to access the required keys.&lt;/p&gt;

&lt;h3 style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large;&quot;&gt;5. How is PostgreSQL different?&lt;/h3&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Oracle has native TDE integration with OKV. PostgreSQL commonly uses TLS, &lt;code style=&quot;font-family: courier;&quot;&gt;pgcrypto&lt;/code&gt;, storage encryption, application-level encryption, external vaults, or cloud KMS depending on the requirement.&lt;/p&gt;&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;&lt;br /&gt;&lt;/p&gt;

&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;Conclusion&lt;/h2&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Oracle Key Vault solves a real production problem: too many keys, wallets, certificates, and secrets spread across too many systems.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;For Oracle DBAs, the biggest benefit is not only central storage. It is controlled access, audit support, cleaner key lifecycle operations, and reduced recovery risk. When TDE is used across RAC, Data Guard, GoldenGate, and hybrid environments, this becomes even more important.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;At the same time, OKV should not be treated as a black box owned only by the security team. Once Oracle databases depend on it, DBAs need to understand endpoint configuration, TDE parameters, standby access, certificate dependency, and what happens during failover or restore.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;The best time to test key access is not during a failed recovery. It is during planned validation.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Review your encrypted databases. Check where the keys live. Confirm who can access them. Validate OKV from all nodes. Test standby and restore scenarios. Add OKV checks to your operational runbooks.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Encryption protects data, but key management protects the recovery path.&amp;nbsp;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh-S8lIniN4BCrPTFcA5E6Z5MDbRvGm2_8EoQ2GFxT7oTlP1ZGyeJKRTVtYRG300iG0XcL-bfaoMWf7VTvswAZCAuPCTfxeWov7JZrpxjIbAAKqsFBJaoLZFEWdC990v6yd03DNYmgWEvMprlL075BvrUlWXOgh2kYdmQXd9MWwf28nCfW9MLZLcQib4bs/s1672/Nikhilkotak%20Image%20Jun%201,%202026,%2006_56_01%20PM.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;941&quot; data-original-width=&quot;1672&quot; height=&quot;360&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh-S8lIniN4BCrPTFcA5E6Z5MDbRvGm2_8EoQ2GFxT7oTlP1ZGyeJKRTVtYRG300iG0XcL-bfaoMWf7VTvswAZCAuPCTfxeWov7JZrpxjIbAAKqsFBJaoLZFEWdC990v6yd03DNYmgWEvMprlL075BvrUlWXOgh2kYdmQXd9MWwf28nCfW9MLZLcQib4bs/w640-h360/Nikhilkotak%20Image%20Jun%201,%202026,%2006_56_01%20PM.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Have you ever seen a restore, switchover, or migration delayed because the wallet or encryption key was missing?&amp;nbsp;&lt;/p&gt;&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Share your experience below. These are the production lessons that are rarely visible in architecture diagrams.&lt;/p&gt;
</description><link>https://oracle-dba-help.blogspot.com/2026/08/oracle-key-vault-dba-guide-for-tde-keys.html</link><author>noreply@blogger.com (Nikhil Kotak)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh2yaTeN4qL5rPMnuwKw4dN_qJtXbMkmCNMzqd653XviU7C4M1Wbg19HPiAgOupfsWE7TkgOOfvk_27dbRuszfATdZ0x8Qcmif84eotNk3adKk8Wymh_L3Hs56fVVcELmwY_A7sDvVtpYxvRR1KfRRvdWUzDfb9jiVj_oXdDjg4jdSBFcfqOPX9cWjeVSE/s72-w640-h360-c/Nikhilkotak%20Image%20Jun%201,%202026,%2007_08_33%20PM.png" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1375587508974804970.post-4093675496964180869</guid><pubDate>Sun, 09 Aug 2026 13:15:00 +0000</pubDate><atom:updated>2026-09-21T20:10:47.074+08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Must Read</category><title>Sometimes It Is Not One Big Problem. It Is Everything Running in the Background.</title><description>&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;&lt;br /&gt;&lt;/h2&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;After more than 12 years of working with production databases, I have learned that performance problems do not always begin with one terrible query.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Sometimes it is several smaller things happening together. One session is using slightly more CPU, another is holding a lock, a background job is running longer than expected, and storage latency has quietly increased. None of them looks disastrous alone, but together they make the whole system struggle.&lt;span&gt;&lt;/span&gt;&lt;/p&gt;&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;p&gt;&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Stress can build in much the same way.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;We usually search for one obvious reason when we feel exhausted: a difficult project, a production incident, financial pressure, or a problem at home.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;But sometimes there is no single cause. It is the late-night message we answered, the lunch we skipped, the conversation we kept replaying, the water we forgot to drink, and the sleep we sacrificed because one task was still pending&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Each one appears manageable. Together, they become a collection of background processes that nobody remembered to stop.&lt;/p&gt;&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;&lt;br /&gt;&lt;/p&gt;

&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;The Small Things That Keep Us Switched On&lt;/h2&gt;

&lt;h3 style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/h3&gt;&lt;h3 style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large;&quot;&gt;Lesson 1: Work Never Completely Ends&lt;/h3&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Anyone working in production support knows that some situations cannot wait. If a critical database is unavailable, “Let us check tomorrow morning” is unlikely to be accepted as a recovery plan.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;But not every email is an incident. Not every Teams message is an escalation. And not every sentence beginning with “quick question” will actually be quick.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;When work follows us into every evening, the laptop may be closed, but the mind remains connected. We continue thinking about tomorrow’s change, an unresolved ticket, or the possibility that another message might arrive.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Effectively, the brain remains on call—usually without claiming the allowance.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;There needs to be a reasonable difference between being responsible and being permanently available.&lt;/p&gt;&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;&lt;br /&gt;&lt;/p&gt;

&lt;h3 style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large;&quot;&gt;Lesson 2: We Postpone the Basics First&lt;/h3&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;During a busy day, lunch is often treated as an optional dependency.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;We plan to eat after the next meeting. Then another call starts, a ticket is escalated, and lunch finally happens at 4:30 PM. That is not necessarily intermittent fasting. Sometimes it is simply poor calendar management.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Water, movement, and sleep are handled in much the same way. The body may tolerate this for a while, which can make us believe everything is fine. However, inadequate sleep can affect attention, mood, and emotional regulation, making ordinary problems feel harder the following day.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;No productivity application can fully compensate for repeatedly ignoring the basics—not even the one with the attractive dashboard.&lt;/p&gt;&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;&lt;br /&gt;&lt;/p&gt;

&lt;h3 style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large;&quot;&gt;Lesson 3: Some Meetings Continue in Our Heads&lt;/h3&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;We have all attended a meeting that officially ended at 3:00 PM but continued in our mind until bedtime.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Perhaps someone spoke unfairly. Maybe an important question remained unanswered. We replay the discussion and prepare several excellent responses—unfortunately, all of them arrive four hours too late.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;It is unrealistic to expect every emotion to disappear when a meeting ends. A more practical approach is to write down what happened, decide whether an action is required, and set a time to deal with it.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Otherwise, a 30-minute conversation can occupy mental storage for the rest of the day.&lt;/p&gt;

&lt;h3 style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/h3&gt;&lt;h3 style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large;&quot;&gt;Lesson 4: Notifications Create Invisible Work&lt;/h3&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;One notification does not seem stressful. The problem is the repeated switching&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;You are reviewing a document when a Teams message appears. Then an email arrives, the phone vibrates, and somebody requests a “small update” in another channel. By evening, you have been active for nine hours but are not entirely sure what you completed.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Research suggests that notifications can interrupt attention even when we do not open them. Turning off unnecessary alerts does not mean becoming unreachable. It means deciding which applications genuinely deserve permission to interrupt you.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;If five applications are all marked as urgent, perhaps none of them understands the meaning of urgent.&lt;/p&gt;&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;&lt;br /&gt;&lt;/p&gt;

&lt;h3 style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large;&quot;&gt;Lesson 5: Sitting All Day Does Not Help&lt;/h3&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;DBAs can spend several hours in the same chair, particularly during an incident, production change, or troubleshooting call.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;At some point, the chair knows more about the shift schedule than the family does.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Movement does not have to mean a full gym session. A short walk after lunch, standing during a call, or stepping away from the screen between meetings can break a long period of sitting.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;A ten-minute walk will not resolve chronic stress or fix the execution plan. It can, however, give the mind a useful pause.&lt;/p&gt;&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;&lt;br /&gt;&lt;/p&gt;

&lt;h3 style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large;&quot;&gt;Lesson 6: Not Every Energy Dip Is a Blood-Sugar Problem&lt;/h3&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Tiredness, irritability, and poor concentration are frequently blamed on a “blood-sugar crash.” That explanation is often too simple.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;The same symptoms may be related to poor sleep, dehydration, irregular meals, stress, medication, or an underlying health condition. An afternoon slump alone is not enough to conclude that someone has hypoglycaemia.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Regular, balanced meals are a sensible starting point. If fatigue, dizziness, or other unexplained symptoms continue, speak with a qualified medical professional. Google, a smartwatch, and one motivational video do not constitute a clinical team.&lt;/p&gt;

&lt;h3 style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/h3&gt;&lt;h3 style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large;&quot;&gt;Lesson 7 Connection Matters More Than We Admit&lt;/h3&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;When work becomes intense, personal time is often the first item removed from the calendar.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;We postpone meeting friends, speak less with family, and remain half-connected to the phone even when we are with people; just in case the world ends while we are having dinner.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Supportive relationships cannot remove difficult circumstances, but they can make those circumstances easier to manage. Sometimes a relaxed conversation with someone we trust is more useful than another hour spent trying to optimise ourselves.&lt;/p&gt;&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;&lt;br /&gt;&lt;/p&gt;

&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;Recovery May Begin with Subtraction&lt;/h2&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;When a database is overloaded, we do not always solve the problem by adding more resources. Sometimes we stop an unnecessary job, reduce repeated calls, correct an inefficient query, or remove work that should never have been running.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;The same principle can apply to us.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Recovery may not begin with another tracking application, a complicated morning routine, or ten new habits that eventually become eleven new sources of guilt.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;It may begin with something much simpler:&lt;/p&gt;

&lt;ul style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;
  &lt;li style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Turn off one unnecessary notification.&lt;/li&gt;
  &lt;li style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Decline one meeting that does not need to happen.&lt;/li&gt;
  &lt;li style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Eat lunch without looking at a screen.&lt;/li&gt;
  &lt;li style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Leave one genuinely non-urgent message until tomorrow.&lt;/li&gt;
  &lt;li style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Allow an empty space in the calendar to remain empty.&lt;/li&gt;
&lt;/ul&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;The objective is not to eliminate every source of stress. Some pressure is unavoidable, particularly in roles carrying operational responsibility. The problem begins when pressure becomes continuous and recovery is repeatedly postponed.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;We spend a great deal of time monitoring the health of our systems. Occasionally, we should check what has been running in our own background for too long.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Not every alert requires a P1 response—but please understand the alert before muting it and going for coffee.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Stay healthy.&lt;/p&gt;
</description><link>https://oracle-dba-help.blogspot.com/2026/08/sometimes-it-is-not-one-big-problem-it.html</link><author>noreply@blogger.com (Nikhil Kotak)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1375587508974804970.post-215442533149586931</guid><pubDate>Sun, 09 Aug 2026 09:44:00 +0000</pubDate><atom:updated>2026-08-09T17:44:00.206+08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Core DBA</category><category domain="http://www.blogger.com/atom/ns#">Interview Questions</category><category domain="http://www.blogger.com/atom/ns#">Must Read</category><title>Oracle Redo Logs: Sizing Without Guesswork</title><description>&lt;h2 style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;&lt;span style=&quot;font-size: medium; font-weight: normal;&quot;&gt;Redo log problems rarely start with a clean error message. They usually show up as slow commits, archive destinations filling faster than expected, Data Guard apply lag, or batch jobs that suddenly take longer during month-end. By the time someone checks the alert log, the database may already be switching logs too frequently, checkpointing aggressively, or waiting for archiving to catch up.&lt;/span&gt;&lt;/h2&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-weight: normal;&quot;&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;A common reaction is to increase redo log size and move on. Sometimes that is required, but it is not always the real fix. Redo log sizing controls how frequently Oracle switches logs. It does not reduce the amount of redo generated by bad SQL, unnecessary indexes, row-by-row commits, or poorly designed batch jobs.&lt;/span&gt;&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-weight: normal;&quot;&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;This post looks at Oracle redo log sizing from a production DBA angle. We will check log switch frequency, estimate redo generation rate, review MTTR guidance, discuss common failure scenarios, and compare the idea briefly with PostgreSQL WAL pressure.&lt;/span&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;p&gt;&lt;/p&gt;

&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
  &lt;!--Add Blogger image here: Redo flow diagram showing User Session -&gt; Redo Buffer -&gt; LGWR -&gt; Online Redo Logs -&gt; ARCH -&gt; Archive Destination -&gt; Data Guard Standby--&gt;
&lt;/div&gt;

&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;Why Redo Log Sizing Matters in Production&lt;/h2&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Every committed change in Oracle must be protected by redo. LGWR writes redo records to the online redo logs, and in ARCHIVELOG mode, those logs are archived after switching. This is normal database behavior, but it becomes painful when the redo infrastructure is not sized for the workload.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;When redo logs are too small, Oracle switches logs more often. Frequent log switches can increase checkpoint activity, put pressure on archiver processes, and expose slow storage or archive destinations. On a Data Guard setup, the same problem can also show up as transport or apply lag.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;When redo logs are too large without thought, crash recovery behavior may not match business expectations. So the target is not simply “make redo logs huge”. The target is to size them based on workload, recovery requirement, and operational behavior.&lt;/p&gt;

&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;&lt;br /&gt;&lt;/h2&gt;&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;The First Check: How Often Are Logs Switching?&lt;/h2&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Before touching redo log size, check the current switch pattern. I normally start with hourly switch frequency and then compare it against known business activity. A switch every 10 to 15 minutes during normal OLTP workload is usually comfortable. A switch every minute during regular workload needs investigation. During a heavy batch window, faster switching may be acceptable only if checkpointing, archiving, and standby apply are keeping up.&lt;/p&gt;

&lt;div style=&quot;background: rgb(40, 42, 54); border-color: gray; border-image: initial; border-style: solid; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;&quot;&gt;
&lt;pre style=&quot;line-height: 125%; margin: 0px;&quot;&gt;&lt;span style=&quot;color: #f8f8f2; font-family: courier;&quot;&gt;&lt;span style=&quot;color: #ff79c6;&quot;&gt;SELECT&lt;/span&gt; thread#,
       group#,
       ROUND(bytes/1024/1024) &lt;span style=&quot;color: #ff79c6;&quot;&gt;AS&lt;/span&gt; size_mb,
       members,
       archived,
       status
&lt;span style=&quot;color: #ff79c6;&quot;&gt;FROM&lt;/span&gt; v$log
&lt;span style=&quot;color: #ff79c6;&quot;&gt;ORDER BY&lt;/span&gt; thread#, group#;

&lt;span style=&quot;color: #ff79c6;&quot;&gt;SELECT&lt;/span&gt; thread#,
TO_CHAR(first_time, &lt;span style=&quot;color: #8be9fd;&quot;&gt;&#39;YYYY-MM-DD HH24&#39;&lt;/span&gt;) &lt;span style=&quot;color: #ff79c6;&quot;&gt;AS&lt;/span&gt; switch_hour,
COUNT(*) &lt;span style=&quot;color: #ff79c6;&quot;&gt;AS&lt;/span&gt; switch_count &lt;span style=&quot;color: #ff79c6;&quot;&gt;FROM&lt;/span&gt; v$log_history &lt;span style=&quot;color: #ff79c6;&quot;&gt;WHERE&lt;/span&gt; first_time &amp;gt;= SYSDATE - 7 &lt;span style=&quot;color: #ff79c6;&quot;&gt;GROUP BY&lt;/span&gt; thread#, TO_CHAR(first_time, &lt;span style=&quot;color: #8be9fd;&quot;&gt;&#39;YYYY-MM-DD HH24&#39;&lt;/span&gt;) &lt;span style=&quot;color: #ff79c6;&quot;&gt;ORDER BY&lt;/span&gt; switch_hour, thread#;

&lt;span style=&quot;color: #ff79c6;&quot;&gt;SELECT&lt;/span&gt; group#,
type,
member,
status &lt;span style=&quot;color: #ff79c6;&quot;&gt;FROM&lt;/span&gt; v$logfile &lt;span style=&quot;color: #ff79c6;&quot;&gt;ORDER BY&lt;/span&gt; group#, member;&lt;/span&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;In RAC, check each thread separately. If thread 1 switches every few minutes but thread 2 is quiet, the issue may be workload imbalance rather than redo sizing alone. Services, application connection pools, or batch jobs may be pinned heavily to one instance.&lt;/p&gt;

&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;&lt;br /&gt;&lt;/h2&gt;&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;Size Redo Logs Based on Peak Redo Rate&lt;/h2&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Average redo generation is useful for capacity planning, but it is not enough for sizing redo logs. Production incidents usually happen during peak load: month-end processing, large data correction jobs, ETL runs, release deployments, or index maintenance.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;The below query uses archived logs to estimate redo generation rate. Run it for the busiest window, not during a quiet period.&lt;/p&gt;

&lt;div style=&quot;background: rgb(40, 42, 54); border-color: gray; border-image: initial; border-style: solid; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;&quot;&gt;
&lt;pre style=&quot;line-height: 125%; margin: 0px;&quot;&gt;&lt;span style=&quot;color: #f8f8f2; font-family: courier; font-weight: normal;&quot;&gt;&lt;span style=&quot;color: #ff79c6;&quot;&gt;SELECT&lt;/span&gt; thread#,
       sequence#,
       first_time,
       next_time,
       ROUND(blocks * block_size / 1024 / 1024, 2) &lt;span style=&quot;color: #ff79c6;&quot;&gt;AS&lt;/span&gt; size_mb,
       ROUND((next_time - first_time) * 86400) &lt;span style=&quot;color: #ff79c6;&quot;&gt;AS&lt;/span&gt; seconds_taken,
       ROUND(
         (blocks * block_size / 1024 / 1024) /
         NULLIF((next_time - first_time) * 86400, 0),
         2
       ) &lt;span style=&quot;color: #ff79c6;&quot;&gt;AS&lt;/span&gt; mb_per_sec
&lt;span style=&quot;color: #ff79c6;&quot;&gt;FROM&lt;/span&gt; v$archived_log
&lt;span style=&quot;color: #ff79c6;&quot;&gt;WHERE&lt;/span&gt; first_time &amp;gt;= TO_DATE(&lt;span style=&quot;color: #8be9fd;&quot;&gt;&#39;2026-08-08 09:00:00&#39;&lt;/span&gt;, &lt;span style=&quot;color: #8be9fd;&quot;&gt;&#39;YYYY-MM-DD HH24:MI:SS&#39;&lt;/span&gt;)
&lt;span style=&quot;color: #ff79c6;&quot;&gt;AND&lt;/span&gt;   first_time &amp;lt;  TO_DATE(&lt;span style=&quot;color: #8be9fd;&quot;&gt;&#39;2026-08-09 12:00:00&#39;&lt;/span&gt;, &lt;span style=&quot;color: #8be9fd;&quot;&gt;&#39;YYYY-MM-DD HH24:MI:SS&#39;&lt;/span&gt;)
&lt;span style=&quot;color: #ff79c6;&quot;&gt;AND&lt;/span&gt;   dest_id = 1
&lt;span style=&quot;color: #ff79c6;&quot;&gt;AND&lt;/span&gt;   blocks &amp;gt; 0
&lt;span style=&quot;color: #ff79c6;&quot;&gt;ORDER BY&lt;/span&gt; first_time, thread#;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;A simple sizing formula is:&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;&lt;code style=&quot;font-family: courier;&quot;&gt;Redo log size = peak redo MB/sec x desired switch interval in seconds&lt;/code&gt;&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;For example, if peak redo generation is 40 MB/sec and you want roughly 10-minute switches, the estimated log size is:&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;&lt;code style=&quot;font-family: courier;&quot;&gt;40 x 600 = 24000 MB&lt;/code&gt;&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;That does not automatically mean you should create 24 GB logs everywhere. It means the workload is heavy enough that you must validate redo size, archive throughput, Data Guard capacity, and recovery expectations together.&lt;/p&gt;

&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
  &lt;!--Add Blogger image here: Redo sizing decision chart showing Peak Redo Rate -&gt; Desired Switch Interval -&gt; Redo Log Size -&gt; Validate MTTR/Data Guard/Archive--&gt;
&lt;/div&gt;

&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;&lt;br /&gt;&lt;/h2&gt;&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;Use MTTR Advice, But Keep DBA Judgement&lt;/h2&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Oracle provides recovery-related advice through &lt;code style=&quot;font-family: courier;&quot;&gt;V$INSTANCE_RECOVERY&lt;/code&gt;. The column &lt;code style=&quot;font-family: courier;&quot;&gt;OPTIMAL_LOGFILE_SIZE&lt;/code&gt; can help you understand whether the current redo log size fits the configured recovery target.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;This is useful, but it should not be treated as the only answer. MTTR is mainly about crash recovery time. Runtime behavior also depends on workload, checkpoint activity, I/O, archive speed, and standby apply capacity.&lt;/p&gt;

&lt;div style=&quot;background: rgb(40, 42, 54); border-color: gray; border-image: initial; border-style: solid; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;&quot;&gt;
&lt;pre style=&quot;line-height: 125%; margin: 0px;&quot;&gt;&lt;span style=&quot;color: #f8f8f2; font-family: courier; font-weight: normal;&quot;&gt;SHOW PARAMETER fast_start_mttr_target
SHOW PARAMETER statistics_level

&lt;span style=&quot;color: #ff79c6;&quot;&gt;SELECT&lt;/span&gt; target_mttr,
estimated_mttr,
ckpt_block_writes,
optimal_logfile_size &lt;span style=&quot;color: #ff79c6;&quot;&gt;FROM&lt;/span&gt; v$instance_recovery;

&lt;span style=&quot;color: #ff79c6;&quot;&gt;ALTER SYSTEM SET&lt;/span&gt; statistics_level = &lt;span style=&quot;color: #8be9fd;&quot;&gt;TYPICAL&lt;/span&gt; &lt;span style=&quot;color: #ff79c6;&quot;&gt;SCOPE&lt;/span&gt;=BOTH;

&lt;span style=&quot;color: #ff79c6;&quot;&gt;ALTER SYSTEM SET&lt;/span&gt; fast_start_mttr_target = 300 &lt;span style=&quot;color: #ff79c6;&quot;&gt;SCOPE&lt;/span&gt;=BOTH;&lt;/span&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;If &lt;code style=&quot;font-family: courier;&quot;&gt;OPTIMAL_LOGFILE_SIZE&lt;/code&gt; is consistently higher than your current redo log size, that is a strong signal to review redo sizing. Still, test the change during a controlled window and confirm that recovery objectives are acceptable.&lt;/p&gt;

&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;&lt;br /&gt;&lt;/h2&gt;&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;Redo Pressure Often Comes from Application Design&lt;/h2&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;DBAs often get asked to fix redo growth from the database side, but many redo problems are created by application behavior. Oracle is doing what it is supposed to do: protecting changes. The question is whether the application is asking Oracle to protect too many unnecessary changes.&lt;/p&gt;

&lt;h3 style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large;&quot;&gt;Too many indexes on write-heavy tables&lt;/h3&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Every insert, update, or delete may also modify indexes. A table with many indexes can generate much more redo than expected. Before dropping anything, review index usage carefully and consider invisible indexes for controlled testing.&lt;/p&gt;

&lt;h3 style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large;&quot;&gt;Delete and insert instead of merge&lt;/h3&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Some batch jobs delete old rows and insert fresh rows because it is easy to code. From a redo and undo perspective, that can be expensive. If most rows already exist, a controlled &lt;code style=&quot;font-family: courier;&quot;&gt;MERGE&lt;/code&gt; or targeted update may generate less pressure.&lt;/p&gt;

&lt;h3 style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large;&quot;&gt;Updating unchanged columns&lt;/h3&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;ORM-generated SQL sometimes updates every column even when only one value changed. This can increase redo, undo, row locking, buffer activity, and standby apply workload. For critical batch jobs, review the generated SQL instead of assuming the database parameter is wrong.&lt;/p&gt;

&lt;div style=&quot;background: rgb(40, 42, 54); border-color: gray; border-image: initial; border-style: solid; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;&quot;&gt;
&lt;pre style=&quot;line-height: 125%; margin: 0px;&quot;&gt;&lt;span style=&quot;color: #f8f8f2; font-family: courier; font-size: medium; font-weight: normal;&quot;&gt;&lt;span style=&quot;color: #ff79c6;&quot;&gt;SELECT&lt;/span&gt; owner,
       table_name,
       COUNT(*) &lt;span style=&quot;color: #ff79c6;&quot;&gt;AS&lt;/span&gt; index_count
&lt;span style=&quot;color: #ff79c6;&quot;&gt;FROM&lt;/span&gt; dba_indexes
&lt;span style=&quot;color: #ff79c6;&quot;&gt;WHERE&lt;/span&gt; owner &lt;span style=&quot;color: #ff79c6;&quot;&gt;NOT IN&lt;/span&gt; (&lt;span style=&quot;color: #8be9fd;&quot;&gt;&#39;SYS&#39;&lt;/span&gt;, &lt;span style=&quot;color: #8be9fd;&quot;&gt;&#39;SYSTEM&#39;&lt;/span&gt;)
&lt;span style=&quot;color: #ff79c6;&quot;&gt;GROUP BY&lt;/span&gt; owner, table_name
&lt;span style=&quot;color: #ff79c6;&quot;&gt;HAVING&lt;/span&gt; COUNT(*) &amp;gt; 10
&lt;span style=&quot;color: #ff79c6;&quot;&gt;ORDER BY&lt;/span&gt; index_count &lt;span style=&quot;color: #ff79c6;&quot;&gt;DESC&lt;/span&gt;;

&lt;span style=&quot;color: #ff79c6;&quot;&gt;ALTER INDEX&lt;/span&gt; app_owner.idx_orders_old &lt;span style=&quot;color: #ff79c6;&quot;&gt;INVISIBLE&lt;/span&gt;;

&lt;span style=&quot;color: #ff79c6;&quot;&gt;MERGE INTO&lt;/span&gt; customer_stage t &lt;span style=&quot;color: #ff79c6;&quot;&gt;USING&lt;/span&gt; customer_stage_new s &lt;span style=&quot;color: #ff79c6;&quot;&gt;ON&lt;/span&gt; (t.customer_id = s.customer_id) &lt;span style=&quot;color: #ff79c6;&quot;&gt;WHEN MATCHED THEN&lt;/span&gt; &lt;span style=&quot;color: #ff79c6;&quot;&gt;UPDATE SET&lt;/span&gt; t.status = s.status,
t.updated_at = SYSTIMESTAMP &lt;span style=&quot;color: #ff79c6;&quot;&gt;WHERE&lt;/span&gt; NVL(t.status, &lt;span style=&quot;color: #8be9fd;&quot;&gt;&#39;X&#39;&lt;/span&gt;) &amp;lt;&amp;gt; NVL(s.status, &lt;span style=&quot;color: #8be9fd;&quot;&gt;&#39;X&#39;&lt;/span&gt;) &lt;span style=&quot;color: #ff79c6;&quot;&gt;WHEN NOT MATCHED THEN&lt;/span&gt; &lt;span style=&quot;color: #ff79c6;&quot;&gt;INSERT&lt;/span&gt; (customer_id, status, updated_at) &lt;span style=&quot;color: #ff79c6;&quot;&gt;VALUES&lt;/span&gt; (s.customer_id, s.status, SYSTIMESTAMP);&lt;/span&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjH9F4Mp-grgbVjGoI8jxdKfA9TRMrNsKMFVl731_BcPxCBYAXmPmuKVcNoucrwuTOufgR-TE72wd8gs4nJEtLjYkf7ZM5ia6kcRgONmwx4IQgBAqulHlNoKk0k3ROwdxtGdJ2FezCYFcXbHpiHW-d0s1I6fA_1zjL1T4gOxd3dLOPTuGtikNDTT-B90Ms/s1491/nikhilk.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1055&quot; data-original-width=&quot;1491&quot; height=&quot;434&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjH9F4Mp-grgbVjGoI8jxdKfA9TRMrNsKMFVl731_BcPxCBYAXmPmuKVcNoucrwuTOufgR-TE72wd8gs4nJEtLjYkf7ZM5ia6kcRgONmwx4IQgBAqulHlNoKk0k3ROwdxtGdJ2FezCYFcXbHpiHW-d0s1I6fA_1zjL1T4gOxd3dLOPTuGtikNDTT-B90Ms/w613-h434/nikhilk.png&quot; width=&quot;613&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;&lt;br /&gt;&lt;/h2&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;Commit Frequency Is Not Just a Coding Style&lt;/h2&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Row-by-row commits are still common in old batch scripts. They look safe because each row is committed quickly, but they can create unnecessary LGWR activity and poor throughput. On the other hand, one huge commit may create restartability and rollback problems. The right commit size depends on business logic, restart design, and workload volume.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;For bulk processing, commit in controlled batches where the business process allows it. Do not change commit logic only for performance without confirming functional requirements.&lt;/p&gt;

&lt;div style=&quot;background: rgb(40, 42, 54); border-color: gray; border-image: initial; border-style: solid; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;&quot;&gt;
&lt;pre style=&quot;line-height: 125%; margin: 0px;&quot;&gt;&lt;span style=&quot;color: #f8f8f2; font-family: courier; font-size: medium; font-weight: normal;&quot;&gt;DECLARE
  l_count NUMBER := 0;
BEGIN
  FOR r IN (&lt;span style=&quot;color: #ff79c6;&quot;&gt;SELECT&lt;/span&gt; id, status &lt;span style=&quot;color: #ff79c6;&quot;&gt;FROM&lt;/span&gt; source_table) LOOP

```
&lt;span style=&quot;color: #ff79c6;&quot;&gt;UPDATE&lt;/span&gt; target_table
   &lt;span style=&quot;color: #ff79c6;&quot;&gt;SET&lt;/span&gt; status = r.status
 &lt;span style=&quot;color: #ff79c6;&quot;&gt;WHERE&lt;/span&gt; id = r.id;

l_count := l_count + 1;

IF l_count &amp;gt;= 5000 THEN
  COMMIT;
  l_count := 0;
END IF;
```

END LOOP;

COMMIT;
END;
/&lt;/span&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;&lt;br /&gt;&lt;/h2&gt;&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;Resizing Redo Logs Safely&lt;/h2&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Oracle does not simply resize an existing redo log group. The usual production approach is to add new larger groups, switch logs until old groups become inactive, and then drop the old groups. In RAC, do this per thread.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Before dropping any group, confirm it is not current and not required for recovery. Also remember Data Guard: standby redo logs should normally be sized consistently with online redo logs.&lt;/p&gt;

&lt;div style=&quot;background: rgb(40, 42, 54); border-color: gray; border-image: initial; border-style: solid; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;&quot;&gt;
&lt;pre style=&quot;line-height: 125%; margin: 0px;&quot;&gt;&lt;span style=&quot;color: #f8f8f2; font-family: courier; font-size: medium; font-weight: normal;&quot;&gt;&lt;span style=&quot;color: #ff79c6;&quot;&gt;SELECT&lt;/span&gt; thread#,
       group#,
       ROUND(bytes/1024/1024) &lt;span style=&quot;color: #ff79c6;&quot;&gt;AS&lt;/span&gt; size_mb,
       status,
       archived
&lt;span style=&quot;color: #ff79c6;&quot;&gt;FROM&lt;/span&gt; v$log
&lt;span style=&quot;color: #ff79c6;&quot;&gt;ORDER BY&lt;/span&gt; thread#, group#;

&lt;span style=&quot;color: #ff79c6;&quot;&gt;ALTER DATABASE ADD LOGFILE THREAD&lt;/span&gt; 1 &lt;span style=&quot;color: #ff79c6;&quot;&gt;SIZE&lt;/span&gt; 4G; &lt;span style=&quot;color: #ff79c6;&quot;&gt;ALTER DATABASE ADD LOGFILE THREAD&lt;/span&gt; 1 &lt;span style=&quot;color: #ff79c6;&quot;&gt;SIZE&lt;/span&gt; 4G; &lt;span style=&quot;color: #ff79c6;&quot;&gt;ALTER DATABASE ADD LOGFILE THREAD&lt;/span&gt; 1 &lt;span style=&quot;color: #ff79c6;&quot;&gt;SIZE&lt;/span&gt; 4G;

&lt;span style=&quot;color: #ff79c6;&quot;&gt;ALTER SYSTEM SWITCH LOGFILE&lt;/span&gt;; &lt;span style=&quot;color: #ff79c6;&quot;&gt;ALTER SYSTEM CHECKPOINT&lt;/span&gt;;

&lt;span style=&quot;color: #ff79c6;&quot;&gt;DROP&lt;/span&gt; -- Do not run until the group is inactive and safe &lt;span style=&quot;color: #ff79c6;&quot;&gt;ALTER DATABASE DROP LOGFILE GROUP&lt;/span&gt; 3;

&lt;span style=&quot;color: #ff79c6;&quot;&gt;SELECT&lt;/span&gt; group#,
thread#,
ROUND(bytes/1024/1024) &lt;span style=&quot;color: #ff79c6;&quot;&gt;AS&lt;/span&gt; size_mb,
status &lt;span style=&quot;color: #ff79c6;&quot;&gt;FROM&lt;/span&gt; v$standby_log &lt;span style=&quot;color: #ff79c6;&quot;&gt;ORDER BY&lt;/span&gt; thread#, group#;&lt;/span&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;&lt;br /&gt;&lt;/h2&gt;&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;Common Failure Scenarios&lt;/h2&gt;

&lt;ul&gt;
  &lt;li style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Frequent log switches during normal workload: redo logs may be too small, or redo generation may have increased due to application changes.&lt;/li&gt;
  &lt;li style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Archive destination fills quickly: check redo generation rate, archive backup frequency, FRA size, and retention policy.&lt;/li&gt;
  &lt;li style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Data Guard lag during batch jobs: check primary redo rate, standby redo log size, network throughput, and MRP apply speed.&lt;/li&gt;
  &lt;li style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;High &lt;code style=&quot;font-family: courier;&quot;&gt;log file sync&lt;/code&gt;: investigate commit frequency, LGWR latency, and storage performance.&lt;/li&gt;
  &lt;li style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;High &lt;code style=&quot;font-family: courier;&quot;&gt;log file switch completion&lt;/code&gt;: check checkpoint pressure, archiving speed, and redo log size.&lt;/li&gt;
&lt;/ul&gt;

&lt;div style=&quot;background: rgb(40, 42, 54); border-color: gray; border-image: initial; border-style: solid; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;&quot;&gt;
&lt;pre style=&quot;line-height: 125%; margin: 0px;&quot;&gt;&lt;span style=&quot;color: #f8f8f2; font-family: courier; font-size: medium; font-weight: normal;&quot;&gt;&lt;span style=&quot;color: #ff79c6;&quot;&gt;SELECT&lt;/span&gt; event,
       total_waits,
       ROUND(time_waited_micro/1000000, 2) &lt;span style=&quot;color: #ff79c6;&quot;&gt;AS&lt;/span&gt; time_waited_sec
&lt;span style=&quot;color: #ff79c6;&quot;&gt;FROM&lt;/span&gt; v$system_event
&lt;span style=&quot;color: #ff79c6;&quot;&gt;WHERE&lt;/span&gt; event &lt;span style=&quot;color: #ff79c6;&quot;&gt;IN&lt;/span&gt; (
       &lt;span style=&quot;color: #8be9fd;&quot;&gt;&#39;log file sync&#39;&lt;/span&gt;,
       &lt;span style=&quot;color: #8be9fd;&quot;&gt;&#39;log file parallel write&#39;&lt;/span&gt;,
       &lt;span style=&quot;color: #8be9fd;&quot;&gt;&#39;log file switch completion&#39;&lt;/span&gt;,
       &lt;span style=&quot;color: #8be9fd;&quot;&gt;&#39;log file switch (checkpoint incomplete)&#39;&lt;/span&gt;,
       &lt;span style=&quot;color: #8be9fd;&quot;&gt;&#39;log file switch (archiving needed)&#39;&lt;/span&gt;
)
&lt;span style=&quot;color: #ff79c6;&quot;&gt;ORDER BY&lt;/span&gt; time_waited_sec &lt;span style=&quot;color: #ff79c6;&quot;&gt;DESC&lt;/span&gt;;

&lt;span style=&quot;color: #ff79c6;&quot;&gt;SELECT&lt;/span&gt; dest_id,
status,
destination,
error &lt;span style=&quot;color: #ff79c6;&quot;&gt;FROM&lt;/span&gt; v$archive_dest &lt;span style=&quot;color: #ff79c6;&quot;&gt;WHERE&lt;/span&gt; status &amp;lt;&amp;gt; &lt;span style=&quot;color: #8be9fd;&quot;&gt;&#39;INACTIVE&#39;&lt;/span&gt; &lt;span style=&quot;color: #ff79c6;&quot;&gt;ORDER BY&lt;/span&gt; dest_id;

&lt;span style=&quot;color: #ff79c6;&quot;&gt;SELECT&lt;/span&gt; name,
value,
unit,
time_computed &lt;span style=&quot;color: #ff79c6;&quot;&gt;FROM&lt;/span&gt; v$dataguard_stats &lt;span style=&quot;color: #ff79c6;&quot;&gt;WHERE&lt;/span&gt; name &lt;span style=&quot;color: #ff79c6;&quot;&gt;IN&lt;/span&gt; (&lt;span style=&quot;color: #8be9fd;&quot;&gt;&#39;transport lag&#39;&lt;/span&gt;, &lt;span style=&quot;color: #8be9fd;&quot;&gt;&#39;apply lag&#39;&lt;/span&gt;, &lt;span style=&quot;color: #8be9fd;&quot;&gt;&#39;apply finish time&#39;&lt;/span&gt;);&lt;/span&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;&lt;br /&gt;&lt;/h2&gt;&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;Oracle Redo and PostgreSQL WAL: Same Pain, Different Knobs&lt;/h2&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Oracle redo and PostgreSQL WAL both protect database changes for recovery, but DBAs manage them differently. Oracle DBAs think in terms of redo log groups, members, threads, archiving, and standby redo logs. PostgreSQL DBAs deal with WAL segments, checkpoints, archiving, replication slots, and &lt;code style=&quot;font-family: courier;&quot;&gt;pg_wal&lt;/code&gt; growth.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;In Oracle, redo log size directly affects switch frequency. In PostgreSQL, WAL segment size is normally fixed at cluster initialization, so day-to-day tuning is usually around checkpoint settings, archiving, replication slots, and workload behavior.&lt;/p&gt;

&lt;div style=&quot;background: rgb(40, 42, 54); border-color: gray; border-image: initial; border-style: solid; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;&quot;&gt;
&lt;pre style=&quot;line-height: 125%; margin: 0px;&quot;&gt;&lt;span style=&quot;color: #f8f8f2; font-family: courier; font-size: medium; font-weight: normal;&quot;&gt;-- PostgreSQL WAL checks

SHOW wal_segment_size;
SHOW checkpoint_timeout;
SHOW max_wal_size;
SHOW min_wal_size;
SHOW archive_mode;
SHOW archive_command;

&lt;span style=&quot;color: #ff79c6;&quot;&gt;SELECT&lt;/span&gt; wal_records,
wal_fpi,
pg_size_pretty(wal_bytes) &lt;span style=&quot;color: #ff79c6;&quot;&gt;AS&lt;/span&gt; wal_generated &lt;span style=&quot;color: #ff79c6;&quot;&gt;FROM&lt;/span&gt; pg_stat_wal;

&lt;span style=&quot;color: #ff79c6;&quot;&gt;SELECT&lt;/span&gt; slot_name,
active,
pg_size_pretty(pg_wal_lsn_diff(pg_current_wal_lsn(), restart_lsn)) &lt;span style=&quot;color: #ff79c6;&quot;&gt;AS&lt;/span&gt; retained_wal &lt;span style=&quot;color: #ff79c6;&quot;&gt;FROM&lt;/span&gt; pg_replication_slots;&lt;/span&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
  &lt;!--Add Blogger image here: Oracle Redo vs PostgreSQL WAL comparison with two lanes and labels--&gt;
&lt;/div&gt;

&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;&lt;br /&gt;&lt;/h2&gt;&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;DBA Lessons from Production&lt;/h2&gt;

&lt;ul&gt;
  &lt;li style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;If redo logs are resized on primary, review standby redo logs too.&lt;/li&gt;
  &lt;li style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Frequent log switches are not always a storage issue. Check SQL design and commit behaviour.&lt;/li&gt;
  &lt;li style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Unused indexes on write-heavy tables can silently increase redo volume.&lt;/li&gt;
  &lt;li style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Archive log backup performance matters. Bigger redo logs create bigger archived logs.&lt;/li&gt;
  &lt;li style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;For Data Guard, monitor both transport lag and apply lag. They are not the same problem.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;&lt;br /&gt;&lt;/h2&gt;&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;Mini Case Study: Data Guard Lag After a Batch Load&lt;/h2&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;A production database started showing 40 to 50 minutes of Data Guard apply lag during a monthly batch. The primary database was still running, so the first assumption was network slowness between primary and standby.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;The actual issue was a mix of small redo logs and a batch job that deleted and reinserted large data sets. The target table also had several indexes that were no longer useful for current reporting. During the batch, one RAC thread was switching logs almost every minute.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;The fix was not one single change. Redo logs and standby redo logs were resized after checking peak redo rate. The batch logic was changed from delete/insert to a controlled merge for most rows. Two unused indexes were tested as invisible before being dropped. After that, standby lag still appeared during the peak, but it recovered in minutes instead of staying behind for almost an hour.&lt;/p&gt;

&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhLg8XrUgZ6O3St_vjaGlGTFpISipvb0y4E-4TtiYp4vGT3oIiRJlTSIDG1uezqAN-iKT_e8QGKJHU_35ITG2BUVqkMh54GaPG3vPOvPLzmE8wzy6gJCiUwAUuKqy1-RUAozJXf8Lkh0JN3aErrr971g47qu24cQrkkvXNhnIJhDi4UgHDs54zG5YQHJgE/s1672/2.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;941&quot; data-original-width=&quot;1672&quot; height=&quot;358&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhLg8XrUgZ6O3St_vjaGlGTFpISipvb0y4E-4TtiYp4vGT3oIiRJlTSIDG1uezqAN-iKT_e8QGKJHU_35ITG2BUVqkMh54GaPG3vPOvPLzmE8wzy6gJCiUwAUuKqy1-RUAozJXf8Lkh0JN3aErrr971g47qu24cQrkkvXNhnIJhDi4UgHDs54zG5YQHJgE/w637-h358/2.png&quot; width=&quot;637&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;&lt;br /&gt;&lt;/h2&gt;&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;FAQs&lt;/h2&gt;

&lt;h3 style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large;&quot;&gt;How do I know if redo logs are too small?&lt;/h3&gt;
&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Check log switch frequency using &lt;code style=&quot;font-family: courier;&quot;&gt;V$LOG_HISTORY&lt;/code&gt;. If switches are happening every minute during normal workload, review redo size, checkpoint waits, archive speed, and recent workload changes.&lt;/p&gt;

&lt;h3 style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large;&quot;&gt;Does increasing redo log size reduce redo generation?&lt;/h3&gt;
&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;No. It reduces log switch frequency. Redo generation depends on DML volume, indexes, commit pattern, SQL design, supplemental logging, and application behavior.&lt;/p&gt;

&lt;h3 style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large;&quot;&gt;Should all redo log groups be the same size?&lt;/h3&gt;
&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Yes, keeping redo log groups the same size per thread makes behavior predictable and troubleshooting easier.&lt;/p&gt;

&lt;h3 style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large;&quot;&gt;What should I check when Data Guard lag increases?&lt;/h3&gt;
&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Check redo generation rate, transport lag, apply lag, archive gaps, standby redo log size, MRP status, network throughput, and standby I/O performance.&lt;/p&gt;

&lt;h3 style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large;&quot;&gt;Is PostgreSQL WAL tuning the same as Oracle redo tuning?&lt;/h3&gt;
&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;The recovery concept is similar, but the controls are different. Oracle DBAs manage redo log groups and switch frequency. PostgreSQL DBAs usually manage WAL pressure through checkpoints, archiving, replication slots, and workload design.&lt;/p&gt;

&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;&lt;br /&gt;&lt;/h2&gt;&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;Conclusion&lt;/h2&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Redo log sizing is not a cosmetic database setting. It affects commit performance, checkpoint behaviour, archiving, recovery, and Data Guard stability. If redo logs are too small, the database may spend too much time switching and checkpointing. If they are sized without considering recovery objectives, the design may not match operational expectations.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;The best approach is simple: measure first, change later. Start with log switch frequency, then calculate redo generation rate during peak workload. Review &lt;code style=&quot;font-family: courier;&quot;&gt;V$INSTANCE_RECOVERY&lt;/code&gt;, wait events, archive destinations, and Data Guard lag. After that, look at the application side. Index count, batch logic, commit frequency, and unnecessary updates often explain more than redo log size alone.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;For Oracle DBAs, redo tuning is a mix of database configuration and workload discipline. For PostgreSQL DBAs, WAL pressure tells a similar story with different knobs. In both cases, the write path exposes the truth. Review it before the next batch window, migration, or month-end run exposes it for you.&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEig-k9kHKb3w3uGS7yQJpJxneFjCVZo-msi_ArXhc_5Owo3oD0fSt63T6clp7RO-RNEikAWIXAC14Wwnir8wzaBU-uYAFg4QvuMe5lYPPof7tX7psLQt_n_TZy_2OaNQZdlWrrL7pHdKhDzG9K15qRyC_MeiR3bOY9y60fkI7JGbRBO1uXYsSAhvWPN0f8/s1672/3.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;941&quot; data-original-width=&quot;1672&quot; height=&quot;424&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEig-k9kHKb3w3uGS7yQJpJxneFjCVZo-msi_ArXhc_5Owo3oD0fSt63T6clp7RO-RNEikAWIXAC14Wwnir8wzaBU-uYAFg4QvuMe5lYPPof7tX7psLQt_n_TZy_2OaNQZdlWrrL7pHdKhDzG9K15qRyC_MeiR3bOY9y60fkI7JGbRBO1uXYsSAhvWPN0f8/w754-h424/3.png&quot; width=&quot;754&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large;&quot;&gt;&lt;span style=&quot;color: #e06666;&quot;&gt;&lt;b&gt;Sources :&lt;/b&gt; &lt;/span&gt;&lt;a href=&quot; https://docs.oracle.com/en/database/oracle/oracle-database/26/tdppt/redo-log-size.html&quot; style=&quot;font-weight: normal;&quot; target=&quot;_blank&quot;&gt;Oracle Docs&lt;/a&gt;&lt;span style=&quot;color: #e06666; font-weight: normal;&quot;&gt;&amp;nbsp; /&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://asktom.oracle.com/ords/asktom.search?tag=redo-log-switches-200106&quot; style=&quot;font-weight: normal;&quot; target=&quot;_blank&quot;&gt;AskTom&lt;/a&gt;&lt;/p&gt;
</description><link>https://oracle-dba-help.blogspot.com/2026/09/oracle-redo-logs-sizing-without.html</link><author>noreply@blogger.com (Nikhil Kotak)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjH9F4Mp-grgbVjGoI8jxdKfA9TRMrNsKMFVl731_BcPxCBYAXmPmuKVcNoucrwuTOufgR-TE72wd8gs4nJEtLjYkf7ZM5ia6kcRgONmwx4IQgBAqulHlNoKk0k3ROwdxtGdJ2FezCYFcXbHpiHW-d0s1I6fA_1zjL1T4gOxd3dLOPTuGtikNDTT-B90Ms/s72-w613-h434-c/nikhilk.png" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1375587508974804970.post-9142708546864832186</guid><pubDate>Sat, 08 Aug 2026 12:16:00 +0000</pubDate><atom:updated>2026-08-21T12:50:11.956+08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">26ai</category><category domain="http://www.blogger.com/atom/ns#">Core DBA</category><category domain="http://www.blogger.com/atom/ns#">Tuning</category><title>Oracle 26ai AWR Enhancements for DBAs</title><description>&lt;p&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&amp;nbsp;AWR used to be simple when most databases were single-instance, single-tenant, and all important workload stayed on the primary database.&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;1992&quot; data-start=&quot;1966&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;That world is mostly gone.&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;2285&quot; data-start=&quot;1994&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Today, one CDB may host multiple PDBs. Reporting may run on Active Data Guard. Read traffic may be pushed toward True Cache. Replication may be handled through GoldenGate or XStream. When performance breaks, the first question is no longer just “what was the top wait event on the database?”&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;p&gt;&lt;/p&gt;
&lt;p data-end=&quot;2310&quot; data-start=&quot;2287&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p data-end=&quot;2310&quot; data-start=&quot;2287&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;The better question is:&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;2409&quot; data-start=&quot;2312&quot;&gt;&lt;span data-end=&quot;2409&quot; data-start=&quot;2312&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Which container, which workload, which replica, and which component actually caused the pain?&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;2618&quot; data-start=&quot;2411&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;That is where the Oracle 26ai AWR enhancements become useful. They do not magically tune the database, but they reduce one common DBA problem: missing diagnostic data from the place where the issue happened.&lt;/span&gt;&lt;/p&gt;
&lt;h2 data-end=&quot;2652&quot; data-section-id=&quot;1o5gfdd&quot; data-start=&quot;2625&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/h2&gt;&lt;h2 data-end=&quot;2652&quot; data-section-id=&quot;1o5gfdd&quot; data-start=&quot;2625&quot;&gt;&lt;span style=&quot;color: #e06666; font-family: Source Sans Pro; font-size: x-large;&quot;&gt;Why AWR Needed to Change&lt;/span&gt;&lt;/h2&gt;
&lt;p data-end=&quot;2834&quot; data-start=&quot;2654&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;In older environments, AWR was often treated as a primary database diagnostic tool. You generated the report, checked DB Time, top SQL, wait events, IO stats, and moved from there.&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;2900&quot; data-start=&quot;2836&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;That worked reasonably well when the primary handled everything.&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;3334&quot; data-start=&quot;2902&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;But in multitenant and offloaded architectures, this approach creates blind spots. A PDB can suffer from poor SQL while the CDB-level report looks acceptable. A standby can be overloaded by reporting queries while the primary AWR shows nothing unusual. Replication can lag because of apply-side SQL, disk latency, or memory pressure, but the normal AWR report may not clearly separate replication workload from application workload.&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;3534&quot; data-start=&quot;3336&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Oracle has started closing these gaps by making AWR more aligned with real deployment patterns: PDB-level diagnostics, ADG standby snapshots, True Cache visibility, and replication-focused sections.&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;3783&quot; data-start=&quot;3536&quot;&gt;&lt;/p&gt;
&lt;h2 data-end=&quot;3836&quot; data-section-id=&quot;1x4vzqy&quot; data-start=&quot;3790&quot;&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEigmzM9e_NiE_c0d6B0ZXlA7u2OmD6o1Ahrzb3aDfv0SAkhj-9Agc7GCeFRd9QZw0LXNa2XBdQpvB9myAx8ARamwq9uj8k0oOnAbe64z6H093BHa1idIU2c5JkZw3vfunr679iTvWyPLVZwIPMdMhnQrPbnSqslKFjx-qJZcznM04IkUogqUYOpvsvOADI/s1672/ChatGPT%20Image%20May%2024,%202026,%2008_35_20%20PM.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;941&quot; data-original-width=&quot;1672&quot; height=&quot;360&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEigmzM9e_NiE_c0d6B0ZXlA7u2OmD6o1Ahrzb3aDfv0SAkhj-9Agc7GCeFRd9QZw0LXNa2XBdQpvB9myAx8ARamwq9uj8k0oOnAbe64z6H093BHa1idIU2c5JkZw3vfunr679iTvWyPLVZwIPMdMhnQrPbnSqslKFjx-qJZcznM04IkUogqUYOpvsvOADI/w640-h360/ChatGPT%20Image%20May%2024,%202026,%2008_35_20%20PM.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;/h2&gt;&lt;div&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;h2 data-end=&quot;3836&quot; data-section-id=&quot;1x4vzqy&quot; data-start=&quot;3790&quot;&gt;&lt;span style=&quot;color: #e06666; font-family: Source Sans Pro; font-size: x-large;&quot;&gt;Oracle 26ai AWR Enhancements in Multitenant&lt;/span&gt;&lt;/h2&gt;
&lt;p data-end=&quot;3910&quot; data-start=&quot;3838&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;The most useful change for many DBAs is around PDB-level AWR collection.&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;4254&quot; data-start=&quot;3912&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Oracle documentation states that &lt;code data-end=&quot;3972&quot; data-start=&quot;3945&quot;&gt;AWR_PDB_AUTOFLUSH_ENABLED&lt;/code&gt; has a default value of &lt;code data-end=&quot;4002&quot; data-start=&quot;3996&quot;&gt;TRUE&lt;/code&gt;, which means automatic AWR snapshots are enabled by default for all PDBs in a CDB. Oracle also documents that automatic snapshot operations are enabled by default for a CDB and, in Oracle Database 26ai, for a PDB. &lt;span data-state=&quot;closed&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;4304&quot; data-start=&quot;4256&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;That sounds small, but operationally it matters.&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;4579&quot; data-start=&quot;4306&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Earlier, a DBA could troubleshoot a PDB performance issue only to realize that PDB-level AWR was never enabled. The incident would then move into guesswork: ASH if available, SQL monitor if still present, application timestamps, OS metrics, and whatever was left in memory.&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;4654&quot; data-start=&quot;4581&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Now the expectation is different. PDBs are first-class performance units.&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;4670&quot; data-start=&quot;4656&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Useful checks:&lt;/span&gt;&lt;/p&gt;&lt;!--HTML generated using hilite.me--&gt;&lt;div style=&quot;background: rgb(40, 42, 54); border-color: gray; border-image: initial; border-style: solid; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;&quot;&gt;&lt;pre style=&quot;line-height: 125%; margin: 0px;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff79c6;&quot;&gt;show&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; con_name&lt;/span&gt;

&lt;span style=&quot;color: #ff79c6;&quot;&gt;select&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; name, value&lt;/span&gt;
&lt;span style=&quot;color: #ff79c6;&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; v$parameter&lt;/span&gt;
&lt;span style=&quot;color: #ff79c6;&quot;&gt;where&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; name &lt;/span&gt;&lt;span style=&quot;color: #ff79c6;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #bd93f9;&quot;&gt;&#39;awr_pdb_autoflush_enabled&#39;&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt;;&lt;/span&gt;

&lt;span style=&quot;color: #ff79c6;&quot;&gt;select&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; snap_id, dbid, instance_number, begin_interval_time, end_interval_time&lt;/span&gt;
&lt;span style=&quot;color: #ff79c6;&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; dba_hist_snapshot&lt;/span&gt;
&lt;span style=&quot;color: #ff79c6;&quot;&gt;order&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #ff79c6;&quot;&gt;by&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; snap_id &lt;/span&gt;&lt;span style=&quot;color: #ff79c6;&quot;&gt;desc&lt;/span&gt;
&lt;span style=&quot;color: #ff79c6;&quot;&gt;fetch&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #ff79c6;&quot;&gt;first&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #ffb86c;&quot;&gt;10&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #ff79c6;&quot;&gt;rows&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #ff79c6;&quot;&gt;only&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt;;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;pre class=&quot;overflow-visible! px-0!&quot; data-end=&quot;4925&quot; data-start=&quot;4672&quot;&gt;&lt;div class=&quot;relative w-full mt-4 mb-1&quot;&gt;&lt;div&gt;&lt;div class=&quot;relative&quot;&gt;&lt;div class=&quot;h-full min-h-0 min-w-0&quot;&gt;&lt;div class=&quot;h-full min-h-0 min-w-0&quot;&gt;&lt;div class=&quot;border border-token-border-light border-radius-3xl corner-superellipse/1.1 rounded-3xl&quot;&gt;&lt;div class=&quot;h-full w-full border-radius-3xl bg-token-bg-elevated-secondary corner-superellipse/1.1 overflow-clip rounded-3xl lxnfua_clipPathFallback&quot;&gt;&lt;div class=&quot;pointer-events-none absolute inset-x-4 top-12 bottom-4&quot;&gt;&lt;div class=&quot;pointer-events-none sticky z-40 shrink-0 z-1!&quot;&gt;&lt;div class=&quot;sticky bg-token-border-light&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;relative&quot;&gt;&lt;div&gt;&lt;div class=&quot;relative z-0 flex max-w-full&quot;&gt;&lt;div class=&quot;q9tKkq_viewer cm-editor z-10 light:cm-light dark:cm-light flex h-full w-full flex-col items-stretch ͼd ͼr&quot; dir=&quot;ltr&quot; id=&quot;code-block-viewer&quot;&gt;&lt;div class=&quot;cm-scroller&quot;&gt;&lt;pre class=&quot;cm-content q9tKkq_readonly m-0&quot;&gt;&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;
&lt;p data-end=&quot;4999&quot; data-start=&quot;4927&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;For a specific PDB, connect into the PDB and validate snapshot behavior:&lt;/span&gt;&lt;/p&gt;
&lt;pre class=&quot;overflow-visible! px-0!&quot; data-end=&quot;5179&quot; data-start=&quot;5001&quot;&gt;&lt;div class=&quot;relative w-full mt-4 mb-1&quot;&gt;&lt;div&gt;&lt;div class=&quot;relative&quot;&gt;&lt;div class=&quot;h-full min-h-0 min-w-0&quot;&gt;&lt;div class=&quot;h-full min-h-0 min-w-0&quot;&gt;&lt;div class=&quot;border border-token-border-light border-radius-3xl corner-superellipse/1.1 rounded-3xl&quot;&gt;&lt;div class=&quot;h-full w-full border-radius-3xl bg-token-bg-elevated-secondary corner-superellipse/1.1 overflow-clip rounded-3xl lxnfua_clipPathFallback&quot;&gt;&lt;div class=&quot;pointer-events-none absolute inset-x-4 top-12 bottom-4&quot;&gt;&lt;div class=&quot;pointer-events-none sticky z-40 shrink-0 z-1!&quot;&gt;&lt;div class=&quot;sticky bg-token-border-light&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;&lt;blockquote style=&quot;border-color: currentcolor; border-image: none; border-style: none; border-width: medium; border: none; margin: 0px 0px 0px 40px; padding: 0px;&quot;&gt;&lt;pre class=&quot;overflow-visible! px-0!&quot; data-end=&quot;5179&quot; data-start=&quot;5001&quot;&gt;&lt;div class=&quot;relative w-full mt-4 mb-1&quot;&gt;&lt;div&gt;&lt;div class=&quot;relative&quot;&gt;&lt;div class=&quot;h-full min-h-0 min-w-0&quot;&gt;&lt;div class=&quot;h-full min-h-0 min-w-0&quot;&gt;&lt;div class=&quot;border border-token-border-light border-radius-3xl corner-superellipse/1.1 rounded-3xl&quot;&gt;&lt;div class=&quot;h-full w-full border-radius-3xl bg-token-bg-elevated-secondary corner-superellipse/1.1 overflow-clip rounded-3xl lxnfua_clipPathFallback&quot;&gt;&lt;div class=&quot;relative&quot;&gt;&lt;div&gt;&lt;div class=&quot;relative z-0 flex max-w-full&quot;&gt;&lt;div class=&quot;q9tKkq_viewer cm-editor z-10 light:cm-light dark:cm-light flex h-full w-full flex-col items-stretch ͼd ͼr&quot; dir=&quot;ltr&quot; id=&quot;code-block-viewer&quot;&gt;&lt;div class=&quot;cm-scroller&quot;&gt;&lt;pre class=&quot;cm-content q9tKkq_readonly m-0&quot; style=&quot;text-align: left;&quot;&gt;&lt;code&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;&lt;span class=&quot;ͼg&quot;&gt;alter&lt;/span&gt; &lt;span class=&quot;ͼg&quot;&gt;session&lt;/span&gt; &lt;span class=&quot;ͼg&quot;&gt;set&lt;/span&gt; container &lt;span class=&quot;ͼg&quot;&gt;=&lt;/span&gt; SALES_PDB;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;pre class=&quot;overflow-visible! px-0!&quot; data-end=&quot;5179&quot; data-start=&quot;5001&quot;&gt;&lt;div class=&quot;relative w-full mt-4 mb-1&quot;&gt;&lt;div class=&quot;relative&quot;&gt;&lt;div class=&quot;h-full min-h-0 min-w-0&quot;&gt;&lt;div class=&quot;h-full min-h-0 min-w-0&quot;&gt;&lt;div class=&quot;border border-token-border-light border-radius-3xl corner-superellipse/1.1 rounded-3xl&quot;&gt;&lt;div class=&quot;h-full w-full border-radius-3xl bg-token-bg-elevated-secondary corner-superellipse/1.1 overflow-clip rounded-3xl lxnfua_clipPathFallback&quot;&gt;&lt;div class=&quot;relative&quot;&gt;&lt;div class=&quot;relative z-0 flex max-w-full&quot;&gt;&lt;div class=&quot;q9tKkq_viewer cm-editor z-10 light:cm-light dark:cm-light flex h-full w-full flex-col items-stretch ͼd ͼr&quot; dir=&quot;ltr&quot; id=&quot;code-block-viewer&quot;&gt;&lt;div class=&quot;cm-scroller&quot;&gt;&lt;pre class=&quot;cm-content q9tKkq_readonly m-0&quot;&gt;&lt;code&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;&lt;!--HTML generated using hilite.me--&gt;&lt;div style=&quot;background: rgb(40, 42, 54); border-color: gray; border-image: initial; border-style: solid; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;&quot;&gt;&lt;pre style=&quot;line-height: 125%; margin: 0px;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff79c6;&quot;&gt;select&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; snap_id, begin_interval_time, end_interval_time&lt;/span&gt;
&lt;span style=&quot;color: #ff79c6;&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; dba_hist_snapshot&lt;/span&gt;
&lt;span style=&quot;color: #ff79c6;&quot;&gt;order&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #ff79c6;&quot;&gt;by&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; snap_id &lt;/span&gt;&lt;span style=&quot;color: #ff79c6;&quot;&gt;desc&lt;/span&gt;
&lt;span style=&quot;color: #ff79c6;&quot;&gt;fetch&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #ff79c6;&quot;&gt;first&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #ffb86c;&quot;&gt;10&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #ff79c6;&quot;&gt;rows&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #ff79c6;&quot;&gt;only&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt;;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;p data-end=&quot;5455&quot; data-start=&quot;5181&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p data-end=&quot;5455&quot; data-start=&quot;5181&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;The production impact is clear: when one PDB is noisy, you do not want to diagnose only from the CDB root. Consolidated environments hide problems. A batch job in one PDB can create IO pressure, CPU starvation, library cache pressure, or temp usage that hurts other tenants.&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;5671&quot; data-start=&quot;5457&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro;&quot;&gt;The trade-off is also real. More snapshots mean more diagnostic data. More diagnostic data means more SYSAUX usage. DBAs should monitor retention and space growth instead of assuming&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;font-family: Source Sans Pro;&quot;&gt;default-enabled&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;font-family: Source Sans Pro;&quot;&gt;&amp;nbsp;means&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;free.&quot;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;!--HTML generated using hilite.me--&gt;&lt;div style=&quot;background: rgb(40, 42, 54); border-color: gray; border-image: initial; border-style: solid; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;&quot;&gt;&lt;pre style=&quot;line-height: 125%; margin: 0px;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff79c6;&quot;&gt;select&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; occupant_name, space_usage_kbytes&lt;/span&gt;&lt;span style=&quot;color: #ff79c6;&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color: #ffb86c;&quot;&gt;1024&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; mb&lt;/span&gt;
&lt;span style=&quot;color: #ff79c6;&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; v$sysaux_occupants&lt;/span&gt;
&lt;span style=&quot;color: #ff79c6;&quot;&gt;where&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; occupant_name &lt;/span&gt;&lt;span style=&quot;color: #ff79c6;&quot;&gt;like&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #bd93f9;&quot;&gt;&#39;%AWR%&#39;&lt;/span&gt;
&lt;span style=&quot;color: #ff79c6;&quot;&gt;order&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #ff79c6;&quot;&gt;by&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; space_usage_kbytes &lt;/span&gt;&lt;span style=&quot;color: #ff79c6;&quot;&gt;desc&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: #ff79c6;&quot;&gt;fetch&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #ff79c6;&quot;&gt;first&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #ffb86c;&quot;&gt;10&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #ff79c6;&quot;&gt;rows&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #ff79c6;&quot;&gt;only&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt;;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;pre class=&quot;overflow-visible! px-0!&quot; data-end=&quot;5823&quot; data-start=&quot;5673&quot;&gt;&lt;div class=&quot;relative w-full mt-4 mb-1&quot;&gt;&lt;div class=&quot;relative&quot;&gt;&lt;div class=&quot;h-full min-h-0 min-w-0&quot;&gt;&lt;div class=&quot;h-full min-h-0 min-w-0&quot;&gt;&lt;div class=&quot;border border-token-border-light border-radius-3xl corner-superellipse/1.1 rounded-3xl&quot;&gt;&lt;div class=&quot;h-full w-full border-radius-3xl bg-token-bg-elevated-secondary corner-superellipse/1.1 overflow-clip rounded-3xl lxnfua_clipPathFallback&quot;&gt;&lt;div class=&quot;relative&quot;&gt;&lt;div class=&quot;relative z-0 flex max-w-full&quot;&gt;&lt;div class=&quot;q9tKkq_viewer cm-editor z-10 light:cm-light dark:cm-light flex h-full w-full flex-col items-stretch ͼd ͼr&quot; dir=&quot;ltr&quot; id=&quot;code-block-viewer&quot;&gt;&lt;div class=&quot;cm-scroller&quot;&gt;&lt;pre class=&quot;cm-content q9tKkq_readonly m-0&quot;&gt;&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;
&lt;p data-end=&quot;6044&quot; data-start=&quot;5825&quot;&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiOgqpnRrggYhDq5JT78-NlhEJcln15EIXRObGPiszUQk4scDJHaBAVsIpsbbU6aDjHttJYDduG7RsOjzdKrZ7mF6QG4N-kNrmhbfwvdteA87vnt9c5Am6m4RRUdOhiKhgRSaC7RZsoww58mrSmNl1RSuEDp43gS4CnRGd165iJyvimTuRLd6I_EDvA8Po/s1672/ChatGPT%20Image%20May%2024,%202026,%2008_36_44%20PM.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;941&quot; data-original-width=&quot;1672&quot; height=&quot;360&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiOgqpnRrggYhDq5JT78-NlhEJcln15EIXRObGPiszUQk4scDJHaBAVsIpsbbU6aDjHttJYDduG7RsOjzdKrZ7mF6QG4N-kNrmhbfwvdteA87vnt9c5Am6m4RRUdOhiKhgRSaC7RZsoww58mrSmNl1RSuEDp43gS4CnRGd165iJyvimTuRLd6I_EDvA8Po/w640-h360/ChatGPT%20Image%20May%2024,%202026,%2008_36_44%20PM.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;p data-end=&quot;6044&quot; data-start=&quot;5825&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h2 data-end=&quot;6123&quot; data-section-id=&quot;6agqz5&quot; data-start=&quot;6051&quot;&gt;&lt;span style=&quot;color: #e06666; font-family: Source Sans Pro; font-size: x-large;&quot;&gt;Active Data Guard AWR: Finally Closer to Real Standby Troubleshooting&lt;/span&gt;&lt;/h2&gt;
&lt;p data-end=&quot;6316&quot; data-start=&quot;6125&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Active Data Guard is often sold as a way to offload read workload. In reality, many standby systems slowly become reporting platforms, ETL sources, dashboard backends, and ad-hoc query zones.&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;6388&quot; data-start=&quot;6318&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro;&quot;&gt;Then someone says: &quot;The query is slow on standby but fast on primary.&quot;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;That is where DBAs need standby-side evidence.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;6870&quot; data-start=&quot;6438&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Oracle AI Database 26ai documents AWR for Active Data Guard with automatic snapshots at CDB root and all PDBs, and Oracle states it is enabled by default for Active Data Guard in 26ai. &lt;span data-state=&quot;closed&quot;&gt;&lt;/span&gt; Oracle’s observability blog also describes 26ai as delivering out-of-the-box AWR for ADG standby workloads, reducing older operational overhead around standby diagnostics. &lt;span data-state=&quot;closed&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;6978&quot; data-start=&quot;6872&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;This helps because standby performance problems are not always SQL tuning problems. Common causes include:&lt;/span&gt;&lt;/p&gt;
&lt;ul data-end=&quot;7178&quot; data-start=&quot;6980&quot;&gt;
&lt;li data-end=&quot;7025&quot; data-section-id=&quot;6wcku8&quot; data-start=&quot;6980&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;
redo apply competing with reporting queries
&lt;/span&gt;&lt;/li&gt;
&lt;li data-end=&quot;7054&quot; data-section-id=&quot;6zkban&quot; data-start=&quot;7026&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;
storage latency on standby
&lt;/span&gt;&lt;/li&gt;
&lt;li data-end=&quot;7094&quot; data-section-id=&quot;16jxrnc&quot; data-start=&quot;7055&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;
stale or different optimizer behavior
&lt;/span&gt;&lt;/li&gt;
&lt;li data-end=&quot;7119&quot; data-section-id=&quot;2kah8&quot; data-start=&quot;7095&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;
read consistency waits
&lt;/span&gt;&lt;/li&gt;
&lt;li data-end=&quot;7144&quot; data-section-id=&quot;ltdu4s&quot; data-start=&quot;7120&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;
heavy parallel queries
&lt;/span&gt;&lt;/li&gt;
&lt;li data-end=&quot;7178&quot; data-section-id=&quot;1v97ng8&quot; data-start=&quot;7145&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;
lag-sensitive application reads
&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;7202&quot; data-start=&quot;7180&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Useful standby checks:&lt;/span&gt;&lt;/p&gt;&lt;!--HTML generated using hilite.me--&gt;&lt;div style=&quot;background: rgb(40, 42, 54); border-color: gray; border-image: initial; border-style: solid; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;&quot;&gt;&lt;pre style=&quot;line-height: 125%; margin: 0px;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff79c6;&quot;&gt;select&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; database_role, open_mode&lt;/span&gt;
&lt;span style=&quot;color: #ff79c6;&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; v$database;&lt;/span&gt;

&lt;span style=&quot;color: #ff79c6;&quot;&gt;select&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; name, value, unit&lt;/span&gt;
&lt;span style=&quot;color: #ff79c6;&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; v$dataguard_stats&lt;/span&gt;
&lt;span style=&quot;color: #ff79c6;&quot;&gt;where&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; name &lt;/span&gt;&lt;span style=&quot;color: #ff79c6;&quot;&gt;in&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; (&lt;/span&gt;&lt;span style=&quot;color: #bd93f9;&quot;&gt;&#39;transport lag&#39;&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt;,&lt;/span&gt;&lt;span style=&quot;color: #bd93f9;&quot;&gt;&#39;apply lag&#39;&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt;);&lt;/span&gt;

&lt;span style=&quot;color: #ff79c6;&quot;&gt;select&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; process, status, thread&lt;/span&gt;&lt;span style=&quot;color: #ff79c6;&quot;&gt;#&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt;, sequence&lt;/span&gt;&lt;span style=&quot;color: #ff79c6;&quot;&gt;#&lt;/span&gt;
&lt;span style=&quot;color: #ff79c6;&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; v$managed_standby&lt;/span&gt;
&lt;span style=&quot;color: #ff79c6;&quot;&gt;order&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #ff79c6;&quot;&gt;by&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; process;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;pre class=&quot;overflow-visible! px-0!&quot; data-end=&quot;7442&quot; data-start=&quot;7204&quot;&gt;&lt;div class=&quot;relative w-full mt-4 mb-1&quot;&gt;&lt;div class=&quot;relative&quot;&gt;&lt;div class=&quot;h-full min-h-0 min-w-0&quot;&gt;&lt;div class=&quot;h-full min-h-0 min-w-0&quot;&gt;&lt;div class=&quot;border border-token-border-light border-radius-3xl corner-superellipse/1.1 rounded-3xl&quot;&gt;&lt;div class=&quot;h-full w-full border-radius-3xl bg-token-bg-elevated-secondary corner-superellipse/1.1 overflow-clip rounded-3xl lxnfua_clipPathFallback&quot;&gt;&lt;div class=&quot;pointer-events-none absolute inset-x-4 top-12 bottom-4&quot;&gt;&lt;div class=&quot;pointer-events-none sticky z-40 shrink-0 z-1!&quot;&gt;&lt;div class=&quot;sticky bg-token-border-light&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;relative&quot;&gt;&lt;div class=&quot;relative z-0 flex max-w-full&quot;&gt;&lt;div class=&quot;q9tKkq_viewer cm-editor z-10 light:cm-light dark:cm-light flex h-full w-full flex-col items-stretch ͼd ͼr&quot; dir=&quot;ltr&quot; id=&quot;code-block-viewer&quot;&gt;&lt;div class=&quot;cm-scroller&quot;&gt;&lt;pre class=&quot;cm-content q9tKkq_readonly m-0&quot;&gt;&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;
&lt;p data-end=&quot;7705&quot; data-start=&quot;7444&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;AWR on standby gives DBAs a cleaner way to separate “bad SQL” from “standby workload pressure.” That distinction matters. Tuning the SQL may help, but if redo apply is blocked by IO or CPU saturation, the real fix is capacity, workload isolation, or scheduling.&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;7958&quot; data-start=&quot;7707&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiIejWKzhY5YJTEabVPU0sgMKECy4AtZvB0Q68wUgm-SeJgkgm5TS35AM0UtdkXpHpBmPcorKuJ5r19MKPELdcxS8QL-luqPrQJi1jd0pmzmu2sbtNkQXwjrUSkH4BA8oVUTJLHJbcY1nv8_Jtd5E8gpQ4kjdoNPX9smWmDfiNohLt_hlYbIMPuL6SWjNI/s1672/ChatGPT%20Image%20May%2024,%202026,%2008_40_23%20PM.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;941&quot; data-original-width=&quot;1672&quot; height=&quot;360&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiIejWKzhY5YJTEabVPU0sgMKECy4AtZvB0Q68wUgm-SeJgkgm5TS35AM0UtdkXpHpBmPcorKuJ5r19MKPELdcxS8QL-luqPrQJi1jd0pmzmu2sbtNkQXwjrUSkH4BA8oVUTJLHJbcY1nv8_Jtd5E8gpQ4kjdoNPX9smWmDfiNohLt_hlYbIMPuL6SWjNI/w640-h360/ChatGPT%20Image%20May%2024,%202026,%2008_40_23%20PM.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;
&lt;h2 data-end=&quot;8030&quot; data-section-id=&quot;1qo611p&quot; data-start=&quot;7965&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/h2&gt;&lt;h2 data-end=&quot;8030&quot; data-section-id=&quot;1qo611p&quot; data-start=&quot;7965&quot;&gt;&lt;span style=&quot;color: #e06666; font-family: Source Sans Pro; font-size: x-large;&quot;&gt;True Cache Monitoring: Useful, But Do Not Treat Cache as Magic&lt;/span&gt;&lt;/h2&gt;
&lt;p data-end=&quot;8359&quot; data-start=&quot;8032&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Oracle True Cache is designed as an in-memory, consistent cache for Oracle Database workloads, helping offload read activity from the primary database. Oracle introduced True Cache with Oracle Database 23ai, and Oracle’s current True Cache guide is published under Oracle AI Database 26ai. &lt;span data-state=&quot;closed&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;8603&quot; data-start=&quot;8361&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;AWR support for True Cache is useful because cache layers are often dangerous when they become invisible. If the application says “database is slow,” the real issue may be cache miss behavior, routing, memory pressure, or fallback to primary.&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;8690&quot; data-start=&quot;8605&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;A DBA should not only ask whether True Cache is configured. The better questions are:&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;8886&quot; data-start=&quot;8692&quot;&gt;&lt;/p&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Is the cache actually serving the workload?&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;
Is the application falling back to primary too often?&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;
Is memory sized correctly?&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;
Are read-mostly SQL patterns really suitable for cache offload?&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;
&lt;p data-end=&quot;8920&quot; data-start=&quot;8888&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Useful direction for monitoring:&lt;/span&gt;&lt;/p&gt;
&lt;pre class=&quot;overflow-visible! px-0!&quot; data-end=&quot;8965&quot; data-start=&quot;8922&quot;&gt;&lt;div class=&quot;relative w-full mt-4 mb-1&quot;&gt;&lt;div&gt;&lt;div class=&quot;relative&quot;&gt;&lt;div class=&quot;h-full min-h-0 min-w-0&quot;&gt;&lt;div class=&quot;h-full min-h-0 min-w-0&quot;&gt;&lt;div class=&quot;border border-token-border-light border-radius-3xl corner-superellipse/1.1 rounded-3xl&quot;&gt;&lt;div class=&quot;h-full w-full border-radius-3xl bg-token-bg-elevated-secondary corner-superellipse/1.1 overflow-clip rounded-3xl lxnfua_clipPathFallback&quot;&gt;&lt;div class=&quot;pointer-events-none absolute inset-x-4 top-12 bottom-4&quot;&gt;&lt;div class=&quot;pointer-events-none sticky z-40 shrink-0 z-1!&quot;&gt;&lt;div class=&quot;sticky bg-token-border-light&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;&lt;blockquote style=&quot;border-color: currentcolor; border-image: none; border-style: none; border-width: medium; border: none; margin: 0px 0px 0px 40px; padding: 0px;&quot;&gt;&lt;pre class=&quot;overflow-visible! px-0!&quot; data-end=&quot;8965&quot; data-start=&quot;8922&quot;&gt;&lt;div class=&quot;relative w-full mt-4 mb-1&quot;&gt;&lt;div&gt;&lt;div class=&quot;relative&quot;&gt;&lt;div class=&quot;h-full min-h-0 min-w-0&quot;&gt;&lt;div class=&quot;h-full min-h-0 min-w-0&quot;&gt;&lt;div class=&quot;border border-token-border-light border-radius-3xl corner-superellipse/1.1 rounded-3xl&quot;&gt;&lt;div class=&quot;h-full w-full border-radius-3xl bg-token-bg-elevated-secondary corner-superellipse/1.1 overflow-clip rounded-3xl lxnfua_clipPathFallback&quot;&gt;&lt;div class=&quot;relative&quot;&gt;&lt;div&gt;&lt;div class=&quot;relative z-0 flex max-w-full&quot;&gt;&lt;div class=&quot;q9tKkq_viewer cm-editor z-10 light:cm-light dark:cm-light flex h-full w-full flex-col items-stretch ͼd ͼr&quot; dir=&quot;ltr&quot; id=&quot;code-block-viewer&quot;&gt;&lt;div class=&quot;cm-scroller&quot;&gt;&lt;pre class=&quot;cm-content q9tKkq_readonly m-0&quot; style=&quot;text-align: left;&quot;&gt;&lt;code&gt;&lt;span style=&quot;font-family: courier; font-size: large;&quot;&gt;&lt;span class=&quot;ͼg&quot;&gt;select&lt;/span&gt; &lt;span class=&quot;ͼg&quot;&gt;* &lt;/span&gt;&lt;span class=&quot;ͼg&quot;&gt;from&lt;/span&gt; v$true_cache_stat;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;pre class=&quot;overflow-visible! px-0!&quot; data-end=&quot;8965&quot; data-start=&quot;8922&quot;&gt;&lt;div class=&quot;relative w-full mt-4 mb-1&quot;&gt;&lt;div class=&quot;relative&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;
&lt;p data-end=&quot;9151&quot; data-start=&quot;8967&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;The exact columns and usefulness will depend on version and RU level, so DBAs should validate against their installed Oracle documentation and not blindly copy scripts between estates.&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;9446&quot; data-start=&quot;9153&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;The operational warning is simple: cache reduces pressure only when the workload matches the design. If the application sends mixed read-write behavior, uses session-specific logic heavily, or frequently misses cache, True Cache may add another diagnostic layer instead of reducing complexity.&lt;/span&gt;&lt;/p&gt;
&lt;br /&gt;&lt;h2 data-end=&quot;9743&quot; data-section-id=&quot;1gcee7n&quot; data-start=&quot;9673&quot;&gt;&lt;span style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;Replication Reporting: Better Visibility for GoldenGate and XStream&lt;/span&gt;&lt;/h2&gt;
&lt;p data-end=&quot;9801&quot; data-start=&quot;9745&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Replication problems are rarely explained by one metric.&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;10060&quot; data-start=&quot;9803&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;GoldenGate lag may be caused by extract, pump, network, trail file IO, replicat apply SQL, locking, missing indexes, or target-side resource pressure. Traditional database AWR may show waits, but not always in a way that clearly tells the replication story.&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;10336&quot; data-start=&quot;10062&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Oracle GoldenGate documentation for 26ai describes AWR report sections for replication, including Replication Top Wait Events, with foreground and background process wait events aggregated by event type and Oracle GoldenGate SQL module. &lt;span data-state=&quot;closed&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;10667&quot; data-start=&quot;10338&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;That is useful because replication workload should not be mixed blindly with application workload. A top SQL statement from Replicat has a different operational meaning from an application SQL_ID. One may require target index tuning. Another may require application tuning. Another may require changing batch size or parallelism.&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;10697&quot; data-start=&quot;10669&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Typical checks still matter:&lt;/span&gt;&lt;/p&gt;&lt;!--HTML generated using hilite.me--&gt;&lt;div style=&quot;background: rgb(40, 42, 54); border-color: gray; border-image: initial; border-style: solid; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;&quot;&gt;&lt;pre style=&quot;line-height: 125%; margin: 0px;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff79c6;&quot;&gt;select&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; event, total_waits, time_waited&lt;/span&gt;
&lt;span style=&quot;color: #ff79c6;&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; v$system_event&lt;/span&gt;
&lt;span style=&quot;color: #ff79c6;&quot;&gt;where&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; event &lt;/span&gt;&lt;span style=&quot;color: #ff79c6;&quot;&gt;like&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #bd93f9;&quot;&gt;&#39;%GoldenGate%&#39;&lt;/span&gt;
&lt;span style=&quot;color: #f8f8f2;&quot;&gt;   &lt;/span&gt;&lt;span style=&quot;color: #ff79c6;&quot;&gt;or&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; event &lt;/span&gt;&lt;span style=&quot;color: #ff79c6;&quot;&gt;like&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #bd93f9;&quot;&gt;&#39;%Streams%&#39;&lt;/span&gt;
&lt;span style=&quot;color: #ff79c6;&quot;&gt;order&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #ff79c6;&quot;&gt;by&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; time_waited &lt;/span&gt;&lt;span style=&quot;color: #ff79c6;&quot;&gt;desc&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt;;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;pre class=&quot;overflow-visible! px-0!&quot; data-end=&quot;10856&quot; data-start=&quot;10699&quot;&gt;&lt;div class=&quot;relative w-full mt-4 mb-1&quot;&gt;&lt;div&gt;&lt;div class=&quot;relative&quot;&gt;&lt;div class=&quot;h-full min-h-0 min-w-0&quot;&gt;&lt;div class=&quot;h-full min-h-0 min-w-0&quot;&gt;&lt;div class=&quot;border border-token-border-light border-radius-3xl corner-superellipse/1.1 rounded-3xl&quot;&gt;&lt;div class=&quot;h-full w-full border-radius-3xl bg-token-bg-elevated-secondary corner-superellipse/1.1 overflow-clip rounded-3xl lxnfua_clipPathFallback&quot;&gt;&lt;div class=&quot;pointer-events-none absolute inset-x-4 top-12 bottom-4&quot;&gt;&lt;div class=&quot;pointer-events-none sticky z-40 shrink-0 z-1!&quot;&gt;&lt;div class=&quot;sticky bg-token-border-light&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;relative&quot;&gt;&lt;div&gt;&lt;div class=&quot;relative z-0 flex max-w-full&quot;&gt;&lt;div class=&quot;q9tKkq_viewer cm-editor z-10 light:cm-light dark:cm-light flex h-full w-full flex-col items-stretch ͼd ͼr&quot; dir=&quot;ltr&quot; id=&quot;code-block-viewer&quot;&gt;&lt;div class=&quot;cm-scroller&quot;&gt;&lt;pre class=&quot;cm-content q9tKkq_readonly m-0&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large;&quot;&gt;For database-side replication sessions:&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;&lt;!--HTML generated using hilite.me--&gt;&lt;div style=&quot;background: rgb(40, 42, 54); border-color: gray; border-image: initial; border-style: solid; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;&quot;&gt;&lt;pre style=&quot;line-height: 125%; margin: 0px;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff79c6;&quot;&gt;select&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; sid, &lt;/span&gt;&lt;span style=&quot;color: #8be9fd; font-style: italic;&quot;&gt;serial&lt;/span&gt;&lt;span style=&quot;color: #ff79c6;&quot;&gt;#&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt;, program, module, event, wait_class, seconds_in_wait&lt;/span&gt;
&lt;span style=&quot;color: #ff79c6;&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; v$session&lt;/span&gt;
&lt;span style=&quot;color: #ff79c6;&quot;&gt;where&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; program &lt;/span&gt;&lt;span style=&quot;color: #ff79c6;&quot;&gt;like&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #bd93f9;&quot;&gt;&#39;%replicat%&#39;&lt;/span&gt;
&lt;span style=&quot;color: #f8f8f2;&quot;&gt;   &lt;/span&gt;&lt;span style=&quot;color: #ff79c6;&quot;&gt;or&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; program &lt;/span&gt;&lt;span style=&quot;color: #ff79c6;&quot;&gt;like&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #bd93f9;&quot;&gt;&#39;%extract%&#39;&lt;/span&gt;
&lt;span style=&quot;color: #f8f8f2;&quot;&gt;   &lt;/span&gt;&lt;span style=&quot;color: #ff79c6;&quot;&gt;or&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; module &lt;/span&gt;&lt;span style=&quot;color: #ff79c6;&quot;&gt;like&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #bd93f9;&quot;&gt;&#39;%GoldenGate%&#39;&lt;/span&gt;
&lt;span style=&quot;color: #ff79c6;&quot;&gt;order&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #ff79c6;&quot;&gt;by&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; seconds_in_wait &lt;/span&gt;&lt;span style=&quot;color: #ff79c6;&quot;&gt;desc&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt;;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;pre class=&quot;overflow-visible! px-0!&quot; data-end=&quot;11124&quot; data-start=&quot;10899&quot;&gt;&lt;div class=&quot;relative w-full mt-4 mb-1&quot;&gt;&lt;div class=&quot;relative&quot;&gt;&lt;div class=&quot;h-full min-h-0 min-w-0&quot;&gt;&lt;div class=&quot;h-full min-h-0 min-w-0&quot;&gt;&lt;div class=&quot;border border-token-border-light border-radius-3xl corner-superellipse/1.1 rounded-3xl&quot;&gt;&lt;div class=&quot;h-full w-full border-radius-3xl bg-token-bg-elevated-secondary corner-superellipse/1.1 overflow-clip rounded-3xl lxnfua_clipPathFallback&quot;&gt;&lt;div class=&quot;pointer-events-none absolute inset-x-4 top-12 bottom-4&quot;&gt;&lt;div class=&quot;pointer-events-none sticky z-40 shrink-0 z-1!&quot;&gt;&lt;div class=&quot;sticky bg-token-border-light&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;relative&quot;&gt;&lt;div class=&quot;relative z-0 flex max-w-full&quot;&gt;&lt;div class=&quot;q9tKkq_viewer cm-editor z-10 light:cm-light dark:cm-light flex h-full w-full flex-col items-stretch ͼd ͼr&quot; dir=&quot;ltr&quot; id=&quot;code-block-viewer&quot;&gt;&lt;div class=&quot;cm-scroller&quot;&gt;&lt;pre class=&quot;cm-content q9tKkq_readonly m-0&quot;&gt;&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;
&lt;p data-end=&quot;11308&quot; data-start=&quot;11126&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;AWR does not replace GoldenGate commands or Microservices UI. It complements them. DBAs still need to check trail files, checkpoints, lag, discard files, and target-side constraints.&lt;/span&gt;&lt;/p&gt;&lt;p data-end=&quot;11526&quot; data-start=&quot;11310&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h2 data-end=&quot;11575&quot; data-section-id=&quot;7co76v&quot; data-start=&quot;11533&quot;&gt;&lt;span style=&quot;color: #e06666; font-family: Source Sans Pro; font-size: x-large;&quot;&gt;New Diagnostic Views DBAs Should Notice&lt;/span&gt;&lt;/h2&gt;
&lt;p data-end=&quot;11678&quot; data-start=&quot;11577&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Oracle 26ai also adds or highlights diagnostic views that help DBAs go deeper during troubleshooting.&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;11865&quot; data-start=&quot;11680&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;code data-end=&quot;11707&quot; data-start=&quot;11680&quot;&gt;DBA_HIST_SNAPSHOT_DETAILS&lt;/code&gt; displays table details for snapshots in the Workload Repository and is available starting with Oracle AI Database 26ai. &lt;span data-state=&quot;closed&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;12049&quot; data-start=&quot;11867&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;code data-end=&quot;11882&quot; data-start=&quot;11867&quot;&gt;V$SQL_HISTORY&lt;/code&gt; displays SQL statements tracked by SQL history monitoring, but it is populated only when &lt;code data-end=&quot;11993&quot; data-start=&quot;11972&quot;&gt;SQL_HISTORY_ENABLED&lt;/code&gt; is set to &lt;code data-end=&quot;12010&quot; data-start=&quot;12004&quot;&gt;TRUE&lt;/code&gt;. &lt;span data-state=&quot;closed&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;12059&quot; data-start=&quot;12051&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Example:&lt;/span&gt;&lt;/p&gt;&lt;!--HTML generated using hilite.me--&gt;&lt;div style=&quot;background: rgb(40, 42, 54); border-color: gray; border-image: initial; border-style: solid; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;&quot;&gt;&lt;pre style=&quot;line-height: 125%; margin: 0px;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff79c6;&quot;&gt;select&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; sql_id, elapsed_time, cpu_time, rows_processed&lt;/span&gt;
&lt;span style=&quot;color: #ff79c6;&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; v$sql_history&lt;/span&gt;
&lt;span style=&quot;color: #ff79c6;&quot;&gt;order&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #ff79c6;&quot;&gt;by&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; elapsed_time &lt;/span&gt;&lt;span style=&quot;color: #ff79c6;&quot;&gt;desc&lt;/span&gt;
&lt;span style=&quot;color: #ff79c6;&quot;&gt;fetch&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #ff79c6;&quot;&gt;first&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #ffb86c;&quot;&gt;20&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #ff79c6;&quot;&gt;rows&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #ff79c6;&quot;&gt;only&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt;;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;pre class=&quot;overflow-visible! px-0!&quot; data-end=&quot;12197&quot; data-start=&quot;12061&quot;&gt;&lt;div class=&quot;relative w-full mt-4 mb-1&quot;&gt;&lt;div&gt;&lt;div class=&quot;relative&quot;&gt;&lt;div class=&quot;h-full min-h-0 min-w-0&quot;&gt;&lt;div class=&quot;h-full min-h-0 min-w-0&quot;&gt;&lt;div class=&quot;border border-token-border-light border-radius-3xl corner-superellipse/1.1 rounded-3xl&quot;&gt;&lt;div class=&quot;h-full w-full border-radius-3xl bg-token-bg-elevated-secondary corner-superellipse/1.1 overflow-clip rounded-3xl lxnfua_clipPathFallback&quot;&gt;&lt;div class=&quot;pointer-events-none absolute inset-x-4 top-12 bottom-4&quot;&gt;&lt;div class=&quot;pointer-events-none sticky z-40 shrink-0 z-1!&quot;&gt;&lt;div class=&quot;sticky bg-token-border-light&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;relative&quot;&gt;&lt;div&gt;&lt;div class=&quot;relative z-0 flex max-w-full&quot;&gt;&lt;div class=&quot;q9tKkq_viewer cm-editor z-10 light:cm-light dark:cm-light flex h-full w-full flex-col items-stretch ͼd ͼr&quot; dir=&quot;ltr&quot; id=&quot;code-block-viewer&quot;&gt;&lt;div class=&quot;cm-scroller&quot;&gt;&lt;pre class=&quot;cm-content q9tKkq_readonly m-0&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large;&quot;&gt;For optimizer environment investigations:&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;&lt;!--HTML generated using hilite.me--&gt;&lt;div style=&quot;background: rgb(40, 42, 54); border-color: gray; border-image: initial; border-style: solid; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;&quot;&gt;&lt;pre style=&quot;line-height: 125%; margin: 0px;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff79c6;&quot;&gt;select&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; name, value&lt;/span&gt;
&lt;span style=&quot;color: #ff79c6;&quot;&gt;from&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; dba_hist_optimizer_env_details&lt;/span&gt;
&lt;span style=&quot;color: #ff79c6;&quot;&gt;where&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; optimizer_env_hash_value &lt;/span&gt;&lt;span style=&quot;color: #ff79c6;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; :hash_value&lt;/span&gt;
&lt;span style=&quot;color: #ff79c6;&quot;&gt;order&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #ff79c6;&quot;&gt;by&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; name;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;pre class=&quot;overflow-visible! px-0!&quot; data-end=&quot;12367&quot; data-start=&quot;12242&quot;&gt;&lt;div class=&quot;relative w-full mt-4 mb-1&quot;&gt;&lt;div class=&quot;relative&quot;&gt;&lt;div class=&quot;h-full min-h-0 min-w-0&quot;&gt;&lt;div class=&quot;h-full min-h-0 min-w-0&quot;&gt;&lt;div class=&quot;border border-token-border-light border-radius-3xl corner-superellipse/1.1 rounded-3xl&quot;&gt;&lt;div class=&quot;h-full w-full border-radius-3xl bg-token-bg-elevated-secondary corner-superellipse/1.1 overflow-clip rounded-3xl lxnfua_clipPathFallback&quot;&gt;&lt;div class=&quot;pointer-events-none absolute inset-x-4 top-12 bottom-4&quot;&gt;&lt;div class=&quot;pointer-events-none sticky z-40 shrink-0 z-1!&quot;&gt;&lt;div class=&quot;sticky bg-token-border-light&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;relative&quot;&gt;&lt;div class=&quot;relative z-0 flex max-w-full&quot;&gt;&lt;div class=&quot;q9tKkq_viewer cm-editor z-10 light:cm-light dark:cm-light flex h-full w-full flex-col items-stretch ͼd ͼr&quot; dir=&quot;ltr&quot; id=&quot;code-block-viewer&quot;&gt;&lt;div class=&quot;cm-scroller&quot;&gt;&lt;pre class=&quot;cm-content q9tKkq_readonly m-0&quot;&gt;&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;
&lt;p data-end=&quot;12583&quot; data-start=&quot;12369&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;These views are not a replacement for ASH, SQL Monitor, trace files, or execution plan history. But they give DBAs more breadcrumbs, especially when the problem has already passed and nobody captured live evidence.&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;12720&quot; data-start=&quot;12585&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;The limitation is retention and configuration. If SQL history is not enabled, or AWR retention is too short, you still lose visibility.&lt;/span&gt;&lt;/p&gt;

&lt;h2 data-end=&quot;12965&quot; data-section-id=&quot;hrs9az&quot; data-start=&quot;12934&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/h2&gt;&lt;h2 data-end=&quot;12965&quot; data-section-id=&quot;hrs9az&quot; data-start=&quot;12934&quot;&gt;&lt;span style=&quot;color: #e06666; font-family: Source Sans Pro; font-size: x-large;&quot;&gt;Production Failure Scenarios&lt;/span&gt;&lt;/h2&gt;
&lt;h3 data-end=&quot;13009&quot; data-section-id=&quot;oefry&quot; data-start=&quot;12967&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Scenario 1: Slow Report on ADG Standby&lt;/span&gt;&lt;/h3&gt;
&lt;p data-end=&quot;13133&quot; data-start=&quot;13011&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;A reporting query runs in 3 minutes on primary but takes 25 minutes on standby. The application team blames the optimizer.&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;13315&quot; data-start=&quot;13135&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;AWR on standby shows high IO waits and redo apply pressure during the same window. Data Guard stats show apply lag increasing. The SQL is not perfect, but it is not the only issue.&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;13469&quot; data-start=&quot;13317&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Fix may involve moving the report window, limiting parallelism, tuning standby storage, or separating heavy reporting from redo apply-sensitive periods.&lt;/span&gt;&lt;/p&gt;&lt;p data-end=&quot;13469&quot; data-start=&quot;13317&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-end=&quot;13517&quot; data-section-id=&quot;o7b5os&quot; data-start=&quot;13471&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Scenario 2: One PDB Creates CDB-Wide Noise&lt;/span&gt;&lt;/h3&gt;
&lt;p data-end=&quot;13675&quot; data-start=&quot;13519&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;CPU spikes at CDB level, but the business impact is reported only by one application. PDB-level AWR shows a batch SQL consuming most DB time inside one PDB.&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;13787&quot; data-start=&quot;13677&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Without PDB snapshots, the DBA may chase system-wide symptoms. With PDB AWR, the noisy tenant becomes visible.&lt;/span&gt;&lt;/p&gt;&lt;p data-end=&quot;13787&quot; data-start=&quot;13677&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-end=&quot;13842&quot; data-section-id=&quot;ho2xhw&quot; data-start=&quot;13789&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Scenario 3: GoldenGate Lag Misread as Network Lag&lt;/span&gt;&lt;/h3&gt;
&lt;p data-end=&quot;13985&quot; data-start=&quot;13844&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Replication lag increases. Network team finds no issue. AWR replication section shows Replicat-related wait events and top SQL on the target.&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;14049&quot; data-start=&quot;13987&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Root cause: missing index on target table after schema change.&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;14141&quot; data-start=&quot;14051&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Fix: create the required index, validate Replicat apply rate, and add schema drift checks.&lt;/span&gt;&lt;/p&gt;&lt;p data-end=&quot;14141&quot; data-start=&quot;14051&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-end=&quot;14198&quot; data-section-id=&quot;9kifdq&quot; data-start=&quot;14143&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Scenario 4: True Cache Does Not Reduce Primary Load&lt;/span&gt;&lt;/h3&gt;
&lt;p data-end=&quot;14291&quot; data-start=&quot;14200&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;A new True Cache deployment is expected to reduce primary reads. Primary load remains high.&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;14499&quot; data-start=&quot;14293&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Cache monitoring shows many reads still going to primary due to routing and workload pattern mismatch. The fix is not “increase cache memory” blindly. The connection routing and SQL eligibility need review.&lt;/span&gt;&lt;/p&gt;

&lt;h2 data-end=&quot;14563&quot; data-section-id=&quot;1tpf387&quot; data-start=&quot;14506&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/h2&gt;&lt;h2 data-end=&quot;14563&quot; data-section-id=&quot;1tpf387&quot; data-start=&quot;14506&quot;&gt;&lt;span style=&quot;color: #e06666; font-family: Source Sans Pro; font-size: x-large;&quot;&gt;Mini Case Study: The Standby Was Not Slow, It Was Busy&lt;/span&gt;&lt;/h2&gt;
&lt;p data-end=&quot;14741&quot; data-start=&quot;14565&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;A finance reporting workload was moved to an ADG standby to protect the primary OLTP system. For the first few weeks, everything looked fine. Then month-end processing started.&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;14752&quot; data-start=&quot;14743&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Symptoms:&lt;/span&gt;&lt;/p&gt;
&lt;ul data-end=&quot;14862&quot; data-start=&quot;14754&quot;&gt;
&lt;li data-end=&quot;14774&quot; data-section-id=&quot;7ej9zf&quot; data-start=&quot;14754&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;
reports timing out
&lt;/span&gt;&lt;/li&gt;
&lt;li data-end=&quot;14797&quot; data-section-id=&quot;do6x3r&quot; data-start=&quot;14775&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;
apply lag increasing
&lt;/span&gt;&lt;/li&gt;
&lt;li data-end=&quot;14822&quot; data-section-id=&quot;4m3ei6&quot; data-start=&quot;14798&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;
storage latency spikes
&lt;/span&gt;&lt;/li&gt;
&lt;li data-end=&quot;14862&quot; data-section-id=&quot;10thysq&quot; data-start=&quot;14823&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;
no major issue visible in primary AWR
&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;15085&quot; data-start=&quot;14864&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Initial assumption was bad SQL. But standby-side diagnostics showed that reporting queries and redo apply were fighting for the same IO bandwidth. A few parallel reports were consuming resources at exactly the wrong time.&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;15091&quot; data-start=&quot;15087&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Fix:&lt;/span&gt;&lt;/p&gt;
&lt;ul data-end=&quot;15306&quot; data-start=&quot;15093&quot;&gt;
&lt;li data-end=&quot;15139&quot; data-section-id=&quot;2o6064&quot; data-start=&quot;15093&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;
reduced parallel degree for selected reports
&lt;/span&gt;&lt;/li&gt;
&lt;li data-end=&quot;15199&quot; data-section-id=&quot;1qifthn&quot; data-start=&quot;15140&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;
moved month-end report schedule away from peak redo apply
&lt;/span&gt;&lt;/li&gt;
&lt;li data-end=&quot;15255&quot; data-section-id=&quot;mj4kwb&quot; data-start=&quot;15200&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;
added standby-specific AWR review after batch windows
&lt;/span&gt;&lt;/li&gt;
&lt;li data-end=&quot;15306&quot; data-section-id=&quot;1rbscmo&quot; data-start=&quot;15256&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;
monitored apply lag and top standby SQL together
&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;15315&quot; data-start=&quot;15308&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Lesson:&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;15468&quot; data-start=&quot;15317&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;A standby is not free capacity. It is a recovery system doing read workload. Treat it casually and it will remind you during the worst possible window.&lt;/span&gt;&lt;/p&gt;&lt;p data-end=&quot;15468&quot; data-start=&quot;15317&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h2 data-end=&quot;15490&quot; data-section-id=&quot;17zrkaf&quot; data-start=&quot;15475&quot;&gt;&lt;span style=&quot;color: #e06666; font-family: Source Sans Pro; font-size: x-large;&quot;&gt;DBA Insights&lt;/span&gt;&lt;/h2&gt;
&lt;p data-end=&quot;15599&quot; data-start=&quot;15492&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;The biggest mistake DBAs make with AWR is treating it as a report generator instead of a diagnostic system.&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;15751&quot; data-start=&quot;15601&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;AWR is only useful when snapshots exist at the right level, retention covers the incident window, and the DBA knows which workload they are analyzing.&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;15823&quot; data-start=&quot;15753&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;For Oracle 26ai AWR enhancements, I would watch these areas carefully:&lt;/span&gt;&lt;/p&gt;
&lt;ul data-end=&quot;16179&quot; data-start=&quot;15825&quot;&gt;
&lt;li data-end=&quot;15880&quot; data-section-id=&quot;wepg5n&quot; data-start=&quot;15825&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;
SYSAUX growth after enabling more PDB-level snapshots
&lt;/span&gt;&lt;/li&gt;
&lt;li data-end=&quot;15936&quot; data-section-id=&quot;t69uw5&quot; data-start=&quot;15881&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;
snapshot interval and retention standards across CDBs
&lt;/span&gt;&lt;/li&gt;
&lt;li data-end=&quot;16000&quot; data-section-id=&quot;12p6x0s&quot; data-start=&quot;15937&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;
ADG standby AWR availability before moving reporting workload
&lt;/span&gt;&lt;/li&gt;
&lt;li data-end=&quot;16049&quot; data-section-id=&quot;z7iuch&quot; data-start=&quot;16001&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;
Replicat SQL visibility during replication lag
&lt;/span&gt;&lt;/li&gt;
&lt;li data-end=&quot;16115&quot; data-section-id=&quot;1exabq6&quot; data-start=&quot;16050&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;
True Cache hit behavior before claiming primary offload success
&lt;/span&gt;&lt;/li&gt;
&lt;li data-end=&quot;16179&quot; data-section-id=&quot;31idzh&quot; data-start=&quot;16116&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;
monitoring dashboards that still show only CDB-level averages
&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;16327&quot; data-start=&quot;16181&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Averages are dangerous in multitenant systems. AWR becoming more PDB-aware is a good thing, but DBAs must update their troubleshooting habits too.&lt;/span&gt;&lt;/p&gt;&lt;p data-end=&quot;16327&quot; data-start=&quot;16181&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;h2 data-end=&quot;17322&quot; data-section-id=&quot;1xvwnkw&quot; data-start=&quot;17315&quot;&gt;&lt;span style=&quot;color: #e06666; font-family: Source Sans Pro; font-size: x-large;&quot;&gt;FAQs&lt;/span&gt;&lt;/h2&gt;&lt;h3 data-end=&quot;17379&quot; data-section-id=&quot;1al85ky&quot; data-start=&quot;17324&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Is PDB-level AWR enabled by default in Oracle 26ai?&lt;/span&gt;&lt;/h3&gt;&lt;p data-end=&quot;17560&quot; data-start=&quot;17381&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Yes. Oracle documentation states that &lt;code data-end=&quot;17446&quot; data-start=&quot;17419&quot;&gt;AWR_PDB_AUTOFLUSH_ENABLED&lt;/code&gt; defaults to &lt;code data-end=&quot;17465&quot; data-start=&quot;17459&quot;&gt;TRUE&lt;/code&gt;, enabling automatic AWR snapshots for PDBs by default. &lt;span data-state=&quot;closed&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;h3 data-end=&quot;17609&quot; data-section-id=&quot;1hzlt3o&quot; data-start=&quot;17562&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Can I use AWR on Active Data Guard standby?&lt;/span&gt;&lt;/h3&gt;&lt;p data-end=&quot;17815&quot; data-start=&quot;17611&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Yes. Oracle 26ai supports automatic AWR snapshots for Active Data Guard at CDB root and PDB levels, and Oracle documents this as enabled by default for ADG in 26ai. &lt;span data-state=&quot;closed&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;h3 data-end=&quot;17860&quot; data-section-id=&quot;1nl107w&quot; data-start=&quot;17817&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Does AWR replace GoldenGate monitoring?&lt;/span&gt;&lt;/h3&gt;&lt;p data-end=&quot;18066&quot; data-start=&quot;17862&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;No. AWR helps correlate database waits, SQL, and resource usage for replication workload. GoldenGate lag, trail files, checkpoints, discard files, and process health still need GoldenGate-side monitoring.&lt;/span&gt;&lt;/p&gt;&lt;h3 data-end=&quot;18129&quot; data-section-id=&quot;1dgsij1&quot; data-start=&quot;18068&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Should I increase AWR retention after these enhancements?&lt;/span&gt;&lt;/h3&gt;&lt;p data-end=&quot;18294&quot; data-start=&quot;18131&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Usually yes, but carefully. More PDB and standby snapshots can increase repository usage. Monitor SYSAUX and define retention based on your incident review window.&lt;/span&gt;&lt;/p&gt;&lt;h3 data-end=&quot;18346&quot; data-section-id=&quot;1mdcq1m&quot; data-start=&quot;18296&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Is True Cache always useful for read workload?&lt;/span&gt;&lt;/h3&gt;&lt;p data-end=&quot;18536&quot; data-start=&quot;18348&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;No. It helps when workload routing and SQL patterns fit the cache model. If the application frequently falls back to primary or uses unsuitable access patterns, the benefit may be limited.&lt;/span&gt;&lt;/p&gt;&lt;h2 data-end=&quot;18556&quot; data-section-id=&quot;8dtpi&quot; data-start=&quot;18543&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/h2&gt;&lt;h2 data-end=&quot;18556&quot; data-section-id=&quot;8dtpi&quot; data-start=&quot;18543&quot;&gt;&lt;span style=&quot;color: #e06666; font-family: Source Sans Pro; font-size: x-large;&quot;&gt;Conclusion&lt;/span&gt;&lt;/h2&gt;&lt;p data-end=&quot;18724&quot; data-start=&quot;18558&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Oracle 26ai AWR enhancements make AWR more useful for how Oracle databases are actually deployed today: multitenant, replicated, standby-readable, and cache-assisted.&lt;/span&gt;&lt;/p&gt;&lt;p data-end=&quot;18792&quot; data-start=&quot;18726&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;For DBAs, the value is not just automation. The value is evidence.&lt;/span&gt;&lt;/p&gt;&lt;p data-end=&quot;19081&quot; data-start=&quot;18794&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;PDB-level snapshots help avoid CDB-level guesswork. ADG AWR helps troubleshoot where reporting queries really run. True Cache monitoring gives visibility into read offload behavior. Replication sections make GoldenGate and XStream workload easier to separate from normal application SQL.&lt;/span&gt;&lt;/p&gt;&lt;p data-end=&quot;19275&quot; data-start=&quot;19083&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;This is a strong improvement in Oracle’s diagnostic stack. But it still needs DBA discipline: validate snapshots, watch SYSAUX, review retention, and make sure monitoring follows the workload.&lt;/span&gt;&lt;/p&gt;&lt;p data-end=&quot;16327&quot; data-start=&quot;16181&quot;&gt;
















&lt;/p&gt;&lt;p data-end=&quot;19344&quot; data-start=&quot;19277&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;AWR is getting smarter. DBAs still need to ask the right questions.&lt;/span&gt;&lt;/p&gt;&lt;p data-end=&quot;19344&quot; data-start=&quot;19277&quot;&gt;&lt;br /&gt;&lt;/p&gt;</description><link>https://oracle-dba-help.blogspot.com/2026/08/oracle-26ai-awr-enhancements-for-dbas.html</link><author>noreply@blogger.com (Nikhil Kotak)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEigmzM9e_NiE_c0d6B0ZXlA7u2OmD6o1Ahrzb3aDfv0SAkhj-9Agc7GCeFRd9QZw0LXNa2XBdQpvB9myAx8ARamwq9uj8k0oOnAbe64z6H093BHa1idIU2c5JkZw3vfunr679iTvWyPLVZwIPMdMhnQrPbnSqslKFjx-qJZcznM04IkUogqUYOpvsvOADI/s72-w640-h360-c/ChatGPT%20Image%20May%2024,%202026,%2008_35_20%20PM.png" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1375587508974804970.post-422596091296947684</guid><pubDate>Sat, 25 Jul 2026 11:24:00 +0000</pubDate><atom:updated>2026-09-21T20:11:07.694+08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">PostgreSQL</category><title>pg_switch_wal() in PostgreSQL: Small Command, Big Recovery Impact</title><description>&lt;p&gt;
&lt;/p&gt;&lt;h2 data-end=&quot;245&quot; data-section-id=&quot;13ax1s5&quot; data-start=&quot;230&quot;&gt;&lt;/h2&gt;&lt;p&gt;&lt;/p&gt;&lt;h1 data-end=&quot;228&quot; data-section-id=&quot;gm93i2&quot; data-start=&quot;159&quot;&gt;&lt;/h1&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;A PostgreSQL database can look completely healthy until the day you try to restore it.&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Backups are available. WAL archiving is enabled. The archive directory has files. Monitoring shows green. Then, during PITR, PostgreSQL throws something like:&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;&lt;span&gt;&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;/span&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;code&gt;&lt;span style=&quot;color: #e06666; font-family: courier; font-size: large; font-weight: normal;&quot;&gt;could not locate required checkpoint record&lt;br /&gt;&lt;/span&gt;&lt;/code&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;or recovery stops before the target time because the WAL needed for that moment was never archived.&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;This is where many DBAs learn an uncomfortable lesson: the WAL segment that contains the changes you need may still be sitting inside &lt;code data-end=&quot;796&quot; data-start=&quot;787&quot;&gt;pg_wal/&lt;/code&gt; as the active segment. It has not filled up yet, so the archiver has not copied it.&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-weight: normal;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-weight: normal;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;On a busy system, WAL segments rotate quickly. On a quiet database, the same 16 MB segment may remain open for hours or even days.&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;&lt;span style=&quot;font-family: courier; font-size: large;&quot;&gt;&lt;code data-end=&quot;1031&quot; data-start=&quot;1014&quot;&gt;&lt;br /&gt;&lt;/code&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;&lt;span style=&quot;font-family: courier; font-size: large;&quot;&gt;&lt;code data-end=&quot;1031&quot; data-start=&quot;1014&quot;&gt;pg_switch_wal()&lt;/code&gt; &lt;/span&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;is the function that forces PostgreSQL to close the current WAL segment and move to the next one.&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;It sounds simple. In recovery work, backup validation, and archive troubleshooting, it is extremely useful.&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;

&lt;pre class=&quot;overflow-visible! px-0!&quot; data-end=&quot;550&quot; data-start=&quot;495&quot;&gt;&lt;div class=&quot;relative w-full mt-4 mb-1&quot;&gt;&lt;div&gt;&lt;div class=&quot;relative&quot;&gt;&lt;div class=&quot;h-full min-h-0 min-w-0&quot;&gt;&lt;div class=&quot;h-full min-h-0 min-w-0&quot;&gt;&lt;div class=&quot;border border-token-border-light border-radius-3xl corner-superellipse/1.1 rounded-3xl&quot;&gt;&lt;div class=&quot;h-full w-full border-radius-3xl bg-token-bg-elevated-secondary corner-superellipse/1.1 overflow-clip rounded-3xl lxnfua_clipPathFallback&quot;&gt;&lt;div class=&quot;pointer-events-none absolute end-1.5 top-1 z-2 md:end-2 md:top-1&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;&lt;h1 data-end=&quot;228&quot; data-section-id=&quot;gm93i2&quot; data-start=&quot;159&quot;&gt;&lt;pre class=&quot;overflow-visible! px-0!&quot; data-end=&quot;550&quot; data-start=&quot;495&quot;&gt;&lt;div class=&quot;relative w-full mt-4 mb-1&quot;&gt;&lt;div&gt;&lt;div class=&quot;relative&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;



&lt;p data-end=&quot;1238&quot; data-start=&quot;1131&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;/h1&gt;&lt;h2 data-end=&quot;1284&quot; data-section-id=&quot;cgswuv&quot; data-start=&quot;1245&quot;&gt;&lt;span role=&quot;text&quot;&gt;&lt;span style=&quot;color: #e06666; font-family: Source Sans Pro; font-size: x-large;&quot;&gt;What &lt;code data-end=&quot;1270&quot; data-start=&quot;1253&quot;&gt;pg_switch_wal()&lt;/code&gt; Actually Does&lt;/span&gt;&lt;/span&gt;&lt;/h2&gt;&lt;h1 data-end=&quot;228&quot; data-section-id=&quot;gm93i2&quot; data-start=&quot;159&quot; style=&quot;text-align: left;&quot;&gt;
&lt;/h1&gt;&lt;h3&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;PostgreSQL writes every change to the Write-Ahead Log before the actual data file change is considered safe. WAL is split into segment files, normally 16 MB each, stored under &lt;code data-end=&quot;1471&quot; data-start=&quot;1462&quot;&gt;pg_wal/&lt;/code&gt;.&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;&lt;h3&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;A typical WAL file looks like this:&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;code style=&quot;font-weight: normal;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;000000010000000000000019&lt;br /&gt;&lt;/span&gt;&lt;/code&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;&lt;h3&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro;&quot;&gt;That filename contains:&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-weight: normal;&quot;&gt;Timeline ID &lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-weight: normal;&quot;&gt;Log ID &amp;amp; &lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-weight: normal;&quot;&gt;Segment number&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Normally, PostgreSQL closes a WAL segment only when it becomes full.&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;&lt;h3&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&amp;nbsp;When you execute:&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;&lt;blockquote style=&quot;border-color: currentcolor; border-image: none; border-style: none; border-width: medium; border: none; margin: 0px 0px 0px 40px; padding: 0px;&quot;&gt;&lt;h1 data-end=&quot;228&quot; data-section-id=&quot;gm93i2&quot; data-start=&quot;159&quot; style=&quot;text-align: left;&quot;&gt;&lt;/h1&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;&lt;code style=&quot;font-weight: normal;&quot;&gt;&lt;span style=&quot;font-family: courier; font-size: large;&quot;&gt;&lt;span class=&quot;ͼg&quot;&gt;SELECT&lt;/span&gt; pg_switch_wal();&lt;/span&gt;&lt;/code&gt;&lt;/h3&gt;&lt;/blockquote&gt;&lt;h1 data-end=&quot;228&quot; data-section-id=&quot;gm93i2&quot; data-start=&quot;159&quot; style=&quot;text-align: left;&quot;&gt;&lt;/h1&gt;&lt;h3&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;&lt;h3&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;PostgreSQL forces the active WAL segment to finish early and starts writing into a new segment.&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Operationally, this means:&lt;/span&gt;&lt;/span&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;&lt;code&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large; font-weight: normal;&quot;&gt;Current WAL segment is closed&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large; font-weight: normal;&quot;&gt;Remaining space is padded&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large; font-weight: normal;&quot;&gt;Next WAL segment becomes active&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large; font-weight: normal;&quot;&gt;Closed segment becomes ready for archiving&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large; font-weight: normal;&quot;&gt;Function returns the LSN where the switch happened&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/h3&gt;&lt;pre class=&quot;overflow-visible! px-0!&quot; data-end=&quot;2063&quot; data-start=&quot;1870&quot;&gt;&lt;div class=&quot;relative w-full mt-4 mb-1&quot;&gt;&lt;div class=&quot;relative&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;
&lt;p data-end=&quot;2101&quot; data-start=&quot;2065&quot;&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;The return value may look like this:&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;0/2B7A9C0&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;2319&quot; data-start=&quot;2307&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large; font-weight: normal;&quot;&gt;That is the LSN where the WAL switch happened.&lt;br /&gt;&lt;br /&gt;0 = upper 32 bits of the byte position  &lt;br /&gt;2B7A9C0 = lower 32 bits in hexadecimal&lt;br /&gt;&lt;br /&gt;Converting: 0x2B7A9C0 = 45,590,976 bytes, approximately 43.5 MB into the WAL stream.&lt;/span&gt;&lt;/p&gt;&lt;pre class=&quot;overflow-visible! px-0!&quot; data-end=&quot;2361&quot; data-start=&quot;2321&quot;&gt;&lt;div class=&quot;relative w-full mt-4 mb-1&quot;&gt;&lt;div&gt;&lt;div class=&quot;relative&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;
&lt;p data-end=&quot;2498&quot; data-start=&quot;2363&quot;&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;With a 16 MB WAL segment size, this position falls inside the second WAL segment of that timeline range. To identify the WAL file name:&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre class=&quot;overflow-visible! px-0!&quot; data-end=&quot;2547&quot; data-start=&quot;2500&quot;&gt;&lt;div class=&quot;relative w-full mt-4 mb-1&quot;&gt;&lt;div&gt;&lt;div class=&quot;relative&quot;&gt;&lt;div class=&quot;h-full min-h-0 min-w-0&quot;&gt;&lt;div class=&quot;h-full min-h-0 min-w-0&quot;&gt;&lt;div class=&quot;border border-token-border-light border-radius-3xl corner-superellipse/1.1 rounded-3xl&quot;&gt;&lt;div class=&quot;h-full w-full border-radius-3xl bg-token-bg-elevated-secondary corner-superellipse/1.1 overflow-clip rounded-3xl lxnfua_clipPathFallback&quot;&gt;&lt;div class=&quot;pointer-events-none absolute inset-x-4 top-12 bottom-4&quot;&gt;&lt;div class=&quot;pointer-events-none sticky z-40 shrink-0 z-1!&quot;&gt;&lt;div class=&quot;sticky bg-token-border-light&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;&lt;blockquote style=&quot;border-color: currentcolor; border-image: none; border-style: none; border-width: medium; border: none; margin: 0px 0px 0px 40px; padding: 0px; text-align: left;&quot;&gt;&lt;h1 data-end=&quot;228&quot; data-section-id=&quot;gm93i2&quot; data-start=&quot;159&quot;&gt;&lt;pre class=&quot;overflow-visible! px-0!&quot; data-end=&quot;2547&quot; data-start=&quot;2500&quot;&gt;&lt;div class=&quot;relative w-full mt-4 mb-1&quot;&gt;&lt;div&gt;&lt;div class=&quot;relative&quot;&gt;&lt;div class=&quot;h-full min-h-0 min-w-0&quot;&gt;&lt;div class=&quot;h-full min-h-0 min-w-0&quot;&gt;&lt;div class=&quot;border border-token-border-light border-radius-3xl corner-superellipse/1.1 rounded-3xl&quot;&gt;&lt;div class=&quot;h-full w-full border-radius-3xl bg-token-bg-elevated-secondary corner-superellipse/1.1 overflow-clip rounded-3xl lxnfua_clipPathFallback&quot;&gt;&lt;div class=&quot;relative&quot;&gt;&lt;div&gt;&lt;div class=&quot;relative z-0 flex max-w-full&quot;&gt;&lt;div class=&quot;q9tKkq_viewer cm-editor z-10 light:cm-light dark:cm-light flex h-full w-full flex-col items-stretch ͼd ͼr&quot; id=&quot;code-block-viewer&quot;&gt;&lt;div class=&quot;cm-scroller&quot;&gt;&lt;pre class=&quot;cm-content q9tKkq_readonly m-0&quot; style=&quot;text-align: left;&quot;&gt;&lt;code&gt;&lt;span style=&quot;font-family: courier; font-size: large;&quot;&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;&lt;span class=&quot;ͼg&quot;&gt;SELECT&lt;/span&gt; pg_walfile_name(&lt;span class=&quot;ͼk&quot;&gt;&#39;0/&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-weight: normal; white-space: normal;&quot;&gt;2B7A9C0&lt;/span&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;&lt;span class=&quot;ͼk&quot;&gt;&#39;&lt;/span&gt;);&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/h1&gt;&lt;/blockquote&gt;&lt;h1 data-end=&quot;228&quot; data-section-id=&quot;gm93i2&quot; data-start=&quot;159&quot; style=&quot;text-align: left;&quot;&gt;&lt;pre class=&quot;overflow-visible! px-0!&quot; data-end=&quot;2547&quot; data-start=&quot;2500&quot;&gt;&lt;div class=&quot;relative w-full mt-4 mb-1&quot;&gt;&lt;div class=&quot;relative&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;
&lt;p data-end=&quot;2600&quot; data-start=&quot;2549&quot;&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;That tells you which WAL segment contains that LSN.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;2817&quot; data-start=&quot;2602&quot;&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Small detail, but useful during recovery: the returned LSN is the switch location. The file containing that LSN is the segment that was active at the time of the switch and should now become available for archiving.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/h1&gt;&lt;h3 data-end=&quot;2833&quot; data-section-id=&quot;qnlk14&quot; data-start=&quot;2819&quot;&gt;&lt;/h3&gt;&lt;h1 data-end=&quot;228&quot; data-section-id=&quot;gm93i2&quot; data-start=&quot;159&quot;&gt;
&lt;/h1&gt;&lt;h2 data-end=&quot;3182&quot; data-section-id=&quot;l16dut&quot; data-start=&quot;3140&quot;&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEirFqnHPtGhxg_y7-tfmeWUg-hSx7FGWujQ-Cb5TX6iPs6awZxddTecL8nRUmC0iI20xG2WdSogYb4Vv8JYCvATktDfH2euJ8mWEJQDwHZp-GQazV_pRakxLCnASCIeqxT9ZxMkZABJjY6ekPfFPjILcy0gdn45lKYNynv9ZWd3cvc_tkVwE4B4yV5J4LA/s1672/ChatGPT%20Image%20May%2024,%202026,%2007_27_00%20PM.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;941&quot; data-original-width=&quot;1672&quot; height=&quot;360&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEirFqnHPtGhxg_y7-tfmeWUg-hSx7FGWujQ-Cb5TX6iPs6awZxddTecL8nRUmC0iI20xG2WdSogYb4Vv8JYCvATktDfH2euJ8mWEJQDwHZp-GQazV_pRakxLCnASCIeqxT9ZxMkZABJjY6ekPfFPjILcy0gdn45lKYNynv9ZWd3cvc_tkVwE4B4yV5J4LA/w640-h360/ChatGPT%20Image%20May%2024,%202026,%2007_27_00%20PM.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h2&gt;&lt;h2 data-end=&quot;3182&quot; data-section-id=&quot;l16dut&quot; data-start=&quot;3140&quot;&gt;&lt;span style=&quot;color: #e06666; font-family: Source Sans Pro; font-size: x-large;&quot;&gt;Why DBAs Use It Before Recovery Testing&lt;/span&gt;&lt;/h2&gt;&lt;h1 data-end=&quot;228&quot; data-section-id=&quot;gm93i2&quot; data-start=&quot;159&quot;&gt;
&lt;/h1&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;The most practical use of &lt;code data-end=&quot;3227&quot; data-start=&quot;3210&quot;&gt;pg_switch_wal()&lt;/code&gt; is not academic. It is recovery safety.&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Imagine this situation:&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;code style=&quot;font-weight: normal;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;10:00 - Base backup completed&lt;br /&gt;&lt;/span&gt;&lt;/code&gt;&lt;code style=&quot;font-weight: normal;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;10:15 - Application made important changes&lt;br /&gt;&lt;/span&gt;&lt;/code&gt;&lt;code style=&quot;font-weight: normal;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;10:20 - You want PITR to 10:15&lt;br /&gt;&lt;/span&gt;&lt;/code&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;But the database is quiet. The WAL segment containing the 10:15 changes is still open. It has not reached 16 MB. Since it is not complete, the archiver has not copied it yet.&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Now your archive location looks fine, but recovery does not have the WAL required to reach 10:15.&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Before running PITR tests or relying on a precise recovery target, force a WAL switch:&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;code style=&quot;font-weight: normal;&quot;&gt;&lt;span style=&quot;font-family: courier; font-size: large;&quot;&gt;&lt;span class=&quot;ͼg&quot;&gt;SELECT&lt;/span&gt; pg_switch_wal();&lt;br /&gt;&lt;/span&gt;&lt;/code&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Then check whether the segment arrived in the archive destination:&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;

&lt;pre class=&quot;overflow-visible! px-0!&quot; data-end=&quot;3409&quot; data-start=&quot;3294&quot;&gt;&lt;div class=&quot;relative w-full mt-4 mb-1&quot;&gt;&lt;div&gt;&lt;div class=&quot;relative&quot;&gt;&lt;div class=&quot;h-full min-h-0 min-w-0&quot;&gt;&lt;div class=&quot;h-full min-h-0 min-w-0&quot;&gt;&lt;div class=&quot;border border-token-border-light border-radius-3xl corner-superellipse/1.1 rounded-3xl&quot;&gt;&lt;div class=&quot;h-full w-full border-radius-3xl bg-token-bg-elevated-secondary corner-superellipse/1.1 overflow-clip rounded-3xl lxnfua_clipPathFallback&quot;&gt;&lt;div class=&quot;pointer-events-none absolute end-1.5 top-1 z-2 md:end-2 md:top-1&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;&lt;h1 data-end=&quot;228&quot; data-section-id=&quot;gm93i2&quot; data-start=&quot;159&quot;&gt;&lt;pre class=&quot;overflow-visible! px-0!&quot; data-end=&quot;3409&quot; data-start=&quot;3294&quot;&gt;&lt;div class=&quot;relative w-full mt-4 mb-1&quot;&gt;&lt;div&gt;&lt;div class=&quot;relative&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;



&lt;pre class=&quot;overflow-visible! px-0!&quot; data-end=&quot;3808&quot; data-start=&quot;3774&quot;&gt;&lt;div class=&quot;relative w-full mt-4 mb-1&quot;&gt;&lt;div class=&quot;relative&quot;&gt;&lt;div class=&quot;h-full min-h-0 min-w-0&quot;&gt;&lt;div class=&quot;h-full min-h-0 min-w-0&quot;&gt;&lt;div class=&quot;border border-token-border-light border-radius-3xl corner-superellipse/1.1 rounded-3xl&quot;&gt;&lt;div class=&quot;h-full w-full border-radius-3xl bg-token-bg-elevated-secondary corner-superellipse/1.1 overflow-clip rounded-3xl lxnfua_clipPathFallback&quot;&gt;&lt;div class=&quot;pointer-events-none absolute inset-x-4 top-12 bottom-4&quot;&gt;&lt;div class=&quot;pointer-events-none sticky z-40 shrink-0 z-1!&quot;&gt;&lt;div class=&quot;sticky bg-token-border-light&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;
&lt;!--HTML generated using hilite.me--&gt;&lt;div style=&quot;background: rgb(40, 42, 54); border-color: gray; border-image: initial; border-style: solid; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;&quot;&gt;&lt;pre style=&quot;line-height: 125%; margin: 0px;&quot;&gt;&lt;span style=&quot;font-size: medium; font-weight: normal;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff79c6;&quot;&gt;SELECT&lt;/span&gt;
&lt;span style=&quot;color: #f8f8f2;&quot;&gt;    archived_count,&lt;/span&gt;
&lt;span style=&quot;color: #f8f8f2;&quot;&gt;    last_archived_wal,&lt;/span&gt;
&lt;span style=&quot;color: #f8f8f2;&quot;&gt;    last_archived_time,&lt;/span&gt;
&lt;span style=&quot;color: #f8f8f2;&quot;&gt;    failed_count,&lt;/span&gt;
&lt;span style=&quot;color: #f8f8f2;&quot;&gt;    last_failed_wal,&lt;/span&gt;
&lt;span style=&quot;color: #f8f8f2;&quot;&gt;    last_failed_time&lt;/span&gt;
&lt;span style=&quot;color: #ff79c6;&quot;&gt;FROM&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; pg_stat_archiver;&lt;/span&gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;pre class=&quot;overflow-visible! px-0!&quot; data-end=&quot;4045&quot; data-start=&quot;3878&quot;&gt;&lt;div class=&quot;relative w-full mt-4 mb-1&quot;&gt;&lt;div&gt;&lt;div class=&quot;relative&quot;&gt;&lt;div class=&quot;h-full min-h-0 min-w-0&quot;&gt;&lt;div class=&quot;h-full min-h-0 min-w-0&quot;&gt;&lt;div class=&quot;border border-token-border-light border-radius-3xl corner-superellipse/1.1 rounded-3xl&quot;&gt;&lt;div class=&quot;h-full w-full border-radius-3xl bg-token-bg-elevated-secondary corner-superellipse/1.1 overflow-clip rounded-3xl lxnfua_clipPathFallback&quot;&gt;&lt;div class=&quot;pointer-events-none absolute inset-x-4 top-12 bottom-4&quot;&gt;&lt;div class=&quot;pointer-events-none sticky z-40 shrink-0 z-1!&quot;&gt;&lt;div class=&quot;sticky bg-token-border-light&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;relative&quot;&gt;&lt;div&gt;&lt;div class=&quot;relative z-0 flex max-w-full&quot;&gt;&lt;div class=&quot;q9tKkq_viewer cm-editor z-10 light:cm-light dark:cm-light flex h-full w-full flex-col items-stretch ͼd ͼr&quot; dir=&quot;ltr&quot; id=&quot;code-block-viewer&quot;&gt;&lt;div class=&quot;cm-scroller&quot;&gt;&lt;pre class=&quot;cm-content q9tKkq_readonly m-0&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-weight: normal;&quot;&gt;If &lt;/span&gt;&lt;code data-end=&quot;4069&quot; data-start=&quot;4050&quot; style=&quot;font-weight: normal;&quot;&gt;last_archived_wal&lt;/code&gt;&lt;span style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-weight: normal;&quot;&gt; does not move, do not trust your recovery setup yet.&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/h1&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;A lot of backup checks only validate that a base backup exists. That is not enough. PostgreSQL recovery needs both the base backup and the required WAL chain.&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Missing one WAL file can make an otherwise good backup useless.&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;


&lt;h3 data-end=&quot;4363&quot; data-section-id=&quot;qnlk14&quot; data-start=&quot;4349&quot;&gt;&lt;/h3&gt;&lt;h1 data-end=&quot;228&quot; data-section-id=&quot;gm93i2&quot; data-start=&quot;159&quot;&gt;
&lt;/h1&gt;&lt;h2 data-end=&quot;4685&quot; data-section-id=&quot;wshy5i&quot; data-start=&quot;4646&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #e06666; font-family: Source Sans Pro; font-size: x-large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h2&gt;&lt;h2 data-end=&quot;4685&quot; data-section-id=&quot;wshy5i&quot; data-start=&quot;4646&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #e06666; font-family: Source Sans Pro; font-size: x-large;&quot;&gt;Using It to Validate Archive Command&lt;/span&gt;&lt;/span&gt;&lt;/h2&gt;&lt;h1 data-end=&quot;228&quot; data-section-id=&quot;gm93i2&quot; data-start=&quot;159&quot;&gt;
&lt;/h1&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;code data-end=&quot;4704&quot; data-start=&quot;4687&quot;&gt;pg_switch_wal()&lt;/code&gt; is also one of the fastest ways to test whether archiving is actually working.&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;First check archive settings:&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;code style=&quot;font-weight: normal;&quot;&gt;&lt;span style=&quot;font-family: courier; font-size: large;&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;SHOW archive_mode;&lt;br /&gt;&lt;/span&gt;&lt;/code&gt;&lt;code style=&quot;font-weight: normal;&quot;&gt;&lt;span style=&quot;font-family: courier; font-size: large;&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;SHOW archive_command;&lt;br /&gt;&lt;/span&gt;&lt;/code&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Then force a WAL switch:&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;code style=&quot;font-weight: normal;&quot;&gt;&lt;span style=&quot;font-family: courier; font-size: large;&quot;&gt;&lt;span class=&quot;ͼg&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;SELECT&lt;/span&gt; pg_switch_wal();&lt;br /&gt;&lt;/span&gt;&lt;/code&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Now check archiver status:&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;

&lt;pre class=&quot;overflow-visible! px-0!&quot; data-end=&quot;4867&quot; data-start=&quot;4816&quot;&gt;&lt;div class=&quot;relative w-full mt-4 mb-1&quot;&gt;&lt;div&gt;&lt;div class=&quot;relative&quot;&gt;&lt;div class=&quot;h-full min-h-0 min-w-0&quot;&gt;&lt;div class=&quot;h-full min-h-0 min-w-0&quot;&gt;&lt;div class=&quot;border border-token-border-light border-radius-3xl corner-superellipse/1.1 rounded-3xl&quot;&gt;&lt;div class=&quot;h-full w-full border-radius-3xl bg-token-bg-elevated-secondary corner-superellipse/1.1 overflow-clip rounded-3xl lxnfua_clipPathFallback&quot;&gt;&lt;div class=&quot;pointer-events-none absolute inset-x-4 top-12 bottom-4&quot;&gt;&lt;div class=&quot;pointer-events-none sticky z-40 shrink-0 z-1!&quot;&gt;&lt;div class=&quot;sticky bg-token-border-light&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;&lt;h1 data-end=&quot;228&quot; data-section-id=&quot;gm93i2&quot; data-start=&quot;159&quot;&gt;&lt;pre class=&quot;overflow-visible! px-0!&quot; data-end=&quot;4867&quot; data-start=&quot;4816&quot;&gt;&lt;div class=&quot;relative w-full mt-4 mb-1&quot;&gt;&lt;div class=&quot;relative&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;

&lt;pre class=&quot;overflow-visible! px-0!&quot; data-end=&quot;4929&quot; data-start=&quot;4895&quot;&gt;&lt;div class=&quot;relative w-full mt-4 mb-1&quot;&gt;&lt;div&gt;&lt;div class=&quot;relative&quot;&gt;&lt;div class=&quot;h-full min-h-0 min-w-0&quot;&gt;&lt;div class=&quot;h-full min-h-0 min-w-0&quot;&gt;&lt;div class=&quot;border border-token-border-light border-radius-3xl corner-superellipse/1.1 rounded-3xl&quot;&gt;&lt;div class=&quot;h-full w-full border-radius-3xl bg-token-bg-elevated-secondary corner-superellipse/1.1 overflow-clip rounded-3xl lxnfua_clipPathFallback&quot;&gt;&lt;div class=&quot;pointer-events-none absolute inset-x-4 top-12 bottom-4&quot;&gt;&lt;div class=&quot;pointer-events-none sticky z-40 shrink-0 z-1!&quot;&gt;&lt;div class=&quot;sticky bg-token-border-light&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/h1&gt;&lt;h1 data-end=&quot;228&quot; data-section-id=&quot;gm93i2&quot; data-start=&quot;159&quot;&gt;&lt;pre class=&quot;overflow-visible! px-0!&quot; data-end=&quot;4929&quot; data-start=&quot;4895&quot;&gt;&lt;div class=&quot;relative w-full mt-4 mb-1&quot;&gt;&lt;div class=&quot;relative&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;
&lt;!--HTML generated using hilite.me--&gt;&lt;div style=&quot;background: rgb(40, 42, 54); border-color: gray; border-image: initial; border-style: solid; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;&quot;&gt;&lt;pre style=&quot;line-height: 125%; margin: 0px;&quot;&gt;&lt;span style=&quot;font-size: small; font-weight: normal;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff79c6;&quot;&gt;SELECT&lt;/span&gt;
&lt;span style=&quot;color: #f8f8f2;&quot;&gt;    archived_count,&lt;/span&gt;
&lt;span style=&quot;color: #f8f8f2;&quot;&gt;    last_archived_wal,&lt;/span&gt;
&lt;span style=&quot;color: #f8f8f2;&quot;&gt;    last_archived_time,&lt;/span&gt;
&lt;span style=&quot;color: #f8f8f2;&quot;&gt;    failed_count,&lt;/span&gt;
&lt;span style=&quot;color: #f8f8f2;&quot;&gt;    last_failed_wal,&lt;/span&gt;
&lt;span style=&quot;color: #f8f8f2;&quot;&gt;    last_failed_time&lt;/span&gt;
&lt;span style=&quot;color: #ff79c6;&quot;&gt;FROM&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; pg_stat_archiver;&lt;/span&gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;pre class=&quot;overflow-visible! px-0!&quot; data-end=&quot;5126&quot; data-start=&quot;4959&quot;&gt;&lt;div class=&quot;relative w-full mt-4 mb-1&quot;&gt;&lt;div class=&quot;relative&quot;&gt;&lt;div class=&quot;h-full min-h-0 min-w-0&quot;&gt;&lt;div class=&quot;h-full min-h-0 min-w-0&quot;&gt;&lt;div class=&quot;border border-token-border-light border-radius-3xl corner-superellipse/1.1 rounded-3xl&quot;&gt;&lt;div class=&quot;h-full w-full border-radius-3xl bg-token-bg-elevated-secondary corner-superellipse/1.1 overflow-clip rounded-3xl lxnfua_clipPathFallback&quot;&gt;&lt;div class=&quot;pointer-events-none absolute inset-x-4 top-12 bottom-4&quot;&gt;&lt;div class=&quot;pointer-events-none sticky z-40 shrink-0 z-1!&quot;&gt;&lt;div class=&quot;sticky bg-token-border-light&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;relative&quot;&gt;&lt;div class=&quot;relative z-0 flex max-w-full&quot;&gt;&lt;div class=&quot;q9tKkq_viewer cm-editor z-10 light:cm-light dark:cm-light flex h-full w-full flex-col items-stretch ͼd ͼr&quot; dir=&quot;ltr&quot; id=&quot;code-block-viewer&quot;&gt;&lt;div class=&quot;cm-scroller&quot;&gt;&lt;pre class=&quot;cm-content q9tKkq_readonly m-0&quot;&gt;&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;
&lt;p data-end=&quot;5174&quot; data-start=&quot;5128&quot;&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;On the OS side, check the archive destination:&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre class=&quot;overflow-visible! px-0!&quot; data-end=&quot;5216&quot; data-start=&quot;5176&quot;&gt;&lt;div class=&quot;relative w-full mt-4 mb-1&quot;&gt;&lt;div&gt;&lt;div class=&quot;relative&quot;&gt;&lt;div class=&quot;h-full min-h-0 min-w-0&quot;&gt;&lt;div class=&quot;h-full min-h-0 min-w-0&quot;&gt;&lt;div class=&quot;border border-token-border-light border-radius-3xl corner-superellipse/1.1 rounded-3xl&quot;&gt;&lt;div class=&quot;h-full w-full border-radius-3xl bg-token-bg-elevated-secondary corner-superellipse/1.1 overflow-clip rounded-3xl lxnfua_clipPathFallback&quot;&gt;&lt;div class=&quot;pointer-events-none absolute inset-x-4 top-12 bottom-4&quot;&gt;&lt;div class=&quot;pointer-events-none sticky z-40 shrink-0 z-1!&quot;&gt;&lt;div class=&quot;sticky bg-token-border-light&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/h1&gt;&lt;blockquote style=&quot;border-color: currentcolor; border-image: none; border-style: none; border-width: medium; border: none; margin: 0px 0px 0px 40px; padding: 0px;&quot;&gt;&lt;h1 data-end=&quot;228&quot; data-section-id=&quot;gm93i2&quot; data-start=&quot;159&quot;&gt;&lt;pre class=&quot;overflow-visible! px-0!&quot; data-end=&quot;5216&quot; data-start=&quot;5176&quot;&gt;&lt;div class=&quot;relative w-full mt-4 mb-1&quot;&gt;&lt;div&gt;&lt;div class=&quot;relative&quot;&gt;&lt;div class=&quot;h-full min-h-0 min-w-0&quot;&gt;&lt;div class=&quot;h-full min-h-0 min-w-0&quot;&gt;&lt;div class=&quot;border border-token-border-light border-radius-3xl corner-superellipse/1.1 rounded-3xl&quot;&gt;&lt;div class=&quot;h-full w-full border-radius-3xl bg-token-bg-elevated-secondary corner-superellipse/1.1 overflow-clip rounded-3xl lxnfua_clipPathFallback&quot;&gt;&lt;div class=&quot;relative&quot;&gt;&lt;div&gt;&lt;div class=&quot;relative z-0 flex max-w-full&quot;&gt;&lt;div class=&quot;q9tKkq_viewer cm-editor z-10 light:cm-light dark:cm-light flex h-full w-full flex-col items-stretch ͼd ͼr&quot; dir=&quot;ltr&quot; id=&quot;code-block-viewer&quot;&gt;&lt;div class=&quot;cm-scroller&quot;&gt;&lt;pre class=&quot;cm-content q9tKkq_readonly m-0&quot; style=&quot;text-align: left;&quot;&gt;&lt;code style=&quot;font-weight: normal;&quot;&gt;&lt;span style=&quot;font-family: courier; font-size: large;&quot;&gt;&lt;span class=&quot;ͼl&quot;&gt;ls&lt;/span&gt; &lt;span class=&quot;ͼn&quot;&gt;-ltr&lt;/span&gt; /app/postgres/arch/&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/h1&gt;&lt;/blockquote&gt;&lt;h1 data-end=&quot;228&quot; data-section-id=&quot;gm93i2&quot; data-start=&quot;159&quot;&gt;&lt;pre class=&quot;overflow-visible! px-0!&quot; data-end=&quot;5216&quot; data-start=&quot;5176&quot;&gt;&lt;div class=&quot;relative w-full mt-4 mb-1&quot;&gt;&lt;div class=&quot;relative&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;
&lt;p data-end=&quot;5290&quot; data-start=&quot;5218&quot;&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;If the archive command is correct, a new WAL file should appear shortly.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/h1&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;If not, check PostgreSQL logs. Most archive failures are boring but painful:&lt;/span&gt;&lt;/span&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;&lt;code style=&quot;font-weight: normal;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Permission denied&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;&lt;li&gt;&lt;code style=&quot;font-weight: normal;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Destination full&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;&lt;li&gt;&lt;code style=&quot;font-weight: normal;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Wrong path&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;&lt;li&gt;&lt;code style=&quot;font-weight: normal;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;NFS stale mount&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;&lt;li&gt;&lt;code style=&quot;font-weight: normal;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;archive_command returns non-zero exit code&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;&lt;li&gt;&lt;code style=&quot;font-weight: normal;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;File already exists&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;A bad archive command can sit unnoticed for a long time if nobody monitors &lt;code data-end=&quot;5597&quot; data-start=&quot;5583&quot;&gt;failed_count&lt;/code&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;This is a common DBA blind spot. People monitor database availability, replication lag, and CPU. But archiver failures are often discovered only during restore.&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;That is too late.&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;pre class=&quot;overflow-visible! px-0!&quot; data-end=&quot;5506&quot; data-start=&quot;5370&quot;&gt;&lt;div class=&quot;relative w-full mt-4 mb-1&quot;&gt;&lt;div class=&quot;relative&quot;&gt;&lt;div class=&quot;h-full min-h-0 min-w-0&quot;&gt;&lt;div class=&quot;h-full min-h-0 min-w-0&quot;&gt;&lt;div class=&quot;border border-token-border-light border-radius-3xl corner-superellipse/1.1 rounded-3xl&quot;&gt;&lt;div class=&quot;h-full w-full border-radius-3xl bg-token-bg-elevated-secondary corner-superellipse/1.1 overflow-clip rounded-3xl lxnfua_clipPathFallback&quot;&gt;&lt;div class=&quot;pointer-events-none absolute end-1.5 top-1 z-2 md:end-2 md:top-1&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;



&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh875NHXefOrp61FraJz_yPtkNIQ50wFaOkI7mnjwAfwnMFpa1e1eWEAotgj3orfIj76tT3DdXWHj7UbNVPdrUUfORadmsJv5D_e-0livyNi6XI1SvcovH_lgFCGG8L28Os-skQxzrPSRweWmrmXz9Seq09yT2Uaf-QaH95SAnij3dsqhggsYpDWlguesI/s1448/ChatGPT%20Image%20May%2024,%202026,%2007_50_57%20PM.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1086&quot; data-original-width=&quot;1448&quot; height=&quot;480&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh875NHXefOrp61FraJz_yPtkNIQ50wFaOkI7mnjwAfwnMFpa1e1eWEAotgj3orfIj76tT3DdXWHj7UbNVPdrUUfORadmsJv5D_e-0livyNi6XI1SvcovH_lgFCGG8L28Os-skQxzrPSRweWmrmXz9Seq09yT2Uaf-QaH95SAnij3dsqhggsYpDWlguesI/w640-h480/ChatGPT%20Image%20May%2024,%202026,%2007_50_57%20PM.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;h3 data-end=&quot;5795&quot; data-section-id=&quot;qnlk14&quot; data-start=&quot;5781&quot;&gt;&lt;br /&gt;&lt;/h3&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;h1 data-end=&quot;228&quot; data-section-id=&quot;gm93i2&quot; data-start=&quot;159&quot;&gt;&lt;pre class=&quot;overflow-visible! px-0!&quot; data-end=&quot;6084&quot; data-start=&quot;6018&quot;&gt;&lt;div class=&quot;relative w-full mt-4 mb-1&quot;&gt;&lt;div&gt;&lt;div class=&quot;relative&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;
&lt;/h1&gt;&lt;h2 data-end=&quot;6133&quot; data-section-id=&quot;1bsfgyl&quot; data-start=&quot;6091&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #e06666; font-family: Source Sans Pro; font-size: x-large;&quot;&gt;The No-Op Behavior That Confuses People&lt;/span&gt;&lt;/span&gt;&lt;/h2&gt;&lt;h1 data-end=&quot;228&quot; data-section-id=&quot;gm93i2&quot; data-start=&quot;159&quot;&gt;
&lt;/h1&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro;&quot;&gt;There is one nuance DBAs should remember.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;code data-end=&quot;6195&quot; data-start=&quot;6178&quot; style=&quot;font-weight: normal;&quot;&gt;pg_switch_wal()&lt;/code&gt;&lt;span style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-weight: normal;&quot;&gt; may do nothing if no WAL has been generated since the last switch.&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;So if you run this twice:&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;code style=&quot;font-weight: normal;&quot;&gt;&lt;span style=&quot;font-family: courier; font-size: large;&quot;&gt;&lt;span class=&quot;ͼg&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;SELECT&lt;/span&gt; pg_switch_wal();&lt;br /&gt;&lt;/span&gt;&lt;/code&gt;&lt;code style=&quot;font-weight: normal;&quot;&gt;&lt;span style=&quot;font-family: courier; font-size: large;&quot;&gt;&lt;span class=&quot;ͼg&quot;&gt;&lt;span&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;/span&gt;SELECT&lt;/span&gt; pg_switch_wal();&lt;br /&gt;&lt;/span&gt;&lt;/code&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro;&quot;&gt;the second call may return the same or nearly same LSN. That does not mean PostgreSQL is broken. It means there was nothing new to switch.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-weight: normal;&quot;&gt;To force WAL activity, generate some WAL first.&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;For example:&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;

&lt;pre class=&quot;overflow-visible! px-0!&quot; data-end=&quot;6349&quot; data-start=&quot;6291&quot;&gt;&lt;div class=&quot;relative w-full mt-4 mb-1&quot;&gt;&lt;div&gt;&lt;div class=&quot;relative&quot;&gt;&lt;div class=&quot;h-full min-h-0 min-w-0&quot;&gt;&lt;div class=&quot;h-full min-h-0 min-w-0&quot;&gt;&lt;div class=&quot;border border-token-border-light border-radius-3xl corner-superellipse/1.1 rounded-3xl&quot;&gt;&lt;div class=&quot;h-full w-full border-radius-3xl bg-token-bg-elevated-secondary corner-superellipse/1.1 overflow-clip rounded-3xl lxnfua_clipPathFallback&quot;&gt;&lt;div class=&quot;pointer-events-none absolute inset-x-4 top-12 bottom-4&quot;&gt;&lt;div class=&quot;pointer-events-none sticky z-40 shrink-0 z-1!&quot;&gt;&lt;div class=&quot;sticky bg-token-border-light&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;&lt;h1 data-end=&quot;228&quot; data-section-id=&quot;gm93i2&quot; data-start=&quot;159&quot;&gt;&lt;pre class=&quot;overflow-visible! px-0!&quot; data-end=&quot;6349&quot; data-start=&quot;6291&quot;&gt;&lt;div class=&quot;relative w-full mt-4 mb-1&quot;&gt;&lt;div class=&quot;relative&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;

&lt;!--HTML generated using hilite.me--&gt;&lt;div style=&quot;background: rgb(40, 42, 54); border-color: gray; border-image: initial; border-style: solid; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;&quot;&gt;&lt;pre style=&quot;line-height: 125%; margin: 0px;&quot;&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;&lt;span style=&quot;font-size: medium;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff79c6;&quot;&gt;CREATE&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #ff79c6;&quot;&gt;TABLE&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; wal_test_tmp(id &lt;/span&gt;&lt;span style=&quot;color: #8be9fd; font-style: italic;&quot;&gt;int&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt;);&lt;/span&gt;
&lt;span style=&quot;color: #ff79c6;&quot;&gt;DROP&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #ff79c6;&quot;&gt;TABLE&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; wal_test_tmp;&lt;/span&gt;

&lt;span style=&quot;color: #ff79c6;&quot;&gt;SELECT&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; pg_switch_wal();&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;pre class=&quot;overflow-visible! px-0!&quot; data-end=&quot;6649&quot; data-start=&quot;6554&quot;&gt;&lt;div class=&quot;relative w-full mt-4 mb-1&quot;&gt;&lt;div&gt;&lt;div class=&quot;relative&quot;&gt;&lt;div class=&quot;h-full min-h-0 min-w-0&quot;&gt;&lt;div class=&quot;h-full min-h-0 min-w-0&quot;&gt;&lt;div class=&quot;border border-token-border-light border-radius-3xl corner-superellipse/1.1 rounded-3xl&quot;&gt;&lt;div class=&quot;h-full w-full border-radius-3xl bg-token-bg-elevated-secondary corner-superellipse/1.1 overflow-clip rounded-3xl lxnfua_clipPathFallback&quot;&gt;&lt;div class=&quot;pointer-events-none absolute inset-x-4 top-12 bottom-4&quot;&gt;&lt;div class=&quot;pointer-events-none sticky z-40 shrink-0 z-1!&quot;&gt;&lt;div class=&quot;sticky bg-token-border-light&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;relative&quot;&gt;&lt;div&gt;&lt;div class=&quot;relative z-0 flex max-w-full&quot;&gt;&lt;div class=&quot;q9tKkq_viewer cm-editor z-10 light:cm-light dark:cm-light flex h-full w-full flex-col items-stretch ͼd ͼr&quot; dir=&quot;ltr&quot; id=&quot;code-block-viewer&quot;&gt;&lt;div class=&quot;cm-scroller&quot;&gt;&lt;pre class=&quot;cm-content q9tKkq_readonly m-0&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Or, depending on the test:&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;
&lt;pre class=&quot;overflow-visible! px-0!&quot; data-end=&quot;6725&quot; data-start=&quot;6679&quot;&gt;&lt;div class=&quot;relative w-full mt-4 mb-1&quot;&gt;&lt;div&gt;&lt;div class=&quot;relative&quot;&gt;&lt;div class=&quot;h-full min-h-0 min-w-0&quot;&gt;&lt;div class=&quot;h-full min-h-0 min-w-0&quot;&gt;&lt;div class=&quot;border border-token-border-light border-radius-3xl corner-superellipse/1.1 rounded-3xl&quot;&gt;&lt;div class=&quot;h-full w-full border-radius-3xl bg-token-bg-elevated-secondary corner-superellipse/1.1 overflow-clip rounded-3xl lxnfua_clipPathFallback&quot;&gt;&lt;div class=&quot;pointer-events-none absolute inset-x-4 top-12 bottom-4&quot;&gt;&lt;div class=&quot;pointer-events-none sticky z-40 shrink-0 z-1!&quot;&gt;&lt;div class=&quot;sticky bg-token-border-light&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/h1&gt;&lt;blockquote style=&quot;border-color: currentcolor; border-image: initial; border-style: none; border-width: medium; margin: 0px 0px 0px 40px; padding: 0px; text-align: left;&quot;&gt;&lt;h1 data-end=&quot;228&quot; data-section-id=&quot;gm93i2&quot; data-start=&quot;159&quot;&gt;&lt;pre class=&quot;overflow-visible! px-0!&quot; data-end=&quot;6725&quot; data-start=&quot;6679&quot;&gt;&lt;div class=&quot;relative w-full mt-4 mb-1&quot;&gt;&lt;div&gt;&lt;div class=&quot;relative&quot;&gt;&lt;div class=&quot;h-full min-h-0 min-w-0&quot;&gt;&lt;div class=&quot;h-full min-h-0 min-w-0&quot;&gt;&lt;div class=&quot;border border-token-border-light border-radius-3xl corner-superellipse/1.1 rounded-3xl&quot;&gt;&lt;div class=&quot;h-full w-full border-radius-3xl bg-token-bg-elevated-secondary corner-superellipse/1.1 overflow-clip rounded-3xl lxnfua_clipPathFallback&quot;&gt;&lt;div class=&quot;relative&quot;&gt;&lt;div&gt;&lt;div class=&quot;relative z-0 flex max-w-full&quot;&gt;&lt;div class=&quot;q9tKkq_viewer cm-editor z-10 light:cm-light dark:cm-light flex h-full w-full flex-col items-stretch ͼd ͼr&quot; id=&quot;code-block-viewer&quot;&gt;&lt;div class=&quot;cm-scroller&quot;&gt;&lt;pre class=&quot;cm-content q9tKkq_readonly m-0&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;code style=&quot;font-weight: normal;&quot;&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;CHECKPOINT; &lt;/span&gt;&lt;/code&gt;&lt;span class=&quot;ͼg&quot; style=&quot;font-family: courier; font-weight: normal;&quot;&gt;SELECT&lt;/span&gt;&lt;span style=&quot;font-family: courier; font-weight: normal;&quot;&gt; pg_switch_wal();&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/h1&gt;&lt;/blockquote&gt;&lt;h1 data-end=&quot;228&quot; data-section-id=&quot;gm93i2&quot; data-start=&quot;159&quot;&gt;&lt;pre class=&quot;overflow-visible! px-0!&quot; data-end=&quot;6725&quot; data-start=&quot;6679&quot;&gt;&lt;div class=&quot;relative w-full mt-4 mb-1&quot;&gt;&lt;div class=&quot;relative&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;
&lt;p data-end=&quot;7018&quot; data-start=&quot;6727&quot;&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Be careful with unnecessary forced switches on busy systems. Every switch creates a new WAL segment for archiving. If someone puts this into a frequent cron job without thinking, archive volume can increase, storage can fill faster, and backup systems may process more WAL files than needed.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;7056&quot; data-start=&quot;7020&quot;&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Useful command. Bad habit if abused.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p data-end=&quot;7056&quot; data-start=&quot;7020&quot;&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;&lt;/span&gt;&lt;/p&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiyLG03ts9OJINbByo3vDUZbYeYfkBnTBm_z2jjk4rYDqGe1tDufJ69Iel0UXapbZZ6QyJ1zptiEOs-zvC5J-q0S8xcJwFfY9Za0PF5KmdstFJS6kt8Q_MOzphYY1qdW6FAUv9Jud5esW7elulRoWAvujR4tJYR3IrlSuzoAuJ5NmFgrTLlgFvdyWwsRLs/s1448/ChatGPT%20Image%20May%2024,%202026,%2007_41_56%20PM.png&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;1086&quot; data-original-width=&quot;1448&quot; height=&quot;480&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiyLG03ts9OJINbByo3vDUZbYeYfkBnTBm_z2jjk4rYDqGe1tDufJ69Iel0UXapbZZ6QyJ1zptiEOs-zvC5J-q0S8xcJwFfY9Za0PF5KmdstFJS6kt8Q_MOzphYY1qdW6FAUv9Jud5esW7elulRoWAvujR4tJYR3IrlSuzoAuJ5NmFgrTLlgFvdyWwsRLs/w640-h480/ChatGPT%20Image%20May%2024,%202026,%2007_41_56%20PM.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;&lt;br /&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;p&gt;&lt;/p&gt;&lt;p data-end=&quot;7056&quot; data-start=&quot;7020&quot;&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/h1&gt;&lt;h3 data-end=&quot;7072&quot; data-section-id=&quot;qnlk14&quot; data-start=&quot;7058&quot;&gt;&lt;/h3&gt;&lt;h1 data-end=&quot;228&quot; data-section-id=&quot;gm93i2&quot; data-start=&quot;159&quot;&gt;
&lt;/h1&gt;&lt;h2 data-end=&quot;7272&quot; data-section-id=&quot;hrs9az&quot; data-start=&quot;7241&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #e06666; font-family: Source Sans Pro; font-size: x-large;&quot;&gt;Production Failure Scenarios&lt;/span&gt;&lt;/span&gt;&lt;/h2&gt;&lt;h3 data-end=&quot;7317&quot; data-section-id=&quot;coamco&quot; data-start=&quot;7274&quot;&gt;&lt;span&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;1. PITR Fails Even Though Backup Exists&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;&lt;h1 data-end=&quot;228&quot; data-section-id=&quot;gm93i2&quot; data-start=&quot;159&quot;&gt;

&lt;p data-end=&quot;7328&quot; data-start=&quot;7319&quot;&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Symptoms:&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre class=&quot;overflow-visible! px-0!&quot; data-end=&quot;7461&quot; data-start=&quot;7330&quot;&gt;&lt;div class=&quot;relative w-full mt-4 mb-1&quot;&gt;&lt;div class=&quot;relative&quot;&gt;&lt;div class=&quot;h-full min-h-0 min-w-0&quot;&gt;&lt;div class=&quot;h-full min-h-0 min-w-0&quot;&gt;&lt;div class=&quot;border border-token-border-light border-radius-3xl corner-superellipse/1.1 rounded-3xl&quot;&gt;&lt;div class=&quot;h-full w-full border-radius-3xl bg-token-bg-elevated-secondary corner-superellipse/1.1 overflow-clip rounded-3xl lxnfua_clipPathFallback&quot;&gt;&lt;div class=&quot;pointer-events-none absolute end-1.5 top-1 z-2 md:end-2 md:top-1&quot;&gt;&lt;/div&gt;&lt;div class=&quot;relative&quot;&gt;&lt;div class=&quot;pe-11 pt-3&quot;&gt;&lt;div class=&quot;relative z-0 flex max-w-full&quot;&gt;&lt;div class=&quot;q9tKkq_viewer cm-editor z-10 light:cm-light dark:cm-light flex h-full w-full flex-col items-stretch ͼd ͼr&quot; dir=&quot;ltr&quot; id=&quot;code-block-viewer&quot;&gt;&lt;div class=&quot;cm-scroller&quot;&gt;&lt;pre class=&quot;cm-content q9tKkq_readonly m-0&quot;&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;&lt;code style=&quot;font-weight: normal;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Recovery starts&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;&lt;li&gt;&lt;code style=&quot;font-weight: normal;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;WAL restore works for some files&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;&lt;li&gt;&lt;code style=&quot;font-weight: normal;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Recovery stops before target time&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;&lt;li&gt;&lt;code style=&quot;font-weight: normal;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Required checkpoint record not found&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;
&lt;p data-end=&quot;7477&quot; data-start=&quot;7463&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro;&quot;&gt;Typical cause:&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-weight: normal;&quot;&gt;The WAL segment containing the target time was never archived.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;pre class=&quot;overflow-visible! px-0!&quot; data-end=&quot;7553&quot; data-start=&quot;7479&quot;&gt;&lt;div class=&quot;relative w-full mt-4 mb-1&quot;&gt;&lt;div class=&quot;relative&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;
&lt;p data-end=&quot;7559&quot; data-start=&quot;7555&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro;&quot;&gt;Fix:&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;&lt;span class=&quot;ͼg&quot; style=&quot;font-weight: normal;&quot;&gt;SELECT&lt;/span&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt; pg_switch_wal();&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;pre class=&quot;overflow-visible! px-0!&quot; data-end=&quot;7595&quot; data-start=&quot;7561&quot;&gt;&lt;div class=&quot;relative w-full mt-4 mb-1&quot;&gt;&lt;div class=&quot;relative&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;
&lt;p data-end=&quot;7609&quot; data-start=&quot;7597&quot;&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Then verify:&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;!--HTML generated using hilite.me--&gt;&lt;div style=&quot;background: rgb(40, 42, 54); border-color: gray; border-image: initial; border-style: solid; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;&quot;&gt;&lt;pre style=&quot;line-height: 125%; margin: 0px;&quot;&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;&lt;span style=&quot;font-family: courier; font-size: medium;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff79c6;&quot;&gt;SELECT&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; last_archived_wal, last_archived_time&lt;/span&gt;
&lt;span style=&quot;color: #ff79c6;&quot;&gt;FROM&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; pg_stat_archiver;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;pre class=&quot;overflow-visible! px-0!&quot; data-end=&quot;7689&quot; data-start=&quot;7611&quot;&gt;&lt;div class=&quot;relative w-full mt-4 mb-1&quot;&gt;&lt;div&gt;&lt;div class=&quot;relative&quot;&gt;&lt;div class=&quot;h-full min-h-0 min-w-0&quot;&gt;&lt;div class=&quot;h-full min-h-0 min-w-0&quot;&gt;&lt;div class=&quot;border border-token-border-light border-radius-3xl corner-superellipse/1.1 rounded-3xl&quot;&gt;&lt;div class=&quot;h-full w-full border-radius-3xl bg-token-bg-elevated-secondary corner-superellipse/1.1 overflow-clip rounded-3xl lxnfua_clipPathFallback&quot;&gt;&lt;div class=&quot;pointer-events-none absolute inset-x-4 top-12 bottom-4&quot;&gt;&lt;div class=&quot;pointer-events-none sticky z-40 shrink-0 z-1!&quot;&gt;&lt;div class=&quot;sticky bg-token-border-light&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;relative&quot;&gt;&lt;div&gt;&lt;div class=&quot;relative z-0 flex max-w-full&quot;&gt;&lt;div class=&quot;q9tKkq_viewer cm-editor z-10 light:cm-light dark:cm-light flex h-full w-full flex-col items-stretch ͼd ͼr&quot; dir=&quot;ltr&quot; id=&quot;code-block-viewer&quot;&gt;&lt;div class=&quot;cm-scroller&quot;&gt;&lt;pre class=&quot;cm-content q9tKkq_readonly m-0&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Operational lesson: never validate PostgreSQL recovery using only the presence of base backups.&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;
&lt;hr data-end=&quot;7791&quot; data-start=&quot;7788&quot; /&gt;
&lt;/h1&gt;&lt;h3 data-end=&quot;7828&quot; data-section-id=&quot;1yzb5ml&quot; data-start=&quot;7793&quot;&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;&lt;h3 data-end=&quot;7828&quot; data-section-id=&quot;1yzb5ml&quot; data-start=&quot;7793&quot;&gt;&lt;span&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;2. Archive Destination Fills Up&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;&lt;h1 data-end=&quot;228&quot; data-section-id=&quot;gm93i2&quot; data-start=&quot;159&quot;&gt;
&lt;p data-end=&quot;7839&quot; data-start=&quot;7830&quot;&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Symptoms:&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre class=&quot;overflow-visible! px-0!&quot; data-end=&quot;7940&quot; data-start=&quot;7841&quot;&gt;&lt;div class=&quot;relative w-full mt-4 mb-1&quot;&gt;&lt;div class=&quot;relative&quot;&gt;&lt;div class=&quot;h-full min-h-0 min-w-0&quot;&gt;&lt;div class=&quot;h-full min-h-0 min-w-0&quot;&gt;&lt;div class=&quot;border border-token-border-light border-radius-3xl corner-superellipse/1.1 rounded-3xl&quot;&gt;&lt;div class=&quot;h-full w-full border-radius-3xl bg-token-bg-elevated-secondary corner-superellipse/1.1 overflow-clip rounded-3xl lxnfua_clipPathFallback&quot;&gt;&lt;div class=&quot;pointer-events-none absolute end-1.5 top-1 z-2 md:end-2 md:top-1&quot;&gt;&lt;/div&gt;&lt;div class=&quot;relative&quot;&gt;&lt;div class=&quot;pe-11 pt-3&quot;&gt;&lt;div class=&quot;relative z-0 flex max-w-full&quot;&gt;&lt;div class=&quot;q9tKkq_viewer cm-editor z-10 light:cm-light dark:cm-light flex h-full w-full flex-col items-stretch ͼd ͼr&quot; dir=&quot;ltr&quot; id=&quot;code-block-viewer&quot;&gt;&lt;div class=&quot;cm-scroller&quot;&gt;&lt;pre class=&quot;cm-content q9tKkq_readonly m-0&quot;&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;&lt;code style=&quot;font-weight: normal;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;WAL files accumulating in pg_wal&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;&lt;li&gt;&lt;code style=&quot;font-weight: normal;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;archive_command failing&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;&lt;li&gt;&lt;code style=&quot;font-weight: normal;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Database disk usage increasing&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;
&lt;p data-end=&quot;7948&quot; data-start=&quot;7942&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro;&quot;&gt;Check:&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;&lt;span class=&quot;ͼg&quot; style=&quot;font-weight: normal;&quot;&gt;SELECT&lt;/span&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt; failed_count, last_failed_wal, last_failed_time&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;ͼg&quot; style=&quot;font-weight: normal;&quot;&gt;FROM&lt;/span&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt; pg_stat_archiver;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;pre class=&quot;overflow-visible! px-0!&quot; data-end=&quot;8038&quot; data-start=&quot;7950&quot;&gt;&lt;div class=&quot;relative w-full mt-4 mb-1&quot;&gt;&lt;div class=&quot;relative&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;
&lt;p data-end=&quot;8049&quot; data-start=&quot;8040&quot;&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;OS check:&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/h1&gt;&lt;blockquote style=&quot;border-color: currentcolor; border-image: initial; border-style: none; border-width: medium; margin: 0px 0px 0px 40px; padding: 0px; text-align: left;&quot;&gt;&lt;h1 data-end=&quot;228&quot; data-section-id=&quot;gm93i2&quot; data-start=&quot;159&quot;&gt;&lt;p data-end=&quot;8049&quot; data-start=&quot;8040&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-weight: normal;&quot;&gt;df &lt;/span&gt;&lt;span class=&quot;ͼn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-weight: normal;&quot;&gt;-h&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/h1&gt;&lt;h1 data-end=&quot;228&quot; data-section-id=&quot;gm93i2&quot; data-start=&quot;159&quot;&gt;&lt;pre class=&quot;overflow-visible! px-0!&quot; data-end=&quot;8096&quot; data-start=&quot;8051&quot;&gt;&lt;div class=&quot;relative w-full mt-4 mb-1&quot;&gt;&lt;div&gt;&lt;div class=&quot;relative&quot;&gt;&lt;div class=&quot;h-full min-h-0 min-w-0&quot;&gt;&lt;div class=&quot;h-full min-h-0 min-w-0&quot;&gt;&lt;div class=&quot;border border-token-border-light border-radius-3xl corner-superellipse/1.1 rounded-3xl&quot;&gt;&lt;div class=&quot;h-full w-full border-radius-3xl bg-token-bg-elevated-secondary corner-superellipse/1.1 overflow-clip rounded-3xl lxnfua_clipPathFallback&quot;&gt;&lt;div class=&quot;relative&quot;&gt;&lt;div&gt;&lt;div class=&quot;relative z-0 flex max-w-full&quot;&gt;&lt;div class=&quot;q9tKkq_viewer cm-editor z-10 light:cm-light dark:cm-light flex h-full w-full flex-col items-stretch ͼd ͼr&quot; id=&quot;code-block-viewer&quot;&gt;&lt;div class=&quot;cm-scroller&quot;&gt;&lt;pre class=&quot;cm-content q9tKkq_readonly m-0&quot;&gt;&lt;code style=&quot;font-weight: normal;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;du &lt;span class=&quot;ͼn&quot;&gt;-sh&lt;/span&gt; /home/postgres/arch/&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/h1&gt;&lt;/blockquote&gt;&lt;h1 data-end=&quot;228&quot; data-section-id=&quot;gm93i2&quot; data-start=&quot;159&quot;&gt;&lt;pre class=&quot;overflow-visible! px-0!&quot; data-end=&quot;8096&quot; data-start=&quot;8051&quot;&gt;&lt;div class=&quot;relative w-full mt-4 mb-1&quot;&gt;&lt;div class=&quot;relative&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;
&lt;p data-end=&quot;8198&quot; data-start=&quot;8098&quot;&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;If archiving is broken long enough, &lt;code data-end=&quot;8142&quot; data-start=&quot;8134&quot;&gt;pg_wal&lt;/code&gt; can grow and eventually threaten database availability.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;hr data-end=&quot;8203&quot; data-start=&quot;8200&quot; /&gt;
&lt;/h1&gt;&lt;h3 data-end=&quot;8256&quot; data-section-id=&quot;fq8hby&quot; data-start=&quot;8205&quot;&gt;&lt;span&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;&lt;h3 data-end=&quot;8256&quot; data-section-id=&quot;fq8hby&quot; data-start=&quot;8205&quot;&gt;&lt;span&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;3. Standby or Backup Lag Caused by WAL Handling&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;&lt;div&gt;&lt;span&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large;&quot;&gt;In streaming replication or backup-heavy systems, WAL is the lifeline. If archiving is delayed, replicas or restore jobs may fall behind or fail to fetch required segments.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;!--HTML generated using hilite.me--&gt;&lt;div style=&quot;background: rgb(40, 42, 54); border-color: gray; border-image: initial; border-style: solid; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;&quot;&gt;&lt;pre style=&quot;line-height: 125%; margin: 0px;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff79c6;&quot;&gt;SELECT&lt;/span&gt;
&lt;span style=&quot;color: #f8f8f2;&quot;&gt;    pg_current_wal_lsn(),&lt;/span&gt;
&lt;span style=&quot;color: #f8f8f2;&quot;&gt;    pg_walfile_name(pg_current_wal_lsn());&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h1 data-end=&quot;228&quot; data-section-id=&quot;gm93i2&quot; data-start=&quot;159&quot;&gt;&lt;pre class=&quot;overflow-visible! px-0!&quot; data-end=&quot;8547&quot; data-start=&quot;8461&quot;&gt;&lt;div class=&quot;relative w-full mt-4 mb-1&quot;&gt;&lt;div class=&quot;relative&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;
&lt;p data-end=&quot;8565&quot; data-start=&quot;8549&quot;&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;For replication:&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;!--HTML generated using hilite.me--&gt;&lt;div style=&quot;background: rgb(40, 42, 54); border-color: gray; border-image: initial; border-style: solid; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;&quot;&gt;&lt;pre style=&quot;line-height: 125%; margin: 0px;&quot;&gt;&lt;span style=&quot;font-family: courier; font-size: medium; font-weight: normal;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff79c6;&quot;&gt;SELECT&lt;/span&gt;
&lt;span style=&quot;color: #f8f8f2;&quot;&gt;    application_name,&lt;/span&gt;
&lt;span style=&quot;color: #f8f8f2;&quot;&gt;    &lt;/span&gt;&lt;span style=&quot;color: #ff79c6;&quot;&gt;state&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt;,&lt;/span&gt;
&lt;span style=&quot;color: #f8f8f2;&quot;&gt;    sent_lsn,&lt;/span&gt;
&lt;span style=&quot;color: #f8f8f2;&quot;&gt;    write_lsn,&lt;/span&gt;
&lt;span style=&quot;color: #f8f8f2;&quot;&gt;    flush_lsn,&lt;/span&gt;
&lt;span style=&quot;color: #f8f8f2;&quot;&gt;    replay_lsn,&lt;/span&gt;
&lt;span style=&quot;color: #f8f8f2;&quot;&gt;    sync_state&lt;/span&gt;
&lt;span style=&quot;color: #ff79c6;&quot;&gt;FROM&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; pg_stat_replication;&lt;/span&gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;pre class=&quot;overflow-visible! px-0!&quot; data-end=&quot;8718&quot; data-start=&quot;8567&quot;&gt;&lt;div class=&quot;relative w-full mt-4 mb-1&quot;&gt;&lt;div class=&quot;relative&quot;&gt;&lt;div class=&quot;h-full min-h-0 min-w-0&quot;&gt;&lt;div class=&quot;h-full min-h-0 min-w-0&quot;&gt;&lt;div class=&quot;border border-token-border-light border-radius-3xl corner-superellipse/1.1 rounded-3xl&quot;&gt;&lt;div class=&quot;h-full w-full border-radius-3xl bg-token-bg-elevated-secondary corner-superellipse/1.1 overflow-clip rounded-3xl lxnfua_clipPathFallback&quot;&gt;&lt;div class=&quot;pointer-events-none absolute inset-x-4 top-12 bottom-4&quot;&gt;&lt;div class=&quot;pointer-events-none sticky z-40 shrink-0 z-1!&quot;&gt;&lt;div class=&quot;sticky bg-token-border-light&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;relative&quot;&gt;&lt;div class=&quot;relative z-0 flex max-w-full&quot;&gt;&lt;div class=&quot;q9tKkq_viewer cm-editor z-10 light:cm-light dark:cm-light flex h-full w-full flex-col items-stretch ͼd ͼr&quot; dir=&quot;ltr&quot; id=&quot;code-block-viewer&quot;&gt;&lt;div class=&quot;cm-scroller&quot;&gt;&lt;pre class=&quot;cm-content q9tKkq_readonly m-0&quot;&gt;&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;
&lt;p data-end=&quot;8860&quot; data-start=&quot;8720&quot;&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;code data-end=&quot;8737&quot; data-start=&quot;8720&quot;&gt;pg_switch_wal()&lt;/code&gt; will not fix a bad replica by itself. But it helps validate whether WAL generation and archiving are behaving as expected.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/h1&gt;&lt;h2 data-end=&quot;9878&quot; data-section-id=&quot;17zrkaf&quot; data-start=&quot;9863&quot;&gt;&lt;br /&gt;&lt;/h2&gt;&lt;h2 data-end=&quot;9878&quot; data-section-id=&quot;17zrkaf&quot; data-start=&quot;9863&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #e06666; font-family: Source Sans Pro; font-size: x-large;&quot;&gt;DBA Insights&lt;/span&gt;&lt;/span&gt;&lt;/h2&gt;&lt;h1 data-end=&quot;228&quot; data-section-id=&quot;gm93i2&quot; data-start=&quot;159&quot;&gt;
&lt;p data-end=&quot;10029&quot; data-start=&quot;9880&quot;&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Do not treat &lt;code data-end=&quot;9910&quot; data-start=&quot;9893&quot;&gt;pg_switch_wal()&lt;/code&gt; as a magic recovery command. It does one thing: it closes the current WAL segment and makes it eligible for archiving.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;10070&quot; data-start=&quot;10031&quot;&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;The real DBA work is around validation.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;10107&quot; data-start=&quot;10072&quot;&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Check whether archiving is enabled:&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre class=&quot;overflow-visible! px-0!&quot; data-end=&quot;10138&quot; data-start=&quot;10109&quot;&gt;&lt;div class=&quot;relative w-full mt-4 mb-1&quot;&gt;&lt;div&gt;&lt;div class=&quot;relative&quot;&gt;&lt;div class=&quot;h-full min-h-0 min-w-0&quot;&gt;&lt;div class=&quot;h-full min-h-0 min-w-0&quot;&gt;&lt;div class=&quot;border border-token-border-light border-radius-3xl corner-superellipse/1.1 rounded-3xl&quot;&gt;&lt;div class=&quot;h-full w-full border-radius-3xl bg-token-bg-elevated-secondary corner-superellipse/1.1 overflow-clip rounded-3xl lxnfua_clipPathFallback&quot;&gt;&lt;div class=&quot;pointer-events-none absolute inset-x-4 top-12 bottom-4&quot;&gt;&lt;div class=&quot;pointer-events-none sticky z-40 shrink-0 z-1!&quot;&gt;&lt;div class=&quot;sticky bg-token-border-light&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/h1&gt;&lt;blockquote style=&quot;border-color: currentcolor; border-image: none; border-style: none; border-width: medium; border: none; margin: 0px 0px 0px 40px; padding: 0px;&quot;&gt;&lt;h1 data-end=&quot;228&quot; data-section-id=&quot;gm93i2&quot; data-start=&quot;159&quot;&gt;&lt;pre class=&quot;overflow-visible! px-0!&quot; data-end=&quot;10138&quot; data-start=&quot;10109&quot;&gt;&lt;div class=&quot;relative w-full mt-4 mb-1&quot;&gt;&lt;div&gt;&lt;div class=&quot;relative&quot;&gt;&lt;div class=&quot;h-full min-h-0 min-w-0&quot;&gt;&lt;div class=&quot;h-full min-h-0 min-w-0&quot;&gt;&lt;div class=&quot;border border-token-border-light border-radius-3xl corner-superellipse/1.1 rounded-3xl&quot;&gt;&lt;div class=&quot;h-full w-full border-radius-3xl bg-token-bg-elevated-secondary corner-superellipse/1.1 overflow-clip rounded-3xl lxnfua_clipPathFallback&quot;&gt;&lt;div class=&quot;relative&quot;&gt;&lt;div&gt;&lt;div class=&quot;relative z-0 flex max-w-full&quot;&gt;&lt;div class=&quot;q9tKkq_viewer cm-editor z-10 light:cm-light dark:cm-light flex h-full w-full flex-col items-stretch ͼd ͼr&quot; dir=&quot;ltr&quot; id=&quot;code-block-viewer&quot;&gt;&lt;div class=&quot;cm-scroller&quot;&gt;&lt;pre class=&quot;cm-content q9tKkq_readonly m-0&quot; style=&quot;text-align: left;&quot;&gt;&lt;code style=&quot;font-weight: normal;&quot;&gt;&lt;span style=&quot;font-family: courier; font-size: large;&quot;&gt;SHOW archive_mode;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/h1&gt;&lt;/blockquote&gt;&lt;h1 data-end=&quot;228&quot; data-section-id=&quot;gm93i2&quot; data-start=&quot;159&quot;&gt;&lt;pre class=&quot;overflow-visible! px-0!&quot; data-end=&quot;10138&quot; data-start=&quot;10109&quot;&gt;&lt;div class=&quot;relative w-full mt-4 mb-1&quot;&gt;&lt;div class=&quot;relative&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;
&lt;p data-end=&quot;10174&quot; data-start=&quot;10140&quot;&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Check whether the command is sane:&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre class=&quot;overflow-visible! px-0!&quot; data-end=&quot;10208&quot; data-start=&quot;10176&quot;&gt;&lt;div class=&quot;relative w-full mt-4 mb-1&quot;&gt;&lt;div&gt;&lt;div class=&quot;relative&quot;&gt;&lt;div class=&quot;h-full min-h-0 min-w-0&quot;&gt;&lt;div class=&quot;h-full min-h-0 min-w-0&quot;&gt;&lt;div class=&quot;border border-token-border-light border-radius-3xl corner-superellipse/1.1 rounded-3xl&quot;&gt;&lt;div class=&quot;h-full w-full border-radius-3xl bg-token-bg-elevated-secondary corner-superellipse/1.1 overflow-clip rounded-3xl lxnfua_clipPathFallback&quot;&gt;&lt;div class=&quot;pointer-events-none absolute inset-x-4 top-12 bottom-4&quot;&gt;&lt;div class=&quot;pointer-events-none sticky z-40 shrink-0 z-1!&quot;&gt;&lt;div class=&quot;sticky bg-token-border-light&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/h1&gt;&lt;blockquote style=&quot;border-color: currentcolor; border-image: none; border-style: none; border-width: medium; border: none; margin: 0px 0px 0px 40px; padding: 0px;&quot;&gt;&lt;h1 data-end=&quot;228&quot; data-section-id=&quot;gm93i2&quot; data-start=&quot;159&quot;&gt;&lt;pre class=&quot;overflow-visible! px-0!&quot; data-end=&quot;10208&quot; data-start=&quot;10176&quot;&gt;&lt;div class=&quot;relative w-full mt-4 mb-1&quot;&gt;&lt;div&gt;&lt;div class=&quot;relative&quot;&gt;&lt;div class=&quot;h-full min-h-0 min-w-0&quot;&gt;&lt;div class=&quot;h-full min-h-0 min-w-0&quot;&gt;&lt;div class=&quot;border border-token-border-light border-radius-3xl corner-superellipse/1.1 rounded-3xl&quot;&gt;&lt;div class=&quot;h-full w-full border-radius-3xl bg-token-bg-elevated-secondary corner-superellipse/1.1 overflow-clip rounded-3xl lxnfua_clipPathFallback&quot;&gt;&lt;div class=&quot;relative&quot;&gt;&lt;div&gt;&lt;div class=&quot;relative z-0 flex max-w-full&quot;&gt;&lt;div class=&quot;q9tKkq_viewer cm-editor z-10 light:cm-light dark:cm-light flex h-full w-full flex-col items-stretch ͼd ͼr&quot; dir=&quot;ltr&quot; id=&quot;code-block-viewer&quot;&gt;&lt;div class=&quot;cm-scroller&quot;&gt;&lt;pre class=&quot;cm-content q9tKkq_readonly m-0&quot; style=&quot;text-align: left;&quot;&gt;&lt;code style=&quot;font-weight: normal;&quot;&gt;&lt;span style=&quot;font-family: courier; font-size: large;&quot;&gt;SHOW archive_command;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/h1&gt;&lt;/blockquote&gt;&lt;h1 data-end=&quot;228&quot; data-section-id=&quot;gm93i2&quot; data-start=&quot;159&quot;&gt;&lt;pre class=&quot;overflow-visible! px-0!&quot; data-end=&quot;10208&quot; data-start=&quot;10176&quot;&gt;&lt;div class=&quot;relative w-full mt-4 mb-1&quot;&gt;&lt;div class=&quot;relative&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;
&lt;p data-end=&quot;10249&quot; data-start=&quot;10210&quot;&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Check whether archiving is progressing:&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre class=&quot;overflow-visible! px-0!&quot; data-end=&quot;10345&quot; data-start=&quot;10251&quot;&gt;&lt;div class=&quot;relative w-full mt-4 mb-1&quot;&gt;&lt;div&gt;&lt;div class=&quot;relative&quot;&gt;&lt;div class=&quot;h-full min-h-0 min-w-0&quot;&gt;&lt;div class=&quot;h-full min-h-0 min-w-0&quot;&gt;&lt;div class=&quot;border border-token-border-light border-radius-3xl corner-superellipse/1.1 rounded-3xl&quot;&gt;&lt;div class=&quot;h-full w-full border-radius-3xl bg-token-bg-elevated-secondary corner-superellipse/1.1 overflow-clip rounded-3xl lxnfua_clipPathFallback&quot;&gt;&lt;div class=&quot;pointer-events-none absolute inset-x-4 top-12 bottom-4&quot;&gt;&lt;div class=&quot;pointer-events-none sticky z-40 shrink-0 z-1!&quot;&gt;&lt;div class=&quot;sticky bg-token-border-light&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/h1&gt;&lt;blockquote style=&quot;border-color: currentcolor; border-image: initial; border-style: none; border-width: medium; margin: 0px 0px 0px 40px; padding: 0px; text-align: left;&quot;&gt;&lt;h1 data-end=&quot;228&quot; data-section-id=&quot;gm93i2&quot; data-start=&quot;159&quot;&gt;&lt;pre class=&quot;overflow-visible! px-0!&quot; data-end=&quot;10345&quot; data-start=&quot;10251&quot;&gt;&lt;div class=&quot;relative w-full mt-4 mb-1&quot;&gt;&lt;div&gt;&lt;div class=&quot;relative&quot;&gt;&lt;div class=&quot;h-full min-h-0 min-w-0&quot;&gt;&lt;div class=&quot;h-full min-h-0 min-w-0&quot;&gt;&lt;div class=&quot;border border-token-border-light border-radius-3xl corner-superellipse/1.1 rounded-3xl&quot;&gt;&lt;div class=&quot;h-full w-full border-radius-3xl bg-token-bg-elevated-secondary corner-superellipse/1.1 overflow-clip rounded-3xl lxnfua_clipPathFallback&quot;&gt;&lt;div class=&quot;relative&quot;&gt;&lt;div&gt;&lt;div class=&quot;relative z-0 flex max-w-full&quot;&gt;&lt;div class=&quot;q9tKkq_viewer cm-editor z-10 light:cm-light dark:cm-light flex h-full w-full flex-col items-stretch ͼd ͼr&quot; id=&quot;code-block-viewer&quot;&gt;&lt;div class=&quot;cm-scroller&quot;&gt;&lt;pre class=&quot;cm-content q9tKkq_readonly m-0&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;code style=&quot;font-weight: normal;&quot;&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;&lt;span class=&quot;ͼg&quot;&gt;SELECT&lt;/span&gt; archived_count, last_archived_wal, last_archived_time &lt;/span&gt;&lt;/code&gt;&lt;span class=&quot;ͼg&quot; style=&quot;font-family: courier; font-weight: normal;&quot;&gt;FROM&lt;/span&gt;&lt;span style=&quot;font-family: courier; font-weight: normal;&quot;&gt; pg_stat_archiver;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/h1&gt;&lt;/blockquote&gt;&lt;h1 data-end=&quot;228&quot; data-section-id=&quot;gm93i2&quot; data-start=&quot;159&quot;&gt;&lt;pre class=&quot;overflow-visible! px-0!&quot; data-end=&quot;10345&quot; data-start=&quot;10251&quot;&gt;&lt;div class=&quot;relative w-full mt-4 mb-1&quot;&gt;&lt;div class=&quot;relative&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;
&lt;p data-end=&quot;10385&quot; data-start=&quot;10347&quot;&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Check whether failures are increasing:&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre class=&quot;overflow-visible! px-0!&quot; data-end=&quot;10475&quot; data-start=&quot;10387&quot;&gt;&lt;div class=&quot;relative w-full mt-4 mb-1&quot;&gt;&lt;div&gt;&lt;div class=&quot;relative&quot;&gt;&lt;div class=&quot;h-full min-h-0 min-w-0&quot;&gt;&lt;div class=&quot;h-full min-h-0 min-w-0&quot;&gt;&lt;div class=&quot;border border-token-border-light border-radius-3xl corner-superellipse/1.1 rounded-3xl&quot;&gt;&lt;div class=&quot;h-full w-full border-radius-3xl bg-token-bg-elevated-secondary corner-superellipse/1.1 overflow-clip rounded-3xl lxnfua_clipPathFallback&quot;&gt;&lt;div class=&quot;pointer-events-none absolute inset-x-4 top-12 bottom-4&quot;&gt;&lt;div class=&quot;pointer-events-none sticky z-40 shrink-0 z-1!&quot;&gt;&lt;div class=&quot;sticky bg-token-border-light&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/h1&gt;&lt;blockquote style=&quot;border-color: currentcolor; border-image: initial; border-style: none; border-width: medium; margin: 0px 0px 0px 40px; padding: 0px; text-align: left;&quot;&gt;&lt;h1 data-end=&quot;228&quot; data-section-id=&quot;gm93i2&quot; data-start=&quot;159&quot;&gt;&lt;pre class=&quot;overflow-visible! px-0!&quot; data-end=&quot;10475&quot; data-start=&quot;10387&quot;&gt;&lt;div class=&quot;relative w-full mt-4 mb-1&quot;&gt;&lt;div&gt;&lt;div class=&quot;relative&quot;&gt;&lt;div class=&quot;h-full min-h-0 min-w-0&quot;&gt;&lt;div class=&quot;h-full min-h-0 min-w-0&quot;&gt;&lt;div class=&quot;border border-token-border-light border-radius-3xl corner-superellipse/1.1 rounded-3xl&quot;&gt;&lt;div class=&quot;h-full w-full border-radius-3xl bg-token-bg-elevated-secondary corner-superellipse/1.1 overflow-clip rounded-3xl lxnfua_clipPathFallback&quot;&gt;&lt;div class=&quot;relative&quot;&gt;&lt;div&gt;&lt;div class=&quot;relative z-0 flex max-w-full&quot;&gt;&lt;div class=&quot;q9tKkq_viewer cm-editor z-10 light:cm-light dark:cm-light flex h-full w-full flex-col items-stretch ͼd ͼr&quot; id=&quot;code-block-viewer&quot;&gt;&lt;div class=&quot;cm-scroller&quot;&gt;&lt;pre class=&quot;cm-content q9tKkq_readonly m-0&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;code style=&quot;font-weight: normal;&quot;&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;&lt;span class=&quot;ͼg&quot;&gt;SELECT&lt;/span&gt; failed_count, last_failed_wal, last_failed_time &lt;/span&gt;&lt;/code&gt;&lt;span class=&quot;ͼg&quot; style=&quot;font-family: courier; font-weight: normal;&quot;&gt;FROM&lt;/span&gt;&lt;span style=&quot;font-family: courier; font-weight: normal;&quot;&gt; pg_stat_archiver;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/h1&gt;&lt;/blockquote&gt;&lt;h1 data-end=&quot;228&quot; data-section-id=&quot;gm93i2&quot; data-start=&quot;159&quot;&gt;&lt;pre class=&quot;overflow-visible! px-0!&quot; data-end=&quot;10475&quot; data-start=&quot;10387&quot;&gt;&lt;div class=&quot;relative w-full mt-4 mb-1&quot;&gt;&lt;div class=&quot;relative&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;
&lt;p data-end=&quot;10511&quot; data-start=&quot;10477&quot;&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;And always check from the OS side:&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre class=&quot;overflow-visible! px-0!&quot; data-end=&quot;10559&quot; data-start=&quot;10513&quot;&gt;&lt;div class=&quot;relative w-full mt-4 mb-1&quot;&gt;&lt;div&gt;&lt;div class=&quot;relative&quot;&gt;&lt;div class=&quot;h-full min-h-0 min-w-0&quot;&gt;&lt;div class=&quot;h-full min-h-0 min-w-0&quot;&gt;&lt;div class=&quot;border border-token-border-light border-radius-3xl corner-superellipse/1.1 rounded-3xl&quot;&gt;&lt;div class=&quot;h-full w-full border-radius-3xl bg-token-bg-elevated-secondary corner-superellipse/1.1 overflow-clip rounded-3xl lxnfua_clipPathFallback&quot;&gt;&lt;div class=&quot;pointer-events-none absolute inset-x-4 top-12 bottom-4&quot;&gt;&lt;div class=&quot;pointer-events-none sticky z-40 shrink-0 z-1!&quot;&gt;&lt;div class=&quot;sticky bg-token-border-light&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/h1&gt;&lt;blockquote style=&quot;border-color: currentcolor; border-image: initial; border-style: none; border-width: medium; margin: 0px 0px 0px 40px; padding: 0px; text-align: left;&quot;&gt;&lt;h1 data-end=&quot;228&quot; data-section-id=&quot;gm93i2&quot; data-start=&quot;159&quot;&gt;&lt;pre class=&quot;overflow-visible! px-0!&quot; data-end=&quot;10559&quot; data-start=&quot;10513&quot;&gt;&lt;div class=&quot;relative w-full mt-4 mb-1&quot;&gt;&lt;div&gt;&lt;div class=&quot;relative&quot;&gt;&lt;div class=&quot;h-full min-h-0 min-w-0&quot;&gt;&lt;div class=&quot;h-full min-h-0 min-w-0&quot;&gt;&lt;div class=&quot;border border-token-border-light border-radius-3xl corner-superellipse/1.1 rounded-3xl&quot;&gt;&lt;div class=&quot;h-full w-full border-radius-3xl bg-token-bg-elevated-secondary corner-superellipse/1.1 overflow-clip rounded-3xl lxnfua_clipPathFallback&quot;&gt;&lt;div class=&quot;relative&quot;&gt;&lt;div&gt;&lt;div class=&quot;relative z-0 flex max-w-full&quot;&gt;&lt;div class=&quot;q9tKkq_viewer cm-editor z-10 light:cm-light dark:cm-light flex h-full w-full flex-col items-stretch ͼd ͼr&quot; id=&quot;code-block-viewer&quot;&gt;&lt;div class=&quot;cm-scroller&quot;&gt;&lt;pre class=&quot;cm-content q9tKkq_readonly m-0&quot;&gt;&lt;code style=&quot;font-weight: normal;&quot;&gt;&lt;span style=&quot;font-family: courier; font-size: large;&quot;&gt;&lt;span class=&quot;ͼl&quot;&gt;ls&lt;/span&gt; &lt;span class=&quot;ͼn&quot;&gt;-ltr&lt;/span&gt; /home/postgres/arch/&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/h1&gt;&lt;h1 data-end=&quot;228&quot; data-section-id=&quot;gm93i2&quot; data-start=&quot;159&quot;&gt;&lt;pre class=&quot;overflow-visible! px-0!&quot; data-end=&quot;10559&quot; data-start=&quot;10513&quot;&gt;&lt;div class=&quot;relative w-full mt-4 mb-1&quot;&gt;&lt;div&gt;&lt;div class=&quot;relative&quot;&gt;&lt;div class=&quot;h-full min-h-0 min-w-0&quot;&gt;&lt;div class=&quot;h-full min-h-0 min-w-0&quot;&gt;&lt;div class=&quot;border border-token-border-light border-radius-3xl corner-superellipse/1.1 rounded-3xl&quot;&gt;&lt;div class=&quot;h-full w-full border-radius-3xl bg-token-bg-elevated-secondary corner-superellipse/1.1 overflow-clip rounded-3xl lxnfua_clipPathFallback&quot;&gt;&lt;div class=&quot;relative&quot;&gt;&lt;div&gt;&lt;div class=&quot;relative z-0 flex max-w-full&quot;&gt;&lt;div class=&quot;q9tKkq_viewer cm-editor z-10 light:cm-light dark:cm-light flex h-full w-full flex-col items-stretch ͼd ͼr&quot; id=&quot;code-block-viewer&quot;&gt;&lt;div class=&quot;cm-scroller&quot;&gt;&lt;pre class=&quot;cm-content q9tKkq_readonly m-0&quot;&gt;&lt;code style=&quot;font-weight: normal;&quot;&gt;&lt;span style=&quot;font-family: courier; font-size: large;&quot;&gt;df &lt;span class=&quot;ͼn&quot;&gt;-h&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/h1&gt;&lt;/blockquote&gt;&lt;h1 data-end=&quot;228&quot; data-section-id=&quot;gm93i2&quot; data-start=&quot;159&quot;&gt;&lt;pre class=&quot;overflow-visible! px-0!&quot; data-end=&quot;10559&quot; data-start=&quot;10513&quot;&gt;&lt;div class=&quot;relative w-full mt-4 mb-1&quot;&gt;&lt;div class=&quot;relative&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;
&lt;p data-end=&quot;10589&quot; data-start=&quot;10561&quot;&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p data-end=&quot;10589&quot; data-start=&quot;10561&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #e06666; font-family: Source Sans Pro; font-size: x-large;&quot;&gt;Common mistakes I have seen:&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre class=&quot;overflow-visible! px-0!&quot; data-end=&quot;10915&quot; data-start=&quot;10591&quot;&gt;&lt;div class=&quot;relative w-full mt-4 mb-1&quot;&gt;&lt;div&gt;&lt;div class=&quot;relative&quot;&gt;&lt;div class=&quot;h-full min-h-0 min-w-0&quot;&gt;&lt;div class=&quot;h-full min-h-0 min-w-0&quot;&gt;&lt;div class=&quot;border border-token-border-light border-radius-3xl corner-superellipse/1.1 rounded-3xl&quot;&gt;&lt;div class=&quot;h-full w-full border-radius-3xl bg-token-bg-elevated-secondary corner-superellipse/1.1 overflow-clip rounded-3xl lxnfua_clipPathFallback&quot;&gt;&lt;div class=&quot;pointer-events-none absolute end-1.5 top-1 z-2 md:end-2 md:top-1&quot;&gt;&lt;/div&gt;&lt;div class=&quot;relative&quot;&gt;&lt;div class=&quot;pe-11 pt-3&quot;&gt;&lt;div class=&quot;relative z-0 flex max-w-full&quot;&gt;&lt;div class=&quot;q9tKkq_viewer cm-editor z-10 light:cm-light dark:cm-light flex h-full w-full flex-col items-stretch ͼd ͼr&quot; dir=&quot;ltr&quot; id=&quot;code-block-viewer&quot;&gt;&lt;div class=&quot;cm-scroller&quot;&gt;&lt;pre class=&quot;cm-content q9tKkq_readonly m-0&quot;&gt;&lt;code style=&quot;font-weight: normal;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Assuming base backup success means PITR is safe&lt;br /&gt;Not monitoring pg_stat_archiver&lt;br /&gt;Forgetting quiet databases may not archive WAL quickly&lt;br /&gt;Running pg_switch_wal too frequently without storage planning&lt;br /&gt;Not testing restore until an actual incident&lt;br /&gt;Ignoring archive_command failures because the database is still online&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;
&lt;p data-end=&quot;10990&quot; data-start=&quot;10917&quot;&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;The most dangerous backup system is the one that has never been restored.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p data-end=&quot;10990&quot; data-start=&quot;10917&quot;&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/h1&gt;&lt;h2 data-end=&quot;11004&quot; data-section-id=&quot;1xvwnkw&quot; data-start=&quot;10997&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #e06666; font-family: Source Sans Pro; font-size: x-large;&quot;&gt;FAQs&lt;/span&gt;&lt;/span&gt;&lt;/h2&gt;&lt;h3 data-end=&quot;11053&quot; data-section-id=&quot;1lht68q&quot; data-start=&quot;11006&quot;&gt;&lt;span role=&quot;text&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Does &lt;code data-end=&quot;11032&quot; data-start=&quot;11015&quot;&gt;pg_switch_wal()&lt;/code&gt; force WAL archiving?&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;&lt;h3 data-end=&quot;11053&quot; data-section-id=&quot;1lht68q&quot; data-start=&quot;11006&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-weight: normal;&quot;&gt;Not directly. It closes the current WAL segment. Once the segment is complete, the archiver can pick it up if &lt;/span&gt;&lt;code data-end=&quot;11179&quot; data-start=&quot;11165&quot; style=&quot;font-weight: normal;&quot;&gt;archive_mode&lt;/code&gt;&lt;span style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-weight: normal;&quot;&gt; is enabled and &lt;/span&gt;&lt;code data-end=&quot;11212&quot; data-start=&quot;11195&quot; style=&quot;font-weight: normal;&quot;&gt;archive_command&lt;/code&gt;&lt;span style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-weight: normal;&quot;&gt; is working.&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;&lt;h3 data-end=&quot;11282&quot; data-section-id=&quot;e2ef8c&quot; data-start=&quot;11226&quot; style=&quot;text-align: left;&quot;&gt;&lt;span role=&quot;text&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;&lt;h3 data-end=&quot;11282&quot; data-section-id=&quot;e2ef8c&quot; data-start=&quot;11226&quot; style=&quot;text-align: left;&quot;&gt;&lt;span role=&quot;text&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Why did &lt;code data-end=&quot;11255&quot; data-start=&quot;11238&quot;&gt;pg_switch_wal()&lt;/code&gt; return the same LSN twice?&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;&lt;h1 data-end=&quot;228&quot; data-section-id=&quot;gm93i2&quot; data-start=&quot;159&quot; style=&quot;text-align: left;&quot;&gt;
&lt;/h1&gt;&lt;h3&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Most likely no WAL was generated between the two calls. Generate a small change, then run it again.&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;&lt;div&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;h3 data-end=&quot;11421&quot; data-section-id=&quot;1nye4c9&quot; data-start=&quot;11385&quot; style=&quot;text-align: left;&quot;&gt;&lt;span&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Is it safe to run in production?&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;&lt;h1 data-end=&quot;228&quot; data-section-id=&quot;gm93i2&quot; data-start=&quot;159&quot; style=&quot;text-align: left;&quot;&gt;
&lt;/h1&gt;&lt;h3&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Yes, but do not abuse it. Occasional use for backup, PITR validation, or archive testing is normal. Frequent forced switches can increase archive file count and storage pressure.&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;&lt;div&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;h3 data-end=&quot;11651&quot; data-section-id=&quot;14gklad&quot; data-start=&quot;11603&quot; style=&quot;text-align: left;&quot;&gt;&lt;span&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;How do I know the switched WAL was archived?&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;&lt;h1 data-end=&quot;228&quot; data-section-id=&quot;gm93i2&quot; data-start=&quot;159&quot;&gt;
&lt;/h1&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-family: courier; font-size: large;&quot;&gt;&lt;span class=&quot;ͼg&quot; style=&quot;font-weight: normal;&quot;&gt;SELECT&lt;/span&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt; last_archived_wal, last_archived_time&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;ͼg&quot; style=&quot;font-weight: normal;&quot;&gt;FROM&lt;/span&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt; pg_stat_archiver;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro;&quot;&gt;Then confirm at the archive destination:&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;&lt;span class=&quot;ͼl&quot; style=&quot;font-weight: normal;&quot;&gt;ls&lt;/span&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt; &lt;/span&gt;&lt;span class=&quot;ͼn&quot; style=&quot;font-weight: normal;&quot;&gt;-ltr&lt;/span&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt; /home/postgres/arch/&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;&lt;div&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;pre class=&quot;overflow-visible! px-0!&quot; data-end=&quot;11737&quot; data-start=&quot;11659&quot;&gt;&lt;div class=&quot;relative w-full mt-4 mb-1&quot;&gt;&lt;div class=&quot;relative&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;
&lt;pre class=&quot;overflow-visible! px-0!&quot; data-end=&quot;11821&quot; data-start=&quot;11781&quot;&gt;&lt;div class=&quot;relative w-full mt-4 mb-1&quot;&gt;&lt;div class=&quot;relative&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;
&lt;h3 data-end=&quot;11852&quot; data-section-id=&quot;dr9ko4&quot; data-start=&quot;11823&quot; style=&quot;text-align: left;&quot;&gt;&lt;span&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Can this fix broken PITR?&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;&lt;h1 data-end=&quot;228&quot; data-section-id=&quot;gm93i2&quot; data-start=&quot;159&quot;&gt;
&lt;/h1&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;It can help if the required WAL is still in the active segment and has not yet been archived. It will not help if the WAL was already lost, deleted, or never generated.&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;&lt;p data-end=&quot;12022&quot; data-start=&quot;11854&quot;&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h2 data-end=&quot;12042&quot; data-section-id=&quot;8dtpi&quot; data-start=&quot;12029&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #e06666; font-family: Source Sans Pro; font-size: x-large;&quot;&gt;Conclusion&lt;/span&gt;&lt;/span&gt;&lt;/h2&gt;&lt;h1 data-end=&quot;228&quot; data-section-id=&quot;gm93i2&quot; data-start=&quot;159&quot;&gt;
&lt;/h1&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;code data-end=&quot;12061&quot; data-start=&quot;12044&quot;&gt;pg_switch_wal()&lt;/code&gt; is a small PostgreSQL function, but it sits right in the middle of backup confidence, WAL archiving, and PITR reliability.&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;It is useful before restore testing, after important changes, and while validating archive behavior. But the command itself is only part of the story. The real discipline is checking whether the WAL segment reached the archive location and whether recovery can actually consume it.&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;&lt;h3 style=&quot;text-align: left;&quot;&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;A good DBA does not stop at “backup completed.”&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;A good DBA asks:&lt;/span&gt;&lt;/span&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;&lt;code style=&quot;font-weight: normal;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Can I restore it?&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;&lt;code style=&quot;font-weight: normal;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Can I recover to the required time?&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;&lt;code style=&quot;font-weight: normal;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Do I have every WAL file needed?&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;&lt;code style=&quot;font-weight: normal;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Did I test this before the outage?&lt;/span&gt;&lt;/code&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;That mindset saves production systems.&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;



&lt;pre class=&quot;overflow-visible! px-0!&quot; data-end=&quot;12669&quot; data-start=&quot;12536&quot;&gt;&lt;div class=&quot;relative w-full mt-4 mb-1&quot;&gt;&lt;div&gt;&lt;div class=&quot;relative&quot;&gt;&lt;div class=&quot;h-full min-h-0 min-w-0&quot;&gt;&lt;div class=&quot;h-full min-h-0 min-w-0&quot;&gt;&lt;div class=&quot;border border-token-border-light border-radius-3xl corner-superellipse/1.1 rounded-3xl&quot;&gt;&lt;div class=&quot;h-full w-full border-radius-3xl bg-token-bg-elevated-secondary corner-superellipse/1.1 overflow-clip rounded-3xl lxnfua_clipPathFallback&quot;&gt;&lt;div class=&quot;pointer-events-none absolute end-1.5 top-1 z-2 md:end-2 md:top-1&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;&lt;h1 data-end=&quot;228&quot; data-section-id=&quot;gm93i2&quot; data-start=&quot;159&quot;&gt;&lt;pre class=&quot;overflow-visible! px-0!&quot; data-end=&quot;12669&quot; data-start=&quot;12536&quot;&gt;&lt;div class=&quot;relative w-full mt-4 mb-1&quot;&gt;&lt;div class=&quot;relative&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;
&lt;/h1&gt;</description><link>https://oracle-dba-help.blogspot.com/2026/07/pgswitchwal-in-postgresql-small-command.html</link><author>noreply@blogger.com (Nikhil Kotak)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEirFqnHPtGhxg_y7-tfmeWUg-hSx7FGWujQ-Cb5TX6iPs6awZxddTecL8nRUmC0iI20xG2WdSogYb4Vv8JYCvATktDfH2euJ8mWEJQDwHZp-GQazV_pRakxLCnASCIeqxT9ZxMkZABJjY6ekPfFPjILcy0gdn45lKYNynv9ZWd3cvc_tkVwE4B4yV5J4LA/s72-w640-h360-c/ChatGPT%20Image%20May%2024,%202026,%2007_27_00%20PM.png" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1375587508974804970.post-6322300970023778985</guid><pubDate>Sat, 18 Jul 2026 12:45:23 +0000</pubDate><atom:updated>2026-07-18T20:45:23.153+08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Core DBA</category><category domain="http://www.blogger.com/atom/ns#">Must Read</category><title>The Outage Usually Begins Before the Database Fails</title><description>&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;A database incident rarely begins when the monitoring system raises an alert. It usually begins weeks earlier - with an unreviewed execution plan, an ignored capacity trend, an oversized privilege, or a recovery procedure that nobody has tested.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;By the time the DBA receives the call, the database is often exposing an operational weakness that was already present. The immediate symptom may be exhausted storage, a failed deployment, excessive I/O, or a missing object, but the underlying cause is frequently a gap in engineering discipline.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;I have seen expensive Oracle platforms fail because nobody noticed that the Fast Recovery Area was growing rapidly. I have also seen relatively modest PostgreSQL environments remain stable for years because the team consistently reviewed changes, monitored capacity, controlled access, and tested recovery.&lt;span&gt;&lt;/span&gt;&lt;/p&gt;&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;p&gt;&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;The database technology was different, but the real difference was how the platform was operated.&lt;/p&gt;

&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;The Incident Often Starts During Deployment&lt;/h2&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;A query completing successfully in development does not mean it is ready for production. Development may contain a few thousand rows, while production contains hundreds of millions. Data distribution, bind values, stale statistics, concurrent workload, and storage latency can all influence the execution plan.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;For any significant SQL change, the review should answer practical questions:&lt;/p&gt;

&lt;ul style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;
  &lt;li&gt;Which access path did the optimizer select?&lt;/li&gt;
  &lt;li&gt;How close were estimated rows to actual rows?&lt;/li&gt;
  &lt;li&gt;How much logical and physical I/O was required?&lt;/li&gt;
  &lt;li&gt;Did sorts or hash operations spill to temporary storage?&lt;/li&gt;
  &lt;li&gt;Is the plan sensitive to particular bind values?&lt;/li&gt;
  &lt;li&gt;Will the same plan remain acceptable as the table grows?&lt;/li&gt;
&lt;/ul&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;The following examples capture runtime execution statistics in Oracle and PostgreSQL. Table and column names should be adjusted for the application being reviewed.&lt;/p&gt;

&lt;div style=&quot;background: rgb(40, 42, 54); border-color: gray; border-image: none; border-style: solid; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;&quot;&gt;
&lt;pre style=&quot;line-height: 125%; margin: 0px;&quot;&gt;&lt;span style=&quot;color: #f8f8f2; font-family: courier; font-size: medium; font-weight: normal;&quot;&gt;-- Oracle: execute the statement and display actual row-source statistics

&lt;span style=&quot;color: #ff79c6;&quot;&gt;SELECT&lt;/span&gt; /*+ gather_plan_statistics */
order_id,
status,
created_at &lt;span style=&quot;color: #ff79c6;&quot;&gt;FROM&lt;/span&gt; orders &lt;span style=&quot;color: #ff79c6;&quot;&gt;WHERE&lt;/span&gt; customer_id = :customer_id &lt;span style=&quot;color: #ff79c6;&quot;&gt;AND&lt;/span&gt; created_at &amp;gt;= :from_date;

&lt;span style=&quot;color: #ff79c6;&quot;&gt;SELECT&lt;/span&gt; * &lt;span style=&quot;color: #ff79c6;&quot;&gt;FROM&lt;/span&gt; TABLE(
DBMS_XPLAN.DISPLAY_CURSOR(
NULL,
NULL,
&#39;ALLSTATS LAST +PEEKED_BINDS&#39;
)
);

-- PostgreSQL: execute the query and report timing, I/O, and settings

&lt;span style=&quot;color: #ff79c6;&quot;&gt;EXPLAIN&lt;/span&gt; (ANALYZE, BUFFERS, SETTINGS) &lt;span style=&quot;color: #ff79c6;&quot;&gt;SELECT&lt;/span&gt; order_id,
status,
created_at &lt;span style=&quot;color: #ff79c6;&quot;&gt;FROM&lt;/span&gt; orders &lt;span style=&quot;color: #ff79c6;&quot;&gt;WHERE&lt;/span&gt; customer_id = 100245 &lt;span style=&quot;color: #ff79c6;&quot;&gt;AND&lt;/span&gt; created_at &amp;gt;= &lt;span style=&quot;color: #8be9fd;&quot;&gt;DATE&lt;/span&gt; &#39;2026-07-01&#39;; &lt;/span&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;&lt;code style=&quot;font-family: courier;&quot;&gt;EXPLAIN ANALYZE&lt;/code&gt; executes the statement; it does not merely estimate the plan. It should therefore be used carefully with slow queries and data-changing statements. Testing an &lt;code style=&quot;font-family: courier;&quot;&gt;UPDATE&lt;/code&gt; inside a transaction and issuing &lt;code style=&quot;font-family: courier;&quot;&gt;ROLLBACK&lt;/code&gt; does not protect against every possible side effect, such as external calls or non-transactional sequence changes.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;An execution-plan review should not automatically result in another index. Every additional index consumes storage, increases WAL or redo generation, and adds work to inserts, updates, and deletes. Sometimes the correct fix is refreshed statistics, a better predicate, improved partition pruning, or reducing the amount of data requested by the application.&lt;/p&gt;

&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;&lt;br /&gt;&lt;/h2&gt;&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;Capacity Alerts Must Predict Failure&lt;/h2&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Storage exhaustion remains one of the most preventable causes of database downtime. The usual problem is not the absence of monitoring, but monitoring that only reports the current percentage used.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;An Oracle Fast Recovery Area at 85% may remain stable for several weeks or fill within an hour during a large batch operation. PostgreSQL &lt;code style=&quot;font-family: courier;&quot;&gt;pg_wal&lt;/code&gt; may grow unexpectedly because archiving is failing, a replication slot is retaining WAL, or a standby is no longer consuming changes.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;A useful alert should consider current utilization, growth rate, time to full, and whether space can actually be reclaimed.&lt;/p&gt;

&lt;div style=&quot;background: rgb(40, 42, 54); border-color: gray; border-image: none; border-style: solid; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;&quot;&gt;
&lt;pre style=&quot;line-height: 125%; margin: 0px;&quot;&gt;&lt;span style=&quot;color: #f8f8f2; font-family: courier; font-size: medium; font-weight: normal;&quot;&gt;-- Oracle: Fast Recovery Area utilization

&lt;span style=&quot;color: #ff79c6;&quot;&gt;SELECT&lt;/span&gt; name,
ROUND(space_limit / 1024 / 1024 / 1024, 2) AS limit_gb,
ROUND(space_used / 1024 / 1024 / 1024, 2) AS used_gb,
ROUND(space_reclaimable / 1024 / 1024 / 1024, 2) AS reclaimable_gb,
ROUND(space_used * 100 / NULLIF(space_limit, 0), 2) AS used_pct &lt;span style=&quot;color: #ff79c6;&quot;&gt;FROM&lt;/span&gt; v$recovery_file_dest;

-- Oracle: archive destinations reporting an error or unusual status

&lt;span style=&quot;color: #ff79c6;&quot;&gt;SELECT&lt;/span&gt; dest_id,
status,
destination,
error &lt;span style=&quot;color: #ff79c6;&quot;&gt;FROM&lt;/span&gt; v$archive_dest_status &lt;span style=&quot;color: #ff79c6;&quot;&gt;WHERE&lt;/span&gt; status &amp;lt;&amp;gt; &#39;INACTIVE&#39; &lt;span style=&quot;color: #ff79c6;&quot;&gt;ORDER BY&lt;/span&gt; dest_id;

-- PostgreSQL: WAL archiving statistics

&lt;span style=&quot;color: #ff79c6;&quot;&gt;SELECT&lt;/span&gt; archived_count,
failed_count,
last_archived_wal,
last_archived_time,
last_failed_wal,
last_failed_time &lt;span style=&quot;color: #ff79c6;&quot;&gt;FROM&lt;/span&gt; pg_stat_archiver;

-- PostgreSQL primary: WAL retained by replication slots

&lt;span style=&quot;color: #ff79c6;&quot;&gt;SELECT&lt;/span&gt; slot_name,
slot_type,
active,
restart_lsn,
pg_size_pretty(
pg_wal_lsn_diff(pg_current_wal_lsn(), restart_lsn)
) AS retained_wal &lt;span style=&quot;color: #ff79c6;&quot;&gt;FROM&lt;/span&gt; pg_replication_slots &lt;span style=&quot;color: #ff79c6;&quot;&gt;WHERE&lt;/span&gt; restart_lsn &lt;span style=&quot;color: #ff79c6;&quot;&gt;IS NOT NULL&lt;/span&gt; &lt;span style=&quot;color: #ff79c6;&quot;&gt;ORDER BY&lt;/span&gt; pg_wal_lsn_diff(
pg_current_wal_lsn(),
restart_lsn
) &lt;span style=&quot;color: #ff79c6;&quot;&gt;DESC&lt;/span&gt;; &lt;/span&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;These checks are only the starting point. A production control must also define warning and critical thresholds, escalation ownership, and the expected response. An alert that reaches a mailbox nobody actively monitors is not a control.&lt;/p&gt;

&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;&lt;br /&gt;&lt;/h2&gt;&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;Production Access Should Limit the Damage&lt;/h2&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;When someone accidentally drops a production table, attention naturally turns to the person who executed the command. The more useful question is why one incorrect command was allowed to become a production outage.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Human production access should normally be:&lt;/p&gt;

&lt;ul style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;
  &lt;li&gt;Assigned through named accounts rather than shared credentials&lt;/li&gt;
  &lt;li&gt;Restricted to the permissions required for the operational role&lt;/li&gt;
  &lt;li&gt;Time-bound when elevated access is requested&lt;/li&gt;
  &lt;li&gt;Audited and associated with an approved activity&lt;/li&gt;
  &lt;li&gt;Separated from emergency break-glass access&lt;/li&gt;
  &lt;li&gt;Reviewed and removed when no longer required&lt;/li&gt;
&lt;/ul&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;DBAs should not be exempt from these controls. Permanent unrestricted access may be convenient, but it increases the impact of a compromised credential, an incorrect connection, or a command executed in the wrong terminal.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Simple safeguards also help. Different connection aliases, shell prompts, database banners, credential locations, and terminal colors can make the production environment visually distinct. They will not replace access control, but they can interrupt the path between a human mistake and a serious incident.&lt;/p&gt;

&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;&lt;br /&gt;&lt;/h2&gt;&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;A Rollback Script Is Not a Recovery Plan&lt;/h2&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Many change records contain a rollback section that says, “Restore the previous version.” That statement does not explain how to recover a partially completed database change.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Before approving a high-risk migration, I expect the implementation team to answer:&lt;/p&gt;

&lt;ul style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;
  &lt;li&gt;What condition will stop the implementation?&lt;/li&gt;
  &lt;li&gt;Which symptoms require rollback rather than roll-forward?&lt;/li&gt;
  &lt;li&gt;How will partially completed changes be identified?&lt;/li&gt;
  &lt;li&gt;What happens to transactions created after deployment begins?&lt;/li&gt;
  &lt;li&gt;How long will recovery take?&lt;/li&gt;
  &lt;li&gt;Who has authority to make the recovery decision?&lt;/li&gt;
&lt;/ul&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Oracle DDL normally performs implicit commits, so issuing &lt;code style=&quot;font-family: courier;&quot;&gt;ROLLBACK&lt;/code&gt; will not reverse a completed &lt;code style=&quot;font-family: courier;&quot;&gt;ALTER TABLE&lt;/code&gt; or &lt;code style=&quot;font-family: courier;&quot;&gt;DROP TABLE&lt;/code&gt;. PostgreSQL supports transactional behavior for much of its DDL, but a complete deployment may still include non-transactional operations, external systems, application releases, or data transformations that cannot be reversed cleanly.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;In some cases, rolling forward is safer than attempting to restore the old state. A renamed column can usually be changed back. Data discarded by a transformation may require a backup, export, shadow table, or purpose-built reconstruction process.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;For a major migration, the recovery procedure should be rehearsed with representative data volume. The exercise should measure lock duration, implementation time, recovery time, and the point after which reversal is no longer safe.&lt;/p&gt;

&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;&lt;br /&gt;&lt;/h2&gt;&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;Backup Success Does Not Prove Recoverability&lt;/h2&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;A green backup job confirms that a process completed. It does not prove that the database can be restored within the expected recovery time or to the required recovery point.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Oracle RMAN validation and PostgreSQL backup-manifest verification are useful controls:&lt;/p&gt;

&lt;div style=&quot;background: rgb(40, 42, 54); border-color: gray; border-image: none; border-style: solid; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;&quot;&gt;
&lt;pre style=&quot;line-height: 125%; margin: 0px;&quot;&gt;&lt;span style=&quot;color: #f8f8f2; font-family: courier; font-size: medium; font-weight: normal;&quot;&gt;# Oracle RMAN

RMAN&amp;gt; &lt;span style=&quot;color: #ff79c6;&quot;&gt;CROSSCHECK BACKUP&lt;/span&gt;;
RMAN&amp;gt; &lt;span style=&quot;color: #ff79c6;&quot;&gt;LIST EXPIRED BACKUP&lt;/span&gt;;
RMAN&amp;gt; &lt;span style=&quot;color: #ff79c6;&quot;&gt;RESTORE DATABASE VALIDATE&lt;/span&gt;;

# PostgreSQL base backup with a backup manifest

pg_verifybackup /backup/postgresql/basebackup &lt;/span&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;&lt;code style=&quot;font-family: courier;&quot;&gt;RESTORE DATABASE VALIDATE&lt;/code&gt; checks whether RMAN can locate and read the backup pieces needed for restoration. It does not replace restoring the database to another host, applying the required archived redo, and opening the recovered database.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Similarly, &lt;code style=&quot;font-family: courier;&quot;&gt;pg_verifybackup&lt;/code&gt; verifies a PostgreSQL base backup against its manifest. A complete exercise must restore the files into an isolated environment, provide the required WAL, start the instance, and validate representative application data.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;A useful restore drill records:&lt;/p&gt;

&lt;ul style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;
  &lt;li&gt;The recovery point that was actually achieved&lt;/li&gt;
  &lt;li&gt;Total restore and recovery time&lt;/li&gt;
  &lt;li&gt;Missing backup files, WAL, or archived redo&lt;/li&gt;
  &lt;li&gt;Required credentials, wallets, and encryption keys&lt;/li&gt;
  &lt;li&gt;Undocumented manual steps discovered during recovery&lt;/li&gt;
  &lt;li&gt;Application-level validation results&lt;/li&gt;
&lt;/ul&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Backups should be monitored every day. Recoverability should be demonstrated periodically.&lt;/p&gt;

&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;&lt;br /&gt;&lt;/h2&gt;&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;A Runbook Must Survive a 2 A.M. Incident&lt;/h2&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;A lengthy document stored in a knowledge portal is not automatically a useful runbook. During an incident, the on-call engineer needs a concise and tested procedure.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;A practical database runbook should contain:&lt;/p&gt;

&lt;ul style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;
  &lt;li&gt;The condition that triggers the procedure&lt;/li&gt;
  &lt;li&gt;Required access and prerequisites&lt;/li&gt;
  &lt;li&gt;Exact commands or actions&lt;/li&gt;
  &lt;li&gt;Expected output and validation checks&lt;/li&gt;
  &lt;li&gt;Stop or abort conditions&lt;/li&gt;
  &lt;li&gt;Recovery or reversal steps&lt;/li&gt;
  &lt;li&gt;Escalation contacts and ownership&lt;/li&gt;
  &lt;li&gt;Evidence that must be retained&lt;/li&gt;
  &lt;li&gt;The date the procedure was last tested&lt;/li&gt;
&lt;/ul&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Runbooks also expire. Hostnames change, credentials move, tools are upgraded, and support responsibilities shift between teams. Every incident, change rehearsal, and restore drill should feed corrections back into the procedure.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;The most valuable runbook is not the one with the best formatting. It is the one another engineer can follow safely without depending on undocumented knowledge held by a single person.&lt;/p&gt;

&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;&lt;br /&gt;&lt;/h2&gt;&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;Discipline Should Not Become Bureaucracy&lt;/h2&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Operational controls have a cost. Applying the same approval process to a read-only diagnostic query and a destructive production migration wastes time and encourages people to find shortcuts.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;The better approach is risk-based control. Low-risk and repeatable activities should be automated or pre-approved where appropriate. High-risk changes require deeper technical review, representative testing, clear abort criteria, and a rehearsed recovery path.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Emergency access should be fast enough to use during a genuine incident, while remaining controlled, temporary, and auditable. A good process reduces uncertainty and helps engineers work safely. It should not create paperwork that adds no protection.&lt;/p&gt;

&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;&lt;br /&gt;&lt;/h2&gt;&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;Common Questions&lt;/h2&gt;

&lt;h3 style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large;&quot;&gt;Can monitoring prevent every database outage?&lt;/h3&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;No. Monitoring cannot prevent hardware faults, software defects, or every unexpected workload pattern. It can, however, detect many developing conditions early enough to avoid downtime. Capacity growth, archive failures, replication lag, backup failures, and abnormal query behavior are good examples.&lt;/p&gt;

&lt;h3 style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large;&quot;&gt;Is adding an index always the safest performance fix?&lt;/h3&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;No. An index may improve one query while increasing storage usage and slowing data modifications. Check cardinality estimates, statistics, predicate design, partition pruning, and the volume of data returned before creating another index.&lt;/p&gt;

&lt;h3 style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large;&quot;&gt;How frequently should restore testing be performed?&lt;/h3&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;The schedule should reflect business criticality, recovery objectives, and the rate of platform change. Quarterly testing is a reasonable starting point for many important systems, but highly critical databases may require more frequent automated restore validation.&lt;/p&gt;

&lt;h3 style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large;&quot;&gt;Should every database change have a rollback script?&lt;/h3&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Every significant change needs a recovery strategy, but that strategy may be rollback, roll-forward, restoration, failover, or a combination of approaches. Forcing every change into a simple rollback template can create false confidence.&lt;/p&gt;

&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;&lt;br /&gt;&lt;/h2&gt;&lt;h2 style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;Final Thoughts&lt;/h2&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;When a database becomes unavailable, the immediate investigation naturally focuses on the technical symptom: exhausted storage, lock contention, a failed migration, or a deleted object.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;The more valuable question is what allowed that condition to reach production without being detected, prevented, or contained.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Reliable database platforms are built through repeated habits: reviewing execution plans, monitoring capacity trends, controlling production access, rehearsing changes, restoring backups, and maintaining procedures that engineers actually use.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Oracle, PostgreSQL, and other database engines provide excellent monitoring, recovery, and diagnostic capabilities. They cannot decide whether a team will apply those capabilities consistently.&lt;/p&gt;

&lt;p style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;The healthiest production environments are usually quiet, predictable, and deliberately boring. That is rarely an accident. It is the result of disciplined engineering.&lt;/p&gt;
</description><link>https://oracle-dba-help.blogspot.com/2026/07/the-outage-usually-begins-before.html</link><author>noreply@blogger.com (Nikhil Kotak)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1375587508974804970.post-7929300719867716679</guid><pubDate>Mon, 13 Jul 2026 06:33:00 +0000</pubDate><atom:updated>2026-07-13T14:33:00.118+08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Core DBA</category><category domain="http://www.blogger.com/atom/ns#">Interview Questions</category><title>RESETLOGS and Backups: Debunking a Common Oracle Myth</title><description>&lt;p&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;If you have ever recovered an Oracle database and opened it with &lt;/span&gt;&lt;span data-end=&quot;533&quot; data-start=&quot;520&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;RESETLOGS&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;, chances are someone whispered or shouted—the dreaded question: &lt;/span&gt;&lt;em data-end=&quot;637&quot; data-start=&quot;598&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;“Are all my old backups now useless?”&lt;/em&gt;&lt;span style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt; Lets set the record straight: in modern Oracle releases, your old backups are &lt;/span&gt;&lt;span data-end=&quot;743&quot; data-start=&quot;717&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;still very much usable&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;, and panicking is optional.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;1286&quot; data-start=&quot;775&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;In this post, I wil walk you through why this myth exists, how Oracle’s handling of RESETLOGS has evolved over the years, and what you should do to ensure your recovery strategy remains solid. We will cover the mechanics of RESETLOGS, explain the differences between pre-10g version and modern behaviour, and share some practical tips I have learned from managing production environments with terabytes of data. By the end, you you will understand why you can sleep a little easier after recovery and make smarter backup decisions.&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;p&gt;&lt;/p&gt;&lt;p data-end=&quot;1286&quot; data-start=&quot;775&quot;&gt;&lt;span style=&quot;color: #e06666; font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-size: x-large;&quot;&gt;How RESETLOGS Behaviour Evolved Over Time&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-end=&quot;1385&quot; data-section-id=&quot;1dlg4lr&quot; data-start=&quot;1338&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large; font-weight: normal;&quot;&gt;Before Oracle 10g: The Incarnation Headache&lt;/span&gt;&lt;/h3&gt;
&lt;p data-end=&quot;1526&quot; data-start=&quot;1386&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Back in the days of Oracle 9i and earlier, opening a database with RESETLOGS &lt;span data-end=&quot;1492&quot; data-start=&quot;1463&quot;&gt;created a new incarnation&lt;/span&gt;. This was a double-edged sword:&lt;/span&gt;&lt;/p&gt;
&lt;ul data-end=&quot;1804&quot; data-start=&quot;1528&quot;&gt;
&lt;li data-end=&quot;1675&quot; data-section-id=&quot;1hi57g&quot; data-start=&quot;1528&quot;&gt;
&lt;p data-end=&quot;1675&quot; data-start=&quot;1530&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Backups and archived redo logs from the previous incarnation &lt;span data-end=&quot;1621&quot; data-start=&quot;1591&quot;&gt;could not be reused easily&lt;/span&gt; unless you tracked incarnations in an RMAN catalog.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li data-end=&quot;1804&quot; data-section-id=&quot;1dx3er8&quot; data-start=&quot;1676&quot;&gt;
&lt;p data-end=&quot;1804&quot; data-start=&quot;1678&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;The standard practice was to &lt;span data-end=&quot;1757&quot; data-start=&quot;1707&quot;&gt;take a full backup immediately after RESETLOGS&lt;/span&gt; to avoid complications in future recoveries.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;1953&quot; data-start=&quot;1806&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Think of it as resetting a counter on your database without telling your backups—they became “confused” about which incarnation they belonged to.&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-end=&quot;2024&quot; data-section-id=&quot;gi27vx&quot; data-start=&quot;1955&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large; font-weight: normal;&quot;&gt;Oracle 10g and Later: Simplified Recovery Through RESETLOGS (SRR)&lt;/span&gt;&lt;/h3&gt;
&lt;p data-end=&quot;2189&quot; data-start=&quot;2025&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Oracle 10g introduced a game-changer called &lt;span data-end=&quot;2116&quot; data-start=&quot;2069&quot;&gt;Simplified Recovery Through RESETLOGS (SRR)&lt;/span&gt;. RMAN now automatically understands database incarnations. This means:&lt;/span&gt;&lt;/p&gt;
&lt;ul data-end=&quot;2453&quot; data-start=&quot;2191&quot;&gt;
&lt;li data-end=&quot;2281&quot; data-section-id=&quot;a7z1wz&quot; data-start=&quot;2191&quot;&gt;
&lt;p data-end=&quot;2281&quot; data-start=&quot;2193&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;span data-end=&quot;2218&quot; data-start=&quot;2193&quot;&gt;Pre-RESETLOGS backups&lt;/span&gt;, including level 0 and dependent incrementals, remain valid.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li data-end=&quot;2363&quot; data-section-id=&quot;7ond7v&quot; data-start=&quot;2282&quot;&gt;
&lt;p data-end=&quot;2363&quot; data-start=&quot;2284&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Existing restore scripts generally continue to work &lt;span data-end=&quot;2360&quot; data-start=&quot;2336&quot;&gt;without modification&lt;/span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li data-end=&quot;2453&quot; data-section-id=&quot;slrprq&quot; data-start=&quot;2364&quot;&gt;
&lt;p data-end=&quot;2453&quot; data-start=&quot;2366&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Your backup strategy doesn’t require that immediate panic-full-backup post-RESETLOGS.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;2603&quot; data-start=&quot;2455&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;From my experience, this feature alone has saved hours during disaster recovery drills in production environments with multiple terabytes of data.&lt;/span&gt;&lt;/p&gt;

&lt;h2 data-end=&quot;2641&quot; data-section-id=&quot;yih7ez&quot; data-start=&quot;2610&quot;&gt;&lt;span style=&quot;color: #e06666; font-family: Source Sans Pro; font-size: x-large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/h2&gt;&lt;h2 data-end=&quot;2641&quot; data-section-id=&quot;yih7ez&quot; data-start=&quot;2610&quot;&gt;&lt;span style=&quot;color: #e06666; font-family: Source Sans Pro; font-size: x-large;&quot;&gt;What RESETLOGS Actually Does&lt;/span&gt;&lt;/h2&gt;
&lt;p data-end=&quot;2703&quot; data-start=&quot;2643&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Understanding the mechanics helps clear up misconceptions:&lt;/span&gt;&lt;/p&gt;
&lt;ul data-end=&quot;3060&quot; data-start=&quot;2705&quot;&gt;
&lt;li data-end=&quot;2781&quot; data-section-id=&quot;ai5x3d&quot; data-start=&quot;2705&quot;&gt;
&lt;p data-end=&quot;2781&quot; data-start=&quot;2707&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;span data-end=&quot;2744&quot; data-start=&quot;2707&quot;&gt;Starts a new database incarnation&lt;/span&gt; and resets redo log sequence to 1.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li data-end=&quot;2889&quot; data-section-id=&quot;1d959bm&quot; data-start=&quot;2782&quot;&gt;
&lt;p data-end=&quot;2889&quot; data-start=&quot;2784&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;span data-end=&quot;2821&quot; data-start=&quot;2784&quot;&gt;Does not invalidate prior backups&lt;/span&gt;. They are still valid for recovery, depending on the incarnation.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li data-end=&quot;2989&quot; data-section-id=&quot;3xmlxv&quot; data-start=&quot;2890&quot;&gt;
&lt;p data-end=&quot;2989&quot; data-start=&quot;2892&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Archived logs from the parent incarnation are &lt;span data-end=&quot;2986&quot; data-start=&quot;2938&quot;&gt;usable only up to the RESETLOGS branch point&lt;/span&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li data-end=&quot;3060&quot; data-section-id=&quot;1rwgij0&quot; data-start=&quot;2990&quot;&gt;
&lt;p data-end=&quot;3060&quot; data-start=&quot;2992&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;span data-end=&quot;3040&quot; data-start=&quot;2992&quot;&gt;SCN (System Change Number) continues forward&lt;/span&gt;; it is not reset.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;3332&quot; data-start=&quot;3062&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;A practical example: in a recent client recovery, we performed a point-in-time recovery and opened the database with RESETLOGS. Using RMAN, we were able to restore from pre-RESETLOGS backups without a hitch. The key takeaway? Don’t assume RESETLOGS is a “backup killer.”&lt;/span&gt;&lt;/p&gt;
&lt;h2 data-end=&quot;3380&quot; data-section-id=&quot;2v6awx&quot; data-start=&quot;3339&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large; font-weight: normal;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/h2&gt;&lt;h2 data-end=&quot;3380&quot; data-section-id=&quot;2v6awx&quot; data-start=&quot;3339&quot;&gt;&lt;span style=&quot;color: #e06666; font-family: Source Sans Pro; font-size: x-large;&quot;&gt;Best Practices for Backup Verification&lt;/span&gt;&lt;/h2&gt;
&lt;p data-end=&quot;3484&quot; data-start=&quot;3382&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Even though RESETLOGS doesn’t invalidate backups, always &lt;span data-end=&quot;3467&quot; data-start=&quot;3439&quot;&gt;confirm backup usability&lt;/span&gt; post-recovery:&lt;/span&gt;&lt;/p&gt;
&lt;ul data-end=&quot;3705&quot; data-start=&quot;3486&quot;&gt;
&lt;li data-end=&quot;3550&quot; data-section-id=&quot;1gxcrgu&quot; data-start=&quot;3486&quot;&gt;
&lt;p data-end=&quot;3550&quot; data-start=&quot;3488&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Use &lt;code data-end=&quot;3505&quot; data-start=&quot;3492&quot;&gt;LIST BACKUP&lt;/code&gt; in RMAN to see what backups are available.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li data-end=&quot;3610&quot; data-section-id=&quot;cwgp3h&quot; data-start=&quot;3551&quot;&gt;
&lt;p data-end=&quot;3610&quot; data-start=&quot;3553&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Use &lt;code data-end=&quot;3567&quot; data-start=&quot;3557&quot;&gt;VALIDATE&lt;/code&gt; to check if backups are actually usable.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li data-end=&quot;3705&quot; data-section-id=&quot;pz79za&quot; data-start=&quot;3611&quot;&gt;
&lt;p data-end=&quot;3705&quot; data-start=&quot;3613&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Maintain a clear recovery plan documenting which backups correspond to which incarnations.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;3843&quot; data-start=&quot;3707&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;This approach avoids unnecessary panic backups, keeps your storage clean, and ensures you can recover efficiently when it really counts.&lt;/span&gt;&lt;/p&gt;

&lt;h2 data-end=&quot;3868&quot; data-section-id=&quot;3auoiu&quot; data-start=&quot;3850&quot;&gt;&lt;span style=&quot;color: #e06666; font-family: Source Sans Pro; font-size: x-large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/h2&gt;&lt;h2 data-end=&quot;3868&quot; data-section-id=&quot;3auoiu&quot; data-start=&quot;3850&quot;&gt;&lt;span style=&quot;color: #e06666; font-family: Source Sans Pro; font-size: x-large;&quot;&gt;Quick Takeaways&lt;/span&gt;&lt;/h2&gt;
&lt;ul data-end=&quot;4409&quot; data-start=&quot;3870&quot;&gt;
&lt;li data-end=&quot;3949&quot; data-section-id=&quot;1o27dq6&quot; data-start=&quot;3870&quot;&gt;
&lt;p data-end=&quot;3949&quot; data-start=&quot;3872&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;RESETLOGS &lt;span data-end=&quot;3910&quot; data-start=&quot;3882&quot;&gt;starts a new incarnation&lt;/span&gt; but does not invalidate old backups.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li data-end=&quot;4043&quot; data-section-id=&quot;15z6snx&quot; data-start=&quot;3950&quot;&gt;
&lt;p data-end=&quot;4043&quot; data-start=&quot;3952&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Pre-10g databases required immediate full backups post-RESETLOGS; modern releases do not.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li data-end=&quot;4125&quot; data-section-id=&quot;1qhkn4g&quot; data-start=&quot;4044&quot;&gt;
&lt;p data-end=&quot;4125&quot; data-start=&quot;4046&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;RMAN understands database incarnations from 10g onward, simplifying recovery.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li data-end=&quot;4214&quot; data-section-id=&quot;6ixtqf&quot; data-start=&quot;4126&quot;&gt;
&lt;p data-end=&quot;4214&quot; data-start=&quot;4128&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Archived logs from the parent incarnation are usable only up to the RESETLOGS point.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li data-end=&quot;4272&quot; data-section-id=&quot;itclkc&quot; data-start=&quot;4215&quot;&gt;
&lt;p data-end=&quot;4272&quot; data-start=&quot;4217&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Always &lt;span data-end=&quot;4244&quot; data-start=&quot;4224&quot;&gt;validate backups&lt;/span&gt; post-recovery using RMAN.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li data-end=&quot;4332&quot; data-section-id=&quot;uiwf5b&quot; data-start=&quot;4273&quot;&gt;
&lt;p data-end=&quot;4332&quot; data-start=&quot;4275&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Proper understanding reduces unnecessary panic backups.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li data-end=&quot;4409&quot; data-section-id=&quot;igv2co&quot; data-start=&quot;4333&quot;&gt;
&lt;p data-end=&quot;4409&quot; data-start=&quot;4335&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Knowledge of incarnations can save hours in large production recoveries.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 data-end=&quot;4451&quot; data-section-id=&quot;12jv6s9&quot; data-start=&quot;4416&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large; font-weight: normal;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/h2&gt;&lt;h2 data-end=&quot;4451&quot; data-section-id=&quot;12jv6s9&quot; data-start=&quot;4416&quot;&gt;&lt;span style=&quot;color: #e06666; font-family: Source Sans Pro; font-size: x-large;&quot;&gt;FAQs About RESETLOGS and Backups&lt;/span&gt;&lt;/h2&gt;
&lt;p data-end=&quot;4613&quot; data-start=&quot;4453&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;span data-end=&quot;4511&quot; data-start=&quot;4453&quot;&gt;1. Are old backups completely useless after RESETLOGS?&lt;/span&gt;&lt;br data-end=&quot;4514&quot; data-start=&quot;4511&quot; /&gt;
No. RMAN in Oracle 10g and later understands incarnations, so pre-RESETLOGS backups remain valid.&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;4788&quot; data-start=&quot;4615&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;span data-end=&quot;4682&quot; data-start=&quot;4615&quot;&gt;2. Do I need to take a full backup immediately after RESETLOGS?&lt;/span&gt;&lt;br data-end=&quot;4685&quot; data-start=&quot;4682&quot; /&gt;
Not mandatory in 10g or later. However, it’s still a good practice for clarity and future recoveries.&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;4936&quot; data-start=&quot;4790&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;span data-end=&quot;4857&quot; data-start=&quot;4790&quot;&gt;3. What happens to archived logs from the previous incarnation?&lt;/span&gt;&lt;br data-end=&quot;4860&quot; data-start=&quot;4857&quot; /&gt;
They are usable only up to the branch point where RESETLOGS was performed.&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;5037&quot; data-start=&quot;4938&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;span data-end=&quot;4971&quot; data-start=&quot;4938&quot;&gt;4. Does RESETLOGS reset SCNs?&lt;/span&gt;&lt;br data-end=&quot;4974&quot; data-start=&quot;4971&quot; /&gt;
No. SCNs continue forward; only redo log sequences are reset.&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;5187&quot; data-start=&quot;5039&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;span data-end=&quot;5096&quot; data-start=&quot;5039&quot;&gt;5. How can I verify backup usability after RESETLOGS?&lt;/span&gt;&lt;br data-end=&quot;5099&quot; data-start=&quot;5096&quot; /&gt;
Use RMAN commands &lt;code data-end=&quot;5130&quot; data-start=&quot;5117&quot;&gt;LIST BACKUP&lt;/code&gt; and &lt;code data-end=&quot;5145&quot; data-start=&quot;5135&quot;&gt;VALIDATE&lt;/code&gt; to confirm backups are intact and usable.&lt;/span&gt;&lt;/p&gt;

&lt;h2 data-end=&quot;5207&quot; data-section-id=&quot;8dtpi&quot; data-start=&quot;5194&quot;&gt;&lt;span style=&quot;color: #e06666; font-family: Source Sans Pro; font-size: x-large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/h2&gt;&lt;h2 data-end=&quot;5207&quot; data-section-id=&quot;8dtpi&quot; data-start=&quot;5194&quot;&gt;&lt;span style=&quot;color: #e06666; font-family: Source Sans Pro; font-size: x-large;&quot;&gt;Conclusion&lt;/span&gt;&lt;/h2&gt;
&lt;p data-end=&quot;5581&quot; data-start=&quot;5209&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Understanding RESETLOGS is essential for any DBA managing Oracle environments. Misconceptions about invalidated backups can lead to unnecessary panic, extra work, and even wasted storage. Modern Oracle releases, starting from 10g, have simplified recovery through SRR, allowing pre-RESETLOGS backups to remain usable and restore scripts to function without modification.&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;5985&quot; data-start=&quot;5583&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;The key takeaway: always validate your backups, understand database incarnations, and maintain a clear recovery strategy. With these practices, you can confidently perform recoveries, minimize downtime, and ensure your disaster recovery plan is robust. As a DBA, having this clarity not only saves time but also builds trust with stakeholders who rely on the database for mission-critical operations.&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;6129&quot; data-start=&quot;5987&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;And remember, after RESETLOGS, your backups are like your favourite coffee mug - they don’t suddenly disappear, even if the counter is reset.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;

&lt;h2 data-end=&quot;6156&quot; data-section-id=&quot;1g2cqd8&quot; data-start=&quot;6136&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large; font-weight: normal;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/h2&gt;&lt;h2 data-end=&quot;6156&quot; data-section-id=&quot;1g2cqd8&quot; data-start=&quot;6136&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;Found this useful? Share it with your DBA peers and leave a comment about your own RESETLOGS experiences. Did this myth trip you up in production before? Let’s discuss and learn together!&lt;/span&gt;&lt;/h2&gt;</description><link>https://oracle-dba-help.blogspot.com/2026/07/resetlogs-and-backups-debunking-common.html</link><author>noreply@blogger.com (Nikhil Kotak)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1375587508974804970.post-5866920547094314271</guid><pubDate>Sat, 04 Jul 2026 13:18:00 +0000</pubDate><atom:updated>2026-07-04T21:18:00.125+08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Tuning</category><title>DB Time vs CPU: The Metric Most DBAs Ignore</title><description>&lt;p&gt;
  &lt;span style=&quot;font-family: Source Sans Pro;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;If &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;you &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;have &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;worked &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;in &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;production &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;environments &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;long &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;enough, &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;you &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;have &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;probably &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;seen &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;this &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;situation &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;before.&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;An &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;alert &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;fires &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;in &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;the &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;middle &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;of your daily shift appears.&lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;. as&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;CPU &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;is &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;at &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;90%. &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;The &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;database &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;must &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;be &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;overloaded.&quot;&amp;nbsp;&lt;/span&gt;
&lt;/p&gt;
&lt;p data-end=&quot;600&quot; data-start=&quot;481&quot;&gt;
  &lt;span style=&quot;font-family: Source Sans Pro;&quot;&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;Infrastructure &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;teams &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;immediately &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;start &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;discussing &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;scaling &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;CPU, &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;adding &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;cores, &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;or &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;moving &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;the &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;database &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;to &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;a &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;bigger &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;server.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;But &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;experienced &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;DBAs &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;know &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;something &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;important:&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;High &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;CPU &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;utilization &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;does &lt;/span&gt;&lt;span data-end=&quot;734&quot; data-start=&quot;676&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;not &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;automatically &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;mean &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;the &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;database &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;is &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;the &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;bottleneck.&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p data-end=&quot;907&quot; data-start=&quot;736&quot;&gt;
  &lt;span style=&quot;font-family: Source Sans Pro;&quot;&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;In &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;many &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;real-&lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;world &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;incidents, &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;CPU &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;is &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;only &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;a &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;symptom &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;of &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;an &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;underlying &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;issue - &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;inefficient &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;SQL, &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;excessive &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;I/&lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;O, &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;application &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;loops, &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;or &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;internal &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;contention &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;inside &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;the &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;database.&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p data-end=&quot;1012&quot; data-start=&quot;909&quot;&gt;
  &lt;span style=&quot;font-family: Source Sans Pro;&quot;&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;This &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;is &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;where &lt;/span&gt;&lt;span data-end=&quot;934&quot; data-start=&quot;923&quot;&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;DB &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;Time&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt; &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;becomes &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;one &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;of &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;the &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;most &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;powerful &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;metrics &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;for &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;diagnosing &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;performance &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;problems.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;While &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;CPU &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;tells &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;you &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;what &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;the &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;operating &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;system &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;is &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;doing, &lt;/span&gt;&lt;span data-end=&quot;1140&quot; data-start=&quot;1070&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;DB &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;Time &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;reveals &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;where &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;database &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;sessions &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;are &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;actually &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;spending &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;time&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt; - &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;on &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;CPU, &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;waiting &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;for &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;I/&lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;O, &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;blocked &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;by &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;locks, &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;or &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;stuck &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;waiting &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;on &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;cluster &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;communication.&lt;/span&gt;
&lt;/p&gt;
&lt;p data-end=&quot;1456&quot; data-start=&quot;1230&quot;&gt;
  &lt;span style=&quot;font-family: Source Sans Pro;&quot;&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;In &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;this &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;article &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;we &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;will &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;explore &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;how &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;experienced &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;Oracle &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;DBAs &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;interpret &lt;/span&gt;&lt;span data-end=&quot;1318&quot; data-start=&quot;1300&quot;&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;CPU &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;vs &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;DB &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;Time&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;, &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;how &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;to &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;diagnose &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;performance &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;incidents &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;properly, &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;and &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;why &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;understanding &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;this &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;relationship &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;can &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;prevent &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;unnecessary &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;infrastructure &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;upgrades.&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p data-end=&quot;1456&quot; data-start=&quot;1230&quot;&gt;
  &lt;span style=&quot;font-family: Source Sans Pro;&quot;&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;h1 data-end=&quot;1496&quot; data-section-id=&quot;2z1qsg&quot; data-start=&quot;1463&quot;&gt;
  &lt;span style=&quot;color: #e06666; font-family: Source Sans Pro;&quot;&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;Understanding &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;DB &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;Time &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;in &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;Oracle&lt;/span&gt;&lt;/span&gt;
&lt;/h1&gt;
&lt;p data-end=&quot;1591&quot; data-start=&quot;1498&quot;&gt;
  &lt;span style=&quot;font-family: Source Sans Pro;&quot;&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;Before &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;analyzing &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;CPU &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;usage, &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;it &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;is &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;important &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;to &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;understand &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;what &lt;/span&gt;&lt;span data-end=&quot;1572&quot; data-start=&quot;1561&quot;&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;DB &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;Time&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt; &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;really &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;represents.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p data-end=&quot;1591&quot; data-start=&quot;1498&quot;&gt;
  &lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;DB &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;Time &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;is &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;the &lt;/span&gt;&lt;span data-end=&quot;1660&quot; data-start=&quot;1608&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;total &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;time &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;spent &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;by &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;all &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;active &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;database &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;sessions&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;, &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;including:&lt;/span&gt;
&lt;/p&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;
  &lt;li&gt;
    &lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;CPU &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;processing&lt;/span&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;Waiting &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;for &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;disk &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;I/&lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;O&lt;/span&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;Lock &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;contention&lt;/span&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;Network &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;waits&lt;/span&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;RAC &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;interconnect &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;communication&lt;/span&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;span style=&quot;font-family: Source Sans Pro;&quot;&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;Internal &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;database &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;operations&lt;/span&gt;&lt;/span&gt;
  &lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;1811&quot; data-start=&quot;1783&quot; style=&quot;text-align: left;&quot;&gt;&lt;/p&gt;
&lt;ul data-end=&quot;1811&quot; data-start=&quot;1674&quot;&gt;&lt;/ul&gt;
&lt;p data-end=&quot;1829&quot; data-start=&quot;1813&quot;&gt;
  &lt;span style=&quot;font-family: Source Sans Pro;&quot;&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;In &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;simple &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;terms:&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;DB &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;Time = &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;Time &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;spent &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;doing &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;work + &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;Time &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;spent &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;waiting&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p data-end=&quot;1991&quot; data-start=&quot;1889&quot;&gt;
  &lt;span style=&quot;font-family: Source Sans Pro;&quot;&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;This &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;metric &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;sits &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;at &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;the &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;center &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;of &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;Oracle &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;performance &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;diagnostics &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;and &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;is &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;heavily &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;used &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;in &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;tools &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;such &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;as:&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;
  &lt;li&gt;
    &lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;AWR &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;Reports&lt;/span&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;ASH (&lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;Active &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;Session &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;History)&lt;/span&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;span style=&quot;font-family: Source Sans Pro;&quot;&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;Oracle &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;Enterprise &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;Manager&lt;/span&gt;&lt;/span&gt;
  &lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;2071&quot; data-start=&quot;2044&quot; style=&quot;text-align: left;&quot;&gt;&lt;/p&gt;
&lt;ul data-end=&quot;2071&quot; data-start=&quot;1993&quot;&gt;&lt;/ul&gt;
&lt;p data-end=&quot;2163&quot; data-start=&quot;2073&quot;&gt;
  &lt;span style=&quot;font-family: Source Sans Pro;&quot;&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;If &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;DB &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;Time &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;is &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: red;&quot;&gt;high&lt;/span&gt;&lt;/b&gt;, &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;database &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;sessions &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;are &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;either &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;consuming &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;CPU &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;or &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;waiting &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;on &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;a &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;bottleneck.&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p data-end=&quot;2230&quot; data-start=&quot;2165&quot;&gt;
  &lt;span style=&quot;font-family: Source Sans Pro;&quot;&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;If &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;DB &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;Time &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;is &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;&lt;span style=&quot;color: #6aa84f;&quot;&gt;&lt;b&gt;low&lt;/b&gt;&lt;/span&gt;, &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;the &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;database &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;is &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;usually &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;not &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;the &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;primary &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;issue.&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;h3 data-end=&quot;2261&quot; data-section-id=&quot;cnafhd&quot; data-start=&quot;2232&quot;&gt;
  &lt;span style=&quot;font-family: Source Sans Pro; font-weight: normal;&quot;&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/h3&gt;
&lt;h3 data-end=&quot;2261&quot; data-section-id=&quot;cnafhd&quot; data-start=&quot;2232&quot;&gt;
  &lt;span style=&quot;font-family: Source Sans Pro;&quot;&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;Example:&amp;nbsp;&lt;/span&gt;&lt;!--HTML generated using hilite.me--&gt;&lt;/span&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;Checking&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;DB&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;Time&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;&lt;h3 data-end=&quot;2261&quot; data-section-id=&quot;cnafhd&quot; data-start=&quot;2232&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro;&quot;&gt;&lt;div style=&quot;background: rgb(240, 240, 240); border-color: gray; border-image: initial; border-style: solid; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;&quot;&gt;&lt;pre style=&quot;line-height: 125%; margin: 0px;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;span style=&quot;color: #007020; font-weight: bold;&quot;&gt;SELECT&lt;/span&gt;&lt;span style=&quot;color: #bbbbbb;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #666666;&quot;&gt;*&lt;/span&gt;
&lt;span style=&quot;color: #007020; font-weight: bold;&quot;&gt;FROM&lt;/span&gt;&lt;span style=&quot;color: #bbbbbb;&quot;&gt; &lt;/span&gt;dba_hist_sys_time_model
&lt;span style=&quot;color: #007020; font-weight: bold;&quot;&gt;WHERE&lt;/span&gt;&lt;span style=&quot;color: #bbbbbb;&quot;&gt; &lt;/span&gt;stat_name&lt;span style=&quot;color: #bbbbbb;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #666666;&quot;&gt;=&lt;/span&gt;&lt;span style=&quot;color: #bbbbbb;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #4070a0;&quot;&gt;&#39;DB time&#39;&lt;/span&gt;;&lt;/pre&gt;&lt;/div&gt;&lt;/span&gt;&lt;/h3&gt;&lt;pre class=&quot;overflow-visible! px-0!&quot; data-end=&quot;2340&quot; data-start=&quot;2263&quot;&gt;&lt;div class=&quot;relative w-full mt-4 mb-1&quot;&gt;&lt;div class=&quot;relative&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;
&lt;p data-end=&quot;2454&quot; data-start=&quot;2342&quot;&gt;
  &lt;span style=&quot;font-family: Source Sans Pro;&quot;&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;This &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;view &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;helps &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;you &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;understand &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;how &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;much &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;time &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;the &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;database &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;has &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;spent &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;processing &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;workload &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;during &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;a &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;given &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;interval.&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;h1 data-end=&quot;2652&quot; data-section-id=&quot;1x0g667&quot; data-start=&quot;2605&quot;&gt;
  &lt;span style=&quot;color: #e06666; font-family: Source Sans Pro;&quot;&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/h1&gt;
&lt;h1 data-end=&quot;2652&quot; data-section-id=&quot;1x0g667&quot; data-start=&quot;2605&quot;&gt;
  &lt;span style=&quot;color: #e06666; font-family: Source Sans Pro;&quot;&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;How &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;Experienced &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;DBAs &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;Interpret &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;CPU &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;vs &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;DB &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;Time&lt;/span&gt;&lt;/span&gt;
&lt;/h1&gt;
&lt;p data-end=&quot;2749&quot; data-start=&quot;2654&quot;&gt;
  &lt;span style=&quot;font-family: Source Sans Pro;&quot;&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;One &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;of &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;the &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;most &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;effective &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;troubleshooting &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;techniques &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;is &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;correlating &lt;/span&gt;&lt;span data-end=&quot;2748&quot; data-start=&quot;2722&quot;&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;CPU &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;usage &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;with &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;DB &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;Time&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;Looking &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;at &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;either &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;metric &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;alone &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;can &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;easily &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;lead &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;to &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;incorrect &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;conclusions.&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;Let &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;us &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;look &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;at &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;a &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;few &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;patterns &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;commonly &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;seen &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;in &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;production &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;environments.&lt;/span&gt;
&lt;/p&gt;
&lt;p data-end=&quot;2749&quot; data-start=&quot;2654&quot;&gt;
  &lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;h2 data-end=&quot;2941&quot; data-section-id=&quot;1sicfpa&quot; data-start=&quot;2903&quot;&gt;
  &lt;span style=&quot;color: #6fa8dc; font-family: Source Sans Pro;&quot;&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;Scenario &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;1: &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;High &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;CPU + &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;High &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;DB &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;Time&lt;/span&gt;&lt;/span&gt;
&lt;/h2&gt;
&lt;p data-end=&quot;3008&quot; data-start=&quot;2943&quot;&gt;
  &lt;span style=&quot;font-family: Source Sans Pro;&quot;&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;This &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;situation &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;usually &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;indicates &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;a &lt;/span&gt;&lt;span data-end=&quot;3007&quot; data-start=&quot;2978&quot;&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;database &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;workload &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;problem&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;.&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p data-end=&quot;3100&quot; data-start=&quot;3010&quot;&gt;
  &lt;span style=&quot;font-family: Source Sans Pro;&quot;&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;When &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;both &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;metrics &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;increase &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;together, &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;the &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;database &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;is &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;actively &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;processing &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;a &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;heavy &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;workload.&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p data-end=&quot;3124&quot; data-start=&quot;3102&quot;&gt;
  &lt;span style=&quot;font-family: Source Sans Pro;&quot;&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;Common &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;causes &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;include:&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;
  &lt;li&gt;
    &lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;Inefficient &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;SQL &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;queries&lt;/span&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;Missing &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;indexes&lt;/span&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;Excessive &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;parsing&lt;/span&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;Poor &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;execution &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;plans&lt;/span&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;Statistics &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;issues&lt;/span&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;span style=&quot;font-family: Source Sans Pro;&quot;&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;Cardinality &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;estimation &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;errors&lt;/span&gt;&lt;/span&gt;
  &lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;3264&quot; data-start=&quot;3235&quot; style=&quot;text-align: left;&quot;&gt;&lt;/p&gt;
&lt;ul data-end=&quot;3264&quot; data-start=&quot;3126&quot;&gt;&lt;/ul&gt;
&lt;p data-end=&quot;3383&quot; data-start=&quot;3266&quot;&gt;
  &lt;span style=&quot;font-family: Source Sans Pro;&quot;&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;In &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;many &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;production &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;systems, &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;a &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;single &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;inefficient &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;query &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;executed &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;thousands &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;of &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;times &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;can &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;push &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;CPU &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;usage &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;extremely &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;high.&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;h3 data-end=&quot;3416&quot; data-section-id=&quot;1jqovx9&quot; data-start=&quot;3385&quot;&gt;
  &lt;span style=&quot;color: #444444; font-family: Source Sans Pro;&quot;&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;Typical &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;Investigation &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;Steps&lt;/span&gt;&lt;/span&gt;
&lt;/h3&gt;
&lt;p data-end=&quot;3452&quot; data-start=&quot;3421&quot; style=&quot;text-align: left;&quot;&gt;&lt;/p&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;
  &lt;li&gt;
    &lt;span style=&quot;font-family: Source Sans Pro;&quot;&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;Identify &lt;/span&gt;&lt;span data-end=&quot;3452&quot; data-start=&quot;3430&quot;&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;Top &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;SQL &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;by &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;DB &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;Time&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;Review &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;execution &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;plans&lt;/span&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;Validate &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;indexing &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;strategy&lt;/span&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;Check &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;statistics &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;freshness&lt;/span&gt;
  &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p data-end=&quot;3554&quot; data-start=&quot;3540&quot;&gt;
  &lt;span style=&quot;font-family: Source Sans Pro;&quot;&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;Example &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;query:&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;pre class=&quot;overflow-visible! px-0!&quot; data-end=&quot;3643&quot; data-start=&quot;3556&quot;&gt;&lt;div class=&quot;relative w-full mt-4 mb-1&quot;&gt;&lt;div&gt;&lt;div class=&quot;relative&quot;&gt;&lt;div class=&quot;h-full min-h-0 min-w-0&quot;&gt;&lt;div class=&quot;h-full min-h-0 min-w-0&quot;&gt;&lt;div class=&quot;border border-token-border-light border-radius-3xl corner-superellipse/1.1 rounded-3xl&quot;&gt;&lt;div class=&quot;h-full w-full border-radius-3xl bg-token-bg-elevated-secondary corner-superellipse/1.1 overflow-clip rounded-3xl lxnfua_clipPathFallback&quot;&gt;&lt;div class=&quot;pointer-events-none absolute inset-x-4 top-12 bottom-4&quot;&gt;&lt;div class=&quot;pointer-events-none sticky z-40 shrink-0 z-1!&quot;&gt;&lt;div class=&quot;sticky bg-token-border-light&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div class=&quot;relative z-0 flex max-w-full&quot;&gt;&lt;div class=&quot;q9tKkq_viewer cm-editor z-10 light:cm-light dark:cm-light flex h-full w-full flex-col items-stretch ͼ5 ͼj&quot; dir=&quot;ltr&quot; id=&quot;code-block-viewer&quot;&gt;&lt;div class=&quot;cm-scroller&quot;&gt;&lt;div class=&quot;cm-content q9tKkq_readonly&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro;&quot;&gt;&lt;span class=&quot;ͼ8&quot;&gt;SELECT&lt;/span&gt; sql_id, elapsed_time, cpu_time&lt;br /&gt;&lt;span class=&quot;ͼ8&quot;&gt;FROM&lt;/span&gt; v$&lt;span class=&quot;ͼ8&quot;&gt;sql&lt;/span&gt;&lt;br /&gt;&lt;span class=&quot;ͼ8&quot;&gt;ORDER&lt;/span&gt; &lt;span class=&quot;ͼ8&quot;&gt;BY&lt;/span&gt; elapsed_time &lt;span class=&quot;ͼ8&quot;&gt;DESC&lt;/span&gt;;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;
&lt;p data-end=&quot;3713&quot; data-start=&quot;3645&quot;&gt;
  &lt;span style=&quot;font-family: Source Sans Pro;&quot;&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;Fixing &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;a &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;bad &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;execution &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;plan &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;can &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;often &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;reduce &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;CPU &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;usage &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;dramatically.&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;

&lt;h2 data-end=&quot;3851&quot; data-section-id=&quot;8rxy7b&quot; data-start=&quot;3814&quot;&gt;
  &lt;span style=&quot;color: #6fa8dc; font-family: Source Sans Pro;&quot;&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/h2&gt;
&lt;h2 data-end=&quot;3851&quot; data-section-id=&quot;8rxy7b&quot; data-start=&quot;3814&quot;&gt;
  &lt;span style=&quot;color: #6fa8dc; font-family: Source Sans Pro;&quot;&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;Scenario &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;2: &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;High &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;CPU + &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;Low &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;DB &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;Time&lt;/span&gt;&lt;/span&gt;
&lt;/h2&gt;
&lt;p data-end=&quot;3902&quot; data-start=&quot;3853&quot;&gt;
  &lt;span style=&quot;font-family: Source Sans Pro;&quot;&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;This &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;is &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;where &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;many &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;teams &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;misdiagnose &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;the &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;problem.&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p data-end=&quot;4010&quot; data-start=&quot;3904&quot;&gt;
  &lt;span style=&quot;font-family: Source Sans Pro;&quot;&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;If &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;CPU &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;usage &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;is &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;high &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;but &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;DB &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;Time &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;remains &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;relatively &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;low, &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;the &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;database &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;may &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;not &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;be &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;the &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;main &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;consumer &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;of &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;CPU.&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p data-end=&quot;4036&quot; data-start=&quot;4012&quot;&gt;
  &lt;span style=&quot;font-family: Source Sans Pro;&quot;&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;Possible &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;causes &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;include:&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;
  &lt;li&gt;
    &lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;Application &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;loops &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;repeatedly &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;calling &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;the &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;database&lt;/span&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;Connection &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;storms&lt;/span&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;Middleware &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;misconfiguration&lt;/span&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;JVM &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;issues&lt;/span&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;span style=&quot;font-family: Source Sans Pro;&quot;&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;Other &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;processes &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;on &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;the &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;server &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;consuming &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;CPU&lt;/span&gt;&lt;/span&gt;
  &lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;4198&quot; data-start=&quot;4155&quot; style=&quot;text-align: left;&quot;&gt;&lt;/p&gt;
&lt;ul data-end=&quot;4198&quot; data-start=&quot;4038&quot;&gt;&lt;/ul&gt;
&lt;p data-end=&quot;4312&quot; data-start=&quot;4200&quot;&gt;
  &lt;span style=&quot;font-family: Source Sans Pro;&quot;&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;In &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;these &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;situations, &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;the &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;database &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;becomes &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;a &lt;/span&gt;&lt;span data-end=&quot;4284&quot; data-start=&quot;4244&quot;&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;victim &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;of &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;external &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;workload &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;patterns&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt; &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;rather &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;than &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;the &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;root &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;cause.&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p data-end=&quot;4413&quot; data-start=&quot;4314&quot;&gt;
  &lt;span style=&quot;font-family: Source Sans Pro;&quot;&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;That &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;is &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;why &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;DBAs &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;must &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;always &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;correlate &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;database &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;metrics &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;with &lt;/span&gt;&lt;span data-end=&quot;4412&quot; data-start=&quot;4375&quot;&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;operating &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;system &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;level &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;monitoring&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p data-end=&quot;4413&quot; data-start=&quot;4314&quot;&gt;
  &lt;span style=&quot;font-family: Source Sans Pro;&quot;&gt;&lt;span data-end=&quot;4412&quot; data-start=&quot;4375&quot;&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;h2 data-end=&quot;4581&quot; data-section-id=&quot;mcio06&quot; data-start=&quot;4544&quot;&gt;
  &lt;span style=&quot;color: #6fa8dc; font-family: Source Sans Pro;&quot;&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;Scenario &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;3: &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;Low &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;CPU + &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;High &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;DB &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;Time&lt;/span&gt;&lt;/span&gt;
&lt;/h2&gt;
&lt;p data-end=&quot;4680&quot; data-start=&quot;4583&quot;&gt;
  &lt;span style=&quot;font-family: Source Sans Pro;&quot;&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;This &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;pattern &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;usually &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;indicates &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;that &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;sessions &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;are &lt;/span&gt;&lt;span data-end=&quot;4679&quot; data-start=&quot;4632&quot;&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;waiting &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;rather &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;than &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;actively &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;executing &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;work&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;.&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p data-end=&quot;4705&quot; data-start=&quot;4682&quot;&gt;
  &lt;span style=&quot;font-family: Source Sans Pro;&quot;&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;Typical &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;causes &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;include:&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;h3 data-end=&quot;4726&quot; data-section-id=&quot;1resltn&quot; data-start=&quot;4707&quot;&gt;
  &lt;span style=&quot;font-family: Source Sans Pro;&quot;&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;I/&lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;O &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;Bottlenecks&lt;/span&gt;&lt;/span&gt;
&lt;/h3&gt;
&lt;blockquote style=&quot;border: none; margin: 0px 0px 0px 40px; padding: 0px; text-align: left;&quot;&gt;
  &lt;p data-end=&quot;4755&quot; data-start=&quot;4728&quot;&gt;
    &lt;span style=&quot;font-family: Source Sans Pro;&quot;&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;Common &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;wait &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;events &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;include:&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;db file sequential read &amp;amp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;db file scattered read&lt;/span&gt;
  &lt;/p&gt;
  &lt;p data-end=&quot;4854&quot; data-start=&quot;4813&quot;&gt;
    &lt;span style=&quot;font-family: Source Sans Pro;&quot;&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;These &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;usually &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;indicate &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;heavy &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;disk &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;access.&lt;/span&gt;&lt;/span&gt;
  &lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3 data-end=&quot;4875&quot; data-section-id=&quot;1gzzkuk&quot; data-start=&quot;4856&quot;&gt;
  &lt;span style=&quot;font-family: Source Sans Pro;&quot;&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/h3&gt;
&lt;h3 data-end=&quot;4875&quot; data-section-id=&quot;1gzzkuk&quot; data-start=&quot;4856&quot;&gt;
  &lt;span style=&quot;font-family: Source Sans Pro;&quot;&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;Lock &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;Contention&lt;/span&gt;&lt;/span&gt;
&lt;/h3&gt;
&lt;blockquote style=&quot;border: none; margin: 0px 0px 0px 40px; padding: 0px; text-align: left;&quot;&gt;
  &lt;p data-end=&quot;4894&quot; data-start=&quot;4877&quot;&gt;
    &lt;span style=&quot;font-family: Source Sans Pro;&quot;&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;Examples &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;include:&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;code data-end=&quot;4929&quot; data-start=&quot;4898&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro;&quot;&gt;enq: TX - row lock contention &amp;amp;&amp;nbsp;&lt;/span&gt;&lt;/code&gt;&lt;span style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;library cache lock&lt;/span&gt;
  &lt;/p&gt;
  &lt;p data-end=&quot;5018&quot; data-start=&quot;4954&quot;&gt;
    &lt;span style=&quot;font-family: Source Sans Pro;&quot;&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;Sessions &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;are &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;blocked &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;waiting &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;for &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;other &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;transactions &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;to &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;complete.&lt;/span&gt;&lt;/span&gt;
  &lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3 data-end=&quot;5041&quot; data-section-id=&quot;1c10sw4&quot; data-start=&quot;5020&quot;&gt;
  &lt;span style=&quot;font-family: Source Sans Pro; font-weight: normal;&quot;&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/h3&gt;
&lt;h3 data-end=&quot;5041&quot; data-section-id=&quot;1c10sw4&quot; data-start=&quot;5020&quot;&gt;
  &lt;span style=&quot;font-family: Source Sans Pro;&quot;&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;RAC &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;Cluster &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;Waits&lt;/span&gt;&lt;/span&gt;
&lt;/h3&gt;
&lt;p data-end=&quot;5117&quot; data-start=&quot;5043&quot;&gt;
  &lt;span style=&quot;font-family: Source Sans Pro;&quot;&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;In &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;RAC &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;environments, &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;interconnect &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;communication &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;may &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;become &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;the &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;bottleneck.&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;blockquote style=&quot;border: none; margin: 0px 0px 0px 40px; padding: 0px; text-align: left;&quot;&gt;
  &lt;p data-end=&quot;5136&quot; data-start=&quot;5119&quot; style=&quot;text-align: left;&quot;&gt;
    &lt;span style=&quot;font-family: Source Sans Pro;&quot;&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;Examples &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;include:&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;code data-end=&quot;5155&quot; data-start=&quot;5140&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro;&quot;&gt;gc cr request &amp;amp;&amp;nbsp;&lt;/span&gt;&lt;/code&gt;&lt;span style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;gc buffer busy&lt;/span&gt;
  &lt;/p&gt;
  &lt;p data-end=&quot;5255&quot; data-start=&quot;5176&quot; style=&quot;text-align: left;&quot;&gt;
    &lt;span style=&quot;font-family: Source Sans Pro;&quot;&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;In &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;such &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;cases, &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;analyzing &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;wait &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;classes &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;through &lt;/span&gt;&lt;span data-end=&quot;5236&quot; data-start=&quot;5222&quot;&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;AWR &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;or &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;ASH&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt; &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;becomes &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;essential.&lt;/span&gt;&lt;/span&gt;
  &lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul data-end=&quot;5174&quot; data-start=&quot;5138&quot; style=&quot;text-align: left;&quot;&gt;&lt;/ul&gt;

&lt;p data-end=&quot;5361&quot; data-start=&quot;5262&quot;&gt;&lt;br /&gt;&lt;/p&gt;

&lt;h1 data-end=&quot;5412&quot; data-section-id=&quot;1kznynv&quot; data-start=&quot;5368&quot;&gt;
  &lt;span style=&quot;color: #e06666; font-family: Source Sans Pro;&quot;&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;A &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;Real &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;Production &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;Incident:&amp;nbsp;&lt;/span&gt;&lt;/span&gt;
&lt;/h1&gt;
&lt;p data-end=&quot;5477&quot; data-start=&quot;5414&quot;&gt;
  &lt;span style=&quot;font-family: Source Sans Pro;&quot;&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;Let &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;me &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;share &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;a &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;situation &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;that &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;will &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;sound &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;familiar &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;to &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;many &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;DBAs.&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p data-end=&quot;5590&quot; data-start=&quot;5479&quot;&gt;
  &lt;span style=&quot;font-family: Source Sans Pro;&quot;&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;Around &lt;/span&gt;&lt;span data-end=&quot;5494&quot; data-start=&quot;5486&quot;&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;2 &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;AM&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;, &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;an &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;alert &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;triggered &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;showing &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;sustained &lt;/span&gt;&lt;span data-end=&quot;5557&quot; data-start=&quot;5533&quot;&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;85 &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;percent &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;CPU &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;usage&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt; &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;on &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;a &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;production &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;database &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;server.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;The &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;immediate &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;response &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;from &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;the &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;infrastructure &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;team &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;was &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;simple: -&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;&quot;&lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;We &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;need &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;more &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;CPU.&quot;&lt;/span&gt;
&lt;/p&gt;
&lt;p data-end=&quot;5745&quot; data-start=&quot;5678&quot;&gt;
  &lt;span style=&quot;font-family: Source Sans Pro;&quot;&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p data-end=&quot;5745&quot; data-start=&quot;5678&quot;&gt;
  &lt;span style=&quot;font-family: Source Sans Pro;&quot;&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;Before &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;approving &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;any &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;hardware &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;upgrade, we&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;opened &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;the &lt;/span&gt;&lt;span data-end=&quot;5744&quot; data-start=&quot;5730&quot;&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;AWR &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;report&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;.&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p data-end=&quot;5770&quot; data-start=&quot;5747&quot;&gt;
  &lt;span style=&quot;font-family: Source Sans Pro;&quot;&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;The &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;top &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;wait &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;event it&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;was:&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #6fa8dc; font-family: courier;&quot;&gt;db file sequential read&lt;/span&gt;
&lt;/p&gt;
&lt;pre class=&quot;overflow-visible! px-0!&quot; data-end=&quot;5803&quot; data-start=&quot;5772&quot;&gt;&lt;div class=&quot;relative w-full mt-4 mb-1&quot;&gt;&lt;div&gt;&lt;div class=&quot;relative&quot;&gt;&lt;div class=&quot;h-full min-h-0 min-w-0&quot;&gt;&lt;div class=&quot;h-full min-h-0 min-w-0&quot;&gt;&lt;div class=&quot;border border-token-border-light border-radius-3xl corner-superellipse/1.1 rounded-3xl&quot;&gt;&lt;div class=&quot;h-full w-full border-radius-3xl bg-token-bg-elevated-secondary corner-superellipse/1.1 overflow-clip rounded-3xl lxnfua_clipPathFallback&quot;&gt;&lt;div class=&quot;pe-11 pt-3&quot;&gt;&lt;div class=&quot;relative z-0 flex max-w-full&quot;&gt;&lt;div class=&quot;q9tKkq_viewer cm-editor z-10 light:cm-light dark:cm-light flex h-full w-full flex-col items-stretch ͼ5 ͼj&quot; dir=&quot;ltr&quot; id=&quot;code-block-viewer&quot;&gt;&lt;div class=&quot;cm-scroller&quot;&gt;&lt;div class=&quot;cm-content q9tKkq_readonly&quot;&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;That &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;immediately &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;suggested &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;inefficient &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;access &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;patterns. &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;After &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;digging &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;further, &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;we &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;discovered &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;the &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;root &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;cause. &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;A &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;frequently &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;executed &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;query &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;was &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;missing &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;an &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;index &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;on &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;a &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;lookup &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;table.&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;
&lt;p data-end=&quot;6001&quot; data-start=&quot;5985&quot;&gt;
  &lt;span style=&quot;font-family: Source Sans Pro;&quot;&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;Because &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;of &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;this:&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;
  &lt;li&gt;
    &lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;Full &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;table &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;scans &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;occurred &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;repeatedly&lt;/span&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;Logical &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;I/&lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;O &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;increased &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;dramatically&lt;/span&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;span style=&quot;font-family: Source Sans Pro;&quot;&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;CPU &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;consumption &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;rose &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;sharply&lt;/span&gt;&lt;/span&gt;
  &lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;6109&quot; data-start=&quot;6081&quot; style=&quot;text-align: left;&quot;&gt;&lt;/p&gt;
&lt;ul data-end=&quot;6109&quot; data-start=&quot;6003&quot;&gt;&lt;/ul&gt;
&lt;p data-end=&quot;6145&quot; data-start=&quot;6111&quot;&gt;
  &lt;span style=&quot;font-family: Source Sans Pro;&quot;&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;After &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;creating &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;the &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;required &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;index:&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;
  &lt;li&gt;
    &lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;CPU &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;dropped &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;from &lt;/span&gt;&lt;span data-end=&quot;6200&quot; data-start=&quot;6166&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;85 &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;percent &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;to &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;about &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;30 &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;percent&lt;/span&gt;&lt;/span&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;DB &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;Time &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;normalized&lt;/span&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;span style=&quot;font-family: Source Sans Pro;&quot;&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;Query &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;performance &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;improved &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;significantly&lt;/span&gt;&lt;/span&gt;
  &lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;6264&quot; data-start=&quot;6224&quot; style=&quot;text-align: left;&quot;&gt;&lt;/p&gt;
&lt;ul data-end=&quot;6264&quot; data-start=&quot;6147&quot;&gt;&lt;/ul&gt;
&lt;p data-end=&quot;6299&quot; data-start=&quot;6266&quot;&gt;
  &lt;span style=&quot;font-family: Source Sans Pro;&quot;&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;No &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;hardware &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;upgrade &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;was &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;required.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;The&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;real &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;problem &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;was &lt;/span&gt;&lt;span data-end=&quot;6342&quot; data-start=&quot;6322&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;SQL &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;inefficiency&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;, &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;not &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;CPU &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;capacity.&lt;/span&gt;
&lt;/p&gt;
&lt;p data-end=&quot;6299&quot; data-start=&quot;6266&quot;&gt;
  &lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p data-end=&quot;6462&quot; data-start=&quot;6368&quot;&gt;
  &lt;span style=&quot;font-family: Source Sans Pro;&quot;&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
  &lt;span style=&quot;font-family: Source Sans Pro;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEhKCta9VjUQPmILd86UhLoJr_PNOumCe0wV41h8wuhDV5MCtO5-nV3N3uzrUFd2NChU03UJurNdY6AXq1YmmyYlDjMfLzz6w51NVaPV_DfZ803AWI2A5gBfkNN3vExmQk8Du7pslytgKe_fKAiaDaRl-59EajtR9z36iBTvk41xbMO0SDMU7N-7acE5FB4&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img alt=&quot;&quot; data-original-height=&quot;1024&quot; data-original-width=&quot;1536&quot; height=&quot;427&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEhKCta9VjUQPmILd86UhLoJr_PNOumCe0wV41h8wuhDV5MCtO5-nV3N3uzrUFd2NChU03UJurNdY6AXq1YmmyYlDjMfLzz6w51NVaPV_DfZ803AWI2A5gBfkNN3vExmQk8Du7pslytgKe_fKAiaDaRl-59EajtR9z36iBTvk41xbMO0SDMU7N-7acE5FB4&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/span&gt;
&lt;/div&gt;
&lt;span style=&quot;font-family: Source Sans Pro;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;p&gt;&lt;/p&gt;

&lt;h1 data-end=&quot;6522&quot; data-section-id=&quot;fcvywb&quot; data-start=&quot;6469&quot;&gt;
  &lt;span style=&quot;color: #e06666; font-family: Source Sans Pro;&quot;&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/h1&gt;
&lt;h1 data-end=&quot;6522&quot; data-section-id=&quot;fcvywb&quot; data-start=&quot;6469&quot;&gt;
  &lt;span style=&quot;color: #e06666; font-family: Source Sans Pro;&quot;&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;Production &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;Best &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;Practices &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;for &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;Performance &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;Incidents&lt;/span&gt;&lt;/span&gt;
&lt;/h1&gt;
&lt;p data-end=&quot;6651&quot; data-start=&quot;6524&quot;&gt;
  &lt;span style=&quot;font-family: Source Sans Pro;&quot;&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;In &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;high &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;availability &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;environments &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;such &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;as &lt;/span&gt;&lt;span data-end=&quot;6587&quot; data-start=&quot;6566&quot;&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;RAC &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;or &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;Data &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;Guard&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;, &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;performance &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;investigation &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;should &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;follow &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;a &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;structured &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;approach.&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p data-end=&quot;6700&quot; data-start=&quot;6653&quot;&gt;
  &lt;span style=&quot;font-family: Source Sans Pro;&quot;&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;Experienced &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;DBAs &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;usually &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;analyze &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;the &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;following.&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;h3 data-end=&quot;6723&quot; data-section-id=&quot;1yccths&quot; data-start=&quot;6702&quot;&gt;
  &lt;span style=&quot;font-family: Source Sans Pro;&quot;&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;1. &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;DB &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;Time &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;Trends&lt;/span&gt;&lt;/span&gt;
&lt;/h3&gt;
&lt;p data-end=&quot;6784&quot; data-start=&quot;6725&quot;&gt;
  &lt;span style=&quot;font-family: Source Sans Pro;&quot;&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;Use &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;AWR &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;history &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;to &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;determine &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;when &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;workload &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;changes &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;started.&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;h3 data-end=&quot;6816&quot; data-section-id=&quot;4v08kl&quot; data-start=&quot;6786&quot;&gt;
  &lt;span style=&quot;font-family: Source Sans Pro;&quot;&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;2. &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;Wait &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;Class &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;Distribution&lt;/span&gt;&lt;/span&gt;
&lt;/h3&gt;
&lt;p data-end=&quot;6860&quot; data-start=&quot;6818&quot;&gt;
  &lt;span style=&quot;font-family: Source Sans Pro;&quot;&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;Identify &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;whether &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;the &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;system &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;is &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;limited &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;by:&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;
  &lt;li&gt;&lt;span style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;CPU&lt;/span&gt;&lt;/li&gt;
  &lt;li&gt;
    &lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;I/&lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;O&lt;/span&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;span style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;Concurrency&lt;/span&gt;&lt;/li&gt;
  &lt;li&gt;
    &lt;span style=&quot;font-family: Source Sans Pro;&quot;&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;Cluster &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;communication&lt;/span&gt;&lt;/span&gt;
  &lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;6911&quot; data-start=&quot;6890&quot; style=&quot;text-align: left;&quot;&gt;&lt;/p&gt;
&lt;ul data-end=&quot;6911&quot; data-start=&quot;6862&quot;&gt;&lt;/ul&gt;
&lt;h3 data-end=&quot;6938&quot; data-section-id=&quot;9jfexi&quot; data-start=&quot;6913&quot;&gt;
  &lt;span style=&quot;font-family: Source Sans Pro;&quot;&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;3. &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;Top &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;SQL &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;by &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;DB &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;Time&lt;/span&gt;&lt;/span&gt;
&lt;/h3&gt;
&lt;p data-end=&quot;7004&quot; data-start=&quot;6940&quot;&gt;
  &lt;span style=&quot;font-family: Source Sans Pro;&quot;&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;These &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;queries &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;usually &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;contribute &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;to &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;the &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;majority &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;of &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;system &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;load.&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;h3 data-end=&quot;7025&quot; data-section-id=&quot;xpfwr5&quot; data-start=&quot;7006&quot;&gt;
  &lt;span style=&quot;font-family: Source Sans Pro; font-weight: normal;&quot;&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/h3&gt;
&lt;h3 data-end=&quot;7025&quot; data-section-id=&quot;xpfwr5&quot; data-start=&quot;7006&quot;&gt;
  &lt;span style=&quot;font-family: Source Sans Pro;&quot;&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;4. &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;Load &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;Profile&lt;/span&gt;&lt;/span&gt;
&lt;/h3&gt;
&lt;p data-end=&quot;7056&quot; data-start=&quot;7027&quot;&gt;
  &lt;span style=&quot;font-family: Source Sans Pro;&quot;&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;Important &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;indicators &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;include:&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;

&lt;p data-end=&quot;7081&quot; data-start=&quot;7060&quot; style=&quot;text-align: left;&quot;&gt;&lt;/p&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;
  &lt;li&gt;
    &lt;span style=&quot;font-family: Source Sans Pro;&quot;&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;Executions &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;per &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;second&lt;/span&gt;&lt;/span&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;Logical &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;reads &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;per &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;second&lt;/span&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;Parse &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;calls&lt;/span&gt;
  &lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
  &lt;span style=&quot;font-family: Source Sans Pro;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;
&lt;ul data-end=&quot;7122&quot; data-start=&quot;7058&quot;&gt;&lt;/ul&gt;
&lt;h3 data-end=&quot;7153&quot; data-section-id=&quot;1chxi6h&quot; data-start=&quot;7124&quot;&gt;
  &lt;span style=&quot;font-family: Source Sans Pro;&quot;&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;5. &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;Execution &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;Plan &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;Changes&lt;/span&gt;&lt;/span&gt;
&lt;/h3&gt;
&lt;p data-end=&quot;7220&quot; data-start=&quot;7155&quot;&gt;
  &lt;span style=&quot;font-family: Source Sans Pro;&quot;&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;Sudden &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;plan &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;changes &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;can &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;cause &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;unexpected &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;performance &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;degradation.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;Check &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;for:&lt;/span&gt;
&lt;/p&gt;

&lt;p data-end=&quot;7252&quot; data-start=&quot;7236&quot; style=&quot;text-align: left;&quot;&gt;&lt;/p&gt;
&lt;ul&gt;
  &lt;li&gt;
    &lt;span style=&quot;font-family: Source Sans Pro;&quot;&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;Statistics &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;drift&lt;/span&gt;&lt;/span&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;Bind &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;variable &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;peeking&lt;/span&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;Adaptive &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;plan &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;behavior&lt;/span&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;Cursor &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;invalidation&lt;/span&gt;
  &lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
  &lt;span style=&quot;font-family: Source Sans Pro;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;/div&gt;
&lt;p&gt;&lt;/p&gt;

&lt;p data-end=&quot;7407&quot; data-start=&quot;7330&quot;&gt;&lt;/p&gt;
&lt;h1 data-end=&quot;7431&quot; data-section-id=&quot;g06j45&quot; data-start=&quot;7414&quot;&gt;
  &lt;span style=&quot;color: #e06666; font-family: Source Sans Pro;&quot;&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;Quick &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;Takeaways&lt;/span&gt;&lt;/span&gt;
&lt;/h1&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;
  &lt;li&gt;
    &lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;High &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;CPU &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;does &lt;/span&gt;&lt;span data-end=&quot;7506&quot; data-start=&quot;7449&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;not &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;automatically &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;mean &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;the &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;database &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;is &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;the &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;bottleneck&lt;/span&gt;&lt;/span&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;DB &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;Time &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;is &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;one &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;of &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;the &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;most &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;reliable &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;indicators &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;of &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;database &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;workload&lt;/span&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;Wait &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;events &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;often &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;reveal &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;the &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;real &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;root &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;cause&lt;/span&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;Poor &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;execution &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;plans &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;can &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;dramatically &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;increase &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;CPU &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;usage&lt;/span&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;Hardware &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;scaling &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;should &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;be &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;the &lt;/span&gt;&lt;span data-end=&quot;7733&quot; data-start=&quot;7720&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;last &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;step&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;, &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;not &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;the &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;first&lt;/span&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;Top &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;SQL &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;by &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;DB &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;Time &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;usually &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;reveals &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;the &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;main &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;performance &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;issue&lt;/span&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;span style=&quot;font-family: Source Sans Pro;&quot;&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;Always &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;correlate &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;database &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;metrics &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;with &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;operating &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;system &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;metrics&lt;/span&gt;&lt;/span&gt;
  &lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;7878&quot; data-start=&quot;7815&quot; style=&quot;text-align: left;&quot;&gt;&lt;/p&gt;
&lt;div&gt;
  &lt;span style=&quot;font-family: Source Sans Pro;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;/div&gt;
&lt;h1 data-end=&quot;7937&quot; data-section-id=&quot;slte2z&quot; data-start=&quot;7885&quot;&gt;
  &lt;span style=&quot;color: #e06666; font-family: Source Sans Pro;&quot;&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;DBA&#39;s Production&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;Perspective&lt;/span&gt;&lt;/span&gt;
&lt;/h1&gt;
&lt;p data-end=&quot;8043&quot; data-start=&quot;7939&quot;&gt;
  &lt;span style=&quot;font-family: Source Sans Pro;&quot;&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;Real &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;production &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;systems &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;introduce &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;additional &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;complexity.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;One &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;common &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;mistake &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;teams &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;make &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;is &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;relying &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;too &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;heavily &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;on &lt;/span&gt;&lt;span data-end=&quot;8152&quot; data-start=&quot;8101&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;CPU &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;graphs &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;from &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;infrastructure &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;monitoring &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;tools&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;.&lt;/span&gt;
&lt;/p&gt;
&lt;p data-end=&quot;8221&quot; data-start=&quot;8155&quot;&gt;
  &lt;span style=&quot;font-family: Source Sans Pro;&quot;&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;Those &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;tools &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;rarely &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;provide &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;visibility &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;into &lt;/span&gt;&lt;span data-end=&quot;8220&quot; data-start=&quot;8198&quot;&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;database &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;internals&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;Another &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;challenge &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;is &lt;/span&gt;&lt;span data-end=&quot;8274&quot; data-start=&quot;8244&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;execution &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;plan &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;instability&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;.&lt;/span&gt;
&lt;/p&gt;
&lt;p data-end=&quot;8345&quot; data-start=&quot;8277&quot;&gt;
  &lt;span style=&quot;font-family: Source Sans Pro;&quot;&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;A &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;query &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;that &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;ran &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;efficiently &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;for &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;months &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;can &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;suddenly &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;degrade &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;due &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;to:&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;

&lt;p data-end=&quot;8367&quot; data-start=&quot;8349&quot; style=&quot;text-align: left;&quot;&gt;&lt;/p&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;
  &lt;li&gt;
    &lt;span style=&quot;font-family: Source Sans Pro;&quot;&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;Statistics &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;refresh&lt;/span&gt;&lt;/span&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;Data &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;skew&lt;/span&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;Adaptive &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;plan &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;behavior&lt;/span&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;Cursor &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;invalidation&lt;/span&gt;
  &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;/p&gt;
&lt;ul data-end=&quot;8426&quot; data-start=&quot;8347&quot;&gt;&lt;/ul&gt;
&lt;p data-end=&quot;8488&quot; data-start=&quot;8428&quot;&gt;
  &lt;span style=&quot;font-family: Source Sans Pro;&quot;&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;In &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;RAC &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;environments &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;the &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;situation &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;becomes &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;even &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;more &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;complex.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;CPU &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;spikes &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;can &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;sometimes &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;be &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;caused &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;by &lt;/span&gt;&lt;span data-end=&quot;8555&quot; data-start=&quot;8528&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;global &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;cache &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;contention&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;, &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;which &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;is &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;not &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;obvious &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;unless &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;you &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;examine &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;cluster &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;wait &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;events.&lt;/span&gt;
&lt;/p&gt;
&lt;p data-end=&quot;8617&quot; data-start=&quot;8490&quot;&gt;
  &lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;Avaialble tools &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;every &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;DBA &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;should &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;rely &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;on &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;include:&lt;/span&gt;
&lt;/p&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;
  &lt;li style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;
    &lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;AWR &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;reports&lt;/span&gt;
  &lt;/li&gt;
  &lt;li style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;
    &lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;ASH &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;analysis&lt;/span&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;span style=&quot;font-family: courier;&quot;&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;V$&lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;ACTIVE_SESSION_HISTORY&lt;/span&gt;&lt;/span&gt;
  &lt;/li&gt;
  &lt;li style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;
    &lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;SQL &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;Monitor&lt;/span&gt;
  &lt;/li&gt;
&lt;/ul&gt;
&lt;ul data-end=&quot;8737&quot; data-start=&quot;8660&quot; style=&quot;text-align: left;&quot;&gt;&lt;/ul&gt;
&lt;p data-end=&quot;8816&quot; data-start=&quot;8739&quot;&gt;
  &lt;span style=&quot;font-family: Source Sans Pro;&quot;&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;Another &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;operational &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;lesson: &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;the &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;loudest &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;alert &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;is &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;not &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;always &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;the &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;real &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;problem.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;CPU &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;alerts &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;are &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;often &lt;/span&gt;&lt;span data-end=&quot;8888&quot; data-start=&quot;8839&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;downstream &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;symptoms &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;of &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;deeper &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;database &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;issues&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;.&lt;/span&gt;
&lt;/p&gt;
&lt;p data-end=&quot;8816&quot; data-start=&quot;8739&quot;&gt;
  &lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;h1 data-end=&quot;8953&quot; data-section-id=&quot;w3san&quot; data-start=&quot;8896&quot;&gt;
  &lt;span style=&quot;color: #e06666; font-family: Source Sans Pro;&quot;&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;Mini &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;Case &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;Study: &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;Avoiding &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;an &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;Expensive &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;Hardware &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;Upgrade&lt;/span&gt;&lt;/span&gt;
&lt;/h1&gt;
&lt;p data-end=&quot;9031&quot; data-start=&quot;8955&quot;&gt;
  &lt;span style=&quot;font-family: Source Sans Pro;&quot;&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;A &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;financial &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;trading &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;platform &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;experienced &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;severe &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;slowdowns &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;during &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;peak &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;hours.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;The &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;initial &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;assumption &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;was &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;that &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;the &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;system &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;needed &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;more &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;CPU.&lt;/span&gt;
&lt;/p&gt;
&lt;p data-end=&quot;9130&quot; data-start=&quot;9094&quot;&gt;
  &lt;span style=&quot;font-family: Source Sans Pro;&quot;&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;After &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;deeper &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;analysis &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;we &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;discovered:&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;

&lt;p data-end=&quot;9173&quot; data-start=&quot;9134&quot; style=&quot;text-align: left;&quot;&gt;&lt;/p&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;
  &lt;li&gt;
    &lt;span style=&quot;font-family: Source Sans Pro;&quot;&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;A &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;reporting &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;query &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;executed &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;every &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;second&lt;/span&gt;&lt;/span&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;The &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;query &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;scanned &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;a &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;large &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;transactional &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;table&lt;/span&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;The &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;filtering &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;columns &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;had &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;no &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;supporting &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;index&lt;/span&gt;
  &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;/p&gt;
&lt;ul data-end=&quot;9269&quot; data-start=&quot;9132&quot;&gt;&lt;/ul&gt;
&lt;p data-end=&quot;9328&quot; data-start=&quot;9271&quot;&gt;
  &lt;span style=&quot;font-family: Source Sans Pro;&quot;&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;After &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;adding &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;the &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;required &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;index &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;and &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;optimizing &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;the &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;query:&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;
  &lt;li&gt;
    &lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;CPU &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;usage &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;dropped &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;by &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;almost &lt;/span&gt;&lt;span data-end=&quot;9374&quot; data-start=&quot;9360&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;40 &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;percent&lt;/span&gt;&lt;/span&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;Query &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;execution &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;time &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;improved &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;dramatically&lt;/span&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;span style=&quot;font-family: Source Sans Pro;&quot;&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;System &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;stability &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;returned&lt;/span&gt;&lt;/span&gt;
  &lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;9447&quot; data-start=&quot;9422&quot; style=&quot;text-align: left;&quot;&gt;&lt;/p&gt;
&lt;ul data-end=&quot;9447&quot; data-start=&quot;9330&quot;&gt;&lt;/ul&gt;
&lt;p data-end=&quot;9529&quot; data-start=&quot;9449&quot;&gt;
  &lt;span style=&quot;font-family: Source Sans Pro;&quot;&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;Instead &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;of &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;purchasing &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;new &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;hardware, &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;the &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;solution &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;required &lt;/span&gt;&lt;span data-end=&quot;9528&quot; data-start=&quot;9507&quot;&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;simple &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;SQL &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;tuning&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;.&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p data-end=&quot;9529&quot; data-start=&quot;9449&quot;&gt;
  &lt;span style=&quot;font-family: Source Sans Pro;&quot;&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;h1 data-end=&quot;9548&quot; data-section-id=&quot;fsb6xx&quot; data-start=&quot;9536&quot;&gt;
  &lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;&lt;span style=&quot;color: #e06666; font-family: Source Sans Pro;&quot;&gt;Conclusion&lt;/span&gt;&lt;/span&gt;
&lt;/h1&gt;
&lt;p data-end=&quot;9644&quot; data-start=&quot;9550&quot;&gt;
  &lt;span style=&quot;font-family: Source Sans Pro;&quot;&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;Performance &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;troubleshooting &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;in &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;Oracle &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;databases &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;requires &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;looking &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;beyond &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;surface &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;level &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;metrics.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;CPU &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;utilization &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;might &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;trigger &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;alerts, &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;but &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;it &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;rarely &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;tells &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;the &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;full &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;story.&lt;/span&gt;
&lt;/p&gt;
&lt;p data-end=&quot;9873&quot; data-start=&quot;9721&quot;&gt;
  &lt;span style=&quot;font-family: Source Sans Pro;&quot;&gt;&lt;span data-end=&quot;9792&quot; data-start=&quot;9721&quot;&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;DB &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;Time &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;is &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;one &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;of &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;the &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;most &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;valuable &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;indicators &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;of &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;database &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;behaviour&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;, &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;because &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;it &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;reveals &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;how &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;sessions &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;actually &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;spend &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;time &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;inside &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;the &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;database &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;engine.&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p data-end=&quot;10030&quot; data-start=&quot;9875&quot;&gt;
  &lt;span style=&quot;font-family: Source Sans Pro;&quot;&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;By &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;correlating &lt;/span&gt;&lt;b&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;DB &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;Time &lt;/span&gt;&lt;/b&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;with &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;wait &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;events, &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;load &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;profile &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;metrics, &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;and &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;Top &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;SQL &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;statements, &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;DBAs &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;can &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;quickly &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;identify &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;the &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;real &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;root &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;cause &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;of &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;performance &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;issues.&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p data-end=&quot;10136&quot; data-start=&quot;10032&quot;&gt;
  &lt;span style=&quot;font-family: Source Sans Pro;&quot;&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;This &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;approach &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;not &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;only &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;improves &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;incident &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;response &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;but &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;also &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;prevents &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;unnecessary &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;infrastructure &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;spending.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-family: Source Sans Pro;&quot;&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;Before &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;scaling &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;hardware, &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;always &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;analyze &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;the &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;database &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;workload &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;itself.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;In &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;many &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;cases &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;the &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;real &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;issue &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;lies &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;in &lt;/span&gt;&lt;span data-end=&quot;10315&quot; data-start=&quot;10246&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;execution &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;plans, &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;indexing &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;strategy, &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;or &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;inefficient &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;SQL &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;statements&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;.&lt;/span&gt;
&lt;/p&gt;
&lt;p data-end=&quot;10414&quot; data-start=&quot;10318&quot;&gt;
  &lt;span style=&quot;font-family: Source Sans Pro;&quot;&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;The &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;next &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;time &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;a an&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;alert &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;reports &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;high &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;CPU &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;usage, &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;resist &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;the &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;urge &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;to &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;jump &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;to &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;conclusions.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;Start &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;where &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;experienced &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;DBAs &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;always &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;start.&lt;/span&gt;
&lt;/p&gt;
&lt;p data-end=&quot;10491&quot; data-start=&quot;10460&quot;&gt;&lt;/p&gt;
&lt;h1 data-end=&quot;10504&quot; data-section-id=&quot;1ht80gz&quot; data-start=&quot;10498&quot;&gt;
  &lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-weight: normal;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/h1&gt;
&lt;h1 data-end=&quot;10504&quot; data-section-id=&quot;1ht80gz&quot; data-start=&quot;10498&quot;&gt;
  &lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;&lt;span style=&quot;color: #e06666; font-family: Source Sans Pro;&quot;&gt;FAQs&lt;/span&gt;&lt;/span&gt;
&lt;/h1&gt;
&lt;h3 data-end=&quot;10536&quot; data-section-id=&quot;r0v6ln&quot; data-start=&quot;10506&quot;&gt;
  &lt;span style=&quot;font-family: Source Sans Pro;&quot;&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;What &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;is &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;DB &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;Time &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;in &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;Oracle?&lt;/span&gt;&lt;/span&gt;
&lt;/h3&gt;
&lt;p data-end=&quot;10687&quot; data-start=&quot;10538&quot;&gt;
  &lt;span style=&quot;font-family: Source Sans Pro;&quot;&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;DB &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;Time &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;represents &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;the &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;total &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;time &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;database &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;sessions &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;spend &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;either &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;executing &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;on &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;CPU &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;or &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;waiting &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;for &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;resources &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;such &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;as &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;I/&lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;O, &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;locks, &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;or &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;network &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;operations.&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;h3 data-end=&quot;10733&quot; data-section-id=&quot;bl92cw&quot; data-start=&quot;10689&quot;&gt;
  &lt;span style=&quot;font-family: Source Sans Pro;&quot;&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;How &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;is &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;DB &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;Time &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;different &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;from &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;CPU &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;usage?&lt;/span&gt;&lt;/span&gt;
&lt;/h3&gt;
&lt;p data-end=&quot;10865&quot; data-start=&quot;10735&quot;&gt;
  &lt;span style=&quot;font-family: Source Sans Pro;&quot;&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;CPU &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;usage &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;reflects &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;operating &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;system &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;activity, &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;while &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;DB &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;Time &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;reflects &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;database &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;session &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;activity &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;including &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;CPU &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;work &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;and &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;wait &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;events.&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;h3 data-end=&quot;10904&quot; data-section-id=&quot;d6xn3k&quot; data-start=&quot;10867&quot;&gt;
  &lt;span style=&quot;font-family: Source Sans Pro;&quot;&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;Where &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;can &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;I &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;find &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;DB &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;Time &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;metrics?&lt;/span&gt;&lt;/span&gt;
&lt;/h3&gt;
&lt;p data-end=&quot;10930&quot; data-start=&quot;10906&quot;&gt;
  &lt;span style=&quot;font-family: Source Sans Pro;&quot;&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;DB &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;Time &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;can &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;be &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;found &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;in:&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;

&lt;p data-end=&quot;10947&quot; data-start=&quot;10934&quot; style=&quot;text-align: left;&quot;&gt;&lt;/p&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;
  &lt;li&gt;
    &lt;span style=&quot;font-family: Source Sans Pro;&quot;&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;AWR &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;Reports&lt;/span&gt;&lt;/span&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;ASH &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;Views&lt;/span&gt;
  &lt;/li&gt;
  &lt;li&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;V$SYS_TIME_MODEL&lt;/span&gt;&lt;/li&gt;
  &lt;li&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;DBA_HIST_SYS_TIME_MODEL&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;/p&gt;
&lt;ul data-end=&quot;11012&quot; data-start=&quot;10932&quot;&gt;&lt;/ul&gt;
&lt;h3 data-end=&quot;11058&quot; data-section-id=&quot;2rkgsk&quot; data-start=&quot;11014&quot;&gt;
  &lt;span style=&quot;font-family: Source Sans Pro;&quot;&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;Can &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;high &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;CPU &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;occur &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;without &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;high &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;DB &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;Time?&lt;/span&gt;&lt;/span&gt;
&lt;/h3&gt;
&lt;p data-end=&quot;11182&quot; data-start=&quot;11060&quot;&gt;
  &lt;span style=&quot;font-family: Source Sans Pro;&quot;&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;Yes. &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;High &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;CPU &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;may &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;be &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;caused &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;by &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;external &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;processes, &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;application &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;loops, &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;or &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;middleware &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;issues &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;unrelated &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;to &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;database &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;workload.&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;h3 data-end=&quot;11224&quot; data-section-id=&quot;1265gni&quot; data-start=&quot;11184&quot;&gt;
  &lt;span style=&quot;font-family: Source Sans Pro;&quot;&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;Why &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;is &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;Top &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;SQL &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;by &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;DB &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;Time &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;important?&lt;/span&gt;&lt;/span&gt;
&lt;/h3&gt;
&lt;p data-end=&quot;11364&quot; data-start=&quot;11226&quot;&gt;
  &lt;span style=&quot;font-family: Source Sans Pro;&quot;&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;It &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;helps &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;identify &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;SQL &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;statements &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;that &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;consume &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;the &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;most &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;database &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;processing &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;time, &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;which &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;often &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;reveals &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;the &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;root &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;cause &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;of &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;performance &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;issues.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p data-end=&quot;11364&quot; data-start=&quot;11226&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro;&quot;&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;Have&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;you&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;ever&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;seen&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;a&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;situation&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;where&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;high&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;CPU&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;led&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;to&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;the&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;wrong&amp;nbsp;&lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;diagnosis?&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;Share &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;your &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;experience. &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;Production &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;stories &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;are &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;always &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;valuable &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;learning &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;for &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;the &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;DBA &lt;/span&gt;&lt;span class=&quot;BZ_Pyq_fadeIn&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;community.&lt;/span&gt;&lt;/p&gt;
</description><link>https://oracle-dba-help.blogspot.com/2026/07/db-time-vs-cpu-metric-most-dbas-ignore.html</link><author>noreply@blogger.com (Nikhil Kotak)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/a/AVvXsEhKCta9VjUQPmILd86UhLoJr_PNOumCe0wV41h8wuhDV5MCtO5-nV3N3uzrUFd2NChU03UJurNdY6AXq1YmmyYlDjMfLzz6w51NVaPV_DfZ803AWI2A5gBfkNN3vExmQk8Du7pslytgKe_fKAiaDaRl-59EajtR9z36iBTvk41xbMO0SDMU7N-7acE5FB4=s72-c" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1375587508974804970.post-6761047497528021859</guid><pubDate>Tue, 30 Jun 2026 07:34:00 +0000</pubDate><atom:updated>2026-06-30T15:34:00.189+08:00</atom:updated><title>How Oracle RAC Handles a Node Failure: Quick Insights About Interview Discussion</title><description>&lt;p&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&amp;nbsp;In high‑availability database environments, &lt;em data-end=&quot;449&quot; data-start=&quot;421&quot;&gt;About Interview discussion&lt;/em&gt; often centers on how systems react when things go wrong .,&amp;nbsp; especially in mission‑critical deployments like Oracle RAC (Real Application Clusters). One of the most common interview questions DBAs face is: &lt;span data-end=&quot;732&quot; data-start=&quot;653&quot;&gt;In a 3‑node RAC, if one node goes down, how does instance recovery occur?&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&amp;nbsp;Understanding this not only helps you ace interviews but also equips you with real‑world insights into RAC&#39;s fault‑tolerance mechanics.&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;p&gt;&lt;/p&gt;
&lt;p data-end=&quot;1293&quot; data-start=&quot;870&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;In this article, we will break down the step‑by‑step recovery process when a node fails in a 3‑node Oracle RAC, discuss the components involved, show how workload redistribution happens smoothly, and highlight what every DBA should know — from beginners to seasoned architects. You’ll also get practical tips, real examples, and a deeper look into processes like SMON and PMON that make cluster recovery automatic and robust.&lt;/span&gt;&lt;/p&gt;&lt;p data-end=&quot;1293&quot; data-start=&quot;870&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h2 data-end=&quot;1345&quot; data-section-id=&quot;uk5zbc&quot; data-start=&quot;1300&quot;&gt;&lt;span style=&quot;color: #e06666; font-family: Source Sans Pro; font-size: large;&quot;&gt;How Node Failure Is Detected in Oracle RAC&lt;/span&gt;&lt;/h2&gt;
&lt;p data-end=&quot;1548&quot; data-start=&quot;1347&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Every RAC environment relies on Oracle Clusterware to monitor the health of its nodes. Through interconnect heartbeat signals, Clusterware continuously checks whether each node is alive and responsive.&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-end=&quot;1584&quot; data-section-id=&quot;1hqlopl&quot; data-start=&quot;1550&quot;&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;What Happens When a Node Fails&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;ul data-end=&quot;1735&quot; data-start=&quot;1586&quot;&gt;
&lt;li data-end=&quot;1657&quot; data-section-id=&quot;ovactk&quot; data-start=&quot;1586&quot;&gt;
&lt;p data-end=&quot;1657&quot; data-start=&quot;1588&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;span data-end=&quot;1606&quot; data-start=&quot;1588&quot;&gt;Heartbeat loss&lt;/span&gt; i.e, Clusterware detects missing signals from Node A.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li data-end=&quot;1732&quot; data-section-id=&quot;pwgv80&quot; data-start=&quot;1658&quot;&gt;
&lt;p data-end=&quot;1732&quot; data-start=&quot;1660&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;span data-end=&quot;1680&quot; data-start=&quot;1660&quot;&gt;Immediate action&lt;/span&gt;&amp;nbsp; i.e., Surviving nodes begin coordinated recovery steps.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;1891&quot; data-start=&quot;1736&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p data-end=&quot;1891&quot; data-start=&quot;1736&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #6fa8dc;&quot;&gt;&amp;nbsp;&lt;em data-end=&quot;1755&quot; data-start=&quot;1739&quot;&gt;Interview Tip:&lt;/em&gt;&lt;/span&gt; &lt;/b&gt;You might be asked, &lt;em data-end=&quot;1814&quot; data-start=&quot;1776&quot;&gt;&quot;What is the role of the heartbeat?&quot;&lt;/em&gt;&amp;nbsp;-&amp;nbsp; Explain that it is an internal health indicator used for failure detection.&lt;/span&gt;&lt;/p&gt;&lt;p data-end=&quot;1891&quot; data-start=&quot;1736&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h3 data-end=&quot;2014&quot; data-section-id=&quot;1wbm3dq&quot; data-start=&quot;1977&quot;&gt;&lt;span style=&quot;color: #e06666; font-family: Source Sans Pro; font-size: large;&quot;&gt;Global Cache and Enqueue Services&lt;/span&gt;&lt;/h3&gt;
&lt;p data-end=&quot;2176&quot; data-start=&quot;2016&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Oracle uses the &lt;span data-end=&quot;2062&quot; data-start=&quot;2032&quot;&gt;Global Cache Service (GCS)&lt;/span&gt; and &lt;span data-end=&quot;2099&quot; data-start=&quot;2067&quot;&gt;Global Enqueue Service (GES)&lt;/span&gt; to rebalance ownership of cache blocks and locks across the remaining nodes.&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-end=&quot;2204&quot; data-section-id=&quot;1vrcqt8&quot; data-start=&quot;2178&quot;&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;&lt;h3 data-end=&quot;2204&quot; data-section-id=&quot;1vrcqt8&quot; data-start=&quot;2178&quot;&gt;&lt;span style=&quot;color: #e06666; font-family: Source Sans Pro; font-size: large;&quot;&gt;Application Continuity&lt;/span&gt;&lt;/h3&gt;
&lt;p data-end=&quot;2421&quot; data-start=&quot;2206&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Modern applications benefit from &lt;span data-end=&quot;2281&quot; data-start=&quot;2239&quot;&gt;Transparent Application Failover (TAF)&lt;/span&gt; and &lt;span data-end=&quot;2312&quot; data-start=&quot;2286&quot;&gt;Application Continuity&lt;/span&gt;, tools that ensure client sessions automatically reconnect to surviving instances without user intervention.&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;2643&quot; data-start=&quot;2423&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;span data-end=&quot;2435&quot; data-start=&quot;2423&quot;&gt;Example:&lt;/span&gt;&lt;br /&gt;
Imagine an OLTP application connected mainly to Node 2. Now Node 3 goes down during peak hours. Thanks to TAF and GCS, connections gently shift to Nodes 1 and 2 - with no visible slowdown for the end user.&lt;/span&gt;&lt;/p&gt;
&lt;h2 data-end=&quot;2686&quot; data-section-id=&quot;1mbzhjn&quot; data-start=&quot;2650&quot;&gt;&lt;span style=&quot;font-weight: normal;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h2&gt;&lt;h2 data-end=&quot;2686&quot; data-section-id=&quot;1mbzhjn&quot; data-start=&quot;2650&quot;&gt;&lt;span style=&quot;color: #e06666; font-family: Source Sans Pro; font-size: large;&quot;&gt;Instance Recovery: SMON in Action&lt;/span&gt;&lt;/h2&gt;
&lt;p data-end=&quot;2846&quot; data-start=&quot;2688&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;A critical part of RAC resilience is &lt;em data-end=&quot;2744&quot; data-start=&quot;2725&quot;&gt;instance recovery&lt;/em&gt; -&amp;nbsp; and this is handled by the surviving instances, specifically the &lt;span data-end=&quot;2845&quot; data-start=&quot;2812&quot;&gt;SMON process.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p data-end=&quot;2846&quot; data-start=&quot;2688&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;span data-end=&quot;2845&quot; data-start=&quot;2812&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h3 data-end=&quot;2870&quot; data-section-id=&quot;1knayu2&quot; data-start=&quot;2848&quot;&gt;&lt;span style=&quot;color: #6fa8dc; font-family: Source Sans Pro; font-size: large;&quot;&gt;What Does SMON Do?&lt;/span&gt;&lt;/h3&gt;
&lt;p data-end=&quot;2890&quot; data-start=&quot;2872&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;When Node 3 fails:&lt;/span&gt;&lt;/p&gt;
&lt;ol data-end=&quot;3115&quot; data-start=&quot;2892&quot;&gt;
&lt;li data-end=&quot;2938&quot; data-section-id=&quot;t082m5&quot; data-start=&quot;2892&quot;&gt;
&lt;p data-end=&quot;2938&quot; data-start=&quot;2895&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;span data-end=&quot;2928&quot; data-start=&quot;2895&quot;&gt;Redo logs from shared storage&lt;/span&gt; are read.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li data-end=&quot;3035&quot; data-section-id=&quot;8ow6wa&quot; data-start=&quot;2939&quot;&gt;
&lt;p data-end=&quot;3035&quot; data-start=&quot;2942&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;span data-end=&quot;2961&quot; data-start=&quot;2942&quot;&gt;Rolling forward&lt;/span&gt; applies committed transactions that hadn’t yet been written to datafiles.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li data-end=&quot;3115&quot; data-section-id=&quot;1sxrq8h&quot; data-start=&quot;3036&quot;&gt;
&lt;p data-end=&quot;3115&quot; data-start=&quot;3039&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;span data-end=&quot;3055&quot; data-start=&quot;3039&quot;&gt;Rolling back&lt;/span&gt; undoes uncommitted transactions to ensure data consistency.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-end=&quot;3319&quot; data-start=&quot;3117&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;span style=&quot;color: #6fa8dc;&quot;&gt;&lt;b&gt;&amp;nbsp;&lt;em data-end=&quot;3141&quot; data-start=&quot;3120&quot;&gt;Real‑world example:&lt;/em&gt; &lt;/b&gt;&lt;/span&gt;In one production cluster, a failed node had uncommitted updates that SMON rolled back while committed data was fully preserved -&amp;nbsp; preventing corruption and ensuring consistency.&lt;/span&gt;&lt;/p&gt;&lt;p data-end=&quot;3319&quot; data-start=&quot;3117&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h2 data-end=&quot;3367&quot; data-section-id=&quot;pa8ty4&quot; data-start=&quot;3326&quot;&gt;&lt;span style=&quot;color: #e06666; font-family: Source Sans Pro; font-size: large;&quot;&gt;Cleaning up Resources: PMON process Takes Over&lt;/span&gt;&lt;/h2&gt;
&lt;p data-end=&quot;3471&quot; data-start=&quot;3369&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;While SMON handles data recovery, &lt;span data-end=&quot;3429&quot; data-start=&quot;3403&quot;&gt;PMON (Process Monitor)&lt;/span&gt; ensures session resources get cleaned up:&lt;/span&gt;&lt;/p&gt;&lt;ul data-end=&quot;3561&quot; data-start=&quot;3473&quot; style=&quot;text-align: left;&quot;&gt;&lt;li&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;Removes sessi&lt;/span&gt;&lt;span style=&quot;font-family: Source Sans Pro;&quot;&gt;on entries from failed node&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-family: Source Sans Pro;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;Clears out held locks and&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-size: large;&quot;&gt;Closes open cursors&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;3647&quot; data-start=&quot;3563&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;This ensures that no leftover artifacts from the failed node block other operations.&lt;/span&gt;&lt;/p&gt;&lt;p data-end=&quot;3647&quot; data-start=&quot;3563&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h2 data-end=&quot;3699&quot; data-section-id=&quot;ocsofc&quot; data-start=&quot;3654&quot;&gt;&lt;span style=&quot;color: #e06666; font-family: Source Sans Pro; font-size: large;&quot;&gt;Resource Rebalancing and Global Management&lt;/span&gt;&lt;/h2&gt;
&lt;p data-end=&quot;3725&quot; data-start=&quot;3701&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Once recovery completes:&lt;/span&gt;&lt;/p&gt;
&lt;ul data-end=&quot;3946&quot; data-start=&quot;3727&quot;&gt;
&lt;li data-end=&quot;3796&quot; data-section-id=&quot;1az3flf&quot; data-start=&quot;3727&quot;&gt;
&lt;p data-end=&quot;3796&quot; data-start=&quot;3729&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;span data-end=&quot;3762&quot; data-start=&quot;3729&quot;&gt;Global Resource Manager (GRM)&lt;/span&gt; redistributes workload equitably.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li data-end=&quot;3863&quot; data-section-id=&quot;3dtsol&quot; data-start=&quot;3797&quot;&gt;
&lt;p data-end=&quot;3863&quot; data-start=&quot;3799&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Now, Remaining nodes may adjust cache ownership and background tasks.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li data-end=&quot;3946&quot; data-section-id=&quot;toee6p&quot; data-start=&quot;3864&quot;&gt;
&lt;p data-end=&quot;3946&quot; data-start=&quot;3866&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;The jobs that were running on the failed node get reassigned or restarted as needed.&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;
&lt;h2 data-end=&quot;3984&quot; data-section-id=&quot;zohuod&quot; data-start=&quot;3953&quot;&gt;&lt;span style=&quot;color: #e06666; font-family: Source Sans Pro; font-size: large;&quot;&gt;When the Failed Node Rejoins&lt;/span&gt;&lt;/h2&gt;
&lt;p data-end=&quot;4030&quot; data-start=&quot;3986&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Node reintegration is handled automatically:&lt;/span&gt;&lt;/p&gt;
&lt;ul data-end=&quot;4190&quot; data-start=&quot;4032&quot;&gt;
&lt;li data-end=&quot;4078&quot; data-section-id=&quot;121akpe&quot; data-start=&quot;4032&quot;&gt;
&lt;p data-end=&quot;4078&quot; data-start=&quot;4034&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro;&quot;&gt;Clusterware checks that the node is in sync and&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;Cache fusion ensures all blocks are consistent.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li data-end=&quot;4190&quot; data-section-id=&quot;cxomzj&quot; data-start=&quot;4129&quot;&gt;
&lt;p data-end=&quot;4190&quot; data-start=&quot;4131&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;The node resumes participation without manual intervention.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;4260&quot; data-start=&quot;4192&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;This is a key strength of Oracle RAC.&amp;nbsp; It is designed to heal itself.&lt;/span&gt;&lt;/p&gt;&lt;p data-end=&quot;4260&quot; data-start=&quot;4192&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p data-end=&quot;4260&quot; data-start=&quot;4192&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h2 data-end=&quot;4285&quot; data-section-id=&quot;3auoiu&quot; data-start=&quot;4267&quot;&gt;&lt;span style=&quot;color: #e06666; font-family: Source Sans Pro; font-size: large;&quot;&gt;Quick Takeaways&lt;/span&gt;&lt;/h2&gt;
&lt;ul data-end=&quot;4794&quot; data-start=&quot;4287&quot;&gt;
&lt;li data-end=&quot;4347&quot; data-section-id=&quot;l8b406&quot; data-start=&quot;4287&quot;&gt;
&lt;p data-end=&quot;4347&quot; data-start=&quot;4289&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;span data-end=&quot;4313&quot; data-start=&quot;4289&quot;&gt;Heartbeat monitoring&lt;/span&gt; detects RAC node failure quickly.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li data-end=&quot;4407&quot; data-section-id=&quot;5gxjo9&quot; data-start=&quot;4348&quot;&gt;
&lt;p data-end=&quot;4407&quot; data-start=&quot;4350&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;span data-end=&quot;4365&quot; data-start=&quot;4350&quot;&gt;GCS and GES&lt;/span&gt; redistribute cache and locks dynamically.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li data-end=&quot;4492&quot; data-section-id=&quot;vqgvxm&quot; data-start=&quot;4408&quot;&gt;
&lt;p data-end=&quot;4492&quot; data-start=&quot;4410&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;span data-end=&quot;4418&quot; data-start=&quot;4410&quot;&gt;SMON&lt;/span&gt; performs instance recovery - rolling forward and backward with redo logs.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li data-end=&quot;4539&quot; data-section-id=&quot;tzh1ug&quot; data-start=&quot;4493&quot;&gt;
&lt;p data-end=&quot;4539&quot; data-start=&quot;4495&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;span data-end=&quot;4503&quot; data-start=&quot;4495&quot;&gt;PMON&lt;/span&gt; cleans session resources and locks.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li data-end=&quot;4619&quot; data-section-id=&quot;52zjxf&quot; data-start=&quot;4540&quot;&gt;
&lt;p data-end=&quot;4619&quot; data-start=&quot;4542&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;span data-end=&quot;4576&quot; data-start=&quot;4542&quot;&gt;TAF and Application Continuity&lt;/span&gt; help maintain seamless client connections.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li data-end=&quot;4690&quot; data-section-id=&quot;1k6vc0n&quot; data-start=&quot;4620&quot;&gt;
&lt;p data-end=&quot;4690&quot; data-start=&quot;4622&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;span data-end=&quot;4659&quot; data-start=&quot;4622&quot;&gt;Failed nodes rejoin automatically&lt;/span&gt; once consistency is validated.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li data-end=&quot;4794&quot; data-section-id=&quot;1k3j5pd&quot; data-start=&quot;4691&quot;&gt;
&lt;p data-end=&quot;4794&quot; data-start=&quot;4693&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Oracle RAC’s automation makes it resilient — that’s often a focal point &lt;em data-end=&quot;4793&quot; data-start=&quot;4765&quot;&gt;About Interview discussion&lt;/em&gt;.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-end=&quot;4814&quot; data-section-id=&quot;8dtpi&quot; data-start=&quot;4801&quot;&gt;&lt;span style=&quot;color: #e06666; font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/h2&gt;&lt;h2 data-end=&quot;4814&quot; data-section-id=&quot;8dtpi&quot; data-start=&quot;4801&quot;&gt;&lt;span style=&quot;color: #e06666; font-family: Source Sans Pro; font-size: large;&quot;&gt;Conclusion&lt;/span&gt;&lt;/h2&gt;
&lt;p data-end=&quot;5206&quot; data-start=&quot;4816&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Understanding how a 3‑node Oracle RAC handles node failure isn’t just a great interview talking point - it iss essential knowledge for any serious DBA or cloud architect working with high‑availability systems. From Clusterware&#39;s heartbeat detection to SMON&#39;s intelligent instance recovery and PMON&#39;s cleanup duties, each layer plays a role in ensuring that a failure doesn’t become an outage.&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;5596&quot; data-start=&quot;5208&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;What makes RAC particularly powerful is its &lt;em data-end=&quot;5266&quot; data-start=&quot;5252&quot;&gt;self‑healing&lt;/em&gt; nature: workload redistribution, automatic redo application, and seamless client failover are designed to minimize impact and protect data integrity. Whether you’re prepping for your next interview, designing resilient systems, or troubleshooting production clusters, grasping these recovery mechanics gives you a practical edge.&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;5781&quot; data-start=&quot;5598&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;If you have experienced node failovers in production or have questions about specific scenarios, keep reading&amp;nbsp; n consider joining the conversation with your insights and experiences.&lt;/span&gt;&lt;/p&gt;
&lt;h2 data-end=&quot;5795&quot; data-section-id=&quot;1xvwnkw&quot; data-start=&quot;5788&quot;&gt;&lt;span style=&quot;color: #e06666; font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/h2&gt;&lt;h2 data-end=&quot;5795&quot; data-section-id=&quot;1xvwnkw&quot; data-start=&quot;5788&quot;&gt;&lt;span style=&quot;color: #e06666; font-family: Source Sans Pro; font-size: large;&quot;&gt;FAQs&lt;/span&gt;&lt;/h2&gt;
&lt;ol data-end=&quot;6632&quot; data-start=&quot;5797&quot;&gt;
&lt;li data-end=&quot;5949&quot; data-section-id=&quot;q0hdqt&quot; data-start=&quot;5797&quot;&gt;
&lt;p data-end=&quot;5949&quot; data-start=&quot;5800&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;span data-end=&quot;5850&quot; data-start=&quot;5800&quot;&gt;What triggers instance recovery in Oracle RAC?&lt;/span&gt;&lt;br data-end=&quot;5853&quot; data-start=&quot;5850&quot; /&gt;
A missing heartbeat from a node triggers Clusterware to initiate recovery on surviving nodes.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li data-end=&quot;6100&quot; data-section-id=&quot;1mlmip3&quot; data-start=&quot;5951&quot;&gt;
&lt;p data-end=&quot;6100&quot; data-start=&quot;5954&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;span data-end=&quot;5998&quot; data-start=&quot;5954&quot;&gt;How do surviving nodes access redo logs?&lt;/span&gt;&lt;br data-end=&quot;6001&quot; data-start=&quot;5998&quot; /&gt;
In RAC, redo logs are on shared storage, enabling any surviving instance to read and apply them.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li data-end=&quot;6269&quot; data-section-id=&quot;1gwxyt3&quot; data-start=&quot;6102&quot;&gt;
&lt;p data-end=&quot;6269&quot; data-start=&quot;6105&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;span data-end=&quot;6170&quot; data-start=&quot;6105&quot;&gt;What is the key the difference between SMON and PMON during a failure?&lt;/span&gt;&lt;br data-end=&quot;6173&quot; data-start=&quot;6170&quot; /&gt;
SMON handles data recovery, while PMON cleans up sessions and resources from the failed node.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li data-end=&quot;6443&quot; data-section-id=&quot;1ei7wrr&quot; data-start=&quot;6271&quot;&gt;
&lt;p data-end=&quot;6443&quot; data-start=&quot;6274&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;span data-end=&quot;6340&quot; data-start=&quot;6274&quot;&gt;Can applications reconnect automatically after a node failure?&lt;/span&gt;&lt;br data-end=&quot;6343&quot; data-start=&quot;6340&quot; /&gt;
Yes — with TAF or Application Continuity configured, client sessions can reconnect transparently.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li data-end=&quot;6632&quot; data-section-id=&quot;1aunwvi&quot; data-start=&quot;6445&quot;&gt;
&lt;p data-end=&quot;6632&quot; data-start=&quot;6448&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;span data-end=&quot;6516&quot; data-start=&quot;6448&quot;&gt;Does the failed node require manual steps to rejoin the cluster?&lt;/span&gt;&lt;br data-end=&quot;6519&quot; data-start=&quot;6516&quot; /&gt;
Typically no — Oracle Clusterware synchronizes and reintegrates it automatically if no inconsistencies remain.&lt;/span&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;hr data-end=&quot;6637&quot; data-start=&quot;6634&quot; /&gt;
&lt;h2 data-end=&quot;6662&quot; data-section-id=&quot;6egkm0&quot; data-start=&quot;6639&quot;&gt;&lt;br /&gt;&lt;/h2&gt;
&lt;p data-end=&quot;6941&quot; data-is-last-node=&quot;&quot; data-is-only-node=&quot;&quot; data-start=&quot;6664&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;em data-end=&quot;6793&quot; data-start=&quot;6667&quot;&gt;Did this help your interview prep or real‑world RAC troubleshooting? Drop a comment below with your experience or questions!&lt;/em&gt;&lt;br data-end=&quot;6796&quot; data-start=&quot;6793&quot; /&gt;&lt;em data-end=&quot;6941&quot; data-is-last-node=&quot;&quot; data-start=&quot;6799&quot;&gt;&amp;amp; If you found this useful, please share it on LinkedIn, Twitter, or with your DBA communities and help others master Oracle RAC resilience!&lt;/em&gt;&lt;/span&gt;&lt;/p&gt;</description><link>https://oracle-dba-help.blogspot.com/2026/06/how-oracle-rac-handles-node-failure.html</link><author>noreply@blogger.com (Nikhil Kotak)</author><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1375587508974804970.post-141411029581628612</guid><pubDate>Mon, 29 Jun 2026 09:07:00 +0000</pubDate><atom:updated>2026-06-30T09:36:04.191+08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">PostgreSQL</category><title>pg_gather: PostgreSQL Snapshot Tool Every DBA Should Use</title><description>&lt;p&gt;
  &lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro;&quot;&gt;&amp;nbsp;Assume&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;Its 2 AM. Alerts are firing. CPU is maxed out, connections are piling up,
      and the application team is already asking for an ETA.&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p data-end=&quot;461&quot; data-start=&quot;222&quot;&gt;
  &lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;You SSH into the server, open&amp;nbsp;&lt;code data-end=&quot;258&quot; data-start=&quot;252&quot;&gt;psql&lt;/code&gt;, and start your usual routine - check&amp;nbsp;&lt;code data-end=&quot;315&quot; data-start=&quot;297&quot;&gt;pg_stat_activity&lt;/code&gt;, look at locks, scan logs, maybe run a few custom queries you’ve built
    over the years. Fifteen minutes in, you still don’t have the full
    picture.&lt;/span&gt;
&lt;/p&gt;
&lt;p data-end=&quot;594&quot; data-start=&quot;463&quot;&gt;
  &lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;This is exactly where things break down in production - - not because
    PostgreSQL lacks visibility, but because the data is scattered.&lt;/span&gt;
&lt;/p&gt;
&lt;p data-end=&quot;640&quot; data-start=&quot;596&quot;&gt;
  &lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;That is where&amp;nbsp;&lt;/span&gt;&lt;strong data-end=&quot;622&quot; data-start=&quot;609&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;pg_gather&lt;/strong&gt;&lt;span style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;&amp;nbsp;changes the game.&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;
&lt;p&gt;&lt;/p&gt;
&lt;p data-end=&quot;881&quot; data-start=&quot;642&quot;&gt;
  &lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p data-end=&quot;881&quot; data-start=&quot;642&quot;&gt;
  &lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Instead of manually stitching together information from multiple system
    views, logs, and configs, pg_gather captures everything in one go and
    presents it as a structured report. Its not just a tool&amp;nbsp; its a
    repeatable diagnostic workflow.&lt;/span&gt;
&lt;/p&gt;
&lt;p data-end=&quot;1082&quot; data-start=&quot;883&quot;&gt;
  &lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;In this article, I will walk through how pg_gather actually fits into
    real-world DBA operations, when it helps, when it doesnt, and how to use it
    effectively during incidents&amp;nbsp; - not after they are over.&lt;/span&gt;
&lt;/p&gt;
&lt;p data-end=&quot;1082&quot; data-start=&quot;883&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p data-end=&quot;1082&quot; data-start=&quot;883&quot;&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h2 data-end=&quot;1130&quot; data-section-id=&quot;1xrqzbs&quot; data-start=&quot;1089&quot;&gt;
  &lt;span role=&quot;text&quot;&gt;&lt;strong data-end=&quot;1130&quot; data-start=&quot;1092&quot;&gt;&lt;span style=&quot;color: #e06666; font-family: Source Sans Pro; font-size: x-large;&quot;&gt;Why DBAs Struggle During Incidents&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;
&lt;/h2&gt;
&lt;p data-end=&quot;1186&quot; data-start=&quot;1132&quot;&gt;
  &lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;In PostgreSQL, all the data you need is already there:&lt;/span&gt;
&lt;/p&gt;
&lt;ul data-end=&quot;1345&quot; data-start=&quot;1188&quot;&gt;
  &lt;li data-end=&quot;1225&quot; data-section-id=&quot;4fmod9&quot; data-start=&quot;1188&quot;&gt;
    &lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;code data-end=&quot;1208&quot; data-start=&quot;1190&quot;&gt;pg_stat_activity&lt;/code&gt;&amp;nbsp;shows sessions&lt;/span&gt;
  &lt;/li&gt;
  &lt;li data-end=&quot;1257&quot; data-section-id=&quot;1p9rgjt&quot; data-start=&quot;1226&quot;&gt;
    &lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;code data-end=&quot;1238&quot; data-start=&quot;1228&quot;&gt;pg_locks&lt;/code&gt;&amp;nbsp;shows
      contention&lt;/span&gt;
  &lt;/li&gt;
  &lt;li data-end=&quot;1309&quot; data-section-id=&quot;rmiq39&quot; data-start=&quot;1258&quot;&gt;
    &lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;code data-end=&quot;1278&quot; data-start=&quot;1260&quot;&gt;pg_stat_bgwriter&lt;/code&gt;&amp;nbsp;hints at checkpoint pressure&lt;/span&gt;
  &lt;/li&gt;
  &lt;li data-end=&quot;1345&quot; data-section-id=&quot;yeed5a&quot; data-start=&quot;1310&quot;&gt;
    &lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Logs tell the story of failures&lt;/span&gt;
  &lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;1411&quot; data-start=&quot;1347&quot;&gt;
  &lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;But here is the problem —&amp;nbsp;&lt;strong data-end=&quot;1410&quot; data-start=&quot;1372&quot;&gt;they don&#39;t tell the story together&lt;/strong&gt;.&lt;/span&gt;
&lt;/p&gt;
&lt;p data-end=&quot;1462&quot; data-start=&quot;1413&quot;&gt;
  &lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;In production, I’ve seen this pattern repeatedly:&lt;/span&gt;
&lt;/p&gt;
&lt;ul data-end=&quot;1575&quot; data-start=&quot;1463&quot;&gt;
  &lt;li data-end=&quot;1487&quot; data-section-id=&quot;1hcxie&quot; data-start=&quot;1463&quot;&gt;
    &lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;One DBA checks locks&lt;/span&gt;
  &lt;/li&gt;
  &lt;li data-end=&quot;1510&quot; data-section-id=&quot;enzes0&quot; data-start=&quot;1488&quot;&gt;
    &lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Another checks CPU&lt;/span&gt;
  &lt;/li&gt;
  &lt;li data-end=&quot;1538&quot; data-section-id=&quot;1nroxzw&quot; data-start=&quot;1511&quot;&gt;
    &lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Someone else scans logs&lt;/span&gt;
  &lt;/li&gt;
  &lt;li data-end=&quot;1575&quot; data-section-id=&quot;102tpoc&quot; data-start=&quot;1539&quot;&gt;
    &lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Nobody correlates it fast enough&lt;/span&gt;
  &lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;1629&quot; data-start=&quot;1577&quot;&gt;
  &lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;By the time you connect the dots, the issue is gone.&lt;/span&gt;
&lt;/p&gt;
&lt;p data-end=&quot;1629&quot; data-start=&quot;1577&quot;&gt;
  &lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;h2 data-end=&quot;1673&quot; data-section-id=&quot;2nbva9&quot; data-start=&quot;1636&quot;&gt;
  &lt;span role=&quot;text&quot;&gt;&lt;strong data-end=&quot;1673&quot; data-start=&quot;1639&quot;&gt;&lt;span style=&quot;color: #e06666; font-family: Source Sans Pro; font-size: x-large;&quot;&gt;What pg_gather Actually Solves&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;
&lt;/h2&gt;
&lt;p data-end=&quot;1734&quot; data-start=&quot;1675&quot;&gt;
  &lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro;&quot;&gt;Think of pg_gather as a&amp;nbsp;&lt;strong data-end=&quot;1733&quot; data-start=&quot;1699&quot;&gt;point-in-time forensic capture&lt;/strong&gt;.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;Instead of running 20+ commands manually, you run one:&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;pre class=&quot;overflow-visible! px-0!&quot; data-end=&quot;1855&quot; data-start=&quot;1792&quot;&gt;&lt;div class=&quot;relative w-full mt-4 mb-1&quot;&gt;&lt;div class=&quot;relative&quot;&gt;&lt;div class=&quot;h-full min-h-0 min-w-0&quot;&gt;&lt;div class=&quot;h-full min-h-0 min-w-0&quot;&gt;&lt;div class=&quot;border border-token-border-light border-radius-3xl corner-superellipse/1.1 rounded-3xl&quot;&gt;&lt;div class=&quot;h-full w-full border-radius-3xl bg-token-bg-elevated-secondary corner-superellipse/1.1 overflow-clip rounded-3xl lxnfua_clipPathFallback&quot;&gt;&lt;div class=&quot;pointer-events-none absolute inset-x-4 top-12 bottom-4&quot;&gt;&lt;div class=&quot;pointer-events-none sticky z-40 shrink-0 z-1!&quot;&gt;&lt;div class=&quot;sticky bg-token-border-light&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;w-full overflow-x-hidden overflow-y-auto&quot;&gt;&lt;div class=&quot;relative z-0 flex max-w-full&quot;&gt;&lt;div class=&quot;q9tKkq_viewer cm-editor z-10 light:cm-light dark:cm-light flex h-full w-full flex-col items-stretch ͼ5 ͼj&quot; dir=&quot;ltr&quot; id=&quot;code-block-viewer&quot;&gt;&lt;div class=&quot;cm-scroller&quot;&gt;&lt;div class=&quot;cm-content q9tKkq_readonly&quot;&gt;&lt;span style=&quot;font-family: courier; font-size: large;&quot;&gt;./pg_gather &lt;span class=&quot;ͼf&quot;&gt;-d&lt;/span&gt; prod_db &lt;span class=&quot;ͼf&quot;&gt;-o&lt;/span&gt; incident_$(date +%s).html&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;
&lt;p data-end=&quot;1870&quot; data-start=&quot;1857&quot;&gt;
  &lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p data-end=&quot;1870&quot; data-start=&quot;1857&quot;&gt;
  &lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;It provides all the necessary information such as,&amp;nbsp;&lt;/span&gt;
&lt;/p&gt;
&lt;ul data-end=&quot;2049&quot; data-start=&quot;1871&quot;&gt;
  &lt;li data-end=&quot;1900&quot; data-section-id=&quot;1b67tlz&quot; data-start=&quot;1871&quot;&gt;
    &lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Full configuration snapshot&lt;/span&gt;
  &lt;/li&gt;
  &lt;li data-end=&quot;1934&quot; data-section-id=&quot;6o0mfq&quot; data-start=&quot;1901&quot;&gt;
    &lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Active sessions and wait events&lt;/span&gt;
  &lt;/li&gt;
  &lt;li data-end=&quot;1971&quot; data-section-id=&quot;sbjbc2&quot; data-start=&quot;1935&quot;&gt;
    &lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Lock chains (who is blocking whom)&lt;/span&gt;
  &lt;/li&gt;
  &lt;li data-end=&quot;2003&quot; data-section-id=&quot;ikmjho&quot; data-start=&quot;1972&quot;&gt;
    &lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Query statistics (if enabled)&lt;/span&gt;
  &lt;/li&gt;
  &lt;li data-end=&quot;2030&quot; data-section-id=&quot;1khckoz&quot; data-start=&quot;2004&quot;&gt;
    &lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Vacuum and bloat signals&lt;/span&gt;
  &lt;/li&gt;
  &lt;li data-end=&quot;2049&quot; data-section-id=&quot;g1yz08&quot; data-start=&quot;2031&quot;&gt;
    &lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;OS-level metrics&lt;/span&gt;
  &lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;2113&quot; data-start=&quot;2051&quot;&gt;
  &lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;The key benefit is not just automation -&amp;nbsp;&amp;nbsp;&lt;strong data-end=&quot;2112&quot; data-start=&quot;2092&quot;&gt;its consistency&lt;/strong&gt;.&lt;/span&gt;
&lt;/p&gt;
&lt;p data-end=&quot;2176&quot; data-start=&quot;2115&quot;&gt;
  &lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Every DBA on your team collects the same dataset, every time.&lt;/span&gt;
&lt;/p&gt;
&lt;h2 data-end=&quot;2229&quot; data-section-id=&quot;1wq50s3&quot; data-start=&quot;2183&quot;&gt;
  &lt;span role=&quot;text&quot;&gt;&lt;strong data-end=&quot;2229&quot; data-start=&quot;2186&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;
&lt;/h2&gt;
&lt;h2 data-end=&quot;2229&quot; data-section-id=&quot;1wq50s3&quot; data-start=&quot;2183&quot;&gt;
  &lt;span role=&quot;text&quot;&gt;&lt;strong data-end=&quot;2229&quot; data-start=&quot;2186&quot;&gt;&lt;span style=&quot;color: #e06666; font-family: Source Sans Pro; font-size: x-large;&quot;&gt;What Gets Captured (And Why It Matters)&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;
&lt;/h2&gt;
&lt;h3 data-end=&quot;2264&quot; data-section-id=&quot;wt31eb&quot; data-start=&quot;2231&quot;&gt;
  &lt;span role=&quot;text&quot;&gt;&lt;strong data-end=&quot;2264&quot; data-start=&quot;2235&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Session &amp;amp; Lock Visibility&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/h3&gt;&lt;h3 data-end=&quot;2264&quot; data-section-id=&quot;wt31eb&quot; data-start=&quot;2231&quot;&gt;&lt;p data-end=&quot;2331&quot; data-start=&quot;2266&quot; style=&quot;font-size: medium; font-weight: 400;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;When a system slows down, it’s usually not CPU - it’s contention. Use the below query.&lt;/span&gt;&lt;/p&gt;&lt;!--HTML generated using hilite.me--&gt;&lt;div style=&quot;background: rgb(38, 34, 32); border-color: gray; border-image: initial; border-style: solid; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;&quot;&gt;&lt;pre style=&quot;line-height: 125%; margin: 0px;&quot;&gt;&lt;span style=&quot;font-family: courier; font-size: x-small;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;span style=&quot;color: #ddd0c0;&quot;&gt;SELECT&lt;/span&gt; &lt;span style=&quot;color: #ddd0c0;&quot;&gt;pid,&lt;/span&gt; &lt;span style=&quot;color: #ddd0c0;&quot;&gt;state,&lt;/span&gt; &lt;span style=&quot;color: #ddd0c0;&quot;&gt;wait_event_type,&lt;/span&gt; &lt;span style=&quot;color: #ddd0c0;&quot;&gt;wait_event,&lt;/span&gt; &lt;span style=&quot;color: #ddd0c0;&quot;&gt;query&lt;/span&gt;
&lt;span style=&quot;color: #ddd0c0;&quot;&gt;FROM&lt;/span&gt; &lt;span style=&quot;color: #ddd0c0;&quot;&gt;pg_stat_activity&lt;/span&gt;
&lt;span style=&quot;color: #ddd0c0;&quot;&gt;WHERE&lt;/span&gt; &lt;span style=&quot;color: #ddd0c0;&quot;&gt;state&lt;/span&gt; &lt;span style=&quot;color: #878787;&quot;&gt;!=&lt;/span&gt; &lt;span style=&quot;color: #c9b98f;&quot;&gt;&#39;idle&#39;&lt;/span&gt;&lt;span style=&quot;color: #ddd0c0;&quot;&gt;;&lt;/span&gt;&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/h3&gt;&lt;pre class=&quot;overflow-visible! px-0!&quot; data-end=&quot;2442&quot; data-start=&quot;2333&quot;&gt;&lt;div class=&quot;relative w-full mt-4 mb-1&quot;&gt;&lt;div class=&quot;relative&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;
&lt;p data-end=&quot;2472&quot; data-start=&quot;2444&quot;&gt;
  &lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro;&quot;&gt;pg_gather expands this into -&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;Blocking trees,&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;Wait chains&amp;nbsp; &amp;amp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;Duration analysis&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p data-end=&quot;2628&quot; data-start=&quot;2525&quot;&gt;
&lt;/p&gt;
&lt;p data-end=&quot;2628&quot; data-start=&quot;2525&quot;&gt;
  &lt;span style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large;&quot;&gt;Sometimes, in the production system -&amp;nbsp; problem is often not the slow
    query - its the one holding the lock.&lt;/span&gt;&lt;/p&gt;&lt;p data-end=&quot;2628&quot; data-start=&quot;2525&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p data-end=&quot;2628&quot; data-start=&quot;2525&quot;&gt;
&lt;/p&gt;
&lt;h3 data-end=&quot;2665&quot; data-section-id=&quot;13uhat6&quot; data-start=&quot;2635&quot;&gt;
  &lt;span role=&quot;text&quot;&gt;&lt;strong data-end=&quot;2665&quot; data-start=&quot;2639&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Configuration Snapshot&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;
&lt;/h3&gt;
&lt;p data-end=&quot;2731&quot; data-start=&quot;2667&quot;&gt;
  &lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;One underrated cause of performance issues is bad configuration.&lt;/span&gt;
&lt;/p&gt;
&lt;p data-end=&quot;2752&quot; data-start=&quot;2733&quot;&gt;
  &lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;pg_gather captures:&lt;/span&gt;
&lt;/p&gt;
&lt;ul data-end=&quot;2826&quot; data-start=&quot;2753&quot;&gt;
  &lt;li data-end=&quot;2771&quot; data-section-id=&quot;gs49e5&quot; data-start=&quot;2753&quot;&gt;
    &lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;code data-end=&quot;2771&quot; data-start=&quot;2755&quot;&gt;shared_buffers&lt;/code&gt;&lt;/span&gt;
  &lt;/li&gt;
  &lt;li data-end=&quot;2784&quot; data-section-id=&quot;mgflub&quot; data-start=&quot;2772&quot;&gt;
    &lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;code data-end=&quot;2784&quot; data-start=&quot;2774&quot;&gt;work_mem&lt;/code&gt;&lt;/span&gt;
  &lt;/li&gt;
  &lt;li data-end=&quot;2806&quot; data-section-id=&quot;y0otuj&quot; data-start=&quot;2785&quot;&gt;
    &lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;autovacuum settings&lt;/span&gt;
  &lt;/li&gt;
  &lt;li data-end=&quot;2826&quot; data-section-id=&quot;1n9053s&quot; data-start=&quot;2807&quot;&gt;
    &lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;connection limits&lt;/span&gt;
  &lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;2913&quot; data-start=&quot;2828&quot;&gt;
  &lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Useful when&amp;nbsp;Comparing configs across environments (dev vs prod
    mismatch is common).&lt;/span&gt;
&lt;/p&gt;
&lt;p data-end=&quot;2913&quot; data-start=&quot;2828&quot;&gt;
  &lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;h3 data-end=&quot;2953&quot; data-section-id=&quot;1jyryuq&quot; data-start=&quot;2920&quot;&gt;
  &lt;span role=&quot;text&quot;&gt;&lt;strong data-end=&quot;2953&quot; data-start=&quot;2924&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Vacuum and Bloat Analysis&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;
&lt;/h3&gt;
&lt;p data-end=&quot;3017&quot; data-start=&quot;2955&quot;&gt;
  &lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Autovacuum is one of those things you ignore… until it breaks.&lt;/span&gt;
&lt;/p&gt;
&lt;p data-end=&quot;3040&quot; data-start=&quot;3019&quot;&gt;
  &lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;pg_gather highlights:&lt;/span&gt;
&lt;/p&gt;
&lt;ul data-end=&quot;3092&quot; data-start=&quot;3041&quot;&gt;
  &lt;li data-end=&quot;3054&quot; data-section-id=&quot;w74iv&quot; data-start=&quot;3041&quot;&gt;
    &lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Dead tuples&lt;/span&gt;
  &lt;/li&gt;
  &lt;li data-end=&quot;3067&quot; data-section-id=&quot;bcx5mj&quot; data-start=&quot;3055&quot;&gt;
    &lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Vacuum lag&lt;/span&gt;
  &lt;/li&gt;
  &lt;li data-end=&quot;3092&quot; data-section-id=&quot;i3i174&quot; data-start=&quot;3068&quot;&gt;
    &lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Table bloat indicators&lt;/span&gt;
  &lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;3207&quot; data-start=&quot;3094&quot;&gt;
  &lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;strong data-end=&quot;3119&quot; data-start=&quot;3094&quot;&gt;&lt;br /&gt;&lt;/strong&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p data-end=&quot;3207&quot; data-start=&quot;3094&quot;&gt;
  &lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;strong data-end=&quot;3119&quot; data-start=&quot;3094&quot;&gt;Real issue I hv seen:&amp;nbsp;&lt;/strong&gt;A blocked autovacuum due to a long transaction - resulted in → table bloat
    → sudden performance drop.&lt;/span&gt;
&lt;/p&gt;
&lt;h3 data-end=&quot;3253&quot; data-section-id=&quot;lo7mfc&quot; data-start=&quot;3214&quot;&gt;
  &lt;span role=&quot;text&quot;&gt;&lt;strong data-end=&quot;3253&quot; data-start=&quot;3218&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;
&lt;/h3&gt;
&lt;h3 data-end=&quot;3253&quot; data-section-id=&quot;lo7mfc&quot; data-start=&quot;3214&quot;&gt;
  &lt;span role=&quot;text&quot;&gt;&lt;strong data-end=&quot;3253&quot; data-start=&quot;3218&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Query-Level Insights (Critical)&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;
&lt;/h3&gt;
&lt;p data-end=&quot;3308&quot; data-start=&quot;3255&quot;&gt;
  &lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Without&amp;nbsp;&lt;code data-end=&quot;3283&quot; data-start=&quot;3263&quot;&gt;pg_stat_statements&lt;/code&gt;, you are basically blind. One should enable it.&lt;/span&gt;
&lt;/p&gt;
&lt;div style=&quot;background: rgb(38, 34, 32); border-color: gray; border-image: initial; border-style: solid; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;&quot;&gt;
  &lt;pre style=&quot;line-height: 16.25px; margin: 0px;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;span style=&quot;color: #ddd0c0;&quot;&gt;# CREATE&lt;/span&gt; &lt;span style=&quot;color: #ddd0c0;&quot;&gt;EXTENSION&lt;/span&gt; &lt;span style=&quot;color: #ddd0c0;&quot;&gt;pg_stat_statements;&lt;/span&gt;
&lt;span style=&quot;color: #ddd0c0;&quot;&gt;# alter system set shared_preload_libraries&lt;/span&gt; &lt;span style=&quot;color: #878787;&quot;&gt;=&lt;/span&gt; &lt;span style=&quot;color: #c9b98f;&quot;&gt;&#39;pg_stat_statements&#39;&lt;/span&gt;
&lt;/pre&gt;
&lt;/div&gt;
&lt;pre class=&quot;overflow-visible! px-0!&quot; data-end=&quot;3369&quot; data-start=&quot;3322&quot;&gt;&lt;div class=&quot;relative w-full mt-4 mb-1&quot;&gt;&lt;div class=&quot;relative&quot;&gt;&lt;div class=&quot;h-full min-h-0 min-w-0&quot;&gt;&lt;div class=&quot;h-full min-h-0 min-w-0&quot;&gt;&lt;div class=&quot;border border-token-border-light border-radius-3xl corner-superellipse/1.1 rounded-3xl&quot;&gt;&lt;div class=&quot;h-full w-full border-radius-3xl bg-token-bg-elevated-secondary corner-superellipse/1.1 overflow-clip rounded-3xl lxnfua_clipPathFallback&quot;&gt;&lt;div class=&quot;pointer-events-none absolute inset-x-4 top-12 bottom-4&quot;&gt;&lt;div class=&quot;pointer-events-none sticky z-40 shrink-0 z-1!&quot;&gt;&lt;div class=&quot;sticky bg-token-border-light&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;w-full overflow-x-hidden overflow-y-auto&quot;&gt;&lt;div class=&quot;relative z-0 flex max-w-full&quot;&gt;&lt;div class=&quot;q9tKkq_viewer cm-editor z-10 light:cm-light dark:cm-light flex h-full w-full flex-col items-stretch ͼ5 ͼj&quot; dir=&quot;ltr&quot; id=&quot;code-block-viewer&quot;&gt;&lt;div class=&quot;cm-scroller&quot;&gt;&lt;div class=&quot;cm-content q9tKkq_readonly&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;cm-content q9tKkq_readonly&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;Once done, restart the PostgreSQL service and now pg_gather can show:&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;
&lt;ul data-end=&quot;3584&quot; data-start=&quot;3513&quot;&gt;
  &lt;li data-end=&quot;3540&quot; data-section-id=&quot;1n35g8z&quot; data-start=&quot;3513&quot;&gt;
    &lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Top queries by total time&lt;/span&gt;
  &lt;/li&gt;
  &lt;li data-end=&quot;3563&quot; data-section-id=&quot;139eg3l&quot; data-start=&quot;3541&quot;&gt;
    &lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Frequency vs latency&lt;/span&gt;
  &lt;/li&gt;
  &lt;li data-end=&quot;3584&quot; data-section-id=&quot;fk5zz5&quot; data-start=&quot;3564&quot;&gt;
    &lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Execution patterns&lt;/span&gt;
  &lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;3669&quot; data-start=&quot;3586&quot;&gt;
  &lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;Note that : It requires restart, but worth it in every serious production system.&lt;/span&gt;
&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;3669&quot; data-start=&quot;3586&quot;&gt;
  &lt;span style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;h2 data-end=&quot;3721&quot; data-section-id=&quot;isxp47&quot; data-start=&quot;3676&quot;&gt;
  &lt;span role=&quot;text&quot;&gt;&lt;strong data-end=&quot;3721&quot; data-start=&quot;3679&quot;&gt;&lt;span style=&quot;color: #e06666; font-family: Source Sans Pro; font-size: x-large;&quot;&gt;Running pg_gather Safely in Production&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;
&lt;/h2&gt;
&lt;p data-end=&quot;3772&quot; data-start=&quot;3723&quot;&gt;
  &lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;span style=&quot;color: #6fa8dc;&quot;&gt;&lt;b&gt;A common concern:&lt;/b&gt;&lt;/span&gt;&amp;nbsp;&lt;em data-end=&quot;3772&quot; data-start=&quot;3741&quot;&gt;Will this impact my database?&lt;/em&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p data-end=&quot;3814&quot; data-start=&quot;3774&quot;&gt;
  &lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;span style=&quot;color: #6fa8dc;&quot;&gt;&lt;b&gt;Short answer:&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;strong data-end=&quot;3814&quot; data-start=&quot;3788&quot;&gt;Minimal, but not zero.&lt;/strong&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p data-end=&quot;3830&quot; data-start=&quot;3816&quot;&gt;
  &lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Best practice:&lt;/span&gt;
&lt;/p&gt;
&lt;pre class=&quot;overflow-visible! px-0!&quot; data-end=&quot;3895&quot; data-start=&quot;3832&quot;&gt;&lt;div class=&quot;relative w-full mt-4 mb-1&quot;&gt;&lt;div class=&quot;relative&quot;&gt;&lt;div class=&quot;h-full min-h-0 min-w-0&quot;&gt;&lt;div class=&quot;h-full min-h-0 min-w-0&quot;&gt;&lt;div class=&quot;border border-token-border-light border-radius-3xl corner-superellipse/1.1 rounded-3xl&quot;&gt;&lt;div class=&quot;h-full w-full border-radius-3xl bg-token-bg-elevated-secondary corner-superellipse/1.1 overflow-clip rounded-3xl lxnfua_clipPathFallback&quot;&gt;&lt;div class=&quot;pointer-events-none absolute inset-x-4 top-12 bottom-4&quot;&gt;&lt;div class=&quot;pointer-events-none sticky z-40 shrink-0 z-1!&quot;&gt;&lt;div class=&quot;sticky bg-token-border-light&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;w-full overflow-x-hidden overflow-y-auto&quot;&gt;&lt;div class=&quot;relative z-0 flex max-w-full&quot;&gt;&lt;div class=&quot;q9tKkq_viewer cm-editor z-10 light:cm-light dark:cm-light flex h-full w-full flex-col items-stretch ͼ5 ͼj&quot; dir=&quot;ltr&quot; id=&quot;code-block-viewer&quot;&gt;&lt;div class=&quot;cm-scroller&quot;&gt;&lt;div class=&quot;cm-content q9tKkq_readonly&quot;&gt;&lt;span style=&quot;font-family: courier; font-size: medium;&quot;&gt;nice &lt;span class=&quot;ͼf&quot;&gt;-n&lt;/span&gt; &lt;span class=&quot;ͼb&quot;&gt;10&lt;/span&gt; ./pg_gather &lt;span class=&quot;ͼf&quot;&gt;-d&lt;/span&gt; db_name &amp;gt; gather.log &lt;span class=&quot;ͼb&quot;&gt;2&lt;/span&gt;&amp;gt;&amp;amp;1&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;
&lt;p data-end=&quot;3914&quot; data-start=&quot;3897&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p data-end=&quot;3914&quot; data-start=&quot;3897&quot;&gt;
  &lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Why this matters:&lt;/span&gt;
&lt;/p&gt;
&lt;ul data-end=&quot;3986&quot; data-start=&quot;3915&quot;&gt;
  &lt;li data-end=&quot;3935&quot; data-section-id=&quot;eavwfz&quot; data-start=&quot;3915&quot;&gt;
    &lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Lower CPU priority&lt;/span&gt;
  &lt;/li&gt;
  &lt;li data-end=&quot;3967&quot; data-section-id=&quot;wp8hf8&quot; data-start=&quot;3936&quot;&gt;
    &lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;No interference with workload&lt;/span&gt;
  &lt;/li&gt;
  &lt;li data-end=&quot;3986&quot; data-section-id=&quot;14ttbuc&quot; data-start=&quot;3968&quot;&gt;
    &lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Full audit trail&lt;/span&gt;
  &lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;4128&quot; data-start=&quot;3988&quot;&gt;
  &lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;strong data-end=&quot;4006&quot; data-start=&quot;3988&quot;&gt;&lt;br /&gt;&lt;/strong&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p data-end=&quot;4128&quot; data-start=&quot;3988&quot;&gt;
  &lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;strong data-end=&quot;4006&quot; data-start=&quot;3988&quot;&gt;Reality check:&lt;/strong&gt;&lt;br data-end=&quot;4009&quot; data-start=&quot;4006&quot; /&gt;On very large systems, even read
    queries can create noticeable load. Avoid running during peak spikes unless
    necessary.&lt;/span&gt;
&lt;/p&gt;
&lt;h2 data-end=&quot;4180&quot; data-section-id=&quot;z2szgf&quot; data-start=&quot;4135&quot;&gt;
  &lt;span role=&quot;text&quot;&gt;&lt;strong data-end=&quot;4180&quot; data-start=&quot;4138&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;
&lt;/h2&gt;
&lt;h2 data-end=&quot;4180&quot; data-section-id=&quot;z2szgf&quot; data-start=&quot;4135&quot;&gt;
  &lt;span role=&quot;text&quot;&gt;&lt;strong data-end=&quot;4180&quot; data-start=&quot;4138&quot;&gt;&lt;span style=&quot;color: #e06666; font-family: Source Sans Pro; font-size: x-large;&quot;&gt;When to Run pg_gather (Timing Matters)&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;
&lt;/h2&gt;
&lt;p data-end=&quot;4220&quot; data-start=&quot;4182&quot;&gt;
  &lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;This is where most teams get it wrong.&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;&lt;p data-end=&quot;4220&quot; data-start=&quot;4182&quot;&gt;&lt;/p&gt;&lt;ul style=&quot;text-align: left;&quot;&gt;&lt;li&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro;&quot;&gt;Running it after the issue occurred is not useful. Because t&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;he data is gone.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro;&quot;&gt;If it has run during the issue, that the &#39;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;Goldmine&#39;.&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;/p&gt;
&lt;h3 data-end=&quot;4298&quot; data-section-id=&quot;1csmdr4&quot; data-start=&quot;4274&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;&lt;span style=&quot;font-weight: 400;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;&lt;h3 data-end=&quot;4298&quot; data-section-id=&quot;1csmdr4&quot; data-start=&quot;4274&quot;&gt;
  &lt;span style=&quot;font-weight: normal;&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;&lt;span&gt;Because it&amp;nbsp;&lt;/span&gt;&lt;span&gt;Captures most important information such as :&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;Active locks ,&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;Running queries,&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;Wait events&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;&lt;div&gt;
&lt;/div&gt;
&lt;p data-end=&quot;4448&quot; data-start=&quot;4382&quot;&gt;
  &lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;It is advisable, to run it multiple times during a long incident to track
    progression.&lt;/span&gt;
&lt;/p&gt;
&lt;p data-end=&quot;4448&quot; data-start=&quot;4382&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p data-end=&quot;4448&quot; data-start=&quot;4382&quot;&gt;
&lt;/p&gt;
&lt;h2 data-end=&quot;4503&quot; data-section-id=&quot;14p2ewr&quot; data-start=&quot;4455&quot;&gt;
  &lt;span role=&quot;text&quot;&gt;&lt;strong data-end=&quot;4503&quot; data-start=&quot;4458&quot;&gt;&lt;span style=&quot;color: #e06666; font-family: Source Sans Pro; font-size: x-large;&quot;&gt;PostgreSQL vs Oracle: Diagnostic Approach&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;
&lt;/h2&gt;
&lt;p data-end=&quot;4551&quot; data-start=&quot;4505&quot;&gt;
  &lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;As someone who has worked extensively on both - here is short terminology
    graph.&lt;/span&gt;
&lt;/span&gt;&lt;/p&gt;
&lt;div class=&quot;TyagGW_tableContainer&quot;&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;TyagGW_tableContainer&quot;&gt;
  &lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
    &lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEiClEvhocADUJPAS97Uz_ormVBqfoayvmp2UXkQ8Eo5IPF1M3vY4mNYnwSfS4wxvhftfUdHfeMjNl2nVtkkIN7FHCU51IKpg18bQM1WIsoToEP0yT0kNMNCwr3EFnaMMqc5H8BbhuPBXB65oeWHA-niDS3Qb_r5pegPZRi7ZGFogsdQs2LxMd7g9tx5cF8&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img alt=&quot;&quot; data-original-height=&quot;199&quot; data-original-width=&quot;567&quot; height=&quot;224&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEiClEvhocADUJPAS97Uz_ormVBqfoayvmp2UXkQ8Eo5IPF1M3vY4mNYnwSfS4wxvhftfUdHfeMjNl2nVtkkIN7FHCU51IKpg18bQM1WIsoToEP0yT0kNMNCwr3EFnaMMqc5H8BbhuPBXB65oeWHA-niDS3Qb_r5pegPZRi7ZGFogsdQs2LxMd7g9tx5cF8=w640-h224&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;
  &lt;/div&gt;
  &lt;br /&gt;&lt;br /&gt;
&lt;/div&gt;
&lt;div class=&quot;TyagGW_tableContainer&quot;&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;TyagGW_tableContainer&quot;&gt;&lt;br /&gt;&lt;/div&gt;
&lt;div class=&quot;TyagGW_tableContainer&quot;&gt;&lt;strong data-end=&quot;4942&quot; data-start=&quot;4900&quot;&gt;&lt;span style=&quot;color: #e06666; font-family: Source Sans Pro; font-size: x-large;&quot;&gt;Installation and Execution&amp;nbsp;&lt;/span&gt;&lt;/strong&gt;&lt;/div&gt;&lt;h2 data-end=&quot;4942&quot; data-section-id=&quot;eyyjjy&quot; data-start=&quot;4897&quot;&gt;&lt;div style=&quot;background: rgb(38, 34, 32); border-color: gray; border-image: initial; border-style: solid; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;&quot;&gt;&lt;pre style=&quot;line-height: 125%; margin: 0px;&quot;&gt;&lt;span style=&quot;font-family: courier; font-size: small; font-weight: normal;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;span style=&quot;color: #70757a;&quot;&gt;# Install git&lt;/span&gt;
&lt;span style=&quot;color: #ddd0c0;&quot;&gt;sudo&lt;/span&gt; &lt;span style=&quot;color: #ddd0c0;&quot;&gt;apt&lt;/span&gt; &lt;span style=&quot;color: #ddd0c0;&quot;&gt;install&lt;/span&gt; &lt;span style=&quot;color: #ddd0c0;&quot;&gt;git&lt;/span&gt; &lt;span style=&quot;color: #878787;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #ddd0c0;&quot;&gt;y&lt;/span&gt;

&lt;span style=&quot;color: #70757a;&quot;&gt;# Clone repo&lt;/span&gt;
&lt;span style=&quot;color: #ddd0c0;&quot;&gt;git&lt;/span&gt; &lt;span style=&quot;color: #ddd0c0;&quot;&gt;clone&lt;/span&gt; &lt;span style=&quot;color: #ddd0c0;&quot;&gt;https:&lt;/span&gt;&lt;span style=&quot;color: #878787;&quot;&gt;//&lt;/span&gt;&lt;span style=&quot;color: #ddd0c0;&quot;&gt;github&lt;/span&gt;&lt;span style=&quot;color: #878787;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #ddd0c0;&quot;&gt;com&lt;/span&gt;&lt;span style=&quot;color: #878787;&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color: #ddd0c0;&quot;&gt;jobinau&lt;/span&gt;&lt;span style=&quot;color: #878787;&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color: #ddd0c0;&quot;&gt;pg_gather&lt;/span&gt;&lt;span style=&quot;color: #878787;&quot;&gt;.&lt;/span&gt;&lt;span style=&quot;color: #ddd0c0;&quot;&gt;git&lt;/span&gt;
&lt;span style=&quot;color: #ddd0c0;&quot;&gt;cd&lt;/span&gt; &lt;span style=&quot;color: #ddd0c0;&quot;&gt;pg_gather&lt;/span&gt;

&lt;span style=&quot;color: #70757a;&quot;&gt;# Make executable&lt;/span&gt;
&lt;span style=&quot;color: #ddd0c0;&quot;&gt;chmod&lt;/span&gt; &lt;span style=&quot;color: #878787;&quot;&gt;+&lt;/span&gt;&lt;span style=&quot;color: #ddd0c0;&quot;&gt;x&lt;/span&gt; &lt;span style=&quot;color: #ddd0c0;&quot;&gt;pg_gather&lt;/span&gt;

&lt;span style=&quot;color: #70757a;&quot;&gt;# Run&lt;/span&gt;
&lt;span style=&quot;color: #878787;&quot;&gt;./&lt;/span&gt;&lt;span style=&quot;color: #ddd0c0;&quot;&gt;pg_gather&lt;/span&gt; &lt;span style=&quot;color: #878787;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #ddd0c0;&quot;&gt;d&lt;/span&gt; &lt;span style=&quot;color: #ddd0c0;&quot;&gt;postgres&lt;/span&gt;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;/h2&gt;
&lt;pre class=&quot;overflow-visible! px-0!&quot; data-end=&quot;5140&quot; data-start=&quot;4944&quot;&gt;&lt;div class=&quot;relative w-full mt-4 mb-1&quot;&gt;&lt;div class=&quot;relative&quot;&gt;&lt;div class=&quot;h-full min-h-0 min-w-0&quot;&gt;&lt;div class=&quot;h-full min-h-0 min-w-0&quot;&gt;&lt;div class=&quot;border border-token-border-light border-radius-3xl corner-superellipse/1.1 rounded-3xl&quot;&gt;&lt;div class=&quot;h-full w-full border-radius-3xl bg-token-bg-elevated-secondary corner-superellipse/1.1 overflow-clip rounded-3xl lxnfua_clipPathFallback&quot;&gt;&lt;div class=&quot;pointer-events-none absolute inset-x-4 top-12 bottom-4&quot;&gt;&lt;div class=&quot;pointer-events-none sticky z-40 shrink-0 z-1!&quot;&gt;&lt;div class=&quot;sticky bg-token-border-light&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;w-full overflow-x-hidden overflow-y-auto&quot;&gt;&lt;div class=&quot;relative z-0 flex max-w-full&quot;&gt;&lt;div class=&quot;q9tKkq_viewer cm-editor z-10 light:cm-light dark:cm-light flex h-full w-full flex-col items-stretch ͼ5 ͼj&quot; dir=&quot;ltr&quot; id=&quot;code-block-viewer&quot;&gt;&lt;div class=&quot;cm-scroller&quot;&gt;&lt;div class=&quot;cm-content q9tKkq_readonly&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;
&lt;h2 data-end=&quot;5748&quot; data-section-id=&quot;ox849y&quot; data-start=&quot;5726&quot;&gt;&lt;span style=&quot;color: #e06666; font-family: Source Sans Pro; font-size: x-large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/h2&gt;&lt;h2 data-end=&quot;5748&quot; data-section-id=&quot;ox849y&quot; data-start=&quot;5726&quot;&gt;&lt;span style=&quot;color: #e06666; font-family: Source Sans Pro; font-size: x-large;&quot;&gt;Quick Takeaways&lt;/span&gt;&lt;/h2&gt;
&lt;ul data-end=&quot;6045&quot; data-start=&quot;5750&quot;&gt;
  &lt;li data-end=&quot;5796&quot; data-section-id=&quot;fzcxtj&quot; data-start=&quot;5750&quot;&gt;
    &lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;pg_gather is a snapshot tool, not monitoring&lt;/span&gt;
  &lt;/li&gt;
  &lt;li data-end=&quot;5833&quot; data-section-id=&quot;1ccz55z&quot; data-start=&quot;5797&quot;&gt;
    &lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Run it during incidents, not after&lt;/span&gt;
  &lt;/li&gt;
  &lt;li data-end=&quot;5870&quot; data-section-id=&quot;17dckvs&quot; data-start=&quot;5834&quot;&gt;
    &lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Enables faster root cause analysis&lt;/span&gt;
  &lt;/li&gt;
  &lt;li data-end=&quot;5915&quot; data-section-id=&quot;10bg4cu&quot; data-start=&quot;5871&quot;&gt;
    &lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Works best with pg_stat_statements enabled&lt;/span&gt;
  &lt;/li&gt;
  &lt;li data-end=&quot;5957&quot; data-section-id=&quot;16nzhgt&quot; data-start=&quot;5916&quot;&gt;
    &lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Safe for production when used carefully&lt;/span&gt;
  &lt;/li&gt;
  &lt;li data-end=&quot;6001&quot; data-section-id=&quot;qo66qn&quot; data-start=&quot;5958&quot;&gt;
    &lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Standardizes troubleshooting across teams&lt;/span&gt;
  &lt;/li&gt;
  &lt;li data-end=&quot;6045&quot; data-section-id=&quot;1rt0lle&quot; data-start=&quot;6002&quot;&gt;
    &lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Great for audits and baseline comparisons&lt;/span&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;h2 data-end=&quot;6096&quot; data-section-id=&quot;1el0yeg&quot; data-start=&quot;6052&quot;&gt;&lt;span role=&quot;text&quot;&gt;&lt;strong data-end=&quot;6096&quot; data-start=&quot;6055&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/h2&gt;&lt;h2 data-end=&quot;6096&quot; data-section-id=&quot;1el0yeg&quot; data-start=&quot;6052&quot;&gt;&lt;span role=&quot;text&quot;&gt;&lt;strong data-end=&quot;6096&quot; data-start=&quot;6055&quot;&gt;&lt;span style=&quot;color: #e06666; font-family: Source Sans Pro; font-size: x-large;&quot;&gt;DBA Takeaways&lt;/span&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;ul data-end=&quot;6392&quot; data-start=&quot;6098&quot;&gt;
  &lt;li data-end=&quot;6156&quot; data-section-id=&quot;37305v&quot; data-start=&quot;6098&quot;&gt;
    &lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Most DBAs waste time collecting data, not analyzing it&lt;/span&gt;
  &lt;/li&gt;
  &lt;li data-end=&quot;6204&quot; data-section-id=&quot;1slr4p5&quot; data-start=&quot;6157&quot;&gt;
    &lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Lock chains are often the hidden root cause&lt;/span&gt;
  &lt;/li&gt;
  &lt;li data-end=&quot;6258&quot; data-section-id=&quot;15r9m5p&quot; data-start=&quot;6205&quot;&gt;
    &lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Autovacuum issues show up only when it’s too late&lt;/span&gt;
  &lt;/li&gt;
  &lt;li data-end=&quot;6323&quot; data-section-id=&quot;91b6i2&quot; data-start=&quot;6259&quot;&gt;
    &lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Teams without standard diagnostics struggle during incidents&lt;/span&gt;
  &lt;/li&gt;
  &lt;li data-end=&quot;6392&quot; data-section-id=&quot;1czb0cq&quot; data-start=&quot;6324&quot;&gt;
    &lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Historical snapshots are extremely valuable for recurring issues&lt;/span&gt;
  &lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;6508&quot; data-start=&quot;6394&quot;&gt;
  &lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;strong data-end=&quot;6413&quot; data-start=&quot;6394&quot;&gt;Recommendation:&lt;/strong&gt;&lt;br data-end=&quot;6416&quot; data-start=&quot;6413&quot; /&gt;Maintain a shared repository of
    pg_gather reports -&amp;nbsp; it also becomes your internal knowledge base.&lt;/span&gt;&lt;/p&gt;&lt;p data-end=&quot;6508&quot; data-start=&quot;6394&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h2 data-end=&quot;6564&quot; data-section-id=&quot;k7czgq&quot; data-start=&quot;6515&quot;&gt;
  &lt;span style=&quot;color: #e06666; font-size: x-large;&quot;&gt;&lt;span role=&quot;text&quot;&gt;&lt;strong data-end=&quot;6564&quot; data-start=&quot;6518&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro;&quot;&gt;MINI CASE STUDY: Lock Contention Nightmare&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;
&lt;/span&gt;&lt;/h2&gt;
&lt;p data-end=&quot;6646&quot; data-start=&quot;6566&quot;&gt;
  &lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;strong data-end=&quot;6578&quot; data-start=&quot;6566&quot;&gt;Problem:&amp;nbsp;&lt;/strong&gt;Application slowdown, API latency
    jumped from 200ms to 6 seconds.&lt;/span&gt;
&lt;/p&gt;
&lt;p data-end=&quot;6661&quot; data-start=&quot;6648&quot;&gt;
  &lt;span style=&quot;font-size: large;&quot;&gt;&lt;strong data-end=&quot;6661&quot; data-start=&quot;6648&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro;&quot;&gt;Symptoms :&amp;nbsp;&lt;/span&gt;&lt;/strong&gt;&lt;span style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;High CPU +&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;Connection spikes +&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;Queries stuck in wait state&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;6747&quot; data-start=&quot;6724&quot;&gt;
  &lt;strong data-end=&quot;6747&quot; data-start=&quot;6724&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;pg_gather Findings:&lt;/span&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;ul data-end=&quot;6849&quot; data-start=&quot;6748&quot;&gt;
  &lt;li data-end=&quot;6795&quot; data-section-id=&quot;1rx4uyr&quot; data-start=&quot;6748&quot;&gt;
    &lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;One transaction holding lock for 18 minutes&lt;/span&gt;
  &lt;/li&gt;
  &lt;li data-end=&quot;6826&quot; data-section-id=&quot;q4d1kx&quot; data-start=&quot;6796&quot;&gt;
    &lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Downstream queries waiting&lt;/span&gt;
  &lt;/li&gt;
  &lt;li data-end=&quot;6849&quot; data-section-id=&quot;1l1bipi&quot; data-start=&quot;6827&quot;&gt;
    &lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Autovacuum blocked&lt;/span&gt;
  &lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;6908&quot; data-start=&quot;6851&quot;&gt;&lt;strong data-end=&quot;6866&quot; data-start=&quot;6851&quot; style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;Root Cause:&amp;nbsp;&lt;/strong&gt;&lt;span style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: x-large;&quot;&gt;Uncommitted transaction from batch
    job.&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;6918&quot; data-start=&quot;6910&quot;&gt;&lt;strong data-end=&quot;6918&quot; data-start=&quot;6910&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p data-end=&quot;6918&quot; data-start=&quot;6910&quot;&gt;
  &lt;strong data-end=&quot;6918&quot; data-start=&quot;6910&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: medium;&quot;&gt;Fix:&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/strong&gt;&lt;span style=&quot;font-family: courier;&quot;&gt;&lt;span class=&quot;ͼ8&quot;&gt;SELECT&lt;/span&gt; pg_terminate_backend(&lt;span class=&quot;ͼ8&quot;&gt;&amp;lt;&lt;/span&gt;pid&lt;span class=&quot;ͼ8&quot;&gt;&amp;gt;&lt;/span&gt;);&lt;/span&gt;&lt;/p&gt;&lt;pre class=&quot;overflow-visible! px-0!&quot; data-end=&quot;6965&quot; data-start=&quot;6919&quot;&gt;&lt;div class=&quot;relative w-full mt-4 mb-1&quot;&gt;&lt;div class=&quot;relative&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;
&lt;p data-end=&quot;6979&quot; data-start=&quot;6967&quot;&gt;
  &lt;strong data-end=&quot;6979&quot; data-start=&quot;6967&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Outcome:&lt;/span&gt;&lt;/strong&gt;
&lt;/p&gt;
&lt;ul data-end=&quot;7063&quot; data-start=&quot;6980&quot;&gt;
  &lt;li data-end=&quot;7011&quot; data-section-id=&quot;41d9os&quot; data-start=&quot;6980&quot;&gt;
    &lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;System recovered in minutes&lt;/span&gt;
  &lt;/li&gt;
  &lt;li data-end=&quot;7063&quot; data-section-id=&quot;pk08ya&quot; data-start=&quot;7012&quot;&gt;
    &lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Without pg_gather, took ~40 minutes to diagnose&lt;/span&gt;
  &lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-end=&quot;7087&quot; data-section-id=&quot;1746l3a&quot; data-start=&quot;7070&quot;&gt;
  &lt;span role=&quot;text&quot;&gt;&lt;strong data-end=&quot;7087&quot; data-start=&quot;7073&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;
&lt;/h2&gt;
&lt;h2 data-end=&quot;7087&quot; data-section-id=&quot;1746l3a&quot; data-start=&quot;7070&quot;&gt;
  &lt;span style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;;&quot;&gt;&lt;span style=&quot;color: #e06666; font-size: x-large;&quot;&gt;Conclusion&lt;/span&gt;&lt;/span&gt;
&lt;/h2&gt;
&lt;h2 data-end=&quot;7087&quot; data-section-id=&quot;1746l3a&quot; data-start=&quot;7070&quot;&gt;
  &lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-weight: normal;&quot;&gt;pg_gather is one of those tools you don&#39;t realize you need until you are
    deep into a production issue.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-weight: normal;&quot;&gt;PostgreSQL gives you excellent visibility - but it expects you to assemble
    the puzzle yourself. That works when you have time. It does not work when
    systems are burning.&lt;/span&gt;&lt;/span&gt;
&lt;/h2&gt;
&lt;p data-end=&quot;7631&quot; data-start=&quot;7362&quot;&gt;
  &lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;By standardizing how diagnostics are captured, pg_gather removes guesswork
    and speeds up decision-making. It doesn’t replace monitoring tools, and it
    doesn’t give you historical trends like enterprise systems — but for
    point-in-time analysis, it’s incredibly effective.&lt;/span&gt;
&lt;/p&gt;
&lt;p data-end=&quot;7800&quot; data-start=&quot;7633&quot;&gt;
  &lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;If you’re managing production PostgreSQL systems and still relying on
    manual queries during incidents, you’re adding unnecessary delay to your
    troubleshooting process.&lt;/span&gt;
&lt;/p&gt;
&lt;p data-end=&quot;7889&quot; data-start=&quot;7802&quot;&gt;
  &lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Run it in your environment. Capture baseline reports. Use it during your
    next incident.&lt;/span&gt;
&lt;/p&gt;
&lt;p data-end=&quot;7928&quot; data-start=&quot;7891&quot;&gt;
  &lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;That’s when it proves its real value.&lt;/span&gt;
&lt;/p&gt;
&lt;h2 data-end=&quot;7946&quot; data-section-id=&quot;1jdhu1s&quot; data-start=&quot;7935&quot;&gt;
  &lt;span role=&quot;text&quot;&gt;&lt;strong data-end=&quot;7946&quot; data-start=&quot;7938&quot;&gt;&lt;span style=&quot;color: #e06666; font-family: Source Sans Pro; font-size: x-large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;
&lt;/h2&gt;
&lt;h2 data-end=&quot;7946&quot; data-section-id=&quot;1jdhu1s&quot; data-start=&quot;7935&quot;&gt;
  &lt;span role=&quot;text&quot;&gt;&lt;strong data-end=&quot;7946&quot; data-start=&quot;7938&quot;&gt;&lt;span style=&quot;color: #e06666; font-family: Source Sans Pro; font-size: x-large;&quot;&gt;FAQs&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;
&lt;/h2&gt;
&lt;p data-end=&quot;8076&quot; data-start=&quot;7948&quot;&gt;
  &lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;strong data-end=&quot;7989&quot; data-start=&quot;7948&quot;&gt;1. Does pg_gather impact performance?&lt;/strong&gt;&lt;br data-end=&quot;7992&quot; data-start=&quot;7989&quot; /&gt;Minimal impact, but noticeable on
    very large systems. Use&amp;nbsp;&lt;code data-end=&quot;8056&quot; data-start=&quot;8050&quot;&gt;nice&lt;/code&gt;&amp;nbsp;to reduce priority.&lt;/span&gt;
&lt;/p&gt;
&lt;p data-end=&quot;8171&quot; data-start=&quot;8078&quot;&gt;
  &lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;strong data-end=&quot;8117&quot; data-start=&quot;8078&quot;&gt;2. Can it replace monitoring tools?&lt;/strong&gt;&lt;br data-end=&quot;8120&quot; data-start=&quot;8117&quot; /&gt;No. It’s a snapshot tool, not
    real-time monitoring.&lt;/span&gt;
&lt;/p&gt;
&lt;p data-end=&quot;8261&quot; data-start=&quot;8173&quot;&gt;
  &lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;strong data-end=&quot;8207&quot; data-start=&quot;8173&quot;&gt;3. Do I need superuser access?&lt;/strong&gt;&lt;br data-end=&quot;8210&quot; data-start=&quot;8207&quot; /&gt;Recommended. Without it, some data
    will be missing.&lt;/span&gt;
&lt;/p&gt;
&lt;p data-end=&quot;8354&quot; data-start=&quot;8263&quot;&gt;
  &lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;strong data-end=&quot;8302&quot; data-start=&quot;8263&quot;&gt;4. Is pg_stat_statements mandatory?&lt;/strong&gt;&lt;br data-end=&quot;8305&quot; data-start=&quot;8302&quot; /&gt;No, but without it you lose
    query-level insights.&lt;/span&gt;
&lt;/p&gt;
&lt;p data-end=&quot;8461&quot; data-start=&quot;8356&quot;&gt;
  &lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;strong data-end=&quot;8403&quot; data-start=&quot;8356&quot;&gt;5. Can I run it on managed cloud databases?&lt;/strong&gt;&lt;br data-end=&quot;8406&quot; data-start=&quot;8403&quot; /&gt;Yes, but access restrictions may
    limit data collection.&lt;/span&gt;
&lt;/p&gt;
&lt;h2 data-end=&quot;8492&quot; data-section-id=&quot;tuz599&quot; data-start=&quot;8468&quot;&gt;&lt;br /&gt;&lt;/h2&gt;
&lt;h2 data-end=&quot;8492&quot; data-section-id=&quot;tuz599&quot; data-start=&quot;8468&quot;&gt;
  &lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-weight: normal;&quot;&gt;Have you ever been stuck diagnosing a PostgreSQL issue where data was
    scattered everywhere?&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-weight: normal;&quot;&gt;Do you rely on custom scripts, or something like pg_gather?&lt;/span&gt;
&lt;/span&gt;&lt;/h2&gt;
&lt;p data-end=&quot;8717&quot; data-start=&quot;8648&quot;&gt;
  &lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro;&quot;&gt;Curious to hear how others handle incident diagnostics in production.&lt;/span&gt;
&lt;/span&gt;&lt;/p&gt;&lt;p data-end=&quot;8717&quot; data-start=&quot;8648&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p data-end=&quot;8717&quot; data-start=&quot;8648&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro;&quot;&gt;Source :&amp;nbsp;&lt;a href=&quot;https://github.com/jobinau/pg_gather&quot;&gt;https://github.com/jobinau/pg_gather&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p data-end=&quot;8717&quot; data-start=&quot;8648&quot;&gt;&lt;span style=&quot;font-size: large;&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro;&quot;&gt;&lt;a href=&quot;https://www.percona.com/blog/what-is-in-pg_gather-version-33/&quot;&gt;https://www.percona.com/blog/what-is-in-pg_gather-version-33/&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h2 data-end=&quot;8746&quot; data-section-id=&quot;1nxoj8a&quot; data-start=&quot;8724&quot;&gt;&lt;br /&gt;&lt;/h2&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;
</description><link>https://oracle-dba-help.blogspot.com/2026/06/pggather-postgresql-snapshot-tool-every.html</link><author>noreply@blogger.com (Nikhil Kotak)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/a/AVvXsEiClEvhocADUJPAS97Uz_ormVBqfoayvmp2UXkQ8Eo5IPF1M3vY4mNYnwSfS4wxvhftfUdHfeMjNl2nVtkkIN7FHCU51IKpg18bQM1WIsoToEP0yT0kNMNCwr3EFnaMMqc5H8BbhuPBXB65oeWHA-niDS3Qb_r5pegPZRi7ZGFogsdQs2LxMd7g9tx5cF8=s72-w640-h224-c" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1375587508974804970.post-6205122134882404820</guid><pubDate>Sun, 28 Jun 2026 12:48:00 +0000</pubDate><atom:updated>2026-06-28T20:48:00.116+08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">RMAN</category><title>Oracle PDB Point-in-Time Recovery Without Downtime of other PDBs</title><description>&lt;p&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&amp;nbsp;Most Oracle outages do not begin with hardware failure.&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;451&quot; data-start=&quot;128&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;They start with a bad deployment, an accidental delete statement, a broken batch job, or a developer connecting to the wrong pluggable database at 2 AM. In a large multitenant environment, that usually means one application becomes corrupted while dozens of other applications inside the same CDB continue running normally.&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;730&quot; data-start=&quot;453&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Years ago, recovering from that kind of incident often meant painful decisions. Either accept application-level data loss or restore the entire database and impact every tenant sharing the environment. Neither option was ideal for production systems running critical workloads.&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;p&gt;&lt;/p&gt;
&lt;p data-end=&quot;793&quot; data-start=&quot;732&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Oracle Multitenant changed that recovery model significantly.&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;1124&quot; data-start=&quot;795&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;With PDB Point-in-Time Recovery (PDB PITR), Oracle can restore and recover only the affected pluggable database while the remaining PDBs continue serving live traffic. Internally Oracle creates a temporary auxiliary environment, performs recovery there, and then plugs the recovered PDB back into the original container database.&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;1312&quot; data-start=&quot;1126&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;On paper the process looks simple. In production, however, archive log gaps, wrong timestamps, FRA exhaustion, and auxiliary storage failures are where things usually become complicated.&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;1529&quot; data-start=&quot;1314&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;This article walks through how single PDB recovery actually works in real environments, what Oracle does internally during recovery, and the operational lessons DBAs usually learn only after handling live incidents.&lt;/span&gt;&lt;/p&gt;
&lt;h1 data-end=&quot;1582&quot; data-section-id=&quot;9t1ade&quot; data-start=&quot;1536&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/h1&gt;&lt;h1 data-end=&quot;1582&quot; data-section-id=&quot;9t1ade&quot; data-start=&quot;1536&quot;&gt;&lt;span style=&quot;color: #e06666; font-family: Source Sans Pro; font-size: x-large;&quot;&gt;Why PDB-Level Recovery Matters in Production&lt;/span&gt;&lt;/h1&gt;
&lt;p data-end=&quot;1655&quot; data-start=&quot;1584&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;The biggest advantage of Multitenant recovery is operational isolation.&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;2008&quot; data-start=&quot;1657&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;In shared Oracle environments, it is common to host many applications inside the same container database. One PDB may support finance workloads, another may handle reporting, while several others serve APIs or internal applications. When corruption affects only one tenant, shutting down the entire CDB becomes unnecessary and operationally expensive.&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;2133&quot; data-start=&quot;2010&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;PDB PITR allows DBAs to isolate the damaged tenant and rewind only that portion of the environment to an earlier timestamp.&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;2194&quot; data-start=&quot;2135&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;This becomes extremely valuable during incidents involving:&lt;/span&gt;&lt;/p&gt;
&lt;ul data-end=&quot;2370&quot; data-start=&quot;2196&quot;&gt;
&lt;li data-end=&quot;2221&quot; data-section-id=&quot;1op9y9p&quot; data-start=&quot;2196&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;
accidental schema drops
&lt;/span&gt;&lt;/li&gt;
&lt;li data-end=&quot;2242&quot; data-section-id=&quot;tunw5d&quot; data-start=&quot;2222&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;
failed deployments
&lt;/span&gt;&lt;/li&gt;
&lt;li data-end=&quot;2265&quot; data-section-id=&quot;8orvo1&quot; data-start=&quot;2243&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;
corrupted data loads
&lt;/span&gt;&lt;/li&gt;
&lt;li data-end=&quot;2280&quot; data-section-id=&quot;16lbrja&quot; data-start=&quot;2266&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;
bad ETL jobs
&lt;/span&gt;&lt;/li&gt;
&lt;li data-end=&quot;2326&quot; data-section-id=&quot;iqfp9o&quot; data-start=&quot;2281&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;
application bugs generating invalid updates
&lt;/span&gt;&lt;/li&gt;
&lt;li data-end=&quot;2370&quot; data-section-id=&quot;p5q8nx&quot; data-start=&quot;2327&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;
logical corruption inside a single tenant
&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;2471&quot; data-start=&quot;2372&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;The key point is that unrelated applications continue operating while recovery happens in parallel.&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;2572&quot; data-start=&quot;2473&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;That is a massive operational improvement compared to traditional database-wide restore procedures.&lt;/span&gt;&lt;/p&gt;
&lt;h2 data-end=&quot;2603&quot; data-section-id=&quot;1xadvaa&quot; data-start=&quot;2579&quot;&gt;&lt;br /&gt;&lt;/h2&gt;
&lt;h1 data-end=&quot;2975&quot; data-section-id=&quot;1oojfsa&quot; data-start=&quot;2928&quot;&gt;&lt;span style=&quot;color: #e06666; font-family: Source Sans Pro; font-size: x-large;&quot;&gt;What Oracle Actually Does During PDB Recovery&lt;/span&gt;&lt;/h1&gt;
&lt;p data-end=&quot;3106&quot; data-start=&quot;2977&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;A lot of DBAs initially assume Oracle directly restores files into the damaged PDB. That is not how the process works internally.&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;3374&quot; data-start=&quot;3108&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Oracle first creates a temporary auxiliary instance using the location specified in the recovery command. This auxiliary environment acts as a staging area where Oracle restores the root container metadata and then recovers the target PDB to the requested timestamp.&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;3541&quot; data-start=&quot;3376&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;After recovery completes successfully, Oracle automatically unplugs the recovered PDB from the auxiliary instance and plugs it back into the original production CDB.&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;3625&quot; data-start=&quot;3543&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;The elegant part is that all of this happens while the remaining PDBs stay online.&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;3838&quot; data-start=&quot;3627&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;That architecture is why Oracle requires the damaged PDB to be dropped before recovery begins. Oracle cannot plug recovered metadata into an already existing PDB with conflicting identifiers and file structures.&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;3886&quot; data-start=&quot;3840&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;The recovery workflow usually looks like this:&lt;/span&gt;&lt;/p&gt;&lt;!--HTML generated using hilite.me--&gt;&lt;div style=&quot;background: rgb(40, 42, 54); border-color: gray; border-image: initial; border-style: solid; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;&quot;&gt;&lt;pre style=&quot;line-height: 125%; margin: 0px;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;span style=&quot;color: #ff79c6;&quot;&gt;SQL&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #ff79c6;&quot;&gt;ALTER&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; PLUGGABLE &lt;/span&gt;&lt;span style=&quot;color: #ff79c6;&quot;&gt;DATABASE&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; pdb2 &lt;/span&gt;&lt;span style=&quot;color: #ff79c6;&quot;&gt;CLOSE&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #ff79c6;&quot;&gt;IMMEDIATE&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt;;&lt;/span&gt;

&lt;span style=&quot;color: #ff79c6;&quot;&gt;SQL&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #ff79c6;&quot;&gt;DROP&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; PLUGGABLE &lt;/span&gt;&lt;span style=&quot;color: #ff79c6;&quot;&gt;DATABASE&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; pdb2 &lt;/span&gt;&lt;span style=&quot;color: #ff79c6;&quot;&gt;INCLUDING&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; DATAFILES;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;pre class=&quot;overflow-visible! px-0!&quot; data-end=&quot;4018&quot; data-start=&quot;3888&quot;&gt;&lt;div class=&quot;relative w-full mt-4 mb-1&quot;&gt;&lt;div&gt;&lt;div class=&quot;relative&quot;&gt;&lt;div class=&quot;h-full min-h-0 min-w-0&quot;&gt;&lt;div class=&quot;h-full min-h-0 min-w-0&quot;&gt;&lt;div class=&quot;border border-token-border-light border-radius-3xl corner-superellipse/1.1 rounded-3xl&quot;&gt;&lt;div class=&quot;h-full w-full border-radius-3xl bg-token-bg-elevated-secondary corner-superellipse/1.1 overflow-clip rounded-3xl lxnfua_clipPathFallback&quot;&gt;&lt;div class=&quot;pointer-events-none absolute inset-x-4 top-12 bottom-4&quot;&gt;&lt;div class=&quot;pointer-events-none sticky z-40 shrink-0 z-1!&quot;&gt;&lt;div class=&quot;sticky bg-token-border-light&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;relative&quot;&gt;&lt;div&gt;&lt;div class=&quot;relative z-0 flex max-w-full&quot;&gt;&lt;div class=&quot;q9tKkq_viewer cm-editor z-10 light:cm-light dark:cm-light flex h-full w-full flex-col items-stretch ͼd ͼr&quot; dir=&quot;ltr&quot; id=&quot;code-block-viewer&quot;&gt;&lt;div class=&quot;cm-scroller&quot;&gt;&lt;pre class=&quot;cm-content q9tKkq_readonly m-0&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large;&quot;&gt;This step understandably makes many DBAs nervous the first time they perform it in production. But by the time you reach this stage, the backup validation should already be completed and recovery planning finalized.&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;&lt;p data-end=&quot;4235&quot; data-start=&quot;4020&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h1 data-end=&quot;4295&quot; data-section-id=&quot;q7a5qf&quot; data-start=&quot;4242&quot;&gt;&lt;span style=&quot;color: #e06666; font-family: Source Sans Pro; font-size: x-large;&quot;&gt;Backup Validation Matters More Than Recovery Syntax&lt;/span&gt;&lt;/h1&gt;
&lt;p data-end=&quot;4375&quot; data-start=&quot;4297&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;In real-world incidents, the RMAN command itself is rarely the difficult part.&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;4559&quot; data-start=&quot;4377&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;The real problems usually involve discovering that required archive logs are missing, backup metadata is stale, or recovery windows do not extend far enough back to avoid corruption.&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;4623&quot; data-start=&quot;4561&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Before touching the target PDB, validate everything carefully:&lt;/span&gt;&lt;/p&gt;&lt;!--HTML generated using hilite.me--&gt;&lt;div style=&quot;background: rgb(40, 42, 54); border-color: gray; border-image: initial; border-style: solid; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;&quot;&gt;&lt;pre style=&quot;line-height: 125%; margin: 0px;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt;RMAN&lt;/span&gt;&lt;span style=&quot;color: #ff79c6;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; LIST BACKUP;&lt;/span&gt;

&lt;span style=&quot;color: #f8f8f2;&quot;&gt;RMAN&lt;/span&gt;&lt;span style=&quot;color: #ff79c6;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; LIST BACKUP &lt;/span&gt;&lt;span style=&quot;color: #ff79c6;&quot;&gt;OF&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; PLUGGABLE &lt;/span&gt;&lt;span style=&quot;color: #ff79c6;&quot;&gt;DATABASE&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; pdb2;&lt;/span&gt;

&lt;span style=&quot;color: #f8f8f2;&quot;&gt;RMAN&lt;/span&gt;&lt;span style=&quot;color: #ff79c6;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; LIST BACKUP &lt;/span&gt;&lt;span style=&quot;color: #ff79c6;&quot;&gt;OF&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; ARCHIVELOG &lt;/span&gt;&lt;span style=&quot;color: #ff79c6;&quot;&gt;ALL&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt;;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;pre class=&quot;overflow-visible! px-0!&quot; data-end=&quot;4751&quot; data-start=&quot;4625&quot;&gt;&lt;div class=&quot;relative w-full mt-4 mb-1&quot;&gt;&lt;div class=&quot;relative&quot;&gt;&lt;div class=&quot;h-full min-h-0 min-w-0&quot;&gt;&lt;div class=&quot;h-full min-h-0 min-w-0&quot;&gt;&lt;div class=&quot;border border-token-border-light border-radius-3xl corner-superellipse/1.1 rounded-3xl&quot;&gt;&lt;div class=&quot;h-full w-full border-radius-3xl bg-token-bg-elevated-secondary corner-superellipse/1.1 overflow-clip rounded-3xl lxnfua_clipPathFallback&quot;&gt;&lt;div class=&quot;pointer-events-none absolute inset-x-4 top-12 bottom-4&quot;&gt;&lt;div class=&quot;pointer-events-none sticky z-40 shrink-0 z-1!&quot;&gt;&lt;div class=&quot;sticky bg-token-border-light&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;relative&quot;&gt;&lt;div class=&quot;relative z-0 flex max-w-full&quot;&gt;&lt;div class=&quot;q9tKkq_viewer cm-editor z-10 light:cm-light dark:cm-light flex h-full w-full flex-col items-stretch ͼd ͼr&quot; dir=&quot;ltr&quot; id=&quot;code-block-viewer&quot;&gt;&lt;div class=&quot;cm-scroller&quot;&gt;&lt;pre class=&quot;cm-content q9tKkq_readonly m-0&quot;&gt;&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;
&lt;p data-end=&quot;4841&quot; data-start=&quot;4753&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;If the controlfile repository lost visibility of backup pieces, recatalog them manually:&lt;/span&gt;&lt;/p&gt;&lt;!--HTML generated using hilite.me--&gt;&lt;div style=&quot;background: rgb(40, 42, 54); border-color: gray; border-image: initial; border-style: solid; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;&quot;&gt;&lt;pre style=&quot;line-height: 125%; margin: 0px;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt;RMAN&lt;/span&gt;&lt;span style=&quot;color: #ff79c6;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #ff79c6;&quot;&gt;CATALOG&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #ff79c6;&quot;&gt;START&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #ff79c6;&quot;&gt;WITH&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #bd93f9;&quot;&gt;&#39;/u01/backup/FULLBACKUP&#39;&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt;;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;pre class=&quot;overflow-visible! px-0!&quot; data-end=&quot;4916&quot; data-start=&quot;4843&quot;&gt;&lt;div class=&quot;relative w-full mt-4 mb-1&quot;&gt;&lt;div&gt;&lt;div class=&quot;relative&quot;&gt;&lt;div class=&quot;h-full min-h-0 min-w-0&quot;&gt;&lt;div class=&quot;h-full min-h-0 min-w-0&quot;&gt;&lt;div class=&quot;border border-token-border-light border-radius-3xl corner-superellipse/1.1 rounded-3xl&quot;&gt;&lt;div class=&quot;h-full w-full border-radius-3xl bg-token-bg-elevated-secondary corner-superellipse/1.1 overflow-clip rounded-3xl lxnfua_clipPathFallback&quot;&gt;&lt;div class=&quot;pointer-events-none absolute inset-x-4 top-12 bottom-4&quot;&gt;&lt;div class=&quot;pointer-events-none sticky z-40 shrink-0 z-1!&quot;&gt;&lt;div class=&quot;sticky bg-token-border-light&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;relative&quot;&gt;&lt;div&gt;&lt;div class=&quot;relative z-0 flex max-w-full&quot;&gt;&lt;div class=&quot;q9tKkq_viewer cm-editor z-10 light:cm-light dark:cm-light flex h-full w-full flex-col items-stretch ͼd ͼr&quot; dir=&quot;ltr&quot; id=&quot;code-block-viewer&quot;&gt;&lt;div class=&quot;cm-scroller&quot;&gt;&lt;pre class=&quot;cm-content q9tKkq_readonly m-0&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large;&quot;&gt;&lt;br /&gt;Then crosscheck all backup and archive log metadata:&lt;/span&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;&lt;pre class=&quot;overflow-visible! px-0!&quot; data-end=&quot;5053&quot; data-start=&quot;4972&quot;&gt;&lt;div class=&quot;relative w-full mt-4 mb-1&quot;&gt;&lt;div class=&quot;relative&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;&lt;!--HTML generated using hilite.me--&gt;&lt;div style=&quot;background: rgb(40, 42, 54); border-color: gray; border-image: initial; border-style: solid; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;&quot;&gt;&lt;pre style=&quot;line-height: 125%; margin: 0px;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt;RMAN&lt;/span&gt;&lt;span style=&quot;color: #ff79c6;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; CROSSCHECK BACKUP;&lt;/span&gt;

&lt;span style=&quot;color: #f8f8f2;&quot;&gt;RMAN&lt;/span&gt;&lt;span style=&quot;color: #ff79c6;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; CROSSCHECK ARCHIVELOG &lt;/span&gt;&lt;span style=&quot;color: #ff79c6;&quot;&gt;ALL&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt;;&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;p data-end=&quot;5265&quot; data-start=&quot;5055&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;One production issue that appears surprisingly often is aggressive archive log cleanup policies. DBAs sometimes configure retention purely around storage pressure without considering actual recovery objectives.&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;5393&quot; data-start=&quot;5267&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;The result is predictable: recovery starts successfully and then suddenly fails halfway because required logs no longer exist.&lt;/span&gt;&lt;/p&gt;
&lt;h2 data-end=&quot;5424&quot; data-section-id=&quot;1xadvaa&quot; data-start=&quot;5400&quot;&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEjvddh75NTdCMeqqIe95DnGWPu50Qcso1H06bF88aWcjLTM9FU515I80byjvwEmfCWzECwQpkRKkJ-U9-ucNp3axPq6vKH8HR1UENgxV8nVkDY26X14PuQAQKQ5ABbse_rzX_u8aZOeVVSOUC7_IP2tYQeWgNW9KOKorRTS_jhAGgZz1Se_Wq3Jo1EmFYI&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img alt=&quot;&quot; data-original-height=&quot;1024&quot; data-original-width=&quot;1536&quot; height=&quot;427&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEjvddh75NTdCMeqqIe95DnGWPu50Qcso1H06bF88aWcjLTM9FU515I80byjvwEmfCWzECwQpkRKkJ-U9-ucNp3axPq6vKH8HR1UENgxV8nVkDY26X14PuQAQKQ5ABbse_rzX_u8aZOeVVSOUC7_IP2tYQeWgNW9KOKorRTS_jhAGgZz1Se_Wq3Jo1EmFYI=w640-h427&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;/h2&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;
&lt;h1 data-end=&quot;5688&quot; data-section-id=&quot;1suo8yc&quot; data-start=&quot;5647&quot;&gt;&lt;span style=&quot;color: #e06666; font-family: Source Sans Pro; font-size: x-large;&quot;&gt;Choosing the Correct Recovery Timestamp&lt;/span&gt;&lt;/h1&gt;
&lt;p data-end=&quot;5738&quot; data-start=&quot;5690&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Timestamp selection is where experience matters.&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;5968&quot; data-start=&quot;5740&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Suppose a deployment corrupted application data at 9:42 PM. Recovering to 9:50 PM obviously does not help because corruption already exists in the redo stream. But recovering too far back may discard valid business transactions.&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;6045&quot; data-start=&quot;5970&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;This is why production DBAs rarely rely only on application team estimates.&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;6196&quot; data-start=&quot;6047&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Useful validation methods include checking deployment timestamps, audit logs, scheduler execution history, and even flashback queries when available.&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;6241&quot; data-start=&quot;6198&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large;&quot;&gt;One lesson many teams learn the hard way is that application owners often provide inaccurate incident timing during stressful outages. Recovery decisions should always be independently verified before execution.&lt;/span&gt;&lt;/p&gt;
&lt;h1 data-end=&quot;6559&quot; data-section-id=&quot;1v68vtx&quot; data-start=&quot;6521&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/h1&gt;&lt;h1 data-end=&quot;6559&quot; data-section-id=&quot;1v68vtx&quot; data-start=&quot;6521&quot;&gt;&lt;span style=&quot;color: #e06666; font-family: Source Sans Pro; font-size: large;&quot;&gt;RMAN Command for Single PDB Recovery&lt;/span&gt;&lt;/h1&gt;
&lt;p data-end=&quot;6673&quot; data-start=&quot;6561&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Once the recovery timestamp is finalized, the actual RMAN recovery operation becomes relatively straightforward.&lt;/span&gt;&lt;/p&gt;&lt;!--HTML generated using hilite.me--&gt;&lt;div style=&quot;background: rgb(40, 42, 54); border-color: gray; border-image: initial; border-style: solid; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;&quot;&gt;&lt;pre style=&quot;line-height: 125%; margin: 0px;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt;RUN {&lt;/span&gt;
&lt;span style=&quot;color: #ff79c6;&quot;&gt;SET&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #ff79c6;&quot;&gt;UNTIL&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #ff79c6;&quot;&gt;TIME&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; &lt;/span&gt;&lt;span style=&quot;color: #bd93f9;&quot;&gt;&quot;TO_DATE(&#39;17-MAY-2026 12:49:09&#39;,&lt;/span&gt;
&lt;span style=&quot;color: #bd93f9;&quot;&gt;&#39;DD-MON-YYYY HH24:MI:SS&#39;)&quot;&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt;;&lt;/span&gt;

&lt;span style=&quot;color: #f8f8f2;&quot;&gt;RECOVER PLUGGABLE &lt;/span&gt;&lt;span style=&quot;color: #ff79c6;&quot;&gt;DATABASE&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; pdb2&lt;/span&gt;
&lt;span style=&quot;color: #f8f8f2;&quot;&gt;AUXILIARY DESTINATION &lt;/span&gt;&lt;span style=&quot;color: #bd93f9;&quot;&gt;&#39;/u01/aux&#39;&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt;;&lt;/span&gt;
&lt;span style=&quot;color: #f8f8f2;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;pre class=&quot;overflow-visible! px-0!&quot; data-end=&quot;6848&quot; data-start=&quot;6675&quot;&gt;&lt;div class=&quot;relative w-full mt-4 mb-1&quot;&gt;&lt;div class=&quot;relative&quot;&gt;&lt;div class=&quot;h-full min-h-0 min-w-0&quot;&gt;&lt;div class=&quot;h-full min-h-0 min-w-0&quot;&gt;&lt;div class=&quot;border border-token-border-light border-radius-3xl corner-superellipse/1.1 rounded-3xl&quot;&gt;&lt;div class=&quot;h-full w-full border-radius-3xl bg-token-bg-elevated-secondary corner-superellipse/1.1 overflow-clip rounded-3xl lxnfua_clipPathFallback&quot;&gt;&lt;div class=&quot;pointer-events-none absolute inset-x-4 top-12 bottom-4&quot;&gt;&lt;div class=&quot;pointer-events-none sticky z-40 shrink-0 z-1!&quot;&gt;&lt;div class=&quot;sticky bg-token-border-light&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;relative&quot;&gt;&lt;div class=&quot;relative z-0 flex max-w-full&quot;&gt;&lt;div class=&quot;q9tKkq_viewer cm-editor z-10 light:cm-light dark:cm-light flex h-full w-full flex-col items-stretch ͼd ͼr&quot; dir=&quot;ltr&quot; id=&quot;code-block-viewer&quot;&gt;&lt;div class=&quot;cm-scroller&quot;&gt;&lt;pre class=&quot;cm-content q9tKkq_readonly m-0&quot;&gt;&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;
&lt;p data-end=&quot;6903&quot; data-start=&quot;6850&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;The auxiliary destination deserves special attention.&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;7140&quot; data-start=&quot;6905&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Oracle uses this location to create temporary recovery files, controlfiles, online logs, and auxiliary instance structures during recovery. Underestimating this filesystem is one of the most common operational mistakes during PDB PITR.&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;7349&quot; data-start=&quot;7142&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;In busy production environments, the auxiliary recovery workload can generate substantial I/O. If the filesystem becomes full midway through recovery, the entire operation may fail and force another restart.&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;7375&quot; data-start=&quot;7351&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;DBAs should also ensure:&lt;/span&gt;&lt;/p&gt;
&lt;ul data-end=&quot;7540&quot; data-start=&quot;7377&quot;&gt;
&lt;li data-end=&quot;7410&quot; data-section-id=&quot;1e8751o&quot; data-start=&quot;7377&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;
filesystem ownership is correct
&lt;/span&gt;&lt;/li&gt;
&lt;li data-end=&quot;7441&quot; data-section-id=&quot;12tb7tt&quot; data-start=&quot;7411&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;
Oracle has write permissions
&lt;/span&gt;&lt;/li&gt;
&lt;li data-end=&quot;7472&quot; data-section-id=&quot;6imdj6&quot; data-start=&quot;7442&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;
sufficient free space exists
&lt;/span&gt;&lt;/li&gt;
&lt;li data-end=&quot;7540&quot; data-section-id=&quot;18mahec&quot; data-start=&quot;7473&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;
backup mount points are accessible from the auxiliary environment
&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 data-end=&quot;7593&quot; data-section-id=&quot;u9bbib&quot; data-start=&quot;7547&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/h1&gt;&lt;h1 data-end=&quot;7593&quot; data-section-id=&quot;u9bbib&quot; data-start=&quot;7547&quot;&gt;&lt;span style=&quot;color: #e06666; font-family: Source Sans Pro; font-size: x-large;&quot;&gt;RMAN Backup Strategy for Multitenant Systems&lt;/span&gt;&lt;/h1&gt;
&lt;p data-end=&quot;7754&quot; data-start=&quot;7595&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Many organizations still use backup designs inherited from older non-CDB environments. Those strategies do not always scale well for large multitenant systems.&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;7819&quot; data-start=&quot;7756&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;A typical production backup configuration might look like this:&lt;/span&gt;&lt;/p&gt;&lt;!--HTML generated using hilite.me--&gt;&lt;div style=&quot;background: rgb(40, 42, 54); border-color: gray; border-image: initial; border-style: solid; border-width: 0.1em 0.1em 0.1em 0.8em; border: solid gray; overflow: auto; padding: 0.2em 0.6em; width: auto;&quot;&gt;&lt;pre style=&quot;line-height: 125%; margin: 0px;&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt;RUN {&lt;/span&gt;
&lt;span style=&quot;color: #ff79c6;&quot;&gt;ALLOCATE&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; CHANNEL c1 DEVICE &lt;/span&gt;&lt;span style=&quot;color: #ff79c6;&quot;&gt;TYPE&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; DISK;&lt;/span&gt;
&lt;span style=&quot;color: #ff79c6;&quot;&gt;ALLOCATE&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; CHANNEL c2 DEVICE &lt;/span&gt;&lt;span style=&quot;color: #ff79c6;&quot;&gt;TYPE&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; DISK;&lt;/span&gt;
&lt;span style=&quot;color: #ff79c6;&quot;&gt;ALLOCATE&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; CHANNEL c3 DEVICE &lt;/span&gt;&lt;span style=&quot;color: #ff79c6;&quot;&gt;TYPE&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; DISK;&lt;/span&gt;
&lt;span style=&quot;color: #ff79c6;&quot;&gt;ALLOCATE&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; CHANNEL c4 DEVICE &lt;/span&gt;&lt;span style=&quot;color: #ff79c6;&quot;&gt;TYPE&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; DISK;&lt;/span&gt;

&lt;span style=&quot;color: #f8f8f2;&quot;&gt;BACKUP &lt;/span&gt;&lt;span style=&quot;color: #ff79c6;&quot;&gt;AS&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; COMPRESSED BACKUPSET &lt;/span&gt;&lt;span style=&quot;color: #ff79c6;&quot;&gt;DATABASE&lt;/span&gt;
&lt;span style=&quot;color: #f8f8f2;&quot;&gt;FORMAT &lt;/span&gt;&lt;span style=&quot;color: #bd93f9;&quot;&gt;&#39;/u01/backup/FULLBACKUP/%d_%T_%s_%p_FULL&#39;&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt;;&lt;/span&gt;

&lt;span style=&quot;color: #f8f8f2;&quot;&gt;BACKUP &lt;/span&gt;&lt;span style=&quot;color: #ff79c6;&quot;&gt;AS&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; COMPRESSED BACKUPSET ARCHIVELOG &lt;/span&gt;&lt;span style=&quot;color: #ff79c6;&quot;&gt;ALL&lt;/span&gt;
&lt;span style=&quot;color: #f8f8f2;&quot;&gt;FORMAT &lt;/span&gt;&lt;span style=&quot;color: #bd93f9;&quot;&gt;&#39;/u01/backup/FULLBACKUP/%d_%T_%s_%p_ARCH&#39;&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt;;&lt;/span&gt;

&lt;span style=&quot;color: #f8f8f2;&quot;&gt;BACKUP &lt;/span&gt;&lt;span style=&quot;color: #ff79c6;&quot;&gt;CURRENT&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt; CONTROLFILE&lt;/span&gt;
&lt;span style=&quot;color: #f8f8f2;&quot;&gt;FORMAT &lt;/span&gt;&lt;span style=&quot;color: #bd93f9;&quot;&gt;&#39;/u01/backup/FULLBACKUP/%d_%T_%s_%p_CTRL&#39;&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt;;&lt;/span&gt;

&lt;span style=&quot;color: #f8f8f2;&quot;&gt;BACKUP SPFILE&lt;/span&gt;
&lt;span style=&quot;color: #f8f8f2;&quot;&gt;FORMAT &lt;/span&gt;&lt;span style=&quot;color: #bd93f9;&quot;&gt;&#39;/u01/backup/FULLBACKUP/%d_%T_%s_%p_SPFILE&#39;&lt;/span&gt;&lt;span style=&quot;color: #f8f8f2;&quot;&gt;;&lt;/span&gt;

&lt;span style=&quot;color: #f8f8f2;&quot;&gt;RELEASE CHANNEL c1;&lt;/span&gt;
&lt;span style=&quot;color: #f8f8f2;&quot;&gt;RELEASE CHANNEL c2;&lt;/span&gt;
&lt;span style=&quot;color: #f8f8f2;&quot;&gt;RELEASE CHANNEL c3;&lt;/span&gt;
&lt;span style=&quot;color: #f8f8f2;&quot;&gt;RELEASE CHANNEL c4;&lt;/span&gt;
&lt;span style=&quot;color: #f8f8f2;&quot;&gt;}&lt;/span&gt;
&lt;/pre&gt;&lt;/div&gt;

&lt;pre class=&quot;overflow-visible! px-0!&quot; data-end=&quot;8417&quot; data-start=&quot;7821&quot;&gt;&lt;div class=&quot;relative w-full mt-4 mb-1&quot;&gt;&lt;div&gt;&lt;div class=&quot;relative&quot;&gt;&lt;div class=&quot;h-full min-h-0 min-w-0&quot;&gt;&lt;div class=&quot;h-full min-h-0 min-w-0&quot;&gt;&lt;div class=&quot;border border-token-border-light border-radius-3xl corner-superellipse/1.1 rounded-3xl&quot;&gt;&lt;div class=&quot;h-full w-full border-radius-3xl bg-token-bg-elevated-secondary corner-superellipse/1.1 overflow-clip rounded-3xl lxnfua_clipPathFallback&quot;&gt;&lt;div class=&quot;pointer-events-none absolute inset-x-4 top-12 bottom-4&quot;&gt;&lt;div class=&quot;pointer-events-none sticky z-40 shrink-0 z-1!&quot;&gt;&lt;div class=&quot;sticky bg-token-border-light&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class=&quot;relative&quot;&gt;&lt;div&gt;&lt;div class=&quot;relative z-0 flex max-w-full&quot;&gt;&lt;div class=&quot;q9tKkq_viewer cm-editor z-10 light:cm-light dark:cm-light flex h-full w-full flex-col items-stretch ͼd ͼr&quot; dir=&quot;ltr&quot; id=&quot;code-block-viewer&quot;&gt;&lt;div class=&quot;cm-scroller&quot;&gt;&lt;pre class=&quot;cm-content q9tKkq_readonly m-0&quot;&gt;&lt;br /&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;
&lt;p data-end=&quot;8449&quot; data-start=&quot;8419&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;But production tuning matters.&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;8707&quot; data-start=&quot;8451&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Allocating too many RMAN channels can overwhelm shared storage arrays. Compression reduces backup size but increases CPU consumption. In heavily transactional systems, archive log generation can become far larger than expected during peak business windows.&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;8828&quot; data-start=&quot;8709&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Some environments discover during recovery testing that archive logs consume more storage than full backups themselves.&lt;/span&gt;&lt;/p&gt;
&lt;h2 data-end=&quot;8859&quot; data-section-id=&quot;1xadvaa&quot; data-start=&quot;8835&quot;&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEgAhZD6S4g0Zbh2aq4M9sCkzgZ2o0REh8A3f4mSWPMcGSkitADs7894VAHNoc8KdlGQFmc4nQ3mNy9BLDL1k3l9h1R8-GeQ5XdcBThPFHoRTrmxmH0R861SjfTA3EFLj6tqhOOGBzXSqq4YU9zyFAb59PRZfleWADardEYHA7unh5_cIai1ekxsg576QPM&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img alt=&quot;&quot; data-original-height=&quot;1024&quot; data-original-width=&quot;1536&quot; height=&quot;427&quot; src=&quot;https://blogger.googleusercontent.com/img/a/AVvXsEgAhZD6S4g0Zbh2aq4M9sCkzgZ2o0REh8A3f4mSWPMcGSkitADs7894VAHNoc8KdlGQFmc4nQ3mNy9BLDL1k3l9h1R8-GeQ5XdcBThPFHoRTrmxmH0R861SjfTA3EFLj6tqhOOGBzXSqq4YU9zyFAb59PRZfleWADardEYHA7unh5_cIai1ekxsg576QPM=w640-h427&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;/h2&gt;
&lt;h1 data-end=&quot;9111&quot; data-section-id=&quot;5nvzzt&quot; data-start=&quot;9078&quot;&gt;&lt;span style=&quot;color: #e06666; font-family: Source Sans Pro; font-size: x-large;&quot;&gt;Common Problems During PDB PITR&lt;/span&gt;&lt;/h1&gt;
&lt;p data-end=&quot;9175&quot; data-start=&quot;9113&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Most recovery failures fall into a few predictable categories.&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;9223&quot; data-start=&quot;9177&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Missing archive logs remain the biggest issue:&lt;/span&gt;&lt;/p&gt;
&lt;pre class=&quot;overflow-visible! px-0!&quot; data-end=&quot;9306&quot; data-start=&quot;9225&quot;&gt;&lt;div class=&quot;relative w-full mt-4 mb-1&quot;&gt;&lt;div&gt;&lt;div class=&quot;relative&quot;&gt;&lt;div class=&quot;h-full min-h-0 min-w-0&quot;&gt;&lt;div class=&quot;h-full min-h-0 min-w-0&quot;&gt;&lt;div class=&quot;border border-token-border-light border-radius-3xl corner-superellipse/1.1 rounded-3xl&quot;&gt;&lt;div class=&quot;h-full w-full border-radius-3xl bg-token-bg-elevated-secondary corner-superellipse/1.1 overflow-clip rounded-3xl lxnfua_clipPathFallback&quot;&gt;&lt;div class=&quot;pointer-events-none absolute end-1.5 top-1 z-2 md:end-2 md:top-1&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;&lt;blockquote style=&quot;border-color: currentcolor; border-image: initial; border-style: none; border-width: medium; border: none; margin: 0px 0px 0px 40px; padding: 0px;&quot;&gt;&lt;pre class=&quot;overflow-visible! px-0!&quot; data-end=&quot;9306&quot; data-start=&quot;9225&quot;&gt;&lt;div class=&quot;relative w-full mt-4 mb-1&quot;&gt;&lt;div&gt;&lt;div class=&quot;relative&quot;&gt;&lt;div class=&quot;h-full min-h-0 min-w-0&quot;&gt;&lt;div class=&quot;h-full min-h-0 min-w-0&quot;&gt;&lt;div class=&quot;border border-token-border-light border-radius-3xl corner-superellipse/1.1 rounded-3xl&quot;&gt;&lt;div class=&quot;h-full w-full border-radius-3xl bg-token-bg-elevated-secondary corner-superellipse/1.1 overflow-clip rounded-3xl lxnfua_clipPathFallback&quot;&gt;&lt;div class=&quot;relative&quot;&gt;&lt;div class=&quot;pe-11 pt-3&quot;&gt;&lt;div class=&quot;relative z-0 flex max-w-full&quot;&gt;&lt;div class=&quot;q9tKkq_viewer cm-editor z-10 light:cm-light dark:cm-light flex h-full w-full flex-col items-stretch ͼd ͼr&quot; dir=&quot;ltr&quot; id=&quot;code-block-viewer&quot;&gt;&lt;div class=&quot;cm-scroller&quot;&gt;&lt;pre class=&quot;cm-content q9tKkq_readonly m-0&quot; style=&quot;text-align: left;&quot;&gt;&lt;code&gt;&lt;span style=&quot;font-family: courier; font-size: large;&quot;&gt;RMAN-06054 media recovery requesting unknown archived log&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;pre class=&quot;overflow-visible! px-0!&quot; data-end=&quot;9306&quot; data-start=&quot;9225&quot;&gt;&lt;div class=&quot;relative w-full mt-4 mb-1&quot;&gt;&lt;div&gt;&lt;div class=&quot;relative&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;
&lt;p data-end=&quot;9412&quot; data-start=&quot;9308&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Usually this points to retention policy problems or archive cleanup jobs deleting logs too aggressively.&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;9473&quot; data-start=&quot;9414&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Another frequent issue is auxiliary destination exhaustion:&lt;/span&gt;&lt;/p&gt;
&lt;pre class=&quot;overflow-visible! px-0!&quot; data-end=&quot;9543&quot; data-start=&quot;9475&quot;&gt;&lt;div class=&quot;relative w-full mt-4 mb-1&quot;&gt;&lt;div&gt;&lt;div class=&quot;relative&quot;&gt;&lt;div class=&quot;h-full min-h-0 min-w-0&quot;&gt;&lt;div class=&quot;h-full min-h-0 min-w-0&quot;&gt;&lt;div class=&quot;border border-token-border-light border-radius-3xl corner-superellipse/1.1 rounded-3xl&quot;&gt;&lt;div class=&quot;h-full w-full border-radius-3xl bg-token-bg-elevated-secondary corner-superellipse/1.1 overflow-clip rounded-3xl lxnfua_clipPathFallback&quot;&gt;&lt;div class=&quot;pointer-events-none absolute end-1.5 top-1 z-2 md:end-2 md:top-1&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;&lt;blockquote style=&quot;border-color: currentcolor; border-image: initial; border-style: none; border-width: medium; border: none; margin: 0px 0px 0px 40px; padding: 0px;&quot;&gt;&lt;pre class=&quot;overflow-visible! px-0!&quot; data-end=&quot;9543&quot; data-start=&quot;9475&quot;&gt;&lt;div class=&quot;relative w-full mt-4 mb-1&quot;&gt;&lt;div&gt;&lt;div class=&quot;relative&quot;&gt;&lt;div class=&quot;h-full min-h-0 min-w-0&quot;&gt;&lt;div class=&quot;h-full min-h-0 min-w-0&quot;&gt;&lt;div class=&quot;border border-token-border-light border-radius-3xl corner-superellipse/1.1 rounded-3xl&quot;&gt;&lt;div class=&quot;h-full w-full border-radius-3xl bg-token-bg-elevated-secondary corner-superellipse/1.1 overflow-clip rounded-3xl lxnfua_clipPathFallback&quot;&gt;&lt;div class=&quot;relative&quot;&gt;&lt;div class=&quot;pe-11 pt-3&quot;&gt;&lt;div class=&quot;relative z-0 flex max-w-full&quot;&gt;&lt;div class=&quot;q9tKkq_viewer cm-editor z-10 light:cm-light dark:cm-light flex h-full w-full flex-col items-stretch ͼd ͼr&quot; dir=&quot;ltr&quot; id=&quot;code-block-viewer&quot;&gt;&lt;div class=&quot;cm-scroller&quot;&gt;&lt;pre class=&quot;cm-content q9tKkq_readonly m-0&quot; style=&quot;text-align: left;&quot;&gt;&lt;code&gt;&lt;span style=&quot;font-family: courier; font-size: large;&quot;&gt;ORA-19809: limit exceeded for recovery files&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;pre class=&quot;overflow-visible! px-0!&quot; data-end=&quot;9543&quot; data-start=&quot;9475&quot;&gt;&lt;div class=&quot;relative w-full mt-4 mb-1&quot;&gt;&lt;div&gt;&lt;div class=&quot;relative&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;
&lt;p data-end=&quot;9672&quot; data-start=&quot;9545&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;This typically happens because recovery planning considered only backup size and ignored temporary recovery space requirements.&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;9785&quot; data-start=&quot;9674&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Permission problems are also common in environments using NFS mounts or newly provisioned recovery filesystems:&lt;/span&gt;&lt;/p&gt;
&lt;pre class=&quot;overflow-visible! px-0!&quot; data-end=&quot;9839&quot; data-start=&quot;9787&quot;&gt;&lt;div class=&quot;relative w-full mt-4 mb-1&quot;&gt;&lt;div&gt;&lt;div class=&quot;relative&quot;&gt;&lt;div class=&quot;h-full min-h-0 min-w-0&quot;&gt;&lt;div class=&quot;h-full min-h-0 min-w-0&quot;&gt;&lt;div class=&quot;border border-token-border-light border-radius-3xl corner-superellipse/1.1 rounded-3xl&quot;&gt;&lt;div class=&quot;h-full w-full border-radius-3xl bg-token-bg-elevated-secondary corner-superellipse/1.1 overflow-clip rounded-3xl lxnfua_clipPathFallback&quot;&gt;&lt;div class=&quot;pointer-events-none absolute end-1.5 top-1 z-2 md:end-2 md:top-1&quot;&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;&lt;blockquote style=&quot;border-color: currentcolor; border-image: initial; border-style: none; border-width: medium; border: none; margin: 0px 0px 0px 40px; padding: 0px;&quot;&gt;&lt;pre class=&quot;overflow-visible! px-0!&quot; data-end=&quot;9839&quot; data-start=&quot;9787&quot;&gt;&lt;div class=&quot;relative w-full mt-4 mb-1&quot;&gt;&lt;div&gt;&lt;div class=&quot;relative&quot;&gt;&lt;div class=&quot;h-full min-h-0 min-w-0&quot;&gt;&lt;div class=&quot;h-full min-h-0 min-w-0&quot;&gt;&lt;div class=&quot;border border-token-border-light border-radius-3xl corner-superellipse/1.1 rounded-3xl&quot;&gt;&lt;div class=&quot;h-full w-full border-radius-3xl bg-token-bg-elevated-secondary corner-superellipse/1.1 overflow-clip rounded-3xl lxnfua_clipPathFallback&quot;&gt;&lt;div class=&quot;relative&quot;&gt;&lt;div class=&quot;pe-11 pt-3&quot;&gt;&lt;div class=&quot;relative z-0 flex max-w-full&quot;&gt;&lt;div class=&quot;q9tKkq_viewer cm-editor z-10 light:cm-light dark:cm-light flex h-full w-full flex-col items-stretch ͼd ͼr&quot; dir=&quot;ltr&quot; id=&quot;code-block-viewer&quot;&gt;&lt;div class=&quot;cm-scroller&quot;&gt;&lt;pre class=&quot;cm-content q9tKkq_readonly m-0&quot; style=&quot;text-align: left;&quot;&gt;&lt;code&gt;&lt;span style=&quot;font-family: courier; font-size: large;&quot;&gt;ORA-27040: file create error&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;pre class=&quot;overflow-visible! px-0!&quot; data-end=&quot;9839&quot; data-start=&quot;9787&quot;&gt;&lt;div class=&quot;relative w-full mt-4 mb-1&quot;&gt;&lt;div&gt;&lt;div class=&quot;relative&quot;&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/pre&gt;
&lt;p data-end=&quot;10029&quot; data-start=&quot;9841&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;And finally, there is the most frustrating scenario of all: recovery technically succeeds, but the recovered application still contains corruption because the wrong timestamp was selected.&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;10097&quot; data-start=&quot;10031&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;That is not an Oracle problem. That is usually a planning problem.&lt;/span&gt;&lt;/p&gt;
&lt;h1 data-end=&quot;10147&quot; data-section-id=&quot;1ykcfgc&quot; data-start=&quot;10104&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/h1&gt;&lt;h1 data-end=&quot;10147&quot; data-section-id=&quot;1ykcfgc&quot; data-start=&quot;10104&quot;&gt;&lt;span style=&quot;color: #e06666; font-family: Source Sans Pro; font-size: x-large;&quot;&gt;Oracle vs PostgreSQL Recovery Perspective&lt;/span&gt;&lt;/h1&gt;
&lt;p data-end=&quot;10249&quot; data-start=&quot;10149&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Oracle Multitenant recovery is still significantly more granular than PostgreSQL cluster-level PITR.&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;10521&quot; data-start=&quot;10251&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;In PostgreSQL, WAL recovery generally affects the entire cluster because recovery operates at instance level rather than isolated tenant level. If multiple applications share the same PostgreSQL cluster, restoring one database independently becomes operationally harder.&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;10628&quot; data-start=&quot;10523&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Oracle’s PDB recovery model provides better tenant isolation for large consolidated enterprise platforms.&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;10823&quot; data-start=&quot;10630&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;That said, PostgreSQL environments often achieve isolation differently by deploying separate clusters per application. This increases infrastructure overhead but simplifies recovery boundaries.&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;10895&quot; data-start=&quot;10825&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Both approaches work. The operational trade-offs are simply different.&lt;/span&gt;&lt;/p&gt;&lt;p data-end=&quot;10895&quot; data-start=&quot;10825&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h1 data-end=&quot;10926&quot; data-section-id=&quot;mg3w1c&quot; data-start=&quot;10902&quot;&gt;&lt;span style=&quot;color: #e06666; font-family: Source Sans Pro; font-size: x-large;&quot;&gt;Lessons From the Field&lt;/span&gt;&lt;/h1&gt;
&lt;p data-end=&quot;11052&quot; data-start=&quot;10928&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;The biggest mistake teams make with PDB recovery is assuming successful backups automatically guarantee successful restores.&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;11066&quot; data-start=&quot;11054&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;They do not.&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;11188&quot; data-start=&quot;11068&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Many organizations never test actual PDB PITR until a real outage happens. That is usually when hidden problems surface:&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;11337&quot; data-start=&quot;11190&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;archive logs missing from retention windows, inaccessible backup mounts, incorrect RMAN catalog synchronization, or insufficient auxiliary storage.&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;11575&quot; data-start=&quot;11339&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Another issue rarely discussed in documentation is storage impact during recovery. Large PDB restores can create heavy read/write bursts across shared SAN environments. In busy systems this can affect neighboring workloads unexpectedly.&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;11787&quot; data-start=&quot;11577&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;One particularly dangerous assumption is believing recovery can fix any corruption regardless of age. If corrupted data already exists inside the backup baseline, PITR may simply restore the same problem again.&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;11944&quot; data-start=&quot;11789&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Recovery testing should therefore focus not only on backup integrity but also on realistic business recovery windows and application validation procedures.&lt;/span&gt;&lt;/p&gt;
&lt;h1 data-end=&quot;11968&quot; data-section-id=&quot;e7xeym&quot; data-start=&quot;11951&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/h1&gt;&lt;h1 data-end=&quot;11968&quot; data-section-id=&quot;e7xeym&quot; data-start=&quot;11951&quot;&gt;&lt;span style=&quot;color: #e06666; font-family: Source Sans Pro; font-size: x-large;&quot;&gt;Case Study&lt;/span&gt;&lt;/h1&gt;
&lt;p data-end=&quot;12066&quot; data-start=&quot;11970&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;A production Oracle 19c environment hosted multiple customer-facing applications inside one CDB.&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;12250&quot; data-start=&quot;12068&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;During a release deployment, an automation script connected to the wrong PDB and executed cleanup statements against reporting tables. The application became unusable within minutes.&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;12365&quot; data-start=&quot;12252&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Fortunately, other applications inside neighboring PDBs were unaffected and continued serving production traffic.&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;12630&quot; data-start=&quot;12367&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;The DBA team isolated the damaged PDB, validated archive log coverage, and initiated RMAN PDB PITR using an auxiliary recovery location on separate storage. Recovery completed successfully, and the PDB was restored to a timestamp just before deployment execution.&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;12697&quot; data-start=&quot;12632&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Total outage remained limited to the affected reporting platform.&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;12844&quot; data-start=&quot;12699&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;The postmortem later revealed the root cause was not Oracle itself but an incorrectly mapped environment variable inside the deployment pipeline.&lt;/span&gt;&lt;/p&gt;

&lt;h1 data-end=&quot;12863&quot; data-section-id=&quot;fsb6xx&quot; data-start=&quot;12851&quot;&gt;&lt;span style=&quot;color: #e06666; font-family: Source Sans Pro; font-size: x-large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/h1&gt;&lt;h1 data-end=&quot;12863&quot; data-section-id=&quot;fsb6xx&quot; data-start=&quot;12851&quot;&gt;&lt;span style=&quot;color: #e06666; font-family: Source Sans Pro; font-size: x-large;&quot;&gt;Conclusion&lt;/span&gt;&lt;/h1&gt;
&lt;p data-end=&quot;12991&quot; data-start=&quot;12865&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;PDB Point-in-Time Recovery is one of the most operationally valuable features Oracle introduced with Multitenant architecture.&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;13279&quot; data-start=&quot;12993&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;The ability to recover one tenant without impacting unrelated applications changes how DBAs handle outages in consolidated enterprise environments. Instead of treating the entire database platform as a single recovery boundary, Oracle allows recovery isolation at the application level.&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;13368&quot; data-start=&quot;13281&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;But successful recovery depends far more on operational discipline than on RMAN syntax.&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;13578&quot; data-start=&quot;13370&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Archive retention policies, backup validation, auxiliary storage planning, timestamp verification, and realistic recovery testing determine whether recovery succeeds smoothly or turns into a prolonged outage.&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;13697&quot; data-start=&quot;13580&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;The actual recovery command often takes only a few minutes to write. The preparation behind it is what truly matters.&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;13989&quot; data-start=&quot;13699&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;DBAs managing multitenant environments should regularly test PDB PITR workflows before production incidents force emergency recovery decisions. Validate archive coverage, monitor FRA growth trends, measure restore timings, and confirm auxiliary recovery locations can handle real workloads.&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;14079&quot; data-start=&quot;13991&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Because during a live outage, nobody wants to discover recovery gaps for the first time.&lt;/span&gt;&lt;/p&gt;

&lt;h1 data-end=&quot;14103&quot; data-section-id=&quot;g06j45&quot; data-start=&quot;14086&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/h1&gt;&lt;h1 data-end=&quot;14103&quot; data-section-id=&quot;g06j45&quot; data-start=&quot;14086&quot;&gt;&lt;span style=&quot;color: #e06666; font-family: Source Sans Pro; font-size: x-large;&quot;&gt;Quick Takeaways&lt;/span&gt;&lt;/h1&gt;
&lt;p data-end=&quot;14186&quot; data-start=&quot;14105&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;PDB PITR allows recovery of a single tenant without shutting down the entire CDB.&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;14276&quot; data-start=&quot;14188&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Oracle internally creates an auxiliary instance to perform isolated recovery operations.&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;14368&quot; data-start=&quot;14278&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Archive log retention policies are often the biggest hidden risk during recovery planning.&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;14475&quot; data-start=&quot;14370&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Recovery timestamp selection is critical because recovering past the corruption point makes PITR useless.&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;14567&quot; data-start=&quot;14477&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Auxiliary storage sizing and filesystem permissions should always be validated beforehand.&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;14683&quot; data-start=&quot;14569&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Testing recovery procedures regularly is far more important than simply confirming backups completed successfully.&lt;/span&gt;&lt;/p&gt;</description><link>https://oracle-dba-help.blogspot.com/2026/06/oracle-pdb-point-in-time-recovery.html</link><author>noreply@blogger.com (Nikhil Kotak)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/a/AVvXsEjvddh75NTdCMeqqIe95DnGWPu50Qcso1H06bF88aWcjLTM9FU515I80byjvwEmfCWzECwQpkRKkJ-U9-ucNp3axPq6vKH8HR1UENgxV8nVkDY26X14PuQAQKQ5ABbse_rzX_u8aZOeVVSOUC7_IP2tYQeWgNW9KOKorRTS_jhAGgZz1Se_Wq3Jo1EmFYI=s72-w640-h427-c" height="72" width="72"/><thr:total>0</thr:total></item><item><guid isPermaLink="false">tag:blogger.com,1999:blog-1375587508974804970.post-1531210581431268203</guid><pubDate>Tue, 23 Jun 2026 08:57:00 +0000</pubDate><atom:updated>2026-06-26T22:45:59.947+08:00</atom:updated><category domain="http://www.blogger.com/atom/ns#">Core DBA</category><category domain="http://www.blogger.com/atom/ns#">PostgreSQL</category><title>PostgreSQL vs Oracle: Choosing the Right Database for Your Architecture</title><description>&lt;p&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&amp;nbsp; Selecting a database today isn’t just about technology - it&#39;s a strategic business decision. In production environments, the choice between PostgreSQL and Oracle Database affects scalability, reliability, compliance, and cost for years. As a DBA, architect, or infrastructure engineer, understanding the trade-offs between these systems can save significant headaches during implementation and future growth.&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;a name=&#39;more&#39;&gt;&lt;/a&gt;&lt;p&gt;&lt;/p&gt;
&lt;p data-end=&quot;1024&quot; data-start=&quot;643&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;In this article, we will break down the real-world considerations for PostgreSQL and Oracle. You will see when one database might outperform the other, the practical operational challenges, and how different architectures shape your decision. Whether you are supporting a cloud-native startup or managing an enterprise-grade financial system, these insights can guide your choices.&lt;/span&gt;&lt;/p&gt;&lt;p data-end=&quot;1024&quot; data-start=&quot;643&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h2 data-end=&quot;1079&quot; data-section-id=&quot;1mtoc4y&quot; data-start=&quot;1031&quot;&gt;&lt;span style=&quot;color: #e06666; font-family: Source Sans Pro; font-size: x-large;&quot;&gt;PostgreSQL: Flexibility Meets Cost Efficiency&lt;/span&gt;&lt;/h2&gt;
&lt;p data-end=&quot;1409&quot; data-start=&quot;1081&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;PostgreSQL has become the go-to choice for organizations that value flexibility, cost savings, and modern development patterns. In startups, SaaS platforms, and microservices-based applications, it shines. Its support for JSON, advanced indexing, and extensibility makes rapid development and schema evolution straightforward.&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;1833&quot; data-start=&quot;1411&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;PostgreSQL reduces database licensing cost and can deliver strong ROI, especially for read-heavy, cloud-native, and horizontally distributed application patterns. However, production TCO still includes managed service cost, support, HA tooling, monitoring, backup storage, and operational ownership. For write-heavy horizontal scaling, PostgreSQL typically requires sharding, extensions, or application-level architecture.&lt;/span&gt;&lt;/p&gt;&lt;p data-end=&quot;1833&quot; data-start=&quot;1411&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p data-end=&quot;1833&quot; data-start=&quot;1411&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&amp;nbsp;Managed services like AWS RDS, Azure Database for PostgreSQL, or GCP Cloud SQL simplify deployment and monitoring, though enterprise-grade HA/DR design still requires careful planning. The community and ecosystem continue to grow, offering tools for backup automation, monitoring, and performance tuning.&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;2080&quot; data-start=&quot;1835&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;strong data-end=&quot;1854&quot; data-start=&quot;1835&quot;&gt;Production Tip:&lt;/strong&gt; If you are implementing PostgreSQL at scale, plan your replication, failover, and backup strategy carefully. While the platform is feature-rich, high-availability setups are not as plug-and-play as Oracle RAC or Data Guard.&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;2241&quot; data-start=&quot;2082&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiGVHKJdrrvxN8trvoqnGm4wz5usdITPRzO0AInYc7wyblDOtmLo6vYdhU90deerNXrS90qbgs1IR_8eU4f9-B9KoIFw8zTS_TWwi8qHaK5HXUkYiUxzudsZUq07fQ2alTcLD4rXI9ula59nxHsjHvSDVWDX5mS9t6a6p0B7YYQHzsY5k6GRbte-m0p8yQ/s1672/Nikhil%20kotak%20blog%201.png&quot; style=&quot;margin-left: 1em; margin-right: 1em; text-align: center;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;941&quot; data-original-width=&quot;1672&quot; height=&quot;360&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiGVHKJdrrvxN8trvoqnGm4wz5usdITPRzO0AInYc7wyblDOtmLo6vYdhU90deerNXrS90qbgs1IR_8eU4f9-B9KoIFw8zTS_TWwi8qHaK5HXUkYiUxzudsZUq07fQ2alTcLD4rXI9ula59nxHsjHvSDVWDX5mS9t6a6p0B7YYQHzsY5k6GRbte-m0p8yQ/w640-h360/Nikhil%20kotak%20blog%201.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&lt;p data-end=&quot;2241&quot; data-start=&quot;2082&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h2 data-end=&quot;2305&quot; data-section-id=&quot;pb5rxb&quot; data-start=&quot;2248&quot;&gt;&lt;span style=&quot;color: #e06666; font-family: Source Sans Pro; font-size: x-large;&quot;&gt;Oracle Database: Enterprise Reliability and Compliance&lt;/span&gt;&lt;/h2&gt;
&lt;p data-end=&quot;2651&quot; data-start=&quot;2307&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Oracle Database remains the benchmark for mission-critical systems. Industries like banking, telecom, and ERP rely on Oracle for its proven performance under heavy OLTP workloads. Features like RAC for high availability, Data Guard for disaster recovery, and advanced partitioning allow enterprises to maintain operational stability at scale.&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;2966&quot; data-start=&quot;2653&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;From a DBA standpoint, Oracle provides mature built-in security and auditing capabilities, along with enterprise monitoring and management integrations. However, DBAs should validate which features are included in their edition or cloud service and which require additional options or management packs. The vendor-backed support and SLAs reduce operational risk, which is critical in regulated environments. The trade-off is the licensing and operational cost, which can be significant, and the risk of vendor lock-in.&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;3161&quot; data-start=&quot;2968&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;strong data-end=&quot;2987&quot; data-start=&quot;2968&quot;&gt;Production Tip:&lt;/strong&gt; When managing Oracle environments, proactive monitoring of RAC nodes, Data Guard replication lag, and archive log pressure is essential to prevent performance bottlenecks.&lt;/span&gt;&lt;/p&gt;
&lt;br /&gt;&lt;br /&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiyR-Z1KqufNo4oQ5KDYA2uKfi2tGvvhtPzZOaZF_IHhr8piX1ZKte9YwyQvBxMotcCldzR5VqmajyUd6itKf4yauCpkg-xVXpoPTaCvscLUivWWtz3M9cNTCr92nRcLglQ0wD92KwhMmJrCrNG4UHHX0HoGYG1bvXjSopME-vDEqdlgVvgsflcflTKqSc/s1672/made%20ay%20hommee.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: 1em; margin-right: 1em;&quot;&gt;&lt;img border=&quot;0&quot; data-original-height=&quot;941&quot; data-original-width=&quot;1672&quot; height=&quot;360&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiyR-Z1KqufNo4oQ5KDYA2uKfi2tGvvhtPzZOaZF_IHhr8piX1ZKte9YwyQvBxMotcCldzR5VqmajyUd6itKf4yauCpkg-xVXpoPTaCvscLUivWWtz3M9cNTCr92nRcLglQ0wD92KwhMmJrCrNG4UHHX0HoGYG1bvXjSopME-vDEqdlgVvgsflcflTKqSc/w640-h360/made%20ay%20hommee.png&quot; width=&quot;640&quot; /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;p data-end=&quot;3292&quot; data-start=&quot;3163&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;p data-end=&quot;3292&quot; data-start=&quot;3163&quot;&gt;&lt;br /&gt;&lt;/p&gt;&lt;h2 data-end=&quot;3334&quot; data-section-id=&quot;1n8luju&quot; data-start=&quot;3299&quot;&gt;&lt;span style=&quot;color: #e06666; font-family: Source Sans Pro; font-size: x-large;&quot;&gt;Key Architectural Considerations&lt;/span&gt;&lt;/h2&gt;
&lt;p data-end=&quot;3481&quot; data-start=&quot;3336&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;When designing database architectures, the decision often comes down to four factors: cost, flexibility, compliance, and operational stability.&lt;/span&gt;&lt;/p&gt;
&lt;ul data-end=&quot;3906&quot; data-start=&quot;3483&quot;&gt;
&lt;li data-end=&quot;3575&quot; data-section-id=&quot;1al180w&quot; data-start=&quot;3483&quot;&gt;
&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;strong data-end=&quot;3505&quot; data-start=&quot;3485&quot;&gt;Cost Efficiency:&lt;/strong&gt; PostgreSQL dominates due to zero licensing and open-source tooling.
&lt;/span&gt;&lt;/li&gt;
&lt;li data-end=&quot;3699&quot; data-section-id=&quot;1oiq7pd&quot; data-start=&quot;3576&quot;&gt;
&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;strong data-end=&quot;3600&quot; data-start=&quot;3578&quot;&gt;Compliance &amp;amp; Risk:&lt;/strong&gt; Oracle offers built-in security and audit capabilities, ideal for highly regulated environments.
&lt;/span&gt;&lt;/li&gt;
&lt;li data-end=&quot;3809&quot; data-section-id=&quot;jviomm&quot; data-start=&quot;3700&quot;&gt;
&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;strong data-end=&quot;3718&quot; data-start=&quot;3702&quot;&gt;Flexibility:&lt;/strong&gt; PostgreSQL supports rapid development and evolving schemas without significant overhead.
&lt;/span&gt;&lt;/li&gt;
&lt;li data-end=&quot;3906&quot; data-section-id=&quot;2ed5k9&quot; data-start=&quot;3810&quot;&gt;
&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;strong data-end=&quot;3838&quot; data-start=&quot;3812&quot;&gt;Operational Stability:&lt;/strong&gt; Oracle simplifies operations with mature built-in HA/DR features.
&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;4036&quot; data-start=&quot;3908&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Real-world architectures often combine both: PostgreSQL powering agile services, with Oracle handling core, regulated systems.&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;4177&quot; data-start=&quot;4038&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;strong data-end=&quot;4053&quot; data-start=&quot;4038&quot;&gt;Image Idea:&lt;/strong&gt; Side-by-side comparison infographic of PostgreSQL and Oracle across cost, flexibility, compliance, and stability metrics.&lt;/span&gt;&lt;/p&gt;

&lt;h2 data-end=&quot;4236&quot; data-section-id=&quot;1ls7dem&quot; data-start=&quot;4184&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/h2&gt;&lt;h2 data-end=&quot;4236&quot; data-section-id=&quot;1ls7dem&quot; data-start=&quot;4184&quot;&gt;&lt;span style=&quot;color: #e06666; font-family: Source Sans Pro; font-size: x-large;&quot;&gt;Keep in mind..&lt;/span&gt;&lt;/h2&gt;
&lt;ul data-end=&quot;4936&quot; data-start=&quot;4238&quot;&gt;
&lt;li data-end=&quot;4398&quot; data-section-id=&quot;h04lap&quot; data-start=&quot;4238&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;
PostgreSQL may require extra operational effort for enterprise-grade HA/DR setups, including logical replication, failover automation, and monitoring tools.
&lt;/span&gt;&lt;/li&gt;
&lt;li data-end=&quot;4526&quot; data-section-id=&quot;vdc08f&quot; data-start=&quot;4399&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;
Oracle’s extensive feature set can be underutilized if teams are not trained, increasing cost without commensurate benefit.
&lt;/span&gt;&lt;/li&gt;
&lt;li data-end=&quot;4698&quot; data-section-id=&quot;1rzdq8m&quot; data-start=&quot;4527&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;
Hybrid architectures are increasingly common, where PostgreSQL handles lightweight, cloud-native services, and Oracle supports mission-critical back-office processing.
&lt;/span&gt;&lt;/li&gt;
&lt;li data-end=&quot;4936&quot; data-section-id=&quot;i4j58z&quot; data-start=&quot;4699&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;
Monitoring and proactive alerting are critical in both environments. For PostgreSQL, track replication lag, index bloat, and autovacuum performance. For Oracle, watch RAC node health, archive log pressure, and undo tablespace growth.
&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 data-end=&quot;4995&quot; data-section-id=&quot;pmk5sl&quot; data-start=&quot;4943&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/h2&gt;&lt;h2 data-end=&quot;4995&quot; data-section-id=&quot;pmk5sl&quot; data-start=&quot;4943&quot;&gt;&lt;span style=&quot;color: #e06666; font-family: Source Sans Pro; font-size: x-large;&quot;&gt;Mini Case Study: Balancing Agility and Compliance&lt;/span&gt;&lt;/h2&gt;
&lt;p data-end=&quot;5469&quot; data-start=&quot;4997&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;A fintech startup adopted PostgreSQL to quickly iterate on new features and integrate with cloud-native microservices. The team focused on automation for backups, failover, and monitoring, achieving rapid deployment cycles with minimal cost. Meanwhile, their banking client continued to use Oracle for transaction-heavy operations, ensuring compliance and predictable performance. By running a hybrid model, both agility and reliability were achieved without compromise.&lt;/span&gt;&lt;/p&gt;

&lt;h2 data-end=&quot;5494&quot; data-section-id=&quot;3auoiu&quot; data-start=&quot;5476&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/h2&gt;&lt;h2 data-end=&quot;5494&quot; data-section-id=&quot;3auoiu&quot; data-start=&quot;5476&quot;&gt;&lt;span style=&quot;color: #e06666; font-family: Source Sans Pro; font-size: x-large;&quot;&gt;Quick Takeaways&lt;/span&gt;&lt;/h2&gt;
&lt;ul data-end=&quot;5909&quot; data-start=&quot;5496&quot;&gt;
&lt;li data-end=&quot;5574&quot; data-section-id=&quot;157tjjo&quot; data-start=&quot;5496&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;
PostgreSQL excels for flexible, cost-sensitive, cloud-native applications.
&lt;/span&gt;&lt;/li&gt;
&lt;li data-end=&quot;5654&quot; data-section-id=&quot;1dnm5qk&quot; data-start=&quot;5575&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;
Oracle shines in mission-critical, high-volume, and regulated environments.
&lt;/span&gt;&lt;/li&gt;
&lt;li data-end=&quot;5756&quot; data-section-id=&quot;1k0uzzj&quot; data-start=&quot;5655&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;
High availability in PostgreSQL requires careful architecture; Oracle provides it out-of-the-box.
&lt;/span&gt;&lt;/li&gt;
&lt;li data-end=&quot;5821&quot; data-section-id=&quot;a850ea&quot; data-start=&quot;5757&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;
Real-world deployments often benefit from hybrid approaches.
&lt;/span&gt;&lt;/li&gt;
&lt;li data-end=&quot;5909&quot; data-section-id=&quot;zicnje&quot; data-start=&quot;5822&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;
Monitoring, proactive alerting, and operational planning are key in both databases.
&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-end=&quot;5929&quot; data-section-id=&quot;8dtpi&quot; data-start=&quot;5916&quot;&gt;&lt;span style=&quot;color: #e06666; font-family: Source Sans Pro; font-size: x-large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/h2&gt;&lt;h2 data-end=&quot;5929&quot; data-section-id=&quot;8dtpi&quot; data-start=&quot;5916&quot;&gt;&lt;span style=&quot;color: #e06666; font-family: Source Sans Pro; font-size: x-large;&quot;&gt;Conclusion&lt;/span&gt;&lt;/h2&gt;
&lt;p data-end=&quot;6260&quot; data-start=&quot;5931&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;Choosing between PostgreSQL and Oracle isn’t about finding the “better” database; it’s about understanding which one aligns with your business needs and risk tolerance. PostgreSQL offers cost-effective flexibility and rapid development, while Oracle provides proven stability, compliance, and support for high-volume workloads.&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;6615&quot; data-start=&quot;6262&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;For DBAs and architects, the key is to evaluate your systems’ operational requirements, regulatory constraints, and growth plans. Test configurations, monitor performance closely, and optimize backups and HA/DR strategies. By making informed choices, you can build database architectures that balance cost, agility, and reliability over the long term.&lt;/span&gt;&lt;/p&gt;

&lt;h2 data-end=&quot;6629&quot; data-section-id=&quot;1xvwnkw&quot; data-start=&quot;6622&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/h2&gt;&lt;h2 data-end=&quot;6629&quot; data-section-id=&quot;1xvwnkw&quot; data-start=&quot;6622&quot;&gt;&lt;span style=&quot;color: #e06666; font-family: Source Sans Pro; font-size: x-large;&quot;&gt;FAQs&lt;/span&gt;&lt;/h2&gt;
&lt;p data-end=&quot;6824&quot; data-start=&quot;6631&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;strong data-end=&quot;6699&quot; data-start=&quot;6631&quot;&gt;1. Can PostgreSQL handle enterprise-scale workloads like Oracle?&lt;/strong&gt;&lt;br data-end=&quot;6702&quot; data-start=&quot;6699&quot; /&gt;
Yes, but it requires careful HA/DR setup, performance tuning, and monitoring, especially for high-volume OLTP workloads.&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;7005&quot; data-start=&quot;6826&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;strong data-end=&quot;6899&quot; data-start=&quot;6826&quot;&gt;2. Is licensing cost the main reason organizations choose PostgreSQL?&lt;/strong&gt;&lt;br data-end=&quot;6902&quot; data-start=&quot;6899&quot; /&gt;
It’s a major factor, but flexibility, JSON support, and modern stack integration also drive adoption.&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;7179&quot; data-start=&quot;7007&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;strong data-end=&quot;7058&quot; data-start=&quot;7007&quot;&gt;3. What are common Oracle operational pitfalls?&lt;/strong&gt;&lt;br data-end=&quot;7061&quot; data-start=&quot;7058&quot; /&gt;
Over-reliance on built-in features without tuning, poor RAC/Data Guard monitoring, and underestimating license cost.&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;7353&quot; data-start=&quot;7181&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;strong data-end=&quot;7247&quot; data-start=&quot;7181&quot;&gt;4. Can PostgreSQL and Oracle coexist in the same architecture?&lt;/strong&gt;&lt;br data-end=&quot;7250&quot; data-start=&quot;7247&quot; /&gt;
Absolutely. Many enterprises use PostgreSQL for agile services and Oracle for core regulated systems.&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;7543&quot; data-start=&quot;7355&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;strong data-end=&quot;7426&quot; data-start=&quot;7355&quot;&gt;5. How do I decide between PostgreSQL and Oracle for a new project?&lt;/strong&gt;&lt;br data-end=&quot;7429&quot; data-start=&quot;7426&quot; /&gt;
Evaluate your regulatory requirements, workload type, expected scale, operational support, and cost constraints.&lt;/span&gt;&lt;/p&gt;
&lt;h2 data-end=&quot;7570&quot; data-section-id=&quot;153kql9&quot; data-start=&quot;7550&quot;&gt;&lt;span style=&quot;font-family: Source Sans Pro; font-size: large;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/h2&gt;&lt;h2 data-end=&quot;7570&quot; data-section-id=&quot;153kql9&quot; data-start=&quot;7550&quot;&gt;&lt;span style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;What&#39;s your experience managing PostgreSQL or Oracle in production? Have you tried hybrid architectures? Share your insights or challenges in the comments - your real-world examples help the community.&lt;/span&gt;&lt;/h2&gt;&lt;div&gt;&lt;span style=&quot;font-family: &amp;quot;Source Sans Pro&amp;quot;; font-size: large; font-weight: normal;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;</description><link>https://oracle-dba-help.blogspot.com/2026/06/postgresql-vs-oracle-choosing-right.html</link><author>noreply@blogger.com (Nikhil Kotak)</author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiGVHKJdrrvxN8trvoqnGm4wz5usdITPRzO0AInYc7wyblDOtmLo6vYdhU90deerNXrS90qbgs1IR_8eU4f9-B9KoIFw8zTS_TWwi8qHaK5HXUkYiUxzudsZUq07fQ2alTcLD4rXI9ula59nxHsjHvSDVWDX5mS9t6a6p0B7YYQHzsY5k6GRbte-m0p8yQ/s72-w640-h360-c/Nikhil%20kotak%20blog%201.png" height="72" width="72"/><thr:total>1</thr:total></item></channel></rss>