From e2cbad2a4c5cb9ef9f02908b79cf99884a32a342 Mon Sep 17 00:00:00 2001 From: Jeremy Perkins Date: Wed, 25 Mar 2026 22:31:43 -0500 Subject: [PATCH 1/5] Delete _drafts/2026-03-25-oracle-application-containers-19c-app-root-pdbs.md --- ...pplication-containers-19c-app-root-pdbs.md | 168 ------------------ 1 file changed, 168 deletions(-) delete mode 100644 _drafts/2026-03-25-oracle-application-containers-19c-app-root-pdbs.md diff --git a/_drafts/2026-03-25-oracle-application-containers-19c-app-root-pdbs.md b/_drafts/2026-03-25-oracle-application-containers-19c-app-root-pdbs.md deleted file mode 100644 index 40bd997..0000000 --- a/_drafts/2026-03-25-oracle-application-containers-19c-app-root-pdbs.md +++ /dev/null @@ -1,168 +0,0 @@ ---- -layout: post -title: "Oracle Application Containers 19c: Creating and Managing App Roots and PDBs" -date: 2026-03-25 -author: Jeremy Perkins -categories: oracle multitenant pdb ---- - -Oracle Application Containers are one of those features that sound simple on paper but are often misunderstood in practice. - -If you are managing multiple PDBs that support the same application, keeping everything aligned becomes a problem: -- schema drift -- inconsistent deployments -- manual updates across environments - -Application Containers solve this by allowing you to define the application once and propagate changes across PDBs. - -This post walks through a simple working structure to create and manage: -- Application Root -- Application Seed -- Application PDB - ---- - -## Creating the Application Root - -The application root is where the application definition lives. - -```sql -CREATE PLUGGABLE DATABASE app_root AS APPLICATION CONTAINER; -``` - -Open the new container: - -```sql -ALTER PLUGGABLE DATABASE app_root OPEN; -``` - -Switch into the container: - -```sql -ALTER SESSION SET CONTAINER=app_root; -``` - ---- - -## Creating the Application Seed - -The application seed acts as a template for all application PDBs. - -```sql -CREATE PLUGGABLE DATABASE app_seed FROM app_root AS SEED; -``` - -Open the seed: - -```sql -ALTER PLUGGABLE DATABASE app_seed OPEN; -``` - ---- - -## Creating an Application PDB - -Now create a PDB from the application seed. - -```sql -CREATE PLUGGABLE DATABASE app_pdb1 FROM app_seed; -``` - -Open it: - -```sql -ALTER PLUGGABLE DATABASE app_pdb1 OPEN; -``` - ---- - -## Installing the Application - -All application objects must be created in the application root. - -```sql -ALTER SESSION SET CONTAINER=app_root; - -ALTER PLUGGABLE DATABASE app_root -BEGIN INSTALL 'my_app' VERSION '1.0'; - -CREATE TABLE app_table ( - id NUMBER, - name VARCHAR2(100) -); - -ALTER PLUGGABLE DATABASE app_root -END INSTALL; -``` - ---- - -## Synchronizing the Application PDB - -The PDB will not automatically receive the application objects. - -You must run SYNC: - -```sql -ALTER SESSION SET CONTAINER=app_pdb1; - -ALTER PLUGGABLE DATABASE app_pdb1 SYNC; -``` - ---- - -## Verifying the Application - -Check application registration: - -```sql -SELECT app_name, app_version, app_status -FROM dba_applications; -``` - -Confirm container context: - -```sql -SELECT sys_context('USERENV','CON_NAME') FROM dual; -``` - -Verify objects exist in the PDB: - -```sql -SELECT table_name -FROM user_tables -WHERE table_name = 'APP_TABLE'; -``` - ---- - -## Important Behavior Notes - -A few things that are not obvious until you work with this: - -- The application PDB will NOT have objects until SYNC is executed -- PDBs can run different versions of the same application -- All application changes must originate in the application root -- Creating objects directly inside the PDB breaks consistency - ---- - -## Why This Matters - -Application Containers are designed for: -- SaaS environments -- multi-tenant deployments -- controlled application versioning - -Instead of managing each PDB independently, you define once and propagate. - ---- - -## Final Thought - -This is one of those features that becomes more valuable as your environment scales. - -On a single PDB system, it may feel unnecessary. -On a multi-PDB system, it becomes essential. - -Like most Oracle features — simple concept, but execution matters. From c4e6e40b3f522beedbfca21fb7ad0df89a85e5b0 Mon Sep 17 00:00:00 2001 From: Jeremy Perkins Date: Wed, 25 Mar 2026 22:41:24 -0500 Subject: [PATCH 2/5] Update 2026-03-25-oracle-application-containers-19c-app-root-pdbs.md --- ...pplication-containers-19c-app-root-pdbs.md | 25 +++++++++++-------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/_posts/2026-03-25-oracle-application-containers-19c-app-root-pdbs.md b/_posts/2026-03-25-oracle-application-containers-19c-app-root-pdbs.md index f816148..b7f0bff 100644 --- a/_posts/2026-03-25-oracle-application-containers-19c-app-root-pdbs.md +++ b/_posts/2026-03-25-oracle-application-containers-19c-app-root-pdbs.md @@ -7,7 +7,6 @@ author: Jeremy Perkins categories: oracle multitenant pdb robots: noindex hidden: true -#published: false --- Oracle Application Containers are one of those features that sound simple on paper but are often misunderstood in practice. @@ -53,6 +52,8 @@ ALTER SESSION SET CONTAINER=app_root; The application seed acts as a template for all application PDBs. ```sql +ALTER SESSION SET CONTAINER=app_root; + CREATE PLUGGABLE DATABASE app_seed FROM app_root AS SEED; ``` @@ -69,6 +70,8 @@ ALTER PLUGGABLE DATABASE app_seed OPEN; Now create a PDB from the application seed. ```sql +ALTER SESSION SET CONTAINER=app_root; + CREATE PLUGGABLE DATABASE app_pdb1 FROM app_seed; ``` @@ -99,13 +102,18 @@ ALTER PLUGGABLE DATABASE app_root END INSTALL; ``` +Check application registration: + +```sql +SELECT app_name, app_version, app_status +FROM dba_applications; +``` + --- ## Synchronizing the Application PDB -The PDB will not automatically receive the application objects. - -You must run SYNC: +The application PDB will not automatically receive application objects until SYNC is executed. ```sql ALTER SESSION SET CONTAINER=app_pdb1; @@ -113,17 +121,12 @@ ALTER SESSION SET CONTAINER=app_pdb1; ALTER PLUGGABLE DATABASE app_pdb1 SYNC; ``` +Without SYNC, the PDB will remain at its previous application version. + --- ## Verifying the Application -Check application registration: - -```sql -SELECT app_name, app_version, app_status -FROM dba_applications; -``` - Confirm container context: ```sql From a516e5d43cd391f91718ecb1f15ab1fab9284d01 Mon Sep 17 00:00:00 2001 From: Jeremy Perkins Date: Sun, 29 Mar 2026 08:29:55 -0500 Subject: [PATCH 3/5] Create TEMPLATE-ace-blog.md --- _drafts/TEMPLATE-ace-blog.md | 86 ++++++++++++++++++++++++++++++++++++ 1 file changed, 86 insertions(+) create mode 100644 _drafts/TEMPLATE-ace-blog.md diff --git a/_drafts/TEMPLATE-ace-blog.md b/_drafts/TEMPLATE-ace-blog.md new file mode 100644 index 0000000..2a42eb1 --- /dev/null +++ b/_drafts/TEMPLATE-ace-blog.md @@ -0,0 +1,86 @@ +--- +layout: post +filename: TEMPLATE-ace-blog.md +title: "DRAFT - " +date: 2099-01-01 +#date: YYYY-MM-DD +author: Jeremy Perkins +categories: oracle +robots: noindex +hidden: true +#published: false +--- + +Opening paragraph: +Describe a REAL problem you have seen or solved. Keep it practical, not theoretical. + +Second paragraph: +Explain why this matters in real environments (performance, risk, complexity, etc). + +--- + +## What This Solves + +- Real operational problem #1 +- Real operational problem #2 +- Real operational problem #3 + +--- + +## How It Works (Keep This Short) + +Explain only what is necessary to understand the implementation. + +Avoid documentation-style explanation. Focus on how it behaves in real environments. + +--- + +## Implementation + +Use real commands. Keep them clean and runnable. + +```sql +-- Example SQL or commands +``` + +If needed, break into logical sections, but keep the flow natural. + +--- + +## Validation + +Always prove that it worked. + +```sql +-- validation queries +``` + +Explain what the output should show and why it matters. + +--- + +## What Most DBAs Miss + +This is the most important section. + +- Behavior that is not obvious +- Common mistakes +- What Oracle documentation does not clearly explain +- Situations where this breaks + +--- + +## Real-World Notes + +- When to use this +- When NOT to use this +- Performance or operational considerations +- Trade-offs + +--- + +## Final Thought + +Short, direct, experience-based conclusion. + +No fluff. No marketing tone. From 0c61b70e7a574dcd1e06016dd8d0ec09dcb363ec Mon Sep 17 00:00:00 2001 From: Jeremy Perkins Date: Sun, 29 Mar 2026 08:31:44 -0500 Subject: [PATCH 4/5] Update TEMPLATE-ace-blog.md --- _drafts/TEMPLATE-ace-blog.md | 46 +++++++++++++----------------------- 1 file changed, 16 insertions(+), 30 deletions(-) diff --git a/_drafts/TEMPLATE-ace-blog.md b/_drafts/TEMPLATE-ace-blog.md index 2a42eb1..078c2a9 100644 --- a/_drafts/TEMPLATE-ace-blog.md +++ b/_drafts/TEMPLATE-ace-blog.md @@ -11,76 +11,62 @@ hidden: true #published: false --- -Opening paragraph: -Describe a REAL problem you have seen or solved. Keep it practical, not theoretical. +Opening paragraph describing a real problem seen in an actual environment. -Second paragraph: -Explain why this matters in real environments (performance, risk, complexity, etc). +Second paragraph explaining why this matters in real-world operations. --- ## What This Solves -- Real operational problem #1 -- Real operational problem #2 -- Real operational problem #3 +- Problem #1 +- Problem #2 +- Problem #3 --- -## How It Works (Keep This Short) +## How It Works -Explain only what is necessary to understand the implementation. - -Avoid documentation-style explanation. Focus on how it behaves in real environments. +Short explanation of how the feature or approach behaves in practice. --- ## Implementation -Use real commands. Keep them clean and runnable. - ```sql --- Example SQL or commands +-- core commands go here ``` -If needed, break into logical sections, but keep the flow natural. - --- ## Validation -Always prove that it worked. - ```sql --- validation queries +-- validation queries go here ``` -Explain what the output should show and why it matters. +Expected results should confirm behavior or successful execution. --- ## What Most DBAs Miss -This is the most important section. - -- Behavior that is not obvious +- Non-obvious behavior - Common mistakes -- What Oracle documentation does not clearly explain -- Situations where this breaks +- Where this breaks +- What documentation does not clearly explain --- ## Real-World Notes - When to use this -- When NOT to use this -- Performance or operational considerations +- When not to use this +- Operational considerations - Trade-offs --- ## Final Thought -Short, direct, experience-based conclusion. - -No fluff. No marketing tone. +Short, direct conclusion based on real experience. From d67147f4767e1f0bc071ee095da665d308e91197 Mon Sep 17 00:00:00 2001 From: Jeremy Perkins Date: Sun, 29 Mar 2026 09:40:23 -0500 Subject: [PATCH 5/5] Delete _posts/2026-03-25-oracle-application-containers-19c-app-root-pdbs.md --- ...pplication-containers-19c-app-root-pdbs.md | 175 ------------------ 1 file changed, 175 deletions(-) delete mode 100644 _posts/2026-03-25-oracle-application-containers-19c-app-root-pdbs.md diff --git a/_posts/2026-03-25-oracle-application-containers-19c-app-root-pdbs.md b/_posts/2026-03-25-oracle-application-containers-19c-app-root-pdbs.md deleted file mode 100644 index b7f0bff..0000000 --- a/_posts/2026-03-25-oracle-application-containers-19c-app-root-pdbs.md +++ /dev/null @@ -1,175 +0,0 @@ ---- -layout: post -filename: 2026-03-25-oracle-application-containers-19c-app-root-pdbs.md -title: "Oracle Application Containers 19c: Creating and Managing App Roots and PDBs" -date: 2026-03-25 -author: Jeremy Perkins -categories: oracle multitenant pdb -robots: noindex -hidden: true ---- - -Oracle Application Containers are one of those features that sound simple on paper but are often misunderstood in practice. - -If you are managing multiple PDBs that support the same application, keeping everything aligned becomes a problem: -- schema drift -- inconsistent deployments -- manual updates across environments - -Application Containers solve this by allowing you to define the application once and propagate changes across PDBs. - -This post walks through a simple working structure to create and manage: -- Application Root -- Application Seed -- Application PDB - ---- - -## Creating the Application Root - -The application root is where the application definition lives. - -```sql -CREATE PLUGGABLE DATABASE app_root AS APPLICATION CONTAINER; -``` - -Open the new container: - -```sql -ALTER PLUGGABLE DATABASE app_root OPEN; -``` - -Switch into the container: - -```sql -ALTER SESSION SET CONTAINER=app_root; -``` - ---- - -## Creating the Application Seed - -The application seed acts as a template for all application PDBs. - -```sql -ALTER SESSION SET CONTAINER=app_root; - -CREATE PLUGGABLE DATABASE app_seed FROM app_root AS SEED; -``` - -Open the seed: - -```sql -ALTER PLUGGABLE DATABASE app_seed OPEN; -``` - ---- - -## Creating an Application PDB - -Now create a PDB from the application seed. - -```sql -ALTER SESSION SET CONTAINER=app_root; - -CREATE PLUGGABLE DATABASE app_pdb1 FROM app_seed; -``` - -Open it: - -```sql -ALTER PLUGGABLE DATABASE app_pdb1 OPEN; -``` - ---- - -## Installing the Application - -All application objects must be created in the application root. - -```sql -ALTER SESSION SET CONTAINER=app_root; - -ALTER PLUGGABLE DATABASE app_root -BEGIN INSTALL 'my_app' VERSION '1.0'; - -CREATE TABLE app_table ( - id NUMBER, - name VARCHAR2(100) -); - -ALTER PLUGGABLE DATABASE app_root -END INSTALL; -``` - -Check application registration: - -```sql -SELECT app_name, app_version, app_status -FROM dba_applications; -``` - ---- - -## Synchronizing the Application PDB - -The application PDB will not automatically receive application objects until SYNC is executed. - -```sql -ALTER SESSION SET CONTAINER=app_pdb1; - -ALTER PLUGGABLE DATABASE app_pdb1 SYNC; -``` - -Without SYNC, the PDB will remain at its previous application version. - ---- - -## Verifying the Application - -Confirm container context: - -```sql -SELECT sys_context('USERENV','CON_NAME') FROM dual; -``` - -Verify objects exist in the PDB: - -```sql -SELECT table_name -FROM user_tables -WHERE table_name = 'APP_TABLE'; -``` - ---- - -## Important Behavior Notes - -A few things that are not obvious until you work with this: - -- The application PDB will NOT have objects until SYNC is executed -- PDBs can run different versions of the same application -- All application changes must originate in the application root -- Creating objects directly inside the PDB breaks consistency - ---- - -## Why This Matters - -Application Containers are designed for: -- SaaS environments -- multi-tenant deployments -- controlled application versioning - -Instead of managing each PDB independently, you define once and propagate. - ---- - -## Final Thought - -This is one of those features that becomes more valuable as your environment scales. - -On a single PDB system, it may feel unnecessary. -On a multi-PDB system, it becomes essential. - -Like most Oracle features — simple concept, but execution matters.