+ + + + + +
+ + +
+
+

Assumptions & Notes

+
    +
  • Pricing assumptions: ECPUs, BYOL, ATP, list price. No discounts/commits included.
  • +
  • Portability is treated as a single criterion (not split). Within Serverless, joining/leaving an Elastic Pool is click-based; moving to Dedicated Exadata is typically a migration exercise.
  • +
  • Scores are relative (1–5); importance (0–100) can be set independently per criterion to model stakeholder priorities.
  • +
  • For a concrete cost estimate, use the official OCI Cost Estimator.
  • +
+
+
+

When to Choose Each Option

+ +
+

Business driver comparison across the five deployment flavors

+ + +
+
+
+ ☁️ + Serverless + Oracle-managed shared infrastructure +
+
+
+ + Serverless + Standalone pay-per-use +
+
+ + Elastic Pool + Pooled compute, shared infra +
+
+ + Ded. Elastic Pool + Pooled compute+storage, co-located +
+
+
+
+
+ 🏗️ + Dedicated + Customer-exclusive Exadata infrastructure +
+
+
+ + ADB Dedicated + Standalone Exadata +
+
+ + EP (Dedicated) + Elastic Pool on Exadata +
+
+
+
+ +
+
+ + +
+
+

Scenario Analysis

+ +
+

When each flavor makes the most business sense

+
+
+ + +
+
+
+
+
+

Decision Matrix

+ +
+

Set importance (0–100) per criterion to find your best fit

+
+
+
+ + +
+ +
+
+
+ How to use this matrix +
Each criterion has an Importance slider (0–100) representing how critical that factor is for your scenario — these are independent, not percentages. + Each flavor receives a Score (1–5) for how well it meets that criterion. You can click the score dots to adjust them. + The weighted result is calculated by normalizing each importance against the total, then multiplying by the score: + Weighted Score = Σ (importancei / Σimportances) × scorei
+
+ + +
+ + Feature & Capability Matrix + Features with differences across flavors or versions — check "Req." to filter + Updated: Mar/2026 + +
+
+
+
+ +
+
+
+
+
+
+
+
+
Flavor Radar — Scores per Criterion
+ +
+
+
Importance Distribution
+ +
+
+
+
+
+
+
+ + +
+ + +
+
+ +
+
Autonomous AI Database — Cost Comparison
+
BYOL · Transaction Processing · List Price
+
+
+
+
Estimated Monthly Cost
+
$0
+ +
+
+ + +
+
+
+ + Database Configuration +
+
+ Utilization + 744 hrs/month +
+
+ + +
+ + +
+ + +
+
+ + +
+
+ + + Min 2 per DB +
+
+ + +
+
+ + + 100% — all provisioned ECPUs active +
+
+ + +
+
+ + +
+ + +
+ Billing Model Details & Formulas +
+
+

ATP Serverless

+

Each DB billed independently for provisioned ECPUs × hours running. Min 2 ECPUs/DB. Auto-scaling bursts up to 3× base.

+
+ Compute = Σ ECPUs/DB × $0.0807/hr × 744 h + Storage = GB allocated × $0.1156/mo + Backup = GB used × $0.0244/mo +
+ Billing Docs +
+
+

Elastic Pool (Serverless)

+

Compute billed to pool leader. Members can have 1 ECPU min. Storage billed per-DB.

+
+ Compute = Pool shape × tier × $0.0807/hr × 744 h + Tiers peak ≤ 1× → 1×; ≤ 2× → 2×; > 2× → 4× + Shapes 128, 256, 512, 1024, 2048, 4096 +
+ Billing Docs +
+
+

Dedicated Elastic Pool

+

Both compute + storage billed to leader. Same tiered billing. Min: 256 ECPUs / 256 TB.

+
+ Compute = Pool shape × tier × $0.0807/hr × 744 h + Shapes 256, 512, 1024 + Storage = Pool total TB × $0.1156/GB/mo +
+ Billing Docs +
+
+

ADB Dedicated X11M

+

Compute per provisioned ECPUs + Exadata infra (DB + Storage servers). Backup via Object Storage.

+
+ Compute = ECPUs × $0.0807/hr × 744 h + DB srvs = max(2, ⌈ECPU÷760⌉) × $2.90/h + ST srvs = max(3, ⌈TB÷80⌉) × $2.90/h +
+ Billing Docs +
+
+

Elastic Pool (Dedicated)

+

Elastic Pool on Dedicated Exadata. Pool compute billing + Exadata servers. Storage billed per instance.

