{"id":4146,"date":"2025-06-08T15:48:49","date_gmt":"2025-06-08T15:48:49","guid":{"rendered":"https:\/\/w3buddy.com\/?post_type=cposts&#038;p=4146"},"modified":"2025-06-08T15:55:04","modified_gmt":"2025-06-08T15:55:04","slug":"oracle-db-patching-key-steps","status":"publish","type":"cposts","link":"https:\/\/w3buddy.com\/blog\/notes\/oracle-dba-d2d-tasks\/oracle-db-patching-key-steps\/","title":{"rendered":"Oracle DB Patching: Key Steps"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">This document outlines the essential steps for Oracle Database patching. It covers pre-checks, patch installation instructions, and post-patching validations. Always refer to the README file included with the patch for patch-specific details.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">1. OS Check with Bit Information (OS Level)<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>-- Check OS version and kernel info\nuname -a                \n\n-- Check OS bit architecture (32\/64-bit)\nisainfo -kv             <\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">2. OS Release Check (OS Level)<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>-- Confirm OS release version\ncat \/etc\/release<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">3. Database Status<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>-- Set line width and page size for better output formatting\nset lines 200 pages 200\n\n-- Format columns for readability\ncol name for a15\ncol db_unique_name for a15\ncol open_mode for a15\ncol log_mode for a15\ncol logins for a15\ncol instance_name for a15\ncol HOST_NAME for a15\n\n-- Set date format for session output\nalter session set nls_date_format='DD\/MM\/YYYY HH24:MI:SS';\n\n-- Query database and instance details\nselect name, db_unique_name, created, open_mode, log_mode, logins, instance_name, database_role, host_name, startup_time \nfrom v$instance, v$database;\n\n-- Show current OS date and time\n!date<span style=\"background-color: initial; font-family: inherit; font-size: 0.8rem; text-align: initial;\">              <\/span><\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">4. Database Registry Status Check<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>-- Format columns for output readability\nCOL COMP_NAME FOR a40;\nCOL VERSION FOR a15;\nCOL STATUS FOR a12;\n\n-- Check database components registry status\nSELECT COMP_NAME, VERSION, STATUS FROM dba_registry;<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">5. Invalid Object Check<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>-- Format columns for better readability\nCOL owner FOR a15;\nCOL object_type FOR a20;\nCOL object_name FOR a20;\n\n-- List invalid objects in the database\nSELECT owner, object_type, object_name, status \nFROM dba_objects \nWHERE status != 'VALID' \nORDER BY owner, object_type;<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">6. Already Applied PSU and Patch Details<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>-- Format columns for patch history output\nCOL ACTION FOR a20;\nCOL VERSION FOR a25;\nCOL BUNDLE_SERIES FOR a15;\nCOL COMMENTS FOR a60;\nCOL ACTION_TIME FOR a30;\n\n-- Retrieve patch and PSU application history\nSELECT ACTION_TIME, ACTION, VERSION, BUNDLE_SERIES, COMMENTS FROM registry$history;<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">7. Checking Opatch Version<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code># Check OPatch version\nopatch version\n\n# If above fails, set OPatch path and check version again\nexport PATH=$ORACLE_HOME\/OPatch:$PATH\nopatch version\n\n# Alternative method: navigate to OPatch directory and check version\ncd $ORACLE_HOME\/OPatch\n.\/opatch version<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">8. Opatch Inventory Check<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code># List applied patches and Oracle inventory\nopatch lsinventory\n\n# If above fails, set OPatch path and retry\nexport PATH=$ORACLE_HOME\/OPatch:$PATH\nopatch lsinventory\n\n# Alternative method: navigate to OPatch directory and list inventory\ncd $ORACLE_HOME\/OPatch\n.\/opatch lsinventory<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">9. Copy Patch to Directory<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code># Extract patch files to the specified directory\nunzip -d &lt;PATCH_TOP_DIR> &lt;downloaded zip>.zip<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">10. Check for Patch Conflicts<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code># Change to patch directory\ncd &lt;PATCH_TOP_DIR>\/&lt;new patch number>\n\n# Verify patch conflicts before applying\nopatch prereq CheckConflictAgainstOHWithDetail -ph .\/\n\n# Expected output:\n# Prereq \"checkConflictAgainstOHWithDetail\" passed.\n\n# Notes:\n# Subset patch conflicts: Proceed; patch auto-rollbacks obsolete patches.\n# Conflicts with applied patch: Stop and contact Oracle Support.<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">11. Pre-Patch Service Checks<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code># Check PMON process running\nps -ef | grep pmon\n\n# Check TNS processes running\nps -ef | grep tns\n\n# Verify listener status\nlsnrctl status &lt;listener><\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">12. Patch Installation Steps<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Pre-Installation Checks<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>-- Set column formats for better readability\nCOL LOGON FOR a22;\nCOL USERNAME FOR a13;\nCOL STATUS FOR a10;\nCOL OSUSER FOR a12;\nCOL PROCESS FOR a10;\nCOL MACHINE FOR a25;\nCOL SPID FOR a10;\nCOL PROGRAM FOR a35;\n\n-- Check active sessions before shutdown\nSELECT TO_CHAR(a.logon_time,'DD-MON-YYYY HH24:MI:SS') logon, a.USERNAME, a.SID, a.SERIAL#, a.status,\n       a.OSUSER, b.spid, a.PROCESS, a.MACHINE, a.PROGRAM, a.SQL_HASH_VALUE, a.sql_id, a.SQL_CHILD_NUMBER sql_child\nFROM v$session a, v$process b\nWHERE a.paddr = b.addr AND a.status = 'ACTIVE';\n\n-- Switch logfile before shutdown\nALTER SYSTEM SWITCH LOGFILE;\n\n-- Shutdown DB safely\nshutdown immediate;\n\n-- Stop listener\nlsnrctl stop &lt;listener>;\n\n-- Verify no Oracle background services running\nwhich fuser;\n&lt;path to fuser> \/$ORACLE_HOME\/bin\/oracle;\n\n-- Backup Oracle Home before patching\ncd \/path\/to\/oracle_home;\ntar -cvf \/path\/to\/backup\/backup.tar .<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Installation<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>cd &lt;PATCH_TOP_DIR>\/&lt;patch number>\n\nopatch apply               -- Apply patch\n\nopatch lsinventory         -- Verify patch applied successfully<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Restart Oracle Services<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code><code># Start listener and database after patching\nlsnrctl start &lt;listener>\nsqlplus \/ as sysdba\nstartup<\/code><\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Rollback (if needed)<\/strong><\/p>\n\n\n\n<pre class=\"wp-block-code\"><code># Rollback patch if issues occur\nopatch rollback -id &lt;patch number>\n\n# Verify rollback successful\nopatch lsinventory<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\">13. Post-Patch Checks<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code># Connect to SQL*Plus without login\nsqlplus \/nolog\n\n# Connect as SYSDBA\nCONNECT \/ as sysdba\n\n# Start the database after patching\nstartup\n\n# Change directory to OPatch folder\ncd $ORACLE_HOME\/OPatch\n\n# Run datapatch to apply SQL patches post-binary patching\n.\/datapatch -verbose\n\n# Revalidate invalid objects in the database\nSQL> @?\/rdbms\/admin\/utlprp.sql 0<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Important Notes &amp; Tips<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Always take a full backup of your database and Oracle Home before starting the patch process.<\/li>\n\n\n\n<li>Test patches on a non-production environment first to avoid unexpected downtime.<\/li>\n\n\n\n<li>Check for active sessions before shutdown to avoid interrupting users unexpectedly.<\/li>\n\n\n\n<li>Use <code>opatch prereq<\/code> to detect conflicts before applying patches; resolve issues before proceeding.<\/li>\n\n\n\n<li>Ensure listener and database are properly stopped before patching.<\/li>\n\n\n\n<li>Monitor logs (<code>opatch logs<\/code>, database alert logs) during patching for errors.<\/li>\n\n\n\n<li>Follow Oracle Support and README patch instructions precisely for your Oracle version and platform.<\/li>\n\n\n\n<li>Use the rollback command if patching fails, but investigate the root cause before retrying.<\/li>\n\n\n\n<li>Document patching steps and results for audit and troubleshooting.<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>This document outlines the essential steps for Oracle Database patching. It covers pre-checks, patch installation instructions, and post-patching validations. Always refer to the README file included with the patch for patch-specific details. 1. OS Check with Bit Information (OS Level) 2. OS Release Check (OS Level) 3. Database Status 4. Database Registry Status Check 5. [&hellip;]<\/p>\n","protected":false},"template":"","meta":{"googlesitekit_rrm_CAowu461DA:productID":""},"categories":[952,984],"class_list":["post-4146","cposts","type-cposts","status-publish","hentry","category-notes","category-oracle-dba-d2d-tasks"],"_links":{"self":[{"href":"https:\/\/w3buddy.com\/blog\/wp-json\/wp\/v2\/cposts\/4146","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/w3buddy.com\/blog\/wp-json\/wp\/v2\/cposts"}],"about":[{"href":"https:\/\/w3buddy.com\/blog\/wp-json\/wp\/v2\/types\/cposts"}],"wp:attachment":[{"href":"https:\/\/w3buddy.com\/blog\/wp-json\/wp\/v2\/media?parent=4146"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/w3buddy.com\/blog\/wp-json\/wp\/v2\/categories?post=4146"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}