<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Kumaran Murugan</title>
    <description>The latest articles on DEV Community by Kumaran Murugan (@kumaranm05).</description>
    <link>https://dev.to/kumaranm05</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4140633%2F479aa055-6106-4b43-85e6-71bca1994717.png</url>
      <title>DEV Community: Kumaran Murugan</title>
      <link>https://dev.to/kumaranm05</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/kumaranm05"/>
    <language>en</language>
    <item>
      <title>Flashback Database with a Guaranteed Restore Point</title>
      <dc:creator>Kumaran Murugan</dc:creator>
      <pubDate>Wed, 14 Oct 2026 05:17:17 +0000</pubDate>
      <link>https://dev.to/kumaranm05/flashback-database-with-a-guaranteed-restore-point-44co</link>
      <guid>https://dev.to/kumaranm05/flashback-database-with-a-guaranteed-restore-point-44co</guid>
      <description>&lt;p&gt;Before a patch, an upgrade, or a risky schema change, the most useful question a DBA can ask is: "How fast can I get back if this goes wrong?" A full RMAN restore can take hours. Flashback Database with a &lt;strong&gt;guaranteed restore point&lt;/strong&gt; can take minutes.&lt;/p&gt;

&lt;p&gt;In this walkthrough, I create a guaranteed restore point, simulate an accidental loss, and flash the database back to the exact state it was in before.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why a guaranteed restore point?
&lt;/h2&gt;

&lt;p&gt;A normal restore point can age out as the flashback retention window moves forward. A guaranteed restore point tells Oracle to keep every flashback log needed to return to that point, however long it takes. The trade-off is that those logs consume space in the Fast Recovery Area (FRA) until you drop the restore point.&lt;/p&gt;

&lt;h2&gt;
  
  
  Prerequisites
&lt;/h2&gt;

&lt;p&gt;Flashback Database needs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The database in &lt;strong&gt;ARCHIVELOG&lt;/strong&gt; mode&lt;/li&gt;
&lt;li&gt;A configured and sized &lt;strong&gt;Fast Recovery Area&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Flashback logging enabled&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Step 1: Enable ARCHIVELOG mode
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="n"&gt;SHUTDOWN&lt;/span&gt; &lt;span class="k"&gt;IMMEDIATE&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="n"&gt;STARTUP&lt;/span&gt; &lt;span class="n"&gt;MOUNT&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;ALTER&lt;/span&gt; &lt;span class="k"&gt;DATABASE&lt;/span&gt; &lt;span class="n"&gt;ARCHIVELOG&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;ALTER&lt;/span&gt; &lt;span class="k"&gt;DATABASE&lt;/span&gt; &lt;span class="k"&gt;OPEN&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="n"&gt;ARCHIVE&lt;/span&gt; &lt;span class="n"&gt;LOG&lt;/span&gt; &lt;span class="n"&gt;LIST&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;ARCHIVE LOG LIST&lt;/code&gt; should now show &lt;strong&gt;Archive Mode&lt;/strong&gt; with automatic archival enabled.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 2: Configure the FRA and enable Flashback
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="n"&gt;FLASHBACK_ON&lt;/span&gt; &lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;V&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="k"&gt;DATABASE&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;   &lt;span class="c1"&gt;-- NO&lt;/span&gt;

&lt;span class="k"&gt;ALTER&lt;/span&gt; &lt;span class="k"&gt;SYSTEM&lt;/span&gt; &lt;span class="k"&gt;SET&lt;/span&gt; &lt;span class="n"&gt;DB_RECOVERY_FILE_DEST_SIZE&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="k"&gt;G&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;ALTER&lt;/span&gt; &lt;span class="k"&gt;SYSTEM&lt;/span&gt; &lt;span class="k"&gt;SET&lt;/span&gt; &lt;span class="n"&gt;DB_RECOVERY_FILE_DEST&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s1"&gt;'/path/to/fast_recovery'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;ALTER&lt;/span&gt; &lt;span class="k"&gt;DATABASE&lt;/span&gt; &lt;span class="n"&gt;FLASHBACK&lt;/span&gt; &lt;span class="k"&gt;ON&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="n"&gt;LOG_MODE&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;FLASHBACK_ON&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;NAME&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;OPEN_MODE&lt;/span&gt; &lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;V&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="k"&gt;DATABASE&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Set the size parameter &lt;strong&gt;before&lt;/strong&gt; the destination parameter. Size the FRA for your change rate. Flashback logs live here, and a full FRA can stall the database.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 3: Create the guaranteed restore point
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;CREATE&lt;/span&gt; &lt;span class="n"&gt;TABLESPACE&lt;/span&gt; &lt;span class="n"&gt;tbs1&lt;/span&gt; &lt;span class="n"&gt;DATAFILE&lt;/span&gt; &lt;span class="s1"&gt;'tbs1_data.dbf'&lt;/span&gt; &lt;span class="k"&gt;SIZE&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="n"&gt;m&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;CREATE&lt;/span&gt; &lt;span class="n"&gt;RESTORE&lt;/span&gt; &lt;span class="n"&gt;POINT&lt;/span&gt; &lt;span class="n"&gt;demo2&lt;/span&gt; &lt;span class="n"&gt;GUARANTEE&lt;/span&gt; &lt;span class="n"&gt;FLASHBACK&lt;/span&gt; &lt;span class="k"&gt;DATABASE&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is the checkpoint. Everything after this moment can be undone.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 4: Simulate the accident
&lt;/h2&gt;