+
+ Compute = Pool shape × tier × $0.0807/hr + Tiers same as Serverless EP (1×/2×/4×) + Infra = DB + ST servers × $2.90/h +
+ Billing Docs +
+
+
+ + +
+ + + + + + + + diff --git a/sites/oracle-ai-atp-comparison/adb-data.js b/sites/oracle-ai-atp-comparison/adb-data.js new file mode 100644 index 0000000..9dc1d4b --- /dev/null +++ b/sites/oracle-ai-atp-comparison/adb-data.js @@ -0,0 +1,576 @@ +// ═══════════════════════════════════════════════════════════════════════════ +// ADB COMPARISON TOOL — EXTERNAL DATA FILE (v2 — 5 flavors) +// ═══════════════════════════════════════════════════════════════════════════ +// +// Two deployment worlds, five flavors: +// +// SERVERLESS (Oracle-managed shared infrastructure) +// [0] Serverless — standalone pay-per-use +// [1] Elastic Pool — pooled compute, shared infra +// [2] Ded. Elastic Pool — pooled compute+storage, co-located infra +// +// DEDICATED (Customer-exclusive Exadata infrastructure) +// [3] ADB Dedicated — standalone Exadata +// [4] Dedicated EP (Exa) — elastic pool on Exadata +// +// Every array in this file follows this 5-element order: +// [Serverless, Elastic Pool, Ded.EP(Svl), ADB Dedicated, Ded.EP(Exa)] +// +// ═══════════════════════════════════════════════════════════════════════════ + +const FLAVORS = [ + { name: "Serverless", cls: "shared", short: "Serverless", group: "serverless" }, + { name: "Elastic Pool", cls: "spool", short: "Elastic Pool", group: "serverless" }, + { name: "Ded. Elastic Pool", cls: "pool", short: "Ded. EP (Svl)", group: "serverless" }, + { name: "ADB Dedicated", cls: "dedicated", short: "ADB Dedicated", group: "dedicated" }, + { name: "Elastic Pool (Dedicated)", cls: "dedpool", short: "EP (Dedicated)", group: "dedicated" } +]; + + +const DOC_LINKS = { + shared: "https://docs.oracle.com/en/cloud/paas/autonomous-database/serverless/adbsb/autonomous-features-billing.html", + spool: "https://docs.oracle.com/en-us/iaas/autonomous-database-serverless/doc/elastic-pools-about.html", + pool: "https://docs.oracle.com/en-us/iaas/autonomous-database-serverless/doc/dedicated-elastic-pools.html", + dedicated: "https://docs.oracle.com/en/cloud/paas/autonomous-database/dedicated/adbd-index.html", + dedpool: "https://docs.oracle.com/en/cloud/paas/autonomous-database/dedicated/catiu/index.html" +}; + + +// ═══════════════════════════════════════════════════════════════════════════ +// INFO TOOLTIPS — (i) button per criterion +// ═══════════════════════════════════════════════════════════════════════════ +// flavors: [Serverless, Elastic Pool, Ded.EP(Svl), ADB Dedicated, Ded.EP(Exa)] +// ═══════════════════════════════════════════════════════════════════════════ + +const INFO = { + "Consistency": { + desc: "Likelihood that performance remains stable under load and over time (reduced variance/jitter).", + flavors: [ + "Good, but shared multi-tenant platform can imply higher variance; potential light noisy-neighbor impact.", + "Better than standalone Serverless: pool-level resource management reduces per-DB variance, but still on shared infrastructure.", + "Higher: tenant-dedicated platform reduces noisy-neighbor risk, but internal contention can occur if pool overcommitted.", + "Highest: dedicated Exadata infrastructure provides the strongest predictability for mission-critical workloads.", + "High: dedicated Exadata with pool-level resource management. Predictable infra but pool contention possible if overcommitted." + ] + }, + "Isolation": { + desc: "Degree of separation from other tenants and workloads — security, blast radius, compliance (LGPD/GDPR, data sovereignty).", + flavors: [ + "Good (OCI standards), but multi-tenant shared resources. Suitable for non-regulated workloads.", + "Same shared infrastructure as Serverless but pool provides a logical grouping boundary for your DBs.", + "Excellent: fully dedicated single-tenant (compute, storage, network isolated). Ideal for LGPD/GDPR, data sovereignty.", + "Highest: dedicated Exadata infrastructure; strongest isolation for regulated industries and compliance mandates.", + "Very high: Exadata-level isolation with pool members co-located on same infrastructure. Strong compliance posture." + ] + }, + "List-cost fit": { + desc: "Fixed/minimum cost you incur even at low utilization (cost floor / baseline commitment).", + flavors: [ + "Lowest: pure pay-per-use, no fixed infra. Auto-pause saves 100% compute when idle. Free developer tier.", + "Low pool shapes (128 ECPUs min). No dedicated infra floor. Storage billed per-DB.", + "Higher: pool minimums apply (256 ECPUs / 256 TB base), plus dedicated tenancy overhead.", + "Highest: dedicated Exadata infrastructure baseline; justified by risk/SLAs/compliance.", + "High: Exadata infra cost + pool shape minimum (128 ECPUs). Pool billing can reduce compute costs vs standalone Dedicated." + ] + }, + "Fully managed": { + desc: "Degree of operational automation — patching, backup, scaling, provisioning.", + flavors: [ + "Fully autonomous: Oracle manages everything, auto-patching on Oracle schedule. Zero admin.", + "Fully managed like Serverless. Pool leader/member operations are simple join/leave.", + "Mostly managed: you can control patching windows (pause up to 4 weeks) and custom maintenance schedules.", + "Fleet admin manages Exadata infra, AVMCs, and ACDs. More operational responsibility but full control.", + "Fleet admin manages Exadata; pool leader manages pool membership. Patching control + pool simplicity." + ] + }, + "Elasticity": { + desc: "Ability to dynamically scale compute and storage without downtime or re-provisioning.", + flavors: [ + "Excellent: auto-scaling up to 3× base ECPUs. Scale-to-zero with auto-pause. Instant provisioning.", + "Good: pool can burst to 4× pool shape. Individual DBs can be 1 ECPU min. No per-DB auto-scaling.", + "Good: pool can burst to 4× shape. Additionally pool leader can scale both compute and storage shapes.", + "Manual ECPU scaling per AVM cluster. No auto-scaling. Adding servers requires infrastructure change.", + "Good: pool can burst to 4× shape on Exadata. Better elasticity than standalone Dedicated." + ] + }, + "Consolidation TCO": { + desc: "Total cost of ownership when consolidating 25+ databases under a single billing umbrella.", + flavors: [ + "Weak: each DB billed independently; costs scale linearly. No consolidation discount mechanism.", + "Best: pool absorbs per-DB minimums. Up to 87% compute savings. 1 ECPU min/DB vs 2 ECPU standalone.", + "Excellent: compute + storage consolidated to leader. Single bill. Ideal for SaaS with many small DBs.", + "Moderate: compute billed per-AVMC aggregate. Infra costs amortized over more DBs but high floor.", + "Strong: pool billing on Exadata — up to 87% compute savings same as Serverless EP. Infra costs still apply." + ] + }, + "Portability": { + desc: "Ease of moving databases between pools, regions, or deployment models.", + flavors: [ + "Excellent: clone, move between regions. Simple scale up/down. No pool dependencies.", + "Excellent: easy join/leave pool. Clone in/out. Pool members don't need same infrastructure.", + "Good: pool members must be on same infrastructure. Join/leave operations available. Cross-region limited.", + "Moderate: databases tied to Exadata infrastructure. Cross-region requires Data Guard setup.", + "Moderate: pool members co-located on same Exadata. Join/leave pool available. Infrastructure-bound." + ] + }, + "Governance": { + desc: "Administrative control over patching schedules, maintenance windows, access policies, and fleet operations.", + flavors: [ + "Limited: Oracle controls patching schedule. No custom maintenance windows. Basic IAM integration.", + "Limited: same as Serverless. Pool leader can manage membership. Custom maintenance with 1024+ pool shape.", + "Good: custom patching windows. Pause updates up to 4 weeks. Dedicated maintenance scheduling.", + "Full: fleet admin controls patching, maintenance, and lifecycle for all infra components.", + "Strong: fleet admin controls Exadata + pool leader manages pool. Custom patching + pool governance." + ] + }, +}; + + +// ═══════════════════════════════════════════════════════════════════════════ +// DECISION MATRIX — 8 pre-built scenarios +// ═══════════════════════════════════════════════════════════════════════════ +// scores: [Serverless, Elastic Pool, Ded.EP(Svl), ADB Dedicated, Ded.EP(Exa)] +// ═══════════════════════════════════════════════════════════════════════════ + +const matrices = { + small: { + title: "Small — 5 DBs, low steady usage", + desc: "Cost-sensitive; fast time-to-value; minimal admin overhead", + criteria: [ + { name: "List-cost fit", weight: 95, scores: [5, 4, 2, 2, 2] }, + { name: "Fully managed", weight: 80, scores: [5, 5, 5, 4, 4] }, + { name: "Elasticity", weight: 50, scores: [5, 4, 3, 3, 3] }, + { name: "Portability", weight: 40, scores: [5, 5, 5, 3, 3] }, + { name: "Consolidation TCO", weight: 10, scores: [3, 4, 3, 2, 3] }, + { name: "Consistency", weight: 30, scores: [3, 3, 4, 5, 4] }, + { name: "Isolation", weight: 15, scores: [2, 2, 4, 5, 5] }, + { name: "Governance", weight: 10, scores: [2, 2, 3, 5, 4] }, + ], + weights: [95, 80, 50, 40, 10, 30, 15, 10, 10, 5] + }, + consolidated: { + title: "Consolidated — ~25 medium DBs", + desc: "Pooling compute savings; reduce per-DB billing overhead", + criteria: [ + { name: "Consolidation TCO", weight: 95, scores: [2, 5, 5, 3, 4] }, + { name: "List-cost fit", weight: 70, scores: [4, 4, 3, 2, 3] }, + { name: "Portability", weight: 60, scores: [5, 5, 5, 3, 3] }, + { name: "Fully managed", weight: 50, scores: [5, 5, 5, 4, 4] }, + { name: "Elasticity", weight: 45, scores: [5, 4, 4, 3, 4] }, + { name: "Consistency", weight: 40, scores: [3, 3, 4, 5, 4] }, + { name: "Governance", weight: 25, scores: [2, 2, 4, 5, 4] }, + { name: "Isolation", weight: 20, scores: [2, 2, 4, 5, 5] }, + ], + weights: [95, 70, 60, 50, 45, 40, 25, 20, 15, 10] + }, + saas: { + title: "High-consolidation SaaS — ~200 tenants", + desc: "SaaS provider; per-tenant DB; cost efficiency + perception", + criteria: [ + { name: "Consolidation TCO", weight: 95, scores: [2, 5, 5, 2, 4] }, + { name: "Portability", weight: 60, scores: [5, 5, 4, 3, 3] }, + { name: "Isolation", weight: 55, scores: [2, 2, 4, 5, 5] }, + { name: "Governance", weight: 50, scores: [2, 2, 4, 5, 4] }, + { name: "Elasticity", weight: 40, scores: [5, 4, 4, 3, 4] }, + { name: "Fully managed", weight: 35, scores: [5, 5, 5, 4, 4] }, + { name: "Consistency", weight: 30, scores: [3, 3, 4, 5, 4] }, + { name: "List-cost fit", weight: 20, scores: [3, 3, 2, 1, 2] } + ], + weights: [95, 80, 60, 55, 50, 40, 35, 30, 25, 20] + }, + large: { + title: "Large workloads — ~10 DBs, >100 ECPUs", + desc: "Performance-intensive; high ECPU + storage per DB", + criteria: [ + { name: "Consistency", weight: 90, scores: [3, 3, 4, 5, 4] }, + { name: "Isolation", weight: 70, scores: [2, 2, 4, 5, 5] }, + { name: "Elasticity", weight: 55, scores: [5, 4, 4, 3, 4] }, + { name: "Governance", weight: 50, scores: [2, 2, 4, 5, 4] }, + { name: "Fully managed", weight: 40, scores: [5, 5, 5, 4, 4] }, + { name: "Consolidation TCO", weight: 35, scores: [2, 4, 4, 3, 4] }, + { name: "List-cost fit", weight: 30, scores: [3, 3, 2, 2, 2] }, + { name: "Portability", weight: 15, scores: [5, 5, 4, 3, 3] } + ], + weights: [90, 80, 70, 55, 50, 40, 35, 30, 20, 15] + }, + ultra: { + title: "SaaS Ultra Multi-Tenant — ~1,000 DBs", + desc: "Massive scale; per-DB minimums dominate cost; pool is essential", + criteria: [ + { name: "Consolidation TCO", weight: 100, scores: [1, 5, 5, 1, 4] }, + { name: "List-cost fit", weight: 70, scores: [1, 4, 3, 1, 2] }, + { name: "Elasticity", weight: 60, scores: [4, 5, 4, 2, 4] }, + { name: "Fully managed", weight: 50, scores: [5, 5, 5, 3, 4] }, + { name: "Portability", weight: 45, scores: [5, 5, 4, 2, 3] }, + { name: "Consistency", weight: 25, scores: [3, 3, 4, 5, 4] }, + { name: "Isolation", weight: 20, scores: [2, 2, 4, 5, 5] }, + { name: "Governance", weight: 15, scores: [2, 2, 4, 5, 4] }, + ], + weights: [100, 70, 60, 50, 45, 40, 25, 20, 15, 10] + }, + crit_low: { + title: "Low Impact — Dev/test, PoC, sandbox", + desc: "Non-critical; minutes-to-hours RTO acceptable; cost is king", + criteria: [ + { name: "List-cost fit", weight: 100, scores: [5, 4, 2, 1, 2] }, + { name: "Fully managed", weight: 80, scores: [5, 5, 5, 3, 4] }, + { name: "Elasticity", weight: 60, scores: [5, 4, 3, 3, 3] }, + { name: "Portability", weight: 40, scores: [5, 5, 5, 3, 3] }, + { name: "Consolidation TCO", weight: 30, scores: [3, 5, 4, 2, 3] }, + { name: "Consistency", weight: 10, scores: [3, 3, 4, 5, 4] }, + { name: "Isolation", weight: 5, scores: [2, 2, 4, 5, 5] }, + { name: "Governance", weight: 5, scores: [2, 2, 3, 5, 4] }, + ], + weights: [100, 80, 60, 40, 30, 10, 5, 5, 5, 5] + }, + crit_medium: { + title: "Medium Impact — Departmental apps, reporting", + desc: "Hours RTO; some compliance needs; balance cost vs. risk", + criteria: [ + { name: "Consistency", weight: 70, scores: [3, 3, 4, 5, 4] }, + { name: "Consolidation TCO", weight: 65, scores: [2, 5, 5, 3, 4] }, + { name: "Governance", weight: 55, scores: [2, 2, 4, 5, 4] }, + { name: "Isolation", weight: 50, scores: [2, 2, 4, 5, 5] }, + { name: "Fully managed", weight: 50, scores: [5, 5, 5, 4, 4] }, + { name: "List-cost fit", weight: 45, scores: [5, 4, 3, 2, 3] }, + { name: "Elasticity", weight: 40, scores: [5, 4, 4, 3, 4] }, + { name: "Portability", weight: 30, scores: [5, 5, 5, 3, 3] }, + ], + weights: [70, 65, 55, 50, 50, 45, 40, 35, 30, 20] + }, + crit_high: { + title: "High Impact — Mission-critical (ERP, banking)", + desc: "Minutes RTO; strict SLAs; isolation + control dominate", + criteria: [ + { name: "Isolation", weight: 95, scores: [2, 2, 4, 5, 5] }, + { name: "Consistency", weight: 90, scores: [3, 3, 4, 5, 4] }, + { name: "Governance", weight: 85, scores: [2, 2, 4, 5, 4] }, + { name: "Fully managed", weight: 40, scores: [5, 5, 5, 4, 4] }, + { name: "Elasticity", weight: 30, scores: [5, 4, 4, 3, 4] }, + { name: "Consolidation TCO", weight: 20, scores: [2, 4, 4, 3, 4] }, + { name: "Portability", weight: 15, scores: [5, 5, 4, 3, 3] }, + { name: "List-cost fit", weight: 10, scores: [5, 4, 3, 1, 2] } + ], + weights: [100, 95, 90, 85, 60, 40, 30, 20, 15, 10] + } +}; + +// Pre-populate origScores for reset +Object.keys(matrices).forEach(k => { + matrices[k].origWeights = [...matrices[k].weights]; + matrices[k].criteria.forEach(c => { c.origScores = [...c.scores]; }); +}); + + +// ═══════════════════════════════════════════════════════════════════════════ +// OVERVIEW CARDS — "When to Choose" tab (star ratings + descriptions) +// ═══════════════════════════════════════════════════════════════════════════ +// stars: [Serverless, Elastic Pool, Ded.EP(Svl), ADB Dedicated, Ded.EP(Exa)] +// descs: same order +// ═══════════════════════════════════════════════════════════════════════════ + +const OVERVIEW_CARDS = [ + { title: "Cost Fit", icon: "💰", stars: [5, 4, 2, 2, 2], + descs: [ + "Lowest cost floor: pure pay-per-use; auto-pause = $0 compute. Free tier for dev/test.", + "Pool shapes start at 128 ECPUs. Pay for pool — not per-DB provisioned. Up to 87% savings.", + "Pool min 256 ECPUs / 256 TB. Higher cost floor but consolidation offsets for large estates.", + "Highest cost floor: Exadata infra (DB + Storage servers) + ECPU compute. Justified by SLAs.", + "Exadata infra floor + pool shape min 128 ECPUs. Pool billing reduces compute vs standalone." + ] + }, + { title: "Performance Consistency", icon: "⚡", stars: [3, 3, 4, 5, 4], + descs: [ + "Good — shared platform may show slight variance under peak multi-tenant load.", + "Better than standalone: pool-level management. Still shared infrastructure.", + "High — dedicated tenancy reduces noisy-neighbor. Internal pool contention possible.", + "Highest — dedicated Exadata; strongest predictability for critical workloads.", + "High — Exadata predictability with pool resource sharing among your own DBs." + ] + }, + { title: "Isolation", icon: "🔒", stars: [2, 2, 4, 5, 5], + descs: [ + "OCI security standards with multi-tenant shared resources. Suitable for most workloads.", + "Same shared infra as Serverless. Pool is logical grouping, not physical isolation.", + "Dedicated single-tenant. Compute, storage, network isolated. LGPD/GDPR ready.", + "Strongest: customer-exclusive Exadata. No resource sharing with other customers.", + "Exadata-level isolation. Pool members co-located on same private infrastructure." + ] + }, + { title: "Consolidation Efficiency", icon: "📦", stars: [2, 5, 5, 3, 4], + descs: [ + "Weak — each DB billed independently. Costs scale linearly with DB count.", + "Best — pool absorbs per-DB mins. 1 ECPU/DB in pool vs 2 standalone. Massive savings at scale.", + "Excellent — compute + storage to leader. Single bill. Best for SaaS with 100s of DBs.", + "Moderate — compute per AVMC aggregate. Infra amortized but high floor.", + "Strong — pool billing on Exadata (up to 87% compute savings). Infra costs remain." + ] + }, + { title: "Elasticity & Scaling", icon: "📈", stars: [5, 4, 4, 3, 4], + descs: [ + "Excellent — auto-scale 3× base. Auto-pause/resume. Scale-to-zero. Instant provisioning.", + "Good — pool bursts to 4× shape. No per-DB auto-scaling. 1 ECPU minimum per member.", + "Good — pool bursts to 4× shape. Leader can scale both compute and storage shapes.", + "Manual — ECPU scaling per AVMC. No auto-scaling. Server additions require infra changes.", + "Good — pool bursts to 4× shape on Exadata. Better elasticity than standalone Dedicated." + ] + }, + { title: "Operational Simplicity", icon: "🤖", stars: [5, 5, 4, 3, 3], + descs: [ + "Zero admin: Oracle manages everything. Auto-patching on Oracle schedule.", + "Same zero admin + simple pool join/leave operations. Leader manages membership.", + "Mostly managed: custom patching windows available. Pause updates up to 4 weeks.", + "Fleet admin manages Exadata infra, AVMCs, ACDs. More operational responsibility.", + "Fleet admin manages Exadata; pool leader manages pool. Mix of infra + pool ops." + ] + }, + { title: "Governance & Control", icon: "🏛️", stars: [2, 2, 4, 5, 4], + descs: [ + "Limited — Oracle controls patching. No custom maintenance windows. Basic IAM.", + "Same as Serverless. Custom windows with 1024+ ECPUs pool shape.", + "Good — custom patching, pause updates. Dedicated maintenance scheduling.", + "Full — fleet admin controls all infra lifecycle, patching, and maintenance.", + "Strong — fleet admin + pool leader governance. Custom patching + pool control." + ] + }, +]; + + +// ═══════════════════════════════════════════════════════════════════════════ +// PRICING — OCI list prices (BYOL, Feb 2026) +// ═══════════════════════════════════════════════════════════════════════════ + +const PRICING = { + ecpuHr: 0.0807, + hrsMonth: 744, + storageGbMo: 0.1156, + backupGbMo: 0.0244, + objStorageGbMo: 0.0255, + x11mDbSrvHr: 2.8978, + x11mStSrvHr: 2.8978, + dbSrvEcpuCap: 760, + stSrvStorCap: 80, + poolMinEcpu: 256, + poolMinStorTB: 256, + minDbServers: 2, + minStServers: 3, +}; + +const COST_PRESETS = { + small: { dbs: 5, ecpuPerDb: 16, storPerDb: 5, usagePct: 100 }, + consolidated: { dbs: 25, ecpuPerDb: 8, storPerDb: 2, usagePct: 100 }, + saas: { dbs: 200, ecpuPerDb: 2, storPerDb: 1, usagePct: 100 }, + large: { dbs: 10, ecpuPerDb: 64, storPerDb: 20, usagePct: 100 }, + ultra: { dbs: 1000, ecpuPerDb: 2, storPerDb: 0.5, usagePct: 8 }, +}; + + +// ═══════════════════════════════════════════════════════════════════════════ +// SCENARIO ANALYSIS — "Scenarios" tab tables +// ═══════════════════════════════════════════════════════════════════════════ +// flavors: [Serverless, Elastic Pool, Ded.EP(Svl), ADB Dedicated, Ded.EP(Exa)] +// ═══════════════════════════════════════════════════════════════════════════ + +const SCENARIOS = [ + { + title: "By Scale", + firstCol: "Scenario", + rows: [ + { + label: "Small", + sub: "5 DBs; low steady usage", + flavors: [ + "Best TCO and fastest time-to-value (no cost floor).", + "Viable if DBs are bursty and can share pool compute; but pool minimum shapes may over-provision.", + "Usually not economical due to pool minimums (256 ECPUs/256 TB).", + "Usually not economical unless strict regulatory/isolation requirements.", + "Over-engineered: Exadata infra + pool overhead not justified for small estates." + ], + takeaway: "Choose Serverless when cost and agility dominate." + }, + { + label: "Consolidated", + sub: "~25 medium DBs", + flavors: [ + "Viable, but cost grows with aggregated consumption.", + "Sweet spot: pooling compute savings up to 87%; storage billed per-DB. Easy join/leave.", + "Best when you also want storage consolidated to the leader with dedicated tenancy.", + "Justify when risk/SLAs/compliance dominate beyond consolidation economics.", + "Good option if you need Exadata isolation + pool compute savings for 25+ DBs." + ], + takeaway: "Elastic Pool for compute savings; Ded. Pool for full consolidation." + }, + { + label: "High-consolidation SaaS", + sub: "~200 tenants / many DBs", + flavors: [ + "Risk of linear cost growth and multi-tenant perception concerns.", + "Strong: pooled compute, per-tenant storage isolation, easy portability.", + "Best: dedicated tenancy + pooling + both compute & storage consolidated.", + "For premium/regulated tenants needing strongest isolation boundaries.", + "Strong: Exadata isolation + pool billing. Good for regulated SaaS at scale." + ], + takeaway: "EP for mainstream; Ded. EP for tenancy; Dedicated/Ded.EP(Exa) for premium." + }, + { + label: "Large workloads", + sub: "~10 DBs, >100 ECPUs + >100 TB", + flavors: [ + "Viable; auto scaling up to 3\u00d7. Evaluate multi-tenant risk.", + "Good when multiple large workloads can share peak capacity.", + "Best when large workloads amortize pool floor; portability helps tuning.", + "Best for single large critical workload where predictability/isolation is top driver.", + "Good for multiple large workloads on Exadata needing pool compute efficiency." + ], + takeaway: "1 large critical \u2192 Dedicated; several large \u2192 Pools." + }, + { + label: "SaaS Ultra Multi-Tenant", + sub: "~1,000 DBs; 150 ECPU real usage", + flavors: [ + "2 ECPU min/DB forces 2,000 ECPUs despite 150 real; cost explodes.", + "Best fit: pool absorbs 1,000 DBs with 1 ECPU min; bills on real aggregate peak. Massive savings.", + "Same compute savings + storage consolidation to leader. Requires min 256 ECPUs/256 TB.", + "2 ECPU min/DB + infrastructure floor = most expensive at this scale.", + "Pool on Exadata: 1 ECPU min/DB helps but infra floor remains. Better than standalone Dedicated." + ], + takeaway: "Elastic Pools dominate when per-DB minimums exceed real usage." + } + ] + }, + { + title: "\uD83C\uDFAF By Business Criticality (Impact Level)", + firstCol: "Impact Level", + rows: [ + { + label: "\uD83D\uDFE2 Low Impact", + sub: "Dev/test, sandbox, PoC, internal tools; minutes-to-hours RTO acceptable", + flavors: [ + "Best fit: zero management, auto-pause saves cost, free tier for dev. Fast provisioning for PoCs.", + "Good if many dev DBs benefit from shared compute pool with 1 ECPU min.", + "Over-engineered for this tier. Pool minimums waste budget.", + "Over-engineered. Exadata infra floor unjustified for non-critical workloads.", + "Over-engineered. Exadata + pool overhead not justified for dev/test." + ], + takeaway: "Serverless is the default for low-impact. Pool only if you have many dev DBs." + }, + { + label: "\uD83D\uDFE1 Medium Impact", + sub: "Departmental apps, reporting, staging; hours RTO; some compliance needs", + flavors: [ + "Viable for most medium-impact workloads with auto-scaling up to 3\u00d7.", + "Strong: pooled compute handles burst demand; per-DB storage isolation aligns with department boundaries.", + "Best when compliance or data sovereignty requires dedicated tenancy + you have 25+ DBs to amortize floor.", + "Justified if specific regulatory requirements (LGPD/GDPR) mandate Exadata-level isolation.", + "Good if compliance requires Exadata + you want pool billing for cost efficiency." + ], + takeaway: "Elastic Pool is the sweet spot. Ded. Pool or Dedicated only if compliance forces it." + }, + { + label: "\uD83D\uDD34 High Impact", + sub: "Mission-critical: ERP, core banking, e-commerce, telecom; minutes RTO; strict SLAs", + flavors: [ + "Risky: shared multi-tenant adds performance variance. No custom patching control. Not recommended.", + "Acceptable only with careful pool capacity planning. No tenancy-level isolation from other OCI customers.", + "Strong: dedicated tenancy eliminates noisy-neighbor. Custom patching windows. Pause updates up to 4 weeks.", + "Gold standard: dedicated Exadata, maximum isolation, predictability, and control for mission-critical SLAs.", + "Excellent: Exadata isolation + pool compute savings. Best of both worlds for mission-critical fleets." + ], + takeaway: "Dedicated or Ded. Pool for mission-critical. Ded.EP(Exa) for fleets." + } + ] + } +]; + + +// ═══════════════════════════════════════════════════════════════════════════ +// FEATURE MATRIX — capabilities by flavor and DB version +// ═══════════════════════════════════════════════════════════════════════════ +// +// availability per flavor: +// [Serverless, Elastic Pool, Ded.EP(Svl), ADB Dedicated, EP(Dedicated)] +// +// version: "any" (19c+26ai), "26ai" (26ai only), "19c" (19c only) +// +// category: "AI & Vectors", "HA & DR", "Security", "Performance", +// "Management", "Developer", "Data Integration" +// +// When a user checks a feature as "required", flavors that don't support it +// get visually disabled in the Decision Matrix and Cost Estimator. +// +// ═══════════════════════════════════════════════════════════════════════════ + +const FEATURES = [ + // ═══════════════════════════════════════════════════════════════════════════ + // Features shown here have at least ONE meaningful difference: + // • Across flavors (available on some but not all), OR + // • Across versions (26ai-only, not available on 19c) + // + // Universal features available on ALL flavors AND BOTH versions are excluded: + // Database Vault, Data Safe, APEX, Refreshable Clones, Auto-Indexing, + // Autonomous Data Guard (Local + Cross-Region), Application Continuity, + // Private Endpoints, Customer-Managed Encryption Keys, GoldenGate, + // Data Transforms (ETL), Real-Time SQL Plan Management, Spatial, JSON. + // ═══════════════════════════════════════════════════════════════════════════ + // + // avail: [Serverless, Elastic Pool, Ded.EP(Svl), ADB Dedicated, EP(Dedicated)] + // version: "both" (19c & 26ai), "26ai" (26ai only) + // + + // ── AI & Vectors (26ai only — not available on 19c) ── + { name: "AI Vector Search", category: "AI & Vectors", version: "26ai", avail: [true, true, true, true, true], doc: "https://docs.oracle.com/en/database/oracle/oracle-database/26/vecse/" }, + { name: "Select AI (Natural Language SQL)", category: "AI & Vectors", version: "26ai", avail: [true, true, true, true, true], doc: "https://docs.oracle.com/en-us/iaas/autonomous-database-serverless/doc/sql-generation-ai-autonomous-database.html" }, + { name: "Select AI Agent (Agentic AI)", category: "AI & Vectors", version: "26ai", avail: [true, true, true, true, true], doc: "https://docs.oracle.com/en-us/iaas/autonomous-database-serverless/doc/select-ai-agent.html" }, + { name: "Built-in MCP Server", category: "AI & Vectors", version: "both", avail: [true, true, true, false, false], doc: "https://docs.oracle.com/en-us/iaas/releasenotes/autonomous-database-serverless/2025-12-mcp-server-for-autonomous-ai-database.htm" }, + { name: "Data Lake Accelerator", category: "AI & Vectors", version: "26ai", avail: [true, true, true, false, false], doc: "https://docs.oracle.com/en-us/iaas/autonomous-database-serverless/doc/data-lake-accelerator.html" }, + + // ── Developer (26ai only — not available on 19c) ── + { name: "JSON Relational Duality Views", category: "Developer", version: "26ai", avail: [true, true, true, true, true], doc: "https://docs.oracle.com/en/database/oracle/oracle-database/26/jsnvu/index.html" }, + { name: "SQL/PGQ Property Graph Queries", category: "Developer", version: "26ai", avail: [true, true, true, true, true], doc: "https://docs.oracle.com/en/database/oracle/property-graph/25.3/spgdg/sql-property-graphs.html" }, + { name: "JavaScript in DB (MLE)", category: "Developer", version: "26ai", avail: [true, true, true, true, true], doc: "https://docs.oracle.com/en/database/oracle/oracle-database/26/mlejs/" }, + { name: "Lock-Free Reservations", category: "Developer", version: "26ai", avail: [true, true, true, true, true], doc: "https://docs.oracle.com/en/database/oracle/oracle-database/26/adfns/using-lock-free-reservation.html" }, + { name: "Kafka APIs for TxEventQ", category: "Developer", version: "26ai", avail: [true, true, true, true, true], doc: "https://docs.oracle.com/en/database/oracle/oracle-database/26/adque/" }, + { name: "Boolean Data Type in SQL", category: "Developer", version: "26ai", avail: [true, true, true, true, true], doc: "https://docs.oracle.com/en/database/oracle/oracle-database/26/sqlrf/Data-Types.html" }, + + // ── Data Integration (26ai only — not available on 19c) ── + { name: "Cloud Links (Data Sharing)", category: "Data Integration", version: "26ai", avail: [true, true, true, false, false], doc: "https://docs.oracle.com/en-us/iaas/autonomous-database-serverless/doc/cloud-links.html" }, + { name: "External Table Cache", category: "Data Integration", version: "26ai", avail: [true, true, true, false, false], doc: "https://docs.oracle.com/en-us/iaas/autonomous-database-serverless/doc/external-table-cache.html" }, + { name: "Apache Iceberg Support", category: "Data Integration", version: "both", avail: [true, true, true, true, true], doc: "https://docs.oracle.com/en-us/iaas/autonomous-database-serverless/doc/autonomous-iceberg.html" }, + + // ── HA & DR (both versions, flavor differences) ── + { name: "Active Data Guard (Read-Only Standby)", category: "HA & DR", version: "both", avail: [false, false, false, true, true], doc: "https://www.oracle.com/database/data-guard/" }, + { name: "Multi-Cloud DR", category: "HA & DR", version: "both", avail: [false, false, false, true, true], doc: "https://docs.oracle.com/en/cloud/paas/autonomous-database/dedicated/adbau/" }, + { name: "Custom Patching Schedule", category: "HA & DR", version: "both", avail: [false, false, true, true, true], doc: "https://docs.oracle.com/en/cloud/paas/autonomous-database/dedicated/adbdp/" }, + { name: "Pause Patching (up to 4 weeks)", category: "HA & DR", version: "both", avail: [false, false, true, true, true], doc: "https://docs.oracle.com/en/cloud/paas/autonomous-database/dedicated/adbdp/" }, + + // ── Security (both versions, flavor differences) ── + { name: "DB Vault Operations Control", category: "Security", version: "both", avail: [false, false, false, true, true], doc: "https://docs.oracle.com/en/cloud/paas/autonomous-database/dedicated/adbdv/" }, + { name: "Dedicated Exadata Isolation", category: "Security", version: "both", avail: [false, false, true, true, true], doc: "https://docs.oracle.com/en/cloud/paas/autonomous-database/dedicated/adbd-index.html" }, + + // ── Performance (both versions, flavor differences) ── + { name: "Compute Auto-Scaling (3×)", category: "Performance", version: "both", avail: [true, false, false, true, false], doc: "https://docs.oracle.com/en/cloud/paas/autonomous-database/serverless/adbsb/autonomous-auto-scale.html" }, + { name: "Elastic Pool Burst (up to 4×)", category: "Performance", version: "both", avail: [false, true, true, false, true], doc: "https://docs.oracle.com/en-us/iaas/autonomous-database-serverless/doc/elastic-pools-create-manage.html" }, + + // ── Operational (both versions, flavor differences) ── + { name: "Elastic Pool (Compute Billing)", category: "Operational", version: "both", avail: [false, true, true, false, true], doc: "https://docs.oracle.com/en-us/iaas/autonomous-database-serverless/doc/elastic-pools-create-manage.html" }, + { name: "Fleet Admin (Infra Control)", category: "Operational", version: "both", avail: [false, false, false, true, true], doc: "https://docs.oracle.com/en/cloud/paas/autonomous-database/dedicated/fleet-admin.html" }, + { name: "Scale-to-Zero / Auto-Pause", category: "Operational", version: "both", avail: [true, false, false, false, false], doc: "https://docs.oracle.com/en-us/iaas/autonomous-database-serverless/doc/autonomous-auto-pause.html" }, + { name: "Developer Database (Free Tier)", category: "Operational", version: "both", avail: [true, false, false, false, false], doc: "https://docs.oracle.com/en-us/iaas/autonomous-database-serverless/doc/autonomous-always-free.html" }, +]; + +// ═══════════════════════════════════════════════════════════════════════════ +// CLOUD PLATFORM AVAILABILITY — where each flavor can run +// ═══════════════════════════════════════════════════════════════════════════ +// avail: [Serverless, Elastic Pool, Ded.EP(Svl), ADB Dedicated, EP(Dedicated)] +// +// Sources: +// - Serverless: OCI native + Oracle Database@Azure (ADB Serverless on Azure) + Database@Google Cloud +// - Dedicated: OCI + Database@AWS + Database@Azure + Database@Google Cloud +// - Elastic Pool flavors inherit from their parent deployment model +// +const CLOUD_PLATFORMS = [ + { name: "OCI", icon: "☁️", avail: [true, true, true, true, true], doc: "" }, + { name: "AWS", icon: "🟠", avail: [false, false, false, true, true], doc: "https://docs.oracle.com/en-us/iaas/Content/database-at-aws/oaaws-regions.htm" }, + { name: "Azure", icon: "🔵", avail: [true, true, true, true, true], doc: "https://docs.oracle.com/en-us/iaas/Content/multicloud/regions.htm" }, + { name: "Google Cloud", icon: "🟢", avail: [true, true, true, true, true], doc: "https://docs.oracle.com/en-us/iaas/Content/multicloud/regions.htm" }, +];