{"id":2317,"date":"2026-02-04T23:07:02","date_gmt":"2026-02-04T21:07:02","guid":{"rendered":"https:\/\/www.ludovicocaldara.net\/dba\/?p=2317"},"modified":"2026-02-04T23:09:06","modified_gmt":"2026-02-04T21:09:06","slug":"dg26ai-rolling-upgrade-ac","status":"publish","type":"post","link":"https:\/\/www.ludovicocaldara.net\/dba\/dg26ai-rolling-upgrade-ac\/","title":{"rendered":"Data Guard 26ai &#8211; #7: Rolling Upgrade with Application Continuity"},"content":{"rendered":"<p><a href=\"https:\/\/www.ludovicocaldara.net\/dba\/dg-26ai-series\/\">This post is part of a blog series.<\/a><\/p>\n<p>One of my favorite Oracle Active Data Guard features is<a href=\"https:\/\/docs.oracle.com\/en\/database\/oracle\/oracle-database\/26\/sbydb\/using-DBMS_ROLLING-to-perform-rolling-upgrade.html#GUID-70C09F5B-90BE-4C8C-96A5-45A52E05D380\"> Rolling Upgrades<\/a>. Introduced in 12c, Rolling Upgrades use the <a href=\"https:\/\/docs.oracle.com\/en\/database\/oracle\/oracle-database\/26\/arpls\/DBMS_ROLLING.html#GUID-097F1B39-E623-43B5-BA30-DF377BFE05CF\">DBMS_ROLLING<\/a> package to keep downtime during upgrades to a minimum: your apps stay connected almost the entire time.<\/p>\n<p>Here\u2019s how it works in real life: when it\u2019s time for a major upgrade or maintenance, you convert your physical standby database to a transient logical standby (so it uses SQL apply instead of redo apply).<\/p>\n<p><a href=\"https:\/\/www.ludovicocaldara.net\/dba\/wp-content\/uploads\/2026\/01\/dg26ai-rolling-redo-apply.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-large wp-image-2319\" src=\"https:\/\/www.ludovicocaldara.net\/dba\/wp-content\/uploads\/2026\/01\/dg26ai-rolling-redo-apply-1024x745.png\" alt=\"Data Guard configuration using physical standby database\" width=\"584\" height=\"425\" srcset=\"https:\/\/www.ludovicocaldara.net\/dba\/wp-content\/uploads\/2026\/01\/dg26ai-rolling-redo-apply-1024x745.png 1024w, https:\/\/www.ludovicocaldara.net\/dba\/wp-content\/uploads\/2026\/01\/dg26ai-rolling-redo-apply-300x218.png 300w, https:\/\/www.ludovicocaldara.net\/dba\/wp-content\/uploads\/2026\/01\/dg26ai-rolling-redo-apply-768x559.png 768w, https:\/\/www.ludovicocaldara.net\/dba\/wp-content\/uploads\/2026\/01\/dg26ai-rolling-redo-apply-412x300.png 412w, https:\/\/www.ludovicocaldara.net\/dba\/wp-content\/uploads\/2026\/01\/dg26ai-rolling-redo-apply.png 1294w\" sizes=\"auto, (max-width: 584px) 100vw, 584px\" \/><\/a><\/p>\n<p><a href=\"https:\/\/www.ludovicocaldara.net\/dba\/wp-content\/uploads\/2026\/01\/dg26ai-rolling-sql-apply.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-large wp-image-2322\" src=\"https:\/\/www.ludovicocaldara.net\/dba\/wp-content\/uploads\/2026\/01\/dg26ai-rolling-sql-apply-1024x764.png\" alt=\"Data Guard configuration using logical standby (SQL apply)\" width=\"584\" height=\"436\" srcset=\"https:\/\/www.ludovicocaldara.net\/dba\/wp-content\/uploads\/2026\/01\/dg26ai-rolling-sql-apply-1024x764.png 1024w, https:\/\/www.ludovicocaldara.net\/dba\/wp-content\/uploads\/2026\/01\/dg26ai-rolling-sql-apply-300x224.png 300w, https:\/\/www.ludovicocaldara.net\/dba\/wp-content\/uploads\/2026\/01\/dg26ai-rolling-sql-apply-768x573.png 768w, https:\/\/www.ludovicocaldara.net\/dba\/wp-content\/uploads\/2026\/01\/dg26ai-rolling-sql-apply-402x300.png 402w, https:\/\/www.ludovicocaldara.net\/dba\/wp-content\/uploads\/2026\/01\/dg26ai-rolling-sql-apply.png 1278w\" sizes=\"auto, (max-width: 584px) 100vw, 584px\" \/><\/a><\/p>\n<p>With that done, your standby is open for read\/write. You stop replication, upgrade the standby (say, to 26ai), and then bring it back into sync with the primary.<\/p>\n<p><a href=\"https:\/\/www.ludovicocaldara.net\/dba\/wp-content\/uploads\/2026\/01\/dg26ai-rolling-upgrade.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-2321 size-large\" src=\"https:\/\/www.ludovicocaldara.net\/dba\/wp-content\/uploads\/2026\/01\/dg26ai-rolling-upgrade-1024x772.png\" alt=\"Data Guard with SQL apply aligning a standby that has already been upgraded\" width=\"584\" height=\"440\" srcset=\"https:\/\/www.ludovicocaldara.net\/dba\/wp-content\/uploads\/2026\/01\/dg26ai-rolling-upgrade-1024x772.png 1024w, https:\/\/www.ludovicocaldara.net\/dba\/wp-content\/uploads\/2026\/01\/dg26ai-rolling-upgrade-300x226.png 300w, https:\/\/www.ludovicocaldara.net\/dba\/wp-content\/uploads\/2026\/01\/dg26ai-rolling-upgrade-768x579.png 768w, https:\/\/www.ludovicocaldara.net\/dba\/wp-content\/uploads\/2026\/01\/dg26ai-rolling-upgrade-398x300.png 398w, https:\/\/www.ludovicocaldara.net\/dba\/wp-content\/uploads\/2026\/01\/dg26ai-rolling-upgrade.png 1276w\" sizes=\"auto, (max-width: 584px) 100vw, 584px\" \/><\/a><\/p>\n<p>Once everything\u2019s caught up, you finish with a switchover: the upgraded standby becomes the new primary. Apps stay connected most of the time; actual downtime is basically just the switchover itself. DBMS_ROLLING automates everything except the actual upgrade, which you can handle with AutoUpgrade or Fleet Patching and Provisioning.<\/p>\n<p>If your applications use a proper connection pool, they\u2019ll disconnect and transparently reconnect during the switchover, so your users won\u2019t even notice. But sticky sessions (apps that hold onto DB connections) used to be a problem: connections would break, and apps had to catch exceptions and reconnect, or had to be restarted manually.<\/p>\n<p>Now, with 26ai, everything\u2019s easier. DBMS_ROLLING&#8217;s switchover supports <a href=\"https:\/\/www.oracle.com\/database\/technologies\/appcontinuity\/\">Application Continuity and Transparent Application Continuity<\/a>!<\/p>\n<p><a href=\"https:\/\/www.ludovicocaldara.net\/dba\/wp-content\/uploads\/2026\/01\/dg26ai-rolling-app-continuity.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-2320 size-large\" src=\"https:\/\/www.ludovicocaldara.net\/dba\/wp-content\/uploads\/2026\/01\/dg26ai-rolling-app-continuity-1024x735.png\" alt=\"Applications reconnect with application continuity to the new upgraded database.\" width=\"584\" height=\"419\" srcset=\"https:\/\/www.ludovicocaldara.net\/dba\/wp-content\/uploads\/2026\/01\/dg26ai-rolling-app-continuity-1024x735.png 1024w, https:\/\/www.ludovicocaldara.net\/dba\/wp-content\/uploads\/2026\/01\/dg26ai-rolling-app-continuity-300x215.png 300w, https:\/\/www.ludovicocaldara.net\/dba\/wp-content\/uploads\/2026\/01\/dg26ai-rolling-app-continuity-768x551.png 768w, https:\/\/www.ludovicocaldara.net\/dba\/wp-content\/uploads\/2026\/01\/dg26ai-rolling-app-continuity-418x300.png 418w, https:\/\/www.ludovicocaldara.net\/dba\/wp-content\/uploads\/2026\/01\/dg26ai-rolling-app-continuity.png 1310w\" sizes=\"auto, (max-width: 584px) 100vw, 584px\" \/><\/a><\/p>\n<p>Even sticky-session apps automatically reconnect and pick up where they left off, so transactions flow smoothly. That means that application can start a transaction in 19c and finish it in 26ai! \ud83e\udd2f This is possible because Oracle has backported this feature to 19c (19.30 release update), letting you upgrade from 19c to 26ai with Application Continuity support.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Upgrade Oracle with no downtime: DBMS_ROLLING and Application Continuity keep your apps running smoothly, even during major database upgrades. <a href=\"https:\/\/www.ludovicocaldara.net\/dba\/dg26ai-rolling-upgrade-ac\/\">Continue reading <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[375,334,329],"tags":[],"class_list":["post-2317","post","type-post","status-publish","format-standard","hentry","category-oracle-ai-database-26ai","category-oracle-client-ha","category-oracle-dg"],"aioseo_notices":[],"_links":{"self":[{"href":"https:\/\/www.ludovicocaldara.net\/dba\/wp-json\/wp\/v2\/posts\/2317","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.ludovicocaldara.net\/dba\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.ludovicocaldara.net\/dba\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.ludovicocaldara.net\/dba\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.ludovicocaldara.net\/dba\/wp-json\/wp\/v2\/comments?post=2317"}],"version-history":[{"count":4,"href":"https:\/\/www.ludovicocaldara.net\/dba\/wp-json\/wp\/v2\/posts\/2317\/revisions"}],"predecessor-version":[{"id":2407,"href":"https:\/\/www.ludovicocaldara.net\/dba\/wp-json\/wp\/v2\/posts\/2317\/revisions\/2407"}],"wp:attachment":[{"href":"https:\/\/www.ludovicocaldara.net\/dba\/wp-json\/wp\/v2\/media?parent=2317"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.ludovicocaldara.net\/dba\/wp-json\/wp\/v2\/categories?post=2317"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.ludovicocaldara.net\/dba\/wp-json\/wp\/v2\/tags?post=2317"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}