<?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>datapatch Fails in sqlpatch.pm: Fixing a Corrupted PDB$SEED Tempfile in Oracle 19c</title>
      <dc:creator>Kumaran Murugan</dc:creator>
      <pubDate>Wed, 04 Nov 2026 06:13:35 +0000</pubDate>
      <link>https://dev.to/kumaranm05/datapatch-fails-in-sqlpatchpm-fixing-a-corrupted-pdbseed-tempfile-in-oracle-19c-3f0b</link>
      <guid>https://dev.to/kumaranm05/datapatch-fails-in-sqlpatchpm-fixing-a-corrupted-pdbseed-tempfile-in-oracle-19c-3f0b</guid>
      <description>&lt;h2&gt;
  
  
  The symptom
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;datapatch -verbose&lt;/code&gt; stopped with:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Unsupported named object type for bind parameter at $ORACLE_HOME/sqlpatch/sqlpatch.pm line 6153.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That message says very little. The useful clue was in the database alert log at the same time:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Read of datafile '/u01/oradata/CDB1/pdbseed/temp01&amp;lt;timestamp&amp;gt;.dbf' (fno 202) header failed with ORA-01206
ORA-01122: database file 202 failed verification check
ORA-01206: file is not part of this database - wrong database id
PDB$SEED(2): Cannot re-create tempfile /u01/oradata/CDB1/pdbseed/temp01&amp;lt;timestamp&amp;gt;.dbf, the same name file exists
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  What the alert log is telling you
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;ORA-01206 (wrong database id):&lt;/strong&gt; the header of the PDB$SEED tempfile belongs to a different database.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;"Cannot re-create tempfile... the same name file exists":&lt;/strong&gt; when PDB$SEED opened, Oracle tried to rebuild the bad tempfile on its own. It couldn't, because a file with that name was already on disk.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The datapatch error:&lt;/strong&gt; datapatch needs a working temporary tablespace in every container, including the seed. With none available, it hit an unhandled exception in &lt;code&gt;sqlpatch.pm&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Likely cause
&lt;/h2&gt;

&lt;p&gt;The tempfile name carries a timestamp from 2024, but PDB$SEED had already been patched successfully in an earlier cycle, so the header problem probably appeared after that, for example following a storage-level copy or a refresh of the database files between patch cycles. I can't prove when or how it happened, so treat this as the most likely explanation, not a confirmed one.&lt;/p&gt;

&lt;p&gt;This is a useful lesson in itself: a seed that patched fine once can still break later.&lt;/p&gt;

&lt;h2&gt;
  
  
  The fix
&lt;/h2&gt;

&lt;p&gt;I replaced the bad tempfile in PDB$SEED with a new one. This uses a hidden parameter, so read the cautions below first.&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;sqlplus&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;sysdba&lt;/span&gt;

&lt;span class="c1"&gt;-- allow changes to the seed (session level only)&lt;/span&gt;
&lt;span class="k"&gt;ALTER&lt;/span&gt; &lt;span class="k"&gt;SESSION&lt;/span&gt; &lt;span class="k"&gt;SET&lt;/span&gt; &lt;span class="nv"&gt;"_oracle_script"&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;TRUE&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="k"&gt;ALTER&lt;/span&gt; &lt;span class="n"&gt;PLUGGABLE&lt;/span&gt; &lt;span class="k"&gt;DATABASE&lt;/span&gt; &lt;span class="n"&gt;PDB&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="n"&gt;SEED&lt;/span&gt; &lt;span class="k"&gt;CLOSE&lt;/span&gt; &lt;span class="k"&gt;IMMEDIATE&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;ALTER&lt;/span&gt; &lt;span class="n"&gt;PLUGGABLE&lt;/span&gt; &lt;span class="k"&gt;DATABASE&lt;/span&gt; &lt;span class="n"&gt;PDB&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="n"&gt;SEED&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;WRITE&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;SESSION&lt;/span&gt; &lt;span class="k"&gt;SET&lt;/span&gt; &lt;span class="n"&gt;CONTAINER&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;PDB&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="n"&gt;SEED&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;-- remove the corrupted tempfile&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;TEMPFILE&lt;/span&gt; &lt;span class="s1"&gt;'/u01/oradata/CDB1/pdbseed/temp01&amp;lt;timestamp&amp;gt;.dbf'&lt;/span&gt; &lt;span class="k"&gt;DROP&lt;/span&gt; &lt;span class="k"&gt;INCLUDING&lt;/span&gt; &lt;span class="n"&gt;DATAFILES&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;-- add a clean one&lt;/span&gt;
&lt;span class="k"&gt;ALTER&lt;/span&gt; &lt;span class="n"&gt;TABLESPACE&lt;/span&gt; &lt;span class="k"&gt;TEMP&lt;/span&gt; &lt;span class="k"&gt;ADD&lt;/span&gt; &lt;span class="n"&gt;TEMPFILE&lt;/span&gt; &lt;span class="s1"&gt;'/u01/oradata/CDB1/pdbseed/temp01.dbf'&lt;/span&gt;
  &lt;span class="k"&gt;SIZE&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="n"&gt;M&lt;/span&gt; &lt;span class="n"&gt;AUTOEXTEND&lt;/span&gt; &lt;span class="k"&gt;ON&lt;/span&gt; &lt;span class="k"&gt;NEXT&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="n"&gt;M&lt;/span&gt; &lt;span class="n"&gt;MAXSIZE&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="k"&gt;G&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;-- put the seed back as it was&lt;/span&gt;