&lt;p&gt;I dropped the test tablespace, then confirmed it was gone:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;DROP&lt;/span&gt; &lt;span class="n"&gt;TABLESPACE&lt;/span&gt; &lt;span class="n"&gt;tbs1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;V&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="n"&gt;TABLESPACE&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;   &lt;span class="c1"&gt;-- 20 rows, TBS1 missing&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Step 5: Flash the database back
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="n"&gt;SHUTDOWN&lt;/span&gt; &lt;span class="k"&gt;IMMEDIATE&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="n"&gt;STARTUP&lt;/span&gt; &lt;span class="n"&gt;MOUNT&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="n"&gt;FLASHBACK&lt;/span&gt; &lt;span class="k"&gt;DATABASE&lt;/span&gt; &lt;span class="k"&gt;TO&lt;/span&gt; &lt;span class="n"&gt;RESTORE&lt;/span&gt; &lt;span class="n"&gt;POINT&lt;/span&gt; &lt;span class="n"&gt;demo2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;ALTER&lt;/span&gt; &lt;span class="k"&gt;DATABASE&lt;/span&gt; &lt;span class="k"&gt;OPEN&lt;/span&gt; &lt;span class="k"&gt;READ&lt;/span&gt; &lt;span class="k"&gt;ONLY&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Opening &lt;strong&gt;read-only&lt;/strong&gt; first lets you check the result before committing to it:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;V&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="n"&gt;TABLESPACE&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;   &lt;span class="c1"&gt;-- 21 rows, TBS1 is back&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Once you're satisfied, finish the recovery:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="n"&gt;SHUTDOWN&lt;/span&gt; &lt;span class="k"&gt;IMMEDIATE&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="n"&gt;STARTUP&lt;/span&gt; &lt;span class="n"&gt;MOUNT&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;ALTER&lt;/span&gt; &lt;span class="k"&gt;DATABASE&lt;/span&gt; &lt;span class="k"&gt;OPEN&lt;/span&gt; &lt;span class="n"&gt;RESETLOGS&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Step 6: Clean up
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;ALTER&lt;/span&gt; &lt;span class="k"&gt;DATABASE&lt;/span&gt; &lt;span class="n"&gt;FLASHBACK&lt;/span&gt; &lt;span class="k"&gt;OFF&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;DROP&lt;/span&gt; &lt;span class="n"&gt;RESTORE&lt;/span&gt; &lt;span class="n"&gt;POINT&lt;/span&gt; &lt;span class="n"&gt;demo2&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Don't skip this step.&lt;/strong&gt; A guaranteed restore point keeps holding FRA space until it is dropped.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I learned
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Flashback is much faster than a full restore.&lt;/strong&gt; It applies flashback logs rather than restoring datafiles.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Read-only first is a cheap safety check.&lt;/strong&gt; You can verify the recovered state before opening with RESETLOGS, which is irreversible.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;FRA sizing is the real operational risk.&lt;/strong&gt; An undersized FRA is the most common way a restore point goes wrong.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Clean up after yourself.&lt;/strong&gt; A forgotten guaranteed restore point quietly eats storage.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I now treat a guaranteed restore point as a standard step in change windows for patching and upgrades, because it gives you a fast, rehearsed way back.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Kumaran Murugan is an Oracle Apps DBA and OCI Cloud Administrator with 5+ years of experience in Oracle E-Business Suite, database migrations, and OCI infrastructure. Connect on (&lt;a href="http://www.linkedin.com/in/kumaranmurugan" rel="noopener noreferrer"&gt;http://www.linkedin.com/in/kumaranmurugan&lt;/a&gt;).&lt;/em&gt;&lt;/p&gt;

</description>
      <category>oracle</category>
      <category>oracledatabase</category>
      <category>restore</category>
    </item>
    <item>
      <title>How to Restore and Clone an OCI DB System from an Automatic Backup</title>
      <dc:creator>Kumaran Murugan</dc:creator>
      <pubDate>Thu, 24 Sep 2026 07:31:57 +0000</pubDate>
      <link>https://dev.to/kumaranm05/how-to-restore-and-clone-an-oci-db-system-from-an-automatic-backup-4lpd</link>
      <guid>https://dev.to/kumaranm05/how-to-restore-and-clone-an-oci-db-system-from-an-automatic-backup-4lpd</guid>
      <description>&lt;p&gt;If you're running Oracle databases on OCI's Base Database Service, one of the most useful recovery skills to have is knowing how to spin up a completely new DB system from an existing automatic backup — whether you're recreating a test environment, recovering from an accidental termination, or just validating that your backups actually work.&lt;/p&gt;

&lt;p&gt;In this walkthrough, I'll take you through the full process: terminating an existing DB system, and rebuilding it from scratch using nothing but an automatic backup.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why this matters
&lt;/h2&gt;

&lt;p&gt;OCI decouples compute and storage lifecycle from your actual data. That means even if a DB system is gone, your data isn't — as long as a backup exists, you can rebuild the entire compute/storage/networking stack around it. This is a pattern worth practicing &lt;em&gt;before&lt;/em&gt; you need it in a real incident.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step-by-step walkthrough
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;1. Locate your source backup&lt;/strong&gt;&lt;br&gt;
Navigate to your DB system's Backups tab and review the available automatic incremental backups, each with its own start/end timestamp.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Start the restore&lt;/strong&gt;&lt;br&gt;
Select the backup you want and choose "Create database" from its action menu — this launches the Create Database from Backup wizard.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Choose what to restore&lt;/strong&gt;&lt;br&gt;
Decide whether to include all PDBs from the backup, or select specific ones.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Pick your target compartment&lt;/strong&gt;&lt;br&gt;
The new DB system doesn't have to go back into the same compartment — useful if you're rebuilding into a test/dev compartment instead of production.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. Configure compute shape&lt;/strong&gt;&lt;br&gt;
Choose your shape series (AMD, Intel, or Ampere) and OCPU count.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;6. Configure storage&lt;/strong&gt;&lt;br&gt;
Pick your storage management software (Oracle Grid Infrastructure or Logical Volume Manager) and performance tier.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;7. Add SSH access and licensing&lt;/strong&gt;&lt;br&gt;
Paste or upload your SSH key, and choose License Included or Bring Your Own License.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;8. Set up networking&lt;/strong&gt;&lt;br&gt;
Select your VCN, subnet, and hostname prefix.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;9. Set the database name and credentials&lt;/strong&gt;&lt;br&gt;
Name your database, then provide the SYS password — plus the &lt;em&gt;source&lt;/em&gt; database's TDE wallet/RMAN password, since that's required to unlock the backup.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;10. Submit and monitor&lt;/strong&gt;&lt;br&gt;
The whole operation runs as a single Work Request, so you can track provisioning, networking setup, and the actual database restore in one place, right through to "Available."&lt;/p&gt;

&lt;h2&gt;
  
  
  What I learned
&lt;/h2&gt;

&lt;p&gt;A few things stood out to me doing this hands-on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;The TDE wallet/RMAN password is non-negotiable&lt;/strong&gt; — without the source database's original password, the backup can't be unlocked, so document it defensively.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Recovery area storage is read-only&lt;/strong&gt; and auto-derived from the backup — you don't configure it directly.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;You get real flexibility&lt;/strong&gt; on where the new system lands — different compartment, VCN, even subnet — which makes this a genuinely practical way to spin up isolated test/dev copies of production data without touching the original.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you're studying for the OCI Architect certifications or just want to build confidence in your OCI story, I'd recommend running through this exact exercise once in a sandbox — it's the kind of thing that's much better to have already practiced before you need it under pressure.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Kumaran Murugan is an Oracle Apps DBA and OCI Cloud Administrator with 5+ years of experience in Oracle E-Business Suite, Database migrations, and OCI infrastructure. Connect on &lt;a href="http://www.linkedin.com/in/kumaranmurugan" rel="noopener noreferrer"&gt;www.linkedin.com/in/kumaranmurugan&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>oci</category>
      <category>oracle</category>
      <category>appsdba</category>
      <category>cloudcomputing</category>
    </item>
  </channel>
</rss>
