{"id":5751,"date":"2026-07-14T23:06:40","date_gmt":"2026-07-14T17:36:40","guid":{"rendered":"https:\/\/w3buddy.com\/?p=5751"},"modified":"2026-07-19T22:17:29","modified_gmt":"2026-07-19T16:47:29","slug":"oracle-19c-patching","status":"publish","type":"post","link":"https:\/\/w3buddy.com\/blog\/oracle-19c-patching\/","title":{"rendered":"Oracle 19c Patching"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">A complete production-ready SOP for patching Oracle Database 19c on a standalone Linux server. Covers patch identification, download, pre-patch checks, OPatch upgrade, patch apply, datapatch execution, and full post-patch validation \u2014 with real commands, expected outputs, and consultant-level notes for both standard OFA and enterprise custom path conventions.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">1. Document Info<\/h3>\n\n\n\n<figure class=\"wp-block-table has-small-font-size\"><table><thead><tr><th>Item<\/th><th>Detail<\/th><\/tr><\/thead><tbody><tr><td>Oracle Version<\/td><td>19c (19.3 base + applicable RU)<\/td><\/tr><tr><td>OS<\/td><td>Oracle Linux 7.x \/ RHEL 7.x or 8.x<\/td><\/tr><tr><td>Patch Type<\/td><td>Release Update (RU) \u2014 Standalone (Non-RAC)<\/td><\/tr><tr><td>Patching Method<\/td><td>In-place (same ORACLE_HOME)<\/td><\/tr><tr><td>MOS Reference<\/td><td>Doc ID 2694520.1 (19c Patch Advisories)<\/td><\/tr><tr><td>MOS Reference<\/td><td>Doc ID 1410202.1 (OPatch Quick Start)<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">2. Path Conventions<\/h3>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">Same conventions as SOP 01. Confirm which convention your environment uses before starting. All examples in this SOP use Convention A paths. Substitute with Convention B paths where applicable.<\/p>\n<\/blockquote>\n\n\n\n<figure class=\"wp-block-table has-small-font-size\"><table><thead><tr><th>Item<\/th><th>Convention A<\/th><th>Convention B<\/th><\/tr><\/thead><tbody><tr><td>Oracle Base<\/td><td>\/u01\/app\/oracle<\/td><td>\/oracle<\/td><\/tr><tr><td>Oracle Home<\/td><td>\/u01\/app\/oracle\/product\/19.3.0\/dbhome_1<\/td><td>\/oracle\/RDBMS\/19.31<\/td><\/tr><tr><td>oraInventory<\/td><td>\/u01\/app\/oraInventory<\/td><td>\/oracle\/oraInventory<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">3. Oracle Patching \u2014 Concepts You Must Know First<\/h3>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">Before touching any patch command, understand these terms. You will use them every time you patch.<\/p>\n<\/blockquote>\n\n\n\n<figure class=\"wp-block-table has-small-font-size\"><table><thead><tr><th>Term<\/th><th>What It Means<\/th><\/tr><\/thead><tbody><tr><td>RU (Release Update)<\/td><td>Quarterly cumulative patch from Oracle. Contains all bug fixes since base release. Always prefer RU over individual one-off patches. Example: 19.22 RU<\/td><\/tr><tr><td>RUR (Release Update Revision)<\/td><td>A smaller patch on top of an RU for critical fixes between quarterly cycles. Less common.<\/td><\/tr><tr><td>One-off Patch<\/td><td>A single bug fix patch for a specific issue. Applied on top of RU when a specific bug needs fixing urgently.<\/td><\/tr><tr><td>OPatch<\/td><td>Oracle&#8217;s patching utility. All patches are applied and rolled back using OPatch. Lives inside ORACLE_HOME\/OPatch.<\/td><\/tr><tr><td>datapatch<\/td><td>A separate Oracle utility that applies SQL-level changes from a patch into the database dictionary. Must be run AFTER OPatch. OPatch patches the binaries, datapatch patches the database internals.<\/td><\/tr><tr><td>Patch Conflict<\/td><td>When two patches modify the same file. OPatch detects this automatically during prereq check. Must be resolved before applying.<\/td><\/tr><tr><td>Rolling Patch<\/td><td>Patching one node at a time in RAC \u2014 database stays online. Not applicable for standalone.<\/td><\/tr><tr><td>In-place Patching<\/td><td>Applying the patch directly to the existing ORACLE_HOME. Database must be down.<\/td><\/tr><tr><td>Out-of-place Patching<\/td><td>Installing a new ORACLE_HOME with the patch already applied, then switching the database to it. Database downtime is shorter. Covered separately.<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">4. Pre-Patching Checks<\/h3>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">\u26a0\ufe0f <strong>IMPORTANT:<\/strong> Never start patching without completing all pre-checks. A failed patch mid-way on a production database is a serious incident. 30 minutes on pre-checks prevents hours of rollback.<\/p>\n<\/blockquote>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h4 class=\"wp-block-heading\">4.1 \u2014 Confirm Current Oracle Version and Patch Level<\/h4>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\"><strong>Why?<\/strong> You need to know exactly what is currently installed before deciding which patch to apply. The patch you download from MOS must be for the exact version currently running.<\/p>\n<\/blockquote>\n\n\n\n<pre class=\"wp-block-code\"><code>sqlplus \/ as sysdba\n\nset linesize 150\nset pagesize 50\ncol banner for a80\n\n-- Shows full Oracle version string\nSELECT banner FROM v$version WHERE banner LIKE 'Oracle%';\n\n-- Shows exact version and patch level\nSELECT version, version_full FROM v$instance;<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code># Also check via OPatch \u2014 shows current patch inventory\nsu - oracle\n$ORACLE_HOME\/OPatch\/opatch lsinventory\n\n# Quick view of installed patches only\n$ORACLE_HOME\/OPatch\/opatch lsinventory | grep -E \"Patch|Oracle Database\"<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h4 class=\"wp-block-heading\">4.2 \u2014 Confirm OPatch Version and Upgrade if Needed<\/h4>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\"><strong>Why?<\/strong> Every Oracle RU requires a minimum OPatch version. If your OPatch is older than what the patch requires, OPatch will refuse to apply the patch. Always upgrade OPatch FIRST before applying any patch.<\/p>\n<\/blockquote>\n\n\n\n<pre class=\"wp-block-code\"><code>su - oracle\n\n# Check current OPatch version\n$ORACLE_HOME\/OPatch\/opatch version<\/code><\/pre>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">\ud83d\udcce <strong>How to find required OPatch version:<\/strong> Open the patch README file (inside the patch zip) and look for the line <code>OPatch version required<\/code>. Then compare with your current version.<\/p>\n<\/blockquote>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">\ud83d\udcce Download latest OPatch: MOS Doc ID <strong>6880880.1<\/strong> \u2192 Download patch <strong>6880880<\/strong> for your Oracle version and OS.<\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>If OPatch needs upgrading:<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Step 1 \u2014 Backup existing OPatch directory\nmv $ORACLE_HOME\/OPatch $ORACLE_HOME\/OPatch_backup_$(date +%Y%m%d)\n\n# Step 2 \u2014 Unzip new OPatch into ORACLE_HOME\n# The zip extracts as an \"OPatch\" folder directly\nunzip -q \/stage\/patches\/p6880880_190000_Linux-x86-64.zip -d $ORACLE_HOME\n\n# Step 3 \u2014 Verify new version\n$ORACLE_HOME\/OPatch\/opatch version<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h4 class=\"wp-block-heading\">4.3 \u2014 Identify and Download the Correct Patch from MOS<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Why?<\/strong> Oracle releases patches quarterly. You must download the correct patch for your exact Oracle version and OS platform. Applying a patch for the wrong version or wrong OS will fail or corrupt the installation.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>How to find the latest 19c RU on MOS:<\/strong><\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Log into MOS: <a href=\"https:\/\/support.oracle.com\">https:\/\/support.oracle.com<\/a><\/li>\n\n\n\n<li>Click <strong>Patches &amp; Updates<\/strong> tab<\/li>\n\n\n\n<li>In <strong>Patch Search<\/strong> \u2192 select <strong>Product or Family (Advanced)<\/strong><\/li>\n\n\n\n<li>Product = <code>Oracle Database<\/code><\/li>\n\n\n\n<li>Release = <code>19.x.x.x.x<\/code><\/li>\n\n\n\n<li>Platform = <code>Linux x86-64<\/code><\/li>\n\n\n\n<li>Click <strong>Search<\/strong><\/li>\n\n\n\n<li>Look for patch named <code>Database Release Update 19.xx.x.x.x<\/code> \u2014 pick the latest<\/li>\n<\/ol>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">\ud83d\udcce MOS Doc ID <strong>2694520.1<\/strong> \u2014 Oracle Database 19c Proactive Patch \u2014 lists all current recommended patches in one place. Always start here.<\/p>\n<\/blockquote>\n\n\n\n<pre class=\"wp-block-code\"><code># After downloading \u2014 verify the patch zip is complete\nls -lh \/stage\/patches\/p&lt;PATCHNUM&gt;_190000_Linux-x86-64.zip\n\n# Verify checksum against MOS download page\nsha256sum \/stage\/patches\/p&lt;PATCHNUM&gt;_190000_Linux-x86-64.zip\n\n# Unzip the patch to staging area\nmkdir -p \/stage\/patches\/unzipped\nunzip -q \/stage\/patches\/p&lt;PATCHNUM&gt;_190000_Linux-x86-64.zip \\\n      -d \/stage\/patches\/unzipped\n\n# List what was extracted \u2014 should see a numbered folder (the patch ID)\nls -l \/stage\/patches\/unzipped\/<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h4 class=\"wp-block-heading\">4.4 \u2014 Read the Patch README<\/h4>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\"><strong>Why?<\/strong> Every patch ships with a README file that contains patch-specific instructions, known issues, pre-requisites, and sometimes special steps that differ from the standard process. Not reading the README is the most common cause of patching mistakes.<\/p>\n<\/blockquote>\n\n\n\n<pre class=\"wp-block-code\"><code># The README is inside the extracted patch directory\nls \/stage\/patches\/unzipped\/&lt;PATCHNUM&gt;\/\n\n# Read it fully before proceeding\n# Key things to look for:\n# - Minimum OPatch version required\n# - Any pre-install steps specific to this patch\n# - Any post-install steps beyond standard datapatch\n# - Known issues or conflicts\nless \/stage\/patches\/unzipped\/&lt;PATCHNUM&gt;\/README.html\n# OR\nless \/stage\/patches\/unzipped\/&lt;PATCHNUM&gt;\/README.txt<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h4 class=\"wp-block-heading\">4.5 \u2014 Check Disk Space for Patching<\/h4>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\"><strong>Why?<\/strong> OPatch takes a backup of all files it will replace before applying the patch. This backup goes into <code>$ORACLE_HOME\/.patch_storage<\/code>. If there is not enough space, OPatch will fail mid-patch which is a dangerous situation.<\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\">bash<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Check ORACLE_HOME filesystem \u2014 need at least 2-3 GB free\ndf -hP $ORACLE_HOME\n\n# Check \/tmp \u2014 OPatch uses \/tmp during operations\ndf -hP \/tmp\n\n# Check current size of patch_storage (existing backups from previous patches)\ndu -sh $ORACLE_HOME\/.patch_storage <strong>2<\/strong>&gt;\/dev\/null || echo \"No previous patch storage found\"<\/code><\/pre>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">\u26a0\ufe0f <strong>IMPORTANT:<\/strong> If <code>\/oracle<\/code> or <code>\/u01<\/code> filesystem is above 85% used, clean up old patch backups from <code>.patch_storage<\/code> or ask your storage team to extend the filesystem BEFORE patching.<\/p>\n<\/blockquote>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h4 class=\"wp-block-heading\">4.6 \u2014 Run OPatch Prerequisite Check (Without Applying)<\/h4>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\"><strong>Why?<\/strong> OPatch has a built-in prereq check that validates everything before touching a single file. It checks for conflicts with existing patches, verifies OPatch version, checks permissions, and checks disk space. This is a dry-run \u2014 it changes nothing. Always run it first.<\/p>\n<\/blockquote>\n\n\n\n<pre class=\"wp-block-code\"><code>su - oracle\ncd \/stage\/patches\/unzipped\/&lt;PATCHNUM&gt;\n\n# Run prereq check only \u2014 does NOT apply the patch\n$ORACLE_HOME\/OPatch\/opatch prereq CheckConflictAgainstOHWithDetail \\\n    -ph \/stage\/patches\/unzipped\/&lt;PATCHNUM&gt;<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>What to look for in output:<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>OPatch succeeded.   \u2190 This is what you want to see<\/code><\/pre>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">\u26a0\ufe0f <strong>IMPORTANT:<\/strong> If prereq check shows <code>Patch conflict detected<\/code> \u2014 stop. Do NOT proceed with patching until the conflict is resolved. Check the conflict details in the output, search MOS for the conflicting patches, and either remove the conflicting patch or get a merged patch from Oracle Support.<\/p>\n<\/blockquote>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h4 class=\"wp-block-heading\">4.7 \u2014 Check for Running Database Sessions<\/h4>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\"><strong>Why?<\/strong> The database must be shut down before applying the patch. But before shutting down, check for active sessions. In production, coordinate with application teams for a maintenance window. Never shut down a database with active transactions without notice.<\/p>\n<\/blockquote>\n\n\n\n<pre class=\"wp-block-code\"><code>sqlplus \/ as sysdba\n\nset linesize 180\nset pagesize 100\ncol username    for a20\ncol osuser      for a20\ncol machine     for a30\ncol program     for a30\ncol status      for a10\ncol logon_time  for a22\n\n-- Shows all active user sessions\nSELECT username, osuser, machine, program, status, logon_time\nFROM   v$session\nWHERE  type = 'USER'\nAND    username IS NOT NULL\nORDER BY logon_time;\n\n-- Quick count of active sessions\nSELECT COUNT(*) active_sessions\nFROM   v$session\nWHERE  type   = 'USER'\nAND    status = 'ACTIVE';<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h4 class=\"wp-block-heading\">4.8 \u2014 Take RMAN Backup Before Patching<\/h4>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\"><strong>Why?<\/strong> This is your safety net. If the patch goes wrong and rollback also fails (rare but it happens), the RMAN backup is your last resort to restore the database. Never patch a production database without a valid recent backup.<\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\">bash<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>su - oracle\n\n# Take a full database backup before patching\nrman target \/\n\nRMAN&gt; BACKUP DATABASE PLUS ARCHIVELOG;\nRMAN&gt; LIST BACKUP SUMMARY;   -- Confirm backup completed\nRMAN&gt; EXIT;<\/code><\/pre>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">\u26a0\ufe0f <strong>IMPORTANT:<\/strong> If a full RMAN backup was taken within the last 24 hours and no significant data changes have happened, you can skip this step in non-production environments. In production \u2014 always take a fresh backup.<\/p>\n<\/blockquote>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h4 class=\"wp-block-heading\">4.9 \u2014 Record Pre-Patch Baseline<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Why?<\/strong> You need a record of exactly what the system looked like BEFORE the patch. This is used for comparison during post-patch checks and as evidence for your change management record.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sqlplus \/ as sysdba\n\nset linesize 200\nset pagesize 100\ncol comp_name for a50\ncol version   for a15\ncol status    for a12\n\n-- Record current component versions\nSELECT comp_name, version, status\nFROM   dba_registry\nORDER BY comp_name;\n\n-- Record current invalid object count\nSELECT COUNT(*) pre_patch_invalid_count\nFROM   dba_objects\nWHERE  status = 'INVALID';<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code># Record current patch inventory to a file for reference\n$ORACLE_HOME\/OPatch\/opatch lsinventory &gt; \/tmp\/pre_patch_inventory_$(date +%Y%m%d).txt\ncat \/tmp\/pre_patch_inventory_$(date +%Y%m%d).txt<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">5. Patching Activity<\/h3>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">\u26a0\ufe0f <strong>IMPORTANT:<\/strong> From this point onwards the database will be shut down. Ensure your maintenance window is active, application teams are notified, and monitoring alerts are suppressed (blackout in OEM if configured).<\/p>\n<\/blockquote>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h4 class=\"wp-block-heading\">5.1 \u2014 Stop All Database Services and Shut Down Database<\/h4>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\"><strong>Why?<\/strong> Oracle binaries cannot be patched while they are in use. The database, listener, and any other Oracle processes using this ORACLE_HOME must be stopped before OPatch can replace the binary files.<\/p>\n<\/blockquote>\n\n\n\n<pre class=\"wp-block-code\"><code>su - oracle\n\n# Step 1 \u2014 Shut down the listener first\nlsnrctl stop\n\n# Confirm listener is down\nlsnrctl status   # Should show \"TNS-12541: No listener\"\n\n# Step 2 \u2014 Shut down the database\nsqlplus \/ as sysdba<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>-- Graceful shutdown \u2014 waits for all active transactions to complete\n-- Use IMMEDIATE if NORMAL takes too long (more than 5 minutes)\nSHUTDOWN IMMEDIATE;\nEXIT;<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code># Step 3 \u2014 Confirm no Oracle processes are running from this ORACLE_HOME\nps -ef | grep ora_ | grep -v grep\nps -ef | grep $ORACLE_HOME | grep -v grep\n\n# Expected: No output (or only grep itself)<\/code><\/pre>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">\u26a0\ufe0f <strong>IMPORTANT:<\/strong> If any Oracle process is still running after <code>SHUTDOWN IMMEDIATE<\/code>, do NOT proceed. Identify the process and stop it cleanly. Patching while Oracle processes are running will corrupt the Oracle Home.<\/p>\n<\/blockquote>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h4 class=\"wp-block-heading\">5.2 \u2014 Set ORACLE_HOME Environment (Confirm Before Patching)<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Why?<\/strong> OPatch uses the <code>ORACLE_HOME<\/code> environment variable to know which Oracle Home to patch. If this is set incorrectly, you could accidentally patch the wrong Oracle Home. Always verify before running OPatch.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>su - oracle\n\n# Confirm environment is pointing to correct ORACLE_HOME\necho \"ORACLE_HOME = $ORACLE_HOME\"\necho \"ORACLE_BASE = $ORACLE_BASE\"\necho \"ORACLE_SID  = $ORACLE_SID\"\n\n# Also confirm OPatch is using the correct home\n$ORACLE_HOME\/OPatch\/opatch lsinventory | grep \"Oracle Home\"<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h4 class=\"wp-block-heading\">5.3 \u2014 Apply the Patch Using OPatch<\/h4>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\"><strong>Why <code>opatch apply<\/code>?<\/strong> This is the command that actually replaces the old Oracle binary files and libraries with the new patched versions. OPatch first backs up all files it will replace (into <code>.patch_storage<\/code>), then replaces them. If something fails, OPatch uses this backup to roll back.<\/p>\n<\/blockquote>\n\n\n\n<pre class=\"wp-block-code\"><code>su - oracle\n\n# Navigate to the extracted patch directory\ncd \/stage\/patches\/unzipped\/&lt;PATCHNUM&gt;\n\n# Apply the patch\n# -silent = no interactive prompts\n# -oh = explicitly specify ORACLE_HOME (best practice to avoid ambiguity)\n$ORACLE_HOME\/OPatch\/opatch apply -silent \\\n    -oh $ORACLE_HOME\n\n# Watch for progress \u2014 OPatch shows files being patched<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Expected output at the end:<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Patching component oracle.rdbms, 19.x.x.x.x...\nPatch &lt;PATCHNUM&gt; successfully applied.\nOPatch succeeded.<\/code><\/pre>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">\u26a0\ufe0f <strong>IMPORTANT:<\/strong> If OPatch shows any error during apply \u2014 do NOT start the database. First run the rollback (Section 7) to restore to pre-patch state, then investigate the error. Starting a database with a partially applied patch can cause data dictionary corruption.<\/p>\n<\/blockquote>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h4 class=\"wp-block-heading\">5.4 \u2014 Verify Patch Was Applied Successfully<\/h4>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\"><strong>Why?<\/strong> Confirm the patch is now listed in the Oracle inventory before starting the database. This is your confirmation that OPatch completed successfully.<\/p>\n<\/blockquote>\n\n\n\n<pre class=\"wp-block-code\"><code>su - oracle\n\n# Check patch is now listed in inventory\n$ORACLE_HOME\/OPatch\/opatch lsinventory | grep -E \"Patch|PATCHNUM\"\n\n# Detailed check\n$ORACLE_HOME\/OPatch\/opatch lsinventory -detail | grep -A5 \"&lt;PATCHNUM&gt;\"<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h4 class=\"wp-block-heading\">5.5 \u2014 Start the Database and Listener<\/h4>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\"><strong>Why start before datapatch?<\/strong> The database must be open (not just mounted) for datapatch to run. datapatch applies SQL changes to the data dictionary, which requires the database to be in READ WRITE mode.<\/p>\n<\/blockquote>\n\n\n\n<pre class=\"wp-block-code\"><code>su - oracle\n\n# Start the database\nsqlplus \/ as sysdba<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>STARTUP;\n\n-- Confirm database is open\nSELECT name, open_mode FROM v$database;\nEXIT;<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code># Start the listener\nlsnrctl start\n\n# Confirm listener is up and database is registered\nlsnrctl status<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h4 class=\"wp-block-heading\">5.6 \u2014 Run datapatch (CRITICAL STEP)<\/h4>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\"><strong>Why datapatch?<\/strong> OPatch patches the Oracle software binaries (the files on disk). But Oracle also stores version-specific SQL objects, packages, and dictionary tables inside the database itself. datapatch updates these internal database objects to match the newly patched binaries. Without datapatch, there will be a mismatch between the binary version and the dictionary version \u2014 this causes ORA- errors and incorrect behavior.<\/p>\n<\/blockquote>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">\u26a0\ufe0f <strong>IMPORTANT:<\/strong> datapatch MUST be run after every OPatch apply. It is not optional. Skipping datapatch is one of the most common patching mistakes.<\/p>\n<\/blockquote>\n\n\n\n<pre class=\"wp-block-code\"><code>su - oracle\n\n# Navigate to OPatch utilities directory\ncd $ORACLE_HOME\/OPatch\n\n# Run datapatch\n# -verbose = shows detailed progress of each SQL script being applied\n.\/datapatch -verbose<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>What to look for in datapatch output:<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>SQL Patching tool version 19.x.x.x.x\nCopyright (c) 2012, 2023, Oracle.  All rights reserved.\n\nLog file for this invocation: \/u01\/app\/oracle\/cfgtoollogs\/sqlpatch\/&lt;date&gt;\/\nConnecting to database...OK\nBootstrapping registry and package to current versions...done\nDetermining current state...done\nAdding patches to installation queue and performing prereq checks...done\nInstallation queue:\n  For the following patches, no SQL actions will be performed:\n    None\n  The following patches will be applied:\n    &lt;PATCHNUM&gt; (DATABASE RELEASE UPDATE 19.xx.x.x.x)\n\nInstalling patches...\nPatch installation complete. Total patches installed: 1\nValidating logfiles...done\nPatch &lt;PATCHNUM&gt; apply: SUCCESS\n  logfile: \/u01\/app\/oracle\/cfgtoollogs\/sqlpatch\/...\/...log (no errors)\ndatapatch: ALL PATCHES APPLIED SUCCESSFULLY.<\/code><\/pre>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">\u26a0\ufe0f <strong>IMPORTANT:<\/strong> If datapatch shows any failures, check the log file path shown in the output. Common issues: database not fully open, temporary tablespace full, INVALID objects blocking compilation.<\/p>\n<\/blockquote>\n\n\n\n<pre class=\"wp-block-code\"><code># Check datapatch log for errors if needed\nls -lrt \/u01\/app\/oracle\/cfgtoollogs\/sqlpatch\/\n# Convention B:\nls -lrt \/oracle\/cfgtoollogs\/sqlpatch\/<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">6. Post-Patching Checks<\/h3>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">\u26a0\ufe0f <strong>IMPORTANT:<\/strong> Post-patch checks are mandatory. Do not close your maintenance window or inform the team that patching is complete until every check below passes.<\/p>\n<\/blockquote>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h4 class=\"wp-block-heading\">6.1 \u2014 Confirm New Patch Version<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Why?<\/strong> First confirmation that the patch is correctly reflected in both the Oracle binary and the data dictionary.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sqlplus \/ as sysdba\n\nset linesize 150\nset pagesize 50\ncol banner for a80\n\n-- Confirms binary version matches expected patched version\nSELECT banner FROM v$version WHERE banner LIKE 'Oracle%';\n\n-- Shows full version including patch level\nSELECT version, version_full FROM v$instance;<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code># Confirms patch is listed in OPatch inventory\n$ORACLE_HOME\/OPatch\/opatch lsinventory | grep -E \"Patch|Oracle Database\"<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h4 class=\"wp-block-heading\">6.2 \u2014 Verify datapatch Applied Successfully in the Database<\/h4>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\"><strong>Why?<\/strong> Even if datapatch appeared to succeed on the command line, verify it inside the database. <code>dba_registry_sqlpatch<\/code> is the authoritative record of what datapatch has applied.<\/p>\n<\/blockquote>\n\n\n\n<pre class=\"wp-block-code\"><code>set linesize 200\nset pagesize 100\ncol patch_id      for 9999999999\ncol patch_uid     for 9999999999\ncol version       for a15\ncol status        for a15\ncol description   for a55\ncol action_time   for a25\n\n-- Shows all patches applied by datapatch and their status\nSELECT patch_id, patch_uid, version, status, description, action_time\nFROM   dba_registry_sqlpatch\nORDER BY action_time DESC;<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>What to look for:<\/strong> Your patch number must appear with <code>SUCCESS<\/code> in the <code>status<\/code> column.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h4 class=\"wp-block-heading\">6.3 \u2014 Check Database is Open and Healthy<\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code>set linesize 150\nset pagesize 50\ncol name           for a12\ncol db_unique_name for a20\ncol open_mode      for a15\ncol log_mode       for a15\ncol instance_name  for a15\ncol status         for a12\ncol host_name      for a30\n\nSELECT name, db_unique_name, open_mode, log_mode\nFROM   v$database;\n\nSELECT instance_name, version_full, host_name, status\nFROM   v$instance;<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h4 class=\"wp-block-heading\">6.4 \u2014 Check All Datafiles Are Online<\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code>set linesize 200\nset pagesize 100\ncol file#           for 999\ncol tablespace_name for a25\ncol status          for a12\ncol name            for a70\n\nSELECT file#, tablespace_name, status, name\nFROM   v$datafile\nORDER BY file#;<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>What to look for:<\/strong> All files must show <code>ONLINE<\/code>.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h4 class=\"wp-block-heading\">6.5 \u2014 Check for INVALID Objects After Patching<\/h4>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\"><strong>Why?<\/strong> Patching sometimes invalidates PL\/SQL objects that reference changed packages or types. datapatch recompiles most of them automatically, but some may remain invalid. These must be recompiled before application teams reconnect.<\/p>\n<\/blockquote>\n\n\n\n<pre class=\"wp-block-code\"><code>set linesize 180\nset pagesize 100\ncol owner       for a20\ncol object_name for a45\ncol object_type for a25\ncol status      for a10\n\n-- Check for any invalid objects\nSELECT owner, object_name, object_type, status\nFROM   dba_objects\nWHERE  status = 'INVALID'\nORDER BY owner, object_type, object_name;\n\n-- Count\nSELECT COUNT(*) post_patch_invalid_count\nFROM   dba_objects\nWHERE  status = 'INVALID';<\/code><\/pre>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">\u26a0\ufe0f <strong>IMPORTANT:<\/strong> If invalid count is higher than your pre-patch baseline recorded in Section 4.9, run <code>utlrp.sql<\/code> to recompile:<\/p>\n<\/blockquote>\n\n\n\n<pre class=\"wp-block-code\"><code>-- Recompile all invalid objects\n@?\/rdbms\/admin\/utlrp.sql\n\n-- Re-verify\nSELECT COUNT(*) FROM dba_objects WHERE status = 'INVALID';<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h4 class=\"wp-block-heading\">6.6 \u2014 Verify All Components Are VALID<\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code>set linesize 200\nset pagesize 100\ncol comp_name for a50\ncol version   for a15\ncol status    for a12\n\nSELECT comp_name, version, status\nFROM   dba_registry\nORDER BY comp_name;<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>What to look for:<\/strong> Every component must show <code>VALID<\/code>. Compare versions against pre-patch baseline \u2014 they should now show the new patched version numbers.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h4 class=\"wp-block-heading\">6.7 \u2014 Check Alert Log for Post-Patch Errors<\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code># Scan alert log for any errors since patching started\ntail -300 \/u01\/app\/oracle\/diag\/rdbms\/orcl\/ORCL\/trace\/alert_ORCL.log \\\n     | grep -E \"ORA-|Error|WARNING|CORRUPTED|FAILED\"\n\n# Convention B:\ntail -300 \/oracle\/diag\/rdbms\/orcl\/ORCL\/trace\/alert_ORCL.log \\\n     | grep -E \"ORA-|Error|WARNING|CORRUPTED|FAILED\"<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h4 class=\"wp-block-heading\">6.8 \u2014 Verify Listener is Running and Database is Registered<\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code># Confirm listener is up\nlsnrctl status\n\n# Test actual TNS connection end-to-end\nsqlplus system\/Oracle_123@localhost:1521\/ORCL<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h4 class=\"wp-block-heading\">6.9 \u2014 Record Post-Patch Inventory<\/h4>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\"><strong>Why?<\/strong> Save the post-patch OPatch inventory to a file. This is your evidence for change management, audit, and future reference when someone asks &#8220;what patch level is this database on?&#8221;<\/p>\n<\/blockquote>\n\n\n\n<pre class=\"wp-block-code\"><code># Save post-patch inventory to file\n$ORACLE_HOME\/OPatch\/opatch lsinventory &gt; \/tmp\/post_patch_inventory_$(date +%Y%m%d).txt\n\n# View it\ncat \/tmp\/post_patch_inventory_$(date +%Y%m%d).txt\n\n# Compare with pre-patch baseline\ndiff \/tmp\/pre_patch_inventory_$(date +%Y%m%d).txt \\\n     \/tmp\/post_patch_inventory_$(date +%Y%m%d).txt<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">7. Patch Rollback Procedure<\/h3>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\"><strong>When to use this?<\/strong> If the patch causes unexpected issues and you need to return to the pre-patch state. OPatch rollback reverses the binary changes. datapatch rollback reverses the dictionary changes.<\/p>\n<\/blockquote>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">\u26a0\ufe0f <strong>IMPORTANT:<\/strong> Rollback must be done in reverse order \u2014 datapatch rollback first (while DB is open), then OPatch rollback (while DB is down).<\/p>\n<\/blockquote>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h4 class=\"wp-block-heading\">7.1 \u2014 Run datapatch Rollback (Database Must Be Open)<\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code>su - oracle\n\n# Rollback the patch at SQL\/dictionary level first\ncd $ORACLE_HOME\/OPatch\n.\/datapatch -verbose -rollback &lt;PATCHNUM&gt;<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h4 class=\"wp-block-heading\">7.2 \u2014 Shut Down Database and Listener<\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code>su - oracle\n\nsqlplus \/ as sysdba<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>SHUTDOWN IMMEDIATE;\nEXIT;<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>lsnrctl stop<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h4 class=\"wp-block-heading\">7.3 \u2014 Rollback Patch Using OPatch<\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code>su - oracle\n\n# Roll back the patch binary changes\n$ORACLE_HOME\/OPatch\/opatch rollback -id &lt;PATCHNUM&gt; -silent \\\n    -oh $ORACLE_HOME<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Expected output:<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>OPatch succeeded.<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h4 class=\"wp-block-heading\">7.4 \u2014 Start Database and Verify Rollback<\/h4>\n\n\n\n<pre class=\"wp-block-code\"><code>su - oracle\nsqlplus \/ as sysdba<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>STARTUP;\nSELECT banner FROM v$version;\n\n-- Confirm patch is no longer in registry\nSELECT patch_id, status FROM dba_registry_sqlpatch ORDER BY action_time DESC;\nEXIT;<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code># Confirm patch is no longer in OPatch inventory\n$ORACLE_HOME\/OPatch\/opatch lsinventory | grep &lt;PATCHNUM&gt;\n# Should return no output (patch is gone)<\/code><\/pre>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<h3 class=\"wp-block-heading\">8. Quick Reference Card<\/h3>\n\n\n\n<figure class=\"wp-block-table has-small-font-size\"><table><thead><tr><th>Task<\/th><th>Command<\/th><\/tr><\/thead><tbody><tr><td>Check current version<\/td><td><code>SELECT version_full FROM v$instance;<\/code><\/td><\/tr><tr><td>Check installed patches<\/td><td><code>opatch lsinventory<\/code><\/td><\/tr><tr><td>Check OPatch version<\/td><td><code>opatch version<\/code><\/td><\/tr><tr><td>Backup OPatch<\/td><td><code>mv $ORACLE_HOME\/OPatch $ORACLE_HOME\/OPatch_backup_$(date +%Y%m%d)<\/code><\/td><\/tr><tr><td>Upgrade OPatch<\/td><td><code>unzip p6880880_*.zip -d $ORACLE_HOME<\/code><\/td><\/tr><tr><td>Run prereq check<\/td><td><code>opatch prereq CheckConflictAgainstOHWithDetail -ph &lt;PATCHDIR&gt;<\/code><\/td><\/tr><tr><td>Shut down database<\/td><td><code>SHUTDOWN IMMEDIATE;<\/code><\/td><\/tr><tr><td>Stop listener<\/td><td><code>lsnrctl stop<\/code><\/td><\/tr><tr><td>Apply patch<\/td><td><code>opatch apply -silent -oh $ORACLE_HOME<\/code><\/td><\/tr><tr><td>Start database<\/td><td><code>STARTUP;<\/code><\/td><\/tr><tr><td>Start listener<\/td><td><code>lsnrctl start<\/code><\/td><\/tr><tr><td>Run datapatch<\/td><td><code>.\/datapatch -verbose<\/code><\/td><\/tr><tr><td>Check datapatch result<\/td><td><code>SELECT patch_id,status FROM dba_registry_sqlpatch;<\/code><\/td><\/tr><tr><td>Check invalid objects<\/td><td><code>SELECT count(*) FROM dba_objects WHERE status='INVALID';<\/code><\/td><\/tr><tr><td>Recompile invalids<\/td><td><code>@?\/rdbms\/admin\/utlrp.sql<\/code><\/td><\/tr><tr><td>Check components<\/td><td><code>SELECT comp_name,status FROM dba_registry;<\/code><\/td><\/tr><tr><td>Save patch inventory<\/td><td><code>opatch lsinventory &gt; \/tmp\/post_patch_$(date +%Y%m%d).txt<\/code><\/td><\/tr><tr><td>Rollback datapatch<\/td><td><code>.\/datapatch -verbose -rollback &lt;PATCHNUM&gt;<\/code><\/td><\/tr><tr><td>Rollback OPatch<\/td><td><code>opatch rollback -id &lt;PATCHNUM&gt; -silent<\/code><\/td><\/tr><tr><td>MOS Patch Advisory<\/td><td>Doc ID 2694520.1<\/td><\/tr><tr><td>MOS OPatch Download<\/td><td>Doc ID 6880880.1<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p class=\"wp-block-paragraph\">This SOP covers everything you need to patch Oracle Database 19c on a standalone Linux server without referring to any other source. Always read the patch README, never skip datapatch, and record your pre and post patch inventory for every patching activity.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>A complete production-ready SOP for patching Oracle Database 19c on a standalone Linux server. Covers patch identification, download, pre-patch checks, OPatch upgrade, patch apply, datapatch execution, and full post-patch validation \u2014 with real commands, expected outputs, and consultant-level notes for both standard OFA and enterprise custom path conventions. 1. Document Info Item Detail Oracle Version [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":5778,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"googlesitekit_rrm_CAowu461DA:productID":"","footnotes":""},"categories":[1534],"tags":[],"class_list":["post-5751","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-oracle-sop"],"_links":{"self":[{"href":"https:\/\/w3buddy.com\/blog\/wp-json\/wp\/v2\/posts\/5751","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/w3buddy.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/w3buddy.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/w3buddy.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/w3buddy.com\/blog\/wp-json\/wp\/v2\/comments?post=5751"}],"version-history":[{"count":3,"href":"https:\/\/w3buddy.com\/blog\/wp-json\/wp\/v2\/posts\/5751\/revisions"}],"predecessor-version":[{"id":5819,"href":"https:\/\/w3buddy.com\/blog\/wp-json\/wp\/v2\/posts\/5751\/revisions\/5819"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/w3buddy.com\/blog\/wp-json\/wp\/v2\/media\/5778"}],"wp:attachment":[{"href":"https:\/\/w3buddy.com\/blog\/wp-json\/wp\/v2\/media?parent=5751"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/w3buddy.com\/blog\/wp-json\/wp\/v2\/categories?post=5751"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/w3buddy.com\/blog\/wp-json\/wp\/v2\/tags?post=5751"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}