&lt;span class="k"&gt;ALTER&lt;/span&gt; &lt;span class="k"&gt;SESSION&lt;/span&gt; &lt;span class="k"&gt;SET&lt;/span&gt; &lt;span class="n"&gt;CONTAINER&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;CDB&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="n"&gt;ROOT&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;ALTER&lt;/span&gt; &lt;span class="n"&gt;PLUGGABLE&lt;/span&gt; &lt;span class="k"&gt;DATABASE&lt;/span&gt; &lt;span class="n"&gt;PDB&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="n"&gt;SEED&lt;/span&gt; &lt;span class="k"&gt;CLOSE&lt;/span&gt; &lt;span class="k"&gt;IMMEDIATE&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;ALTER&lt;/span&gt; &lt;span class="n"&gt;PLUGGABLE&lt;/span&gt; &lt;span class="k"&gt;DATABASE&lt;/span&gt; &lt;span class="n"&gt;PDB&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="n"&gt;SEED&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;span class="n"&gt;EXIT&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then rerun datapatch:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;$ORACLE_HOME&lt;/span&gt;/OPatch/datapatch &lt;span class="nt"&gt;-verbose&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Verify
&lt;/h2&gt;

&lt;p&gt;After the fix, the rerun patched all three containers, including the seed:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ORACLE_HOME/OPatch/datapatch -verbose
SQL Patching tool version 19.32.0.0.0 Production

Installation queue:
  For the following PDBs: CDB$ROOT PDB$SEED &amp;lt;PDB_NAME&amp;gt;
    The following interim patches will be rolled back:
      37847857 (OJVM RELEASE UPDATE: 19.28.0.0.250715)
    Patch 39472050 (Database Release Update : 19.32.0.0.260721):
      Apply from 19.28.0.0.0 to 19.32.0.0.0
    The following interim patches will be applied:
      39222882 (OJVM RELEASE UPDATE: 19.32.0.0.260721)

Patch installation complete.  Total patches installed: 9

Patch 37847857 rollback (pdb CDB$ROOT): SUCCESS
Patch 39472050 apply (pdb CDB$ROOT): SUCCESS
Patch 39222882 apply (pdb CDB$ROOT): SUCCESS
Patch 37847857 rollback (pdb PDB$SEED): SUCCESS
Patch 39472050 apply (pdb PDB$SEED): SUCCESS
Patch 39222882 apply (pdb PDB$SEED): SUCCESS
Patch 37847857 rollback (pdb &amp;lt;PDB_NAME&amp;gt;): SUCCESS
Patch 39472050 apply (pdb &amp;lt;PDB_NAME&amp;gt;): SUCCESS
Patch 39222882 apply (pdb &amp;lt;PDB_NAME&amp;gt;): SUCCESS
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then check the tempfiles across all containers:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="n"&gt;con_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;file_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;file_name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;tablespace_name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;status&lt;/span&gt;
&lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;cdb_temp_files&lt;/span&gt; &lt;span class="k"&gt;ORDER&lt;/span&gt; &lt;span class="k"&gt;BY&lt;/span&gt; &lt;span class="n"&gt;con_id&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;CON_ID 2 (the seed) should show the new &lt;code&gt;temp01.dbf&lt;/code&gt;. Confirm the seed is back in its normal state:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="n"&gt;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="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;restricted&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;pdbs&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Finally, check that the patch was recorded:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt; &lt;span class="n"&gt;patch_id&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;action&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;status&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;description&lt;/span&gt;
&lt;span class="k"&gt;FROM&lt;/span&gt; &lt;span class="n"&gt;dba_registry_sqlpatch&lt;/span&gt; &lt;span class="k"&gt;ORDER&lt;/span&gt; &lt;span class="k"&gt;BY&lt;/span&gt; &lt;span class="n"&gt;action_time&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Cautions
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;_oracle_script&lt;/code&gt; is an underscore parameter.&lt;/strong&gt; Oracle's own scripts use it, but using it by hand to change the seed is not something I'd do without a backup and a check of the relevant My Oracle Support note. In production, I'd raise a Service Request first.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;I set it at session level only.&lt;/strong&gt; &lt;code&gt;ALTER SESSION&lt;/code&gt; means it was gone when I exited and never touched the spfile.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Take a backup first&lt;/strong&gt; and try this in a non-production database.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Read-only afterwards.&lt;/strong&gt; Always put PDB$SEED back in READ ONLY once you're done.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;A Perl-level error can hide a storage problem.&lt;/strong&gt; When &lt;code&gt;datapatch&lt;/code&gt; fails inside &lt;code&gt;sqlpatch.pm&lt;/code&gt;, read the alert log at the same moment.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Check the seed's tempfile, not just the root.&lt;/strong&gt; A bad tempfile in PDB$SEED can block patching even when everything else looks healthy.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Open your PDBs before running datapatch.&lt;/strong&gt; It only patches PDBs that are open, and it skips closed ones.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Files can change between patch cycles.&lt;/strong&gt; A seed that patched fine before can still break after copies or refreshes, so it's worth checking tempfile headers before a patching window.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Have you seen this error after patching a cloned or refreshed CDB? I'd like to hear whether the cause matched.&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;LinkedIn&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>oracle</category>
      <category>database</category>
      <category>dba</category>
      <category>oci</category>
    </item>
    <item>
      <title>EBS 12.2.15: Fixing "ERROR: This env should be sourced from apps !" When Sourcing the Patch File System</title>
      <dc:creator>Kumaran Murugan</dc:creator>
      <pubDate>Sun, 25 Oct 2026 15:50:06 +0000</pubDate>
      <link>https://dev.to/kumaranm05/ebs-12215-fixing-error-this-env-should-be-sourced-from-apps-when-sourcing-the-patch-file-41om</link>
      <guid>https://dev.to/kumaranm05/ebs-12215-fixing-error-this-env-should-be-sourced-from-apps-when-sourcing-the-patch-file-41om</guid>
      <description>&lt;p&gt;I recently built a fresh Oracle E-Business Suite 12.2.15 environment from the OCI Marketplace image, following Oracle's installation document (KB849587). The services came up cleanly. The problem appeared the first time I tried to prepare for patching.&lt;/p&gt;

&lt;h2&gt;
  
  
  The symptom
&lt;/h2&gt;

&lt;p&gt;When I sourced the environment file and chose the patch file system, it failed immediately:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Please choose the environment file you wish to source [R/P]:P
  Sourcing the PATCH File System ...
ERROR: This env should be sourced from apps !
[oracle@ebsdemo12-2-15 ~]$
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The application was up and running, so the environment itself was healthy. Only the patch file system would not source.&lt;/p&gt;

&lt;h2&gt;
  
  
  Background: two file systems
&lt;/h2&gt;

&lt;p&gt;EBS 12.2 uses online patching with two application file systems, a &lt;strong&gt;run&lt;/strong&gt; file system and a &lt;strong&gt;patch&lt;/strong&gt; file system. When you source the environment file, you choose which one you want:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;R&lt;/strong&gt; sets up the environment for the run file system, which is what users are connected to.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;P&lt;/strong&gt; sets up the environment for the patch file system, which &lt;code&gt;adop&lt;/code&gt; needs before you apply a patch.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If the patch file system won't source, you can't start a patching cycle.&lt;/p&gt;

&lt;h2&gt;
  
  
  What fixed it
&lt;/h2&gt;

&lt;p&gt;I ran AutoConfig directly against the &lt;strong&gt;patch file system's context file&lt;/strong&gt;, from the &lt;code&gt;AD_TOP/bin&lt;/code&gt; directory:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;perl adconfig.pl &lt;span class="nv"&gt;contextfile&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/u01/install/APPS/fs2/inst/apps/EBSDB_apps/appl/admin/EBSDB_apps.xml
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Once AutoConfig finished, I sourced the environment file again, chose &lt;strong&gt;P&lt;/strong&gt;, and the patch environment loaded normally.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why it happens
&lt;/h2&gt;

&lt;p&gt;The error is raised by the environment-sourcing logic, before any patch is involved. So this is an environment configuration problem, not a patch problem.&lt;/p&gt;

&lt;p&gt;AutoConfig regenerates the environment and configuration files for a file system from its context file. Running it against the patch file system's context file was the only change I made, and it resolved the error. The most likely cause is that the environment files for the patch file system were stale or incomplete after the initial build, while the run file system had been fully configured.&lt;/p&gt;

&lt;p&gt;A Marketplace environment is provisioned onto a new host, so the two file systems don't necessarily get configured at the same time. I haven't proven this from the internals, so treat it as the most likely explanation and verify it on your own system with the checks below.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to check your own system
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Rule out the simple cause.&lt;/strong&gt; Run &lt;code&gt;whoami&lt;/code&gt; and &lt;code&gt;ls -ld&lt;/code&gt; on the patch file system directory. If your install uses a separate application OS user, make sure you are sourcing as that user.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Compare the context files.&lt;/strong&gt; Check that key values, such as the hostname, match between the run and patch context files:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   &lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;-i&lt;/span&gt; s_hostname &amp;lt;run context file&amp;gt;
   &lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;-i&lt;/span&gt; s_hostname &amp;lt;patch context file&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Check the AutoConfig log.&lt;/strong&gt; After the run, look in the patch file system's &lt;code&gt;admin/log&lt;/code&gt; directory for a clean &lt;code&gt;adconfig.log&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Compare file timestamps.&lt;/strong&gt; Look at the environment files in the patch file system before and after the run to see what AutoConfig regenerated.&lt;/li&gt;
&lt;/ol&gt;

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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Read the error as an environment problem.&lt;/strong&gt; The message appears before &lt;code&gt;adop&lt;/code&gt; starts, so look at the file system's configuration first.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Run AutoConfig on both file systems.&lt;/strong&gt; On a new or cloned environment, I now treat this as a pre-patching checklist item, not just a fix for when something breaks.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Don't force the environment.&lt;/strong&gt; Regenerating it from the context file is cleaner than editing generated files by hand.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Have you hit this error on a Marketplace or cloned EBS environment? I'd like to know whether the cause was the same.&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;LinkedIn&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>cloud</category>
      <category>devops</category>
      <category>linux</category>
    </item>
    <item>
      <title>Provisioning an Oracle Autonomous AI Database and Connecting Securely with a Cloud Wallet</title>
      <dc:creator>Kumaran Murugan</dc:creator>
      <pubDate>Mon, 19 Oct 2026 06:54:16 +0000</pubDate>
      <link>https://dev.to/kumaranm05/provisioning-an-oracle-autonomous-ai-database-and-connecting-securely-with-a-cloud-wallet-3p81</link>
      <guid>https://dev.to/kumaranm05/provisioning-an-oracle-autonomous-ai-database-and-connecting-securely-with-a-cloud-wallet-3p81</guid>
      <description>&lt;p&gt;Spinning up a database used to mean planning hardware, installing software, and configuring backups. With Oracle Autonomous AI Database on OCI, you can have a working database in minutes. The step that trips most people up isn't creating it, though. It's &lt;strong&gt;connecting to it securely from a client tool&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;In this walkthrough, I provision a Serverless Autonomous AI Database, connect to it from SQL Developer using a Cloud Wallet, and then stop and terminate it so it doesn't keep consuming resources.&lt;/p&gt;

&lt;h2&gt;
  
  
  What you'll need
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;An OCI account or a LiveLabs sandbox&lt;/li&gt;
&lt;li&gt;SQL Developer installed on your machine&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Step 1: Start the create wizard
&lt;/h2&gt;

&lt;p&gt;In the OCI Console, open &lt;strong&gt;Oracle Database → Autonomous AI Database&lt;/strong&gt; and click &lt;strong&gt;Create&lt;/strong&gt;. Choose the &lt;strong&gt;Serverless&lt;/strong&gt; deployment and give the database a display name and a database name.&lt;/p&gt;

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

&lt;h2&gt;
  
  
  Step 2: Choose workload type and size
&lt;/h2&gt;

&lt;p&gt;Pick the workload type that matches your use case (data warehouse, transaction processing, JSON, or APEX). Then set the compute (ECPU count) and storage. Autonomous Database handles patching, tuning and scaling for you, so sizing is the main decision.&lt;/p&gt;

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

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

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

&lt;h2&gt;
  
  
  Step 3: Set the ADMIN password
&lt;/h2&gt;

&lt;p&gt;The wizard creates an &lt;strong&gt;ADMIN&lt;/strong&gt; user. Choose a strong password and store it somewhere safe. You will need it when you connect from SQL Developer.&lt;/p&gt;

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

&lt;h2&gt;
  
  
  Step 4: Set network access and backups
&lt;/h2&gt;

&lt;p&gt;For a learning environment, I used &lt;strong&gt;Secure access from everywhere&lt;/strong&gt;. For anything real, use &lt;strong&gt;allowed IPs and VCNs&lt;/strong&gt; or a &lt;strong&gt;private endpoint&lt;/strong&gt; instead. I also reviewed the backup retention setting here, since it is chosen at creation time.&lt;/p&gt;

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

&lt;p&gt;Add a contact email for operational notifications, then click &lt;strong&gt;Create&lt;/strong&gt;.&lt;/p&gt;

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

&lt;h2&gt;
  
  
  Step 5: Wait for Available
&lt;/h2&gt;

&lt;p&gt;The database moves from &lt;strong&gt;Provisioning&lt;/strong&gt; to &lt;strong&gt;Available&lt;/strong&gt;. This usually takes a few minutes.&lt;/p&gt;

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

&lt;h2&gt;
  
  
  Step 6: Download the Cloud Wallet
&lt;/h2&gt;

&lt;p&gt;From the database details page, open &lt;strong&gt;Database connection&lt;/strong&gt; and download the &lt;strong&gt;wallet&lt;/strong&gt;. The wallet is a zip file with the credentials and connection details your client needs. Set a wallet password when prompted.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 7: Connect from SQL Developer
&lt;/h2&gt;

&lt;p&gt;Create a new connection and enter:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Username:&lt;/strong&gt; &lt;code&gt;admin&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Password:&lt;/strong&gt; your ADMIN password&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Connection Type:&lt;/strong&gt; &lt;code&gt;Cloud Wallet&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Configuration File:&lt;/strong&gt; your downloaded wallet zip&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Service:&lt;/strong&gt; &lt;code&gt;&amp;lt;dbname&amp;gt;_high&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Click &lt;strong&gt;Test&lt;/strong&gt;. You should see &lt;strong&gt;Status: Success&lt;/strong&gt;.&lt;/p&gt;

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

&lt;h3&gt;
  
  
  Which service name?
&lt;/h3&gt;

&lt;p&gt;Each database exposes several services. As a rule of thumb:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;_high&lt;/code&gt;: highest priority and resources, fewest concurrent sessions&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;_medium&lt;/code&gt;: a balance of the two&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;_low&lt;/code&gt;: lowest priority, most concurrency&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Step 8: Stop the database
&lt;/h2&gt;

&lt;p&gt;When you're done, open &lt;strong&gt;More actions → Stop&lt;/strong&gt;. Stopping pauses compute billing while keeping the database definition.&lt;/p&gt;

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

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

&lt;h2&gt;
  
  
  Step 9: Terminate it
&lt;/h2&gt;

&lt;p&gt;For a lab database you no longer need, choose &lt;strong&gt;More actions → Terminate&lt;/strong&gt; and type the database name to confirm. The name confirmation exists to prevent accidental deletion.&lt;/p&gt;

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

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

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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;The wallet is the key concept.&lt;/strong&gt; A client connects with the wallet and a service name, not a host and port.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Service names are a workload choice.&lt;/strong&gt; &lt;code&gt;_high&lt;/code&gt;, &lt;code&gt;_medium&lt;/code&gt; and &lt;code&gt;_low&lt;/code&gt; let you trade throughput against concurrency.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Network access is easy to leave too open.&lt;/strong&gt; "Secure access from everywhere" is fine in a sandbox, but restrict it for real workloads.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Stop and terminate idle databases.&lt;/strong&gt; Cleanup is part of the workflow, not an afterthought.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you're preparing for the OCI Autonomous Database certification, this is a good exercise to run end to end at least once.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;What do you use to connect to Autonomous Database: SQL Developer, Database Actions, or something else?&lt;/em&gt;&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;LinkedIn&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>cloud</category>
      <category>database</category>
      <category>sql</category>
      <category>tutorial</category>
    </item>
    <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>
