62 Commits

Author SHA1 Message Date
sku-refresh-bot
e3ad1e3884 chore(pricing): monthly SKU catalog refresh (2026-05-01)
Automated refresh from Oracle public pricing API.
See workflow artifact 'sku-refresh-logs' for the diff.
2026-05-01 09:00:52 +00:00
root
75203e7196 Document Gitea↔GitHub dual-push setup for agents
Some checks failed
Deploy Skill to OCI / deploy (push) Successful in 33s
SKU Catalog Refresh / refresh-and-discover (push) Failing after 26s
KB Health Check / check-links (push) Successful in 1m2s
origin's push URL list spans both remotes (Gitea authoritative, GitHub mirror), so a single `git push origin main` updates both. The setup lives in `.git/config` and isn't tracked, so we explicitly document the reproduction commands plus agent guidance: propose dual-push after commits, never force-push Gitea without OK, and the recovery pattern for divergence.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-29 23:25:47 -03:00
root
c22ba64bdb Brand icons (Slack/Jira) in diagrams + BOM comparison deck
All checks were successful
Deploy Skill to OCI / deploy (push) Successful in 35s
SKILL.md sync / check-sync (push) Successful in 18s
- brand_icon_catalog: shared resolver for non-OCI vendor assets (Slack, Jira, Jira Service Management) under kb/diagram/brand-icons; official > fallback; never hits the network at render time.
- oci_diagram_gen + oci_pptx_diagram_gen: services and external actors accept `brand_icon:`, unlocking real multicloud / SaaS topologies beyond Oracle stencils.
- build_bom_comparison_deck: customer-facing Oracle FY26 deck that compares N BOM specs with native PowerPoint charts and live SKU pricing.
- README + SKILL.md: document the new capabilities and ship copy/paste demo prompts (native .pptx diagram, Slack→OIC→Jira flow, multicloud Postgres↔ADB-S, discount-aware BOM).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-29 23:23:50 -03:00
root
7ea17b2f9e Skill: catalog-first pricing, centralised disclaimer, deck verification
Six fixes after a Codex transcript that scraped oracle.com for SKUs already
in kb/pricing/oci-sku-catalog.yaml. New option-4 cost-estimate flow with a
"catalog first, web never" rule, staleness gate, and miss policy; unconditional
Cookbook scope (any pricing or SKU work, not just specific tool calls); hard
no-WebSearch rule under "What You Do NOT Do"; disclaimer field extended with
reference-only / no-client-discount clauses and referenced from options 4/8/13
(single source of truth — oci_bom_gen.py already consumes it); tightened menu
hints separating option 4 (quick comparison while you scope) from option 13
(formal .xlsx artefact you send); structural deck verification step for
Linux/WSL where PowerPoint binary isn't available.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-29 23:23:48 -03:00
root
ee15e1f45e Add third-party brand icon support
Some checks failed
Deploy Skill to OCI / deploy (push) Successful in 33s
Diagram validators / diagram-validators (push) Failing after 20s
2026-04-27 15:15:31 -03:00
root
a032e7980b Fix drawio OIC icon resolution
Some checks failed
Deploy Skill to OCI / deploy (push) Successful in 35s
Diagram validators / diagram-validators (push) Failing after 21s
2026-04-27 13:07:38 -03:00
root
198861f533 PPTX icon resolver: skip degraded refs from stencil buckets
Some checks failed
Deploy Skill to OCI / deploy (push) Successful in 36s
Diagram validators / diagram-validators (push) Failing after 19s
SKILL.md sync / check-sync (push) Successful in 16s
Symptom on the GCP→OCI PostgreSQL deck: the OCI PostgreSQL icon bbox
rendered as empty space — labels and surrounding ADs all visible,
but no icon where the postgres stencil should be.

Root cause: ``_lookup_icon_ref`` returned the first hit from
``stencils.database_icons`` without checking it was cloneable.
The bucket happens to ship one degraded entry — ``database`` is
``tag=sp`` with ``bbox=None`` (a label-strip leaf, not the real
icon group) — so ``_clone_translated_block`` emitted a zero-size
shape. The 19 viable refs for the same key in
``shape_library.entries`` were ignored because the early-return in
``database_icons`` won.

Fix: extract a shared ``_is_viable_ref`` predicate (slide_path +
child_index/node_path + non-empty bbox + supported tag) and apply
it before returning from BOTH stencil buckets (``database_icons``,
``sample_icon_refs``). On miss, fall through to
``shape_library_entries`` where ``_select_preferred_ref`` already
filtered the same way.

Affects every alias that routes to a degraded stencil entry —
``postgresql`` / ``postgres`` / ``oci_postgresql`` were the obvious
fallout because they all alias to ``database``. The Architecture
Center reconstructions on shape-library-only slugs were unaffected.

Verified by re-rendering examples/output-gcp-virginia-oci-postgres-
adbs-clone/*.pptx — the OCI PostgreSQL bbox now shows the icon
(teal stencil + "Database" intrinsic caption) consistently with
the ADB-S and Refreshable Clone bboxes next to it.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-27 11:03:23 -03:00
root
7f8cba7f30 Skill: kill the lookup-loop time-sink (3 fixes from Codex transcript)
Root cause observed in a real Codex session: the agent burned ~3min
on `make venv` + 4 sequential `make diagram-lookup` queries trying
to find a non-existent ref-arch (OCI PostgreSQL accessed FROM GCP
via Cross-Cloud Interconnect). The catalog has 123 entries; if two
honest queries can't surface a topology, none exists — but nothing
in the skill said "stop." Three coordinated fixes:

1) Makefile: `make venv` is now idempotent.
   Marker file `.venv/.deps-installed` keyed off `requirements.txt`
   mtime — the second `make venv` in a row is a 26ms no-op (was
   1m53s on a Codex sandbox, paid every turn). Force a rebuild with
   `rm .venv/.deps-installed`.

2) kb/architecture-center/catalog.yaml: new `known_gaps` block.
   Surfaced by the lookup tool as a top-of-output banner whenever
   the (synonym-expanded) query tokens match any one of a gap's
   `triggers` token sets. Two gaps seeded from real engagements:

     - gcp-to-oci-native-services — OCI PostgreSQL/OKE/Cache/etc.
       reached FROM GCP via Cross-Cloud Interconnect (the
       Database@Google Cloud entries are the OPPOSITE direction).

     - newer-oci-services-without-icon — OCI Cache (Redis/Valkey)
       and OCI PostgreSQL post-v24.2-toolkit; no ref-arch, no
       toolkit icon, fall back to generic stencil + explicit label.

   Each gap's `notice:` is a copy-paste recommended composition so
   the agent doesn't have to invent a strategy.

3) tools/archcenter_pattern_lookup.py: detects + surfaces gaps.
   `lookup()` now returns `{"matches": ..., "gaps": ...}`. The
   text printer emits a "⚠ KNOWN GAP — <id>" banner with the
   notice block ABOVE the score-based top-K, so the agent sees
   the stop-and-compose signal before ever scrolling to results.
   YAML output mode mirrors the same shape under `gaps:`.

4) SKILL.md (option 2 step 1) + Codex copy via sync-skill.
   New explicit rule: "Lookup budget: max 2 queries — never loop."
   Documents the gap banner, the closest-3-then-ask fallback, and
   the prohibition against grasping at a 3rd refinement.

Verified manually:
  - GCP+postgresql query → gap fires
  - "redis ha multi-az" → newer-OCI gap fires
  - "exadata cross region data guard" → no false-positive gap

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-27 10:46:27 -03:00
root
ff77563133 settings.local.json: extend allowlist for diagram + MCP test workflow
All checks were successful
Deploy Skill to OCI / deploy (push) Successful in 32s
Adds permission entries accumulated during recent work — the local
draw.io.exe path probes used by the fidelity validator, curl probes
against the MCP server (mcp.tech-lad.com) and the Gitea remote
(git.tech-lad.com.br) for status checks, the .githooks/pre-commit
hook so the SKILL.md sync gate runs without a prompt, and a few
read-only awk/grep/curl one-liners hit repeatedly in the SKU /
ref-arch maintenance loop.

Per-machine allowlist only — no behaviour change for other
contributors.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-27 09:29:50 -03:00
root
1b4828f293 MELI Fraud: case-specific scaffolding scripts (3 chassis variants)
Three one-shot Python scripts that build the MELI Fraud As-Is /
To-Be .drawio pair by cloning an Oracle Architecture Center chassis
and overlaying MELI-specific labels, region renames, and workload
pills. Useful as worked examples of the chassis-then-overlay
transform pattern (drawio_template_transform.DrawioTemplate) that
the diagram procedure recommends:

  • build_meli_fraud_from_adbsplusadbd.py — clones the locally
    accepted ATP-S/ATP-D side-by-side reference and partitions cells
    into AS-IS / TO-BE panels by x-coordinate.
  • build_meli_fraud_from_crossregion.py — uses Oracle's
    exadata-dedicated-cross-region-dataguard ref-arch (two regions
    with DRG + RPC + Data Guard already drawn) as chassis and only
    overlays MELI-specific pills.
  • build_meli_fraud_from_templates.py — combines the in-region and
    cross-region Exadata ref-archs and clones the in-region
    topology to the right for the Montreal DR.

All three honour the standing rule: do not edit text inside Oracle
SVG stencil shapes — overlay new mxCells in whitespace instead.
Outputs land under examples/output-meli-fraud-adbd-migration/.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-27 09:29:37 -03:00
root
5566a171b0 PPTX: ensure [Content_Types].xml has defaults for every media extension
Symptom: PowerPoint prompted to repair some generated decks. Cause:
when python-pptx (or our native renderer) repacks the .pptx after we
embed Oracle template assets — some of which are SVG-backed —
[Content_Types].xml can lose the Default entry for "svg" (and other
extensions present under ppt/media), which makes Office refuse to
open the file cleanly.

Fix: after writing the deck (and after any native renderer pass),
walk ppt/media, collect the actual extensions in use, and ensure
[Content_Types].xml declares a Default for each one (svg, png, jpg,
jpeg, gif, bmp, tiff, emf, wmf, ico, webp). Repack only when at
least one new Default was added — no-op fast path otherwise.

Lines up with the existing field rule: every embedded media
extension must be declared in [Content_Types].xml Defaults, or
PowerPoint flags the file as corrupt.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-27 09:29:18 -03:00
root
eef213612c Aliases for newer OCI services without toolkit icons (Redis, PostgreSQL)
Some checks failed
Deploy Skill to OCI / deploy (push) Successful in 36s
Diagram validators / diagram-validators (push) Failing after 34s
SKILL.md sync / check-sync (push) Successful in 37s
Diego pointed at examples/output-ashburn-redis-oke and asked: does
Oracle ship a Redis icon for drawio? Answer: NO. Confirmed against
both libraries:
  - kb/diagram/oci-icons.json (OCI Toolkit v24.2)         → 0 hits
  - kb/diagram/oci-pptx-icons-index.json (OCI_Icons.pptx) → 0 hits
Same for OCI Cache, Valkey, OCI PostgreSQL — all are GA after the
toolkit shipped.

Oracle's own reference architecture
``modernize-app-dev-oci-postgresql-redis-opensearch`` works around
this by embedding inline SVG vector data into ``shape=stencil(...)``
cells — there is no reusable named stencil. The closest reusable
match is the generic ``database`` icon (8 cells in oci-icons.json,
the canonical "Database" stencil).

Persistent fixes:

- TYPE_TO_ICON (PPTX) and ICON_TYPE_ALIASES (drawio) both gain
  aliases for ``redis`` / ``oci_cache`` / ``oci_cache_with_redis`` /
  ``cache`` / ``valkey`` / ``postgresql`` / ``postgres`` /
  ``oci_postgresql`` → ``database``. Plus ``opensearch`` →
  ``database_opensearch`` (which exists) on the PPTX side.

- SKILL.md option 2 step 3 documents the convention: when an OCI
  service doesn't have a toolkit icon, use the generic stencil and
  pair with an explicit ``label:`` carrying the real service name
  (e.g. ``label: "OCI Cache (Redis)"``). When Oracle ships a v25+
  toolkit with these icons, update oci-icons.json + the alias tables
  and the next render picks up the real icon automatically.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-26 00:00:17 -03:00
root
b77a855a3e Extractor: drawio → absolute_layout YAML scaffold (107/132 cached)
Closes the procedural hole that kept making Codex sessions fall back
to ``examples/`` for YAML scaffolding even after the SKILL forbade it.

The lookup tool returns a canonical Oracle ``.drawio`` as the geometry
source, but the agent had no YAML version of that geometry to copy —
the .drawio is XML with stencil-encoded icons. Without a scaffold,
agents reverse-engineered or fell back to ``examples/`` (which is
forbidden but happened anyway because the alternative was painful).

New tool ``tools/archcenter_drawio_to_template.py`` extracts:
  • canvas dimensions
  • containers (region / vcn / ad / subnet) classified by stroke /
    fill style markers
  • service bounding boxes with ``type: TODO_identify`` (the icon
    type is encoded in stencil bytes — agent fills it from the
    renderer's TYPE_TO_ICON aliases when authoring the spec)
  • edge waypoints (source, target, points)

Output lands at ``kb/diagram/assets/archcenter-refs/<slug>/_template.yaml``
next to the .drawio. Lookup now surfaces it as
``cached: yaml=<path>`` so the agent has a one-step "copy this YAML
and adapt" path.

Ran across all 132 cached folders: 107 templates emitted, 24 had no
.drawio (zip didn't ship one), 1 already cached.

Other persistent guardrails added in this commit:

- SKILL.md option 2 step 3: explicit reminder that valid ``type:``
  values come from ``TYPE_TO_ICON`` / ``ICON_TYPE_ALIASES`` in the
  renderer source plus the icon-index JSON files. Do NOT grep
  ``examples/`` for ``type:`` — that's where the previous Codex
  session was looking, against the rule.

- ``make archcenter-templates-refresh`` Makefile target.

- The lookup index now also indexes ``_template.yaml`` per slug.

- Auto-extracted templates committed under
  ``kb/diagram/assets/archcenter-refs/*/_template.yaml`` so a fresh
  clone has them on first lookup (no extraction step needed).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-25 23:56:29 -03:00
root
5b8a6ad5ec Lookup index auto-invalidates on KB updates + manual rebuild flag
Diego asked: does the persisted ``archcenter-refs-index.json`` auto-
update when the KB is updated? Partially — mtime on the cache root
catches add/remove of subdirs (POSIX), but NOT changes to files
INSIDE existing subdirs (description.md added, .drawio replaced).

Two fixes:

1. Both KB-update tools now ``touch`` ``kb/diagram/assets/archcenter-refs``
   when they finish a run that produced changes:
   - ``archcenter_description_fetcher.py`` after fetched > 0
   - ``archcenter_zip_downloader.py`` after downloaded / extract /
     overwrite events
   The touch bumps the parent mtime, which the next lookup detects
   and uses to rebuild its persisted index. Closes the silent-drift
   case where description.md fetches landed but the index didn't
   notice.

2. ``archcenter_pattern_lookup.py --rebuild-index`` flag — escape
   hatch for manual KB edits (someone replaces a cached .drawio by
   hand) where neither tool ran. Removes the stale index file before
   the lookup, forcing a cold rebuild.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-25 23:38:29 -03:00
root
c46219468f Lookup speed (78s → 1s) + drawio ADB-S/RC alias coverage
Two persistent fixes flagged from a Codex session:

1. ``archcenter_pattern_lookup`` ran in 78 s on WSL2 because:
   - ``_cached_assets`` did ``iterdir`` + recursive ``rglob`` over the
     whole 113-folder cache for EVERY catalog entry (123x).
   - ``_patterns_for`` reloaded ``reference-patterns.yaml`` for every
     match (125 reloads = ~5 s).
   - Description text from disk was read for every entry, even those
     that wouldn't make the top-K.

   Now: one-shot scan of the cache dir cached in-memory AND persisted
   to ``kb/diagram/assets/archcenter-refs-index.json`` keyed by mtime;
   patterns YAML loaded once and indexed by URL; a two-pass scoring
   pipeline that only reads description text + cached_assets +
   visual_patterns for the top-K candidates instead of every entry.
   Result: cold run 14 s (one-time index build), warm run 1.1 s.

2. The drawio renderer had no alias for ``adb_s`` / ``adb_serverless``
   / ``autonomous_database_serverless`` / ``refreshable_clone`` —
   Codex's spec used ``type: adb_s`` and the icon never resolved.
   Mapped them to ``autonomous_database`` (the canonical 7-cell
   stencil shipped by the OCI Toolkit), with ``adb_d`` as fallback.
   Same proactive expansion in the drawio side that the PPTX side
   already got (oci_goldengate, dynamic_routing_gateway, atp/adw,
   kms/secret, identity/iam, iac/terraform, oac/oic, kafka).

The persisted lookup index is committed so a fresh clone hits warm
performance on first ``make diagram-lookup``.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-25 23:33:40 -03:00
root
82d09aeee6 PPTX icon resolver: 50+ proactive aliases + menu-mode 'no code edits' rule
Diego flagged two patterns from the Codex session:

1. Aliases for natural-language slugs were missing — Codex authored
   ``type: refreshable_clone`` and ``type: oci_goldengate`` and the
   resolver returned None for both. Beyond fixing those two, expand
   the table proactively: 50+ slugs an SA / agent might naturally
   reach for (atp, alb, nlb, apigw, lambda, kms, secret, kafka,
   alarm, email, identity, iam, iac, terraform, oac, oic, language /
   speech / vision, rpc / lpg / cpe, health_check, tags, etc.) all
   mapped to canonical icon entries that exist in
   kb/diagram/oci-pptx-icons-index.json.

2. Codex was editing tools/oci_deck_gen.py and the deck-spec while
   fulfilling a menu-driven option-2 request — going off the
   procedure to "fix" perceived bugs in the renderer. New rule in
   SKILL.md § What You Do NOT Do: when the user is in menu mode
   (options 1–14), the agent USES the existing tools, never modifies
   them. Tool gaps (missing aliases, broken paths) get surfaced as
   end-of-reply follow-ups for a separate developer-mode session.
   Two narrow exceptions kept: kb/field-findings/tracker.yaml via
   option 11, and writing customer spec/output YAML under examples/.

Codex copy auto-synced via the pre-commit hook.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-25 23:18:22 -03:00
root
0b6ca3b776 SKILL.md option 2: clarify cached .drawio vs examples/ as references
Diego flagged that Codex, when authoring an absolute_layout, fell
back to grepping ``examples/`` for AWS/OCI multicloud patterns even
though the procedure said not to. The reason was real: the lookup
tool returns a cached ``.drawio`` (canonical Oracle geometry) but
no canonical ``absolute_layout.yaml`` template, so the agent had no
YAML scaffold to copy the spec shape from.

Tighten the rule rather than ban it outright:

  • Cached ``.drawio`` = GEOMETRY source. Container nesting,
    padding, AD/subnet placement, icon choices come from there.
  • ``examples/`` = YAML scaffold reference ONLY (which fields
    exist, how connections are authored, fontSize unit). Do NOT
    copy geometry numbers — those came from a different topology.

Rule of thumb baked into the SKILL: if you're copying (x, y, w, h)
from examples/, stop and copy from the cached .drawio instead.

(Codex copy auto-synced via the pre-commit hook installed earlier.)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-25 23:04:26 -03:00
root
357dd10670 SKILL.md sync: reject isolated edits to the .agents/ copy
Diego asked the right question: what if someone edits the Codex
side directly? Until now the sync was unidirectional (root →
.agents/) but the hook only fired when root SKILL.md was staged —
isolated .agents/ edits sneaked past the hook locally and only got
caught by CI's --check. A future ``make sync-skill`` would then
silently destroy them.

Hardened both layers to reject the asymmetric case at the moment
of the commit/PR:

- Pre-commit hook now classifies the staged set and REJECTS
  commits that stage .agents/skills/.../SKILL.md in isolation,
  with a step-by-step message: move the edit into root SKILL.md
  and re-stage. The hook still auto-syncs when root SKILL.md is
  staged.

- CI gate adds a second step (PR-only) that diffs the PR's base
  against head; if .agents/ moved but root SKILL.md didn't, fails
  with an actionable error before the build proceeds.

- README documents the direction explicitly: edits land in root
  SKILL.md; .agents/ is auto-generated; Codex-specific instructions
  belong in AGENTS.md, not in the SKILL.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-25 23:00:51 -03:00
root
fba2d23d5d SKILL.md sync: pre-commit hook + CI gate + make install-hooks
Three-layer defense to keep root SKILL.md (Claude Code) and
.agents/skills/oci-deal-accelerator/SKILL.md (Codex) byte-aligned.
Without this, Claude Code and Codex can drift and give the user
contradictory instructions — exactly the failure mode that produced
the workload-driven-mode incident on 2026-04-25.

Layers (least → most enforcement):

1. Local pre-commit hook (.githooks/pre-commit, opt-in via
   ``make install-hooks`` which sets core.hooksPath). When SKILL.md
   is staged, auto-runs scripts/sync-skill.py and stages the
   regenerated .agents/ copy in the same commit. Idempotent.

2. ``make install-hooks`` target + a tip line in ``make venv``'s
   output so any new clone discovers the hook setup.

3. CI gate (.gitea/workflows/skill-sync.yaml) on every push/PR
   touching SKILL.md or the .agents/ copy. Runs
   ``scripts/sync-skill.py --check`` and fails the build on drift.
   Catches anyone who skipped the hook.

README documents the rationale and the three layers.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-25 22:58:33 -03:00
root
d86adaf7cc Diagram procedure: forbid workload-driven shape, warn at runtime
The Codex session showed why the workload-driven mode is the wrong
default. Codex authored a spec under
``tenancy → regions → compartments → services`` (the documented
"workload-driven" mode), generated two .drawio files, and reported
success. The output was unusable: services rendered as colored
rectangles with text instead of OCI icon stencils, connector text
went into the edge value (forbidden by the connector-label rule),
and the spec validator never ran because it only fires on
``absolute_layout`` blocks.

Diego: "los drawio son horribles, por que sucede eso?".

Three persistent fixes:

1. SKILL.md option 2 now says ``absolute_layout`` is REQUIRED for
   step 3, calls out workload-driven explicitly as forbidden, and
   explains *why* (no stencils, no validator).

2. docs/skill/output-formats.md § Diagram modes is rewritten — mode
   1 is ``absolute_layout`` (REQUIRED), mode 2 is workload-driven
   (DEPRECATED, back-compat only). Removes the "two acceptable
   shapes" framing that let Codex pick the wrong one.

3. ``oci_diagram_gen.py`` now prints a loud stderr WARNING when a
   spec takes the workload-driven path, naming the procedure docs.
   Catches any agent that skipped reading SKILL.md before generating.

Codex copy synced via ``make sync-skill``.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-25 22:54:03 -03:00
root
a1ad3a6fa1 SKILL.md option 2: explicit format question + numbered procedure steps
A Codex session showed the gap: option 2's prose asked the user to
describe the architecture but only mentioned the output formats in
passing ("if you want X / if you want Y"), so the agent never asked
which format(s). Codex also skipped the reference-architecture lookup
and went straight to grepping ``examples/`` for pre-existing specs —
``examples/`` is previous user output, not the authoritative Oracle
catalog.

Two persistent fixes for any agent (Claude Code, Codex, Cursor, …):

1. Option 2 now asks two explicit questions in one message and waits
   for both answers before doing anything: (1) describe / paste spec,
   (2) pick output format(s) — drawio, native PPTX, or both.

2. The procedure is restated as a numbered list directly under
   option 2 (no longer a single-sentence reference to
   docs/skill/output-formats.md). Step 1 explicitly says use
   ``archcenter_pattern_lookup.py`` against the catalog and explicitly
   forbids using ``examples/`` as a reference source.

Synced to the Codex copy at .agents/skills/oci-deal-accelerator/SKILL.md
via ``make sync-skill`` so both agents see the same instructions.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-25 22:49:47 -03:00
root
a0a059887a Deck generator: honor output.render_standard_sections, fix principles overlap
Two bugs flagged on the MySQL HeatWave HA example (2026-04-25 round 5):

1. ``render_standard_sections: false`` under the ``output:`` block was
   silently ignored — the generator only checked the top-level key.
   Result: every spec that put the flag where the docs suggest got the
   full standard deck PLUS the custom slide, producing a duplicated
   "Architecture Overview" + dedicated diagram slide. Now the
   generator honors both locations.

2. Architecture Principles slide allocated only 0.4" per bullet —
   exactly one 11pt line. Wrapping principle summaries (e.g. D-03
   Use-Case Fit's 125-char text) overflowed into the next bullet's
   slot, visually overlapping D-02. Diego: "D-03 esta superpuesto a
   D-02, lo mismo pasa en otras columnas". Bumped per-item height to
   0.95" — fits 2-3 wrapped lines with breathing room.

3. PPTX rasterizer (oci_pptx_render.py) gained word-wrap so the
   local PNG preview matches what real PowerPoint draws. Without it,
   long text rendered on a single line off the column and the
   principles fix looked broken in preview when it was actually fine
   in PowerPoint.

Persistent: all three fixes apply to every deck the skill generates.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-25 22:44:40 -03:00
root
68d1753a74 Spec validator: padding on all 4 edges + connector-over-label check
Closes the gap between what the validator catches and what Diego
flagged on the MySQL HeatWave HA example (2026-04-25 round 4):

- CONTAINER_PADDING_VIOLATION now checks all four edges (top / bottom /
  left / right). Previously only bottom — DB Subnet's left/right edges
  touching the AD borders went unflagged.

- CONNECTOR_OVER_LABEL now runs at SPEC level (was post-render drawio
  only). Catches "Network Load Balancer label sits below the arrows so
  the arrows cross it" before either renderer emits anything; covers
  the PPTX path too.

  Implemented via Liang-Barsky line-rect clipping on every connector
  segment vs every free-floating label bbox.

Renderer policies persist for every new diagram (bent connectors,
icon-group preference, mysql aliases). Spec-level rules are now
enforced earlier and on both render paths, so a spec authored against
the procedure will pass before any artifact is produced.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-25 22:11:02 -03:00
root
3fb832e578 PPTX connectors: emit native bentConnector2/3/5 instead of disjoint lines
Spec authors hand the renderer a polyline like
``points: [[210,280],[400,280],[700,130]]``. The previous code emitted
one ``prst="line"`` shape per segment, so the elbow was two separate
straight lines that PowerPoint cannot recognise as a connected path.

The OCI template (kb/diagram/assets/OCI_Icons.pptx) uses native
PowerPoint bent connectors instead — 98 ``straightConnector1`` plus
22 ``bentConnector2/3/5`` plus 15 ``line`` across 48 slides. Match
that convention:

  • 2 points  → straightConnector1 (one segment, unchanged)
  • 3 points  → bentConnector2     (one elbow)
  • 4 points  → bentConnector3     (S-shape, two elbows)
  • 5+ points → bentConnector5     (four elbows)

The rasterizer (oci_pptx_render.py) now also understands bentConnectorN
so the local PNG preview matches what real PowerPoint draws — without
this it rendered every connector as one straight diagonal regardless of
the prst.

Persistent: applies to every absolute_layout connector for every spec,
not a per-case patch.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-25 21:49:39 -03:00
root
e384e627d1 PPTX icon resolver: prefer full icon group over text-strip variant
OCI_Icons.pptx ships both a full icon group (tag=grpSp, ~0.7" tall)
and a tiny "label strip" (tag=sp, ~0.2" tall) under the same slug for
many services. The previous resolver picked whichever came first in
the index, which for 'mysql' returned the text strip — so the PPTX
diagram showed a label-only shape instead of the dolphin/HeatWave
icon, while drawio rendered the proper stencil.

Two fixes, both persistent (apply to every icon family, not just MySQL):

- TYPE_TO_ICON for mysql/heatwave now lists 'mysql_heatwave' (the
  grpSp) before 'mysql' (the strip).
- _select_preferred_ref now filters viable refs to those that are
  either grpSp/pic OR have a bbox ≥0.4"x0.4" — text strips fall out
  before the scoring function runs.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-25 21:42:21 -03:00
root
e5a1959585 Diagram tooling: make targets, CI gate, LLM-rewrite hook, refresh docs
Implements points 3–8 of the post-procedure follow-up.

- Make targets: diagram-lookup, diagram-validate-spec, diagram-spec-audit,
  archcenter-descriptions-refresh, archcenter-smoke. Promotes the new
  tools out of "remember the CLI" into discoverable build-automation.
- .gitea/workflows/diagram-validators.yaml — runs spec validator across
  every absolute_layout spec on push/PR, plus a drawio re-render smoke
  test on the canonical example. Hard fail blocks merges.
- archcenter_pattern_lookup --llm-rewrite — opt-in (ANTHROPIC_API_KEY
  env var, mirroring DRAWIO_EXE pattern). Rewrites natural-language
  queries into canonical OCI terminology before scoring; falls back to
  the original query on any error.
- diagram_spec_validator — documents the policy on legacy archcenter
  reproductions: LABEL_NEAR_PARENT_EDGE stays a warning so verbatim
  reconstructions don't lose pixel-fidelity from cosmetic edits.
- README — documents the asset refresh procedure (downloader +
  description fetcher are idempotent, refresh quarterly).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-25 21:37:28 -03:00
root
b30a4f0d32 Diagram generation: ref-arch-driven procedure + spec validator + KB enrichment
The diagram path now follows a documented standard procedure (lookup
the closest Oracle Architecture Center reference → confirm components
→ author absolute_layout → spec validator → render → visually verify)
and ships persistent guardrails so layout regressions can't recur.

Persistent procedure changes (apply to all users, all sessions):
- tools/diagram_spec_validator.py — geometry checks (CONTAINER_TOO_THIN,
  CONTAINER_PADDING_VIOLATION, LABEL_OVERFLOW_PARENT) run BEFORE either
  renderer (drawio + PPTX). Catches the subnet-collapse / label-overflow
  bugs that the post-render drawio validator missed.
- tools/oci_diagram_gen.py + tools/oci_pptx_diagram_gen.py — call the
  spec validator before emitting any output. Adds mysql / mysql_heatwave
  type aliases.
- tools/archcenter_pattern_lookup.py — scores against cached page
  descriptions (not just the 1-line summary), supports --queries for
  multi-fragment composition, and applies synonym expansion via
  kb/architecture-center/synonyms.yaml so "LB HA cross AD" matches
  "load balancer high availability availability domain".
- kb/architecture-center/synonyms.yaml — canonical synonym table
  (load balancer, autonomous database, data guard, …) used by the
  lookup scorer.

KB enrichment:
- tools/archcenter_description_fetcher.py + 121 cached _description.md
  under kb/diagram/assets/archcenter-refs/<slug>/. Removes the runtime
  dependency on docs.oracle.com when authoring specs and feeds the
  pattern-lookup scorer.
- 110+ cached .drawio / .svg / .png references for offline reuse,
  plus the OCI Toolkit v24.2 import (kb/diagram/assets/oci-toolkit-drawio).

Documentation:
- docs/skill/output-formats.md — new "Standard diagram-generation
  procedure (MANDATORY)" + geometry rules + the new validator entry.
- SKILL.md option 2 — references the mandatory procedure.
- README.md — describes the spec validator, archcenter_pattern_lookup
  and description fetcher, and updates the KB-health table.

Tooling that backs the procedure (cumulative across recent sessions):
tools/archcenter_case_runner.py, archcenter_batch_driver.py,
archcenter_zip_downloader.py, drawio_visual_validator.py,
drawio_fidelity_eval.py, harvest_drawio_icon.py, import_oci_library.py,
oci_pptx_diagram_gen.py, oci_pptx_render.py, refresh_pptx_icon_index.py.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-25 21:15:21 -03:00
root
2491c38d4b Fail-fast and log HTTP response on PR/issue creation
All checks were successful
Deploy Skill to OCI / deploy (push) Successful in 26s
KB Health Check / check-links (push) Successful in 58s
Previous curl calls ignored exit codes — PR/issue creation was silently
failing (branch got pushed but no PR/issue landed) while the step reported
green. Now each curl captures the response body and HTTP status, prints
both for debugging, and exits non-zero if status != 201.

Also dropped the labels field from the issue payload — Gitea rejects
issue creation when referenced labels don't exist in the repo, which
may have contributed to the silent failure. Labels can be added
manually post-creation.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-24 17:45:12 -03:00
d9b1bb52a4 update ADB serverless KB for AI Lakehouse workload 2026-04-24 15:50:05 -03:00
root
9fbe05a6a5 Use per-run branch name to avoid push collisions
All checks were successful
Deploy Skill to OCI / deploy (push) Successful in 19s
Prior run pushed automation/sku-refresh-2026-04-24 successfully but
failed before opening the PR (issue-creation bug, now fixed). On the
next run, main has moved, so a new commit on the same branch name has
a different parent → non-fast-forward rejection.

Append ${{ github.run_number }} to make the branch unique per workflow
invocation. Orphan branches left behind can be cleaned up after their
PRs are merged/closed.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-24 12:45:57 -03:00
root
9b4d04cf34 Make discover count machine-readable for CI parsing
All checks were successful
Deploy Skill to OCI / deploy (push) Successful in 25s
The workflow's grep-on-free-text approach was fragile: local run correctly
extracted 162, but in the CI run the 'Open issue' step was skipped, meaning
new_count ended up as 0 after parsing. Likely causes: stdout buffering,
color codes, or shell differences between local and the Gitea runner's
shell.

Fix: tools/refresh_sku_catalog.py --discover now emits a deterministic
last-line marker `DISCOVER_MISSING_COUNT=<n>`. The workflow parses that
with sed (anchored, unambiguous) instead of the human-facing summary
line. Also added a diagnostic echo so the parsed value shows up in CI
logs for future debugging.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-24 12:43:06 -03:00
root
30394ece48 Pin upload-artifact to v3 for Gitea Actions compatibility
All checks were successful
Deploy Skill to OCI / deploy (push) Successful in 21s
Gitea Actions runner does not support actions/upload-artifact v2.0.0+
(error: "@actions/artifact v2.0.0+, upload-artifact@v4+ and
download-artifact@v4+ are not currently supported on GHES").

The v4 release switched to a new artifact API that only GitHub-hosted
runners implement. v3 still uses the v1 API and works on Gitea /
self-hosted / GHES runners.

Downgraded in both sku-catalog-refresh.yaml and kb-health.yaml.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-24 12:31:58 -03:00
root
480c4bca52 Fix Python setup in Gitea Actions workflows
All checks were successful
Deploy Skill to OCI / deploy (push) Successful in 25s
The oci-mcp-runner uses node:20-bookworm which runs as root and does
NOT ship with sudo installed. Our workflows used 'sudo apt-get' → step
failed with 'sudo: command not found' (exit 127) on first invocation
of sku-catalog-refresh.yaml.

Fix both affected workflows (sku-catalog-refresh + kb-health):
- Drop the `sudo` prefix (we're already root).
- Install Python deps via apt packages (python3-requests, python3-yaml,
  python3-bs4) instead of pip. Avoids PEP 668 / externally-managed
  environment error on Debian 12 and is faster/cacheable by the runner.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-24 12:24:35 -03:00
root
433b08071b Use auto-provisioned GITHUB_TOKEN in SKU refresh workflow
All checks were successful
Deploy Skill to OCI / deploy (push) Successful in 30s
Switch from manually-configured secrets.GITEA_TOKEN to the auto-provisioned
secrets.GITHUB_TOKEN that Gitea Actions creates per run. Scoped to the repo,
rotates per workflow run, no manual config needed.

Added explicit permissions block (contents:write, pull-requests:write,
issues:write) so the ephemeral token has the scopes required to push a
branch, open the PR, and open the issue for new SKUs.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-24 11:51:00 -03:00
root
874d40d38a Improve SKU catalog hygiene and BOM accuracy
All checks were successful
Deploy Skill to OCI / deploy (push) Successful in 21s
- refresh_sku_catalog.py: add --discover to report API SKUs missing from
  catalog, filtered to already-curated serviceCategory values. Auto-runs
  at end of --validate and --refresh so gaps surface on every maintenance
  pass. First run found 162 missing SKUs (Blackwell GPUs, X12 Ax compute,
  VMware reserved tiers, WebLogic-on-OKE, Analytics/OIC BYOL).
- oci_bom_gen.py: fix Cost % column being blank. Back-fill was gated on
  formula detection but data rows write raw numbers, so the predicate
  never matched. Now tracks data_item_rows explicitly.
- .gitea/workflows/sku-catalog-refresh.yaml: monthly automation (1st at
  09:00 UTC). Auto-refresh prices → push branch + open PR; detect new
  SKUs → open issue with labels. Gated on secrets.GITEA_TOKEN.
- kb/pricing/oci-sku-catalog.yaml: add B95714 / B95715 (Autonomous ATP
  Dedicated ECPU, LI + BYOL) — canonical SKUs for ADB-D pricing.
- kb/services/compute.yaml: add X12 family (VM.Standard4.Ax.Flex,
  BM.Standard4.Ax.120), E6.Ax and A4.Ax variants. Verified against
  docs.oracle.com computeshapes.htm. Bump last_verified + changelog.
- templates/bom-spec.yaml: document 730 hrs/month convention as default
  (= real annual billing / 12; 744 overstates by 1.92% on 12-month TCO).
- Makefile: new 'make sku-discover' target.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-24 11:40:53 -03:00
root
a22711c065 Update ExaCS X11M KB with authoritative datasheet figures
All checks were successful
Deploy Skill to OCI / deploy (push) Successful in 30s
Source: ADB-D X11M Datasheet v1.0 (Jan 2025), Table 1.

- Add HC storage variant (default): 80 TB usable disk/SS, 264 TB raw, 1.25 TB
  XRMEM + 27.2 TB flash cache per SS. Keep EF variant (52.5 TB usable/SS).
- Add x11m_elastic_base (2 DB + 3 SS): 240 TB total usable disk, 192 TB Max
  DB Size no-backup (what OCI Cost Estimator caps at), 96 TB with backup.
  Include performance metrics (5.6M read IOPS, 300 GB/s flash bw, etc.).
- Add x11m_base_system as distinct SKU: fixed-spec, non-expandable, 192
  ECPUs / 73 TB usable disk / 10 GbE — not the same as elastic 2+3.
- Replace misleading rack_configurations table (mixed X9M figures) with
  elastic per-server model; 'quarter/half/full rack' noted as legacy.
- Add pricing verified against OCI Cost Estimator 2026-04-23: DB and SS at
  \$2.9032/hr each; base config \$10,800/month excluding licenses.
- Add gotcha exacs_x11m_hc_vs_ef: default quotes to EF without
  justification; HC serves hot data from flash cache at same latency and
  far better \$/TB.
- Document the three distinct storage figures (Total Usable Disk vs Max DB
  Size no-backup vs with-backup) to avoid customer confusion.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-24 10:02:42 -03:00
root
9d5cda8986 Fix BOM workbook monthly totals
All checks were successful
Deploy Skill to OCI / deploy (push) Successful in 21s
2026-04-23 10:54:07 -03:00
root
6de2251e00 Fix slide and diagram bugs in deck/diagram generators
Service Tiering slide no longer falls back to the workload `name`
field for the tier label, which previously rendered "Bronze Bronze"
when the spec only carried tier names. Uptime/RTO/RPO now fill from
tier defaults when the spec omits them.

Architecture Principles slide enriches caller-supplied items with
name + summary from the KB when only the principle id is given,
instead of rendering bare placeholders like "P-01 P-02".

Architecture Overview slide auto-builds a two-region visual when the
proposal spec names a `dr_region` but doesn't pre-render `architecture.visual`,
so DR is no longer dropped from the deck.

Diagram generator gained a region-level `local_dr` flag that adds a
"Local DR Standby" dormant node inside the region, and now auto-wires
an "RPC (Remote Peering)" edge between DRGs when the spec defines
two or more regions with DRGs but no manual peering connection.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-23 00:35:10 -03:00
root
77298a471c Read DR region from spec + make operational_raci handler tolerant
All checks were successful
Deploy Skill to OCI / deploy (push) Successful in 19s
Architecture Overview slide was rendering the DR region with a fallback
label (e.g. "DR STANDBY" with no region name) because _adapt_flat_spec()
only consulted disaster_recovery / architecture.dr — it never looked at
the dr_region / tenancy.regions fields the MCP actually emits. The
adapter now discovers the primary and DR regions from:

- spec.primary_region / spec.region / architecture.primary_region
- spec.dr_region / spec.secondary_region / architecture.dr_region
- tenancy.regions[] entries (strings or {region, role} dicts, with role
  in {primary, hub, prod, production} vs {dr, standby, secondary,
  failover})

When both regions are known, the adapter emits an architecture.visual
with two labeled region blocks so the DR region renders with its real
name (e.g. "mx-monterrey-1 [DR STANDBY]") instead of the placeholder.
If the spec already supplies architecture.visual or diagram_path, those
are preserved instead of overwritten.

Operational RACI slide kept being skipped for payloads that passed
operational_raci in a non-canonical shape. The from_spec handler now
accepts:

- Top-level key aliases: operational_raci, raci, operations_raci
- Bare string ("fully_managed") → loads KB defaults for that model
- List of dicts → used directly as raci_items
- Dict with raci_items / items / activities and model / engagement_model
- Empty raci_items → falls back to KB defaults by model

The flat adapter also now respects a user-supplied operational_raci
instead of overwriting it with the co_managed default. Verified:
operational_raci: "fully_managed" renders the Fully-Managed RACI table
with 18 activities; bare flat MCP payload still gets the 13-activity
co_managed default.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-22 14:32:25 -03:00
root
6209907a63 Enrich MCP flat-spec adapter to emit full ECAL deck content
All checks were successful
Deploy Skill to OCI / deploy (push) Successful in 17s
Regression after the closing-slide removal surfaced a separate bug:
_adapt_flat_spec() only emitted metadata + summary + cost, so decks
generated from the MCP flat payload collapsed to 3-5 slides of title +
summary. The deck generator's ECAL sections (service_tiering,
architecture_principles, environment_catalogue, operational_raci, etc.)
all check top-level spec keys the adapter never produced.

Adapter now also emits, from the flat payload + kb/patterns defaults:
- service_tiering from services[] (preserves any tier/uptime/rto/rpo)
- architecture / architecture_principles (ECAL "always" picks)
- ha_dr tiers derived from the distinct service tiers present
- security baseline (IAM/network/database/monitoring controls)
- environment_catalogue (Prod/Pre-Prod/Dev-Test, +DR if enabled)
- operational_raci co_managed default from the KB
- next_steps skeleton

Flat MCP payload now renders 11 content slides instead of 3-5, and the
proposal-spec.yaml path (non-flat) is unchanged — still 16 slides for
examples/proposal-spec.yaml.

Also documents the new data_services SKUs in docs/bom-cookbook.md as
Recipe 4 (BDS/DS/DF) so MCP payloads can use the catalog codes directly.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-22 13:13:42 -03:00
root
fc550c14bb Drop closing blanks, honor primary_driver, catalog data-services SKUs
All checks were successful
Deploy Skill to OCI / deploy (push) Successful in 23s
- oci_deck_gen / oci_bizcase_gen: stop appending the Thank You + Oracle
  logo-only closing slides at the end of every generated deck.
- oci_bizcase_gen: Business Drivers now reads primary_driver at the
  drivers-level and at the top level, and renders natural-language values
  verbatim (only snake_case enum tokens are Title-cased). A spec-provided
  drivers.items / additional / secondary list replaces the hardcoded
  "Financial Impact of Inaction" + "Operational Impact" fallback cards.
- oci-sku-catalog.yaml: add data_services category with the four real
  Big Data Service SKUs (B91128/B91129/B91130/B93555) plus EST-DS-NOTEBOOK,
  EST-DS-MODEL, EST-DF-SPARK as estimate placeholders (OCI Data Science /
  Data Flow have no dedicated SKUs in the public pricing API — they are
  billed via the underlying compute shape).
- oci_bom_gen: resolver now prints a stderr warning and tags estimate/
  unknown line items with an explicit note; the xlsx writer renders
  "other" category items under an "Uncategorized — confirm SKUs" section
  at the end instead of silently dropping them.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-22 12:34:37 -03:00
root
490072a4b7 Accept flat-spec input aliases across generators
All checks were successful
Deploy Skill to OCI / deploy (push) Successful in 20s
Harden bizcase, bom, deck, and diagram generators to tolerate payload
shape variants (metadata/cover/summary/line_item aliases, current_state
as string, alternate pillar keys) so MCP and CLI flat specs render
consistently. Add input-alias tests per generator.

Also loosen KB governance tests to handle multi-document service YAMLs
with optional changelogs, untrack the customer demo output under
examples/output-demo-pharma-mx/ (matches .gitignore), and ship an
ADB-S vs Aurora 500GB sample deck.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-21 10:22:14 -03:00
root
bcb16795d1 Add BOM cookbook to shortcut SKU mapping for common patterns
All checks were successful
Deploy Skill to OCI / deploy (push) Successful in 24s
Codex sessions burn 10+ tool calls grepping kb/field-knowledge and the SKU
catalog to map standard requirements (ExaCS X11M BYOL, ADB-D, ADB-S + block
+ FastConnect) to the 4-5 SKUs the MCP BOM tools need. Bake the recipes
into docs/bom-cookbook.md so the LLM can skip the exploration loop for
well-known patterns, and link it from SKILL.md between Output Generation
and Knowledge Base (same progressive-disclosure pattern the other docs use).

Recipe 2 (ADB-Dedicated) explicitly calls out the infra-SKU overlap with
ExaCS — one of the specific traps the exploration loop keeps hitting.
Catalog-fallback note keeps the cookbook honest when a requirement does
not match.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-20 15:29:20 -03:00
root
e57ab57b48 Accept MCP flat payload in deck generator to stop silent-blank decks
generate_deck on the MCP server passes a flat spec (customer_name, title,
workload_type, services, cost_summary, ...) — but from_spec only understood
the proposal-spec YAML shape (metadata/summary/architecture/...). With no
matching keys, only the title and closing layouts rendered, both populated
with empty strings, producing a deck that looked blank.

Detect the flat shape in from_spec and adapt it into the proposal-spec
fields that the existing slide builders already consume. Title, summary
(target state + current-state bullets) and cost slides now render from
whatever the MCP tool sends; the richer proposal-spec path is untouched.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-20 15:27:44 -03:00
root
dc4abf3774 Install Python via apt instead of setup-python in KB health workflow
All checks were successful
Deploy Skill to OCI / deploy (push) Successful in 24s
actions/setup-python@v5 fails on the arm64 Gitea runner with "version '3.12'
with architecture 'arm64' was not found" — the prebuilt Python manifest
doesn't cover this runner/arch combo. Use the system python3 from apt; the
link-check scripts don't require 3.12 specifically.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-20 11:00:56 -03:00
root
01baff1f5b Ship Oracle FY26 PPTX template in repo so MCP server finds it
The 13MB template was caught by the global *.pptx ignore rule, leaving
generate_deck failing with "Template not found" in any environment that
builds from a fresh clone (MCP server container included). Whitelist it
alongside the existing sample-output exception.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-20 10:57:02 -03:00
root
aaf0ecc548 Add "New user? Start here" section with MCP setup instructions
Some checks failed
Deploy Skill to OCI / deploy (push) Successful in 18s
KB Health Check / check-links (push) Failing after 50s
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-15 12:40:24 -03:00
root
7cfb5dce2d Route skill pre-flight through Makefile to avoid hardcoded Python
All checks were successful
Deploy Skill to OCI / deploy (push) Successful in 18s
Codex users hit `python: command not found` on the welcome-flow
pre-flight because SKILL.md called `python tools/kb_freshness.py`
directly. Any hardcoded version (python/python3/python3.12) breaks
for somebody — users have 3.8, 3.10, 3.11, 3.12 in the wild.

Fix: channel all skill-initiated Python calls through `make` targets
so the Makefile's single $(PYTHON) variable (auto-detected venv >
3.12 > 3.11 > 3.10 > python3) is the only place Python resolution
lives.

- Makefile: add `kb-check` target emitting JSON for the skill pre-flight
- SKILL.md + .agents/skills/.../SKILL.md: call `make kb-check` and
  `make freshness-refresh` instead of bare `python tools/...`
- CLAUDE.md: same fix in the Welcome Flow instructions

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-14 12:06:15 -03:00
root
98cb570e96 Portable setup: venv, Claude Code + Codex project config
All checks were successful
Deploy Skill to OCI / deploy (push) Successful in 19s
Makes the skill work on any laptop regardless of installed Python version
or LLM harness, without per-command approval prompts or missing deps.

- Makefile: auto-detect Python (venv > 3.12 > 3.11 > 3.10 > python3)
  and new `make venv` target that picks the best Python at creation time
- .claude/settings.json: project-level Claude Code permissions
  (Write to examples/ and output/, common bash commands pre-authorized)
- .codex/config.toml: Codex sandbox config with network_access=true,
  approval_policy=never, sandbox_mode=workspace-write — fixes
  `make venv` failing with "No matching distribution" in Codex
- CLAUDE.md / AGENTS.md: document the `make venv` flow, drop all
  hardcoded python3.12 references in favor of make targets
- CLAUDE.md: add Karpathy-style coding guidelines (think before coding,
  simplicity first, surgical changes, goal-driven execution)
- .gitignore: add .venv/

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-14 12:03:46 -03:00
root
20be7c297e Diagram generator calibrated from 37 Oracle ref architectures + KB health tooling
All checks were successful
Deploy Skill to OCI / deploy (push) Successful in 25s
Diagram generator (oci_diagram_gen.py):
- Icon sizing calibrated: 63px target height, 45px min width (from 37 Oracle
  Architecture Center .drawio files: 12,617 cells, 234x 63x63 service icons)
- Auto-sizing: containers grow from content, never overflow (validated by script)
- DRG placed outside VCN, inside region (Oracle hub-spoke pattern)
- Gateway stacking uses _calc_service_block_h to prevent label overlap
- Edge labels: mxGeometry offset injection (15-20px away from midpoint)
- Tight icon groups: edges connect to visible icon, not invisible wide group
- VCN/subnet dash pattern corrected to "4 2", stroke to #aa643b (Oracle ref)
- jettySize=auto, dual connection merge, container=1;collapsible=0

New tools:
- scripts/validate-diagram.py: checks icon sizes, overlaps, container overflow
- tools/refresh_arch_catalog.py --check-links: HTTP HEAD check on all 123 URLs
- .gitea/workflows/kb-health.yaml: weekly link + freshness check (Mon 8am UTC)
- kb/diagram/oracle-ref-measurements.md: exact measurements from Oracle refs
- kb/CHANGELOG.md: KB change log shown in welcome banner

SKILL.md:
- Pre-flight: python→python3, silent errors, git fetch check for local users
- Changelog banner in welcome flow
- Anti-hallucination guardrails (from earlier commit, carried forward)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-14 09:22:33 -03:00
root
886c09ad10 Improve diagram generator: auto-sizing, DRG placement, edge labels
6 improvements based on Oracle Architecture Center reference diagrams:
1. Edge label offset — labels pushed 15px away from edge midpoint via
   mxGeometry offset injection, prevents overlap with icons
2. Auto-sizing containers — regions, VCNs, tenancy calculate dimensions
   from content instead of using fixed sizes (DR region: 540→260px)
3. jettySize=auto on all edges — clean stubs leaving/entering shapes
4. Dual connection merging — duplicate from/to pairs merged into single
   edge with combined label (e.g., dual FastConnect)
5. DRG placed OUTSIDE VCN, INSIDE region — matches Oracle ref arch
   pattern where DRG is the central hub between external and VCN
6. container=1;collapsible=0 injected into container XML styles

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-14 02:01:09 -03:00
root
4660b93a98 Trigger CI workflow test
All checks were successful
Deploy Skill to OCI / deploy (push) Successful in 21s
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-13 19:48:05 -03:00
root
9db2e59e5b Fix deploy workflow: replace rsync with tar+scp for runner compatibility
Some checks failed
Deploy Skill to OCI / deploy (push) Failing after 9s
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-13 19:46:13 -03:00
root
f6f355c465 Add header comment to deploy workflow (trigger CI test)
Some checks failed
Deploy Skill to OCI / deploy (push) Failing after 8s
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-13 19:44:41 -03:00
root
32d82df197 Add Gitea CI/CD workflow for auto-deploy to OCI on push to main
Some checks failed
Deploy Skill to OCI / deploy (push) Failing after 47s
Syncs skill files via rsync over SSH, restarts MCP containers, and waits
for healthy status. Requires OCI_SSH_KEY and OCI_HOST secrets in Gitea.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-13 18:13:03 -03:00
root
4e80528d1e Add anti-hallucination guardrails and structured data intake to SKILL.md
Fixes two issues: (1) diagrams adding unrequested components (EBS, WAF, Vault,
Monitoring, etc.) by replacing vague "implied dependencies" with a closed
whitelist of 6 technical dependencies and making pre-generation review mandatory
with 3 sections (REQUESTED/TECHNICAL/OPTIONAL). (2) Unstructured data consumption
by adding mandatory Extraction Receipt (CONFIRMED/INFERRED/MISSING), source
tracking in workload profiles, and completeness gate per engagement tier.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-13 18:02:08 -03:00
root
635863502d Fix diagram edge routing: remove elbow=vertical, add jumpStyle=arc
Root cause: elbow=vertical conflicted with orthogonalEdgeStyle + port
constraints, causing arrows to route backwards and cross content.

Changes to oci_diagram_gen.py (generic, all diagrams):
- Remove elbow=vertical from edge base style
- Use edgeStyle=orthogonalEdgeStyle explicitly in extra_style
- Add jumpStyle=arc;jumpSize=8 — crossing edges show arc, not overlap
- Remove drawpyo waypoints="orthogonal" (now controlled via extra_style
  to avoid style merging conflicts)
- Vertical edges with labels: align=left so text doesn't overlap icons
- Regression tested with PharmaCorp (dual-region) and MELI (single-region)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-13 14:22:52 -03:00
root
b4edc2914d Fix diagram generator: auto-port detection for clean edge routing
Edges now auto-detect exit/entry ports based on relative positions of
source and target services. Uses absolute coordinates from the layout
engine to determine whether connections should exit right→left,
top→bottom, etc.

- exitX/exitY/entryX/entryY added to every edge style
- 1.5x threshold favors vertical routing over horizontal when positions
  are diagonal — matches Oracle ref arch top-down subnet flow
- Eliminates crossing arrows in multi-subnet, multi-region diagrams
- Verified with both PharmaCorp (dual-region) and MELI (single-region)

Generic code fix — applies to all diagrams, not just this spec.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-13 11:03:18 -03:00
root
a0feea08bb Fix diagram generator: gateway-aware layout + edge type styling
oci_diagram_gen.py auto-layout improvements:
- Gateways now placed FIRST, vertically centered on VCN left edge
- Subnets offset RIGHT by gateway lane width to avoid overlap
- Gateway lane width auto-calculated from widest gateway + padding
- Network edges: teal color, thicker (2px) for visual hierarchy
- Internal edges: gray dashed for management connections
- Data edges: solid charcoal (unchanged, default)

These are generic code fixes — apply to any diagram spec, not just
the PharmaCorp demo. Verified with both PharmaCorp and MELI specs.

Also regenerated all PharmaCorp deliverables with prior fixes:
- Business case: PharmaCorp (was MELI), correct TCO/ROI/value schema
- BOM: verified SKUs from catalog, 45% global discount applied
- PDF: environment catalogue with new schema
- Diagram: clean layout with gateway offset

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-13 09:55:13 -03:00
root
214b1c518e Add opt13-bom.xlsx with 45% global discount applied
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-13 09:26:40 -03:00
root
8726f14512 Fix BOM: apply global discount_pct from metadata to all line items
oci_bom_gen.py from_spec now reads metadata.discount_pct as fallback
when individual line items don't specify a discount. This means
discount_pct: 0.45 in the spec metadata applies 45% to every SKU.

Previously, global discount was silently ignored — only per-item
discount fields were read (defaulting to 0.0).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-13 09:21:07 -03:00
root
cd718f8628 Regenerate BOM with verified SKUs (13 line items, ExaCS X11M + ADB-S + networking)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-13 09:16:30 -03:00
802 changed files with 455521 additions and 3804 deletions

View File

@@ -17,32 +17,54 @@ You follow the **Oracle ECAL framework** (Define → Design → Deliver) to prod
When the user starts a conversation without providing discovery notes or a specific request, present the welcome message and capability menu. When the user starts a conversation without providing discovery notes or a specific request, present the welcome message and capability menu.
### Pre-flight: KB freshness check ### Pre-flight checks
**Before showing the welcome message**, run `python tools/kb_freshness.py --check --json` and parse the JSON output. Behavior based on the result: Run these checks silently **before** showing the welcome message. **CRITICAL:** Never show command execution, tool output, or errors to the user. If any check fails, silently skip it and proceed to the welcome message. These checks are informational — they NEVER block the user.
- **`stale_count == 0`** → proceed directly to the welcome message. No banner. #### Check 1: KB changelog banner
- **`stale_count > 0` and at least one file has `refreshable: true`** → prepend this banner above the menu and ask the user inline:
Read the file `kb/CHANGELOG.md` and extract the **most recent date and first bullet point**. If the file exists and has entries, prepend a one-line banner above the welcome message:
```
📢 KB updated (<date>): <first bullet summary>
```
Example: `📢 KB updated (Apr 14): Diagram generator calibrated from 37 Oracle ref architectures`
If the file is missing or empty, skip — no banner.
#### Check 2: Local repo updates (git users only)
Run `git fetch --dry-run origin main 2>/dev/null`. If the output contains any text (meaning there are remote commits not yet pulled), prepend this banner:
```
📢 KB updates available — run `git pull` to get latest prices and fixes.
```
If the command fails (not a git repo, no network, MCP deployment), silently skip. This check is only relevant for users running the skill from a local git clone.
#### Check 3: KB freshness
Run `make kb-check 2>/dev/null` and parse the JSON output. Behavior:
- **`stale_count == 0`** → no banner.
- **`stale_count > 0` and at least one file has `refreshable: true`** → prepend banner and ask inline:
``` ```
⚠️ KB freshness: <N> file(s) outdated (oldest: <file> — <age_days>d). ⚠️ KB freshness: <N> file(s) outdated (oldest: <file> — <age_days>d).
<M> can be auto-refreshed (SKU catalog, Architecture Center). <M> can be auto-refreshed. Refresh now? [y/N]
Refresh now before showing the menu? [y/N]
``` ```
- If the user replies `y` / `yes` / `` → run `python tools/kb_freshness.py --auto-refresh`, wait for completion, then show the menu. - `y` / `yes` / `` → run `make freshness-refresh`, then show menu.
- If the user replies `n` / anything else → show the menu immediately, with a one-line compact reminder above it: `⚠️ <N> KB file(s) stale — run /freshness or python tools/kb_freshness.py --auto-refresh later.` - Anything else → show menu with one-line reminder: `⚠️ <N> KB file(s) stale — run make freshness-refresh later.`
- **`stale_count > 0` but no file has `refreshable: true`** (only manual files stale) → prepend a non-blocking informational banner above the menu, do NOT ask: - **`stale_count > 0` but no `refreshable: true`** → non-blocking info banner, then show menu directly:
``` ```
⚠️ KB freshness: <N> file(s) need manual review (oldest: <file> — <age_days>d). ⚠️ KB freshness: <N> file(s) need manual review (oldest: <file> — <age_days>d).
No automated refresh available — see kb/README.md for review process.
``` ```
Then show the menu directly. If `make kb-check` errors out (exit ≠ 0, missing make, missing Python, missing tool), **silently skip** — no error output, no banner, no mention of failure.
**Important**: this check is informational, not gating. If `kb_freshness.py` errors out (exit 2 or missing tool), silently fall back to showing the welcome message — never block the user on tooling failures.
### Welcome Message ### Welcome Message
@@ -63,10 +85,10 @@ Present these options as a compact numbered list. Each option has a bold title f
``` ```
DESIGN & PROPOSE DESIGN & PROPOSE
───────────────── ─────────────────
1. 📋 Full proposal — *notes → architecture + deck + diagram + costs* 1. 📋 Full proposal — *notes → architecture + deck + native PPTX diagram + costs*
2. 📐 Architecture diagram — *YAML or description → .drawio* 2. 📐 Architecture diagram — *description → .drawio or native PPTX*
3. 📊 Slide deck — *architecture → .pptx* 3. 📊 Slide deck — *architecture → .pptx with native OCI diagram*
4. 💰 Cost estimate — *services + sizing → PAYG vs BYOL* 4. 💰 Cost estimate — *quick PAYG/BYOL comparison while you scope (terminal + optional deck)*
VALIDATE & CHECK VALIDATE & CHECK
───────────────── ─────────────────
@@ -90,19 +112,63 @@ Present these options as a compact numbered list. Each option has a bold title f
SA TOOLS SA TOOLS
───────────────── ─────────────────
13. 📦 BOM generator — *services + quantities → .xlsx Bill of Materials* 13. 📦 BOM generator — *formal .xlsx artefact you send to the customer*
14. 📤 BOM for AppCA — *BOM → .xlsx ready to import into AppCA* 14. 📤 BOM for AppCA — *BOM → .xlsx ready to import into AppCA*
━━━━━━━━━━━━━━━━━━━━━━━ ━━━━━━━━━━━━━━━━━━━━━━━
Pick a number, or just describe what you need. Pick a number, or just describe what you need.
``` ```
### Example Direct Requests
If the user asks for examples, or skips the menu and writes a natural-language request, prompts like these map directly to the capabilities above:
- `Generame un diagrama nativo en .pptx, simple y prolijo, de esta arquitectura: usuarios externos -> load balancer público -> 2 VMs de aplicación en subnet privada -> Autonomous Database Serverless. Quiero que quede presentable para mostrar directo en PowerPoint. No me pidas YAML ni setup adicional.`
- `Generate a simple high-level integration diagram for this flow: Slack -> Oracle Integration Cloud (OIC) -> Jira Service Management -> My Oracle Support. Add clear Client, Oracle, and External layers. Use brand icons for Slack and Jira Service Management, and deliver both .drawio and .pptx.`
- `Generate a high-level architecture diagram for this scenario: 1 PostgreSQL in OCI Ashburn, accessed from GCP Virginia through interconnect. PostgreSQL connects internally to 1 Autonomous Database Serverless, which also has 1 refreshable clone in the same region but in a different AD. Deliver both .drawio and .pptx. Keep it simple, executive-friendly, and technically correct.`
- `Gere um BOM em USD para este cenário: PostgreSQL no OCI com 4 OCPU e 500 GB, ADB-S com 200 ECPU e 1 TB BYOL, 1 refreshable clone com o mesmo sizing e FastConnect de 1 Gbps. Aplique 11% de desconto, 12 meses, 24 horas por dia. Quero o arquivo .xlsx e um resumo claro do custo mensal e anual.`
### Behavior Rules ### Behavior Rules
- If the user picks **1**, ask: "Paste your discovery notes (meeting notes, emails, whatever you have)." - If the user picks **1**, ask: "Paste your discovery notes (meeting notes, emails, whatever you have)."
- If the user picks **2**, ask: "Describe the architecture you want to diagram, or paste a YAML spec if you have one." - If the user picks **2**, ask **two explicit questions** in one message and wait for both answers before doing anything else:
- If the user picks **3**, ask: "Describe the architecture or paste the spec. I'll generate the deck."
- If the user picks **4**, ask: "What services and sizing? (e.g., 'ADB-S 8 OCPU + 2 VMs + FastConnect')" ```
1. Describe the architecture you want to diagram (or paste a YAML spec if you have one).
2. Which output format(s) do you want? Pick one or more:
(a) .drawio — editable technical diagram
(b) .pptx — native Oracle-style PowerPoint diagram/slide
(c) both
```
After the user answers, **follow these steps in order — do NOT skip step 1**:
1. **Reference-architecture lookup.** Run `python tools/archcenter_pattern_lookup.py "<topology keywords>"` against `kb/architecture-center/catalog.yaml` (123 Oracle-curated entries with cached `.drawio` / `_description.md` / `_template.yaml` under `kb/diagram/assets/archcenter-refs/`). Pick the highest-scoring entry whose topology matches.
- **The cached `_template.yaml` is your YAML SCAFFOLD** — auto-extracted from the canonical `.drawio` by `tools/archcenter_drawio_to_template.py`. It carries Oracle's container geometry (region/vcn/ad/subnet bboxes), service positions, and edge waypoints in the `absolute_layout:` shape your spec uses. Copy it as the starting point, rename ids, fill in `type:` for services (the extractor leaves `type: TODO_identify` because the canonical icon TYPE is encoded in stencil bytes — pick the right alias from the renderer's TYPE_TO_ICON), and adapt to the customer's components. Lookup result surfaces it as `cached: yaml=<path>`.
- **The cached `.drawio` is the visual source of truth** if the template extractor missed something — open it (drawio.exe, the SVG companion, or the XML) for the canonical look.
- **Do NOT use `examples/` as a geometry source.** `examples/` is previous user output, not authoritative. The `_template.yaml` covers everything `examples/` was being abused for.
- **Lookup budget: max 2 queries — never loop.** If query 1 returns nothing convincing, run ONE refinement (broader phrasing or different keyword angle), then STOP. Re-querying the catalog 3+ times to find a "better" match is the dominant time-sink in this phase — the catalog has 123 entries indexed once; if two passes can't surface a topology match, none exists. Output of the lookup tool also surfaces a **`⚠ KNOWN GAP`** banner at the top whenever the query touches a documented gap (e.g. OCI-native services accessed FROM GCP via Cross-Cloud Interconnect, or OCI Cache/Redis/PostgreSQL as primary subject). When that banner appears, follow its **Recommended composition** verbatim instead of running more queries — it lists the primitives to combine. When NO gap banner appears AND no top-3 entry matches the topology, present the closest 3 to the user with: *"No exact ref-arch matches. Closest hits are X / Y / Z. I can either base the diagram on the closest of these (geometry transfers, service names don't), or compose from `<list specific slugs / patterns>`. Which?"* — let the user pick the chassis instead of guessing.
2. **Pre-generation review.** Confirm the component list with the user (REQUESTED + TECHNICAL DEPENDENCIES per the whitelist).
3. **Author the spec in `absolute_layout` shape** — this is REQUIRED. Do NOT use the legacy workload-driven shape (`tenancy → regions → compartments → services`); it does not resolve OCI icon stencils, does not run through the spec validator, and produces wireframe-looking output (rectangles with text instead of real OCI icons). Every container, service, label, and connection needs explicit `(x, y, w, h)`.
**Where to look up valid `type:` values for services:** the authoritative sources are (1) `TYPE_TO_ICON` in `tools/oci_pptx_diagram_gen.py` (PPTX path) and `ICON_TYPE_ALIASES` in `tools/oci_diagram_gen.py` (drawio path), and (2) the slug keys in `kb/diagram/oci-icons.json` (drawio) and `kb/diagram/oci-pptx-icons-index.json` (PPTX). Do NOT grep `examples/` for `type:` patterns to discover valid slugs — `examples/` are previous user outputs that may use stale or non-canonical slugs. Both renderer files and both index files are exhaustive and current.
**Newer OCI services without a toolkit icon** (OCI Cache with Redis / Valkey, OCI PostgreSQL, etc. — services GA after the v24.2 toolkit shipped): use the generic icon as the canonical fallback (Oracle's own ref archs do the same — they embed custom inline SVG over the generic icon). The renderer's alias tables already route `type: redis` / `cache` / `valkey` / `postgresql` to the generic `database` stencil. Pair with an explicit `label:` carrying the real service name (e.g. `label: "OCI Cache (Redis)"`). When Oracle ships a v25+ toolkit with these icons, update `kb/diagram/oci-icons.json` + the alias tables and the next render uses the real icon automatically.
4. **Spec validator runs automatically** before either renderer (`tools/diagram_spec_validator.py`). It runs ONLY on `absolute_layout` specs — that's another reason workload-driven is forbidden. Fix any errors before re-rendering.
5. **Render.** `oci_diagram_gen.py` for drawio, `oci_deck_gen.py` for PPTX.
6. **Visually verify.** `tools/oci_pptx_render.py` to rasterize, then read the PNG.
Full reference: `docs/skill/output-formats.md` § "Standard diagram-generation procedure (MANDATORY)".
- If the user picks **3**, ask: "Describe the architecture or paste the spec. I'll generate the deck with a native OCI PowerPoint diagram when the architecture is structured enough."
- If the user picks **4**, ask: "What services and sizing? (e.g., 'ADB-S 8 OCPU + 2 VMs + FastConnect'). License model — PAYG, BYOL, or both?"
Then follow the cost-estimate flow:
1. **Catalog first, web never.** `grep` [`kb/pricing/oci-sku-catalog.yaml`](kb/pricing/oci-sku-catalog.yaml) (auto-refreshed, authoritative) for the requested SKUs and consult [`docs/bom-cookbook.md`](docs/bom-cookbook.md) for copy-paste recipes (ExaCS X11M BYOL, ADB-Dedicated, ADB-S + Block, FastConnect, etc.). Use `kb/pricing/compute.yaml` for shape-level lookups. Do NOT reach for WebSearch / WebFetch / `oracle.com` for list prices — the catalog IS the source.
2. **Staleness gate.** Read `last_verified` at the top of the catalog. If >60 days stale, warn the user and offer `python tools/refresh_sku_catalog.py --refresh` before quoting. If <=60 days, proceed without web lookups.
3. **Catalog miss policy.** If a SKU is genuinely absent after `grep` (not "I didn't find it on first try"), state it explicitly, then run `python tools/refresh_sku_catalog.py --refresh` and re-grep. Only if a fresh catalog still doesn't surface it is `oracle.com/cloud/price-list/` an acceptable fallback — and cite the source URL next to the part number.
4. **Source extraction.** When the request references a customer artefact (`.pptx`, BOM, quote), extract the topology / sizing from the artefact first, list each scenario's components, then map to SKUs. Show the mapping (component → SKU) so the SA can audit it.
5. **Quote shape.** Per scenario list: SKU + product name + metric + list price USD + quantity + monthly subtotal. End with total $/month and total $/year. Cite the catalog's `last_verified` date in the output.
6. When both PAYG and BYOL are requested, present them side-by-side (same SKU rows, two price columns). Save the cost estimate to `examples/<customer>-cost-estimate.yaml` and present the formatted table in the terminal.
7. **Disclaimer (mandatory).** Read the `disclaimer:` field from `kb/pricing/oci-sku-catalog.yaml` and append it verbatim — as a footer line under the terminal table, and (if a deck is generated) as a final "Commercial Disclaimer" slide. Do NOT paraphrase or rewrite; the field already carries Oracle's sample-quote boilerplate plus the "reference only / no client-specific discounts" clauses. `tools/oci_bom_gen.py` already reads this field for BOM xlsx output.
8. **Deck verification (if a deck is generated).** Open the produced `.pptx` with `python-pptx` and assert: (a) slide count matches spec, (b) each slide's expected title is present, (c) chart types match what the spec asked for (e.g. `COLUMN_CLUSTERED`, `COLUMN_STACKED`), (d) the disclaimer slide is the last one. Print a one-line `deck OK: <N> slides, titles=[...]` summary so the SA can audit at a glance. Rasterizing to PNG via PowerPoint is not always available on Linux/WSL — structural validation is the floor, not optional.
- If the user picks **5**, ask: "Describe your architecture or paste the spec. I'll run the 5-pillar review." Then follow the WA review flow: - If the user picks **5**, ask: "Describe your architecture or paste the spec. I'll run the 5-pillar review." Then follow the WA review flow:
1. Parse input to build a workload profile YAML (flags) and architecture YAML 1. Parse input to build a workload profile YAML (flags) and architecture YAML
2. If input is a `.pptx` file, extract text content from all slides to infer architecture and workload context 2. If input is a `.pptx` file, extract text content from all slides to infer architecture and workload context
@@ -126,8 +192,9 @@ Pick a number, or just describe what you need.
6. Assess migration risks from `kb/field-knowledge/gotchas.yaml` and do-nothing risks 6. Assess migration risks from `kb/field-knowledge/gotchas.yaml` and do-nothing risks
7. Compare with alternatives using `kb/competitive/*` 7. Compare with alternatives using `kb/competitive/*`
8. Generate implementation roadmap based on engagement tier 8. Generate implementation roadmap based on engagement tier
9. Produce a 8-10 slide deck using Oracle FY26 template (`config/oracle-pptx-layouts.yaml` → `business_case` type) 9. Produce a 8-10 slide deck using Oracle FY26 template (`config/oracle-pptx-layouts.yaml` → `business_case` type), using a native OCI PowerPoint diagram when the architecture is structured enough
10. Output: business-case.pptx + business-case.yaml (reusable spec) 10. Output: business-case.pptx + business-case.yaml (reusable spec)
11. **Disclaimer + deck verification.** Append the `disclaimer:` field from `kb/pricing/oci-sku-catalog.yaml` as a final "Commercial Disclaimer" slide (verbatim — see option 4 step 7). Then run the same structural deck verification described in option 4 step 8 (slide count, titles, chart types, disclaimer-last) before reporting completion.
- If the user picks **9**, ask: "What topic? (e.g., 'DEP', 'TAC', 'maintenance window', 'vector search')" - If the user picks **9**, ask: "What topic? (e.g., 'DEP', 'TAC', 'maintenance window', 'vector search')"
- If the user picks **10**, ask: "What kind of architecture? (e.g., 'ADB + APEX', 'cross-region DR', 'data lakehouse')" - If the user picks **10**, ask: "What kind of architecture? (e.g., 'ADB + APEX', 'cross-region DR', 'data lakehouse')"
- If the user picks **11**, switch to finding intake mode: - If the user picks **11**, switch to finding intake mode:
@@ -173,7 +240,7 @@ Pick a number, or just describe what you need.
**BOM Output Rules:** **BOM Output Rules:**
- NEVER include "Confidential: Internal ONLY" or any confidentiality marking - NEVER include "Confidential: Internal ONLY" or any confidentiality marking
- ALWAYS include the Oracle Cost Estimator disclaimer at the bottom - ALWAYS include the disclaimer from `kb/pricing/oci-sku-catalog.yaml` `disclaimer:` field at the bottom — `tools/oci_bom_gen.py` reads it automatically (do not duplicate, paraphrase, or maintain a second copy elsewhere)
- Only include SKUs the customer actually requested — never dump the full catalog - Only include SKUs the customer actually requested — never dump the full catalog
- Show cost proportions so the customer can see where their spend concentrates - Show cost proportions so the customer can see where their spend concentrates
- Use Excel formulas (not static values) so the customer can adjust quantities - Use Excel formulas (not static values) so the customer can adjust quantities
@@ -254,6 +321,32 @@ Full tier definitions and artifact matrix: [docs/engagement-tiers.md](docs/engag
**Step 1 — Ideate:** Parse discovery notes into a **Workload Profile** (`templates/workload-profile.yaml`). Formulate a value hypothesis: "If we [technical action], the customer achieves [business outcome]." Use `kb/patterns/business-patterns.yaml` for proven business-level patterns. **Step 1 — Ideate:** Parse discovery notes into a **Workload Profile** (`templates/workload-profile.yaml`). Formulate a value hypothesis: "If we [technical action], the customer achieves [business outcome]." Use `kb/patterns/business-patterns.yaml` for proven business-level patterns.
**Step 1b — Extraction Receipt (MANDATORY).** After parsing discovery notes, present an extraction receipt to the user BEFORE proceeding. This ensures the architecture is built on confirmed facts, not assumptions:
```
📋 Extraction Receipt
━━━━━━━━━━━━━━━━━━━━
From your input I extracted:
CONFIRMED (explicitly stated):
• [field]: [value] — source: "[exact quote or reference from notes]"
• [field]: [value] — source: "[exact quote or reference from notes]"
INFERRED (not stated, derived from context):
• [field]: [value] — reason: "[why I inferred this]"
MISSING (needed but not provided):
• [field] — needed for: [which artifact or decision needs it]
━━━━━━━━━━━━━━━━━━━━
Confirm, correct, or fill gaps before I proceed.
```
Rules:
- Every field in the workload profile that you populate must appear in either CONFIRMED or INFERRED.
- Do NOT proceed to Step 2 until the user confirms the receipt.
- If the user provides additional data, update the receipt and re-confirm.
- When generating the workload-profile.yaml, tag each field with `source: customer` (confirmed), `source: inferred`, or `source: default` so the SA knows what to validate with the customer.
**Step 2 — Validate:** Test the hypothesis for SMART criteria (Specific, Measurable, Attainable, Relevant, Time-based). Identify gaps. Check technical feasibility against `kb/services/` and `kb/compatibility/`. **Step 2 — Validate:** Test the hypothesis for SMART criteria (Specific, Measurable, Attainable, Relevant, Time-based). Identify gaps. Check technical feasibility against `kb/services/` and `kb/compatibility/`.
**Step 3 — Service Tiering:** After parsing databases, assign each workload a tier (Platinum/Gold/Silver/Bronze) based on SLA requirements, compliance needs, and business criticality. Use the auto-assignment rules in `kb/patterns/service-tiering.yaml`. Present the assignment and ask the architect to confirm or adjust. **Step 3 — Service Tiering:** After parsing databases, assign each workload a tier (Platinum/Gold/Silver/Bronze) based on SLA requirements, compliance needs, and business criticality. Use the auto-assignment rules in `kb/patterns/service-tiering.yaml`. Present the assignment and ask the architect to confirm or adjust.
@@ -287,7 +380,7 @@ Capture enough about current state to architect the future. Frame the problem
1. **Select services** from `kb/services/` across the full OCI catalog 1. **Select services** from `kb/services/` across the full OCI catalog
2. **Dimension each service** using `kb/sizing/` rules. For Oracle DBs, use AWR metrics if available. Apply conversion ratios. For ADB-S, size base OCPUs for P75. 2. **Dimension each service** using `kb/sizing/` rules. For Oracle DBs, use AWR metrics if available. Apply conversion ratios. For ADB-S, size base OCPUs for P75.
3. **Compose topology** from `kb/patterns/` blocks. Check conflicts, add implied dependencies, apply compliance overlays. Use `kb/patterns/application-patterns.yaml` for workload-type guidance. 3. **Compose topology** from `kb/patterns/` blocks. Check conflicts and apply compliance overlays. Use `kb/patterns/application-patterns.yaml` for workload-type guidance. **Do NOT silently add components** — only add technical dependencies from the closed whitelist in the Guardrails section below. Everything else must be proposed as optional in the pre-generation review.
4. **Architecture Principles** — Select applicable principles from `kb/patterns/architecture-principles.yaml` based on the workload profile. Check `applies_when` conditions. Include in the deck as a governance slide. 4. **Architecture Principles** — Select applicable principles from `kb/patterns/architecture-principles.yaml` based on the workload profile. Check `applies_when` conditions. Include in the deck as a governance slide.
5. **Environment Catalogue** — Expand each workload into environments (Prod/Pre-Prod/Dev-Test/DR) using the tier templates in `kb/patterns/environment-catalogue.yaml`. Apply cost optimization rules. Include in the deck and in the cost estimate. 5. **Environment Catalogue** — Expand each workload into environments (Prod/Pre-Prod/Dev-Test/DR) using the tier templates in `kb/patterns/environment-catalogue.yaml`. Apply cost optimization rules. Include in the deck and in the cost estimate.
6. **Design deployment** — environment strategy, IaC approach, CI/CD pipeline 6. **Design deployment** — environment strategy, IaC approach, CI/CD pipeline
@@ -310,6 +403,28 @@ Capture enough about current state to architect the future. Frame the problem
#### Confirm (Solution Proposal) #### Confirm (Solution Proposal)
**Completeness gate (MANDATORY before generating artifacts).** Before calling any generation tool (deck, diagram, BOM, PDF), verify that critical fields are populated based on engagement tier:
| Field | Small | Standard | Complex |
|---|---|---|---|
| customer_name | required | required | required |
| workload_type | required | required | required |
| databases (type + count) | required | required | required |
| primary_region | required | required | required |
| compliance_frameworks | — | required | required |
| RTO / RPO | — | required | required |
| team_size | — | required | required |
| current_infrastructure | — | required | required |
| migration_driver | — | required | required |
| environment_strategy | — | — | required |
| operational_model | — | — | required |
| multi_region_topology | — | — | required |
| data_residency | — | — | required |
- If **required** fields are missing: ask the user before generating.
- If **optional** fields are missing: list them as assumptions in the output (e.g., "Assumed: PAYG pricing, single environment, no compliance requirements").
- Fields tagged `source: inferred` in the workload profile count as populated but should be flagged as assumptions.
Assemble all design work into a proposal. Ensure all propositions are **SMART**. Quality matters — it must look professional. Assemble all design work into a proposal. Ensure all propositions are **SMART**. Quality matters — it must look professional.
**Outputs by tier:** See artifact matrix in [docs/engagement-tiers.md](docs/engagement-tiers.md) **Outputs by tier:** See artifact matrix in [docs/engagement-tiers.md](docs/engagement-tiers.md)
@@ -364,6 +479,14 @@ See [docs/skill/output-formats.md](docs/skill/output-formats.md) for the per-cus
--- ---
## Cookbook: Building Tool Payloads
Any pricing or SKU work — cost estimate (option 4), BOM (option 13), BOM-AppCA (option 14), business-case TCO (option 8), scenario comparison from a customer artefact (`.pptx`, BOM, quote) — starts in the local catalog, not on the web. Check [docs/bom-cookbook.md](docs/bom-cookbook.md) for copy-paste recipes (ExaCS X11M BYOL, ADB-Dedicated, ADB-S + Block + FastConnect) and the gotchas that otherwise burn exploration turns (e.g. ADB-Dedicated shares infrastructure SKUs with ExaCS — there are no separate `adb_dedicated` SKUs in the catalog).
If a requirement does not match a recipe, `grep` [`kb/pricing/oci-sku-catalog.yaml`](kb/pricing/oci-sku-catalog.yaml) and consult `kb/services/` before inventing SKUs. See "What You Do NOT Do" for the web-lookup rule and `kb/pricing/oci-sku-catalog.yaml`'s `last_verified` for staleness handling.
---
## Knowledge Base ## Knowledge Base
KB lives under `kb/`. See [kb/README.md](kb/README.md) for the directory map, frontmatter requirements, refresh tooling, and contributor guide. KB lives under `kb/`. See [kb/README.md](kb/README.md) for the directory map, frontmatter requirements, refresh tooling, and contributor guide.
@@ -418,23 +541,49 @@ KB lives under `kb/`. See [kb/README.md](kb/README.md) for the directory map, fr
## Guardrails ## Guardrails
- **Only what the user asked for.** Never add services, components, or features the user did not request — this includes observability (Monitoring, Logging, Events), security services (Data Safe, Vault, Cloud Guard, WAF), sizing details, connection types (RPC, peering), and any "nice to have" additions. Adding unrequested components wastes the architect's time and erodes trust. - **Only what the user asked for.** Never add services, components, or features the user did not request — this includes observability (Monitoring, Logging, Events), security services (Data Safe, Vault, Cloud Guard, WAF), sizing details, connection types (RPC, peering), and any "nice to have" additions. Adding unrequested components wastes the architect's time and erodes trust. The ONLY exception is the closed whitelist of technical dependencies below.
- **Technical dependency whitelist (closed — nothing else is auto-added):**
| If the user requests… | Auto-include | Reason |
|---|---|---|
| FastConnect | DRG | FastConnect terminates on DRG — cannot work without it |
| VPN Connect | DRG | IPSec tunnels terminate on DRG |
| ADB-S / ExaCS with backup to Object Storage | Service Gateway | Backup traffic requires SGW for Oracle Services Network |
| Any service in a public subnet | Internet Gateway | Public subnet routing requires IGW |
| Any private subnet service needing internet egress | NAT Gateway | Private-to-internet routing requires NAT |
| Cross-region DR (Data Guard, FSDR) | Remote Peering Connection (RPC) | Cross-region VCN connectivity requires RPC on both DRGs |
Everything NOT in this table — including Monitoring, Logging, Events, Vault, Data Safe, WAF, Cloud Guard, Bastion, management subnets, compartment boundaries — requires explicit user approval via the pre-generation review.
- **Ask, don't guess.** When requirements are ambiguous or incomplete, ask a clarifying question instead of filling in assumptions. A 10-second question saves a 10-minute redo. - **Ask, don't guess.** When requirements are ambiguous or incomplete, ask a clarifying question instead of filling in assumptions. A 10-second question saves a 10-minute redo.
- **Pre-generation review.** Before generating any diagram or architecture artifact, confirm the component list with the user. Present what you understood and suggest optional additions they can approve or reject:
```
I'll generate a diagram with:
✅ [list of explicitly requested components]
Want me to also include any of these? - **MANDATORY pre-generation review.** Before generating ANY diagram, deck, or architecture artifact, you MUST confirm the component list with the user. Never skip this step. Present three clearly separated sections:
• Observability subnet
• Compartment boundaries
• Security services (Data Safe, Vault)
• Gateways (IGW, NAT, SGW)
• [other relevant options based on context]
Or just generate with the above?
``` ```
This takes 5 seconds to confirm and prevents rework. I'll generate with:
REQUESTED (from your input):
✅ [only components explicitly mentioned by the user]
TECHNICAL DEPENDENCIES (auto-added per whitelist):
⚙️ [only items from the whitelist table above, with reason]
OPTIONAL — want me to add any of these?
○ Observability (Monitoring, Logging, Events)
○ Security services (Vault, Data Safe, WAF, Cloud Guard)
○ Management subnet
○ Compartment boundaries
○ Bastion / jump host
○ [other relevant options based on context]
Generate with the above, or adjust?
```
Wait for the user's response before generating. If the user says "just generate" or equivalent, proceed with only REQUESTED + TECHNICAL DEPENDENCIES (no optionals).
- **Source attribution.** When the user provides documents, URLs, meeting notes, or external data:
- Cite the source when extracting data: "From [document/source]: [extracted fact]"
- Clearly separate facts from the source vs. your own inferences
- If the source contradicts the internal KB, flag the conflict explicitly and let the architect decide
## What You Do NOT Do ## What You Do NOT Do
@@ -442,6 +591,10 @@ KB lives under `kb/`. See [kb/README.md](kb/README.md) for the directory map, fr
- You do NOT replace the architect's judgment. You accelerate it. - You do NOT replace the architect's judgment. You accelerate it.
- You do NOT generate pixel-perfect diagrams. You generate 80% drafts the architect refines. - You do NOT generate pixel-perfect diagrams. You generate 80% drafts the architect refines.
- You do NOT make up pricing. If you don't have current pricing, estimate ranges. - You do NOT make up pricing. If you don't have current pricing, estimate ranges.
- You do NOT use WebSearch / WebFetch / `oracle.com` for OCI list prices or SKU lookups. `kb/pricing/oci-sku-catalog.yaml` is auto-refreshed via `tools/refresh_sku_catalog.py` (Oracle apexapps pricing API) and is the source of truth — including for ECPU/OCPU rates, BYOL deltas, Exadata X11M part numbers, and ADB-D ECPU SKUs. Web fallback is allowed ONLY when (a) the SKU is genuinely absent after `grep` AND a fresh `--refresh` still does not surface it, or (b) the catalog's `last_verified` is >60 days stale and a refresh is not currently possible. In either case, cite the source URL alongside the part number. Reflexively reaching for WebSearch when the catalog already has the answer is the most common cost-estimate failure mode — don't.
- You do NOT claim features exist if you're unsure. Check the KB first. - You do NOT claim features exist if you're unsure. Check the KB first.
- You do NOT do detailed project management. DELIVER artifacts are lightweight handover aids. - You do NOT do detailed project management. DELIVER artifacts are lightweight handover aids.
- You do NOT add services or components the user did not request. - You do NOT add services or components the user did not request.
- **The skill ships as an MCP server.** This repo is packaged and served via the hosted MCP at `https://mcp.tech-lad.com/deal-accelerator/mcp/`. Anything you change in the skill's runtime — `tools/`, `scripts/`, `kb/`, `SKILL.md`, `AGENTS.md`, `.agents/` — must keep working in that deployed environment, not just on the SA's laptop. Concrete implications: (1) NO machine-specific paths (use `pathlib.Path(__file__).resolve().parent.parent` or env vars, never hardcoded `/mnt/c/...` or `/home/diego/...`); (2) NO required network calls during normal operation (the MCP container won't have access to drawio.exe, paid APIs, or Diego's local files — opt-in via env vars like `DRAWIO_EXE` / `ANTHROPIC_API_KEY`, never required); (3) NO writes outside the repo tree (the MCP filesystem is the cloned repo, write only under `examples/`, `tmp/`, or the artifacts the skill is meant to produce); (4) NO new dependencies that aren't in `requirements.txt` (CI installs from there, the MCP container too); (5) any new tool must work in a fresh clone with `make venv` — no manual setup steps. Before adding a feature that depends on a binary, an external service, or a privileged operation, ask whether it'll work when the SA is hitting the MCP endpoint with no laptop attached.
- **You do NOT edit skill source code or tooling when the user is in "menu mode".** When the user invoked the skill via the welcome menu (options 114) or asked for one of the menu outputs (proposal, diagram, deck, BOM, WA review, etc.), your job is to USE the existing tools, not modify them. Do NOT touch `tools/`, `scripts/`, `kb/diagram/*.json`, or any other code/index file as part of fulfilling a menu request — even if you discover a bug or a missing alias mid-task. If you hit a tool gap (missing icon alias, broken renderer, type that doesn't resolve), surface it as a follow-up at the end of your reply (e.g. "I noticed `refreshable_clone` doesn't have a PPTX icon alias — flag this for the maintainer to add to `tools/oci_pptx_diagram_gen.py::TYPE_TO_ICON`") rather than silently patching it. Code edits happen in a separate "developer mode" engagement, not while the SA is generating customer artifacts. The two exceptions: (1) `kb/field-findings/tracker.yaml` via menu option 11 (the menu's purpose IS to write that file), and (2) writing the customer's spec/output YAML files under `examples/<customer>/` — those are the deliverable, not the skill itself.

20
.claude/settings.json Normal file
View File

@@ -0,0 +1,20 @@
{
"permissions": {
"allow": [
"Read(**)",
"Write(examples/**)",
"Write(output/**)",
"Bash(python3.12:*)",
"Bash(python3:*)",
"Bash(.venv/bin/python:*)",
"Bash(make:*)",
"Bash(git:*)",
"Bash(pip:*)",
"Bash(pip3:*)",
"Bash(pip3.12:*)",
"Bash(ls:*)",
"Bash(which:*)",
"Bash(find:*)"
]
}
}

View File

@@ -74,7 +74,142 @@
"WebFetch(domain:github.com)", "WebFetch(domain:github.com)",
"Bash(curl -s --max-time 15 -H \"X-Oracle-Accept-CurrencyCode: USD\" \"https://itra.oraclecloud.com/itas/.anon/myservices/api/v1/products?limit=2&partNumber=B110627\")", "Bash(curl -s --max-time 15 -H \"X-Oracle-Accept-CurrencyCode: USD\" \"https://itra.oraclecloud.com/itas/.anon/myservices/api/v1/products?limit=2&partNumber=B110627\")",
"Bash(curl -v --max-time 10 -H \"X-Oracle-Accept-CurrencyCode: USD\" \"https://itra.oraclecloud.com/itas/.anon/myservices/api/v1/products?limit=1\")", "Bash(curl -v --max-time 10 -H \"X-Oracle-Accept-CurrencyCode: USD\" \"https://itra.oraclecloud.com/itas/.anon/myservices/api/v1/products?limit=1\")",
"Bash(curl -s --max-time 15 \"https://apexapps.oracle.com/pls/apex/cetools/api/v1/products/?partNumber=B110627&currencyCode=USD\")" "Bash(curl -s --max-time 15 \"https://apexapps.oracle.com/pls/apex/cetools/api/v1/products/?partNumber=B110627&currencyCode=USD\")",
"Bash(find:*)",
"Bash(echo \"exit=$?\")",
"Bash(echo \"quiet exit=$?\")",
"Bash(make freshness:*)",
"Bash(echo \"freshness exit=$?\")",
"Bash(make help:*)",
"Bash(make lint:*)",
"Bash(curl -sS \"https://apexapps.oracle.com/pls/apex/cetools/api/v1/products/?currencyCode=USD\")",
"Bash(/bin/rm kb/pricing/ai-ml.yaml kb/pricing/analytics.yaml kb/pricing/containers-serverless.yaml kb/pricing/database.yaml kb/pricing/developer.yaml kb/pricing/hybrid-vmware.yaml kb/pricing/integration.yaml kb/pricing/networking.yaml kb/pricing/observability.yaml kb/pricing/pricing-models.yaml kb/pricing/security.yaml kb/pricing/storage.yaml)",
"Bash(python3.12 tools/oci_deck_gen.py --spec examples/proposal-spec.yaml --output examples/output-cli-improvements-deliverables/architecture-proposal.pptx)",
"Bash(python3.12 tools/oci_diagram_gen.py --spec examples/diagram-spec.yaml --output examples/output-cli-improvements-deliverables/architecture.drawio)",
"Bash(python3.12 tools/oci_pdf_gen.py --spec examples/proposal-spec.yaml --output examples/output-cli-improvements-deliverables/customer-proposal.pdf)",
"Bash(python3.12 tools/oci_bom_gen.py --spec examples/exacs-bom-spec.yaml --output examples/output-cli-improvements-deliverables/exacs-bom.xlsx)",
"Bash(python3.12 tools/oci_bom_gen.py --spec examples/exacs-x11m-bom-spec.yaml --output examples/output-cli-improvements-deliverables/exacs-x11m-bom.xlsx)",
"Bash(python3.12 tools/kb_cli.py search \"Autonomous Database\" --json)",
"Bash(python3.12 tools/findings_cli.py search \"adb\" --product ADB-S --json)",
"Bash(python3.12 tools/findings_cli.py stats --json)",
"Bash(python3.12 tools/kb_cli.py arch-search --services adb-s exacs --tags ha-dr --json)",
"Bash(python3.12 tools/kb_cli.py ecal-score --summary \"ADB-S migration with Data Guard business case architecture review customer profile strategy map handover go-live\" --json)",
"Bash(python3.12 tools/oci_bom_gen.py --spec examples/exacs-bom-spec.yaml --output examples/output-cli-improvements-deliverables/exacs-bom-appca.xlsx --appca)",
"Bash(python3.12 tools/oci_bom_gen.py --spec examples/exacs-x11m-bom-spec.yaml --output examples/output-cli-improvements-deliverables/exacs-x11m-bom-appca.xlsx --appca)",
"Bash(python3.12:*)",
"Bash(pip3.12 list:*)",
"Bash(pip3.12 install:*)",
"Bash(xargs ls:*)",
"WebFetch(domain:www.drawio.com)",
"WebFetch(domain:jgraph.github.io)",
"WebFetch(domain:raw.githubusercontent.com)",
"Bash(ls /root/.claude/projects/-mnt-c-Users-Diego-Documents-oci-deal-accelerator-oracle-oci-deal-accelerator/a0d00b4c-8d61-421c-8ba9-19bb85f15fdb/tool-results/*.zip)",
"WebFetch(domain:developers.openai.com)",
"Bash(echo \"---exit:$?---\")",
"Bash(date +%s)",
"Read(//tmp/**)",
"Bash(.venv/bin/pip install *)",
"Bash(curl -sS -o /dev/null -w \"HTTP:%{http_code} dns:%{remote_ip} time:%{time_total}s\\\\n\" --max-time 10 https://mcp.tech-lad.com/deal-accelerator/mcp/)",
"Bash(curl -sS -o /dev/null -w \"oauth HTTP:%{http_code}\\\\n\" --max-time 10 https://mcp.tech-lad.com/oauth/authorize)",
"mcp__oci-deal-accelerator__generate_deck",
"mcp__oci-deal-accelerator__generate_business_case",
"mcp__oci-deal-accelerator__generate_bom",
"mcp__oci-deal-accelerator__generate_bom_appca",
"Bash(mkdir -p /tmp/mcp-test-outputs)",
"Bash(curl -sS -o deck-nova.pptx \"https://mcp.tech-lad.com/deal-accelerator/files/176ac90e-test-nova-retail-deck.pptx\")",
"Bash(curl -sS -o biz-nova.pptx \"https://mcp.tech-lad.com/deal-accelerator/files/42dd4da2-test-nova-retail-bizcase.pptx\")",
"Bash(curl -sS -o bom-vector.xlsx \"https://mcp.tech-lad.com/deal-accelerator/files/3868d74a-test-vector-retail-bom.xlsx\")",
"Bash(curl -sS -o bom-vector-appca.xlsx \"https://mcp.tech-lad.com/deal-accelerator/files/b34fa397-test-vector-retail-bom-appca.xlsx\")",
"Bash(curl -sS -o /tmp/mcp-test-outputs/biz-nova.pptx \"https://mcp.tech-lad.com/deal-accelerator/files/42dd4da2-test-nova-retail-bizcase.pptx\")",
"Bash(curl -sS -o /tmp/mcp-test-outputs/bom-vector.xlsx \"https://mcp.tech-lad.com/deal-accelerator/files/3868d74a-test-vector-retail-bom.xlsx\")",
"Bash(curl -sS -o /tmp/mcp-test-outputs/bom-vector-appca.xlsx \"https://mcp.tech-lad.com/deal-accelerator/files/b34fa397-test-vector-retail-bom-appca.xlsx\")",
"Bash(curl -sS -o /tmp/mcp-test-outputs/deck-vector.pptx \"https://mcp.tech-lad.com/deal-accelerator/files/19c5330e-test-vector-bank-deck.pptx\")",
"Bash(curl -sS -o /tmp/mcp-test-outputs/biz-digital.pptx \"https://mcp.tech-lad.com/deal-accelerator/files/16b90f10-test-vector-digital-bizcase.pptx\")",
"Bash(curl -sS -o /dev/null -w \"git remote HTTP: %{http_code} time: %{time_total}s\\\\n\" --max-time 15 https://git.tech-lad.com.br/)",
"Bash(awk '/- sku:/{sku=$NF} /product:/{print sku\" - \"$0}' kb/pricing/oci-sku-catalog.yaml)",
"Bash(awk '{print $3}')",
"Bash(awk '/- sku: B110627|- sku: B110628|- sku: B110629|- sku: B90453/{print;f=1;next} f&&/product:/{print;f=0}' kb/pricing/oci-sku-catalog.yaml)",
"Bash(awk '/- sku:/{sku=$NF} /product:.*Exadata|product:.*ECPU|product:.*Autonomous/{print sku\" - \"$0}' kb/pricing/oci-sku-catalog.yaml)",
"Bash(awk '/- sku: B90453/,/product:/' kb/pricing/oci-sku-catalog.yaml)",
"Bash(awk '/- sku:/{sku=$NF} /product:.*ADB|product:.*NoSQL|product:.*HeatWave|product:.*MySQL/{print sku\" - \"$0}' kb/pricing/oci-sku-catalog.yaml)",
"Bash(\"/mnt/c/Program Files/draw.io/draw.io.exe\" --help)",
"Bash(\"/mnt/c/Program Files/draw.io/draw.io.exe\" -x -f png -b 10 -o \"tmp/compare-iter/iter1.png\" \"tmp/compare-iter/iter1.drawio\")",
"Bash(\"/mnt/c/Program Files/draw.io/draw.io.exe\" -x -f png -b 20 --crop -s 2 -o tmp/compare-iter/iter4_crop.png tmp/compare-iter/iter4.drawio)",
"Bash(\"/mnt/c/Program Files/draw.io/draw.io.exe\" -x -f png -b 20 --crop -s 2 -o tmp/compare-iter/REFERENCE.png examples/output-meli-fraud-adbd-migration/adbsplusadbd.drawio)",
"Bash(\"/mnt/c/Program Files/draw.io/draw.io.exe\" -x -f png -b 30 --crop -s 3 -o tmp/compare-iter/iter6_hires.png tmp/compare-iter/iter6.drawio)",
"Bash(\"/mnt/c/Program Files/draw.io/draw.io.exe\" -x -f png -b 20 --crop -s 3 -o tmp/compare-iter/to_be_v1_hires.png tmp/compare-iter/to_be_v1.drawio)",
"Bash(\"/mnt/c/Program Files/draw.io/draw.io.exe\" -x -f png -b 40 -s 4 -o tmp/compare-iter/to_be_v1_4x.png tmp/compare-iter/to_be_v1.drawio)",
"Bash(\"/mnt/c/Program Files/draw.io/draw.io.exe\" -x -f png --crop -b 20 --width 3000 -o tmp/compare-iter/to_be_v1_w3000.png tmp/compare-iter/to_be_v1.drawio)",
"Bash(\"/mnt/c/Program Files/draw.io/draw.io.exe\" -x -f png -b 20 --crop --width 4500 -o tmp/compare-iter/to_be_v1_w4500.png tmp/compare-iter/to_be_v1.drawio)",
"Bash(\"/mnt/c/Program Files/draw.io/draw.io.exe\" -x -f png -b 30 --crop --width 5000 -o tmp/compare-iter/as_is_final.png examples/output-meli-fraud-adbd-migration/fraud-as-is-adbs.drawio)",
"Bash(\"/mnt/c/Program Files/draw.io/draw.io.exe\" -x -f png -b 30 --crop --width 5000 -o tmp/compare-iter/to_be_final.png examples/output-meli-fraud-adbd-migration/fraud-to-be-adbd.drawio)",
"Bash(curl -sL \"https://docs.oracle.com/en/solutions/deploy-autonomous-database-db-at-azure/index.html\" -o tmp/oracle-ref-archs/adb-azure.html)",
"Bash(curl -sL -w 'HTTP:%{http_code} size:%{size_download}\\\\n' \"https://docs.oracle.com/en/solutions/deploy-autonomous-database-db-at-azure/index.html\" -o /tmp/x.html)",
"Bash(curl -sL -w 'HTTP:%{http_code} size:%{size_download}\\\\n' \"https://docs.oracle.com/en/solutions/deploy-autonomous-database-db-at-azure/img/autonomous-database-db-azure-diagram-oracle.zip\" -o adb-azure.zip)",
"Bash(unzip -l adb-azure.zip)",
"Bash(unzip -o -q adb-azure.zip)",
"Bash(mv oracle-adb-jde-exadata-arch-oracle *)",
"Bash(curl -sL \"https://docs.oracle.com/en/solutions/dataguard-exadata-dedicated-infrastructure/index.html\" -o dg-exa-dedicated.html)",
"Bash(curl -sL \"https://docs.oracle.com/en/solutions/dataguard-exadata-dedicated-infrastructure/img/exadata-dedicated-region-dataguard.zip\" -o dg-exa-region.zip)",
"Bash(curl -sL \"https://docs.oracle.com/en/solutions/dataguard-exadata-dedicated-infrastructure/img/exadata-dedicated-cross-region-dataguard.zip\" -o dg-exa-cross-region.zip)",
"Bash(unzip -o -q dg-exa-region.zip)",
"Bash(unzip -o -q dg-exa-cross-region.zip)",
"Bash('/mnt/c/Program Files/draw.io/draw.io.exe' -x -f png -b 20 --crop -o /mnt/c/Users/Diego/Documents/oci-deal-accelerator-oracle/oci-deal-accelerator/tmp/oracle-ref-archs/oracle-adb-jde-exadata-arch-oracle/oracle-adb-jde-exadata-arch.png /mnt/c/Users/Diego/Documents/oci-deal-accelerator-oracle/oci-deal-accelerator/tmp/oracle-ref-archs/oracle-adb-jde-exadata-arch-oracle/oracle-adb-jde-exadata-arch.drawio)",
"Bash(\"/mnt/c/Program Files/draw.io/draw.io.exe\" -x -f png -b 20 --crop -s 2 -o /mnt/c/Users/Diego/Documents/oci-deal-accelerator-oracle/oci-deal-accelerator/tmp/oracle-ref-archs/oracle-adb-jde-exadata-arch-oracle/oracle-adb-jde-exadata-arch.png /mnt/c/Users/Diego/Documents/oci-deal-accelerator-oracle/oci-deal-accelerator/tmp/oracle-ref-archs/oracle-adb-jde-exadata-arch-oracle/oracle-adb-jde-exadata-arch.drawio)",
"Bash(\"/mnt/c/Program Files/draw.io/draw.io.exe\" -x -f png -b 20 --crop -s 2 -o tmp/oracle-ref-archs/oracle-adb-jde-exadata-arch-oracle/rendered.png tmp/oracle-ref-archs/oracle-adb-jde-exadata-arch-oracle/oracle-adb-jde-exadata-arch.drawio)",
"Bash(\"/mnt/c/Program Files/draw.io/draw.io.exe\" -x -f png -b 20 --crop -s 2 -o tmp/compare-iter/fraud-as-is-template.png examples/output-meli-fraud-adbd-migration/fraud-as-is-template.drawio)",
"Bash(\"/mnt/c/Program Files/draw.io/draw.io.exe\" -x -f png -b 20 --crop -s 2 -o tmp/compare-iter/fraud-to-be-template.png examples/output-meli-fraud-adbd-migration/fraud-to-be-template.drawio)",
"WebFetch(domain:www.bugraparlayan.com.tr)",
"WebFetch(domain:www.infolob.com)",
"Bash(curl -sS \"https://git.tech-lad.com.br/api/v1/repos/diegoecab/oci-deal-accelerator/actions/runs?limit=10\")",
"Bash(curl -sS \"https://git.tech-lad.com.br/api/v1/repos/diegoecab/oci-deal-accelerator/actions/secrets\")",
"Bash(curl -sS -o /dev/null -w \"%{http_code}\\\\n\" \"https://git.tech-lad.com.br/api/v1/repos/diegoecab/oci-deal-accelerator\")",
"Bash(curl -sS \"https://git.tech-lad.com.br/diegoecab/oci-deal-accelerator/raw/branch/main/.gitea/workflows/sku-catalog-refresh.yaml\")",
"Bash(curl -sS -o /dev/null -w \"%{http_code}\\\\n\" \"https://git.tech-lad.com.br/diegoecab/oci-deal-accelerator/raw/branch/main/.gitea/workflows/sku-catalog-refresh.yaml\")",
"Bash(curl -sS \"https://git.tech-lad.com.br/api/v1/repos/diegoecab/oci-deal-accelerator/issues?type=issues&state=open&limit=5&sort=newest\")",
"Bash(curl -sS \"https://git.tech-lad.com.br/api/v1/repos/diegoecab/oci-deal-accelerator/branches?limit=50\")",
"Bash(curl -sS \"https://git.tech-lad.com.br/api/v1/repos/diegoecab/oci-deal-accelerator\")",
"Bash(xargs -n1 grep -l '\"fidelity\"')",
"Bash(xargs '-I{}' .venv/bin/python -c ' *)",
"Bash(apt-cache show *)",
"Bash(apt list *)",
"Read(//mnt/c/Program Files/draw.io/**)",
"Read(//mnt/c/Users/Diego/AppData/Local/Programs/draw.io/**)",
"Read(//mnt/c/**)",
"Bash(\"/mnt/c/Program Files/draw.io/draw.io.exe\" -x -f png -o /tmp/test-drawio.png examples/dataguard-exa-dedicated-in-region/out/dataguard-exa-dedicated-in-region.drawio)",
"Bash(mkdir -p /mnt/c/Users/Diego/tmp-drawio-export)",
"Bash(\"/mnt/c/Program Files/draw.io/draw.io.exe\" -x -f png -s 2 -o /mnt/c/Users/Diego/tmp-drawio-export/test.png examples/dataguard-exa-dedicated-in-region/out/dataguard-exa-dedicated-in-region.drawio)",
"Bash(mkdir -p '/mnt/c/Users/Diego/tmp-drawio-export')",
"Bash('/mnt/c/Program Files/draw.io/draw.io.exe' -x -f png -s 2 -o 'C:\\\\Users\\\\Diego\\\\tmp-drawio-export\\\\test.png' 'C:\\\\Users\\\\Diego\\\\Documents\\\\oci-deal-accelerator-oracle\\\\oci-deal-accelerator\\\\examples\\\\dataguard-exa-dedicated-in-region\\\\out\\\\dataguard-exa-dedicated-in-region.drawio')",
"Bash(DRAWIO_EXE=\"/mnt/c/Program Files/draw.io/draw.io.exe\" .venv/bin/python tools/drawio_to_png.py --drawio examples/asis-tobe-adb-modernization/out/asis-adb-s-local-dr.drawio --out tmp/drawio-renders/asis-v3.png)",
"Bash(DRAWIO_EXE=\"/mnt/c/Program Files/draw.io/draw.io.exe\" .venv/bin/python tools/drawio_to_png.py --drawio examples/asis-tobe-adb-modernization/out/tobe-adb-d-active-dataguard.drawio --out tmp/drawio-renders/tobe-v3.png)",
"Bash(DRAWIO_EXE=\"/mnt/c/Program Files/draw.io/draw.io.exe\" .venv/bin/python tools/drawio_to_png.py --drawio examples/asis-tobe-adb-modernization/out/asis-adb-s-local-dr.drawio --out tmp/drawio-renders/asis-v4.png)",
"Bash(DRAWIO_EXE=\"/mnt/c/Program Files/draw.io/draw.io.exe\" .venv/bin/python tools/drawio_to_png.py --drawio examples/asis-tobe-adb-modernization/out/tobe-adb-d-active-dataguard.drawio --out tmp/drawio-renders/tobe-v4.png)",
"Bash(DRAWIO_EXE=\"/mnt/c/Program Files/draw.io/draw.io.exe\" .venv/bin/python tools/drawio_to_png.py --drawio examples/asis-tobe-adb-modernization/out/asis-adb-s-local-dr.drawio --out tmp/drawio-renders/asis-v5.png)",
"Bash(DRAWIO_EXE=\"/mnt/c/Program Files/draw.io/draw.io.exe\" .venv/bin/python tools/drawio_to_png.py --drawio examples/asis-tobe-adb-modernization/out/tobe-adb-d-active-dataguard.drawio --out tmp/drawio-renders/tobe-v5.png)",
"Bash(DRAWIO_EXE=\"/mnt/c/Program Files/draw.io/draw.io.exe\" .venv/bin/python tools/drawio_to_png.py --drawio examples/asis-tobe-adb-modernization/out/asis-adb-s-local-dr.drawio --out tmp/drawio-renders/asis-v6.png)",
"Bash(DRAWIO_EXE=\"/mnt/c/Program Files/draw.io/draw.io.exe\" .venv/bin/python tools/drawio_to_png.py --drawio examples/asis-tobe-adb-modernization/out/tobe-adb-d-active-dataguard.drawio --out tmp/drawio-renders/tobe-v6.png)",
"Bash(DRAWIO_EXE=\"/mnt/c/Program Files/draw.io/draw.io.exe\" .venv/bin/python tools/drawio_to_png.py --drawio examples/asis-tobe-adb-modernization/out/asis-adb-s-local-dr.drawio --out tmp/drawio-renders/asis-v7.png)",
"Bash(DRAWIO_EXE=\"/mnt/c/Program Files/draw.io/draw.io.exe\" .venv/bin/python tools/drawio_to_png.py --drawio examples/asis-tobe-adb-modernization/out/tobe-adb-d-active-dataguard.drawio --out tmp/drawio-renders/tobe-v7.png)",
"Bash(DRAWIO_EXE=\"/mnt/c/Program Files/draw.io/draw.io.exe\" .venv/bin/python tools/drawio_to_png.py --drawio examples/asis-tobe-adb-modernization/out/tobe-adb-d-active-dataguard.drawio --out tmp/drawio-renders/tobe-v9.png)",
"Bash(DRAWIO_EXE=\"/mnt/c/Program Files/draw.io/draw.io.exe\" .venv/bin/python tools/drawio_to_png.py --drawio examples/asis-tobe-adb-modernization/out/tobe-adb-d-active-dataguard.drawio --out tmp/drawio-renders/tobe-final.png)",
"Bash(DRAWIO_EXE=\"/mnt/c/Program Files/draw.io/draw.io.exe\" .venv/bin/python tools/drawio_to_png.py --drawio examples/asis-tobe-adb-modernization/out/asis-adb-s-local-dr.drawio --out tmp/drawio-renders/asis-final2.png)",
"Bash(DRAWIO_EXE=\"/mnt/c/Program Files/draw.io/draw.io.exe\" .venv/bin/python tools/drawio_to_png.py --drawio examples/asis-tobe-adb-modernization/out/tobe-adb-d-active-dataguard.drawio --out tmp/drawio-renders/tobe-final2.png)",
"Bash(.githooks/pre-commit)",
"Bash(unzip -l awr_Transactional.zip)",
"Bash(mkdir -p /tmp/awr_meli)",
"Bash(unzip -o \"/mnt/c/Users/Diego/Documents/Meli/ABD-M/April 2026 - Fraude ADB-S to ADB-D/awr_Transactional.zip\")",
"Bash(cp \"/mnt/c/Users/Diego/Documents/Meli/ABD-M/April 2026 - Fraude ADB-S to ADB-D/meli-fraud-adbd-arch.pptx\" /tmp/meli-fraud-adbd-arch.pptx)",
"Bash(unzip -o meli-fraud-adbd-arch.pptx -d meli-pptx-extracted/)",
"Bash(cp -f \"/mnt/c/Users/Diego/Documents/Meli/ABD-M/April 2026 - Fraude ADB-S to ADB-D/meli-fraud-adbd-arch.pptx\" /tmp/meli-fraud-adbd-arch.pptx)",
"Bash(rm -rf /tmp/meli-pptx-extracted)",
"Bash(unzip -oq /tmp/meli-fraud-adbd-arch.pptx -d /tmp/meli-pptx-extracted/)",
"Bash(cp -f \"/mnt/c/Users/Diego/Documents/Meli/ABD-M/April 2026 - Fraude ADB-S to ADB-D/meli-fraud-adbd-arch.pptx\" meli-fraud-adbd-arch.pptx)",
"Bash(rm -rf meli-pptx-extracted)",
"Bash(unzip -oq meli-fraud-adbd-arch.pptx -d meli-pptx-extracted/)",
"Bash(yes)",
"WebFetch(domain:blog.shadabmohammad.com)",
"Bash(\"/mnt/c/Program Files/draw.io/draw.io.exe\" -x -f png --scale 1 -o \"$\\(pwd\\)/examples/output-aws-mysql-to-oci-heatwave-fsdr/aws-mysql-to-heatwave-fsdr.png\" \"$\\(pwd\\)/examples/output-aws-mysql-to-oci-heatwave-fsdr/aws-mysql-to-heatwave-fsdr.drawio\")"
] ]
} }
} }

21
.codex/config.toml Normal file
View File

@@ -0,0 +1,21 @@
# Codex project configuration for OCI Deal Accelerator
# Applies to every user who opens this project with Codex CLI.
# Allow the agent to run commands without per-command approval prompts.
approval_policy = "never"
# Workspace-write: agent can write inside the project root but not system-wide.
sandbox_mode = "workspace-write"
[sandbox_workspace_write]
# Allow network access so `pip install -r requirements.txt` and `make venv`
# can actually download dependencies. Without this, Codex blocks PyPI.
network_access = true
writable_roots = []
exclude_tmpdir_env_var = false
exclude_slash_tmp = false
[shell_environment_policy]
# Inherit the user's shell env so python3.12 / python3 resolution works
# the same way as the Makefile expects.
inherit = "all"

View File

@@ -0,0 +1,50 @@
# Auto-deploy OCI Deal Accelerator skill to MCP server on every push to main.
# Requires secrets: OCI_SSH_KEY (private key), OCI_HOST (DNS alias).
name: Deploy Skill to OCI
on:
push:
branches: [main]
jobs:
deploy:
runs-on: ubuntu-latest
timeout-minutes: 5
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup SSH
run: |
mkdir -p ~/.ssh
echo "${{ secrets.OCI_SSH_KEY }}" > ~/.ssh/deploy_key
chmod 600 ~/.ssh/deploy_key
ssh-keyscan -H ${{ secrets.OCI_HOST }} >> ~/.ssh/known_hosts 2>/dev/null
- name: Sync skill to server
run: |
tar --exclude='.git' --exclude='.gitea' -czf /tmp/skill.tar.gz .
scp -i ~/.ssh/deploy_key /tmp/skill.tar.gz ubuntu@${{ secrets.OCI_HOST }}:/tmp/skill.tar.gz
ssh -i ~/.ssh/deploy_key ubuntu@${{ secrets.OCI_HOST }} '
rm -rf /home/ubuntu/oci-deal-accelerator-oracle/oci-deal-accelerator/*
tar -xzf /tmp/skill.tar.gz -C /home/ubuntu/oci-deal-accelerator-oracle/oci-deal-accelerator/
rm /tmp/skill.tar.gz
'
- name: Restart containers
run: |
ssh -i ~/.ssh/deploy_key ubuntu@${{ secrets.OCI_HOST }} '
cd /home/ubuntu/skills-platform &&
docker compose -f docker-compose.prod.yaml restart tools-service mcp-deal-accelerator
'
- name: Wait for healthy
run: |
ssh -i ~/.ssh/deploy_key ubuntu@${{ secrets.OCI_HOST }} '
timeout 60 bash -c "
until docker inspect --format=\"{{.State.Health.Status}}\" mcp-deal-accelerator 2>/dev/null | grep -q healthy; do
sleep 3
done
"
'

View File

@@ -0,0 +1,75 @@
# Diagram-validator gate.
#
# Runs on every push and PR. Two checks:
#
# 1. diagram-spec-audit — every absolute_layout spec under examples/
# passes tools/diagram_spec_validator.py (geometry rules:
# CONTAINER_TOO_THIN, CONTAINER_PADDING_VIOLATION,
# LABEL_OVERFLOW_PARENT). Hard fail surfaces the regressions
# Diego flagged on the MySQL HeatWave HA example.
#
# 2. drawio-validators-smoke — re-renders the canonical example with
# tools/oci_diagram_gen.py so the post-render
# drawio_visual_validator runs (font sizes, dangling edges,
# duplicate ids, off-canvas geometry).
#
# Failures block the merge so a busted geometry never ships.
name: Diagram validators
on:
push:
branches: [main]
paths:
- 'examples/**'
- 'kb/diagram/**'
- 'tools/diagram_spec_validator.py'
- 'tools/drawio_visual_validator.py'
- 'tools/oci_diagram_gen.py'
- 'tools/oci_pptx_diagram_gen.py'
pull_request:
branches: [main]
workflow_dispatch:
jobs:
diagram-validators:
runs-on: ubuntu-latest
timeout-minutes: 5
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup Python
run: |
apt-get update -qq
apt-get install -y --no-install-recommends python3 python3-pip python3-yaml
python3 --version
- name: Install minimal deps
run: |
python3 -m pip install --quiet --upgrade pip
python3 -m pip install --quiet drawpyo lxml pyyaml
- name: Spec validator audit (every absolute_layout spec)
run: |
set -e
total=0; failed=0
for f in $(find examples -name 'diagram-spec.yaml' -o -name '*-diagram-spec.yaml'); do
total=$((total+1))
if ! python3 tools/diagram_spec_validator.py --spec "$f" --strict; then
failed=$((failed+1))
fi
done
echo "Validated $total spec(s); $failed hard-failed."
test $failed -eq 0
- name: Re-render canonical example (drawio post-render validator)
run: |
if [ -f examples/aws-app-mysql-heatwave-ha/specs/diagram-spec.yaml ]; then
python3 tools/oci_diagram_gen.py \
--spec examples/aws-app-mysql-heatwave-ha/specs/diagram-spec.yaml \
--output /tmp/aws-app-mysql-heatwave-ha.drawio --strict
else
echo "Canonical example missing — skipping drawio smoke test"
fi

View File

@@ -0,0 +1,75 @@
# Weekly KB health check — validates catalog links and reports broken URLs.
# Runs Monday 8am UTC. Does NOT block deployments or affect user experience.
# If broken links found, creates a Gitea issue for manual review.
name: KB Health Check
on:
schedule:
- cron: '0 8 * * 1'
workflow_dispatch:
jobs:
check-links:
runs-on: ubuntu-latest
timeout-minutes: 10
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup Python
run: |
apt-get update -qq
apt-get install -y --no-install-recommends python3 python3-requests python3-bs4 python3-yaml
python3 --version
- name: Check Architecture Center links
id: check
continue-on-error: true
run: |
python3 tools/refresh_arch_catalog.py --check-links 2>&1 | tee /tmp/link-check.txt
echo "exit_code=$?" >> $GITHUB_OUTPUT
- name: Check SKU catalog freshness
id: sku
continue-on-error: true
run: |
python3 tools/refresh_sku_catalog.py --validate 2>&1 | tee -a /tmp/link-check.txt
- name: Create issue if problems found
if: steps.check.outcome == 'failure'
run: |
BROKEN=$(grep -c "❌" /tmp/link-check.txt || echo "0")
REDIRECTED=$(grep -c "↪️" /tmp/link-check.txt || echo "0")
BODY=$(cat <<'ISSUE_EOF'
## KB Health Check — Broken Links Found
**Run date:** $(date -u +%Y-%m-%d)
**Broken:** $BROKEN URLs
**Redirected:** $REDIRECTED URLs
<details>
<summary>Full report</summary>
```
$(cat /tmp/link-check.txt)
```
</details>
### Action needed
- For 404s: remove entry or find new URL via `python tools/refresh_arch_catalog.py --whats-new`
- For redirects: update URL in `kb/architecture-center/catalog.yaml`
ISSUE_EOF
)
# Note: Gitea issue creation requires gitea CLI or API call
# For now, save report as artifact
echo "$BODY" > /tmp/kb-health-report.md
echo "::warning::$BROKEN broken links found in KB catalog"
- name: Upload report
if: always()
uses: actions/upload-artifact@v3
with:
name: kb-health-report
path: /tmp/link-check.txt
retention-days: 30

View File

@@ -0,0 +1,67 @@
# SKILL.md sync gate.
#
# Why: the root SKILL.md (read by Claude Code) and
# .agents/skills/oci-deal-accelerator/SKILL.md (read by Codex) MUST
# stay byte-aligned modulo the auto-generated banner. If they drift,
# the two agents give the user different instructions — exactly the
# class of regression that produced the workload-driven-mode incident
# Diego flagged on 2026-04-25.
#
# This workflow blocks the merge if a PR/push leaves them out of
# sync. Locally, ``make install-hooks`` enables a pre-commit hook
# that auto-syncs before the commit lands; this CI step is the
# safety net for anyone who skipped the hook.
name: SKILL.md sync
on:
push:
branches: [main]
paths:
- 'SKILL.md'
- '.agents/skills/oci-deal-accelerator/SKILL.md'
- 'scripts/sync-skill.py'
pull_request:
branches: [main]
paths:
- 'SKILL.md'
- '.agents/skills/oci-deal-accelerator/SKILL.md'
- 'scripts/sync-skill.py'
workflow_dispatch:
jobs:
check-sync:
runs-on: ubuntu-latest
timeout-minutes: 2
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup Python
run: |
apt-get update -qq
apt-get install -y --no-install-recommends python3
python3 --version
- name: Verify SKILL.md is in sync with the Codex copy
run: |
python3 scripts/sync-skill.py --check
- name: Reject .agents/ edits without a matching root SKILL.md change
if: github.event_name == 'pull_request'
run: |
# If only .agents/skills/.../SKILL.md is in the diff (no
# change to root SKILL.md), someone edited the auto-generated
# copy directly. That edit will be silently destroyed by the
# next sync. Block the PR with a clear message.
base="${{ github.event.pull_request.base.sha }}"
head="${{ github.event.pull_request.head.sha }}"
changed=$(git diff --name-only "$base" "$head" || true)
if echo "$changed" | grep -qx ".agents/skills/oci-deal-accelerator/SKILL.md"; then
if ! echo "$changed" | grep -qx "SKILL.md"; then
echo "::error::PR edits .agents/skills/.../SKILL.md without touching root SKILL.md."
echo "::error::That file is auto-generated. Move the edit to SKILL.md and run 'make sync-skill'."
exit 1
fi
fi

View File

@@ -0,0 +1,163 @@
# Monthly SKU catalog refresh.
#
# Runs on the 1st of each month at 09:00 UTC and on manual dispatch.
#
# Does two things:
# 1. `--refresh`: pulls latest PAYG prices from Oracle's public API,
# updates kb/pricing/oci-sku-catalog.yaml, and opens a PR if anything
# changed.
# 2. `--discover`: reports SKUs present in the API but absent from the
# catalog (filtered to serviceCategory values already curated).
# If new SKUs are found, opens a Gitea issue listing them by category
# for manual review.
#
# Token:
# Uses the auto-provisioned secrets.GITHUB_TOKEN (Gitea Actions provides this
# per-run, scoped to this repo, GitHub-Actions-compatible). No manual secret
# configuration required. The explicit `permissions:` block below grants the
# scopes needed to push a branch, open a PR, and open an issue.
name: SKU Catalog Refresh
on:
schedule:
- cron: '0 9 1 * *'
workflow_dispatch:
permissions:
contents: write
pull-requests: write
issues: write
jobs:
refresh-and-discover:
runs-on: ubuntu-latest
timeout-minutes: 15
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Setup Python
run: |
apt-get update -qq
apt-get install -y --no-install-recommends python3 python3-requests python3-yaml jq
python3 --version
- name: Refresh prices from Oracle API
id: refresh
run: |
python3 tools/refresh_sku_catalog.py --refresh --diff 2>&1 \
| tee /tmp/refresh.log
if git diff --quiet kb/pricing/oci-sku-catalog.yaml; then
echo "changed=false" >> $GITHUB_OUTPUT
else
echo "changed=true" >> $GITHUB_OUTPUT
fi
- name: Discover missing SKUs
id: discover
run: |
python3 tools/refresh_sku_catalog.py --discover -v 2>&1 \
| tee /tmp/discover.log
NEW_COUNT=$(sed -n 's/^DISCOVER_MISSING_COUNT=\([0-9]\+\)$/\1/p' \
/tmp/discover.log | tail -1)
echo "Parsed new_count='${NEW_COUNT}'"
echo "new_count=${NEW_COUNT:-0}" >> $GITHUB_OUTPUT
- name: Upload logs as artifact
if: always()
uses: actions/upload-artifact@v3
with:
name: sku-refresh-logs
path: |
/tmp/refresh.log
/tmp/discover.log
retention-days: 90
- name: Open PR with price updates
if: steps.refresh.outputs.changed == 'true'
env:
GITEA_TOKEN: ${{ secrets.GITHUB_TOKEN }}
GITEA_SERVER: ${{ github.server_url }}
GITEA_REPO: ${{ github.repository }}
run: |
DATE=$(date -u +%Y-%m-%d)
BRANCH="automation/sku-refresh-${DATE}-run${{ github.run_number }}"
git config user.name "sku-refresh-bot"
git config user.email "sku-refresh@automation.local"
git checkout -b "$BRANCH"
git add kb/pricing/oci-sku-catalog.yaml
git commit -m "chore(pricing): monthly SKU catalog refresh (${DATE})
Automated refresh from Oracle public pricing API.
See workflow artifact 'sku-refresh-logs' for the diff."
# Push using token auth
REMOTE=$(echo "$GITEA_SERVER/$GITEA_REPO.git" \
| sed "s#https://#https://sku-refresh-bot:${GITEA_TOKEN}@#")
git push "$REMOTE" "$BRANCH"
# Open PR via Gitea API (fail-fast + log response)
OWNER=$(echo "$GITEA_REPO" | cut -d/ -f1)
REPO=$(echo "$GITEA_REPO" | cut -d/ -f2)
PAYLOAD=$(jq -n \
--arg title "chore(pricing): monthly SKU refresh ${DATE}" \
--arg head "$BRANCH" \
--arg base "main" \
--arg body "$(printf 'Automated refresh — see run artifact for full refresh/discover logs.\n\n```\n%s\n```' \
"$(tail -40 /tmp/refresh.log)")" \
'{title:$title, head:$head, base:$base, body:$body}')
echo "Creating PR ${BRANCH} -> main ..."
RESPONSE=$(curl -sS -w "\nHTTP_STATUS=%{http_code}\n" -X POST \
-H "Authorization: token ${GITEA_TOKEN}" \
-H "Content-Type: application/json" \
"${GITEA_SERVER}/api/v1/repos/${OWNER}/${REPO}/pulls" \
-d "$PAYLOAD")
echo "$RESPONSE"
STATUS=$(echo "$RESPONSE" | grep -oE 'HTTP_STATUS=[0-9]+' | cut -d= -f2)
if [ "$STATUS" != "201" ]; then
echo "::error::PR creation failed with HTTP $STATUS"
exit 1
fi
- name: Open issue for new SKUs
if: steps.discover.outputs.new_count != '0'
env:
GITEA_TOKEN: ${{ secrets.GITHUB_TOKEN }}
GITEA_SERVER: ${{ github.server_url }}
GITEA_REPO: ${{ github.repository }}
NEW_COUNT: ${{ steps.discover.outputs.new_count }}
run: |
DATE=$(date -u +%Y-%m-%d)
OWNER=$(echo "$GITEA_REPO" | cut -d/ -f1)
REPO=$(echo "$GITEA_REPO" | cut -d/ -f2)
BODY=$(printf '## %s new SKUs detected in Oracle API\n\n**Detected:** %s\n\nThese SKUs are present in the Oracle public pricing API but not yet in `kb/pricing/oci-sku-catalog.yaml`. Filter: serviceCategory values already represented in our catalog (so only relevant families show up).\n\n### Full listing\n\n```\n%s\n```\n\n### Next step\n\nReview and add relevant entries to `kb/pricing/oci-sku-catalog.yaml` under the appropriate category block. After merging, prices will be picked up automatically on the next monthly refresh.\n' \
"$NEW_COUNT" "$DATE" "$(cat /tmp/discover.log)")
PAYLOAD=$(jq -n \
--arg title "SKU catalog: ${NEW_COUNT} new SKUs to review (${DATE})" \
--arg body "$BODY" \
'{title:$title, body:$body}')
echo "Creating issue: ${NEW_COUNT} new SKUs..."
RESPONSE=$(curl -sS -w "\nHTTP_STATUS=%{http_code}\n" -X POST \
-H "Authorization: token ${GITEA_TOKEN}" \
-H "Content-Type: application/json" \
"${GITEA_SERVER}/api/v1/repos/${OWNER}/${REPO}/issues" \
-d "$PAYLOAD")
echo "$RESPONSE"
STATUS=$(echo "$RESPONSE" | grep -oE 'HTTP_STATUS=[0-9]+' | cut -d= -f2)
if [ "$STATUS" != "201" ]; then
echo "::error::Issue creation failed with HTTP $STATUS"
exit 1
fi
- name: Summary
if: always()
run: |
echo "## SKU Refresh Summary" >> $GITHUB_STEP_SUMMARY
echo "- Catalog changed: ${{ steps.refresh.outputs.changed }}" >> $GITHUB_STEP_SUMMARY
echo "- New SKUs discovered: ${{ steps.discover.outputs.new_count }}" >> $GITHUB_STEP_SUMMARY

83
.githooks/pre-commit Normal file
View File

@@ -0,0 +1,83 @@
#!/usr/bin/env bash
# Pre-commit hook: keep .agents/skills/oci-deal-accelerator/SKILL.md
# byte-aligned with the root SKILL.md (the source of truth that
# CLAUDE.md / Claude Code reads). The Codex copy under .agents/
# follows the same content with an auto-generated banner — they MUST
# stay in lock-step or Claude Code and Codex will give the user
# different instructions.
#
# Behavior:
# 1. Only the .agents/ copy staged (no root SKILL.md change):
# REJECT — the .agents/ file is auto-generated, edits MUST land
# in root SKILL.md. Otherwise the next sync silently destroys
# the change.
# 2. Root SKILL.md staged: auto-run scripts/sync-skill.py and
# stage the regenerated .agents/ copy in the same commit.
# 3. Neither: nothing to do.
# • If the script can't run (no python, etc.), abort with a clear
# message rather than committing a desync silently.
#
# Install once per clone: make install-hooks (sets core.hooksPath)
set -euo pipefail
ROOT="$(git rev-parse --show-toplevel)"
SOURCE="SKILL.md"
TARGET=".agents/skills/oci-deal-accelerator/SKILL.md"
SCRIPT="scripts/sync-skill.py"
STAGED="$(git diff --cached --name-only)"
SOURCE_STAGED=0
TARGET_STAGED=0
echo "$STAGED" | grep -qx "$SOURCE" && SOURCE_STAGED=1 || true
echo "$STAGED" | grep -qx "$TARGET" && TARGET_STAGED=1 || true
# Case 1: only the auto-generated .agents/ copy is staged. Reject —
# the source of truth is root SKILL.md and a future sync will
# silently overwrite this change.
if [ "$TARGET_STAGED" = "1" ] && [ "$SOURCE_STAGED" = "0" ]; then
echo "" >&2
echo "pre-commit: REJECTED — you staged $TARGET in isolation." >&2
echo " This file is auto-generated from $SOURCE and the next" >&2
echo " ``make sync-skill`` (or this pre-commit hook firing on a" >&2
echo " later commit) will overwrite your changes silently." >&2
echo "" >&2
echo " Workflow:" >&2
echo " 1. Move your edits into $SOURCE." >&2
echo " 2. ``git restore --staged --worktree $TARGET``" >&2
echo " 3. ``git add $SOURCE`` and re-commit — the hook will" >&2
echo " regenerate the .agents/ copy automatically." >&2
echo "" >&2
exit 1
fi
# Nothing else to do unless root SKILL.md changed.
if [ "$SOURCE_STAGED" = "0" ]; then
exit 0
fi
if [ ! -f "$ROOT/$SCRIPT" ]; then
echo "pre-commit: $SCRIPT missing — cannot verify SKILL.md sync. Aborting." >&2
exit 1
fi
PYTHON="$(command -v python3 || command -v python || true)"
if [ -z "$PYTHON" ]; then
echo "pre-commit: no python found in PATH — cannot run $SCRIPT. Aborting." >&2
exit 1
fi
# Run the full sync, then stage the regenerated target so it travels
# in the same commit. (Idempotent — if it was already in sync, the
# file write is a no-op.)
"$PYTHON" "$ROOT/$SCRIPT" >&2
git add "$ROOT/$TARGET"
# Final check — if for any reason the result still drifts, fail loud.
if ! "$PYTHON" "$ROOT/$SCRIPT" --check >/dev/null 2>&1; then
echo "pre-commit: SKILL.md and $TARGET are still out of sync after auto-run." >&2
echo " Investigate scripts/sync-skill.py before committing." >&2
exit 1
fi
exit 0

30
.gitignore vendored
View File

@@ -1,9 +1,11 @@
.venv/
__pycache__/ __pycache__/
*.pyc *.pyc
*.pyo *.pyo
output/ output/
*.pptx *.pptx
!examples/sample-output/*.pptx !templates/Oracle_PPT-template_FY26.pptx
!kb/diagram/assets/OCI_Icons.pptx
# OCI Toolkit binary (download from Oracle, don't commit) # OCI Toolkit binary (download from Oracle, don't commit)
kb/diagram/OCI Library.xml kb/diagram/OCI Library.xml
@@ -11,24 +13,10 @@ kb/diagram/OCI Library.xml
# Build prompt (internal) # Build prompt (internal)
COMPLETE-BUILD-PROMPT.md COMPLETE-BUILD-PROMPT.md
# Client-specific examples (never commit customer data) # Ignore all examples content
examples/farma-sa-* examples/
# Skill-generated output folders (customer-specific, never commit) # Workspace / sandbox artifacts (never committed)
examples/output-*/ tmp/
.claude/scheduled_tasks.lock
# Exported screenshots (temporary) .claude/worktrees/
examples/*.png
# Exported ppts
examples/*.ppts
# Exported diagrams
examples/*.drawio
# Exported YAML files
examples/*.yaml
# Exported PDFfiles
examples/*.pdf
examples/*.xlsx

View File

@@ -85,32 +85,39 @@ DEFINE (Ideate → Validate → Plan) → DESIGN (Current → Future → Confi
Phase details in `docs/` — skill references them via progressive disclosure. Phase details in `docs/` — skill references them via progressive disclosure.
## Environment Setup (MANDATORY before running tools)
```bash
make venv && source .venv/bin/activate
```
The Makefile auto-detects the best available Python (3.12 > 3.11 > 3.10 > python3).
**Always use `make <target>` to run tools.** For custom specs, activate the venv first.
### Codex sandbox note
This project ships `.codex/config.toml` which enables `network_access = true`
for the workspace-write sandbox. This is required so `make venv` can reach
PyPI. If you see `No matching distribution found for pyyaml`, the config file
is missing or Codex is ignoring it — re-open the project from its root so
Codex loads `.codex/config.toml`.
## Running Tools ## Running Tools
```bash ```bash
# Generate slide deck (default output) # Standard targets (recommended)
make deck # slide deck with sample spec
make diagram # architecture diagram
make full # all outputs (pptx + drawio + docx + xlsx + pdf)
make validate # WA validation
make lint # check YAML syntax
make venv # create/update virtual environment
# Custom specs (activate venv first)
python tools/oci_deck_gen.py --spec examples/proposal-spec.yaml --output proposal.pptx python tools/oci_deck_gen.py --spec examples/proposal-spec.yaml --output proposal.pptx
# Generate customer-facing PDF (branded, no internal KB refs)
python tools/oci_pdf_gen.py --spec examples/proposal-spec.yaml --output proposal.pdf python tools/oci_pdf_gen.py --spec examples/proposal-spec.yaml --output proposal.pdf
# Generate diagram
python tools/oci_diagram_gen.py --spec examples/diagram-spec.yaml --output arch.drawio python tools/oci_diagram_gen.py --spec examples/diagram-spec.yaml --output arch.drawio
# Run WA validation
python scripts/validate-architecture.py \
--profile examples/sample-workload-profile.yaml \
--architecture examples/sample-architecture.yaml \
--output scorecard.yaml
# Output orchestrator (multiple formats at once)
python tools/oci_output.py --spec examples/proposal-spec.yaml --format full --output-dir output/ python tools/oci_output.py --spec examples/proposal-spec.yaml --format full --output-dir output/
# Build automation
make help # show all commands
make full # generate all outputs
make validate # run WA validation
make lint # check YAML syntax
``` ```
## Output Formats ## Output Formats
@@ -150,6 +157,32 @@ If a task generates YAML without the corresponding readable output, the task is
- **Readable outputs** — YAML is backing data, never the deliverable - **Readable outputs** — YAML is backing data, never the deliverable
- **No hallucinated architecture** — NEVER add services/components/regions the user didn't mention. When remediating WA gaps, apply minimum targeted fixes to the existing architecture; don't replace it with a generic "ideal" one. ASK before adding new services. - **No hallucinated architecture** — NEVER add services/components/regions the user didn't mention. When remediating WA gaps, apply minimum targeted fixes to the existing architecture; don't replace it with a generic "ideal" one. ASK before adding new services.
## Git Remotes (Gitea = source of truth, GitHub = mirror)
`origin` is configured with **one fetch URL (Gitea) and two push URLs (Gitea + GitHub)**, so a single `git push origin main` updates both. Gitea is authoritative; GitHub is a public mirror.
```
fetch → git.tech-lad.com.br/diegoecab/oci-deal-accelerator.git
push → git.tech-lad.com.br/diegoecab/oci-deal-accelerator.git
push → github.com/Diegoecab/oci-deal-accelerator.git
```
**Recreating this on a new clone** (the dual-push lives in `.git/config`, not tracked):
```bash
git remote set-url --add --push origin https://github.com/Diegoecab/oci-deal-accelerator.git
git remote set-url --add --push origin https://git.tech-lad.com.br/diegoecab/oci-deal-accelerator.git
git remote -v # confirm one fetch + two push URLs
```
The first command substitutes the implicit Gitea push URL with GitHub's; the second re-adds Gitea so origin pushes to BOTH. Counter-intuitive but necessary.
**Agent guidance**:
- After creating a commit on `main`, **always propose `git push origin main`** (not separate pushes per remote) — it covers both. Confirm with the user before pushing (pushing is shared-state).
- If a push fails on GitHub but succeeds on Gitea (or vice versa), the dual-push is partial. Re-run after fixing the failing one — Gitea's second push will be a no-op fast-forward.
- Never force-push Gitea unless explicitly asked; force-pushing GitHub is acceptable when needed because GitHub is downstream.
- If history diverges between Gitea and GitHub (e.g. after a rebase), the recovery pattern is: temporarily strip the GitHub URL (`git remote set-url --delete --push origin <github-url>`), push Gitea fast-forward, add `github` as a standalone remote, force-push, then restore the dual-push.
## Welcome Flow ## Welcome Flow
When the user starts a conversation without providing discovery notes or a specific request (e.g., a greeting or empty context), present the welcome message and capability menu defined in the skill's SKILL.md § Welcome Flow. Specifically: When the user starts a conversation without providing discovery notes or a specific request (e.g., a greeting or empty context), present the welcome message and capability menu defined in the skill's SKILL.md § Welcome Flow. Specifically:

116
CLAUDE.md
View File

@@ -110,47 +110,44 @@ doc only ← technical doc without slides
deliver ← handover + go-live checklist + success criteria deliver ← handover + go-live checklist + success criteria
``` ```
## Running Tools ## Environment Setup
Before running ANY Python tool, ensure dependencies are installed:
```bash ```bash
# Generate slide deck (default output) make venv && source .venv/bin/activate
```
The Makefile auto-detects the best available Python (3.12 > 3.11 > 3.10 > python3).
**Always use `make <target>` to run tools** — this guarantees the correct Python with all dependencies.
## Running Tools
Prefer `make` targets. For custom specs, activate the venv first (`source .venv/bin/activate`), then use `python`:
```bash
# Standard targets (recommended)
make deck # slide deck with sample spec
make diagram # architecture diagram
make full # all outputs (pptx + drawio + docx + xlsx + pdf)
make validate # WA validation
make lint # check YAML syntax
make venv # create/update virtual environment
make freshness # check KB freshness
# Custom specs (activate venv first)
python tools/oci_deck_gen.py --spec examples/proposal-spec.yaml --output proposal.pptx python tools/oci_deck_gen.py --spec examples/proposal-spec.yaml --output proposal.pptx
# Generate customer-facing PDF (branded, no internal KB refs)
python tools/oci_pdf_gen.py --spec examples/proposal-spec.yaml --output proposal.pdf python tools/oci_pdf_gen.py --spec examples/proposal-spec.yaml --output proposal.pdf
python tools/oci_pdf_gen.py --spec examples/proposal-spec.yaml --output proposal.pdf --diagram arch.png
# Generate BOM (.xlsx Bill of Materials)
python tools/oci_bom_gen.py --spec examples/bom-spec.yaml --output customer-bom.xlsx python tools/oci_bom_gen.py --spec examples/bom-spec.yaml --output customer-bom.xlsx
# Generate diagram
python tools/oci_diagram_gen.py --spec examples/diagram-spec.yaml --output arch.drawio python tools/oci_diagram_gen.py --spec examples/diagram-spec.yaml --output arch.drawio
# Run WA validation
python scripts/validate-architecture.py \
--profile examples/sample-workload-profile.yaml \
--architecture examples/sample-architecture.yaml \
--output scorecard.yaml
# Output orchestrator (multiple formats at once)
python tools/oci_output.py --spec examples/proposal-spec.yaml --format full --output-dir output/ python tools/oci_output.py --spec examples/proposal-spec.yaml --format full --output-dir output/
# Refresh SKU catalog from Oracle pricing API # KB maintenance (activate venv first)
python tools/refresh_sku_catalog.py --refresh # update all prices python tools/refresh_sku_catalog.py --refresh # update all prices
python tools/refresh_sku_catalog.py --refresh --diff # update + show changes python tools/refresh_sku_catalog.py --refresh --diff # update + show changes
python tools/refresh_sku_catalog.py --validate # check for stale prices python tools/refresh_sku_catalog.py --validate # check for stale prices
python tools/refresh_sku_catalog.py --sku B110627 # inspect single SKU python tools/refresh_arch_catalog.py --whats-new # crawl What's New pages
# Refresh Architecture Center catalog
python tools/refresh_arch_catalog.py --whats-new # crawl What's New pages
python tools/refresh_arch_catalog.py --url <url> # add single entry
python tools/refresh_arch_catalog.py --validate # validate catalog python tools/refresh_arch_catalog.py --validate # validate catalog
# Build automation
make help # show all commands
make full # generate all outputs
make validate # run WA validation
make lint # check YAML syntax
``` ```
## Key Principles ## Key Principles
@@ -162,13 +159,72 @@ make lint # check YAML syntax
- **KB is the moat** — field experience, not documentation regurgitation - **KB is the moat** — field experience, not documentation regurgitation
- **ECAL-aligned** — Define → Design → Deliver with iterative checkpoints - **ECAL-aligned** — Define → Design → Deliver with iterative checkpoints
## Git Remotes (Gitea = source of truth, GitHub = mirror)
`origin` is configured with **one fetch URL (Gitea) and two push URLs (Gitea + GitHub)**, so a single `git push origin main` updates both. Gitea is authoritative; GitHub is a public mirror.
```
fetch → git.tech-lad.com.br/diegoecab/oci-deal-accelerator.git
push → git.tech-lad.com.br/diegoecab/oci-deal-accelerator.git
push → github.com/Diegoecab/oci-deal-accelerator.git
```
**Recreating this on a new clone** (the dual-push lives in `.git/config`, not tracked):
```bash
git remote set-url --add --push origin https://github.com/Diegoecab/oci-deal-accelerator.git
git remote set-url --add --push origin https://git.tech-lad.com.br/diegoecab/oci-deal-accelerator.git
git remote -v # confirm one fetch + two push URLs
```
The first command substitutes the implicit Gitea push URL with GitHub's; the second re-adds Gitea so origin pushes to BOTH. Counter-intuitive but necessary.
**Agent guidance**:
- After creating a commit on `main`, **always propose `git push origin main`** (not separate pushes per remote) — it covers both. Confirm with the user before pushing (pushing is shared-state).
- If a push fails on GitHub but succeeds on Gitea (or vice versa), the dual-push is partial. Re-run after fixing the failing one — Gitea's second push will be a no-op fast-forward.
- Never force-push Gitea unless explicitly asked; force-pushing GitHub is acceptable when needed because GitHub is downstream.
- If history diverges between Gitea and GitHub (e.g. after a rebase), the recovery pattern is: temporarily strip the GitHub URL (`git remote set-url --delete --push origin <github-url>`), push Gitea fast-forward, add `github` as a standalone remote, force-push, then restore the dual-push.
## Coding Guidelines
### 1. Think Before Coding
Don't assume. Don't hide confusion. Surface tradeoffs.
- State your assumptions explicitly. If uncertain, ask.
- If multiple interpretations exist, present them — don't pick silently.
- If a simpler approach exists, say so. Push back when warranted.
- If something is unclear, stop. Name what's confusing. Ask.
### 2. Simplicity First
Minimum code that solves the problem. Nothing speculative.
- No features beyond what was asked.
- No abstractions for single-use code.
- No "flexibility" or "configurability" that wasn't requested.
- No error handling for impossible scenarios.
- If you write 200 lines and it could be 50, rewrite it.
### 3. Surgical Changes
Touch only what you must. Clean up only your own mess.
- Don't "improve" adjacent code, comments, or formatting.
- Don't refactor things that aren't broken.
- Match existing style, even if you'd do it differently.
- If you notice unrelated dead code, mention it — don't delete it.
- Remove imports/variables/functions that YOUR changes made unused.
- Every changed line should trace directly to the user's request.
### 4. Goal-Driven Execution
Define success criteria. Loop until verified.
- "Add validation" → write tests for invalid inputs, then make them pass.
- "Fix the bug" → write a test that reproduces it, then make it pass.
- "Refactor X" → ensure tests pass before and after.
- For multi-step tasks, state a brief plan with verification steps.
## Welcome Flow ## Welcome Flow
When the user starts a conversation without providing discovery notes or a specific request (e.g., a greeting like "hola", "hey", or empty context): When the user starts a conversation without providing discovery notes or a specific request (e.g., a greeting like "hola", "hey", or empty context):
**MANDATORY:** Use the `Read` tool to open `SKILL.md` and read the entire `## Welcome Flow` section **before** showing anything to the user. Reproduce the welcome banner and the 14-option capability menu **verbatim** from that file. Do NOT paraphrase, reorder, summarize, translate, or reconstruct the menu from memory, folder structure, or prior conversations. If `SKILL.md` cannot be read for any reason, tell the user instead of improvising a menu. **MANDATORY:** Use the `Read` tool to open `SKILL.md` and read the entire `## Welcome Flow` section **before** showing anything to the user. Reproduce the welcome banner and the 14-option capability menu **verbatim** from that file. Do NOT paraphrase, reorder, summarize, translate, or reconstruct the menu from memory, folder structure, or prior conversations. If `SKILL.md` cannot be read for any reason, tell the user instead of improvising a menu.
**Pre-flight check (also defined in SKILL.md):** Before showing the welcome message, run `python tools/kb_freshness.py --check --json`. If `stale_count > 0`, follow the banner-and-prompt logic in SKILL.md § Welcome Flow → Pre-flight. If the tool errors, silently skip the banner — never block the user. **Pre-flight check (also defined in SKILL.md):** Before showing the welcome message, run `make kb-check 2>/dev/null`. If `stale_count > 0`, follow the banner-and-prompt logic in SKILL.md § Welcome Flow → Pre-flight. If the tool errors, silently skip the banner — never block the user.
Then: Then:

View File

@@ -1,8 +1,15 @@
# OCI Deal Accelerator — Build Automation # OCI Deal Accelerator — Build Automation
.PHONY: help install test validate example diagram deck full clean lint codex-package update-icons freshness freshness-refresh sync-skill .PHONY: help install test validate example diagram deck full clean lint codex-package update-icons freshness freshness-refresh sync-skill sku-discover pptx-icons-refresh archcenter-benchmark-20 diagram-lookup diagram-validate-spec archcenter-descriptions-refresh diagram-spec-audit archcenter-smoke install-hooks archcenter-templates-refresh
PYTHON ?= python3.12 # Use venv if present, otherwise find best available python3
ifneq (,$(wildcard .venv/bin/python))
PYTHON ?= .venv/bin/python
else ifneq (,$(shell command -v python3.12 2>/dev/null))
PYTHON ?= python3.12
else
PYTHON ?= python3
endif
SPEC_DIR = examples SPEC_DIR = examples
OUTPUT_DIR = examples/sample-output OUTPUT_DIR = examples/sample-output
@@ -10,7 +17,34 @@ help: ## Show this help
@grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | \ @grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | \
awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-20s\033[0m %s\n", $$1, $$2}' awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-20s\033[0m %s\n", $$1, $$2}'
install: ## Install Python dependencies VENV_PYTHON := $(shell command -v python3.12 2>/dev/null || command -v python3.11 2>/dev/null || command -v python3.10 2>/dev/null || echo python3)
venv: .venv/.deps-installed ## Create or update venv (idempotent — no-op if requirements.txt unchanged)
# Marker file pattern: the venv only rebuilds when requirements.txt is
# newer than the marker. A fresh `make venv` after a successful install
# is an instant no-op (was 1m53s on Codex sandboxes — every turn).
# To force a rebuild: `rm .venv/.deps-installed` (or `rm -rf .venv`).
.venv/.deps-installed: requirements.txt
@if [ ! -x .venv/bin/python ]; then \
echo "Using $(VENV_PYTHON) to create venv..."; \
$(VENV_PYTHON) -m venv .venv; \
fi
.venv/bin/pip install --upgrade pip
.venv/bin/pip install -r requirements.txt
@touch .venv/.deps-installed
@echo "Virtual environment ready. Run: source .venv/bin/activate"
@echo "Tip: run 'make install-hooks' once to enable the pre-commit"
@echo " hook that keeps SKILL.md in sync with the Codex copy."
install-hooks: ## Install repo-versioned git hooks (pre-commit auto-syncs SKILL.md)
@if [ ! -d .git ]; then echo "install-hooks: not a git repo"; exit 1; fi
git config core.hooksPath .githooks
@echo "install-hooks: core.hooksPath set to .githooks"
@echo " → pre-commit now auto-syncs .agents/skills/.../SKILL.md"
@echo " whenever SKILL.md is part of the staged change set."
install: ## Install Python dependencies (system-wide)
pip install -r requirements.txt pip install -r requirements.txt
validate: ## Validate imports and configs validate: ## Validate imports and configs
@@ -56,6 +90,49 @@ update-icons: ## Re-extract OCI icons after updating OCI Library.xml
$(PYTHON) tools/oci_icon_extractor.py $(PYTHON) tools/oci_icon_extractor.py
@echo "Updated kb/diagram/oci-icons.json from OCI Library.xml" @echo "Updated kb/diagram/oci-icons.json from OCI Library.xml"
pptx-icons-refresh: ## Refresh bundled OCI_Icons.pptx asset + manifest/index for native PPTX diagrams
$(PYTHON) tools/refresh_pptx_icon_index.py
@echo "Updated kb/diagram/oci-pptx-icons-manifest.yaml and oci-pptx-icons-index.json"
archcenter-benchmark-20: ## Run 20-case Oracle Architecture Center native benchmark
$(PYTHON) tools/oci_archcenter_batch.py \
--limit 20 \
--threshold 0.82 \
--fidelity-threshold 0.90 \
--output-root examples/eval-2026-04-25-archcenter-native-20-v8
diagram-lookup: ## Find Architecture Center reference patterns. Usage: make diagram-lookup QUERY="mysql heatwave HA"
@if [ -z "$(QUERY)" ]; then echo "Usage: make diagram-lookup QUERY=\"<topology>\""; exit 1; fi
$(PYTHON) tools/archcenter_pattern_lookup.py "$(QUERY)" --top $${TOP:-5}
diagram-validate-spec: ## Validate a diagram spec's geometry. Usage: make diagram-validate-spec SPEC=path/to/spec.yaml
@if [ -z "$(SPEC)" ]; then echo "Usage: make diagram-validate-spec SPEC=<path>"; exit 1; fi
$(PYTHON) tools/diagram_spec_validator.py --spec "$(SPEC)" --strict
diagram-spec-audit: ## Run spec validator across every diagram-spec in examples/, print pass/fail summary
@echo "Auditing diagram specs under examples/..."
@total=0; failed=0; \
for f in $$(find examples -name 'diagram-spec.yaml' -o -name '*-diagram-spec.yaml'); do \
total=$$((total+1)); \
$(PYTHON) tools/diagram_spec_validator.py --spec "$$f" --strict >/dev/null 2>&1 || { \
failed=$$((failed+1)); echo " FAIL $$f"; \
}; \
done; \
echo "Audited $$total spec(s); $$failed failed."
archcenter-descriptions-refresh: ## Re-fetch _description.md for every Architecture Center entry
$(PYTHON) tools/archcenter_description_fetcher.py --limit 200 --sleep 0.5
archcenter-templates-refresh: ## Extract absolute_layout YAML scaffolds from every cached .drawio
$(PYTHON) tools/archcenter_drawio_to_template.py
archcenter-smoke: ## 3-case Architecture Center reconstruction smoke test (CI-friendly)
$(PYTHON) tools/oci_archcenter_batch.py \
--limit 3 \
--threshold 0.78 \
--fidelity-threshold 0.85 \
--output-root tmp/archcenter-smoke
clean: ## Remove generated output files clean: ## Remove generated output files
rm -f examples/sample-output/*.drawio rm -f examples/sample-output/*.drawio
rm -f examples/sample-output/*.pptx rm -f examples/sample-output/*.pptx
@@ -76,5 +153,11 @@ sync-skill: ## Regenerate .agents/skills/oci-deal-accelerator/SKILL.md from root
freshness: ## Report stale KB files (informational, never fails) freshness: ## Report stale KB files (informational, never fails)
-@$(PYTHON) tools/kb_freshness.py --check -@$(PYTHON) tools/kb_freshness.py --check
kb-check: ## KB freshness JSON (used by skill welcome-flow pre-flight)
@$(PYTHON) tools/kb_freshness.py --check --json
freshness-refresh: ## Run refresh tools for stale KB files that support automation freshness-refresh: ## Run refresh tools for stale KB files that support automation
@$(PYTHON) tools/kb_freshness.py --auto-refresh @$(PYTHON) tools/kb_freshness.py --auto-refresh
sku-discover: ## Report SKUs present in Oracle API but missing from oci-sku-catalog.yaml
@$(PYTHON) tools/refresh_sku_catalog.py --discover

173
README.md
View File

@@ -11,9 +11,47 @@ What normally takes an SA days of work (structuring notes, designing architectur
- **ECAL 3.1 native** — engagement RACI, artefact catalog, readiness scoring, and lessons learned per step baked into the workflow - **ECAL 3.1 native** — engagement RACI, artefact catalog, readiness scoring, and lessons learned per step baked into the workflow
- **Field knowledge, beyond the docs** — built-in KB with real gotchas, workarounds, and sizing lessons from production OCI deployments - **Field knowledge, beyond the docs** — built-in KB with real gotchas, workarounds, and sizing lessons from production OCI deployments
- **Honest about trade-offs** — flags OCI limitations and competitive gaps instead of overselling - **Honest about trade-offs** — flags OCI limitations and competitive gaps instead of overselling
- **Multi-cloud aware** — supports hybrid/multi-cloud diagrams (AWS, Azure, GCP icons) and considers options like ADB Multicloud before recommending full migration - **Multi-cloud aware** — supports hybrid/multi-cloud diagrams (AWS, Azure, GCP, plus external brand icons such as Slack and Jira) and considers options like ADB Multicloud before recommending full migration
- **MCP-tolerant inputs** — deck, diagram, BOM, and business-case generators accept flat MCP payloads and common field aliases instead of requiring one rigid schema
- **End-to-end coverage** — from discovery notes to go-live checklist, not just the architecture slide - **End-to-end coverage** — from discovery notes to go-live checklist, not just the architecture slide
## New user? Start here
The skill runs as a hosted MCP server. Connect once from your LLM client, sign in with Oracle SSO, and the tools are ready.
Fastest path: open AI Factory Hub at `https://ai-lad.com/`, search for `OCI Deal Accelerator`, and install it from there. If you prefer manual setup, use the MCP client instructions below.
**1. Add the MCP server to your client (manual setup):**
| Client | How |
|---|---|
| **Claude Code** | `claude mcp add --transport http oci-deal-accelerator "https://mcp.tech-lad.com/deal-accelerator/mcp/"` |
| **Codex** | `codex mcp add oci-deal-accelerator --url "https://mcp.tech-lad.com/deal-accelerator/mcp/"` |
| **Cursor** | Settings (Ctrl+Shift+J) → MCP → Add new MCP server → Name: `oci-deal-accelerator`, Type: `streamable-http`, URL: `https://mcp.tech-lad.com/deal-accelerator/mcp/` |
| **Claude Desktop** | Add to `claude_desktop_config.json`: `{ "mcpServers": { "oci-deal-accelerator": { "transport": "http", "url": "https://mcp.tech-lad.com/deal-accelerator/mcp/" } } }` |
| **Windsurf** | Settings → Cascade → MCP → Manual config: `{ "oci-deal-accelerator": { "serverUrl": "https://mcp.tech-lad.com/deal-accelerator/sse/" } }` |
**2. Trigger the connection** — type `/mcp` in Claude Code or Codex, or open any tool in Cursor / Claude Desktop / Windsurf. Your browser opens automatically.
**3. Pick one of two options in the browser:**
- **Sign in with Oracle SSO** — for existing users
- **Create a new account** — for new users (see step 4)
**4. New users — create an account** by clicking "Create a new account". This opens an OCI self-registration form (oracle.com emails only). Tips:
- Use your full Oracle email as User ID (e.g. `name@oracle.com`)
- Password must be 12+ chars, with an uppercase letter, a number, and a special character
- Password must NOT contain your name or username
**5. Verify your email**, then return to the browser and click **Sign in with Oracle SSO**.
**6. Done.** The MCP tools are now available in your client.
### Connection URLs
- **AI Factory Hub:** `https://ai-lad.com/`
- **MCP (HTTP streamable):** `https://mcp.tech-lad.com/deal-accelerator/mcp/`
- **SSE (Windsurf only):** `https://mcp.tech-lad.com/deal-accelerator/sse/`
## What It Produces ## What It Produces
From unstructured input (meeting notes, emails, Slack threads), the skill generates: From unstructured input (meeting notes, emails, Slack threads), the skill generates:
@@ -27,10 +65,12 @@ From unstructured input (meeting notes, emails, Slack threads), the skill genera
| **Business Case** — TCO, ROI, value drivers, risk assessment | .pptx | Define | Ideate | | **Business Case** — TCO, ROI, value drivers, risk assessment | .pptx | Define | Ideate |
| **Joint Engagement Plan** — scope, resources, timeline | YAML | Define | Plan | | **Joint Engagement Plan** — scope, resources, timeline | YAML | Define | Plan |
| **Discovery Questionnaire** — structured IT landscape collection | YAML | Design | Current | | **Discovery Questionnaire** — structured IT landscape collection | YAML | Design | Current |
| **Architecture Diagram**official Oracle visual style, multi-cloud support | .drawio | Design | Future | | **Architecture Diagram**Oracle reference-architecture geometry, multi-cloud + external brand support | .drawio / .pptx | Design | Future |
| **Slide Deck** — 6-15 slides scaled to engagement complexity | .pptx | Design | Confirm | | **Slide Deck** — 6-15 slides scaled to engagement complexity | .pptx | Design | Confirm |
| **Customer PDF** — branded, no internal KB references | .pdf | Design | Confirm | | **Customer PDF** — branded, no internal KB references | .pdf | Design | Confirm |
| **Cost Estimate** — BYOL vs PAYG breakdown with assumptions | YAML | Design | Future | | **Cost Estimate** — BYOL vs PAYG breakdown with assumptions | YAML | Design | Future |
| **Bill of Materials (BOM)** — requested SKUs only, formula-driven totals, discount-aware workbook | .xlsx | Design | Future |
| **AppCA-ready BOM** — AppCA import sheet plus full BOM workbook detail | .xlsx | Design | Future |
| **Well-Architected Scorecard** — 5-pillar automated validation | YAML | Design | Future | | **Well-Architected Scorecard** — 5-pillar automated validation | YAML | Design | Future |
| **Operations Model** — day-2 monitoring, patching, incident response | YAML | Design | Future | | **Operations Model** — day-2 monitoring, patching, incident response | YAML | Design | Future |
| **ECAL Readiness Scorecard** — 60-artefact gap analysis per phase | Text | All | All | | **ECAL Readiness Scorecard** — 60-artefact gap analysis per phase | Text | All | All |
@@ -66,9 +106,40 @@ deck + pdf ← + customer-facing PDF (branded, no internal refs)
pdf ← customer PDF only pdf ← customer PDF only
bizcase ← business case deck for customer approval bizcase ← business case deck for customer approval
full ← everything (pptx + drawio + docx + xlsx + pdf) full ← everything (pptx + drawio + docx + xlsx + pdf)
bom ← bill of materials (.xlsx)
deliver ← handover + go-live checklist + success criteria deliver ← handover + go-live checklist + success criteria
``` ```
Standalone architecture diagrams can be generated as editable `.drawio` files or as native Oracle-style `.pptx` diagrams/slides, depending on the workflow you trigger.
## Example Prompts
These copy/paste prompts are good demo asks for the newest user-visible features, especially when using Codex or another MCP client.
### Native PowerPoint diagram (.pptx)
```text
Generame un diagrama nativo en .pptx, simple y prolijo, de esta arquitectura: usuarios externos -> load balancer público -> 2 VMs de aplicación en subnet privada -> Autonomous Database Serverless. Quiero que quede presentable para mostrar directo en PowerPoint. No me pidas YAML ni setup adicional.
```
### Brand icons + OIC + dual output
```text
Generate a simple high-level integration diagram for this flow: Slack -> Oracle Integration Cloud (OIC) -> Jira Service Management -> My Oracle Support. Add clear Client, Oracle, and External layers. Use brand icons for Slack and Jira Service Management, and deliver both .drawio and .pptx.
```
### Real multicloud topology
```text
Generate a high-level architecture diagram for this scenario: 1 PostgreSQL in OCI Ashburn, accessed from GCP Virginia through interconnect. PostgreSQL connects internally to 1 Autonomous Database Serverless, which also has 1 refreshable clone in the same region but in a different AD. Deliver both .drawio and .pptx. Keep it simple, executive-friendly, and technically correct.
```
### Discount-aware BOM
```text
Gere um BOM em USD para este cenário: PostgreSQL no OCI com 4 OCPU e 500 GB, ADB-S com 200 ECPU e 1 TB BYOL, 1 refreshable clone com o mesmo sizing e FastConnect de 1 Gbps. Aplique 11% de desconto, 12 meses, 24 horas por dia. Quero o arquivo .xlsx e um resumo claro do custo mensal e anual.
```
## Knowledge Base ## Knowledge Base
The KB is the moat — field experience, not documentation regurgitation. The KB is the moat — field experience, not documentation regurgitation.
@@ -120,7 +191,13 @@ kb/services/dbexpert-api-reference.yaml # API endpoints and refresh procedure
### Architecture Center Catalog ### Architecture Center Catalog
**123 Oracle Architecture Center reference architectures** (`kb/architecture-center/catalog.yaml`) covering Database@Azure/AWS/Google Cloud, networking, security, AI/ML, migration, HA/DR, and more. **123 Oracle Architecture Center reference architectures** (`kb/architecture-center/catalog.yaml`) covering Database@Azure/AWS/Google Cloud, networking, security, AI/ML, migration, HA/DR, and more. Each entry includes title, URL, tags, services, and a 1-line summary; **121 also have a cached `_description.md`** with the full "About this architecture" text fetched from docs.oracle.com.
Cached locally under `kb/diagram/assets/archcenter-refs/<slug>/`:
- `_description.md` — Oracle's architecture rationale (used by both the lookup tool and SKILL.md option 10 "Reference architecture lookup")
- `*.drawio` — official editable source for ~110 references (where Oracle ships a zip)
- `_template.yaml` — extracted `absolute_layout` scaffold so new diagrams can start from Oracle geometry instead of from scratch
- `*.svg` / `*.png` — raster fallback for the rest
During **Phase 2 (DESIGN)**, the skill automatically matches the proposed architecture against the catalog: During **Phase 2 (DESIGN)**, the skill automatically matches the proposed architecture against the catalog:
@@ -131,6 +208,47 @@ During **Phase 2 (DESIGN)**, the skill automatically matches the proposed archit
python tools/refresh_arch_catalog.py --whats-new # crawl What's New pages python tools/refresh_arch_catalog.py --whats-new # crawl What's New pages
python tools/refresh_arch_catalog.py --url <url> # add a single entry python tools/refresh_arch_catalog.py --url <url> # add a single entry
python tools/refresh_arch_catalog.py --validate # validate catalog integrity python tools/refresh_arch_catalog.py --validate # validate catalog integrity
python tools/refresh_arch_catalog.py --check-links # check for broken URLs (404s, redirects)
# Topology lookup — base your diagram on the closest Oracle reference
python tools/archcenter_pattern_lookup.py "mysql heatwave high availability load balancer"
python tools/archcenter_pattern_lookup.py "fastconnect exacs cross region" --top 10
# Re-fetch description text after a catalog refresh
python tools/archcenter_description_fetcher.py --limit 200
# Re-download cached drawio/svg/png assets after a catalog refresh
python tools/archcenter_zip_downloader.py # idempotent; skips slugs whose folder already has a .drawio
```
The cached assets under `kb/diagram/assets/archcenter-refs/` (~83MB) are committed so the skill works offline. Lookup uses a local index for near-instant matches, and can be rebuilt manually when needed. Refresh quarterly or when `refresh_arch_catalog.py --whats-new` adds entries — both downloader and description fetcher are idempotent and only fetch what's missing.
### KB Health & Freshness
The KB is automatically monitored for staleness and broken links:
| Check | How | When |
|---|---|---|
| **Broken links** | `python tools/refresh_arch_catalog.py --check-links` | Weekly (CI), or on demand |
| **Stale prices** | `python tools/refresh_sku_catalog.py --validate` | Weekly (CI), or on demand |
| **KB freshness** | `python tools/kb_freshness.py --check` | On skill startup (pre-flight) |
| **Diagram spec geometry** | `python tools/diagram_spec_validator.py --spec <spec.yaml>` | Auto, before every drawio/PPTX render |
| **Diagram XML output** | `python tools/drawio_visual_validator.py <file.drawio>` | Auto, after `oci_diagram_gen.py` saves |
**Automated CI/CD:**
- **Deploy workflow** (`.gitea/workflows/deploy.yaml`) — auto-deploys to MCP server on every push to `main`
- **KB health workflow** (`.gitea/workflows/kb-health.yaml`) — runs every Monday 8am UTC, checks all catalog URLs and SKU freshness, reports broken links as artifacts
To run KB health manually:
```bash
# Check all 123 Architecture Center URLs for 404s
python tools/refresh_arch_catalog.py --check-links
# Fix broken links: re-crawl What's New for updated URLs
python tools/refresh_arch_catalog.py --whats-new
# Refresh stale pricing from Oracle API
python tools/refresh_sku_catalog.py --refresh --diff
``` ```
### Feature Compatibility Matrix ### Feature Compatibility Matrix
@@ -282,6 +400,8 @@ If you paste discovery notes directly, the skill skips the menu and goes straigh
## Tools ## Tools
All major generators accept either the canonical nested YAML specs or the flatter MCP payload aliases used by hosted clients.
```bash ```bash
# Slide deck generation (technical proposal) # Slide deck generation (technical proposal)
python tools/oci_deck_gen.py --spec examples/proposal-spec.yaml --output proposal.pptx python tools/oci_deck_gen.py --spec examples/proposal-spec.yaml --output proposal.pptx
@@ -293,15 +413,36 @@ python tools/oci_pdf_gen.py --spec examples/proposal-spec.yaml --output proposal
# Business case deck # Business case deck
python tools/oci_bizcase_gen.py --spec business-case.yaml --output business-case.pptx python tools/oci_bizcase_gen.py --spec business-case.yaml --output business-case.pptx
# Architecture diagram # Architecture diagram — see docs/skill/output-formats.md
python tools/oci_diagram_gen.py --spec examples/diagram-spec.yaml --output arch.drawio # § "Standard diagram-generation procedure (MANDATORY)" for the full
# workflow: ref-arch lookup → pre-generation review → spec authoring
# → automatic spec validator → render → visual verification.
# Supports OCI fallback aliases for services whose official toolkit icons
# are still missing (for example PostgreSQL/Redis) plus `brand_icon` for
# third-party systems such as Slack and Jira in both drawio and PPTX.
python tools/archcenter_pattern_lookup.py "<topology keywords>" # 1. find canonical Oracle reference
python tools/oci_diagram_gen.py --spec examples/diagram-spec.yaml --output arch.drawio # 2. render (validators run automatically)
python tools/oci_pptx_render.py --pptx arch.pptx --output arch.png --width 1600 # 3. rasterize PPTX for visual review
# Pre-render geometry validator (auto-invoked by both renderers; CLI for ad-hoc spec checks)
python tools/diagram_spec_validator.py --spec examples/diagram-spec.yaml --strict
# Post-render XML validator (auto-invoked inside OCIDiagramGenerator.save())
python tools/drawio_visual_validator.py arch.drawio
# Output orchestrator (multiple formats at once) # Output orchestrator (multiple formats at once)
python tools/oci_output.py --spec examples/proposal-spec.yaml --format full --output-dir output/ python tools/oci_output.py --spec examples/proposal-spec.yaml --format full --output-dir output/
python tools/oci_output.py --spec examples/exacs-bom-spec.yaml --format bom --output-dir output/
# BOM / AppCA workbook
python tools/oci_bom_gen.py --spec examples/exacs-bom-spec.yaml --output customer-bom.xlsx
python tools/oci_bom_gen.py --spec examples/exacs-bom-spec.yaml --output customer-appca.xlsx --appca
# Architecture Center catalog # Architecture Center catalog
python tools/refresh_arch_catalog.py --validate python tools/refresh_arch_catalog.py --validate
python tools/refresh_arch_catalog.py --whats-new python tools/refresh_arch_catalog.py --whats-new
python tools/refresh_arch_catalog.py --check-links
python tools/archcenter_pattern_lookup.py "adb gcp fastconnect" --rebuild-index
# Feature compatibility # Feature compatibility
python tools/feature_matrix_cli.py check "Auto Scaling" adb_s 23ai python tools/feature_matrix_cli.py check "Auto Scaling" adb_s 23ai
@@ -360,6 +501,28 @@ For temporary overrides (e.g., focusing on a specific customer), create `AGENTS.
Full setup details: [`codex/README.md`](codex/README.md) Full setup details: [`codex/README.md`](codex/README.md)
#### Keeping the Claude and Codex skills in sync
The root `SKILL.md` (read by Claude Code) and `.agents/skills/oci-deal-accelerator/SKILL.md` (read by Codex) MUST stay byte-aligned modulo an auto-generated banner. If they drift, the two agents give the user different instructions.
Three layers of defense, run from least to most enforcement:
1. **Local pre-commit hook (recommended once per clone):**
```bash
make install-hooks
```
Sets `core.hooksPath = .githooks`. From then on, any commit that touches `SKILL.md` auto-runs `scripts/sync-skill.py` and stages the regenerated `.agents/` copy in the same commit. No manual step required.
2. **Manual sync (anytime):**
```bash
make sync-skill # write the .agents/ copy from SKILL.md
make lint # check (also runs sync --check)
```
3. **CI gate (`.gitea/workflows/skill-sync.yaml`):** every push/PR runs `python scripts/sync-skill.py --check` and fails the build if the two files have drifted. Catches anyone who skipped the hook.
**Direction is always root → `.agents/`.** The `.agents/` copy is auto-generated; do NOT edit it directly — the next sync will silently overwrite your changes. Both the local pre-commit hook and the CI gate REJECT a commit/PR that stages `.agents/skills/oci-deal-accelerator/SKILL.md` without a matching root `SKILL.md` change. If you find yourself wanting to tweak the Codex side specifically, that signal belongs in `AGENTS.md` (Codex-only project instructions) — `SKILL.md` content stays unified across both agents.
## Roadmap ## Roadmap
### ECAL Completeness (see `docs/ecal-gaps-backlog.md` for full list) ### ECAL Completeness (see `docs/ecal-gaps-backlog.md` for full list)

229
SKILL.md
View File

@@ -15,32 +15,54 @@ You follow the **Oracle ECAL framework** (Define → Design → Deliver) to prod
When the user starts a conversation without providing discovery notes or a specific request, present the welcome message and capability menu. When the user starts a conversation without providing discovery notes or a specific request, present the welcome message and capability menu.
### Pre-flight: KB freshness check ### Pre-flight checks
**Before showing the welcome message**, run `python tools/kb_freshness.py --check --json` and parse the JSON output. Behavior based on the result: Run these checks silently **before** showing the welcome message. **CRITICAL:** Never show command execution, tool output, or errors to the user. If any check fails, silently skip it and proceed to the welcome message. These checks are informational — they NEVER block the user.
- **`stale_count == 0`** → proceed directly to the welcome message. No banner. #### Check 1: KB changelog banner
- **`stale_count > 0` and at least one file has `refreshable: true`** → prepend this banner above the menu and ask the user inline:
Read the file `kb/CHANGELOG.md` and extract the **most recent date and first bullet point**. If the file exists and has entries, prepend a one-line banner above the welcome message:
```
📢 KB updated (<date>): <first bullet summary>
```
Example: `📢 KB updated (Apr 14): Diagram generator calibrated from 37 Oracle ref architectures`
If the file is missing or empty, skip — no banner.
#### Check 2: Local repo updates (git users only)
Run `git fetch --dry-run origin main 2>/dev/null`. If the output contains any text (meaning there are remote commits not yet pulled), prepend this banner:
```
📢 KB updates available — run `git pull` to get latest prices and fixes.
```
If the command fails (not a git repo, no network, MCP deployment), silently skip. This check is only relevant for users running the skill from a local git clone.
#### Check 3: KB freshness
Run `make kb-check 2>/dev/null` and parse the JSON output. Behavior:
- **`stale_count == 0`** → no banner.
- **`stale_count > 0` and at least one file has `refreshable: true`** → prepend banner and ask inline:
``` ```
⚠️ KB freshness: <N> file(s) outdated (oldest: <file> — <age_days>d). ⚠️ KB freshness: <N> file(s) outdated (oldest: <file> — <age_days>d).
<M> can be auto-refreshed (SKU catalog, Architecture Center). <M> can be auto-refreshed. Refresh now? [y/N]
Refresh now before showing the menu? [y/N]
``` ```
- If the user replies `y` / `yes` / `` → run `python tools/kb_freshness.py --auto-refresh`, wait for completion, then show the menu. - `y` / `yes` / `` → run `make freshness-refresh`, then show menu.
- If the user replies `n` / anything else → show the menu immediately, with a one-line compact reminder above it: `⚠️ <N> KB file(s) stale — run /freshness or python tools/kb_freshness.py --auto-refresh later.` - Anything else → show menu with one-line reminder: `⚠️ <N> KB file(s) stale — run make freshness-refresh later.`
- **`stale_count > 0` but no file has `refreshable: true`** (only manual files stale) → prepend a non-blocking informational banner above the menu, do NOT ask: - **`stale_count > 0` but no `refreshable: true`** → non-blocking info banner, then show menu directly:
``` ```
⚠️ KB freshness: <N> file(s) need manual review (oldest: <file> — <age_days>d). ⚠️ KB freshness: <N> file(s) need manual review (oldest: <file> — <age_days>d).
No automated refresh available — see kb/README.md for review process.
``` ```
Then show the menu directly. If `make kb-check` errors out (exit ≠ 0, missing make, missing Python, missing tool), **silently skip** — no error output, no banner, no mention of failure.
**Important**: this check is informational, not gating. If `kb_freshness.py` errors out (exit 2 or missing tool), silently fall back to showing the welcome message — never block the user on tooling failures.
### Welcome Message ### Welcome Message
@@ -61,10 +83,10 @@ Present these options as a compact numbered list. Each option has a bold title f
``` ```
DESIGN & PROPOSE DESIGN & PROPOSE
───────────────── ─────────────────
1. 📋 Full proposal — *notes → architecture + deck + diagram + costs* 1. 📋 Full proposal — *notes → architecture + deck + native PPTX diagram + costs*
2. 📐 Architecture diagram — *YAML or description → .drawio* 2. 📐 Architecture diagram — *description → .drawio or native PPTX*
3. 📊 Slide deck — *architecture → .pptx* 3. 📊 Slide deck — *architecture → .pptx with native OCI diagram*
4. 💰 Cost estimate — *services + sizing → PAYG vs BYOL* 4. 💰 Cost estimate — *quick PAYG/BYOL comparison while you scope (terminal + optional deck)*
VALIDATE & CHECK VALIDATE & CHECK
───────────────── ─────────────────
@@ -88,19 +110,63 @@ Present these options as a compact numbered list. Each option has a bold title f
SA TOOLS SA TOOLS
───────────────── ─────────────────
13. 📦 BOM generator — *services + quantities → .xlsx Bill of Materials* 13. 📦 BOM generator — *formal .xlsx artefact you send to the customer*
14. 📤 BOM for AppCA — *BOM → .xlsx ready to import into AppCA* 14. 📤 BOM for AppCA — *BOM → .xlsx ready to import into AppCA*
━━━━━━━━━━━━━━━━━━━━━━━ ━━━━━━━━━━━━━━━━━━━━━━━
Pick a number, or just describe what you need. Pick a number, or just describe what you need.
``` ```
### Example Direct Requests
If the user asks for examples, or skips the menu and writes a natural-language request, prompts like these map directly to the capabilities above:
- `Generame un diagrama nativo en .pptx, simple y prolijo, de esta arquitectura: usuarios externos -> load balancer público -> 2 VMs de aplicación en subnet privada -> Autonomous Database Serverless. Quiero que quede presentable para mostrar directo en PowerPoint. No me pidas YAML ni setup adicional.`
- `Generate a simple high-level integration diagram for this flow: Slack -> Oracle Integration Cloud (OIC) -> Jira Service Management -> My Oracle Support. Add clear Client, Oracle, and External layers. Use brand icons for Slack and Jira Service Management, and deliver both .drawio and .pptx.`
- `Generate a high-level architecture diagram for this scenario: 1 PostgreSQL in OCI Ashburn, accessed from GCP Virginia through interconnect. PostgreSQL connects internally to 1 Autonomous Database Serverless, which also has 1 refreshable clone in the same region but in a different AD. Deliver both .drawio and .pptx. Keep it simple, executive-friendly, and technically correct.`
- `Gere um BOM em USD para este cenário: PostgreSQL no OCI com 4 OCPU e 500 GB, ADB-S com 200 ECPU e 1 TB BYOL, 1 refreshable clone com o mesmo sizing e FastConnect de 1 Gbps. Aplique 11% de desconto, 12 meses, 24 horas por dia. Quero o arquivo .xlsx e um resumo claro do custo mensal e anual.`
### Behavior Rules ### Behavior Rules
- If the user picks **1**, ask: "Paste your discovery notes (meeting notes, emails, whatever you have)." - If the user picks **1**, ask: "Paste your discovery notes (meeting notes, emails, whatever you have)."
- If the user picks **2**, ask: "Describe the architecture you want to diagram, or paste a YAML spec if you have one." - If the user picks **2**, ask **two explicit questions** in one message and wait for both answers before doing anything else:
- If the user picks **3**, ask: "Describe the architecture or paste the spec. I'll generate the deck."
- If the user picks **4**, ask: "What services and sizing? (e.g., 'ADB-S 8 OCPU + 2 VMs + FastConnect')" ```
1. Describe the architecture you want to diagram (or paste a YAML spec if you have one).
2. Which output format(s) do you want? Pick one or more:
(a) .drawio — editable technical diagram
(b) .pptx — native Oracle-style PowerPoint diagram/slide
(c) both
```
After the user answers, **follow these steps in order — do NOT skip step 1**:
1. **Reference-architecture lookup.** Run `python tools/archcenter_pattern_lookup.py "<topology keywords>"` against `kb/architecture-center/catalog.yaml` (123 Oracle-curated entries with cached `.drawio` / `_description.md` / `_template.yaml` under `kb/diagram/assets/archcenter-refs/`). Pick the highest-scoring entry whose topology matches.
- **The cached `_template.yaml` is your YAML SCAFFOLD** — auto-extracted from the canonical `.drawio` by `tools/archcenter_drawio_to_template.py`. It carries Oracle's container geometry (region/vcn/ad/subnet bboxes), service positions, and edge waypoints in the `absolute_layout:` shape your spec uses. Copy it as the starting point, rename ids, fill in `type:` for services (the extractor leaves `type: TODO_identify` because the canonical icon TYPE is encoded in stencil bytes — pick the right alias from the renderer's TYPE_TO_ICON), and adapt to the customer's components. Lookup result surfaces it as `cached: yaml=<path>`.
- **The cached `.drawio` is the visual source of truth** if the template extractor missed something — open it (drawio.exe, the SVG companion, or the XML) for the canonical look.
- **Do NOT use `examples/` as a geometry source.** `examples/` is previous user output, not authoritative. The `_template.yaml` covers everything `examples/` was being abused for.
- **Lookup budget: max 2 queries — never loop.** If query 1 returns nothing convincing, run ONE refinement (broader phrasing or different keyword angle), then STOP. Re-querying the catalog 3+ times to find a "better" match is the dominant time-sink in this phase — the catalog has 123 entries indexed once; if two passes can't surface a topology match, none exists. Output of the lookup tool also surfaces a **`⚠ KNOWN GAP`** banner at the top whenever the query touches a documented gap (e.g. OCI-native services accessed FROM GCP via Cross-Cloud Interconnect, or OCI Cache/Redis/PostgreSQL as primary subject). When that banner appears, follow its **Recommended composition** verbatim instead of running more queries — it lists the primitives to combine. When NO gap banner appears AND no top-3 entry matches the topology, present the closest 3 to the user with: *"No exact ref-arch matches. Closest hits are X / Y / Z. I can either base the diagram on the closest of these (geometry transfers, service names don't), or compose from `<list specific slugs / patterns>`. Which?"* — let the user pick the chassis instead of guessing.
2. **Pre-generation review.** Confirm the component list with the user (REQUESTED + TECHNICAL DEPENDENCIES per the whitelist).
3. **Author the spec in `absolute_layout` shape** — this is REQUIRED. Do NOT use the legacy workload-driven shape (`tenancy → regions → compartments → services`); it does not resolve OCI icon stencils, does not run through the spec validator, and produces wireframe-looking output (rectangles with text instead of real OCI icons). Every container, service, label, and connection needs explicit `(x, y, w, h)`.
**Where to look up valid `type:` values for services:** the authoritative sources are (1) `TYPE_TO_ICON` in `tools/oci_pptx_diagram_gen.py` (PPTX path) and `ICON_TYPE_ALIASES` in `tools/oci_diagram_gen.py` (drawio path), and (2) the slug keys in `kb/diagram/oci-icons.json` (drawio) and `kb/diagram/oci-pptx-icons-index.json` (PPTX). Do NOT grep `examples/` for `type:` patterns to discover valid slugs — `examples/` are previous user outputs that may use stale or non-canonical slugs. Both renderer files and both index files are exhaustive and current.
**Newer OCI services without a toolkit icon** (OCI Cache with Redis / Valkey, OCI PostgreSQL, etc. — services GA after the v24.2 toolkit shipped): use the generic icon as the canonical fallback (Oracle's own ref archs do the same — they embed custom inline SVG over the generic icon). The renderer's alias tables already route `type: redis` / `cache` / `valkey` / `postgresql` to the generic `database` stencil. Pair with an explicit `label:` carrying the real service name (e.g. `label: "OCI Cache (Redis)"`). When Oracle ships a v25+ toolkit with these icons, update `kb/diagram/oci-icons.json` + the alias tables and the next render uses the real icon automatically.
4. **Spec validator runs automatically** before either renderer (`tools/diagram_spec_validator.py`). It runs ONLY on `absolute_layout` specs — that's another reason workload-driven is forbidden. Fix any errors before re-rendering.
5. **Render.** `oci_diagram_gen.py` for drawio, `oci_deck_gen.py` for PPTX.
6. **Visually verify.** `tools/oci_pptx_render.py` to rasterize, then read the PNG.
Full reference: `docs/skill/output-formats.md` § "Standard diagram-generation procedure (MANDATORY)".
- If the user picks **3**, ask: "Describe the architecture or paste the spec. I'll generate the deck with a native OCI PowerPoint diagram when the architecture is structured enough."
- If the user picks **4**, ask: "What services and sizing? (e.g., 'ADB-S 8 OCPU + 2 VMs + FastConnect'). License model — PAYG, BYOL, or both?"
Then follow the cost-estimate flow:
1. **Catalog first, web never.** `grep` [`kb/pricing/oci-sku-catalog.yaml`](kb/pricing/oci-sku-catalog.yaml) (auto-refreshed, authoritative) for the requested SKUs and consult [`docs/bom-cookbook.md`](docs/bom-cookbook.md) for copy-paste recipes (ExaCS X11M BYOL, ADB-Dedicated, ADB-S + Block, FastConnect, etc.). Use `kb/pricing/compute.yaml` for shape-level lookups. Do NOT reach for WebSearch / WebFetch / `oracle.com` for list prices — the catalog IS the source.
2. **Staleness gate.** Read `last_verified` at the top of the catalog. If >60 days stale, warn the user and offer `python tools/refresh_sku_catalog.py --refresh` before quoting. If <=60 days, proceed without web lookups.
3. **Catalog miss policy.** If a SKU is genuinely absent after `grep` (not "I didn't find it on first try"), state it explicitly, then run `python tools/refresh_sku_catalog.py --refresh` and re-grep. Only if a fresh catalog still doesn't surface it is `oracle.com/cloud/price-list/` an acceptable fallback — and cite the source URL next to the part number.
4. **Source extraction.** When the request references a customer artefact (`.pptx`, BOM, quote), extract the topology / sizing from the artefact first, list each scenario's components, then map to SKUs. Show the mapping (component → SKU) so the SA can audit it.
5. **Quote shape.** Per scenario list: SKU + product name + metric + list price USD + quantity + monthly subtotal. End with total $/month and total $/year. Cite the catalog's `last_verified` date in the output.
6. When both PAYG and BYOL are requested, present them side-by-side (same SKU rows, two price columns). Save the cost estimate to `examples/<customer>-cost-estimate.yaml` and present the formatted table in the terminal.
7. **Disclaimer (mandatory).** Read the `disclaimer:` field from `kb/pricing/oci-sku-catalog.yaml` and append it verbatim — as a footer line under the terminal table, and (if a deck is generated) as a final "Commercial Disclaimer" slide. Do NOT paraphrase or rewrite; the field already carries Oracle's sample-quote boilerplate plus the "reference only / no client-specific discounts" clauses. `tools/oci_bom_gen.py` already reads this field for BOM xlsx output.
8. **Deck verification (if a deck is generated).** Open the produced `.pptx` with `python-pptx` and assert: (a) slide count matches spec, (b) each slide's expected title is present, (c) chart types match what the spec asked for (e.g. `COLUMN_CLUSTERED`, `COLUMN_STACKED`), (d) the disclaimer slide is the last one. Print a one-line `deck OK: <N> slides, titles=[...]` summary so the SA can audit at a glance. Rasterizing to PNG via PowerPoint is not always available on Linux/WSL — structural validation is the floor, not optional.
- If the user picks **5**, ask: "Describe your architecture or paste the spec. I'll run the 5-pillar review." Then follow the WA review flow: - If the user picks **5**, ask: "Describe your architecture or paste the spec. I'll run the 5-pillar review." Then follow the WA review flow:
1. Parse input to build a workload profile YAML (flags) and architecture YAML 1. Parse input to build a workload profile YAML (flags) and architecture YAML
2. If input is a `.pptx` file, extract text content from all slides to infer architecture and workload context 2. If input is a `.pptx` file, extract text content from all slides to infer architecture and workload context
@@ -124,8 +190,9 @@ Pick a number, or just describe what you need.
6. Assess migration risks from `kb/field-knowledge/gotchas.yaml` and do-nothing risks 6. Assess migration risks from `kb/field-knowledge/gotchas.yaml` and do-nothing risks
7. Compare with alternatives using `kb/competitive/*` 7. Compare with alternatives using `kb/competitive/*`
8. Generate implementation roadmap based on engagement tier 8. Generate implementation roadmap based on engagement tier
9. Produce a 8-10 slide deck using Oracle FY26 template (`config/oracle-pptx-layouts.yaml` → `business_case` type) 9. Produce a 8-10 slide deck using Oracle FY26 template (`config/oracle-pptx-layouts.yaml` → `business_case` type), using a native OCI PowerPoint diagram when the architecture is structured enough
10. Output: business-case.pptx + business-case.yaml (reusable spec) 10. Output: business-case.pptx + business-case.yaml (reusable spec)
11. **Disclaimer + deck verification.** Append the `disclaimer:` field from `kb/pricing/oci-sku-catalog.yaml` as a final "Commercial Disclaimer" slide (verbatim — see option 4 step 7). Then run the same structural deck verification described in option 4 step 8 (slide count, titles, chart types, disclaimer-last) before reporting completion.
- If the user picks **9**, ask: "What topic? (e.g., 'DEP', 'TAC', 'maintenance window', 'vector search')" - If the user picks **9**, ask: "What topic? (e.g., 'DEP', 'TAC', 'maintenance window', 'vector search')"
- If the user picks **10**, ask: "What kind of architecture? (e.g., 'ADB + APEX', 'cross-region DR', 'data lakehouse')" - If the user picks **10**, ask: "What kind of architecture? (e.g., 'ADB + APEX', 'cross-region DR', 'data lakehouse')"
- If the user picks **11**, switch to finding intake mode: - If the user picks **11**, switch to finding intake mode:
@@ -171,7 +238,7 @@ Pick a number, or just describe what you need.
**BOM Output Rules:** **BOM Output Rules:**
- NEVER include "Confidential: Internal ONLY" or any confidentiality marking - NEVER include "Confidential: Internal ONLY" or any confidentiality marking
- ALWAYS include the Oracle Cost Estimator disclaimer at the bottom - ALWAYS include the disclaimer from `kb/pricing/oci-sku-catalog.yaml` `disclaimer:` field at the bottom — `tools/oci_bom_gen.py` reads it automatically (do not duplicate, paraphrase, or maintain a second copy elsewhere)
- Only include SKUs the customer actually requested — never dump the full catalog - Only include SKUs the customer actually requested — never dump the full catalog
- Show cost proportions so the customer can see where their spend concentrates - Show cost proportions so the customer can see where their spend concentrates
- Use Excel formulas (not static values) so the customer can adjust quantities - Use Excel formulas (not static values) so the customer can adjust quantities
@@ -252,6 +319,32 @@ Full tier definitions and artifact matrix: [docs/engagement-tiers.md](docs/engag
**Step 1 — Ideate:** Parse discovery notes into a **Workload Profile** (`templates/workload-profile.yaml`). Formulate a value hypothesis: "If we [technical action], the customer achieves [business outcome]." Use `kb/patterns/business-patterns.yaml` for proven business-level patterns. **Step 1 — Ideate:** Parse discovery notes into a **Workload Profile** (`templates/workload-profile.yaml`). Formulate a value hypothesis: "If we [technical action], the customer achieves [business outcome]." Use `kb/patterns/business-patterns.yaml` for proven business-level patterns.
**Step 1b — Extraction Receipt (MANDATORY).** After parsing discovery notes, present an extraction receipt to the user BEFORE proceeding. This ensures the architecture is built on confirmed facts, not assumptions:
```
📋 Extraction Receipt
━━━━━━━━━━━━━━━━━━━━
From your input I extracted:
CONFIRMED (explicitly stated):
• [field]: [value] — source: "[exact quote or reference from notes]"
• [field]: [value] — source: "[exact quote or reference from notes]"
INFERRED (not stated, derived from context):
• [field]: [value] — reason: "[why I inferred this]"
MISSING (needed but not provided):
• [field] — needed for: [which artifact or decision needs it]
━━━━━━━━━━━━━━━━━━━━
Confirm, correct, or fill gaps before I proceed.
```
Rules:
- Every field in the workload profile that you populate must appear in either CONFIRMED or INFERRED.
- Do NOT proceed to Step 2 until the user confirms the receipt.
- If the user provides additional data, update the receipt and re-confirm.
- When generating the workload-profile.yaml, tag each field with `source: customer` (confirmed), `source: inferred`, or `source: default` so the SA knows what to validate with the customer.
**Step 2 — Validate:** Test the hypothesis for SMART criteria (Specific, Measurable, Attainable, Relevant, Time-based). Identify gaps. Check technical feasibility against `kb/services/` and `kb/compatibility/`. **Step 2 — Validate:** Test the hypothesis for SMART criteria (Specific, Measurable, Attainable, Relevant, Time-based). Identify gaps. Check technical feasibility against `kb/services/` and `kb/compatibility/`.
**Step 3 — Service Tiering:** After parsing databases, assign each workload a tier (Platinum/Gold/Silver/Bronze) based on SLA requirements, compliance needs, and business criticality. Use the auto-assignment rules in `kb/patterns/service-tiering.yaml`. Present the assignment and ask the architect to confirm or adjust. **Step 3 — Service Tiering:** After parsing databases, assign each workload a tier (Platinum/Gold/Silver/Bronze) based on SLA requirements, compliance needs, and business criticality. Use the auto-assignment rules in `kb/patterns/service-tiering.yaml`. Present the assignment and ask the architect to confirm or adjust.
@@ -285,7 +378,7 @@ Capture enough about current state to architect the future. Frame the problem
1. **Select services** from `kb/services/` across the full OCI catalog 1. **Select services** from `kb/services/` across the full OCI catalog
2. **Dimension each service** using `kb/sizing/` rules. For Oracle DBs, use AWR metrics if available. Apply conversion ratios. For ADB-S, size base OCPUs for P75. 2. **Dimension each service** using `kb/sizing/` rules. For Oracle DBs, use AWR metrics if available. Apply conversion ratios. For ADB-S, size base OCPUs for P75.
3. **Compose topology** from `kb/patterns/` blocks. Check conflicts, add implied dependencies, apply compliance overlays. Use `kb/patterns/application-patterns.yaml` for workload-type guidance. 3. **Compose topology** from `kb/patterns/` blocks. Check conflicts and apply compliance overlays. Use `kb/patterns/application-patterns.yaml` for workload-type guidance. **Do NOT silently add components** — only add technical dependencies from the closed whitelist in the Guardrails section below. Everything else must be proposed as optional in the pre-generation review.
4. **Architecture Principles** — Select applicable principles from `kb/patterns/architecture-principles.yaml` based on the workload profile. Check `applies_when` conditions. Include in the deck as a governance slide. 4. **Architecture Principles** — Select applicable principles from `kb/patterns/architecture-principles.yaml` based on the workload profile. Check `applies_when` conditions. Include in the deck as a governance slide.
5. **Environment Catalogue** — Expand each workload into environments (Prod/Pre-Prod/Dev-Test/DR) using the tier templates in `kb/patterns/environment-catalogue.yaml`. Apply cost optimization rules. Include in the deck and in the cost estimate. 5. **Environment Catalogue** — Expand each workload into environments (Prod/Pre-Prod/Dev-Test/DR) using the tier templates in `kb/patterns/environment-catalogue.yaml`. Apply cost optimization rules. Include in the deck and in the cost estimate.
6. **Design deployment** — environment strategy, IaC approach, CI/CD pipeline 6. **Design deployment** — environment strategy, IaC approach, CI/CD pipeline
@@ -308,6 +401,28 @@ Capture enough about current state to architect the future. Frame the problem
#### Confirm (Solution Proposal) #### Confirm (Solution Proposal)
**Completeness gate (MANDATORY before generating artifacts).** Before calling any generation tool (deck, diagram, BOM, PDF), verify that critical fields are populated based on engagement tier:
| Field | Small | Standard | Complex |
|---|---|---|---|
| customer_name | required | required | required |
| workload_type | required | required | required |
| databases (type + count) | required | required | required |
| primary_region | required | required | required |
| compliance_frameworks | — | required | required |
| RTO / RPO | — | required | required |
| team_size | — | required | required |
| current_infrastructure | — | required | required |
| migration_driver | — | required | required |
| environment_strategy | — | — | required |
| operational_model | — | — | required |
| multi_region_topology | — | — | required |
| data_residency | — | — | required |
- If **required** fields are missing: ask the user before generating.
- If **optional** fields are missing: list them as assumptions in the output (e.g., "Assumed: PAYG pricing, single environment, no compliance requirements").
- Fields tagged `source: inferred` in the workload profile count as populated but should be flagged as assumptions.
Assemble all design work into a proposal. Ensure all propositions are **SMART**. Quality matters — it must look professional. Assemble all design work into a proposal. Ensure all propositions are **SMART**. Quality matters — it must look professional.
**Outputs by tier:** See artifact matrix in [docs/engagement-tiers.md](docs/engagement-tiers.md) **Outputs by tier:** See artifact matrix in [docs/engagement-tiers.md](docs/engagement-tiers.md)
@@ -362,6 +477,14 @@ See [docs/skill/output-formats.md](docs/skill/output-formats.md) for the per-cus
--- ---
## Cookbook: Building Tool Payloads
Any pricing or SKU work — cost estimate (option 4), BOM (option 13), BOM-AppCA (option 14), business-case TCO (option 8), scenario comparison from a customer artefact (`.pptx`, BOM, quote) — starts in the local catalog, not on the web. Check [docs/bom-cookbook.md](docs/bom-cookbook.md) for copy-paste recipes (ExaCS X11M BYOL, ADB-Dedicated, ADB-S + Block + FastConnect) and the gotchas that otherwise burn exploration turns (e.g. ADB-Dedicated shares infrastructure SKUs with ExaCS — there are no separate `adb_dedicated` SKUs in the catalog).
If a requirement does not match a recipe, `grep` [`kb/pricing/oci-sku-catalog.yaml`](kb/pricing/oci-sku-catalog.yaml) and consult `kb/services/` before inventing SKUs. See "What You Do NOT Do" for the web-lookup rule and `kb/pricing/oci-sku-catalog.yaml`'s `last_verified` for staleness handling.
---
## Knowledge Base ## Knowledge Base
KB lives under `kb/`. See [kb/README.md](kb/README.md) for the directory map, frontmatter requirements, refresh tooling, and contributor guide. KB lives under `kb/`. See [kb/README.md](kb/README.md) for the directory map, frontmatter requirements, refresh tooling, and contributor guide.
@@ -416,23 +539,49 @@ KB lives under `kb/`. See [kb/README.md](kb/README.md) for the directory map, fr
## Guardrails ## Guardrails
- **Only what the user asked for.** Never add services, components, or features the user did not request — this includes observability (Monitoring, Logging, Events), security services (Data Safe, Vault, Cloud Guard, WAF), sizing details, connection types (RPC, peering), and any "nice to have" additions. Adding unrequested components wastes the architect's time and erodes trust. - **Only what the user asked for.** Never add services, components, or features the user did not request — this includes observability (Monitoring, Logging, Events), security services (Data Safe, Vault, Cloud Guard, WAF), sizing details, connection types (RPC, peering), and any "nice to have" additions. Adding unrequested components wastes the architect's time and erodes trust. The ONLY exception is the closed whitelist of technical dependencies below.
- **Technical dependency whitelist (closed — nothing else is auto-added):**
| If the user requests… | Auto-include | Reason |
|---|---|---|
| FastConnect | DRG | FastConnect terminates on DRG — cannot work without it |
| VPN Connect | DRG | IPSec tunnels terminate on DRG |
| ADB-S / ExaCS with backup to Object Storage | Service Gateway | Backup traffic requires SGW for Oracle Services Network |
| Any service in a public subnet | Internet Gateway | Public subnet routing requires IGW |
| Any private subnet service needing internet egress | NAT Gateway | Private-to-internet routing requires NAT |
| Cross-region DR (Data Guard, FSDR) | Remote Peering Connection (RPC) | Cross-region VCN connectivity requires RPC on both DRGs |
Everything NOT in this table — including Monitoring, Logging, Events, Vault, Data Safe, WAF, Cloud Guard, Bastion, management subnets, compartment boundaries — requires explicit user approval via the pre-generation review.
- **Ask, don't guess.** When requirements are ambiguous or incomplete, ask a clarifying question instead of filling in assumptions. A 10-second question saves a 10-minute redo. - **Ask, don't guess.** When requirements are ambiguous or incomplete, ask a clarifying question instead of filling in assumptions. A 10-second question saves a 10-minute redo.
- **Pre-generation review.** Before generating any diagram or architecture artifact, confirm the component list with the user. Present what you understood and suggest optional additions they can approve or reject:
```
I'll generate a diagram with:
✅ [list of explicitly requested components]
Want me to also include any of these? - **MANDATORY pre-generation review.** Before generating ANY diagram, deck, or architecture artifact, you MUST confirm the component list with the user. Never skip this step. Present three clearly separated sections:
• Observability subnet
• Compartment boundaries
• Security services (Data Safe, Vault)
• Gateways (IGW, NAT, SGW)
• [other relevant options based on context]
Or just generate with the above?
``` ```
This takes 5 seconds to confirm and prevents rework. I'll generate with:
REQUESTED (from your input):
✅ [only components explicitly mentioned by the user]
TECHNICAL DEPENDENCIES (auto-added per whitelist):
⚙️ [only items from the whitelist table above, with reason]
OPTIONAL — want me to add any of these?
○ Observability (Monitoring, Logging, Events)
○ Security services (Vault, Data Safe, WAF, Cloud Guard)
○ Management subnet
○ Compartment boundaries
○ Bastion / jump host
○ [other relevant options based on context]
Generate with the above, or adjust?
```
Wait for the user's response before generating. If the user says "just generate" or equivalent, proceed with only REQUESTED + TECHNICAL DEPENDENCIES (no optionals).
- **Source attribution.** When the user provides documents, URLs, meeting notes, or external data:
- Cite the source when extracting data: "From [document/source]: [extracted fact]"
- Clearly separate facts from the source vs. your own inferences
- If the source contradicts the internal KB, flag the conflict explicitly and let the architect decide
## What You Do NOT Do ## What You Do NOT Do
@@ -440,6 +589,10 @@ KB lives under `kb/`. See [kb/README.md](kb/README.md) for the directory map, fr
- You do NOT replace the architect's judgment. You accelerate it. - You do NOT replace the architect's judgment. You accelerate it.
- You do NOT generate pixel-perfect diagrams. You generate 80% drafts the architect refines. - You do NOT generate pixel-perfect diagrams. You generate 80% drafts the architect refines.
- You do NOT make up pricing. If you don't have current pricing, estimate ranges. - You do NOT make up pricing. If you don't have current pricing, estimate ranges.
- You do NOT use WebSearch / WebFetch / `oracle.com` for OCI list prices or SKU lookups. `kb/pricing/oci-sku-catalog.yaml` is auto-refreshed via `tools/refresh_sku_catalog.py` (Oracle apexapps pricing API) and is the source of truth — including for ECPU/OCPU rates, BYOL deltas, Exadata X11M part numbers, and ADB-D ECPU SKUs. Web fallback is allowed ONLY when (a) the SKU is genuinely absent after `grep` AND a fresh `--refresh` still does not surface it, or (b) the catalog's `last_verified` is >60 days stale and a refresh is not currently possible. In either case, cite the source URL alongside the part number. Reflexively reaching for WebSearch when the catalog already has the answer is the most common cost-estimate failure mode — don't.
- You do NOT claim features exist if you're unsure. Check the KB first. - You do NOT claim features exist if you're unsure. Check the KB first.
- You do NOT do detailed project management. DELIVER artifacts are lightweight handover aids. - You do NOT do detailed project management. DELIVER artifacts are lightweight handover aids.
- You do NOT add services or components the user did not request. - You do NOT add services or components the user did not request.
- **The skill ships as an MCP server.** This repo is packaged and served via the hosted MCP at `https://mcp.tech-lad.com/deal-accelerator/mcp/`. Anything you change in the skill's runtime — `tools/`, `scripts/`, `kb/`, `SKILL.md`, `AGENTS.md`, `.agents/` — must keep working in that deployed environment, not just on the SA's laptop. Concrete implications: (1) NO machine-specific paths (use `pathlib.Path(__file__).resolve().parent.parent` or env vars, never hardcoded `/mnt/c/...` or `/home/diego/...`); (2) NO required network calls during normal operation (the MCP container won't have access to drawio.exe, paid APIs, or Diego's local files — opt-in via env vars like `DRAWIO_EXE` / `ANTHROPIC_API_KEY`, never required); (3) NO writes outside the repo tree (the MCP filesystem is the cloned repo, write only under `examples/`, `tmp/`, or the artifacts the skill is meant to produce); (4) NO new dependencies that aren't in `requirements.txt` (CI installs from there, the MCP container too); (5) any new tool must work in a fresh clone with `make venv` — no manual setup steps. Before adding a feature that depends on a binary, an external service, or a privileged operation, ask whether it'll work when the SA is hitting the MCP endpoint with no laptop attached.
- **You do NOT edit skill source code or tooling when the user is in "menu mode".** When the user invoked the skill via the welcome menu (options 114) or asked for one of the menu outputs (proposal, diagram, deck, BOM, WA review, etc.), your job is to USE the existing tools, not modify them. Do NOT touch `tools/`, `scripts/`, `kb/diagram/*.json`, or any other code/index file as part of fulfilling a menu request — even if you discover a bug or a missing alias mid-task. If you hit a tool gap (missing icon alias, broken renderer, type that doesn't resolve), surface it as a follow-up at the end of your reply (e.g. "I noticed `refreshable_clone` doesn't have a PPTX icon alias — flag this for the maintainer to add to `tools/oci_pptx_diagram_gen.py::TYPE_TO_ICON`") rather than silently patching it. Code edits happen in a separate "developer mode" engagement, not while the SA is generating customer artifacts. The two exceptions: (1) `kb/field-findings/tracker.yaml` via menu option 11 (the menu's purpose IS to write that file), and (2) writing the customer's spec/output YAML files under `examples/<customer>/` — those are the deliverable, not the skill itself.

View File

@@ -8,7 +8,10 @@
# Navigate to the project root # Navigate to the project root
cd oci-deal-accelerator cd oci-deal-accelerator
# Run Codex — it auto-discovers AGENTS.md and .agents/skills/ # One-time: create virtual environment with all dependencies
make venv
# Run Codex — it auto-discovers AGENTS.md, .agents/skills/, and .codex/config.toml
codex codex
# Or explicitly load the skill # Or explicitly load the skill
@@ -18,6 +21,18 @@ codex --skill oci-deal-accelerator
Codex automatically reads: Codex automatically reads:
- `AGENTS.md` at project root (project-level instructions) - `AGENTS.md` at project root (project-level instructions)
- `.agents/skills/oci-deal-accelerator/SKILL.md` (the skill definition) - `.agents/skills/oci-deal-accelerator/SKILL.md` (the skill definition)
- `.codex/config.toml` (project sandbox + approval config — **enables network for pip**)
### Why `.codex/config.toml` matters
By default Codex CLI blocks network access and prompts before every command.
The committed `.codex/config.toml` pre-configures this project with:
- `approval_policy = "never"` — no per-command prompts
- `sandbox_mode = "workspace-write"` — agent can write in the repo
- `network_access = true``pip install` and `make venv` actually work
Without this file, `make venv` fails with `No matching distribution found for pyyaml` because PyPI is unreachable from the sandbox.
### Option 2: Using Codex App ### Option 2: Using Codex App

45
config/brand-icons.yaml Normal file
View File

@@ -0,0 +1,45 @@
version: 1
# Resolution policy:
# 1. Prefer officially downloaded vendor assets committed under
# kb/diagram/brand-icons/official/
# 2. Fall back to vetted local assets under
# kb/diagram/brand-icons/fallback/
#
# The renderers resolve by alias first, then walk `resolution_order`
# until they find an existing file.
resolution_order:
- official_svg
- official_png
- fallback_svg
- fallback_png
icons:
slack:
label: Slack
aliases:
- slack_app
- slack_bot
official_png: kb/diagram/brand-icons/official/slack/slack_hash_256.png
jira:
label: Jira
aliases:
- atlassian_jira
official_svg: kb/diagram/brand-icons/official/jira/Jira_icon.svg
jira_service_management:
label: Jira Service Management
aliases:
- jsm
- jira-service-management
- jira service management
official_svg: kb/diagram/brand-icons/official/jira-service-management/Jira-Service-Management_icon.svg
jirasoftware:
label: Jira Software
aliases:
- jira_software
- jira-software
- jira software
fallback_svg: kb/diagram/brand-icons/fallback/jirasoftware.svg

View File

@@ -4,7 +4,7 @@
output_selection: output_selection:
description: | description: |
The architect can specify output format when requesting deliverables: The architect can specify output format when requesting deliverables:
deck ← default, just the slide deck deck ← default, slide deck with native OCI PowerPoint diagram when applicable
deck + drawio ← deck + editable diagram deck + drawio ← deck + editable diagram
deck + doc ← deck + detailed technical document deck + doc ← deck + detailed technical document
deck + xlsx ← deck + detailed cost spreadsheet deck + xlsx ← deck + detailed cost spreadsheet
@@ -22,12 +22,12 @@ output_selection:
deck: deck:
extension: ".pptx" extension: ".pptx"
generator: "tools/oci_deck_gen.py" generator: "tools/oci_deck_gen.py"
description: "10-12 slide architecture proposal" description: "10-12 slide architecture proposal with native OCI PowerPoint diagram when applicable"
drawio: drawio:
extension: ".drawio" extension: ".drawio"
generator: "tools/oci_diagram_gen.py" generator: "tools/oci_diagram_gen.py"
description: "Editable architecture diagram (draw.io)" description: "Editable architecture diagram (draw.io) for technical editing workflows"
doc: doc:
extension: ".docx" extension: ".docx"
@@ -133,7 +133,7 @@ deck_structure:
- number: 3 - number: 3
type: architecture_diagram type: architecture_diagram
content: "Full architecture diagram (85% of slide)" content: "Full architecture diagram (85% of slide), preferring native OCI PowerPoint shapes over pasted images"
style: "White background, diagram fills slide" style: "White background, diagram fills slide"
- number: 4 - number: 4

View File

@@ -0,0 +1,117 @@
asset:
bundled_path: kb/diagram/assets/OCI_Icons.pptx
manifest_path: kb/diagram/oci-pptx-icons-manifest.yaml
index_path: kb/diagram/oci-pptx-icons-index.json
env_var: OCI_ICONS_PPTX_PATH
search_globs:
- /mnt/c/Users/*/Downloads/OCI_Icons*.pptx
- ~/Downloads/OCI_Icons*.pptx
- kb/diagram/assets/OCI_Icons*.pptx
refresh:
sync_discovered_asset_into_bundle: true
choose_newest_discovered_match: true
instruction_index:
noise_contains:
- "copyright"
- "oracle and/or its affiliates"
noise_exact:
- "tip"
semantic_markers:
connectors_logical:
title_contains: "Connectors"
all_text:
- "Open Arrowhead style"
- "Bark color"
- "relationships between icons and grouping boxes"
connector_labels:
all_text:
- "connector labels"
- "Place connector labels on the horizontal portions"
grouping:
title_contains: "Grouping"
all_text:
- "OCI Region"
- "Availability Domain"
- "Compartment"
landscape_blank_template:
all_text:
- "Landscape Blank Template"
- "Location Canvas"
- "OCI Region"
portrait_blank_template:
all_text:
- "Portrait Blank Template"
- "OCI Region"
landscape_sample_db_dr:
all_text:
- "Landscape Sample"
- "Primary"
- "Standby"
- "Database"
- "VCN"
database_icons:
title_contains: "Database"
any_text:
- "ADB-D"
- "ATP-D"
- "ADW-D"
- "Data Guard"
migration_icons:
title_contains: "Migration"
any_text:
- "Database Migration"
- "Oracle Cloud Migration Advisor"
extracted_shapes:
grouping_labels:
- "OCI Region"
- "Availability Domain"
- "Fault Domain"
- "Tier"
- "Tenancy"
- "Compartment"
- "VCN"
- "Subnet"
database_icon_labels:
- "Database"
- "Oracle Autonomous Database"
- "ADW-D"
- "ATP-D"
- "ADB-D"
- "Oracle Exadata Database Service"
- "Data Safe"
- "NoSQL Database"
- "Database Management"
- "Data Guard"
- "Data Guard Recovery"
design_tokens:
palette:
bark: "312D2A"
bark_soft: "66615C"
gray_divider: "9E9892"
gray_tick: "C8C5C1"
bg_warm: "FBF6F0"
white: "FFFFFF"
oracle_red: "C74634"
oracle_red_soft: "AE562C"
oracle_blue: "3F7CC4"
oracle_green: "00875A"
oracle_amber: "E8A92F"
tl_green: "EAF2DE"
tl_yellow: "FBF1C7"
tl_amber: "F8D9A8"
tl_red: "F6CAC4"
typography:
primary_font: "Oracle Sans"
connector_style:
line_width_emu: 12700
line_width_soft_emu: 9525
color: "312D2A"
arrowhead:
type: "triangle"
width: "sm"
length: "sm"

190
docs/bom-cookbook.md Normal file
View File

@@ -0,0 +1,190 @@
# BOM Cookbook — Building `generate_bom` Payloads
Copy-paste recipes that map common customer requirements to the exact OCI SKUs the
`generate_bom`, `generate_bom_appca`, and `generate_cost_estimate` MCP tools expect.
The goal is to skip the "grep the catalog and guess SKUs" exploration loop that
burns tool calls on well-known patterns.
> **If the requirement does not match any recipe below, consult
> [`kb/services/`](../kb/services/) and
> [`kb/pricing/oci-sku-catalog.yaml`](../kb/pricing/oci-sku-catalog.yaml)
> before inventing SKUs.** All SKUs below are verified against the catalog as of
> 2026-04-20; re-`grep` the catalog if a recipe ever fails.
## Payload Shape
All three tools accept the same envelope:
```json
{
"customer_id": "acme-prod",
"discount_pct": 0.35,
"currency": "USD",
"services": [
{ "sku": "B90777", "quantity": 1 }
]
}
```
- `customer_id`: free-form identifier, used for output file naming.
- `discount_pct`: decimal (0.35 = 35%). Applied to every line unless overridden.
- `services[].quantity`: integer or float depending on the SKU metric (ECPUs, GB, hours).
---
## Recipe 1 — Exadata Cloud Service (ExaCS) X11M, BYOL
**When it matches:** "ExaCS X11M BYOL, N ECPUs, M TB storage, no DR" — customer-managed
Oracle Database on dedicated Exadata hardware, BYOL licensing.
**SKUs:**
| SKU | Component | Typical qty |
|-----|-----------|-------------|
| `B90777` | Exadata Infrastructure — Base System | `1` per rack |
| `B110627` | Exadata Database Server — X11M | `2` (Base/Quarter) — adjust per rack config |
| `B110629` | Exadata Storage Server — X11M | `3` (Base/Quarter) — adjust per rack config |
| `B110632` | Exadata Database ECPU — Dedicated Infra BYOL (X11M) | One per ECPU |
Swap `B110632``B110631` for PAYG (license-included) pricing.
**Payload (120 ECPUs, 120 TB, BYOL, standard Base System):**
```json
{
"customer_id": "acme-exacs",
"discount_pct": 0.35,
"currency": "USD",
"services": [
{ "sku": "B90777", "quantity": 1 },
{ "sku": "B110627", "quantity": 2 },
{ "sku": "B110629", "quantity": 3 },
{ "sku": "B110632", "quantity": 120 }
]
}
```
---
## Recipe 2 — Autonomous Database Dedicated (ADB-D), BYOL
**When it matches:** "ADB Dedicated, N ECPUs, M TB, BYOL" — Autonomous Database running
on dedicated Exadata infrastructure.
**⚠️ Gotcha that burns tool calls:** ADB-Dedicated has **no separate infrastructure
SKUs** in the catalog. It reuses the same Exadata dedicated infra SKUs as ExaCS
(`B90777`, `B110627`, `B110629`) plus the same Exadata ECPU SKU (`B110631`/`B110632`).
The Autonomous-vs-customer-managed distinction is a tenancy-level configuration,
not a billing line item. Do not search for `autonomous_dedicated` SKUs — they do
not exist.
**SKUs:** identical to Recipe 1.
**Payload (64 ECPUs, BYOL):**
```json
{
"customer_id": "acme-adbd",
"discount_pct": 0.35,
"currency": "USD",
"services": [
{ "sku": "B90777", "quantity": 1 },
{ "sku": "B110627", "quantity": 2 },
{ "sku": "B110629", "quantity": 3 },
{ "sku": "B110632", "quantity": 64 }
]
}
```
---
## Recipe 3 — Autonomous Database Serverless (ADB-S) + Block Volume + FastConnect
**When it matches:** "ADB-S ATP, N ECPUs, M TB data + block storage for app tier +
FastConnect to on-prem" — the typical "app on OCI Compute, DB on ADB-S" pattern.
**SKUs:**
| SKU | Component | Metric |
|-----|-----------|--------|
| `B95701` | ADB ECPU (ATP or ADW) — license-included | ECPU/hour |
| `B95703` | ADB ECPU BYOL — use instead of B95701 if BYOL | ECPU/hour |
| `B95706` | ADB ATP data storage | GB/month |
| `B95754` | ADB ADW data storage — use instead of B95706 for warehouse | GB/month |
| `B95754a` | ADB backup storage | GB/month |
| `B91961` | Block Volume storage (app tier) | GB/month |
| `B91962` | Block Volume performance (VPU) — optional, for higher IOPS tiers | VPU/GB/month |
| `B88326` | FastConnect 10 Gbps port | port-hour |
Swap `B88326``B88325` (1 Gbps) or `B93126` (100 Gbps) as needed.
**Payload (16 ECPUs ATP license-included, 2 TB data + 1 TB backup, 500 GB block, 10 G FastConnect):**
```json
{
"customer_id": "acme-adbs",
"discount_pct": 0.35,
"currency": "USD",
"services": [
{ "sku": "B95701", "quantity": 16 },
{ "sku": "B95706", "quantity": 2048 },
{ "sku": "B95754a", "quantity": 1024 },
{ "sku": "B91961", "quantity": 500 },
{ "sku": "B88326", "quantity": 1 }
]
}
```
---
## Recipe 4 — Big Data Service + Data Science + Data Flow (analytics stack)
**When it matches:** "HDFS-managed cluster for ETL", "notebooks + model deployment",
"managed Spark pipelines" — typical OCI analytics/AI workload mix.
**SKUs:**
| SKU | Component | Metric |
|-----|-----------|--------|
| `B91128` | Big Data Service — Compute Standard (real) | OCPU/hour |
| `B91129` | Big Data Service — Compute Dense I/O (real) | OCPU/hour |
| `B91130` | Big Data Service — Compute HPC (real) | OCPU/hour |
| `B93555` | Big Data Service — Core (real) | OCPU/hour |
| `EST-DS-NOTEBOOK` | **[Estimate]** Data Science notebook session — priced as underlying VM.Standard OCPU | OCPU/hour |
| `EST-DS-MODEL` | **[Estimate]** Data Science model-deployment endpoint — priced as underlying VM.Standard OCPU | OCPU/hour |
| `EST-DF-SPARK` | **[Estimate]** Data Flow managed Spark runtime — priced as underlying VM.Standard OCPU | OCPU/hour |
OCI Data Science and OCI Data Flow have no dedicated SKUs in the Oracle public
pricing API — both are billed via the underlying Compute shape + Block/Object
Storage consumed. The `EST-*` entries are placeholder estimates (VM.Standard3.Flex
OCPU rate) so BOMs can include them as line items with an explicit "estimate"
flag; confirm the actual shape and hours with the customer before quoting.
**Payload (16 BDS Standard + 8 BDS Dense I/O + 4 notebook + 2 model + 8 Spark):**
```json
{
"customer_id": "acme-analytics",
"discount_pct": 0.30,
"currency": "USD",
"services": [
{ "sku": "B91128", "quantity": 16 },
{ "sku": "B91129", "quantity": 8 },
{ "sku": "EST-DS-NOTEBOOK", "quantity": 4 },
{ "sku": "EST-DS-MODEL", "quantity": 2 },
{ "sku": "EST-DF-SPARK", "quantity": 8 }
]
}
```
Add `B91961` (Block Volume) and `B91628` (Object Storage Standard) when the
customer needs dedicated storage beyond the compute default.
---
## When a recipe doesn't fit
1. Grep the catalog: `grep -n "<product keyword>" kb/pricing/oci-sku-catalog.yaml`
2. Check service docs under `kb/services/` for deployment-specific guidance.
3. Check `kb/field-knowledge/` for known sizing/pricing gotchas.
4. If a SKU still cannot be located, surface the gap to the user rather than guessing — fabricated SKUs break the BOM silently.

View File

@@ -25,7 +25,7 @@ Default output is a **slide deck (.pptx)**. The architect can specify:
| Format | Output | | Format | Output |
|--------|--------| |--------|--------|
| `deck` (default) | 10-12 slide presentation | | `deck` (default) | 10-12 slide presentation, with native OCI PowerPoint diagram when applicable |
| `deck + drawio` | + editable architecture diagram | | `deck + drawio` | + editable architecture diagram |
| `deck + doc` | + technical document (15-25 pages) | | `deck + doc` | + technical document (15-25 pages) |
| `deck + xlsx` | + cost spreadsheet with formulas | | `deck + xlsx` | + cost spreadsheet with formulas |
@@ -43,7 +43,7 @@ Slide count adapts to engagement tier (6-8 small, 10-12 standard, 12-16 complex)
2. **Value Story** — business driver, hypothesis, desired outcomes 2. **Value Story** — business driver, hypothesis, desired outcomes
3. **Service Tiering** — workload-to-tier mapping (Platinum/Gold/Silver/Bronze) with SLA, RTO/RPO 3. **Service Tiering** — workload-to-tier mapping (Platinum/Gold/Silver/Bronze) with SLA, RTO/RPO
4. **Architecture Principles** — selected ECAL principles (Design/Deployment/Service) that govern the architecture 4. **Architecture Principles** — selected ECAL principles (Design/Deployment/Service) that govern the architecture
5. **Architecture Diagram** — fills 85% of slide 5. **Architecture Diagram** — fills 85% of slide; prefer native OCI PowerPoint shapes inside the deck when the architecture is structured enough
6. **Architecture Decisions** — 4-6 key decisions with rationale 6. **Architecture Decisions** — 4-6 key decisions with rationale
7. **HA/DR** — topology + RTO/RPO per tier 7. **HA/DR** — topology + RTO/RPO per tier
8. **Security & Compliance** — controls grid, compliance badges 8. **Security & Compliance** — controls grid, compliance badges
@@ -56,11 +56,86 @@ Slide count adapts to engagement tier (6-8 small, 10-12 standard, 12-16 complex)
15. **Well-Architected Scorecard** — 5-pillar traffic-light indicators 15. **Well-Architected Scorecard** — 5-pillar traffic-light indicators
16. **Next Steps** — concrete SMART actions with dates 16. **Next Steps** — concrete SMART actions with dates
Use `tools/oci_deck_gen.py` for generation. Colors: teal `#2D5967`, copper `#AA643B`, purple `#804998`. Font: Segoe UI. Design standards: `config/output-formats.yaml`. Use `tools/oci_deck_gen.py` for generation. Decks should prefer native OCI PowerPoint diagrams over pasted images when the architecture can be rendered from structured input. Colors: teal `#2D5967`, copper `#AA643B`, purple `#804998`. Font: Segoe UI. Design standards: `config/output-formats.yaml`.
## Architecture diagram ## Architecture diagram
Use `tools/oci_diagram_gen.py` with OCI official styles from `kb/diagram/oci-toolkit-styles.yaml`. Containers, service blocks, connections, and typography rules are defined there. Use `tools/oci_diagram_gen.py` with OCI official styles from `kb/diagram/oci-toolkit-styles.yaml` when the user wants an editable technical diagram (`.drawio`). For customer-facing or presentation-ready output, prefer the native PowerPoint path via `tools/oci_deck_gen.py` and the PPTX icon library/index under `kb/diagram/`.
### Standard diagram-generation procedure (MANDATORY)
Follow these steps for every diagram, in order. Skipping a step is the single most common source of layout regressions.
1. **Reference architecture lookup.** Run `python tools/archcenter_pattern_lookup.py "<topology keywords>"` against `kb/architecture-center/catalog.yaml` (123 entries). Pick the highest-scoring entry whose topology matches what the user asked for. The lookup surfaces cached `.drawio` / `.svg` under `kb/diagram/assets/archcenter-refs/<slug>/` — open it to copy proven container nesting, padding, and AD/subnet placement instead of inventing geometry.
2. **Pre-generation review (per SKILL.md § What You Do NOT Do).** Confirm the component list with the user. Never add services the user did not mention except via the explicit auto-include whitelist.
3. **Author the spec.** Use `absolute_layout` for ref-arch reproductions or any topology where geometry matters. Honor the geometry rules below (the spec validator enforces them).
4. **Spec validation runs automatically.** Both `tools/oci_diagram_gen.py` (drawio) and `tools/oci_pptx_diagram_gen.py` (PPTX, called via `oci_deck_gen.py`) call `tools/diagram_spec_validator.py` before emitting any output. A `fail` status raises and aborts generation — fix the geometry, re-run.
5. **Render.** Generate the `.drawio` and/or `.pptx`. The drawio path additionally runs `drawio_visual_validator.py` post-render to catch anything the spec validator missed (font sizes, off-canvas, duplicate ids).
6. **Visually verify.** Rasterize the PPTX with `python tools/oci_pptx_render.py --pptx X.pptx --output X.png --width 1600` and inspect the PNG before reporting success.
### Geometry rules for `absolute_layout`
These rules are enforced by `tools/diagram_spec_validator.py` and exist because each one corresponds to a regression that previously shipped to the user:
- **Container padding ≥ 12px.** Every nested container must keep ≥12px between its bottom edge and its parent's bottom edge. Otherwise the borders visually merge (`CONTAINER_PADDING_VIOLATION`).
- **Subnet height ≥ label band + 12px.** A container labeled at 11pt needs h ≥ ~30px to avoid the label collapsing onto the bottom edge. Public-subnet bands holding an icon need to clear icon height + label band + breathing room (`CONTAINER_TOO_THIN`).
- **Labels stay inside their parent, ≥ 6px from the bottom edge.** Free-floating labels under a service icon must not cross or sit within 6px of the enclosing subnet's bottom edge (`LABEL_OVERFLOW_PARENT`).
- **AD columns nest INSIDE the VCN, never beside it.** Otherwise AD borders align with VCN borders and visually merge.
- **Subnets may span AD columns** (regional public subnet, cross-AD DB subnet) — that is the canonical Oracle pattern for HA topologies; do not split a regional subnet per AD.
### Diagram modes
The diagram generator accepts two spec shapes — but only ONE is acceptable for any output an SA shows a customer:
1. **`absolute_layout` (REQUIRED for any new diagram).** Explicit `(x, y, w, h)` for every container, service, label, and connection. Resolves real OCI stencils from `kb/diagram/oci-icons.json`, runs through `tools/diagram_spec_validator.py` (geometry rules), and produces output visually consistent with Oracle Architecture Center references. **This is the only mode the standard procedure supports.** Pair it with the ref-arch lookup (`tools/archcenter_pattern_lookup.py`) so geometry derives from a canonical Oracle reference, not invented from scratch.
2. **Workload-driven (DEPRECATED).** `tenancy → region(s) → vcn(s) → subnet(s) → service(s)`. The generator auto-lays out blocks but **does NOT resolve OCI icon stencils** — services render as colored rectangles with text labels, connector text gets baked into edge values (which the connector-label rule forbids), and the spec validator does NOT run. Output looks like a wireframe placeholder, not an architecture diagram. Kept only for back-compat with very old specs; do not author new specs in this shape.
```yaml
absolute_layout:
canvas: {width: 720, height: 420}
containers:
- {id: region, type: region, label: "OCI Region", x: 0, y: 0, w: 720, h: 420}
- {id: vcn, type: vcn, label: "VCN 10.10.0.0/16", x: 28, y: 52, w: 670, h: 348}
services:
- {id: drg, label: "", type: drg, x: 8, y: 200, w: 55, h: 66}
- {id: adb, label: "", type: adb_d, x: 230, y: 240, w: 60, h: 80}
labels:
- {id: lbl_drg, text: "DRG", x: 8, y: 268, w: 55, h: 14, fontSize: 700}
connections:
- {id: c1, from: drg, to: adb, type: standard, points: [[63, 233], [260, 240]]}
```
`fontSize` is shared with the PPTX `absolute_layout` schema — it's hundredths of a point (720 → 7.2pt). The drawio renderer auto-converts.
The Architecture Center reconstruction pipeline lives at `tools/archcenter_case_runner.py` (single case) and `tools/archcenter_batch_driver.py` (batch). Reference: `kb/diagram/reference-layouts/archcenter-batch-runner.yaml`.
### Pre-delivery validation (automatic)
Both generators run sanity checks before the file ships, so a broken artifact never reaches the user:
- **`tools/diagram_spec_validator.py`** — runs automatically *before* either renderer (drawio or PPTX). Validates the parsed `absolute_layout` for `CONTAINER_TOO_THIN`, `CONTAINER_PADDING_VIOLATION`, and `LABEL_OVERFLOW_PARENT`. A fail aborts generation. Set `OCI_DIAGRAM_VALIDATOR_SOFT=1` to demote errors to warnings.
- **`tools/drawio_visual_validator.py`** — runs automatically inside `OCIDiagramGenerator.save()`. Hard-fails on `fontSize ≥ 50pt` (catches the PPTX-cents-of-pt → drawio-pt unit confusion that produced 700pt labels), duplicate cell ids, off-canvas geometry, and dangling edge endpoints. Reports OK/warnings/errors to stderr. Pass `--strict` on the CLI to make errors fail the build.
- **`OCIDeckGenerator.save()` post-check** — verifies `[Content_Types].xml` declares a `<Default>` for every embedded media extension (PowerPoint refuses to open a deck and prompts to "repair" it when this is missing — the SVG-backed icons in `OCI_Icons.pptx` are the canonical case), and that no slide rels point to absent media or duplicate cNvPr ids.
- **`tools/drawio_fidelity_eval.py`** — pixel-diff the rebuilt drawio against a canonical Architecture Center PNG. Runs automatically when the spec carries `source.diagram_asset` (or via `--reference-png` on the CLI). Default rendering path is the SVG companion via `cairosvg` (works in any environment); the rebuilt-drawio path through the actual `draw.io` binary is opt-in via the `DRAWIO_EXE` env var (the binary is not bundled with the skill — install on demand).
CLI usage:
```bash
# Standard run (validators on by default)
python tools/oci_diagram_gen.py --spec my-spec.yaml --output out.drawio
# Fail the build if validator finds errors
python tools/oci_diagram_gen.py --spec my-spec.yaml --output out.drawio --strict
# Fidelity comparison vs canonical PNG
python tools/oci_diagram_gen.py --spec my-spec.yaml --output out.drawio \
--reference-png kb/diagram/reference-layouts/.../canonical.png
# Strict draw.io binary path (opt-in)
DRAWIO_EXE=/usr/bin/drawio python tools/oci_diagram_gen.py --spec ... --reference-png ...
```
Skip validators only when intentionally generating a fixture or test: `--no-validate`.
## Service categorization ## Service categorization

View File

@@ -1,142 +0,0 @@
# OCI Deal Accelerator — BOM Spec
# Demo: PharmaCorp Mexico — ExaCS X11M + networking + security
# SKUs verified against kb/pricing/oci-sku-catalog.yaml
metadata:
customer: "PharmaCorp Mexico"
prepared_by: "Carlos Mendoza — Solutions Architect"
date: "2026-04-12"
currency: "USD"
contract_months: 12
discount_pct: 0.45
notes: "ExaCS BYOL — customer has existing Oracle DB EE licenses with active support"
line_items:
# ExaCS X11M — DB Servers (Queretaro Production)
- category: "Exadata Cloud Infrastructure"
product: "ExaCS X11M DB Server"
sku: "B110627"
qty: 2
unit: "Hosted Environment Per Hour"
hours_units: 744
months: 12
notes: "2 DB servers for Quarter Rack — Queretaro (Prod)"
# ExaCS X11M — Storage Servers (Queretaro Production)
- category: "Exadata Cloud Infrastructure"
product: "ExaCS X11M Storage Server"
sku: "B110629"
qty: 3
unit: "Hosted Environment Per Hour"
hours_units: 744
months: 12
notes: "3 storage servers — Quarter Rack minimum"
# ExaCS X11M — ECPU BYOL (Queretaro)
- category: "Exadata Cloud Infrastructure"
product: "ExaCS X11M ECPU BYOL"
sku: "B110632"
qty: 128
unit: "ECPU Per Hour"
hours_units: 744
months: 12
notes: "128 ECPUs BYOL — EBS + SAP + DW"
# ExaCS X11M — DB Servers (Sao Paulo DR Standby)
- category: "Exadata Cloud Infrastructure"
product: "ExaCS X11M DB Server (DR)"
sku: "B110627"
qty: 2
unit: "Hosted Environment Per Hour"
hours_units: 744
months: 12
notes: "2 DB servers — Sao Paulo (DR Standby)"
# ExaCS X11M — Storage Servers (Sao Paulo DR)
- category: "Exadata Cloud Infrastructure"
product: "ExaCS X11M Storage Server (DR)"
sku: "B110629"
qty: 3
unit: "Hosted Environment Per Hour"
hours_units: 744
months: 12
notes: "3 storage servers — DR Standby"
# ExaCS X11M — ECPU BYOL (Sao Paulo DR)
- category: "Exadata Cloud Infrastructure"
product: "ExaCS X11M ECPU BYOL (DR)"
sku: "B110632"
qty: 128
unit: "ECPU Per Hour"
hours_units: 744
months: 12
notes: "128 ECPUs BYOL — Data Guard standby"
# ADB-S for DW migration (Phase 2)
- category: "Autonomous Database"
product: "ADB-S ECPU BYOL"
sku: "B95703"
qty: 16
unit: "ECPU Per Hour"
hours_units: 744
months: 12
notes: "16 ECPU for DW migration to ADB-S (optional Phase 2)"
# ADB-S Storage
- category: "Autonomous Database"
product: "ADB-S Storage (ATP)"
sku: "B95706"
qty: 2000
unit: "Gigabyte Storage Capacity Per Month"
hours_units: 1
months: 12
notes: "2TB storage for DW"
# FastConnect 10Gbps Dual
- category: "Networking"
product: "FastConnect 10 Gbps (Primary)"
sku: "B88326"
qty: 1
unit: "Port Hour"
hours_units: 744
months: 12
notes: "Primary circuit — Mexico City to Queretaro"
- category: "Networking"
product: "FastConnect 10 Gbps (Redundant)"
sku: "B88326"
qty: 1
unit: "Port Hour"
hours_units: 744
months: 12
notes: "Redundant circuit — Mexico City to Queretaro"
# Object Storage for RMAN backups
- category: "Storage"
product: "Object Storage"
sku: "B91628"
qty: 50000
unit: "Gigabyte Storage Capacity Per Month"
hours_units: 1
months: 12
notes: "50TB for RMAN backups (DW + EBS)"
# Block Volume
- category: "Storage"
product: "Block Volume Storage"
sku: "B91961"
qty: 10000
unit: "Gigabyte Storage Capacity Per Month"
hours_units: 1
months: 12
notes: "10TB additional block storage"
# OCI Vault
- category: "Security"
product: "OCI Vault Key Versions"
sku: "B92092"
qty: 10
unit: "Key Version Per Month"
hours_units: 1
months: 12
notes: "TDE keys for 3 databases + DR + backups"

View File

@@ -1,168 +0,0 @@
# OCI Deal Accelerator — Business Case
# Demo: PharmaCorp Mexico — ExaCS migration from on-prem Exadata X6
# Follows exact schema expected by oci_bizcase_gen.py
business_case:
customer_name: "PharmaCorp Mexico"
prepared_by: "Carlos Mendoza — Solutions Architect"
date: "2026-04-12"
executive_summary: >
PharmaCorp Mexico operates 3 mission-critical Oracle databases (EBS R12, SAP, DW)
on aging Exadata X6 hardware. The hardware refresh quote is $1.8M and locks the
company into 5 more years of on-prem operations with no DR capability. Migration
to OCI ExaCS X11M reduces annual infrastructure costs by 61% ($1.75M over 3 years),
adds cross-region DR (RPO<15min, RTO<1h), and resolves the pending SOX audit
finding on automated patching.
drivers:
primary: "hardware_refresh_avoidance"
urgency: "HW refresh due in 6 months — must decide now or commit $1.8M"
cost_of_inaction:
financial: "$2.88M over 3yr: $1.8M HW refresh + $300K/yr support + $80K/yr DC costs"
operational: "No DR today — single site, single point of failure for EBS production"
strategic: "SOX audit finding pending: manual quarterly patching is non-compliant"
tco:
horizon_years: 3
current_state:
annual_infrastructure: 600000
annual_licensing: 220000
annual_operations: 60000
annual_downtime_cost: 50000
annual_compliance_cost: 30000
breakdown:
- item: "Exadata X6 depreciation + refresh amortization"
annual: 600000
- item: "Oracle DB EE Support & Maintenance"
annual: 220000
- item: "DBA patching + infra management (part-time)"
annual: 60000
- item: "Data center (power, cooling, space)"
annual: 80000
proposed_oci:
migration_one_time: 50000
annual_cloud_consumption: 278400
annual_licensing: 0
annual_operations: 20000
annual_downtime_cost: 0
annual_compliance_cost: 0
breakdown:
- item: "ExaCS X11M Queretaro (Prod, BYOL)"
annual: 98400
- item: "ExaCS X11M Sao Paulo (DR Standby, BYOL)"
annual: 98400
- item: "FastConnect 10Gbps Dual"
annual: 36720
- item: "OCI Vault + Monitoring + Storage"
annual: 30000
- item: "Reduced DBA operations (automated patching)"
annual: 20000
- item: "Migration project (one-time, amortized Y1)"
annual: 50000
savings:
annual: 661600
three_year: 1749600
pct: 61
roi:
three_year_roi_pct: 3400
payback_months: 1
total_investment: 50000
annual_net_benefit: 661600
notes: >
ROI based on 3-year TCO comparison. 1-month payback driven by immediate
elimination of HW refresh commitment ($1.8M avoided). Conservative — does
not include productivity gains from automated patching or DR risk reduction.
value_drivers:
- category: "Cost Avoidance"
driver: "Avoid $1.8M hardware refresh + eliminate DC costs"
quantification: "$1.75M saved over 3 years (61% reduction)"
- category: "Risk Reduction"
driver: "Cross-region DR where none exists today"
quantification: "RPO<15min, RTO<1h with Data Guard + FSDR"
- category: "Compliance"
driver: "SOX audit finding resolved with automated patching"
quantification: "ExaCS auto-patching + OCI Audit + Vault key management"
- category: "Operational Efficiency"
driver: "DBA freed from manual patching + infrastructure management"
quantification: "60% reduction in DBA time allocated to patching"
risks:
migration_risks:
- risk: "EBS R12 customizations may require OS-level changes post-migration"
probability: "Medium"
impact: "Medium"
mitigation: "Inventory all customizations pre-migration; test in Pre-Prod"
- risk: "FastConnect provisioning delay (partner-dependent)"
probability: "Medium"
impact: "Low"
mitigation: "Start in Phase 1 week 1; IPSec VPN as interim backup"
- risk: "HW refresh deadline pressure (6 months)"
probability: "High"
impact: "High"
mitigation: "16-week migration plan fits within window with margin"
do_nothing_risks:
- risk: "No DR — single site, single point of failure for EBS production"
probability: "High"
impact: "Critical"
mitigation: "Cannot be mitigated without infrastructure investment"
- risk: "SOX audit finding remains unresolved (manual patching)"
probability: "High"
impact: "High"
mitigation: "Remediation requires automated patching — on-prem can't deliver"
- risk: "$1.8M HW refresh locks in 5 more years of on-prem with no cloud ROI"
probability: "High"
impact: "High"
mitigation: "Sunk cost — delays any cloud migration benefit for 5+ years"
recommendation:
summary: >
Proceed with OCI ExaCS migration. 61% cost reduction over 3 years ($1.75M saved),
cross-region DR capability, and SOX compliance resolution. The alternative
(HW refresh at $1.8M) costs more and leaves DR + compliance gaps unresolved.
next_steps:
- "Board approval with TCO presentation — May 2026"
- "Provision OCI tenancy + ExaCS in Queretaro — June 2026"
- "Start FastConnect provisioning with partner — June 2026"
- "EBS customization inventory and Pre-Prod testing — June 2026"
- "Production cutover — September 2026"
roadmap:
total_duration: "16 weeks (May — September 2026)"
phases:
- name: "Board Approval"
duration: "2 weeks"
investment: 0
description: "Present TCO + risk analysis to board"
- name: "Foundation (networking + ExaCS)"
duration: "4 weeks"
investment: 15000
description: "Provision OCI tenancy, ExaCS, FastConnect"
- name: "EBS Migration + Data Guard"
duration: "6 weeks"
investment: 25000
description: "Migrate EBS R12 with ZDM, configure Data Guard to Sao Paulo"
- name: "SAP + DW Migration"
duration: "4 weeks"
investment: 10000
description: "Migrate remaining databases, RMAN backup for DW"
- name: "Cutover + Decommission"
duration: "2 weeks"
investment: 0
description: "Production cutover, decommission Exadata X6"

View File

@@ -1,229 +0,0 @@
# OCI Deal Accelerator — Architecture Diagram Spec
# Demo: PharmaCorp Mexico — ExaCS dual-region with Data Guard
# Prompt 2: Architecture diagram
title: "PharmaCorp Mexico — ExaCS Migration Architecture"
# External actors
external:
- id: "mexico_dc"
label: "Mexico City\nData Center"
icon: "user"
x: 30
y: 280
w: 50
h: 60
# OCI Tenancy
tenancy:
label: "Oracle Cloud Infrastructure"
x: 280
y: 80
w: 1500
h: 700
regions:
# ── Primary Region: Queretaro ──
- id: "region_qro"
label: "Region — Queretaro (Primary)"
primary: true
x: 15
y: 40
w: 900
h: 640
vcns:
# Hub VCN
- id: "vcn_hub"
label: "Hub VCN (10.0.0.0/16)"
x: 15
y: 45
w: 870
h: 570
subnets:
- id: "subnet_db"
label: "Database Subnet (Private) — 10.0.1.0/24"
h: 180
services:
- id: "exacs_prod"
label: "ExaCS X11M\nQuarter Rack\n(EBS + SAP + DW)"
type: "exacs"
w: 180
h: 90
- id: "vault"
label: "OCI Vault\nTDE Keys\n(FIPS 140-2 L3)"
type: "vault"
w: 140
h: 90
- id: "dbmgmt"
label: "Database\nManagement"
type: "monitoring"
w: 120
h: 90
- id: "subnet_app"
label: "Application Subnet (Private) — 10.0.2.0/24"
h: 140
services:
- id: "ebs_app"
label: "EBS R12\nApp Tier\n(2x VM.Standard)"
type: "compute"
w: 160
h: 80
- id: "bastion"
label: "Bastion\nService"
type: "bastion"
w: 120
h: 80
- id: "subnet_pub"
label: "Public Subnet — 10.0.0.0/24"
h: 120
services:
- id: "waf"
label: "WAF\n(EBS Web Tier)"
type: "waf"
w: 120
h: 70
- id: "lb"
label: "Load\nBalancer"
type: "load-balancer"
w: 120
h: 70
- id: "subnet_mgmt"
label: "Management Subnet (Private) — 10.0.3.0/24"
h: 110
services:
- id: "monitoring"
label: "OCI\nMonitoring"
type: "monitoring"
w: 120
h: 65
- id: "logging"
label: "OCI Audit\n+ Logging"
type: "logging"
w: 120
h: 65
- id: "events"
label: "OCI Events\n+ Notifications"
type: "events"
w: 140
h: 65
gateways:
- id: "drg"
label: "DRG\n(Hub)"
type: "drg"
w: 100
h: 70
- id: "sgw"
label: "Service\nGateway"
type: "service_gateway"
w: 110
h: 70
# ── DR Region: Sao Paulo ──
- id: "region_gru"
label: "Region — São Paulo (DR)"
x: 940
y: 40
w: 540
h: 450
vcns:
- id: "vcn_dr"
label: "DR VCN (10.1.0.0/16)"
x: 15
y: 45
w: 510
h: 380
subnets:
- id: "subnet_dr_db"
label: "DB Subnet (Private) — 10.1.1.0/24"
h: 180
services:
- id: "exacs_dr"
label: "ExaCS Standby\n(Data Guard)\nEBS + SAP"
type: "exacs"
w: 180
h: 90
- id: "fsdr"
label: "Full Stack DR\n(FSDR)\nOrchestrator"
type: "fsdr"
w: 140
h: 90
- id: "subnet_dr_backup"
label: "Backup Subnet — 10.1.2.0/24"
h: 120
services:
- id: "obj_storage"
label: "Object Storage\n50TB RMAN\nBackups (DW)"
type: "object-storage"
w: 160
h: 70
# Connections
connections:
- id: "conn_fc1"
label: "FastConnect\n10Gbps (Primary)"
type: "network"
from: "mexico_dc"
to: "drg"
- id: "conn_fc2"
label: "FastConnect\n10Gbps (Redundant)"
type: "network"
from: "mexico_dc"
to: "drg"
- id: "conn_drg_dr"
label: "Remote Peering"
type: "network"
from: "drg"
to: "exacs_dr"
- id: "conn_dg"
label: "Data Guard\n(Redo Shipping)"
type: "data"
from: "exacs_prod"
to: "exacs_dr"
- id: "conn_vault"
label: "TDE Keys"
type: "internal"
from: "vault"
to: "exacs_prod"
- id: "conn_waf_lb"
label: "HTTPS"
type: "data"
from: "waf"
to: "lb"
- id: "conn_lb_ebs"
label: "HTTP"
type: "data"
from: "lb"
to: "ebs_app"
- id: "conn_ebs_db"
label: "Oracle Net"
type: "data"
from: "ebs_app"
to: "exacs_prod"
- id: "conn_fsdr_dg"
label: "Failover\nOrchestration"
type: "internal"
from: "fsdr"
to: "exacs_dr"
- id: "conn_backup"
label: "RMAN Backup\n(DW)"
type: "data"
from: "exacs_prod"
to: "obj_storage"

File diff suppressed because one or more lines are too long

View File

@@ -1,111 +0,0 @@
{
"cost": {
"line_items": [
{
"component": "ExaCS X11M Quarter Rack \u2014 Queretaro (Prod)",
"monthly_payg": "$18,500",
"monthly_byol": "$8,200",
"notes": "2 DB servers, 3 storage servers, BYOL"
},
{
"component": "ExaCS X11M Quarter Rack \u2014 Sao Paulo (DR)",
"monthly_payg": "$18,500",
"monthly_byol": "$8,200",
"notes": "ADG standby, BYOL"
},
{
"component": "ADB-S 16 ECPU (DW alternative \u2014 future)",
"monthly_payg": "$2,400",
"monthly_byol": "$1,200",
"notes": "Optional \u2014 migrate DW to ADB-S in Phase 2"
},
{
"component": "FastConnect 10Gbps Dual",
"monthly_payg": "$3,060",
"notes": "2 x $1,530/month"
},
{
"component": "OCI Vault",
"monthly_payg": "$500",
"notes": "HSM-backed key management"
},
{
"component": "Object Storage (50TB backup)",
"monthly_payg": "$1,200",
"notes": "RMAN backups + DW backup"
},
{
"component": "WAF + Logging + Monitoring",
"monthly_payg": "$800",
"notes": "WAF for EBS web tier + audit logging"
},
{
"component": "TOTAL",
"monthly_payg": "$45,000",
"monthly_byol": "$23,200",
"notes": "BYOL saves 48%"
}
],
"assumptions": [
"BYOL assumes existing Oracle Database EE licenses with active support",
"ExaCS pricing based on current OCI list prices",
"DR standby at full rate (ADG requires active compute)",
"No middleware licensing included (EBS app tier on compute VMs)",
"FastConnect partner charges not included"
],
"show_byol": true
},
"cost_comparison": {
"title": "Cost Comparison: On-Prem HW Refresh vs OCI Migration",
"col_headers": [
"Component",
"On-Prem Refresh (5yr)",
"OCI ExaCS BYOL",
"Delta"
],
"rows": [
{
"item": "Infrastructure (hardware/cloud)",
"current": "$1,800,000 upfront",
"oci": "$278,400/yr",
"savings": "Break-even at 3.2 years"
},
{
"item": "Annual Support & Maintenance",
"current": "$220,000/yr",
"oci": "Included in OCI",
"savings": "-100%"
},
{
"item": "DR Infrastructure",
"current": "$0 (no DR today)",
"oci": "$98,400/yr",
"savings": "New capability \u2014 no DR today"
},
{
"item": "Data Center (power/cooling/space)",
"current": "$80,000/yr",
"oci": "$0",
"savings": "-100%"
},
{
"item": "DBA Operations (patching)",
"current": "$60,000/yr (part-time DBA)",
"oci": "$0 (automated)",
"savings": "-100%"
},
{
"item": "TOTAL ANNUAL (year 1)",
"current": "$2,160,000",
"oci": "$376,800",
"savings": "-83%"
},
{
"item": "TOTAL 3-YEAR TCO",
"current": "$2,880,000",
"oci": "$1,130,400",
"savings": "-$1.75M (61%)"
}
]
}
}

View File

@@ -1,348 +0,0 @@
well_architected_scorecard:
overall_status: GAPS_IDENTIFIED
generated_date: '2026-04-12T23:15:18.437115'
architecture_name: /tmp/demo-flawed-arch.yaml
customer: Demo Flawed Arch
summary:
total_checks: 23
total_passed: 1
total_gaps: 22
high_severity_gaps: 10
medium_severity_gaps: 10
low_severity_gaps: 2
pillars:
security_compliance:
status: GAPS_IDENTIFIED
checks_passed: 0
checks_total: 15
categories:
identity_access:
passed: 0
total: 4
gaps:
- check_id: SEC-IAM-001
area: Identity & Access
finding: no IAM policy strategy defined or broad permissions used
severity: HIGH
recommendation: architecture specifies granular IAM policies per compartment/service
wa_reference: https://docs.oracle.com/en/solutions/oci-best-practices/effective-strategies-security-and-compliance1.html
- check_id: SEC-IAM-002
area: Identity & Access
finding: no MFA mentioned in identity setup
severity: HIGH
recommendation: MFA is specified in identity configuration
wa_reference: https://docs.oracle.com/en/solutions/oci-best-practices/effective-strategies-security-and-compliance1.html
- check_id: SEC-IAM-003
area: Identity & Access
finding: no mention of admin account restrictions
severity: HIGH
recommendation: separate admin groups defined for operations
wa_reference: https://docs.oracle.com/en/solutions/oci-best-practices/effective-strategies-security-and-compliance1.html
- check_id: SEC-IAM-004
area: Identity & Access
finding: stored credentials or API keys used for service accounts
severity: HIGH
recommendation: instance principals or resource principals specified for
service-to-service auth
wa_reference: https://docs.oracle.com/en/solutions/oci-best-practices/effective-strategies-security-and-compliance1.html
resource_isolation:
passed: 0
total: 3
gaps:
- check_id: SEC-ISO-001
area: Resource Isolation
finding: flat compartment structure or no compartment strategy
severity: HIGH
recommendation: hierarchical compartment structure defined
wa_reference: https://docs.oracle.com/en/solutions/oci-best-practices/effective-strategies-security-and-compliance1.html
- check_id: SEC-ISO-002
area: Resource Isolation
finding: no tagging strategy defined
severity: MEDIUM
recommendation: defined tag namespaces with cost, environment, and owner
tags
wa_reference: https://docs.oracle.com/en/solutions/oci-best-practices/effective-strategies-security-and-compliance1.html
- check_id: SEC-ISO-004
area: Resource Isolation
finding: user credentials used for cross-resource access
severity: HIGH
recommendation: resource principals used for cross-service access
wa_reference: https://docs.oracle.com/en/solutions/oci-best-practices/effective-strategies-security-and-compliance1.html
database_security:
passed: 0
total: 0
gaps: []
data_protection:
passed: 0
total: 2
gaps:
- check_id: SEC-DAT-001
area: Data Protection
finding: any storage service without encryption at rest
severity: HIGH
recommendation: encryption at rest specified for all storage services
wa_reference: https://docs.oracle.com/en/solutions/oci-best-practices/effective-strategies-security-and-compliance1.html
- check_id: SEC-DAT-002
area: Data Protection
finding: using Oracle-managed keys or no key management strategy
severity: MEDIUM
recommendation: OCI Vault specified for key management
wa_reference: https://docs.oracle.com/en/solutions/oci-best-practices/effective-strategies-security-and-compliance1.html
network_security:
passed: 0
total: 3
gaps:
- check_id: SEC-NET-001
area: Network Security
finding: only Security Lists used without NSGs
severity: MEDIUM
recommendation: NSGs used as primary network security mechanism
wa_reference: https://docs.oracle.com/en/solutions/oci-best-practices/effective-strategies-security-and-compliance1.html
- check_id: SEC-NET-002
area: Network Security
finding: SSH open to 0.0.0.0/0
severity: HIGH
recommendation: SSH access restricted to specific CIDR ranges or bastion
wa_reference: https://docs.oracle.com/en/solutions/oci-best-practices/effective-strategies-security-and-compliance1.html
- check_id: SEC-NET-004
area: Network Security
finding: OCI services accessed via internet gateway
severity: MEDIUM
recommendation: Service Gateway configured in VCN
wa_reference: https://docs.oracle.com/en/solutions/oci-best-practices/effective-strategies-security-and-compliance1.html
monitoring_audit:
passed: 0
total: 3
gaps:
- check_id: SEC-MON-001
area: Monitoring & Audit
finding: Cloud Guard not included in architecture
severity: HIGH
recommendation: Cloud Guard configured with appropriate recipes
wa_reference: https://docs.oracle.com/en/solutions/oci-best-practices/effective-strategies-security-and-compliance1.html
- check_id: SEC-MON-002
area: Monitoring & Audit
finding: audit service not mentioned or retention not configured
severity: MEDIUM
recommendation: Audit service enabled (enabled by default, verify retention)
wa_reference: https://docs.oracle.com/en/solutions/oci-best-practices/effective-strategies-security-and-compliance1.html
- check_id: SEC-MON-003
area: Monitoring & Audit
finding: no VCN Flow Logs configured
severity: MEDIUM
recommendation: VCN Flow Logs enabled for critical subnets
wa_reference: https://docs.oracle.com/en/solutions/oci-best-practices/effective-strategies-security-and-compliance1.html
reliability_resilience:
status: PASS_WITH_RECOMMENDATIONS
checks_passed: 0
checks_total: 1
categories:
scalability:
passed: 0
total: 1
gaps:
- check_id: REL-SCL-002
area: Scalability
finding: no service limit review planned
severity: LOW
recommendation: service limit review mentioned in deployment plan
wa_reference: https://docs.oracle.com/en/solutions/oci-best-practices/reliable-and-resilient-cloud-topology-practices1.html
fault_tolerant_networking:
passed: 0
total: 0
gaps: []
data_backup:
passed: 0
total: 0
gaps: []
data_replication:
passed: 0
total: 0
gaps: []
disaster_recovery:
passed: 0
total: 0
gaps: []
performance_cost:
status: PASS_WITH_RECOMMENDATIONS
checks_passed: 0
checks_total: 2
categories:
compute_sizing:
passed: 0
total: 0
gaps: []
storage_strategy:
passed: 0
total: 0
gaps: []
network_tuning:
passed: 0
total: 0
gaps: []
cost_management:
passed: 0
total: 2
gaps:
- check_id: PERF-CST-003
area: Cost Management
finding: no budget alerts configured
severity: MEDIUM
recommendation: OCI Budgets configured with alert thresholds
wa_reference: https://docs.oracle.com/en/solutions/oci-best-practices/index.html
- check_id: PERF-CST-004
area: Cost Management
finding: no cost attribution tagging strategy
severity: MEDIUM
recommendation: cost-tracking tags defined and enforced
wa_reference: https://docs.oracle.com/en/solutions/oci-best-practices/index.html
operational_efficiency:
status: GAPS_IDENTIFIED
checks_passed: 1
checks_total: 5
categories:
deployment_strategy:
passed: 0
total: 1
gaps:
- check_id: OPS-DEP-001
area: Deployment Strategy
finding: no IaC strategy specified
severity: HIGH
recommendation: Terraform or Resource Manager specified for infrastructure
provisioning
wa_reference: https://docs.oracle.com/en/solutions/oci-best-practices/best-practices-operating-cloud-deployments-efficiency.html
workload_monitoring:
passed: 1
total: 2
gaps:
- check_id: OPS-MON-003
area: Workload Monitoring
finding: no centralized log analysis solution
severity: MEDIUM
recommendation: OCI Logging Analytics configured
wa_reference: https://docs.oracle.com/en/solutions/oci-best-practices/best-practices-operating-cloud-deployments-efficiency.html
os_management:
passed: 0
total: 0
gaps: []
operations_support:
passed: 0
total: 2
gaps:
- check_id: OPS-SUP-001
area: Operations Support
finding: no support plan consideration
severity: LOW
recommendation: Oracle support plan level specified and matches criticality
wa_reference: https://docs.oracle.com/en/solutions/oci-best-practices/best-practices-operating-cloud-deployments-efficiency.html
- check_id: OPS-SUP-002
area: Operations Support
finding: no notification configuration
severity: MEDIUM
recommendation: OCI Notifications configured for operational events
wa_reference: https://docs.oracle.com/en/solutions/oci-best-practices/best-practices-operating-cloud-deployments-efficiency.html
distributed_cloud:
status: NOT_APPLICABLE
checks_passed: 0
checks_total: 0
categories: {}
action_items:
high_priority:
- check_id: SEC-IAM-001
pillar: Identity & Access
finding: no IAM policy strategy defined or broad permissions used
recommendation: architecture specifies granular IAM policies per compartment/service
- check_id: SEC-IAM-002
pillar: Identity & Access
finding: no MFA mentioned in identity setup
recommendation: MFA is specified in identity configuration
- check_id: SEC-IAM-003
pillar: Identity & Access
finding: no mention of admin account restrictions
recommendation: separate admin groups defined for operations
- check_id: SEC-IAM-004
pillar: Identity & Access
finding: stored credentials or API keys used for service accounts
recommendation: instance principals or resource principals specified for service-to-service
auth
- check_id: SEC-ISO-001
pillar: Resource Isolation
finding: flat compartment structure or no compartment strategy
recommendation: hierarchical compartment structure defined
- check_id: SEC-ISO-004
pillar: Resource Isolation
finding: user credentials used for cross-resource access
recommendation: resource principals used for cross-service access
- check_id: SEC-DAT-001
pillar: Data Protection
finding: any storage service without encryption at rest
recommendation: encryption at rest specified for all storage services
- check_id: SEC-NET-002
pillar: Network Security
finding: SSH open to 0.0.0.0/0
recommendation: SSH access restricted to specific CIDR ranges or bastion
- check_id: SEC-MON-001
pillar: Monitoring & Audit
finding: Cloud Guard not included in architecture
recommendation: Cloud Guard configured with appropriate recipes
- check_id: OPS-DEP-001
pillar: Deployment Strategy
finding: no IaC strategy specified
recommendation: Terraform or Resource Manager specified for infrastructure provisioning
medium_priority:
- check_id: SEC-ISO-002
pillar: Resource Isolation
finding: no tagging strategy defined
recommendation: defined tag namespaces with cost, environment, and owner tags
- check_id: SEC-DAT-002
pillar: Data Protection
finding: using Oracle-managed keys or no key management strategy
recommendation: OCI Vault specified for key management
- check_id: SEC-NET-001
pillar: Network Security
finding: only Security Lists used without NSGs
recommendation: NSGs used as primary network security mechanism
- check_id: SEC-NET-004
pillar: Network Security
finding: OCI services accessed via internet gateway
recommendation: Service Gateway configured in VCN
- check_id: SEC-MON-002
pillar: Monitoring & Audit
finding: audit service not mentioned or retention not configured
recommendation: Audit service enabled (enabled by default, verify retention)
- check_id: SEC-MON-003
pillar: Monitoring & Audit
finding: no VCN Flow Logs configured
recommendation: VCN Flow Logs enabled for critical subnets
- check_id: PERF-CST-003
pillar: Cost Management
finding: no budget alerts configured
recommendation: OCI Budgets configured with alert thresholds
- check_id: PERF-CST-004
pillar: Cost Management
finding: no cost attribution tagging strategy
recommendation: cost-tracking tags defined and enforced
- check_id: OPS-MON-003
pillar: Workload Monitoring
finding: no centralized log analysis solution
recommendation: OCI Logging Analytics configured
- check_id: OPS-SUP-002
pillar: Operations Support
finding: no notification configuration
recommendation: OCI Notifications configured for operational events
low_priority:
- check_id: REL-SCL-002
pillar: Scalability
finding: no service limit review planned
recommendation: service limit review mentioned in deployment plan
- check_id: OPS-SUP-001
pillar: Operations Support
finding: no support plan consideration
recommendation: Oracle support plan level specified and matches criticality
references:
framework: https://docs.oracle.com/en/solutions/oci-best-practices/index.html
security: https://docs.oracle.com/en/solutions/oci-best-practices/effective-strategies-security-and-compliance1.html
reliability: https://docs.oracle.com/en/solutions/oci-best-practices/reliable-and-resilient-cloud-topology-practices1.html
operations: https://docs.oracle.com/en/solutions/oci-best-practices/best-practices-operating-cloud-deployments-efficiency.html
distributed: https://docs.oracle.com/en/solutions/oci-best-practices/effective-strategies-distributed-cloud-implementation1.html

View File

@@ -1,92 +0,0 @@
[
{
"feature": "Auto Indexing",
"category": "auto_management",
"compatibility": [
{
"deployment": "ADB-S Serverless",
"version": "23ai",
"status": "GA_CAVEAT",
"notes": "Creates indexes HIDDEN by default. Instantly reversible. DML costing prevents over-indexing. Deduplication with manually created indexes."
},
{
"deployment": "ADB-S Serverless",
"version": "26ai",
"status": "GA",
"notes": "Improved in 26ai \u2014 better cost model, fewer false positives."
},
{
"deployment": "ADB-S Elastic Pool",
"version": "23ai",
"status": "GA_CAVEAT",
"notes": "Same as ADB-S Serverless."
},
{
"deployment": "ADB Dedicated Elastic Pool (DEP)",
"version": "23ai",
"status": "GA_CAVEAT",
"notes": "Available but less tested in DEP."
},
{
"deployment": "ADB on Dedicated Exadata",
"version": "23ai",
"status": "GA",
"notes": "Fully supported."
},
{
"deployment": "Exadata Cloud Service",
"version": "23ai",
"status": "NOT_AVAIL",
"notes": "Not an ADB feature. Use manual indexing."
},
{
"deployment": "Base DB Service (EE)",
"version": "23ai",
"status": "NOT_AVAIL",
"notes": ""
}
]
},
{
"feature": "AI Vector Search (HNSW)",
"category": "developer",
"compatibility": [
{
"deployment": "ADB-S Serverless",
"version": "23ai",
"status": "GA_CAVEAT",
"notes": "HNSW indexes are node-local on multi-node RAC. Works well up to\n~50M vectors on single node (\u226424 ECPUs). At 100M+ on multi-node\n(\u226564 ECPUs), requires hash-partitioned vector table with LOCAL\nHNSW index for <50ms P95. See FF-202603-008.\n"
},
{
"deployment": "ADB-S Serverless",
"version": "26ai",
"status": "UNTESTED",
"notes": "Check if distributed HNSW is added in 26ai. Expected to remain node-local."
},
{
"deployment": "ADB-S Elastic Pool",
"version": "23ai",
"status": "GA_CAVEAT",
"notes": "Same node-local limitation as ADB-S Serverless."
},
{
"deployment": "ADB on Dedicated Exadata",
"version": "23ai",
"status": "GA_CAVEAT",
"notes": "Same limitation. Dedicated infra doesn't change HNSW locality."
},
{
"deployment": "Exadata Cloud Service",
"version": "23ai",
"status": "GA_CAVEAT",
"notes": "RAC with HNSW has same node-local constraint. Partitioning workaround applies."
},
{
"deployment": "Base DB Service (EE)",
"version": "23ai",
"status": "NOT_AVAIL",
"notes": "AI Vector Search requires 23ai. Available in EE but HNSW performance limited without Exadata storage."
}
]
}
]

View File

@@ -1,25 +0,0 @@
{
"query": "ADB-S vs AWS Aurora PostgreSQL",
"aws_database_mappings": [],
"relevant_objections": [
{
"id": "OBJ-001",
"category": "market",
"objection": "OCI is a niche cloud \u2014 AWS/Azure are the leaders",
"response": "OCI is the #4 cloud globally and growing fastest in database PaaS.\nFor Oracle database workloads specifically, OCI is the leader:\n- Only cloud with Exadata hardware\n- Only cloud with Autonomous Database\n- Best Oracle license portability\nThe question isn't \"best cloud overall\" but \"best cloud for this workload.\"\n",
"evidence": "Gartner, IDC reports on cloud database market"
},
{
"id": "OBJ-004",
"category": "features",
"objection": "OCI doesn't have as many services as AWS",
"response": "True for breadth (AWS has 200+ services). For database and enterprise\nworkloads, OCI feature parity is strong. Key services are GA:\n- Compute, networking, storage, Kubernetes, serverless\n- Monitoring, logging, IAM, security\n- Queue, Streaming, API Gateway\nWhat matters is whether OCI has what *you* need, not a raw count.\n"
},
{
"id": "OBJ-005",
"category": "cost",
"objection": "We can get better pricing from AWS/Azure",
"response": "OCI list prices are already 30-50% below AWS for equivalent configs.\nFor Oracle specifically:\n- No Oracle license surcharge on OCI\n- BYOL discount is deeper on OCI\n- Data egress is 10x cheaper\nRequest a detailed cost comparison with matched configurations.\n"
}
]
}

View File

@@ -1,121 +0,0 @@
[
{
"id": "FF-202603-002",
"date": "2026-03-08",
"contributor": {
"name": "Diego Cabrera",
"team": "Field Architecture",
"client": "Strategic Migration Customer",
"context": "Production migration",
"confidence": "validated"
},
"product": "ADB-S Dedicated Elastic Pool (DEP)",
"version": "23ai",
"severity": "HIGH",
"category": "limitation",
"summary": "ADG must be disabled before joining Dedicated Elastic Pool",
"detail": "When attempting to add an ADB-S instance with active Autonomous Data Guard\nto a Dedicated Elastic Pool, the operation fails. ADG must be explicitly\ndisabled before the instance can join the DEP. This is a known issue\nacknowledged by Oracle but not prominently documented.\n\nImpact: requires a brief HA gap during DEP onboarding. Must coordinate\nwith the customer's change window.\n",
"workaround": "Disable ADG \u2192 join DEP \u2192 re-enable ADG. Plan for ~15 min HA gap.",
"oracle_sr": "",
"status": "acknowledged",
"resolved_date": null,
"resolution": null,
"affects_matrix": "Elastic Pool Membership",
"tags": [
"dep",
"adg",
"elastic-pool",
"ha",
"limitation"
]
},
{
"id": "FF-202603-003",
"date": "2026-03-05",
"contributor": {
"name": "Diego Cabrera",
"team": "Field Architecture",
"client": "Strategic Migration Customer",
"context": "Production migration",
"confidence": "validated"
},
"product": "ADB-S Dedicated Elastic Pool (DEP)",
"version": "23ai",
"severity": "MEDIUM",
"category": "undocumented",
"summary": "DEP maintenance window immutable post-creation \u2014 change only via SR",
"detail": "The maintenance window for a Dedicated Elastic Pool cannot be changed\nafter creation via Console, CLI, or API. The only way to change it is\nby filing a Service Request with Oracle Support.\n\nDefault window is Saturday/Sunday. Other days require specifying at\ncreation time (which itself has the CLI bug \u2014 see FF-202603-001) or\nrequesting via SR.\n",
"workaround": "Set desired window at DEP creation time (via Console, not CLI). If missed, file SR.",
"oracle_sr": "",
"status": "acknowledged",
"resolved_date": null,
"resolution": null,
"affects_matrix": "Auto Patching",
"tags": [
"dep",
"maintenance-window",
"immutable",
"sr-required"
]
},
{
"id": "FF-202603-004",
"date": "2026-03-01",
"contributor": {
"name": "Diego Cabrera",
"team": "Field Architecture",
"client": "Strategic Migration Customer",
"context": "Production migration",
"confidence": "validated"
},
"product": "ADB-S",
"version": "23ai",
"severity": "MEDIUM",
"category": "gotcha",
"summary": "DEP provisioning takes days to weeks depending on capacity",
"detail": "Dedicated Elastic Pool provisioning is NOT instant like ADB-S Serverless.\nIt requires physical Exadata infrastructure allocation. Lead time varies\nfrom 3 days (if capacity available in region) to 2-3 weeks (if capacity\nneeds to be provisioned).\n\nBilling starts only at AVAILABLE state, not at request time.\nCo-location of existing ADB-S instances happens at the next maintenance\nwindow after joining, not immediately.\n",
"workaround": "Request DEP early in the project timeline. Don't make it a critical-path dependency in week 1.",
"oracle_sr": "",
"status": "acknowledged",
"resolved_date": null,
"resolution": null,
"affects_matrix": "Elastic Pool Membership",
"tags": [
"dep",
"provisioning",
"lead-time",
"capacity",
"planning"
]
},
{
"id": "FF-202603-005",
"date": "2026-02-20",
"contributor": {
"name": "Diego Cabrera",
"team": "Field Architecture",
"client": "Strategic Migration Customer",
"context": "Production migration",
"confidence": "observed"
},
"product": "ADB-S",
"version": "23ai",
"severity": "LOW",
"category": "gotcha",
"summary": "Refreshable Clone failed refresh leaves clone in AVAILABLE state \u2014 detection delay",
"detail": "When a Refreshable Clone's auto-refresh fails, the clone remains in\nAVAILABLE state (not DISCONNECTED). The Elastic Pool leader monitors\nlifecycle state changes, not refresh success/failure.\n\nThis means a failed refresh is NOT immediately detected by the\ninfrastructure. The stale data window equals the ADG RTO for\nunplanned scenarios.\n",
"workaround": "Planned switchovers: DBMS_PROXY_SQL.DISABLE_READ_ONLY_OFFLOAD proactively.\nUnplanned: OCI Events + OCI Function that monitors refresh state and\ndisables read offload automatically. Reduces stale window to ~ADG RTO.\n",
"oracle_sr": "",
"status": "monitoring",
"resolved_date": null,
"resolution": null,
"affects_matrix": "Refreshable Clone",
"tags": [
"refreshable-clone",
"stale-reads",
"elastic-pool",
"detection-delay",
"proxysql"
]
}
]

View File

@@ -1,300 +0,0 @@
[
{
"title": "Oracle MAA for Oracle Database@Azure",
"url": "https://docs.oracle.com/en/solutions/oracle-maa-db-at-azure/index.html",
"type": "reference-architecture",
"date": "2025-05",
"services": [
"exacs",
"adg",
"vault",
"azure"
],
"tags": [
"database",
"multicloud",
"azure",
"ha-dr",
"autonomous"
],
"summary": "Cross-AZ Data Guard on ExaCS in Database@Azure. Active Data Guard recommended for cross-AZ replication (block repair, app continuity, read offload). Backups to Autonomous Recovery Service.\n",
"terraform": null
},
{
"title": "Implement disaster recovery with local and regional standbys on Oracle Database@Azure",
"url": "https://docs.oracle.com/en/solutions/local-regional-standby-dr-db-at-azure/index.html",
"type": "reference-architecture",
"date": "2025-05",
"services": [
"exacs",
"adg",
"azure",
"fsdr"
],
"tags": [
"database",
"multicloud",
"azure",
"ha-dr"
],
"summary": "Local standby for HA within same region, regional standby for DR across Azure regions. Uses Active Data Guard with Fast-Start Failover. Recommends Full Stack DR service for automated failover orchestration.\n",
"terraform": null
},
{
"title": "Implement disaster recovery with multi-region standby on Oracle Database@Azure",
"url": "https://docs.oracle.com/en/solutions/multi-region-standby-dr-db-at-azure/index.html",
"type": "reference-architecture",
"date": "2025-04",
"services": [
"exacs",
"adg",
"azure"
],
"tags": [
"database",
"multicloud",
"azure",
"ha-dr"
],
"summary": "Multi-region DR for ExaCS on Database@Azure using Data Guard. Cross-region standby with switchover/failover capabilities. Includes network topology for Azure-to-Azure cross-region connectivity.\n",
"terraform": null
},
{
"title": "Implement cross-region disaster recovery for Exadata Database on Oracle Database@Azure",
"url": "https://docs.oracle.com/en/solutions/exadb-dr-on-db-azure/index.html",
"type": "reference-architecture",
"date": "2025-01",
"services": [
"exacs",
"adg",
"azure",
"fsdr"
],
"tags": [
"database",
"multicloud",
"azure",
"ha-dr"
],
"summary": "Cross-region DR for ExaCS on Database@Azure. OCI-managed networks for peering (better performance, first 10 TB/month free). Data Guard for cross-region replication, FSDR for automated failover orchestration.\n",
"terraform": "https://github.com/oracle-quickstart/oci-multicloud-azure"
},
{
"title": "Deploy Active Data Guard Far Sync to protect data across Oracle Database@Azure regions",
"url": "https://docs.oracle.com/en/solutions/active-data-guard-far-sync-oracle-db-at-azure/index.html",
"type": "reference-architecture",
"date": "2025-02",
"services": [
"exacs",
"adg",
"azure"
],
"tags": [
"database",
"multicloud",
"azure",
"ha-dr"
],
"summary": "Far Sync instance for zero data loss protection across Azure regions. Synchronous redo transport to Far Sync, async to remote standby. Eliminates performance impact of synchronous shipping over long distances.\n",
"terraform": null
},
{
"title": "Implement Oracle Database Autonomous Recovery Service with Oracle Database@Azure",
"url": "https://docs.oracle.com/en/solutions/implement-recovery-service-db-at-azure/index.html",
"type": "reference-architecture",
"date": "2025-01",
"services": [
"exacs",
"azure"
],
"tags": [
"database",
"multicloud",
"azure",
"ha-dr"
],
"summary": "Autonomous Recovery Service for ExaCS backups on Database@Azure. Automated backup management with real-time protection and point-in-time recovery capabilities.\n",
"terraform": null
},
{
"title": "Deploy Active Data Guard Far Sync to protect data across Oracle Database@AWS regions",
"url": "https://docs.oracle.com/en/solutions/dr-active-dg-farsync-db-at-aws/index.html",
"type": "reference-architecture",
"date": "2025-09",
"services": [
"exacs",
"adg",
"aws"
],
"tags": [
"database",
"multicloud",
"aws",
"ha-dr"
],
"summary": "Far Sync instance for zero data loss protection across AWS regions. Synchronous redo to local Far Sync, asynchronous to remote standby. Requires cross-region AWS networking for redo transport.\n",
"terraform": null
},
{
"title": "Implement disaster recovery with local and regional standbys on Oracle Database@AWS",
"url": "https://docs.oracle.com/en/solutions/dr-local-regional-standby-db-at-aws/index.html",
"type": "reference-architecture",
"date": "2025-09",
"services": [
"exacs",
"adg",
"aws",
"fsdr"
],
"tags": [
"database",
"multicloud",
"aws",
"ha-dr"
],
"summary": "Local standby for HA within same AWS region, regional standby for DR. Active Data Guard with Fast-Start Failover for automated failover. Full Stack DR service for cross-service failover orchestration.\n",
"terraform": null
},
{
"title": "Implement disaster recovery with cross-zonal Data Guard on Oracle Database@AWS",
"url": "https://docs.oracle.com/en/solutions/cross-zone-dr-db-at-aws/index.html",
"type": "reference-architecture",
"date": "2025-08",
"services": [
"exacs",
"adg",
"aws"
],
"tags": [
"database",
"multicloud",
"aws",
"ha-dr"
],
"summary": "Cross-AZ Data Guard on Database@AWS for HA. Synchronous redo transport between AZs for zero data loss. Fast-Start Failover for automatic database switchover on failure.\n",
"terraform": null
},
{
"title": "Implement disaster recovery with cross-regional Data Guard on Oracle Database@AWS",
"url": "https://docs.oracle.com/en/solutions/implement-dr-cross-region-dg-odb-aws/index.html",
"type": "reference-architecture",
"date": "2025-08",
"services": [
"exacs",
"adg",
"aws"
],
"tags": [
"database",
"multicloud",
"aws",
"ha-dr"
],
"summary": "Cross-region Data Guard on Database@AWS for DR. Asynchronous redo transport for cross-region replication. Planned switchover for maintenance, forced failover for disaster scenarios.\n",
"terraform": null
},
{
"title": "Migrate Oracle RAC Databases to OCI",
"url": "https://docs.oracle.com/en/solutions/ensure-ha-migrate-vmware-workloads-to-oci/migrate-oracle-rac-databases1.html",
"type": "reference-architecture",
"date": "2025-01",
"services": [
"exacs",
"exascale",
"adb-d",
"base-db"
],
"tags": [
"database",
"migration",
"ha-dr"
],
"summary": "Compares 4 RAC migration targets: ExaCS Dedicated, Exascale, ADB-D, and 2-node RAC on Base DB. ExaCS recommended for full RAC feature parity. Exascale for 23ai-only without dedicated infra commitment.\n",
"terraform": null
},
{
"title": "Configure Data Guard for Oracle Exadata Database Service on Dedicated Infrastructure",
"url": "https://docs.oracle.com/en/solutions/dataguard-exadata-dedicated-infrastructure/index.html",
"type": "reference-architecture",
"date": "2025-07",
"services": [
"exacs",
"adg"
],
"tags": [
"database",
"ha-dr"
],
"summary": "Data Guard configuration for ExaCS Dedicated. Active Data Guard for read offload and automatic failover. Cross-region standby for DR with Fast-Start Failover for automated switchover.\n",
"terraform": null
},
{
"title": "Back up from Exadata on Dedicated Infrastructure to Zero Data Loss Autonomous Recovery",
"url": "https://docs.oracle.com/en/solutions/back-up-exadata-dedicated-zero-data-loss-recovery/index.html",
"type": "reference-architecture",
"date": "2025-07",
"services": [
"exacs"
],
"tags": [
"database",
"ha-dr"
],
"summary": "Autonomous Recovery Service for ExaCS backups. Automated backup management with real-time redo protection. Validates backup recoverability automatically.\n",
"terraform": null
},
{
"title": "Configure a standby database for disaster recovery using Oracle Exadata Database Service on Cloud@Customer",
"url": "https://docs.oracle.com/en/solutions/exadata-cloud-at-customer-standby/index.html",
"type": "reference-architecture",
"date": "2025-07",
"services": [
"exacs",
"adg"
],
"tags": [
"database",
"ha-dr"
],
"summary": "Data Guard standby on ExaCS Cloud@Customer for hybrid DR. On-premises primary with cloud standby, or cloud primary with on-premises standby for data sovereignty requirements.\n",
"terraform": null
},
{
"title": "Learn about maximum availability architecture for PeopleSoft",
"url": "https://docs.oracle.com/en/solutions/learn-about-maa-for-peoplesoft/index.html",
"type": "reference-architecture",
"date": "2024-08",
"services": [
"exacs",
"adg",
"load-balancer",
"compute"
],
"tags": [
"application",
"ha-dr",
"peoplesoft"
],
"summary": "MAA for PeopleSoft on OCI. Active Data Guard for database HA/DR, multi-instance PIA behind Load Balancer, Process Scheduler on multiple nodes for batch processing resilience.\n",
"terraform": null
},
{
"title": "Provision and deploy a maximum availability solution for PeopleSoft on Oracle Cloud",
"url": "https://docs.oracle.com/en/solutions/deploy-maa-for-peoplesoft-on-oci/index.html",
"type": "reference-architecture",
"date": "2024-08",
"services": [
"exacs",
"adg",
"load-balancer",
"compute"
],
"tags": [
"application",
"ha-dr",
"peoplesoft"
],
"summary": "Step-by-step PeopleSoft MAA deployment on OCI. Terraform stacks for infrastructure provisioning, Data Guard configuration, and PeopleSoft application tier setup.\n",
"terraform": null
}
]

View File

@@ -1,33 +0,0 @@
[
{
"id": "FF-202604-001",
"date": "2026-04-12",
"contributor": {
"name": "Carlos Mendoza",
"team": "Field Architecture",
"date": "2026-04-12",
"confidence": "validated",
"client": "PharmaCorp Mexico",
"context": "ExaCS migration"
},
"reported_by": "Carlos Mendoza",
"product": "ExaCS",
"version": "23ai",
"severity": "MEDIUM",
"category": "gotcha",
"summary": "ExaCS iormcal fails silently when storage server count < 3 \u2014 validate IORM plan after apply",
"detail": "IORM resource plan apply succeeds but actual I/O shares are not enforced when storage count < 3. Check v$iorm_plans for actual vs requested allocation.",
"workaround": "Always validate IORM plan output after apply. Check v$iorm_plans for actual vs requested shares. Minimum 3 storage servers for reliable IORM.",
"oracle_sr": "",
"status": "open",
"resolved_date": null,
"resolution": null,
"affects_matrix": null,
"tags": [
"exacs",
"iorm",
"storage"
],
"confirmations": []
}
]

View File

@@ -1,175 +0,0 @@
{
"summary": {
"total_artefacts": 18,
"mentioned": 2,
"likely_relevant": 0,
"possibly_relevant": 9,
"not_covered": 7,
"skill_auto_generate": 5,
"skill_assist": 2
},
"artefacts": [
{
"id": "DEF-01",
"name": "Customer Profile",
"phase": "define",
"step": "ideate",
"skill_support": "assist",
"customer_facing": false,
"relevance": "possibly_relevant"
},
{
"id": "DEF-02",
"name": "Strategy Map",
"phase": "define",
"step": "ideate",
"skill_support": "assist",
"customer_facing": false,
"relevance": "none"
},
{
"id": "DEF-03",
"name": "Point of View (PoV)",
"phase": "define",
"step": "ideate",
"skill_support": "auto_generate",
"customer_facing": false,
"relevance": "possibly_relevant"
},
{
"id": "DEF-04",
"name": "Ideation Workshop",
"phase": "define",
"step": "ideate",
"skill_support": "reference",
"customer_facing": true,
"relevance": "possibly_relevant"
},
{
"id": "DEF-05",
"name": "Business Case",
"phase": "define",
"step": "ideate",
"skill_support": "auto_generate",
"customer_facing": true,
"relevance": "mentioned"
},
{
"id": "DEF-06",
"name": "Value Story",
"phase": "define",
"step": "ideate",
"skill_support": "auto_generate",
"customer_facing": true,
"relevance": "mentioned"
},
{
"id": "DEF-07",
"name": "Value Story Delivery",
"phase": "define",
"step": "validate",
"skill_support": "assist",
"customer_facing": true,
"relevance": "possibly_relevant"
},
{
"id": "DEF-08",
"name": "Joint Engagement Plan (JEP)",
"phase": "define",
"step": "plan",
"skill_support": "auto_generate",
"customer_facing": true,
"relevance": "possibly_relevant"
},
{
"id": "DES-35",
"name": "Solution Proposal",
"phase": "design",
"step": "confirm",
"skill_support": "auto_generate",
"customer_facing": true,
"relevance": "none"
},
{
"id": "DES-36",
"name": "Partner / Services Proposal",
"phase": "design",
"step": "confirm",
"skill_support": "reference",
"customer_facing": true,
"relevance": "none"
},
{
"id": "DES-37",
"name": "RFx Response",
"phase": "design",
"step": "confirm",
"skill_support": "reference",
"customer_facing": true,
"relevance": "none"
},
{
"id": "DES-38",
"name": "Commercial Agreement",
"phase": "design",
"step": "confirm",
"skill_support": "reference",
"customer_facing": true,
"relevance": "none"
},
{
"id": "DEL-17",
"name": "Cloud Operating Framework",
"phase": "deliver",
"step": "operate",
"skill_support": "reference",
"customer_facing": true,
"relevance": "possibly_relevant"
},
{
"id": "DEL-18",
"name": "OCI Operationalization Framework",
"phase": "deliver",
"step": "operate",
"skill_support": "reference",
"customer_facing": true,
"relevance": "none"
},
{
"id": "DEL-19",
"name": "Retrospective",
"phase": "deliver",
"step": "improve",
"skill_support": "auto_generate",
"customer_facing": false,
"relevance": "none"
},
{
"id": "DEL-20",
"name": "Value Realization",
"phase": "deliver",
"step": "improve",
"skill_support": "auto_generate",
"customer_facing": true,
"relevance": "possibly_relevant"
},
{
"id": "DEL-21",
"name": "Customer Success Story",
"phase": "deliver",
"step": "improve",
"skill_support": "reference",
"customer_facing": true,
"relevance": "possibly_relevant"
},
{
"id": "DEL-22",
"name": "Improvement Actions",
"phase": "deliver",
"step": "improve",
"skill_support": "reference",
"customer_facing": true,
"relevance": "possibly_relevant"
}
]
}

View File

@@ -1,401 +0,0 @@
# OCI Deal Accelerator — Proposal Spec
# Demo: Pharma Mexico — ExaCS migration from on-prem Exadata X6
# Prompt 1: Full proposal
metadata:
customer: "PharmaCorp Mexico"
project: "Oracle Database Migration to OCI"
subtitle: "ExaCS Migration — Exadata X6 to OCI"
architect: "Carlos Mendoza"
firm: "Oracle Cloud Infrastructure"
date: "2026-04-12"
summary:
why: >
PharmaCorp Mexico operates 3 Oracle databases (EBS R12, SAP, DW) on on-premises
Exadata X6 hardware approaching end-of-life. Hardware refresh costs $1.8M and
locks into 5 more years of on-prem operations. Migration to OCI ExaCS provides
30%+ cost reduction, eliminates hardware lifecycle management, improves DR posture
(RPO<15min, RTO<1h), and enables SOX compliance alignment with Oracle-managed
infrastructure patching.
current_state:
- "3 Oracle DBs on Exadata X6 (EBS R12 prod, SAP, Data Warehouse)"
- "200 concurrent users, peak during fiscal close"
- "2TB total data across all databases"
- "No DR — single site in Mexico City data center"
- "Manual patching quarterly — SOX audit finding pending"
- "HW refresh due in 6 months ($1.8M quote)"
target_state: >
OCI ExaCS X11M in Queretaro (prod) with Data Guard standby in Sao Paulo for
cross-region DR. Hub-spoke networking via DRG, dual FastConnect 10Gbps for
redundancy, WAF for web applications, OCI Vault for TDE key management.
SOX compliance via automated patching and audit logging.
timeline: "Migration Q3-Q4 2026 (16 weeks) — conditional on board approval Q2"
service_tiering:
- name: "EBS R12 Production"
tier: "Platinum"
uptime: "99.99%"
rto: "1 hour"
rpo: "15 minutes"
justification: "Business-critical ERP — fiscal close depends on this"
- name: "SAP Database"
tier: "Gold"
uptime: "99.95%"
rto: "4 hours"
rpo: "1 hour"
justification: "Critical but lower user count"
- name: "Data Warehouse"
tier: "Silver"
uptime: "99.9%"
rto: "8 hours"
rpo: "4 hours"
justification: "Reporting — can tolerate longer recovery"
architecture_principles:
design:
- id: "D-01"
name: "Operational Simplicity"
summary: "Prefer managed services with automated patching"
rationale: "SOX requires documented patching — ExaCS automates this"
- id: "D-05"
name: "HA for Business Continuity"
summary: "Design for HA proportional to business impact"
rationale: "EBS is Platinum tier — needs cross-region DR"
- id: "D-06"
name: "Defense in Depth"
summary: "Multiple security layers, not single perimeter"
rationale: "SOX compliance requires network segmentation + encryption + audit"
deployment:
- id: "P-01"
name: "Infrastructure as Code"
summary: "All infrastructure defined in Terraform"
rationale: "Reproducible environments, audit trail for SOX"
architecture:
description: >
Dual-region ExaCS deployment: Queretaro (primary) + Sao Paulo (DR standby).
Hub-spoke networking with DRG provides segmented VCNs for each workload tier.
Dual FastConnect 10Gbps from Mexico City provides redundant connectivity.
WAF protects EBS web tier. OCI Vault manages TDE encryption keys externally.
Key components:
- ExaCS X11M Quarter Rack in Queretaro (3 databases)
- Data Guard to ExaCS standby in Sao Paulo (EBS + SAP)
- Hub VCN with DRG for inter-spoke routing
- Dual FastConnect 10Gbps from Mexico City DC
- WAF for EBS R12 web access
- OCI Vault for TDE key management (SOX)
- OCI Logging + Audit for compliance
visual:
regions:
- name: "Queretaro (Primary)"
services:
- name: "ExaCS X11M (3 DBs)"
type: "database"
- name: "Hub VCN + DRG"
type: "networking"
- name: "WAF"
type: "security"
- name: "OCI Vault"
type: "security"
- name: "Sao Paulo (DR)"
services:
- name: "ExaCS Standby (Data Guard)"
type: "database"
- name: "Spoke VCN"
type: "networking"
decisions:
- title: "ExaCS over ADB-S"
decision: "Use ExaCS instead of ADB-S for all 3 databases"
rationale: >
EBS R12 requires OS-level access for patches and customizations.
SAP on Oracle requires specific Oracle features not available on ADB-S.
DW benefits from ExaCS storage performance. All 3 share the same
Exadata infrastructure for cost efficiency.
alternatives: "ADB-S (rejected — EBS needs OS access), DBCS (rejected — no Exadata performance)"
- title: "Cross-Region DR with Data Guard"
decision: "Active Data Guard from Queretaro to Sao Paulo"
rationale: >
RPO<15min requires real-time redo shipping. Sao Paulo provides geographic
separation for disaster scenarios. Data Guard supports automatic failover
with FSDR for RTO<1h.
alternatives: "Backup/restore (rejected — RPO 24h), Same-region standby (no geo separation)"
- title: "Hub-Spoke Networking"
decision: "Hub VCN with DRG for inter-spoke routing and segmentation"
rationale: >
SOX requires network segmentation between environments. Hub-spoke with DRG
provides centralized security controls (WAF, NSG) while isolating workloads.
alternatives: "Flat VCN (rejected — no segmentation for SOX)"
- title: "Dual FastConnect"
decision: "Two 10Gbps FastConnect circuits from Mexico City"
rationale: >
Single FastConnect is a documented single point of failure. Dual circuits
provide redundancy for the EBS production workload.
alternatives: "Single FastConnect + IPSec VPN backup (acceptable for lower tiers)"
- title: "OCI Vault for TDE Keys"
decision: "External key management via OCI Vault instead of Oracle Wallet"
rationale: >
SOX requires separation of duties for encryption key management.
OCI Vault provides FIPS 140-2 Level 3 HSM-backed key storage.
alternatives: "Oracle Wallet on ExaCS (simpler but no separation of duties)"
ha_dr:
description: >
Primary in Queretaro with Active Data Guard to Sao Paulo. FSDR orchestrates
failover for RTO<1h. EBS and SAP databases replicated; DW rebuilt from backup
in DR scenario (Silver tier — 8h RTO acceptable).
tiers:
- tier: "Platinum — EBS R12"
technology: "ExaCS + Active Data Guard + FSDR automatic failover"
rto: "1 hour"
rpo: "15 minutes"
- tier: "Gold — SAP"
technology: "ExaCS + Active Data Guard"
rto: "4 hours"
rpo: "1 hour"
- tier: "Silver — DW"
technology: "ExaCS + RMAN backup to Object Storage"
rto: "8 hours"
rpo: "4 hours"
security:
controls:
identity:
- "OCI IAM with federated identity (SAML 2.0 to corporate AD)"
- "Separate admin compartments per environment"
- "MFA required for all admin operations"
- "Break-glass emergency access procedures"
network:
- "Hub-spoke VCN with DRG — workload isolation"
- "WAF for EBS R12 web tier"
- "NSG rules per spoke — deny-all default"
- "Dual FastConnect — no public internet exposure"
data_protection:
- "TDE encryption at rest with OCI Vault (FIPS 140-2 L3)"
- "Encryption in transit (TLS 1.2+ / native Oracle Net encryption)"
- "Data Guard redo encryption"
monitoring:
- "OCI Audit for all API calls (SOX)"
- "OCI Logging for network flows"
- "Database Audit with Unified Auditing"
- "OCI Events + Notifications for security alerts"
compliance:
- "SOX — automated patching, audit logging, separation of duties"
environment_catalogue:
environments:
- name: "Production (Queretaro)"
sizing: "ExaCS X11M Quarter Rack — 3 databases (EBS, SAP, DW)"
isolation: "Dedicated Exadata infrastructure"
cost_pct: 100
- name: "DR Standby (Sao Paulo)"
sizing: "ExaCS X11M Quarter Rack — 2 databases (EBS, SAP standby)"
isolation: "Dedicated Exadata infrastructure"
cost_pct: 70
- name: "Pre-Production"
sizing: "DBCS VM — reduced sizing for testing"
isolation: "Shared infrastructure, separate compartment"
cost_pct: 15
cost_notes:
- "DR standby runs at 70% — Active Data Guard requires matching shape"
- "Pre-prod uses DBCS VMs, not ExaCS — sufficient for functional testing"
- "Dev/Test environment excluded — customer uses on-prem for dev"
cost:
line_items:
- component: "ExaCS X11M Quarter Rack — Queretaro (Prod)"
monthly_payg: "$18,500"
monthly_byol: "$8,200"
notes: "2 DB servers, 3 storage servers, BYOL"
- component: "ExaCS X11M Quarter Rack — Sao Paulo (DR)"
monthly_payg: "$18,500"
monthly_byol: "$8,200"
notes: "ADG standby, BYOL"
- component: "ADB-S 16 ECPU (DW alternative — future)"
monthly_payg: "$2,400"
monthly_byol: "$1,200"
notes: "Optional — migrate DW to ADB-S in Phase 2"
- component: "FastConnect 10Gbps Dual"
monthly_payg: "$3,060"
notes: "2 x $1,530/month"
- component: "OCI Vault"
monthly_payg: "$500"
notes: "HSM-backed key management"
- component: "Object Storage (50TB backup)"
monthly_payg: "$1,200"
notes: "RMAN backups + DW backup"
- component: "WAF + Logging + Monitoring"
monthly_payg: "$800"
notes: "WAF for EBS web tier + audit logging"
- component: "TOTAL"
monthly_payg: "$45,000"
monthly_byol: "$23,200"
notes: "BYOL saves 48%"
assumptions:
- "BYOL assumes existing Oracle Database EE licenses with active support"
- "ExaCS pricing based on current OCI list prices"
- "DR standby at full rate (ADG requires active compute)"
- "No middleware licensing included (EBS app tier on compute VMs)"
- "FastConnect partner charges not included"
show_byol: true
cost_comparison:
title: "Cost Comparison: On-Prem HW Refresh vs OCI Migration"
col_headers: ["Component", "On-Prem Refresh (5yr)", "OCI ExaCS BYOL", "Delta"]
rows:
- item: "Infrastructure (hardware/cloud)"
current: "$1,800,000 upfront"
oci: "$278,400/yr"
savings: "Break-even at 3.2 years"
- item: "Annual Support & Maintenance"
current: "$220,000/yr"
oci: "Included in OCI"
savings: "-100%"
- item: "DR Infrastructure"
current: "$0 (no DR today)"
oci: "$98,400/yr"
savings: "New capability — no DR today"
- item: "Data Center (power/cooling/space)"
current: "$80,000/yr"
oci: "$0"
savings: "-100%"
- item: "DBA Operations (patching)"
current: "$60,000/yr (part-time DBA)"
oci: "$0 (automated)"
savings: "-100%"
- item: "TOTAL ANNUAL (year 1)"
current: "$2,160,000"
oci: "$376,800"
savings: "-83%"
- item: "TOTAL 3-YEAR TCO"
current: "$2,880,000"
oci: "$1,130,400"
savings: "-$1.75M (61%)"
migration:
phases:
- name: "Phase 1: Foundation"
duration: "4 weeks"
milestones:
- "OCI tenancy + networking provisioned"
- "ExaCS Quarter Rack deployed in Queretaro"
- "FastConnect dual circuits active"
- "OCI Vault + IAM configured"
- name: "Phase 2: EBS Migration"
duration: "6 weeks"
milestones:
- "EBS R12 database migrated via ZDM"
- "Data Guard to Sao Paulo configured"
- "WAF + network security validated"
- "SOX audit controls verified"
- name: "Phase 3: SAP + DW Migration"
duration: "4 weeks"
milestones:
- "SAP database migrated"
- "DW migrated + Data Guard for SAP"
- "RMAN backup for DW to Object Storage"
- name: "Phase 4: Cutover + Decommission"
duration: "2 weeks"
milestones:
- "Production cutover (planned downtime window)"
- "On-prem Exadata X6 decommissioned"
- "Go-live monitoring active"
tools:
- "Oracle Zero Downtime Migration (ZDM)"
- "Data Guard Broker for DR setup"
- "FSDR for failover orchestration"
- "Terraform OCI provider for IaC"
downtime: "Planned 4-hour maintenance window for final cutover per database"
operational_raci:
model: "co_managed"
raci_items:
- activity: "ExaCS Infrastructure Patching"
oracle: "R"
customer: "I"
- activity: "Database Patching (quarterly)"
oracle: "C"
customer: "R"
- activity: "Data Guard Monitoring"
oracle: "C"
customer: "R"
- activity: "Backup & Recovery"
oracle: "R"
customer: "C"
- activity: "Security (IAM, NSG, Vault)"
oracle: "C"
customer: "R"
- activity: "SOX Audit Evidence"
oracle: "C"
customer: "R"
- activity: "Capacity Planning"
oracle: "C"
customer: "R"
- activity: "Incident Response (Sev1)"
oracle: "C"
customer: "R"
risks:
- risk: "EBS R12 customizations may require OS-level changes post-migration"
severity: "HIGH"
probability: "Medium"
mitigation: "Inventory all customizations pre-migration; test in Pre-Prod"
- risk: "FastConnect provisioning delay (partner-dependent)"
severity: "MEDIUM"
probability: "Medium"
mitigation: "Start FastConnect provisioning in Phase 1 week 1; IPSec VPN as interim"
- risk: "SAP certification on ExaCS version"
severity: "MEDIUM"
probability: "Low"
mitigation: "Verify SAP Note for ExaCS X11M support before migration"
- risk: "Data Guard network latency Queretaro-Sao Paulo"
severity: "LOW"
probability: "Low"
mitigation: "Test redo apply lag; async mode acceptable for SAP (Gold tier)"
- risk: "SOX audit during migration window"
severity: "MEDIUM"
probability: "Medium"
mitigation: "Maintain dual-write during transition; both systems auditable"
scorecard:
pillars:
- name: "Security & Compliance"
status: "PASS"
passed: 24
total: 26
- name: "Reliability & Resilience"
status: "PASS_WITH_RECOMMENDATIONS"
passed: 7
total: 8
- name: "Performance & Cost"
status: "PASS"
passed: 5
total: 5
- name: "Operational Efficiency"
status: "PASS_WITH_RECOMMENDATIONS"
passed: 9
total: 10
- name: "Distributed Cloud"
status: "NOT_APPLICABLE"
passed: 0
total: 0
recommendations:
- "45/49 checks passed — strong architecture for regulated workload"
- "Add runbook for Data Guard failover testing (quarterly DR drill)"
- "Consider OCI Database Management for centralized fleet monitoring"
- "Define capacity growth plan for fiscal close peak periods"
next_steps:
steps:
- "Board approval for OCI migration budget — CFO — by 2026-05-15"
- "Provision OCI tenancy + ExaCS in Queretaro — Carlos Mendoza — by 2026-06-01"
- "Start FastConnect provisioning with partner — Network team — by 2026-06-01"
- "EBS customization inventory and Pre-Prod testing — DBA team — by 2026-06-15"
- "Schedule SOX audit coordination meeting — Compliance — by 2026-06-01"
contact_info: "Carlos Mendoza — Solutions Architect, Oracle Cloud Infrastructure"

19
kb/CHANGELOG.md Normal file
View File

@@ -0,0 +1,19 @@
# KB Changelog
Recent changes to the Knowledge Base. The skill shows the latest entry in the welcome banner.
## 2026-04-14
- Diagram generator: icon sizing calibrated from 37 Oracle Architecture Center .drawio files (63px services, 42px gateways)
- Diagram generator: auto-sizing containers, DRG placement outside VCN, edge label offsets
- Diagram generator: VCN/subnet dash pattern corrected to "4 2" (Oracle ref standard)
- New: `scripts/validate-diagram.py` — automated diagram quality validation
- New: `--check-links` in refresh_arch_catalog.py — detects broken URLs in catalog
- New: weekly KB health CI workflow (`.gitea/workflows/kb-health.yaml`)
- SKILL.md: anti-hallucination guardrails (closed whitelist + mandatory pre-generation review)
- SKILL.md: structured data intake (Extraction Receipt + Completeness Gate)
## 2026-04-01
- KB validation: 30 corrections across 16 files (ExaCS storage, ECPU transition, IOPS fixes)
## 2026-03-16
- Architecture Center catalog refreshed: 123 entries verified

View File

@@ -18,7 +18,7 @@ skill itself read these YAMLs at runtime.
| `architecture-center/` | Auto-curated index of Oracle Architecture Center reference architectures. | Single `catalog.yaml` | | `architecture-center/` | Auto-curated index of Oracle Architecture Center reference architectures. | Single `catalog.yaml` |
| `field-knowledge/` | Real-world gotchas, lessons learned, undocumented limits. | Frontmatter + body | | `field-knowledge/` | Real-world gotchas, lessons learned, undocumented limits. | Frontmatter + body |
| `field-findings/` | Tracker of newly logged field issues with confidence decay. | Single `tracker.yaml` | | `field-findings/` | Tracker of newly logged field issues with confidence decay. | Single `tracker.yaml` |
| `diagram/` | OCI icon library and reference layouts for diagram generation. | Mixed | | `diagram/` | OCI icon libraries, native PPTX icon index, and reference layouts for diagram generation. | Mixed |
## Required frontmatter ## Required frontmatter
@@ -62,6 +62,7 @@ Use a directory when you need multiple files (pattern + diagrams + ADRs).
| `kb/pricing/oci-sku-catalog.yaml` | `python tools/refresh_sku_catalog.py --refresh` (Oracle pricing API) | | `kb/pricing/oci-sku-catalog.yaml` | `python tools/refresh_sku_catalog.py --refresh` (Oracle pricing API) |
| `kb/pricing/compute.yaml` | `python tools/refresh_sku_catalog.py --refresh-domain compute` (same API, shape-level) | | `kb/pricing/compute.yaml` | `python tools/refresh_sku_catalog.py --refresh-domain compute` (same API, shape-level) |
| `kb/architecture-center/catalog.yaml` | `python tools/refresh_arch_catalog.py --whats-new` (web crawl) | | `kb/architecture-center/catalog.yaml` | `python tools/refresh_arch_catalog.py --whats-new` (web crawl) |
| `kb/diagram/assets/OCI_Icons.pptx` + `kb/diagram/oci-pptx-icons-index.json` | `python tools/refresh_pptx_icon_index.py [--source /path/to/OCI_Icons.pptx]` |
| Other `kb/pricing/<domain>.yaml` | Not yet automated. Add a new entry to `DOMAIN_REGISTRY` in `tools/refresh_sku_catalog.py` and write a domain-specific refresher (see `refresh_compute_yaml` as a template). | | Other `kb/pricing/<domain>.yaml` | Not yet automated. Add a new entry to `DOMAIN_REGISTRY` in `tools/refresh_sku_catalog.py` and write a domain-specific refresher (see `refresh_compute_yaml` as a template). |
| Everything else | **Manual** — review against Oracle docs, bump `last_verified` | | Everything else | **Manual** — review against Oracle docs, bump `last_verified` |
@@ -70,8 +71,84 @@ The shortcut for everyone:
```bash ```bash
make freshness # report stale files make freshness # report stale files
make freshness-refresh # run automatic refreshes for files that support them make freshness-refresh # run automatic refreshes for files that support them
make pptx-icons-refresh # sync new OCI_Icons.pptx revision + rebuild manifest/index
``` ```
For native PowerPoint diagram generation, the repo now carries a bundled
`kb/diagram/assets/OCI_Icons.pptx` plus a derived manifest/index. If Oracle
publishes a newer icon deck, replace it or point the refresh tool at the new
file and rebuild:
```bash
make pptx-icons-refresh
python tools/refresh_pptx_icon_index.py --source ~/Downloads/OCI_Icons.pptx
```
## Architecture Center native benchmark
This repo now has a fixed, reusable benchmark path for Oracle Architecture
Center visual fidelity. Keep this workflow stable because future sessions
must re-run it exactly, not reconstruct it from memory.
Primary validation method:
- `draw.io` fidelity is measured by exporting the generated `*-rebuilt.drawio`
with the real draw.io binary and comparing that PNG against the official
Architecture Center PNG.
- In this WSL setup, the primary binary is
`/mnt/c/Program Files/draw.io/draw.io.exe`.
- Only if the draw.io CLI is unavailable or fails should the runner fall back
to the official bundled SVG companion.
- Native `.pptx` fidelity is measured by rasterizing the editable PPTX slide
with `tools/oci_pptx_render.py`. Do not depend on `soffice` or LibreOffice.
Operational notes that must remain persisted:
- Many official Oracle `.drawio` files are compressed inside `<diagram>` as
base64 + raw-deflate XML. Extraction and validation must support that form.
- `tools/drawio_visual_validator.py` is a structural gate before raster diff:
it catches giant fonts, duplicate ids, off-canvas geometry, and dangling
edges, including in compressed official `.drawio` files.
- `tools/oci_pptx_render.py` is intentionally tolerant of unsupported
`WMF/EMF` media. It skips those assets, records them in `skipped_media`,
and keeps the benchmark running instead of aborting the case.
Standard rerun command:
```bash
make archcenter-benchmark-20
```
Equivalent explicit command:
```bash
.venv/bin/python tools/oci_archcenter_batch.py \
--limit 20 \
--threshold 0.82 \
--fidelity-threshold 0.90 \
--output-root examples/eval-2026-04-25-archcenter-native-20-v8
```
Acceptance contract:
- Official page + ZIP assets staged per case
- Editable `drawio` rebuilt successfully
- `draw.io` CLI fidelity `PASS` against official PNG, or documented SVG fallback
- Icon-cluster coverage `>= 0.55`
- Native PPTX generated with no unresolved or oversize icon refs
- Native PPTX raster fidelity `PASS` against official PNG
- Evidence written under each case: reference assets, generated outputs,
raster renders, diff images, JSON summaries, and markdown reports
Latest verified run:
- `examples/eval-2026-04-25-archcenter-native-20-v8`
- `considered=28`, `processed=20`, `skipped=8`, `PASS=20`, `FAIL=0`
- The verified pool currently has no open native benchmark failures. The
remaining gaps are confined to the skipped pool, which is still filtered
out for annotation-heavy diagrams or missing draw.io icon families such as
DNS/VPN/maximum-security-zone variants.
## Pricing files ## Pricing files
There are exactly **two** pricing files, both auto-refreshed from the There are exactly **two** pricing files, both auto-refreshed from the

View File

@@ -18,6 +18,78 @@ last_verified: "2026-03-16"
source: "https://docs.oracle.com/en/solutions/oracle-architecture-center/" source: "https://docs.oracle.com/en/solutions/oracle-architecture-center/"
entry_count: 123 entry_count: 123
# =============================================================================
# KNOWN GAPS — topologies the catalog does NOT cover well
# =============================================================================
#
# Surfaced by tools/archcenter_pattern_lookup.py at the top of its output
# whenever the user's query tokens match any one of the `triggers` token
# sets below. Purpose: stop the lookup loop early when no canonical Oracle
# ref-arch exists for what the user asked, and tell the agent how to
# COMPOSE the topology from primitives instead of refining query phrasing.
#
# Schema per gap:
# id: unique slug
# triggers: list of token sets — fires when the expanded query contains
# EVERY token in at least ONE set (OR across sets, AND inside
# each set). Tokens are lowercased and synonym-expanded the
# same way as scoring tokens.
# notice: multi-line string surfaced verbatim above the score-based
# top-K. Should explain WHY this is a gap and HOW to compose
# from existing primitives. Be concrete (slugs, alias names).
#
# Add a gap entry only after a real lookup loop wasted user time on a
# topology with no canonical match. Speculation belongs elsewhere.
known_gaps:
- id: gcp-to-oci-native-services
triggers:
- [gcp, postgresql]
- [gcp, redis]
- [gcp, mysql]
- [gcp, oke]
- [gcp, cache]
- [gcp, compute]
- [google, postgresql]
- [google, redis]
- [google, mysql]
- [google, oke]
- [google, cache]
- [google, compute]
notice: |
No canonical Oracle ref-arch covers OCI-native services (PostgreSQL,
OKE, Cache, etc.) accessed FROM Google Cloud via Cross-Cloud
Interconnect. The `Database@Google Cloud` entries below are the
OPPOSITE direction (Oracle DB running ON GCP, not GCP apps reaching
OCI-native services).
Recommended composition — STOP refining the lookup query, build from:
1. A simple VCN baseline (e.g. `start-with-an-oci-virtual-cloud-network`).
2. The OCI service in a private subnet behind DRG + FastConnect VC.
3. A `GCP <region>` container on the left with `cloud_icon: gcp_compute`
(or the relevant GCP service — the renderer maps to mxgraph.gcp2.*
the same way it does for AWS).
- id: newer-oci-services-without-icon
triggers:
- [redis]
- [valkey]
- [oci_cache]
notice: |
OCI Cache with Redis/Valkey is GA after the v24.2 toolkit shipped, so
no dedicated ref-arch exists in the catalog and no toolkit icon ships
either. Oracle's own multi-service ref archs that DO mention Redis
embed inline SVG over the generic database/cache stencil.
Recommended path — don't keep searching:
1. Pick the closest topology BY SHAPE (HA pair, primary+replica,
multi-AZ) from the catalog — geometry transfers, names don't.
2. Use `type: cache` (or `type: database`) with explicit
`label: "OCI Cache (Redis)"`. The renderer's alias table already
routes `type: redis` → generic stencil.
3. Reference: SKILL.md option 2 step 3 (newer-OCI-services convention).
entries: entries:
# ===== DATABASE — MULTICLOUD (Database@Azure) ===== # ===== DATABASE — MULTICLOUD (Database@Azure) =====

View File

@@ -0,0 +1,99 @@
# Query-expansion synonyms for tools/archcenter_pattern_lookup.py
#
# Each canonical phrase is expanded with its aliases at query time so
# free-text searches like "LB HA cross AD" match catalog entries
# tagged "load balancer", "high availability", "availability domain".
#
# Add new entries when a query misses an obvious match. Keep aliases
# lower-case alphanumeric — the tokenizer drops everything else.
synonyms:
# Networking
- canonical: load balancer
aliases: [lb, lbaas, nlb, network load balancer, application load balancer, alb]
- canonical: virtual cloud network
aliases: [vcn]
- canonical: dynamic routing gateway
aliases: [drg]
- canonical: internet gateway
aliases: [igw]
- canonical: nat gateway
aliases: [natgw]
- canonical: service gateway
aliases: [sgw]
- canonical: site to site vpn
aliases: [vpn, ipsec, ipsec vpn]
- canonical: fastconnect
aliases: [fc, dx, direct connect, expressroute]
- canonical: remote peering connection
aliases: [rpc]
- canonical: web application firewall
aliases: [waf]
- canonical: network firewall
aliases: [nfw, ngfw]
# Compute / Containers
- canonical: virtual machine
aliases: [vm, ec2, gce, compute instance]
- canonical: container engine kubernetes
aliases: [oke, k8s, kubernetes, eks, gke, aks]
- canonical: bare metal
aliases: [bm, bms]
# Database
- canonical: autonomous database
aliases: [adb, adb-s, adb-d, atp, adw]
- canonical: exadata database service
aliases: [exacs, exadb, exa, exadata]
- canonical: base database service
aliases: [base db, dbcs, vm db]
- canonical: data guard
aliases: [dg, adg, active data guard]
- canonical: goldengate
aliases: [gg, ogg]
- canonical: mysql heatwave
aliases: [mysql, heatwave, mysql database service, mds]
# Availability / DR
- canonical: high availability
aliases: [ha, maa, maximum availability]
- canonical: disaster recovery
aliases: [dr, ha-dr, business continuity, bcdr]
- canonical: full stack disaster recovery
aliases: [fsdr]
- canonical: availability domain
aliases: [ad, az, availability zone]
- canonical: fault domain
aliases: [fd]
- canonical: cross region
aliases: [multi region, multiregion]
# Multicloud
- canonical: oracle database at azure
aliases: [odbaa, db at azure, dbaa, oracle@azure, azure-oracle]
- canonical: oracle database at aws
aliases: [odbaaws, db at aws, oracle@aws, aws-oracle]
- canonical: oracle database at google cloud
aliases: [odbagcp, db at gcp, oracle@gcp, gcp-oracle]
# Observability / Security
- canonical: monitoring
aliases: [mon, metrics]
- canonical: logging
aliases: [logs]
- canonical: cloud guard
aliases: [cg]
- canonical: data safe
aliases: [ds]
- canonical: security zone
aliases: [maximum security zone, msz]
# Workloads
- canonical: e business suite
aliases: [ebs, e-biz]
- canonical: peoplesoft
aliases: [psft]
- canonical: jd edwards
aliases: [jde, jd-e]
- canonical: artificial intelligence
aliases: [ai, gen ai, genai, ml]

View File

@@ -27,7 +27,7 @@
# ============================================================================= # =============================================================================
--- ---
last_verified: "2026-03-14" last_verified: "2026-04-24"
maintained_by: "Field Architecture Team" maintained_by: "Field Architecture Team"
versions: versions:
@@ -338,6 +338,69 @@ features:
adb_s: adb_s:
"23ai": { status: "GA_CAVEAT", notes: "--resource-pool-summary works on CLI 3.73+. --autonomous-database-maintenance-window has JSON serialization bug on CLI 3.73.1 AND 3.75.0. Must use Console for maintenance window." } "23ai": { status: "GA_CAVEAT", notes: "--resource-pool-summary works on CLI 3.73+. --autonomous-database-maintenance-window has JSON serialization bug on CLI 3.73.1 AND 3.75.0. Must use Console for maintenance window." }
- name: "Lakehouse External Table Cache / Lake Cache"
category: "operations"
matrix:
adb_s:
"23ai":
status: "UNTESTED"
notes: "Officially documented for Lakehouse workload. Caches external-table data locally to accelerate repeat reads. Field team has not yet validated production behavior."
contributor:
name: "Codex"
team: "Field Architecture"
date: "2026-04-24"
confidence: "doc-validated"
"26ai":
status: "UNTESTED"
notes: "Documented for AI Lakehouse workload. Expect benefit on repeated reads over external data; validate eviction behavior and cache warmup in benchmarks."
contributor:
name: "Codex"
team: "Field Architecture"
date: "2026-04-24"
confidence: "doc-validated"
- name: "Apache Iceberg External Tables"
category: "operations"
matrix:
adb_s:
"23ai":
status: "LIMITED"
notes: "Official docs show support with important caveats: no partitioned Iceberg tables, no credential vending, no query-time time travel, and some snapshot/schema changes require recreating the external table."
contributor:
name: "Codex"
team: "Field Architecture"
date: "2026-04-24"
confidence: "doc-validated"
"26ai":
status: "LIMITED"
notes: "Same documented limitations as 23ai unless field testing proves otherwise. Treat as fit-for-purpose, not transparent parity with native Iceberg engines."
contributor:
name: "Codex"
team: "Field Architecture"
date: "2026-04-24"
confidence: "doc-validated"
- name: "TP / TPURGENT Service Names on Lakehouse"
category: "operations"
matrix:
adb_s:
"23ai":
status: "UNTESTED"
notes: "Need field confirmation by exact release/build. Use docs/release notes before promising availability on older estates."
contributor:
name: "Codex"
team: "Field Architecture"
date: "2026-04-24"
confidence: "doc-validated"
"26ai":
status: "GA_CAVEAT"
notes: "Officially released for Lakehouse workload. Useful to explain mixed-workload support, but benchmark service behavior under real concurrency before positioning as OLTP-equivalent."
contributor:
name: "Codex"
team: "Field Architecture"
date: "2026-04-24"
confidence: "doc-validated"
# ============================================================================= # =============================================================================
# HOW TO ADD A NEW FEATURE # HOW TO ADD A NEW FEATURE
# ============================================================================= # =============================================================================

Binary file not shown.

View File

@@ -0,0 +1,568 @@
{
"cache_dir_mtime": 1777171657.6658223,
"entries": {
"active-data-guard-far-sync-dba-oracle": {
"drawio": "kb/diagram/assets/archcenter-refs/active-data-guard-far-sync-dba-oracle/active-data-guard-far-sync-dba.drawio",
"png": "kb/diagram/assets/archcenter-refs/active-data-guard-far-sync-dba-oracle/active-data-guard-far-sync-dba.png",
"svg": "kb/diagram/assets/archcenter-refs/active-data-guard-far-sync-dba-oracle/active-data-guard-far-sync-dba.svg",
"yaml": "kb/diagram/assets/archcenter-refs/active-data-guard-far-sync-dba-oracle/_template.yaml"
},
"active-data-guard-far-sync-oracle-db-at-azure": {
"drawio": "kb/diagram/assets/archcenter-refs/active-data-guard-far-sync-oracle-db-at-azure/active-data-guard-far-sync-dba-oracle/active-data-guard-far-sync-dba.drawio",
"svg": "kb/diagram/assets/archcenter-refs/active-data-guard-far-sync-oracle-db-at-azure/active-data-guard-far-sync-dba-oracle/active-data-guard-far-sync-dba.svg",
"yaml": "kb/diagram/assets/archcenter-refs/active-data-guard-far-sync-oracle-db-at-azure/_template.yaml"
},
"ai-fraud-detection": {
"drawio": "kb/diagram/assets/archcenter-refs/ai-fraud-detection/ai-fraud-detection-flow-oracle/ai-fraud-detection-flow.drawio",
"svg": "kb/diagram/assets/archcenter-refs/ai-fraud-detection/ai-fraud-detection-flow-oracle/ai-fraud-detection-flow.svg",
"yaml": "kb/diagram/assets/archcenter-refs/ai-fraud-detection/_template.yaml"
},
"analytics-pipeline-db-at-azure": {
"drawio": "kb/diagram/assets/archcenter-refs/analytics-pipeline-db-at-azure/data-lake-db-at-azure-medallion-oracle/data-lake-db-at-azure-medallion.drawio",
"svg": "kb/diagram/assets/archcenter-refs/analytics-pipeline-db-at-azure/data-lake-db-at-azure-medallion-oracle/data-lake-db-at-azure-medallion.svg",
"yaml": "kb/diagram/assets/archcenter-refs/analytics-pipeline-db-at-azure/_template.yaml"
},
"autonomous-database-db-at-azure-diagram-oracle": {
"drawio": "kb/diagram/assets/archcenter-refs/autonomous-database-db-at-azure-diagram-oracle/autonomous-database-db-at-azure-diagram.drawio",
"png": "kb/diagram/assets/archcenter-refs/autonomous-database-db-at-azure-diagram-oracle/autonomous-database-db-at-azure-diagram.png",
"svg": "kb/diagram/assets/archcenter-refs/autonomous-database-db-at-azure-diagram-oracle/autonomous-database-db-at-azure-diagram.svg",
"yaml": "kb/diagram/assets/archcenter-refs/autonomous-database-db-at-azure-diagram-oracle/_template.yaml"
},
"azure-pipeline-exacs-dbazure": {
"drawio": "kb/diagram/assets/archcenter-refs/azure-pipeline-exacs-dbazure/exadata-database-service-oracle/exadata-database-service.drawio",
"svg": "kb/diagram/assets/archcenter-refs/azure-pipeline-exacs-dbazure/exadata-database-service-oracle/exadata-database-service.svg",
"yaml": "kb/diagram/assets/archcenter-refs/azure-pipeline-exacs-dbazure/_template.yaml"
},
"back-up-base-database-zero-data-loss-recovery": {
"drawio": "kb/diagram/assets/archcenter-refs/back-up-base-database-zero-data-loss-recovery/base-database-recovery-backup-architecture/base-database-recovery-backup-architecture.drawio",
"png": "kb/diagram/assets/archcenter-refs/back-up-base-database-zero-data-loss-recovery/base-database-recovery-backup-architecture/base-database-recovery-backup-architecture.png",
"svg": "kb/diagram/assets/archcenter-refs/back-up-base-database-zero-data-loss-recovery/base-database-recovery-backup-architecture/base-database-recovery-backup-architecture.svg",
"yaml": "kb/diagram/assets/archcenter-refs/back-up-base-database-zero-data-loss-recovery/_template.yaml"
},
"back-up-exadata-dedicated-zero-data-loss-recovery": {
"drawio": "kb/diagram/assets/archcenter-refs/back-up-exadata-dedicated-zero-data-loss-recovery/exadata-dedicated-recovery-backup-architecture/exadata-dedicated-recovery-backup-architecture.drawio",
"png": "kb/diagram/assets/archcenter-refs/back-up-exadata-dedicated-zero-data-loss-recovery/exadata-dedicated-recovery-backup-architecture/exadata-dedicated-recovery-backup-architecture.png",
"svg": "kb/diagram/assets/archcenter-refs/back-up-exadata-dedicated-zero-data-loss-recovery/exadata-dedicated-recovery-backup-architecture/exadata-dedicated-recovery-backup-architecture.svg",
"yaml": "kb/diagram/assets/archcenter-refs/back-up-exadata-dedicated-zero-data-loss-recovery/_template.yaml"
},
"bread-multicloud-on-oci": {
"drawio": "kb/diagram/assets/archcenter-refs/bread-multicloud-on-oci/peoplesoft-migration-process-oracle/peoplesoft-migration-process.drawio",
"svg": "kb/diagram/assets/archcenter-refs/bread-multicloud-on-oci/peoplesoft-migration-process-oracle/peoplesoft-migration-process.svg",
"yaml": "kb/diagram/assets/archcenter-refs/bread-multicloud-on-oci/_template.yaml"
},
"cicd-pipeline-oci-functions": {
"drawio": "kb/diagram/assets/archcenter-refs/cicd-pipeline-oci-functions/cicd-deploy-oci-functions-oracle/cicd-deploy-oci-functions.drawio",
"svg": "kb/diagram/assets/archcenter-refs/cicd-pipeline-oci-functions/cicd-deploy-oci-functions-oracle/cicd-deploy-oci-functions.svg",
"yaml": "kb/diagram/assets/archcenter-refs/cicd-pipeline-oci-functions/_template.yaml"
},
"cis-oci-benchmark": {
"drawio": "kb/diagram/assets/archcenter-refs/cis-oci-benchmark/oci-core-landingzone-oracle/oci-core-landingzone.drawio",
"svg": "kb/diagram/assets/archcenter-refs/cis-oci-benchmark/oci-core-landingzone-oracle/oci-core-landingzone.svg",
"yaml": "kb/diagram/assets/archcenter-refs/cis-oci-benchmark/_template.yaml"
},
"cloud-native-dicom-on-oci": {
"drawio": "kb/diagram/assets/archcenter-refs/cloud-native-dicom-on-oci/oci-dicom-store-oracle/oci-dicom-store.drawio",
"svg": "kb/diagram/assets/archcenter-refs/cloud-native-dicom-on-oci/oci-dicom-store-oracle/oci-dicom-store.svg",
"yaml": "kb/diagram/assets/archcenter-refs/cloud-native-dicom-on-oci/_template.yaml"
},
"cloud-native-ecommerce": {
"drawio": "kb/diagram/assets/archcenter-refs/cloud-native-ecommerce/mushop-infrastructure-expand-oracle/mushop-infrastructure-expand.drawio",
"svg": "kb/diagram/assets/archcenter-refs/cloud-native-ecommerce/mushop-infrastructure-expand-oracle/mushop-infrastructure-expand.svg",
"yaml": "kb/diagram/assets/archcenter-refs/cloud-native-ecommerce/_template.yaml"
},
"config-jde-dr-fsdr": {
"drawio": "kb/diagram/assets/archcenter-refs/config-jde-dr-fsdr/jde-dr-fsdr/jde-dr-fsdr.drawio",
"svg": "kb/diagram/assets/archcenter-refs/config-jde-dr-fsdr/jde-dr-fsdr/jdr-dr-fsdr.svg",
"yaml": "kb/diagram/assets/archcenter-refs/config-jde-dr-fsdr/_template.yaml"
},
"connect-azure-kube-with-oracle": {
"drawio": "kb/diagram/assets/archcenter-refs/connect-azure-kube-with-oracle/azure-kube-with-exadata-db-oracle/azure-kube-with-exadata-db.drawio",
"svg": "kb/diagram/assets/archcenter-refs/connect-azure-kube-with-oracle/azure-kube-with-exadata-db-oracle/azure-kube-with-exadata-db.svg",
"yaml": "kb/diagram/assets/archcenter-refs/connect-azure-kube-with-oracle/_template.yaml"
},
"cross-az-dr-oracle": {
"drawio": "kb/diagram/assets/archcenter-refs/cross-az-dr-oracle/cross-az-dr.drawio",
"png": "kb/diagram/assets/archcenter-refs/cross-az-dr-oracle/cross-az-dr.png",
"svg": "kb/diagram/assets/archcenter-refs/cross-az-dr-oracle/cross-az-dr.svg",
"yaml": "kb/diagram/assets/archcenter-refs/cross-az-dr-oracle/_template.yaml"
},
"cross-region-dr-essbase-oci": {
"drawio": "kb/diagram/assets/archcenter-refs/cross-region-dr-essbase-oci/essbase-oci-cross-region-dr-oracle/essbase-oci-cross-region-dr.drawio",
"svg": "kb/diagram/assets/archcenter-refs/cross-region-dr-essbase-oci/essbase-oci-cross-region-dr-oracle/essbase-oci-cross-region-dr.svg",
"yaml": "kb/diagram/assets/archcenter-refs/cross-region-dr-essbase-oci/_template.yaml"
},
"data-application-integration-workloads": {
"drawio": "kb/diagram/assets/archcenter-refs/data-application-integration-workloads/integration-architecture-pattern-1-oracle/integration-architecture-pattern-1.drawio",
"svg": "kb/diagram/assets/archcenter-refs/data-application-integration-workloads/integration-architecture-pattern-1-oracle/integration-architecture-pattern-1.svg",
"yaml": "kb/diagram/assets/archcenter-refs/data-application-integration-workloads/_template.yaml"
},
"data-platform-decentralized": {
"drawio": "kb/diagram/assets/archcenter-refs/data-platform-decentralized/decentralized-data-platform-logical-oracle/decentralized-data-platform-logical.drawio",
"svg": "kb/diagram/assets/archcenter-refs/data-platform-decentralized/decentralized-data-platform-logical-oracle/decentralized-data-platform-logical.svg",
"yaml": "kb/diagram/assets/archcenter-refs/data-platform-decentralized/_template.yaml"
},
"data-platform-lakehouse": {
"drawio": "kb/diagram/assets/archcenter-refs/data-platform-lakehouse/lakehouse-architecture-oracle/lakehouse-architecture.drawio",
"svg": "kb/diagram/assets/archcenter-refs/data-platform-lakehouse/lakehouse-architecture-oracle/lakehouse-architecture.svg",
"yaml": "kb/diagram/assets/archcenter-refs/data-platform-lakehouse/_template.yaml"
},
"data-safe-exadata-adb": {
"drawio": "kb/diagram/assets/archcenter-refs/data-safe-exadata-adb/data-safe-for-exa-adb/data-safe-for-exa-adb-old.drawio",
"svg": "kb/diagram/assets/archcenter-refs/data-safe-exadata-adb/data-safe-for-exa-adb/data-safe-for-exa-adb.svg",
"yaml": "kb/diagram/assets/archcenter-refs/data-safe-exadata-adb/_template.yaml"
},
"data-safe-multicloud-ods-hybrid": {
"drawio": "kb/diagram/assets/archcenter-refs/data-safe-multicloud-ods-hybrid/datasafe-multi-odsa-01/datasafe-multi-odsa-01.drawio",
"svg": "kb/diagram/assets/archcenter-refs/data-safe-multicloud-ods-hybrid/datasafe-multi-odsa-01/datasafe-multi-odsa-01.svg",
"yaml": "kb/diagram/assets/archcenter-refs/data-safe-multicloud-ods-hybrid/_template.yaml"
},
"dataguard-exadata-dedicated-infrastructure": {
"drawio": "kb/diagram/assets/archcenter-refs/dataguard-exadata-dedicated-infrastructure/exadata-dedicated-cross-region-dataguard/exadata-dedicated-cross-region-dataguard.drawio",
"png": "kb/diagram/assets/archcenter-refs/dataguard-exadata-dedicated-infrastructure/exadata-dedicated-cross-region-dataguard/exadata-dedicated-cross-region-dataguard.png",
"svg": "kb/diagram/assets/archcenter-refs/dataguard-exadata-dedicated-infrastructure/exadata-dedicated-cross-region-dataguard/exadata-dedicated-cross-region-dataguard.svg",
"yaml": "kb/diagram/assets/archcenter-refs/dataguard-exadata-dedicated-infrastructure/_template.yaml"
},
"deploy-adb-db-at-google-cloud": {
"drawio": "kb/diagram/assets/archcenter-refs/deploy-adb-db-at-google-cloud/adb-oracle-db-at-google-cloud-region-oracle/adb-oracle-db-at-google-cloud-region.drawio",
"svg": "kb/diagram/assets/archcenter-refs/deploy-adb-db-at-google-cloud/adb-oracle-db-at-google-cloud-region-oracle/adb-oracle-db-at-google-cloud-region.svg",
"yaml": "kb/diagram/assets/archcenter-refs/deploy-adb-db-at-google-cloud/_template.yaml"
},
"deploy-agentic-ai-agent-platform": {
"drawio": "kb/diagram/assets/archcenter-refs/deploy-agentic-ai-agent-platform/agentic-ai-oci-ai-agent-arch-oracle/agentic-ai-oci-ai-agent-arch.drawio",
"svg": "kb/diagram/assets/archcenter-refs/deploy-agentic-ai-agent-platform/agentic-ai-oci-ai-agent-arch-oracle/agentic-ai-oci-ai-agent-arch.svg",
"yaml": "kb/diagram/assets/archcenter-refs/deploy-agentic-ai-agent-platform/_template.yaml"
},
"deploy-ai-powered-chatbot": {
"drawio": "kb/diagram/assets/archcenter-refs/deploy-ai-powered-chatbot/deploy-ai-chatbot-arch/deploy-ai-chatbot-arch/deploy-ai-chatbot-arch.drawio",
"png": "kb/diagram/assets/archcenter-refs/deploy-ai-powered-chatbot/deploy-ai-chatbot-arch/deploy-ai-chatbot-arch/deploy-ai-chatbot-arch.png",
"yaml": "kb/diagram/assets/archcenter-refs/deploy-ai-powered-chatbot/_template.yaml"
},
"deploy-autonomous-database-and-app": {
"drawio": "kb/diagram/assets/archcenter-refs/deploy-autonomous-database-and-app/apex-app-adb-oracle/apex-app-adb.drawio",
"svg": "kb/diagram/assets/archcenter-refs/deploy-autonomous-database-and-app/apex-app-adb-oracle/apex-app-adb.svg",
"yaml": "kb/diagram/assets/archcenter-refs/deploy-autonomous-database-and-app/_template.yaml"
},
"deploy-autonomous-database-db-at-azure": {
"drawio": "kb/diagram/assets/archcenter-refs/deploy-autonomous-database-db-at-azure/autonomous-database-db-at-azure-diagram-oracle/autonomous-database-db-at-azure-diagram.drawio",
"svg": "kb/diagram/assets/archcenter-refs/deploy-autonomous-database-db-at-azure/autonomous-database-db-at-azure-diagram-oracle/autonomous-database-db-at-azure-diagram.svg",
"yaml": "kb/diagram/assets/archcenter-refs/deploy-autonomous-database-db-at-azure/_template.yaml"
},
"deploy-data-rcvy-oci-api-gateway": {
"drawio": "kb/diagram/assets/archcenter-refs/deploy-data-rcvy-oci-api-gateway/apigw-oci-customer-managed-dr-topology-oracle/apigw-oci-customer-managed-dr-topology.drawio",
"svg": "kb/diagram/assets/archcenter-refs/deploy-data-rcvy-oci-api-gateway/apigw-oci-customer-managed-dr-topology-oracle/apigw-oci-customer-managed-dr-topology.svg",
"yaml": "kb/diagram/assets/archcenter-refs/deploy-data-rcvy-oci-api-gateway/_template.yaml"
},
"deploy-ebs-on-db-at-azure": {
"drawio": "kb/diagram/assets/archcenter-refs/deploy-ebs-on-db-at-azure/ebs-on-db-at-azure-arch-oracle/ebs-on-db-at-azure-arch.drawio",
"svg": "kb/diagram/assets/archcenter-refs/deploy-ebs-on-db-at-azure/ebs-on-db-at-azure-arch-oracle/ebs-on-db-at-azure-arch.svg",
"yaml": "kb/diagram/assets/archcenter-refs/deploy-ebs-on-db-at-azure/_template.yaml"
},
"deploy-gitops-argocd-oke": {
"drawio": "kb/diagram/assets/archcenter-refs/deploy-gitops-argocd-oke/argocd/argocd.drawio",
"svg": "kb/diagram/assets/archcenter-refs/deploy-gitops-argocd-oke/argocd/argocd.svg",
"yaml": "kb/diagram/assets/archcenter-refs/deploy-gitops-argocd-oke/_template.yaml"
},
"deploy-hybrid-dr-wls-fmw": {
"drawio": "kb/diagram/assets/archcenter-refs/deploy-hybrid-dr-wls-fmw/maa-wls-hybrid-dr-tool-highlights-oracle/maa-wls-hybrid-dr-tool-highlights.drawio",
"svg": "kb/diagram/assets/archcenter-refs/deploy-hybrid-dr-wls-fmw/maa-wls-hybrid-dr-tool-highlights-oracle/maa-wls-hybrid-dr-tool-highlights.svg",
"yaml": "kb/diagram/assets/archcenter-refs/deploy-hybrid-dr-wls-fmw/_template.yaml"
},
"deploy-key-vault-database-at-azure": {
"drawio": "kb/diagram/assets/archcenter-refs/deploy-key-vault-database-at-azure/key-vault-database-at-azure-diagram-oracle/key-vault-database-at-azure-diagram.drawio",
"svg": "kb/diagram/assets/archcenter-refs/deploy-key-vault-database-at-azure/key-vault-database-at-azure-diagram-oracle/key-vault-database-at-azure-diagram.svg",
"yaml": "kb/diagram/assets/archcenter-refs/deploy-key-vault-database-at-azure/_template.yaml"
},
"deploy-key-vault-database-at-google": {
"drawio": "kb/diagram/assets/archcenter-refs/deploy-key-vault-database-at-google/key-vault-database-google/key-vault-database-google/key-vault-database-google.drawio",
"png": "kb/diagram/assets/archcenter-refs/deploy-key-vault-database-at-google/key-vault-database-google/key-vault-database-google/key-vault-database-google.png",
"yaml": "kb/diagram/assets/archcenter-refs/deploy-key-vault-database-at-google/_template.yaml"
},
"deploy-lustre-file-systems": {
"png": "kb/diagram/assets/archcenter-refs/deploy-lustre-file-systems/lustre-file-system-oci-arch/lustre-file-system-oci-arch/lustre-file-system-oci-arch.png",
"svg": "kb/diagram/assets/archcenter-refs/deploy-lustre-file-systems/lustre-file-system-oci-arch/lustre-file-system-oci-arch/lustre-file-system-oci-arch.svg"
},
"deploy-maa-for-peoplesoft-on-oci": {
"drawio": "kb/diagram/assets/archcenter-refs/deploy-maa-for-peoplesoft-on-oci/peoplesoft-maa-arch-oracle/peoplesoft-maa-arch.drawio",
"svg": "kb/diagram/assets/archcenter-refs/deploy-maa-for-peoplesoft-on-oci/peoplesoft-maa-arch-oracle/peoplesoft-maa-arch.svg",
"yaml": "kb/diagram/assets/archcenter-refs/deploy-maa-for-peoplesoft-on-oci/_template.yaml"
},
"deploy-oke-with-bastion-and-github": {
"drawio": "kb/diagram/assets/archcenter-refs/deploy-oke-with-bastion-and-github/oke-bastion-deployment-diagram-oracle/oke-bastion-deployment-diagram.drawio",
"svg": "kb/diagram/assets/archcenter-refs/deploy-oke-with-bastion-and-github/oke-bastion-deployment-diagram-oracle/oke-bastion-deployment-diagram.svg",
"yaml": "kb/diagram/assets/archcenter-refs/deploy-oke-with-bastion-and-github/_template.yaml"
},
"deploy-oracle-database-at-google-cloud": {
"drawio": "kb/diagram/assets/archcenter-refs/deploy-oracle-database-at-google-cloud/google-detailed-arch-oracle/google-detailed-arch-oracle/google-detailed-arch.drawio",
"svg": "kb/diagram/assets/archcenter-refs/deploy-oracle-database-at-google-cloud/google-detailed-arch-oracle/google-detailed-arch-oracle/google-detailed-arch.svg",
"yaml": "kb/diagram/assets/archcenter-refs/deploy-oracle-database-at-google-cloud/_template.yaml"
},
"deploy-oracle-db-aws": {
"drawio": "kb/diagram/assets/archcenter-refs/deploy-oracle-db-aws/db-at-aws-main-arch-oracle/db-at-aws-main-arch.drawio",
"svg": "kb/diagram/assets/archcenter-refs/deploy-oracle-db-aws/db-at-aws-main-arch-oracle/db-at-aws-main-arch.svg",
"yaml": "kb/diagram/assets/archcenter-refs/deploy-oracle-db-aws/_template.yaml"
},
"deploy-tcs-banc-oci-exa": {
"drawio": "kb/diagram/assets/archcenter-refs/deploy-tcs-banc-oci-exa/bancs-ref-architecture-no-fd-oracle/bancs-ref-architecture-no-fd.drawio",
"svg": "kb/diagram/assets/archcenter-refs/deploy-tcs-banc-oci-exa/bancs-ref-architecture-no-fd-oracle/bancs-ref-architecture-no-fd.svg",
"yaml": "kb/diagram/assets/archcenter-refs/deploy-tcs-banc-oci-exa/_template.yaml"
},
"deploy-wls-on-oke": {
"drawio": "kb/diagram/assets/archcenter-refs/deploy-wls-on-oke/weblogic-oke-oracle/weblogic-oke.drawio",
"svg": "kb/diagram/assets/archcenter-refs/deploy-wls-on-oke/weblogic-oke-oracle/weblogic-oke.svg",
"yaml": "kb/diagram/assets/archcenter-refs/deploy-wls-on-oke/_template.yaml"
},
"deploy-xstore-oci": {
"drawio": "kb/diagram/assets/archcenter-refs/deploy-xstore-oci/deploy-xstore-on-oci/deploy-xstore-on-oci.drawio",
"svg": "kb/diagram/assets/archcenter-refs/deploy-xstore-oci/deploy-xstore-on-oci/deploy-xstore-on-oci.svg",
"yaml": "kb/diagram/assets/archcenter-refs/deploy-xstore-oci/_template.yaml"
},
"dns-resolution-oracle-db-at-google-cloud": {
"drawio": "kb/diagram/assets/archcenter-refs/dns-resolution-oracle-db-at-google-cloud/resolve-dns-oci-google-cloud-oracle/resolve-dns-oci-google-cloud.drawio",
"svg": "kb/diagram/assets/archcenter-refs/dns-resolution-oracle-db-at-google-cloud/resolve-dns-oci-google-cloud-oracle/resolve-dns-oci-google-cloud.svg",
"yaml": "kb/diagram/assets/archcenter-refs/dns-resolution-oracle-db-at-google-cloud/_template.yaml"
},
"dr-active-dg-farsync-db-at-aws": {
"drawio": "kb/diagram/assets/archcenter-refs/dr-active-dg-farsync-db-at-aws/cross-region-dr-activedg-farsync-oracle/cross-region-dr-activedg-farsync.drawio",
"svg": "kb/diagram/assets/archcenter-refs/dr-active-dg-farsync-db-at-aws/cross-region-dr-activedg-farsync-oracle/cross-region-dr-activedg-farsync.svg",
"yaml": "kb/diagram/assets/archcenter-refs/dr-active-dg-farsync-db-at-aws/_template.yaml"
},
"dr-local-regional-standby-db-at-aws": {
"drawio": "kb/diagram/assets/archcenter-refs/dr-local-regional-standby-db-at-aws/exadb-dbaws-dr-arch-oracle/exadb-dbaws-dr-arch.drawio",
"svg": "kb/diagram/assets/archcenter-refs/dr-local-regional-standby-db-at-aws/exadb-dbaws-dr-arch-oracle/exadb-dbaws-dr-arch.svg",
"yaml": "kb/diagram/assets/archcenter-refs/dr-local-regional-standby-db-at-aws/_template.yaml"
},
"ebs-logging-analytics-oci": {
"drawio": "kb/diagram/assets/archcenter-refs/ebs-logging-analytics-oci/ebs-logging-analytics-on-oci-oracle/ebs-logging-analytics-on-oci.drawio",
"svg": "kb/diagram/assets/archcenter-refs/ebs-logging-analytics-oci/ebs-logging-analytics-on-oci-oracle/ebs-logging-analytics-on-oci.svg",
"yaml": "kb/diagram/assets/archcenter-refs/ebs-logging-analytics-oci/_template.yaml"
},
"ebs-on-db-at-aws": {
"drawio": "kb/diagram/assets/archcenter-refs/ebs-on-db-at-aws/ebs-db-at-aws-architecture-oracle/ebs-db-at-aws-architecture.drawio",
"svg": "kb/diagram/assets/archcenter-refs/ebs-on-db-at-aws/ebs-db-at-aws-architecture-oracle/ebs-db-at-aws-architecture.svg",
"yaml": "kb/diagram/assets/archcenter-refs/ebs-on-db-at-aws/_template.yaml"
},
"exadata-dedicated-cross-region-dataguard": {
"drawio": "kb/diagram/assets/archcenter-refs/exadata-dedicated-cross-region-dataguard/exadata-dedicated-cross-region-dataguard-uncompressed.drawio",
"png": "kb/diagram/assets/archcenter-refs/exadata-dedicated-cross-region-dataguard/exadata-dedicated-cross-region-dataguard.png",
"svg": "kb/diagram/assets/archcenter-refs/exadata-dedicated-cross-region-dataguard/exadata-dedicated-cross-region-dataguard.svg",
"yaml": "kb/diagram/assets/archcenter-refs/exadata-dedicated-cross-region-dataguard/_template.yaml"
},
"exadata-dedicated-in-region-dataguard": {
"drawio": "kb/diagram/assets/archcenter-refs/exadata-dedicated-in-region-dataguard/exadata-dedicated-in-region-dataguard.drawio",
"png": "kb/diagram/assets/archcenter-refs/exadata-dedicated-in-region-dataguard/exadata-dedicated-in-region-dataguard.png",
"svg": "kb/diagram/assets/archcenter-refs/exadata-dedicated-in-region-dataguard/exadata-dedicated-in-region-dataguard.svg",
"yaml": "kb/diagram/assets/archcenter-refs/exadata-dedicated-in-region-dataguard/_template.yaml"
},
"exadb-dbaws-dr-arch-oracle": {
"drawio": "kb/diagram/assets/archcenter-refs/exadb-dbaws-dr-arch-oracle/exadb-dbaws-dr-arch.drawio",
"png": "kb/diagram/assets/archcenter-refs/exadb-dbaws-dr-arch-oracle/exadb-dbaws-dr-arch.png",
"svg": "kb/diagram/assets/archcenter-refs/exadb-dbaws-dr-arch-oracle/exadb-dbaws-dr-arch.svg",
"yaml": "kb/diagram/assets/archcenter-refs/exadb-dbaws-dr-arch-oracle/_template.yaml"
},
"exadb-dr-on-db-at-azure-oracle": {
"drawio": "kb/diagram/assets/archcenter-refs/exadb-dr-on-db-at-azure-oracle/exadb-dr-on-db-at-azure.drawio",
"png": "kb/diagram/assets/archcenter-refs/exadb-dr-on-db-at-azure-oracle/exadb-dr-on-db-at-azure.png",
"svg": "kb/diagram/assets/archcenter-refs/exadb-dr-on-db-at-azure-oracle/exadb-dr-on-db-at-azure.svg",
"yaml": "kb/diagram/assets/archcenter-refs/exadb-dr-on-db-at-azure-oracle/_template.yaml"
},
"exadb-dr-on-db-azure": {
"drawio": "kb/diagram/assets/archcenter-refs/exadb-dr-on-db-azure/exadb-dr-on-db-at-azure-oracle/exadb-dr-on-db-at-azure.drawio",
"svg": "kb/diagram/assets/archcenter-refs/exadb-dr-on-db-azure/exadb-dr-on-db-at-azure-oracle/exadb-dr-on-db-at-azure.svg",
"yaml": "kb/diagram/assets/archcenter-refs/exadb-dr-on-db-azure/_template.yaml"
},
"hub-spoke-network": {
"drawio": "kb/diagram/assets/archcenter-refs/hub-spoke-network/hub-spoke-oci.drawio",
"svg": "kb/diagram/assets/archcenter-refs/hub-spoke-network/hub-spoke-oci.svg",
"yaml": "kb/diagram/assets/archcenter-refs/hub-spoke-network/_template.yaml"
},
"hub-spoke-network-drg": {
"drawio": "kb/diagram/assets/archcenter-refs/hub-spoke-network-drg/hub-and-spoke-drg-oracle/hub-and-spoke-drg.drawio",
"svg": "kb/diagram/assets/archcenter-refs/hub-spoke-network-drg/hub-and-spoke-drg-oracle/hub-and-spoke-drg.svg",
"yaml": "kb/diagram/assets/archcenter-refs/hub-spoke-network-drg/_template.yaml"
},
"implement-goldengate-azure": {
"drawio": "kb/diagram/assets/archcenter-refs/implement-goldengate-azure/goldengate-dbatazure-integration/goldengate-dbatazure-integration/goldengate-dbatazure-integration.drawio",
"png": "kb/diagram/assets/archcenter-refs/implement-goldengate-azure/goldengate-dbatazure-integration/goldengate-dbatazure-integration/goldengate-dbatazure-integration.png",
"svg": "kb/diagram/assets/archcenter-refs/implement-goldengate-azure/goldengate-dbatazure-integration/goldengate-dbatazure-integration/goldengate-dbatazure-integration.svg",
"yaml": "kb/diagram/assets/archcenter-refs/implement-goldengate-azure/_template.yaml"
},
"implement-rag-oci": {
"drawio": "kb/diagram/assets/archcenter-refs/implement-rag-oci/rag-oic-aug-gen-oracle/rag-oic-aug-gen.drawio",
"svg": "kb/diagram/assets/archcenter-refs/implement-rag-oci/rag-oic-aug-gen-oracle/rag-oic-aug-gen.svg",
"yaml": "kb/diagram/assets/archcenter-refs/implement-rag-oci/_template.yaml"
},
"implement-recovery-service-db-at-azure": {
"drawio": "kb/diagram/assets/archcenter-refs/implement-recovery-service-db-at-azure/db-autonomous-recovery-dbatazure/db-autonomous-recovery-dbatazure/db-autonomous-recovery-dbatazure.drawio",
"svg": "kb/diagram/assets/archcenter-refs/implement-recovery-service-db-at-azure/db-autonomous-recovery-dbatazure/db-autonomous-recovery-dbatazure/db-autonomous-recovery-dbatazure.svg",
"yaml": "kb/diagram/assets/archcenter-refs/implement-recovery-service-db-at-azure/_template.yaml"
},
"integration-access-control": {
"drawio": "kb/diagram/assets/archcenter-refs/integration-access-control/oracle-integration-rest-oauth-diagram-oracle/oracle-integration-rest-oauth-diagram.drawio",
"svg": "kb/diagram/assets/archcenter-refs/integration-access-control/oracle-integration-rest-oauth-diagram-oracle/oracle-integration-rest-oauth-diagram.svg",
"yaml": "kb/diagram/assets/archcenter-refs/integration-access-control/_template.yaml"
},
"kubernetes-artifact-snapshot-dr": {
"drawio": "kb/diagram/assets/archcenter-refs/kubernetes-artifact-snapshot-dr/kubernetes-multiregion-dr-oracle/kubernetes-multiregion-dr.drawio",
"svg": "kb/diagram/assets/archcenter-refs/kubernetes-artifact-snapshot-dr/kubernetes-multiregion-dr-oracle/kubernetes-multiregion-dr.svg",
"yaml": "kb/diagram/assets/archcenter-refs/kubernetes-artifact-snapshot-dr/_template.yaml"
},
"kubernetes-oke-logging-analytics": {
"drawio": "kb/diagram/assets/archcenter-refs/kubernetes-oke-logging-analytics/k8s-oke-monitoring-oracle/k8s-oke-monitoring.drawio",
"svg": "kb/diagram/assets/archcenter-refs/kubernetes-oke-logging-analytics/k8s-oke-monitoring-oracle/k8s-oke-monitoring.svg",
"yaml": "kb/diagram/assets/archcenter-refs/kubernetes-oke-logging-analytics/_template.yaml"
},
"learn-about-drg-solutions": {
"drawio": "kb/diagram/assets/archcenter-refs/learn-about-drg-solutions/drg-routing-operation-oracle/drg-routing-operation.drawio",
"svg": "kb/diagram/assets/archcenter-refs/learn-about-drg-solutions/drg-routing-operation-oracle/drg-routing-operation.svg",
"yaml": "kb/diagram/assets/archcenter-refs/learn-about-drg-solutions/_template.yaml"
},
"learn-about-maa-for-peoplesoft": {
"drawio": "kb/diagram/assets/archcenter-refs/learn-about-maa-for-peoplesoft/peoplesoft-maa-arch-oracle/peoplesoft-maa-arch.drawio",
"svg": "kb/diagram/assets/archcenter-refs/learn-about-maa-for-peoplesoft/peoplesoft-maa-arch-oracle/peoplesoft-maa-arch.svg",
"yaml": "kb/diagram/assets/archcenter-refs/learn-about-maa-for-peoplesoft/_template.yaml"
},
"local-regional-standby-dr-db-at-azure": {
"drawio": "kb/diagram/assets/archcenter-refs/local-regional-standby-dr-db-at-azure/local-regional-standby-dr-db-azure-arch-oracle/local-regional-standby-dr-db-azure-arch.drawio",
"svg": "kb/diagram/assets/archcenter-refs/local-regional-standby-dr-db-at-azure/local-regional-standby-dr-db-azure-arch-oracle/local-regional-standby-dr-db-azure-arch.svg",
"yaml": "kb/diagram/assets/archcenter-refs/local-regional-standby-dr-db-at-azure/_template.yaml"
},
"mid-tier-replication-oci-dr-arch": {
"drawio": "kb/diagram/assets/archcenter-refs/mid-tier-replication-oci-dr-arch/active-passive-dr-mid-tier-oracle/active-passive-dr-mid-tier.drawio",
"svg": "kb/diagram/assets/archcenter-refs/mid-tier-replication-oci-dr-arch/active-passive-dr-mid-tier-oracle/active-passive-dr-mid-tier.svg",
"yaml": "kb/diagram/assets/archcenter-refs/mid-tier-replication-oci-dr-arch/_template.yaml"
},
"migrate-apps-to-apex": {
"drawio": "kb/diagram/assets/archcenter-refs/migrate-apps-to-apex/forms-apps-to-apex-oracle/forms-apps-to-apex.drawio",
"svg": "kb/diagram/assets/archcenter-refs/migrate-apps-to-apex/forms-apps-to-apex-oracle/forms-apps-to-apex.svg",
"yaml": "kb/diagram/assets/archcenter-refs/migrate-apps-to-apex/_template.yaml"
},
"migrate-ebs-with-cloudmanager": {
"drawio": "kb/diagram/assets/archcenter-refs/migrate-ebs-with-cloudmanager/migrate-ebs-env-prod-oracle/migrate-ebs-env-prod.drawio",
"svg": "kb/diagram/assets/archcenter-refs/migrate-ebs-with-cloudmanager/migrate-ebs-env-prod-oracle/migrate-ebs-env-prod.svg",
"yaml": "kb/diagram/assets/archcenter-refs/migrate-ebs-with-cloudmanager/_template.yaml"
},
"migrate-to-atp": {
"png": "kb/diagram/assets/archcenter-refs/migrate-to-atp/favicon-128.png"
},
"modern-platform-oracle-db-at-azure": {
"drawio": "kb/diagram/assets/archcenter-refs/modern-platform-oracle-db-at-azure/oracle-database-at-azure-services-platform-oracle/oracle-database-at-azure-services-platform.drawio",
"svg": "kb/diagram/assets/archcenter-refs/modern-platform-oracle-db-at-azure/oracle-database-at-azure-services-platform-oracle/oracle-database-at-azure-services-platform.svg",
"yaml": "kb/diagram/assets/archcenter-refs/modern-platform-oracle-db-at-azure/_template.yaml"
},
"modernize-app-dev-oci-postgresql-redis-opensearch": {
"drawio": "kb/diagram/assets/archcenter-refs/modernize-app-dev-oci-postgresql-redis-opensearch/dr-architecture-diagram-oracle/dr-architecture-diagram.drawio",
"svg": "kb/diagram/assets/archcenter-refs/modernize-app-dev-oci-postgresql-redis-opensearch/dr-architecture-diagram-oracle/dr-architecture-diagram.svg",
"yaml": "kb/diagram/assets/archcenter-refs/modernize-app-dev-oci-postgresql-redis-opensearch/_template.yaml"
},
"mongodb-to-atp": {
"drawio": "kb/diagram/assets/archcenter-refs/mongodb-to-atp/mongodb-atp-s-arch-variant-oracle/mongodb-atp-s-arch-variant.drawio",
"svg": "kb/diagram/assets/archcenter-refs/mongodb-to-atp/mongodb-atp-s-arch-variant-oracle/mongodb-atp-s-arch-variant.svg",
"yaml": "kb/diagram/assets/archcenter-refs/mongodb-to-atp/_template.yaml"
},
"mongodb-to-atp-azure": {
"drawio": "kb/diagram/assets/archcenter-refs/mongodb-to-atp-azure/mongodb-atp-s-azure-arch-variant/mongodb-atp-s-azure-arch-variant/mongodb-atp-s-azure-arch-variant.drawio",
"png": "kb/diagram/assets/archcenter-refs/mongodb-to-atp-azure/mongodb-atp-s-azure-arch-variant/mongodb-atp-s-azure-arch-variant/mongodb-atp-s-azure-arch-variant.png",
"svg": "kb/diagram/assets/archcenter-refs/mongodb-to-atp-azure/mongodb-atp-s-azure-arch-variant/mongodb-atp-s-azure-arch-variant/mongodb-atp-s-azure-arch-variant.svg",
"yaml": "kb/diagram/assets/archcenter-refs/mongodb-to-atp-azure/_template.yaml"
},
"mongodb-to-atp-google": {
"drawio": "kb/diagram/assets/archcenter-refs/mongodb-to-atp-google/mongodb-atp-s-google-arch-variant/mongodb-atp-s-google-arch-variant/mongodb-atp-s-google-arch-variant.drawio",
"png": "kb/diagram/assets/archcenter-refs/mongodb-to-atp-google/mongodb-atp-s-google-arch-variant/mongodb-atp-s-google-arch-variant/mongodb-atp-s-google-arch-variant.png",
"svg": "kb/diagram/assets/archcenter-refs/mongodb-to-atp-google/mongodb-atp-s-google-arch-variant/mongodb-atp-s-google-arch-variant/mongodb-atp-s-google-arch-variant.svg",
"yaml": "kb/diagram/assets/archcenter-refs/mongodb-to-atp-google/_template.yaml"
},
"mongodb-to-auto-json-db": {
"drawio": "kb/diagram/assets/archcenter-refs/mongodb-to-auto-json-db/mongodb-json-arch-variant-oracle/mongdb-json-arch-variant.drawio",
"svg": "kb/diagram/assets/archcenter-refs/mongodb-to-auto-json-db/mongodb-json-arch-variant-oracle/mongodb-json-arch-variant.svg",
"yaml": "kb/diagram/assets/archcenter-refs/mongodb-to-auto-json-db/_template.yaml"
},
"mongodb-to-exadata-machine": {
"drawio": "kb/diagram/assets/archcenter-refs/mongodb-to-exadata-machine/mongodb-exadata-machine-physical-arch/mongodb-exadata-machine-physical-arch/mongodb-exadata-machine-physical-arch.drawio",
"png": "kb/diagram/assets/archcenter-refs/mongodb-to-exadata-machine/mongodb-exadata-machine-physical-arch/mongodb-exadata-machine-physical-arch/mongodb-exadata-machine-physical-arch.png",
"yaml": "kb/diagram/assets/archcenter-refs/mongodb-to-exadata-machine/_template.yaml"
},
"multi-region-standby-dr-db-at-azure": {
"drawio": "kb/diagram/assets/archcenter-refs/multi-region-standby-dr-db-at-azure/multi-region-standby-dr-db-azure-arch-oracle/multi-region-standby-dr-db-azure-arch.drawio",
"svg": "kb/diagram/assets/archcenter-refs/multi-region-standby-dr-db-at-azure/multi-region-standby-dr-db-azure-arch-oracle/multi-region-standby-dr-db-azure-arch.svg",
"yaml": "kb/diagram/assets/archcenter-refs/multi-region-standby-dr-db-at-azure/_template.yaml"
},
"multi-region-standby-dr-db-azure-arch-oracle": {
"drawio": "kb/diagram/assets/archcenter-refs/multi-region-standby-dr-db-azure-arch-oracle/multi-region-standby-dr-db-azure-arch.drawio",
"png": "kb/diagram/assets/archcenter-refs/multi-region-standby-dr-db-azure-arch-oracle/multi-region-standby-dr-db-azure-arch.png",
"svg": "kb/diagram/assets/archcenter-refs/multi-region-standby-dr-db-azure-arch-oracle/multi-region-standby-dr-db-azure-arch.svg",
"yaml": "kb/diagram/assets/archcenter-refs/multi-region-standby-dr-db-azure-arch-oracle/_template.yaml"
},
"multi-tenant-app-deploy": {
"drawio": "kb/diagram/assets/archcenter-refs/multi-tenant-app-deploy/multi-tenant-app-oci-oracle/multi-tenant-app-oci.drawio",
"svg": "kb/diagram/assets/archcenter-refs/multi-tenant-app-deploy/multi-tenant-app-oci-oracle/multi-tenant-app-oci.svg",
"yaml": "kb/diagram/assets/archcenter-refs/multi-tenant-app-deploy/_template.yaml"
},
"network-topology-oracle-database-at-aws": {
"drawio": "kb/diagram/assets/archcenter-refs/network-topology-oracle-database-at-aws/db-at-aws-main-arch-oracle/db-at-aws-main-arch.drawio",
"svg": "kb/diagram/assets/archcenter-refs/network-topology-oracle-database-at-aws/db-at-aws-main-arch-oracle/db-at-aws-main-arch.svg",
"yaml": "kb/diagram/assets/archcenter-refs/network-topology-oracle-database-at-aws/_template.yaml"
},
"network-topology-oracle-database-at-google-cloud": {
"drawio": "kb/diagram/assets/archcenter-refs/network-topology-oracle-database-at-google-cloud/google-detailed-arch-oracle/google-detailed-arch-oracle/google-detailed-arch.drawio",
"svg": "kb/diagram/assets/archcenter-refs/network-topology-oracle-database-at-google-cloud/google-detailed-arch-oracle/google-detailed-arch-oracle/google-detailed-arch.svg",
"yaml": "kb/diagram/assets/archcenter-refs/network-topology-oracle-database-at-google-cloud/_template.yaml"
},
"oci-ai-healthcare": {
"drawio": "kb/diagram/assets/archcenter-refs/oci-ai-healthcare/oci-ai-healthcare_arch-oracle/oci-ai-healthcare-arch.drawio",
"svg": "kb/diagram/assets/archcenter-refs/oci-ai-healthcare/oci-ai-healthcare_arch-oracle/oci-ai-healthcare-arch.svg",
"yaml": "kb/diagram/assets/archcenter-refs/oci-ai-healthcare/_template.yaml"
},
"oci-azure-multicloud-data-solution": {
"drawio": "kb/diagram/assets/archcenter-refs/oci-azure-multicloud-data-solution/oci-azure-multicloud-data-solution-diagram-oracle/oci-azure-multicloud-data-solution-diagram.drawio",
"svg": "kb/diagram/assets/archcenter-refs/oci-azure-multicloud-data-solution/oci-azure-multicloud-data-solution-diagram-oracle/oci-azure-multicloud-data-solution-diagram.svg",
"yaml": "kb/diagram/assets/archcenter-refs/oci-azure-multicloud-data-solution/_template.yaml"
},
"oci-best-practices-networking": {
"drawio": "kb/diagram/assets/archcenter-refs/oci-best-practices-networking/multi-region-deployment-full-arch-oracle/multi-region-deployment-full-arch.drawio",
"svg": "kb/diagram/assets/archcenter-refs/oci-best-practices-networking/multi-region-deployment-full-arch-oracle/multi-region-deployment-full-arch.svg",
"yaml": "kb/diagram/assets/archcenter-refs/oci-best-practices-networking/_template.yaml"
},
"oci-cpu-inference-ollama": {
"drawio": "kb/diagram/assets/archcenter-refs/oci-cpu-inference-ollama/ollama-blueprint-architecture-oracle/ollama-blueprint-architecture.drawio",
"svg": "kb/diagram/assets/archcenter-refs/oci-cpu-inference-ollama/ollama-blueprint-architecture-oracle/ollama-blueprint-architecture.svg",
"yaml": "kb/diagram/assets/archcenter-refs/oci-cpu-inference-ollama/_template.yaml"
},
"oci-genai-enterprise": {
"drawio": "kb/diagram/assets/archcenter-refs/oci-genai-enterprise/oci-genai-enterprise-arch-oracle/oci-genai-enterprise-arch.drawio",
"svg": "kb/diagram/assets/archcenter-refs/oci-genai-enterprise/oci-genai-enterprise-arch-oracle/oci-genai-enterprise-arch.svg",
"yaml": "kb/diagram/assets/archcenter-refs/oci-genai-enterprise/_template.yaml"
},
"oci-generative-ai-llm-platforms": {
"drawio": "kb/diagram/assets/archcenter-refs/oci-generative-ai-llm-platforms/ai-llm-workflow-architecture-oracle/ai-llm-workflow-architecture.drawio",
"svg": "kb/diagram/assets/archcenter-refs/oci-generative-ai-llm-platforms/ai-llm-workflow-architecture-oracle/ai-llm-workflow-architecture.svg",
"yaml": "kb/diagram/assets/archcenter-refs/oci-generative-ai-llm-platforms/_template.yaml"
},
"oci-multicloud-datalake": {
"drawio": "kb/diagram/assets/archcenter-refs/oci-multicloud-datalake/oci-multicloud-datalake-flow-oracle/oci_multicloud_datalake_flow.drawio",
"svg": "kb/diagram/assets/archcenter-refs/oci-multicloud-datalake/oci-multicloud-datalake-flow-oracle/oci_multicloud_datalake_flow.svg",
"yaml": "kb/diagram/assets/archcenter-refs/oci-multicloud-datalake/_template.yaml"
},
"oci-multicloud-genai-rag": {
"drawio": "kb/diagram/assets/archcenter-refs/oci-multicloud-genai-rag/multicloud-genai-rag-architecture-oracle/multicloud-genai-rag-architecture.drawio",
"svg": "kb/diagram/assets/archcenter-refs/oci-multicloud-genai-rag/multicloud-genai-rag-architecture-oracle/multicloud-genai-rag-architecture.svg",
"yaml": "kb/diagram/assets/archcenter-refs/oci-multicloud-genai-rag/_template.yaml"
},
"oci-nlb-palo-alto-active-active": {
"drawio": "kb/diagram/assets/archcenter-refs/oci-nlb-palo-alto-active-active/oci-nlb-palo-alto-active-active-arch-oracle/oci-nlb-palo-alto-active-active-arch.drawio",
"svg": "kb/diagram/assets/archcenter-refs/oci-nlb-palo-alto-active-active/oci-nlb-palo-alto-active-active-arch-oracle/oci-nlb-palo-alto-active-active-arch.svg",
"yaml": "kb/diagram/assets/archcenter-refs/oci-nlb-palo-alto-active-active/_template.yaml"
},
"oci-oad-kafka-oi": {
"drawio": "kb/diagram/assets/archcenter-refs/oci-oad-kafka-oi/oci-oad-kafka-oi-oracle/oci-oad-kafka-oi.drawio",
"svg": "kb/diagram/assets/archcenter-refs/oci-oad-kafka-oi/oci-oad-kafka-oi-oracle/oci-oad-kafka-oi.svg",
"yaml": "kb/diagram/assets/archcenter-refs/oci-oad-kafka-oi/_template.yaml"
},
"oci-object-storage-modernization": {
"drawio": "kb/diagram/assets/archcenter-refs/oci-object-storage-modernization/oci-object-storage-modernization-arch-after-oracle/oci-object-storage-modernization-arch-after.drawio",
"svg": "kb/diagram/assets/archcenter-refs/oci-object-storage-modernization/oci-object-storage-modernization-arch-after-oracle/oci-object-storage-modernization-arch-after.svg",
"yaml": "kb/diagram/assets/archcenter-refs/oci-object-storage-modernization/_template.yaml"
},
"oci-ops-insights-and-em-bridge": {
"drawio": "kb/diagram/assets/archcenter-refs/oci-ops-insights-and-em-bridge/oci-ops-insights-diagram-oracle/oci-ops-insights-diagram.drawio",
"svg": "kb/diagram/assets/archcenter-refs/oci-ops-insights-and-em-bridge/oci-ops-insights-diagram-oracle/oci-ops-insights-diagram.svg",
"yaml": "kb/diagram/assets/archcenter-refs/oci-ops-insights-and-em-bridge/_template.yaml"
},
"oci-security-zones": {
"drawio": "kb/diagram/assets/archcenter-refs/oci-security-zones/MSZ-01-oracle/MSZ-01.drawio",
"svg": "kb/diagram/assets/archcenter-refs/oci-security-zones/MSZ-01-oracle/MSZ-01.svg",
"yaml": "kb/diagram/assets/archcenter-refs/oci-security-zones/_template.yaml"
},
"oci-speech-meeting-insights-genai": {
"drawio": "kb/diagram/assets/archcenter-refs/oci-speech-meeting-insights-genai/oci-speech-adb-ai-arch-oracle/oci-speech-adb-ai-arch.drawio",
"svg": "kb/diagram/assets/archcenter-refs/oci-speech-meeting-insights-genai/oci-speech-adb-ai-arch-oracle/oci-speech-adb-ai-arch.svg",
"yaml": "kb/diagram/assets/archcenter-refs/oci-speech-meeting-insights-genai/_template.yaml"
},
"ocvs-vsan-stretched-cluster": {
"drawio": "kb/diagram/assets/archcenter-refs/ocvs-vsan-stretched-cluster/ocvs-vsan-stretched-cluster-oracle/ocvs-vsan-stretched-cluster.drawio",
"svg": "kb/diagram/assets/archcenter-refs/ocvs-vsan-stretched-cluster/ocvs-vsan-stretched-cluster-oracle/ocvs-vsan-stretched-cluster.svg",
"yaml": "kb/diagram/assets/archcenter-refs/ocvs-vsan-stretched-cluster/_template.yaml"
},
"oracle-adb-jde-exadata": {
"drawio": "kb/diagram/assets/archcenter-refs/oracle-adb-jde-exadata/oracle-adb-jde-exadata-arch-oracle/oracle-adb-jde-exadata-arch.drawio",
"svg": "kb/diagram/assets/archcenter-refs/oracle-adb-jde-exadata/oracle-adb-jde-exadata-arch-oracle/oracle-adb-jde-exadata-arch.svg",
"yaml": "kb/diagram/assets/archcenter-refs/oracle-adb-jde-exadata/_template.yaml"
},
"oracle-adb-jde-exadata-arch-oracle": {
"drawio": "kb/diagram/assets/archcenter-refs/oracle-adb-jde-exadata-arch-oracle/oracle-adb-jde-exadata-arch.drawio",
"png": "kb/diagram/assets/archcenter-refs/oracle-adb-jde-exadata-arch-oracle/rendered.png",
"svg": "kb/diagram/assets/archcenter-refs/oracle-adb-jde-exadata-arch-oracle/oracle-adb-jde-exadata-arch.svg",
"yaml": "kb/diagram/assets/archcenter-refs/oracle-adb-jde-exadata-arch-oracle/_template.yaml"
},
"oracle-db-at-azure-migration": {
"drawio": "kb/diagram/assets/archcenter-refs/oracle-db-at-azure-migration/oracle-db-at-azure-zdm-oracle/oracle-db-at-azure-zdm.drawio",
"svg": "kb/diagram/assets/archcenter-refs/oracle-db-at-azure-migration/oracle-db-at-azure-zdm-oracle/oracle-db-at-azure-zdm.svg",
"yaml": "kb/diagram/assets/archcenter-refs/oracle-db-at-azure-migration/_template.yaml"
},
"oracle-db-at-azure-streaming": {
"drawio": "kb/diagram/assets/archcenter-refs/oracle-db-at-azure-streaming/oracle-db-at-azure-streaming-oracle/oracle-db-at-azure-streaming.drawio",
"svg": "kb/diagram/assets/archcenter-refs/oracle-db-at-azure-streaming/oracle-db-at-azure-streaming-oracle/oracle-db-at-azure-streaming.svg",
"yaml": "kb/diagram/assets/archcenter-refs/oracle-db-at-azure-streaming/_template.yaml"
},
"oracle-db-at-google-cloud-migration": {
"drawio": "kb/diagram/assets/archcenter-refs/oracle-db-at-google-cloud-migration/oracle_database_at_google_cloud_w_zdm-oracle/oracle_database_at_google_cloud_w_zdm.drawio",
"svg": "kb/diagram/assets/archcenter-refs/oracle-db-at-google-cloud-migration/oracle_database_at_google_cloud_w_zdm-oracle/oracle_database_at_google_cloud_w_zdm.svg",
"yaml": "kb/diagram/assets/archcenter-refs/oracle-db-at-google-cloud-migration/_template.yaml"
},
"oracle-maa-db-at-azure": {
"drawio": "kb/diagram/assets/archcenter-refs/oracle-maa-db-at-azure/cross-az-dr-oracle/cross-az-dr.drawio",
"svg": "kb/diagram/assets/archcenter-refs/oracle-maa-db-at-azure/cross-az-dr-oracle/cross-az-dr.svg",
"yaml": "kb/diagram/assets/archcenter-refs/oracle-maa-db-at-azure/_template.yaml"
},
"phased-migration-to-oracle-dba": {
"drawio": "kb/diagram/assets/archcenter-refs/phased-migration-to-oracle-dba/logical-architecture-diagram-oracle/logical-architecture-diagram.drawio",
"svg": "kb/diagram/assets/archcenter-refs/phased-migration-to-oracle-dba/logical-architecture-diagram-oracle/logical-architecture-diagram.svg",
"yaml": "kb/diagram/assets/archcenter-refs/phased-migration-to-oracle-dba/_template.yaml"
},
"private-dns": {
"drawio": "kb/diagram/assets/archcenter-refs/private-dns/architecture-deploy-private-dns/architecture-deploy-private-dns/architecture-deploy-private-dns.drawio",
"png": "kb/diagram/assets/archcenter-refs/private-dns/architecture-deploy-private-dns/architecture-deploy-private-dns/architecture-deploy-private-dns.png",
"yaml": "kb/diagram/assets/archcenter-refs/private-dns/_template.yaml"
},
"remote-synchronous-block-replication-oci": {
"drawio": "kb/diagram/assets/archcenter-refs/remote-synchronous-block-replication-oci/remote-synchronous-block-replication-diagram-oracle/remote-synchronous-block-replication-diagram.drawio",
"svg": "kb/diagram/assets/archcenter-refs/remote-synchronous-block-replication-oci/remote-synchronous-block-replication-diagram-oracle/remote-synchronous-block-replication-diagram.svg",
"yaml": "kb/diagram/assets/archcenter-refs/remote-synchronous-block-replication-oci/_template.yaml"
},
"rep-fusion-saas-third-party-dw": {
"drawio": "kb/diagram/assets/archcenter-refs/rep-fusion-saas-third-party-dw/fusion-saas-to-snowflake-arch-oracle/fusion-saas-to-snowflake-arch.drawio",
"svg": "kb/diagram/assets/archcenter-refs/rep-fusion-saas-third-party-dw/fusion-saas-to-snowflake-arch-oracle/fusion-saas-to-snowflake-arch.svg",
"yaml": "kb/diagram/assets/archcenter-refs/rep-fusion-saas-third-party-dw/_template.yaml"
},
"run-quantized-gguf-llm-ampere-cluster": {
"drawio": "kb/diagram/assets/archcenter-refs/run-quantized-gguf-llm-ampere-cluster/gen-ai-ampere-gguf-llm-arch/gen-ai-ampere-gguf-llm-arch/gen-ai-ampere-gguf-llm-arch.drawio",
"png": "kb/diagram/assets/archcenter-refs/run-quantized-gguf-llm-ampere-cluster/gen-ai-ampere-gguf-llm-arch/gen-ai-ampere-gguf-llm-arch/gen-ai-ampere-gguf-llm-arch.png",
"svg": "kb/diagram/assets/archcenter-refs/run-quantized-gguf-llm-ampere-cluster/gen-ai-ampere-gguf-llm-arch/gen-ai-ampere-gguf-llm-arch/gen-ai-ampere-gguf-llm-arch.svg",
"yaml": "kb/diagram/assets/archcenter-refs/run-quantized-gguf-llm-ampere-cluster/_template.yaml"
},
"secure-backup-oci-object-storage": {
"drawio": "kb/diagram/assets/archcenter-refs/secure-backup-oci-object-storage/secure-backup-oci-object-storage-oracle/secure-backup-oci-object-storage.drawio",
"svg": "kb/diagram/assets/archcenter-refs/secure-backup-oci-object-storage/secure-backup-oci-object-storage-oracle/secure-backup-oci-object-storage.svg",
"yaml": "kb/diagram/assets/archcenter-refs/secure-backup-oci-object-storage/_template.yaml"
},
"select-ai-apex-framework": {
"drawio": "kb/diagram/assets/archcenter-refs/select-ai-apex-framework/hallucination-reduction-workflow-oracle/hallucination-reduction-workflow.drawio",
"svg": "kb/diagram/assets/archcenter-refs/select-ai-apex-framework/hallucination-reduction-workflow-oracle/hallucination-reduction-workflow.svg",
"yaml": "kb/diagram/assets/archcenter-refs/select-ai-apex-framework/_template.yaml"
},
"takamol-on-oci": {
"drawio": "kb/diagram/assets/archcenter-refs/takamol-on-oci/takamol-on-oci-arch-oracle/takamol-on-oci-arch.drawio",
"svg": "kb/diagram/assets/archcenter-refs/takamol-on-oci/takamol-on-oci-arch-oracle/takamol-on-oci-arch.svg",
"yaml": "kb/diagram/assets/archcenter-refs/takamol-on-oci/_template.yaml"
},
"tharseo-data-platform-on-oci": {
"drawio": "kb/diagram/assets/archcenter-refs/tharseo-data-platform-on-oci/tharseo-data-platform-on-oci-arch-oracle/tharseo-data-platform-on-oci-arch.drawio",
"svg": "kb/diagram/assets/archcenter-refs/tharseo-data-platform-on-oci/tharseo-data-platform-on-oci-arch-oracle/tharseo-data-platform-on-oci-arch.svg",
"yaml": "kb/diagram/assets/archcenter-refs/tharseo-data-platform-on-oci/_template.yaml"
},
"wls-on-oke-marketplace": {
"drawio": "kb/diagram/assets/archcenter-refs/wls-on-oke-marketplace/wls-oke-marketplace-oracle/wls-oke-marketplace.drawio",
"svg": "kb/diagram/assets/archcenter-refs/wls-on-oke-marketplace/wls-oke-marketplace-oracle/wls-oke-marketplace.svg",
"yaml": "kb/diagram/assets/archcenter-refs/wls-on-oke-marketplace/_template.yaml"
}
}
}

View File

@@ -0,0 +1,555 @@
# Auto-extracted absolute_layout template from
# kb/diagram/assets/archcenter-refs/active-data-guard-far-sync-dba-oracle/active-data-guard-far-sync-dba.drawio
# Source: Oracle Architecture Center reference (canonical geometry).
# Use this as the starting scaffold for a new spec — copy, rename ids,
# and replace `type: TODO_identify` on services with the right OCI
# type alias (adb_s, drg, fastconnect, etc.). Container coords and
# edge waypoints are Oracle's canonical layout; preserve unless the
# customer's topology requires a change.
absolute_layout:
canvas:
width: 850
height: 1100
containers:
- id: c1
type: region
label: ''
x: 652
y: 1
w: 676
h: 447
- id: c2
type: region
label: ''
x: 652
y: 585
w: 676
h: 447
- id: c5
type: region
label: ''
x: 965
y: 686
w: 105
h: 36
- id: c50
type: region
label: ''
x: 818
y: 161
w: 99
h: 14
- id: c53
type: region
label: ''
x: 818
y: 855
w: 99
h: 14
- id: c70
type: region
label: ''
x: 1150
y: 377
w: 2
h: 63
- id: c74
type: region
label: ''
x: 1150
y: 657
w: 2
h: 63
- id: c54
type: region
label: ''
x: 776
y: 855
w: 2
h: 50
- id: c58
type: region
label: ''
x: 956
y: 855
w: 2
h: 50
- id: c62
type: region
label: ''
x: 776
y: 161
w: 2
h: 50
- id: c66
type: region
label: ''
x: 956
y: 161
w: 2
h: 50
services:
- id: s3
type: TODO_identify
label: ''
x: 582
y: 34
w: 28
h: 31
- id: s7
type: TODO_identify
label: ''
x: 725
y: 77
w: 42
h: 40
- id: s6
type: TODO_identify
label: ''
x: 726
y: 77
w: 41
h: 39
- id: s8
type: TODO_identify
label: ''
x: 726
y: 78
w: 40
h: 38
- id: s12
type: TODO_identify
label: ''
x: 676
y: 106
w: 41
h: 41
- id: s13
type: TODO_identify
label: ''
x: 676
y: 106
w: 42
h: 42
- id: s14
type: TODO_identify
label: ''
x: 677
y: 120
w: 29
h: 26
- id: s15
type: TODO_identify
label: ''
x: 1260
y: 132
w: 41
h: 41
- id: s16
type: TODO_identify
label: ''
x: 1260
y: 132
w: 42
h: 42
- id: s17
type: TODO_identify
label: ''
x: 1261
y: 146
w: 29
h: 26
- id: s64
type: TODO_identify
label: ''
x: 756
y: 149
w: 42
h: 42
- id: s68
type: TODO_identify
label: ''
x: 936
y: 149
w: 42
h: 42
- id: s63
type: TODO_identify
label: ''
x: 757
y: 150
w: 40
h: 40
- id: s67
type: TODO_identify
label: ''
x: 937
y: 150
w: 40
h: 40
- id: s65
type: TODO_identify
label: ''
x: 758
y: 151
w: 38
h: 38
- id: s69
type: TODO_identify
label: ''
x: 938
y: 151
w: 38
h: 38
- id: s37
type: TODO_identify
label: ''
x: 500
y: 212
w: 48
h: 63
- id: s35
type: TODO_identify
label: ''
x: 1119
y: 212
w: 63
h: 63
- id: s34
type: TODO_identify
label: ''
x: 1120
y: 213
w: 62
h: 62
- id: s36
type: TODO_identify
label: ''
x: 1121
y: 214
w: 60
h: 60
- id: s19
type: TODO_identify
label: ''
x: 676
y: 241
w: 42
h: 42
- id: s18
type: TODO_identify
label: ''
x: 676
y: 242
w: 41
h: 41
- id: s20
type: TODO_identify
label: ''
x: 677
y: 256
w: 29
h: 26
- id: s31
type: TODO_identify
label: ''
x: 107
y: 314
w: 63
h: 63
- id: s30
type: TODO_identify
label: ''
x: 108
y: 315
w: 61
h: 61
- id: s32
type: TODO_identify
label: ''
x: 109
y: 315
w: 60
h: 60
- id: s33
type: TODO_identify
label: ''
x: 129
y: 322
w: 36
h: 41
- id: s72
type: TODO_identify
label: ''
x: 1129
y: 377
w: 42
h: 42
- id: s71
type: TODO_identify
label: ''
x: 1130
y: 378
w: 41
h: 41
- id: s73
type: TODO_identify
label: ''
x: 1130
y: 378
w: 40
h: 40
- id: s43
type: TODO_identify
label: ''
x: 944
y: 466
w: 57
h: 63
- id: s42
type: TODO_identify
label: ''
x: 945
y: 466
w: 55
h: 61
- id: s44
type: TODO_identify
label: ''
x: 946
y: 467
w: 54
h: 60
- id: s45
type: TODO_identify
label: ''
x: 958
y: 485
w: 29
h: 38
- id: s51
type: TODO_identify
label: ''
x: 1130
y: 505
w: 42
h: 29
- id: s52
type: TODO_identify
label: ''
x: 1136
y: 505
w: 29
h: 29
- id: s4
type: TODO_identify
label: ''
x: 582
y: 617
w: 28
h: 31
- id: s76
type: TODO_identify
label: ''
x: 1129
y: 657
w: 42
h: 42
- id: s75
type: TODO_identify
label: ''
x: 1130
y: 658
w: 41
h: 41
- id: s77
type: TODO_identify
label: ''
x: 1130
y: 658
w: 40
h: 40
- id: s10
type: TODO_identify
label: ''
x: 725
y: 661
w: 42
h: 40
- id: s9
type: TODO_identify
label: ''
x: 726
y: 662
w: 41
h: 39
- id: s11
type: TODO_identify
label: ''
x: 726
y: 662
w: 40
h: 38
- id: s22
type: TODO_identify
label: ''
x: 676
y: 690
w: 42
h: 42
- id: s21
type: TODO_identify
label: ''
x: 676
y: 691
w: 41
h: 41
- id: s23
type: TODO_identify
label: ''
x: 677
y: 705
w: 29
h: 26
- id: s24
type: TODO_identify
label: ''
x: 1260
y: 716
w: 41
h: 41
- id: s25
type: TODO_identify
label: ''
x: 1260
y: 716
w: 42
h: 42
- id: s26
type: TODO_identify
label: ''
x: 1261
y: 730
w: 29
h: 26
- id: s39
type: TODO_identify
label: ''
x: 107
y: 745
w: 63
h: 63
- id: s38
type: TODO_identify
label: ''
x: 108
y: 746
w: 61
h: 61
- id: s40
type: TODO_identify
label: ''
x: 109
y: 747
w: 60
h: 60
- id: s41
type: TODO_identify
label: ''
x: 129
y: 753
w: 36
h: 41
- id: s49
type: TODO_identify
label: ''
x: 500
y: 779
w: 48
h: 63
- id: s47
type: TODO_identify
label: ''
x: 1119
y: 821
w: 63
h: 63
- id: s46
type: TODO_identify
label: ''
x: 1120
y: 822
w: 62
h: 62
- id: s48
type: TODO_identify
label: ''
x: 1121
y: 823
w: 60
h: 60
- id: s27
type: TODO_identify
label: ''
x: 676
y: 826
w: 41
h: 41
- id: s28
type: TODO_identify
label: ''
x: 676
y: 826
w: 42
h: 42
- id: s29
type: TODO_identify
label: ''
x: 677
y: 840
w: 29
h: 26
- id: s56
type: TODO_identify
label: ''
x: 756
y: 843
w: 42
h: 42
- id: s60
type: TODO_identify
label: ''
x: 936
y: 843
w: 42
h: 42
- id: s55
type: TODO_identify
label: ''
x: 757
y: 844
w: 40
h: 40
- id: s59
type: TODO_identify
label: ''
x: 937
y: 844
w: 40
h: 40
- id: s57
type: TODO_identify
label: ''
x: 758
y: 845
w: 38
h: 38
- id: s61
type: TODO_identify
label: ''
x: 938
y: 845
w: 38
h: 38
labels: []
connections: []

Binary file not shown.

After

Width:  |  Height:  |  Size: 227 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 135 KiB

View File

@@ -0,0 +1,297 @@
<!DOCTYPE html
SYSTEM "about:legacy-compat">
<html xml:lang="en-us" lang="en-us" class="solution">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="DC.Type" content="topic">
<meta name="DC.Title" content="Learn about Deploying Active Data Guard Far Sync">
<meta name="abstract" content="Oracle Database@Azure enables you to run your mission-critical Oracle databases using Oracle Exadata Database Service on Dedicated Infrastructure in Microsoft Azure's data center.">
<meta name="description" content="Oracle Database@Azure enables you to run your mission-critical Oracle databases using Oracle Exadata Database Service on Dedicated Infrastructure in Microsoft Azure's data center.">
<meta name="copyright" content="(C) Copyrightfr 2025" type="primary">
<meta name="DC.Rights.Owner" content="(C) Copyrightfr 2025" type="primary">
<meta name="copyright" content="(C) Copyrightfr 2025" type="secondary">
<meta name="DC.Rights.Owner" content="(C) Copyrightfr 2025" type="secondary">
<meta name="DC.Date.Created" content="February 2025">
<meta name="DC.Format" content="XHTML">
<meta name="DC.Identifier" content="GUID-D17BA324-11FB-488B-976A-24D25CDFD6BB">
<meta name="DC.Language" content="en-US">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="abstract" content="Oracle Database@Azure enables you to run your mission-critical Oracle databases using Oracle Exadata Database Service on Dedicated Infrastructure in Microsoft Azure's data center.">
<meta name="description" content="Oracle Database@Azure enables you to run your mission-critical Oracle databases using Oracle Exadata Database Service on Dedicated Infrastructure in Microsoft Azure's data center.">
<title>Learn about Deploying Active Data Guard Far Sync</title>
<meta property="og:site_name" content="Oracle Help Center">
<meta property="og:title" content="Deploy Active Data Guard Far Sync to protect data across Oracle Database@Azure regions">
<meta property="og:description" content="Oracle Database@Azure enables you to run your mission-critical Oracle databases using Oracle Exadata Database Service on Dedicated Infrastructure in Microsoft Azure's data center.">
<link rel="stylesheet" href="/sp_common/book-template/ohc-book-template/css/book.css">
<link rel="shortcut icon" href="/sp_common/book-template/ohc-common/img/favicon.ico">
<meta name="application-name" content="Deploy Active Data Guard Far Sync to protect data across Oracle Database@Azure regions">
<meta name="generator" content="DITA Open Toolkit version 1.8.5 (Mode = solution)">
<meta name="plugin" content="SP_docbuilder HTML plugin release 18.2.2">
<meta name="keywords" content="Azure, Compute, Database Services, Oracle Cloud Infrastructure (OCI), Multicloud, Networking">
<link rel="schema.dcterms" href="http://purl.org/dc/terms/">
<meta name="dcterms.created" content="2025-02-20T13:29:14-08:00">
<meta name="dcterms.title" content="Deploy Active Data Guard Far Sync to protect data across Oracle Database@Azure regions">
<meta name="dcterms.dateCopyrighted" content="2025">
<meta name="dcterms.category" content="solutions">
<meta name="dcterms.identifier" content="G24005-02">
<meta name="dcterms.product" content="en/solutions;en/cloud/oracle-cloud-infrastructure/oracle-database-at-azure;en/cloud/paas/exadata-cloud">
<meta name="dcterms.release" content="Test Release">
<link rel="next" href="install-oci-compute-virtual-machines-far-sync.html" title="Next" type="text/html">
<script>
document.write('<style type="text/css">');
document.write('body > .noscript, body > .noscript ~ * { visibility: hidden; }');
document.write('</style>');
</script>
<script data-main="/sp_common/book-template/ohc-book-template/js/book-config" src="/sp_common/book-template/requirejs/require.js"></script>
<script>
if (window.require === undefined) {
document.write('<script data-main="sp_common/book-template/ohc-book-template/js/book-config" src="sp_common/book-template/requirejs/require.js"><\/script>');
document.write('<link href="sp_common/book-template/ohc-book-template/css/book.css" rel="stylesheet"/>');
}
</script>
<script type="application/json" id="ssot-metadata">{"primary":{"category":{"short_name":"solutions","element_name":"Solutions","display_in_url":true},"suite":{"short_name":"develop","element_name":"Develop","display_in_url":false},"product_group":{"short_name":"deployment","element_name":"Deployment","display_in_url":false}}}</script>
<meta name="dcterms.isVersionOf" content="ACTIVE-DATA-GUARD-FAR-SYNC-ORACLE-DB-AT-AZURE">
<script type="application/ld+json"> {"@context":"https://schema.org","@type":"WebPage","name":"Learn about Deploying Active Data Guard Far Sync","description":"Oracle Database@Azure enables you to run your mission-critical Oracle databases using Oracle Exadata Database Service on Dedicated Infrastructure in Microsoft Azure's data center.","datePublished":"2025-02-10 CST","dateModified":"2025-02-20 CST"} </script>
<link rel="alternate" hreflang="en" href="https://docs.oracle.com/en/solutions/active-data-guard-far-sync-oracle-db-at-azure/index.html">
<link rel="alternate" hreflang="ja" href="https://docs.oracle.com/ja/solutions/active-data-guard-far-sync-oracle-db-at-azure/index.html">
<link rel="alternate" hreflang="fr-CA" href="https://docs.oracle.com/fr-ca/solutions/active-data-guard-far-sync-oracle-db-at-azure/index.html">
<link rel="alternate" hreflang="ko" href="https://docs.oracle.com/ko/solutions/active-data-guard-far-sync-oracle-db-at-azure/index.html">
<link rel="alternate" hreflang="es" href="https://docs.oracle.com/es/solutions/active-data-guard-far-sync-oracle-db-at-azure/index.html">
<link rel="alternate" hreflang="it" href="https://docs.oracle.com/it/solutions/active-data-guard-far-sync-oracle-db-at-azure/index.html">
<link rel="alternate" hreflang="fr" href="https://docs.oracle.com/fr/solutions/active-data-guard-far-sync-oracle-db-at-azure/index.html">
<link rel="alternate" hreflang="zh-TW" href="https://docs.oracle.com/zh-tw/solutions/active-data-guard-far-sync-oracle-db-at-azure/index.html">
<link rel="alternate" hreflang="de" href="https://docs.oracle.com/de/solutions/active-data-guard-far-sync-oracle-db-at-azure/index.html">
<link rel="alternate" hreflang="pt-BR" href="https://docs.oracle.com/pt-br/solutions/active-data-guard-far-sync-oracle-db-at-azure/index.html">
<link rel="alternate" hreflang="zh-CN" href="https://docs.oracle.com/zh-cn/solutions/active-data-guard-far-sync-oracle-db-at-azure/index.html">
<link rel="alternate" hreflang="x-default" href="https://docs.oracle.com/en/solutions/active-data-guard-far-sync-oracle-db-at-azure/index.html">
<script>window.ohcglobal || document.write('<script src="/en/dcommon/js/global.js">\x3C/script>')</script></head>
<body>
<div class="noscript alert alert-danger text-center" role="alert">
<a href="index.html" class="pull-left"><span class="glyphicon glyphicon-chevron-left" aria-hidden="true"></span>Previous</a>
<a href="install-oci-compute-virtual-machines-far-sync.html" class="pull-right">Next<span class="glyphicon glyphicon-chevron-right" aria-hidden="true"></span></a>
<span class="fa fa-exclamation-triangle" aria-hidden="true"></span> JavaScript must be enabled to correctly display this content
</div>
<article>
<header>
<ol class="breadcrumb" vocab="http://schema.org/" typeof="BreadcrumbList">
<li property="itemListElement" typeof="ListItem"><a href="index.html" property="item" typeof="WebPage"><span property="name">Deploy Active Data Guard Far Sync to protect data across Oracle Database@Azure regions</span></a></li>
<li class="active" property="itemListElement" typeof="ListItem">Learn about Deploying Active Data Guard Far Sync</li>
</ol>
<a id="GUID-D17BA324-11FB-488B-976A-24D25CDFD6BB" name="GUID-D17BA324-11FB-488B-976A-24D25CDFD6BB"></a>
<h2 id="IAIGF-GUID-D17BA324-11FB-488B-976A-24D25CDFD6BB" class="sect2">Learn about Deploying <span>Active Data Guard Far Sync</span></h2>
</header>
<div class="ind">
<div>
<p><span>Oracle Database@Azure</span> enables you to run your mission-critical Oracle databases using <span>Oracle Exadata Database Service on Dedicated
Infrastructure</span> in <span>Microsoft Azure</span>'s data center.
</p>
<p>Take advantage of the built-in high availability, performance, and
scalability of <span>Oracle Exadata Database
Service</span> and <span>Oracle Real Application Clusters (Oracle
RAC)</span> while benefiting from low latency for <span>Azure</span> applications.
</p>
<p>Extending the architecture with a standby database hosted on another Exadata
virtual machine (VM) cluster provides disaster recovery (DR) protection against database
and cluster failures. Placing the standby in a different <span>Azure</span> availability zone (AZ) further enhances the solution, ensuring protection against an
entire AZ failure. For comprehensive regional disaster recovery, the standby database
should be deployed in a separate region.
</p>
<p><span>Oracle Data Guard</span> enables you to synchronously transport the redo to the standby database to ensure
zero data loss. However, when the standby database is geographically too far, the
latency increases, impacting the commit response time and the transaction throughput at
the primary database. <span>Active Data Guard Far Sync</span> can ensure zero data loss at any distance with minimal impact on the primary database
performance. Far Sync, a lightweight instance, provides synchronous redo protection and
zero data loss fail over without requiring a synchronous local standby database.
</p>
</div>
<div class="sect2"><a id="GUID-48F0D8A9-06D6-411A-AF04-2867963E98D2" name="GUID-48F0D8A9-06D6-411A-AF04-2867963E98D2"></a><h3 id="IAIGF-GUID-48F0D8A9-06D6-411A-AF04-2867963E98D2" class="sect3">Architecture</h3>
<div>
<p>This reference architecture shows a cross-region disaster recovery with <span>Active Data Guard</span>.
</p>
<p>Two <span>Active Data Guard</span> far sync instances are created in the corresponding <span>Oracle Cloud
Infrastructure</span> (OCI) regions. The primary database in Toronto sends the redo data in SYNC mode to
the local far sync instance in Toronto, which forwards the redo data in ASYNC mode to
the standby database in the remote Sydney region.
</p>
<p>After a role switch and the database in Sydney becomes the primary, it sends
the redo data in SYNC mode to its local far sync instance in Sydney, which forwards the
redo data in ASYNC mode to the standby database in the remote Toronto region.</p>
<p>The <span>Oracle Exadata Database
Service</span> on the <span>Oracle Database@Azure</span> network is connected to the Exadata client subnet using a dynamic routing gateway
(DRG) managed by Oracle. A DRG is also required to create a peer connection between VCNs
in different regions. Because only one DRG is allowed per VCN in OCI, a second VCN with
its own DRG is required to connect the primary and standby VCNs in each region.
</p>
<p>The application is replicated across regions to access the database in the same region
and achieve the lowest latency and highest performance.</p>
<p>The following diagram illustrates this reference architecture.</p><br><div class="imageleft"><img class="imageleft" id="GUID-48F0D8A9-06D6-411A-AF04-2867963E98D2__IMAGE_OPD_T33_C2C" height="977" width="1256" src="img/active-data-guard-far-sync-dba.png" alt="Description of active-data-guard-far-sync-dba.png follows" title="Description of active-data-guard-far-sync-dba.png follows" longdesc="img_text/active-data-guard-far-sync-dba.html"><br><a href="img_text/active-data-guard-far-sync-dba.html">Description of the illustration active-data-guard-far-sync-dba.png</a></div><br><p><a href="img/active-data-guard-far-sync-dba-oracle.zip" class="de-download">active-data-guard-far-sync-dba-oracle.zip</a></p>
<p><span>Microsoft Azure</span> provides the following components:
</p>
<ul style="list-style-type: disc;" id="GUID-48F0D8A9-06D6-411A-AF04-2867963E98D2__UL_HZN_W33_C2C">
<li><span class="bold">Azure Region</span><p id="GUID-48F0D8A9-06D6-411A-AF04-2867963E98D2__d5e198">An <span>Azure</span> region is a geographical area in which one or more
physical <span>Azure</span> data centers, called availability zones, reside. Regions
are independent of other regions, and vast distances can
separate them (across countries or even continents).
</p>
<p id="GUID-48F0D8A9-06D6-411A-AF04-2867963E98D2__d5e205"><span>Azure</span> and OCI regions are localized geographic areas. For <span>Oracle Database@Azure</span>, an <span>Azure</span> region is connected to an OCI region, with availability
zones (AZs) in <span>Azure</span> connected to availability domains (ADs) in OCI. <span>Azure</span> and OCI region pairs are selected to minimize distance
and
latency.
</p>
</li>
<li><span class="bold">Azure VNet</span><p id="GUID-48F0D8A9-06D6-411A-AF04-2867963E98D2__d5e267">Microsoft Azure Virtual Network (VNet) is
the fundamental building block for your private network in
Azure. VNet enables many types of Azure resources, such as
Azure virtual machines (VM), to securely communicate with
each other, the internet, and on-premises networks.</p>
</li>
<li><span class="bold">Azure Delegated Subnet</span><p id="GUID-48F0D8A9-06D6-411A-AF04-2867963E98D2__d5e280">Subnet delegation is
Microsoft's ability to inject a managed service,
specifically a platform-as-a-service (PaaS) service,
directly into your virtual network. This allows you to
designate or delegate a subnet to be a home for an external
managed service inside of your virtual network, such that
external service acts as a virtual network resource, even
though it is an external PaaS service.</p>
</li>
<li><span class="bold">Azure VNIC</span><p id="GUID-48F0D8A9-06D6-411A-AF04-2867963E98D2__d5e273">The services in Azure
data centers have physical network interface cards (NICs).
Virtual machine instances communicate using virtual NICs
(VNICs) associated with the physical NICs. Each instance has
a primary VNIC that's automatically created and attached
during launch and is available during the instance's
lifetime.</p>
</li>
</ul>
<p><span>Oracle Cloud
Infrastructure</span> provides the following components:
</p>
<ul style="list-style-type: disc;" id="GUID-48F0D8A9-06D6-411A-AF04-2867963E98D2__UL_FMY_1J3_C2C">
<li><span class="bold">Region</span><p id="GUID-48F0D8A9-06D6-411A-AF04-2867963E98D2__d204e1136">An <span>Oracle Cloud
Infrastructure</span> region is a localized geographic area that contains one or more data centers, called availability domains. Regions are independent of other regions, and vast distances can separate them (across countries or even continents).
</p>
</li>
<li><span class="bold">Virtual cloud network (VCN) and subnet</span><p id="GUID-48F0D8A9-06D6-411A-AF04-2867963E98D2__d204e1268">A VCN is a customizable, software-defined network that you set up in an <span>Oracle Cloud
Infrastructure</span> region. Like traditional data center networks, VCNs give you control over your network environment. A VCN can have multiple non-overlapping CIDR blocks that you can change after you create the VCN. You can segment a VCN into subnets, which can be scoped to a region or to an availability domain. Each subnet consists of a contiguous range of addresses that don't overlap with the other subnets in the VCN. You can change the size of a subnet after creation. A subnet can be public or private.
</p>
</li>
<li><span class="bold">Route table</span><p id="GUID-48F0D8A9-06D6-411A-AF04-2867963E98D2__d204e1159">Virtual route tables contain rules to route traffic from subnets to destinations outside a VCN, typically through gateways.</p>
</li>
<li><span class="bold">Security list</span><p id="GUID-48F0D8A9-06D6-411A-AF04-2867963E98D2__d204e1165">For each subnet, you can create security rules that specify the source, destination, and type of traffic that must be allowed in and out of the subnet.</p>
</li>
<li><span class="bold">Dynamic routing gateway (DRG)</span><p id="GUID-48F0D8A9-06D6-411A-AF04-2867963E98D2__d204e437">The DRG is a virtual router that provides a path for private network traffic between VCNs in the same region, between a VCN and a network outside the region, such as a VCN in another <span>Oracle Cloud
Infrastructure</span> region, an on-premises network, or a network in another cloud provider.
</p>
</li>
<li><span class="bold">Local peering gateway (LPG)</span><p>An LPG enables you to peer one VCN with another
VCN in the same region. Peering means the VCNs communicate using private IP
addresses, without the traffic traversing the internet or routing through your
on-premises network.</p>
</li>
<li><span class="bold">Data Guard</span><p id="GUID-48F0D8A9-06D6-411A-AF04-2867963E98D2__d204e285"><span>Oracle Data Guard</span> and Oracle Active Data Guard provide a comprehensive set of services that create, maintain, manage, and monitor one or more standby databases and that enable production Oracle databases to remain available without interruption. <span>Oracle Data Guard</span> maintains these standby databases as copies of the production database by using in-memory replication. If the production database becomes unavailable due to a planned or an unplanned outage, <span>Oracle Data Guard</span> can switch any standby database to the production role, minimizing the downtime associated with the outage. Oracle Active Data Guard provides the additional ability to offload read-mostly workloads to standby databases and also provides advanced data protection features.
</p>
</li>
<li><span class="bold"><span>Active Data Guard Far Sync</span></span><p>Oracle <span>Active Data Guard Far Sync</span> is a lightweight Oracle database instance that receives redo data
synchronously from the primary database and forwards it asynchronously to one or
more standby databases. It ensures zero data loss at any distance with minimal
impact on the primary database performance and without requiring a local
synchronous standby database.
</p>
</li>
<li><span class="bold">Exadata Database Service on Dedicated Infrastructure</span><p id="GUID-48F0D8A9-06D6-411A-AF04-2867963E98D2__d204e499"><span>Oracle Exadata Database Service on Dedicated
Infrastructure</span> enables you to leverage the power of Exadata in
the cloud. <span>Oracle Exadata Database
Service</span> delivers proven <span>Oracle Database</span> capabilities on purpose-built, optimized Oracle
Exadata infrastructure in the public cloud.
Built-in cloud automation, elastic resource
scaling, security, and fast performance for all
<span>Oracle Database</span> workloads helps you simplify management and
reduce costs.
</p>
</li>
<li><span class="bold"><span>Oracle Database@Azure</span></span><p id="GUID-48F0D8A9-06D6-411A-AF04-2867963E98D2__d204e918"><span>Oracle Database@Azure</span> is the Oracle Database service (<span>Oracle Exadata Database Service on Dedicated
Infrastructure</span> and <span>Oracle Autonomous Database Serverless</span>) running on <span>Oracle Cloud
Infrastructure</span> (OCI), deployed in Microsoft Azure data centers. The service offers features and price parity with OCI. Purchase the service on Azure Marketplace.
</p>
<p id="GUID-48F0D8A9-06D6-411A-AF04-2867963E98D2__d204e927"><span>Oracle Database@Azure</span> integrates <span>Oracle Exadata Database
Service</span>, <span>Oracle Real Application Clusters (Oracle
RAC)</span>, and <span>Oracle Data Guard</span> technologies into the Azure platform. Users manage the service on the Azure console and with Azure automation tools. The service is deployed in Azure Virtual Network (VNet) and integrated with the Azure identity and access management system. The OCI and <span>Oracle Database</span> generic metrics and audit logs are natively available in Azure. The service requires users to have an Azure subscription and an OCI tenancy.
</p>
<p id="GUID-48F0D8A9-06D6-411A-AF04-2867963E98D2__d204e938"><span>Autonomous Database</span> is built on Oracle Exadata infrastructure, is self-managing, self-securing, and self-repairing, helping eliminate manual database management and human errors. <span>Autonomous Database</span> enables development of scalable AI-powered apps with any data using built-in AI capabilities using your choice of large language model (LLM) and deployment location.
</p>
<p id="GUID-48F0D8A9-06D6-411A-AF04-2867963E98D2__d204e943">Both <span>Oracle Exadata Database
Service</span> and <span>Oracle Autonomous Database Serverless</span> are easily provisioned through the native Azure Portal, enabling access to the broader Azure ecosystem.
</p>
</li>
</ul>
</div>
</div>
<div class="sect2"><a id="GUID-DC67E72F-8C19-4792-9AFF-DE6DDBC968B8" name="GUID-DC67E72F-8C19-4792-9AFF-DE6DDBC968B8"></a><h3 id="IAIGF-GUID-DC67E72F-8C19-4792-9AFF-DE6DDBC968B8" class="sect3">Recommendations</h3>
<div>
<div><span>Use the following recommendations as a starting point.
</span>Your requirements might differ from the architecture described here.
</div>
<ul style="list-style-type: disc;" id="GUID-DC67E72F-8C19-4792-9AFF-DE6DDBC968B8__UL_FWK_JBG_RKB">
<li>The far sync instance should be far enough from the primary database to
ensure it cant be affected by the same failure or disaster but close enough to
minimize the network latency.</li>
<li>Create two far sync instances per region for high availability. Without
an alternate far sync instance, or if all far sync instances in the primary region
are unavailable, the <span>Oracle Data Guard</span> redo transport will be directly shipped to the standby database in ASYNC mode,
affecting the zero data loss protection, and, depending on the configuration and
distance, it might result in transport lag further impacting RPO.
</li>
<li>As the storage performance of the far sync instance is critical, the
IOPS capacity should be adequate to support the workload. The far sync instance's
storage should have an IOPS performance equal to or better than the primary
database's online redo logs storage.</li>
<li>Use <span>Oracle Data Guard</span> across regions for the databases provisioned in the Exadata VM cluster on <span>Oracle Database@Azure</span> by using an OCI Managed network.
</li>
</ul>
</div>
</div>
<div class="sect2"><a id="GUID-BE8EBF3A-9557-4952-B79B-35AABA5ED0D7" name="GUID-BE8EBF3A-9557-4952-B79B-35AABA5ED0D7"></a><h3 id="IAIGF-GUID-BE8EBF3A-9557-4952-B79B-35AABA5ED0D7" class="sect3">Considerations for Cross-Regional
Disaster Recovery</h3>
<div>
<p>When performing cross-regional disaster recovery for <span>Oracle Exadata Database
Service</span> on <span>Oracle Database@Azure</span>, consider the following.
</p>
<ul style="list-style-type: disc;" id="GUID-BE8EBF3A-9557-4952-B79B-35AABA5ED0D7__UL_AVT_VJ3_C2C">
<li><span>Oracle Cloud
Infrastructure</span> is the preferred network for achieving better performance, measured by latency
and throughput, and for reducing costs, as the first 10 TB/Month are free.
</li>
<li>Far sync is a lightweight instance. However, disk performance is
critical as far sync writes the received redo to disk before acknowledging back to
the primary, which might impact the application performance.</li>
<li>The network performance of the far sync instance is critical for heavy
workloads.</li>
<li>With multiple standby databases and far sync instances, the
configuration might get more complicated. Use the <span>Active Data Guard</span> broker RedoRoutes property to simplify the definition of how redo is transported
to the various destinations.
</li>
<li>Using far sync requires the <span>Active Data Guard</span> option.
</li>
</ul>
</div>
</div>
</div>
</article>
<div id="disclaimers" class="legal">
<div><a href="#copyright-information" role="button" data-toggle="collapse" aria-expanded="false" class="collapsed" aria-controls="copyright-information" id="copyright-information-btn">Title and Copyright Information</a></div>
<div class="collapse" id="copyright-information" aria-expanded="false">
<p class="legal">Deploy Active Data Guard Far Sync to protect data across Oracle Database@Azure regions</p>
<p class="legal">G24005-02</p>
<p class="date legal">February 2025</p>
<div class="legal" style="display:inline"><a href="/pls/topic/lookup?ctx=en/legal&id=cpyr" target="_blank">Copyright ©</a>2025, </div><div class="legal" style="display:inline">Oracle and/or its affiliates.</div>
</div>
</div>
</body>
</html>

View File

@@ -0,0 +1,198 @@
# Deploy Active Data Guard Far Sync to protect data across Oracle Database@Azure regions
- Source: https://docs.oracle.com/en/solutions/active-data-guard-far-sync-oracle-db-at-azure/index.html
- Date: 2025-02
- Type: reference-architecture
- Services: exacs, adg, azure
- Tags: database, multicloud, azure, ha-dr
## Summary (catalog)
Far Sync instance for zero data loss protection across Azure regions. Synchronous redo transport to Far Sync, async to remote standby. Eliminates performance impact of synchronous shipping over long distances.
## Architecture (fetched from source)
Architecture
This reference architecture shows a cross-region disaster recovery with Active Data Guard .
Two Active Data Guard far sync instances are created in the corresponding Oracle Cloud
Infrastructure (OCI) regions. The primary database in Toronto sends the redo data in SYNC mode to
the local far sync instance in Toronto, which forwards the redo data in ASYNC mode to
the standby database in the remote Sydney region.
After a role switch and the database in Sydney becomes the primary, it sends
the redo data in SYNC mode to its local far sync instance in Sydney, which forwards the
redo data in ASYNC mode to the standby database in the remote Toronto region.
The Oracle Exadata Database
Service on the Oracle Database@Azure network is connected to the Exadata client subnet using a dynamic routing gateway
(DRG) managed by Oracle. A DRG is also required to create a peer connection between VCNs
in different regions. Because only one DRG is allowed per VCN in OCI, a second VCN with
its own DRG is required to connect the primary and standby VCNs in each region.
The application is replicated across regions to access the database in the same region
and achieve the lowest latency and highest performance.
The following diagram illustrates this reference architecture.
Description of the illustration active-data-guard-far-sync-dba.png
active-data-guard-far-sync-dba-oracle.zip
Microsoft Azure provides the following components:
- Azure Region
An Azure region is a geographical area in which one or more
physical Azure data centers, called availability zones, reside. Regions
are independent of other regions, and vast distances can
separate them (across countries or even continents).
Azure and OCI regions are localized geographic areas. For Oracle Database@Azure , an Azure region is connected to an OCI region, with availability
zones (AZs) in Azure connected to availability domains (ADs) in OCI. Azure and OCI region pairs are selected to minimize distance
and
latency.
- Azure VNet
Microsoft Azure Virtual Network (VNet) is
the fundamental building block for your private network in
Azure. VNet enables many types of Azure resources, such as
Azure virtual machines (VM), to securely communicate with
each other, the internet, and on-premises networks.
- Azure Delegated Subnet
Subnet delegation is
Microsoft's ability to inject a managed service,
specifically a platform-as-a-service (PaaS) service,
directly into your virtual network. This allows you to
designate or delegate a subnet to be a home for an external
managed service inside of your virtual network, such that
external service acts as a virtual network resource, even
though it is an external PaaS service.
- Azure VNIC
The services in Azure
data centers have physical network interface cards (NICs).
Virtual machine instances communicate using virtual NICs
(VNICs) associated with the physical NICs. Each instance has
a primary VNIC that's automatically created and attached
during launch and is available during the instance's
lifetime.
Oracle Cloud
Infrastructure provides the following components:
- Region
An Oracle Cloud
Infrastructure region is a localized geographic area that contains one or more data centers, called availability domains. Regions are independent of other regions, and vast distances can separate them (across countries or even continents).
- Virtual cloud network (VCN) and subnet
A VCN is a customizable, software-defined network that you set up in an Oracle Cloud
Infrastructure region. Like traditional data center networks, VCNs give you control over your network environment. A VCN can have multiple non-overlapping CIDR blocks that you can change after you create the VCN. You can segment a VCN into subnets, which can be scoped to a region or to an availability domain. Each subnet consists of a contiguous range of addresses that don't overlap with the other subnets in the VCN. You can change the size of a subnet after creation. A subnet can be public or private.
- Route table
Virtual route tables contain rules to route traffic from subnets to destinations outside a VCN, typically through gateways.
- Security list
For each subnet, you can create security rules that specify the source, destination, and type of traffic that must be allowed in and out of the subnet.
- Dynamic routing gateway (DRG)
The DRG is a virtual router that provides a path for private network traffic between VCNs in the same region, between a VCN and a network outside the region, such as a VCN in another Oracle Cloud
Infrastructure region, an on-premises network, or a network in another cloud provider.
- Local peering gateway (LPG)
An LPG enables you to peer one VCN with another
VCN in the same region. Peering means the VCNs communicate using private IP
addresses, without the traffic traversing the internet or routing through your
on-premises network.
- Data Guard
Oracle Data Guard and Oracle Active Data Guard provide a comprehensive set of services that create, maintain, manage, and monitor one or more standby databases and that enable production Oracle databases to remain available without interruption. Oracle Data Guard maintains these standby databases as copies of the production database by using in-memory replication. If the production database becomes unavailable due to a planned or an unplanned outage, Oracle Data Guard can switch any standby database to the production role, minimizing the downtime associated with the outage. Oracle Active Data Guard provides the additional ability to offload read-mostly workloads to standby databases and also provides advanced data protection features.
- Active Data Guard Far Sync
Oracle Active Data Guard Far Sync is a lightweight Oracle database instance that receives redo data
synchronously from the primary database and forwards it asynchronously to one or
more standby databases. It ensures zero data loss at any distance with minimal
impact on the primary database performance and without requiring a local
synchronous standby database.
- Exadata Database Service on Dedicated Infrastructure
Oracle Exadata Database Service on Dedicated
Infrastructure enables you to leverage the power of Exadata in
the cloud. Oracle Exadata Database
Service delivers proven Oracle Database capabilities on purpose-built, optimized Oracle
Exadata infrastructure in the public cloud.
Built-in cloud automation, elastic resource
scaling, security, and fast performance for all
Oracle Database workloads helps you simplify management and
reduce costs.
- Oracle Database@Azure
Oracle Database@Azure is the Oracle Database service ( Oracle Exadata Database Service on Dedicated
Infrastructure and Oracle Autonomous Database Serverless ) running on Oracle Cloud
Infrastructure (OCI), deployed in Microsoft Azure data centers. The service offers features and price parity with OCI. Purchase the service on Azure Marketplace.
Oracle Database@Azure integrates Oracle Exadata Database
Service , Oracle Real Application Clusters (Oracle
RAC) , and Oracle Data Guard technologies into the Azure platform. Users manage the service on the Azure console and with Azure automation tools. The service is deployed in Azure Virtual Network (VNet) and integrated with the Azure identity and access management system. The OCI and Oracle Database generic metrics and audit logs are natively available in Azure. The service requires users to have an Azure subscription and an OCI tenancy.
Autonomous Database is built on Oracle Exadata infrastructure, is self-managing, self-securing, and self-repairing, helping eliminate manual database management and human errors. Autonomous Database enables development of scalable AI-powered apps with any data using built-in AI capabilities using your choice of large language model (LLM) and deploymen

View File

@@ -0,0 +1,555 @@
# Auto-extracted absolute_layout template from
# kb/diagram/assets/archcenter-refs/active-data-guard-far-sync-oracle-db-at-azure/active-data-guard-far-sync-dba-oracle/active-data-guard-far-sync-dba.drawio
# Source: Oracle Architecture Center reference (canonical geometry).
# Use this as the starting scaffold for a new spec — copy, rename ids,
# and replace `type: TODO_identify` on services with the right OCI
# type alias (adb_s, drg, fastconnect, etc.). Container coords and
# edge waypoints are Oracle's canonical layout; preserve unless the
# customer's topology requires a change.
absolute_layout:
canvas:
width: 850
height: 1100
containers:
- id: c1
type: region
label: ''
x: 652
y: 1
w: 676
h: 447
- id: c2
type: region
label: ''
x: 652
y: 585
w: 676
h: 447
- id: c5
type: region
label: ''
x: 965
y: 686
w: 105
h: 36
- id: c50
type: region
label: ''
x: 818
y: 161
w: 99
h: 14
- id: c53
type: region
label: ''
x: 818
y: 855
w: 99
h: 14
- id: c70
type: region
label: ''
x: 1150
y: 377
w: 2
h: 63
- id: c74
type: region
label: ''
x: 1150
y: 657
w: 2
h: 63
- id: c54
type: region
label: ''
x: 776
y: 855
w: 2
h: 50
- id: c58
type: region
label: ''
x: 956
y: 855
w: 2
h: 50
- id: c62
type: region
label: ''
x: 776
y: 161
w: 2
h: 50
- id: c66
type: region
label: ''
x: 956
y: 161
w: 2
h: 50
services:
- id: s3
type: TODO_identify
label: ''
x: 582
y: 34
w: 28
h: 31
- id: s7
type: TODO_identify
label: ''
x: 725
y: 77
w: 42
h: 40
- id: s6
type: TODO_identify
label: ''
x: 726
y: 77
w: 41
h: 39
- id: s8
type: TODO_identify
label: ''
x: 726
y: 78
w: 40
h: 38
- id: s12
type: TODO_identify
label: ''
x: 676
y: 106
w: 41
h: 41
- id: s13
type: TODO_identify
label: ''
x: 676
y: 106
w: 42
h: 42
- id: s14
type: TODO_identify
label: ''
x: 677
y: 120
w: 29
h: 26
- id: s15
type: TODO_identify
label: ''
x: 1260
y: 132
w: 41
h: 41
- id: s16
type: TODO_identify
label: ''
x: 1260
y: 132
w: 42
h: 42
- id: s17
type: TODO_identify
label: ''
x: 1261
y: 146
w: 29
h: 26
- id: s64
type: TODO_identify
label: ''
x: 756
y: 149
w: 42
h: 42
- id: s68
type: TODO_identify
label: ''
x: 936
y: 149
w: 42
h: 42
- id: s63
type: TODO_identify
label: ''
x: 757
y: 150
w: 40
h: 40
- id: s67
type: TODO_identify
label: ''
x: 937
y: 150
w: 40
h: 40
- id: s65
type: TODO_identify
label: ''
x: 758
y: 151
w: 38
h: 38
- id: s69
type: TODO_identify
label: ''
x: 938
y: 151
w: 38
h: 38
- id: s37
type: TODO_identify
label: ''
x: 500
y: 212
w: 48
h: 63
- id: s35
type: TODO_identify
label: ''
x: 1119
y: 212
w: 63
h: 63
- id: s34
type: TODO_identify
label: ''
x: 1120
y: 213
w: 62
h: 62
- id: s36
type: TODO_identify
label: ''
x: 1121
y: 214
w: 60
h: 60
- id: s19
type: TODO_identify
label: ''
x: 676
y: 241
w: 42
h: 42
- id: s18
type: TODO_identify
label: ''
x: 676
y: 242
w: 41
h: 41
- id: s20
type: TODO_identify
label: ''
x: 677
y: 256
w: 29
h: 26
- id: s31
type: TODO_identify
label: ''
x: 107
y: 314
w: 63
h: 63
- id: s30
type: TODO_identify
label: ''
x: 108
y: 315
w: 61
h: 61
- id: s32
type: TODO_identify
label: ''
x: 109
y: 315
w: 60
h: 60
- id: s33
type: TODO_identify
label: ''
x: 129
y: 322
w: 36
h: 41
- id: s72
type: TODO_identify
label: ''
x: 1129
y: 377
w: 42
h: 42
- id: s71
type: TODO_identify
label: ''
x: 1130
y: 378
w: 41
h: 41
- id: s73
type: TODO_identify
label: ''
x: 1130
y: 378
w: 40
h: 40
- id: s43
type: TODO_identify
label: ''
x: 944
y: 466
w: 57
h: 63
- id: s42
type: TODO_identify
label: ''
x: 945
y: 466
w: 55
h: 61
- id: s44
type: TODO_identify
label: ''
x: 946
y: 467
w: 54
h: 60
- id: s45
type: TODO_identify
label: ''
x: 958
y: 485
w: 29
h: 38
- id: s51
type: TODO_identify
label: ''
x: 1130
y: 505
w: 42
h: 29
- id: s52
type: TODO_identify
label: ''
x: 1136
y: 505
w: 29
h: 29
- id: s4
type: TODO_identify
label: ''
x: 582
y: 617
w: 28
h: 31
- id: s76
type: TODO_identify
label: ''
x: 1129
y: 657
w: 42
h: 42
- id: s75
type: TODO_identify
label: ''
x: 1130
y: 658
w: 41
h: 41
- id: s77
type: TODO_identify
label: ''
x: 1130
y: 658
w: 40
h: 40
- id: s10
type: TODO_identify
label: ''
x: 725
y: 661
w: 42
h: 40
- id: s9
type: TODO_identify
label: ''
x: 726
y: 662
w: 41
h: 39
- id: s11
type: TODO_identify
label: ''
x: 726
y: 662
w: 40
h: 38
- id: s22
type: TODO_identify
label: ''
x: 676
y: 690
w: 42
h: 42
- id: s21
type: TODO_identify
label: ''
x: 676
y: 691
w: 41
h: 41
- id: s23
type: TODO_identify
label: ''
x: 677
y: 705
w: 29
h: 26
- id: s24
type: TODO_identify
label: ''
x: 1260
y: 716
w: 41
h: 41
- id: s25
type: TODO_identify
label: ''
x: 1260
y: 716
w: 42
h: 42
- id: s26
type: TODO_identify
label: ''
x: 1261
y: 730
w: 29
h: 26
- id: s39
type: TODO_identify
label: ''
x: 107
y: 745
w: 63
h: 63
- id: s38
type: TODO_identify
label: ''
x: 108
y: 746
w: 61
h: 61
- id: s40
type: TODO_identify
label: ''
x: 109
y: 747
w: 60
h: 60
- id: s41
type: TODO_identify
label: ''
x: 129
y: 753
w: 36
h: 41
- id: s49
type: TODO_identify
label: ''
x: 500
y: 779
w: 48
h: 63
- id: s47
type: TODO_identify
label: ''
x: 1119
y: 821
w: 63
h: 63
- id: s46
type: TODO_identify
label: ''
x: 1120
y: 822
w: 62
h: 62
- id: s48
type: TODO_identify
label: ''
x: 1121
y: 823
w: 60
h: 60
- id: s27
type: TODO_identify
label: ''
x: 676
y: 826
w: 41
h: 41
- id: s28
type: TODO_identify
label: ''
x: 676
y: 826
w: 42
h: 42
- id: s29
type: TODO_identify
label: ''
x: 677
y: 840
w: 29
h: 26
- id: s56
type: TODO_identify
label: ''
x: 756
y: 843
w: 42
h: 42
- id: s60
type: TODO_identify
label: ''
x: 936
y: 843
w: 42
h: 42
- id: s55
type: TODO_identify
label: ''
x: 757
y: 844
w: 40
h: 40
- id: s59
type: TODO_identify
label: ''
x: 937
y: 844
w: 40
h: 40
- id: s57
type: TODO_identify
label: ''
x: 758
y: 845
w: 38
h: 38
- id: s61
type: TODO_identify
label: ''
x: 938
y: 845
w: 38
h: 38
labels: []
connections: []

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 135 KiB

View File

@@ -0,0 +1,7 @@
The diagram you downloaded is available in these formats:
- DRAWIO
- SVG
You can customize them for your organization using the associated tools:
- For DRAWIO format, use draw.io for Confluence, online at diagrams.net, or the desktop app. Go to diagrams.net for more information.
- For SVG format, use an SVG editor such as Inkscape or Sketsa SVG Editor, which are free and available for Windows, macOS, Linux.

View File

@@ -0,0 +1,290 @@
<!DOCTYPE html
SYSTEM "about:legacy-compat">
<html xml:lang="en-us" lang="en-us" class="solution">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="DC.Type" content="concept">
<meta name="DC.Title" content="Deploy Oracle Autonomous Database on Oracle Database@Azure">
<meta name="abstract" content="Provision Oracle Autonomous Database as a highly resilient data store for a micro-services application deployed within a multi-availability zone Microsoft Azure region.">
<meta name="description" content="Provision Oracle Autonomous Database as a highly resilient data store for a micro-services application deployed within a multi-availability zone Microsoft Azure region.">
<meta name="copyright" content="(C) Copyrightfr 2024" type="primary">
<meta name="DC.Rights.Owner" content="(C) Copyrightfr 2024" type="primary">
<meta name="copyright" content="(C) Copyrightfr 2024" type="secondary">
<meta name="DC.Rights.Owner" content="(C) Copyrightfr 2024" type="secondary">
<meta name="DC.Date.Created" content="October 2024">
<meta name="DC.Format" content="XHTML">
<meta name="DC.Identifier" content="GUID-23EC4595-5EC2-4599-B574-1998B3409D9E">
<meta name="DC.Language" content="en-US">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="abstract" content="Provision Oracle Autonomous Database as a highly resilient data store for a micro-services application deployed within a multi-availability zone Microsoft Azure region.">
<meta name="description" content="Provision Oracle Autonomous Database as a highly resilient data store for a micro-services application deployed within a multi-availability zone Microsoft Azure region.">
<title>Deploy Oracle Autonomous Database on Oracle Database@Azure</title>
<meta property="og:site_name" content="Oracle Help Center">
<meta property="og:title" content="Deploy Autonomous Database on Oracle Database@Azure">
<meta property="og:description" content="Provision Oracle Autonomous Database as a highly resilient data store for a micro-services application deployed within a multi-availability zone Microsoft Azure region.">
<link rel="stylesheet" href="/sp_common/book-template/ohc-book-template/css/book.css">
<link rel="shortcut icon" href="/sp_common/book-template/ohc-common/img/favicon.ico">
<meta name="application-name" content="Deploy Autonomous Database on Oracle Database@Azure">
<meta name="generator" content="DITA Open Toolkit version 1.8.5 (Mode = solution)">
<meta name="plugin" content="SP_docbuilder HTML plugin release 18.2.2">
<meta name="keywords" content="AI and Machine Learning,Database,Azure,HA/DR,Serverless,Multicloud">
<link rel="schema.dcterms" href="http://purl.org/dc/terms/">
<meta name="dcterms.created" content="2024-10-07T17:04:33-07:00">
<meta name="dcterms.title" content="Deploy Autonomous Database on Oracle Database@Azure">
<meta name="dcterms.dateCopyrighted" content="2024">
<meta name="dcterms.category" content="solutions">
<meta name="dcterms.identifier" content="G13089-02">
<meta name="dcterms.product" content="en/solutions;en/cloud/saas/analytics;en/cloud/paas/autonomous-data-warehouse-cloud;en/cloud/paas/autonomous-database/serverless;en/cloud/paas/atp-cloud;en/cloud/oracle-cloud-infrastructure/oracle-database-at-azure;en/cloud/paas/autonomous-json-database">
<meta name="dcterms.release" content="Test Release">
<script>
document.write('<style type="text/css">');
document.write('body > .noscript, body > .noscript ~ * { visibility: hidden; }');
document.write('</style>');
</script>
<script data-main="/sp_common/book-template/ohc-book-template/js/book-config" src="/sp_common/book-template/requirejs/require.js"></script>
<script>
if (window.require === undefined) {
document.write('<script data-main="sp_common/book-template/ohc-book-template/js/book-config" src="sp_common/book-template/requirejs/require.js"><\/script>');
document.write('<link href="sp_common/book-template/ohc-book-template/css/book.css" rel="stylesheet"/>');
}
</script>
<script type="application/json" id="ssot-metadata">{"primary":{"category":{"short_name":"solutions","element_name":"Solutions","display_in_url":true},"suite":{"short_name":"reference-architectures","element_name":"Reference Architectures","display_in_url":false},"product_group":{"short_name":"oci","element_name":"OCI Architectures","display_in_url":false}}}</script>
<meta name="dcterms.isVersionOf" content="DEPLOY-AUTONOMOUS-DATABASE-DB-AT-AZURE">
<script type="application/ld+json"> {"@context":"https://schema.org","@type":"WebPage","name":"Deploy Oracle Autonomous Database on Oracle Database@Azure","description":"Provision Oracle Autonomous Database as a highly resilient data store for a micro-services application deployed within a multi-availability zone Microsoft Azure region.","datePublished":"2024-10-07 22:50:46 GMT","dateModified":"2024-10-08 00:07:25 GMT"} </script>
<link rel="alternate" hreflang="en" href="https://docs.oracle.com/en/solutions/deploy-autonomous-database-db-at-azure/index.html">
<link rel="alternate" hreflang="de" href="https://docs.oracle.com/de/solutions/deploy-autonomous-database-db-at-azure/index.html">
<link rel="alternate" hreflang="es" href="https://docs.oracle.com/es/solutions/deploy-autonomous-database-db-at-azure/index.html">
<link rel="alternate" hreflang="fr-CA" href="https://docs.oracle.com/fr-ca/solutions/deploy-autonomous-database-db-at-azure/index.html">
<link rel="alternate" hreflang="zh-CN" href="https://docs.oracle.com/zh-cn/solutions/deploy-autonomous-database-db-at-azure/index.html">
<link rel="alternate" hreflang="ja" href="https://docs.oracle.com/ja/solutions/deploy-autonomous-database-db-at-azure/index.html">
<link rel="alternate" hreflang="fr" href="https://docs.oracle.com/fr/solutions/deploy-autonomous-database-db-at-azure/index.html">
<link rel="alternate" hreflang="it" href="https://docs.oracle.com/it/solutions/deploy-autonomous-database-db-at-azure/index.html">
<link rel="alternate" hreflang="pt-BR" href="https://docs.oracle.com/pt-br/solutions/deploy-autonomous-database-db-at-azure/index.html">
<link rel="alternate" hreflang="ko" href="https://docs.oracle.com/ko/solutions/deploy-autonomous-database-db-at-azure/index.html">
<link rel="alternate" hreflang="zh-TW" href="https://docs.oracle.com/zh-tw/solutions/deploy-autonomous-database-db-at-azure/index.html">
<link rel="alternate" hreflang="x-default" href="https://docs.oracle.com/en/solutions/deploy-autonomous-database-db-at-azure/index.html">
<script>window.ohcglobal || document.write('<script src="/en/dcommon/js/global.js">\x3C/script>')</script></head>
<body>
<div class="noscript alert alert-danger text-center" role="alert">
<a href="index.html" class="pull-left"><span class="glyphicon glyphicon-chevron-left" aria-hidden="true"></span>Previous</a>
<a href="#" class="pull-right">Next<span class="glyphicon glyphicon-chevron-right" aria-hidden="true"></span></a>
<span class="fa fa-exclamation-triangle" aria-hidden="true"></span> JavaScript must be enabled to correctly display this content
</div>
<article>
<header>
<ol class="breadcrumb" vocab="http://schema.org/" typeof="BreadcrumbList">
<li property="itemListElement" typeof="ListItem"><a href="index.html" property="item" typeof="WebPage"><span property="name">Deploy Autonomous Database on Oracle Database@Azure</span></a></li>
<li class="active" property="itemListElement" typeof="ListItem">Deploy Oracle Autonomous Database on Oracle Database@Azure</li>
</ol>
<a id="GUID-23EC4595-5EC2-4599-B574-1998B3409D9E" name="GUID-23EC4595-5EC2-4599-B574-1998B3409D9E"></a>
<h2 id="DADZD-GUID-23EC4595-5EC2-4599-B574-1998B3409D9E" class="sect2">Deploy <span>Oracle Autonomous Database</span> on <span>Oracle Database@Azure</span></h2>
</header>
<div class="ind">
<div>
<p>Provision <span>Oracle Autonomous Database</span> as a highly resilient data store for a micro-services application deployed within a
multi-availability zone Microsoft Azure region.
</p>
<p>Oracle databases provide enterprise-level business continuity by layering
core building blocks like Exadata, <span>Oracle Real Application Clusters (Oracle
RAC)</span>, <span>Data Guard</span>, and Oracle Application Continuity together. To date, these core building blocks
could be configured manually in on-premises environments, semi-manually on <span>Oracle Cloud
Infrastructure</span> (OCI) using the <span>Oracle Exadata Database
Service</span>, or be fully automated using the <span>Oracle Autonomous Database</span> service. The fully managed <span>Oracle Autonomous Database</span> service is now available in an increasing number of <span>Microsoft Azure</span> regions across the globe.
</p>
<p>Many <span>Azure</span> cloud regions provide multiple available zones (AZs) to help maximize business
continuity. These availability zones are unique physical locations that help protect
applications and data from data center failures.
</p>
</div>
<div class="sect2"><a id="GUID-1548A5AA-D6B9-4DAD-AE43-7162769AD34B" name="GUID-1548A5AA-D6B9-4DAD-AE43-7162769AD34B"></a><h3 id="DADZD-GUID-1548A5AA-D6B9-4DAD-AE43-7162769AD34B" class="sect3">Architecture</h3>
<div>
<p>This reference architecture describes some best practices for deploying <span>Oracle Autonomous Database</span> in a <span>Microsoft Azure</span> multi-availability zone (AZ) region.
</p>
<p>Business continuity practices and high availability topologies should always be
considered when designing mission-critical database applications. The architecture below
shows a containerized application using <span>Azure Kubernetes Service</span> (AKS). The container images are stored in the <span>Azure</span> container registry. Users access the application externally through a public load
balancer. Since <span>Oracle Autonomous Database</span> is a PaaS service, there is no administrative control over into which AZ the
Autonomous Database will be provisioned. However, in the unlikely event of an <span>Azure</span> AZ failure, Oracle ensures that a local Autonomous Data Guard standby is always
deployed in a different AZ (data center) from its primary.
</p>
<div class="infoboxnote" id="GUID-1548A5AA-D6B9-4DAD-AE43-7162769AD34B__GUID-5DE78187-7A03-49B7-9852-39A506FFC5C2">
<p class="notep1">Note:</p>If application-to-database-availability-zone affinity is required, Autonomous Database
provides a user queryable database view to determine its AZ placement. Once the AZ of
the Autonomous Database is determined, networking can be aligned as appropriate.
</div>
<p>In the diagram below, the application virtual network (VNet) connects to the database
VNet in availability zone 1 (AZ1) using VNet peering. The AKS-hosted application
accesses the database via a private endpoint that connects to the <span>Oracle Database@Azure</span> delegated subnet. If multi-AZ business continuity is required, Autonomous Data Guard
can optionally be enabled, in which case, it is availability zone 2 (AZ2). Autonomous
Data Guard keeps the primary database and local standby in sync and automatically fails
over in the case of a primary AZ outage. Oracle-managed automatic backups are always
enabled by default.
</p>
<p>The following diagram illustrates this reference architecture.</p><br><div class="imageleft"><img class="imageleft" id="GUID-1548A5AA-D6B9-4DAD-AE43-7162769AD34B__IMAGE_ZJD_5XF_LCC" height="576" width="1168" src="img/autonomous-database-db-azure-diagram.png" alt="Description of autonomous-database-db-azure-diagram.png follows" title="Description of autonomous-database-db-azure-diagram.png follows" longdesc="img_text/autonomous-database-db-azure-diagram.html"><br><a href="img_text/autonomous-database-db-azure-diagram.html">Description of the illustration autonomous-database-db-azure-diagram.png</a></div><br><p><a href="img/autonomous-database-db-azure-diagram-oracle.zip" class="de-download">autonomous-database-db-azure-diagram-oracle.zip</a></p>
<p>The architecture has the following components:</p>
<ul style="list-style-type: disc;" id="GUID-1548A5AA-D6B9-4DAD-AE43-7162769AD34B__UL_QDH_4LM_CKB">
<li><span class="bold">Region</span><p>An <span>Oracle Cloud
Infrastructure</span> region is a localized geographic area that
contains one or more data centers, called
availability domains. Regions are independent of
other regions, and vast distances can separate
them (across countries or even
continents).
</p>
</li>
<li><span class="bold">Virtual cloud network (VCN) and subnets</span><p>A VCN is a customizable,
software-defined network that you set up in an <span>Oracle Cloud
Infrastructure</span> region. Like traditional data center networks,
VCNs give you control over your network
environment. A VCN can have multiple
non-overlapping CIDR blocks that you can change
after you create the VCN. You can segment a VCN
into subnets, which can be scoped to a region or
to an availability domain. Each subnet consists of
a contiguous range of addresses that don't overlap
with the other subnets in the VCN. You can change
the size of a subnet after creation. A subnet can
be public or private.
</p>
</li>
<li><span class="bold">Autonomous
Database</span><p id="GUID-1548A5AA-D6B9-4DAD-AE43-7162769AD34B__d5e89">
<span>Oracle Autonomous Database</span> is a fully managed, preconfigured database
environments that you can use for transaction
processing and data warehousing workloads. You do
not need to configure or manage any hardware, or
install any software. <span>Oracle Cloud
Infrastructure</span> handles creating the database, as well as
backing up, patching, upgrading, and tuning the
database.
</p>
</li>
<li><span class="bold">Object storage</span><p id="GUID-1548A5AA-D6B9-4DAD-AE43-7162769AD34B__d5e725">
<span>Oracle Cloud
Infrastructure</span> Object Storage provides quick access to large
amounts of structured and unstructured data of any
content type, including database backups, analytic
data, and rich content such as images and videos.
You can safely and securely store and then
retrieve data directly from the internet or from
within the cloud platform. You can scale storage
without experiencing any degradation in
performance or service reliability. Use standard
storage for "hot" storage that you need to access
quickly, immediately, and frequently. Use archive
storage for "cold" storage that you retain for
long periods of time and seldom or rarely
access.
</p>
</li>
<li><span class="bold"><span>Azure</span> Container Registry</span><p><span>Azure</span> Container Registry (ACR) is a managed service for storing and managing
container images and related artifacts.
</p>
</li>
<li><span class="bold">Azure availability zone</span><p>An availability zone is a physically separate data
center within a region designed to be available and fault-tolerant. Availability
zones are close enough to have low-latency connections to other availability
zones.</p>
</li>
<li><span class="bold"><span>Azure Kubernetes Service</span></span><p><span>Azure Kubernetes Service</span> (AKS) is a managed Kubernetes service offered by <span>Microsoft Azure</span>.
</p>
</li>
<li><span class="bold"><span>Azure</span> Load Balancer</span><p><span>Azure</span> Load Balancer provides automated traffic distribution from a single entry
point to multiple servers in the back end.
</p>
</li>
<li><span class="bold"><span>Microsoft Azure</span> Virtual Network</span><p><span>Microsoft Azure</span> Virtual Network (VNet) is the fundamental building block for your private
network in Azure. VNet enables many <span>Azure</span> resources, such as Azure virtual machines (VMs), to securely communicate with
each other, the internet, and on-premises networks.
</p>
</li>
<li><span class="bold"><span>Oracle Database@Azure</span></span><p id="GUID-1548A5AA-D6B9-4DAD-AE43-7162769AD34B__d5e822"><span>Oracle Database@Azure</span> is an Oracle Cloud Database service that runs
Oracle Database workloads in your Azure
environment. All hardware for <span>Oracle Database@Azure</span> is colocated in Azure's data centers and uses
Azure networking. The service benefits from the
simplicity, security, and low latency of a single
operating environment within Azure. Federated
identity and access management for <span>Oracle Database@Azure</span> is provided by Microsoft Entra ID. <span>Oracle Database</span> metrics and audit logs are natively available
in Azure. The service requires that users have an
Azure tenancy and an OCI tenancy.
</p>
</li>
</ul>
</div>
</div>
<div class="sect2"><a id="GUID-8B318CF8-81D2-44E5-8D8F-AE74F4E0A422" name="GUID-8B318CF8-81D2-44E5-8D8F-AE74F4E0A422"></a><h3 id="DADZD-GUID-8B318CF8-81D2-44E5-8D8F-AE74F4E0A422" class="sect3">Recommendations</h3>
<div>
<div><span>Use the following recommendations as a starting point.
</span>Your requirements might differ from the architecture described here.
</div>
<ul style="list-style-type: disc;" id="GUID-8B318CF8-81D2-44E5-8D8F-AE74F4E0A422__UL_FWK_JBG_RKB">
<li>Primary and standby database subnets should be in distinct VNets
configured with non-overlapping IP classless inter-domain routing (CIDR)
ranges.</li>
<li>The application tier (AKS, Docker, VMs, etc.) should span at least two
AZs, with the application VNet peered to both the primary and standby VNet of the
<span>Autonomous Database</span>.
</li>
<li>Optionally, client applications can be configured to use Oracle
transparent application continuity (TAP) to maximize availability during planned and
unplanned outages.</li>
</ul>
</div>
</div>
<div class="sect2"><a id="GUID-A13AEEB5-B270-4D38-9142-F89DE81A04CF" name="GUID-A13AEEB5-B270-4D38-9142-F89DE81A04CF"></a><h3 id="DADZD-GUID-A13AEEB5-B270-4D38-9142-F89DE81A04CF" class="sect3">Explore More</h3>
<div>
<p>For more details about the components and considerations shared in this
document, please refer to the following links.</p>
<p>Review these additional resources:</p>
<ul style="list-style-type: disc;">
<li><a href="/pls/topic/lookup?ctx=en/solutions/deploy-autonomous-database-db-at-azure&amp;id=adb-serverless" target="_blank">Oracle Autonomous
Database Serverless</a></li>
<li><a href="/pls/topic/lookup?ctx=en/solutions/deploy-autonomous-database-db-at-azure&amp;id=oracle-database-at-azure" target="_blank">Oracle
Database@Azure</a></li>
<li><a href="/pls/topic/lookup?ctx=en/solutions/deploy-autonomous-database-db-at-azure&amp;id=BODAT" target="_blank"><span><cite>Learn about selecting
network topologies for Oracle Database@Azure</cite></span></a></li>
<li><a href="/pls/topic/lookup?ctx=en/solutions/deploy-autonomous-database-db-at-azure&amp;id=adb-config-app-continuity" target="_blank">Configure Application Continuity on Autonomous
Database</a> in <cite>Using Oracle Autonomous
Database Serverless</cite></li>
<li><a href="/pls/topic/lookup?ctx=en/solutions/deploy-autonomous-database-db-at-azure&amp;id=oracle-db-at-azure-videos" target="_blank">Oracle
Database@Azure Videos</a></li>
<li><a href="/pls/topic/lookup?ctx=en/solutions/deploy-autonomous-database-db-at-azure&amp;id=oci-doc" target="_blank"><span>Oracle Cloud
Infrastructure</span> Documentation</a></li>
<li><a href="/pls/topic/lookup?ctx=en/solutions/deploy-autonomous-database-db-at-azure&amp;id=GVVGQ" target="_blank"><span><cite>Best practices framework
for Oracle Cloud Infrastructure</cite></span></a></li>
<li><a href="/pls/topic/lookup?ctx=en/solutions/deploy-autonomous-database-db-at-azure&amp;id=oci-calc" target="_blank">Oracle Cloud Cost
Estimator</a></li>
<li><a href="/pls/topic/lookup?ctx=en/solutions/deploy-autonomous-database-db-at-azure&amp;id=cloud-adoption-framework" target="_blank">Cloud Adoption
Framework</a></li>
</ul>
</div>
</div>
<div class="sect2"><a id="GUID-EBDB0E20-86F8-4A31-BFD2-84D996FCE557" name="GUID-EBDB0E20-86F8-4A31-BFD2-84D996FCE557"></a><h3 id="DADZD-GUID-EBDB0E20-86F8-4A31-BFD2-84D996FCE557" class="sect3">Acknowledgments</h3>
<div>
<ul style="list-style-type: disc;">
<li><span class="bold">Authors</span>: <span translate="no">Domenick Ficarella, Can Tuzla, Martin
Gubar</span></li>
<li><span class="bold">Contributors</span>: <span translate="no">Wei Han, John Sulyok</span></li>
</ul>
</div>
</div>
</div>
</article>
<div id="disclaimers" class="legal">
<div><a href="#copyright-information" role="button" data-toggle="collapse" aria-expanded="false" class="collapsed" aria-controls="copyright-information" id="copyright-information-btn">Title and Copyright Information</a></div>
<div class="collapse" id="copyright-information" aria-expanded="false">
<p class="legal">Deploy Autonomous Database on Oracle Database@Azure</p>
<p class="legal">G13089-02</p>
<p class="date legal">October 2024</p>
<div class="legal" style="display:inline"><a href="/pls/topic/lookup?ctx=en/legal&id=cpyr" target="_blank">Copyright ©</a>2024, </div><div class="legal" style="display:inline">Oracle and/or its affiliates.</div>
</div>
</div>
</body>
</html>

Binary file not shown.

View File

@@ -0,0 +1,158 @@
# Deploy a multi-agent AI fraud detection system on OCI
- Source: https://docs.oracle.com/en/solutions/ai-fraud-detection/index.html
- Date: 2025-06
- Type: reference-architecture
- Services: genai, streaming, adb-s
- Tags: ai-ml, autonomous
## Summary (catalog)
Multi-agent AI system for real-time fraud detection. Streaming ingestion of transaction data, ML models for anomaly detection, GenAI agents for investigation and decision support.
## Architecture (fetched from source)
Architecture
This architecture shows a multi-agent AI fraud detection system on Oracle Cloud
Infrastructure (OCI).
This design uses multiple AI agents to provide key insights, gather evidence,
and produce a comprehensive fraud analysis.
At the core is a model context protocol (MCP) server that orchestrates agent
interactions. Specialized agents handle distinct tasks. For example, a data retrieval
agent queries enterprise data sources and a fraud analyzer agent evaluates and explains
anomalies. The flow begins when an event, such as a suspicious transaction alert or an
investigators query, triggers the orchestrator. The orchestrator then delegates
subtasks to the agents and consolidates their results by using a fan-in and fan-out
design pattern. Each agent uses OCI-native services to perform tasks (database queries,
LLM inference, and so on), and the orchestrator translates between agent and Oracle
system contexts, ensuring that each agent gets the information it needs in the format it
expects.
The following diagram shows process flow overview:
Description of the illustration ai-fraud-detection-flow.png
ai-fraud-detection-flow-oracle.zip
- MCP orchestrator server
The model context protocol
(MCP) server is the coordinating hub that orchestrates agent actions and
maintains the overall context or state of an investigation. It uses MCP to
standardize how agents invoke tools and exchange data. Acting as a “central
brain,” it receives the initial request (fraud alert or analysis query) and
calls the appropriate agents in sequence. It also translates high-level agent
intents into low-level operations on Oracle systems, such as converting an
agents request for customer information into an SQL query, and converting SQL
results into a natural language response. This approach decouples agents from
direct system calls by using the orchestrator as a bridge between the agent
logic and enterprise data, enabling flexible updates and centralized control. In
the first phase of this architecture, the server is a lightweight server derived
from Googles Gen AI Toolbox running on Oracle Cloud Infrastructure
Compute or OCI Kubernetes Engine .
- Data retrieval agent
The data retrieval agent is
a specialized agent responsible for fetching relevant data from enterprise
sources. For example, upon receiving a customer ID or transaction ID from the
orchestrator, it queries the Oracle Autonomous Database or other OCI data stores for information such as recent transactions, account
profiles, claims history, and so on. You can implement this agent by using OCI Functions (serverless) to call tools hosted on an MCP server for Autonomous Database . The agent contains all data-access logic. The orchestrator server may use a
predefined tool for this agent, such as a YAML-configured
LookupTransaction or GetCustomerProfile
tool that knows how to run the proper SQL on the Autonomous Database . Similar to how Google Gen AI Toolbox uses YAML-defined tools to let agents
perform database operations, this design defines database queries as
configuration-driven tools. In the first phase, the data agent simply executes
these queries without AI decision-making involvement and returns the results to
the orchestrator.
- Fraud analyzer agent
The fraud analyzer agent is
the cornerstone agent that assesses the data for signs of fraud and generates
insights. This agent ingests the context, such as the transaction details,
customer info, or historical patterns provided by the orchestrator and applies
AI/ML logic to determine if the scenario is likely fraudulent. In phase 1, this
could be a rule-based engine or an OCI Anomaly Detection model to provide a
quick, deterministic response. For example, it might flag anomalies such as a
transaction far outside normal range or multiple claims in a short time span.
The agent then produces a fraud score or classification and possibly an
explanation.
In phase 2, the fraud analyzer agent is
augmented with LLM capabilities by using OCI Generative AI or Oracle pretrained models to generate human-readable investigative
narratives. In this way, generative AI automatically creates a concise report of
the findings, summarizing why a transaction was flagged and referencing the data
directly such as how a customers recent transactions show unusual high-value
purchases overseas, which deviates from their normal pattern by 5σ (5 sigma),
indicating high fraud likelihood. Oracles own Financial Services division has
highlighted the value of such generative narratives in accelerating
investigations. In phase 2, the fraud analyzer agent can use an OCI LLM to both
analyze the data and explain the results. For example, it might use a prompt
that incorporates the data and asks the model to analyze the fraud risk, or it
could perform tool-assisted reasoning by first calling a calculation tool, and
then having the LLM elaborate on the results.
- Additional agents (as needed)
The architecture
supports the ability to plug in other agents to enrich the analysis. For
example, an external check agent could call third-party services, such as
sanctions lists or credit bureaus, to gather more evidence on the entity
involved. Another could be a notification and case management agent that, after
fraud is confirmed, logs the case in a system or triggers an alert to a human
investigator. The orchestrators ability to manage multiple agents and
coordinate complex workflows allows new agents to be added without disturbing
existing ones. This modularity makes the system extensible for demo showcases
that can start with two agents and later attach more for other demo scenarios
such as compliance checks, customer messaging, and so on.
Title and Copyright Information
Deploy a multi-agent AI fraud detection system on OCI
G34124-01
June 2025
Copyright © 2025,
Oracle and/or its affiliates.

View File

@@ -0,0 +1,198 @@
# Auto-extracted absolute_layout template from
# kb/diagram/assets/archcenter-refs/ai-fraud-detection/ai-fraud-detection-flow-oracle/ai-fraud-detection-flow.drawio
# Source: Oracle Architecture Center reference (canonical geometry).
# Use this as the starting scaffold for a new spec — copy, rename ids,
# and replace `type: TODO_identify` on services with the right OCI
# type alias (adb_s, drg, fastconnect, etc.). Container coords and
# edge waypoints are Oracle's canonical layout; preserve unless the
# customer's topology requires a change.
absolute_layout:
canvas:
width: 850
height: 1100
containers:
- id: c5
type: region
label: ''
x: 330
y: 381
w: 252
h: 125
- id: c1
type: region
label: ''
x: 330
y: 0
w: 252
h: 49
- id: c2
type: region
label: ''
x: 330
y: 136
w: 252
h: 49
- id: c3
type: region
label: ''
x: 0
y: 247
w: 252
h: 49
- id: c4
type: region
label: ''
x: 0
y: 382
w: 252
h: 49
- id: c6
type: region
label: ''
x: 660
y: 247
w: 252
h: 49
services:
- id: s9
type: TODO_identify
label: ''
x: 584
y: 159
w: 211
h: 87
- id: s10
type: TODO_identify
label: ''
x: 219
y: 169
w: 112
h: 75
- id: s11
type: TODO_identify
label: ''
x: 254
y: 270
w: 117
h: 111
- id: s12
type: TODO_identify
label: ''
x: 542
y: 270
w: 117
h: 111
- id: s23
type: TODO_identify
label: ''
x: 425
y: 416
w: 63
h: 63
- id: s22
type: TODO_identify
label: ''
x: 426
y: 417
w: 61
h: 61
- id: s24
type: TODO_identify
label: ''
x: 426
y: 417
w: 60
h: 60
- id: s25
type: TODO_identify
label: ''
x: 452
y: 423
w: 30
h: 24
- id: s26
type: TODO_identify
label: ''
x: 431
y: 424
w: 51
h: 30
- id: s7
type: TODO_identify
label: ''
x: 119
y: 475
w: 212
h: 67
- id: s8
type: TODO_identify
label: ''
x: 584
y: 475
w: 212
h: 61
- id: s17
type: TODO_identify
label: ''
x: 429
y: 539
w: 58
h: 63
- id: s20
type: TODO_identify
label: ''
x: 768
y: 539
w: 40
h: 63
- id: s16
type: TODO_identify
label: ''
x: 430
y: 540
w: 56
h: 61
- id: s19
type: TODO_identify
label: ''
x: 769
y: 540
w: 38
h: 62
- id: s18
type: TODO_identify
label: ''
x: 430
y: 541
w: 55
h: 59
- id: s21
type: TODO_identify
label: ''
x: 769
y: 541
w: 37
h: 60
- id: s13
type: TODO_identify
label: ''
x: 95
y: 548
w: 61
h: 53
- id: s14
type: TODO_identify
label: ''
x: 95
y: 548
w: 63
h: 55
- id: s15
type: TODO_identify
label: ''
x: 96
y: 549
w: 60
h: 52
labels: []
connections: []

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 46 KiB

View File

@@ -0,0 +1,9 @@
The diagram you downloaded is available in these formats:
- DRAWIO
- SVG
You can customize them for your organization using the associated tools:
- For DRAWIO format, use draw.io for Confluence, online at diagrams.net, or the desktop app. Go to diagrams.net for more information.
- For SVG format, use an SVG editor such as Inkscape or Sketsa SVG Editor, which are free and available for Windows, macOS, Linux.
Note that all diagram components are ungrouped and in a single layer.

View File

@@ -0,0 +1,337 @@
# Deploy a Data Lake leveraging Power BI on Oracle Database@Azure
- Source: https://docs.oracle.com/en/solutions/analytics-pipeline-db-at-azure/index.html
- Date: 2025-02
- Type: reference-architecture
- Services: adb-s, azure, object-storage
- Tags: data-platform, multicloud, azure, autonomous
## Summary (catalog)
Analytics pipeline combining ADB-S on Database@Azure with Power BI. Data ingestion to Object Storage, transformation in ADB-S, visualization via Power BI DirectQuery or Import mode.
## Architecture (fetched from source)
Deploy a Data Lake Leveraging Power BI on Oracle Database@Azure
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
Previous
Next
JavaScript must be enabled to correctly display this content
- Deploy a Data Lake leveraging Power BI on Oracle Database@Azure
- Deploy a Data Lake Leveraging
Power BI on Oracle Database@Azure
Deploy a Data Lake Leveraging
Power BI on Oracle Database@Azure
Many businesses leverage Microsoft Power BI with data lakes on Microsoft
Azure to derive actionable business insights.
You can expand these capabilities by using a medallion architecture
that includes Azure Data Factory, Azure Data Lake Storage, Azure Compute,
Oracle Database@Azure (either a fully managed Oracle Autonomous Database or a co-managed Oracle Exadata Database
Service instance), and Power BI to address several key data challenges faced by
customers:
- Data Silos and Integration : Azure Data Factory ingests data from
diverse sources into a unified data lake, breaking down silos and
providing a single source of truth.
- Data Quality and Consistency : Autonomous Data
Warehouse in the Curation Layer ensures clean, consistent, and high-quality
data through deduplication and quality rules, reducing errors and
enhancing decision-making.
- Scalability and Performance : Azure's scalable
compute resources and Autonomous Data
Warehouse 's serverless architecture or Oracle Exadata Database
Service handle large-scale data processing efficiently, while maintaining
optimal performance as data volumes and user adoption (concurrency)
grow.
- Complex Transformations : Azure Compute and Autonomous Data
Warehouse or Oracle Exadata Database
Service perform complex transformations and analytics efficiently,
reducing processing time and focusing on insights.
- Cost Management : The serverless and pay-as-you-go
models for Azure services and Autonomous Data
Warehouse or Oracle Exadata Database
Service optimize costs, ensuring that you only pay for what you use.
- Data Governance and Compliance : Structured data management layers
facilitate better governance, traceability, and regulatory
compliance.
- Built-in Analytics : Users are able to apply analytics
directly to their data by using built-in features such as artificial
intelligence (AI), machine learning (ML), graph, spatial, and text
analytics.
Typical use cases include:
- Retail Analytics : Integrates data from online sales, in-store
transactions, and customer feedback, optimizing inventory and
marketing strategies.
- Financial Services : Analyzes transaction data for fraud detection
and regulatory compliance, mitigating risks.
- Healthcare Analytics : Integrates patient data from EHRs, lab
results, and wearable devices, improving patient care and health
management.
This architecture enables enterprise customers across industries to
leverage data effectively to empower their business users to make informed
decisions to drive better business outcomes.
Logical Architecture
The analytical data lake can ingest data from multiple sources and can
provide business insights by using Power BI running on Microsoft Azure.
- Data Sources: The analytical data lake can ingest data from multiple
sources. Azure Data Factory can ingest data from Microsoft SQL Server and Azure Blob
Storage. Oracle Database@Azure can ingest data from Oracle Cloud
ERP , Oracle Cloud
Infrastructure Object Storage , Azure Cosmos Database, Azure SQL Database, various types of table storage data
(Azure, PostgresSQL, Azure MariaDB), and other types of on-premises relational
databases.
- Data Tier: Oracle Database@Azure ingests source data from Azure Data Lake Storage in conjunction with Azure Data
Factory.
- Consumption Tier: Oracle Database@Azure provides insights to Microsoft Power BI running on Microsoft Azure.
The following diagram illustrates the functional architecture:
Description of the illustration data-lake-db-azure-process.png
data-lake-db-azure-process-oracle.zip
Medallion Architecture
This section demonstrates how you can deploy Oracle Database@Azure as the data warehouse within the Azure medallion architecture.
The medallion architecture is a data management framework that
structures data handling in a data lakehouse into distinct stages (bronze,
silver, and gold), representing the different stages of data processing:
- Bronze stage: Data from various sources is ingested,
validated, and curated.
- Silver stage: The data is stored and processed for analytics
and reporting.
- Gold stage: Refined data is delivered for analysis and
reporting.
The following diagram illustrates the architecture:
Description of the illustration data-lake-db-azure-medallion.png
data-lake-db-azure-medallion-oracle.zip
The medallion stages are further divided into the following
deployment areas:
- Ingestion Framework: Ingests data from various data sources
using Azure Data Factory. Raw data is stored in Azure Data Lake
Storage Gen 2 and Delta Lake. This framework ensures data
consistency and accuracy across source and sink systems. This
framework constitutes a robust set of scripts to ensure quality by
using audit, balance and control mechanisms across platforms.
- Validation: Raw data is ingested into Oracle Autonomous Data Warehouse Serverless or Oracle Exadata Database
Service for deduplication and data quality check. This workflow performs
basic cleansing masking of PII and PHI data along with validation of
raw files through a rules-driven framework to perform schema checks.
The validation framework can be implemented using Azure Data
Factory.
- Rejection Workflow: Any record that is rejected during the
ingestion stage due to validation errors or other processing errors
is staged on a separate Azure Data Lake Storage path. Automated
email notifications using Logic App are sent to the support team
based on defined software license agreements (SLAs). Standardized
data remains in Oracle Autonomous Data Warehouse Serverless or Oracle Exadata Database
Service .
- Orchestration: A scheduling system manages data processing
jobs, scheduling, and job dependencies. Azure Data Factory can be
used for the orchestration of ETL jobs. The Orchestration stage
includes Oracle Autonomous Data Warehouse Serverless or Oracle Exadata Database
Service , Delta Lake, and Azure Data Lake Storage Gen 2.
- Reporting/Analytics: The reporting stage includes Power BI
and data services such as external feeds and data monetization.
The architecture has the following infrastructure components:
- Region
An Azure region is a
geographical area in which one or more physical Azure data
centers, called availability zones, reside. Regions are
independent of other regions, and vast distances can
separate them (across countries or even continents).
Azure and OCI regions are localized geographic
areas. For Oracle Database@Azure , an Azure region is connected to an OCI region, with
availability zones (AZs) in Azure connected to availability
domains (ADs) in OCI. Azure and OCI region pairs are
selected to minimize distance and latency.
- Availability zone
An availability zone
is a physically separate data center within a region
designed to be available and fault-tolerant. Availability
zones are close enough to have low-latency connections to
other availability zones.
- Virtual network (VNet) and subnet
A
VNet is a virtual network that you define in Azure. A VNet
can have multiple non-overlapping CIDR blocks subnets that
you can add after your create the VNet. You can segment a
VNet into subnets, which can be scoped to a region or to an
availability zones. Each subnet consists of a contiguous
range of addresses that

File diff suppressed because it is too large Load Diff

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 667 KiB

View File

@@ -0,0 +1,575 @@
<mxfile host="Electron" agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) draw.io/25.0.2 Chrome/128.0.6613.186 Electron/32.2.5 Safari/537.36" version="25.0.2">
<diagram name="data-lake-db-at-azure-process" id="data-lake-db-at-azure-process">
<mxGraphModel dx="1194" dy="806" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="850" pageHeight="1100" math="0" shadow="0">
<root>
<mxCell id="0" />
<mxCell id="1" parent="0" />
<UserObject label="" tags="Background" id="2">
<mxCell style="vsdxID=2;fillColor=#FFFFFF;gradientColor=none;shape=stencil(nZBLDoAgDERP0z3SIyjew0SURgSD+Lu9kMZoXLhwN9O+tukAlrNpJg1SzDH4QW/URgNYgZTkjA4UkwJUgGXng+6DX1zLfmoymdXo17xh5zmRJ6Q42BWCfc2oJfdAr+Yv+AP9Cb7OJ3H/2JG1HNGz/84klThPVCc=);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry width="753" height="1176" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="3">
<mxCell style="vsdxID=4;fillColor=#f5f4f2;gradientColor=none;shape=stencil(vVPRDoMgDPwaHjUIidNn5/6DTFQyJqay6f5+OMimMrPEJb6V9sr1Codo1tWs5YjgToO68F4Uukb0iAgRTc1BaBMhmiOalQp4BerWFPbcshE5Rld1H28YbB8eOwh+2FOahnHyypwsmMHZVMGBozCmFg+uAYeU2IwHcYgIO4ohYIPoAlCaaaGaGb1kUPHAkAWlZNWs1PWct17ajSdFM9GSJiE9fCXfrAav7WcHOUvy93Rb1fj72e1pvG/x37usLGYHIT/8YoKP00ohpTXqtL50pklZV9P8CQ==);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry width="227" height="1175" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="4">
<mxCell style="vsdxID=5;fillColor=none;gradientColor=none;shape=stencil(vVPRDoMgDPwaHjUIidNn5/6DTFQyJqay6f5+OMimMrPEJb6V9sr1Codo1tWs5YjgToO68F4Uukb0iAgRTc1BaBMhmiOalQp4BerWFPbcshE5Rld1H28YbB8eOwh+2FOahnHyypwsmMHZVMGBozCmFg+uAYeU2IwHcYgIO4ohYIPoAlCaaaGaGb1kUPHAkAWlZNWs1PWct17ajSdFM9GSJiE9fCXfrAav7WcHOUvy93Rb1fj72e1pvG/x37usLGYHIT/8YoKP00ohpTXqtL50pklZV9P8CQ==);strokeColor=#9e9892;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry width="227" height="1175" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="&lt;div style=&quot;font-size: 1px&quot;&gt;&lt;p style=&quot;text-align:left;margin-left:0;margin-right:0;margin-top:0px;margin-bottom:0px;text-indent:0;vertical-align:middle;direction:ltr;&quot;&gt;&lt;font style=&quot;font-size:16.93px;font-family:Oracle Sans;color:#312d2a;direction:ltr;letter-spacing:0px;line-height:120%;opacity:1&quot;&gt;&lt;b&gt;Data Sources&lt;br/&gt;&lt;/b&gt;&lt;/font&gt;&lt;/p&gt;&lt;/div&gt;" tags="Background" id="5">
<mxCell style="verticalAlign=middle;align=left;overflow=width;vsdxID=6;fillColor=none;gradientColor=none;shape=stencil(nZBLDoAgDERP0z3SIyjew0SURgSD+Lu9kMZoXLhwN9O+tukAlrNpJg1SzDH4QW/URgNYgZTkjA4UkwJUgGXng+6DX1zLfmoymdXo17xh5zmRJ6Q42BWCfc2oJfdAr+Yv+AP9Cb7OJ3H/2JG1HNGz/84klThPVCc=);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="61" y="7" width="203" height="20" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="6">
<mxCell style="vsdxID=8;fillColor=#f5f4f2;gradientColor=none;shape=stencil(vVPRDoMgDPwaHjUIidNn5/6DTFQyJqay6f5+OMimMrPEJb6V9sr1Codo1tWs5YjgToO68F4Uukb0iAgRTc1BaBMhmiOalQp4BerWFPbcshE5Rld1H28YbB8eOwh+2FOahnHyypwsmMHZVMGBozCmFg+uAYeU2IwHcYgIO4ohYIPoAlCaaaGaGb1kUPHAkAWlZNWs1PWct17ajSdFM9GSJiE9fCXfrAav7WcHOUvy93Rb1fj72e1pvG/x37usLGYHIT/8YoKP00ohpTXqtL50pklZV9P8CQ==);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="279" width="227" height="1175" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="7">
<mxCell style="vsdxID=9;fillColor=none;gradientColor=none;shape=stencil(vVPRDoMgDPwaHjUIidNn5/6DTFQyJqay6f5+OMimMrPEJb6V9sr1Codo1tWs5YjgToO68F4Uukb0iAgRTc1BaBMhmiOalQp4BerWFPbcshE5Rld1H28YbB8eOwh+2FOahnHyypwsmMHZVMGBozCmFg+uAYeU2IwHcYgIO4ohYIPoAlCaaaGaGb1kUPHAkAWlZNWs1PWct17ajSdFM9GSJiE9fCXfrAav7WcHOUvy93Rb1fj72e1pvG/x37usLGYHIT/8YoKP00ohpTXqtL50pklZV9P8CQ==);strokeColor=#9e9892;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="279" width="227" height="1175" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="&lt;div style=&quot;font-size: 1px&quot;&gt;&lt;p style=&quot;text-align:left;margin-left:0;margin-right:0;margin-top:0px;margin-bottom:0px;text-indent:0;vertical-align:middle;direction:ltr;&quot;&gt;&lt;font style=&quot;font-size:16.93px;font-family:Oracle Sans;color:#312d2a;direction:ltr;letter-spacing:0px;line-height:120%;opacity:1&quot;&gt;&lt;b&gt;Data Tier&lt;br/&gt;&lt;/b&gt;&lt;/font&gt;&lt;/p&gt;&lt;/div&gt;" tags="Background" id="8">
<mxCell style="verticalAlign=middle;align=left;overflow=width;vsdxID=10;fillColor=none;gradientColor=none;shape=stencil(nZBLDoAgDERP0z3SIyjew0SURgSD+Lu9kMZoXLhwN9O+tukAlrNpJg1SzDH4QW/URgNYgZTkjA4UkwJUgGXng+6DX1zLfmoymdXo17xh5zmRJ6Q42BWCfc2oJfdAr+Yv+AP9Cb7OJ3H/2JG1HNGz/84klThPVCc=);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="356" y="7" width="152" height="20" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="9">
<mxCell style="vsdxID=12;fillColor=#f5f4f2;gradientColor=none;shape=stencil(vVPRDoMgDPwaHjUIidNn5/6DTFQyJqay6f5+OMimMrPEJb6V9sr1Codo1tWs5YjgToO68F4Uukb0iAgRTc1BaBMhmiOalQp4BerWFPbcshE5Rld1H28YbB8eOwh+2FOahnHyypwsmMHZVMGBozCmFg+uAYeU2IwHcYgIO4ohYIPoAlCaaaGaGb1kUPHAkAWlZNWs1PWct17ajSdFM9GSJiE9fCXfrAav7WcHOUvy93Rb1fj72e1pvG/x37usLGYHIT/8YoKP00ohpTXqtL50pklZV9P8CQ==);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="525" width="227" height="1175" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="10">
<mxCell style="vsdxID=13;fillColor=none;gradientColor=none;shape=stencil(vVPRDoMgDPwaHjUIidNn5/6DTFQyJqay6f5+OMimMrPEJb6V9sr1Codo1tWs5YjgToO68F4Uukb0iAgRTc1BaBMhmiOalQp4BerWFPbcshE5Rld1H28YbB8eOwh+2FOahnHyypwsmMHZVMGBozCmFg+uAYeU2IwHcYgIO4ohYIPoAlCaaaGaGb1kUPHAkAWlZNWs1PWct17ajSdFM9GSJiE9fCXfrAav7WcHOUvy93Rb1fj72e1pvG/x37usLGYHIT/8YoKP00ohpTXqtL50pklZV9P8CQ==);strokeColor=#9e9892;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="525" width="227" height="1175" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="&lt;div style=&quot;font-size: 1px&quot;&gt;&lt;p style=&quot;text-align:left;margin-left:0;margin-right:0;margin-top:0px;margin-bottom:0px;text-indent:0;vertical-align:middle;direction:ltr;&quot;&gt;&lt;font style=&quot;font-size:16.93px;font-family:Oracle Sans;color:#312d2a;direction:ltr;letter-spacing:0px;line-height:120%;opacity:1&quot;&gt;&lt;b&gt;Consumption Tier&lt;br/&gt;&lt;/b&gt;&lt;/font&gt;&lt;/p&gt;&lt;/div&gt;" tags="Background" id="11">
<mxCell style="verticalAlign=middle;align=left;overflow=width;vsdxID=14;fillColor=none;gradientColor=none;shape=stencil(nZBLDoAgDERP0z3SIyjew0SURgSD+Lu9kMZoXLhwN9O+tukAlrNpJg1SzDH4QW/URgNYgZTkjA4UkwJUgGXng+6DX1zLfmoymdXo17xh5zmRJ6Q42BWCfc2oJfdAr+Yv+AP9Cb7OJ3H/2JG1HNGz/84klThPVCc=);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="566" y="7" width="270" height="20" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="12">
<mxCell style="vsdxID=17;fillColor=#FFFFFF;gradientColor=none;shape=stencil(lZfdchoxDIWfZm81tuQf+TpN3iPTkMI0hQwhLX37artYxtrsktyB8fFnS9aRGejubfv4uhnQvZ2Oh5+bP7un03agbwPibr/dHHcn+TTQ/UB3z4fj5sfx8L5/mr6/Po4zx0+/Dr/HFc6TDhFCGlXo/k4jjJCmkYdJ8LLbXwmIoMROkCOQXxbMCYlXZmfw/fIpQFlZ3n1pMmDu5zsI4Xr+9/fjFB5fFbFcFJeRGAEv5znjNORbSC4jsZHONA0FGL/+n1RHYtUtwBMEAw8eEvXwApF7ODF47OGeAH1Ppwh5lS6aYvCiwWDOHiBlww8QveGL0OAJEq7iZX9k8KhDik/gisF7MKGXSTVlineQVukZHPd0jC2nlV6AsKfLjQkGLxVg6OPqq4cXFpvYSzqiwcshnO/xXi4I93hJh956srMW+KLhYPiiMbmX6xA+4AfDl2vON/jGYxLE3jJubzgD0WzDNl7cktr2G812GfJ8u341XVQgmNviHWQTruDA23DJkPUJpyVe+aU66AI+UFtYraOWhdITeFspEI1PhALJ+ISvLrAAjwTORN6p41d4TJAM3PVkcWI0YXemEc3skYBzT/a1FSk55bauHtuZmGeBm5iL++Q1eCbNXIXz7NjSGvUi14yjhkvpuWWmOZZfPbtoor1xuXqs4rk104qf9waZxdHguZb/El66TjT4ometfHZAJvaSVBt89jN3llm0WnBMM3+S3DtTcJyADB6BjD0xaxUoPtS4LeALQTDHx6vA1s6cW2W01kgm+4W1W+rDQEyJ1vjeuZ4eeNYZSwE0JSdVSKY5lFRRSk8IpUt+b84lNou4CCJ4WhZkWS99SZA1SfpirI+nDwWyHveCrJ1piRCoE8irl1cE4ov9w7Fm4JNP3huP6k8I5EN7wz/vXl6mvwDXv9s3vwxN/xfo/h8=);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="83" y="47" width="62" height="48" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="13">
<mxCell style="vsdxID=18;fillColor=#FFFFFF;gradientColor=none;shape=stencil(lVnLchs5DPwaXVEkwec5j/9IbZy1ah07pThZ+e+DiQbksKmh5JtMg2qCABoN6sAffj5++fFwcObn6+nlv4f/j19fHw/88eDc8fnx4XR8lU8H/nTgD99eTg//nl5+PX+9/P3jy2K5fPr+8nv5hvNlX0jk4rLLmbfLCv/96/PF+J9fp4u1vfwzWrJqvi45Kvmycnarka9Lb+uSJ/arEa9GmVxZjXSJipuBJ0uAXSj00MmTA2jL5GyPnWIPbBNFO0WO5FMPbTMl8DslsgzghTKCJyqA7wzFuecNrF67Jc+AXygBvnM9eDaUAoA7vbId8MxjzF31QcFzIB8A3NeNFT9R8IAf9Ip28IsjGwC/VDDFL4IPkecw4JdIOfX43urd7uFLpgK+z+QBXhwrPXyQE0HSF7h7Kac1r1bsp+PzpjiLrzFeizM6ym5/gxQV2/dskHpZM69uSOrtdQSppn5DK7nrGyLF1G+Iei93Hinb6YZgyPQUJlGOE6cl4yo/3YXATNkPPkwCxwOrilds33OkJQ4TH1gqsD/SEulJHByF9D77BKlnyE5JSk6kFWBrBTDUiW/p42r4ElBkJIXWGpWAlilHEQM/elfzTrGtJed7cC7EpQe3XptBhZdwrkSyA28DBdfjc6QAFGnFL+BnoagEFC1WSBMsR5pSlDSwAP1JcjbC3UvLMhbw3cBRYlVDpPjS9dMUX/qT7/Fdap1v0wyBIyUfIlC0NLYAwkCWytR/x01M2ArGgC9FVru4qxdnIf5ycLx/e6tFsdQGwPvh+pe7husXKwPhl1hjh25W16kgIunf2pDm1oN3qcWtuge+SQLg1TIlCK1UG4ZWrHh6td60W1NwYS7o/tLELZS2WMHVLp0er9YqcezB85DZufGVoscBXao/A3quBaHoQbftgAfbNI3GgoDUgjSW2GMLEacee6vyNRb7+XFjJrg1QJipS74163XJVFY6t5aQQcuZ2oHrfY51KgU2pWkfGgHqEhlQ8dI4GFI5DiQpWWlzD15oGkvJ/QRFVGoLP2/aEWSxqeGtVbSpNa5WMUzRhdS5R5c9A3yqbPzWeqYBghQrg/hWr3GPofoUGeyH88YhUssePG8YGXVj1Rg1uxvnvULoHEf80uNLYhhkHSYTenxJS5w3UZ8O/bSMI5dpnarpCaiShVEAXXpXgYlLnIu35AzSjsVJeyt5WoNzKKbkQCim3I1mLv3oipZBLeVVkjT4pi3PrbsE5D1/Y9YvTeu3/mcAfjPUKG2YpjeVJFoO6UrQHNrV0AZHTemZQI9mABdWBZIwA3YoU73f0qvNB3EyE5neOOhcfX2YkJi/y96o3t+OQ7NpxVOBwbey6978ZGCk88r7dyKkTLMTDS5kraE7vz97mDr6Db7/9lJ01rpzSLbGTMxtq9u7vj8FHPOX409ERipVpWyG8EkARoRUG+HeY0gYQjxLohFhSaLJ1L48uIUDpOnsklIbU1sdTABKqBr6zg1xeDHy0/ecMjwKlDk75uaySjqpA3iJlGRJ0BgXndpTlBgNb3FFI7DXG4zpwRdGxae4MrwBL0MEoqdhGBDR4ebOx0FFSWMs0JYLN2GqfVnkFzSHYgkaozRvnoq4nNv7RXuIxVdgqbthyjY17+pDrMU3lmVgnt59FkZDDVkGUZJNj2032aEv4O31toJn4qkiklrHETQRvr/nqtO38z3IQbFCSbI8zEwlSYo6S27UoAdNkLhlhy6pV+1pS9o5+F4fefd+c5GSRy1KAaIe228jqhJ64Csj4Iz/51OdfGg/KH07Pj1dfo/a/h9/gJKly49X/OkP);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="82" y="46" width="63" height="50" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="14">
<mxCell style="vsdxID=19;fillColor=#2d5967;gradientColor=none;shape=stencil(lVLLDoMgEPwarhve4Nna/zARK6kVo/b194VyqJhI422ZndmdDYNYOXf1aBDF8zK5q3naZukQOyFK7dCZyS6+QqxCrGzdZC6Tuw9NfI91YIbq5h5hwivqFAeigorid0SIR77AOfJ7O6z4mgCWCZ9ykGxfwAsQqUAREJkNRIPeLlB6n08FCL69gBWZBRJI6ggDEft8fMRNOJekbjDOeMGHpmsGMr01M/vo1/7n++KXo9b2fYzhur/NnYdiZln1AQ==);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="99" y="85" width="30" height="10" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="15">
<mxCell style="vsdxID=20;fillColor=#2d5967;gradientColor=none;shape=stencil(lVLLDoMgEPwarhtegp5t+x8mYiW1atS+/r5QaipUaXrbx8zuDCxi+VgXvUIUj9PQndRNl1ON2A5RqttaDXoyEWJ7xPKqG9Rx6C5t6fK+sEgbnburnXB3PJ5BQiyL4oerEIxf+cHBG90u4HNzBlMOGduGpwwE9wiR2ZIDkb4UU4kMJ4BFqEZE1FivPkGS2f262xTScIFMt/E0gYSHDt6V9QUCiK8IQ8TA19vHxPz5sz/hJvgcUaWbxt3gsh8enSm5g2X7Jw==);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="99" y="78" width="30" height="10" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="16">
<mxCell style="vsdxID=21;fillColor=#2d5967;gradientColor=none;shape=stencil(lVLLDoMgEPwarmQBNXC29j9MxEJqxaD28feFkqai1dbbLszM7mwGsbxXZScRhX6w5ixvuhoUYgdEqW6VtHpwFWIFYnltrDxZM7ZV6LvSI311MVevcA88AuA5FB6hTwFT8Xo5Bnij2wk8EVikEQHWwUvlTeGURPj3Zl/hO9f+CY+PsnRJOObZuj4nGLL5BLLtNsY7BZJsGHDz911zn4E/CK74hKjWTRMyOP2fh849hcCy4gk=);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="99" y="65" width="30" height="15" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="17">
<mxCell style="vsdxID=22;fillColor=#2d5967;gradientColor=none;shape=stencil(lVLLDoIwEPyaXjd90Adn1P8goUgjUgL4+ntbayJFqeG2TGd2Z8IgVoxN2WtE8TgN9qRvppoaxHaIUtM1ejCTmxDbI1bUdtDHwV66Knz3pWf66WyvfsM96GQGRHoVxY+AEIe8gEPgt6ab8RUBLCI+zUCwdUGWA48FkgBPXCAK1PKAVOt8yoFnywRv5PcBASR2hCERAG8x49OS2AzGCSv4a3uesKIYiDhqYvfWP/uf74ZPjWrTtqGF8/dl7RwUKsv2Tw==);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="99" y="78" width="30" height="10" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="18">
<mxCell style="vsdxID=23;fillColor=#2d5967;gradientColor=none;shape=stencil(lVLLDoMgEPwarhve4Nna/zARK6kVo/b194VyqJhI422ZndmdDYNYOXf1aBDF8zK5q3naZukQOyFK7dCZyS6+QqxCrGzdZC6Tuw9NfI91YIbq5h5hwivqFAeigorid0SIR77AOfJ7O6z4mgCWCZ9ykGxfwAsQqUAREJkNRIPeLlB6n08FCL69gBWZBRJI6ggDEft8fMRNOJekbjDOeMGHpmsGMr01M/vo1/7n++KXo9b2fYzhur/NnYdiZln1AQ==);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="99" y="85" width="30" height="10" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="19">
<mxCell style="vsdxID=24;fillColor=#2d5967;gradientColor=none;shape=stencil(nVjLchw3DPyavaJIgs+z4/yHK5ajrSiSS5YT6e+N8Q6BYVPLdfm2osDpAdFoNOfEH77df/p6dwru28vz0z93/58/v9yf+I9TCOfH+7vn84v8OvHHE3/48vR89/fz0/fHz5e/v37aIrdf/z79tz3h9bKvVipt2xXc22WFK/nwc+XPy4a/vj9fdvh9S6a879hXOBGny9Jr2IMi+f7cfYmZeN/4ynuUp1z2qH2JA4U1vKPsAd9TAfzSLKrjO6p+xC9VN3b80CjmFX4pVNuIH+TIPOCXKf+QiRvgZyoe8CNFXuJHapC/L+Qq4Ad9pY7vnb54x8+VMuSfKdUVfE6WWE+fQhnRs6cwgrsROMnx8AjsyC3zTtG2eN0CZU+efIK0iUfsWLUOSjoqS+yYKMcROytQx45MPo/YQkI48eitLvuS18SuoTviChVPBEfOwtsCmWcCdOntCP0m3NkpcAWdi+3p6PIYQDduK7pwC9p90wmo+vaoZfKiBwxH760DO76ctEYZfi0j/kZuqLzQIyz5HgBcuJKg1+QZBegeShdRBfeNGvSa6Na62SQHD5WXk0bSb3WG0gvNGLROomIY8aNsXGqt7AmgNbHN+MlU1PpQo1ijgPgpUFmnL1qYRnhRgQRS63mS+pR6YgYfJqlLuSvpFfw2KU52KgSqdZPi5DwVn6nVEVwEui6J73VadXCZaQnAHSVgXi0UoO0cBci8pb60gz+cHw+mYBfrtz433PXQYEPl98Jb1+d34yOVvAyfpgRxGE+tpndKBhUTTwFDonYXYgWT5yzZKv0NbCnSBXmEFhpOdCldgoysUQeHzuXYWb7oVUg9M7kA+IUS4jsqEfCritybTey29EW+Tb4smVdQrXQqTAetaCjU1mZvNrVTWeEHO2zVqqhsOGj1pJVOZ4fis9God3C+kb9wNaMvZp03ij8PSvGlDbRa6Net8sGX+mX+8pgI/JMp1OetDupAkL45PlOr2HM1eJ0x1+DzlP4Gjz6hTumHyaVEB9ipd8M1g+Qn6m02Go5e/JkDfybWNcGYEs4E8Cg3ranYw4oGLfdrhOEXizqMrhE+OZyS3t8waDJGUfMaukMZmwXark7e9B1TXm9onmhHhJOXLcA5kaEMU0ruIhF6TqYmtLyczno+5zbZI9E3xquQN+NjdWeo+zaPkfO1X2yuXcV4uhaIpQPKl8MM611gV5nDTbB7hoPi3IAvynGFr5rr4SbsgHZyV0B7JBOwgOKLLuYlfpUjA+JtnQj51zl/6URU3JrV1yl+uoHfHAF8clP1W7Cx3JuhKB87fDt8rjA+uqXgi4lCdyq1Bm8sQTjvK/dJZvCsfFSL5mlAH31ROVzkfi9+adPkrdWv/kq4jZD+NqVfCa4dXiMYVmJcM9Sug+rRiQfDUdmqGRqzSjsvr4EXQqfC5oGC1gSvFdFYorw9fD+zS/b4AW08rF/44iY/7Hvdl/PDw+Vz3/H/+H1Pli7fBvnjDw==);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="84" y="48" width="60" height="30" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="&lt;div style=&quot;font-size: 1px&quot;&gt;&lt;p style=&quot;text-align:left;margin-left:0;margin-right:0;margin-top:0px;margin-bottom:0px;text-indent:0;vertical-align:middle;direction:ltr;&quot;&gt;&lt;font style=&quot;font-size:16.93px;font-family:Oracle Sans;color:#000000;direction:ltr;letter-spacing:0px;line-height:120%;opacity:1&quot;&gt;Oracle Cloud ERP&lt;br/&gt;&lt;/font&gt;&lt;/p&gt;&lt;/div&gt;" tags="Background" id="20">
<mxCell style="verticalAlign=middle;align=left;overflow=width;vsdxID=25;fillColor=none;gradientColor=none;shape=stencil(nZBLDoAgDERP0z3SIyjew0SURgSD+Lu9kMZoXLhwN9O+tukAlrNpJg1SzDH4QW/URgNYgZTkjA4UkwJUgGXng+6DX1zLfmoymdXo17xh5zmRJ6Q42BWCfc2oJfdAr+Yv+AP9Cb7OJ3H/2JG1HNGz/84klThPVCc=);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="48" y="100" width="270" height="20" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="21">
<mxCell style="vsdxID=28;fillColor=#FFFFFF;gradientColor=none;shape=stencil(vVPLDoMgEPwajhoE+/Bs7X+QikpKxSy02r8vFtJWrWliE2/L7iyzszCIprpiDUcEawPqzFuRmwrRAyJE1BUHYWyEaIZoWijgJahrnbtzw3pkH13Urb+hc3247yD47k5JEm6SZ+bowAxOtgoeHIW7rcODb8BhHLnMBOIREfYUXcA6oQNQhhmh6gG9ZFDywJIFhWTloKRbzptJ2o8nRf2hJdmHJP5KvlgNntvPCnLG5K/plqqZ7me1p5l8i//eZWYxKwj54RcbvJ1WCCmdUT/rY2falHM1zR4=);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="288" y="272" width="210" height="896" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="22">
<mxCell style="vsdxID=29;fillColor=none;gradientColor=none;shape=stencil(vVPLDoMgEPwajhoE+/Bs7X+QikpKxSy02r8vFtJWrWliE2/L7iyzszCIprpiDUcEawPqzFuRmwrRAyJE1BUHYWyEaIZoWijgJahrnbtzw3pkH13Urb+hc3247yD47k5JEm6SZ+bowAxOtgoeHIW7rcODb8BhHLnMBOIREfYUXcA6oQNQhhmh6gG9ZFDywJIFhWTloKRbzptJ2o8nRf2hJdmHJP5KvlgNntvPCnLG5K/plqqZ7me1p5l8i//eZWYxKwj54RcbvJ1WCCmdUT/rY2falHM1zR4=);strokeColor=#9e9892;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="288" y="272" width="210" height="896" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="&lt;div style=&quot;font-size: 1px&quot;&gt;&lt;p style=&quot;text-align:left;margin-left:0;margin-right:0;margin-top:0px;margin-bottom:0px;text-indent:0;vertical-align:middle;direction:ltr;&quot;&gt;&lt;font style=&quot;font-size:16.93px;font-family:Oracle Sans;color:#312d2a;direction:ltr;letter-spacing:0px;line-height:120%;opacity:1&quot;&gt;&lt;b&gt;Ingestion&lt;br/&gt;&lt;/b&gt;&lt;/font&gt;&lt;/p&gt;&lt;/div&gt;" tags="Background" id="23">
<mxCell style="verticalAlign=middle;align=left;overflow=width;vsdxID=30;fillColor=none;gradientColor=none;shape=stencil(nZBLDoAgDERP0z3SIyjew0SURgSD+Lu9kMZoXLhwN9O+tukAlrNpJg1SzDH4QW/URgNYgZTkjA4UkwJUgGXng+6DX1zLfmoymdXo17xh5zmRJ6Q42BWCfc2oJfdAr+Yv+AP9Cb7OJ3H/2JG1HNGz/84klThPVCc=);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="356" y="279" width="152" height="20" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="24">
<mxCell style="vsdxID=33;fillColor=#FFFFFF;gradientColor=none;shape=stencil(lZTRboMwDEW/hlfLsROSPHfdf1QrXdFYqSjdur9fWIBiENF4S5xzc20rcca72/lwLTLCW9vUH8V3eWzPGb9kROXlXDRlG1YZ7zPeneqmeG/q++UY99dDR3arz/qru+ERdXkOxnUqwp8YUYh/+9eIV+VF4poF7h3kfip4uzfRQPUSBPS9pA95D2xi6EExZBis6ikaKdtDHCPaAuse4iekUvaawCzcB6vBHRfOg89gjdLW5cC83iaUHQ212VSOKBNEYC/zmxQhM050BlOOhkDZmau09Hro/mj5TIsXDK+UKvsyEYyPI8k7UFoKNGCi8cHAyfeZW/C0Lhhe+4g70O7/uGMgvSWdIEhcv6zX2dn3koJwjEoIuitMQsBgSAoMmERHHYGb8zZRcuBp20DZOH/SeFg8R92prKo4Kafn89EYQnGs8v4X);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="85" y="903" width="58" height="61" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="25">
<mxCell style="vsdxID=34;fillColor=#FFFFFF;gradientColor=none;shape=stencil(lVfLctswDPwaXTEkwOc5Tf8j0zi1pq6dcZw2+ftSlUiRUARZN5nGavFcUB09vB2fXg8dqrfb9fLr8Ld/vh07+tYh9ufj4drf0lNHjx09vFyuh5/Xy/v5efz9+jRYDk+/L3+GN3yMOOOBcECh+hxPEMj/P/g+2v94v44APf7vECJNCM0g6gPHk4ig7WQ0HRmIZjKipdF0pA04qtlP/bnytkZM3mhQKAAsKN8CCLzfxeABzS5AACsBPBjdAiKouAcQdD6506UEiG4XgAAlwCKtwYEXChcshJYhvcIIhQsIPrQAAiWkNShwngOcEEMCYNv5KdFWAKRGYFnaBLTWLuPXJkuByRBdMFG3o2UJYjtZyQ3KRrQca5qtjERPGoJh9AVT6BEsMvo02b6lr4yoNIARxq4CrAgB97ZC6IXA4DKi4j75zVRxCWx93ZbMLYlVYhliHowSmWrDUm1ICjyrvmrD2RBV1fi2KBT3T7W+xVikoKS9igCLFXfyqxYtVivcqffLCM78jN4GiHxCYpHQTO8M+MjoQ26Xr8fZlFnMTarUunlSMEu7zLngeQjCWkiAEmYRC7QCwAAt9AuFRk+artuAU4YkRfXgIieQ9pSbbxLTGwKQtAkDl4nkopSjgZ+tTgsoXTBcvk5UmzAKSU0M3nGAF5KUm6Ayt8Ie5OauLIQ73UkAJ913bA6vApggMqi2aM6ClotmTAugPBlrNWB3hXTllFZ/WkCuDdrGvJLuBGyumxqShXCWtKw8tmyXz1arBdETNGFjc6SH+Vr/0p9O41dB/T//DEhH4ycEPf4D);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="84" y="903" width="59" height="63" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="26">
<mxCell style="vsdxID=35;fillColor=#2d5967;gradientColor=none;shape=stencil(lZBLDoAgDERP0z3SIyjew0SURgSD+Lu9kMZoXJi4m+m8Nm0By9k0kwYp5hj8oDdqowGsQEpyRgeKSQEqwLLzQffBL65lPzWZzGr0a56wc5/IHVIc7ArBvmbUknugV3jBH+iPqZ9oEvfiHVnLdz/z96GpxE9CdQI=);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="139" y="955" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="27">
<mxCell style="vsdxID=36;fillColor=#2d5967;gradientColor=none;shape=stencil(lVjbchshDP0av2pAYrk8p+1/ZBqn8TSNM07SJn9ftruAEAHct/Va4ggdXfdANy8Pt8/HA6qX18v55/HP6e714UBfDoinp4fj5fQanw709UA39+fL8cfl/PZ0t/1+vl0l16df59/rCe+b3uIg4KqF6mN7Exaw/1582+S/v102Bb1rLEC0a2ihot5xF0KwYRfCLOR2pHfapdQuQlKkg00evG2wPdXg6MAtAtyA1zW4tuWshI/gRvAWwiLQFVhXoxtwVIN7D1RjM5n9jXfpoB378fTEaGIKuykerB7Zqg2gMNYRWFMbSxZ0baxbQLBkAhhTW7sK4cBaprEraFAzZk0Q5mrQ+iCZXZywV4EWBn/CbHSX8hNqsYa3CwQR1QYEuKVsD6NWQGM6usds5SmTeesTS8JT0d/oG2JTtiVjFwVeGhsgCHOL1CD/dY3PT8Z8a93AW0FUZCUnVIFXuu8tG28aKn81CtJeF4Bc4y8l/OUDLKY22DggYXAsNij8Ffmivr1cYbeXQI8VjJUK6AcKkULhEZcK9JUKmma1RKnagVHDCMKLDGaZxn0MmrKUHiZmix3zyc+wYyH3c2yEZYjNdVKdaiLdGVCiLKhplqkRLMaW5mtYVWPmmM+Q1OQ2k7n2vq2nnfB06+fgp7AzitvgyoHTgWXhN4K1g0rCFDoduDGzaKT4cGDE7EHYtP8cnb2xJwn0Ci7lwvkhkyLPWw58mMDGkky+Ro4Bbge9aT4c/q+8GD5VJWxEZWx6dBwITO0Iygma0xEBbe2JJROXXOGpnJRGGtBD9gOBZB9IzAfxtpJ7XaZTaoSurkNFheWIiDxmYAKP47SbXly7NOf0GijzaKpQbOjClpw0rZVXvdCPIuPu/cnEz49lE78Ev2ounF6+nQu5V7sjP+enO/NPeWcquo0nbCzEJjD7N5/FO3dpKkQlj7BlJzeinJEdzmWaixoyrgl1AeHhvMvTZIVco1nsRWYpyyGLZkGpiRP17GZ20kJWf8lZlB3b31+5iX1Op5dvo9no1CX7Ww6FtO31t5x4s31+vmrL0XHdG1qqqRCQIpJACU/FbqtF0YtRiiL6P5m/ilTPUy4nWsZnJ6etwTaZz63sbw3N/WdrQ+PfeY/gtJUekRafHFksAPpNooms2t4r8jA+lG9Q96fHx+0TFv9ffrOKr7bvXfT1Lw==);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="85" y="904" width="53" height="59" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="28">
<mxCell style="vsdxID=37;fillColor=#2d5967;gradientColor=none;shape=stencil(lZfRchoxDEW/hleNZdmy/Zwm/5FpSGGaQoaQNvn7artrG2mDmb4txvJBV/LVsqG7t93j63bj3dv5dPy5/bN/Ou829G3j/f6w2572Z3na0P2G7p6Pp+2P0/H98DR/fn2cdk5Pv46/pxM+5rhQoIQpyrvPecWBy/8WHub9399PcwAuEQ6QlwisITiHuA8/r5ADjsumugSYlk00r3gPcVn6XJYycBrBMUDUbFlp5/p6iCfN9tiyrPCwYstvLmUEl+81W6RwQbOdBk/yZg2Wn2LAsUAMIzD1Gi0rXABt0kmjU4JsBMcIHDQ7B0hD9lQkk3ZBYEMnhOA1vzB4NpojONT8kgFpxI/SSabizmk4O4im4HKs1V0ki9HAI3g/gqfcu6QnH1jzs2RqxM8R0Gv+pFrR/MQ3Oq4kQNR8zr2s3ghS6dJQZOh9D7XOjDy8ai2idju16n10mU3ixK0WLXFu9nBx1eIwb+r2UfswQIhGd7lcrPG4rruUgjRdLIOGFpfdCl8gGdVTL3GlS6LGZaTpnGk6qm1wBc6+NkXv+GZoFR4ZQtFwp8mXxk5fO/vL/vBfk+DW5Mjtel8bHZJ71qlNMSY3SrUzu5eJ3RWdH3kgo6xUJA29xKdWoMpPHryZXVIhlzWfU4O14eV6LrXYCHHYV9Kd3thJjJDNpcIEbOxMtA6GL2dlk7/IS0M7mypqzFTEbspez1/sPdr8Exh8V/faGJPR5zVepkuyo2Rdfix9V8/VuqkoEoY3S1TMpPmitS2/XC00V0t2FcPn9RgXdcfySxelcDN/6Ug2pirGkswoT91rmrFg9b5r06zYUfpF9eVCBtt90lcm/WmXmeQ3B8plTO3+BAYvE9cZ9TmCufsiEdpRijDMnWVGG1eVFyRj6TH3TV0OZ1tv7awr57tlrasAeeiv6M/7l5f5Df/ye/tKL0vz3wG6/ws=);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="121" y="944" width="14" height="14" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="29">
<mxCell style="vsdxID=38;fillColor=#2d5967;gradientColor=none;shape=stencil(nZjJctswDIafxlcM9+WcJu+RaZzaUzfOOE7rvH3BSiIF0oKo3hwZiIAfH5bxTj98HJ7f9zslPq6X88/9n+PL9bDT33ZKHd8O+8vxip92+nGnH17Pl/2Py/nz7WX4+/05WaZPv86/03+4DX7BQ0hOSnwND7SBKP89eRrsT8c3am8UddAQ7bJDtCAccVAGNOPgLThLHDAivWzvHAhqLxVYzzhgRLF2UIy9Bu+JvVg21g6U7jbOWvdFUqTuTLVI3aclfmu21Kq8vpOGnF8nboIaZ3E7jFPZ3IZIChadqRbw+rQsYHfWKrUOU9yWhtScjD4tbrn7O1mWgqG57RPevGlDPpq2z1fSbQfJiqDtqFopWTsMV5hopu0adGIb02JTv/zH7F+xp7slCojUwVoI3AskSAqodRCYigUBqnKI4EjK3z8vQ0xyLCkaTNiNj5zMnXdTo1WAOFmprL0Yi33T2UpOPT4+cgYck6HHfCpi/JTC/QzxrVRDj6IzDPjMeG4TDYZhEgPQNCTvQTJQYoqmapOsw4LoTkFwVHQfqeJYBFkpPivVpDiW13iqeGHgbrRIkKfRJsqYJWvbsZE5vj/oTYm8z0HXcxVDUkxIRoChEGDSWnGK6wDe1opDLbr2ha4iuqhE1xZMpKJjxRXDlFZTF2ZEHEQmQ4XU0m25Qq3EstLOX+kLpaYAOjsPHUTlUPd2LbpCsirM51NjVFiJwnCBP0+gUWEZy3Yv8DtmnEsseTVuedFDfQ6k8cxI2NgX8jsDQvIllwEmWDkg556VfLYBCvrONpLn0Cf0XV5Ok+RYPl9JjuhrppNVM52R/GCYDBtsFX8B4FUY6BskvxLb1ktBcg4WJF0YRYel4eLKpScbhfNwCdN5lkWfVWsSHSuce0bXGNyfhk0nF9CW5m11hwT2zkkbYIt5U9OVeNISqxKoM24WqCyXxox8KnjasrIRvBrmaXtTuZty1/fBFpra80Pmk2fpwJG0OCsdUTbJvOc4h7yrsgMuNPZemS3BPFVwVWqq92yhfhXmPdW7bOoseFrn3Fmej4H52GR4irKeQjiYFTOFNh/mHQ74ofzG9Ho8nYafqObf179J4aPh9yz9+Bc=);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="114" y="936" width="28" height="28" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="&lt;div style=&quot;font-size: 1px&quot;&gt;&lt;p style=&quot;text-align:left;margin-left:0;margin-right:0;margin-top:0px;margin-bottom:0px;text-indent:0;vertical-align:middle;direction:ltr;&quot;&gt;&lt;font style=&quot;font-size:16.93px;font-family:Oracle Sans;color:#000000;direction:ltr;letter-spacing:0px;line-height:120%;opacity:1&quot;&gt;Microsoft&lt;br/&gt;&lt;/font&gt;&lt;/p&gt;&lt;/div&gt;" tags="Background" id="30">
<mxCell style="verticalAlign=middle;align=left;overflow=width;vsdxID=40;fillColor=none;gradientColor=none;shape=stencil(nZBLDoAgDERP0z3SIyjew0SURgSD+Lu9kMZoXLhwN9O+tukAlrNpJg1SzDH4QW/URgNYgZTkjA4UkwJUgGXng+6DX1zLfmoymdXo17xh5zmRJ6Q42BWCfc2oJfdAr+Yv+AP9Cb7OJ3H/2JG1HNGz/84klThPVCc=);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="77" y="970" width="152" height="20" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="&lt;div style=&quot;font-size: 1px&quot;&gt;&lt;p style=&quot;text-align:left;margin-left:0;margin-right:0;margin-top:0px;margin-bottom:0px;text-indent:0;vertical-align:middle;direction:ltr;&quot;&gt;&lt;font style=&quot;font-size:16.93px;font-family:Oracle Sans;color:#000000;direction:ltr;letter-spacing:0px;line-height:120%;opacity:1&quot;&gt;SQL Server&lt;br/&gt;&lt;/font&gt;&lt;/p&gt;&lt;/div&gt;" tags="Background" id="31">
<mxCell style="verticalAlign=middle;align=left;overflow=width;vsdxID=41;fillColor=none;gradientColor=none;shape=stencil(nZBLDoAgDERP0z3SIyjew0SURgSD+Lu9kMZoXLhwN9O+tukAlrNpJg1SzDH4QW/URgNYgZTkjA4UkwJUgGXng+6DX1zLfmoymdXo17xh5zmRJ6Q42BWCfc2oJfdAr+Yv+AP9Cb7OJ3H/2JG1HNGz/84klThPVCc=);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="71" y="987" width="169" height="20" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="&lt;div style=&quot;font-size: 1px&quot;&gt;&lt;p style=&quot;text-align:left;margin-left:0;margin-right:0;margin-top:0px;margin-bottom:0px;text-indent:0;vertical-align:middle;direction:ltr;&quot;&gt;&lt;font style=&quot;font-size:16.93px;font-family:Oracle Sans;color:#000000;direction:ltr;letter-spacing:0px;line-height:120%;opacity:1&quot;&gt;(on-premises)&lt;br/&gt;&lt;/font&gt;&lt;/p&gt;&lt;/div&gt;" tags="Background" id="32">
<mxCell style="verticalAlign=middle;align=left;overflow=width;vsdxID=42;fillColor=none;gradientColor=none;shape=stencil(nZBLDoAgDERP0z3SIyjew0SURgSD+Lu9kMZoXLhwN9O+tukAlrNpJg1SzDH4QW/URgNYgZTkjA4UkwJUgGXng+6DX1zLfmoymdXo17xh5zmRJ6Q42BWCfc2oJfdAr+Yv+AP9Cb7OJ3H/2JG1HNGz/84klThPVCc=);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="60" y="1004" width="220" height="20" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="33">
<mxCell style="vsdxID=45;fillColor=#FFFFFF;gradientColor=none;shape=stencil(hZNNEoIwDIVP020nbYSha3/uwShIRwSnguLtBVtpU0V3Tfoe+ZIGhutrlV8KJuHamfZU3PWhqxhumJS6qQqju/HEcMtwXbamOJq2bw42vuSTcjqd29v0hcH6VoorNbkkPGxGALzinZXve2P1whlWPMucQVAHDNImXPhwoVI8RadAqnBhlvJEhVVr3QSQQAGRZ78IgdIBR0XxwhYo8RsvnAohXiiZJBxUVJbWnGc0V/RYGEvwe6N0KF6+MMMY0hvE57vIuREhKah/3eXhRDtDQf+u2Hjw61nqurbbHd7H6zym7K+A2yc=);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="86" y="156" width="55" height="61" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="34">
<mxCell style="vsdxID=46;fillColor=#FFFFFF;gradientColor=none;shape=stencil(lVTRcoMgEPwaXpmDQ5TnNPmPTGOqU6sZY9r076sF5cAhJm+47HJ7xwrD3bU6Xkom4Tr03Wf5U5+GiuEbk7Juq7Kvh3HFcM9wd+768qPvbu3Jfl+OE3NafXXf0wl3q1OGGzOpJPxaRHIs/oGD5b/feisQdl9rrnKnEJEE7tIiJueoHMlBipvMkXBNcpBQXOe0elO3xC1VWKTIeC4e2aWSGcq4VKHfsSnUod9RqGVomA4LY1aiPiLXIqpPTpbzBHVcnpjEFQkT3YfjIoLEeGO3RCFW1yZ9RxiaJQFIjyoOVuh1O4hbwYVHjSnBdRQDCNuCsCWYJ7u0BOyVqAJ7KaYQejNmyePsj3bgIAHAtqY+cxJ1s2L1e/hT4zJLNkd30XA857loev6TyfQCsbogufSSRZe4OR5IW9xI2Ljwj+q5bhr7JtP9+BEeIfuA4/4P);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="86" y="155" width="56" height="63" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="35">
<mxCell style="vsdxID=47;fillColor=#2d5967;gradientColor=none;shape=stencil(lVjLctswDPwaXzF8P85p8h+Zxqk9deOMk7Tp3xesRIoAKSq6WTTIBRZYgNJB372dHl+PByXe3m/Xn8c/56f300F/Oyh1fjkdb+d3/HXQ9wd993y9HX/crh8vT9Pz62OyTL9+XX+nEz6nfVKItEeJv/Ozgvh/4WGy/v5xm8wlt58XFPhp4VNNC86DmU3mlXnHp54eTYQYZwtdW6xAagU2UFBBIQXFW1zS9H/dj/FyfqkYoXwED3bkHGMjZvPiG3rvFfWvcDhgJNuswCLJylHo5VQOk3Er5zQ30f1wKTVbxbLPmhZiNKADsXcbpVjvyLRo0Iz/qEAFyoOz4CgPQYEzlAlk2IURvJcQJYOP4CVTg4DoKLwX4FiBdgoArawayiJA9BQ/newovvIQefgxR7bUAZaTbOPXw/gbVSKvlrGPTLPiTymi4JWNLpkPgzKsNsz0mbFIpS2MZ1+R8Vw8RakVCdl9kR1ZvBUgNXV3sVpTqwZhKH598gwWDDiGX3upS9XnHGd8Hj5la1tYe+23hIuVqYd8dJSLe1g6OsI1EgSjo6Nco3OGvq5cY0Ey5XSUaxxItalcPCsOO0dHuelk1jk6yk1emk3lYvxi3Lka5SZiNYVvlYtuey6GRrop9zuUKyOovdJVJu8ZSRexPKuVjnQXq69Ltz55XbrJy23pNvFvabHR1u4N7P6HzBmywUPwI0YUqx1kI7JshLZyIbCu3xHOuIdyxWY3Cyy/ZlkIbbPwLAHD5GML4sUn2SULCbf8eqf4Nas2WrmDdlpk2ZKhl8m5tEirGbhtRNqJGrM+RPcMWgkQimI39V61kPUU40FD4Lp05HKwodipNUYGLxarqjWaNu6NS43hCa8IXW2NmBoG3nbGrYxXO2TZwQL3TZuRoqEdgyw9IF8mh/f0zRaw1562mFR/kdin0a7G9QeC6R0FoVifcXKxyoqw5b1oUIVoNb4hdCZ0ffL6hK69XJ/Q2/E3Ezri7GJDpy3DkPM8KMPxG14zoPFlQewd0F5nlY0GtLeNZtr5XIy+Pp6rc9enc+3i+nRugm+GbdnRJ7fT1R17bU85a19ZLbt5YvoV8xdlFRlby5V5xscfy4ef5/PlMn03qv/nH4pwafrIpO//AQ==);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="87" y="156" width="53" height="60" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="&lt;div style=&quot;font-size: 1px&quot;&gt;&lt;p style=&quot;text-align:left;margin-left:0;margin-right:0;margin-top:0px;margin-bottom:0px;text-indent:0;vertical-align:middle;direction:ltr;&quot;&gt;&lt;font style=&quot;font-size:16.93px;font-family:Oracle Sans;color:#000000;direction:ltr;letter-spacing:0px;line-height:120%;opacity:1&quot;&gt;Other relational&lt;br/&gt;&lt;/font&gt;&lt;/p&gt;&lt;/div&gt;" tags="Background" id="36">
<mxCell style="verticalAlign=middle;align=left;overflow=width;vsdxID=49;fillColor=none;gradientColor=none;shape=stencil(nZBLDoAgDERP0z3SIyjew0SURgSD+Lu9kMZoXLhwN9O+tukAlrNpJg1SzDH4QW/URgNYgZTkjA4UkwJUgGXng+6DX1zLfmoymdXo17xh5zmRJ6Q42BWCfc2oJfdAr+Yv+AP9Cb7OJ3H/2JG1HNGz/84klThPVCc=);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="54" y="222" width="270" height="20" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="&lt;div style=&quot;font-size: 1px&quot;&gt;&lt;p style=&quot;text-align:left;margin-left:0;margin-right:0;margin-top:0px;margin-bottom:0px;text-indent:0;vertical-align:middle;direction:ltr;&quot;&gt;&lt;font style=&quot;font-size:16.93px;font-family:Oracle Sans;color:#000000;direction:ltr;letter-spacing:0px;line-height:120%;opacity:1&quot;&gt;databases&lt;br/&gt;&lt;/font&gt;&lt;/p&gt;&lt;/div&gt;" tags="Background" id="37">
<mxCell style="verticalAlign=middle;align=left;overflow=width;vsdxID=50;fillColor=none;gradientColor=none;shape=stencil(nZBLDoAgDERP0z3SIyjew0SURgSD+Lu9kMZoXLhwN9O+tukAlrNpJg1SzDH4QW/URgNYgZTkjA4UkwJUgGXng+6DX1zLfmoymdXo17xh5zmRJ6Q42BWCfc2oJfdAr+Yv+AP9Cb7OJ3H/2JG1HNGz/84klThPVCc=);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="75" y="239" width="152" height="20" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="&lt;div style=&quot;font-size: 1px&quot;&gt;&lt;p style=&quot;text-align:left;margin-left:0;margin-right:0;margin-top:0px;margin-bottom:0px;text-indent:0;vertical-align:middle;direction:ltr;&quot;&gt;&lt;font style=&quot;font-size:16.93px;font-family:Oracle Sans;color:#000000;direction:ltr;letter-spacing:0px;line-height:120%;opacity:1&quot;&gt;(on-premises)&lt;br/&gt;&lt;/font&gt;&lt;/p&gt;&lt;/div&gt;" tags="Background" id="38">
<mxCell style="verticalAlign=middle;align=left;overflow=width;vsdxID=51;fillColor=none;gradientColor=none;shape=stencil(nZBLDoAgDERP0z3SIyjew0SURgSD+Lu9kMZoXLhwN9O+tukAlrNpJg1SzDH4QW/URgNYgZTkjA4UkwJUgGXng+6DX1zLfmoymdXo17xh5zmRJ6Q42BWCfc2oJfdAr+Yv+AP9Cb7OJ3H/2JG1HNGz/84klThPVCc=);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="60" y="256" width="220" height="20" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="39">
<mxCell style="vsdxID=54;fillColor=#005ba1;gradientColor=#005ba1;shape=stencil(hZPLcoMwDEW/xluNLEGw13n8RyYhxVMCGUPa5O8LtQvIeXQniXvh+CIrXnfV/lIqwq737Wf57Y59pXijiFxTld71Q6V4q3h9an354dtrcwz9ZT8qx+rcfo1vuAVfjoA0ugjvYaJzMPw72QXD4eqDQwcBEWQ6WnTqwRuFEUZFbA1YGwUsBaKNn6xds2BEwWcyIP2ODyWbJTC5ZBtOgFryWQtmJQEzC2QlpMY3mE+ilPIUtChgxUmQ0TGhToMJlEEnoLOGX0QkQWf9k+hTyFms//5kYSTj8hz0uBD8GA+/WLV/A00NQzFv9snVdbgYy+fpTRhG4Rbx9gc=);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="91" y="320" width="47" height="54" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="40">
<mxCell style="vsdxID=55;fillColor=#e8e8e8;gradientColor=none;shape=stencil(lVLLDoMgEPwargR2W/Vu7X+YqpXUikFt8e8rxRck2vS2DDPMDhmCcVumTU6AtZ2Sj/wtsq4keCEAoi5zJbpxIpgQjAup8ruSfZ3Zc5Mappme8mVe0FbHGTMaYIM9nxllwRe5WvqtV5bPfcEEhCGNwEIaFijAiQWeTONqNMkGdDk7zgD0xF3v9dXJhrmuYUQxdH2Z6/kzr5cW+BJt9tzu5a5xkPUw6fb/3DW0/52z43Yv9Dl7WStR/1OFcVhrVIiqsi3c3vu1GyFbWUw+);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="91" y="311" width="47" height="17" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="41">
<mxCell style="vsdxID=56;fillColor=#50e6ff;gradientColor=none;shape=stencil(lVLLDoIwEPyaXpuyCwHPiP9BBKQRgRTQ8veCi+kjgehtO53tzDTDMB3qvC8ZiGFU3b18yWKsGZ4ZgGzrUslxmRhmDNOqU+VNdVNb0LnPV+Y6Pbrn+oKmvUCIdQfETOfwxBP8IBeiXydF/MBf2IA45lFEkAYD4cYCb00jAZHg4stBl7OjDMDD2NU2r24ywlW1vaHLwB/zemkXE4EradtyXRxEPQxqf5/rQvu/ORsTkLiqhrMXtZHtP01YBtOiSjYNldC+91u3QNRYzN4=);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="96" y="314" width="36" height="11" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="42">
<mxCell style="vsdxID=57;fillColor=#198ab3;gradientColor=none;shape=stencil(lZJNcsMgDIVPw1YDCGO0TtJ7ZBqnZuLYGeK0ye0DFfmBhTvdicd7+oQtgatzvz11QsvzHKZD9+N3cy9wLbT2Y98FP8dK4Ebgaj+F7itMl3HH59M2OVN1nL5ThyvnDAG1KaXljRWERv0KH+z/vAQOqHyPIHVOZEmCJVaumhVlQT1ML8llE+ZYNuRjo0AtklNTLMnOQGtLdJrPVGgpS/L7q7NEsblZolsL1JR0IjCqpDsEKuFOA1GJf87zgJsWbLMEj21d9dGVAargaURV0v9+eP2/Bz/+az9i8VquvR8G3s33+3oZo8SLjJs7);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="100" y="320" width="28" height="4" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="43">
<mxCell style="vsdxID=58;fillColor=#f2f2f2;gradientColor=#E6E6E6;shape=stencil(pVnLchw3DPyavaJIgs+zY/+Hy5ajrSiSay0n8t8HzA5BTlPDlUs3eUyqB0CjGxid+MOP+8/f707O/Hi+PP119+/56/P9if84OXd+vL+7nJ/lpxN/PPGHb0+Xuz8vTz8fv17//f1zPVl/+vvpn/obXq73sqcc6i1nfl2fxEgm///k0/XCw/lxecESHx9P8tvKe46nQqUcX7DGvOf4bwf7/gv7/NtAvL/AntwuQ19+Xq437HaFKfjtyvaIHV0xzIvbDlnKcTu0PWKjh7hlg7hle3vkMrFdoWt+FdwlCnvwQjHvsV3Ud27ghXwG7EC+rLFdBmxP3iO4LQDOxA7BnQVwR26NbRHbtsoO2LyHtpKuhNAh7qFtbocOsbPbY9tEJULFDTkAT2TtVPEIWbfxRtYrlRLAC82RcDzF7nt+WB8lD/C+leIIPvda9Q4oUHUpRkT8QAXKXumSAF+SuxCk8cbWRsRx9b5V4CK8L1mGbGUyYf+6ph86zpYhv8yV0cQ0bLMHTp3GLXPkgKGeLDA0Ul7WyLUcKmxuN3rIlNIeWYjFSBAy2ByeeCmHomEQsvDeATsNxGwoADVML0gjC1PKa2S90nS4S3NDZrJ+D+7tVOnSkBTcx2Ykx13Z2N3Qfabo9ui1U4BnQTiCqhC0Wg0/MMUlzUU2HNA8SK9g0ePUliFowV66BGXwoRCbNR3hp57Yhp/IgxNVKgDrgmQJ4IdDDb40th7DoxdFSSy2eZqqH92sirELbGs4btJ9nH7IfpS2xegjWkIMZDD5gZIDdHm0Rvd9cGjwSWVa4Z26hOKnSZOrCkDnyam0JJ8U2k3wCeCFwZh7r4nubZ+Q+Vj6vSEMF7Z3SU1LDl6WlRYqjqbFN+hygD7JbppaJFUWUiWnzFonQhsnO7xTMC3VMFo5fUlQKZH5CH6UQrOoI2fgaXZJs0iK5SgHW0KMTtKKH/pLdqasZVLuoDVVFkD2xeAMdooMFDN+hvhFTNbDU70DnSLSGsCe5JSB8vvBQbshAbwPsFy8MoygSvo2Q4zDCMPIzJGgUcZFZXs0bSqwa91ebfa7kKxKOjlpqZY6EDMFGE3FBBjii/M+Itlta0wLUE4FCFBSFZbsljs4fDBjeuUlHXiw8M2DCY3Bt3qbG6NPZTLOPqLMCfCdgjX8QmACInptIOozn1mCi0MHsCBHCRxIuA59ZXVo0nGzEK4ktHQfmY0s9LSZFgIvImf30E5FpkFzadvuEPZ6+5bOcNDQBfdf4UAG7MExFdyRBdu/WXHZ4T3MnGIdBvDrGwHhpfU84Nc1HfXENR080pOiqjhOnSCn41v2qc+BnLHV3ViTrwZ3FD93LnfnNzhzB4Lwk+0EafCZAF3MzC3RvZ2iT7mTqjEPQhcjjdDskjPPe3A5lRdjh3SbtvrGqO1T1qvHqzCWtx+vvZx3x9PS1WTUjdCBSQZSFB5P0AVShgDd/4ruoepDaDddYu8qc2w3h3shK7iKEBNne9l2AqwWkadKVwEsU3h52WRBuhC+eMhErn7V9zhQdckMZtcPX8N6wv0yeq/Td4fvWq8sj93d+3JRYLWpAwr2uL+xVnvu27DVxAYgl0hVxPgtJdA43x8N831Yxi+mkKDLpdYG8Kt8AL4kjmFklt9lwGBuDhX1NwP9RPbQWetbAn51AnczfnHXsLbX7pM6VRRlseaf+2Dbt90AGu/D9KFVltKlxQmxAmiLTJIG4ZNybbBYj1+yin4eHr4nrcMPffEYhipwGGlRFyd4HCnrpO+m6NefO4Of2C959Sg+oX8yGFY46H6Rvvi71e+fR4YBw4LF1R6CfaXOPIBedIF9M/flTgT42lUofXka6CVtDmfaQfjfttu/wSrkh/6ntG/nh4frX+LG/8c/vcmj65/t+ON/);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="97" y="339" width="38" height="19" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="&lt;div style=&quot;font-size: 1px&quot;&gt;&lt;p style=&quot;text-align:left;margin-left:0;margin-right:0;margin-top:0px;margin-bottom:0px;text-indent:0;vertical-align:middle;direction:ltr;&quot;&gt;&lt;font style=&quot;font-size:16.93px;font-family:Oracle Sans;color:#000000;direction:ltr;letter-spacing:0px;line-height:120%;opacity:1&quot;&gt;Azure SQL&lt;br/&gt;&lt;/font&gt;&lt;/p&gt;&lt;/div&gt;" tags="Background" id="44">
<mxCell style="verticalAlign=middle;align=left;overflow=width;vsdxID=60;fillColor=none;gradientColor=none;shape=stencil(nZBLDoAgDERP0z3SIyjew0SURgSD+Lu9kMZoXLhwN9O+tukAlrNpJg1SzDH4QW/URgNYgZTkjA4UkwJUgGXng+6DX1zLfmoymdXo17xh5zmRJ6Q42BWCfc2oJfdAr+Yv+AP9Cb7OJ3H/2JG1HNGz/84klThPVCc=);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="74" y="378" width="152" height="20" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="&lt;div style=&quot;font-size: 1px&quot;&gt;&lt;p style=&quot;text-align:left;margin-left:0;margin-right:0;margin-top:0px;margin-bottom:0px;text-indent:0;vertical-align:middle;direction:ltr;&quot;&gt;&lt;font style=&quot;font-size:16.93px;font-family:Oracle Sans;color:#000000;direction:ltr;letter-spacing:0px;line-height:120%;opacity:1&quot;&gt;Database&lt;br/&gt;&lt;/font&gt;&lt;/p&gt;&lt;/div&gt;" tags="Background" id="45">
<mxCell style="verticalAlign=middle;align=left;overflow=width;vsdxID=61;fillColor=none;gradientColor=none;shape=stencil(nZBLDoAgDERP0z3SIyjew0SURgSD+Lu9kMZoXLhwN9O+tukAlrNpJg1SzDH4QW/URgNYgZTkjA4UkwJUgGXng+6DX1zLfmoymdXo17xh5zmRJ6Q42BWCfc2oJfdAr+Yv+AP9Cb7OJ3H/2JG1HNGz/84klThPVCc=);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="78" y="395" width="135" height="20" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="46">
<mxCell style="vsdxID=64;fillColor=#FFFFFF;gradientColor=none;shape=stencil(nZBLCoAwDERPk31tjuDnHoLVBmsrtf5ub0sQRdzobiZ5ycAA5pOuRwVSTMG7Xq3UBA1YgJRktfIUogIsAfPWedV5N9uG/VgnMqnBLenDxneZEOlGip09u4pRQ/aG/gTPhFf0Gf8J/otGcdXRkjHc5n3/rC+OuHosDw==);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="83" y="451" width="61" height="61" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="47">
<mxCell style="vsdxID=65;fillColor=#FFFFFF;gradientColor=none;shape=stencil(UzV2Ls5ILEhVNTIoLinKz04tz0wpyVA1dlE1MsrMy0gtyiwBslSNXVWNndPyi1LTi/JL81Ig/IJEkEoQKze/DGRCBUSfpbmemRFIl5FBJUTESM/YAizgBlGfk5mHVz1CBKsGuHHkqifVPZSqRw0fQwMDFNUGuI0mUyHMBqxK0a0nSTG5SoEMRHJJy8zJgaQ2ZHn05AUUgiRNY1cA);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="82" y="451" width="63" height="63" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="48">
<mxCell style="vsdxID=66;fillColor=#2d5967;gradientColor=none;shape=stencil(pZrdbqMwFISfhlsLbLDxdX/eo1LTDdo0qdJ0f95+QShq6WFnPOQuDd/Y33EzKqmowt37/ultV/n6/XI+/dz9Hp4v+yrcV94Px/3uPFzGV1V4qMLdy+m8+3E+fRyf55/fniZyevV6+jWt8GfO9a7vppCv/85v5MY18zuPM38Yjl94n24O9BEGjJHKEyHOL0+orZ20fpdv5Mm8xkfliQ/nl+eT/PVy4QaflzcHyMhWSQ4QpYIA6VnvnU9SbdRASjBgjFSeCHGe9Iysb3sj8mRe46PyxIfzrGdkg5XaqAEyslWSA0SpIEB6loJrvVQbNRB7GDBGKk+EOE96Rta3vRF5Mq/xUXniw3nWM7LBSm3UABnZKskBolQQID2Lreuk20A5MH2wlPs6lSdCnCc9I+vb3og8mdf4qDzx4TzrGdlgpTZqgIxsleQAUSoIkJ51nZPuAmW+RrzVEXFoQ3HSMLy6LYyIw1GtjIhDGYqzbuHlV5qi8nDaFR+Vhz6cJ61qo+ulmz490MCANVJ5LMR50i2yvmmLzON5rY/KYx/Os4aRDWxl9AAeeUVJDmClggDpWUguS3+O9IB3uRd6IPNYiPOkZ2R90xuZx/NaH5XHPpxnPSMb2NroATzyipIcwEoFAdIzn10TlNrogRYGrJHKYyHOk56R9U1vZB7Pa31UHvtwnvWMbGBrowfwyCtKcgArFQSWp/QNrp0H3/VC4+KNgYy+/28kiQSBl+cRootBWT0GdxuP5hxtkgJr6gWB5eHE/vqf6sIdsvSLyuUfgNEkSLTmXRBANZIaIcFN58Dd7Ha2uD64Oql0UdMChcWDGQ0RV+qIuxKKzzhvJfFs1kHlpQqC06iXFnX9/3WvFzfBAN0Iwu0hOr74fEblZTgc5kdcvl7//kzL+Nb8PEx4+Ac=);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="84" y="452" width="60" height="60" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="&lt;div style=&quot;font-size: 1px&quot;&gt;&lt;p style=&quot;text-align:left;margin-left:0;margin-right:0;margin-top:0px;margin-bottom:0px;text-indent:0;vertical-align:middle;direction:ltr;&quot;&gt;&lt;font style=&quot;font-size:16.93px;font-family:Oracle Sans;color:#000000;direction:ltr;letter-spacing:0px;line-height:120%;opacity:1&quot;&gt;Table storage&lt;br/&gt;&lt;/font&gt;&lt;/p&gt;&lt;/div&gt;" tags="Background" id="49">
<mxCell style="verticalAlign=middle;align=left;overflow=width;vsdxID=68;fillColor=none;gradientColor=none;shape=stencil(nZBLDoAgDERP0z3SIyjew0SURgSD+Lu9kMZoXLhwN9O+tukAlrNpJg1SzDH4QW/URgNYgZTkjA4UkwJUgGXng+6DX1zLfmoymdXo17xh5zmRJ6Q42BWCfc2oJfdAr+Yv+AP9Cb7OJ3H/2JG1HNGz/84klThPVCc=);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="63" y="518" width="220" height="20" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="&lt;div style=&quot;font-size: 1px&quot;&gt;&lt;p style=&quot;text-align:left;margin-left:0;margin-right:0;margin-top:0px;margin-bottom:0px;text-indent:0;vertical-align:middle;direction:ltr;&quot;&gt;&lt;font style=&quot;font-size:16.93px;font-family:Oracle Sans;color:#000000;direction:ltr;letter-spacing:0px;line-height:120%;opacity:1&quot;&gt;Azure&lt;br/&gt;&lt;/font&gt;&lt;/p&gt;&lt;/div&gt;" tags="Background" id="50">
<mxCell style="verticalAlign=middle;align=left;overflow=width;vsdxID=69;fillColor=none;gradientColor=none;shape=stencil(nZBLDoAgDERP0z3SIyjew0SURgSD+Lu9kMZoXLhwN9O+tukAlrNpJg1SzDH4QW/URgNYgZTkjA4UkwJUgGXng+6DX1zLfmoymdXo17xh5zmRJ6Q42BWCfc2oJfdAr+Yv+AP9Cb7OJ3H/2JG1HNGz/84klThPVCc=);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="92" y="535" width="84" height="20" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="&lt;div style=&quot;font-size: 1px&quot;&gt;&lt;p style=&quot;text-align:left;margin-left:0;margin-right:0;margin-top:0px;margin-bottom:0px;text-indent:0;vertical-align:middle;direction:ltr;&quot;&gt;&lt;font style=&quot;font-size:16.93px;font-family:Oracle Sans;color:#000000;direction:ltr;letter-spacing:0px;line-height:120%;opacity:1&quot;&gt;PostgresSQL&lt;br/&gt;&lt;/font&gt;&lt;/p&gt;&lt;/div&gt;" tags="Background" id="51">
<mxCell style="verticalAlign=middle;align=left;overflow=width;vsdxID=70;fillColor=none;gradientColor=none;shape=stencil(nZBLDoAgDERP0z3SIyjew0SURgSD+Lu9kMZoXLhwN9O+tukAlrNpJg1SzDH4QW/URgNYgZTkjA4UkwJUgGXng+6DX1zLfmoymdXo17xh5zmRJ6Q42BWCfc2oJfdAr+Yv+AP9Cb7OJ3H/2JG1HNGz/84klThPVCc=);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="65" y="552" width="186" height="20" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="&lt;div style=&quot;font-size: 1px&quot;&gt;&lt;p style=&quot;text-align:left;margin-left:0;margin-right:0;margin-top:0px;margin-bottom:0px;text-indent:0;vertical-align:middle;direction:ltr;&quot;&gt;&lt;font style=&quot;font-size:16.93px;font-family:Oracle Sans;color:#000000;direction:ltr;letter-spacing:0px;line-height:120%;opacity:1&quot;&gt;Azure MariaDB&lt;br/&gt;&lt;/font&gt;&lt;/p&gt;&lt;/div&gt;" tags="Background" id="52">
<mxCell style="verticalAlign=middle;align=left;overflow=width;vsdxID=71;fillColor=none;gradientColor=none;shape=stencil(nZBLDoAgDERP0z3SIyjew0SURgSD+Lu9kMZoXLhwN9O+tukAlrNpJg1SzDH4QW/URgNYgZTkjA4UkwJUgGXng+6DX1zLfmoymdXo17xh5zmRJ6Q42BWCfc2oJfdAr+Yv+AP9Cb7OJ3H/2JG1HNGz/84klThPVCc=);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="56" y="569" width="220" height="20" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="53">
<mxCell style="vsdxID=74;fillColor=#50e6ff;gradientColor=none;shape=stencil(lZjdUhsxDIWfZm89trz+u6b0PZgSSqaUMCG08Pa1ullbPs46cJds5Hz+0TnSerI3r493L7uJ9OvpePi1+7u/Pz1O9ttEtH9+3B33p/xpsreTvXk4HHc/j4e35/vl+8sdR/Kn34c//A/vyzinlXY8ivTH8sRo/f/79yX8x9txiTfLz3NSzp8HmHaEfqcSo8M55vwoJZXMOcqeo6LydI6yJSrQkB6VAXoe4yzwgwqu45MHflAz4KNKY3you2XKGBcA71WIgM/zdoD3yiXg53kP8V7NBvBBkevw1gA+zwhXL6JsiaJrfNvio1PaAN6oCPgwK4LDt1ZF2+J9xs8jPDkVYfddXKdc+CZPiVq+s+VACl8FwHPQcPVUk8rgkEpXsWNbYBsFG+9I+ThC65KpK9molFqyLidR0EbpuUVrAOdBfghusSz+gFigsvgTUBXFFszaH551XnEAdpZQRDbKnJUfJthtDTJj4dsR3KgZ9puFD3BTk7EKL0KaUyeyHOSHHkNFqh9C9uBwdpWKhFs47D7Ha9DWyrN4bEe3IHEWogd8SXypcPBXfmSGBiO8Q4ieOoOj1OKN8KG6Vsy6siHb/kaQdXWjpb1CcavOIM3dtXBS19gBkq5mmChsKHJTc6Omt/Utu2hgu64F2HddplPgWYBgrFWloqg72PWi/u2OAnNOVwupruIQ3pKdMMDG7TawOR7sHLqYHJASrhetzQmv+OR62btxuTO4qqOuhosDEWXjiwftYKNN5yy5XhGUMJGHtVYWe/5ceucRHrZbqEbUafBUoT9Rp9FXruha/u+68LkroNxL2JaezSfAgXOX0rlaGBbR3P4YLGamePOKj3lGsPHsRyBu7tHgzOfyaIPP3R8sv44pfO4kL9QUOPnSokq8G9YU0fsKPC6f+2isKeAt3J5jNQ3rDLfgte8XtRzUJl4hPoTZQUGpLyeyjXHjra+vPaKHWvvT0kqsL1Cih4J9ryG2hKSh1OuIanhz7BaesGnMrof73i+cbW/Yxcgtrb4X+40nOPRsagSdxIVzZ+u7lnT4mprHJFy/SE3hf1dznv1vjBdiEg6IOe87v2OrIsD3kq9RG3xpJsIEoaJLY+pNcNvx8hMzLjPCSoUJXrB7cBye9wW/B35aZzTwe2rx+UAM+n1+M4OWgvMBVs+Zhvi4vrsOKjzy+1sKVhpeE6Qy8L3Tubwlaa8pnvbPX7nS+WJ4/lBvjx72T0/L5ZP8HW+b8qPlpsre/gM=);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="82" y="626" width="17" height="17" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="54">
<mxCell style="vsdxID=75;fillColor=#50e6ff;gradientColor=none;shape=stencil(lZfZctswDEW/Rq8YLgKX5zT5j0zjNJ6mccZx2vjvC1YSl8sxXb/ZMugjErgX4GTvPl4e33eTUR+n4+Hn7s/+6fQy2W+TMfu3l91xf5JPk72f7N3z4bj7cTx8vj0t398fU2T69OvwO/3D17KOFSmbVhl1Xp5opf59f1jCv38el3i9/DxHUvO6QLcr1JdZYwKpuMasj2Ikp9cou0Z5slvU+igGikO4IxdbuCwxGvCOLNA9GQZ6Cdrgjoy/Qrca6IqcBzpT+l7jA5PGzVtSoeX7SNEO+Yoit3w/k3ct33oKwPeSZNi+tRRcy3duy9oFvokEh+8MadviDed8bHiWrIYWb6qyWx+xozCP8Hour7w+4jnXw8aPZGH3bMnB5skbgG8xl7ZOHoq++teVoyl0YANp16QBbIjNiKwIwTrndyPLYeKRKwqxRasWPMex1FRLFUlHjVQLIhdFR4cbVqBxCTLDs9bkocxEeAyHLQkBjUuQ9tOVPJegS3Du0BoqTCo8wHHPOtdHLTDItTzyYSjwUkK6sEBgvbtpJmVaegqagb6d2MDdoNTkkLmD47mXdFXGPoO4t7q/xA7ZR84aqyuzpfP4lq1acGpmYGrDXiZSUpBv6GQMXlK9VRGwv2mv4grYP8sJFufwoK0qF7YP+s8c10ug4L+KWRs45VSELVpahbm1uKVVabDvJBvQdZhLjys1h807tepO2GaIlyUe6Lnfl+bhs9orukW6J8cdnofNS8YUrTv+Zk+ZH4jR1sDTJCTA4JAGqTE8koGakzVd54zE6GuhG1wkykPqJYqHjh67wSFpGfaep8hz0Ttj+1TQxTi3vkt+rqCRyQru9g05l5gYr25b3GPmK9tmyLmswTZaJye7Th5iBmmXKDfsZXU1FQNQyK8qsxpccP99zScjG/MrNVVTEyi+EmblflcFn4KGRZ+cpJ/ZsKElV8LTFwe0LV78TsPpFwu85LXlYlJN69vf1E4Pik8vjk2mn2Su3lbSmhZf34IK3kLy04UK6Cbf3aqLWhiOj1Whnys54O5FaJD8pEawvDSq4kUxR6381/3bLbfaG8PlQ7lAP+9fX5f7d/07Xrjl0XJZt/d/AQ==);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="131" y="674" width="14" height="13" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="55">
<mxCell style="vsdxID=77;fillColor=#5ea0ef;gradientColor=#0078d4;shape=stencil(jVLbDoIwDP2avZKtDRKfEf/DyJBFBDJA4e9lKYatBMNbL+fs9HQVmHblrdUCZNfb5qk/Ju9LgRcBYOpSW9PPkcBMYFo0Vj9sM9Q55e3NIV30at7uhZF4sXQUkBOlSlJ+Jex9sARW1E6S6KQWggoZcgRWmGBDGpFjMBhjR3aFLwWACM+hrD/aUpKhaMw0/0p6Cj9R5pO59EfCEHHII3PoL22rMPFd73lk/1mZ+vDfz8F6NIWpKro5v8+PbC7RgWL2BQ==);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="91" y="634" width="45" height="45" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="56">
<mxCell style="vsdxID=78;fillColor=#f2f2f2;gradientColor=none;shape=stencil(lZPdksIgDIWfhttMSNoC1/68h6PVMtbWwbqrby9d2BHojLN7lx5y+EKSCl7dut21FYS3yY3n9tsepk7wWhDZoWudnXwkeCN4dRxde3LjfTiE7+tuzpyjy/g13/AIvtqApNlF+AyK0aDUj7INhv3dBYeMCQaMjJYoScQgPKgQnlFgBq1iDi/RUeIKNH1iew/n6PRiWiS96UgLOhdwAvz48LTg34dXwJzTqxoameMxR5MBLNgI0qTo3g7JkBpoVDajMr2sFIseSdC6GJAErPMqFUHRI982U+eFLrYjr/QP6/Rvgw/e23u0fR+WPz0vt91L4U/hzQs=);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="90" y="653" width="20" height="18" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="57">
<mxCell style="vsdxID=79;fillColor=#f2f2f2;gradientColor=none;shape=stencil(lZXbctwgDIafxrcahECg6zR9j0yz6Xq63c1sNm3y9sW1AUs7dqd3WBZ8iF+HgR7ejk+vh8G7t9v18uPwe3y+HQf6Mng/no+H63grq4EeB3p4uVwP36+X9/Pz/P36NHlOq5+XX9MJH/M+dG7a493n/B0Fgvy1fJ3dv71fZ3+0G7Dt8DibPrz1WQwxg9DiQ7NJBMQvXtS8OO6xhYG9plMGDJqeM0TUfBRwrPmJIUTNp2rZwKcAmTXeQ9LwROC9hntANGyEaNgInPfYnAAN24FnDWffz11MTpPLE9eHqGRXddggR4KYNBkhkyYHASJNJhATdojApOEMsht2QJBo4A5c1PSSBGIVD92rysuQTOxYMo73+BSAUfNLYN6ITgQkRvQMlA2fWqF8dtNy/BbfgxPNp5amnV80TJo/XclkvJcm24q/yLbBL8m7CLTmk613BgqGz+CS5iP2WKjJi7v8CNnIHxi8pvu71Iu9CBscMGk2t0fbYJs+xxmSIWOrwEouXYXFZD0k8+q5KLib9bmGWNlyX+tItVk2uEQIJuxS3WhyTkoL+F/NS7Mm02VL6Trz7K3trzLujl7avpovp/G8GkdM/dSNDXddmWsNt+uWCYCmRHKfAE2rANGUSB9ctV/acaiv+8/pWRZ98r6Mp9M8uNf/7aQupnnK0+Mf);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="114" y="641" width="22" height="19" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="58">
<mxCell style="vsdxID=80;fillColor=#50e6ff;gradientColor=none;shape=stencil(lZZNctswDIVPoy2GIPi7TtN7ZBqn9tS1M47T2rcvXJGgCI3Y6c6iSX0C8PiAiZ4+9i/vu8maj+vl/GP3+/B63U/0ZbL2cNrvLocr/5roeaKnt/Nl9/1y/jy9zs/vL4+dj18/z78eb7jN53IAR49T1tznFUTw8e/K1/nAt8/LfALLEQvJlyNlicCWlZudV5IDX99blkzZQfNj5NfksqMsWXBuRA6pHWlk6snBQXY92dX3CjwgmNjDA5gx3AGqsKPEKPAIJvTwDD4peIboezja+vINekRA7OlcqKjwnFOXejzvejx3mSeIKvNoII/5flV0PuOy4sdV7nmXaKPAkgFDK375yg1+smBU6TOkSWsOdfRG0ib0AGgVnZNLQ3pqcsFWMaf48kWCJ0jU4zOzgsKz9IbBZwKyPd6i5KPi+c21HpW/yNF29JQhD0ufIKjgvYWslc869z09cPQK77Oo8d58oFRtg+/ySvqJo1eGQxFU8ClKpiueLzkq5WdWHo7wGFfJZwescrg1oeXY89ubW/YhYY9Pvspoy3YgkAp+oekaKjjlOuwXpIJfiPHebHCoe2QXV6kPRhxOYncQVOm5zspx0YNTsfsEOOw0fMYo0/EchLp2vAt7OivGxRXeK891vupjC09yxSvepdocu8pbFb1tXUkqL5tq9HITt/CQde4zkKq8UZpHEXglk3yxaC7Xqm6QuVQq7exA+sLF2jGa4H2rTfP1uiQXjrvm0G847VFfOA5cVz2IuTSzVyMGsrPp686xj+A8g1BcwZ3qNDxRRNXneJdqs5who+lspUOvYy/2us35Fd7ziKbue1JVD1buvxht/sdgx3MBpR4eDSi5J2oNpH5OkjQvupxZXzczTD0nR7d4QjHMmy6yVD23XlTpi6G2tfg++OPh9H9jMP9oQ/Tb4XicZ/Dl/3ro5qV5YKfnPw==);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="81" y="632" width="65" height="46" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="&lt;div style=&quot;font-size: 1px&quot;&gt;&lt;p style=&quot;text-align:left;margin-left:0;margin-right:0;margin-top:0px;margin-bottom:0px;text-indent:0;vertical-align:middle;direction:ltr;&quot;&gt;&lt;font style=&quot;font-size:16.93px;font-family:Oracle Sans;color:#000000;direction:ltr;letter-spacing:0px;line-height:120%;opacity:1&quot;&gt;Azure&lt;br/&gt;&lt;/font&gt;&lt;/p&gt;&lt;/div&gt;" tags="Background" id="59">
<mxCell style="verticalAlign=middle;align=left;overflow=width;vsdxID=82;fillColor=none;gradientColor=none;shape=stencil(nZBLDoAgDERP0z3SIyjew0SURgSD+Lu9kMZoXLhwN9O+tukAlrNpJg1SzDH4QW/URgNYgZTkjA4UkwJUgGXng+6DX1zLfmoymdXo17xh5zmRJ6Q42BWCfc2oJfdAr+Yv+AP9Cb7OJ3H/2JG1HNGz/84klThPVCc=);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="92" y="691" width="84" height="20" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="&lt;div style=&quot;font-size: 1px&quot;&gt;&lt;p style=&quot;text-align:left;margin-left:0;margin-right:0;margin-top:0px;margin-bottom:0px;text-indent:0;vertical-align:middle;direction:ltr;&quot;&gt;&lt;font style=&quot;font-size:16.93px;font-family:Oracle Sans;color:#000000;direction:ltr;letter-spacing:0px;line-height:120%;opacity:1&quot;&gt;Cosmos DB&lt;br/&gt;&lt;/font&gt;&lt;/p&gt;&lt;/div&gt;" tags="Background" id="60">
<mxCell style="verticalAlign=middle;align=left;overflow=width;vsdxID=83;fillColor=none;gradientColor=none;shape=stencil(nZBLDoAgDERP0z3SIyjew0SURgSD+Lu9kMZoXLhwN9O+tukAlrNpJg1SzDH4QW/URgNYgZTkjA4UkwJUgGXng+6DX1zLfmoymdXo17xh5zmRJ6Q42BWCfc2oJfdAr+Yv+AP9Cb7OJ3H/2JG1HNGz/84klThPVCc=);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="70" y="708" width="152" height="20" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="61">
<mxCell style="vsdxID=87;fillColor=#FFFFFF;gradientColor=none;shape=stencil(lZPRDoIwDEW/Zq9LWUHCs+J/EAVZRCATFP/eYYdsAzW+td2922mzMtxey6zNmYBrp5pzfpfHrmS4Y0LIusyV7HTEMGW4LRqVn1TT10fK22xUjtGluY03DOSLOEajScCDCknC482rsif9oVdkCEggeIjGEfgWGASVwChMmsQchVGgqzBpEvLQfrWStUUJDuKb+QMhuHgz8ERnteDyTnDWVBzcVTiNvnFnCN/o9Cyi2CUEFy8Ab3xWB+hLfOJVxFnuI3+AnA1L6kEsG/HJB1zOxkNfBf39Hf/V62D++4WsKlod+9zfFV2iPcP0CQ==);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="83" y="764" width="61" height="62" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="62">
<mxCell style="vsdxID=88;fillColor=#FFFFFF;gradientColor=none;shape=stencil(lZXRdoIwDIafprc9aUOBXjv3Hp6JgzMGHsQN316whbYBQe9K/INf/iSU4e6SH84Zk3Bpm/on+y+Obc7wg0lZVHnWFG1/YrhnuDvVTfbd1NfqaJ7Ph0E5nH7rv+ENncnTyFENWRJuJiI5po/Ap9F/XRuTIGyG4pG2GYKkQCetKOE4imwo4tJGOpyLbCjmEfp/XhaVD+slTPipWKX1UlwBWhFcryZXQRoTXs8rpKpF4L4cEfJSPeXtXUoJbsJjGeI6v2+ugESGtJ7I8avkOayXsNwMyuoliFmP5ayeGXyHM5co+/IYbM7su/qtnYA3WgzrlqUqtAxCv4CaRYcQQqfWFwYCss1lAUYnT0R08iZ+GxEAbKObo+RZc1S400S+sNGCeOgYKJS3zVMpSDWvrYfTv7YdWvMkpt/JqZsjV8y1CFGJnQsfnXU310a3P7iL4FSUpblH/N/pxdGHzKWD+zs=);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="82" y="763" width="63" height="63" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="63">
<mxCell style="vsdxID=90;fillColor=#2d5967;gradientColor=none;shape=stencil(lZNLDoMgEIZPw5bAUKuurb2HiVhJqRikr9sXSpoqphR3w8z3zwMYxKqpb0aOgExGqzO/i9b0iB0QgBh6roWxFmI1YlWnND9pdR1afx4bRzrrom4uw8Pr9gXOM6cC8vQeSjGUb8/RC6QYZoIix0t+V2Ia4dcFbAYSETBbf5OAwraO1gX+jLz5jhIEy1cIaPI7NSSTZAFm6TkpibDhXDH2E0zpIf0GYqQ1vh+9E1L6PZnHw8WwLr9UrH4B);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="113" y="779" width="21" height="18" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="64">
<mxCell style="vsdxID=91;fillColor=#2d5967;gradientColor=none;shape=stencil(lVTRcoMgEPwaXpnjLhZ9TpP/yDSmMrWaMaaNf18tqByMNH2Ddc/dPQ4E7W/V6VoKhFvftR/ltzn3laBXgWiaquxMP64EHQTtL21XvnftvTnb/fU0MafVZ/s1/eFh6zKYShAGu1VKYvGLHC377d5ZurIEDbLQrkSFNfBAC+VaOmRwCOYSyZEoIjlkV0iVVPdKVj/qhYv7Flc/iosvuSlgbChjIYG4tPdTJ6NwRgaM7VFEeja2V6LidmLsEOOT2cgdHXhtmn+MR3KYINlQlFnOQwEPBDyMVzCHCbJkSUHgYlrLHQYd9CzNHQT4o3+QFPVUlusCQc4FWIbGs0Yh56msK33utpJaB9fEs8Y7vpWVSSbnhDHHxfr6XExd28fL/x6+ViNkXzo6/AA=);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="104" y="800" width="18" height="18" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="65">
<mxCell style="vsdxID=92;fillColor=#2d5967;gradientColor=none;shape=stencil(lZJNDoMgEIVPw5bAQCuurb2HiVhILRikf7cvlDTVJlXZPWa+N5kJD7FqVM0gEZDRO3uWd916hdgBAWijpNM+KMRqxKrOOnly9mra9B6aSEZ1sbc44ZF8vMR7Hl1AnqkCHNPyXTkmQ6/NxCAoLnYzgyjwAk8Fhhw+e6ENhrWTyf/pZAZSsoB+mpvgrCVW4CC+39vpvk/pmPZ/4xBKKUqsfgE=);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="92" y="778" width="20" height="18" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="66">
<mxCell style="vsdxID=93;fillColor=#2d5967;gradientColor=none;shape=stencil(pZRRc4IwDMc/TV97bUIFn51+D09x9MbAq7jpt7csDNp0sO18S9Jfwj8JF4GbS7U/lwLUpXPtW/lpj10l8EUA2KYqne28JXArcHNqXfnq2mtzJP+878neem8/+go3ylsbmZs+C9SdIlqpL39HeG2bAM8kLNKHq6Pqmp5hgHVMqxtQYHDvg7vOZV4MBMYEjnqhmNenInELjYxK/o8mEnjTU4JO2/rutIg7nyaD6WLwD5v5dZHx3pHTmdT5fPUE958zZmkIQYYeUwqMp5Cx9a+k1vEYgh8OOfTzHFaxTk5znR4ALjSQMSkzTGvQDSYQzkyJa5VPLeFJ3BvTWTjZuqarEr7zM+JDdIJw+wA=);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="84" y="771" width="60" height="54" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="67">
<mxCell style="vsdxID=94;fillColor=#2d5967;gradientColor=none;shape=stencil(nZLbDoIwDEC/Zq9ktILwjPAfRIYsIiMDFP9eli5hw1v0re1Ol5O2DLOhKXvBgA+jVmdxk9XYMDwwANk1QstxiRjmDLNaaXHSauoqyvvSkCa6qKv5Yaa+kHPTA/zu5wXBrewc+G80SoIYXfg4abIIfdymsA+ilEoz2JIlwGuYkdJdAJEF0AVeuqWxJ8c/iaWJb8Z9q3V88GyOWwbfTMPX+2klX+AlWDdfy7alw3Hft5eylOjKMH8A);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="84" y="765" width="60" height="4" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="&lt;div style=&quot;font-size: 1px&quot;&gt;&lt;p style=&quot;text-align:left;margin-left:0;margin-right:0;margin-top:0px;margin-bottom:0px;text-indent:0;vertical-align:middle;direction:ltr;&quot;&gt;&lt;font style=&quot;font-size:16.93px;font-family:Oracle Sans;color:#000000;direction:ltr;letter-spacing:0px;line-height:120%;opacity:1&quot;&gt;OCI Object&lt;br/&gt;&lt;/font&gt;&lt;/p&gt;&lt;/div&gt;" tags="Background" id="68">
<mxCell style="verticalAlign=middle;align=left;overflow=width;vsdxID=96;fillColor=none;gradientColor=none;shape=stencil(nZBLDoAgDERP0z3SIyjew0SURgSD+Lu9kMZoXLhwN9O+tukAlrNpJg1SzDH4QW/URgNYgZTkjA4UkwJUgGXng+6DX1zLfmoymdXo17xh5zmRJ6Q42BWCfc2oJfdAr+Yv+AP9Cb7OJ3H/2JG1HNGz/84klThPVCc=);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="73" y="830" width="169" height="20" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="&lt;div style=&quot;font-size: 1px&quot;&gt;&lt;p style=&quot;text-align:left;margin-left:0;margin-right:0;margin-top:0px;margin-bottom:0px;text-indent:0;vertical-align:middle;direction:ltr;&quot;&gt;&lt;font style=&quot;font-size:16.93px;font-family:Oracle Sans;color:#000000;direction:ltr;letter-spacing:0px;line-height:120%;opacity:1&quot;&gt;Storage&lt;br/&gt;&lt;/font&gt;&lt;/p&gt;&lt;/div&gt;" tags="Background" id="69">
<mxCell style="verticalAlign=middle;align=left;overflow=width;vsdxID=97;fillColor=none;gradientColor=none;shape=stencil(nZBLDoAgDERP0z3SIyjew0SURgSD+Lu9kMZoXLhwN9O+tukAlrNpJg1SzDH4QW/URgNYgZTkjA4UkwJUgGXng+6DX1zLfmoymdXo17xh5zmRJ6Q42BWCfc2oJfdAr+Yv+AP9Cb7OJ3H/2JG1HNGz/84klThPVCc=);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="84" y="847" width="118" height="20" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="70">
<mxCell style="vsdxID=100;fillColor=#2979ff;gradientColor=none;shape=stencil(jZTRcoMgEEW/htcdYFHkOU3/I9OY6tRqxpg2/ftqgWQXotM3WA9yuOwgcHdpDudaaHmZxuGj/m6PUyPwRWjd9k09ttM8ErgXuDsNY/0+Dtf+6Ofnw0Iuo8/ha/nDza+zGlAtq7T88RX5N3v1cNf2BNYWSrcOv11H/2sV8AIqE3BFeXnTgTCgIhFKCpQOEAYIQWOAYgmcWdeU4PiRjAVZbplKbmkqqCpuKrllkWuSXUOl2Nak5/IVN3sWm4mSvELJ5a5L7mWSqpRJqOQqkTNPZfM+SfBU1c6qJVd9SAQrm4vS4wQvW4K1XDULiss6B5L3aXYVqe7dLcrSG05DjLIml6Vb40r3JcmS4z3v7ixaElvUz2Rp/ryH77mSK0VK/LMBGDwPHk/Mqe06/0LR7+mTNJf8c4b7Xw==);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="82" y="1063" width="63" height="55" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="71">
<mxCell style="vsdxID=101;fillColor=#FFFFFF;gradientColor=none;shape=stencil(jVPLEoIwDPyaXjN98jij/ocjKB0RnAKKfy+Yaikocsumm85muyUiqfP9NSOc1o2pztldp01OxIZwrss8M7rpKyK2RCTHymQnU7Vlivi6H5hDdaluww0dzsUSpBymOH1gh1H6wjukF7oc0RWoYIl9aA3ezvCYg7J05vNpx7Fh4cPCOITYjnTCZ1gYK5DBb4XUkydBySV91FfHgSpfnlvA1/sWNzLEk/tVWxhCGHn6Fsgfp95OR8Ci9fSZTdPV3QCbW+9eY7K+ez8xD5BYkaC/gesLF9ajLgrM+vh8Gu6+hR9DbJ8=);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="99" y="1072" width="29" height="36" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="72">
<mxCell style="vsdxID=102;fillColor=#b1cfff;gradientColor=none;shape=stencil(nZFRD4IgFIV/Da8OuTl9N/sfLjFYBA7R8N8Hu2bYamu9nXP4zh1wCdSjaAdOGB2dNVd+l50TBI6EMakFt9IFRaAhUPfG8os1k+7QD20ko7qZOU7w2KOxweiSuhOCSuqvYFlk9JDC58ni2HyPr7aqshIw8gyjPM9YsVLPiK41DxhsAOyBjzfc2ssP8J/v3oFBvL61l0rhVtLz9zWECFcIzQM=);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="122" y="1072" width="6" height="6" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="73">
<mxCell style="vsdxID=103;fillColor=#03a9f4;gradientColor=none;shape=stencil(pVrblhQ3DPyaffXx/fJMyH9wwhL2hLCcZUng76POtC25RLt7krdlkKfaupRK6nkIb75+fPfl8cHbr68vz388/v30/vXjQ/jlwfunzx8fX55e6a+H8PYhvPnw/PL4+8vzt8/vb//+8m6z3P768/mv7Ru+384FZ5LbTnn74/ZJdCa3fz/59Xbg09NnccAVE/6XvXMm+GP7YEKa7aOx8Q77bGpemFvj5+exZmWu3HOn+Yl3LhyY4+Wsncx9NJP1b99ebuYO7fcPfDH15k773d8+as3Eslv54abod6uwW1UT8261fxS8SXWF3oqJccYP0ZQG+Mm0DPjZpAb4lAcN8KuxbonvOdodv41H6vi1mdZm/GhNmuEr5THAU6jc0vmV7lpneDpTA8A7g+j02DN6qaaA84fRAXhJJnsA5+/dkYo3EHn5gB3cKs+fXj1T5PHq7NMdKyfj0wwvw7NjZSrx8HBf4LPjlHY6pXawRIGvgE8hA/xUTXOAf5b4iaosAb4oKT+sArhflmfQVuHnVT+TijwwSDiePG4AdxHtRvW0kKdO58pPnNVMzktwigIUaVGZQvF0M3jqXysTxdcZO/b6P8qTZBwQlDfVATh5B9LEmQL8kEUuhW5klxen4usZ2cFt741coUmRs1XckMHldslK/PADFhgpMnX48WBFEaIP912YiLZCpIUjezfwxgG4CEnPqcCUfTHU1GWwJEUKdXAKdZzBC3YCaoRDclxMceqwIcPFdSMgqwZ0KKowaKPudqjumQ3kgSvscaYw7rOe1UtNg906M2Xj0jJnxBGmpoQtPHXVxK4LxgFBkFWALur8SSehMxbx7eA4UTEJqpRFxYAPTHQjcZY5Syc8MAQX+8AmGoG0qd2pjO3YQZ03TF0KiGqV5xUvF1HRo14GhQnx4hE7LLFLUdRYNDXm3oWPi3VTQfW+exeSANAMhT/9MLJwcRGZjhRY/l4LOLUEJCmRRyzaVD8SKRmGlb032Ysb6mckuygjP6zQ77Ikg7bq+FjsM5fIEzubZGOX7CCP8ICDLUVeq7eUZhzKXO2wbVpc6jwZiq7zSKoAscuodp1JB3W2ALGHda5EpV1CGFUuErVqjeuAmqhMCgSLrNI6WTJTCg93OFxSJeNsSS0CtAQxRPUKfrc6gqfC0LPl+OZelBZFq3xGJsd7L195cHLaqx2c6h/jLiLU0QWVXAr8Js8QXKQTt0RQzJSZAbHTGEou5zydKaDiZDUxPDheFmZQRn2ywYqfKUIcuEQpFwTH3QdmSUMzdZ4XSiM1DvwnT7BLM9QNWUH4ajUeOiuN4RYyt9lOP0fwNM1D9jSvRmOasJHjW1TpQzM1dvZNZi8rZ6s/0MKkuj1cnxIaR5BNdwO87f2M4WtvlwfwlIVjkmR13jVChycZm6C9D6Xb0b1TG6Fuc7SMq7zvwP1cR3aJtx1ePx93cuX4s5uTRnB4c3bpEFDYLWRw+pDP+7qrURfLO6fTacx5sAbcEhOw3fjkcsZbtQuSpTQP1T+YvjIg2xkWy3zmkXkqovbql084P15Rezqr0jG30QSOXbNt4ZaDqRgdeCMCKRF5AOrYYayCRUoAtO9d7ah/K5WdrZptHIQltfHAohRw/ZEqvANQpZBG/McugDQ+aAcqVws9TOz1BA3g1omtjtwe1XZUfjM3TAi6fMgO39TC7fT62/oSmEA6VggliLtVIw51gAzLydPIb70FGqDMKF7BW+gAIjdFAwTtdJrz1FlxopfFxP0342Sr1vLSiJX0VOozLZyrhXvtZzVCQ2icV780VbR1LlZFj9tUA/2YrALokWJHGxjJWNRajly77gx0BtVsrqYAEZCVg1qkQBfQI6QeE3QmslrDE3MBFeQ8ZPuAT6PwRDI2pII4dhQDfryFOcIPyv2agomnY1bwuN7aBAk2gGF1BG8VE8pv7kzYjHcKH2rRDTFx+fJjcynBG/ieBHjGy+ch4gZ6Zll7MfTUBSKIEplTLMgs3l3kZ4ePas90mvl0Bt+6yJri1Qr6XtZn0Fa8T2iLSUee2KklmLpWkOIITy7YN+S1uprKY/O5cBipMrucPGUo+JWCh2KRYe06kqWvyJfxmoGF5Bo+80vYLmLdwBrwhZurH1a4C6ZiiTi6jBn+CL8xvfDkhoOjeIckZHRB2eD0anJYHXGF5yW309/c8YNJGh/F9KaA0P1n9/diNHLasx0/80zM/k+Qfl6QysXwCznmdFqJJQfuhZtat1E3teD90+TfOjCOMaKsuE+j92WJBm3FLyfm4p/ZQp64RC8XlMjdB+BlUuXXKXs8Wq/Gn++XIw/N//EAcbrzxwdIIJd5g11cH6gvHsgR3iXCforU0vw2j9T+4u2fdtK99ic+unCA/uCfn314+vTp9us1+f/4czX66PZTt/D2Hw==);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="106" y="1081" width="15" height="23" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="&lt;div style=&quot;font-size: 1px&quot;&gt;&lt;p style=&quot;text-align:left;margin-left:0;margin-right:0;margin-top:0px;margin-bottom:0px;text-indent:0;vertical-align:middle;direction:ltr;&quot;&gt;&lt;font style=&quot;font-size:16.93px;font-family:Oracle Sans;color:#000000;direction:ltr;letter-spacing:0px;line-height:120%;opacity:1&quot;&gt;Azure&lt;br/&gt;&lt;/font&gt;&lt;/p&gt;&lt;/div&gt;" tags="Background" id="74">
<mxCell style="verticalAlign=middle;align=left;overflow=width;vsdxID=105;fillColor=none;gradientColor=none;shape=stencil(nZBLDoAgDERP0z3SIyjew0SURgSD+Lu9kMZoXLhwN9O+tukAlrNpJg1SzDH4QW/URgNYgZTkjA4UkwJUgGXng+6DX1zLfmoymdXo17xh5zmRJ6Q42BWCfc2oJfdAr+Yv+AP9Cb7OJ3H/2JG1HNGz/84klThPVCc=);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="92" y="1126" width="84" height="20" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="&lt;div style=&quot;font-size: 1px&quot;&gt;&lt;p style=&quot;text-align:left;margin-left:0;margin-right:0;margin-top:0px;margin-bottom:0px;text-indent:0;vertical-align:middle;direction:ltr;&quot;&gt;&lt;font style=&quot;font-size:16.93px;font-family:Oracle Sans;color:#000000;direction:ltr;letter-spacing:0px;line-height:120%;opacity:1&quot;&gt;Blob Storage&lt;br/&gt;&lt;/font&gt;&lt;/p&gt;&lt;/div&gt;" tags="Background" id="75">
<mxCell style="verticalAlign=middle;align=left;overflow=width;vsdxID=106;fillColor=none;gradientColor=none;shape=stencil(nZBLDoAgDERP0z3SIyjew0SURgSD+Lu9kMZoXLhwN9O+tukAlrNpJg1SzDH4QW/URgNYgZTkjA4UkwJUgGXng+6DX1zLfmoymdXo17xh5zmRJ6Q42BWCfc2oJfdAr+Yv+AP9Cb7OJ3H/2JG1HNGz/84klThPVCc=);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="65" y="1143" width="203" height="20" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="76">
<mxCell style="vsdxID=109;fillColor=#005ba1;gradientColor=none;shape=stencil(pZXdUsIwEIWfprc7STZ/e436HowU6YiUKaD49iaU9GdrGxzv0vRsvmZ7clLg6rRbH8tCidO5qd/Lr2pz3hX4VChVHXZlU53DqMDnAlfbuinfmvpy2LTPx3VUxtFH/RlXuLZ11oKORUp8txNowcrbzEur31eHJb0EHMlfL027vpwUyFQhTDtzVZ0Gk+g+JcDLuwg7UXy+iTCJDGXYgsZwAegZ3AApDk+kDm7ATeBSLcINGMnhQk3gihh8QhaOk+8NnCNr8IaTJQNrsCa7aw2Go/W8N1CB99xMRs0XiJHYaRD+UTEREM2LyYD2ywW8a2QTvneqEOOuBY11466FddOmU9vITZwaVHbRLaHGuTE91KBjfA+K833aV8/3YInxfTLjHJ+SnXu+B4GMT6CZa8KHa8v41HcJu8Z5zPA9O6qhhp2W7n90cJP8NYQT33w4Dwu2HVY8lmnDitlQiyLMhVrcthx/bS7UYnezoRZEXfjMHu9osAl8OdSiTbKhFozT5cDvoRYdav8WaqFE50ItHo9sqEVbE2cv2OPfN+REHwb9dbyt9vv2Nh++59d3mGqvfnz+AQ==);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="378" y="175" width="47" height="41" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="77">
<mxCell style="vsdxID=110;fillColor=#005ba1;gradientColor=#005ba1;shape=stencil(nZTdTsMwDIWfJrdWbOf3emzvMbGOVpR16jrY3p6UdLRJUEHcuc5xvmPVjuDNpd6fK0HyMvTda/XRHIZa8JMgak511TdDiARvBW+OXV+99N31dIjf5/2oHKO37n284RbrtASJYxXJe8ygBPRfmV0seL72sQKjgAjYTCWY18gbxdTi3imjwapJw4XmkVmC2+a0cFoY9QaY1ozK1GTQu9wjmtSjt0AuN6l8ajKILK+CwVHGdoAZHB/uZ7gD7VM4glcZ3IFfhRNom8H93NSEYuDs7wSR1ilcAeZw/0vnCrwp4B5TuAanUjhKmaINWCrQPhnLdDq+b7j/Sy7XmprFWEzy1IC1YHTe07wTXC4b56offf5hPUMwL/exadv4NizP88cgpOJDwttP);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="361" y="159" width="31" height="57" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="78">
<mxCell style="vsdxID=111;fillColor=#FFFFFF;gradientColor=none;shape=stencil(hZNBEoIwDEVP0y0TEhVdo97DUZSOCE5FrbeXWh2aFGSXpD/tS5ooym/l7loohFtrmnPx1Ie2VLRWiLouC6PbzlK0UZQfG1OcTHOvD96/7pzSWZfm4W6wPm+ZJYuFy0J4+Qh8vK0XV7oOxCkmROPi/d34q1N/OE/m+FWnoRwsMveFUm+JC0i+P4gHDM1Vlv3DA862miWzJecLCvhGUgBOGLaEuGaQMe63kEtKh5Vx0h5CUv0ww1pIamikP+Kvgbcz6r0E7ROi77cY18JHwFLcHpqcx4nh7Yx+7I+6qvzWhOdyTbqQXzHavAE=);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="408" y="200" width="8" height="8" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="79">
<mxCell style="vsdxID=112;fillColor=#FFFFFF;gradientColor=none;shape=stencil(lZNBEoIwDEVP0y0TGhFdK96DEZCOCEwBLbcXrEqTysJdkv60L7+twENXpm0uJHS9bq75Q2V9KfAopFR1mWvVT5HAROChaHR+0c1QZzZv01k5R7fmPu9gbN8uDrbx3CVhtBV4ZScrrlTtiEMZIK6Lz4O2W4d2MQoi+VaHrhyMJOkoud4gFSA//yceELRlshU8oGz7TbDZUT5ngHclBKCEriVINT8Zfb+ZnFM6WB/SBYJTfTDdWZBrcMUfdtdA7fS856BLg3f9xsca6RMwHtSX8y8ziXgKlmdfqKqyv8Zd599kKtkvhskT);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="393" y="200" width="8" height="8" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="80">
<mxCell style="vsdxID=113;fillColor=#FFFFFF;gradientColor=none;shape=stencil(lZPNEoIgEICfhquzsJp17uc9mtRkMmnQSt8+DQsW4tCNXb6FjwUYbrv6eCuZgK7X6lI+ZdHXDHdMCNnWpZb9NGK4Z7itlC7PWt3bwsS340zOo6t6zCsMpm6dJ6t8rhIwmgy8o4OBG9k6MBcJpnH4dNdmaW4msyTDheYuDoMg4Si+vFgApADa/TGuB0TNniyiB9Rtkybpmvo5B1gyHIAaui1Byvx0DPvt4b6lo/UxtRK+1UfTPQv6DEb649010HYGvfdFbQEPrjPUGukTGAKpr+dfzSTwNLDPvpJNY36NO+9/kyllvhjuXw==);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="378" y="200" width="8" height="8" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="81">
<mxCell style="vsdxID=114;fillColor=#eaeaea;gradientColor=none;shape=stencil(lVJdD4IwDPw1eyWjFabPiP+DCMgiAhmg49/LLF9bgsa39nbt9ZZjGLVF0mQMeNup+p69ZNoVDM8MQFZFpmQ3VgxjhlFeq+ym6r5KqW8SwzTVo36aDZrmfM7NDPCB+sPJw+CDXIh+7RXxfXdgAoTw0CdIwwKFwcQCZ0wjAcG8Bm3CjizAfNcivK6cNLgtKY5eCLaoo/nTrGMVuMeFrbm9yz5jz+hXm9ufs2/Q7kcO6wXCVlwpez5LWf2TgbFY85PLsqT4bd/dvI0QZRXjNw==);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="361" y="153" width="31" height="11" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="82">
<mxCell style="vsdxID=115;fillColor=#50e6ff;gradientColor=none;shape=stencil(lVLRDoIwDPyavS5bK0yeFf+DCMgiAhmg8PeCReaWoPGtvV17vewYHtoiaTIGou1Mfc0eOu0KhkcGoKsiM7qbKoYxw0Nem+xi6r5KqW+SmTlXt/o+bxhoTgoxz4AYqd9FHHYv5ET0c2+IL/2BBVCKy5CgAVYolAsLvLEBCQjea9AlbMgCcIxcYbty0RCupNpzqVxRT/OnWc8qCI7S1QRcodE9wxrlMnB1vzpVIY88p55P+wXvIyTfo6tqOVteS139k4OpsBnKdVlSBD/f/cxNEOUV4yc=);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="365" y="155" width="24" height="7" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="83">
<mxCell style="vsdxID=116;fillColor=#198ab3;gradientColor=none;shape=stencil(jZLRFoIgDIafhlsObiF6XfYentTkZOohK337pFEKF9bdNv7934Ax3N/qvC8ZiNtgukv51MVQMzwwAN3WpdHDHDHMGO6rzpRn093bgvI+t0obXbuHdRipTwrbAmKiFHiUvgtHEp/uhtQRnSNyEbsOV3IGI1AaxTxSTvEpSZ6gU6HXNLl0l3KhtrjWFXxuglz5aDscBmghfLAMyKnisAWOY54qH7x4wneSJPG5q+Ew6Pr7ztYWA/TqJWEZUPrwH1cO/7jR7f8LMQfLKlW6aWgT1+fh6s0lWlvMXg==);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="368" y="159" width="19" height="2" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="&lt;div style=&quot;font-size: 1px&quot;&gt;&lt;p style=&quot;text-align:left;margin-left:0;margin-right:0;margin-top:0px;margin-bottom:0px;text-indent:0;vertical-align:middle;direction:ltr;&quot;&gt;&lt;font style=&quot;font-size:16.93px;font-family:Oracle Sans;color:#000000;direction:ltr;letter-spacing:0px;line-height:120%;opacity:1&quot;&gt;Azure&lt;br/&gt;&lt;/font&gt;&lt;/p&gt;&lt;/div&gt;" tags="Background" id="84">
<mxCell style="verticalAlign=middle;align=left;overflow=width;vsdxID=118;fillColor=none;gradientColor=none;shape=stencil(nZBLDoAgDERP0z3SIyjew0SURgSD+Lu9kMZoXLhwN9O+tukAlrNpJg1SzDH4QW/URgNYgZTkjA4UkwJUgGXng+6DX1zLfmoymdXo17xh5zmRJ6Q42BWCfc2oJfdAr+Yv+AP9Cb7OJ3H/2JG1HNGz/84klThPVCc=);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="371" y="220" width="84" height="20" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="&lt;div style=&quot;font-size: 1px&quot;&gt;&lt;p style=&quot;text-align:left;margin-left:0;margin-right:0;margin-top:0px;margin-bottom:0px;text-indent:0;vertical-align:middle;direction:ltr;&quot;&gt;&lt;font style=&quot;font-size:16.93px;font-family:Oracle Sans;color:#000000;direction:ltr;letter-spacing:0px;line-height:120%;opacity:1&quot;&gt;Data Factory&lt;br/&gt;&lt;/font&gt;&lt;/p&gt;&lt;/div&gt;" tags="Background" id="85">
<mxCell style="verticalAlign=middle;align=left;overflow=width;vsdxID=119;fillColor=none;gradientColor=none;shape=stencil(nZBLDoAgDERP0z3SIyjew0SURgSD+Lu9kMZoXLhwN9O+tukAlrNpJg1SzDH4QW/URgNYgZTkjA4UkwJUgGXng+6DX1zLfmoymdXo17xh5zmRJ6Q42BWCfc2oJfdAr+Yv+AP9Cb7OJ3H/2JG1HNGz/84klThPVCc=);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="345" y="237" width="203" height="20" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="86">
<mxCell style="vsdxID=122;fillColor=#c74634;gradientColor=#c74634;shape=stencil(pZnJchMxEEC/xtcu7csZwn9QEIiLkKScBMLf08NYW7ekUYqbx+5drX4j+aQ/PN99fro9KfH8cnn8cfv7/PXl7qQ/npQ6P9zdXs4v+Omkb076w7fHy+33y+Prw9f9+enzJrl9+vn4a7PwtutZsako8Wd/9A6i/ffNp136y+tlF5e7gFKg41VFUh3xpvavktHro1dg5VVCtxLXR+dBmNrv/fmhirINMgqQsxhFG1+0YH0bX53F9SspRBuhJSEmgYFT78HJ1nExSX0kp3VomsrofrZtZYr4oJA0zqIg+eIonoviizwoEOudNtKjTmv7MioQvlEIEtw0sxBAkdYMCoJucwsGdGhzCxo8WYUgwJg2PVQ0etoBFrwj/i1sz01tBURH/FtwqvXvHMhA/GepgX9nQWjm3xH/zoAgrY+Z0fxrKV2qNPdf6ZT6O7L1tigV8S8hLOSfpUb1F+DJDqwtq7xKyjL/abGTfx/BE/cCXJy2nwajiHuRmzi3nwepW/foK+X6VvZ8TiVFFEBMJ3PEXMnO9kC8466KpPnRrtLEuwZNsscY1bT5Uccblj1tfpSS/kSLT93j1udr7yajZWFYvFthiknjYVqNDiWzygiSBmeVaytBBqz2yeoCJJ1MW2+NkggOadoAO5T0kgGLYSCLrJOyNjtipSs7Z8jKLWk3rhCFJSvoISy3RSLvOh1Y4lonEo2qVERWYEn77V3CR2C1Cvx8snGwWg0xtnXogNUaiGTJOmC1+BI09d8Bq3V5RNVgJYMdpRjYOFiK1DpYa8tjsGJmkYKNgxWrFOb+OVix/hRsHbDiysaF/LPUOlhry2OwopQl+4CD1cq0pdbBijoULR2wWgGacL0DVoNom7nnXDWhTOoxWNGupljnYN1iDFP3CFbLss+Wx2DF4hvCkw5ZUapxf8RJNizerTAF6/SI1aEqOWBRpLIVoGc65MVksBJaqDQG1oiKdCGo6ADVSDYiGCqyyDpQa7MjoGJ8huxOBtQtZzUuEAWqVKnBl4HK5zjn6cHJXIwDnLXXERcxNj/dmh0uKsvmYoeLCs++5D6kw0Xlj16kOBdVAE3fT/iBE6U8GQ0dLhSpdS7WlsdcxMxo/h0uYpXC3D/nItY/kMuMDhdxZeNC/llqnYu15TEXUcqSwcS5qHS6u1jnIuocY3GbQmTkdLCoZCrIMheVgECOEB0uomFNucS5uAU5LX7nwInZ0+bvcBGLT0/7HS6yzX/Euf9XmIJRhgP4YOdLshmLTq6HyeMp33vim3xbjUqmYNJMX9EqldScpciKB5gIlCowHO36YAT7/O5csFuMlltWQTwHduNWC62mHfkAlDiT6G1qFaPiKzO6bqYLPgUbk8YP5cr/2/n+fv/HoP6d/kWAX+1/L+ibvw==);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="382" y="467" width="43" height="47" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="87">
<mxCell style="vsdxID=123;fillColor=#32bedd;gradientColor=#50e6ff;shape=stencil(pZTdbsIwDIWfprdWbMf5uWbsPdAooxqjqMDG3n7pEqAOWjVpd+6pT77YSdzw4rhdHdqGzPE09G/tZ7c+bRt+aoi6/bYdulOKGl42vNj0Q/s69Of9On8fVmPmGL33H+MKl+wTBPSji8xXVrwDlB/lORt23X7eICB+ang5DxmBj5YiOQuCWbpQWYZAbMkqkngQLlmcJTSm5BRBHDg7R48OgtV06yB6TY8GiDWdIwTU9ECAVvM5AMscPyBY0Xx04KPmuwAYNd9othBw0GwDbrbxYwWabICdBlMAW7UdDUTScLJgRMNpFp3WcKTZFIGqM0/bqYq2FmzU7OrAHV139ws6kTU4MPiqauT7oVB1s241B/Cs2TGV4ObYqUapWn733OhsHuhx0pzrzcKbccJHnH+bV8efDf99/bUhBfdhs+l2uzyrpv/r4ZSkPNh4+Q0=);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="361" y="450" width="39" height="28" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="&lt;div style=&quot;font-size: 1px&quot;&gt;&lt;p style=&quot;text-align:left;margin-left:0;margin-right:0;margin-top:0px;margin-bottom:0px;text-indent:0;vertical-align:middle;direction:ltr;&quot;&gt;&lt;font style=&quot;font-size:16.93px;font-family:Oracle Sans;color:#000000;direction:ltr;letter-spacing:0px;line-height:120%;opacity:1&quot;&gt;Oracle Database&lt;br/&gt;&lt;/font&gt;&lt;/p&gt;&lt;/div&gt;" tags="Background" id="88">
<mxCell style="verticalAlign=middle;align=left;overflow=width;vsdxID=125;fillColor=none;gradientColor=none;shape=stencil(nZBLDoAgDERP0z3SIyjew0SURgSD+Lu9kMZoXLhwN9O+tukAlrNpJg1SzDH4QW/URgNYgZTkjA4UkwJUgGXng+6DX1zLfmoymdXo17xh5zmRJ6Q42BWCfc2oJfdAr+Yv+AP9Cb7OJ3H/2JG1HNGz/84klThPVCc=);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="331" y="518" width="254" height="20" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="&lt;div style=&quot;font-size: 1px&quot;&gt;&lt;p style=&quot;text-align:left;margin-left:0;margin-right:0;margin-top:0px;margin-bottom:0px;text-indent:0;vertical-align:middle;direction:ltr;&quot;&gt;&lt;font style=&quot;font-size:16.93px;font-family:Oracle Sans;color:#000000;direction:ltr;letter-spacing:0px;line-height:120%;opacity:1&quot;&gt;@Azure&lt;br/&gt;&lt;/font&gt;&lt;/p&gt;&lt;/div&gt;" tags="Background" id="89">
<mxCell style="verticalAlign=middle;align=left;overflow=width;vsdxID=126;fillColor=none;gradientColor=none;shape=stencil(nZBLDoAgDERP0z3SIyjew0SURgSD+Lu9kMZoXLhwN9O+tukAlrNpJg1SzDH4QW/URgNYgZTkjA4UkwJUgGXng+6DX1zLfmoymdXo17xh5zmRJ6Q42BWCfc2oJfdAr+Yv+AP9Cb7OJ3H/2JG1HNGz/84klThPVCc=);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="363" y="535" width="101" height="20" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="90">
<mxCell style="vsdxID=129;fillColor=#3e3e3e;gradientColor=none;shape=stencil(jZPdbsMgDIWfhlsLbAhw3bXvUbXpgpYlFU239u2XyGQJSP25MyeffXQIFrS5NPtzLVBehth/1b/hODSCPgRi6Jo6hmGsBG0FbU59rD9jf+2OfD7vJ3KqvvufacKN++TUgfK+Pu0YbEP3EDQIXq3hwzXyWMWABaNTR1JMBeRZuiFLyoKlRCXJONAuUcQS+mUWldQDe62AqsJ/NXk2syCx8De5eaVhlmZz7cHZp9kRpCvMTe7sNPjXyZWUL3Ln/2jh8/N7sHl6oQaszzMpPd/DfywEsnkqB1TcaBHp7SeXgWOxvOhTaFteiPX3cgNGibeHtn8=);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="370" y="772" width="23" height="54" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="91">
<mxCell style="vsdxID=130;fillColor=#a0a1a2;gradientColor=none;shape=stencil(nVTRcoMgEPwaX2/gAIXnNPmPTGOqU6sZY9r07wsFUc5RO33Dc+92bw8uE4d7db6VGbL70Hfv5Vd9GapMvGSIdVuVfT3YUyaOmThcu75867tHe/Hft7NDutNH9+kqPH0eB1W4JGTfISDB5L+Rk8e/PnqfwAMgwDnFsyf6EJtq4hIkAiggxAptU7czmSzRaAwU6q9gztg6lP8XqjQIsWmTgjx1yqYwnTqFNiRTq5QETawS1hue2iWpA5ReIiChnxUeuRQgEvrYV6TPDWhM6Xe71xIkX7QfKwcyY0WSm6JI73bU8TKN5AgK1+c0z4hiELfUzlN4lCYNccsOy6RqXSIxC0Sq1kKM3CJ3vlByW5aMaryaE7V1gXBPGLHSOLnRLH0pbNOjArRKZWqQxCE59rr18vliojuPf39H2cO04K510/j9OP9PF6IN+WUqjj8=);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="394" y="772" width="24" height="54" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="92">
<mxCell style="vsdxID=131;fillColor=#3999c6;gradientColor=none;shape=stencil(lVPRcsIgEPwaXm8ODkh4tvofjsaGaZo4GFv9+yY9UoFp1b4dewu7s9wJWp3a7bERCk9jGN6aT78fW0EvQinft03w41QJWgtaHYbQvIbh3O/5fNzOzLl6Hz7mFy58z2rQZr6l8MoIfp82TN6dA7MlN40FR5EeIYkga4YuiiGtwejIipCsABcWMaQcLMpUkv6Ql5NbW8gnD0etCowq1BU4natjLm0BKVXufJ+khFlCtoZK3bOJucXawOOAnANLuUWJhckF+NXjjf1kmLUG90SYCmSZZvLj9DNGNvd6x+mDmfsXeSpuo33wXcebkfbLVZggXiNafwE=);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="370" y="799" width="23" height="27" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="93">
<mxCell style="vsdxID=132;fillColor=#59b4d9;gradientColor=none;shape=stencil(lZNLcsIwDIZP463GlvxcU7gHA6HJNE2YEFq4fZPaKbEypO1Okn/rky1J0OZS7s+FQHnpu/at+KyOfSnoRSBWTVl0VT9YgraCNqe2K1679toco3/ej8rRem8/xgy3eE9JOd5BeY++9WDCd2QX5XXVrMgNGJqrD9cuZlfxPCDYdCFFFILWMXTDGPKYJMlXDqRPEkplBfAqqYirnrCNA4sMPsucYFqBZ3gJiuFJg87pco2MDoxj5FnSiaMXZAuGkeUvj87bkzdnataTKhU4zYuUeYkElvjnyLxAA+RYjevYoS1B5dwQQCH7nJ9Bm4bELLry0ExT4sHh34f3n7O+kA/GY61OVV3HrZyf8zUcQnGFafsF);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="394" y="799" width="23" height="27" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="94">
<mxCell style="vsdxID=133;fillColor=#FFFFFF;gradientColor=none;shape=stencil(lZdLctswDIZPoy2GBPhcp8k9Mo1Te+raGcdp3dsXqsQXZEnWTqIBfcZPAAQ7evrcv37sOlSf18v55+7P4e267+hbh3g47XeXw5WfOnru6On9fNn9uJy/Tm/D+8drb9k//Tr/7r9wG/xMBDS9F6q/w4pW6v/7y2D+/esy2OvsYGl00K2HumG28Xa0QWlDw4JVoBKYHiJ7D3qNHANE3ZJ9zKCbAGWyRejf59nFY1ywGoxu2cUGc4hBr5EXQ55gEcGHFsuymNiChdS8HdG12EUqQ4xpuUJmEWj9r6i1eChMESRHNO7GHLBWfwa4uqOgosAGCNRiayVShkVwE3m1X8zk4+G0peQ2mrcFXdfVaE6pJmakYBcntCg+WYtecxRFXVkV3ZUUY5VPYOw634B363w35RugZb4Dj4KffQrfA3nBr6wSP4DCCd8u8h3rbyb8KErAEWjR2rQFiy3f2QQrfJc69hzfg9x+D9YIvAMnw3cQRWflT6EV+Ny25/q6nuC5i1vR5VxJ61ScGqxv8dzrjcAjqx+X8MFCEOqTymWf+CFOso/CZPdrq9QdWKSwyK98UkJacCL+4CAIvtO5bDOfJRHxu7yVc/zKR0ufwi8dN/Mrq8Ins5HvTanYtGRBJj9OJoqgcqotzBTFagZPXNZiqqi/nHJNaF/9w5TmAfzW0GufeenZyooD/o70vRVu5bvcZTLfgheHIHcZIyqfe5GVk40pxxTlBDWLpad1mdZS6vM04wRfgVCfDwwkgVe5GHPlhZXKr3109tFhgieR+YaFDet8n771OB/vzCB8olDLZ621kP/OjFes7s4VDwwKmx34oVw03g/H43BPqX+XFxNeGi419PwP);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="370" y="763" width="47" height="17" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="95">
<mxCell style="vsdxID=134;fillColor=#7fba00;gradientColor=none;shape=stencil(jZHRDoIwDEW/Zq/NWAeTZ4T/IDJkERkZoPj3snRGRmLiW3t6t5O0DIupq0fNBJ9mZ2/6aZq5Y3hmQpih087MW8WwZFi01umrs8vQUD/WPumru334H1Z6x/0LwV/7rqLgZXGUTGiYQqpCOhBMIZeEVkFIclAYUgEpDoGsSCThH+0B/DBLAVkSq7MTqCxWK8A8NqMEGZsP3sjam+G/xWzFd52t6Xu6xn5+XP+G6HRYvgE=);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="375" y="772" width="1" height="2" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="96">
<mxCell style="vsdxID=135;fillColor=#7fba00;gradientColor=none;shape=stencil(jVLREoIgEPwaXhngNPXZ7D+c1GQydVDL/j7oKIUZs7dj2bu9hSWQDnXel0SwYVTdtXzIYqwJHIkQsq1LJUddEcgIpFWnyovqprbAc58bpqlu3d1MmLGPmQ7BnngKGY3iN3JC8nlSyOZI4JwebIdFYkYDC80CIZHQyJIswpnVmeEjZAngEjZkI0bBlV0mWok4poErut7Mk/nq7hrWY3nkSSc0FK643o95lncM/7SrHzDx/Hpu9T+A/8artcD93C2zjWz/j4IulhBVsmkwg+t7P3QawsBC9gI=);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="379" y="773" width="29" height="4" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="97">
<mxCell style="vsdxID=136;fillColor=#b8d432;gradientColor=none;shape=stencil(lZbbUgIxDIafZm8zbdLjNep7OAqyI4KzouLbG+xht2FY3LslJP2a9E/ajlYf28f3dYfq4zgcXtff/fNx29Fdh9jvt+uhP/JXR/cdrTaHYf0yHD73z+n3++PZ8/z1dvg6r3BKcQaCPQeh+kmGEMDjn+Uh+T99DilAJwcHpHNEtkSE4JLphHkV0CY7ZUt04HLciZJJK8ACryY1x55G6DaiotnHUMsefUayxWXkCCa25GAgirSJwLuW7S1Y19JNrIGFPnpdq7oDLTKfrlzKrkAJ/nSXGRYiUFyU/TTiWt3Zx/obdWcf5xaRWTZkWjIvoqI8cyWqzmoL8sxVS3YanJ1Xm2rJZqLhImt7UXFSEEjk7UFpkTeLYLbPAoIXjaYJouB7P+qybKmeVcF7ztSI5MuGrtC9qqhCt3WRClegxZFbQKE2x50j4Dx04g2xG2zhNCaVSY7GQZRNWKdDhXNDyEYHPVt3G0FLrZeQCrcBSGSuwAu49WDFfKtO1+AWBHuybGEb0E6yy24qGy8m3GyfWZaIJAss7yQI7M25Nsvk8yKaZYquRl+ldKLW4789LTqa21deXYLJMrM3mAZwVs7j6dTRjRejG0ELNfMwD9iSeZaLVuLrOs/HDN/1+0XX+1J//hjfEpt+t0tPken/8u3BpvRuoftf);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="375" y="766" width="37" height="9" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="&lt;div style=&quot;font-size: 1px&quot;&gt;&lt;p style=&quot;text-align:left;margin-left:0;margin-right:0;margin-top:0px;margin-bottom:0px;text-indent:0;vertical-align:middle;direction:ltr;&quot;&gt;&lt;font style=&quot;font-size:16.93px;font-family:Oracle Sans;color:#000000;direction:ltr;letter-spacing:0px;line-height:120%;opacity:1&quot;&gt;Azure Data&lt;br/&gt;&lt;/font&gt;&lt;/p&gt;&lt;/div&gt;" tags="Background" id="98">
<mxCell style="verticalAlign=middle;align=left;overflow=width;vsdxID=138;fillColor=none;gradientColor=none;shape=stencil(nZBLDoAgDERP0z3SIyjew0SURgSD+Lu9kMZoXLhwN9O+tukAlrNpJg1SzDH4QW/URgNYgZTkjA4UkwJUgGXng+6DX1zLfmoymdXo17xh5zmRJ6Q42BWCfc2oJfdAr+Yv+AP9Cb7OJ3H/2JG1HNGz/84klThPVCc=);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="351" y="830" width="169" height="20" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="&lt;div style=&quot;font-size: 1px&quot;&gt;&lt;p style=&quot;text-align:left;margin-left:0;margin-right:0;margin-top:0px;margin-bottom:0px;text-indent:0;vertical-align:middle;direction:ltr;&quot;&gt;&lt;font style=&quot;font-size:16.93px;font-family:Oracle Sans;color:#000000;direction:ltr;letter-spacing:0px;line-height:120%;opacity:1&quot;&gt;Lake Storage&lt;br/&gt;&lt;/font&gt;&lt;/p&gt;&lt;/div&gt;" tags="Background" id="99">
<mxCell style="verticalAlign=middle;align=left;overflow=width;vsdxID=139;fillColor=none;gradientColor=none;shape=stencil(nZBLDoAgDERP0z3SIyjew0SURgSD+Lu9kMZoXLhwN9O+tukAlrNpJg1SzDH4QW/URgNYgZTkjA4UkwJUgGXng+6DX1zLfmoymdXo17xh5zmRJ6Q42BWCfc2oJfdAr+Yv+AP9Cb7OJ3H/2JG1HNGz/84klThPVCc=);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="344" y="847" width="203" height="20" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="100">
<mxCell style="vsdxID=142;fillColor=#e6ad10;gradientColor=#c87e0e;shape=stencil(UzV2Ls5ILEhVNTIoLinKz04tz0wpyVA1dlE1MsrMy0gtyiwBslSNXVWNndPyi1LTi/JL81Ig/IJEkEoQKze/DGRCBUSfoYEBSI+RQSWED+G5QZTmZObhUQrjY1VMtlISHECuUiADERxpmTk5kNBElkcPPqAQJOiNXQE=);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="642" y="451" width="28" height="62" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="101">
<mxCell style="vsdxID=143;fillColor=#000000;gradientColor=none;fillOpacity=20;shape=stencil(nZFNEoIwDIVPky1TGlBYI96DkWI71pYpoHh7qcG/jrJg917ypZn0ARadrFoBnHW9sydxVXUvAXfAuTJSONVPCrAELBrrxNHZwdTk28qTXp3txb8w0lzMmJ/h7EY+jdLNo7AnWiuzQD/9T3g1ugBm2yjJ/sOHwdFxMTXzJMJ8xuOvVSMPL5oL/LVgxBDBNX8U0pN4h9EorSnLz34Y3lSi4LG8Aw==);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="624" y="466" width="28" height="46" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="102">
<mxCell style="vsdxID=144;fillColor=#000000;gradientColor=none;fillOpacity=18;shape=stencil(nZFNEoIwDIVPky1TGlBYI96DkWI71pYpoHh7qcG/jrJg917ypZn0ARadrFoBnHW9sydxVXUvAXfAuTJSONVPCrAELBrrxNHZwdTk28qTXp3txb8w0lzMmJ/h7EY+jdLNo7AnWiuzQD/9T3g1ugBm2yjJ/sOHwdFxMTXzJMJ8xuOvVSMPL5oL/LVgxBDBNX8U0pN4h9EorSnLz34Y3lSi4LG8Aw==);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="624" y="467" width="28" height="46" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="103">
<mxCell style="vsdxID=145;fillColor=#f6d751;gradientColor=#e6ad10;shape=stencil(nZFNEoIwDIVPky1TGlBYI96DkWI71pYpoHh7qcG/jrJg917ypZn0ARadrFoBnHW9sydxVXUvAXfAuTJSONVPCrAELBrrxNHZwdTk28qTXp3txb8w0lzMmJ/h7EY+jdLNo7AnWiuzQD/9T3g1ugBm2yjJ/sOHwdFxMTXzJMJ8xuOvVSMPL5oL/LVgxBDBNX8U0pN4h9EorSnLz34Y3lSi4LG8Aw==);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="624" y="466" width="28" height="46" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="104">
<mxCell style="vsdxID=146;fillColor=#f9e589;gradientColor=#f6d751;shape=stencil(nZHRDoIwDEW/Zq/LaDHAM+J/EBmyiIyMgfj3bumMk0QTebu9PV27XIbl1NWjZCAma/RV3lVjO4ZHBqCGThplnWJYMSxbbeTF6HloqB5rT3p104t/YaU54SdAPOLqRGCvhq9gIn6gr+YuOOd4iOnzbOjeZMsHA3kG5KxATpFyLAIEH9evGJZkPM0DgX9+fR/oxDuCVvU9JRj3t5E5i+LG6gk=);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="607" y="482" width="28" height="31" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="&lt;div style=&quot;font-size: 1px&quot;&gt;&lt;p style=&quot;text-align:left;margin-left:0;margin-right:0;margin-top:0px;margin-bottom:0px;text-indent:0;vertical-align:middle;direction:ltr;&quot;&gt;&lt;font style=&quot;font-size:16.93px;font-family:Oracle Sans;color:#000000;direction:ltr;letter-spacing:0px;line-height:120%;opacity:1&quot;&gt;Power BI&lt;br/&gt;&lt;/font&gt;&lt;/p&gt;&lt;/div&gt;" tags="Background" id="105">
<mxCell style="verticalAlign=middle;align=left;overflow=width;vsdxID=147;fillColor=none;gradientColor=none;shape=stencil(nZBLDoAgDERP0z3SIyjew0SURgSD+Lu9kMZoXLhwN9O+tukAlrNpJg1SzDH4QW/URgNYgZTkjA4UkwJUgGXng+6DX1zLfmoymdXo17xh5zmRJ6Q42BWCfc2oJfdAr+Yv+AP9Cb7OJ3H/2JG1HNGz/84klThPVCc=);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="605" y="518" width="135" height="20" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="106">
<mxCell style="vsdxID=148;fillColor=none;gradientColor=none;shape=stencil(nZBNDkIhDIRP0z3SIyDegwSQRgQC+PNu/yCNkRjjwt1M+7XpFFC1YIoDKVqv+eIeZHsAPIKUlIKr1IcC1IDK5+rONd+SZV/MJKe65vvc8OQ5MSek2FZ3YjBSWsCD+Bt9+a/wT3SI9+GeYuTca/8z6Cjxk1Dv);strokeColor=#312d2a;strokeWidth=2;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="152" y="67" width="101" height="729" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="107">
<mxCell style="vsdxID=149;fillColor=none;gradientColor=none;shape=stencil(dU9bDoAgDDvN/pEdwcc9TEBZRCCIr9sLWYzGxL92bbcOsF5MHzRIsaToJ72TSgawASnJGR0pZQTYAtaDj3qMfnWKeeiLs6DZb2XDwTlRElKczCrBvGOrJfey3uKPOYPnyEDWcse3/i2VR/wQthc=);strokeColor=#312d2a;strokeWidth=2;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="152" y="339" width="101" height="1" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="108">
<mxCell style="vsdxID=150;fillColor=none;gradientColor=none;shape=stencil(dU9bDoAgDDvN/pEdwcc9TEBZRCCIr9sLWYzGxL92bbcOsF5MHzRIsaToJ72TSgawASnJGR0pZQTYAtaDj3qMfnWKeeiLs6DZb2XDwTlRElKczCrBvGOrJfey3uKPOYPnyEDWcse3/i2VR/wQthc=);strokeColor=#312d2a;strokeWidth=2;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="152" y="187" width="101" height="1" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="109">
<mxCell style="vsdxID=151;fillColor=#312d2a;gradientColor=none;shape=stencil(pVTRboMwDPyavFqOHUjy3HX/Ua10oDGoKN3o3zcsUUeCAHV7C8fZd7EdC95dysO5EISXvms/iu/q2JeCXwRR1ZRFV/XuJHgveHdqu+K9a6/N0X+fDyNzPH22X2OGwcdZC3oMIrx5IFOg1Q/y6vlv184HSE+QiCEgABmBJA8NlHICoDQYEzg8Uw6IyoDyqXRdNVOrzpmJvBLkcs2qi1A6NouxUctgTWwVE5sMuYl9bsoysElqBMQzZU6ULai0RnNx6aq9UiMDmMf9xBX2JL1HjAb75NUsQkbbd3PN05uXsxp4S98m+o9ZG2je9XQeH9qTWVrSTmq1+VCe5ccPEWNyHqKXcsvsX3zlOrTMxz9z132sc93hd0udqrr2S276P91qDvIbkfd3);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="152" y="484" width="136" height="15" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="110">
<mxCell style="vsdxID=152;fillColor=#312d2a;gradientColor=none;shape=stencil(pVTLcsMgDPwarhqQeJhzmvxHpnFqT107Q5w2/fvi4rpAJnjS3uT1il0kIUabc7M/1Qz5eXTDa/3RHsaG0RNDbPumdu3oI0ZbRpvj4OoXN1z6Q/g+7SfmFL0N79MJ15BnLRg9ZSH/DIiSYOQ3sgsJzxcXMkQgCM7nhBlQCAIDdMWcMwPSQFXNHLqVniGpAE2s3bV9bFZBJRKzCBpLXn2G0qlbnjr1DGFSrzzzKcFS6nNVVoK2WZEAKVOOSD8QyLxIt+LCl7tQowqkTBvKC+zo+IBUBqx48G6Wg8L1y/nBMqu3swbIrrR0aVg+kVFTl7bnE7loR8N0Tzsr1vpbeTghfY08JWsoPQYLhP/iSwK6z+d/5pZ9lLk++F1Vx7brwqaL/+erzUNhLdL2Cw==);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="431" y="485" width="170" height="15" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="111">
<mxCell style="vsdxID=153;fillColor=#312d2a;gradientColor=none;shape=stencil(pZTRboMwDEW/Jq9WYieEPHftf1QrHWgMKkq37u8XllTFaQGhvsXhmHvtJBa0OZf7UyFQnvuu/Sx+qkNfCnoTiFVTFl3V+5WgraDNse2Kj669NIcQn/YDOay+2u/hD9eQZzRYPWSh/A07EvA/3gX8/dIFXsUEBIUxIW7JEF4xhNpCnkcCOUGRMIBZJOipal01I5MIGTKPBNrMmZTcIEFmuEfJ/RE4yy2OJG+mQdnZxgASl9VAlss60ElnRkzUUQjSzUvz7hjJeqMA82k4t+AU45fqchIMLhbmr5FdqsxZoHxdU5V8OEqXSN8RfDjtaeH0BiUtXXoVK/HkzWVgGX0r4fnPU9qfRzaNawJ6BV/n5SXaL+5j6VjVdZhq4+/pGPNbYQTS9g8=);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="385" y="555" width="15" height="207" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="112">
<mxCell style="vsdxID=154;fillColor=#312d2a;gradientColor=none;shape=stencil(pVTLcoMwDPwaXzWy5Qc+p8l/ZBpSmFLIENLSv6+pPQk2g5m0N7GsvCtLFqPdtTpeSibwOvTde/lVn4aK0QsTom6rsq8HFzHaM9qdu75867tbe/Lfl+PEnKKP7nM6YfR51oKZkgR+e0BJMPoXOXj+6633CdwTOGJICIASwKWHRpFyAiANFDpwaKEcEKlAyLl0U7dzq85Z7FWA5jmrLkOa2CzGRi2BNbFVTGwS6MTnpiwBJbKuMlooU6JsQapNcS4AdeaSCkAVNxQz7Nn5HikMWPlkcRZBqe3qHu3LlGcNkN3Qt4n+fdpGsex7OpF37dk0rWknl7X5VJ7lx08RY7IO2Wtnc/UvvnQdWufjn7l5H3muCx576lw3jV9z8//pXnOQ34m0/wE=);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="152" y="1083" width="136" height="15" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="113">
<mxCell style="vsdxID=155;fillColor=#312d2a;gradientColor=none;shape=stencil(pVTRcoMgEPwaXm8ODkSe0+Q/Mo2pTq1mjGnt3xcLkwCOOGnfznWP3buDY7S71sdLxQRex6F/r76a01gzemFCNF1dDc1oI0Z7RrtzP1RvQ3/rTu77cpyZc/TRf84nTC7PGNBzksBvBygJWv4iB8d/vQ0ugTsCR/QJHlACuHDQJFKOB6SGsvQcWih7RCoQRSjdNl1o1TqLvQooeM6qzZA6NouxUUNgdGwVE5sEReJzU5aAEllbGS2UKVE2INMeLcW57XamRyWgiueJGXZwvENKDebJ0gyCEtu1PYaXKc5ooC19k+jf79okllNP7+NdO7hLa9pJrzYfyrP8+CFiTC589trZXP2LL+2E1vn4Z27eR55rg8eWOjdt65Zc+D/dahZyG5H2Pw==);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="152" y="924" width="136" height="15" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="114">
<mxCell style="vsdxID=156;fillColor=none;gradientColor=none;shape=stencil(dU9bDoAgDDvN/pEdwcc9TEBZRCCIr9sLWYzGxL92bbcOsF5MHzRIsaToJ72TSgawASnJGR0pZQTYAtaDj3qMfnWKeeiLs6DZb2XDwTlRElKczCrBvGOrJfey3uKPOYPnyEDWcse3/i2VR/wQthc=);strokeColor=#312d2a;strokeWidth=2;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="152" y="653" width="101" height="1" as="geometry" />
</mxCell>
</UserObject>
</root>
</mxGraphModel>
</diagram>
</mxfile>

View File

@@ -0,0 +1,368 @@
<svg width="712" height="1112" viewBox="0 0 712 1112" fill="none" xmlns="http://www.w3.org/2000/svg">
<g id="data-lake-db-at-azure-process">
<rect width="712" height="1112" fill="white"/>
<g id="Data Sources">
<rect x="0.5" y="0.5" width="215" height="1111" rx="3.5" fill="#F5F4F2"/>
<rect x="0.5" y="0.5" width="215" height="1111" rx="3.5" stroke="#9E9892"/>
<text id="OCI Region" fill="#312D2A" xml:space="preserve" style="white-space: pre" font-family="Oracle Sans" font-size="16" font-weight="bold" letter-spacing="0em"><tspan x="58.0703" y="21.816">Data Sources</tspan></text>
</g>
<g id="Data Sources_2">
<rect x="264.5" y="0.5" width="215" height="1111" rx="3.5" fill="#F5F4F2"/>
<rect x="264.5" y="0.5" width="215" height="1111" rx="3.5" stroke="#9E9892"/>
<text id="OCI Region_2" fill="#312D2A" xml:space="preserve" style="white-space: pre" font-family="Oracle Sans" font-size="16" font-weight="bold" letter-spacing="0em"><tspan x="336.883" y="21.816">Data Tier</tspan></text>
</g>
<g id="Data Sources_3">
<rect x="496.5" y="0.5" width="215" height="1111" rx="3.5" fill="#F5F4F2"/>
<rect x="496.5" y="0.5" width="215" height="1111" rx="3.5" stroke="#9E9892"/>
<text id="OCI Region_3" fill="#312D2A" xml:space="preserve" style="white-space: pre" font-family="Oracle Sans" font-size="16" font-weight="bold" letter-spacing="0em"><tspan x="535.453" y="21.816">Consumption Tier</tspan></text>
</g>
<g id="Other relational databases">
<g id="Services-Enterprise-resource-Planning-Cloud-Service-ERP">
<g id="Group 514">
<path id="Vector" d="M92.0093 83.148L98.786 79.7514L92.0093 76.3691L94.7771 74.9419H78.7698L78.9268 72.8726C79.1192 70.4761 79.9217 68.1688 81.2577 66.1703C82.5938 64.1718 84.4189 62.5487 86.5595 61.4554C87.0189 61.2188 87.419 60.8816 87.7303 60.469C88.0415 60.0564 88.2557 59.5789 88.3571 59.0721C88.837 56.6085 90.1584 54.3885 92.0949 52.7925C94.0314 51.1965 96.4624 50.3237 98.9715 50.3237C99.3088 50.302 99.6471 50.302 99.9844 50.3237H100.327C100.776 50.3288 101.221 50.24 101.634 50.0631C102.046 49.8861 102.418 49.6249 102.724 49.2961C104.185 47.7348 106.001 46.5492 108.018 45.8402C110.035 45.1313 112.193 44.9198 114.309 45.2238C116.425 45.5278 118.437 46.3383 120.173 47.5865C121.909 48.8346 123.318 50.4835 124.281 52.393C124.508 52.8751 124.842 53.2991 125.257 53.6329C125.672 53.9667 126.158 54.2016 126.677 54.3197C128.198 54.6517 129.647 55.2509 130.957 56.0893C133.868 57.9264 135.974 60.7993 136.85 64.1286C137.727 67.4579 137.308 70.9957 135.68 74.0286L135.138 75.0418H121.784L124.366 76.469L117.59 79.7942L124.423 83.2194L108.074 91.1686L92.0093 83.148Z" fill="white"/>
<path id="Vector_2" d="M112.397 45.7577C114.737 45.7481 117.033 46.3957 119.023 47.627C121.013 48.8582 122.617 50.6236 123.653 52.7222C123.933 53.2828 124.334 53.7738 124.828 54.159C125.322 54.5443 125.895 54.814 126.507 54.9485C127.953 55.2744 129.332 55.8439 130.587 56.6326C133.354 58.3654 135.357 61.0872 136.189 64.2446C137.021 67.4019 136.62 70.7578 135.067 73.6299L134.724 74.2721H119.031L122.826 76.3843L115.978 79.738L118.047 80.7656L122.826 83.1489L108.074 90.3846L93.6078 83.1489L98.3301 80.7799L100.384 79.7523L93.6078 76.37L97.7879 74.3006H79.5408L79.6407 72.9876C79.7984 70.7062 80.5365 68.5029 81.785 66.587C83.0335 64.6712 84.7509 63.1065 86.774 62.0414C87.3257 61.7579 87.8068 61.3544 88.182 60.8604C88.5573 60.3665 88.8172 59.7947 88.9426 59.1872C89.2551 57.5854 89.9502 56.0831 90.9688 54.8082C91.9873 53.5334 93.299 52.5239 94.7919 51.8659C96.0794 51.3052 97.468 51.0138 98.8722 51.0096H99.8138H100.228C100.763 51.0023 101.292 50.8873 101.782 50.6716C102.272 50.4558 102.714 50.1437 103.081 49.7537C104.273 48.4799 105.717 47.4672 107.32 46.7795C108.924 46.0917 110.652 45.7438 112.397 45.7577ZM112.397 44.3306C110.471 44.3321 108.566 44.7309 106.801 45.5019C105.036 46.2729 103.449 47.3997 102.139 48.8118C101.9 49.0666 101.61 49.2691 101.288 49.4066C100.967 49.5441 100.62 49.6137 100.27 49.611H99.985C99.6286 49.5897 99.2713 49.5897 98.915 49.611C96.2374 49.6159 93.6442 50.5484 91.5764 52.2501C89.5087 53.9517 88.094 56.3173 87.573 58.9445C87.4917 59.3455 87.3213 59.7231 87.0743 60.0492C86.8274 60.3753 86.5102 60.6416 86.1463 60.8284C83.9103 61.9969 82.0087 63.7159 80.6208 65.8234C79.233 67.9308 78.4047 70.3571 78.214 72.8735L78.1141 74.1865L78 75.7278H91.7531L90.4263 76.3985L92.9658 77.6687L97.2458 79.7809L92.9658 81.893L90.4263 83.1775L92.9658 84.4476L107.432 91.6833L108.074 91.9972L108.702 91.6833L123.454 84.4334L126.036 83.1632L123.454 81.8788L119.174 79.738L123.454 77.6544L125.908 76.4556L124.481 75.6992H135.523L135.923 74.9571L136.265 74.3149C137.321 72.3737 137.912 70.2137 137.991 68.0051C138.07 65.7966 137.635 63.5999 136.721 61.5881C135.807 59.5762 134.438 57.8043 132.722 56.4119C131.007 55.0195 128.991 54.0447 126.835 53.5642C126.432 53.4784 126.053 53.3064 125.723 53.0601C125.393 52.8137 125.12 52.4988 124.923 52.1371C123.775 49.7935 121.992 47.8194 119.778 46.4394C117.563 45.0593 115.006 44.3287 112.397 44.3306Z" fill="white"/>
<path id="Vector_3" d="M115.278 82.1214L117.29 83.1347L108.088 87.6445L99.0998 83.149L101.069 82.15L98.3294 80.7799L93.6071 83.149L108.074 90.3846L122.825 83.149L118.046 80.7656L115.278 82.1214Z" fill="#2D5967"/>
<path id="Vector_4" d="M108.074 83.6063L122.825 76.3849L118.046 73.9873L115.278 75.3431L117.29 76.3564L108.088 80.8661L99.0998 76.3706L101.069 75.3859L98.3294 74.0158L93.6071 76.3706L108.074 83.6063Z" fill="#2D5967"/>
<path id="Vector_5" d="M122.825 69.6053L108.202 62.2983L93.6071 69.5911L108.074 76.8267L122.825 69.6053ZM108.202 65.0385L117.29 69.5768L108.088 74.0866L99.0998 69.5911L108.202 65.0385Z" fill="#2D5967"/>
<path id="Vector_6" d="M115.278 75.3431L117.29 76.3564L108.088 80.8661L99.0998 76.3706L101.069 75.3859L98.3294 74.0158L93.6071 76.3706L108.074 83.6063L122.825 76.3849L118.046 73.9873L115.278 75.3431Z" fill="#2D5967"/>
<path id="Vector_7" d="M115.278 82.1214L117.29 83.1347L108.088 87.6445L99.0998 83.149L101.069 82.15L98.3294 80.7799L93.6071 83.149L108.074 90.3846L122.825 83.149L118.046 80.7656L115.278 82.1214Z" fill="#2D5967"/>
<path id="Vector_8" d="M130.6 56.6328C129.341 55.8426 127.956 55.2731 126.506 54.9487C125.894 54.8142 125.32 54.5445 124.827 54.1592C124.333 53.774 123.932 53.283 123.652 52.7224C122.616 50.6238 121.011 48.8584 119.021 47.6272C117.031 46.3959 114.736 45.7483 112.396 45.7579C110.666 45.7614 108.955 46.1204 107.37 46.8127C105.785 47.505 104.358 48.5159 103.18 49.7825C102.759 50.2308 102.239 50.5751 101.662 50.7881C101.085 51.0011 100.467 51.077 99.8555 51.0098C98.1399 50.8561 96.4131 51.1358 94.8336 51.8233C93.3407 52.4813 92.029 53.4908 91.0105 54.7656C89.992 56.0404 89.2968 57.5428 88.9843 59.1445C88.8589 59.7521 88.599 60.3239 88.2238 60.8178C87.8485 61.3118 87.3674 61.7153 86.8158 61.9988C84.7926 63.0639 83.0752 64.6286 81.8268 66.5444C80.5783 68.4602 79.8401 70.6635 79.6824 72.945L79.5397 74.3008H91.5523V71.8176H82.2789C82.5979 70.2005 83.2764 68.6759 84.2643 67.3567C85.2521 66.0375 86.524 64.9575 87.9856 64.1966C88.8649 63.7409 89.6297 63.0921 90.2226 62.2987C90.8156 61.5054 91.2214 60.588 91.4096 59.6155C91.6482 58.4031 92.1762 57.2663 92.9488 56.3021C93.7214 55.338 94.7155 54.575 95.8466 54.0782C97.0385 53.5524 98.3439 53.3364 99.6415 53.4502C100.624 53.5533 101.616 53.4279 102.542 53.0838C103.467 52.7397 104.301 52.1862 104.977 51.4665C105.926 50.4467 107.074 49.6328 108.35 49.0755C109.626 48.5182 111.003 48.2294 112.396 48.2269C114.277 48.2124 116.125 48.7298 117.725 49.7196C119.325 50.7093 120.613 52.1312 121.441 53.8213C121.889 54.7126 122.53 55.4929 123.317 56.1052C124.104 56.7174 125.018 57.1463 125.992 57.3606C127.166 57.6388 128.282 58.1219 129.288 58.7878C131.413 60.1332 132.981 62.2006 133.704 64.6101C134.428 67.0195 134.258 69.6092 133.225 71.9032H124.665V74.3008H134.738L135.08 73.6586C136.642 70.7838 137.047 67.4212 136.215 64.2571C135.382 61.0931 133.374 58.3661 130.6 56.6328Z" fill="#2D5967"/>
</g>
</g>
<g id="Icon Text Label">
<text id="IconLabel" fill="black" xml:space="preserve" style="white-space: pre" font-family="Oracle Sans" font-size="16" letter-spacing="0em"><tspan x="45.3906" y="109.816">Oracle Cloud ERP</tspan></text>
</g>
</g>
<g id="Group 1550">
<g id="Data Sources_4">
<rect x="272.71" y="257.604" width="199" height="847" rx="3.5" fill="white"/>
<rect x="272.71" y="257.604" width="199" height="847" rx="3.5" stroke="#9E9892"/>
<text id="Fault Domain" fill="#312D2A" xml:space="preserve" style="white-space: pre" font-family="Oracle Sans" font-size="16" font-weight="600" letter-spacing="0em"><tspan x="337.241" y="278.92">Ingestion</tspan></text>
</g>
<g id="Microsoft SQL Server">
<g id="Database-Action-gear">
<g id="Group 309">
<path id="Vector_9" d="M117.15 912.736L117.065 911.966C113.58 912.358 110.077 912.558 106.57 912.565C103.911 912.565 80.5455 912.351 80.5455 904.73V862.223C80.5455 854.388 103.911 854.16 106.57 854.16C109.229 854.16 132.609 854.388 132.609 862.223V889.758L134.5 891.667L132.68 893.946L135.524 894.274V902.921L132.68 903.248L134.5 905.528L128.385 911.653L126.465 910.115L126.067 910.243L125.783 912.736H117.15Z" fill="white"/>
<path id="Vector_10" d="M106.569 854.872C115.386 854.872 131.896 856.41 131.896 862.222V890.057L133.546 891.709L131.896 893.789V894.573L134.869 894.9V902.293L131.896 902.621V903.405L133.546 905.484L128.341 910.698L126.606 909.273L125.412 909.644L125.156 911.98H117.775L117.69 911.14C114 911.593 110.286 911.831 106.569 911.852C97.8229 911.852 81.2554 910.427 81.2554 904.729V862.222C81.2554 856.41 97.8229 854.872 106.569 854.872ZM106.569 853.447C102.103 853.447 79.8333 853.875 79.8333 862.222V904.729C79.8333 912.892 102.103 913.276 106.569 913.276C109.865 913.27 113.16 913.094 116.438 912.749L116.509 913.447H126.464L126.606 912.179L126.72 911.197L127.488 911.809L128.483 912.607L129.379 911.709L134.598 906.481L135.494 905.584L134.698 904.587L134.086 903.818L135.068 903.704L136.333 903.561V893.59L135.068 893.447L134.044 893.333L134.655 892.564L135.452 891.567L134.556 890.669L133.318 889.43V862.222C133.318 853.875 111.119 853.447 106.569 853.447Z" fill="white"/>
<path id="Vector_11" d="M131.498 902.906L131.569 902.721L131.498 902.906Z" fill="#2D5967"/>
<path id="Vector_12" d="M110.582 909.216C109.273 909.216 107.936 909.287 106.571 909.287C100.932 909.345 95.3031 908.771 89.7904 907.577C84.7704 906.424 83.647 905.084 83.647 904.728V893.931C88.4679 896.78 99.5318 897.663 106.287 897.677V895.298C100.744 895.349 95.2117 894.79 89.7904 893.631C84.7562 892.435 83.6328 891.082 83.6328 890.711V880.141C88.539 882.99 99.8447 883.888 106.557 883.888C109.259 883.888 112.7 883.745 116.17 883.404H116.341C121.446 882.876 126.594 881.879 129.495 880.17V885.17L129.595 885.255L131.885 887.549V862.791C131.891 862.71 131.891 862.629 131.885 862.549C131.892 862.435 131.892 862.321 131.885 862.207C131.885 857.278 118.759 855.084 106.557 855.084C94.3554 855.084 81.2578 857.278 81.2578 862.207C81.2508 862.321 81.2508 862.435 81.2578 862.549C81.2517 862.629 81.2517 862.71 81.2578 862.791V904.728C81.2578 910.255 97.8253 911.708 106.571 911.708C108.406 911.708 110.567 911.708 112.843 911.495L110.582 909.216ZM106.571 857.421C112.213 857.343 117.844 857.922 123.352 859.144C128.4 860.384 129.51 861.78 129.51 862.207C129.51 862.634 128.4 864.016 123.352 865.255C117.844 866.478 112.213 867.056 106.571 866.979C100.93 867.057 95.2986 866.478 89.7904 865.255C84.7562 864.016 83.647 862.634 83.647 862.207C83.647 861.78 84.7562 860.384 89.7904 859.144C95.2986 857.921 100.93 857.343 106.571 857.421ZM123.352 879.842C117.838 881.022 112.209 881.581 106.571 881.509C100.933 881.581 95.3046 881.022 89.7904 879.842C84.7562 878.646 83.6328 877.292 83.6328 876.908V865.512C87.8991 868.161 97.5124 869.386 106.557 869.386C115.602 869.386 125.172 868.161 129.495 865.512V876.908C129.51 877.292 128.386 878.646 123.352 879.842Z" fill="#2D5967"/>
<path id="Vector_13" d="M121.558 892.037C120.264 892.051 119.004 892.448 117.935 893.178C116.866 893.908 116.037 894.938 115.552 896.139C115.066 897.34 114.947 898.659 115.208 899.928C115.469 901.197 116.099 902.36 117.018 903.272C117.938 904.183 119.106 904.801 120.376 905.049C121.645 905.297 122.96 905.162 124.154 904.663C125.348 904.164 126.367 903.323 127.085 902.244C127.802 901.166 128.185 899.899 128.185 898.603C128.185 897.735 128.013 896.875 127.679 896.074C127.345 895.272 126.856 894.545 126.239 893.935C125.623 893.324 124.892 892.842 124.088 892.516C123.285 892.19 122.425 892.027 121.558 892.037ZM121.558 902.777C120.73 902.78 119.919 902.536 119.23 902.077C118.54 901.618 118.002 900.964 117.684 900.199C117.365 899.433 117.281 898.589 117.442 897.776C117.603 896.962 118.002 896.214 118.587 895.628C119.173 895.041 119.919 894.642 120.731 894.481C121.544 894.32 122.386 894.404 123.15 894.723C123.915 895.041 124.567 895.58 125.026 896.271C125.484 896.962 125.727 897.774 125.724 898.603C125.724 899.71 125.285 900.772 124.504 901.555C123.723 902.338 122.663 902.777 121.558 902.777Z" fill="#2D5967"/>
<path id="Vector_14" d="M131.598 894.544L131.498 894.288L133.546 891.709L128.341 886.496L125.767 888.547L125.511 888.447L125.156 885.171H117.775L117.419 888.447L117.163 888.547L114.589 886.496L109.385 891.709L111.432 894.288L111.333 894.544L108.062 894.9V902.293L111.333 902.65L111.432 902.906L109.385 905.484L114.589 910.698L117.163 908.647L117.419 908.746L117.775 912.023H125.156L125.511 908.746L125.767 908.647L128.341 910.698L133.546 905.484L131.498 902.906L131.598 902.65L134.869 902.293V894.9L131.598 894.544ZM132.451 900.157L129.806 900.442L129.564 901.182C129.424 901.646 129.238 902.094 129.01 902.521L128.654 903.219L130.332 905.299L128.185 907.578L126.108 905.897L125.341 906.154C124.914 906.383 124.466 906.569 124.004 906.709L123.278 906.952L122.98 909.601H119.908L119.652 906.98L118.913 906.738C118.451 906.595 118.003 906.409 117.576 906.182L116.808 905.826L114.774 907.578L112.542 905.299L114.205 903.219L113.964 902.521C113.735 902.094 113.55 901.646 113.409 901.182L113.096 900.456L110.451 900.171V897.037L113.096 896.752L113.338 896.011C113.481 895.549 113.667 895.1 113.893 894.672L114.248 893.989L112.542 891.909L114.732 889.701L116.808 891.367L117.491 891.011C117.918 890.785 118.365 890.599 118.827 890.456L119.567 890.214L119.851 887.564H122.966L123.264 890.214L123.99 890.456C124.452 890.596 124.9 890.783 125.326 891.011L126.023 891.367L128.185 889.687L130.361 891.909L128.682 894.003L129.038 894.687C129.264 895.115 129.45 895.563 129.593 896.026L129.834 896.766L132.479 897.051L132.451 900.157Z" fill="#2D5967"/>
</g>
</g>
<g id="Icon Text Label_2">
<text id="IconLabel_2" fill="black" xml:space="preserve" style="white-space: pre" font-family="Oracle Sans" font-size="16" letter-spacing="0em"><tspan x="73.5703" y="931.263">Microsoft</tspan></text>
<text id="IconLabel_3" fill="black" xml:space="preserve" style="white-space: pre" font-family="Oracle Sans" font-size="16" letter-spacing="0em"><tspan x="67.8594" y="947.263">SQL Server</tspan></text>
<text id="IconLabel_4" fill="black" xml:space="preserve" style="white-space: pre" font-family="Oracle Sans" font-size="16" letter-spacing="0em"><tspan x="57.5391" y="963.263">(on-premises)</tspan></text>
</g>
</g>
<g id="Other relational databases_2">
<g id="Database">
<g id="Group 15">
<path id="Vector_15" d="M108.189 206.027C105.518 206.027 82.0462 205.813 82.0462 198.17V155.541C82.0462 147.684 105.518 147.456 108.189 147.456C110.86 147.456 134.346 147.684 134.346 155.541V198.17C134.346 205.813 110.875 206.027 108.189 206.027Z" fill="white"/>
<path id="Vector_16" d="M108.19 148.17C117.048 148.17 133.633 149.713 133.633 155.541V198.17C133.633 203.884 116.99 205.313 108.19 205.313C99.3905 205.313 82.7619 203.884 82.7619 198.17V155.541C82.7619 149.713 99.4047 148.17 108.19 148.17ZM108.19 146.741C103.705 146.741 81.3333 147.17 81.3333 155.541V198.17C81.3333 206.355 103.705 206.741 108.19 206.741C112.676 206.741 135.062 206.327 135.062 198.17V155.541C135.062 147.17 112.762 146.741 108.19 146.741Z" fill="white"/>
<path id="Vector_17" d="M133.634 155.542C133.634 149.713 117.048 148.17 108.191 148.17C99.3338 148.17 82.7623 149.713 82.7623 155.542V198.17C82.7623 203.885 99.4052 205.313 108.191 205.313C116.977 205.313 133.634 203.885 133.634 198.17V155.542ZM130.777 184.113C130.777 184.37 129.705 185.656 124.805 186.842C119.345 188.005 113.772 188.551 108.191 188.47C102.589 188.546 96.9967 187.99 91.5195 186.813C86.6195 185.628 85.6195 184.342 85.6195 184.085V173.599C90.7338 176.385 101.691 177.228 108.262 177.228C114.834 177.228 125.805 176.385 130.919 173.599L130.777 184.113ZM130.777 170.085C130.777 170.342 129.705 171.642 124.805 172.813C119.345 173.976 113.772 174.522 108.191 174.442C102.589 174.518 96.9967 173.962 91.5195 172.785C86.6195 171.613 85.6195 170.313 85.6195 170.056V159.17C90.7338 162.028 101.691 162.899 108.262 162.899C114.834 162.899 125.805 162.042 130.919 159.17L130.777 170.085ZM91.5338 152.67C97.0041 151.481 102.594 150.93 108.191 151.028C113.796 150.953 119.39 151.528 124.862 152.742C129.905 153.885 130.848 155.313 130.848 155.542C130.848 155.77 129.834 157.17 124.862 158.399C119.39 159.612 113.796 160.187 108.191 160.113C102.592 160.191 97.0019 159.621 91.5338 158.413C86.5623 157.17 85.6195 155.828 85.6195 155.542C85.6195 155.256 86.6338 153.899 91.6052 152.685L91.5338 152.67ZM124.877 200.87C119.395 202.048 113.797 202.604 108.191 202.528C102.589 202.603 96.9967 202.048 91.5195 200.87C86.6195 199.699 85.6195 198.399 85.6195 198.17V187.628C90.7338 190.413 101.691 191.256 108.262 191.256C114.834 191.256 125.805 190.413 130.919 187.628V198.17C130.919 198.428 129.848 199.728 124.948 200.899" fill="#2D5967"/>
</g>
</g>
<g id="Icon Text Label_3">
<text id="IconLabel_5" fill="black" xml:space="preserve" style="white-space: pre" font-family="Oracle Sans" font-size="16" letter-spacing="0em"><tspan x="51.7266" y="224.557">Other relational</tspan></text>
<text id="IconLabel_6" fill="black" xml:space="preserve" style="white-space: pre" font-family="Oracle Sans" font-size="16" letter-spacing="0em"><tspan x="71.3281" y="240.557">databases</tspan></text>
<text id="IconLabel_7" fill="black" xml:space="preserve" style="white-space: pre" font-family="Oracle Sans" font-size="16" letter-spacing="0em"><tspan x="57.5391" y="256.557">(on-premises)</tspan></text>
</g>
</g>
<g id="Azure SQL Database">
<g id="Azure-SQL-Database">
<g id="Group">
<g id="group1000-1">
<g id="group1001-2">
<g id="group1002-3">
<g id="group1003-4">
<g id="group1004-5">
<g id="shape1005-6">
<path id="Vector_18" fill-rule="evenodd" clip-rule="evenodd" d="M108.835 310.868C96.4151 310.868 86.3333 307.324 86.3333 302.667V346.3C86.3333 350.775 96.2325 354.409 108.506 354.482H108.835C121.254 354.482 131.318 350.939 131.318 346.3V302.667C131.318 307.215 121.254 310.868 108.835 310.868Z" fill="url(#paint0_linear_17642_377913)"/>
</g>
</g>
<g id="group1006-10">
<g id="shape1007-11">
<path id="Vector_19" fill-rule="evenodd" clip-rule="evenodd" d="M131.318 302.683C131.318 307.231 121.254 310.865 108.835 310.865C96.4151 310.865 86.3333 307.322 86.3333 302.683C86.3333 298.026 96.4151 294.482 108.835 294.482C121.254 294.482 131.318 298.026 131.318 302.683Z" fill="#E8E8E8"/>
</g>
</g>
<g id="group1008-13">
<g id="shape1009-14">
<path id="Vector_20" fill-rule="evenodd" clip-rule="evenodd" d="M126.101 302.007C126.101 304.893 118.339 307.23 108.841 307.23C99.3258 307.23 91.5635 304.893 91.5635 302.007C91.5635 299.121 99.3258 296.82 108.841 296.82C118.339 296.82 126.101 299.139 126.101 302.007Z" fill="#50E6FF"/>
</g>
</g>
<g id="group1010-16">
<g id="shape1011-17">
<path id="Vector_21" fill-rule="evenodd" clip-rule="evenodd" d="M108.819 303.322C104.19 303.203 99.5756 303.883 95.1753 305.331C99.58 306.751 104.196 307.394 108.819 307.231C113.457 307.369 118.083 306.676 122.48 305.185C118.061 303.803 113.444 303.174 108.819 303.322Z" fill="#198AB3"/>
</g>
</g>
<g id="group1012-19">
<g id="shape1013-20">
<path id="Vector_22" fill-rule="evenodd" clip-rule="evenodd" d="M122.521 332.955V320.956H119.361V335.531H127.982V332.955H122.521ZM97.4623 327.056C96.8101 326.792 96.2054 326.421 95.6724 325.96C95.5301 325.809 95.4194 325.632 95.3466 325.437C95.2739 325.243 95.2408 325.035 95.2492 324.828C95.2388 324.621 95.2821 324.414 95.3748 324.229C95.4676 324.043 95.6066 323.885 95.7783 323.77C96.2077 323.472 96.7222 323.324 97.2432 323.348C98.4942 323.298 99.7269 323.664 100.75 324.389V321.339C99.6284 320.926 98.4366 320.74 97.2432 320.791C95.8706 320.716 94.5165 321.137 93.426 321.978C92.9493 322.347 92.5666 322.824 92.3094 323.37C92.0521 323.916 91.9278 324.516 91.9466 325.12C91.9466 326.928 93.0607 328.334 95.4533 329.394C96.227 329.721 96.9571 330.145 97.6267 330.654C97.7917 330.793 97.9245 330.966 98.0159 331.161C98.1073 331.357 98.155 331.57 98.1558 331.786C98.157 332.001 98.1067 332.214 98.0091 332.405C97.9115 332.597 97.7694 332.762 97.595 332.887C97.1175 333.164 96.5701 333.296 96.0195 333.266C94.6047 333.257 93.2414 332.731 92.184 331.786V335.074C93.3457 335.674 94.6414 335.963 95.9464 335.914C97.4195 336.002 98.8793 335.59 100.092 334.745C100.517 334.338 100.842 333.838 101.042 333.283C101.241 332.729 101.31 332.135 101.243 331.549C101.263 330.641 100.951 329.757 100.366 329.065C99.5487 328.198 98.5594 327.514 97.4623 327.056ZM115.854 332.681C116.65 331.336 117.049 329.79 117.005 328.225C116.929 326.902 116.534 325.617 115.854 324.481C115.304 323.377 114.448 322.457 113.389 321.832C112.319 321.225 111.11 320.91 109.882 320.919C108.56 320.891 107.255 321.219 106.101 321.869C105.013 322.475 104.119 323.381 103.526 324.481C102.905 325.727 102.592 327.105 102.613 328.499C102.617 329.729 102.905 330.942 103.453 332.042C103.991 333.133 104.835 334.041 105.882 334.654C106.943 335.297 108.151 335.656 109.389 335.695L112.421 339.238H116.658L112.329 335.348C113.786 334.917 115.039 333.969 115.854 332.681ZM112.329 331.786C112.011 332.186 111.604 332.507 111.141 332.722C110.679 332.938 110.172 333.043 109.663 333.028C109.149 333.044 108.639 332.936 108.176 332.714C107.712 332.491 107.307 332.161 106.996 331.75C106.26 330.73 105.904 329.482 105.992 328.225C105.907 326.968 106.263 325.721 106.996 324.7C107.33 324.289 107.751 323.96 108.228 323.735C108.705 323.511 109.227 323.397 109.754 323.403C110.262 323.383 110.768 323.492 111.224 323.718C111.68 323.945 112.072 324.282 112.366 324.7C113.057 325.739 113.391 326.977 113.316 328.225C113.436 329.494 113.085 330.763 112.329 331.786Z" fill="url(#paint1_radial_17642_377913)"/>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
<g id="Icon Text Label_4">
<text id="IconLabel_8" fill="black" xml:space="preserve" style="white-space: pre" font-family="Oracle Sans" font-size="16" letter-spacing="0em"><tspan x="70.0234" y="372.298">Azure SQL</tspan></text>
<text id="IconLabel_9" fill="black" xml:space="preserve" style="white-space: pre" font-family="Oracle Sans" font-size="16" letter-spacing="0em"><tspan x="74.2422" y="388.298">Database</tspan></text>
</g>
</g>
<g id="Table storage">
<g id="Table-3-Column">
<g id="Group 468">
<path id="Vector_23" d="M137.286 426.938H78.7145V485.509H137.286V426.938Z" fill="white"/>
<path id="Vector_24" d="M136.571 427.652V484.795H79.4286V427.652H136.571ZM138 426.224H78V486.224H138V426.224Z" fill="white"/>
<path id="Vector_25" d="M84.4862 479.739H95.3433V476.881H84.4862V479.739ZM102.572 479.739H113.429V476.881H102.572V479.739ZM120.658 479.739H131.515V476.881H120.658V479.739ZM84.4862 474.667H95.3433V471.81H84.4862V474.667ZM102.572 474.667H113.429V471.81H102.572V474.667ZM120.658 474.667H131.515V471.81H120.658V474.667ZM84.4862 469.61H95.3433V466.753H84.4862V469.61ZM102.572 469.61H113.429V466.753H102.572V469.61ZM120.658 469.61H131.515V466.753H120.658V469.61ZM84.4862 464.539H95.3433V461.681H84.4862V464.539ZM102.572 464.539H113.429V461.681H102.572V464.539ZM120.658 464.539H131.515V461.681H120.658V464.539ZM84.4862 459.481H95.3433V456.624H84.4862V459.481ZM102.572 459.481H113.429V456.624H102.572V459.481ZM120.658 459.481H131.515V456.624H120.658V459.481ZM84.4862 454.41H95.3433V451.553H84.4862V454.41ZM102.572 454.41H113.429V451.553H102.572V454.41ZM120.658 454.41H131.515V451.553H120.658V454.41ZM84.4862 449.353H95.3433V446.496H84.4862V449.353ZM102.572 449.353H113.429V446.496H102.572V449.353ZM120.658 449.353H131.515V446.496H120.658V449.353ZM84.4862 444.296H95.3433V441.439H84.4862V444.296ZM102.572 444.296H113.429V441.439H102.572V444.296ZM120.658 444.296H131.515V441.439H120.658V444.296ZM82.2862 439.224H97.5147V481.939H82.2862V439.224ZM100.358 439.224H115.6V481.939H100.4L100.358 439.224ZM118.443 439.224H133.715V481.939H118.486L118.443 439.224ZM82.2862 430.51H97.5147V436.339H82.2862V430.51ZM100.4 430.51H115.6V436.339H100.4V430.51ZM118.486 430.51H133.715V436.339H118.486V430.51ZM79.429 484.796H136.572V427.653H79.429V484.796Z" fill="#2D5967"/>
</g>
</g>
<g id="Icon Text Label_5">
<text id="IconLabel_10" fill="black" xml:space="preserve" style="white-space: pre" font-family="Oracle Sans" font-size="16" letter-spacing="0em"><tspan x="60.0078" y="504.04">Table storage</tspan></text>
<text id="IconLabel_11" fill="black" xml:space="preserve" style="white-space: pre" font-family="Oracle Sans" font-size="16" letter-spacing="0em"><tspan x="87.0312" y="520.04">Azure</tspan></text>
<text id="IconLabel_12" fill="black" xml:space="preserve" style="white-space: pre" font-family="Oracle Sans" font-size="16" letter-spacing="0em"><tspan x="61.4922" y="536.04">PostgresSQL</tspan></text>
<text id="IconLabel_13" fill="black" xml:space="preserve" style="white-space: pre" font-family="Oracle Sans" font-size="16" letter-spacing="0em"><tspan x="53.7266" y="552.04">Azure MariaDB</tspan></text>
</g>
</g>
<g id="Azure Cosmos DB">
<g id="Azure-Cosmos-DB">
<g id="Group_2">
<g id="group1050-1">
<g id="group1051-2">
<g id="group1052-3">
<g id="group1053-4">
<g id="group1054-5">
<g id="shape1055-6">
<path id="Vector_26" fill-rule="evenodd" clip-rule="evenodd" d="M86.664 608.158C86.5823 608.158 86.5012 608.143 86.4255 608.112C86.3499 608.081 86.2812 608.036 86.2233 607.979C86.1655 607.921 86.1197 607.853 86.0887 607.778C86.0576 607.703 86.0419 607.623 86.0424 607.542C86.0398 605.68 85.2924 603.895 83.9638 602.578C82.6353 601.262 80.8341 600.52 78.9549 600.517C78.7907 600.517 78.6331 600.453 78.5167 600.338C78.4002 600.223 78.3343 600.067 78.3333 599.905C78.3333 599.824 78.3493 599.744 78.3805 599.669C78.4117 599.594 78.4575 599.526 78.5152 599.469C78.573 599.412 78.6415 599.367 78.717 599.336C78.7924 599.305 78.8733 599.289 78.9549 599.289C80.8358 599.284 82.6378 598.539 83.9654 597.219C85.2929 595.899 86.0375 594.111 86.0358 592.247C86.0352 592.166 86.0509 592.086 86.082 592.011C86.113 591.936 86.1588 591.868 86.2166 591.811C86.2745 591.753 86.3432 591.708 86.4188 591.677C86.4945 591.646 86.5756 591.631 86.6573 591.631C86.7391 591.631 86.8202 591.646 86.8958 591.677C86.9715 591.708 87.0402 591.753 87.0981 591.811C87.1559 591.868 87.2016 591.936 87.2327 592.011C87.2637 592.086 87.2795 592.166 87.2789 592.247C87.2803 594.108 88.0259 595.893 89.3523 597.21C90.6787 598.528 92.4779 599.271 94.3562 599.277C94.438 599.277 94.519 599.292 94.5947 599.323C94.6703 599.354 94.7391 599.399 94.7969 599.456C94.8547 599.514 94.9005 599.582 94.9315 599.657C94.9626 599.732 94.9783 599.812 94.9778 599.893C94.9783 599.974 94.9626 600.054 94.9315 600.129C94.9005 600.204 94.8547 600.272 94.7969 600.33C94.7391 600.387 94.6703 600.432 94.5947 600.463C94.519 600.494 94.438 600.509 94.3562 600.509C92.4786 600.513 90.6793 601.254 89.3522 602.57C88.025 603.886 87.2782 605.669 87.2753 607.53C87.2745 607.693 87.2088 607.849 87.0924 607.964C86.976 608.08 86.8183 608.145 86.6537 608.145L86.664 608.158Z" fill="#50E6FF"/>
</g>
</g>
<g id="group1056-8">
<g id="shape1057-9">
<path id="Vector_27" fill-rule="evenodd" clip-rule="evenodd" d="M131.33 650.781C131.198 650.781 131.072 650.729 130.978 650.636C130.885 650.544 130.833 650.418 130.833 650.288C130.834 649.548 130.688 648.814 130.403 648.13C130.118 647.446 129.7 646.824 129.172 646.301C128.644 645.777 128.017 645.362 127.326 645.079C126.636 644.795 125.896 644.65 125.149 644.651C125.018 644.651 124.892 644.599 124.799 644.508C124.706 644.416 124.653 644.292 124.652 644.162C124.652 644.031 124.704 643.906 124.797 643.813C124.891 643.721 125.017 643.669 125.149 643.669C126.654 643.672 128.098 643.084 129.165 642.032C130.232 640.981 130.833 639.553 130.838 638.062C130.838 637.932 130.89 637.806 130.983 637.714C131.077 637.621 131.203 637.569 131.335 637.569C131.467 637.569 131.594 637.621 131.687 637.714C131.78 637.806 131.833 637.932 131.833 638.062C131.833 639.551 132.43 640.978 133.491 642.032C134.552 643.086 135.992 643.679 137.494 643.683C137.56 643.682 137.626 643.693 137.687 643.718C137.749 643.742 137.805 643.778 137.852 643.824C137.899 643.87 137.936 643.925 137.962 643.985C137.988 644.045 138.001 644.11 138.001 644.176C138.001 644.241 137.988 644.306 137.962 644.367C137.936 644.427 137.899 644.482 137.852 644.528C137.805 644.573 137.749 644.61 137.687 644.634C137.626 644.658 137.56 644.67 137.494 644.669C135.99 644.671 134.549 645.263 133.486 646.317C132.422 647.37 131.824 648.798 131.823 650.288C131.821 650.418 131.769 650.543 131.675 650.634C131.582 650.726 131.456 650.777 131.325 650.777L131.33 650.781Z" fill="#50E6FF"/>
</g>
</g>
<g id="group1058-11">
<g id="group1059-12">
<g id="shape1060-13">
<path id="Vector_28" d="M107.938 642.607C119.918 642.607 129.63 632.985 129.63 621.116C129.63 609.246 119.918 599.624 107.938 599.624C95.9573 599.624 86.2454 609.246 86.2454 621.116C86.2454 632.985 95.9573 642.607 107.938 642.607Z" fill="url(#paint2_radial_17642_377913)"/>
</g>
</g>
<g id="group1061-17">
<g id="shape1062-18">
<path id="Vector_29" fill-rule="evenodd" clip-rule="evenodd" d="M96.7199 635.525C104.616 635.746 104.633 623.911 96.7199 624.081C96.7539 623.911 96.7539 623.758 96.7539 623.588C96.7199 620.413 94.1049 617.849 90.8956 617.883H86.5656C85.2751 623.554 87.4146 630.771 91.8465 635.525H96.7199Z" fill="#F2F2F2"/>
</g>
</g>
<g id="group1063-20">
<g id="shape1064-21">
<path id="Vector_30" fill-rule="evenodd" clip-rule="evenodd" d="M129.304 617.158C129.304 617.107 129.304 617.056 129.287 617.005C128.59 613.264 126.876 609.783 124.329 606.936C123.993 606.8 123.647 606.692 123.293 606.613C122.366 606.354 121.392 606.307 120.443 606.474C119.495 606.641 118.598 607.02 117.818 607.58C117.039 608.141 116.397 608.869 115.943 609.71C115.488 610.552 115.232 611.484 115.193 612.438C114.957 612.409 114.719 612.392 114.48 612.387C113.032 612.383 111.63 612.887 110.521 613.81C109.413 614.733 108.67 616.014 108.424 617.428C108.177 618.841 108.444 620.296 109.177 621.533C109.909 622.77 111.06 623.711 112.425 624.188C113.031 624.426 113.676 624.547 114.327 624.545H121.493C124.372 622.385 126.992 619.907 129.304 617.158Z" fill="#F2F2F2"/>
</g>
</g>
</g>
<g id="group1065-23">
<g id="shape1066-24">
<path id="Vector_31" fill-rule="evenodd" clip-rule="evenodd" d="M136.897 603.129C134.673 599.479 129.494 598.052 122.243 599.122C119.757 599.47 117.299 599.998 114.89 600.701C116.803 601.354 118.619 602.256 120.29 603.384C121.139 603.197 121.988 602.977 122.803 602.858C124.09 602.655 125.389 602.548 126.692 602.535C127.97 602.352 129.273 602.489 130.483 602.934C131.694 603.379 132.772 604.118 133.62 605.082C134.961 607.307 133.824 611.127 130.479 615.559C125.844 621.278 120.164 626.082 113.736 629.721C107.443 633.613 100.467 636.297 93.1725 637.634C87.6538 638.449 83.6974 637.634 82.3559 635.409C80.9975 633.202 82.1352 629.364 85.4803 624.949C85.9049 624.406 85.9898 624.117 86.4652 623.574C86.2418 621.677 86.2703 619.758 86.5501 617.868C85.0503 619.361 83.6707 620.968 82.4239 622.674C78.0599 628.464 76.8712 633.677 79.0957 637.328C80.2638 638.88 81.8226 640.102 83.6164 640.871C85.4102 641.64 87.3761 641.929 89.3179 641.709C90.7965 641.699 92.2722 641.58 93.7328 641.352C101.518 639.947 108.967 637.101 115.689 632.964C122.552 629.073 128.612 623.935 133.552 617.817C137.933 612.01 139.122 606.797 136.897 603.129Z" fill="#50E6FF"/>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
</g>
<g id="Icon Text Label_6">
<text id="IconLabel_14" fill="black" xml:space="preserve" style="white-space: pre" font-family="Oracle Sans" font-size="16" letter-spacing="0em"><tspan x="87.0312" y="667.781">Azure</tspan></text>
<text id="IconLabel_15" fill="black" xml:space="preserve" style="white-space: pre" font-family="Oracle Sans" font-size="16" letter-spacing="0em"><tspan x="66.3672" y="683.781">Cosmos DB</tspan></text>
</g>
</g>
<g id="Object Storage">
<g id="Services/Object-Storage">
<g id="Group_3">
<g id="Group_4">
<g id="Group_5">
<path id="Vector_32" d="M81.8497 780.992C80.1395 780.992 78.7143 779.563 78.7143 777.849V725.563C78.7143 723.849 80.1395 722.42 81.8497 722.42H134.154C135.864 722.42 137.289 723.849 137.289 725.563V777.992C137.289 779.706 135.864 781.135 134.154 781.135L81.8497 780.992Z" fill="white"/>
<path id="Vector_33" d="M134.01 723.135C135.292 723.135 136.432 724.277 136.432 725.563V777.992C136.432 779.277 135.292 780.42 134.01 780.42H81.848C80.5653 780.277 79.4252 779.135 79.4252 777.849V725.563C79.4252 724.277 80.5653 723.135 81.848 723.135H134.01ZM134.01 721.706H81.848C79.7102 721.706 78 723.42 78 725.563V777.992C78 779.992 79.7102 781.706 81.848 781.706H134.152C136.29 781.706 138 779.992 138 777.849V725.563C137.857 723.42 136.147 721.706 134.01 721.706Z" fill="white"/>
</g>
<g id="Group_6">
<g id="Group_7">
<path id="Vector_34" d="M121.325 738.278L125.173 744.992L121.325 751.706H113.629L109.781 744.992L113.629 738.278H121.325ZM122.608 736.278H112.346L107.216 745.135L112.346 753.992H122.608L127.738 745.135L122.608 736.278Z" fill="#2D5967"/>
</g>
<g id="Group_8">
<path id="Vector_35" d="M107.5 758.706C111.205 758.706 114.198 761.706 114.198 765.42C114.198 769.135 111.205 772.135 107.5 772.135C103.794 772.135 100.801 769.135 100.801 765.42C100.801 761.706 103.794 758.706 107.5 758.706ZM107.5 756.706C102.654 756.706 98.6635 760.706 98.6635 765.563C98.6635 770.42 102.654 774.42 107.5 774.42C112.345 774.42 116.336 770.42 116.336 765.563C116.336 760.563 112.345 756.706 107.5 756.706Z" fill="#2D5967"/>
</g>
<g id="Group_9">
<path id="Vector_36" d="M97.3817 739.992L103.652 751.278H91.2534L97.3817 739.992ZM97.3817 735.707L87.6905 753.421H107.215L97.3817 735.707Z" fill="#2D5967"/>
</g>
</g>
<g id="Group_10">
<path id="Vector_37" d="M134.01 780.278H81.8485C80.5658 780.278 79.4257 779.135 79.4257 777.85V728.85H136.433V777.85C136.433 779.135 135.293 780.278 134.01 780.278ZM81.5634 730.992V777.992C81.5634 778.135 81.7059 778.278 81.8485 778.278H134.153C134.295 778.278 134.438 778.135 134.438 777.992V730.992H81.5634Z" fill="#2D5967"/>
</g>
<g id="Group_11">
<path id="Vector_38" d="M136.433 727.278H79.4257V725.564C79.4257 724.278 80.5658 723.135 81.8485 723.135H134.153C135.293 723.135 136.433 724.278 136.433 725.564V727.278Z" fill="#2D5967"/>
</g>
</g>
</g>
</g>
<g id="Icon Text Label_7">
<text id="IconLabel_16" fill="black" xml:space="preserve" style="white-space: pre" font-family="Oracle Sans" font-size="16" letter-spacing="0em"><tspan x="69.3672" y="799.522">OCI Object</tspan></text>
<text id="IconLabel_17" fill="black" xml:space="preserve" style="white-space: pre" font-family="Oracle Sans" font-size="16" letter-spacing="0em"><tspan x="80.1875" y="815.522">Storage</tspan></text>
</g>
</g>
<g id="Azure Blob Storage">
<g id="Azure-Blob-Storage">
<g id="Group 900">
<path id="Vector_39" d="M121.447 1004.52H94.5529C93.4426 1004.52 92.4178 1005.11 91.8666 1006.07L78.4194 1029.37C77.8681 1030.33 77.8681 1031.51 78.4194 1032.47L91.8666 1055.76C92.4178 1056.73 93.4504 1057.32 94.5529 1057.32H121.447C122.558 1057.32 123.582 1056.73 124.134 1055.76L137.581 1032.47C138.132 1031.51 138.132 1030.33 137.581 1029.37L124.134 1006.07C123.582 1005.11 122.558 1004.52 121.447 1004.52Z" fill="#2979FF"/>
<path id="Vector_40" d="M120.422 1048H95.5776C94.7235 1048 94.0248 1047.3 94.0248 1046.45V1015.39C94.0248 1014.54 94.7235 1013.84 95.5776 1013.84H115.764L121.975 1020.05V1046.45C121.975 1047.3 121.276 1048 120.422 1048Z" fill="white"/>
<path id="Vector_41" d="M115.764 1013.84V1018.5C115.764 1019.35 116.463 1020.05 117.317 1020.05H121.975L115.764 1013.84Z" fill="#B1CFFF"/>
<path id="Vector_42" d="M105.306 1030.66H103.233V1024.06L101.199 1024.65V1023.09L105.12 1021.73H105.306V1030.66ZM115.298 1027.01C115.298 1027.65 115.22 1028.21 115.073 1028.68C114.925 1029.16 114.708 1029.55 114.436 1029.86C114.165 1030.17 113.838 1030.4 113.458 1030.55C113.078 1030.69 112.658 1030.77 112.2 1030.77C111.742 1030.77 111.315 1030.69 110.935 1030.55C110.554 1030.4 110.228 1030.17 109.949 1029.86C109.677 1029.55 109.46 1029.15 109.304 1028.68C109.149 1028.21 109.079 1027.65 109.079 1027.01V1025.38C109.079 1024.73 109.157 1024.17 109.304 1023.7C109.452 1023.23 109.669 1022.83 109.941 1022.52C110.213 1022.21 110.539 1021.98 110.919 1021.83C111.3 1021.67 111.719 1021.6 112.177 1021.6C112.635 1021.6 113.054 1021.68 113.435 1021.83C113.815 1021.98 114.149 1022.21 114.421 1022.52C114.693 1022.83 114.91 1023.23 115.057 1023.7C115.205 1024.17 115.29 1024.73 115.29 1025.38V1027.01H115.298ZM113.233 1025.11C113.233 1024.76 113.21 1024.46 113.163 1024.21C113.116 1023.97 113.047 1023.77 112.953 1023.62C112.86 1023.47 112.752 1023.37 112.627 1023.3C112.503 1023.23 112.356 1023.19 112.193 1023.19C112.029 1023.19 111.882 1023.23 111.75 1023.3C111.618 1023.37 111.509 1023.47 111.424 1023.62C111.338 1023.77 111.269 1023.97 111.222 1024.21C111.175 1024.46 111.152 1024.76 111.152 1025.11V1027.26C111.152 1027.63 111.175 1027.93 111.222 1028.18C111.269 1028.43 111.338 1028.62 111.432 1028.77C111.525 1028.92 111.634 1029.03 111.765 1029.1C111.897 1029.17 112.045 1029.2 112.208 1029.2C112.371 1029.2 112.511 1029.17 112.643 1029.1C112.775 1029.03 112.884 1028.92 112.969 1028.77C113.062 1028.62 113.124 1028.42 113.171 1028.18C113.217 1027.93 113.241 1027.63 113.241 1027.26V1025.11H113.233ZM106.929 1039.57C106.929 1040.21 106.851 1040.77 106.703 1041.25C106.556 1041.72 106.338 1042.11 106.067 1042.42C105.795 1042.73 105.469 1042.96 105.088 1043.11C104.708 1043.26 104.289 1043.33 103.831 1043.33C103.373 1043.33 102.946 1043.26 102.565 1043.11C102.185 1042.96 101.859 1042.73 101.579 1042.42C101.307 1042.11 101.09 1041.71 100.935 1041.25C100.779 1040.77 100.71 1040.21 100.71 1039.57V1037.94C100.71 1037.29 100.787 1036.74 100.935 1036.26C101.082 1035.79 101.3 1035.39 101.571 1035.08C101.843 1034.77 102.169 1034.54 102.55 1034.39C102.93 1034.24 103.349 1034.17 103.815 1034.17C104.281 1034.17 104.693 1034.24 105.073 1034.39C105.453 1034.54 105.787 1034.77 106.059 1035.08C106.331 1035.39 106.548 1035.79 106.696 1036.26C106.843 1036.74 106.929 1037.29 106.929 1037.94V1039.57ZM104.863 1037.67C104.863 1037.32 104.84 1037.02 104.793 1036.77C104.747 1036.53 104.677 1036.33 104.584 1036.18C104.491 1036.04 104.382 1035.93 104.258 1035.86C104.134 1035.79 103.986 1035.76 103.823 1035.76C103.66 1035.76 103.512 1035.79 103.38 1035.86C103.248 1035.93 103.14 1036.03 103.054 1036.18C102.969 1036.33 102.899 1036.53 102.852 1036.77C102.806 1037.02 102.783 1037.32 102.783 1037.67V1039.83C102.783 1040.19 102.806 1040.49 102.852 1040.74C102.899 1040.99 102.969 1041.18 103.062 1041.33C103.155 1041.48 103.264 1041.59 103.396 1041.66C103.528 1041.73 103.675 1041.76 103.838 1041.76C104.002 1041.76 104.141 1041.73 104.273 1041.66C104.405 1041.59 104.514 1041.49 104.599 1041.33C104.693 1041.18 104.755 1040.98 104.801 1040.74C104.848 1040.49 104.871 1040.19 104.871 1039.83V1037.67H104.863ZM113.683 1043.22H111.61V1036.62L109.576 1037.22V1035.65L113.497 1034.29H113.683V1043.22Z" fill="#03A9F4"/>
</g>
</g>
<g id="Icon Text Label_8">
<text id="IconLabel_18" fill="black" xml:space="preserve" style="white-space: pre" font-family="Oracle Sans" font-size="16" letter-spacing="0em"><tspan x="87.0312" y="1079">Azure</tspan></text>
<text id="IconLabel_19" fill="black" xml:space="preserve" style="white-space: pre" font-family="Oracle Sans" font-size="16" letter-spacing="0em"><tspan x="62.0078" y="1095">Blob Storage</tspan></text>
</g>
</g>
<g id="Azure Data Factory">
<g id="Data-Factory">
<g id="Group 1508">
<path id="Vector_43" d="M387 180.411V166.612C387.001 166.513 386.973 166.416 386.919 166.333C386.865 166.251 386.787 166.186 386.696 166.148C386.605 166.11 386.504 166.101 386.407 166.12C386.311 166.14 386.222 166.188 386.153 166.259L372.035 180.376L357.353 195.058V205.188H399.988C400.253 205.192 400.517 205.144 400.763 205.044C401.01 204.945 401.233 204.797 401.421 204.609C401.609 204.421 401.757 204.198 401.856 203.951C401.956 203.705 402.004 203.441 402 203.176V166.612C402.001 166.513 401.973 166.416 401.919 166.333C401.865 166.251 401.787 166.186 401.696 166.148C401.605 166.11 401.504 166.101 401.407 166.12C401.31 166.14 401.222 166.188 401.153 166.259L387 180.411Z" fill="#005BA1"/>
<path id="Vector_44" d="M357 156.059C348.706 156.059 342 153.624 342 150.482V203.176C341.996 203.441 342.044 203.705 342.144 203.951C342.243 204.198 342.391 204.421 342.579 204.609C342.767 204.797 342.99 204.945 343.237 205.044C343.483 205.144 343.747 205.192 344.012 205.188H372V150.482C372 153.624 365.294 156.059 357 156.059Z" fill="url(#paint3_linear_17642_377913)"/>
<path id="Vector_45" d="M392.823 189.2H386.788C386.242 189.2 385.8 189.642 385.8 190.188V196.223C385.8 196.769 386.242 197.211 386.788 197.211H392.823C393.369 197.211 393.812 196.769 393.812 196.223V190.188C393.812 189.642 393.369 189.2 392.823 189.2Z" fill="white"/>
<path id="Vector_46" d="M378.918 189.2H372.883C372.337 189.2 371.895 189.642 371.895 190.188V196.223C371.895 196.769 372.337 197.211 372.883 197.211H378.918C379.464 197.211 379.906 196.769 379.906 196.223V190.188C379.906 189.642 379.464 189.2 378.918 189.2Z" fill="white"/>
<path id="Vector_47" d="M365.011 189.2H358.976C358.43 189.2 357.987 189.642 357.987 190.188V196.223C357.987 196.769 358.43 197.211 358.976 197.211H365.011C365.557 197.211 365.999 196.769 365.999 196.223V190.188C365.999 189.642 365.557 189.2 365.011 189.2Z" fill="white"/>
<path id="Vector_48" d="M372 150.483C372 153.483 365.294 155.918 357 155.918C348.706 155.918 342 153.624 342 150.483C342 147.341 348.706 145.188 357 145.188C365.294 145.188 372 147.624 372 150.483Z" fill="#EAEAEA"/>
<path id="Vector_49" d="M368.47 150.165C368.47 152.106 363.317 153.694 356.964 153.694C350.612 153.694 345.459 152.176 345.459 150.165C345.459 148.153 350.823 146.741 357 146.741C363.176 146.741 368.47 148.259 368.47 150.165Z" fill="#50E6FF"/>
<path id="Vector_50" d="M357 150.977C353.914 150.916 350.838 151.357 347.894 152.283C350.83 153.248 353.91 153.702 357 153.624C360.089 153.702 363.169 153.248 366.105 152.283C363.161 151.357 360.086 150.916 357 150.977Z" fill="#198AB3"/>
</g>
</g>
<g id="Icon Text Label_9">
<text id="IconLabel_20" fill="black" xml:space="preserve" style="white-space: pre" font-family="Oracle Sans" font-size="16" letter-spacing="0em"><tspan x="351.031" y="223.004">Azure</tspan></text>
<text id="IconLabel_21" fill="black" xml:space="preserve" style="white-space: pre" font-family="Oracle Sans" font-size="16" letter-spacing="0em"><tspan x="326.164" y="239.004">Data Factory</tspan></text>
</g>
</g>
<g id="Oracle Database@Azure">
<g id="Oracle-Database@Azure">
<g id="Group_12">
<path id="Vector_51" d="M381.37 475.952C370.132 475.952 361.022 473.976 361.022 471.54V481.811C361.022 484.248 370.132 486.223 381.37 486.223C392.607 486.223 401.717 484.248 401.717 481.811V471.54C401.717 473.976 392.607 475.952 381.37 475.952ZM398.49 478.043C396.953 478.574 395.36 478.993 393.759 479.288C391.851 479.637 389.898 479.816 387.953 479.816C387.485 479.816 387.103 479.438 387.103 478.97C387.103 478.501 387.482 478.123 387.953 478.123C389.796 478.123 391.645 477.954 393.454 477.622C394.971 477.343 396.478 476.948 397.936 476.443C398.381 476.29 398.862 476.523 399.018 476.968C399.171 477.409 398.938 477.894 398.494 478.047L398.49 478.043ZM381.37 462.742C370.132 462.742 361.022 460.767 361.022 458.33V469.146C361.022 471.583 370.132 473.555 381.37 473.555C392.607 473.555 401.717 471.58 401.717 469.143V458.327C401.717 460.763 392.607 462.739 381.37 462.739V462.742ZM398.49 465.192C396.95 465.723 395.36 466.142 393.759 466.437C391.851 466.786 389.895 466.965 387.953 466.965C387.485 466.965 387.103 466.586 387.103 466.118C387.103 465.65 387.482 465.272 387.953 465.272C389.796 465.272 391.645 465.102 393.454 464.77C394.971 464.492 396.478 464.097 397.936 463.592C398.381 463.439 398.862 463.672 399.018 464.116C399.174 464.561 398.938 465.043 398.494 465.195L398.49 465.192ZM381.37 441.671C370.132 441.671 361.022 443.623 361.022 446.853V455.94C361.022 458.376 370.132 460.348 381.37 460.348C392.607 460.348 401.717 458.373 401.717 455.936V447.182C401.717 443.62 392.607 441.671 381.37 441.671ZM398.49 452.709C396.95 453.241 395.36 453.659 393.759 453.954C391.851 454.303 389.898 454.482 387.953 454.482C387.485 454.482 387.103 454.104 387.103 453.636C387.103 453.168 387.482 452.789 387.953 452.789C389.796 452.789 391.645 452.62 393.454 452.288C394.968 452.009 396.478 451.614 397.936 451.109C398.381 450.956 398.862 451.189 399.018 451.634C399.171 452.075 398.938 452.56 398.494 452.713L398.49 452.709ZM381.37 449.705C371.247 449.705 363.044 447.862 363.044 446.77C363.044 445.429 371.247 443.357 381.37 443.357C391.492 443.357 399.695 445.512 399.695 446.77C399.695 447.912 391.492 449.705 381.37 449.705Z" fill="url(#paint4_linear_17642_377913)"/>
<path id="Vector_52" d="M361.022 446.767V446.611C361.022 443.6 368.95 441.701 379.139 441.459C377.967 438.829 375.514 436.881 372.512 436.482C372.257 430.616 367.337 426.048 361.471 426.23C356.803 426.147 352.59 429.019 350.963 433.395C345.98 433.996 342.185 438.152 342.039 443.168C342.262 448.839 347.029 453.257 352.699 453.055C353.015 453.055 353.337 453.042 353.636 453.015H361.019L361.022 446.767Z" fill="url(#paint5_linear_17642_377913)"/>
</g>
</g>
<g id="Icon Text Label_10">
<text id="IconLabel_22" fill="black" xml:space="preserve" style="white-space: pre" font-family="Oracle Sans" font-size="16" letter-spacing="0em"><tspan x="313.219" y="504.04">Oracle Database</tspan></text>
<text id="IconLabel_23" fill="black" xml:space="preserve" style="white-space: pre" font-family="Oracle Sans" font-size="16" letter-spacing="0em"><tspan x="343.016" y="520.04">@Azure</tspan></text>
</g>
</g>
<g id="Azure Data Lake Storage">
<g id="azure-data-lake-storage-gen2">
<g id="Group 1511">
<path id="Vector_53" d="M350.333 730.13V757.332C351.993 759.121 354.238 760.195 356.841 760.195C359.444 760.195 362.893 758.405 364.552 755.77C366.212 758.405 369.043 760.195 372.362 760.195V781.54V737.841C360.42 737.776 350.854 734.425 350.333 730.13Z" fill="#3E3E3E"/>
<path id="Vector_54" d="M372.751 737.841C372.621 737.841 372.523 737.841 372.393 737.841V781.54V781.67H372.621V760.195C375.94 760.065 378.771 758.405 380.333 755.77C381.992 758.405 384.953 760.195 388.272 760.195C391.591 760.195 393.38 758.991 395.04 757.201V773.536C395.04 777.798 385.604 781.41 373.825 781.637C385.669 781.442 395.137 777.831 395.137 773.536V730.13C394.649 734.457 384.888 737.841 372.751 737.841Z" fill="#A0A1A2"/>
<path id="Vector_55" d="M364.552 755.77C362.893 758.406 360.16 760.195 356.841 760.195C353.522 760.195 351.993 759.121 350.333 757.332V773.568C350.333 777.993 360.16 781.573 372.394 781.67V760.195C369.075 760.195 366.244 758.406 364.585 755.77H364.552Z" fill="#3999C6"/>
<path id="Vector_56" d="M395.04 773.568V757.234C393.38 759.024 391.005 760.227 388.272 760.227C385.539 760.227 381.992 758.438 380.333 755.802C378.803 758.438 375.94 760.097 372.621 760.227V781.702C373.012 781.702 373.435 781.702 373.825 781.702C385.604 781.475 395.04 777.863 395.04 773.601V773.568Z" fill="#59B4D9"/>
<path id="Vector_57" d="M372.394 737.841C372.524 737.841 372.622 737.841 372.752 737.841C384.889 737.841 394.65 734.458 395.138 730.13C395.138 730 395.138 729.902 395.138 729.772C395.138 725.379 385.051 721.703 372.719 721.703C360.388 721.703 350.333 725.379 350.333 729.772C350.333 734.165 350.333 730 350.333 730.13C350.821 734.425 360.388 737.776 372.362 737.841H372.394ZM372.752 723.948C373.045 723.948 373.37 723.948 373.663 723.948C374.281 723.948 374.867 723.948 375.453 724.013C375.746 724.013 376.038 724.013 376.331 724.045C377.503 724.11 378.609 724.208 379.683 724.371C380.756 724.533 380.203 724.436 380.464 724.468C382.546 724.761 384.401 725.184 385.93 725.672C388.793 726.616 390.55 727.885 390.55 729.284C390.55 730.683 389.249 731.659 386.873 732.603C386.873 732.603 386.808 732.603 386.776 732.603C383.522 733.839 378.446 734.653 372.752 734.653C367.058 734.653 361.982 733.839 358.728 732.603C358.728 732.603 358.663 732.603 358.631 732.603C357.915 732.31 357.264 731.952 356.711 731.627C355.67 730.976 355.084 730.293 354.954 729.544C354.954 729.479 354.954 729.382 354.954 729.317C354.954 726.356 362.893 723.98 372.719 723.98L372.752 723.948Z" fill="white"/>
<path id="Vector_58" d="M354.986 729.544C355.084 730.293 355.702 731.009 356.744 731.628C355.735 730.977 355.116 730.261 354.986 729.544Z" fill="#7FBA00"/>
<path id="Vector_59" d="M358.729 732.603C361.983 733.839 367.059 734.653 372.753 734.653C378.447 734.653 383.523 733.839 386.777 732.603C383.458 731.301 378.382 730.488 372.753 730.488C367.124 730.488 361.918 731.301 358.729 732.603Z" fill="#7FBA00"/>
<path id="Vector_60" d="M356.743 731.627C357.263 731.985 357.914 732.31 358.663 732.603C358.663 732.603 358.728 732.603 358.76 732.603C361.949 731.301 367.025 730.488 372.784 730.488C378.543 730.488 383.489 731.301 386.808 732.603C386.808 732.603 386.873 732.603 386.906 732.603C389.281 731.659 390.582 730.585 390.582 729.284C390.582 727.982 388.825 726.616 385.962 725.672C384.433 725.152 382.578 724.761 380.496 724.468C380.235 724.436 379.975 724.403 379.715 724.371C378.641 724.241 377.535 724.143 376.363 724.045C376.07 724.045 375.778 724.013 375.485 724.013C374.899 724.013 374.281 723.98 373.695 723.948C373.402 723.948 373.077 723.948 372.784 723.948C362.958 723.948 355.018 726.323 355.018 729.284C355.018 732.245 355.018 729.447 355.018 729.512C355.148 730.228 355.767 730.943 356.775 731.594L356.743 731.627Z" fill="#B8D432"/>
</g>
</g>
<g id="Icon Text Label_11">
<text id="IconLabel_24" fill="black" xml:space="preserve" style="white-space: pre" font-family="Oracle Sans" font-size="16" letter-spacing="0em"><tspan x="332.164" y="799.522">Azure Data</tspan></text>
<text id="IconLabel_25" fill="black" xml:space="preserve" style="white-space: pre" font-family="Oracle Sans" font-size="16" letter-spacing="0em"><tspan x="325.258" y="815.522">Lake Storage</tspan></text>
</g>
</g>
<g id="Power BI">
<g id="Azure-Power-BI">
<g id="Group_13">
<g id="group1076-1">
<g id="group1077-2">
<g id="shape1078-3">
<path id="Vector_61" fill-rule="evenodd" clip-rule="evenodd" d="M633.56 426.224V484.999H606.895V426.224H633.56Z" fill="url(#paint6_linear_17642_377913)"/>
</g>
<g id="shape1079-7">
<path id="Vector_62" fill-rule="evenodd" clip-rule="evenodd" d="M616.895 443.618V485.244H590.229V441.166H613.556C615.399 441.166 616.895 442.26 616.895 443.618Z" fill="black" fill-opacity="0.2"/>
</g>
<g id="shape1080-9">
<path id="Vector_63" fill-rule="evenodd" clip-rule="evenodd" d="M616.895 444.597V486.224H590.229V442.146H613.556C615.399 442.146 616.895 443.24 616.895 444.597Z" fill="black" fill-opacity="0.18"/>
</g>
<g id="shape1081-11">
<path id="Vector_64" fill-rule="evenodd" clip-rule="evenodd" d="M616.895 443.373V484.999H590.229V440.921H613.556C615.399 440.921 616.895 442.015 616.895 443.373Z" fill="url(#paint7_linear_17642_377913)"/>
</g>
<g id="shape1082-15">
<path id="Vector_65" fill-rule="evenodd" clip-rule="evenodd" d="M573.562 455.618V484.999H600.228V458.07C600.228 456.712 598.732 455.618 596.89 455.618H573.562Z" fill="url(#paint8_linear_17642_377913)"/>
</g>
</g>
</g>
</g>
</g>
<g id="Icon Text Label_12">
<text id="IconLabel_26" fill="black" xml:space="preserve" style="white-space: pre" font-family="Oracle Sans" font-size="16" letter-spacing="0em"><tspan x="572.078" y="504.04">Power BI</tspan></text>
</g>
</g>
<path id="Vector 57" d="M144 64H240V753.188H144" stroke="#312D2A" stroke-width="2"/>
<path id="Vector 58" d="M144 321.188H240" stroke="#312D2A" stroke-width="2"/>
<path id="Vector 65" d="M144 176.742H240" stroke="#312D2A" stroke-width="2"/>
<path id="Vector 60" d="M272.917 465.896C273.308 465.505 273.308 464.872 272.917 464.481L266.553 458.117C266.163 457.727 265.529 457.727 265.139 458.117C264.748 458.508 264.748 459.141 265.139 459.532L270.796 465.188L265.139 470.845C264.748 471.236 264.748 471.869 265.139 472.26C265.529 472.65 266.163 472.65 266.553 472.26L272.917 465.896ZM144 466.188H272.21V464.188H144V466.188Z" fill="#312D2A"/>
<path id="Vector 63" d="M568.707 466.931C569.098 466.54 569.098 465.907 568.707 465.517L562.343 459.153C561.953 458.762 561.319 458.762 560.929 459.153C560.538 459.543 560.538 460.176 560.929 460.567L566.586 466.224L560.929 471.881C560.538 472.271 560.538 472.904 560.929 473.295C561.319 473.685 561.953 473.685 562.343 473.295L568.707 466.931ZM408 467.224L568 467.224L568 465.224L408 465.224L408 467.224Z" fill="#312D2A"/>
<path id="Vector 64" d="M372.707 525.731C372.317 525.341 371.683 525.341 371.293 525.731L364.929 532.095C364.538 532.486 364.538 533.119 364.929 533.51C365.319 533.9 365.953 533.9 366.343 533.51L372 527.853L377.657 533.51C378.047 533.9 378.681 533.9 379.071 533.51C379.462 533.119 379.462 532.486 379.071 532.095L372.707 525.731ZM373 721.188L373 526.438L371 526.438L371 721.188L373 721.188Z" fill="#312D2A"/>
<path id="Vector 61" d="M272.707 1031.9C273.098 1031.51 273.098 1030.87 272.707 1030.48L266.343 1024.12C265.953 1023.73 265.319 1023.73 264.929 1024.12C264.538 1024.51 264.538 1025.14 264.929 1025.53L270.586 1031.19L264.929 1036.85C264.538 1037.24 264.538 1037.87 264.929 1038.26C265.319 1038.65 265.953 1038.65 266.343 1038.26L272.707 1031.9ZM144 1032.19H272V1030.19H144V1032.19Z" fill="#312D2A"/>
<path id="Vector 62" d="M272.707 881.896C273.098 881.505 273.098 880.872 272.707 880.481L266.343 874.117C265.953 873.727 265.319 873.727 264.929 874.117C264.538 874.508 264.538 875.141 264.929 875.532L270.586 881.188L264.929 886.845C264.538 887.236 264.538 887.869 264.929 888.26C265.319 888.65 265.953 888.65 266.343 888.26L272.707 881.896ZM144 882.188H272V880.188H144V882.188Z" fill="#312D2A"/>
<path id="Vector 59" d="M144 617.882H240" stroke="#312D2A" stroke-width="2"/>
</g>
</g>
<defs>
<linearGradient id="paint0_linear_17642_377913" x1="86.3333" y1="302.667" x2="131.318" y2="302.667" gradientUnits="userSpaceOnUse">
<stop stop-color="#005BA1"/>
<stop offset="0.07" stop-color="#0060A9"/>
<stop offset="0.36" stop-color="#0071C8"/>
<stop offset="0.52" stop-color="#0078D4"/>
<stop offset="0.64" stop-color="#0074CD"/>
<stop offset="0.82" stop-color="#006ABB"/>
<stop offset="1" stop-color="#005BA1"/>
</linearGradient>
<radialGradient id="paint1_radial_17642_377913" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(109.963 330.01) scale(26.3071 13.4724)">
<stop stop-color="#F2F2F2"/>
<stop offset="0.58" stop-color="#EEEEEE"/>
<stop offset="1" stop-color="#E6E6E6"/>
</radialGradient>
<radialGradient id="paint2_radial_17642_377913" cx="0" cy="0" r="1" gradientUnits="userSpaceOnUse" gradientTransform="translate(86.2454 599.624) scale(60.7382 60.1766)">
<stop offset="0.185" stop-color="#5EA0EF"/>
<stop offset="1" stop-color="#0078D4"/>
</radialGradient>
<linearGradient id="paint3_linear_17642_377913" x1="342" y1="177.906" x2="372" y2="177.906" gradientUnits="userSpaceOnUse">
<stop stop-color="#005BA1"/>
<stop offset="0.07" stop-color="#0060A9"/>
<stop offset="0.36" stop-color="#0071C8"/>
<stop offset="0.52" stop-color="#0078D4"/>
<stop offset="0.64" stop-color="#0074CD"/>
<stop offset="0.81" stop-color="#006ABB"/>
<stop offset="0.99" stop-color="#005BA1"/>
</linearGradient>
<linearGradient id="paint4_linear_17642_377913" x1="361.022" y1="463.947" x2="401.717" y2="463.947" gradientUnits="userSpaceOnUse">
<stop stop-color="#C74634"/>
<stop offset="0.5" stop-color="#DB897D"/>
<stop offset="1" stop-color="#C74634"/>
</linearGradient>
<linearGradient id="paint5_linear_17642_377913" x1="360.587" y1="453.062" x2="360.587" y2="426.224" gradientUnits="userSpaceOnUse">
<stop stop-color="#32BEDD"/>
<stop offset="1" stop-color="#50E6FF"/>
</linearGradient>
<linearGradient id="paint6_linear_17642_377913" x1="597.485" y1="422.795" x2="619.263" y2="438.182" gradientUnits="userSpaceOnUse">
<stop stop-color="#E6AD10"/>
<stop offset="1" stop-color="#C87E0E"/>
</linearGradient>
<linearGradient id="paint7_linear_17642_377913" x1="570.012" y1="432.896" x2="590.21" y2="450.305" gradientUnits="userSpaceOnUse">
<stop stop-color="#F6D751"/>
<stop offset="1" stop-color="#E6AD10"/>
</linearGradient>
<linearGradient id="paint8_linear_17642_377913" x1="535.083" y1="433.671" x2="549.344" y2="456.203" gradientUnits="userSpaceOnUse">
<stop stop-color="#F9E589"/>
<stop offset="1" stop-color="#F6D751"/>
</linearGradient>
<clipPath id="clip0_17642_377913">
<rect width="712" height="1112" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 56 KiB

View File

@@ -0,0 +1,7 @@
The diagram you downloaded is available in these formats:
- DRAWIO
- SVG
You can customize them for your organization using the associated tools:
- For DRAWIO format, use draw.io for Confluence, online at diagrams.net, or the desktop app. Go to diagrams.net for more information.
- For SVG format, use an SVG editor such as Inkscape or Sketsa SVG Editor, which are free and available for Windows, macOS, Linux.

View File

@@ -0,0 +1,156 @@
# Auto-extracted absolute_layout template from
# kb/diagram/assets/archcenter-refs/autonomous-database-db-at-azure-diagram-oracle/autonomous-database-db-at-azure-diagram.drawio
# Source: Oracle Architecture Center reference (canonical geometry).
# Use this as the starting scaffold for a new spec — copy, rename ids,
# and replace `type: TODO_identify` on services with the right OCI
# type alias (adb_s, drg, fastconnect, etc.). Container coords and
# edge waypoints are Oracle's canonical layout; preserve unless the
# customer's topology requires a change.
absolute_layout:
canvas:
width: 850
height: 1100
containers: []
services:
- id: s2
type: TODO_identify
label: ''
x: 1117
y: 177
w: 63
h: 63
- id: s1
type: TODO_identify
label: ''
x: 1117
y: 178
w: 62
h: 62
- id: s3
type: TODO_identify
label: ''
x: 1118
y: 185
w: 60
h: 54
- id: s11
type: TODO_identify
label: ''
x: 780
y: 186
w: 63
h: 55
- id: s10
type: TODO_identify
label: ''
x: 781
y: 186
w: 61
h: 53
- id: s12
type: TODO_identify
label: ''
x: 781
y: 187
w: 60
h: 52
- id: s19
type: TODO_identify
label: ''
x: 968
y: 197
w: 78
h: 31
- id: s20
type: TODO_identify
label: ''
x: 972
y: 197
w: 88
h: 43
- id: s8
type: TODO_identify
label: ''
x: 629
y: 198
w: 30
h: 42
- id: s7
type: TODO_identify
label: ''
x: 629
y: 199
w: 30
h: 41
- id: s9
type: TODO_identify
label: ''
x: 629
y: 199
w: 29
h: 40
- id: s4
type: TODO_identify
label: ''
x: 38
y: 293
w: 60
h: 43
- id: s17
type: TODO_identify
label: ''
x: 780
y: 465
w: 63
h: 55
- id: s16
type: TODO_identify
label: ''
x: 781
y: 466
w: 61
h: 53
- id: s18
type: TODO_identify
label: ''
x: 781
y: 467
w: 60
h: 52
- id: s6
type: TODO_identify
label: ''
x: 252
y: 478
w: 63
h: 63
- id: s13
type: TODO_identify
label: ''
x: 629
y: 478
w: 30
h: 41
- id: s14
type: TODO_identify
label: ''
x: 629
y: 478
w: 30
h: 42
- id: s15
type: TODO_identify
label: ''
x: 629
y: 478
w: 29
h: 40
- id: s5
type: TODO_identify
label: ''
x: 40
y: 483
w: 63
h: 42
labels: []
connections: []

View File

@@ -0,0 +1,790 @@
<mxfile host="app.diagrams.net" agent="Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36" version="24.7.12">
<diagram name="autonomous-database-db-at-azure" id="autonomous-database-db-at-azure">
<mxGraphModel dx="792" dy="1097" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="850" pageHeight="1100" math="0" shadow="0">
<root>
<mxCell id="0" />
<mxCell id="1" parent="0" />
<UserObject label="" tags="Background" id="2">
<mxCell style="vsdxID=2;fillColor=#FFFFFF;gradientColor=none;shape=stencil(nZBLDoAgDERP0z3SIyjew0SURgSD+Lu9kMZoXLhwN9O+tukAlrNpJg1SzDH4QW/URgNYgZTkjA4UkwJUgGXng+6DX1zLfmoymdXo17xh5zmRJ6Q42BWCfc2oJfdAr+Yv+AP9Cb7OJ3H/2JG1HNGz/84klThPVCc=);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry width="1236" height="609" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="3">
<mxCell style="vsdxID=4;fillColor=#e4e1dd;gradientColor=none;shape=stencil(vVNdD4IgFP01POoQtopns//BEpVF4K6U9u/DYOZHrc023+7HgXPPhYNo2lS8FojgxoK5iFbmtkL0iAiRuhIgrYsQzRBNCwOiBHPTuc9r3iP76Gru/Q2dP4f7EwQ/fMZYTNmrcvJgDmfXhQAmMfFwCHgc7xJfmSMCIMGBoIt4J5sIjOVWGj0hVxxKETmqqFC8nLSaVoh6UQ7DKalHStg+PnzkXillGH2xmw3EzMmH6VaKWSxns2eZ/4i/3uTLUjaQ8cMnLng7rJBKeYOO+3NHupJ3M82e);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="1067" width="168" height="608" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="4">
<mxCell style="vsdxID=5;fillColor=none;gradientColor=none;shape=stencil(vVNdD4IgFP01POoQtopns//BEpVF4K6U9u/DYOZHrc023+7HgXPPhYNo2lS8FojgxoK5iFbmtkL0iAiRuhIgrYsQzRBNCwOiBHPTuc9r3iP76Gru/Q2dP4f7EwQ/fMZYTNmrcvJgDmfXhQAmMfFwCHgc7xJfmSMCIMGBoIt4J5sIjOVWGj0hVxxKETmqqFC8nLSaVoh6UQ7DKalHStg+PnzkXillGH2xmw3EzMmH6VaKWSxns2eZ/4i/3uTLUjaQ8cMnLng7rJBKeYOO+3NHupJ3M82e);strokeColor=#9e9892;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="1067" width="168" height="608" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="&lt;div style=&quot;font-size: 1px&quot;&gt;&lt;p style=&quot;text-align:left;margin-left:0;margin-right:0;margin-top:0px;margin-bottom:0px;text-indent:0;vertical-align:middle;direction:ltr;&quot;&gt;&lt;font style=&quot;font-size:16.93px;font-family:Oracle Sans;color:#312d2a;direction:ltr;letter-spacing:0px;line-height:120%;opacity:1&quot;&gt;&lt;b&gt;OCI Services&lt;br/&gt;&lt;/b&gt;&lt;/font&gt;&lt;/p&gt;&lt;/div&gt;" tags="Background" id="5">
<mxCell style="verticalAlign=middle;align=left;overflow=width;vsdxID=6;fillColor=none;gradientColor=none;shape=stencil(nZBLDoAgDERP0z3SIyjew0SURgSD+Lu9kMZoXLhwN9O+tukAlrNpJg1SzDH4QW/URgNYgZTkjA4UkwJUgGXng+6DX1zLfmoymdXo17xh5zmRJ6Q42BWCfc2oJfdAr+Yv+AP9Cb7OJ3H/2JG1HNGz/84klThPVCc=);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="1102" y="7" width="203" height="20" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="6">
<mxCell style="vsdxID=8;fillColor=#ecf3fb;gradientColor=none;shape=stencil(vVNBDoMgEHwNRxqUpIlna/9BKiopBbPSqr8vFLEqaQ9t4m2ZHZydxUE07xrWcpSSzoC+8l6UpkH0hNJUqIaDMLZCtEA0rzTwGvRdlf7cMsd01U0/3BcGf4+4GykZ/SnLDjR7IWdPZnCxXQjk0CUwBuSYeCSiTIyETBIDZoPoMGjDjNBqJS8Z1BxbMVxJVq9aXc95G8HTeFKohRc7fZhmI/6rm3n4aD872NmKz9P96ibez25PE/0W/73Lh8XsYeR7XmzxTlolpPRBXfa3ybSQTzUtng==);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry width="947" height="608" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="7">
<mxCell style="vsdxID=9;fillColor=none;gradientColor=none;shape=stencil(vVNBDoMgEHwNRxqUpIlna/9BKiopBbPSqr8vFLEqaQ9t4m2ZHZydxUE07xrWcpSSzoC+8l6UpkH0hNJUqIaDMLZCtEA0rzTwGvRdlf7cMsd01U0/3BcGf4+4GykZ/SnLDjR7IWdPZnCxXQjk0CUwBuSYeCSiTIyETBIDZoPoMGjDjNBqJS8Z1BxbMVxJVq9aXc95G8HTeFKohRc7fZhmI/6rm3n4aD872NmKz9P96ibez25PE/0W/73Lh8XsYeR7XmzxTlolpPRBXfa3ybSQTzUtng==);strokeColor=#0078d7;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry width="947" height="608" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="&lt;div style=&quot;font-size: 1px&quot;&gt;&lt;p style=&quot;text-align:left;margin-left:0;margin-right:0;margin-top:0px;margin-bottom:0px;text-indent:0;vertical-align:middle;direction:ltr;&quot;&gt;&lt;font style=&quot;font-size:16.93px;font-family:Oracle Sans;color:#312d2a;direction:ltr;letter-spacing:0px;line-height:120%;opacity:1&quot;&gt;&lt;b&gt;Azure Region&lt;br/&gt;&lt;/b&gt;&lt;/font&gt;&lt;/p&gt;&lt;/div&gt;" tags="Background" id="8">
<mxCell style="verticalAlign=middle;align=left;overflow=width;vsdxID=10;fillColor=none;gradientColor=none;shape=stencil(nZBLDoAgDERP0z3SIyjew0SURgSD+Lu9kMZoXLhwN9O+tukAlrNpJg1SzDH4QW/URgNYgZTkjA4UkwJUgGXng+6DX1zLfmoymdXo17xh5zmRJ6Q42BWCfc2oJfdAr+Yv+AP9Cb7OJ3H/2JG1HNGz/84klThPVCc=);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="8" y="7" width="203" height="20" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="9">
<mxCell style="vsdxID=12;fillColor=#FFFFFF;gradientColor=none;shape=stencil(nZBLDoAgDERP0z3SIyjew0SURgSD+Lu9kMZoXLhwN9O+tukAlrNpJg1SzDH4QW/URgNYgZTkjA4UkwJUgGXng+6DX1zLfmoymdXo17xh5zmRJ6Q42BWCfc2oJfdAr+Yv+AP9Cb7OJ3H/2JG1HNGz/84klThPVCc=);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="9" y="34" width="930" height="566" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="10">
<mxCell style="vsdxID=13;fillColor=none;gradientColor=none;shape=stencil(nZBLDoAgDERP0z3SIyjew0SURgSD+Lu9kMZoXLhwN9O+tukAlrNpJg1SzDH4QW/URgNYgZTkjA4UkwJUgGXng+6DX1zLfmoymdXo17xh5zmRJ6Q42BWCfc2oJfdAr+Yv+AP9Cb7OJ3H/2JG1HNGz/84klThPVCc=);dashed=1;dashPattern=1.00 2.00;strokeColor=#0078d7;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="9" y="34" width="930" height="566" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="&lt;div style=&quot;font-size: 1px&quot;&gt;&lt;p style=&quot;text-align:left;margin-left:0;margin-right:0;margin-top:0px;margin-bottom:0px;text-indent:0;vertical-align:middle;direction:ltr;&quot;&gt;&lt;font style=&quot;font-size:16.93px;font-family:Oracle Sans;color:#312d2a;direction:ltr;letter-spacing:0px;line-height:120%;opacity:1&quot;&gt;&lt;b&gt;Subscription&lt;br/&gt;&lt;/b&gt;&lt;/font&gt;&lt;/p&gt;&lt;/div&gt;" tags="Background" id="11">
<mxCell style="verticalAlign=middle;align=left;overflow=width;vsdxID=14;fillColor=none;gradientColor=none;shape=stencil(nZBLDoAgDERP0z3SIyjew0SURgSD+Lu9kMZoXLhwN9O+tukAlrNpJg1SzDH4QW/URgNYgZTkjA4UkwJUgGXng+6DX1zLfmoymdXo17xh5zmRJ6Q42BWCfc2oJfdAr+Yv+AP9Cb7OJ3H/2JG1HNGz/84klThPVCc=);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="16" y="41" width="203" height="20" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="12">
<mxCell style="vsdxID=16;fillColor=#dae8fc;gradientColor=none;shape=stencil(vVPREoIgEPwaHnUMdNJnq/9gEpWJxDko7e/DUFOpHmzGt+Nuj709WERSVdKaIRwoDfLCGp7pEpEDwphXJQOuTYTIEZE0l8AKkLcqs+eadsguusp7d0Nr+4KuAwcPe0piP4xfmZMFUzibKgxgP9xbPPQNOz/CNuNABkTQU7QebbnyQGqquaxm9IJCwTxD5uWCFrOSahirnXQ/nuDVREuS+BH5SL5WzTi8s58N5CzJx+nWqnH3s9nTON/iv3f5spgthPz2iwneTsu5ENao0/rSmSZlXU2OTw==);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="144" y="68" width="786" height="244" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="13">
<mxCell style="vsdxID=17;fillColor=none;gradientColor=none;shape=stencil(vVPREoIgEPwaHnUMdNJnq/9gEpWJxDko7e/DUFOpHmzGt+Nuj709WERSVdKaIRwoDfLCGp7pEpEDwphXJQOuTYTIEZE0l8AKkLcqs+eadsguusp7d0Nr+4KuAwcPe0piP4xfmZMFUzibKgxgP9xbPPQNOz/CNuNABkTQU7QebbnyQGqquaxm9IJCwTxD5uWCFrOSahirnXQ/nuDVREuS+BH5SL5WzTi8s58N5CzJx+nWqnH3s9nTON/iv3f5spgthPz2iwneTsu5ENao0/rSmSZlXU2OTw==);strokeColor=#0078d7;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="144" y="68" width="786" height="244" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="&lt;div style=&quot;font-size: 1px&quot;&gt;&lt;p style=&quot;text-align:left;margin-left:0;margin-right:0;margin-top:0px;margin-bottom:0px;text-indent:0;vertical-align:middle;direction:ltr;&quot;&gt;&lt;font style=&quot;font-size:16.93px;font-family:Oracle Sans;color:#312d2a;direction:ltr;letter-spacing:0px;line-height:120%;opacity:1&quot;&gt;&lt;b&gt;Availability Zone 1&lt;br/&gt;&lt;/b&gt;&lt;/font&gt;&lt;/p&gt;&lt;/div&gt;" tags="Background" id="14">
<mxCell style="verticalAlign=middle;align=left;overflow=width;vsdxID=18;fillColor=none;gradientColor=none;shape=stencil(nZBLDoAgDERP0z3SIyjew0SURgSD+Lu9kMZoXLhwN9O+tukAlrNpJg1SzDH4QW/URgNYgZTkjA4UkwJUgGXng+6DX1zLfmoymdXo17xh5zmRJ6Q42BWCfc2oJfdAr+Yv+AP9Cb7OJ3H/2JG1HNGz/84klThPVCc=);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="466" y="75" width="321" height="20" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="15">
<mxCell style="vsdxID=20;fillColor=#dae8fc;gradientColor=none;shape=stencil(vVPREoIgEPwaHnUMdNJnq/9gEpWJxDko7e/DUFOpHmzGt+Nuj709WERSVdKaIRwoDfLCGp7pEpEDwphXJQOuTYTIEZE0l8AKkLcqs+eadsguusp7d0Nr+4KuAwcPe0piP4xfmZMFUzibKgxgP9xbPPQNOz/CNuNABkTQU7QebbnyQGqquaxm9IJCwTxD5uWCFrOSahirnXQ/nuDVREuS+BH5SL5WzTi8s58N5CzJx+nWqnH3s9nTON/iv3f5spgthPz2iwneTsu5ENao0/rSmSZlXU2OTw==);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="144" y="347" width="786" height="244" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="16">
<mxCell style="vsdxID=21;fillColor=none;gradientColor=none;shape=stencil(vVPREoIgEPwaHnUMdNJnq/9gEpWJxDko7e/DUFOpHmzGt+Nuj709WERSVdKaIRwoDfLCGp7pEpEDwphXJQOuTYTIEZE0l8AKkLcqs+eadsguusp7d0Nr+4KuAwcPe0piP4xfmZMFUzibKgxgP9xbPPQNOz/CNuNABkTQU7QebbnyQGqquaxm9IJCwTxD5uWCFrOSahirnXQ/nuDVREuS+BH5SL5WzTi8s58N5CzJx+nWqnH3s9nTON/iv3f5spgthPz2iwneTsu5ENao0/rSmSZlXU2OTw==);strokeColor=#0078d7;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="144" y="347" width="786" height="244" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="&lt;div style=&quot;font-size: 1px&quot;&gt;&lt;p style=&quot;text-align:left;margin-left:0;margin-right:0;margin-top:0px;margin-bottom:0px;text-indent:0;vertical-align:middle;direction:ltr;&quot;&gt;&lt;font style=&quot;font-size:16.93px;font-family:Oracle Sans;color:#312d2a;direction:ltr;letter-spacing:0px;line-height:120%;opacity:1&quot;&gt;&lt;b&gt;Availability Zone 2&lt;br/&gt;&lt;/b&gt;&lt;/font&gt;&lt;/p&gt;&lt;/div&gt;" tags="Background" id="17">
<mxCell style="verticalAlign=middle;align=left;overflow=width;vsdxID=22;fillColor=none;gradientColor=none;shape=stencil(nZBLDoAgDERP0z3SIyjew0SURgSD+Lu9kMZoXLhwN9O+tukAlrNpJg1SzDH4QW/URgNYgZTkjA4UkwJUgGXng+6DX1zLfmoymdXo17xh5zmRJ6Q42BWCfc2oJfdAr+Yv+AP9Cb7OJ3H/2JG1HNGz/84klThPVCc=);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="465" y="354" width="321" height="20" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="18">
<mxCell style="vsdxID=24;fillColor=#FFFFFF;gradientColor=none;shape=stencil(nZBLDoAgDERP0z3SIyjew0SURgSD+Lu9kMZoXLhwN9O+tukAlrNpJg1SzDH4QW/URgNYgZTkjA4UkwJUgGXng+6DX1zLfmoymdXo17xh5zmRJ6Q42BWCfc2oJfdAr+Yv+AP9Cb7OJ3H/2JG1HNGz/84klThPVCc=);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="153" y="112" width="260" height="470" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="19">
<mxCell style="vsdxID=25;fillColor=none;gradientColor=none;shape=stencil(nZBLDoAgDERP0z3SIyjew0SURgSD+Lu9kMZoXLhwN9O+tukAlrNpJg1SzDH4QW/URgNYgZTkjA4UkwJUgGXng+6DX1zLfmoymdXo17xh5zmRJ6Q42BWCfc2oJfdAr+Yv+AP9Cb7OJ3H/2JG1HNGz/84klThPVCc=);dashed=1;dashPattern=1.00 2.00;strokeColor=#706e6f;strokeWidth=2;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="153" y="112" width="260" height="470" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="20">
<mxCell style="vsdxID=27;fillColor=#FFFFFF;gradientColor=none;shape=stencil(nZBLDoAgDERP0z3SIyjew0SURgSD+Lu9kMZoXLhwN9O+tukAlrNpJg1SzDH4QW/URgNYgZTkjA4UkwJUgGXng+6DX1zLfmoymdXo17xh5zmRJ6Q42BWCfc2oJfdAr+Yv+AP9Cb7OJ3H/2JG1HNGz/84klThPVCc=);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="358" y="109" width="47" height="6" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="21">
<mxCell style="vsdxID=29;fillColor=#86d633;gradientColor=#5e9624;shape=stencil(jVLtDoIwDHya/SWjDfIAiO9BZMgiMjJA4e1lKYatBMO/ftztel0FZn1ddEqA7Adrnuqjy6EWeBUAuq2V1cMSCcwFZpWx6mHN2JaUd4VDuuhl3u6FiXiJdBSQM6WxpPxG2PtoCRxTO02jC66EOGTICVhhhh1pQo7BYIwD2Q2+FgAiTENZf7S1JEPRhGn+lfQUfqLMJ3Ppj4Qh4pRH5tBf2l5h5rs+8sj+s9Ht6b9fgu1oKt00dHN+nx/ZUqIDxfwL);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="389" y="109" width="5" height="5" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="22">
<mxCell style="vsdxID=30;fillColor=#86d633;gradientColor=#5e9624;shape=stencil(lVJBDoIwEHxNr6TdjRLPiP8wAtKIlBRQ+L3UhdCukehtO51hdsoITNry3OQCZNtZc8ufOutKgUcBoOsyt7qbJoGpwKQwNr9a09cZnZuzY7rpbh7uCwPpdjKSyqlAjoQoKd/nE9EvvSW+ous4jvaLQIUKOQADRlhFOHOQc3DZZMt2pc8AQIRxaOuvNkMyNPXTos/44upMDqEvi8qC+lthyPgpJgvpvxt8rsSfeyMm+6uVrv8pwTSsBSp0VVH//HteuAmismL6Ag==);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="380" y="109" width="5" height="5" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="23">
<mxCell style="vsdxID=31;fillColor=#86d633;gradientColor=#5e9624;shape=stencil(jVLbDoIwDP2avZLRBonPiP9BZMgiMjJA4e9lKQlbCYa3Xs7Z6ekqMOvrolMCZD9Y81JfXQ61wJsA0G2trB6WSGAuMKuMVU9rxrakvCsc0kVv83EvTMRLpKOAnCmNJeV3wj5GS+CY2mkaXXAlxCFDTsAKM+xIE3IMBmMcyG7wtQAQYRrK+qOtJRmKJkzzr6RTuIaizCdz6Y+EIeKUR+bQXxrsR+K7PvLI/rPR7em/X4LtaCrdNHRzfp8f2VKiA8X8Bw==);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="371" y="109" width="5" height="5" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="24">
<mxCell style="vsdxID=32;fillColor=#50e6ff;gradientColor=none;shape=stencil(jZPRksIgDEW/htcMSUoLz677H47WLWO3dbCu7t8vXWiFjnV8C+FecgJB8ObS7M61IHkZXH+qb/YwNII/BJHtmtrZwUeCt4I3x97VX66/doewPu9G5Rh99z/jCffgMxpUNbpI/oaM1qDNf+YzGFrbJQZdARaZAaVM5furCwUwGhRUGA2YO+SdooZAl1FDSw1HDUJBUcMzfInrqP5QlZH6DNErVrngNFConFQuKHm6rJkzqTphQkXrlFgAmQxTroufPBeCUa96mi9y6kozMOddPTTTg5SAmPeVlua3RuWN2fLBYzKPtm3DYKf7y0n2qfALePsH);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="361" y="109" width="14" height="15" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="25">
<mxCell style="vsdxID=33;fillColor=#1490df;gradientColor=none;shape=stencil(jZPRcsIgEEW/htcd2E1geVb7H06NDdOYOBhb/XuTQkbAavu2XA7s3eEiaHVqt8dGoDyNfvhsvt1ubAWtBaLr28a7caoEbQSt9oNvPvxw7ndhfdzO5Fwdhq/5hks4xwYI51Mor0FRQPZHeAt85/qEtwy1zXmEOuXfzz40UHFfysgvAgHHKy5YMougQZvI0GPnKCkGqZ97VTVUhdfY51e8AqSMZl6MPhmtGIwrMJgPVoxlLCidj5V0jYrRL1+AJSC/fLHSJivQNrcqc5uT81rlVmVuM80J/ScofwdrKu6p3LuuC6FO98sUT1L4AbS5AQ==);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="361" y="99" width="14" height="15" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="26">
<mxCell style="vsdxID=34;fillColor=#50e6ff;gradientColor=none;shape=stencil(lZLRksIgDEW/htcMJNLCs6v/4Wzrltlu62B19e9tN6AUp+v4Fm4uyRm4gtbHZneoBcrj4Pvv+tdVQyPoQyC6rqm9G8ZK0EbQet/7+sv3p67i82E3Oafqpz9PEy58zxSg1HQL5ZUV+Xfasrl1XWK2GgzNzBZKTP2fJ8/TFfeVlMEfBQJjWbpg7omChdUqeOh5c5AQAXGZNRkSWQ0U6l9YA1JnuJHtDqsBywz37glkCkHPWZ9WZ6xAdoZqyjBhgTR71OQTI2f2pIaAKKN8LA2KkaD1MuVbUXlhHotHIveubTnQaT9P8Chx+mlzAw==);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="389" y="109" width="15" height="15" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="27">
<mxCell style="vsdxID=35;fillColor=#1490df;gradientColor=none;shape=stencil(jZJBcsIwDEVP461Gsmxirym9B1NC42maMCa0cHucyh1i05buLPk5eqN8xetjtz20SuNxiuNb+xl2U6f4SWkdhq6NYUonxRvF6/0Y29c4noad1IftTM6n9/Fj/sJZ3vkGaH6k8SIN58D5r86z8H0YFryzYAueEH+nCUxFezBmyb+couiQAJjxXJIDXEnrrEsil2RBu0zw3dTvjs7WP1sSWF9qAvu/LIkBbWmKpWXS8qY0xcoyLbrWrMaWmne/qlk90sRqnY0HqtZ5Y3LDGWh0qbqYzP9KyeNUpcMtkvvQ95Lo5X0d4dSS+PPmCg==);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="389" y="99" width="14" height="15" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="&lt;div style=&quot;font-size: 1px&quot;&gt;&lt;p style=&quot;text-align:left;margin-left:0;margin-right:0;margin-top:0px;margin-bottom:0px;text-indent:0;vertical-align:middle;direction:ltr;&quot;&gt;&lt;font style=&quot;font-size:16.93px;font-family:Oracle Sans;color:#706e6f;direction:ltr;letter-spacing:0px;line-height:120%;opacity:1&quot;&gt;&lt;b&gt;Application VNet/Subnet&lt;br/&gt;&lt;/b&gt;&lt;/font&gt;&lt;/p&gt;&lt;/div&gt;" tags="Background" id="28">
<mxCell style="verticalAlign=middle;align=left;overflow=width;vsdxID=36;fillColor=none;gradientColor=none;shape=stencil(nZBLDoAgDERP0z3SIyjew0SURgSD+Lu9kMZoXLhwN9O+tukAlrNpJg1SzDH4QW/URgNYgZTkjA4UkwJUgGXng+6DX1zLfmoymdXo17xh5zmRJ6Q42BWCfc2oJfdAr+Yv+AP9Cb7OJ3H/2JG1HNGz/84klThPVCc=);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="161" y="120" width="389" height="20" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="29">
<mxCell style="vsdxID=40;fillColor=#FFFFFF;gradientColor=none;shape=stencil(lZPRDoIwDEW/Zq9LWQeEZ9T/MIqyiEAmKv69I51hnQTj21ruZac3q8DyVu/7Sii4Dba7VE9zHGqBG6GUaevKmsGdBG4FlqfOVmfb3dsj1f1+Uk6na/eY/jCSL5WYTSYFL2oUhcypsyP94W7JkJBASa29I4ktMCpqgVf4ssglKq9ArvBloaUOb21MG1ACQ3TM6RohcDwHjJwuGIHzfuCCVBjuIpxDzzQDhDU6l0WacULgeAlE8QUTYCzB5Uw44iyfkVcjnA0Bdc4xw0Fi8hG/s4nQF0F/P8d/9e4wv/2TaRpanfB7vCuuRXuG2zc=);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="1117" y="178" width="62" height="62" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="30">
<mxCell style="vsdxID=41;fillColor=#FFFFFF;gradientColor=none;shape=stencil(lZXRdoIwDIafprc9bUIpXDv3Hp6JgzMGHsQN335lrdCmCHpX4h/88iehDHeX8nAuGIhL37VfxW917EuGbwygasqiq3pzYrhnuDu1XfHZtdfmaJ/Ph1E5nr7bn/ENg83LkaMas0DcbAQ4Zv+Bd6v/uHY2QboMxZPMZUiSIgZwIj2Fbi6UcMidCGORC6U8Qf/P66rxYb2ECT+Tq7ReylxArgiuV9NcQZYSXs8rpKpFYFMOhLxUT3mNSxRX8xRCXIjMNQVoCGkhMtfwK/0YFqi5tBmUFSJrvR5DVE8EP2DkEmVfHoPNmX1Vv7UT4oUWi3XLMhVaJkK/BDWLDqEInVpfGBGQbS6LYHTyZEInb+J3ESkE2+jmXfKoOSocOyJf2GhJPJwZKJS3zVMpSDXPrcesf2478pxrTb+TUzfvXCnPIUQldi58dNbdXBtdc5gvglNV1/Ye8X+nF4cJ2UsH938=);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="1117" y="177" width="63" height="63" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="31">
<mxCell style="vsdxID=43;fillColor=#2d5967;gradientColor=none;shape=stencil(tZNNDsIgEIVPw5bA0Eq7rnqPJqWWWEtD69/tBYmx2IiwcDfMvG9mgDzEqqmrR4GATLNWR3GVzdwhtkUAcuiElrOJENshVrVKi4NW56Fx57G2Shud1MV2uDluU2BOLQXk7jKUYiifmb0DejksgILjrPCArMQ0AKwnmBYkADCzQJYCUEhcaT3hx6WTX+kfgP9xPPfU5HtriFYST5jH96QkoOUJ2lcxZof4FwgpTfD2Riv73llrWf/0kkk5H7LdAw==);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="1148" y="193" width="21" height="18" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="32">
<mxCell style="vsdxID=44;fillColor=#2d5967;gradientColor=none;shape=stencil(lVTRcoMgEPwaXpnjiEWf0+Q/MompTK1mjGn17yMFlYORpm+w7rm7xwGT+3t1upUM4d537Wf5oy99xeQ7Q9RNVXa6n1ZMHpjcX9uu/OjaR3Ox+9vJMM3qq/02fxhsXQamBGG0WyE4Fr/I0bLPj87ShSUo4IV0JSKsgQEtlCvukNEhmHN0dYOMSA7ZFVwk1b2S1Y94o+K+xdWPoOJLbhkwNpSx4IBU2vupkxE4IyPG9mREejW2VyLidmLsEOOT2cgdHXitm3+MR3KYINlQ5JmioYAGAhrGFOQ0TJAlSwoCFVOK7zDooGdp7iDAH/2DpKhRCa8LBDkXYBkaz5oMOS9lXelztwVXKrgmnjXa8a2sRDI5J4Q5LdbX56rr2j5e/vfwtZog+9LJwxM=);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="1138" y="214" width="18" height="18" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="33">
<mxCell style="vsdxID=45;fillColor=#2d5967;gradientColor=none;shape=stencil(lZJNDoMgEIVPw5bAYCqurb2HiVhIKRjE/ty+UNJUm1Rl95j53mQmPMTqUbaDQEBG7+xF3FXnJWJHBKCMFE75oBBrEKt768TZ2cl06T20kYzqam9xwiP5igofILqAPFMFCkyrd+WUDFqZmYFTXC4NvMQrPOUYWAafvdAOw9bJ5P90sgApWUE/zV1w1hIbcBDf7+2V1ikd8/5vHEIpRYk1Lw==);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="1127" y="192" width="20" height="18" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="34">
<mxCell style="vsdxID=46;fillColor=#2d5967;gradientColor=none;shape=stencil(pZTdcoMgEIWfhlsGWBG9TpP3yCSmMjWaIebv7YPFCgvVpu0du3yLZ886S2B1rrenigh27k33Ud30vq8JvBEhdFtXRvf2RGBNYHXoTPVuuku7d/FpO5DD6dhdhxfurq6UVMmhSrCHy3DGPuONwxvdBnhGxSK9uxj3OnfXYoQ5ptlduMQYPsawVFQVIwGYgEmvKOb1MSRuoZFJye/RRELctC/gaVtfnRa4c+8MpIOBFybz4yDx3IGqDNEZ5Wr+9QS3n5NyyYSggk8lBWAXMmxCmVPOsQ3BDwcx9L0POdYZ07FOC4g8EhrI8Mokj8QG7UBKwYxPsVpf8ac5/BO3B78ZDrpp3GIJ7+NNYlNuC8H6CQ==);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="1118" y="185" width="60" height="54" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="35">
<mxCell style="vsdxID=47;fillColor=#2d5967;gradientColor=none;shape=stencil(nZLbDoIwDEC/Zq9ktILwjPAfRIYsIiMDFP9eli5hw1v0re1Ol5O2DLOhKXvBgA+jVmdxk9XYMDwwANk1QstxiRjmDLNaaXHSauoqyvvSkCa6qKv5Yaa+kHPTA/zu5wXBrewc+G80SoIYXfg4abIIfdymsA+ilEoz2JIlwGuYkdJdAJEF0AVeuqWxJ8c/iaWJb8Z9q3V88GyOWwbfTMPX+2klX+AlWDdfy7alw3Hft5eylOjKMH8A);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="1118" y="179" width="60" height="4" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="&lt;div style=&quot;font-size: 1px&quot;&gt;&lt;p style=&quot;text-align:left;margin-left:0;margin-right:0;margin-top:0px;margin-bottom:0px;text-indent:0;vertical-align:middle;direction:ltr;&quot;&gt;&lt;font style=&quot;font-size:16.93px;font-family:Oracle Sans;color:#000000;direction:ltr;letter-spacing:0px;line-height:120%;opacity:1&quot;&gt;Object Storage&lt;br/&gt;&lt;/font&gt;&lt;/p&gt;&lt;/div&gt;" tags="Background" id="36">
<mxCell style="verticalAlign=middle;align=left;overflow=width;vsdxID=48;fillColor=none;gradientColor=none;shape=stencil(nZBLDoAgDERP0z3SIyjew0SURgSD+Lu9kMZoXLhwN9O+tukAlrNpJg1SzDH4QW/URgNYgZTkjA4UkwJUgGXng+6DX1zLfmoymdXo17xh5zmRJ6Q42BWCfc2oJfdAr+Yv+AP9Cb7OJ3H/2JG1HNGz/84klThPVCc=);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="1092" y="244" width="237" height="20" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="37">
<mxCell style="vsdxID=51;fillColor=#5ea0ef;gradientColor=#0078d4;shape=stencil(lZXbUhsxDIafZm81Ovh4TeE9mCY0O6QJswRK3h4tXjuRO1naO0eR9pP/37IHuXvdPb5sB8bX03R83v4ZN6fdID8G5vGw207jSVeD3A9y93Sctr+m49thU36/PM6Z8+r38X3+wkepcwJIcxXjuUS8AKevyEMp2I+HqwKfTLZDCLeTCdFkB4bA1+k/36bSDZWEnAErYAn5AFlK6IOXLA3VrCXkCWJYsmTJEshL6LyEXITobrc7V9jdRRBZ7RdBou3XMVSNar/JQ8q2X8ngxPabCNDbfiXBKj4hRLF4jpA6uWIE5yyeYtOm4iNBJosnhBTW+CGAdHbJxYdqjXra4dGi1TzPFo3gVg+K8+CCJSNwR1aRPVkyN8EqXBy4bOGqV1qDs5rXuU4M3MnOHoJYOqkUbPEqWGc66+l2a3g1j9jiOV0+XFkE3Mku2mS0eGV1yuuZy6ubh0AWrl74bu8I5C3bOyCLRssNUo//DbD6my04ShOiWd7GqoITNxvapF2mpkZyPQS3NHeA3aTpLSS+s1xHOFp8uwKb4TrT3ZzprRfM1u219Pcd/d8F31zq/1Cgi8sb8jTu9+UJuv6/f3M0VN4ruf8E);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="38" y="293" width="60" height="43" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="38">
<mxCell style="vsdxID=52;fillColor=#767676;gradientColor=none;shape=stencil(jZDdCoMwDIWfJrfSNoztXt17CNY1WFup3d/bryWM1YHi3TnJl3A4gPViulmDEksMftRP6qMBbEApckYHikkBtoD14IO+BX93Pfu5y2RWk3/kDy++E/lCiXfprgxaciVYSVyxZ1ld5DYvxfr11x+CT3tBDifeBpP4FTKQtdxnuf8vMI24fGw/);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="74" y="313" width="27" height="21" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="39">
<mxCell style="vsdxID=53;fillColor=#999999;gradientColor=none;shape=stencil(jZBLDsIwDERP423kOqWi61LuUakpiQhJlaZ8bk+CVRFYIHZj+81IY5DdoodZAeESgz+rmxmjBnkAIuO0CiYmBbIH2U0+qFPwqxt5nodMZnXx15xwZ1/bil2dXYQP3uBrOjJsjStg/ACpFg39C1f4I3c7bvC+EtiUeBLvApOxlvuX9+/CacXPkv0T);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="66" y="313" width="7" height="18" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="40">
<mxCell style="vsdxID=54;fillColor=#a3a3a3;gradientColor=none;shape=stencil(UzV2Ls5ILEhVNTIoLinKz04tz0wpyVA1dlE1MsrMy0gtyiwBslSNXVWNndPyi1LTi/JL81Ig/IJEkEoQKze/DGRCBUSfAUiHkUElhGdppGdkChZxgyjOycxDUmxogKocxidKsaWemSVu1ahq8RhLkoMJKAYyEOGSlpmTAwlWZHn0cAQKQeLA2BUA);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="86" y="320" width="2" height="9" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="41">
<mxCell style="vsdxID=55;fillColor=#a3a3a3;gradientColor=none;shape=stencil(UzV2Ls5ILEhVNTIoLinKz04tz0wpyVA1dlE1MsrMy0gtyiwBslSNXVWNndPyi1LTi/JL81Ig/IJEkEoQKze/DGRCBUSfoYEBSI+RQSWEb6lnZgYWcIOozsnMQ1KNqtaAWIWWRnqmeExFdwOMT5Ri/A4mpBrIQIRMWmZODiRgkeXRQxIoBIkFY1cA);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="81" y="318" width="2" height="9" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="42">
<mxCell style="vsdxID=56;fillColor=#a3a3a3;gradientColor=none;shape=stencil(lZHNDsIgEISfZq8Ed2NIz7W+R5NSISI0FP/eXnCjokk13mZ3v5mQAaidTT9pQDmnGPb6bIdkgDaAaL3R0aasgDqgdgxR72I4+oHnqS9kUYdwKgkX9sniQHnlqUGB6r7ZMuysr+BGiXKrDCspl/HH8Zku1HqZfme/xP715B9wFq9mRuscF1vfP5vMK/4F6m4=);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="92" y="321" width="2" height="8" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="43">
<mxCell style="vsdxID=57;fillColor=#a3a3a3;gradientColor=none;shape=stencil(UzV2Ls5ILEhVNTIoLinKz04tz0wpyVA1dlE1MsrMy0gtyiwBslSNXVWNndPyi1LTi/JL81Ig/IJEkEoQKze/DGRCBUSfAUiHkUElhGdprGdqCBZxgyjOycxDUmxogKocxidKsYWemTlu1ahq8RhLkoMJKAYyEOGSlpmTAwlWZHn0cAQKQeLA2BUA);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="76" y="316" width="2" height="9" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="44">
<mxCell style="vsdxID=58;fillColor=#a3a3a3;gradientColor=none;shape=stencil(UzV2Ls5ILEhVNTIoLinKz04tz0wpyVA1dlE1MsrMy0gtyiwBslSNXVWNndPyi1LTi/JL81Ig/IJEkEoQKze/DGRCBUSfoYEBSI+RQSWMr2dqAhZxgyjPycxDUo6q2IBYhZaGeqZmuBVjOgKPySS6mKByIAMROGmZOTmQsEWWRw9MoBAkIoxdAQ==);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="97" y="323" width="2" height="8" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="45">
<mxCell style="vsdxID=59;fillColor=#B3B3B3;gradientColor=none;shape=stencil(lZLbDoMgEES/htcNsCr4bO1/mIiV1IpBe/v7Sompl5Tat2U4Q2bJEMz6uugU4bQfrDmruy6HmuCBcK7bWlk9jBPBnGBWGatO1lzb0p+7wpFuupibe+HhfYiQxM7F6dMrKYIUb+XoDY1uZwa6gBmlu1EBUfod3gZhDNLkH8OP5DsMy7+ZlpvwwKpJDBFfwIEgW1gKYAHDOohkgNF+PJA7iI7DpzaVbhrfuvn9umaj5CuK+Qs=);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="67" y="316" width="3" height="12" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="46">
<mxCell style="vsdxID=60;fillColor=#333132;gradientColor=#5b5a5c;shape=stencil(lZHBDsIgEES/Zq+Esq3Vc63/0aRUiAgNRa1/L7gxFmNqvM3uzryQAbCZVDdKEHwK3p3kTfdBAe5BCG2V9DpEBdgCNoPz8ujdxfY0j11yJnV210SYKVdwnjKC32ne7FiJz82B7Ebbhb3esgqzwAvw1Z6zy4LhClvEc50FVsh/vvunPYp3RYM2hhpe3j8rjSv6Dmwf);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="66" y="328" width="35" height="8" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="47">
<mxCell style="vsdxID=61;fillColor=#767676;gradientColor=none;shape=stencil(jZHRDoIwDEW/pq/LbCOGZ8T/IGG4xbmRMVH+3s3GCMSIb7ftuU1zC1QNuukVoBxi8Bd1N23UQEdANE6rYGJSQDVQ1fmgzsHfXMt132Qyq6sf84YH+3ZSZg/KiesDirJ8dU6MW+Nm+BJ+m7+jYr+Af6DrI7AQ9D+9cfImnsQnnc5Yy+HO5+s0U4s/QfUT);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="74" y="330" width="28" height="19" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="48">
<mxCell style="vsdxID=62;fillColor=#a3a3a3;gradientColor=none;shape=stencil(lZDdCoMwDIWfJrdSEybs2ul7CNY12LVS637efi1BNgSHuzsn+RIOB6ieTTdpQDXH4Ef94D4aoAsgsjM6cEwKqAGqBx/0NfjF9eKnLpNZ3fw9f3jKncoXqF7iSiW+FdSy20V/gOuXFcXiRMfpc1VU5dEUfwTeoEl8OhnYWqn0e7/tMI2kf2re);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="76" y="334" width="2" height="12" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="49">
<mxCell style="vsdxID=63;fillColor=#a3a3a3;gradientColor=none;shape=stencil(UzV2Ls5ILEhVNTIoLinKz04tz0wpyVA1dlE1MsrMy0gtyiwBslSNXVWNndPyi1LTi/JL81Ig/IJEkEoQKze/DGRCBUSfoYEBSI+RQSWEb2mqZ2EGFnGDKM/JzENSjqoYppkIpXgUojvBWM+UeMUE3EtQOZCBCJq0zJwcSMgiy6MHJVAIEg3GrgA=);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="81" y="335" width="2" height="11" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="50">
<mxCell style="vsdxID=64;fillColor=#a3a3a3;gradientColor=none;shape=stencil(lZDdCoMwDIWfJrfSJezCa3/eQ7DasNpK7Tb39msJsiFs6N05yZdwOEDVYrpZA6olBn/TT+6jAaoBkZ3RgWNSQA1QNfigx+Dvrhc/d5nMavKP/GGVO5UvUL3EXZT4VlDL7if6B9y+bCgVhMfp8logHU1xIvAOTeLTycDWSqXf+32HaST9U/MG);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="86" y="335" width="2" height="9" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="51">
<mxCell style="vsdxID=65;fillColor=#a3a3a3;gradientColor=none;shape=stencil(UzV2Ls5ILEhVNTIoLinKz04tz0wpyVA1dlE1MsrMy0gtyiwBslSNXVWNndPyi1LTi/JL81Ig/IJEkEoQKze/DGRCBUSfoYEBSI+RQSWEb2miZ2wEFnGDKM/JzENSjqoYppkIpXgUojvBRM+CeMUE3EtQOZCBCJq0zJwcSMgiy6MHJVAIEg3GrgA=);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="92" y="336" width="2" height="8" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="52">
<mxCell style="vsdxID=66;fillColor=#a3a3a3;gradientColor=none;shape=stencil(UzV2Ls5ILEhVNTIoLinKz04tz0wpyVA1dlE1MsrMy0gtyiwBslSNXVWNndPyi1LTi/JL81Ig/IJEkEoQKze/DGRCBUSfoYEBSI+RQSWEb2msZ2AJFnGDKM/JzENSjqoYppkIpXgUAq00MkFRbKJnboFbPYlOJqgcyECETlpmTg4kcJHl0UMTKASJCWNXAA==);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="97" y="337" width="2" height="6" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="53">
<mxCell style="vsdxID=67;fillColor=#999999;gradientColor=none;shape=stencil(UzV2Ls5ILEhVNTIoLinKz04tz0wpyVA1dlE1MsrMy0gtyiwBslSNXVWNndPyi1LTi/JL81Ig/IJEkEoQKze/DGRCBUSfAUiHkUElhGdupmdgDhZxgyjOyczDqdjQXM/CDLdiQwNU5QbEK4XxiXAESS7GUAxkIAImLTMnBxKuyPLoAQkUgkSCsSsA);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="66" y="330" width="7" height="19" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="54">
<mxCell style="vsdxID=68;fillColor=#B3B3B3;gradientColor=none;shape=stencil(lZLdDoIwDIWfZrfNWBmya9T3IGHIIjIy8O/t3VxUJnHCXXf6neW0KcFiaMpeEkaH0eijvKpqbAhuCWOqa6RRo60I7ggWtTbyYPS5q/y7Lx3pqpO+uB9u3scEYOZcjN69klslfyp7b2hVNzHQEObAcCmcIGwi8DyKgJyv4f9EX2AIl5PQcAD6+++MQ5IGcAqCreEFBxoJL8Sr/V4njeSZ4xF4xZxR1BafO6tV2/oznfa/79JK/qZx9wA=);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="67" y="333" width="3" height="13" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="&lt;div style=&quot;font-size: 1px&quot;&gt;&lt;p style=&quot;text-align:left;margin-left:0;margin-right:0;margin-top:0px;margin-bottom:0px;text-indent:0;vertical-align:middle;direction:ltr;&quot;&gt;&lt;font style=&quot;font-size:16.93px;font-family:Oracle Sans;color:#000000;direction:ltr;letter-spacing:0px;line-height:120%;opacity:1&quot;&gt;Azure&lt;br/&gt;&lt;/font&gt;&lt;/p&gt;&lt;/div&gt;" tags="Background" id="55">
<mxCell style="verticalAlign=middle;align=left;overflow=width;vsdxID=70;fillColor=none;gradientColor=none;shape=stencil(nZBLDoAgDERP0z3SIyjew0SURgSD+Lu9kMZoXLhwN9O+tukAlrNpJg1SzDH4QW/URgNYgZTkjA4UkwJUgGXng+6DX1zLfmoymdXo17xh5zmRJ6Q42BWCfc2oJfdAr+Yv+AP9Cb7OJ3H/2JG1HNGz/84klThPVCc=);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="48" y="354" width="84" height="20" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="&lt;div style=&quot;font-size: 1px&quot;&gt;&lt;p style=&quot;text-align:left;margin-left:0;margin-right:0;margin-top:0px;margin-bottom:0px;text-indent:0;vertical-align:middle;direction:ltr;&quot;&gt;&lt;font style=&quot;font-size:16.93px;font-family:Oracle Sans;color:#000000;direction:ltr;letter-spacing:0px;line-height:120%;opacity:1&quot;&gt;Container&lt;br/&gt;&lt;/font&gt;&lt;/p&gt;&lt;/div&gt;" tags="Background" id="56">
<mxCell style="verticalAlign=middle;align=left;overflow=width;vsdxID=71;fillColor=none;gradientColor=none;shape=stencil(nZBLDoAgDERP0z3SIyjew0SURgSD+Lu9kMZoXLhwN9O+tukAlrNpJg1SzDH4QW/URgNYgZTkjA4UkwJUgGXng+6DX1zLfmoymdXo17xh5zmRJ6Q42BWCfc2oJfdAr+Yv+AP9Cb7OJ3H/2JG1HNGz/84klThPVCc=);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="32" y="371" width="152" height="20" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="&lt;div style=&quot;font-size: 1px&quot;&gt;&lt;p style=&quot;text-align:left;margin-left:0;margin-right:0;margin-top:0px;margin-bottom:0px;text-indent:0;vertical-align:middle;direction:ltr;&quot;&gt;&lt;font style=&quot;font-size:16.93px;font-family:Oracle Sans;color:#000000;direction:ltr;letter-spacing:0px;line-height:120%;opacity:1&quot;&gt;Registry&lt;br/&gt;&lt;/font&gt;&lt;/p&gt;&lt;/div&gt;" tags="Background" id="57">
<mxCell style="verticalAlign=middle;align=left;overflow=width;vsdxID=72;fillColor=none;gradientColor=none;shape=stencil(nZBLDoAgDERP0z3SIyjew0SURgSD+Lu9kMZoXLhwN9O+tukAlrNpJg1SzDH4QW/URgNYgZTkjA4UkwJUgGXng+6DX1zLfmoymdXo17xh5zmRJ6Q42BWCfc2oJfdAr+Yv+AP9Cb7OJ3H/2JG1HNGz/84klThPVCc=);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="38" y="388" width="135" height="20" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="58">
<mxCell style="vsdxID=75;fillColor=#0078d4;gradientColor=#5ea0ef;shape=stencil(hZPLEoIwDEW/pttOaHjYNeJ/MIrSEYEp4OPvBQtDU0B2SXrbOb1JGMZNntYZE9C0urpnL3Vpc4ZHJoQq80yrto8YJgzja6Wzm6668mLyOh2UQ/SonsMLb3NPhjyMhlsCPqYCv+xkxIUqLTFyxG3tudPmZc8cetyXo9qz5fAWJP2MqeDCHwVIBWMabJMBwZLBPy6gUDLiUUjBLPKpAkDRLCuQSlb5ljY7chdSHnjgUdCZwYWaKO2voKvBNW8o5SxeMXzRXnCMtPonlp+gPZ/wbF9wd/52hrUP5jG/qqIwW2Kfu2vRl8xKYfIF);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="40" y="483" width="63" height="42" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="59">
<mxCell style="vsdxID=76;fillColor=#50e6ff;gradientColor=none;shape=stencil(lZHNCoMwEISfZq+SZkV6t/Y9BKNZTBOJ6Y9vb8IirYJibzObb5ZlAliOuh4USDEG73r1piZowBtISVYrTyEqwAqwbJ1XnXdP27Af6kQm9XCvtOHDuYsQKSPFxJ7dnVFD9gAtiiy/7uNreAmfQBEzzM+f8cfFKzSKbyktGcOd/r5vS4wj/gCsZg==);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="71" y="498" width="10" height="18" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="60">
<mxCell style="vsdxID=77;fillColor=#c3f1ff;gradientColor=none;shape=stencil(UzV2Ls5ILEhVNTIoLinKz04tz0wpyVA1dlE1MsrMy0gtyiwBslSNXVWNndPyi1LTi/JL81Ig/IJEkEoQKze/DGRCBUSfoYEBSI+RQSWEb2KpZ2EKFnGDKM/JzENSboqqGqYbq1pKDMZjLIkuJqgcyEAETlpmTg4kbJHl0QMTKASJCGNXAA==);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="61" y="492" width="21" height="12" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="61">
<mxCell style="vsdxID=78;fillColor=#9cebff;gradientColor=none;shape=stencil(UzV2Ls5ILEhVNTIoLinKz04tz0wpyVA1dlE1MsrMy0gtyiwBslSNXVWNndPyi1LTi/JL81Ig/IJEkEoQKze/DGRCBUSfoYEBSI+RQSWEb2ysZ2oMFnGDKM/JzMOjHMbHqhhVqZmZnokFsYrxmEqhizGUAxmIwEnLzMmBhC2yPHpgAoUgEWHsCgA=);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="61" y="498" width="10" height="18" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="62">
<mxCell style="vsdxID=79;fillColor=#c3f1ff;gradientColor=none;shape=stencil(UzV2Ls5ILEhVNTIoLinKz04tz0wpyVA1dlE1MsrMy0gtyiwBslSNXVWNndPyi1LTi/JL81Ig/IJEkEoQKze/DGRCBUSfAUiHkUElhGdiqWduBBZxgyjOycxDUmxogKrcgHilMD5WxSQ5goBiIAPh17TMnBxIUCHLo4cNUAgSrsauAA==);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="61" y="504" width="10" height="12" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="63">
<mxCell style="vsdxID=80;fillColor=#9cebff;gradientColor=none;shape=stencil(UzV2Ls5ILEhVNTIoLinKz04tz0wpyVA1dlE1MsrMy0gtyiwBslSNXVWNndPyi1LTi/JL81Ig/IJEkEoQKze/DGRCBUSfoYEBSI+RQSWEb2KpZ24EFnGDKM/JzENSjqrYgFiFMFuwKiXRCQSVAxkI36Zl5uRAAgtZHj10gEKQkDV2BQA=);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="71" y="504" width="10" height="12" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="64">
<mxCell style="vsdxID=81;fillColor=#cccccc;gradientColor=#707070;shape=stencil(jZTRcoMgEEW/htedBUTZ5zT9j0xjqlOrGWNa8/fBgJHFqekbXhbP5a6r0LtLdTiXQuFl6Luv8rc+DpXQb0Kpuq3Kvh7cSui90LtT15effXdtj/75fJgqp9V39zO9YfTnCEFOhxTevFBYyB7Cuy//uPa+XoZ9BK3DiVlSoI2XRuWlnMAE6RakLIMioEa9rgoSxuymbiOr2pEz5hW3jMblcm0huFIEecGNxtcJrgiI23yZEsgiCckCEWdnkCcZWQlGcbQCqznbGjByCy452bqUORg5lZyRnFMRUHGqxI3WkAvIstYk5SuLiNxk7GG2RUk4yz3mtkQx/zccMs/uPgOKUp/ZUexq3cCZvwzPH99FEtOrYXOLZVBPddP4OY/308F2kv8p6P0d);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="56" y="525" width="31" height="16" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="&lt;div style=&quot;font-size: 1px&quot;&gt;&lt;p style=&quot;text-align:left;margin-left:0;margin-right:0;margin-top:0px;margin-bottom:0px;text-indent:0;vertical-align:middle;direction:ltr;&quot;&gt;&lt;font style=&quot;font-size:16.93px;font-family:Oracle Sans;color:#000000;direction:ltr;letter-spacing:0px;line-height:120%;opacity:1&quot;&gt;Application&lt;br/&gt;&lt;/font&gt;&lt;/p&gt;&lt;/div&gt;" tags="Background" id="65">
<mxCell style="verticalAlign=middle;align=left;overflow=width;vsdxID=82;fillColor=none;gradientColor=none;shape=stencil(nZBLDoAgDERP0z3SIyjew0SURgSD+Lu9kMZoXLhwN9O+tukAlrNpJg1SzDH4QW/URgNYgZTkjA4UkwJUgGXng+6DX1zLfmoymdXo17xh5zmRJ6Q42BWCfc2oJfdAr+Yv+AP9Cb7OJ3H/2JG1HNGz/84klThPVCc=);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="28" y="545" width="186" height="20" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="66">
<mxCell style="vsdxID=85;fillColor=#5e9624;gradientColor=#76bc2d;shape=stencil(lZbRdoIwDIafhtuetoFCr517D8/EyZkTD+qmb79yStM0Hah3WP7wJe2f2AJW5/3m1BZani9D/9X+dtvLvoC3QuvuuG+H7uKeClgXsNr1Q/s59Nfj1v8+bUbl+PTd/4xfuPk4JaQag7S8+4WyFsavvHv9oTsSfXwdAvALk/7jOniAwgirp4hpSQpj/cpNT6JG6GnproOohEkEKKonDQSNNotsK5TibMnZVlSGsVNwJRl2iVm5xEvGTIFO0WTFYlaBqQS8VqyLqLNicQ8DWwvZcLbhbC3ApnB+yqkrbCNsCJixEc/WWgEsW+KUkK5TVXWaLrFKyNep6jLNF70yj7ccH80S8EpKBo9eCfCoSd0yA47y3C+kakwu98xC1Wia+apxO3PXEDxwfLQN4smZZ7751yXj6+BpJMnqRU+7GGPShMfNYS7BbZ7r4SBYmByQguMn54cWTS440XUCG1tZ2ek+ZTM521eebWxhPFZyYNlAxVMlZ8+HzNOeiqOLOLphM5a1EfU8pIqnmoi1EO3KbKCS1lUPi300NsgeqswEt2ygIptMNj5QI3v5n/fVf+rHevcQrwW77nDwtwr6nl8j3JK/gsD6Dw==);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="252" y="478" width="63" height="63" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="67">
<mxCell style="vsdxID=86;fillColor=#b4ec36;gradientColor=none;shape=stencil(lVfZctswDPwavXJEgOdzmvxHpnFqTV074zht+veFKonHMrLsNx273CUJgGDHD+/757ddR/375Xz6ufszvFz2HX/riIbjfnceLvLU8WPHD6+n8+7H+fRxfJne355H5Pj06/R7HOFz4sWgohtZ1P+dvhivtPn/5WkiHIZjQbBa+VAReuV8if/+cZ4UdGJQnBl6odAk0X/SDJJR7AyaP/UzghfE/JvL3yuaJiq2oFkLmqC8BsHsihNofK9kYbb16mjVm+uriU5lPF0bFYrh2myfV5ASKLjabL8oJa9in91VcVAOedCk3DMoR2VQmCwIx2Wg1VkbV2tLALBB7QDaAvJUi2vFtbZgor2mXQRwjlAdam1SDNExhjHX2qQCRMc4kl4PD5Z5L4wVAroVijetXV3bZQk82/jVvvYrKLaN4Tm01vR1Tsysv8yi0I/U6EOAMindys9LuCYvG+FBnlKSJXlSFqefd7DQdx70aUm/dX0MFlKxUV/SJqmzolY9oTihLF+JloIxV2uvbNiyC4kVcw1Lhllp2C1BBUhrQdlQG45xK1pMLoA6cbwFfaMcLJjuodyzzRnINebLxXIyZqwWC+Bo1dlUcBar2QQlTASj5XRmX87lrL51oYQTILDKLVj0fa7p1G4ntyheCRRYrIKxEoqN4YKiE4d0YxjLQE6XbJexZm+loXAMVqEiwbO6wxOjKBZZP9xbhlxQfXtowFkpIG6LsMHdCrmg3lqEhRO/OAQ86EvQYR0qjgpOKEzrjVNLgknXLd/mqSUUFxvDBG1NEcul4VAbFlQa69YzXvJP47FR9A45ly2kV9mG5Fz29/Y3womgX/RNWPNSaxWapi7G5tTY7OpGw21PiZ2doLhtKg20OOX9gBPq2gXh7hvFDQR5yBeY1+FwmO4/5X+88Min6bLEj/8A);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="276" y="484" width="15" height="16" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="68">
<mxCell style="vsdxID=87;fillColor=#b4ec36;gradientColor=none;shape=stencil(hZfLctswDEW/xlsOCfC5TpP/yDRO42kaZxynTf++UCW+Li1pJ8sXOiAIgOCB7z5eHt+PB9If18v55/HP6en6cuBvB6LT28vxcrrK04HvD3z3fL4cf1zOn29P8+/3x0k5Pf06/56+8DXbWa+in6xI/53fGBXS/xcPs/719NbotfKuk9uktG313z8vM8BkC+LFwhST5RtftGgWwfLTaaXTouBewUURzCa1RzqjmIFZ/aIiSgTYutxMJsVhPT5jPFNSJm25aoOi3lsxcRAhEXnbuyuqAFGyURnq/RXVNj0qb3q80RrgsgQzwJMDuHjtB3jwW/Rpp28sPvR8UY1rJ9vjReQD4KOKtINPkJxiY4FulPaADyoZwJtcBxUflO2StE+V1mJ+E3TevjV/G5PllU/KxsFhSr3DXiLhBocD5LbPa1/DE2aql0BguCgHvdIleSPQWVlIlqq6Ga4pmqEL12CA/opJiIPDHsIlO64xXKKCTiAqDoPDdrO2xKa0j8rnMPBHvIHKTk0JZrxXabO4xIZxv7wK0AdTTaDC92VzGr7D5Xtl9vilIjPflfbY8APgXW1/PH6Ki4q6bIV0aSzmN+z24xVhu8TGu8HfBO1AVDTuV4q9w2xzrazwS98tdDu0wum7cGyJisxAD0hnFbeLJZWcL3wezqEppyBbRUVjtmC2ikq7nWKJyJdWgtkac81VPimP0ZdzkIEvKl5PF2frybliMHRDvuWwh/QWlTOjw9w7LCrCgJFy23wq40rDtxAwUZUeVPkUgC+GNPB12OHnLlX4ph4zla9x/UZBvshZFBPgZWLbnPCm88sPeI3LN9hdWEZHGvDQXES0c3RDb8mFuu4sDhp19xpfIbXLedt46mGfjHKbdd2MvhmtSwdrJqwIu6TLcdtMWAbObA09eJgu5diAHMXZMt4gayiPaa5NSObN6pCB2QVctoeIiwjYRhmYK9uJvoR864q0f6WSh3ofez69vs7XufZ/vL/Jq/nux/f/AA==);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="259" y="501" width="16" height="15" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="69">
<mxCell style="vsdxID=88;fillColor=#b4ec36;gradientColor=none;shape=stencil(lZfJctswDIafxlcMSXA9p8l7ZBqn9tSNM47Tpm9fqJK4/Izo9ibDgD4QxKYd370dHl/3O6Perpfz9/2v49P1sOMvO2OOL4f95XiVpx3f7/ju+XzZf7uc31+e5t+vj5Pm9PTj/HN6w8ds5ww5O1kZ9XuWpEQc/0oeZoPT8aUymP52jYHT5BuDr++XGaGzSQiLic420+9J9GFmkVZq0VkETpFfdRh1FoFNlNKIXSx0tuDQkmv/FpGNFHzLrg/OWYv1dqj62MqJ9MhbsTCtu4oY4iShC7H1VpHm1llRYts6q0iFIVtRTAAHsiJrkawCkEXESDZ+RJYrWcJSHdu6Fi5Ky1sqeLAtXJSUbuGatBnC5aZdC9fkNMBj8XBNV0oO4JFcauGG7CA/aoNZwooc3/DWt86KScRQxfUt2VuWMPjOXcgQUVqivk03EfC6XELBQ6xyCq/oQDEAWzJ/WBpi4+GexMZCcYgWR4STix1fxY4/bmLWU0gdf63EzPdke37E83vSPT8Muq5EZ73RDf2u8VEyN93VucPW3kJRSSvhztk07CWaFN4VE9SU5C2gmUxq0aqrKFFyw3pWJQEKOjhkGzy3JWUQrvHcdg3FJjz3Pp1N8hBb4R05WSRjC2UHPbRNj8pgFnh56bDnwlT08v6AMVLQREQJK6mPkSjFYWJWsV/hUg4J4VjGomQ9wjE7RMkP14GSdIWduGVXybuyA2ndsvuiECVjx0Xh8eCh20Wqsi1wC9O96gaMSp9PmqrhbBh80u9i766FWNkiqvz1UMZTv4d+5+M6kLZnTd5gdLbBWqpH6MqXReH2ZBatNIhXN5lToPF4iN14SrE4UtyNcL2i5XEyp248pbzYbO9QjHwReeDLpguzWbQ8Lo8qp3vFD8PCEhunO36C84tWgiUuL+j16tqfPg2TVWxiT8e9yOUdozk9RL/e2qvVfzCc//sb6h8M5KF8sj0fT6f5i6/+Hz/xRDR/HvL9Hw==);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="293" y="501" width="16" height="15" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="70">
<mxCell style="vsdxID=89;fillColor=#FFFFFF;gradientColor=none;shape=stencil(lZbbchoxDIafZm81luXjdZq+R6YhhSmFDCEteftouz5JDBt6twhrP1v69a8nenjbPr1uJmvezqfjr83f3fN5O9G3ydrdYbs57c78NNHjRA8vx9Pm5+n4fnhefr8+zSvnp9/HP/MbLktezpDdnGXNxxKxGYj+Rb4vCT/eT0sGLgvQmJJQApYghyV0seW1EVwsq0oIE5TIhcoiC8GXRSWEDtCuwVOEZCU+g3eSngykLOkekpP0yHSSdAK3evLggJKEIxgr4d4DkoQbSXYesiIbcHmNTAGiOraBHCXZxt7LGmqRCuc8HyQ8AMbVhhNgnlTNVckjeCvRnBVVw7m5SaJnUaQ1NnfST1ptJaXBjTp0BkuSjL18tdcOPK6WHJyTZMpX5AghSLhzENSxuRJZwl2CsCpzPjeqc3sLXtFt6gXt6nOq4xTBqLL7AEmUfb87DKYwZhSJBAirfSIeBJIbDgm82m8Ai3K/Ea/2y5UnVa/owbgv6tVUXUKRa6xEihmULSRbz9XxWIXR8ClUdd/CU7WtPiEGSM9n0Pg8aLl2y4JVpphD1fOt4rMMUeFTl2FXpq5+s/JK993P2oiWNTfY/tqQ+1tt802nLHHcX7WhPl53n5yFgWpK87U/sBSycqexPbXLpnvYvY1n/aCS/SipqjK8+hqO6qQeUp3/Uve8QFd/nKg2ZBI+TCa1DmX9VdAjLz1izGimQqvfkcgp6vPpXVNuK1bvXzM1rGXodwcDJsoNu1Dd8Aaf1UTKJBwCqe8334iSEguxqaLiD/emahz64iQLdsdN678T+KFf7F52+/1yLxz/1xdBDi2XSHr8BA==);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="274" y="500" width="19" height="34" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="71">
<mxCell style="vsdxID=90;fillColor=#5ea0ef;gradientColor=none;shape=stencil(jVLbDoIwDP2avZLRBonPiP9BZMgiMjJA4e9lKYatBsNbL+fs9HQVmPV10SkBsh+seai3Loda4EUA6LZWVg9LJDAXmFXGqrs1Y1tS3hUO6aKnebkXJuIl0lFAzpTGkvIrYW+jJXBM7TSNTrAS4pAhJ2CFGTZSvGKQYzAYY0d2g68FgAjPoaw/2lqSoWjCNP9KegpfUeaTufRHwhBxyCNz6C/tV2Hmu97zyP6z0e3hv1+C7Wgq3TR0c36fH9lSogPF/AM=);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="278" y="504" width="11" height="11" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="&lt;div style=&quot;font-size: 1px&quot;&gt;&lt;p style=&quot;text-align:left;margin-left:0;margin-right:0;margin-top:0px;margin-bottom:0px;text-indent:0;vertical-align:middle;direction:ltr;&quot;&gt;&lt;font style=&quot;font-size:16.93px;font-family:Oracle Sans;color:#000000;direction:ltr;letter-spacing:0px;line-height:120%;opacity:1&quot;&gt;Azure Load Balancer&lt;br/&gt;&lt;/font&gt;&lt;/p&gt;&lt;/div&gt;" tags="Background" id="72">
<mxCell style="verticalAlign=middle;align=left;overflow=width;vsdxID=91;fillColor=none;gradientColor=none;shape=stencil(nZBLDoAgDERP0z3SIyjew0SURgSD+Lu9kMZoXLhwN9O+tukAlrNpJg1SzDH4QW/URgNYgZTkjA4UkwJUgGXng+6DX1zLfmoymdXo17xh5zmRJ6Q42BWCfc2oJfdAr+Yv+AP9Cb7OJ3H/2JG1HNGz/84klThPVCc=);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="205" y="545" width="321" height="20" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="73">
<mxCell style="vsdxID=94;fillColor=#b77af4;gradientColor=#773adc;shape=stencil(lZHdDsIgDIWfhltSfgxwPed7LBkT4oSF4d/bC5LFqXHOu9P2a3PSg1g1mmbQiMIYgz/oi22jQWyLKLXO6GBjUojViFWdD3of/Mm1pR6aTGZ19Od84Vr2uMKK5C0Kt9KBR7UrcG/dDIYXkADe0LWwFFiq7/CnDQILRqbhBAuBiVyPE4U5/8fMgpUfcBLP13e270ty8/l7VKlVYmb1HQ==);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="262" y="294" width="20" height="17" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="74">
<mxCell style="vsdxID=95;fillColor=#341a6e;gradientColor=none;shape=stencil(nZPLDoMgEEW/hi1hwAeurf0PE7WSWjFoX39fKGkqGrF0N8OcIXduchHLx7YcakTJOCl5ru+imlrEDohS0be1EpOuECsQyxup6pOS176y/VAa0lQXeTM/POweMRuUPG2XYf7ujxbtRL+J8tTHAnHpT/8T7EH/lrtAXRMiis1sfh14r4swZA6fcpyE8ODl13ogiPar3+ddd3iMObh8gqPt/2OGE+byLIzXfnn0r/UA+NwM1b/P6+Kbp0Z0nY3jfL7Mn36y2WXFCw==);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="262" y="295" width="10" height="17" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="75">
<mxCell style="vsdxID=96;fillColor=#b77af4;gradientColor=#773adc;shape=stencil(jZHNDoMgEISfhitBkApna9/DRCykFAxif96+kI2pNSnxNsN+u5kwiLWz7ieFKJlj8Df1NEPUiJ0RpcZpFUxMCrEOsXb0QV2DX9wAfuozmdXdP/KFF+xxklcoeYMFdwHSGrchf8GKYE6PwqLBQv6H+f50IcU6XOHmhKU4jlcS1/XhJIUcJTKJ73ePxlpoazvf15OeoFrWfQA=);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="284" y="295" width="20" height="17" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="76">
<mxCell style="vsdxID=97;fillColor=#341a6e;gradientColor=none;shape=stencil(ndNLDoMgEAbg07AlwFDEtbX3MBErqRWD9nX7aknTohFLdzP6MfkhGQRZXxedQoz0gzUnddPlUCPYI8Z0Wyurh7FCkCPIKmPV0ZpLW7q+KyY5VWdznSbc3TkynWDk4boUy1d/cLTR7SqVSchS4ut3/xMO0L/jzqj/CJxhmvi3o8HbAU655xOJRYynQb/MQ6N0OP22919HCkxmXmC+Pn8HWAjfQ5ynPJR/mYfS0PzY/Nt+LD77VOmmcev4/X++f+Mnt7uQPwE=);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="284" y="295" width="10" height="17" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="77">
<mxCell style="vsdxID=98;fillColor=#b77af4;gradientColor=#773adc;shape=stencil(lZHdDsIgDIWfhltSfgxwPed7LBkT4oSF4d/bC5LFqXHOu9P2a3PSg1g1mmbQiMIYgz/oi22jQWyLKLXO6GBjUojViFWdD3of/Mm1pR6aTGZ19Od84Vr2uMKK5C0Kt9KBR7UrcG/dDIYXkADe0LWwFFiq7/CnDQILRqbhBAuBiVyPE4U5/8fMgpUfcBLP13e270ty8/l7VKlVYmb1HQ==);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="252" y="313" width="20" height="17" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="78">
<mxCell style="vsdxID=99;fillColor=#341a6e;gradientColor=none;shape=stencil(nZPdDoMgDIWfhlsCFJFdu+09TMRJ5sSg+3v7ybjY0Ihjd2352pyWHATF0JS9QowMozVnddfV2CDYI8Z01yirxylCcEBQ1MaqkzXXrvJ5XzrSRRdzcxMevo+4DkaePqME83fh6NlWd6uszLFcZymZTya/wxH0f71zNrwDp1iKcD+GRUQyYMkDPt9hlsLTKL/UQ0Vs11T923x4H5lhSRP+PwMsIOR5Gk+z2L5LPZTF7pmqf5ufgo+pat223pPf73MTTiVvYDi8AA==);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="252" y="313" width="10" height="17" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="79">
<mxCell style="vsdxID=100;fillColor=#b77af4;gradientColor=#773adc;shape=stencil(jZHNCsMgEISfZq9itGJ7TtP3CMRUqdVgTH/evsoSmgYq3mbcb5fBAd7Oup8UMDrH4G/qaYaogZ+BMeO0CiYmBbwD3o4+qGvwixvQT30ms7r7R77wwj1B8wqjb7ToLkha4zbkL9hQImrZoySS/YfF/nIhxDpcYSkJ5fV4cyKH6iCFGCUyie9nj8Za7Go735eTnrBY3n0A);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="274" y="313" width="20" height="17" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="80">
<mxCell style="vsdxID=101;fillColor=#341a6e;gradientColor=none;shape=stencil(nZNNDoMgEIVPw5YwgIJr297DRKykVozav9tXSpoWjVi6mwffTN5M8hDLh7roFKJkGHtzUjddjjViO0SpbmvV63GqENsjllemV8feXNrS6a6wpK3O5mon3F0fsR2UPJzKcPrSB4c2ul1FpcBynQXi02/9ExxA/7Y7Q/0jcIoJ+NtBcDuGZebxQmIew0OQX/qBJLRqrP9t3r+PTLAQPp9iuj4/YZjPeBbHAw/tu/QDELpnrP9tfio+iap007hAfv/PEzg9ufSy/RM=);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="274" y="313" width="10" height="17" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="81">
<mxCell style="vsdxID=102;fillColor=#b77af4;gradientColor=#773adc;shape=stencil(lZHdDsIgDIWfhltSfgxwPed7LBkT4oSF4d/bC5LFqXHOu9P2a3PSg1g1mmbQiMIYgz/oi22jQWyLKLXO6GBjUojViFWdD3of/Mm1pR6aTGZ19Od84Vr2uMKK5C0Kt9KBR7UrcG/dDIYXkADe0LWwFFiq7/CnDQILRqbhBAuBiVyPE4U5/8fMgpUfcBLP13e270ty8/l7VKlVYmb1HQ==);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="295" y="313" width="20" height="17" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="82">
<mxCell style="vsdxID=103;fillColor=#341a6e;gradientColor=none;shape=stencil(nZPdDoMgDIWfhlsCBRWv3fYeJuIkc2LU/b39ZFxMMOLYXUu/NueUFLFibMpeIiDjNOiLfKhqahA7IADVNXJQ0xwhdkSsqPUgz4O+dZXN+9KQJrrqu5nwtH3EdAB52YwSnH4eTpZtVbfJigyLbZYSfzL5HQ6g/+v1WXcPHLCpLf1B0B/HNHf4LMc8hqdBfq2HpiGvsfr3eXc/IsGC+v8P2/MThlPm8jyOp0nI71oPhdA+Y/Xv83PwPapata29yWXdP8L5yR4wO74B);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="295" y="313" width="10" height="17" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="83">
<mxCell style="vsdxID=104;fillColor=#b77af4;gradientColor=#773adc;shape=stencil(lZHdDsIgDIWfhlvCX2Rcz/keS8aEiLAw/Ht7wWZxapzz7rT92pz0IF6Pph00YmRMMRz0xXbJIL5FjFlvdLQpK8QbxOs+RL2P4eQ7qIe2kEUdw7lcuMKeUFjRssXIDTrkUe0AdtbPYPICUoI5WwtXEsvv7KcLShZ8TMMJlhusqvU4VViIf8wsWPkBZ/H8fG+dg+Dm8/ekcgtS5s0d);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="262" y="332" width="20" height="17" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="84">
<mxCell style="vsdxID=105;fillColor=#341a6e;gradientColor=none;shape=stencil(pZPdDoMgDIWfhtuGgoJcu+09TNRJ5tSo+3v7yVgy0Ugku2vL+aCnoYSnQ5V1BWF0GPv2Ujx0PlaEHwhjuqmKXo9TRPiR8LRs++Lct7cmt3mXGaWJru3d3PC0HDUEoy+bIQLln8rJimvdbIoTCVJti5Eu7v7mu8Qe6R8dr8TuLCIG5mxukQH1WYwAlQPIBGQUAqAC4Xlh3RIKUB7DwR52AO6UkhgSdAEBArdfiDkI7gJTRYQAGIPyjHXdEjLv3wz2sAOYgt+Slbqu7Y7Oz5dLOZXsQvPjGw==);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="262" y="332" width="10" height="17" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="85">
<mxCell style="vsdxID=106;fillColor=#b77af4;gradientColor=#773adc;shape=stencil(lZHdDsIgDIWfhltSfgxwPed7LBkT4oSF4d/bC5LFqXHOu9P2a3PSg1g1mmbQiMIYgz/oi22jQWyLKLXO6GBjUojViFWdD3of/Mm1pR6aTGZ19Od84Vr2uMKK5C0Kt9KBR7UrcG/dDIYXkADe0LWwFFiq7/CnDQILRqbhBAuBiVyPE4U5/8fMgpUfcBLP13e270ty8/l7VKlVYmb1HQ==);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="284" y="333" width="20" height="17" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="86">
<mxCell style="vsdxID=107;fillColor=#341a6e;gradientColor=none;shape=stencil(nZPbDoMgDIafhlsC1AO7dtt7mIiTzIlBd3r7wcgy0Yhjd/3p1/K3SREUQ1P2AjEyjFqdxV1WY4NgjxiTXSO0HE2E4ICgqJUWJ62uXeV0X1rSRhd1sx0ero7YCkaeTu0wf+ujQ1vZraI8D7GU+PRH/wQH0L/tzlB/CQnDNjedjgXsJphyj845zmJ4GuSXbmgaGjTO/Rbtb4abn6lPZzhZ754CzsDnIY432wrMuvRDaWiXsf63eRN8b6mWbetOcZqf3555cncLhxc=);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="284" y="333" width="10" height="17" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="&lt;div style=&quot;font-size: 1px&quot;&gt;&lt;p style=&quot;text-align:left;margin-left:0;margin-right:0;margin-top:0px;margin-bottom:0px;text-indent:0;vertical-align:middle;direction:ltr;&quot;&gt;&lt;font style=&quot;font-size:16.93px;font-family:Oracle Sans;color:#000000;direction:ltr;letter-spacing:0px;line-height:120%;opacity:1&quot;&gt;Azure Kubernetes&lt;br/&gt;&lt;/font&gt;&lt;/p&gt;&lt;/div&gt;" tags="Background" id="87">
<mxCell style="verticalAlign=middle;align=left;overflow=width;vsdxID=109;fillColor=none;gradientColor=none;shape=stencil(nZBLDoAgDERP0z3SIyjew0SURgSD+Lu9kMZoXLhwN9O+tukAlrNpJg1SzDH4QW/URgNYgZTkjA4UkwJUgGXng+6DX1zLfmoymdXo17xh5zmRJ6Q42BWCfc2oJfdAr+Yv+AP9Cb7OJ3H/2JG1HNGz/84klThPVCc=);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="216" y="354" width="270" height="20" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="&lt;div style=&quot;font-size: 1px&quot;&gt;&lt;p style=&quot;text-align:left;margin-left:0;margin-right:0;margin-top:0px;margin-bottom:0px;text-indent:0;vertical-align:middle;direction:ltr;&quot;&gt;&lt;font style=&quot;font-size:16.93px;font-family:Oracle Sans;color:#000000;direction:ltr;letter-spacing:0px;line-height:120%;opacity:1&quot;&gt;Services&lt;br/&gt;&lt;/font&gt;&lt;/p&gt;&lt;/div&gt;" tags="Background" id="88">
<mxCell style="verticalAlign=middle;align=left;overflow=width;vsdxID=110;fillColor=none;gradientColor=none;shape=stencil(nZBLDoAgDERP0z3SIyjew0SURgSD+Lu9kMZoXLhwN9O+tukAlrNpJg1SzDH4QW/URgNYgZTkjA4UkwJUgGXng+6DX1zLfmoymdXo17xh5zmRJ6Q42BWCfc2oJfdAr+Yv+AP9Cb7OJ3H/2JG1HNGz/84klThPVCc=);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="252" y="371" width="135" height="20" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="89">
<mxCell style="vsdxID=112;fillColor=#FFFFFF;gradientColor=none;shape=stencil(nZBLDoAgDERP0z3SIyjew0SURgSD+Lu9kMZoXLhwN9O+tukAlrNpJg1SzDH4QW/URgNYgZTkjA4UkwJUgGXng+6DX1zLfmoymdXo17xh5zmRJ6Q42BWCfc2oJfdAr+Yv+AP9Cb7OJ3H/2JG1HNGz/84klThPVCc=);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="576" y="111" width="345" height="192" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="90">
<mxCell style="vsdxID=113;fillColor=none;gradientColor=none;shape=stencil(nZBLDoAgDERP0z3SIyjew0SURgSD+Lu9kMZoXLhwN9O+tukAlrNpJg1SzDH4QW/URgNYgZTkjA4UkwJUgGXng+6DX1zLfmoymdXo17xh5zmRJ6Q42BWCfc2oJfdAr+Yv+AP9Cb7OJ3H/2JG1HNGz/84klThPVCc=);dashed=1;dashPattern=1.00 2.00;strokeColor=#706e6f;strokeWidth=2;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="576" y="111" width="345" height="192" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="91">
<mxCell style="vsdxID=115;fillColor=#FFFFFF;gradientColor=none;shape=stencil(nZBLDoAgDERP0z3SIyjew0SURgSD+Lu9kMZoXLhwN9O+tukAlrNpJg1SzDH4QW/URgNYgZTkjA4UkwJUgGXng+6DX1zLfmoymdXo17xh5zmRJ6Q42BWCfc2oJfdAr+Yv+AP9Cb7OJ3H/2JG1HNGz/84klThPVCc=);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="866" y="107" width="47" height="6" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="92">
<mxCell style="vsdxID=117;fillColor=#86d633;gradientColor=#5e9624;shape=stencil(jVLtDoIwDHya/SWjDfIAiO9BZMgiMjJA4e1lKYatBMO/ftztel0FZn1ddEqA7Adrnuqjy6EWeBUAuq2V1cMSCcwFZpWx6mHN2JaUd4VDuuhl3u6FiXiJdBSQM6WxpPxG2PtoCRxTO02jC66EOGTICVhhhh1pQo7BYIwD2Q2+FgAiTENZf7S1JEPRhGn+lfQUfqLMJ3Ppj4Qh4pRH5tBf2l5h5rs+8sj+s9Ht6b9fgu1oKt00dHN+nx/ZUqIDxfwL);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="897" y="108" width="5" height="5" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="93">
<mxCell style="vsdxID=118;fillColor=#86d633;gradientColor=#5e9624;shape=stencil(lVJBDoIwEHxNr6TdjRLPiP8wAtKIlBRQ+L3UhdCukehtO51hdsoITNry3OQCZNtZc8ufOutKgUcBoOsyt7qbJoGpwKQwNr9a09cZnZuzY7rpbh7uCwPpdjKSyqlAjoQoKd/nE9EvvSW+ous4jvaLQIUKOQADRlhFOHOQc3DZZMt2pc8AQIRxaOuvNkMyNPXTos/44upMDqEvi8qC+lthyPgpJgvpvxt8rsSfeyMm+6uVrv8pwTSsBSp0VVH//HteuAmismL6Ag==);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="888" y="108" width="5" height="5" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="94">
<mxCell style="vsdxID=119;fillColor=#86d633;gradientColor=#5e9624;shape=stencil(jVLbDoIwDP2avZLRBonPiP9BZMgiMjJA4e9lKQlbCYa3Xs7Z6ekqMOvrolMCZD9Y81JfXQ61wJsA0G2trB6WSGAuMKuMVU9rxrakvCsc0kVv83EvTMRLpKOAnCmNJeV3wj5GS+CY2mkaXXAlxCFDTsAKM+xIE3IMBmMcyG7wtQAQYRrK+qOtJRmKJkzzr6RTuIaizCdz6Y+EIeKUR+bQXxrsR+K7PvLI/rPR7em/X4LtaCrdNHRzfp8f2VKiA8X8Bw==);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="879" y="108" width="5" height="5" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="95">
<mxCell style="vsdxID=120;fillColor=#50e6ff;gradientColor=none;shape=stencil(jZPRksIgDEW/htcMSUoLz677H47WLWO3dbCu7t8vXWiFjnV8C+FecgJB8ObS7M61IHkZXH+qb/YwNII/BJHtmtrZwUeCt4I3x97VX66/doewPu9G5Rh99z/jCffgMxpUNbpI/oaM1qDNf+YzGFrbJQZdARaZAaVM5furCwUwGhRUGA2YO+SdooZAl1FDSw1HDUJBUcMzfInrqP5QlZH6DNErVrngNFConFQuKHm6rJkzqTphQkXrlFgAmQxTroufPBeCUa96mi9y6kozMOddPTTTg5SAmPeVlua3RuWN2fLBYzKPtm3DYKf7y0n2qfALePsH);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="869" y="108" width="14" height="15" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="96">
<mxCell style="vsdxID=121;fillColor=#1490df;gradientColor=none;shape=stencil(jZPRcsIgEEW/htcd2E1geVb7H06NDdOYOBhb/XuTQkbAavu2XA7s3eEiaHVqt8dGoDyNfvhsvt1ubAWtBaLr28a7caoEbQSt9oNvPvxw7ndhfdzO5Fwdhq/5hks4xwYI51Mor0FRQPZHeAt85/qEtwy1zXmEOuXfzz40UHFfysgvAgHHKy5YMougQZvI0GPnKCkGqZ97VTVUhdfY51e8AqSMZl6MPhmtGIwrMJgPVoxlLCidj5V0jYrRL1+AJSC/fLHSJivQNrcqc5uT81rlVmVuM80J/ScofwdrKu6p3LuuC6FO98sUT1L4AbS5AQ==);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="869" y="98" width="14" height="15" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="97">
<mxCell style="vsdxID=122;fillColor=#50e6ff;gradientColor=none;shape=stencil(lZLRksIgDEW/htcMJNLCs6v/4Wzrltlu62B19e9tN6AUp+v4Fm4uyRm4gtbHZneoBcrj4Pvv+tdVQyPoQyC6rqm9G8ZK0EbQet/7+sv3p67i82E3Oafqpz9PEy58zxSg1HQL5ZUV+Xfasrl1XWK2GgzNzBZKTP2fJ8/TFfeVlMEfBQJjWbpg7omChdUqeOh5c5AQAXGZNRkSWQ0U6l9YA1JnuJHtDqsBywz37glkCkHPWZ9WZ6xAdoZqyjBhgTR71OQTI2f2pIaAKKN8LA2KkaD1MuVbUXlhHotHIveubTnQaT9P8Chx+mlzAw==);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="897" y="108" width="15" height="15" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="98">
<mxCell style="vsdxID=123;fillColor=#1490df;gradientColor=none;shape=stencil(jZJBcsIwDEVP461Gsmxirym9B1NC42maMCa0cHucyh1i05buLPk5eqN8xetjtz20SuNxiuNb+xl2U6f4SWkdhq6NYUonxRvF6/0Y29c4noad1IftTM6n9/Fj/sJZ3vkGaH6k8SIN58D5r86z8H0YFryzYAueEH+nCUxFezBmyb+couiQAJjxXJIDXEnrrEsil2RBu0zw3dTvjs7WP1sSWF9qAvu/LIkBbWmKpWXS8qY0xcoyLbrWrMaWmne/qlk90sRqnY0HqtZ5Y3LDGWh0qbqYzP9KyeNUpcMtkvvQ95Lo5X0d4dSS+PPmCg==);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="897" y="98" width="14" height="15" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="&lt;div style=&quot;font-size: 1px&quot;&gt;&lt;p style=&quot;text-align:left;margin-left:0;margin-right:0;margin-top:0px;margin-bottom:0px;text-indent:0;vertical-align:middle;direction:ltr;&quot;&gt;&lt;font style=&quot;font-size:16.93px;font-family:Oracle Sans;color:#706e6f;direction:ltr;letter-spacing:0px;line-height:120%;opacity:1&quot;&gt;&lt;b&gt;Primary Database VNet&lt;br/&gt;&lt;/b&gt;&lt;/font&gt;&lt;/p&gt;&lt;/div&gt;" tags="Background" id="99">
<mxCell style="verticalAlign=middle;align=left;overflow=width;vsdxID=124;fillColor=none;gradientColor=none;shape=stencil(nZBLDoAgDERP0z3SIyjew0SURgSD+Lu9kMZoXLhwN9O+tukAlrNpJg1SzDH4QW/URgNYgZTkjA4UkwJUgGXng+6DX1zLfmoymdXo17xh5zmRJ6Q42BWCfc2oJfdAr+Yv+AP9Cb7OJ3H/2JG1HNGz/84klThPVCc=);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="585" y="118" width="355" height="20" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="100">
<mxCell style="vsdxID=126;fillColor=#FFFFFF;gradientColor=none;shape=stencil(nZBLDoAgDERP0z3SIyjew0SURgSD+Lu9kMZoXLhwN9O+tukAlrNpJg1SzDH4QW/URgNYgZTkjA4UkwJUgGXng+6DX1zLfmoymdXo17xh5zmRJ6Q42BWCfc2oJfdAr+Yv+AP9Cb7OJ3H/2JG1HNGz/84klThPVCc=);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="584" y="144" width="329" height="151" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="101">
<mxCell style="vsdxID=127;fillColor=none;gradientColor=none;shape=stencil(nZBLDoAgDERP0z3SIyjew0SURgSD+Lu9kMZoXLhwN9O+tukAlrNpJg1SzDH4QW/URgNYgZTkjA4UkwJUgGXng+6DX1zLfmoymdXo17xh5zmRJ6Q42BWCfc2oJfdAr+Yv+AP9Cb7OJ3H/2JG1HNGz/84klThPVCc=);dashed=1;strokeColor=#706e6f;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="584" y="144" width="329" height="151" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="&lt;div style=&quot;font-size: 1px&quot;&gt;&lt;p style=&quot;text-align:left;margin-left:0;margin-right:0;margin-top:0px;margin-bottom:0px;text-indent:0;vertical-align:middle;direction:ltr;&quot;&gt;&lt;font style=&quot;font-size:16.93px;font-family:Oracle Sans;color:#706e6f;direction:ltr;letter-spacing:0px;line-height:120%;opacity:1&quot;&gt;&lt;b&gt;Delegated subnet&lt;br/&gt;&lt;/b&gt;&lt;/font&gt;&lt;/p&gt;&lt;/div&gt;" tags="Background" id="102">
<mxCell style="verticalAlign=middle;align=left;overflow=width;vsdxID=128;fillColor=none;gradientColor=none;shape=stencil(nZBLDoAgDERP0z3SIyjew0SURgSD+Lu9kMZoXLhwN9O+tukAlrNpJg1SzDH4QW/URgNYgZTkjA4UkwJUgGXng+6DX1zLfmoymdXo17xh5zmRJ6Q42BWCfc2oJfdAr+Yv+AP9Cb7OJ3H/2JG1HNGz/84klThPVCc=);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="592" y="151" width="270" height="20" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="103">
<mxCell style="vsdxID=131;fillColor=#FFFFFF;gradientColor=none;shape=stencil(lZRNcsMgDIVPw1YDEr/rNL1HpnFqpq6dcZw2vX1xgdjQjjPdwfOTPpCQGe0u7eHcMOSXaRzemk9/nFpGTwzR920z+imsGO0Z7U7D2LyOw7U/xv35MDvn1fvwMWe4xTjBgeYg5F9RUAak/lGeo//lOsYAEQ0IVqeIpEgHOiW5YZR4cqQtOXAmOSinIZlMSSEOm2AJ2pZgFIAVWCBwLOFBclTBEYwu6QaU2KITgarowF0Jl3pJWxYig1UolSjBAswW12Duxx1MIEUJtgRWlWB7P0pmu1AtV7E1KLdFdxpcRQ/31lgVnVf9RveLvnhyuw3wzZsvEfkBSKCq4uvzJUkJUPTw5uGZq+K1db5fjYXiYHOfytP8aX88Rf/1h8UysiffdXHi19/rEQ9S/D3Q/hs=);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="629" y="199" width="30" height="41" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="104">
<mxCell style="vsdxID=132;fillColor=#FFFFFF;gradientColor=none;shape=stencil(lZZLctswDIZPoy2GAPhcp8k9Mo1Ta+raGcdp3duXKkVKgGxpvJNhkB/x+smOnz73rx+7jszn5Xz6ufvTv132HX/riPrjfnfuL/mr4+eOn95P592P8+nr+FZ+f7wOnsPXr9PvYYdrWWcTJDesIvO3WAjY/je8FP/vX+eyAMv/LoLlcQW2JVQsVyoW7yH40Wk02dGDy89gwdRtqgloDRwRKEkwGrASHPMmJMHoJDkhYJBkMuDW0MkBkorZS3DykKwEMwFGxfZT8kYTR+C4AU8o4daCS4rPYJLkuxxVkPwYoR688p0DH+b8Q3+cNUjexNTQ9XluLkCEJPwXAB1gABNlfMPJo4zPTgenlgRPMjyGYBfZHRN+B85AKrm5bOQk3IFBCScPRucWkiottTDuwJEgOklH1+pY6RinsKopN36S+HzIpNo6z8Jq4plBdXUeStXXFhupxQ6sRmquItychIzIJtmWnUf9t2TNrCXCmsWImVby6zTOxslMIEQlazmDVQvbgG1UAX0b5grPBVfwXHBSZUAGz5LuAVHCMa0rWx5WLWwOOEi4UbqGrdMqODe6kpU8eBu9v5BUm1VWtb4FZAl32FBNVIGihLtQq3e7m0K9Nqqk5UlZ6b6lBqIxK+4E/qH9k4Eg918EcONSiEGmb56ZeilEiKprhiTrSymBXcrmuNe96hkj6UNT2AW9amSTDlfHdqLzFMnUtHZ1ZGKqV8qkm3kaJD4ysLoyYlvWniGuXSKzeV0dGR8gqvsq64CaV6fSbjYFc6WhNtTsIef8Mb0F3/vDoTwl5//rt2M2lXcnP/8D);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="629" y="198" width="30" height="42" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="105">
<mxCell style="vsdxID=133;fillColor=#2d5967;gradientColor=none;shape=stencil(pZZBctswDEVPoy2GJEiCXKfpPTKNU2vq2hnFadPblyoFioDGSjLdKQihR+AD3xrw7uX48HwYnHm5Tpcfh9/j4/U44JfBufF8PEzjtTwNeD/g3dNlOnyfLq/nx/r388N8cn76efk1v+Gt5mULLs1ZzvypERsh0L/I15rw7XWqGbYeSAjJLykcAloib65GyIHnQ0sIAfNyCGskZAgMX0IWdtk+AjnJNhKMCJ4k2IGV3BIhlFyC4PbAVlGtgxwk2UOMClyaGxUaUJHRQMQ9tJFkzJCzJDtIqmSfIQZJtgbQSXQg8KlHn8ZzNxvBQOIMfoe5fXw7Spv369JyhBxlecGCj7I8pq7V+dbFtTqj2kpg9hU1qrEut9licn8/12YnqDHuC+fr6CV6r1X/nyD3OkVAEgkhgMHbhK3YuaywvZ1gA1jcEOx+yyEq5yhYR7LpadBikxK7LeuqdoK8O2nExa97hOBQkVdzYbXLBCu1y+ajUnve6rxbeAQTlIEQOL3GFoKaNovc0tVB0sZCSl/NroVgUSZLPrUbNf8qNhIkPjQvbZZtgIKkt0M34CE1L2qqr+9dSDHysDV4d0PWHcHSJ0unYpdK+b6prHy5kaq9F2iBpQxWDd670pctoiT5/VCx0fjNr1Y/n2w0yFP+8cEvOar5/UIxviy/mrx+Mbn8zlNYe73y0iM+7UIfSCgP68fM03g61W+h/v/646eE6ocT3v8F);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="629" y="199" width="29" height="40" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="106">
<mxCell style="vsdxID=134;fillColor=#2d5967;gradientColor=none;shape=stencil(pVjbblMxEPyavK5sr6/PBf4DQUsjSotCgfbv2aPEa3us47RC6kNyame8l5lZnwPf/Lr//PP24Myv59PT99u/x6/P9wf+cHDu+Hh/ezo+y6cDfzzwzd3T6fbb6en349fz95+ft5Xbpx9Pf7ZfeDnvy55C3HY583p+wpm2r/L36bzh4fi43OACpdBv+PL7dIawbYu9bLk8cpby+cmLuyziCmteL49sonLZ98KXVabue708sZ44r9BTJi4jupVfiSN88lRG9ESpjODJUBzBA3m3wo6ROI7YTMaP0NGStxA5eR6xQyQbRnBDya7Ag0QJgZsR2cv5IWpDDlLuTYuh5pyYV8jMZBkKTgXCdlFLWRNBzo/Yso0BWqJeplyaJrsR2wZyI7Y8wZRL5BHQt1WQ8+2MQ9JHcvQ7dtg0kYNCGI/rhQnQnUw5jMf1hRKcloobDys9s+4QMwJHpsQjsKECwMmSwQ6hCGlKieKyQ4STELWIhAtQJa8lqei5TJIgPZLsCF+4dv5egxold8Uv0jcgSdL5DuhhjRnRgxmh64I9Tpbavp0YAStjUQ5W2P5wLcV6uLeGncMkR31CK5ht9XRzcSpYaCV8a9VLIQNl79sJc6y60PVlRc9kwAiudnsRCYXoOxa14D1SreMjaz4CaOK7bfP/N4xO7koLb0esMCOyxQANhE1VPlV8TLPvWqJCwY0pEc13QEMrFVlaMwdtPmWDn/yRpUggA9aRAXzvm+dUfOmtZT/61GaONhowiK/4qAenklVoVYEnFZRVMS3VIM5eZbUkil8oY/4lfpD/6Ooc1PC5Fm5vPJGhJ035R6OOScEUXyvb8MXIPOBnWsqRzFNmngu1sE5XQfbFDhmi3xYB+jSWjvzqd1z6zJK9li6GcomRZVCQkCb53mZJcC30jbZkr1edpsHOv1qpEihisroTVqxOKXgn9jFZb9CWd28Y1UvzobZ0NR0F8rHtgQmCRfLHdOQ8MZcbmWs6NqNctq7MPHipyI4CTE92Zq7cRjwObolAOJNoyRLezvDCvzr/KTxX/emtNCJ8UMqplQqX1/hRGVjxg4pNHz4Kt886yWo3+urBFV6uJXad/UIRndw2R2pkKEAGsRIDk8TGK8AXozVuhe9bp+m1Lk1zzKbuMD7KqgDdF5uYKb66654QFb2/9vEDfgqtSWr6/SQGSaZNzH+5kn+5q+MkJeX34FtCIhTCrbFwlJJig2+1eW9/jlXG1pQkPZLi+zbtNi+Z8B3FmX5X8E3rmeplcZqjheoO+k+SPb1UCM0E25Hcsv4yNCeIX4KNEL+kBG+NOVZi9/0XYG7Jae3bMpA4vL0VnaS0/f18jSjKiD0f3JYMM+PoK9ds4n2r5UN7L3Z3fHg4v1br/4/v0eTR+R0cf/wH);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="638" y="203" width="12" height="17" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="107">
<mxCell style="vsdxID=135;fillColor=#2d5967;gradientColor=none;shape=stencil(lZTdUsIwEIWfprdnkt38XqO+ByMgHZEyBRTf3mBSyoah6F1ycpovOdluw7P9er5bNqT2h757X361i8O64aeGqN2ul317SKOGnxuerbp++dZ3x+0iz3fzs/M8+ug+zzuc8ndWwYbzV6S+s6J+Zy/ZvGm3V2Zj4PR98+uxz1vrvMiMYIq9SOqinCgrlExcTEVixMHEWdEOyhVTkQK8n4IHUJRszXCSzSBJ1vEWDVuRySFMkZXEphTIS66GC9WVI4KTYDdeoCjGwtMUWStElnSbzm8rekAVuHWDMsDJgyu6jWBBl7WhPdwQ1HCaiVIKDGv+bvcGloX95jg3BUCos3CXTYYsQiojW4VBMF6mERm6fgs/7HUHH/34yEUyBEfVWygl6eyhSNJHTxFYg+0kO1VTxU61rrRkx/Q3V4WgLVRVCcGCg+RH6Em8d9BV9IwqeJd+RiPhSoKvOxM/bE3/6mMPzGkwtstVu9nkbnu9XrfXJOXWzM8/);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="643" y="212" width="2" height="4" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="&lt;div style=&quot;font-size: 1px&quot;&gt;&lt;p style=&quot;text-align:left;margin-left:0;margin-right:0;margin-top:0px;margin-bottom:0px;text-indent:0;vertical-align:middle;direction:ltr;&quot;&gt;&lt;font style=&quot;font-size:16.93px;font-family:Oracle Sans;color:#000000;direction:ltr;letter-spacing:0px;line-height:120%;opacity:1&quot;&gt;Private&lt;br/&gt;&lt;/font&gt;&lt;/p&gt;&lt;/div&gt;" tags="Background" id="108">
<mxCell style="verticalAlign=middle;align=left;overflow=width;vsdxID=137;fillColor=none;gradientColor=none;shape=stencil(nZBLDoAgDERP0z3SIyjew0SURgSD+Lu9kMZoXLhwN9O+tukAlrNpJg1SzDH4QW/URgNYgZTkjA4UkwJUgGXng+6DX1zLfmoymdXo17xh5zmRJ6Q42BWCfc2oJfdAr+Yv+AP9Cb7OJ3H/2JG1HNGz/84klThPVCc=);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="618" y="244" width="118" height="20" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="&lt;div style=&quot;font-size: 1px&quot;&gt;&lt;p style=&quot;text-align:left;margin-left:0;margin-right:0;margin-top:0px;margin-bottom:0px;text-indent:0;vertical-align:middle;direction:ltr;&quot;&gt;&lt;font style=&quot;font-size:16.93px;font-family:Oracle Sans;color:#000000;direction:ltr;letter-spacing:0px;line-height:120%;opacity:1&quot;&gt;Endpoint&lt;br/&gt;&lt;/font&gt;&lt;/p&gt;&lt;/div&gt;" tags="Background" id="109">
<mxCell style="verticalAlign=middle;align=left;overflow=width;vsdxID=138;fillColor=none;gradientColor=none;shape=stencil(nZBLDoAgDERP0z3SIyjew0SURgSD+Lu9kMZoXLhwN9O+tukAlrNpJg1SzDH4QW/URgNYgZTkjA4UkwJUgGXng+6DX1zLfmoymdXo17xh5zmRJ6Q42BWCfc2oJfdAr+Yv+AP9Cb7OJ3H/2JG1HNGz/84klThPVCc=);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="609" y="261" width="135" height="20" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="110">
<mxCell style="vsdxID=141;fillColor=#FFFFFF;gradientColor=none;shape=stencil(lZbLctswDEW/RlsMCfC5TtP/yDRO7akbZxyndf++cMUnLFHpTqYBHhC8vORED+/7p7fdhOr9cj792P0+PF/2E32ZEA+v+935cOGviR4neng5nXffz6eP1+f599vTLfL29fP06zbDdc4zDpy+ZaH6M49opf79/jqHf/s4z/E6JShQJiXoPkNdcR4gAhdTTBqKEdCnKJqHMIKiFJWGYgBlR3RECKGnRwdker6O4AWeK3I9vgnK9G7hx8Nr06cmeh6wBpxZj1f/FQzY74FVEMOoDwqC7dtgNETbt8EC9V0gA9qKLiBg7NtAw/3XBN736NtGotgBA0HA0YOVW2ABbQ/nopMe1/i83brn60ZbGaZACz4XHoUAbe17rkiDcUMBeiASeAUmCnwscisKBC9WT9x6IcAcswLnDCfgzbT18OE2uzTj02zWjt5kGyDcZBuw8txvwV1R2ADOApPsosvMDkBCcR7CUHDNwcpsAi30xjYaxMIbVSSSRdBixweOw56B2WgXgmWZDkEJZ1Rlglym444IZ2STEL7sMZ+BeiwIzLBJnOOEKzTnLaE8gRLXAvtEVnTBE1jRJfaJ1Lg1PLPkpWSLRRa+AS/5vjSk8BdcYetaChqsXH4oxpr5wVevzUZRPOBaLiFwocdjmWpRKG1GSbCD6ybqaqHCipbvPtXfZoZ1PKrHlqOZE0qXlxNYF309Jmtnpd/tCnQ5Llrsd2DVCrU7DV6L/a6JueE16vN6a2fGeyUP+FTXssbv+9VmpJVuGWibokvXjSxYladUsVAHol5H+W1S7XvLQ22slp/x95e2ZV8NPb4+Len+vUp9zGKvNt+3/FHfxi+H43F+Wrf/y7c0D83vcHr8Cw==);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="781" y="186" width="61" height="53" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="111">
<mxCell style="vsdxID=142;fillColor=#FFFFFF;gradientColor=none;shape=stencil(pVnZcls3DP0avXJIgutzmvxHJnFqTV07ozit8/eFei+3A11SnrxJFMBDYjsAdaIPPx4/f384Wf3j9fLy18O/56+vjyf642Tt+fnx4XJ+5U8n+niiD99eLg9/Xl5+Pn/dvn//fJW8fvr75Z/rDm+bnidlrkpW/9oWrKL0/8KnTfzLz8smb7bfg1be7RoGVPSb3YWiMn4X2pd4ZVd7o31FKxd2oX3JOBXDDJ11UhzRjVcO4KNROo7wJiiTAd+okAE/qBCn+FYZA/hRXJ+lMgF+UskAPinvAT+v7s8CHvCrTsVPXhHgWwaLI35KytGIb7Oyucd/Oj93wZL45+KxbYVK+NyUz2yaMbochhcoOBVoVKjeva1glLGjgim3OjBh5gAeLeiNymBAqxLEL8e9xQCWDmxSxwFUQ8PInVsAVcNN8GUAB31sq168RkAy09N2KqZaPMTxtCErDadlR2o/njaQCLeMzkV8zwdMgB8EvmdvZcDvknIHc0E5sFaTOsB3WmnEl+lOfFnE707ZcgujZXl/ztoM5a63bMlto2wCfCPxOyk68P8YML0GsMVteWXju8Qd7K5VnIZj46riH0k9UVkofQSBaEgFNxqCTGGHA2QmGQuJQFrwDtOHx7qbRN1lqQz4NiyKFpMMBoJla9llIPDBI/AOg2lIRDYJTfH5Gkh70vRsEYO0y6UV4In9DtdvUkeO7+qxkTsXfK4wd+BTqxZ343cZPsF3Cln/BrxTSPpLdO5dwho91g6jg8emh3ItH7UKLXoOTjIP8F4wlovK2xGdfRZGcC7USFi8Yo9LRK+w48BhV/K4v2AYKxhOBvYNgrGCX7pOmkDm9llXnTc06q7Rx7YyoXovautMmAuZ+Q3hRcdz7eAgfLTKQGFMtJC5sl/lADcQPbGE2HHmeORPQZ/k20RT6LMGc5e22LwUmftrRrftpHWQ2LJiLcGpcfExuOxyb4DbRqh3gls5pEjwK1FjsZYtrpW1ckHUuU0QZYna6NVYMWOtrKNPI2pXm6ia0r6E7hG+E9FuZcfYtyCtUcABkSkW+4SV6XnwA7eTvD3P0MBTTvIU+wLKmddw97Ey6KEqeOwopsIeGr9VXzmXv7rS/p5CqmXiOM6qSolxyYrcagXMMDmZsFcNplgqdeE4wRNWly6CW1nV2BBqPaLfmIuKzFGQiT68bVoYM8u6JhOMR8Lk3nnxEBSh4W+8wFB9FKn43TsRSSk6cDzM0J3Gfh674KDU9bsGdeqBs/SU940mi3W4R4ADOxwd4IHEtsGhdmrGTRS4gI254OZTIts1vQ8hYSfj3NToNbrufESS++NgCQq6scGeXdiSCwULbebCRrcUZvWxD4eqME+MFFSEtworH7b4qpCXJoo+PXKviSVh9VTCOgZfZuVTTf9kdjyhshQh8XtoM0Ve0uhzM8/i8hhdpJcPz/Ldrun073Y4BbEUlr3+da8N4POXuP6NrXI9zv9cVwx4Vwvj9oNE4fpjUy3GDv7Q/ln4dn562v6Y6H/HfyJ4afsXgz7+Bw==);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="780" y="186" width="63" height="55" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="112">
<mxCell style="vsdxID=143;fillColor=#2d5967;gradientColor=none;shape=stencil(pVrbctw2DP2afeWIN5B8TtP/yDRO7alrZxyndf6+2llRhHCw4O70bS2DPCCIg5t0ip9+PH75/nAKy4/3t9e/Hv59+vr+eIq/nUJ4enl8eHt6X3+d4udT/PTt9e3hz7fXny9fL39//3KWPP/6+/Wf8w4fl3XJxXxeFJZf24PqyuXJ7xf556cXJu/JNfp/C3J0wViw3CXszv/i8ovQ5o+fb5fz+r6ilm3F9iRtO3yEbYux5/Ykpq7E8hG3Y/lxrO1RXISqEtpHJ6BDGxtvWD4fsUNB7OxSOmJPgMnlcET27Qi7mz0MXQVsV+PXMIENu6oe2xG2jV3DsJowd4MTx+gWceI2uefIrrGfeRHQxfkyha4u1SN0cSZyCmPbbgk4dmK2CbsvC+wcXI1H7MVCzsxMnssP317pRAJWYDKJWzDJu6WZmFSHVl2NI2bxwz+7c0ULtDD2MXIJG5cA9+uTk9hoY29e74odvcDOQGNa/bMK7CyxCX3Lk2nsOi5nYMtzcykLW1LKPjchoaoTyLm5LCwOBlccLNmEUtw6AXIEJ0NkvOoJcmIXdA05JefjEZkgdibGkm7txcZeA0+TfhbBz9YwRyJjrD4u4WMY0SbuUnb05oG546cjeFAcDay+WgOOnu2jhwCJwxdpd4++FjzmSmbFXSEL2yPFlKy1ZtQ9CITdxtLsHl09TjyuyhIhFrhzlv67DwZpdVbX9Sd2nTYvBI+FY2GEk5WKClCgEJwsqMwLNpWaswCq1GgiX2D/ZJpoTRXk71rA8totGhFqZJ/g7juYL4BbDqLc9+YVy/Na0mmkSEmha9rfo8xE+njQDKrHen1vnkn2CtVSPR+7mlgMUZZzNr3J3JuAWNb2xNLVTarTMjLMHpLs2nutCTvE9UZndXYSITRgCC0iigXpIhBAF5ckOJbfFZu8NU/J5FELFAzRW4RsYKtzirT1xSZp1Vcaq7JI0lNQBX2lsfwMXKnp+LY932CfFMoRmdNnb5wMH5+w7chNvxzZsxZTlsM2iLox2IkGouI2EtCl85ggbNLZ3r5Bap11zhXKgIQ1CM+PYbfrzCeGyDWfYHWVx207exP0NxnZS6wD62VIsQiUwVbTgQ6xrDz0VXqiJPSlZRptaAZemRk8btunCixd7MY6IrcIraCV3Bqj5E1OeCeHpuJHhhKrsrcnMqlAG43tBSVws4Jxj25p4WlayYn83bypLJPvkyzRCxUxQGsEHTfLvP3Wq4XKydBRMY8qne9+e3s3QE7OOBZzqhMxCIxNe8ODs6SG87OAMw771AH5zGw5mj8ZfvYLiSgStUsWHt9kNQo+D61iA/LHCuTn5+mWA99QrBTt7hxnIhEnYJF5ELs12SuCd0Q5dYfBCE6UIw4nEqtMDfgCwwnAF70q9EnTkjQVGMqONVzhIrjEpa7bawYfcWCpwAdMqmkBV4kw0bDKFS7epWdze0xqSUS7qIzblKkXGApaGbinNoKkx417zMO0oMBnxVI0GTUmCLmdlzu2ckkNRo34iiabGSYrVYxHQuHMK3sY/YDVs5+MGpWSz8uQq4T7jBWUEsjkDAPcDWNJkm+nRBBLVWEFFppWCcAWbIepEzUTGIkWnMdiqUcR7kcORMl825EjTKH3PcfgXQZ6CkdYwmEkmS6pNIf7nh0DA7w8LeEAdlob8tHAqA1lRc/M2B/NKy6ajJ6VmouU+IPhj8qchzR5c6jwkGDurfCQMPYpPJwdXeEhCWzJQ6zFkYdw2xMelsmEXOFhwf5U4WFpJ3k/koebyO2+UUSgUoZahYAQ8EI5mVPheXN194JZ+1btd77Iz4pdr0LQii9oFI7WWeGtXESVAREZWvGTBqRoncUmhaNVKbyRpFUERoWh04MrFK1YJUiWViVNA02PNz7haJvNRRSSNpxq8qq4d3FZa08kT5scdoCH4nShKS/pCwSJJrOm0r7Kw8/YZ5l2Jr3+GJ9ufXt6fr58+cX/Lz/1Wh9dPhOLn/8D);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="781" y="187" width="60" height="52" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="&lt;div style=&quot;font-size: 1px&quot;&gt;&lt;p style=&quot;text-align:left;margin-left:0;margin-right:0;margin-top:0px;margin-bottom:0px;text-indent:0;vertical-align:middle;direction:ltr;&quot;&gt;&lt;font style=&quot;font-size:16.93px;font-family:Oracle Sans;color:#000000;direction:ltr;letter-spacing:0px;line-height:120%;opacity:1&quot;&gt;Oracle Autonomous&lt;br/&gt;&lt;/font&gt;&lt;/p&gt;&lt;/div&gt;" tags="Background" id="113">
<mxCell style="verticalAlign=middle;align=left;overflow=width;vsdxID=145;fillColor=none;gradientColor=none;shape=stencil(nZBLDoAgDERP0z3SIyjew0SURgSD+Lu9kMZoXLhwN9O+tukAlrNpJg1SzDH4QW/URgNYgZTkjA4UkwJUgGXng+6DX1zLfmoymdXo17xh5zmRJ6Q42BWCfc2oJfdAr+Yv+AP9Cb7OJ3H/2JG1HNGz/84klThPVCc=);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="736" y="244" width="287" height="20" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="&lt;div style=&quot;font-size: 1px&quot;&gt;&lt;p style=&quot;text-align:left;margin-left:0;margin-right:0;margin-top:0px;margin-bottom:0px;text-indent:0;vertical-align:middle;direction:ltr;&quot;&gt;&lt;font style=&quot;font-size:16.93px;font-family:Oracle Sans;color:#000000;direction:ltr;letter-spacing:0px;line-height:120%;opacity:1&quot;&gt;Database Primary&lt;br/&gt;&lt;/font&gt;&lt;/p&gt;&lt;/div&gt;" tags="Background" id="114">
<mxCell style="verticalAlign=middle;align=left;overflow=width;vsdxID=146;fillColor=none;gradientColor=none;shape=stencil(nZBLDoAgDERP0z3SIyjew0SURgSD+Lu9kMZoXLhwN9O+tukAlrNpJg1SzDH4QW/URgNYgZTkjA4UkwJUgGXng+6DX1zLfmoymdXo17xh5zmRJ6Q42BWCfc2oJfdAr+Yv+AP9Cb7OJ3H/2JG1HNGz/84klThPVCc=);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="744" y="261" width="270" height="20" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="115">
<mxCell style="vsdxID=147;fillColor=#312d2a;gradientColor=none;shape=stencil(pVbbcsIgEP2avO7AAiE8W/sfTo01U5s4UVv79yWFJFwkmOkbrmc5Z6+hYJvLcXeuCySXa9991N/N/nos2EuB2LTHum+u+lSwbcE2h66v3/vu1u7N7/NuQA6nz+5ruOFu/JQCKQYvJD/GIjhI/md5NQ5vt954UAOghFgHaxAIFI3pjiHGGriEqrIYFlNbExeApct9alpXrIASPbE4GhJatQeTvlriK1UcVOlrJYFOnRBfZpaVAxdBjgBZRDyBRhPwMEcRN0UgaiFF1RywZSYL6Pl6Y6gkKLoyNEVAYD42TSVzwSkJrMrQT9UK23Eid2oetuNE7XRSijtIVX5QVjv4o0gAfXw0DWE2gjl0Z8xv5TEP7qSyiJU9FRcf0zTKzBaNQ8kyNRNAeKZkuqorm0WACFvVaUKMQGP/OP2c4o7mxM8RnSPOD+F8eWLCn4hrXhzJsJwNlIoqt9ecKj1epk6lH+9Sp3kSnH5u8jOxFh99/lD5DsxmJXG/pP+Bi9KuvNTKCNSsxS/LyeP1YX4pHJrTyTw03P/Dl4U2mVcJ2/4C);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="413" y="199" width="163" height="15" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="116">
<mxCell style="vsdxID=148;fillColor=#312d2a;gradientColor=none;shape=stencil(nVRdc4MgEPw1vt7AHZ/Pafo/Mo2pTq1mjGntvy8WawUmMvYN1112uYMr6HCrTteyQHYb+u6t/KzPQ1XQU4FYt1XZ14NbFXQs6HDp+vK17+7t2X9fTxNzWr13H9MOo9dZC0ZOKmRfHpECtPhBnr3g5d57BfcEztgsmAGJwNFDI8acGRAajJk5lFrPkJCAau3d1O06rAYSQVgEhVtZnYLbMC0Lk1oFVoRZWZRTgTZhzqytAkVRkQApcV5IvxCIuEipOUdgdqNIFhgPO8o22Kv9PWI0WL7zcJaBxPzp3M3S2eNNTTYZ/6Vj8ZVc3Fd9j6/kSOlteuSdlDb3WHYLkucodSAQBPTYgP2bK13lN4NHOfbyt7Pk+W7xN7MuddP4kbf+H884B/n5SMdv);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="844" y="199" width="268" height="15" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="117">
<mxCell style="vsdxID=150;fillColor=#dae8fc;gradientColor=none;shape=stencil(nZBLDoAgDERP0z3SIyjew0SURgSD+Lu9kMZoXLhwN9O+tukAlrNpJg1SzDH4QW/URgNYgZTkjA4UkwJUgGXng+6DX1zLfmoymdXo17xh5zmRJ6Q42BWCfc2oJfdAr+Yv+AP9Cb7OJ3H/2JG1HNGz/84klThPVCc=);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="444" y="200" width="102" height="14" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="&lt;div style=&quot;font-size: 1px&quot;&gt;&lt;p style=&quot;text-align:left;margin-left:0;margin-right:0;margin-top:0px;margin-bottom:0px;text-indent:0;vertical-align:middle;direction:ltr;&quot;&gt;&lt;font style=&quot;font-size:14.82px;font-family:Oracle Sans;color:#312d2a;direction:ltr;letter-spacing:0px;line-height:120%;opacity:1&quot;&gt;VNET Peering&lt;br/&gt;&lt;/font&gt;&lt;/p&gt;&lt;/div&gt;" tags="Background" id="118">
<mxCell style="verticalAlign=middle;align=left;overflow=width;vsdxID=151;fillColor=none;gradientColor=none;shape=stencil(nZBLDoAgDERP0z3SIyjew0SURgSD+Lu9kMZoXLhwN9O+tukAlrNpJg1SzDH4QW/URgNYgZTkjA4UkwJUgGXng+6DX1zLfmoymdXo17xh5zmRJ6Q42BWCfc2oJfdAr+Yv+AP9Cb7OJ3H/2JG1HNGz/84klThPVCc=);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="449" y="199" width="177" height="17" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="119">
<mxCell style="vsdxID=152;fillColor=#312d2a;gradientColor=none;shape=stencil(pVbbcsIgEP2avO7AAiE8W/sfTo01U5s4UVv79yWFJFwkmOkbrmc5Z6+hYJvLcXeuCySXa9991N/N/nos2EuB2LTHum+u+lSwbcE2h66v3/vu1u7N7/NuQA6nz+5ruOFu/JQCKQYvJD/GIjhI/md5NQ5vt954UAOghFgHaxAIFI3pjiHGGriEqrIYFlNbExeApct9alpXrIASPbE4GhJatQeTvlriK1UcVOlrJYFOnRBfZpaVAxdBjgBZRDyBRhPwMEcRN0UgaiFF1RywZSYL6Pl6Y6gkKLoyNEVAYD42TSVzwSkJrMrQT9UK23Eid2oetuNE7XRSijtIVX5QVjv4o0gAfXw0DWE2gjl0Z8xv5TEP7qSyiJU9FRcf0zTKzBaNQ8kyNRNAeKZkuqorm0WACFvVaUKMQGP/OP2c4o7mxM8RnSPOD+F8eWLCn4hrXhzJsJwNlIoqt9ecKj1epk6lH+9Sp3kSnH5u8jOxFh99/lD5DsxmJXG/pP+Bi9KuvNTKCNSsxS/LyeP1YX4pHJrTyTw03P/Dl4U2mVcJ2/4C);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="413" y="478" width="163" height="15" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="120">
<mxCell style="vsdxID=154;fillColor=#dae8fc;gradientColor=none;shape=stencil(nZBLDoAgDERP0z3SIyjew0SURgSD+Lu9kMZoXLhwN9O+tukAlrNpJg1SzDH4QW/URgNYgZTkjA4UkwJUgGXng+6DX1zLfmoymdXo17xh5zmRJ6Q42BWCfc2oJfdAr+Yv+AP9Cb7OJ3H/2JG1HNGz/84klThPVCc=);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="444" y="479" width="102" height="14" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="&lt;div style=&quot;font-size: 1px&quot;&gt;&lt;p style=&quot;text-align:left;margin-left:0;margin-right:0;margin-top:0px;margin-bottom:0px;text-indent:0;vertical-align:middle;direction:ltr;&quot;&gt;&lt;font style=&quot;font-size:14.82px;font-family:Oracle Sans;color:#312d2a;direction:ltr;letter-spacing:0px;line-height:120%;opacity:1&quot;&gt;VNET Peering&lt;br/&gt;&lt;/font&gt;&lt;/p&gt;&lt;/div&gt;" tags="Background" id="121">
<mxCell style="verticalAlign=middle;align=left;overflow=width;vsdxID=155;fillColor=none;gradientColor=none;shape=stencil(nZBLDoAgDERP0z3SIyjew0SURgSD+Lu9kMZoXLhwN9O+tukAlrNpJg1SzDH4QW/URgNYgZTkjA4UkwJUgGXng+6DX1zLfmoymdXo17xh5zmRJ6Q42BWCfc2oJfdAr+Yv+AP9Cb7OJ3H/2JG1HNGz/84klThPVCc=);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="449" y="478" width="177" height="17" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="122">
<mxCell style="vsdxID=157;fillColor=#FFFFFF;gradientColor=none;shape=stencil(nZBLDoAgDERP0z3SIyjew0SURgSD+Lu9kMZoXLhwN9O+tukAlrNpJg1SzDH4QW/URgNYgZTkjA4UkwJUgGXng+6DX1zLfmoymdXo17xh5zmRJ6Q42BWCfc2oJfdAr+Yv+AP9Cb7OJ3H/2JG1HNGz/84klThPVCc=);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="576" y="390" width="345" height="192" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="123">
<mxCell style="vsdxID=158;fillColor=none;gradientColor=none;shape=stencil(nZBLDoAgDERP0z3SIyjew0SURgSD+Lu9kMZoXLhwN9O+tukAlrNpJg1SzDH4QW/URgNYgZTkjA4UkwJUgGXng+6DX1zLfmoymdXo17xh5zmRJ6Q42BWCfc2oJfdAr+Yv+AP9Cb7OJ3H/2JG1HNGz/84klThPVCc=);dashed=1;dashPattern=1.00 2.00;strokeColor=#706e6f;strokeWidth=2;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="576" y="390" width="345" height="192" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="124">
<mxCell style="vsdxID=160;fillColor=#FFFFFF;gradientColor=none;shape=stencil(nZBLDoAgDERP0z3SIyjew0SURgSD+Lu9kMZoXLhwN9O+tukAlrNpJg1SzDH4QW/URgNYgZTkjA4UkwJUgGXng+6DX1zLfmoymdXo17xh5zmRJ6Q42BWCfc2oJfdAr+Yv+AP9Cb7OJ3H/2JG1HNGz/84klThPVCc=);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="866" y="387" width="47" height="6" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="125">
<mxCell style="vsdxID=162;fillColor=#86d633;gradientColor=#5e9624;shape=stencil(jVLtDoIwDHya/SWjDfIAiO9BZMgiMjJA4e1lKYatBMO/ftztel0FZn1ddEqA7Adrnuqjy6EWeBUAuq2V1cMSCcwFZpWx6mHN2JaUd4VDuuhl3u6FiXiJdBSQM6WxpPxG2PtoCRxTO02jC66EOGTICVhhhh1pQo7BYIwD2Q2+FgAiTENZf7S1JEPRhGn+lfQUfqLMJ3Ppj4Qh4pRH5tBf2l5h5rs+8sj+s9Ht6b9fgu1oKt00dHN+nx/ZUqIDxfwL);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="897" y="387" width="5" height="5" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="126">
<mxCell style="vsdxID=163;fillColor=#86d633;gradientColor=#5e9624;shape=stencil(lVJBDoIwEHxNr6TdjRLPiP8wAtKIlBRQ+L3UhdCukehtO51hdsoITNry3OQCZNtZc8ufOutKgUcBoOsyt7qbJoGpwKQwNr9a09cZnZuzY7rpbh7uCwPpdjKSyqlAjoQoKd/nE9EvvSW+ous4jvaLQIUKOQADRlhFOHOQc3DZZMt2pc8AQIRxaOuvNkMyNPXTos/44upMDqEvi8qC+lthyPgpJgvpvxt8rsSfeyMm+6uVrv8pwTSsBSp0VVH//HteuAmismL6Ag==);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="888" y="387" width="5" height="5" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="127">
<mxCell style="vsdxID=164;fillColor=#86d633;gradientColor=#5e9624;shape=stencil(jVLbDoIwDP2avZLRBonPiP9BZMgiMjJA4e9lKQlbCYa3Xs7Z6ekqMOvrolMCZD9Y81JfXQ61wJsA0G2trB6WSGAuMKuMVU9rxrakvCsc0kVv83EvTMRLpKOAnCmNJeV3wj5GS+CY2mkaXXAlxCFDTsAKM+xIE3IMBmMcyG7wtQAQYRrK+qOtJRmKJkzzr6RTuIaizCdz6Y+EIeKUR+bQXxrsR+K7PvLI/rPR7em/X4LtaCrdNHRzfp8f2VKiA8X8Bw==);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="879" y="387" width="5" height="5" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="128">
<mxCell style="vsdxID=165;fillColor=#50e6ff;gradientColor=none;shape=stencil(jZPRksIgDEW/htcMSUoLz677H47WLWO3dbCu7t8vXWiFjnV8C+FecgJB8ObS7M61IHkZXH+qb/YwNII/BJHtmtrZwUeCt4I3x97VX66/doewPu9G5Rh99z/jCffgMxpUNbpI/oaM1qDNf+YzGFrbJQZdARaZAaVM5furCwUwGhRUGA2YO+SdooZAl1FDSw1HDUJBUcMzfInrqP5QlZH6DNErVrngNFConFQuKHm6rJkzqTphQkXrlFgAmQxTroufPBeCUa96mi9y6kozMOddPTTTg5SAmPeVlua3RuWN2fLBYzKPtm3DYKf7y0n2qfALePsH);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="869" y="387" width="14" height="15" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="129">
<mxCell style="vsdxID=166;fillColor=#1490df;gradientColor=none;shape=stencil(jZPRUsMgEEW/htcd2A2wPNf6Hx2bGsaYdGiq7d83ETIC2urbcjmwd4eLoM2p2x1bgfI0hfGt/fT7qRP0JBD90LXBT3MlaCtocxhD+xrG87CP6+NuIZfqffxYbrjEc2yBcDmF8hoVBeS+hOfI937IeMegXckj6Jx/OYfYQKV9KRO/CgScrrhgzayCAWMTQz87J0kxSH3fq9LQVF5Tn1/xBpAKmnk1eme0ajBuwGI5WDWWdaBMOVbWNSnWPHwBloD88MVqm6zAuNKqLG3OzrUqrcrSZp4T+k9Q/g7WXHyn8uD7PoY6369TPEvxB9D2Bg==);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="869" y="377" width="14" height="15" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="130">
<mxCell style="vsdxID=167;fillColor=#50e6ff;gradientColor=none;shape=stencil(lZLRksIgDEW/htcMJNLCs6v/4Wzrltlu62B19e9tN6AUp+v4Fm4uyRm4gtbHZneoBcrj4Pvv+tdVQyPoQyC6rqm9G8ZK0EbQet/7+sv3p67i82E3Oafqpz9PEy58zxSg1HQL5ZUV+Xfasrl1XWK2GgzNzBZKTP2fJ8/TFfeVlMEfBQJjWbpg7omChdUqeOh5c5AQAXGZNRkSWQ0U6l9YA1JnuJHtDqsBywz37glkCkHPWZ9WZ6xAdoZqyjBhgTR71OQTI2f2pIaAKKN8LA2KkaD1MuVbUXlhHotHIveubTnQaT9P8Chx+mlzAw==);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="897" y="387" width="15" height="15" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="131">
<mxCell style="vsdxID=168;fillColor=#1490df;gradientColor=none;shape=stencil(jZLLEsIgDEW/hm0mIcXC2sd/OFotY20drFr/3lZQC46PXUgP5Ex6BU+P5fJQCInH1jW74mLXbSl4JqS0dVk42/aV4Lng6aZxxdY1p3rtz4flQA7VvjkPL3T+nsmBhksSr76hNWhz7yw8X9l6xGsFKuIJ8TNNkCW0eXQCvzo5r0MewICHI2nA8EInYyIcSYHUgeC3qY+OBPXFkkCZWBPYfLMkfmpdY/HupWWy2BQTy37RqWYyNtZ8+1X55JcmJuvMDdAkEcVkoTqDXMaqo8n8V0p+p6ovXpHc2KryiR5/TyPct3z8eX4D);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="897" y="377" width="14" height="15" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="&lt;div style=&quot;font-size: 1px&quot;&gt;&lt;p style=&quot;text-align:left;margin-left:0;margin-right:0;margin-top:0px;margin-bottom:0px;text-indent:0;vertical-align:middle;direction:ltr;&quot;&gt;&lt;font style=&quot;font-size:16.93px;font-family:Oracle Sans;color:#706e6f;direction:ltr;letter-spacing:0px;line-height:120%;opacity:1&quot;&gt;&lt;b&gt;Primary Database VNet&lt;br/&gt;&lt;/b&gt;&lt;/font&gt;&lt;/p&gt;&lt;/div&gt;" tags="Background" id="132">
<mxCell style="verticalAlign=middle;align=left;overflow=width;vsdxID=169;fillColor=none;gradientColor=none;shape=stencil(nZBLDoAgDERP0z3SIyjew0SURgSD+Lu9kMZoXLhwN9O+tukAlrNpJg1SzDH4QW/URgNYgZTkjA4UkwJUgGXng+6DX1zLfmoymdXo17xh5zmRJ6Q42BWCfc2oJfdAr+Yv+AP9Cb7OJ3H/2JG1HNGz/84klThPVCc=);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="585" y="398" width="355" height="20" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="133">
<mxCell style="vsdxID=172;fillColor=#FFFFFF;gradientColor=none;shape=stencil(nZBLDoAgDERP0z3SIyjew0SURgSD+Lu9kMZoXLhwN9O+tukAlrNpJg1SzDH4QW/URgNYgZTkjA4UkwJUgGXng+6DX1zLfmoymdXo17xh5zmRJ6Q42BWCfc2oJfdAr+Yv+AP9Cb7OJ3H/2JG1HNGz/84klThPVCc=);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="584" y="423" width="329" height="151" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="134">
<mxCell style="vsdxID=173;fillColor=none;gradientColor=none;shape=stencil(nZBLDoAgDERP0z3SIyjew0SURgSD+Lu9kMZoXLhwN9O+tukAlrNpJg1SzDH4QW/URgNYgZTkjA4UkwJUgGXng+6DX1zLfmoymdXo17xh5zmRJ6Q42BWCfc2oJfdAr+Yv+AP9Cb7OJ3H/2JG1HNGz/84klThPVCc=);dashed=1;strokeColor=#706e6f;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="584" y="423" width="329" height="151" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="&lt;div style=&quot;font-size: 1px&quot;&gt;&lt;p style=&quot;text-align:left;margin-left:0;margin-right:0;margin-top:0px;margin-bottom:0px;text-indent:0;vertical-align:middle;direction:ltr;&quot;&gt;&lt;font style=&quot;font-size:16.93px;font-family:Oracle Sans;color:#706e6f;direction:ltr;letter-spacing:0px;line-height:120%;opacity:1&quot;&gt;&lt;b&gt;Delegated subnet&lt;br/&gt;&lt;/b&gt;&lt;/font&gt;&lt;/p&gt;&lt;/div&gt;" tags="Background" id="135">
<mxCell style="verticalAlign=middle;align=left;overflow=width;vsdxID=174;fillColor=none;gradientColor=none;shape=stencil(nZBLDoAgDERP0z3SIyjew0SURgSD+Lu9kMZoXLhwN9O+tukAlrNpJg1SzDH4QW/URgNYgZTkjA4UkwJUgGXng+6DX1zLfmoymdXo17xh5zmRJ6Q42BWCfc2oJfdAr+Yv+AP9Cb7OJ3H/2JG1HNGz/84klThPVCc=);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="592" y="431" width="270" height="20" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="136">
<mxCell style="vsdxID=177;fillColor=#FFFFFF;gradientColor=none;shape=stencil(lZRNcsMgDIVPw1YDEr/rNL1HpnFqpq6dcZw2vX1xgdjQjjPdwfOTPpCQGe0u7eHcMOSXaRzemk9/nFpGTwzR920z+imsGO0Z7U7D2LyOw7U/xv35MDvn1fvwMWe4xTjBgeYg5F9RUAak/lGeo//lOsYAEQ0IVqeIpEgHOiW5YZR4cqQtOXAmOSinIZlMSSEOm2AJ2pZgFIAVWCBwLOFBclTBEYwu6QaU2KITgarowF0Jl3pJWxYig1UolSjBAswW12Duxx1MIEUJtgRWlWB7P0pmu1AtV7E1KLdFdxpcRQ/31lgVnVf9RveLvnhyuw3wzZsvEfkBSKCq4uvzJUkJUPTw5uGZq+K1db5fjYXiYHOfytP8aX88Rf/1h8UysiffdXHi19/rEQ9S/D3Q/hs=);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="629" y="478" width="30" height="41" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="137">
<mxCell style="vsdxID=178;fillColor=#FFFFFF;gradientColor=none;shape=stencil(lZZLctswDIZPoy2GAPhcp8k9Mo1Ta+raGcdp3duXKkVKgGxpvJNhkB/x+smOnz73rx+7jszn5Xz6ufvTv132HX/riPrjfnfuL/mr4+eOn95P592P8+nr+FZ+f7wOnsPXr9PvYYdrWWcTJDesIvO3WAjY/je8FP/vX+eyAMv/LoLlcQW2JVQsVyoW7yH40Wk02dGDy89gwdRtqgloDRwRKEkwGrASHPMmJMHoJDkhYJBkMuDW0MkBkorZS3DykKwEMwFGxfZT8kYTR+C4AU8o4daCi4rPYJLkuxxVkPwYoR688p0DH+b8Q3+cNUjexNTQ9XluLkCEJPwXAB1gABNlfMPJVXx2Oji1JHiS4TEEu8jumPA7cAZSyc1lIyfhDgxKOHkwOreQVGmphXEHjgTRSTq6VsdKxziFVU258ZPE50Mm1dZ5FlYTzwyqq/NQqtAtNlKLHViN1FxFuDkJGZFNsi07j/pvyZpZS4Q1ixEzreTXaZxrcloZILKqgm1a2AZsowrowSldywVX8FxwUmVABq/oHhAlHNO6suVh1cLmgIOEG6Vr2DqtgnOjK1nJg7fR+wtJtVllVetbQJZwhw3VRBUoSrgLtXq3uynUa6NKWp6Ule5baiAas+JO4B/aPxkIcv9FADcuhRhk+uaZqZdChKi6ZkiyvpQS2KVsjnvdq54xkj40hV3Qq0Y26XB1bCc6T5FMTWtXRyameqVMupmnQeIjA6srI7Zl7Rni2iUym9fVkfEBorqvsg6oeXUq7WZTMFcaakPNHnLOH9Nb8L0/HMpTcv6/fjtmU3l38vM/);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="629" y="478" width="30" height="42" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="138">
<mxCell style="vsdxID=179;fillColor=#2d5967;gradientColor=none;shape=stencil(pZZBctswDEVPoy2GJEiCXKfpPTKNU2vq2hnFadPblyoFioDGSjLdKQihR+AD3xrw7uX48HwYnHm5Tpcfh9/j4/U44JfBufF8PEzjtTwNeD/g3dNlOnyfLq/nx/r388N8cn76efk1v+Gt5mULLs1ZzvypERsh0L/I15rw7XWqGbYeSAjJLykcAloib65GyIHnQ0sIAfNyCGskZAgMX0IWdtk+AjnJNhKMCJ4k2IGV3BIhlFyC4PbAVlGtgxwk2UOMClyaGxUaUJHRQMQ9tJFkzJCzJDtIqmSfIQZJtgbQSXQg8KlHn8ZzNxvBQOIMfoe5fXw7Spv369JyhBxlecGCj7I8pq7V+dbFtTqj2kpg9hU1qrEut9licn8/12YnqDHuC+fr6CV6r1X/nyD3OkVAEgkhgMHbhK3YuaywvZ1gA1jcEOx+yyEq5yhYR7LpadBikxK7LeuqdoK8O2nExa97hOBQkVdzYbXLBCu1y+ajUnve6rxbeAQTlIEQOL3GFoKaNovc0tVB0sZCSl/NroVgUSZLPrUbNf8qNhIkPjQvbZZtgIKkt0M34CE1L2qqr+9dSDHysDV4d0PWHcHSJ0unYpdK+b6prHy5kaq9F2iBpQxWDd670pctoiT5/VCx0fjNr1Y/n2w0yFP+8cEvOar5/UIxviy/mrx+Mbn8zlNYe73y0iM+7UIfSCgP68fM03g61W+h/v/646eE6ocT3v8F);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="629" y="478" width="29" height="40" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="139">
<mxCell style="vsdxID=180;fillColor=#2d5967;gradientColor=none;shape=stencil(pVjbblMxEPyavK5sr6/PBf4DQUsjSotCgfbv2aPEa3us47RC6kNyame8l5lZnwPf/Lr//PP24Myv59PT99u/x6/P9wf+cHDu+Hh/ezo+y6cDfzzwzd3T6fbb6en349fz95+ft5Xbpx9Pf7ZfeDnvy55C3HY583p+wpm2r/L36bzh4fi43OACpdBv+PL7dIawbYu9bLk8cpby+cmLuyziCmteL49sonLZ98KXVabue708sZ44r9BTJi4jupVfiSN88lRG9ESpjODJUBzBA3m3wo6ROI7YTMaP0NGStxA5eR6xQyQbRnBDya7Ag0QJgZsR2cv5IWpDDlLuTYuh5pyYV8jMZBkKTgXCdlFLWRNBzo/Yso0BWqJeplyaJrsR2wZyI7Y8wZRL5BHQt1WQ8+2MQ9JHcvQ7dtg0kYNCGI/rhQnQnUw5jMf1hRKcloobDys9s+4QMwJHpsQjsKECwMmSwQ6hCGlKieKyQ4STELWIhAtQJa8lqei5TJIgPZLsCF+4dv5egxold8Uv0jcgSdL5DuhhjRnRgxmh64I9Tpbavp0YAStjUQ5W2P5wLcV6uLeGncMkR31CK5ht9XRzcSpYaCV8a9VLIQNl79sJc6y60PVlRc9kwAiudnsRCYXoOxa14D1SreMjaz4CaOK7bfP/N4xO7koLb0esMCOyxQANhE1VPlV8TLPvWqJCwY0pEc13QEMrFVlaMwdtPmWDn/yRpUggA9aRAXzvm+dUfOmtZT/61GaONhowiK/4qAenklVoVYEnFZRVMS3VIM5eZbUkil8oY/4lfpD/6Ooc1PC5Fm5vPJGhJ035R6OOScEUXyvb8MXIPOBnWsqRzFNmngu1sE5XQfbFDhmi3xYB+jSWjvzqd1z6zJK9li6GcomRZVCQkCb53mZJcC30jbZkr1edpsHOv1qpEihisroTVqxOKXgn9jFZb9CWd28Y1UvzobZ0NR0F8rHtgQmCRfLHdOQ8MZcbmWs6NqNctq7MPHipyI4CTE92Zq7cRjwObolAOJNoyRLezvDCvzr/KTxX/emtNCJ8UMqplQqX1/hRGVjxg4pNHz4Kt886yWo3+urBFV6uJXad/UIRndw2R2pkKEAGsRIDk8TGK8AXozVuhe9bp+m1Lk1zzKbuMD7KqgDdF5uYKb66654QFb2/9vEDfgqtSWr6/SQGSaZNzH+5kn+5q+MkJeX34FtCIhTCrbFwlJJig2+1eW9/jlXG1pQkPZLi+zbtNi+Z8B3FmX5X8E3rmeplcZqjheoO+k+SPb1UCM0E25Hcsv4yNCeIX4KNEL+kBG+NOVZi9/0XYG7Jae3bMpA4vL0VnaS0/f18jSjKiD0f3JYMM+PoK9ds4n2r5UN7L3Z3fHg4v1br/4/v0eTR+R0cf/wH);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="638" y="483" width="12" height="17" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="140">
<mxCell style="vsdxID=181;fillColor=#2d5967;gradientColor=none;shape=stencil(lZTdUsIwEIWfprdnkt38XqO+ByMgHZEyBRTf3mBSyoah6F1ycpovOdluw7P9er5bNqT2h757X361i8O64aeGqN2ul317SKOGnxuerbp++dZ3x+0iz3fzs/M8+ug+zzuc8ndWwYbzV6S+s6J+Zy/ZvGm3V2Zj4PR98+uxz1vrvMiMYIq9SOqinCgrlExcTEVixMHEWdEOyhVTkQK8n4IHUJRszXCSzSBJ1vEWDVuRySFMkZXEphTIS66GC9WVI4KTYDdeoCjGwtMUWStElnSbzm8rekAVuHWDMsDJgyu6jWBBl7WhPdwQ1HCaiVIKDGv+bvcGloX95jg3BUCos3CXTYYsQiojW4VBMF6mERm6fgs/7HUHH/34yEUyBEfVWygl6eyhSNJHTxFYg+0kO1VTxU61rrRkx/Q3V4WgLVRVCcGCg+RH6Em8d9BV9IwqeJd+RiPhSoKvOxM/bE3/6mMPzGkwtstVu9nkbnu9XrfXJOXWzM8/);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="643" y="492" width="2" height="4" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="&lt;div style=&quot;font-size: 1px&quot;&gt;&lt;p style=&quot;text-align:left;margin-left:0;margin-right:0;margin-top:0px;margin-bottom:0px;text-indent:0;vertical-align:middle;direction:ltr;&quot;&gt;&lt;font style=&quot;font-size:16.93px;font-family:Oracle Sans;color:#000000;direction:ltr;letter-spacing:0px;line-height:120%;opacity:1&quot;&gt;Private&lt;br/&gt;&lt;/font&gt;&lt;/p&gt;&lt;/div&gt;" tags="Background" id="141">
<mxCell style="verticalAlign=middle;align=left;overflow=width;vsdxID=183;fillColor=none;gradientColor=none;shape=stencil(nZBLDoAgDERP0z3SIyjew0SURgSD+Lu9kMZoXLhwN9O+tukAlrNpJg1SzDH4QW/URgNYgZTkjA4UkwJUgGXng+6DX1zLfmoymdXo17xh5zmRJ6Q42BWCfc2oJfdAr+Yv+AP9Cb7OJ3H/2JG1HNGz/84klThPVCc=);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="618" y="524" width="118" height="20" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="&lt;div style=&quot;font-size: 1px&quot;&gt;&lt;p style=&quot;text-align:left;margin-left:0;margin-right:0;margin-top:0px;margin-bottom:0px;text-indent:0;vertical-align:middle;direction:ltr;&quot;&gt;&lt;font style=&quot;font-size:16.93px;font-family:Oracle Sans;color:#000000;direction:ltr;letter-spacing:0px;line-height:120%;opacity:1&quot;&gt;Endpoint&lt;br/&gt;&lt;/font&gt;&lt;/p&gt;&lt;/div&gt;" tags="Background" id="142">
<mxCell style="verticalAlign=middle;align=left;overflow=width;vsdxID=184;fillColor=none;gradientColor=none;shape=stencil(nZBLDoAgDERP0z3SIyjew0SURgSD+Lu9kMZoXLhwN9O+tukAlrNpJg1SzDH4QW/URgNYgZTkjA4UkwJUgGXng+6DX1zLfmoymdXo17xh5zmRJ6Q42BWCfc2oJfdAr+Yv+AP9Cb7OJ3H/2JG1HNGz/84klThPVCc=);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="609" y="541" width="135" height="20" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="143">
<mxCell style="vsdxID=187;fillColor=#FFFFFF;gradientColor=none;shape=stencil(lZbLctswDEW/RlsMCfC5TtP/yDRO7akbZxyndf++cMUnLFHpTqYBHhC8vORED+/7p7fdhOr9cj792P0+PF/2E32ZEA+v+935cOGviR4neng5nXffz6eP1+f599vTLfL29fP06zbDdc4zDpy+ZaH6M49opf79/jqHf/s4z/E6JShQJiXoPkNdcR4gAhdTTBqKEdCnKJqHMIKiFJWGYgBlR3RECKGnRwdker6O4AWeK3I9vgnK9G7hx8Nr06cmeh6wBpxZj1f/FQzY74FVEMOoDwqC7dtgNETbt8EC9V0gA9qKLiBg7NtAw/3XBN736NtGotgBA0HA0YOVW2ABbQ/nopMe1/i83brn60ZbGaZACz4XHoUAbe17rkiDcUMBeiASeAUmCnwscisKBC9WT9x6IcAcswLnDCfgzbT18OE2uzTj02zWjt5kGyDcZBuw8txvwV1R2ADOApPsosvMDkBCcR7CUHDNwcpsAi30xjYaxMIbVSSSRdBixweOw56B2WgXgmWZDkEJZ1Rlglym444IZ2STEL7sMZ+BeiwIzLBJnOOEKzTnLaE8gRLXAvtEVnTBE1jRJfaJ1Lg1PLPkpWSLRRa+AS/5vjSk8BdcYetaChqsXH4oxpr5wVevzUZRPOBaLiFwocdjmWpRKG1GSbCD6ybqaqHCipbvPtXfZoZ1PKrHlqOZE0qXlxNYF309Jmtnpd/tCnQ5Llrsd2DVCrU7DV6L/a6JueE16vN6a2fGeyUP+FTXssbv+9VmpJVuGWibokvXjSxYladUsVAHol5H+W1S7XvLQ22slp/x95e2ZV8NPb4+Len+vUp9zGKvNt+3/FHfxi+H43F+Wrf/y7c0D83vcHr8Cw==);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="781" y="466" width="61" height="53" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="144">
<mxCell style="vsdxID=188;fillColor=#FFFFFF;gradientColor=none;shape=stencil(pVnZcls3DP0avXJIgutzmvxHJnFqTV07ozit8/eFei+3A11SnrxJFMBDYjsAdaIPPx4/f384Wf3j9fLy18O/56+vjyf642Tt+fnx4XJ+5U8n+niiD99eLg9/Xl5+Pn/dvn//fJW8fvr75Z/rDm+bnidlrkpW/9oWrKL0/8KnTfzLz8smb7bfg1be7RoGVPSb3YWiMn4X2pd4ZVd7o31FKxd2oX3JOBXDDJ11UhzRjVcO4KNROo7wJiiTAd+okAE/qBCn+FYZA/hRXJ+lMgF+UskAPinvAT+v7s8CHvCrTsVPXhHgWwaLI35KytGIb7Oyucd/Oj93wZL45+KxbYVK+NyUz2yaMbochhcoOBVoVKjeva1glLGjgim3OjBh5gAeLeiNymBAqxLEL8e9xQCWDmxSxwFUQ8PInVsAVcNN8GUAB31sq168RkAy09N2KqZaPMTxtCErDadlR2o/njaQCLeMzkV8zwdMgB8EvmdvZcDvknIHc0E5sFaTOsB3WmnEl+lOfFnE707ZcgujZXl/ztoM5a63bMlto2wCfCPxOyk68P8YML0GsMVteWXju8Qd7K5VnIZj46riH0k9UVkofQSBaEgFNxqCTGGHA2QmGQuJQFrwDtOHx7qbRN1lqQz4NiyKFpMMBoJla9llIPDBI/AOg2lIRDYJTfH5Gkh70vRsEYO0y6UV4In9DtdvUkeO7+qxkTsXfK4wd+BTqxZ343cZPsF3Cln/BrxTSPpLdO5dwho91g6jg8emh3ItH7UKLXoOTjIP8F4wlovK2xGdfRZGcC7USFi8Yo9LRK+w48BhV/K4v2AYKxhOBvYNgrGCX7pOmkDm9llXnTc06q7Rx7YyoXovautMmAuZ+Q3hRcdz7eAgfLTKQGFMtJC5sl/lADcQPbGE2HHmeORPQZ/k20RT6LMGc5e22LwUmftrRrftpHWQ2LJiLcGpcfExuOxyb4DbRqh3gls5pEjwK1FjsZYtrpW1ckHUuU0QZYna6NVYMWOtrKNPI2pXm6ia0r6E7hG+E9FuZcfYtyCtUcABkSkW+4SV6XnwA7eTvD3P0MBTTvIU+wLKmddw97Ey6KEqeOwopsIeGr9VXzmXv7rS/p5CqmXiOM6qSolxyYrcagXMMDmZsFcNplgqdeE4wRNWly6CW1nV2BBqPaLfmIuKzFGQiT68bVoYM8u6JhOMR8Lk3nnxEBSh4W+8wFB9FKn43TsRSSk6cDzM0J3Gfh674KDU9bsGdeqBs/SU940mi3W4R4ADOxwd4IHEtsGhdmrGTRS4gI254OZTIts1vQ8hYSfj3NToNbrufESS++NgCQq6scGeXdiSCwULbebCRrcUZvWxD4eqME+MFFSEtworH7b4qpCXJoo+PXKviSVh9VTCOgZfZuVTTf9kdjyhshQh8XtoM0Ve0uhzM8/i8hhdpJcPz/Ldrun073Y4BbEUlr3+da8N4POXuP6NrXI9zv9cVwx4Vwvj9oNE4fpjUy3GDv7Q/ln4dn562v6Y6H/HfyJ4afsXgz7+Bw==);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="780" y="465" width="63" height="55" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="145">
<mxCell style="vsdxID=189;fillColor=#2d5967;gradientColor=none;shape=stencil(pVrbctw2DP2afeWIN5B8TtP/yDRO7alrZxyndf6+2llRhHCw4O70bS2DPCCIg5t0ip9+PH75/nAKy4/3t9e/Hv59+vr+eIq/nUJ4enl8eHt6X3+d4udT/PTt9e3hz7fXny9fL39//3KWPP/6+/Wf8w4fl3XJxXxeFJZf24PqyuXJ7xf556cXJu/JNfp/C3J0wViw3CXszv/i8ovQ5o+fb5fz+r6ilm3F9iRtO3yEbYux5/Ykpq7E8hG3Y/lxrO1RXISqEtpHJ6BDGxtvWD4fsUNB7OxSOmJPgMnlcET27Qi7mz0MXQVsV+PXMIENu6oe2xG2jV3DsJowd4MTx+gWceI2uefIrrGfeRHQxfkyha4u1SN0cSZyCmPbbgk4dmK2CbsvC+wcXI1H7MVCzsxMnssP317pRAJWYDKJWzDJu6WZmFSHVl2NI2bxwz+7c0ULtDD2MXIJG5cA9+uTk9hoY29e74odvcDOQGNa/bMK7CyxCX3Lk2nsOi5nYMtzcykLW1LKPjchoaoTyLm5LCwOBlccLNmEUtw6AXIEJ0NkvOoJcmIXdA05JefjEZkgdibGkm7txcZeA0+TfhbBz9YwRyJjrD4u4WMY0SbuUnb05oG546cjeFAcDay+WgOOnu2jhwCJwxdpd4++FjzmSmbFXSEL2yPFlKy1ZtQ9CITdxtLsHl09TjyuyhIhFrhzlv67DwZpdVbX9Sd2nTYvBI+FY2GEk5WKClCgEJwsqMwLNpWaswCq1GgiX2D/ZJpoTRXk71rA8totGhFqZJ/g7juYL4BbDqLc9+YVy/Na0mmkSEmha9rfo8xE+njQDKrHen1vnkn2CtVSPR+7mlgMUZZzNr3J3JuAWNb2xNLVTarTMjLMHpLs2nutCTvE9UZndXYSITRgCC0iigXpIhBAF5ckOJbfFZu8NU/J5FELFAzRW4RsYKtzirT1xSZp1Vcaq7JI0lNQBX2lsfwMXKnp+LY932CfFMoRmdNnb5wMH5+w7chNvxzZsxZTlsM2iLox2IkGouI2EtCl85ggbNLZ3r5Bap11zhXKgIQ1CM+PYbfrzCeGyDWfYHWVx207exP0NxnZS6wD62VIsQiUwVbTgQ6xrDz0VXqiJPSlZRptaAZemRk8btunCixd7MY6IrcIraCV3Bqj5E1OeCeHpuJHhhKrsrcnMqlAG43tBSVws4Jxj25p4WlayYn83bypLJPvkyzRCxUxQGsEHTfLvP3Wq4XKydBRMY8qne9+e3s3QE7OOBZzqhMxCIxNe8ODs6SG87OAMw771AH5zGw5mj8ZfvYLiSgStUsWHt9kNQo+D61iA/LHCuTn5+mWA99QrBTt7hxnIhEnYJF5ELs12SuCd0Q5dYfBCE6UIw4nEqtMDfgCwwnAF70q9EnTkjQVGMqONVzhIrjEpa7bawYfcWCpwAdMqmkBV4kw0bDKFS7epWdze0xqSUS7qIzblKkXGApaGbinNoKkx417zMO0oMBnxVI0GTUmCLmdlzu2ckkNRo34iiabGSYrVYxHQuHMK3sY/YDVs5+MGpWSz8uQq4T7jBWUEsjkDAPcDWNJkm+nRBBLVWEFFppWCcAWbIepEzUTGIkWnMdiqUcR7kcORMl825EjTKH3PcfgXQZ6CkdYwmEkmS6pNIf7nh0DA7w8LeEAdlob8tHAqA1lRc/M2B/NKy6ajJ6VmouU+IPhj8qchzR5c6jwkGDurfCQMPYpPJwdXeEhCWzJQ6zFkYdw2xMelsmEXOFhwf5U4WFpJ3k/koebyO2+UUSgUoZahYAQ8EI5mVPheXN194JZ+1btd77Iz4pdr0LQii9oFI7WWeGtXESVAREZWvGTBqRoncUmhaNVKbyRpFUERoWh04MrFK1YJUiWViVNA02PNz7haJvNRRSSNpxq8qq4d3FZa08kT5scdoCH4nShKS/pCwSJJrOm0r7Kw8/YZ5l2Jr3+GJ9ufXt6fr58+cX/Lz/1Wh9dPhOLn/8D);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="781" y="467" width="60" height="52" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="&lt;div style=&quot;font-size: 1px&quot;&gt;&lt;p style=&quot;text-align:left;margin-left:0;margin-right:0;margin-top:0px;margin-bottom:0px;text-indent:0;vertical-align:middle;direction:ltr;&quot;&gt;&lt;font style=&quot;font-size:16.93px;font-family:Oracle Sans;color:#000000;direction:ltr;letter-spacing:0px;line-height:120%;opacity:1&quot;&gt;Oracle Autonomous&lt;br/&gt;&lt;/font&gt;&lt;/p&gt;&lt;/div&gt;" tags="Background" id="146">
<mxCell style="verticalAlign=middle;align=left;overflow=width;vsdxID=191;fillColor=none;gradientColor=none;shape=stencil(nZBLDoAgDERP0z3SIyjew0SURgSD+Lu9kMZoXLhwN9O+tukAlrNpJg1SzDH4QW/URgNYgZTkjA4UkwJUgGXng+6DX1zLfmoymdXo17xh5zmRJ6Q42BWCfc2oJfdAr+Yv+AP9Cb7OJ3H/2JG1HNGz/84klThPVCc=);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="736" y="524" width="287" height="20" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="&lt;div style=&quot;font-size: 1px&quot;&gt;&lt;p style=&quot;text-align:left;margin-left:0;margin-right:0;margin-top:0px;margin-bottom:0px;text-indent:0;vertical-align:middle;direction:ltr;&quot;&gt;&lt;font style=&quot;font-size:16.93px;font-family:Oracle Sans;color:#000000;direction:ltr;letter-spacing:0px;line-height:120%;opacity:1&quot;&gt;Database Standby&lt;br/&gt;&lt;/font&gt;&lt;/p&gt;&lt;/div&gt;" tags="Background" id="147">
<mxCell style="verticalAlign=middle;align=left;overflow=width;vsdxID=192;fillColor=none;gradientColor=none;shape=stencil(nZBLDoAgDERP0z3SIyjew0SURgSD+Lu9kMZoXLhwN9O+tukAlrNpJg1SzDH4QW/URgNYgZTkjA4UkwJUgGXng+6DX1zLfmoymdXo17xh5zmRJ6Q42BWCfc2oJfdAr+Yv+AP9Cb7OJ3H/2JG1HNGz/84klThPVCc=);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="742" y="541" width="270" height="20" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="148">
<mxCell style="vsdxID=193;fillColor=#312d2a;gradientColor=none;shape=stencil(pVTRdsIgDP0aXnMggQLPTv/DM+vKWdd6at3c348O1MK0Xbe3NL0395JAGK2O1fZQMuTHvmtfyw+36ytGTwzRNVXZud5HjNaMVvu2K1+69tTswvdhOyCH6K19HyqcA08qwGJgIf8MGWuhMN+ZTSA8n7rAEJGiwZhIiSnBeUicMSQUgsCIwRxDESNBy4ihB9q1a0ZmrQYyqVkJEqfMXlUvVj1DpF5vkJiwBMqkXsfKdEWhmpL2Slpn4giWUnXLQWWdGqOimNFgxYx+2ivF00bpS827aIHAbUqYPR5IM3s6f7to9nAIBS7sbT7U0cQwReCPsT9WzS9T2qNfPJXFhOwxElCC5xPFc6yvHUd4/z4UoP+FX+Llz1gf3DbV3tV1WHTj//lm86mwFWn9BQ==);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="803" y="296" width="15" height="128" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="149">
<mxCell style="vsdxID=195;fillColor=#FFFFFF;gradientColor=none;shape=stencil(nZBLDoAgDERP0z3SIyjew0SURgSD+Lu9kMZoXLhwN9O+tukAlrNpJg1SzDH4QW/URgNYgZTkjA4UkwJUgGXng+6DX1zLfmoymdXo17xh5zmRJ6Q42BWCfc2oJfdAr+Yv+AP9Cb7OJ3H/2JG1HNGz/84klThPVCc=);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="968" y="197" width="78" height="31" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="&lt;div style=&quot;font-size: 1px&quot;&gt;&lt;p style=&quot;text-align: center; margin: 0px; text-indent: 0px; vertical-align: middle; direction: ltr;&quot;&gt;&lt;font style=&quot;font-size:14.82px;font-family:Oracle Sans;color:#312d2a;direction:ltr;letter-spacing:0px;line-height:120%;opacity:1&quot;&gt;Automatic &lt;/font&gt;&lt;font style=&quot;font-size:14.82px;font-family:Oracle Sans;color:#312d2a;direction:ltr;letter-spacing:0px;line-height:120%;opacity:1&quot;&gt;backup&lt;br&gt;&lt;/font&gt;&lt;/p&gt;&lt;/div&gt;" tags="Background" id="150">
<mxCell style="verticalAlign=middle;align=left;overflow=width;vsdxID=196;fillColor=none;gradientColor=none;shape=stencil(nZBLDoAgDERP0z3SIyjew0SURgSD+Lu9kMZoXLhwN9O+tukAlrNpJg1SzDH4QW/URgNYgZTkjA4UkwJUgGXng+6DX1zLfmoymdXo17xh5zmRJ6Q42BWCfc2oJfdAr+Yv+AP9Cb7OJ3H/2JG1HNGz/84klThPVCc=);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="972" y="197" width="88" height="43" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="151">
<mxCell style="vsdxID=198;fillColor=#FFFFFF;gradientColor=none;shape=stencil(nZBLDoAgDERP0z3SIyjew0SURgSD+Lu9kMZoXLhwN9O+tukAlrNpJg1SzDH4QW/URgNYgZTkjA4UkwJUgGXng+6DX1zLfmoymdXo17xh5zmRJ6Q42BWCfc2oJfdAr+Yv+AP9Cb7OJ3H/2JG1HNGz/84klThPVCc=);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="723" y="322" width="175" height="14" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="&lt;div style=&quot;font-size: 1px&quot;&gt;&lt;p style=&quot;text-align:left;margin-left:0;margin-right:0;margin-top:0px;margin-bottom:0px;text-indent:0;vertical-align:middle;direction:ltr;&quot;&gt;&lt;font style=&quot;font-size:14.82px;font-family:Oracle Sans;color:#312d2a;direction:ltr;letter-spacing:0px;line-height:120%;opacity:1&quot;&gt;Autonomous Data Guard&lt;br/&gt;&lt;/font&gt;&lt;/p&gt;&lt;/div&gt;" tags="Background" id="152">
<mxCell style="verticalAlign=middle;align=left;overflow=width;vsdxID=199;fillColor=none;gradientColor=none;shape=stencil(nZBLDoAgDERP0z3SIyjew0SURgSD+Lu9kMZoXLhwN9O+tukAlrNpJg1SzDH4QW/URgNYgZTkjA4UkwJUgGXng+6DX1zLfmoymdXo17xh5zmRJ6Q42BWCfc2oJfdAr+Yv+AP9Cb7OJ3H/2JG1HNGz/84klThPVCc=);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="728" y="322" width="311" height="17" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="153">
<mxCell style="vsdxID=200;fillColor=#312d2a;gradientColor=none;shape=stencil(pZVRc4MgDMc/Da85SFTkuWu/R2+105vTnrVb9+2HQ63gCcf5hvEX8k8ChNHhXp5vBUN+77v2s/ipLn3J6I0hVk1ZdFWvV4yOjA7Xtis+uvbRXMz37TyQw+qr/R52eBo/DpQNTsh/jUEgUPJvORm+rhovzyFTHn4HHKtkL29XRinIHQeCVCwd3h+d8RBTelMGYg6RS2N6ostMBgE5jgytQ9NMCbmdnJKQSkusrnTq06o9ErLVclupJtCWyh2ZErgjMxg1A4VOjQCVE3gBjaa5Vb7gCMpzuHRRRcx5WQYY9xcgI5NbCvdkR0AqnF4CPPHGfzVMzC5Zvurq3HdcU7Q+T1vhV+UNXZdoB/epkmjz41XauO4uHXgedsBxOvbQocfb36BM7KEDb3fsYIjRHoD14jXfrlVdm/G4/O/OQ20ys5SOfw==);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="282" y="228" width="294" height="63" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="154">
<mxCell style="vsdxID=201;fillColor=#312d2a;gradientColor=none;shape=stencil(pZvZdtNAEES/xq99ZpFmeYbwHzkQiA8hyXESlr9ngpAcdYNK5XlznLrqqrKszdIhvnu6vX68OQT39Hx6+Hrz4/jp+fYQ3x9CON7f3pyOz+3VIV4d4rvPD6ebL6eHl/tP09+P16/K11ffHr6/LuHnxDmJ5RUK7tf0Rqky+D/vfJj0d8f7LX11UuKG/nIx66Rbv26mVinjGigK+Phymgg/CbybE/iFqGl662fQmrDYKLMm2tFxaW4rXM0ypHXVLd24ZbYh0a/tLt5ms03jytruWTM7S1KjMgtnJ8llPbsWKVVNf6M6G6oVz29tDBtlVXHrssCq83bEX8DPa9P+hGVZ+bcS5rrM2kjYVDGDT9ep+bk1HMznu6wDwaqiXbn+N980jL47NKC3W3mtd1vffKUNkuverRCjZTxcrAU9FLVigkX7KHXjg3SXi0kjnXLQiq8yJmYNGcWPe5NSYtZJtx40E9s7W7tko08Sw96wnJh10qsHzQxe6ubxhNZn2b0WUFrWR68e9DJGcVubRKMvkra+2h1i1kmvHjSTBgnMdzUte70dYTkx66RXD5rJ4+YRmd28e3H7TxQYMeukW4/210nS1ibS6MFZToeYddKrR2eiy7H+P5fvxccuPToZZc90Sf9Yv+4nSKLyDmQ/Rg/yGj+sHvjB+nU/o6SBWX4W36cHeY0fVg/8YP26n0Iu37v5qPZiACQ2jlg9MIT164a8l8QljmxFBgCRrSUaQJYwoFoaJCVqQhLfCaDQxhINIEsYUC1ldkIVn/sAFNpYogFkCQNqn+YkUaHbXoFryQJoN2Us0QCyhAHVUpzPifZOGMV3Aii0sUQDyBIGVEuJnVDE1z4AhTaWaABZwoBqqUqiQkdPtmQBFNpYogHUEgbWLcXAttTOh7v0ILI1RAPIEQZUR6NQm72YyYq0HiXWflg98gP1qp8i2TMDBiehE0CRjSUaQCVhYN3S4NmWogRqPbIACG0t0QCyhAHV0iCZC53YlgyAQhtLNIAsYUC1lOcL/HsnVAmdAAptLNEAsoQBdZ3EkRPGIIG7MmEAdOnDWKIBZAkDqqUomQs9si0ZAIU2lmgAWcKAaimZi7xgQpHQCaDQxhINIEsYUC1VckLy868rFwMotLFEA6glDKxbSkEyF3pgWzIACG0t0QCyhAHVUjsKpQ5bUzuM7gRQaGOJBpAlDKiWCjkhO7IlC6DQxhINoJYwsG4p+/PdZ/tCt0PpTgCEtpZoAFnCgGppYCe0Q2nq1NsCKLSxRAPIEgZUS3m+T27vhMq2ZAAU2liiAWQJA+o3uGaAGVCCUIe5Ro9+UdN+WD3yA/Wqn0gufzzfv3ohgBJrR6weGYJ61VCSwiUubEUGQJGNJRpAljCgWqrLTcz7JlQ/36h4MYBCG0s0gFrCgHrCIbAtDRKp7ZEFQGhriQaQJQyolsbltv2dEzLbkgFQaGOJBpAlDKiWihTqWkOtMlI7Wwug0MYSDSBLGGgvzo9efT7e3U1Pbr39v35Uq701PeYVr34D);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="295" y="390" width="281" height="74" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="155">
<mxCell style="vsdxID=202;fillColor=#312d2a;gradientColor=none;shape=stencil(pVTRcoMgEPwaXm/wDgSe0+Q/MompTK1mjGmTv68WNGBGaaZv3LLH7sFxjDaXcn8uGPJL1zYfxbc9diWjN4Zo67JobdevGG0ZbU5NW7y3zbU+uvi8H5jD6rP5Gk64uTwOaIYk5HcHCAmY/yI7xz9cW5eQ+QxP96FQoLWDbhgzfCgRMvQMelL1iBSgRChb2TqwKYGLyKZRQHrNpgSi2GnGeexTgo6dPhjeVQ585jOpm4/7k67pS1OxckDyiOEgMSWuFZhs+ZIy0Cq6JMmXycHpPhtH5O+VgdCpwvp2olRdCDmuv+VM+Okhp7eOW3CUDNpnQTK+nPSveJUf/7qp0UY6Aa2drvE/dJmDWumamZfX2OtWUux+8RhMJ1tVbq6F+/NB1kNuCNL2Bw==);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="105" y="322" width="141" height="15" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="156">
<mxCell style="vsdxID=203;fillColor=#312d2a;gradientColor=none;shape=stencil(nVTRcoMgEPwaXm/gDgWe0+Q/MompTq1mjGmTvy8WNYATafqG6y673MEx2lzK/blgyC99134U39WxLxm9McSqKYuu6u2K0ZbR5tR2xXvXXpuj+z7vB+aw+my/hh1uTmcMKDGokN8dkklQ8hfZOcHh2jmFcATB+SgYgQxBoINuGHNGQCrQeuTQ0nqEZAaY+9511fhhJZg8CIuQ41pWq8hVmJaHSS0Dw6g8iklgophJV5oIjxoBUmTskSYIZFyjpblA4GalRhoEhQ3lK2xvf4doNSF/P5zhkGH6dPZiqeTxjALSiZZG9vNl83o6dz2+kLO1d5eeWUe1Sj+VlwWLxyh0IJAE9NyA/5ub5aBWg0c5XuWvZ0nz7eIxsU5VXbuB5/+PJ5yF3HSk7Q8=);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="106" y="502" width="141" height="15" as="geometry" />
</mxCell>
</UserObject>
<UserObject label="" tags="Background" id="157">
<mxCell style="vsdxID=204;fillColor=#312d2a;gradientColor=none;shape=stencil(pZTRboMwDEW/Jq9WYgeSPHfdf1QrHWgMKkq39u8blkzFaQGhviXmmHvtJBa0OZW7YyFQnvqu/Sp+q31fCnoTiFVTFl3V+5WgraDNoe2Kz649N/uwP+4Gclh9tz/DHy4hL9Ng9JCF8hoiEjT9Bd4D/3HuQoKKGQgKY0YMybC9YNhqA9ZGAjlBkcgA80jQc9m6akY2EXJkLg1onHMpuUPvSHOTkhu0kGnucSRJ/4wzs50BJC7rIFH1gaQzdySqKATp5oV5bzLJOoNg8mnYGnCK8UtVOQkZLpXlb5FZqMsZILuuoUomxzg6JUwRfDjpaeH09iQNXXwTa3n+5jQBMVwBqunfP+Kx5udmcjCv0CutvIb7xX0wHaq6DnNt/D0dZD4UhiBtbw==);strokeColor=none;spacingTop=-3;spacingBottom=-3;spacingLeft=-3;spacingRight=-3;points=[];labelBackgroundColor=none;rounded=0;html=1;whiteSpace=wrap;" parent="1" vertex="1">
<mxGeometry x="263" y="390" width="15" height="96" as="geometry" />
</mxCell>
</UserObject>
</root>
</mxGraphModel>
</diagram>
</mxfile>

View File

@@ -0,0 +1,396 @@
<svg width="1168" height="576" viewBox="0 0 1168 576" fill="none" xmlns="http://www.w3.org/2000/svg">
<g id="autonomous-database-db-at-azure-diagram">
<rect width="1168" height="576" fill="white"/>
<g id="OCI Section Boxes">
<rect x="1008.5" y="0.5" width="159" height="575" rx="3.5" fill="#E4E1DD"/>
<rect x="1008.5" y="0.5" width="159" height="575" rx="3.5" stroke="#9E9892"/>
<text id="Availability Domain" fill="#312D2A" xml:space="preserve" style="white-space: pre" font-family="Oracle Sans" font-size="16" font-weight="600" letter-spacing="0em"><tspan x="1041.63" y="21.816">OCI Services</tspan></text>
</g>
<g id="Azure Cloud boxes">
<rect x="0.5" y="0.5" width="895" height="575" rx="3.5" fill="#ECF3FB"/>
<rect x="0.5" y="0.5" width="895" height="575" rx="3.5" stroke="#0078D7"/>
<text id="Azure Region" fill="#312D2A" xml:space="preserve" style="white-space: pre" font-family="Oracle Sans" font-size="16" font-weight="bold" letter-spacing="0em"><tspan x="8" y="21.816">Azure Region</tspan></text>
</g>
<g id="Availability Zone">
<rect x="8.5" y="32.5" width="879" height="535" fill="white"/>
<rect x="8.5" y="32.5" width="879" height="535" stroke="#0078D7" stroke-dasharray="2 2"/>
<text id="Subscription" fill="#312D2A" xml:space="preserve" style="white-space: pre" font-family="Oracle Sans" font-size="16" font-weight="600" letter-spacing="0em"><tspan x="16" y="53.816">Subscription</tspan></text>
</g>
<g id="Subscription_2">
<rect x="136.5" y="64.5" width="743" height="231" rx="3.5" fill="#DAE8FC"/>
<rect x="136.5" y="64.5" width="743" height="231" rx="3.5" stroke="#0078D7"/>
<text id="Availability Zone_2" fill="#312D2A" xml:space="preserve" style="white-space: pre" font-family="Oracle Sans" font-size="16" font-weight="600" letter-spacing="0em"><tspan x="441.102" y="85.816">Availability Zone 1</tspan></text>
</g>
<g id="Subscription_3">
<rect x="136.5" y="328.5" width="743" height="231" rx="3.5" fill="#DAE8FC"/>
<rect x="136.5" y="328.5" width="743" height="231" rx="3.5" stroke="#0078D7"/>
<text id="Availability Zone_3" fill="#312D2A" xml:space="preserve" style="white-space: pre" font-family="Oracle Sans" font-size="16" font-weight="600" letter-spacing="0em"><tspan x="440.047" y="349.816">Availability Zone 2</tspan></text>
</g>
<g id="Azure VNet">
<rect x="145" y="106" width="246" height="445" fill="white"/>
<rect x="145" y="106" width="246" height="445" stroke="#706E6F" stroke-width="2" stroke-dasharray="4 4"/>
<g id="VNet icon">
<rect id="White Vnet BG" x="339" y="103" width="45" height="6" fill="white"/>
<g id="Icon Master">
<g id="Azure_VNet">
<g id="Group">
<g id="Group_2">
<path id="Vector" d="M370.294 108.545C371.725 108.545 372.884 107.386 372.884 105.955C372.884 104.524 371.725 103.365 370.294 103.365C368.863 103.365 367.704 104.524 367.704 105.955C367.704 107.386 368.863 108.545 370.294 108.545Z" fill="url(#paint0_linear_16122_355283)"/>
<path id="Vector_2" d="M362.125 108.545C363.555 108.545 364.715 107.386 364.715 105.955C364.715 104.524 363.555 103.365 362.125 103.365C360.694 103.365 359.534 104.524 359.534 105.955C359.534 107.386 360.694 108.545 362.125 108.545Z" fill="url(#paint1_linear_16122_355283)"/>
<path id="Vector_3" d="M353.955 108.545C355.386 108.545 356.545 107.386 356.545 105.955C356.545 104.524 355.386 103.365 353.955 103.365C352.525 103.365 351.365 104.524 351.365 105.955C351.365 107.386 352.525 108.545 353.955 108.545Z" fill="url(#paint2_linear_16122_355283)"/>
<path id="Vector_4" d="M355.748 116.316L354.154 117.91C353.955 117.91 353.557 117.91 353.357 117.711L342.398 106.752C342 106.354 342 105.556 342.398 104.959L343.993 103.564L355.748 115.32C355.948 115.519 355.948 115.918 355.748 116.316Z" fill="#50E6FF"/>
<path id="Vector_5" d="M354.154 94.1992L355.748 95.7933C355.948 95.9925 355.948 96.391 355.748 96.5903L343.993 108.346L342.399 106.752C341.801 106.154 341.801 105.357 342.399 104.959L353.158 94.1992C353.357 94 353.756 94 354.154 94.1992Z" fill="#1490DF"/>
<path id="Vector_6" d="M380.057 103.365L381.452 104.76C382.05 105.357 382.05 106.154 381.452 106.553L370.493 117.512C370.294 117.711 369.895 117.711 369.497 117.512L367.903 115.918C367.704 115.718 367.704 115.32 367.903 114.921L380.057 103.365Z" fill="#50E6FF"/>
<path id="Vector_7" d="M381.651 106.752L380.057 108.346L368.501 96.7895C368.301 96.5903 368.301 96.1918 368.501 95.7933L369.895 94.1992C370.095 94 370.493 94 370.892 94.1992L381.651 104.959C382.05 105.357 382.05 106.154 381.651 106.752Z" fill="#1490DF"/>
</g>
</g>
</g>
</g>
</g>
<text id="VNet" fill="#706E6F" xml:space="preserve" style="white-space: pre" font-family="Oracle Sans" font-size="16" font-weight="600" letter-spacing="0em"><tspan x="153" y="127.816">Application VNet/Subnet</tspan></text>
</g>
<g id="Icon Master_2">
<g id="Services/Object-Storage">
<g id="Group_3">
<g id="Group_4">
<g id="Group_5">
<path id="Vector_8" d="M1059.35 227.286C1057.64 227.286 1056.21 225.857 1056.21 224.143V171.857C1056.21 170.143 1057.64 168.714 1059.35 168.714H1111.65C1113.36 168.714 1114.79 170.143 1114.79 171.857V224.286C1114.79 226 1113.36 227.429 1111.65 227.429L1059.35 227.286Z" fill="white"/>
<path id="Vector_9" d="M1111.51 169.429C1112.79 169.429 1113.93 170.571 1113.93 171.857V224.286C1113.93 225.571 1112.79 226.714 1111.51 226.714H1059.35C1058.07 226.571 1056.93 225.429 1056.93 224.143V171.857C1056.93 170.571 1058.07 169.429 1059.35 169.429H1111.51ZM1111.51 168H1059.35C1057.21 168 1055.5 169.714 1055.5 171.857V224.286C1055.5 226.286 1057.21 228 1059.35 228H1111.65C1113.79 228 1115.5 226.286 1115.5 224.143V171.857C1115.36 169.714 1113.65 168 1111.51 168Z" fill="white"/>
</g>
<g id="Group_6">
<g id="Group_7">
<path id="Vector_10" d="M1098.82 184.572L1102.67 191.286L1098.82 198H1091.13L1087.28 191.286L1091.13 184.572H1098.82V184.572ZM1100.11 182.572H1089.85L1084.72 191.429L1089.85 200.286H1100.11L1105.24 191.429L1100.11 182.572Z" fill="#2D5967"/>
</g>
<g id="Group_8">
<path id="Vector_11" d="M1085 205C1088.7 205 1091.7 208 1091.7 211.714C1091.7 215.429 1088.7 218.429 1085 218.429C1081.29 218.429 1078.3 215.429 1078.3 211.714C1078.3 208 1081.29 205 1085 205ZM1085 203C1080.15 203 1076.16 207 1076.16 211.857C1076.16 216.714 1080.15 220.714 1085 220.714C1089.85 220.714 1093.84 216.714 1093.84 211.857C1093.84 206.857 1089.85 203 1085 203Z" fill="#2D5967"/>
</g>
<g id="Group_9">
<path id="Vector_12" d="M1074.88 186.286L1081.15 197.572H1068.75L1074.88 186.286ZM1074.88 182L1065.19 199.715H1084.72L1074.88 182Z" fill="#2D5967"/>
</g>
</g>
<g id="Group_10">
<path id="Vector_13" d="M1111.51 226.572H1059.35C1058.07 226.572 1056.93 225.429 1056.93 224.144V175.144H1113.93V224.144C1113.93 225.429 1112.79 226.572 1111.51 226.572ZM1059.06 177.286V224.286C1059.06 224.429 1059.21 224.572 1059.35 224.572H1111.65C1111.8 224.572 1111.94 224.429 1111.94 224.286V177.286H1059.06Z" fill="#2D5967"/>
</g>
<g id="Group_11">
<path id="Vector_14" d="M1113.93 173.572H1056.93V171.858C1056.93 170.572 1058.07 169.429 1059.35 169.429H1111.65C1112.79 169.429 1113.93 170.572 1113.93 171.858V173.572Z" fill="#2D5967"/>
</g>
</g>
</g>
</g>
<g id="Icon Text Label">
<text id="IconLabel" fill="black" xml:space="preserve" style="white-space: pre" font-family="Oracle Sans" font-size="16" letter-spacing="0em"><tspan x="1032.12" y="245.816">Object Storage</tspan></text>
</g>
</g>
<g id="Azure Container Registries">
<g id="Azure-Container-Registries">
<g id="Group 1494">
<path id="Vector_15" d="M61.2802 299.272L69.9149 294.025L94.1114 303.134C93.5831 300.783 92.3717 298.641 90.6295 296.977L90.5962 296.81C88.5625 294.845 85.981 293.543 83.1922 293.075C83.0101 288.742 81.1171 284.659 77.9284 281.72C74.7397 278.782 70.5157 277.228 66.1829 277.4C62.6882 277.336 59.2598 278.357 56.3692 280.322C53.4786 282.287 51.2677 285.099 50.0407 288.372C46.3653 288.821 42.9742 290.578 40.4877 293.321C38.0013 296.065 36.5857 299.612 36.5 303.314C36.665 307.481 38.4733 311.413 41.5295 314.25C44.5857 317.088 48.6411 318.6 52.8089 318.455H61.2802V299.272Z" fill="url(#paint3_linear_16122_355283)"/>
<path id="Vector_16" d="M70.0844 295.874L70.1178 310.148L96.4988 315.751V305.812L70.0844 295.874Z" fill="#767676"/>
<path id="Vector_17" d="M70.0856 295.874L62.9484 300.209V313.483L70.1189 310.148" fill="#999999"/>
<path id="Vector_18" d="M82.1255 310.348L84.5268 311.015V303.244L82.1255 302.41V310.348Z" fill="#A3A3A3"/>
<path id="Vector_19" d="M79.7244 301.643L77.3231 300.776V309.08L79.7244 309.747V301.643Z" fill="#A3A3A3"/>
<path id="Vector_20" d="M86.9279 311.648L89.2625 312.282L89.3292 304.878L86.9279 304.078V311.648Z" fill="#A3A3A3"/>
<path id="Vector_21" d="M72.5532 307.847L74.9545 308.447V300.009L72.5532 299.208V307.847Z" fill="#A3A3A3"/>
<path id="Vector_22" d="M94.0975 306.512L91.6961 305.679V312.916L94.0975 313.583V306.512Z" fill="#A3A3A3"/>
<path id="ef0d1b54-a1e7-4cb9-a4e5-8a8518e7c127" d="M65.3818 309.914L64.1811 310.615V301.176L65.3818 300.543V309.914ZM67.7497 299.175L66.5157 299.976V309.147L67.7497 308.48V299.175Z" fill="#B3B3B3"/>
<path id="Vector_23" d="M96.5 315.751L89.2961 318.219L62.9484 313.483L70.1189 310.147L96.5 315.751Z" fill="url(#paint4_linear_16122_355283)"/>
<path id="Vector_24" d="M96.4995 325.923L69.9851 330.959L70.1185 312.315L96.4995 317.218V325.923Z" fill="#767676"/>
<path id="Vector_25" d="M72.5532 327.891V316.051L74.9545 316.351V327.49L72.5532 327.891Z" fill="#A3A3A3"/>
<path id="Vector_26" d="M79.7244 326.69L77.3231 327.124V316.651L79.7244 317.018V326.69Z" fill="#A3A3A3"/>
<path id="Vector_27" d="M82.1255 326.323V317.251L84.5268 317.552V325.89L82.1255 326.323Z" fill="#A3A3A3"/>
<path id="Vector_28" d="M89.2959 325.056L86.9279 325.49V317.852L89.2959 318.219V325.056Z" fill="#A3A3A3"/>
<path id="Vector_29" d="M94.1642 324.289L91.6961 324.722V318.452L93.9974 318.752L94.1642 324.289Z" fill="#A3A3A3"/>
<path id="b9f25eb4-4c88-45c2-bc4d-f992757d7e0e" d="M62.9484 326.694V315.821L70.1523 312.486V331.163L62.9484 326.694Z" fill="#999999"/>
<path id="eb9200a7-4693-4427-bdae-b33ce90ff7f2" d="M65.2158 326.657L64.1486 326.123V316.918L65.2158 316.418V326.657ZM67.7839 315.15L66.5165 315.784V327.39L67.7505 328.024V315.15H67.7839Z" fill="#B3B3B3"/>
</g>
</g>
<g id="Icon Text Label_2">
<text id="IconLabel_2" fill="black" xml:space="preserve" style="white-space: pre" font-family="Oracle Sans" font-size="16" letter-spacing="0em"><tspan x="45.5312" y="349.816">Azure</tspan></text>
<text id="IconLabel_3" fill="black" xml:space="preserve" style="white-space: pre" font-family="Oracle Sans" font-size="16" letter-spacing="0em"><tspan x="31.0156" y="365.816">Container</tspan></text>
<text id="IconLabel_4" fill="black" xml:space="preserve" style="white-space: pre" font-family="Oracle Sans" font-size="16" letter-spacing="0em"><tspan x="36.8438" y="381.816">Registry</tspan></text>
</g>
</g>
<g id="Icon Master_3">
<g id="Azure-service-Virtual-Machine">
<g id="Group 836">
<path id="Vector_30" d="M95.9337 456.537H39.9337C38.8291 456.537 37.9337 457.433 37.9337 458.539V494.582C37.9337 495.688 38.8291 496.585 39.9337 496.585H95.9337C97.0382 496.585 97.9337 495.688 97.9337 494.582V458.539C97.9337 457.433 97.0382 456.537 95.9337 456.537Z" fill="url(#paint5_linear_16122_355283)"/>
<path id="Vector_31" d="M77.9337 470.72V482.368L67.9337 488.241V476.561L77.9337 470.72Z" fill="#50E6FF"/>
<path id="Vector_32" d="M77.9337 470.72L67.9337 476.594L57.9337 470.72L67.9337 464.88L77.9337 470.72Z" fill="#C3F1FF"/>
<path id="Vector_33" d="M67.9337 476.594V488.241L57.9337 482.368V470.72L67.9337 476.594Z" fill="#9CEBFF"/>
<path id="Vector_34" d="M57.9337 482.368L67.9337 476.561V488.241L57.9337 482.368Z" fill="#C3F1FF"/>
<path id="Vector_35" d="M77.9337 482.368L67.9337 476.561V488.241L77.9337 482.368Z" fill="#9CEBFF"/>
<path id="Vector_36" d="M79.9671 508.7C74.0337 507.765 73.8004 503.493 73.8004 496.585H62.0337C62.0337 503.493 61.8337 507.765 55.9004 508.7C55.0813 508.79 54.3249 509.182 53.777 509.798C53.2292 510.414 52.9287 511.212 52.9337 512.037H82.9337C82.9387 511.212 82.6383 510.414 82.0905 509.798C81.5426 509.182 80.7861 508.79 79.9671 508.7Z" fill="url(#paint6_linear_16122_355283)"/>
</g>
</g>
<g id="Icon Text Label_3">
<text id="IconLabel_5" fill="black" xml:space="preserve" style="white-space: pre" font-family="Oracle Sans" font-size="16" letter-spacing="0em"><tspan x="27.0781" y="529.816">Application</tspan></text>
</g>
</g>
<g id="Azure load balancer">
<g id="Azure-icon-service-Load-Balancers">
<path id="Vector_37" d="M239.1 480.566L267.067 452.6C267.253 452.408 267.476 452.256 267.722 452.152C267.968 452.048 268.233 451.995 268.5 451.995C268.767 451.995 269.032 452.048 269.278 452.152C269.524 452.256 269.747 452.408 269.933 452.6L297.9 480.566C298.092 480.753 298.244 480.976 298.348 481.222C298.452 481.468 298.505 481.733 298.505 482C298.505 482.267 298.452 482.532 298.348 482.778C298.244 483.024 298.092 483.247 297.9 483.433L269.9 511.433C269.526 511.8 269.024 512.005 268.5 512.005C267.977 512.005 267.474 511.8 267.1 511.433L239.1 483.433C238.908 483.247 238.756 483.024 238.652 482.778C238.548 482.532 238.495 482.267 238.495 482C238.495 481.733 238.548 481.468 238.652 481.222C238.756 480.976 238.908 480.753 239.1 480.566V480.566Z" fill="url(#paint7_linear_16122_355283)"/>
<path id="Vector_38" d="M275.833 465.333L268.767 458.3C268.693 458.235 268.598 458.198 268.5 458.198C268.402 458.198 268.307 458.235 268.233 458.3L261.167 465.333C261.102 465.377 261.054 465.442 261.032 465.518C261.011 465.593 261.016 465.674 261.048 465.745C261.08 465.817 261.136 465.875 261.206 465.91C261.277 465.944 261.357 465.952 261.433 465.933H265.567C265.615 465.933 265.662 465.943 265.707 465.961C265.751 465.98 265.792 466.007 265.826 466.041C265.86 466.075 265.887 466.115 265.905 466.16C265.924 466.204 265.933 466.252 265.933 466.3V472.967C265.933 473.064 265.972 473.157 266.041 473.226C266.109 473.295 266.203 473.333 266.3 473.333H270.7C270.797 473.333 270.89 473.295 270.959 473.226C271.028 473.157 271.067 473.064 271.067 472.967V466.3C271.067 466.252 271.076 466.204 271.095 466.16C271.113 466.115 271.14 466.075 271.174 466.041C271.208 466.007 271.249 465.98 271.293 465.961C271.337 465.943 271.385 465.933 271.433 465.933H275.567C275.643 465.952 275.723 465.944 275.793 465.91C275.864 465.875 275.92 465.817 275.952 465.745C275.984 465.674 275.989 465.593 275.968 465.518C275.946 465.442 275.898 465.377 275.833 465.333V465.333Z" fill="#B4EC36"/>
<path id="Vector_39" d="M251.833 474.033L244.833 481.133C244.77 481.201 244.735 481.29 244.735 481.383C244.735 481.476 244.77 481.565 244.833 481.633L251.833 488.667C251.885 488.721 251.951 488.758 252.024 488.774C252.098 488.789 252.174 488.782 252.243 488.753C252.312 488.724 252.37 488.675 252.41 488.612C252.45 488.548 252.47 488.475 252.467 488.4V484.3C252.467 484.203 252.505 484.109 252.574 484.041C252.643 483.972 252.736 483.933 252.833 483.933H259.5C259.547 483.933 259.593 483.924 259.636 483.905C259.679 483.886 259.717 483.859 259.748 483.824C259.78 483.79 259.804 483.749 259.818 483.704C259.833 483.66 259.838 483.613 259.833 483.567V479.167C259.861 479.12 259.877 479.067 259.88 479.013C259.883 478.958 259.872 478.904 259.849 478.855C259.826 478.805 259.791 478.762 259.748 478.73C259.705 478.697 259.654 478.675 259.6 478.667H252.933C252.887 478.671 252.84 478.666 252.796 478.651C252.751 478.637 252.71 478.613 252.676 478.582C252.641 478.55 252.614 478.512 252.595 478.469C252.576 478.426 252.566 478.38 252.567 478.333V474.3C252.602 474.203 252.597 474.095 252.554 474.002C252.51 473.908 252.431 473.835 252.333 473.8C252.236 473.764 252.129 473.769 252.035 473.813C251.941 473.857 251.869 473.936 251.833 474.033Z" fill="#B4EC36"/>
<path id="Vector_40" d="M285.433 488.667L292.533 481.6C292.597 481.532 292.632 481.443 292.632 481.35C292.632 481.257 292.597 481.168 292.533 481.1L285.433 474.033C285.381 473.99 285.317 473.962 285.25 473.953C285.182 473.943 285.113 473.953 285.051 473.981C284.988 474.009 284.935 474.053 284.897 474.109C284.858 474.166 284.836 474.232 284.833 474.3V478.467C284.834 478.513 284.824 478.56 284.805 478.602C284.786 478.645 284.759 478.684 284.724 478.715C284.69 478.746 284.649 478.77 284.604 478.785C284.56 478.8 284.513 478.805 284.467 478.8H277.8C277.753 478.8 277.707 478.809 277.664 478.828C277.621 478.847 277.583 478.875 277.552 478.909C277.52 478.944 277.496 478.984 277.482 479.029C277.467 479.073 277.462 479.12 277.467 479.167V483.567C277.462 483.613 277.467 483.66 277.482 483.704C277.496 483.749 277.52 483.79 277.552 483.824C277.583 483.859 277.621 483.886 277.664 483.905C277.707 483.924 277.753 483.934 277.8 483.933H284.467C284.564 483.933 284.657 483.972 284.726 484.041C284.795 484.109 284.833 484.203 284.833 484.3V488.433C284.842 488.499 284.868 488.561 284.908 488.612C284.949 488.664 285.003 488.704 285.064 488.728C285.125 488.752 285.192 488.759 285.257 488.748C285.322 488.737 285.383 488.709 285.433 488.667V488.667Z" fill="#B4EC36"/>
<path id="Vector_41" d="M277.8 482C277.811 480.266 277.336 478.564 276.431 477.085C275.525 475.606 274.223 474.41 272.674 473.632C271.124 472.853 269.388 472.524 267.661 472.681C265.933 472.837 264.285 473.473 262.9 474.518C261.516 475.562 260.451 476.973 259.825 478.59C259.2 480.208 259.04 481.968 259.362 483.672C259.685 485.376 260.477 486.955 261.65 488.233C262.823 489.51 264.33 490.434 266 490.9V494.067C264.865 494.653 263.96 495.604 263.43 496.767C262.9 497.929 262.776 499.236 263.078 500.477C263.38 501.719 264.09 502.823 265.094 503.612C266.099 504.402 267.339 504.831 268.617 504.831C269.894 504.831 271.135 504.402 272.139 503.612C273.144 502.823 273.854 501.719 274.155 500.477C274.457 499.236 274.333 497.929 273.803 496.767C273.273 495.604 272.368 494.653 271.233 494.067V490.734C273.115 490.166 274.766 489.013 275.947 487.442C277.128 485.872 277.777 483.965 277.8 482V482Z" fill="white"/>
<path id="e99c3387-15c3-4f28-bd4b-cb209b430e06" d="M268.533 487.367C271.516 487.367 273.933 484.949 273.933 481.967C273.933 478.985 271.516 476.567 268.533 476.567C265.551 476.567 263.133 478.985 263.133 481.967C263.133 484.949 265.551 487.367 268.533 487.367Z" fill="#5EA0EF"/>
</g>
<g id="Icon Text Label_4">
<text id="IconLabel_6" fill="black" xml:space="preserve" style="white-space: pre" font-family="Oracle Sans" font-size="16" letter-spacing="0em"><tspan x="194.266" y="529.816">Azure Load Balancer</tspan></text>
</g>
</g>
<g id="Azure Kubernetes Services">
<g id="Azure-Kubernetes-Services">
<g id="Azure-Kubernetes-Services_2">
<path id="Vector_42" d="M257.747 278.733L248.256 280.492V293.434L257.747 295.459L267.272 291.642V281.985L257.747 278.733Z" fill="url(#paint8_linear_16122_355283)"/>
<path id="Vector_43" d="M248.256 280.492V293.434L257.847 295.459V278.866L248.256 280.492ZM252.305 292.439L249.617 291.908V281.952L252.305 281.521V292.439ZM256.486 293.202L253.4 292.704V281.321L256.486 280.791V293.202Z" fill="#341A6E"/>
<path id="Vector_44" d="M278.29 278.899L268.799 280.658V293.6L278.29 295.625L287.781 291.775V282.151L278.29 278.899Z" fill="url(#paint9_linear_16122_355283)"/>
<path id="Vector_45" d="M268.799 280.658V293.6L278.323 295.625V279.032L268.799 280.658ZM272.815 292.605L270.127 292.074V282.118L272.815 281.687V292.605ZM276.996 293.368L273.91 292.87V281.487L276.996 280.923V293.368Z" fill="#341A6E"/>
<path id="Vector_46" d="M248.024 296.587L238.533 298.346V311.288L248.024 313.313L257.548 309.496V299.839L248.024 296.587Z" fill="url(#paint10_linear_16122_355283)"/>
<path id="Vector_47" d="M238.5 298.346V311.189L248.091 313.213V296.62L238.5 298.346ZM242.515 310.326L239.827 309.762V299.806L242.515 299.341V310.326ZM246.73 311.189L243.644 310.691V299.175L246.73 298.644V311.189Z" fill="#341A6E"/>
<path id="Vector_48" d="M268.5 296.454L259.009 298.213V311.155L268.5 313.213L277.991 309.363V299.706L268.5 296.454Z" fill="url(#paint11_linear_16122_355283)"/>
<path id="Vector_49" d="M259.009 298.213V311.189L268.566 313.213V296.62L259.009 298.213ZM263.024 310.193L260.336 309.629V299.673L263.024 299.209V310.193ZM267.206 310.923L264.119 310.425V299.043L267.206 298.512V310.923Z" fill="#341A6E"/>
<path id="Vector_50" d="M288.976 296.62L279.485 298.379V311.321L288.976 313.346L298.5 309.529V299.872L288.976 296.62Z" fill="url(#paint12_linear_16122_355283)"/>
<path id="Vector_51" d="M279.485 298.379V311.189L289.076 313.213V296.62L279.485 298.379ZM283.534 310.359L280.846 309.795V299.839L283.534 299.375V310.359ZM287.715 311.089L284.629 310.591V299.209L287.715 298.678V311.089Z" fill="#341A6E"/>
<path id="Vector_52" d="M257.515 314.64L248.024 316.366V329.308L257.515 331.366L267.04 327.516V317.892L257.515 314.64Z" fill="url(#paint13_linear_16122_355283)"/>
<path id="Vector_53" d="M248.024 316.366V329.308L257.615 331.366V314.507L248.024 316.366ZM252.073 328.346L249.385 327.782V317.826L252.073 317.361V328.346ZM256.254 329.109L253.168 328.611V317.195L256.254 316.664V329.109Z" fill="#341A6E"/>
<path id="Vector_54" d="M278.024 314.773L268.533 316.532V329.474L278.024 331.499L287.548 327.682V318.025L278.024 314.773Z" fill="url(#paint14_linear_16122_355283)"/>
<path id="Vector_55" d="M268.533 316.532V329.474L278.124 331.499V314.906L268.533 316.532ZM272.582 328.512L269.893 327.948V317.992L272.582 317.527V328.512ZM276.763 329.242L273.677 328.744V317.362L276.763 316.831V329.242Z" fill="#341A6E"/>
</g>
</g>
<g id="Icon Text Label_5">
<text id="IconLabel_7" fill="black" xml:space="preserve" style="white-space: pre" font-family="Oracle Sans" font-size="16" letter-spacing="0em"><tspan x="204.203" y="349.816">Azure Kubernetes</tspan></text>
<text id="IconLabel_8" fill="black" xml:space="preserve" style="white-space: pre" font-family="Oracle Sans" font-size="16" letter-spacing="0em"><tspan x="238.484" y="365.816">Services</tspan></text>
</g>
</g>
<g id="Oracle Database@Azure">
<rect x="545" y="105" width="326" height="182" fill="white"/>
<rect x="545" y="105" width="326" height="182" stroke="#706E6F" stroke-width="2" stroke-dasharray="4 4"/>
<g id="VNet icon_2">
<rect id="White Vnet BG_2" x="819" y="102" width="45" height="6" fill="white"/>
<g id="Icon Master_4">
<g id="Azure_VNet_2">
<g id="Group_12">
<g id="Group_13">
<path id="Vector_56" d="M850.294 107.545C851.725 107.545 852.884 106.386 852.884 104.955C852.884 103.524 851.725 102.365 850.294 102.365C848.863 102.365 847.704 103.524 847.704 104.955C847.704 106.386 848.863 107.545 850.294 107.545Z" fill="url(#paint15_linear_16122_355283)"/>
<path id="Vector_57" d="M842.125 107.545C843.555 107.545 844.715 106.386 844.715 104.955C844.715 103.524 843.555 102.365 842.125 102.365C840.694 102.365 839.534 103.524 839.534 104.955C839.534 106.386 840.694 107.545 842.125 107.545Z" fill="url(#paint16_linear_16122_355283)"/>
<path id="Vector_58" d="M833.955 107.545C835.386 107.545 836.545 106.386 836.545 104.955C836.545 103.524 835.386 102.365 833.955 102.365C832.525 102.365 831.365 103.524 831.365 104.955C831.365 106.386 832.525 107.545 833.955 107.545Z" fill="url(#paint17_linear_16122_355283)"/>
<path id="Vector_59" d="M835.748 115.316L834.154 116.91C833.955 116.91 833.557 116.91 833.357 116.711L822.398 105.752C822 105.354 822 104.556 822.398 103.959L823.993 102.564L835.748 114.32C835.948 114.519 835.948 114.918 835.748 115.316Z" fill="#50E6FF"/>
<path id="Vector_60" d="M834.154 93.1992L835.748 94.7933C835.948 94.9925 835.948 95.391 835.748 95.5903L823.993 107.346L822.399 105.752C821.801 105.154 821.801 104.357 822.399 103.959L833.158 93.1992C833.357 93 833.756 93 834.154 93.1992Z" fill="#1490DF"/>
<path id="Vector_61" d="M860.057 102.365L861.452 103.76C862.05 104.357 862.05 105.154 861.452 105.553L850.493 116.512C850.294 116.711 849.895 116.711 849.497 116.512L847.903 114.918C847.704 114.718 847.704 114.32 847.903 113.921L860.057 102.365Z" fill="#50E6FF"/>
<path id="Vector_62" d="M861.651 105.752L860.057 107.346L848.501 95.7895C848.301 95.5903 848.301 95.1918 848.501 94.7933L849.895 93.1992C850.095 93 850.493 93 850.892 93.1992L861.651 103.959C862.05 104.357 862.05 105.154 861.651 105.752Z" fill="#1490DF"/>
</g>
</g>
</g>
</g>
</g>
<text id="VNet_2" fill="#706E6F" xml:space="preserve" style="white-space: pre" font-family="Oracle Sans" font-size="16" font-weight="600" letter-spacing="0em"><tspan x="553" y="126.816">Primary Database VNet</tspan></text>
</g>
<g id="Oracle Database@Azure_2">
<rect x="552.5" y="136.5" width="311" height="143" fill="white"/>
<rect x="552.5" y="136.5" width="311" height="143" stroke="#706E6F" stroke-dasharray="8 4"/>
<text id="Azure subnet" fill="#706E6F" xml:space="preserve" style="white-space: pre" font-family="Oracle Sans" font-size="16" font-weight="600" letter-spacing="0em"><tspan x="560" y="157.816">Delegated subnet</tspan></text>
</g>
<g id="Private Endpoint IP">
<g id="Private-Endpoint-IP-Address">
<g id="Group 424">
<path id="Vector_63" d="M597.52 210.541C595.402 207.477 594.586 203.697 595.252 200.031C595.918 196.365 598.011 193.115 601.071 190.994C604.13 188.874 607.906 188.057 611.567 188.724C615.228 189.391 618.474 191.486 620.592 194.55C622.209 196.909 623.074 199.703 623.074 202.564C623.074 205.425 622.209 208.219 620.592 210.578L609.061 227.186L597.52 210.541Z" fill="white"/>
<path id="Vector_64" d="M609.042 188.936C611.524 188.927 613.961 189.599 616.088 190.879C618.215 192.16 619.951 194 621.107 196.199C622.263 198.398 622.795 200.872 622.645 203.353C622.494 205.834 621.668 208.226 620.255 210.269L609.06 226.363L597.902 210.269C596.493 208.231 595.668 205.846 595.514 203.372C595.361 200.898 595.887 198.429 597.034 196.232C598.181 194.035 599.906 192.195 602.022 190.908C604.139 189.622 606.566 188.94 609.042 188.936V188.936ZM609.042 188C606.395 188.005 603.801 188.734 601.539 190.109C599.277 191.483 597.433 193.451 596.207 195.799C594.981 198.147 594.42 200.786 594.583 203.43C594.747 206.075 595.63 208.624 597.136 210.802L608.294 226.896L609.06 228L609.827 226.896L620.975 210.802C622.483 208.622 623.366 206.07 623.528 203.423C623.691 200.776 623.127 198.135 621.898 195.787C620.668 193.438 618.82 191.47 616.554 190.098C614.288 188.725 611.69 188 609.042 188V188Z" fill="white"/>
<path id="Vector_65" d="M620.21 194.784C618.159 191.822 615.017 189.797 611.475 189.155C607.933 188.513 604.282 189.306 601.324 191.359C598.366 193.413 596.344 196.559 595.702 200.105C595.061 203.651 595.853 207.307 597.903 210.269L609.061 226.363L620.21 210.269C621.774 207.991 622.611 205.291 622.611 202.526C622.611 199.762 621.774 197.062 620.21 194.784V194.784ZM618.855 209.343L609.061 223.49L599.23 209.333C597.991 207.541 597.265 205.442 597.132 203.266C596.998 201.09 597.462 198.918 598.472 196.987C599.483 195.056 601.002 193.438 602.866 192.31C604.729 191.181 606.865 190.584 609.043 190.584C611.22 190.584 613.356 191.181 615.219 192.31C617.083 193.438 618.602 195.056 619.613 196.987C620.623 198.918 621.087 201.09 620.953 203.266C620.82 205.442 620.094 207.541 618.855 209.333V209.343Z" fill="#2D5967"/>
<path id="Vector_66" d="M613.172 198.835V196.814C613.166 196.174 613.013 195.544 612.724 194.972C612.436 194.401 612.02 193.904 611.508 193.52C611.002 193.134 610.411 192.872 609.784 192.756C609.157 192.641 608.512 192.675 607.901 192.856C607.038 193.118 606.283 193.652 605.747 194.379C605.212 195.105 604.925 195.986 604.93 196.889V198.835C604.107 199.652 603.546 200.696 603.316 201.833C603.087 202.971 603.2 204.151 603.642 205.223C604.083 206.296 604.833 207.214 605.796 207.859C606.759 208.505 607.892 208.849 609.051 208.849C610.21 208.849 611.342 208.505 612.305 207.859C613.268 207.214 614.018 206.296 614.459 205.223C614.901 204.151 615.014 202.971 614.785 201.833C614.556 200.696 613.994 199.652 613.172 198.835V198.835ZM606.565 196.889C606.557 196.34 606.726 195.804 607.048 195.361C607.37 194.917 607.827 194.59 608.35 194.428C608.719 194.32 609.108 194.3 609.486 194.37C609.864 194.439 610.221 194.597 610.527 194.83C610.836 195.062 611.087 195.361 611.262 195.705C611.437 196.048 611.531 196.428 611.536 196.814V197.684C610.758 197.32 609.91 197.132 609.051 197.132C608.192 197.132 607.343 197.32 606.565 197.684V196.889ZM609.051 207.181C608.213 207.187 607.393 206.943 606.694 206.481C605.996 206.018 605.45 205.359 605.127 204.585C604.803 203.812 604.717 202.96 604.878 202.137C605.039 201.314 605.441 200.558 606.033 199.965C606.624 199.371 607.378 198.967 608.2 198.804C609.021 198.64 609.872 198.725 610.645 199.047C611.419 199.369 612.079 199.914 612.542 200.613C613.005 201.311 613.25 202.132 613.247 202.97C613.253 203.526 613.149 204.077 612.94 204.591C612.732 205.106 612.424 205.574 612.034 205.968C611.643 206.363 611.179 206.675 610.667 206.888C610.154 207.101 609.605 207.21 609.051 207.209V207.181Z" fill="#2D5967"/>
<path id="Vector_67" d="M609.051 201.174H608.902C608.633 201.207 608.383 201.328 608.189 201.517C607.995 201.706 607.868 201.954 607.827 202.222C607.788 202.475 607.83 202.733 607.945 202.962C608.061 203.19 608.245 203.376 608.472 203.494L608.229 205.085H609.874L609.649 203.494C609.843 203.385 610.004 203.226 610.115 203.033C610.227 202.841 610.285 202.622 610.285 202.4C610.282 202.074 610.151 201.762 609.92 201.532C609.689 201.303 609.377 201.174 609.051 201.174V201.174Z" fill="#2D5967"/>
</g>
</g>
<g id="Icon Text Label_6">
<text id="IconLabel_9" fill="black" xml:space="preserve" style="white-space: pre" font-family="Oracle Sans" font-size="16" letter-spacing="0em"><tspan x="583.969" y="245.816">Private</tspan></text>
<text id="IconLabel_10" fill="black" xml:space="preserve" style="white-space: pre" font-family="Oracle Sans" font-size="16" letter-spacing="0em"><tspan x="576.016" y="261.816">Endpoint</tspan></text>
</g>
</g>
<g id="Autonomous DB">
<g id="Autonomous-Database">
<g id="Group 7">
<path id="Vector_68" d="M765.391 227.449C761.548 227.449 757.829 227.078 755.102 226.458C751.507 225.59 749.647 224.226 749.647 222.367V204.392H738.118L738.242 202.532C738.614 197.945 741.218 193.978 745.309 191.871C746.176 191.375 746.796 190.631 747.044 189.64C747.664 186.416 749.895 183.689 752.871 182.449C754.11 181.954 755.474 181.582 756.961 181.582C757.209 181.582 757.581 181.582 757.953 181.582C758.077 181.582 758.201 181.582 758.325 181.582C759.193 181.582 760.061 181.21 760.556 180.59C762.664 178.235 765.515 176.871 768.614 176.623H769.854C774.441 176.747 778.532 179.35 780.515 183.441C780.639 183.689 780.887 184.061 781.135 184.309C781.383 184.681 781.879 185.301 782.127 185.797C785.846 185.921 789.193 187.904 791.176 191.003V191.127L791.548 192.987L796.631 198.069L794.152 200.549L792.54 198.937C791.548 204.144 786.961 207.987 781.507 207.987C781.383 207.987 781.135 207.987 781.011 207.987V222.243C781.011 224.102 779.275 225.466 775.556 226.334C772.953 227.078 769.234 227.449 765.391 227.449Z" fill="white"/>
<path id="Vector_69" d="M769.36 177.244C773.822 177.244 777.789 179.723 779.773 183.69C780.021 184.062 780.145 184.434 780.517 184.682C780.764 185.054 781.26 185.798 781.632 186.294C785.351 186.294 788.698 188.277 790.558 191.252L791.054 193.236L795.888 198.071L794.277 199.682L792.169 197.575C791.798 203.029 787.211 207.368 781.632 207.368C781.26 207.368 780.888 207.368 780.517 207.244V222.244C780.517 223.732 778.905 224.971 775.558 225.715C772.831 226.335 769.236 226.707 765.393 226.707C761.55 226.707 757.955 226.335 755.227 225.715C751.88 224.971 750.269 223.732 750.269 222.244V203.649H738.864L738.988 202.409C739.36 198.071 741.839 194.228 745.682 192.244C746.674 191.872 747.417 190.88 747.665 189.765C748.285 186.79 750.269 184.186 753.12 182.947C754.36 182.451 755.599 182.203 756.963 182.203C757.211 182.203 757.583 182.203 757.831 182.203C757.955 182.203 758.079 182.203 758.202 182.203C759.194 182.203 760.186 181.831 760.93 181.087C763.037 178.732 766.012 177.492 769.112 177.368V178.484V177.368C769.112 177.244 769.236 177.244 769.36 177.244ZM770.227 176.004H768.988H767.748V176.128C764.773 176.5 761.921 177.864 759.814 180.095C759.442 180.715 758.822 180.963 758.079 180.963C757.955 180.963 757.955 180.963 757.831 180.963C757.459 180.963 757.211 180.963 756.839 180.963C755.351 180.963 753.864 181.335 752.5 181.831C749.277 183.194 747.045 186.046 746.302 189.517C746.178 190.261 745.682 191.004 744.938 191.376C740.723 193.608 737.996 197.823 737.624 202.533L737.5 203.773V205.013H738.864H749.029V222.368C749.029 225.591 753.492 226.707 754.979 227.079C757.831 227.699 761.55 228.071 765.393 228.071C769.36 228.071 772.955 227.699 775.806 227.079C777.293 226.707 781.756 225.715 781.756 222.368V208.732C786.963 208.732 791.55 205.137 792.913 200.178L793.285 200.55L794.153 201.418L795.021 200.55L796.632 198.938L797.5 198.071L796.632 197.203L792.045 192.616L791.674 191.004V190.756L791.55 190.632C789.566 187.409 786.095 185.302 782.252 185.054C782.004 184.682 781.632 184.186 781.508 183.938V183.814L781.384 183.69C781.26 183.69 781.012 183.442 780.888 183.194C778.905 178.98 774.814 176.376 770.227 176.004Z" fill="white"/>
<path id="Vector_70" d="M741.343 201.541H748.533V203.773H738.863L738.987 202.533C739.359 198.194 741.839 194.351 745.682 192.368C746.673 191.872 747.417 190.88 747.665 189.764C748.285 186.789 750.268 184.186 753.12 182.946C754.483 182.202 756.095 181.954 757.706 182.202C758.946 182.326 760.062 181.954 760.806 181.087C762.913 178.731 765.888 177.492 768.987 177.368C769.111 177.368 769.235 177.368 769.235 177.368C773.698 177.368 777.665 179.847 779.649 183.814C779.897 184.186 780.02 184.558 780.392 184.806C779.525 184.93 778.657 185.054 777.913 185.302C777.789 185.178 777.789 185.054 777.665 184.806C776.054 181.583 772.83 179.599 769.235 179.599C769.111 179.599 769.111 179.599 768.987 179.599C766.508 179.599 764.029 180.715 762.293 182.574C761.054 183.938 759.194 184.682 757.335 184.434C756.095 184.31 754.979 184.558 753.739 185.054C751.632 186.045 750.02 187.905 749.649 190.26C749.277 192.12 748.161 193.607 746.425 194.475C743.822 195.839 741.963 198.442 741.343 201.541ZM780.516 190.88H782.748L785.847 201.913H783.368L782.996 199.558H780.268L779.649 201.913H777.293L780.516 190.88ZM780.64 197.698H782.5L781.508 193.607L780.64 197.698ZM771.095 196.211L768.987 194.103L767.376 195.715L772.211 200.549L777.045 195.715L775.434 194.103L773.45 196.087C773.822 191.872 777.417 188.649 781.632 188.649C784.731 188.649 787.458 190.384 788.946 192.988L790.558 191.376C788.698 188.401 785.351 186.417 781.632 186.417C776.054 186.417 771.467 190.756 771.095 196.211ZM795.888 198.07L791.054 193.359L786.219 198.194L787.83 199.806L789.814 197.822C789.442 202.037 785.847 205.26 781.632 205.26C778.533 205.26 775.806 203.525 774.318 200.921L772.706 202.533C774.566 205.508 777.913 207.492 781.632 207.492C787.211 207.492 791.797 203.153 792.169 197.698L794.277 199.806L795.888 198.07ZM778.161 208.979C778.905 209.227 779.649 209.351 780.392 209.475V222.492C780.392 223.979 778.781 225.219 775.434 225.963C772.706 226.583 769.111 226.954 765.268 226.954C761.425 226.954 757.83 226.583 755.103 225.963C751.756 225.219 750.144 223.979 750.144 222.492V198.07C750.144 196.583 751.756 195.467 755.103 194.723C757.706 194.103 761.301 193.855 765.268 193.855C765.392 193.855 765.64 193.855 765.888 193.855V196.087C765.764 196.087 765.516 196.087 765.268 196.087C757.087 196.087 752.996 197.45 752.5 198.194V198.318C752.996 199.186 757.706 200.549 765.268 200.549C766.88 200.549 768.244 200.549 769.607 200.426C769.855 201.169 770.103 201.913 770.475 202.657C768.863 202.781 767.128 202.905 765.268 202.905C761.425 202.905 757.83 202.533 755.103 201.913C753.987 201.665 753.12 201.417 752.376 201.045V206.376C752.872 207.244 757.582 208.607 765.144 208.607C769.359 208.607 772.706 208.111 774.938 207.616C776.054 208.111 777.045 208.607 778.161 208.979C777.417 209.351 776.549 209.599 775.434 209.847C772.706 210.467 769.111 210.839 765.268 210.839C761.425 210.839 757.83 210.467 755.103 209.847C753.987 209.599 753.12 209.351 752.376 208.979V214.31C752.872 215.178 757.582 216.541 765.144 216.541C772.706 216.541 777.417 215.054 777.913 214.31L778.161 208.979ZM778.161 217.037C777.417 217.409 776.549 217.657 775.434 217.905C772.706 218.525 769.111 218.897 765.268 218.897C761.425 218.897 757.83 218.525 755.103 217.905C753.987 217.657 753.12 217.409 752.376 217.037V222.368C752.872 223.111 757.087 224.599 765.144 224.599C773.202 224.599 777.541 222.988 777.913 222.368L778.161 217.037Z" fill="#2D5967"/>
</g>
</g>
<g id="Icon Text Label_7">
<text id="IconLabel_11" fill="black" xml:space="preserve" style="white-space: pre" font-family="Oracle Sans" font-size="16" letter-spacing="0em"><tspan x="695.43" y="245.816">Oracle Autonomous</tspan></text>
<text id="IconLabel_12" fill="black" xml:space="preserve" style="white-space: pre" font-family="Oracle Sans" font-size="16" letter-spacing="0em"><tspan x="703.258" y="261.816">Database Primary</tspan></text>
</g>
</g>
<path id="Vector 1707" d="M544.707 196.707C545.098 196.317 545.098 195.683 544.707 195.293L538.343 188.929C537.953 188.538 537.319 188.538 536.929 188.929C536.538 189.319 536.538 189.953 536.929 190.343L542.586 196L536.929 201.657C536.538 202.047 536.538 202.681 536.929 203.071C537.319 203.462 537.953 203.462 538.343 203.071L544.707 196.707ZM391.293 195.293C390.902 195.683 390.902 196.317 391.293 196.707L397.657 203.071C398.047 203.462 398.681 203.462 399.071 203.071C399.462 202.681 399.462 202.047 399.071 201.657L393.414 196L399.071 190.343C399.462 189.953 399.462 189.319 399.071 188.929C398.681 188.538 398.047 188.538 397.657 188.929L391.293 195.293ZM544 195L392 195L392 197L544 197L544 195Z" fill="#312D2A"/>
<path id="Vector 1711" d="M1051.71 196.707C1052.1 196.317 1052.1 195.683 1051.71 195.293L1045.34 188.929C1044.95 188.538 1044.32 188.538 1043.93 188.929C1043.54 189.319 1043.54 189.953 1043.93 190.343L1049.59 196L1043.93 201.657C1043.54 202.047 1043.54 202.681 1043.93 203.071C1044.32 203.462 1044.95 203.462 1045.34 203.071L1051.71 196.707ZM1051 195L798 195L798 197L1051 197L1051 195Z" fill="#312D2A"/>
<g id="Connector Line Label">
<rect width="97" height="14" transform="translate(420 189)" fill="#DAE8FC"/>
<text id="Line Label" fill="#312D2A" xml:space="preserve" style="white-space: pre" font-family="Oracle Sans" font-size="14" letter-spacing="0em"><tspan x="424.374" y="201.089">VNET Peering</tspan></text>
</g>
<path id="Vector 1714" d="M544.707 460.707C545.098 460.317 545.098 459.683 544.707 459.293L538.343 452.929C537.953 452.538 537.319 452.538 536.929 452.929C536.538 453.319 536.538 453.953 536.929 454.343L542.586 460L536.929 465.657C536.538 466.047 536.538 466.681 536.929 467.071C537.319 467.462 537.953 467.462 538.343 467.071L544.707 460.707ZM391.293 459.293C390.902 459.683 390.902 460.317 391.293 460.707L397.657 467.071C398.047 467.462 398.681 467.462 399.071 467.071C399.462 466.681 399.462 466.047 399.071 465.657L393.414 460L399.071 454.343C399.462 453.953 399.462 453.319 399.071 452.929C398.681 452.538 398.047 452.538 397.657 452.929L391.293 459.293ZM544 459L392 459L392 461L544 461L544 459Z" fill="#312D2A"/>
<g id="Connector Line Label_2">
<rect width="97" height="14" transform="translate(420 453)" fill="#DAE8FC"/>
<text id="Line Label_2" fill="#312D2A" xml:space="preserve" style="white-space: pre" font-family="Oracle Sans" font-size="14" letter-spacing="0em"><tspan x="424.374" y="465.089">VNET Peering</tspan></text>
</g>
<g id="Oracle Database@Azure_3">
<rect x="545" y="369" width="326" height="182" fill="white"/>
<rect x="545" y="369" width="326" height="182" stroke="#706E6F" stroke-width="2" stroke-dasharray="4 4"/>
<g id="VNet icon_3">
<rect id="White Vnet BG_3" x="819" y="366" width="45" height="6" fill="white"/>
<g id="Icon Master_5">
<g id="Azure_VNet_3">
<g id="Group_14">
<g id="Group_15">
<path id="Vector_71" d="M850.294 371.545C851.725 371.545 852.884 370.386 852.884 368.955C852.884 367.524 851.725 366.365 850.294 366.365C848.863 366.365 847.704 367.524 847.704 368.955C847.704 370.386 848.863 371.545 850.294 371.545Z" fill="url(#paint18_linear_16122_355283)"/>
<path id="Vector_72" d="M842.125 371.545C843.555 371.545 844.715 370.386 844.715 368.955C844.715 367.524 843.555 366.365 842.125 366.365C840.694 366.365 839.534 367.524 839.534 368.955C839.534 370.386 840.694 371.545 842.125 371.545Z" fill="url(#paint19_linear_16122_355283)"/>
<path id="Vector_73" d="M833.955 371.545C835.386 371.545 836.545 370.386 836.545 368.955C836.545 367.524 835.386 366.365 833.955 366.365C832.525 366.365 831.365 367.524 831.365 368.955C831.365 370.386 832.525 371.545 833.955 371.545Z" fill="url(#paint20_linear_16122_355283)"/>
<path id="Vector_74" d="M835.748 379.316L834.154 380.91C833.955 380.91 833.557 380.91 833.357 380.711L822.398 369.752C822 369.354 822 368.556 822.398 367.959L823.993 366.564L835.748 378.32C835.948 378.519 835.948 378.918 835.748 379.316Z" fill="#50E6FF"/>
<path id="Vector_75" d="M834.154 357.199L835.748 358.793C835.948 358.993 835.948 359.391 835.748 359.59L823.993 371.346L822.399 369.752C821.801 369.154 821.801 368.357 822.399 367.959L833.158 357.199C833.357 357 833.756 357 834.154 357.199Z" fill="#1490DF"/>
<path id="Vector_76" d="M860.057 366.365L861.452 367.76C862.05 368.357 862.05 369.154 861.452 369.553L850.493 380.512C850.294 380.711 849.895 380.711 849.497 380.512L847.903 378.918C847.704 378.718 847.704 378.32 847.903 377.921L860.057 366.365Z" fill="#50E6FF"/>
<path id="Vector_77" d="M861.651 369.752L860.057 371.346L848.501 359.79C848.301 359.59 848.301 359.192 848.501 358.793L849.895 357.199C850.095 357 850.493 357 850.892 357.199L861.651 367.959C862.05 368.357 862.05 369.154 861.651 369.752Z" fill="#1490DF"/>
</g>
</g>
</g>
</g>
</g>
<text id="VNet_3" fill="#706E6F" xml:space="preserve" style="white-space: pre" font-family="Oracle Sans" font-size="16" font-weight="600" letter-spacing="0em"><tspan x="553" y="390.816">Primary Database VNet</tspan></text>
</g>
<g id="Group 1496">
<g id="Oracle Database@Azure_4">
<rect x="552.5" y="400.5" width="311" height="143" fill="white"/>
<rect x="552.5" y="400.5" width="311" height="143" stroke="#706E6F" stroke-dasharray="8 4"/>
<text id="Azure subnet_2" fill="#706E6F" xml:space="preserve" style="white-space: pre" font-family="Oracle Sans" font-size="16" font-weight="600" letter-spacing="0em"><tspan x="560" y="421.816">Delegated subnet</tspan></text>
</g>
<g id="Private Endpoint IP_2">
<g id="Private-Endpoint-IP-Address_2">
<g id="Group 424_2">
<path id="Vector_78" d="M597.52 474.541C595.402 471.477 594.586 467.697 595.252 464.031C595.918 460.365 598.011 457.115 601.071 454.994C604.13 452.874 607.906 452.057 611.567 452.724C615.228 453.391 618.474 455.486 620.592 458.55C622.209 460.909 623.074 463.703 623.074 466.564C623.074 469.425 622.209 472.219 620.592 474.578L609.061 491.186L597.52 474.541Z" fill="white"/>
<path id="Vector_79" d="M609.042 452.936C611.524 452.927 613.961 453.599 616.088 454.879C618.215 456.16 619.951 458 621.107 460.199C622.263 462.398 622.795 464.872 622.645 467.353C622.494 469.834 621.668 472.226 620.255 474.269L609.06 490.363L597.902 474.269C596.493 472.231 595.668 469.846 595.514 467.372C595.361 464.898 595.887 462.429 597.034 460.232C598.181 458.035 599.906 456.195 602.022 454.908C604.139 453.622 606.566 452.94 609.042 452.936V452.936ZM609.042 452C606.395 452.005 603.801 452.734 601.539 454.109C599.277 455.483 597.433 457.451 596.207 459.799C594.981 462.147 594.42 464.786 594.583 467.43C594.747 470.075 595.63 472.624 597.136 474.802L608.294 490.896L609.06 492L609.827 490.896L620.975 474.802C622.483 472.622 623.366 470.07 623.528 467.423C623.691 464.776 623.127 462.135 621.898 459.787C620.668 457.438 618.82 455.47 616.554 454.098C614.288 452.725 611.69 452 609.042 452V452Z" fill="white"/>
<path id="Vector_80" d="M620.21 458.784C618.159 455.822 615.017 453.797 611.475 453.155C607.933 452.513 604.282 453.306 601.324 455.359C598.366 457.413 596.344 460.559 595.702 464.105C595.061 467.651 595.853 471.307 597.903 474.269L609.061 490.363L620.21 474.269C621.774 471.991 622.611 469.291 622.611 466.526C622.611 463.762 621.774 461.062 620.21 458.784V458.784ZM618.855 473.343L609.061 487.49L599.23 473.333C597.991 471.541 597.265 469.442 597.132 467.266C596.998 465.09 597.462 462.918 598.472 460.987C599.483 459.056 601.002 457.438 602.866 456.31C604.729 455.181 606.865 454.584 609.043 454.584C611.22 454.584 613.356 455.181 615.219 456.31C617.083 457.438 618.602 459.056 619.613 460.987C620.623 462.918 621.087 465.09 620.953 467.266C620.82 469.442 620.094 471.541 618.855 473.333V473.343Z" fill="#2D5967"/>
<path id="Vector_81" d="M613.172 462.835V460.814C613.166 460.174 613.013 459.544 612.724 458.972C612.436 458.401 612.02 457.904 611.508 457.52C611.002 457.134 610.411 456.872 609.784 456.756C609.157 456.641 608.512 456.675 607.901 456.856C607.038 457.118 606.283 457.652 605.747 458.379C605.212 459.105 604.925 459.986 604.93 460.889V462.835C604.107 463.652 603.546 464.696 603.316 465.833C603.087 466.971 603.2 468.151 603.642 469.223C604.083 470.296 604.833 471.214 605.796 471.859C606.759 472.505 607.892 472.849 609.051 472.849C610.21 472.849 611.342 472.505 612.305 471.859C613.268 471.214 614.018 470.296 614.459 469.223C614.901 468.151 615.014 466.971 614.785 465.833C614.556 464.696 613.994 463.652 613.172 462.835V462.835ZM606.565 460.889C606.557 460.34 606.726 459.804 607.048 459.361C607.37 458.917 607.827 458.59 608.35 458.428C608.719 458.32 609.108 458.3 609.486 458.37C609.864 458.439 610.221 458.597 610.527 458.83C610.836 459.062 611.087 459.361 611.262 459.705C611.437 460.048 611.531 460.428 611.536 460.814V461.684C610.758 461.32 609.91 461.132 609.051 461.132C608.192 461.132 607.343 461.32 606.565 461.684V460.889ZM609.051 471.181C608.213 471.187 607.393 470.943 606.694 470.481C605.996 470.018 605.45 469.359 605.127 468.585C604.803 467.812 604.717 466.96 604.878 466.137C605.039 465.314 605.441 464.558 606.033 463.965C606.624 463.371 607.378 462.967 608.2 462.804C609.021 462.64 609.872 462.725 610.645 463.047C611.419 463.369 612.079 463.914 612.542 464.613C613.005 465.311 613.25 466.132 613.247 466.97C613.253 467.526 613.149 468.077 612.94 468.591C612.732 469.106 612.424 469.574 612.034 469.968C611.643 470.363 611.179 470.675 610.667 470.888C610.154 471.101 609.605 471.21 609.051 471.209V471.181Z" fill="#2D5967"/>
<path id="Vector_82" d="M609.051 465.174H608.902C608.633 465.207 608.383 465.328 608.189 465.517C607.995 465.706 607.868 465.954 607.827 466.222C607.788 466.475 607.83 466.733 607.945 466.962C608.061 467.19 608.245 467.376 608.472 467.494L608.229 469.085H609.874L609.649 467.494C609.843 467.385 610.004 467.226 610.115 467.033C610.227 466.841 610.285 466.622 610.285 466.4C610.282 466.074 610.151 465.762 609.92 465.532C609.689 465.303 609.377 465.174 609.051 465.174V465.174Z" fill="#2D5967"/>
</g>
</g>
<g id="Icon Text Label_8">
<text id="IconLabel_13" fill="black" xml:space="preserve" style="white-space: pre" font-family="Oracle Sans" font-size="16" letter-spacing="0em"><tspan x="583.969" y="509.816">Private</tspan></text>
<text id="IconLabel_14" fill="black" xml:space="preserve" style="white-space: pre" font-family="Oracle Sans" font-size="16" letter-spacing="0em"><tspan x="576.016" y="525.816">Endpoint</tspan></text>
</g>
</g>
<g id="Autonomous DB_2">
<g id="Autonomous-Database_2">
<g id="Group 7_2">
<path id="Vector_83" d="M765.391 491.449C761.548 491.449 757.829 491.078 755.102 490.458C751.507 489.59 749.647 488.226 749.647 486.367V468.392H738.118L738.242 466.532C738.614 461.945 741.218 457.978 745.309 455.871C746.176 455.375 746.796 454.631 747.044 453.64C747.664 450.416 749.895 447.689 752.871 446.449C754.11 445.954 755.474 445.582 756.961 445.582C757.209 445.582 757.581 445.582 757.953 445.582C758.077 445.582 758.201 445.582 758.325 445.582C759.193 445.582 760.061 445.21 760.556 444.59C762.664 442.235 765.515 440.871 768.614 440.623H769.854C774.441 440.747 778.532 443.35 780.515 447.441C780.639 447.689 780.887 448.061 781.135 448.309C781.383 448.681 781.879 449.301 782.127 449.797C785.846 449.921 789.193 451.904 791.176 455.003V455.127L791.548 456.987L796.631 462.069L794.152 464.549L792.54 462.937C791.548 468.144 786.961 471.987 781.507 471.987C781.383 471.987 781.135 471.987 781.011 471.987V486.243C781.011 488.102 779.275 489.466 775.556 490.334C772.953 491.078 769.234 491.449 765.391 491.449Z" fill="white"/>
<path id="Vector_84" d="M769.36 441.244C773.822 441.244 777.789 443.723 779.773 447.69C780.021 448.062 780.145 448.434 780.517 448.682C780.764 449.054 781.26 449.798 781.632 450.294C785.351 450.294 788.698 452.277 790.558 455.252L791.054 457.236L795.888 462.071L794.277 463.682L792.169 461.575C791.798 467.029 787.211 471.368 781.632 471.368C781.26 471.368 780.888 471.368 780.517 471.244V486.244C780.517 487.732 778.905 488.971 775.558 489.715C772.831 490.335 769.236 490.707 765.393 490.707C761.55 490.707 757.955 490.335 755.227 489.715C751.88 488.971 750.269 487.732 750.269 486.244V467.649H738.864L738.988 466.409C739.36 462.071 741.839 458.228 745.682 456.244C746.674 455.872 747.417 454.88 747.665 453.765C748.285 450.79 750.269 448.186 753.12 446.947C754.36 446.451 755.599 446.203 756.963 446.203C757.211 446.203 757.583 446.203 757.831 446.203C757.955 446.203 758.079 446.203 758.202 446.203C759.194 446.203 760.186 445.831 760.93 445.087C763.037 442.732 766.012 441.492 769.112 441.368V442.484V441.368C769.112 441.244 769.236 441.244 769.36 441.244ZM770.227 440.004H768.988H767.748V440.128C764.773 440.5 761.921 441.864 759.814 444.095C759.442 444.715 758.822 444.963 758.079 444.963C757.955 444.963 757.955 444.963 757.831 444.963C757.459 444.963 757.211 444.963 756.839 444.963C755.351 444.963 753.864 445.335 752.5 445.831C749.277 447.194 747.045 450.046 746.302 453.517C746.178 454.261 745.682 455.004 744.938 455.376C740.723 457.608 737.996 461.823 737.624 466.533L737.5 467.773V469.013H738.864H749.029V486.368C749.029 489.591 753.492 490.707 754.979 491.079C757.831 491.699 761.55 492.071 765.393 492.071C769.36 492.071 772.955 491.699 775.806 491.079C777.293 490.707 781.756 489.715 781.756 486.368V472.732C786.963 472.732 791.55 469.137 792.913 464.178L793.285 464.55L794.153 465.418L795.021 464.55L796.632 462.938L797.5 462.071L796.632 461.203L792.045 456.616L791.674 455.004V454.756L791.55 454.632C789.566 451.409 786.095 449.302 782.252 449.054C782.004 448.682 781.632 448.186 781.508 447.938V447.814L781.384 447.69C781.26 447.69 781.012 447.442 780.888 447.194C778.905 442.98 774.814 440.376 770.227 440.004Z" fill="white"/>
<path id="Vector_85" d="M741.343 465.541H748.533V467.773H738.863L738.987 466.533C739.359 462.194 741.839 458.351 745.682 456.368C746.673 455.872 747.417 454.88 747.665 453.764C748.285 450.789 750.268 448.186 753.12 446.946C754.483 446.202 756.095 445.954 757.706 446.202C758.946 446.326 760.062 445.954 760.806 445.087C762.913 442.731 765.888 441.492 768.987 441.368C769.111 441.368 769.235 441.368 769.235 441.368C773.698 441.368 777.665 443.847 779.649 447.814C779.897 448.186 780.02 448.558 780.392 448.806C779.525 448.93 778.657 449.054 777.913 449.302C777.789 449.178 777.789 449.054 777.665 448.806C776.054 445.583 772.83 443.599 769.235 443.599C769.111 443.599 769.111 443.599 768.987 443.599C766.508 443.599 764.029 444.715 762.293 446.574C761.054 447.938 759.194 448.682 757.335 448.434C756.095 448.31 754.979 448.558 753.739 449.054C751.632 450.045 750.02 451.905 749.649 454.26C749.277 456.12 748.161 457.607 746.425 458.475C743.822 459.839 741.963 462.442 741.343 465.541ZM780.516 454.88H782.748L785.847 465.913H783.368L782.996 463.558H780.268L779.649 465.913H777.293L780.516 454.88ZM780.64 461.698H782.5L781.508 457.607L780.64 461.698ZM771.095 460.211L768.987 458.103L767.376 459.715L772.211 464.549L777.045 459.715L775.434 458.103L773.45 460.087C773.822 455.872 777.417 452.649 781.632 452.649C784.731 452.649 787.458 454.384 788.946 456.988L790.558 455.376C788.698 452.401 785.351 450.417 781.632 450.417C776.054 450.417 771.467 454.756 771.095 460.211ZM795.888 462.07L791.054 457.359L786.219 462.194L787.83 463.806L789.814 461.822C789.442 466.037 785.847 469.26 781.632 469.26C778.533 469.26 775.806 467.525 774.318 464.921L772.706 466.533C774.566 469.508 777.913 471.492 781.632 471.492C787.211 471.492 791.797 467.153 792.169 461.698L794.277 463.806L795.888 462.07ZM778.161 472.979C778.905 473.227 779.649 473.351 780.392 473.475V486.492C780.392 487.979 778.781 489.219 775.434 489.963C772.706 490.583 769.111 490.954 765.268 490.954C761.425 490.954 757.83 490.583 755.103 489.963C751.756 489.219 750.144 487.979 750.144 486.492V462.07C750.144 460.583 751.756 459.467 755.103 458.723C757.706 458.103 761.301 457.855 765.268 457.855C765.392 457.855 765.64 457.855 765.888 457.855V460.087C765.764 460.087 765.516 460.087 765.268 460.087C757.087 460.087 752.996 461.45 752.5 462.194V462.318C752.996 463.186 757.706 464.549 765.268 464.549C766.88 464.549 768.244 464.549 769.607 464.426C769.855 465.169 770.103 465.913 770.475 466.657C768.863 466.781 767.128 466.905 765.268 466.905C761.425 466.905 757.83 466.533 755.103 465.913C753.987 465.665 753.12 465.417 752.376 465.045V470.376C752.872 471.244 757.582 472.607 765.144 472.607C769.359 472.607 772.706 472.111 774.938 471.616C776.054 472.111 777.045 472.607 778.161 472.979C777.417 473.351 776.549 473.599 775.434 473.847C772.706 474.467 769.111 474.839 765.268 474.839C761.425 474.839 757.83 474.467 755.103 473.847C753.987 473.599 753.12 473.351 752.376 472.979V478.31C752.872 479.178 757.582 480.541 765.144 480.541C772.706 480.541 777.417 479.054 777.913 478.31L778.161 472.979ZM778.161 481.037C777.417 481.409 776.549 481.657 775.434 481.905C772.706 482.525 769.111 482.897 765.268 482.897C761.425 482.897 757.83 482.525 755.103 481.905C753.987 481.657 753.12 481.409 752.376 481.037V486.368C752.872 487.111 757.087 488.599 765.144 488.599C773.202 488.599 777.541 486.988 777.913 486.368L778.161 481.037Z" fill="#2D5967"/>
</g>
</g>
<g id="Icon Text Label_9">
<text id="IconLabel_15" fill="black" xml:space="preserve" style="white-space: pre" font-family="Oracle Sans" font-size="16" letter-spacing="0em"><tspan x="695.43" y="509.816">Oracle Autonomous</tspan></text>
<text id="IconLabel_16" fill="black" xml:space="preserve" style="white-space: pre" font-family="Oracle Sans" font-size="16" letter-spacing="0em"><tspan x="702.008" y="525.816">Database Standby</tspan></text>
</g>
</g>
</g>
<path id="Vector 1713" d="M766.293 400.707C766.683 401.098 767.317 401.098 767.707 400.707L774.071 394.343C774.462 393.953 774.462 393.319 774.071 392.929C773.681 392.538 773.047 392.538 772.657 392.929L767 398.586L761.343 392.929C760.953 392.538 760.319 392.538 759.929 392.929C759.538 393.319 759.538 393.953 759.929 394.343L766.293 400.707ZM766 280L766 400L768 400L768 280L766 280Z" fill="#312D2A"/>
<g id="Connector Line Label_3">
<rect width="74" height="30" transform="translate(915 187)" fill="white"/>
<text id="Line Label_3" fill="#312D2A" xml:space="preserve" style="white-space: pre" font-family="Oracle Sans" font-size="14" letter-spacing="0em"><tspan x="919.297" y="199.089">Automatic&#10;</tspan><tspan x="928.977" y="215.089">backup</tspan></text>
</g>
<g id="Connector Line Label_4">
<rect width="166" height="14" transform="translate(684 305)" fill="white"/>
<text id="Line Label_4" fill="#312D2A" xml:space="preserve" style="white-space: pre" font-family="Oracle Sans" font-size="14" letter-spacing="0em"><tspan x="688.325" y="317.089">Autonomous Data Guard</tspan></text>
</g>
<path id="Vector 1715" d="M268 223V222H267V223H268ZM544.707 223.707C545.098 223.317 545.098 222.683 544.707 222.293L538.343 215.929C537.953 215.538 537.319 215.538 536.929 215.929C536.538 216.319 536.538 216.953 536.929 217.343L542.586 223L536.929 228.657C536.538 229.047 536.538 229.681 536.929 230.071C537.319 230.462 537.953 230.462 538.343 230.071L544.707 223.707ZM269 276V223H267V276H269ZM268 224H544V222H268V224Z" fill="#312D2A"/>
<path id="Vector 1716" d="M280 432V433H279V432H280ZM544.707 431.293C545.098 431.683 545.098 432.317 544.707 432.707L538.343 439.071C537.953 439.462 537.319 439.462 536.929 439.071C536.538 438.681 536.538 438.047 536.929 437.657L542.586 432L536.929 426.343C536.538 425.953 536.538 425.319 536.929 424.929C537.319 424.538 537.953 424.538 538.343 424.929L544.707 431.293ZM281 369V370.969H279V369H281ZM281 374.906V378.844H279V374.906H281ZM281 382.781V386.719H279V382.781H281ZM281 390.656V394.594H279V390.656H281ZM281 398.531V402.469H279V398.531H281ZM281 406.406V410.344H279V406.406H281ZM281 414.281V418.219H279V414.281H281ZM281 422.156V426.094H279V422.156H281ZM281 430.031V432H279V430.031H281ZM280 431H282V433H280V431ZM286 431H290V433H286V431ZM294 431H298V433H294V431ZM302 431H306V433H302V431ZM310 431H314V433H310V431ZM318 431H322V433H318V431ZM326 431H330V433H326V431ZM334 431H338V433H334V431ZM342 431H346V433H342V431ZM350 431H354V433H350V431ZM358 431H362V433H358V431ZM366 431H370V433H366V431ZM374 431H378V433H374V431ZM382 431H386V433H382V431ZM390 431H394V433H390V431ZM398 431H402V433H398V431ZM406 431H410V433H406V431ZM414 431H418V433H414V431ZM422 431H426V433H422V431ZM430 431H434V433H430V431ZM438 431H442V433H438V431ZM446 431H450V433H446V431ZM454 431H458V433H454V431ZM462 431H466V433H462V431ZM470 431H474V433H470V431ZM478 431H482V433H478V431ZM486 431H490V433H486V431ZM494 431H498V433H494V431ZM502 431H506V433H502V431ZM510 431H514V433H510V431ZM518 431H522V433H518V431ZM526 431H530V433H526V431ZM534 431H538V433H534V431ZM542 431H544V433H542V431Z" fill="#312D2A"/>
<path id="Vector 1717" d="M100.293 311.293C99.9024 311.683 99.9024 312.317 100.293 312.707L106.657 319.071C107.047 319.462 107.681 319.462 108.071 319.071C108.462 318.681 108.462 318.047 108.071 317.657L102.414 312L108.071 306.343C108.462 305.953 108.462 305.319 108.071 304.929C107.681 304.538 107.047 304.538 106.657 304.929L100.293 311.293ZM234 311L101 311L101 313L234 313L234 311Z" fill="#312D2A"/>
<path id="Vector 1718" d="M234.707 482.707C235.098 482.317 235.098 481.683 234.707 481.293L228.343 474.929C227.953 474.538 227.319 474.538 226.929 474.929C226.538 475.319 226.538 475.953 226.929 476.343L232.586 482L226.929 487.657C226.538 488.047 226.538 488.681 226.929 489.071C227.319 489.462 227.953 489.462 228.343 489.071L234.707 482.707ZM234 481L101 481L101 483L234 483L234 481Z" fill="#312D2A"/>
<path id="Vector 1719" d="M256.707 369.293C256.317 368.902 255.683 368.902 255.293 369.293L248.929 375.657C248.538 376.047 248.538 376.681 248.929 377.071C249.319 377.462 249.953 377.462 250.343 377.071L256 371.414L261.657 377.071C262.047 377.462 262.681 377.462 263.071 377.071C263.462 376.681 263.462 376.047 263.071 375.657L256.707 369.293ZM255 370L255 460L257 460L257 370L255 370Z" fill="#312D2A"/>
</g>
<defs>
<linearGradient id="paint0_linear_16122_355283" x1="368.488" y1="104.129" x2="372.128" y2="107.759" gradientUnits="userSpaceOnUse">
<stop stop-color="#86D633"/>
<stop offset="1" stop-color="#5E9624"/>
</linearGradient>
<linearGradient id="paint1_linear_16122_355283" x1="358.479" y1="102.342" x2="362.093" y2="105.978" gradientUnits="userSpaceOnUse">
<stop stop-color="#86D633"/>
<stop offset="1" stop-color="#5E9624"/>
</linearGradient>
<linearGradient id="paint2_linear_16122_355283" x1="350.282" y1="102.335" x2="353.896" y2="105.971" gradientUnits="userSpaceOnUse">
<stop stop-color="#86D633"/>
<stop offset="1" stop-color="#5E9624"/>
</linearGradient>
<linearGradient id="paint3_linear_16122_355283" x1="65.3057" y1="265.356" x2="65.3057" y2="327.824" gradientUnits="userSpaceOnUse">
<stop stop-color="#5EA0EF"/>
<stop offset="1" stop-color="#0078D4"/>
</linearGradient>
<linearGradient id="paint4_linear_16122_355283" x1="79.7242" y1="310.147" x2="79.7242" y2="318.219" gradientUnits="userSpaceOnUse">
<stop stop-color="#333132"/>
<stop offset="1" stop-color="#5B5A5C"/>
</linearGradient>
<linearGradient id="paint5_linear_16122_355283" x1="67.9337" y1="496.585" x2="67.9337" y2="456.537" gradientUnits="userSpaceOnUse">
<stop stop-color="#0078D4"/>
<stop offset="0.82" stop-color="#5EA0EF"/>
</linearGradient>
<linearGradient id="paint6_linear_16122_355283" x1="67.9337" y1="512.037" x2="67.9337" y2="496.585" gradientUnits="userSpaceOnUse">
<stop offset="0.15" stop-color="#CCCCCC"/>
<stop offset="1" stop-color="#707070"/>
</linearGradient>
<linearGradient id="paint7_linear_16122_355283" x1="268.5" y1="518.166" x2="268.5" y2="448.6" gradientUnits="userSpaceOnUse">
<stop stop-color="#5E9624"/>
<stop offset="0.02" stop-color="#5F9724"/>
<stop offset="1" stop-color="#76BC2D"/>
</linearGradient>
<linearGradient id="paint8_linear_16122_355283" x1="248.256" y1="287.096" x2="267.272" y2="287.096" gradientUnits="userSpaceOnUse">
<stop stop-color="#B77AF4"/>
<stop offset="1" stop-color="#773ADC"/>
</linearGradient>
<linearGradient id="paint9_linear_16122_355283" x1="268.799" y1="287.262" x2="287.781" y2="287.262" gradientUnits="userSpaceOnUse">
<stop stop-color="#B77AF4"/>
<stop offset="1" stop-color="#773ADC"/>
</linearGradient>
<linearGradient id="paint10_linear_16122_355283" x1="238.533" y1="304.95" x2="257.515" y2="304.95" gradientUnits="userSpaceOnUse">
<stop stop-color="#B77AF4"/>
<stop offset="1" stop-color="#773ADC"/>
</linearGradient>
<linearGradient id="paint11_linear_16122_355283" x1="259.009" y1="304.817" x2="277.991" y2="304.817" gradientUnits="userSpaceOnUse">
<stop stop-color="#B77AF4"/>
<stop offset="1" stop-color="#773ADC"/>
</linearGradient>
<linearGradient id="paint12_linear_16122_355283" x1="279.485" y1="304.983" x2="298.5" y2="304.983" gradientUnits="userSpaceOnUse">
<stop stop-color="#B77AF4"/>
<stop offset="1" stop-color="#773ADC"/>
</linearGradient>
<linearGradient id="paint13_linear_16122_355283" x1="248.024" y1="323.003" x2="267.04" y2="323.003" gradientUnits="userSpaceOnUse">
<stop stop-color="#B77AF4"/>
<stop offset="1" stop-color="#773ADC"/>
</linearGradient>
<linearGradient id="paint14_linear_16122_355283" x1="268.533" y1="323.136" x2="287.548" y2="323.136" gradientUnits="userSpaceOnUse">
<stop stop-color="#B77AF4"/>
<stop offset="1" stop-color="#773ADC"/>
</linearGradient>
<linearGradient id="paint15_linear_16122_355283" x1="848.488" y1="103.129" x2="852.128" y2="106.759" gradientUnits="userSpaceOnUse">
<stop stop-color="#86D633"/>
<stop offset="1" stop-color="#5E9624"/>
</linearGradient>
<linearGradient id="paint16_linear_16122_355283" x1="838.479" y1="101.342" x2="842.093" y2="104.978" gradientUnits="userSpaceOnUse">
<stop stop-color="#86D633"/>
<stop offset="1" stop-color="#5E9624"/>
</linearGradient>
<linearGradient id="paint17_linear_16122_355283" x1="830.282" y1="101.335" x2="833.896" y2="104.971" gradientUnits="userSpaceOnUse">
<stop stop-color="#86D633"/>
<stop offset="1" stop-color="#5E9624"/>
</linearGradient>
<linearGradient id="paint18_linear_16122_355283" x1="848.488" y1="367.129" x2="852.128" y2="370.759" gradientUnits="userSpaceOnUse">
<stop stop-color="#86D633"/>
<stop offset="1" stop-color="#5E9624"/>
</linearGradient>
<linearGradient id="paint19_linear_16122_355283" x1="838.479" y1="365.342" x2="842.093" y2="368.978" gradientUnits="userSpaceOnUse">
<stop stop-color="#86D633"/>
<stop offset="1" stop-color="#5E9624"/>
</linearGradient>
<linearGradient id="paint20_linear_16122_355283" x1="830.282" y1="365.335" x2="833.896" y2="368.971" gradientUnits="userSpaceOnUse">
<stop stop-color="#86D633"/>
<stop offset="1" stop-color="#5E9624"/>
</linearGradient>
<clipPath id="clip0_16122_355283">
<rect width="1168" height="576" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 62 KiB

View File

@@ -0,0 +1,197 @@
# Build Azure CI/CD Pipelines using Oracle Exadata Database Service in Oracle Database@Azure
- Source: https://docs.oracle.com/en/solutions/azure-pipeline-exacs-dbazure/index.html
- Date: 2025-04
- Type: reference-architecture
- Services: exacs, azure
- Tags: database, multicloud, azure, devops
## Summary (catalog)
Azure DevOps pipeline integration with ExaCS on Database@Azure. Automated schema deployment, testing, and migration using Azure Pipelines with Oracle database tooling.
## Architecture (fetched from source)
Architecture
This architecture shows how you can build and deploy Microsoft Azure
Pipelines using Azure DevOps with Oracle Exadata Database Service on Dedicated
Infrastructure .
The application and database source code are hosted on a Microsoft Azure
DevOps code repository, GitHub, or similar. A user commits changes into the code
repository which triggers the continuous integration (CI) pipeline. This phase includes
running unit tests, integration tests, static code analysis, and also testing of
containers within the Azure Kubernetes Service (AKS) cluster to verify deployment
readiness.
Once testing is complete, the build pipeline creates Docker images and pushes
them to the Azure container registry. These artifacts then initiate the continuous
delivery (CD) pipeline. In the CD phase, the artifacts are deployed to AKS where
end-to-end and system tests are run to ensure microservices operate correctly within the
Kubernetes environment and the Oracle Database. Staging and production environments,
using strategies like blue/green or canary deployments, are then initiated for zero
downtime deployment of the new changes.
A Kubernetes cluster can contain multiple pods, each connecting to its own
respective pluggable database (PDB). The PDBs in the primary database are deployed on
Oracle Database@Azure that runs on Oracle Exadata Database Service on Dedicated
Infrastructure in an Azure Availability Zone. The container images are stored in the Azure container
registry. Users access the application externally through a public load balancer.
Cloud automation simplifies most lifecycle and management tasks for Oracle Exadata Cloud Infrastructure and Oracle multitenant databases ( CDB s, PDB s). For example, adding servers and scaling OCPUs up and down, creating databases and
database homes, scheduling infrastructure maintenance, updating and upgrading the VM
operating system, Oracle Grid Infrastructure , and databases, performing backup and recovery operations, and even enabling disaster
recovery protections through Oracle Data Guard .
Metrics, logs, and tracing of the entire CI/CD process are observed continuously using
tools like Azure Monitor, Oracle Cloud
Infrastructure (OCI) and Oracle Database's Unified Observability OpenTelemetry framework which
provides traces from the entry point of the application residing on Azure, across all
subsystems, and into the Oracle Database ensuring the performance and reliability of
both the microservices and the database. This approach ensures a robust, efficient, and
scalable solution for deploying and managing modern applications in a cloud-native
environment.
The following diagram illustrates this reference architecture.
Description of the illustration exadata-database-service.png
exadata-database-service-oracle.zip
The architecture has the following components:
- Region
An Oracle Cloud
Infrastructure region is a localized geographic area that contains one or more data centers, hosting availability domains. Regions are independent of other regions, and vast distances can separate them (across countries or even continents).
An Azure region is a geographical area in which
one or more physical Azure data centers, called availability zones, reside.
Regions are independent of other regions, and vast distances can separate them
(across countries or even continents).
Azure and OCI regions
are localized geographic areas. For Oracle Database@Azure, an Azure region is
connected to an OCI region, with availability zones (AZs) in Azure connected to
availability domains (ADs) in OCI. Azure and OCI region pairs are selected to
minimize distance and latency.
- Azure availability zone
An availability zone is a physically separate data
center within a region that is designed to be available and fault tolerant.
Availability zones are close enough to have low-latency connections to other
availability zones.
Subnet delegation is Microsoft's ability to inject a
managed service, specifically a platform-as-a-service service, directly into
your virtual network.
- Microsoft Azure Virtual Network
Microsoft Azure Virtual Network (VNet) is
the fundamental building block for your private network in Azure. VNet enables
many types of Azure resources, such as Azure virtual machines (VM), to securely
communicate with each other, the internet, and on-premises
networks.
Subnet delegation is Microsoft's ability to inject a managed
service, specifically a platform-as-a-service service, directly into your
virtual network.
- Azure Pipelines
Azure Pipelines are part of the
Azure DevOps service offered by Microsoft Azure to automatically builds, tests,
and deploys code projects for continuous integration, continuous testing and
continuous delivery. (CI-CD)
- Azure Kubernetes Service
Azure Kubernetes Service
(AKS) is a managed Kubernetes service offered by Microsoft Azure to deploy and
manage containerized applications. A Kubernetes cluster can contain multiple
pods.
- Kubernetes Control Plane
A Kubernetes control plane manages the resources
for the worker nodes and pods within a Kubernetes cluster. The control plane
components detect and respond to events, perform scheduling, and move cluster
resources.
- Oracle Exadata Database Service on Dedicated
Infrastructure
Oracle Exadata Database
Service delivers proven Oracle Database capabilities on purpose-built, optimized
Oracle Exadata Cloud Infrastructure in the public cloud. Built-in cloud
automation, elastic resource scaling, security, and fast performance for OLTP,
in-memory analytics, and converged Oracle Database workloads help simplify
management and reduce costs.
Oracle Exadata Cloud Infrastructure brings
more CPU cores, increased storage, and a faster network fabric to the public
cloud. Oracle Exadata storage servers include Exadata RDMA Memory (XRMEM),
creating an additional tier of storage, boosting overall system performance.
Exadata combines XRMEM with innovative RDMA algorithms that bypass the network
and I/O stack, eliminating expensive CPU interrupts and context
switches.
Oracle Exadata Cloud Infrastructure increases the throughput of
its 100 Gbps active-active Remote Direct Memory Access over Converged Ethernet
(RoCE) internal network fabric, providing a faster interconnect than previous
generations with extremely low-latency between all compute and storage
servers.
- Oracle Database Autonomous
Recovery Service
Oracle Database Autonomous
Recovery Service is a fully managed service designed to protect Oracle Databases from data loss and cyber threats. It offers faster backups with reduced database overhead, reliable recovery with validated backups, and real-time protection enabling recovery to within less than a second of an outage or ransomware attack. Oracle Database Zero Data Loss Autonomous Recovery Service is a Zero Data Loss option for the Autonomous Recovery Service. This service provides a centralized data protection dashboard and is recommended for backing up Oracle Databases.
- Oracle Database@Azure
Oracle Database@Azure is the Oracle Database service ( Oracle Exadata Database Service on Dedicated
Infrastructure and Oracle Autonomous Database Serverless ) running on Oracle Cloud
Infrastructure (OCI), deployed in Microsoft Azure data centers. The service offers features and price parity with OCI. Purchase the service on Azure Marketplace.
Oracle Database@Azure integrates Oracle Exadata Database
Service , Oracle Real Application Clusters (Oracle
RAC) , and Oracle Data Guard technologies into the Azure platform. Users manage the service on the Azure console and with Azure automation tools. The service is deployed in Azure Virtual Network (VNet) and integrated with the Azure identity and access management system. The OCI and Oracle Database generic metrics and audit logs are natively

View File

@@ -0,0 +1,548 @@
# Auto-extracted absolute_layout template from
# kb/diagram/assets/archcenter-refs/azure-pipeline-exacs-dbazure/exadata-database-service-oracle/exadata-database-service.drawio
# Source: Oracle Architecture Center reference (canonical geometry).
# Use this as the starting scaffold for a new spec — copy, rename ids,
# and replace `type: TODO_identify` on services with the right OCI
# type alias (adb_s, drg, fastconnect, etc.). Container coords and
# edge waypoints are Oracle's canonical layout; preserve unless the
# customer's topology requires a change.
absolute_layout:
canvas:
width: 850
height: 1100
containers: []
services:
- id: s1
type: TODO_identify
label: ''
x: 1167
y: 50
w: 28
h: 31
- id: s14
type: TODO_identify
label: ''
x: 197
y: 169
w: 63
h: 63
- id: s28
type: TODO_identify
label: ''
x: 344
y: 169
w: 63
h: 63
- id: s24
type: TODO_identify
label: ''
x: 446
y: 169
w: 63
h: 63
- id: s20
type: TODO_identify
label: ''
x: 546
y: 169
w: 57
h: 63
- id: s13
type: TODO_identify
label: ''
x: 197
y: 170
w: 62
h: 62
- id: s15
type: TODO_identify
label: ''
x: 198
y: 170
w: 60
h: 60
- id: s27
type: TODO_identify
label: ''
x: 345
y: 170
w: 61
h: 61
- id: s29
type: TODO_identify
label: ''
x: 345
y: 170
w: 60
h: 60
- id: s23
type: TODO_identify
label: ''
x: 447
y: 170
w: 61
h: 61
- id: s25
type: TODO_identify
label: ''
x: 448
y: 170
w: 43
h: 56
- id: s19
type: TODO_identify
label: ''
x: 547
y: 170
w: 56
h: 61
- id: s21
type: TODO_identify
label: ''
x: 548
y: 170
w: 43
h: 56
- id: s30
type: TODO_identify
label: ''
x: 357
y: 184
w: 36
h: 34
- id: s11
type: TODO_identify
label: ''
x: 57
y: 186
w: 63
h: 46
- id: s12
type: TODO_identify
label: ''
x: 58
y: 187
w: 44
h: 44
- id: s26
type: TODO_identify
label: ''
x: 478
y: 191
w: 28
h: 28
- id: s54
type: TODO_identify
label: ''
x: 1403
y: 199
w: 63
h: 33
- id: s53
type: TODO_identify
label: ''
x: 1404
y: 200
w: 61
h: 31
- id: s55
type: TODO_identify
label: ''
x: 1404
y: 201
w: 60
h: 30
- id: s22
type: TODO_identify
label: ''
x: 577
y: 206
w: 24
h: 24
- id: s9
type: TODO_identify
label: ''
x: 61
y: 321
w: 57
h: 63
- id: s17
type: TODO_identify
label: ''
x: 197
y: 321
w: 63
h: 63
- id: s32
type: TODO_identify
label: ''
x: 347
y: 321
w: 56
h: 63
- id: s41
type: TODO_identify
label: ''
x: 543
y: 321
w: 63
h: 63
- id: s16
type: TODO_identify
label: ''
x: 197
y: 322
w: 62
h: 62
- id: s31
type: TODO_identify
label: ''
x: 348
y: 322
w: 55
h: 61
- id: s40
type: TODO_identify
label: ''
x: 544
y: 322
w: 61
h: 62
- id: s8
type: TODO_identify
label: ''
x: 63
y: 323
w: 53
h: 59
- id: s18
type: TODO_identify
label: ''
x: 198
y: 323
w: 60
h: 60
- id: s43
type: TODO_identify
label: ''
x: 572
y: 323
w: 33
h: 33
- id: s42
type: TODO_identify
label: ''
x: 545
y: 326
w: 57
h: 56
- id: s34
type: TODO_identify
label: ''
x: 446
y: 328
w: 61
h: 55
- id: s35
type: TODO_identify
label: ''
x: 446
y: 328
w: 63
h: 57
- id: s33
type: TODO_identify
label: ''
x: 349
y: 329
w: 35
h: 50
- id: s36
type: TODO_identify
label: ''
x: 447
y: 329
w: 54
h: 54
- id: s38
type: TODO_identify
label: ''
x: 463
y: 331
w: 39
h: 30
- id: s37
type: TODO_identify
label: ''
x: 454
y: 336
w: 41
h: 41
- id: s39
type: TODO_identify
label: ''
x: 458
y: 336
w: 48
h: 34
- id: s10
type: TODO_identify
label: ''
x: 66
y: 343
w: 47
h: 37
- id: s6
type: TODO_identify
label: ''
x: 61
y: 457
w: 57
h: 63
- id: s45
type: TODO_identify
label: ''
x: 447
y: 457
w: 58
h: 63
- id: s57
type: TODO_identify
label: ''
x: 1403
y: 457
w: 63
h: 63
- id: s56
type: TODO_identify
label: ''
x: 1404
y: 457
w: 62
h: 62
- id: s44
type: TODO_identify
label: ''
x: 448
y: 458
w: 57
h: 61
- id: s46
type: TODO_identify
label: ''
x: 449
y: 458
w: 55
h: 60
- id: s5
type: TODO_identify
label: ''
x: 63
y: 459
w: 53
h: 59
- id: s62
type: TODO_identify
label: ''
x: 1076
y: 461
w: 96
h: 127
- id: s72
type: TODO_identify
label: ''
x: 652
y: 464
w: 135
h: 53
- id: s63
type: TODO_identify
label: ''
x: 1079
y: 464
w: 90
h: 45
- id: s58
type: TODO_identify
label: ''
x: 1404
y: 464
w: 60
h: 54
- id: s7
type: TODO_identify
label: ''
x: 66
y: 478
w: 47
h: 37
- id: s67
type: TODO_identify
label: ''
x: 958
y: 479
w: 63
h: 40
- id: s66
type: TODO_identify
label: ''
x: 959
y: 480
w: 62
h: 39
- id: s71
type: TODO_identify
label: ''
x: 647
y: 482
w: 135
h: 31
- id: s65
type: TODO_identify
label: ''
x: 1102
y: 489
w: 47
h: 97
- id: s68
type: TODO_identify
label: ''
x: 509
y: 491
w: 75
h: 211
- id: s61
type: TODO_identify
label: ''
x: 1107
y: 493
w: 38
h: 87
- id: s64
type: TODO_identify
label: ''
x: 1107
y: 493
w: 38
h: 87
- id: s3
type: TODO_identify
label: ''
x: 1260
y: 537
w: 42
h: 42
- id: s2
type: TODO_identify
label: ''
x: 1260
y: 538
w: 41
h: 41
- id: s4
type: TODO_identify
label: ''
x: 1261
y: 552
w: 29
h: 26
- id: s48
type: TODO_identify
label: ''
x: 447
y: 562
w: 58
h: 63
- id: s59
type: TODO_identify
label: ''
x: 823
y: 562
w: 55
h: 63
- id: s47
type: TODO_identify
label: ''
x: 448
y: 563
w: 57
h: 61
- id: s49
type: TODO_identify
label: ''
x: 449
y: 564
w: 55
h: 60
- id: s60
type: TODO_identify
label: ''
x: 825
y: 564
w: 34
h: 25
- id: s73
type: TODO_identify
label: ''
x: 1291
y: 595
w: 41
h: 41
- id: s74
type: TODO_identify
label: ''
x: 1291
y: 595
w: 42
h: 42
- id: s75
type: TODO_identify
label: ''
x: 1291
y: 595
w: 30
h: 31
- id: s76
type: TODO_identify
label: ''
x: 1296
y: 600
w: 36
h: 36
- id: s70
type: TODO_identify
label: ''
x: 954
y: 605
w: 72
h: 32
- id: s69
type: TODO_identify
label: ''
x: 951
y: 611
w: 78
h: 31
- id: s51
type: TODO_identify
label: ''
x: 447
y: 668
w: 58
h: 63
- id: s50
type: TODO_identify
label: ''
x: 448
y: 669
w: 57
h: 61
- id: s52
type: TODO_identify
label: ''
x: 449
y: 670
w: 55
h: 60
labels: []
connections: []

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 148 KiB

View File

@@ -0,0 +1,7 @@
The diagram you downloaded is available in these formats:
- DRAWIO
- SVG
You can customize them for your organization using the associated tools:
- For DRAWIO format, use draw.io for Confluence, online at diagrams.net, or the desktop app. Go to diagrams.net for more information.
- For SVG format, use an SVG editor such as Inkscape or Sketsa SVG Editor, which are free and available for Windows, macOS, Linux.

View File

@@ -0,0 +1,229 @@
# Back up from Oracle Base Database Service to Zero Data Loss Autonomous Recovery
- Source: https://docs.oracle.com/en/solutions/back-up-base-database-zero-data-loss-recovery/index.html
- Date: 2025-07
- Type: reference-architecture
- Services: base-db
- Tags: database, ha-dr
## Summary (catalog)
Autonomous Recovery Service for Base DB backups. Real-time protection with continuous redo log shipping. Point-in-time recovery with sub-second RPO for mission-critical workloads.
## Architecture (fetched from source)
Architecture
This playbook describes how to perform backup and recovery operations between Oracle Base Database Service and Recovery
Service .
Description of the illustration base-database-recovery-backup-architecture.png
base-database-recovery-backup-architecture.zip
Before You Begin
Before you begin, check the versions of major software components used in this setup, and review the product documentation for later reference
Review Software Requirements
- Oracle Database 19.18 and above, or 21.8 and above
- Oracle Base Database Service
Review Documentation
- Introducing the Oracle Database Zero Data Loss Autonomous Recovery Service
- About Oracle Database Autonomous Recovery Service
- "Back Up and Recovery in Base Database Service" in Oracle Cloud
Infrastructure documentation
Considerations for Configuration
Before you begin to configure backups and recovery, review these assumptions and considerations.
- The virtual cloud network (VCN) where Oracle Base Database Service is configured, must route packages to the OCI Services Network (where Recovery
Service is configured) via a service gateway.
- There are two types of backups: Oracle managed backups and unmanaged backups. Oracle managed backups are configured using the OCI console or REST API. Unmanaged backups are configured using dbaascli or RMAN .
- This playbook uses Oracle managed backups to Recovery
Service . Unmanaged backups are out of scope of this playbook.
- Combining Oracle managed backups and unmanaged backups is not supported.
- The Recovery
Service enables databases to restore to the last known good state with minimal data loss, to a specific timestamp, or SCN. The OCI console, however, does not support restoring a database from a specific backup from the list of backups displayed in the interface. Although it's not possible to restore a database from a backup in this list, the list of backups can be used as a reference as to what data is currently available to restore the database.
- The OCI console cannot restore a particular pluggable database (PDB) . Only the full container database (CDB) can be restored.
About Required Products and Roles
This solution requires the following products:
- Oracle Cloud
Infrastructure
- Oracle Cloud Infrastructure Identity
and Access Management
- Oracle Base Database Service
- Oracle Database Zero Data Loss Autonomous Recovery Service
- Oracle Database
These are the roles needed for each product.
Product Name: Role
Required to...
Oracle Cloud
Infrastructure : VCN admin
Add OCI services gateway and create security rules to allow connections from Oracle Database Zero Data Loss Autonomous Recovery Service to the Oracle Base Database Service backup network.
Oracle Cloud Infrastructure Identity
and Access Management : IAM service admin
Add security policies for Oracle Database Zero Data Loss Autonomous Recovery Service .
Oracle Base Database Service : database admin
- Create database with automatic backups to Oracle Database Zero Data Loss Autonomous Recovery Service .
- Modify database to add automatic backups to Oracle Database Zero Data Loss Autonomous Recovery Service .
Oracle Database Zero Data Loss Autonomous Recovery Service : admin
Add Oracle Database Zero Data Loss Autonomous Recovery Service subnet for Oracle Base Database Service backups.
Oracle Database : sys
Configure backups to Oracle Database Zero Data Loss Autonomous Recovery Service .
See Oracle Products, Solutions, and Services to get what you need.
Title and Copyright Information
Back up Oracle Base Database Service to Oracle Database Zero Data Loss Autonomous Recovery
F84016-03
July 2025
Copyright © 2023,2025,
Oracle and/or its affiliates.

View File

@@ -0,0 +1,373 @@
# Auto-extracted absolute_layout template from
# kb/diagram/assets/archcenter-refs/back-up-base-database-zero-data-loss-recovery/base-database-recovery-backup-architecture/base-database-recovery-backup-architecture.drawio
# Source: Oracle Architecture Center reference (canonical geometry).
# Use this as the starting scaffold for a new spec — copy, rename ids,
# and replace `type: TODO_identify` on services with the right OCI
# type alias (adb_s, drg, fastconnect, etc.). Container coords and
# edge waypoints are Oracle's canonical layout; preserve unless the
# customer's topology requires a change.
absolute_layout:
canvas:
width: 850
height: 1100
containers:
- id: c1
type: region
label: ''
x: 0
y: 0
w: 413
h: 505
- id: c7
type: region
label: ''
x: 229
y: 261
w: 2
h: 80
- id: c9
type: region
label: ''
x: 29
y: 158
w: 2
h: 63
- id: c4
type: region
label: ''
x: 351
y: 359
w: 46
h: 2
services:
- id: '9'
type: TODO_identify
label: ''
x: 0
y: 0
w: 41
h: 39
- id: '10'
type: TODO_identify
label: ''
x: 0
y: 0
w: 42
h: 40
- id: '16'
type: TODO_identify
label: ''
x: 0
y: 0
w: 42
h: 42
- id: '17'
type: TODO_identify
label: ''
x: 0
y: 0
w: 41
h: 41
- id: '18'
type: TODO_identify
label: ''
x: 0
y: 0
w: 42
h: 42
- id: '38'
type: TODO_identify
label: ''
x: 0
y: 0
w: 41
h: 38
- id: '39'
type: TODO_identify
label: ''
x: 0
y: 0
w: 42
h: 39
- id: '44'
type: TODO_identify
label: ''
x: 0
y: 0
w: 62
h: 58
- id: '45'
type: TODO_identify
label: ''
x: 0
y: 0
w: 63
h: 59
- id: '68'
type: TODO_identify
label: ''
x: 0
y: 0
w: 42
h: 42
- id: '69'
type: TODO_identify
label: ''
x: 0
y: 0
w: 41
h: 41
- id: '70'
type: TODO_identify
label: ''
x: 0
y: 0
w: 42
h: 42
- id: '77'
type: TODO_identify
label: ''
x: 0
y: 0
w: 38
h: 63
- id: '78'
type: TODO_identify
label: ''
x: 0
y: 0
w: 37
h: 61
- id: '79'
type: TODO_identify
label: ''
x: 0
y: 0
w: 38
h: 63
- id: '95'
type: TODO_identify
label: ''
x: 0
y: 0
w: 63
h: 59
- id: '96'
type: TODO_identify
label: ''
x: 0
y: 0
w: 62
h: 58
- id: '97'
type: TODO_identify
label: ''
x: 0
y: 0
w: 63
h: 59
- id: '101'
type: TODO_identify
label: ''
x: 0
y: 0
w: 62
h: 58
- id: '102'
type: TODO_identify
label: ''
x: 0
y: 0
w: 63
h: 59
- id: '11'
type: TODO_identify
label: ''
x: 1
y: 0
w: 40
h: 38
- id: '55'
type: TODO_identify
label: ''
x: 11
y: 0
w: 42
h: 42
- id: '56'
type: TODO_identify
label: ''
x: 11
y: 0
w: 41
h: 41
- id: '57'
type: TODO_identify
label: ''
x: 11
y: 0
w: 42
h: 42
- id: '58'
type: TODO_identify
label: ''
x: 11
y: 0
w: 30
h: 31
- id: '40'
type: TODO_identify
label: ''
x: 0
y: 1
w: 40
h: 37
- id: '19'
type: TODO_identify
label: ''
x: 1
y: 1
w: 40
h: 40
- id: '46'
type: TODO_identify
label: ''
x: 1
y: 1
w: 48
h: 33
- id: '71'
type: TODO_identify
label: ''
x: 1
y: 1
w: 40
h: 40
- id: '80'
type: TODO_identify
label: ''
x: 1
y: 1
w: 35
h: 60
- id: '81'
type: TODO_identify
label: ''
x: 1
y: 1
w: 35
h: 60
- id: '98'
type: TODO_identify
label: ''
x: 1
y: 1
w: 60
h: 57
- id: '103'
type: TODO_identify
label: ''
x: 1
y: 1
w: 60
h: 30
- id: '59'
type: TODO_identify
label: ''
x: 16
y: 5
w: 36
h: 36
- id: '20'
type: TODO_identify
label: ''
x: 1
y: 14
w: 29
h: 26
- id: '104'
type: TODO_identify
label: ''
x: 14
y: 19
w: 34
h: 38
- id: '47'
type: TODO_identify
label: ''
x: 35
y: 23
w: 26
h: 35
- id: s2
type: TODO_identify
label: ''
x: 352
y: 29
w: 42
h: 40
- id: '63'
type: TODO_identify
label: ''
x: 0
y: 45
w: 123
h: 37
- id: s3
type: TODO_identify
label: ''
x: 342
y: 69
w: 42
h: 42
- id: s13
type: TODO_identify
label: ''
x: 197
y: 141
w: 63
h: 59
- id: s10
type: TODO_identify
label: ''
x: 9
y: 158
w: 55
h: 66
- id: s8
type: TODO_identify
label: ''
x: 198
y: 261
w: 123
h: 82
- id: s5
type: TODO_identify
label: ''
x: 353
y: 341
w: 42
h: 39
- id: s11
type: TODO_identify
label: ''
x: 211
y: 402
w: 38
h: 63
- id: s6
type: TODO_identify
label: ''
x: 75
y: 405
w: 63
h: 59
- id: s12
type: TODO_identify
label: ''
x: 322
y: 405
w: 63
h: 59
labels: []
connections: []

View File

@@ -0,0 +1,7 @@
The diagram you downloaded is available in these formats:
- DRAWIO
- SVG
You can customize them for your organization using the associated tools:
- For DRAWIO format, use draw.io for Confluence, online at diagrams.net, or the desktop app. Go to diagrams.net for more information.
- For SVG format, use an SVG editor such as Inkscape or Sketsa SVG Editor, which are free and available for Windows, macOS, Linux.

View File

@@ -0,0 +1,236 @@
# Back up from Exadata on Dedicated Infrastructure to Zero Data Loss Autonomous Recovery
- Source: https://docs.oracle.com/en/solutions/back-up-exadata-dedicated-zero-data-loss-recovery/index.html
- Date: 2025-07
- Type: reference-architecture
- Services: exacs
- Tags: database, ha-dr
## Summary (catalog)
Autonomous Recovery Service for ExaCS backups. Automated backup management with real-time redo protection. Validates backup recoverability automatically.
## Architecture (fetched from source)
Architecture
This playbook describes how to perform backup and recovery operations between Oracle Exadata Database Service on Dedicated
Infrastructure and Recovery
Service .
Description of the illustration exadata-dedicated-recovery-backup-architecture.png
exadata-dedicated-recovery-backup-architecture.zip
Before You Begin
Before you begin, check the versions of major software components used in this setup, and review the product documentation for later reference
Review Software Requirements
- Oracle Exadata Database Service on Dedicated
Infrastructure
- Oracle Database Enterprise Edition Extreme Performance 19.18 or newer
Review Documentation
- Introducing the Oracle Database Zero Data Loss Autonomous Recovery Service
- About Oracle Database Autonomous Recovery Service
- "Back Up and Recovery in Base Database Service" in Oracle Cloud
Infrastructure documentation
Considerations for Configuration
Before you begin to configure backups and recovery, review these assumptions and considerations.
- The virtual cloud network (VCN) where Oracle Exadata Database Service on Dedicated
Infrastructure is configured, must route packages to the OCI Services Network (where Recovery
Service is configured) via a service gateway.
- There are two types of backups: Oracle managed backups and user configured backups. Oracle managed backups are configured using the OCI console or REST API. User configured backups are configured using the dbaascli only.
- This playbook uses Oracle managed backups to Recovery
Service . User configured backups are out of scope of this playbook.
- Combining Oracle managed backups and user configured backups is not supported.
- The Recovery
Service enables databases to restore to the last known good state with minimal data loss, to a specific timestamp, or SCN. The OCI console, however, does not support restoring a database from a specific backup from the list of backups displayed in the console. Although it's not possible to restore a database from a backup in this list, the list of backups can be used as a reference as to what data is currently available for restore operations.
- The OCI console cannot restore a particular pluggable database (PDB) . Only the full container database (CDB) can be restored.
About Required Products and Roles
This solution requires the following products and roles:
- Oracle Cloud
Infrastructure
- Oracle Cloud Infrastructure Identity
and Access Management
- Oracle Exadata Database Service on Dedicated
Infrastructure
- Oracle Database Zero Data Loss Autonomous Recovery Service
- Oracle Database
These are the roles needed for each product.
Service Name: Role
Required to...
Oracle Cloud
Infrastructure : VCN admin
Add OCI services gateway and create security rules to allow connections from Oracle Database Zero Data Loss Autonomous Recovery Service to the Oracle Exadata Database Service on Dedicated
Infrastructure backup network.
Oracle Cloud Infrastructure Identity
and Access Management : IAM service admin
Add security policies for Oracle Database Zero Data Loss Autonomous Recovery Service .
Oracle Exadata Database Service on Dedicated
Infrastructure : database admin
- Create database with Oracle managed backups to Oracle Database Zero Data Loss Autonomous Recovery Service .
- Modify database to add Oracle managed backups to Oracle Database Zero Data Loss Autonomous Recovery Service .
Oracle Database Zero Data Loss Autonomous Recovery Service : admin
Add Oracle Database Zero Data Loss Autonomous Recovery Service subnet for Oracle Exadata Database Service on Dedicated
Infrastructure backups.
Oracle Database : sys
Configure backups to Oracle Database Zero Data Loss Autonomous Recovery Service .
See Oracle Products, Solutions, and Services to get what you need.
Title and Copyright Information
Back up Oracle Exadata on Dedicated Infrastructure to Oracle Zero Data Loss Autonomous Recovery Service
F84015-04
July 2025
Copyright © 2023,2025,
Oracle and/or its affiliates.

View File

@@ -0,0 +1,408 @@
# Auto-extracted absolute_layout template from
# kb/diagram/assets/archcenter-refs/back-up-exadata-dedicated-zero-data-loss-recovery/exadata-dedicated-recovery-backup-architecture/exadata-dedicated-recovery-backup-architecture.drawio
# Source: Oracle Architecture Center reference (canonical geometry).
# Use this as the starting scaffold for a new spec — copy, rename ids,
# and replace `type: TODO_identify` on services with the right OCI
# type alias (adb_s, drg, fastconnect, etc.). Container coords and
# edge waypoints are Oracle's canonical layout; preserve unless the
# customer's topology requires a change.
absolute_layout:
canvas:
width: 850
height: 1100
containers:
- id: c1
type: region
label: ''
x: 270
y: 300
w: 406
h: 601
- id: c8
type: region
label: ''
x: 492
y: 649
w: 2
h: 80
- id: c11
type: region
label: ''
x: 299
y: 492
w: 2
h: 63
- id: c5
type: region
label: ''
x: 613
y: 755
w: 46
h: 2
services:
- id: HmliP5wbrd6Yz27v1M2G-7
type: TODO_identify
label: ''
x: 0
y: 0
w: 41
h: 39
- id: HmliP5wbrd6Yz27v1M2G-8
type: TODO_identify
label: ''
x: 0
y: 0
w: 42
h: 40
- id: HmliP5wbrd6Yz27v1M2G-14
type: TODO_identify
label: ''
x: 0
y: 0
w: 42
h: 42
- id: HmliP5wbrd6Yz27v1M2G-15
type: TODO_identify
label: ''
x: 0
y: 0
w: 41
h: 41
- id: HmliP5wbrd6Yz27v1M2G-16
type: TODO_identify
label: ''
x: 0
y: 0
w: 42
h: 42
- id: HmliP5wbrd6Yz27v1M2G-36
type: TODO_identify
label: ''
x: 0
y: 0
w: 42
h: 42
- id: HmliP5wbrd6Yz27v1M2G-37
type: TODO_identify
label: ''
x: 0
y: 0
w: 41
h: 41
- id: HmliP5wbrd6Yz27v1M2G-38
type: TODO_identify
label: ''
x: 0
y: 0
w: 42
h: 42
- id: HmliP5wbrd6Yz27v1M2G-58
type: TODO_identify
label: ''
x: 0
y: 0
w: 41
h: 38
- id: HmliP5wbrd6Yz27v1M2G-59
type: TODO_identify
label: ''
x: 0
y: 0
w: 42
h: 39
- id: HmliP5wbrd6Yz27v1M2G-64
type: TODO_identify
label: ''
x: 0
y: 0
w: 62
h: 58
- id: HmliP5wbrd6Yz27v1M2G-65
type: TODO_identify
label: ''
x: 0
y: 0
w: 63
h: 59
- id: HmliP5wbrd6Yz27v1M2G-75
type: TODO_identify
label: ''
x: 0
y: 0
w: 41
h: 41
- id: HmliP5wbrd6Yz27v1M2G-76
type: TODO_identify
label: ''
x: 0
y: 0
w: 42
h: 42
- id: HmliP5wbrd6Yz27v1M2G-77
type: TODO_identify
label: ''
x: 0
y: 0
w: 30
h: 31
- id: HmliP5wbrd6Yz27v1M2G-87
type: TODO_identify
label: ''
x: 0
y: 0
w: 41
h: 41
- id: HmliP5wbrd6Yz27v1M2G-88
type: TODO_identify
label: ''
x: 0
y: 0
w: 42
h: 42
- id: HmliP5wbrd6Yz27v1M2G-95
type: TODO_identify
label: ''
x: 0
y: 0
w: 38
h: 63
- id: HmliP5wbrd6Yz27v1M2G-96
type: TODO_identify
label: ''
x: 0
y: 0
w: 37
h: 61
- id: HmliP5wbrd6Yz27v1M2G-97
type: TODO_identify
label: ''
x: 0
y: 0
w: 38
h: 63
- id: HmliP5wbrd6Yz27v1M2G-113
type: TODO_identify
label: ''
x: 0
y: 0
w: 63
h: 59
- id: HmliP5wbrd6Yz27v1M2G-114
type: TODO_identify
label: ''
x: 0
y: 0
w: 62
h: 58
- id: HmliP5wbrd6Yz27v1M2G-115
type: TODO_identify
label: ''
x: 0
y: 0
w: 63
h: 59
- id: HmliP5wbrd6Yz27v1M2G-119
type: TODO_identify
label: ''
x: 0
y: 0
w: 46
h: 62
- id: HmliP5wbrd6Yz27v1M2G-120
type: TODO_identify
label: ''
x: 0
y: 0
w: 48
h: 63
- id: HmliP5wbrd6Yz27v1M2G-9
type: TODO_identify
label: ''
x: 1
y: 0
w: 40
h: 38
- id: HmliP5wbrd6Yz27v1M2G-60
type: TODO_identify
label: ''
x: 0
y: 1
w: 40
h: 37
- id: HmliP5wbrd6Yz27v1M2G-17
type: TODO_identify
label: ''
x: 1
y: 1
w: 40
h: 40
- id: HmliP5wbrd6Yz27v1M2G-39
type: TODO_identify
label: ''
x: 1
y: 1
w: 40
h: 40
- id: HmliP5wbrd6Yz27v1M2G-66
type: TODO_identify
label: ''
x: 1
y: 1
w: 48
h: 33
- id: HmliP5wbrd6Yz27v1M2G-89
type: TODO_identify
label: ''
x: 1
y: 1
w: 40
h: 40
- id: HmliP5wbrd6Yz27v1M2G-98
type: TODO_identify
label: ''
x: 1
y: 1
w: 35
h: 60
- id: HmliP5wbrd6Yz27v1M2G-99
type: TODO_identify
label: ''
x: 1
y: 1
w: 35
h: 60
- id: HmliP5wbrd6Yz27v1M2G-116
type: TODO_identify
label: ''
x: 1
y: 1
w: 60
h: 57
- id: HmliP5wbrd6Yz27v1M2G-78
type: TODO_identify
label: ''
x: 5
y: 5
w: 36
h: 36
- id: HmliP5wbrd6Yz27v1M2G-122
type: TODO_identify
label: ''
x: 10
y: 13
w: 29
h: 48
- id: HmliP5wbrd6Yz27v1M2G-123
type: TODO_identify
label: ''
x: 10
y: 13
w: 29
h: 48
- id: HmliP5wbrd6Yz27v1M2G-18
type: TODO_identify
label: ''
x: 1
y: 14
w: 29
h: 26
- id: HmliP5wbrd6Yz27v1M2G-40
type: TODO_identify
label: ''
x: 1
y: 14
w: 29
h: 26
- id: HmliP5wbrd6Yz27v1M2G-121
type: TODO_identify
label: ''
x: 11
y: 14
w: 27
h: 46
- id: HmliP5wbrd6Yz27v1M2G-67
type: TODO_identify
label: ''
x: 35
y: 23
w: 26
h: 35
- id: s2
type: TODO_identify
label: ''
x: 614
y: 329
w: 42
h: 40
- id: s3
type: TODO_identify
label: ''
x: 605
y: 369
w: 42
h: 42
- id: s15
type: TODO_identify
label: ''
x: 469
y: 474
w: 48
h: 63
- id: s12
type: TODO_identify
label: ''
x: 279
y: 492
w: 42
h: 42
- id: s4
type: TODO_identify
label: ''
x: 605
y: 507
w: 42
h: 42
- id: s9
type: TODO_identify
label: ''
x: 472
y: 649
w: 42
h: 42
- id: s10
type: TODO_identify
label: ''
x: 460
y: 695
w: 123
h: 37
- id: s6
type: TODO_identify
label: ''
x: 616
y: 736
w: 42
h: 39
- id: s13
type: TODO_identify
label: ''
x: 474
y: 797
w: 38
h: 63
- id: s14
type: TODO_identify
label: ''
x: 585
y: 800
w: 63
h: 59
- id: s7
type: TODO_identify
label: ''
x: 337
y: 801
w: 63
h: 59
labels: []
connections: []

View File

@@ -0,0 +1,7 @@
The diagram you downloaded is available in these formats:
- DRAWIO
- SVG
You can customize them for your organization using the associated tools:
- For DRAWIO format, use draw.io for Confluence, online at diagrams.net, or the desktop app. Go to diagrams.net for more information.
- For SVG format, use an SVG editor such as Inkscape or Sketsa SVG Editor, which are free and available for Windows, macOS, Linux.

View File

@@ -0,0 +1,187 @@
# Run PeopleSoft ERP and Autonomous Database in an HA multicloud deployment
- Source: https://docs.oracle.com/en/solutions/bread-multicloud-on-oci/index.html
- Date: 2025-02
- Type: reference-architecture
- Services: adb-s, compute, load-balancer
- Tags: application, ha-dr, multicloud, peoplesoft, autonomous
## Summary (catalog)
PeopleSoft HA with ADB-S across cloud providers. Application tier on OCI compute with database on ADB-S. Multi-AZ deployment for high availability with automatic failover.
## Architecture (fetched from source)
Architecture
The Oracle partner has built and deployed a highly-available Oracle
PeopleSoft application using two availability domains in the Oracle Cloud
Infrastructure (OCI) region in Ashburn. They use the Phoenix region as a standby region for Oracle Autonomous Database and as a disaster recovery site.
Each of the web and application virtual machine (VM) instances are
configured as a high availability pair by using load balancers and by being placed in
different availability domains (AD). Each of the load balancers handles certain
PeopleSoft functions and URLs.
Separate instances of Oracle Autonomous Transaction
Processing on Dedicated Infrastructure (ATP-D) are created for each of the PeopleSoft functions:
Financials, Phire, Vertex, and Human Capital Management (HCM). Oracle Data Guard is used
to replicate the primary databases in Ashburn to standby databases in Phoenix.
They have also built and deployed development (DEV), user acceptance test
(UAT), quality assurance (QA), and test environments in the Phoenix region. Oracle Data
Guard and RackWare are also used for the DEV, UAT, QA, and test environments.
Windows Servers with file shares are used to store PeopleSoft configuration
files. Users are able to access PeopleSoft by using the Internet through an internet
gateway or from the partner private network by using Oracle Cloud
Infrastructure FastConnect to connect to the load balancers. After connecting to the load balancers, users are
redirected to an OKTA Access Gateway (OAG). The OAG is used for access authentication
and single sign-on (SSO) before allowing users to access PeopleSoft.
The move to OCI involved first migrating its PeopleSoft web/application tier
and Oracle Database to Oracle Exadata Database
Service . After realizing the benefits of ATP, the partner successfully migrated its 7 TB
PeopleSoft database to Oracle Autonomous Database . They recognized ease of maintenance and operation of Autonomous Database as key benefits for their modernization effort.
The following diagram illustrates the migration process:
Description of the illustration peoplesoft-migration-process.png
peoplesoft-migration-process-oracle.zip
The partner has built a multicloud architecture that integrates with banking
systems, SaaS applications, Microsoft Azure for Active Directory single sign-on (SSO),
and MuleSoft (SaaS) for data integration. These integrations connect to Oracle Cloud through their data center private network by using a customer-premises router and
then connect into the virtual cloud network (VCN) by using ATP.
For disaster recovery, they use Oracle Data Guard to replicate databases to
the Phoenix region and uses Oracle Cloud
Marketplace partner RackWare to take snapshots of VM instances. This allows them to quickly
recover in another region and continue operations in case of a disaster event.
To continue their cloud modernization and maturation journey, the partner has
future plans to move more systems into cloud native services to reduce the amount of
patching, upgrades, and maintenance required.
The following diagram illustrates this reference architecture.
Description of the illustration peoplesoft-prod-oci.png
peoplesoft-prod-oci-oracle.zip
The architecture has the following components:
- Tenancy
A tenancy is a secure and isolated partition that Oracle sets up within Oracle Cloud when you sign up for Oracle Cloud
Infrastructure . You can create, organize, and administer your resources in Oracle Cloud within your tenancy. A tenancy is synonymous with a company or organization. Usually, a company will have a single tenancy and reflect its organizational structure within that tenancy. A single tenancy is usually associated with a single subscription, and a single subscription usually only has one tenancy.
- Region
An Oracle Cloud
Infrastructure region is a localized geographic area that contains one or more data centers, called availability domains. Regions are independent of other regions, and vast distances can separate them (across countries or even continents).
- Audit
The Oracle Cloud Infrastructure Audit service automatically records calls to all supported Oracle Cloud
Infrastructure public application programming interface (API) endpoints as log events. All OCI services support logging by Oracle Cloud Infrastructure Audit .
- Policy
An Oracle Cloud Infrastructure Identity
and Access Management policy specifies who can access which resources, and how. Access is granted at the group and compartment level, which means you can write a policy that gives a group a specific type of access within a specific compartment, or to the tenancy.
- Logging
Oracle Cloud Infrastructure Logging is a highly-scalable and fully-managed service that provides access to the following types of logs from your resources in the cloud:
- Audit logs: Logs related to events produced by OCI Audit .
- Service logs: Logs published by individual services such as OCI API Gateway , OCI Events , OCI Functions , OCI Load Balancing , OCI Object Storage , and VCN flow logs.
- Custom logs: Logs that contain diagnostic information from custom applications, other cloud providers, or an on-premises environment.
- Object storage
OCI Object Storage provides quick access to large amounts of structured and unstructured data of any content type, including database backups, analytic data, and rich content such as images and videos. You can safely and securely store data directly from the internet or from within the cloud platform. You can scale storage without experiencing any degradation in performance or service reliability.
Use standard storage for "hot" storage that you need to access quickly, immediately, and frequently. Use archive storage for "cold" storage that you retain for long periods of time and seldom or rarely access.
- Compartment
Compartments are cross-regional logical partitions within an Oracle Cloud
Infrastructure tenancy. Use compartments to organize, control access, and set usage quotas for your Oracle Cloud resources. In a given compartment, you define policies that control access and set privileges for resources.
- Availability domain
Availability domains are standalone, independent data centers within a region. The physical resources in each availability domain are isolated from the resources in the other availability domains, which provides fault tolerance. Availability domains dont share infrastructure such as power or cooling, or the internal availability domain network. So, a failure at one availability domain shouldn't affect the other availability domains in the region.
- Virtual cloud network (VCN) and subnets
A VCN is a customizable, software-defined network that you set up in an Oracle Cloud
Infrastructure region. Like traditional data center networks, VCNs give you control over your network environment. A VCN can have multiple non-overlapping CIDR blocks that you can change after you create the VCN. You can segment a VCN into subnets, which can be scoped to a region or to an availability domain. Each subnet consists of a contiguous range of addresses that don't overlap with the other subnets in the VCN. You can change the size of a subnet after creation. A subnet can be public or private.
- Security list
For each subnet, you can create security rules that specify the source, destination, and type of traffic that must be allowed in and out of the subnet.
- Route table
Virtual route tables contain rules to route traffic from subnets to destinations outside a VCN, typically through gateways.
- Internet gateway
An internet gateway allows traffic between the public subnets in a VCN and the public internet.
- Dynamic routing gateway (DRG)
The DRG is a virtual router that provides a path for private network traffic between VCNs in the sa

View File

@@ -0,0 +1,513 @@
# Auto-extracted absolute_layout template from
# kb/diagram/assets/archcenter-refs/bread-multicloud-on-oci/peoplesoft-migration-process-oracle/peoplesoft-migration-process.drawio
# Source: Oracle Architecture Center reference (canonical geometry).
# Use this as the starting scaffold for a new spec — copy, rename ids,
# and replace `type: TODO_identify` on services with the right OCI
# type alias (adb_s, drg, fastconnect, etc.). Container coords and
# edge waypoints are Oracle's canonical layout; preserve unless the
# customer's topology requires a change.
absolute_layout:
canvas:
width: 850
height: 1100
containers:
- id: '9'
type: region
label: ''
x: 0
y: 75
w: 159
h: 549
- id: '39'
type: region
label: ''
x: 347
y: 75
w: 159
h: 549
- id: '70'
type: region
label: ''
x: 728
y: 75
w: 159
h: 532
- id: '76'
type: region
label: ''
x: 1058
y: 75
w: 159
h: 532
services:
- id: '12'
type: TODO_identify
label: ''
x: 42
y: 143
w: 170
h: 121
- id: '13'
type: TODO_identify
label: ''
x: 48
y: 143
w: 63
h: 63
- id: '14'
type: TODO_identify
label: ''
x: 48
y: 143
w: 61
h: 61
- id: '15'
type: TODO_identify
label: ''
x: 48
y: 143
w: 63
h: 63
- id: '43'
type: TODO_identify
label: ''
x: 389
y: 143
w: 159
h: 121
- id: '44'
type: TODO_identify
label: ''
x: 395
y: 143
w: 63
h: 63
- id: '45'
type: TODO_identify
label: ''
x: 395
y: 143
w: 61
h: 61
- id: '46'
type: TODO_identify
label: ''
x: 395
y: 143
w: 63
h: 63
- id: '80'
type: TODO_identify
label: ''
x: 770
y: 143
w: 135
h: 104
- id: '81'
type: TODO_identify
label: ''
x: 776
y: 143
w: 63
h: 63
- id: '82'
type: TODO_identify
label: ''
x: 776
y: 143
w: 61
h: 61
- id: '83'
type: TODO_identify
label: ''
x: 776
y: 143
w: 63
h: 63
- id: '92'
type: TODO_identify
label: ''
x: 1104
y: 143
w: 135
h: 104
- id: '93'
type: TODO_identify
label: ''
x: 1106
y: 143
w: 63
h: 63
- id: '94'
type: TODO_identify
label: ''
x: 1106
y: 143
w: 62
h: 62
- id: '95'
type: TODO_identify
label: ''
x: 1106
y: 143
w: 63
h: 63
- id: '16'
type: TODO_identify
label: ''
x: 49
y: 144
w: 60
h: 60
- id: '47'
type: TODO_identify
label: ''
x: 396
y: 144
w: 60
h: 60
- id: '84'
type: TODO_identify
label: ''
x: 777
y: 144
w: 60
h: 60
- id: '103'
type: TODO_identify
label: ''
x: 1107
y: 144
w: 60
h: 30
- id: '20'
type: TODO_identify
label: ''
x: 59
y: 159
w: 40
h: 40
- id: '51'
type: TODO_identify
label: ''
x: 406
y: 159
w: 40
h: 40
- id: '88'
type: TODO_identify
label: ''
x: 787
y: 159
w: 40
h: 40
- id: '101'
type: TODO_identify
label: ''
x: 1123
y: 160
w: 31
h: 44
- id: '193'
type: TODO_identify
label: ''
x: 205
y: 176
w: 182
h: 51
- id: '21'
type: TODO_identify
label: ''
x: 42
y: 210
w: 170
h: 54
- id: '52'
type: TODO_identify
label: ''
x: 389
y: 210
w: 159
h: 54
- id: '89'
type: TODO_identify
label: ''
x: 770
y: 210
w: 135
h: 37
- id: '104'
type: TODO_identify
label: ''
x: 1104
y: 210
w: 135
h: 37
- id: '107'
type: TODO_identify
label: ''
x: 1106
y: 268
w: 119
h: 104
- id: '108'
type: TODO_identify
label: ''
x: 1106
y: 268
w: 63
h: 63
- id: '109'
type: TODO_identify
label: ''
x: 1106
y: 268
w: 63
h: 63
- id: '110'
type: TODO_identify
label: ''
x: 1106
y: 268
w: 62
h: 61
- id: '111'
type: TODO_identify
label: ''
x: 1106
y: 268
w: 63
h: 63
- id: '112'
type: TODO_identify
label: ''
x: 1107
y: 269
w: 60
h: 60
- id: '128'
type: TODO_identify
label: ''
x: 1106
y: 335
w: 119
h: 37
- id: '131'
type: TODO_identify
label: ''
x: 1103
y: 394
w: 152
h: 91
- id: '132'
type: TODO_identify
label: ''
x: 1105
y: 394
w: 63
h: 50
- id: '133'
type: TODO_identify
label: ''
x: 1105
y: 394
w: 62
h: 48
- id: '134'
type: TODO_identify
label: ''
x: 1105
y: 394
w: 63
h: 50
- id: '140'
type: TODO_identify
label: ''
x: 1106
y: 395
w: 60
h: 30
- id: '141'
type: TODO_identify
label: ''
x: 1103
y: 448
w: 152
h: 37
- id: '25'
type: TODO_identify
label: ''
x: 40
y: 456
w: 155
h: 121
- id: '26'
type: TODO_identify
label: ''
x: 49
y: 456
w: 59
h: 63
- id: '27'
type: TODO_identify
label: ''
x: 49
y: 456
w: 58
h: 61
- id: '28'
type: TODO_identify
label: ''
x: 49
y: 456
w: 59
h: 63
- id: '56'
type: TODO_identify
label: ''
x: 396
y: 456
w: 121
h: 121
- id: '57'
type: TODO_identify
label: ''
x: 402
y: 456
w: 48
h: 63
- id: '58'
type: TODO_identify
label: ''
x: 402
y: 456
w: 46
h: 62
- id: '59'
type: TODO_identify
label: ''
x: 402
y: 456
w: 48
h: 63
- id: '30'
type: TODO_identify
label: ''
x: 50
y: 457
w: 53
h: 59
- id: '152'
type: TODO_identify
label: ''
x: 758
y: 459
w: 191
h: 135
- id: '153'
type: TODO_identify
label: ''
x: 776
y: 459
w: 63
h: 57
- id: '154'
type: TODO_identify
label: ''
x: 776
y: 459
w: 63
h: 57
- id: '61'
type: TODO_identify
label: ''
x: 412
y: 469
w: 29
h: 48
- id: '62'
type: TODO_identify
label: ''
x: 412
y: 469
w: 29
h: 48
- id: '60'
type: TODO_identify
label: ''
x: 413
y: 470
w: 27
h: 46
- id: '32'
type: TODO_identify
label: ''
x: 78
y: 489
w: 28
h: 28
- id: '144'
type: TODO_identify
label: ''
x: 1106
y: 500
w: 103
h: 93
- id: '145'
type: TODO_identify
label: ''
x: 1106
y: 500
w: 63
h: 53
- id: '146'
type: TODO_identify
label: ''
x: 1106
y: 500
w: 61
h: 51
- id: '147'
type: TODO_identify
label: ''
x: 1106
y: 500
w: 63
h: 53
- id: '148'
type: TODO_identify
label: ''
x: 1107
y: 500
w: 59
h: 51
- id: '33'
type: TODO_identify
label: ''
x: 40
y: 523
w: 155
h: 54
- id: '64'
type: TODO_identify
label: ''
x: 396
y: 523
w: 121
h: 54
- id: '181'
type: TODO_identify
label: ''
x: 758
y: 523
w: 191
h: 71
- id: '149'
type: TODO_identify
label: ''
x: 1107
y: 556
w: 101
h: 37
labels: []
connections: []

View File

@@ -0,0 +1,343 @@
<svg width="1170" height="592" viewBox="0 0 1170 592" fill="none" xmlns="http://www.w3.org/2000/svg">
<g id="bread-financial-migration-process" clip-path="url(#clip0_6913_243525)">
<rect width="1170" height="592" fill="white"/>
<g id="Text Heading">
<rect x="672.5" y="32.5" width="495" height="559" rx="3.5" fill="white"/>
<text id="Neutral Group Heading H1" fill="#312D2A" xml:space="preserve" style="white-space: pre" font-family="Oracle Sans" font-size="16" font-weight="800" letter-spacing="0em"><tspan x="802.141" y="53.816">Current State - Modernization</tspan></text>
<rect x="672.5" y="32.5" width="495" height="559" rx="3.5" stroke="#9E9892"/>
</g>
<g id="On-premises box">
<g id="Internet">
<rect x="0.5" y="72.5" width="151" height="519" rx="3.5" fill="#F5F4F2"/>
<text id="OCI Region" fill="#312D2A" xml:space="preserve" style="white-space: pre" font-family="Oracle Sans" font-size="16" font-weight="bold" letter-spacing="0em"><tspan x="28.0859" y="93.816">On Premises</tspan></text>
<rect x="0.5" y="72.5" width="151" height="519" rx="3.5" stroke="#9E9892"/>
</g>
</g>
<g id="webapp physical">
<g id="Site-to-Site VPN or FastConnect">
<g id="Web-Application">
<g id="Group 486">
<path id="Vector" d="M101.886 136.715H50.1145C48.2367 136.715 46.7145 138.237 46.7145 140.115V191.886C46.7145 193.764 48.2367 195.286 50.1145 195.286H101.886C103.764 195.286 105.286 193.764 105.286 191.886V140.115C105.286 138.237 103.764 136.715 101.886 136.715Z" fill="white"/>
<path id="Vector_2" d="M101.9 137.429C102.61 137.432 103.289 137.717 103.79 138.22C104.29 138.723 104.571 139.404 104.571 140.114V191.9C104.571 192.609 104.29 193.288 103.789 193.789C103.288 194.29 102.609 194.571 101.9 194.571H50.1143C49.4045 194.571 48.7235 194.29 48.2202 193.79C47.717 193.289 47.4323 192.61 47.4286 191.9V140.114C47.4286 139.402 47.7115 138.719 48.2152 138.215C48.7189 137.712 49.402 137.429 50.1143 137.429H101.9ZM101.9 136H50.1143C49.0231 136 47.9766 136.433 47.205 137.205C46.4335 137.977 46 139.023 46 140.114V191.9C46.0038 192.989 46.4389 194.032 47.2101 194.8C47.9813 195.569 49.0256 196 50.1143 196H101.9C102.986 195.996 104.027 195.563 104.795 194.795C105.563 194.027 105.996 192.986 106 191.9V140.114C106 139.026 105.569 137.981 104.8 137.21C104.032 136.439 102.989 136.004 101.9 136V136Z" fill="white"/>
<path id="Vector_3" d="M101.9 137.429H50.1148C49.4025 137.429 48.7193 137.712 48.2157 138.216C47.712 138.719 47.429 139.402 47.429 140.115V191.9C47.4328 192.61 47.7174 193.29 48.2207 193.79C48.724 194.291 49.4049 194.572 50.1148 194.572H101.9C102.609 194.572 103.288 194.29 103.789 193.789C104.29 193.288 104.572 192.609 104.572 191.9V140.115C104.572 139.405 104.291 138.724 103.79 138.221C103.29 137.717 102.61 137.433 101.9 137.429ZM50.1148 139.815H101.9C101.939 139.815 101.978 139.822 102.013 139.838C102.049 139.853 102.081 139.875 102.108 139.903C102.134 139.931 102.155 139.965 102.169 140.001C102.182 140.037 102.188 140.076 102.186 140.115V146.958H49.8148V140.115C49.8148 140.035 49.8464 139.959 49.9026 139.903C49.9589 139.846 50.0352 139.815 50.1148 139.815ZM101.9 192.186H50.1148C50.0761 192.188 50.0374 192.182 50.001 192.169C49.9647 192.155 49.9315 192.134 49.9034 192.108C49.8754 192.081 49.853 192.049 49.8378 192.013C49.8225 191.977 49.8147 191.939 49.8148 191.9V149.329H102.186V191.9C102.186 191.976 102.156 192.049 102.103 192.102C102.049 192.156 101.976 192.186 101.9 192.186Z" fill="#2D5967"/>
<path id="Vector_4" d="M53.8285 145.072C54.649 145.072 55.3142 144.407 55.3142 143.586C55.3142 142.766 54.649 142.1 53.8285 142.1C53.008 142.1 52.3428 142.766 52.3428 143.586C52.3428 144.407 53.008 145.072 53.8285 145.072Z" fill="#2D5967"/>
<path id="Vector_5" d="M59.0857 145.072C59.9062 145.072 60.5714 144.407 60.5714 143.586C60.5714 142.766 59.9062 142.1 59.0857 142.1C58.2651 142.1 57.5999 142.766 57.5999 143.586C57.5999 144.407 58.2651 145.072 59.0857 145.072Z" fill="#2D5967"/>
<path id="Vector_6" d="M64.2435 145.072C65.0641 145.072 65.7292 144.407 65.7292 143.586C65.7292 142.766 65.0641 142.1 64.2435 142.1C63.423 142.1 62.7578 142.766 62.7578 143.586C62.7578 144.407 63.423 145.072 64.2435 145.072Z" fill="#2D5967"/>
<path id="Vector_7" d="M76.0007 151.715C72.2908 151.715 68.6643 152.815 65.5797 154.876C62.4951 156.937 60.091 159.866 58.6713 163.294C57.2516 166.721 56.8802 170.493 57.6039 174.131C58.3277 177.77 60.1141 181.112 62.7373 183.735C65.3606 186.358 68.7028 188.145 72.3413 188.868C75.9798 189.592 79.7513 189.221 83.1787 187.801C86.6061 186.381 89.5356 183.977 91.5966 180.893C93.6577 177.808 94.7578 174.182 94.7578 170.472C94.754 165.498 92.7766 160.729 89.2598 157.213C85.7429 153.696 80.9742 151.718 76.0007 151.715ZM90.7292 163.343C90.0009 165.349 88.9804 167.236 87.7007 168.943C87.3559 168.824 86.9941 168.761 86.6292 168.757C86.417 168.77 86.2064 168.804 86.0007 168.857C84.6294 166.967 82.9936 165.283 81.1435 163.857C79.3622 162.479 77.4013 161.349 75.3149 160.5C75.2784 159.913 75.0861 159.346 74.7578 158.857C76.1215 157.2 77.7249 155.756 79.5149 154.572C81.9232 155.097 84.182 156.158 86.1235 157.677C88.0651 159.196 89.6393 161.132 90.7292 163.343ZM87.5292 172.029C87.5321 172.207 87.4817 172.383 87.3845 172.533C87.2874 172.683 87.1478 172.8 86.9837 172.87C86.8195 172.941 86.6381 172.961 86.4626 172.928C86.287 172.894 86.1254 172.81 85.9981 172.685C85.8708 172.559 85.7836 172.399 85.7477 172.224C85.7118 172.049 85.7288 171.867 85.7965 171.702C85.8641 171.537 85.9795 171.395 86.1278 171.296C86.2761 171.196 86.4506 171.143 86.6292 171.143C86.8655 171.143 87.0922 171.236 87.2606 171.402C87.429 171.567 87.5255 171.793 87.5292 172.029ZM83.5578 173.143C80.3334 175.63 76.4896 177.186 72.4435 177.643C72.2247 177.158 71.8903 176.733 71.4694 176.407C71.0485 176.081 70.554 175.863 70.0292 175.772C69.4904 171.73 70.0736 167.618 71.7149 163.886H72.0578C72.5363 163.891 73.0099 163.789 73.4446 163.589C73.8793 163.389 74.2643 163.095 74.5721 162.729C76.4112 163.492 78.1407 164.496 79.7149 165.715C81.3416 166.974 82.7841 168.455 84.0007 170.115C83.5905 170.668 83.37 171.34 83.3721 172.029C83.3659 172.409 83.4288 172.786 83.5578 173.143ZM70.3578 178.986C70.3739 179.113 70.3628 179.241 70.3252 179.364C70.2877 179.486 70.2246 179.598 70.1402 179.694C70.0557 179.79 69.9518 179.867 69.8354 179.919C69.719 179.972 69.5927 179.999 69.4649 179.999C69.3372 179.999 69.2109 179.972 69.0945 179.919C68.9781 179.867 68.8742 179.79 68.7897 179.694C68.7053 179.598 68.6422 179.486 68.6046 179.364C68.5671 179.241 68.556 179.113 68.5721 178.986C68.5996 178.769 68.7055 178.569 68.8699 178.424C69.0343 178.279 69.2458 178.199 69.4649 178.199C69.684 178.199 69.8956 178.279 70.06 178.424C70.2244 178.569 70.3302 178.769 70.3578 178.986ZM71.1435 160.643C71.1711 160.426 71.2769 160.226 71.4413 160.081C71.6057 159.936 71.8173 159.856 72.0364 159.856C72.2555 159.856 72.467 159.936 72.6314 160.081C72.7958 160.226 72.9017 160.426 72.9292 160.643C72.9453 160.77 72.9342 160.899 72.8967 161.021C72.8591 161.143 72.796 161.256 72.7116 161.351C72.6271 161.447 72.5232 161.524 72.4068 161.577C72.2904 161.629 72.1641 161.656 72.0364 161.656C71.9086 161.656 71.7823 161.629 71.6659 161.577C71.5495 161.524 71.4456 161.447 71.3611 161.351C71.2767 161.256 71.2136 161.143 71.1761 161.021C71.1385 160.899 71.1274 160.77 71.1435 160.643ZM76.0007 154.1C74.8295 155.104 73.7579 156.219 72.8007 157.429C72.5477 157.371 72.2888 157.342 72.0292 157.343C71.4775 157.344 70.9348 157.483 70.4506 157.747C69.9664 158.012 69.5563 158.393 69.2578 158.857C67.7089 158.66 66.1445 158.612 64.5864 158.715C67.6442 155.747 71.7399 154.092 76.0007 154.1ZM62.3578 161.429C64.5015 161.03 66.6936 160.963 68.8578 161.229C68.9648 161.803 69.2266 162.336 69.6149 162.772C68.6933 164.841 68.0634 167.029 67.7435 169.272C67.422 171.58 67.422 173.921 67.7435 176.229C67.2566 176.544 66.8622 176.983 66.6007 177.5C64.4905 177.166 62.4404 176.526 60.5149 175.6C59.7359 173.249 59.5021 170.751 59.8313 168.296C60.1605 165.84 61.044 163.492 62.4149 161.429H62.3578ZM61.9149 178.857C63.3444 179.359 64.8174 179.728 66.3149 179.957C66.5091 180.618 66.9059 181.201 67.4493 181.624C67.9928 182.047 68.6554 182.289 69.3435 182.315C69.9188 183.689 70.6169 185.009 71.4292 186.257C67.4368 185.081 64.0375 182.438 61.9149 178.857ZM76.0007 186.829C75.6149 186.829 75.2292 186.829 74.8578 186.829C73.5141 185.216 72.4121 183.416 71.5864 181.486C72.035 181.108 72.3711 180.614 72.5578 180.057C74.8344 179.812 77.0656 179.249 79.1864 178.386C81.3106 177.527 83.3057 176.378 85.1149 174.972C85.5803 175.223 86.1004 175.355 86.6292 175.357H86.8149C87.5863 177.3 88.0676 179.346 88.2435 181.429C86.7017 183.145 84.8129 184.513 82.7023 185.444C80.5917 186.375 78.3074 186.847 76.0007 186.829ZM90.2864 178.557C90.0162 177.093 89.6048 175.657 89.0578 174.272C89.649 173.664 89.9774 172.848 89.9721 172C89.9718 171.462 89.8393 170.932 89.5864 170.457C90.5024 169.248 91.3057 167.957 91.9864 166.6C92.9746 170.657 92.366 174.937 90.2864 178.557Z" fill="#2D5967"/>
</g>
</g>
<g id="Icon Text Label">
<text id="IconLabel" fill="black" xml:space="preserve" style="white-space: pre" font-family="Oracle Sans" font-size="16" letter-spacing="0em"><tspan x="57.1016" y="213.816">PSFT</tspan></text>
<text id="IconLabel_2" fill="black" xml:space="preserve" style="white-space: pre" font-family="Oracle Sans" font-size="16" letter-spacing="0em"><tspan x="40.2969" y="229.816"> Web/App</tspan></text>
<text id="IconLabel_3" fill="black" xml:space="preserve" style="white-space: pre" font-family="Oracle Sans" font-size="16" letter-spacing="0em"><tspan x="41.625" y="245.816">(Physical)</tspan></text>
</g>
</g>
</g>
<g id="DB exadata">
<g id="Database-Action-gear">
<g id="Group 309">
<path id="Vector_8" d="M85.1504 491.089L85.0651 490.32C81.5803 490.712 78.0766 490.911 74.57 490.918C71.9107 490.918 48.5456 490.705 48.5456 483.083V440.576C48.5456 432.742 71.9107 432.514 74.57 432.514C77.2293 432.514 100.609 432.742 100.609 440.576V468.112L102.5 470.021L100.68 472.3L103.524 472.628V481.274L100.68 481.602L102.5 483.881L96.385 490.007L94.4651 488.468L94.067 488.596L93.7825 491.089H85.1504Z" fill="white"/>
<path id="Vector_9" d="M74.5688 433.225C83.3858 433.225 99.8964 434.764 99.8964 440.576V468.41L101.546 470.063L99.8964 472.143V472.926L102.869 473.254V480.647L99.8964 480.975V481.758L101.546 483.838L96.3411 489.051L94.6062 487.627L93.4116 487.997L93.1556 490.334H85.775L85.6896 489.493C81.9996 489.946 78.2864 490.184 74.5688 490.205C65.8229 490.205 49.2554 488.781 49.2554 483.083V440.576C49.2554 434.764 65.8229 433.225 74.5688 433.225ZM74.5688 431.801C70.1034 431.801 47.8333 432.228 47.8333 440.576V483.083C47.8333 491.245 70.1034 491.63 74.5688 491.63C77.8654 491.624 81.1596 491.448 84.4382 491.103L84.5093 491.801H94.464L94.6062 490.533L94.72 489.55L95.4879 490.163L96.4834 490.96L97.3793 490.063L102.598 484.835L103.494 483.938L102.698 482.94L102.086 482.171L103.068 482.057L104.333 481.915V471.943L103.068 471.801L102.044 471.687L102.655 470.918L103.452 469.92L102.556 469.023L101.318 467.784V440.576C101.318 432.228 79.1195 431.801 74.5688 431.801Z" fill="white"/>
<path id="Vector_10" d="M99.4982 481.26L99.5694 481.075L99.4982 481.26Z" fill="#2D5967"/>
<path id="Vector_11" d="M78.5815 487.569C77.2732 487.569 75.9364 487.641 74.5712 487.641C68.9315 487.698 63.3031 487.125 57.7904 485.931C52.7704 484.777 51.647 483.438 51.647 483.082V472.284C56.4679 475.133 67.5318 476.017 74.2868 476.031V473.652C68.7437 473.703 63.2117 473.144 57.7904 471.985C52.7562 470.789 51.6328 469.435 51.6328 469.065V458.495C56.539 461.344 67.8447 462.242 74.557 462.242C77.259 462.242 80.7005 462.099 84.1704 461.757H84.341C89.4464 461.23 94.5944 460.233 97.4955 458.524V463.524L97.595 463.609L99.8846 465.903V441.145C99.8908 441.064 99.8908 440.983 99.8846 440.903C99.8916 440.789 99.8916 440.675 99.8846 440.561C99.8846 435.632 86.7586 433.438 74.557 433.438C62.3554 433.438 49.2578 435.632 49.2578 440.561C49.2508 440.675 49.2508 440.789 49.2578 440.903C49.2517 440.983 49.2517 441.064 49.2578 441.145V483.082C49.2578 488.609 65.8253 490.062 74.5712 490.062C76.4057 490.062 78.5673 490.062 80.8427 489.848L78.5815 487.569ZM74.5712 435.774C80.2125 435.697 85.8438 436.275 91.352 437.498C96.4004 438.737 97.5097 440.133 97.5097 440.561C97.5097 440.988 96.4004 442.37 91.352 443.609C85.8438 444.832 80.2125 445.41 74.5712 445.333C68.9299 445.411 63.2986 444.832 57.7904 443.609C52.7562 442.37 51.647 440.988 51.647 440.561C51.647 440.133 52.7562 438.737 57.7904 437.498C63.2986 436.275 68.9299 435.697 74.5712 435.774ZM91.352 458.196C85.8378 459.376 80.2093 459.935 74.5712 459.863C68.9331 459.935 63.3046 459.376 57.7904 458.196C52.7562 456.999 51.6328 455.646 51.6328 455.262V443.866C55.8991 446.515 65.5124 447.74 74.557 447.74C83.6015 447.74 93.1723 446.515 97.4955 443.866V455.262C97.5097 455.646 96.3862 456.999 91.352 458.196Z" fill="#2D5967"/>
<path id="Vector_12" d="M89.5578 470.39C88.2643 470.404 87.0038 470.801 85.9351 471.531C84.8664 472.261 84.0372 473.292 83.5519 474.493C83.0666 475.694 82.9468 477.012 83.2078 478.281C83.4687 479.55 84.0986 480.714 85.0182 481.625C85.9379 482.536 87.1061 483.155 88.3758 483.402C89.6456 483.65 90.9601 483.516 92.1539 483.017C93.3476 482.518 94.3674 481.676 95.0846 480.598C95.8019 479.52 96.1847 478.253 96.1848 476.957C96.1848 476.089 96.0129 475.229 95.679 474.427C95.3451 473.626 94.8558 472.899 94.2395 472.288C93.6232 471.677 92.8921 471.195 92.0884 470.869C91.2848 470.544 90.4247 470.381 89.5578 470.39ZM89.5578 481.131C88.7297 481.134 87.9193 480.89 87.2296 480.431C86.5399 479.972 86.0018 479.318 85.6836 478.552C85.3654 477.786 85.2814 476.943 85.4422 476.129C85.6031 475.315 86.0016 474.568 86.5872 473.981C87.1728 473.395 87.919 472.996 88.7314 472.835C89.5437 472.673 90.3856 472.758 91.1501 473.076C91.9147 473.395 92.5675 473.934 93.0258 474.625C93.4842 475.316 93.7273 476.127 93.7245 476.957C93.7245 478.064 93.2855 479.126 92.5041 479.908C91.7227 480.691 90.6629 481.131 89.5578 481.131Z" fill="#2D5967"/>
<path id="Vector_13" d="M99.5978 472.898L99.4982 472.641L101.546 470.063L96.3412 464.849L93.7672 466.9L93.5112 466.801L93.1557 463.524H85.775L85.4195 466.801L85.1635 466.9L82.5895 464.849L77.3846 470.063L79.4324 472.641L79.3329 472.898L76.062 473.254V480.647L79.3329 481.003L79.4324 481.259L77.3846 483.838L82.5895 489.051L85.1635 487L85.4195 487.1L85.775 490.376H93.1557L93.5112 487.1L93.7672 487L96.3412 489.051L101.546 483.838L99.4982 481.259L99.5978 481.003L102.869 480.647V473.254L99.5978 472.898ZM100.451 478.51L97.8059 478.795L97.5642 479.536C97.4237 479.999 97.238 480.448 97.0096 480.875L96.654 481.573L98.3321 483.653L96.1847 485.932L94.1085 484.251L93.3405 484.507C92.9143 484.736 92.4665 484.922 92.0038 485.063L91.2785 485.305L90.9799 487.955H87.9081L87.6522 485.334L86.9127 485.091C86.4508 484.948 86.0033 484.762 85.5759 484.536L84.808 484.18L82.7743 485.932L80.5417 483.653L82.2055 481.573L81.9638 480.875C81.7354 480.448 81.5496 479.999 81.4091 479.536L81.0963 478.809L78.4512 478.524V475.391L81.0963 475.106L81.338 474.365C81.481 473.902 81.6667 473.454 81.8926 473.026L82.2482 472.342L80.5417 470.262L82.7317 468.054L84.808 469.721L85.4906 469.365C85.918 469.139 86.3655 468.953 86.8273 468.809L87.5668 468.567L87.8512 465.918H90.9656L91.2643 468.567L91.9896 468.809C92.4523 468.95 92.9001 469.136 93.3263 469.365L94.0232 469.721L96.1847 468.04L98.3606 470.262L96.6825 472.356L97.038 473.04C97.2639 473.468 97.4496 473.917 97.5926 474.379L97.8344 475.12L100.479 475.405L100.451 478.51Z" fill="#2D5967"/>
</g>
</g>
<g id="Icon Text Label_2">
<text id="IconLabel_4" fill="black" xml:space="preserve" style="white-space: pre" font-family="Oracle Sans" font-size="16" letter-spacing="0em"><tspan x="57.1016" y="509.617">PSFT</tspan></text>
<text id="IconLabel_5" fill="black" xml:space="preserve" style="white-space: pre" font-family="Oracle Sans" font-size="16" letter-spacing="0em"><tspan x="38.4375" y="525.617">Databases</tspan></text>
<text id="IconLabel_6" fill="black" xml:space="preserve" style="white-space: pre" font-family="Oracle Sans" font-size="16" letter-spacing="0em"><tspan x="41.8047" y="541.617">(Exadata)</tspan></text>
</g>
</g>
<g id="On-premises box_2">
<g id="OCi">
<g id="Internet_2">
<rect x="328.5" y="72.5" width="151" height="519" rx="3.5" fill="#F5F4F2"/>
<text id="OCI Region_2" fill="#312D2A" xml:space="preserve" style="white-space: pre" font-family="Oracle Sans" font-size="16" font-weight="bold" letter-spacing="0em"><tspan x="355.305" y="93.816">Oracle Cloud</tspan></text>
<rect x="328.5" y="72.5" width="151" height="519" rx="3.5" stroke="#9E9892"/>
</g>
<text id="Infrastructure" fill="#312D2A" xml:space="preserve" style="white-space: pre" font-family="Oracle Sans" font-size="16" font-weight="bold" letter-spacing="0em"><tspan x="350.664" y="115.816">Infrastructure</tspan></text>
</g>
</g>
<g id="web app virtual">
<g id="Site-to-Site VPN or FastConnect_2">
<g id="Web-Application_2">
<g id="Group 486_2">
<path id="Vector_14" d="M429.886 136.715H378.115C376.237 136.715 374.715 138.237 374.715 140.115V191.886C374.715 193.764 376.237 195.286 378.115 195.286H429.886C431.764 195.286 433.286 193.764 433.286 191.886V140.115C433.286 138.237 431.764 136.715 429.886 136.715Z" fill="white"/>
<path id="Vector_15" d="M429.9 137.429C430.61 137.432 431.289 137.717 431.79 138.22C432.29 138.723 432.571 139.404 432.571 140.114V191.9C432.571 192.609 432.29 193.288 431.789 193.789C431.288 194.29 430.609 194.571 429.9 194.571H378.114C377.404 194.571 376.723 194.29 376.22 193.79C375.717 193.289 375.432 192.61 375.429 191.9V140.114C375.429 139.402 375.712 138.719 376.215 138.215C376.719 137.712 377.402 137.429 378.114 137.429H429.9ZM429.9 136H378.114C377.023 136 375.977 136.433 375.205 137.205C374.433 137.977 374 139.023 374 140.114V191.9C374.004 192.989 374.439 194.032 375.21 194.8C375.981 195.569 377.026 196 378.114 196H429.9C430.986 195.996 432.027 195.563 432.795 194.795C433.563 194.027 433.996 192.986 434 191.9V140.114C434 139.026 433.569 137.981 432.8 137.21C432.032 136.439 430.989 136.004 429.9 136V136Z" fill="white"/>
<path id="Vector_16" d="M429.9 137.429H378.115C377.402 137.429 376.719 137.712 376.216 138.216C375.712 138.719 375.429 139.402 375.429 140.115V191.9C375.433 192.61 375.717 193.29 376.221 193.79C376.724 194.291 377.405 194.572 378.115 194.572H429.9C430.609 194.572 431.288 194.29 431.789 193.789C432.29 193.288 432.572 192.609 432.572 191.9V140.115C432.572 139.405 432.291 138.724 431.79 138.221C431.29 137.717 430.61 137.433 429.9 137.429ZM378.115 139.815H429.9C429.939 139.815 429.978 139.822 430.013 139.838C430.049 139.853 430.081 139.875 430.108 139.903C430.134 139.931 430.155 139.965 430.169 140.001C430.182 140.037 430.188 140.076 430.186 140.115V146.958H377.815V140.115C377.815 140.035 377.846 139.959 377.903 139.903C377.959 139.846 378.035 139.815 378.115 139.815ZM429.9 192.186H378.115C378.076 192.188 378.037 192.182 378.001 192.169C377.965 192.155 377.931 192.134 377.903 192.108C377.875 192.081 377.853 192.049 377.838 192.013C377.823 191.977 377.815 191.939 377.815 191.9V149.329H430.186V191.9C430.186 191.976 430.156 192.049 430.102 192.102C430.049 192.156 429.976 192.186 429.9 192.186Z" fill="#2D5967"/>
<path id="Vector_17" d="M381.828 145.072C382.649 145.072 383.314 144.407 383.314 143.586C383.314 142.766 382.649 142.1 381.828 142.1C381.008 142.1 380.343 142.766 380.343 143.586C380.343 144.407 381.008 145.072 381.828 145.072Z" fill="#2D5967"/>
<path id="Vector_18" d="M387.086 145.072C387.906 145.072 388.571 144.407 388.571 143.586C388.571 142.766 387.906 142.1 387.086 142.1C386.265 142.1 385.6 142.766 385.6 143.586C385.6 144.407 386.265 145.072 387.086 145.072Z" fill="#2D5967"/>
<path id="Vector_19" d="M392.244 145.072C393.064 145.072 393.729 144.407 393.729 143.586C393.729 142.766 393.064 142.1 392.244 142.1C391.423 142.1 390.758 142.766 390.758 143.586C390.758 144.407 391.423 145.072 392.244 145.072Z" fill="#2D5967"/>
<path id="Vector_20" d="M404.001 151.715C400.291 151.715 396.664 152.815 393.58 154.876C390.495 156.937 388.091 159.866 386.671 163.294C385.252 166.721 384.88 170.493 385.604 174.131C386.328 177.77 388.114 181.112 390.737 183.735C393.361 186.358 396.703 188.145 400.341 188.868C403.98 189.592 407.751 189.221 411.179 187.801C414.606 186.381 417.536 183.977 419.597 180.893C421.658 177.808 422.758 174.182 422.758 170.472C422.754 165.498 420.777 160.729 417.26 157.213C413.743 153.696 408.974 151.718 404.001 151.715ZM418.729 163.343C418.001 165.349 416.98 167.236 415.701 168.943C415.356 168.824 414.994 168.761 414.629 168.757C414.417 168.77 414.206 168.804 414.001 168.857C412.629 166.967 410.994 165.283 409.143 163.857C407.362 162.479 405.401 161.349 403.315 160.5C403.278 159.913 403.086 159.346 402.758 158.857C404.121 157.2 405.725 155.756 407.515 154.572C409.923 155.097 412.182 156.158 414.124 157.677C416.065 159.196 417.639 161.132 418.729 163.343ZM415.529 172.029C415.532 172.207 415.482 172.383 415.385 172.533C415.287 172.683 415.148 172.8 414.984 172.87C414.819 172.941 414.638 172.961 414.463 172.928C414.287 172.894 414.125 172.81 413.998 172.685C413.871 172.559 413.784 172.399 413.748 172.224C413.712 172.049 413.729 171.867 413.796 171.702C413.864 171.537 413.979 171.395 414.128 171.296C414.276 171.196 414.451 171.143 414.629 171.143C414.865 171.143 415.092 171.236 415.261 171.402C415.429 171.567 415.525 171.793 415.529 172.029ZM411.558 173.143C408.333 175.63 404.49 177.186 400.443 177.643C400.225 177.158 399.89 176.733 399.469 176.407C399.048 176.081 398.554 175.863 398.029 175.772C397.49 171.73 398.074 167.618 399.715 163.886H400.058C400.536 163.891 401.01 163.789 401.445 163.589C401.879 163.389 402.264 163.095 402.572 162.729C404.411 163.492 406.141 164.496 407.715 165.715C409.342 166.974 410.784 168.455 412.001 170.115C411.59 170.668 411.37 171.34 411.372 172.029C411.366 172.409 411.429 172.786 411.558 173.143ZM398.358 178.986C398.374 179.113 398.363 179.241 398.325 179.364C398.288 179.486 398.225 179.598 398.14 179.694C398.056 179.79 397.952 179.867 397.835 179.919C397.719 179.972 397.593 179.999 397.465 179.999C397.337 179.999 397.211 179.972 397.094 179.919C396.978 179.867 396.874 179.79 396.79 179.694C396.705 179.598 396.642 179.486 396.605 179.364C396.567 179.241 396.556 179.113 396.572 178.986C396.6 178.769 396.705 178.569 396.87 178.424C397.034 178.279 397.246 178.199 397.465 178.199C397.684 178.199 397.896 178.279 398.06 178.424C398.224 178.569 398.33 178.769 398.358 178.986ZM399.143 160.643C399.171 160.426 399.277 160.226 399.441 160.081C399.606 159.936 399.817 159.856 400.036 159.856C400.255 159.856 400.467 159.936 400.631 160.081C400.796 160.226 400.902 160.426 400.929 160.643C400.945 160.77 400.934 160.899 400.897 161.021C400.859 161.143 400.796 161.256 400.712 161.351C400.627 161.447 400.523 161.524 400.407 161.577C400.29 161.629 400.164 161.656 400.036 161.656C399.909 161.656 399.782 161.629 399.666 161.577C399.549 161.524 399.446 161.447 399.361 161.351C399.277 161.256 399.214 161.143 399.176 161.021C399.139 160.899 399.127 160.77 399.143 160.643ZM404.001 154.1C402.829 155.104 401.758 156.219 400.801 157.429C400.548 157.371 400.289 157.342 400.029 157.343C399.477 157.344 398.935 157.483 398.451 157.747C397.966 158.012 397.556 158.393 397.258 158.857C395.709 158.66 394.144 158.612 392.586 158.715C395.644 155.747 399.74 154.092 404.001 154.1ZM390.358 161.429C392.501 161.03 394.694 160.963 396.858 161.229C396.965 161.803 397.227 162.336 397.615 162.772C396.693 164.841 396.063 167.029 395.743 169.272C395.422 171.58 395.422 173.921 395.743 176.229C395.257 176.544 394.862 176.983 394.601 177.5C392.491 177.166 390.44 176.526 388.515 175.6C387.736 173.249 387.502 170.751 387.831 168.296C388.16 165.84 389.044 163.492 390.415 161.429H390.358ZM389.915 178.857C391.344 179.359 392.817 179.728 394.315 179.957C394.509 180.618 394.906 181.201 395.449 181.624C395.993 182.047 396.655 182.289 397.343 182.315C397.919 183.689 398.617 185.009 399.429 186.257C395.437 185.081 392.038 182.438 389.915 178.857ZM404.001 186.829C403.615 186.829 403.229 186.829 402.858 186.829C401.514 185.216 400.412 183.416 399.586 181.486C400.035 181.108 400.371 180.614 400.558 180.057C402.834 179.812 405.066 179.249 407.186 178.386C409.311 177.527 411.306 176.378 413.115 174.972C413.58 175.223 414.1 175.355 414.629 175.357H414.815C415.586 177.3 416.068 179.346 416.243 181.429C414.702 183.145 412.813 184.513 410.702 185.444C408.592 186.375 406.307 186.847 404.001 186.829ZM418.286 178.557C418.016 177.093 417.605 175.657 417.058 174.272C417.649 173.664 417.977 172.848 417.972 172C417.972 171.462 417.839 170.932 417.586 170.457C418.502 169.248 419.306 167.957 419.986 166.6C420.975 170.657 420.366 174.937 418.286 178.557Z" fill="#2D5967"/>
</g>
</g>
<g id="Icon Text Label_3">
<text id="IconLabel_7" fill="black" xml:space="preserve" style="white-space: pre" font-family="Oracle Sans" font-size="16" letter-spacing="0em"><tspan x="385.102" y="213.816">PSFT</tspan></text>
<text id="IconLabel_8" fill="black" xml:space="preserve" style="white-space: pre" font-family="Oracle Sans" font-size="16" letter-spacing="0em"><tspan x="368.297" y="229.816"> Web/App</tspan></text>
<text id="IconLabel_9" fill="black" xml:space="preserve" style="white-space: pre" font-family="Oracle Sans" font-size="16" letter-spacing="0em"><tspan x="374.805" y="245.816">(Virtual)</tspan></text>
</g>
</g>
</g>
<g id="exadata">
<g id="Services-Exadata-Database-System">
<g id="Group 515">
<path id="Vector_21" d="M390.486 491.129V488.814L392.911 487.656V455.312H382.269L382.412 453.24C382.539 451.411 383.13 449.646 384.129 448.111C385.127 446.575 386.5 445.32 388.118 444.464C388.392 444.32 388.631 444.117 388.818 443.87C389.006 443.623 389.137 443.338 389.202 443.035C389.471 441.712 390.057 440.474 390.909 439.429C391.762 438.383 392.855 437.56 394.095 437.032C395.153 436.572 396.294 436.334 397.447 436.332C397.708 436.317 397.97 436.317 398.232 436.332H398.431C398.699 436.337 398.965 436.284 399.211 436.178C399.457 436.072 399.677 435.915 399.858 435.717C400.813 434.703 401.965 433.896 403.243 433.345C404.521 432.795 405.899 432.512 407.29 432.515C409.179 432.507 411.032 433.031 412.639 434.026C414.245 435.022 415.54 436.45 416.377 438.147C416.518 438.426 416.719 438.671 416.966 438.864C417.212 439.056 417.498 439.192 417.803 439.262C418.973 439.54 420.083 440.024 421.084 440.691C423.303 442.096 424.909 444.29 425.579 446.833C426.248 449.376 425.932 452.079 424.693 454.397L424.166 455.384H417.347V487.656L419.701 488.814V491.129H390.486Z" fill="white"/>
<path id="Vector_22" d="M407.289 433.23C409.044 433.222 410.766 433.708 412.259 434.633C413.752 435.558 414.956 436.884 415.734 438.461C415.932 438.825 416.207 439.141 416.54 439.388C416.872 439.635 417.254 439.806 417.659 439.89C419.117 440.211 420.481 440.867 421.642 441.805C422.804 442.744 423.733 443.94 424.355 445.299C424.977 446.658 425.276 448.143 425.228 449.638C425.18 451.132 424.787 452.595 424.079 453.911L423.751 454.526H416.618V488.113L418.972 489.271V490.4H391.198V489.257L393.566 488.099V454.669H383.038L383.124 453.425C383.229 451.698 383.78 450.027 384.723 448.577C385.665 447.126 386.967 445.945 388.502 445.15C388.868 444.956 389.189 444.684 389.44 444.353C389.691 444.023 389.868 443.641 389.957 443.235C390.297 441.495 391.23 439.929 392.596 438.802C393.962 437.676 395.677 437.06 397.446 437.06C397.683 437.046 397.922 437.046 398.159 437.06H398.43C398.797 437.064 399.16 436.991 399.496 436.846C399.833 436.701 400.135 436.487 400.384 436.217C401.271 435.273 402.341 434.521 403.528 434.008C404.715 433.494 405.995 433.229 407.289 433.23ZM407.289 431.801C405.797 431.803 404.323 432.113 402.956 432.711C401.589 433.308 400.359 434.18 399.343 435.274C399.225 435.397 399.083 435.495 398.926 435.561C398.769 435.627 398.6 435.661 398.43 435.66H398.302H397.446C395.349 435.655 393.316 436.379 391.693 437.708C390.07 439.037 388.957 440.89 388.544 442.949C388.509 443.148 388.427 443.336 388.306 443.497C388.184 443.659 388.027 443.789 387.845 443.878C386.109 444.784 384.633 446.12 383.557 447.758C382.481 449.397 381.841 451.283 381.697 453.24L381.611 454.483L381.497 456.098H392.139V487.213L390.57 487.985L389.771 488.371V491.529L390.841 491.801H391.012H420.413V488.371L419.614 487.985L418.059 487.213V456.098H424.607L425.006 455.341L425.334 454.74C426.674 452.248 427.017 449.338 426.293 446.601C425.57 443.865 423.835 441.506 421.44 440.005C420.362 439.327 419.174 438.844 417.93 438.575C417.724 438.535 417.53 438.447 417.364 438.318C417.198 438.189 417.065 438.022 416.975 437.832C416.082 436.022 414.701 434.499 412.99 433.433C411.278 432.367 409.304 431.802 407.289 431.801V431.801Z" fill="white"/>
<path id="Vector_23" d="M391.925 489.7L394.278 488.557V445.479H415.919V488.557L418.258 489.7H391.925Z" fill="white"/>
<path id="Vector_24" d="M415.206 446.194V488.971H394.992V446.194H415.206ZM416.632 444.765H393.565V488.114L391.197 489.272V490.401H418.986V489.257L416.632 488.1V444.765Z" fill="white"/>
<path id="Vector_25" d="M416.632 488.114V444.765H393.565V488.114L391.197 489.272V490.401H418.986V489.257L416.632 488.114ZM395.933 447.08H414.307V488.114H395.933V447.08ZM397.702 448.809H412.481V451.125H397.702V448.809ZM410.712 452.854H399.471V454.884H397.702V457.199H399.471V459.214H410.712V457.199H412.481V454.884H410.712V452.854ZM408.344 456.899H401.839V455.17H408.344V456.899ZM406.789 477.737L410.141 484.355H407.174L405.035 479.71L402.98 484.355H400.042L403.423 477.652L400.213 471.334H403.166L405.163 475.622L407.089 471.334H409.942L406.789 477.737ZM400.042 463.245H397.702V460.944H400.042V463.245ZM404.179 463.245H401.839V460.944H404.207L404.179 463.245ZM408.316 463.245H405.976V460.944H408.344L408.316 463.245ZM410.099 460.929H412.452V463.245H410.127L410.099 460.929ZM400.113 467.29H397.702V464.989H400.042L400.113 467.29ZM401.882 464.974H404.25V467.29H401.839L401.882 464.974ZM406.019 464.974H408.387V467.29H405.976L406.019 464.974ZM410.17 464.974H412.524V467.29H410.127L410.17 464.974Z" fill="#2D5967"/>
<path id="Vector_26" d="M424.081 453.982L423.753 454.596H418.047V452.281H422.326C423.005 450.671 423.09 448.871 422.568 447.204C422.045 445.537 420.949 444.109 419.473 443.176C418.768 442.719 417.984 442.395 417.163 442.219C416.415 442.056 415.713 441.726 415.11 441.253C414.507 440.781 414.019 440.177 413.682 439.489C413.167 438.455 412.41 437.561 411.475 436.884C410.54 436.208 409.455 435.768 408.313 435.604C407.172 435.439 406.007 435.555 404.92 435.94C403.832 436.326 402.855 436.97 402.07 437.817C401.551 438.38 400.908 438.813 400.192 439.084C399.477 439.354 398.708 439.454 397.947 439.375C397.046 439.287 396.136 439.435 395.308 439.803C394.519 440.151 393.825 440.685 393.286 441.36C392.747 442.034 392.379 442.829 392.213 443.677C392.064 444.423 391.749 445.127 391.292 445.735C390.835 446.344 390.248 446.842 389.574 447.193C388.589 447.707 387.727 448.427 387.045 449.305C386.363 450.183 385.878 451.198 385.622 452.281H392.099V454.668H383.04L383.126 453.424C383.231 451.697 383.782 450.026 384.725 448.575C385.667 447.125 386.97 445.944 388.504 445.149C388.871 444.955 389.191 444.683 389.442 444.352C389.694 444.021 389.87 443.64 389.959 443.234C390.185 442.023 390.702 440.885 391.465 439.919C392.228 438.952 393.214 438.187 394.338 437.688C395.524 437.158 396.827 436.947 398.119 437.074C398.528 437.121 398.944 437.071 399.331 436.927C399.718 436.783 400.065 436.549 400.344 436.245C401.381 435.116 402.676 434.257 404.119 433.743C405.561 433.228 407.107 433.073 408.622 433.292C410.138 433.51 411.577 434.094 412.817 434.995C414.056 435.895 415.058 437.085 415.736 438.46C415.934 438.824 416.209 439.14 416.542 439.387C416.874 439.634 417.257 439.805 417.662 439.889C419.119 440.21 420.483 440.865 421.645 441.804C422.807 442.742 423.735 443.938 424.358 445.297C424.98 446.657 425.279 448.142 425.231 449.636C425.183 451.131 424.789 452.594 424.081 453.91" fill="#2D5967"/>
</g>
</g>
<g id="Icon Text Label_4">
<text id="IconLabel_10" fill="black" xml:space="preserve" style="white-space: pre" font-family="Oracle Sans" font-size="16" letter-spacing="0em"><tspan x="374.961" y="509.617">Exadata</tspan></text>
<text id="IconLabel_11" fill="black" xml:space="preserve" style="white-space: pre" font-family="Oracle Sans" font-size="16" letter-spacing="0em"><tspan x="382.875" y="525.617">Cloud</tspan></text>
<text id="IconLabel_12" fill="black" xml:space="preserve" style="white-space: pre" font-family="Oracle Sans" font-size="16" letter-spacing="0em"><tspan x="377.789" y="541.617">Service</tspan></text>
</g>
</g>
<g id="On-premises box_3">
<g id="OCi_2">
<g id="Internet_3">
<rect x="688.5" y="72.5" width="151" height="503" rx="3.5" fill="#F5F4F2"/>
<text id="OCI Region_3" fill="#312D2A" xml:space="preserve" style="white-space: pre" font-family="Oracle Sans" font-size="16" font-weight="bold" letter-spacing="0em"><tspan x="715.305" y="93.816">Oracle Cloud</tspan></text>
<rect x="688.5" y="72.5" width="151" height="503" rx="3.5" stroke="#9E9892"/>
</g>
<text id="Infrastructure_2" fill="#312D2A" xml:space="preserve" style="white-space: pre" font-family="Oracle Sans" font-size="16" font-weight="bold" letter-spacing="0em"><tspan x="710.664" y="114.893">Infrastructure</tspan></text>
</g>
</g>
<g id="On-premises box_4">
<g id="OCi_3">
<g id="Internet_4">
<rect x="1000.5" y="72.5" width="151" height="503" rx="3.5" fill="#F5F4F2"/>
<text id="OCI Region_4" fill="#312D2A" xml:space="preserve" style="white-space: pre" font-family="Oracle Sans" font-size="16" font-weight="bold" letter-spacing="0em"><tspan x="1040.99" y="93.816">3rd Party</tspan></text>
<rect x="1000.5" y="72.5" width="151" height="503" rx="3.5" stroke="#9E9892"/>
</g>
<text id="Integration" fill="#312D2A" xml:space="preserve" style="white-space: pre" font-family="Oracle Sans" font-size="16" font-weight="bold" letter-spacing="0em"><tspan x="1033.29" y="114.893">Integration</tspan></text>
</g>
</g>
<g id="web app">
<g id="Site-to-Site VPN or FastConnect_3">
<g id="Web-Application_3">
<g id="Group 486_3">
<path id="Vector_27" d="M789.886 136.715H738.115C736.237 136.715 734.715 138.237 734.715 140.115V191.886C734.715 193.764 736.237 195.286 738.115 195.286H789.886C791.764 195.286 793.286 193.764 793.286 191.886V140.115C793.286 138.237 791.764 136.715 789.886 136.715Z" fill="white"/>
<path id="Vector_28" d="M789.9 137.429C790.61 137.432 791.289 137.717 791.79 138.22C792.29 138.723 792.571 139.404 792.571 140.114V191.9C792.571 192.609 792.29 193.288 791.789 193.789C791.288 194.29 790.609 194.571 789.9 194.571H738.114C737.404 194.571 736.723 194.29 736.22 193.79C735.717 193.289 735.432 192.61 735.429 191.9V140.114C735.429 139.402 735.712 138.719 736.215 138.215C736.719 137.712 737.402 137.429 738.114 137.429H789.9ZM789.9 136H738.114C737.023 136 735.977 136.433 735.205 137.205C734.433 137.977 734 139.023 734 140.114V191.9C734.004 192.989 734.439 194.032 735.21 194.8C735.981 195.569 737.026 196 738.114 196H789.9C790.986 195.996 792.027 195.563 792.795 194.795C793.563 194.027 793.996 192.986 794 191.9V140.114C794 139.026 793.569 137.981 792.8 137.21C792.032 136.439 790.989 136.004 789.9 136V136Z" fill="white"/>
<path id="Vector_29" d="M789.9 137.429H738.115C737.402 137.429 736.719 137.712 736.216 138.216C735.712 138.719 735.429 139.402 735.429 140.115V191.9C735.433 192.61 735.717 193.29 736.221 193.79C736.724 194.291 737.405 194.572 738.115 194.572H789.9C790.609 194.572 791.288 194.29 791.789 193.789C792.29 193.288 792.572 192.609 792.572 191.9V140.115C792.572 139.405 792.291 138.724 791.79 138.221C791.29 137.717 790.61 137.433 789.9 137.429ZM738.115 139.815H789.9C789.939 139.815 789.978 139.822 790.013 139.838C790.049 139.853 790.081 139.875 790.108 139.903C790.134 139.931 790.155 139.965 790.169 140.001C790.182 140.037 790.188 140.076 790.186 140.115V146.958H737.815V140.115C737.815 140.035 737.846 139.959 737.903 139.903C737.959 139.846 738.035 139.815 738.115 139.815ZM789.9 192.186H738.115C738.076 192.188 738.037 192.182 738.001 192.169C737.965 192.155 737.931 192.134 737.903 192.108C737.875 192.081 737.853 192.049 737.838 192.013C737.823 191.977 737.815 191.939 737.815 191.9V149.329H790.186V191.9C790.186 191.976 790.156 192.049 790.102 192.102C790.049 192.156 789.976 192.186 789.9 192.186Z" fill="#2D5967"/>
<path id="Vector_30" d="M741.828 145.072C742.649 145.072 743.314 144.407 743.314 143.586C743.314 142.766 742.649 142.1 741.828 142.1C741.008 142.1 740.343 142.766 740.343 143.586C740.343 144.407 741.008 145.072 741.828 145.072Z" fill="#2D5967"/>
<path id="Vector_31" d="M747.086 145.072C747.906 145.072 748.571 144.407 748.571 143.586C748.571 142.766 747.906 142.1 747.086 142.1C746.265 142.1 745.6 142.766 745.6 143.586C745.6 144.407 746.265 145.072 747.086 145.072Z" fill="#2D5967"/>
<path id="Vector_32" d="M752.244 145.072C753.064 145.072 753.729 144.407 753.729 143.586C753.729 142.766 753.064 142.1 752.244 142.1C751.423 142.1 750.758 142.766 750.758 143.586C750.758 144.407 751.423 145.072 752.244 145.072Z" fill="#2D5967"/>
<path id="Vector_33" d="M764.001 151.715C760.291 151.715 756.664 152.815 753.58 154.876C750.495 156.937 748.091 159.866 746.671 163.294C745.252 166.721 744.88 170.493 745.604 174.131C746.328 177.77 748.114 181.112 750.737 183.735C753.361 186.358 756.703 188.145 760.341 188.868C763.98 189.592 767.751 189.221 771.179 187.801C774.606 186.381 777.536 183.977 779.597 180.893C781.658 177.808 782.758 174.182 782.758 170.472C782.754 165.498 780.777 160.729 777.26 157.213C773.743 153.696 768.974 151.718 764.001 151.715ZM778.729 163.343C778.001 165.349 776.98 167.236 775.701 168.943C775.356 168.824 774.994 168.761 774.629 168.757C774.417 168.77 774.206 168.804 774.001 168.857C772.629 166.967 770.994 165.283 769.143 163.857C767.362 162.479 765.401 161.349 763.315 160.5C763.278 159.913 763.086 159.346 762.758 158.857C764.121 157.2 765.725 155.756 767.515 154.572C769.923 155.097 772.182 156.158 774.124 157.677C776.065 159.196 777.639 161.132 778.729 163.343ZM775.529 172.029C775.532 172.207 775.482 172.383 775.385 172.533C775.287 172.683 775.148 172.8 774.984 172.87C774.819 172.941 774.638 172.961 774.463 172.928C774.287 172.894 774.125 172.81 773.998 172.685C773.871 172.559 773.784 172.399 773.748 172.224C773.712 172.049 773.729 171.867 773.796 171.702C773.864 171.537 773.979 171.395 774.128 171.296C774.276 171.196 774.451 171.143 774.629 171.143C774.865 171.143 775.092 171.236 775.261 171.402C775.429 171.567 775.525 171.793 775.529 172.029ZM771.558 173.143C768.333 175.63 764.49 177.186 760.443 177.643C760.225 177.158 759.89 176.733 759.469 176.407C759.048 176.081 758.554 175.863 758.029 175.772C757.49 171.73 758.074 167.618 759.715 163.886H760.058C760.536 163.891 761.01 163.789 761.445 163.589C761.879 163.389 762.264 163.095 762.572 162.729C764.411 163.492 766.141 164.496 767.715 165.715C769.342 166.974 770.784 168.455 772.001 170.115C771.59 170.668 771.37 171.34 771.372 172.029C771.366 172.409 771.429 172.786 771.558 173.143ZM758.358 178.986C758.374 179.113 758.363 179.241 758.325 179.364C758.288 179.486 758.225 179.598 758.14 179.694C758.056 179.79 757.952 179.867 757.835 179.919C757.719 179.972 757.593 179.999 757.465 179.999C757.337 179.999 757.211 179.972 757.094 179.919C756.978 179.867 756.874 179.79 756.79 179.694C756.705 179.598 756.642 179.486 756.605 179.364C756.567 179.241 756.556 179.113 756.572 178.986C756.6 178.769 756.705 178.569 756.87 178.424C757.034 178.279 757.246 178.199 757.465 178.199C757.684 178.199 757.896 178.279 758.06 178.424C758.224 178.569 758.33 178.769 758.358 178.986ZM759.143 160.643C759.171 160.426 759.277 160.226 759.441 160.081C759.606 159.936 759.817 159.856 760.036 159.856C760.255 159.856 760.467 159.936 760.631 160.081C760.796 160.226 760.902 160.426 760.929 160.643C760.945 160.77 760.934 160.899 760.897 161.021C760.859 161.143 760.796 161.256 760.712 161.351C760.627 161.447 760.523 161.524 760.407 161.577C760.29 161.629 760.164 161.656 760.036 161.656C759.909 161.656 759.782 161.629 759.666 161.577C759.549 161.524 759.446 161.447 759.361 161.351C759.277 161.256 759.214 161.143 759.176 161.021C759.139 160.899 759.127 160.77 759.143 160.643ZM764.001 154.1C762.829 155.104 761.758 156.219 760.801 157.429C760.548 157.371 760.289 157.342 760.029 157.343C759.477 157.344 758.935 157.483 758.451 157.747C757.966 158.012 757.556 158.393 757.258 158.857C755.709 158.66 754.144 158.612 752.586 158.715C755.644 155.747 759.74 154.092 764.001 154.1ZM750.358 161.429C752.501 161.03 754.694 160.963 756.858 161.229C756.965 161.803 757.227 162.336 757.615 162.772C756.693 164.841 756.063 167.029 755.743 169.272C755.422 171.58 755.422 173.921 755.743 176.229C755.257 176.544 754.862 176.983 754.601 177.5C752.491 177.166 750.44 176.526 748.515 175.6C747.736 173.249 747.502 170.751 747.831 168.296C748.16 165.84 749.044 163.492 750.415 161.429H750.358ZM749.915 178.857C751.344 179.359 752.817 179.728 754.315 179.957C754.509 180.618 754.906 181.201 755.449 181.624C755.993 182.047 756.655 182.289 757.343 182.315C757.919 183.689 758.617 185.009 759.429 186.257C755.437 185.081 752.038 182.438 749.915 178.857ZM764.001 186.829C763.615 186.829 763.229 186.829 762.858 186.829C761.514 185.216 760.412 183.416 759.586 181.486C760.035 181.108 760.371 180.614 760.558 180.057C762.834 179.812 765.066 179.249 767.186 178.386C769.311 177.527 771.306 176.378 773.115 174.972C773.58 175.223 774.1 175.355 774.629 175.357H774.815C775.586 177.3 776.068 179.346 776.243 181.429C774.702 183.145 772.813 184.513 770.702 185.444C768.592 186.375 766.307 186.847 764.001 186.829ZM778.286 178.557C778.016 177.093 777.605 175.657 777.058 174.272C777.649 173.664 777.977 172.848 777.972 172C777.972 171.462 777.839 170.932 777.586 170.457C778.502 169.248 779.306 167.957 779.986 166.6C780.975 170.657 780.366 174.937 778.286 178.557Z" fill="#2D5967"/>
</g>
</g>
<g id="Icon Text Label_5">
<text id="IconLabel_13" fill="black" xml:space="preserve" style="white-space: pre" font-family="Oracle Sans" font-size="16" letter-spacing="0em"><tspan x="745.102" y="213.816">PSFT</tspan></text>
<text id="IconLabel_14" fill="black" xml:space="preserve" style="white-space: pre" font-family="Oracle Sans" font-size="16" letter-spacing="0em"><tspan x="728.297" y="229.816"> Web/App</tspan></text>
</g>
</g>
</g>
<g id="Mulesoft">
<g id="Services-SaaS-Cloud-Service">
<g id="Group 522">
<path id="Vector_34" d="M1065.06 195.27C1064.14 195.27 1063.26 194.896 1062.61 194.231C1061.96 193.566 1061.59 192.664 1061.59 191.724V167.342H1046.77L1046.93 165.182C1047.12 162.732 1047.92 160.373 1049.26 158.33C1050.59 156.286 1052.41 154.627 1054.55 153.509C1055.01 153.253 1055.4 152.894 1055.69 152.458C1055.99 152.023 1056.18 151.524 1056.26 150.999C1056.75 148.479 1058.07 146.209 1060 144.578C1061.94 142.946 1064.37 142.054 1066.88 142.055C1067.22 142.033 1067.56 142.033 1067.91 142.055H1068.23C1068.68 142.06 1069.13 141.969 1069.54 141.788C1069.95 141.607 1070.32 141.34 1070.63 141.004C1072.09 139.395 1073.91 138.174 1075.94 137.445C1077.97 136.716 1080.14 136.502 1082.26 136.82C1084.39 137.139 1086.4 137.981 1088.14 139.274C1089.88 140.567 1091.28 142.272 1092.23 144.243C1092.46 144.736 1092.79 145.17 1093.21 145.511C1093.62 145.852 1094.11 146.092 1094.63 146.213C1096.15 146.553 1097.59 147.165 1098.9 148.023C1101.81 149.901 1103.91 152.838 1104.79 156.242C1105.66 159.646 1105.25 163.263 1103.62 166.364L1103.08 167.4H1093.03V191.724C1093.03 192.666 1092.66 193.567 1092.01 194.232C1091.36 194.897 1090.47 195.27 1089.55 195.27H1065.06Z" fill="white"/>
<path id="Vector_35" d="M1080.36 137.459C1082.7 137.449 1084.99 138.111 1086.98 139.37C1088.97 140.629 1090.57 142.434 1091.61 144.58C1091.88 145.153 1092.29 145.655 1092.78 146.049C1093.27 146.443 1093.84 146.719 1094.46 146.856C1095.9 147.189 1097.28 147.771 1098.53 148.578C1101.3 150.35 1103.3 153.132 1104.13 156.361C1104.96 159.589 1104.56 163.02 1103.01 165.956L1102.66 166.613H1092.32V191.725C1092.32 192.096 1092.25 192.463 1092.11 192.806C1091.97 193.148 1091.76 193.46 1091.51 193.721C1091.25 193.983 1090.95 194.19 1090.61 194.331C1090.27 194.471 1089.92 194.543 1089.55 194.541H1065.06C1064.33 194.541 1063.63 194.244 1063.11 193.716C1062.59 193.188 1062.3 192.472 1062.3 191.725V166.642H1047.54L1047.64 165.3C1047.8 162.967 1048.54 160.714 1049.78 158.755C1051.03 156.797 1052.74 155.197 1054.77 154.108C1055.32 153.818 1055.8 153.405 1056.17 152.9C1056.55 152.395 1056.81 151.811 1056.93 151.19C1057.24 149.552 1057.94 148.016 1058.96 146.713C1059.97 145.409 1061.28 144.377 1062.78 143.704C1064.06 143.133 1065.44 142.835 1066.84 142.829C1067.16 142.829 1067.48 142.829 1067.79 142.829H1068.19C1068.73 142.821 1069.25 142.704 1069.74 142.483C1070.23 142.263 1070.67 141.943 1071.04 141.545C1072.23 140.241 1073.68 139.204 1075.28 138.501C1076.89 137.798 1078.62 137.443 1080.36 137.459ZM1080.36 136C1078.44 136.002 1076.53 136.409 1074.77 137.198C1073.01 137.986 1071.42 139.138 1070.11 140.582C1069.87 140.844 1069.58 141.052 1069.26 141.193C1068.93 141.333 1068.59 141.404 1068.23 141.399H1067.96C1067.6 141.377 1067.24 141.377 1066.88 141.399C1064.21 141.407 1061.62 142.362 1059.56 144.102C1057.5 145.841 1056.08 148.258 1055.56 150.942C1055.48 151.352 1055.31 151.738 1055.07 152.071C1054.82 152.404 1054.5 152.677 1054.14 152.868C1051.91 154.062 1050.01 155.82 1048.62 157.975C1047.23 160.129 1046.41 162.61 1046.22 165.183L1046.12 166.525L1046 168.101H1060.88V191.725C1060.88 192.859 1061.32 193.946 1062.1 194.748C1062.89 195.55 1063.95 196 1065.06 196H1089.55C1090.66 196 1091.73 195.55 1092.51 194.749C1093.3 193.947 1093.74 192.86 1093.74 191.725V168.101H1103.52L1103.92 167.342L1104.26 166.686C1105.32 164.696 1105.91 162.481 1105.99 160.215C1106.07 157.95 1105.63 155.697 1104.71 153.636C1103.79 151.574 1102.42 149.76 1100.69 148.337C1098.97 146.915 1096.95 145.923 1094.78 145.441C1094.38 145.353 1094 145.177 1093.67 144.925C1093.34 144.673 1093.07 144.351 1092.87 143.982C1091.73 141.585 1089.95 139.567 1087.73 138.156C1085.52 136.745 1082.97 135.998 1080.36 136Z" fill="white"/>
<path id="Vector_36" d="M1086.8 179.978H1085.28C1084.6 179.978 1084.05 180.54 1084.05 181.233V182.794C1084.05 183.487 1084.6 184.049 1085.28 184.049H1086.8C1087.48 184.049 1088.03 183.487 1088.03 182.794V181.233C1088.03 180.54 1087.48 179.978 1086.8 179.978Z" fill="#2D5967"/>
<path id="Vector_37" d="M1075.16 180.124H1073.63C1072.96 180.124 1072.41 180.686 1072.41 181.379V182.94C1072.41 183.633 1072.96 184.195 1073.63 184.195H1075.16C1075.84 184.195 1076.38 183.633 1076.38 182.94V181.379C1076.38 180.686 1075.84 180.124 1075.16 180.124Z" fill="#2D5967"/>
<path id="Vector_38" d="M1069.35 180.124H1067.82C1067.14 180.124 1066.59 180.686 1066.59 181.379V182.94C1066.59 183.633 1067.14 184.195 1067.82 184.195H1069.35C1070.02 184.195 1070.57 183.633 1070.57 182.94V181.379C1070.57 180.686 1070.02 180.124 1069.35 180.124Z" fill="#2D5967"/>
<path id="Vector_39" d="M1080.99 180.124H1079.46C1078.79 180.124 1078.24 180.686 1078.24 181.379V182.94C1078.24 183.633 1078.79 184.195 1079.46 184.195H1080.99C1081.66 184.195 1082.21 183.633 1082.21 182.94V181.379C1082.21 180.686 1081.66 180.124 1080.99 180.124Z" fill="#2D5967"/>
<path id="Vector_40" d="M1086.5 157.245H1068.13C1067.93 157.243 1067.73 157.282 1067.55 157.36C1067.36 157.437 1067.19 157.552 1067.05 157.697C1066.9 157.842 1066.79 158.015 1066.71 158.206C1066.63 158.396 1066.59 158.6 1066.59 158.806V176.681C1066.59 176.893 1066.62 177.105 1066.69 177.304C1066.76 177.503 1066.88 177.685 1067.02 177.838C1067.16 177.991 1067.34 178.112 1067.53 178.194C1067.72 178.276 1067.93 178.317 1068.13 178.315H1086.5C1086.91 178.315 1087.3 178.151 1087.58 177.858C1087.87 177.565 1088.03 177.168 1088.03 176.754V158.806C1088.03 158.392 1087.87 157.995 1087.58 157.702C1087.3 157.41 1086.91 157.245 1086.5 157.245ZM1085.58 175.747H1069.05V159.697H1085.58V175.747Z" fill="#2D5967"/>
<path id="Vector_41" d="M1089.55 152.854H1065.06C1064.32 152.858 1063.63 153.158 1063.11 153.688C1062.59 154.218 1062.3 154.936 1062.3 155.684V191.725C1062.3 192.472 1062.59 193.189 1063.11 193.717C1063.63 194.245 1064.33 194.542 1065.06 194.542H1089.55C1089.92 194.543 1090.28 194.472 1090.61 194.331C1090.95 194.191 1091.25 193.984 1091.51 193.722C1091.76 193.46 1091.97 193.149 1092.11 192.806C1092.25 192.464 1092.32 192.096 1092.32 191.725V155.684C1092.32 154.934 1092.03 154.214 1091.51 153.683C1090.99 153.152 1090.29 152.854 1089.55 152.854ZM1089.87 191.725C1089.87 191.767 1089.86 191.808 1089.84 191.846C1089.83 191.884 1089.8 191.919 1089.77 191.947C1089.75 191.976 1089.71 191.998 1089.67 192.013C1089.63 192.027 1089.59 192.034 1089.55 192.032H1065.06C1065.02 192.032 1064.98 192.024 1064.94 192.008C1064.9 191.993 1064.87 191.97 1064.84 191.942C1064.82 191.914 1064.79 191.88 1064.78 191.843C1064.76 191.805 1064.76 191.766 1064.76 191.725V155.684C1064.75 155.643 1064.76 155.602 1064.77 155.563C1064.79 155.524 1064.81 155.488 1064.84 155.458C1064.87 155.428 1064.9 155.404 1064.94 155.388C1064.97 155.372 1065.01 155.363 1065.06 155.363H1089.55C1089.64 155.363 1089.72 155.397 1089.78 155.458C1089.83 155.518 1089.87 155.599 1089.87 155.684V191.725Z" fill="#2D5967"/>
<path id="Vector_42" d="M1079.45 187.654H1075.17V190.163H1079.45V187.654Z" fill="#2D5967"/>
<path id="Vector_43" d="M1098.55 148.577C1097.29 147.769 1095.91 147.187 1094.46 146.855C1093.85 146.718 1093.27 146.442 1092.78 146.048C1092.29 145.654 1091.89 145.152 1091.61 144.579C1090.57 142.433 1088.97 140.628 1086.98 139.37C1084.99 138.111 1082.7 137.448 1080.36 137.458C1078.63 137.462 1076.92 137.829 1075.34 138.537C1073.76 139.245 1072.33 140.278 1071.16 141.573C1070.73 142.032 1070.22 142.384 1069.64 142.601C1069.06 142.819 1068.45 142.897 1067.83 142.828C1066.12 142.671 1064.4 142.957 1062.82 143.66C1061.33 144.332 1060.02 145.365 1059 146.668C1057.98 147.971 1057.29 149.507 1056.98 151.145C1056.85 151.766 1056.59 152.351 1056.22 152.856C1055.84 153.361 1055.36 153.774 1054.81 154.063C1052.79 155.152 1051.07 156.752 1049.83 158.711C1048.58 160.67 1047.84 162.922 1047.68 165.255L1047.54 166.641H1060.47V164.102H1050.28C1050.6 162.449 1051.27 160.89 1052.26 159.541C1053.25 158.193 1054.52 157.088 1055.98 156.31C1056.86 155.845 1057.62 155.181 1058.21 154.37C1058.8 153.559 1059.21 152.621 1059.4 151.627C1059.64 150.387 1060.16 149.225 1060.94 148.239C1061.71 147.253 1062.7 146.473 1063.83 145.965C1065.02 145.428 1066.32 145.207 1067.62 145.323C1068.6 145.43 1069.59 145.302 1070.52 144.95C1071.44 144.598 1072.28 144.032 1072.95 143.295C1073.9 142.252 1075.05 141.42 1076.32 140.85C1077.6 140.281 1078.97 139.985 1080.36 139.983C1082.24 139.968 1084.09 140.497 1085.68 141.509C1087.28 142.521 1088.57 143.975 1089.4 145.703C1089.84 146.614 1090.48 147.412 1091.27 148.038C1092.06 148.664 1092.97 149.102 1093.94 149.321C1095.12 149.606 1096.23 150.1 1097.24 150.78C1099.36 152.156 1100.92 154.27 1101.65 156.733C1102.37 159.197 1102.2 161.844 1101.17 164.19H1094.2V166.641H1102.67L1103.01 165.985C1104.57 163.047 1104.98 159.61 1104.15 156.376C1103.32 153.141 1101.32 150.352 1098.55 148.577Z" fill="#2D5967"/>
</g>
</g>
<g id="Icon Text Label_6">
<text id="IconLabel_15" fill="black" xml:space="preserve" style="white-space: pre" font-family="Oracle Sans" font-size="16" letter-spacing="0em"><tspan x="1043.85" y="213.816">Mulesoft</tspan></text>
<text id="IconLabel_16" fill="black" xml:space="preserve" style="white-space: pre" font-family="Oracle Sans" font-size="16" letter-spacing="0em"><tspan x="1053.2" y="229.816">(SaaS)</tspan></text>
</g>
</g>
<g id="Banking system">
<g id="Treasury">
<g id="Group">
<g id="Group_2">
<g id="Group_3">
<path id="Vector_44" d="M1046.71 313.286V306.018H1048.84V302.17H1050.97V298.464H1053.09V279.652H1050.97V275.946H1048.84V272.241H1046.71V264.972L1076.07 254.711L1105.29 264.972V272.241H1103.16V275.946H1101.04V279.652H1098.91V298.464H1101.04V302.17H1103.16V306.018H1105.29V313.286H1046.71Z" fill="white"/>
<path id="Vector_45" d="M1076.07 255.566L1104.72 265.542V271.671H1102.6V275.376H1100.47V279.082H1098.34V299.319H1100.47V303.025H1102.6V306.73H1104.72V312.573H1047.42V306.73H1049.55V303.025H1051.68V299.319H1053.8V278.939H1051.68V275.234H1049.55V271.528H1047.42V265.4L1076.07 255.566ZM1076.07 253.999L1075.65 254.141L1046.99 264.117L1046 264.402V265.4V271.528V272.953H1047.42H1048.13V275.234V276.659H1049.55H1050.26V278.939V280.364H1051.68H1052.38V297.752H1051.68H1050.26V299.177V301.457H1049.55H1048.13V302.882V305.305H1047.42H1046V306.73V312.573V313.999H1047.42H1104.58H1106V312.573V306.73V305.305H1104.58H1103.87V303.025V301.599H1102.46H1101.75V299.319V297.894H1100.33H1099.62V280.364H1100.33H1101.75V278.939V276.659H1102.46H1103.87V275.234V272.953H1104.58H1106V271.528V265.4V264.402L1105.01 264.117L1076.36 254.141L1076.07 253.999Z" fill="white"/>
</g>
<g id="Group_4">
<path id="Vector_46" d="M1076.07 255.566L1047.42 265.4V271.528H1104.58V265.4L1076.07 255.566ZM1102.46 269.39H1049.55V266.968L1076.07 257.704L1102.6 266.968V269.39H1102.46Z" fill="#2C5967"/>
<path id="Vector_47" d="M1047.42 312.573H1104.58V306.73H1047.42V312.573ZM1049.55 308.725H1102.46V310.293H1049.55V308.725Z" fill="#2C5967"/>
<path id="Vector_48" d="M1076.92 295.471V293.903H1077.35C1078.91 293.903 1080.33 292.621 1080.33 290.911C1080.33 289.343 1079.05 287.918 1077.35 287.918H1074.65C1074.23 287.918 1073.94 287.633 1073.94 287.205C1073.94 286.778 1074.37 286.35 1074.8 286.35H1079.76V284.212H1077.07V282.645H1074.94V284.212H1074.8C1073.24 284.212 1071.82 285.495 1071.82 287.205C1071.82 288.773 1073.09 290.055 1074.65 290.055H1077.35C1077.77 290.055 1078.2 290.483 1078.2 290.911C1078.2 291.338 1077.77 291.766 1077.35 291.766H1072.24V293.903H1074.94V295.471H1076.92Z" fill="#2C5967"/>
<path id="Vector_49" d="M1086.14 289.058C1086.14 283.5 1081.6 278.939 1076.07 278.939C1070.54 278.939 1066 283.5 1066 289.058C1066 294.616 1070.54 299.176 1076.07 299.176C1081.6 299.176 1086.14 294.616 1086.14 289.058ZM1068.13 289.058C1068.13 284.64 1071.68 281.077 1076.07 281.077C1080.47 281.077 1084.02 284.64 1084.02 289.058C1084.02 293.476 1080.47 297.039 1076.07 297.039C1071.68 297.039 1068.13 293.476 1068.13 289.058Z" fill="#2C5967"/>
<path id="Vector_50" d="M1053.8 280.649V297.609H1060.75V280.649H1053.8ZM1058.48 295.471H1055.93V282.645H1058.63V295.471H1058.48Z" fill="#2C5967"/>
<path id="Vector_51" d="M1062.74 276.801H1051.68V278.939H1062.74V276.801Z" fill="#2C5967"/>
<path id="Vector_52" d="M1064.87 273.096H1049.55V275.234H1064.87V273.096Z" fill="#2C5967"/>
<path id="Vector_53" d="M1062.74 299.177H1051.68V301.314H1062.74V299.177Z" fill="#2C5967"/>
<path id="Vector_54" d="M1064.87 302.882H1049.55V305.02H1064.87V302.882Z" fill="#2C5967"/>
<path id="Vector_55" d="M1091.39 280.649V297.609H1098.34V280.649H1091.39ZM1096.21 295.471H1093.52V282.645H1096.21V295.471Z" fill="#2C5967"/>
<path id="Vector_56" d="M1100.33 276.801H1089.26V278.939H1100.33V276.801Z" fill="#2C5967"/>
<path id="Vector_57" d="M1102.46 273.096H1087.14V275.234H1102.46V273.096Z" fill="#2C5967"/>
<path id="Vector_58" d="M1100.33 299.177H1089.26V301.314H1100.33V299.177Z" fill="#2C5967"/>
<path id="Vector_59" d="M1102.46 302.882H1087.14V305.02H1102.46V302.882Z" fill="#2C5967"/>
<path id="Vector_60" d="M1076.07 259.842C1074.23 259.842 1072.67 261.124 1072.24 262.835H1069.69V264.972H1072.24C1072.67 266.683 1074.23 267.965 1076.07 267.965C1077.92 267.965 1079.48 266.683 1079.9 264.972H1082.46V262.692H1079.9C1079.33 261.124 1077.92 259.842 1076.07 259.842ZM1077.92 263.832C1077.92 264.83 1077.07 265.685 1076.07 265.685C1075.08 265.685 1074.23 264.83 1074.23 263.832C1074.23 262.835 1075.08 261.98 1076.07 261.98C1077.07 261.98 1077.92 262.835 1077.92 263.832Z" fill="#2C5967"/>
</g>
</g>
</g>
</g>
<g id="Icon Text Label_7">
<text id="IconLabel_17" fill="black" xml:space="preserve" style="white-space: pre" font-family="Oracle Sans" font-size="16" letter-spacing="0em"><tspan x="1046.24" y="331.815">Banking</tspan></text>
<text id="IconLabel_18" fill="black" xml:space="preserve" style="white-space: pre" font-family="Oracle Sans" font-size="16" letter-spacing="0em"><tspan x="1045.71" y="347.815">Systems</tspan></text>
</g>
</g>
<g id="3rd part">
<g id="ERP">
<g id="Group 17">
<path id="Vector_61" d="M1059.51 412.142L1066.29 408.746L1059.51 405.365L1062.28 403.938H1046.27L1046.43 401.87C1046.62 399.474 1047.42 397.167 1048.76 395.17C1050.1 393.172 1051.92 391.549 1054.06 390.456C1054.52 390.22 1054.92 389.883 1055.23 389.47C1055.54 389.058 1055.76 388.58 1055.86 388.074C1056.34 385.611 1057.66 383.392 1059.6 381.796C1061.53 380.201 1063.97 379.328 1066.47 379.328C1066.81 379.307 1067.15 379.307 1067.49 379.328H1067.83C1068.28 379.333 1068.72 379.245 1069.14 379.068C1069.55 378.891 1069.92 378.63 1070.23 378.301C1071.69 376.74 1073.5 375.555 1075.52 374.846C1077.54 374.138 1079.7 373.926 1081.81 374.23C1083.93 374.534 1085.94 375.344 1087.68 376.592C1089.41 377.84 1090.82 379.488 1091.78 381.397C1092.01 381.879 1092.34 382.303 1092.76 382.636C1093.18 382.97 1093.66 383.205 1094.18 383.323C1095.7 383.655 1097.15 384.254 1098.46 385.092C1101.37 386.928 1103.48 389.8 1104.35 393.129C1105.23 396.457 1104.81 399.993 1103.18 403.025L1102.64 404.038H1089.29L1091.87 405.465L1085.09 408.789L1091.93 412.213L1075.58 420.16L1059.51 412.142Z" fill="white"/>
<path id="Vector_62" d="M1079.9 374.763C1082.24 374.754 1084.53 375.401 1086.52 376.632C1088.51 377.863 1090.12 379.628 1091.15 381.725C1091.43 382.286 1091.84 382.777 1092.33 383.162C1092.82 383.547 1093.4 383.817 1094.01 383.951C1095.45 384.277 1096.83 384.846 1098.09 385.635C1100.86 387.367 1102.86 390.088 1103.69 393.244C1104.52 396.4 1104.12 399.755 1102.57 402.626L1102.23 403.268H1086.53L1090.33 405.38L1083.48 408.732L1085.55 409.76L1090.33 412.142L1075.58 419.375L1061.11 412.142L1065.83 409.774L1067.89 408.747L1061.11 405.365L1065.29 403.297H1047.04L1047.14 401.984C1047.3 399.703 1048.04 397.501 1049.29 395.586C1050.53 393.671 1052.25 392.106 1054.28 391.042C1054.83 390.758 1055.31 390.355 1055.68 389.861C1056.06 389.367 1056.32 388.796 1056.44 388.188C1056.76 386.587 1057.45 385.085 1058.47 383.811C1059.49 382.536 1060.8 381.527 1062.29 380.869C1063.58 380.309 1064.97 380.018 1066.37 380.013H1067.32H1067.73C1068.26 380.006 1068.79 379.891 1069.28 379.676C1069.77 379.46 1070.22 379.148 1070.58 378.758C1071.77 377.485 1073.22 376.472 1074.82 375.785C1076.43 375.097 1078.15 374.749 1079.9 374.763ZM1079.9 373.337C1077.97 373.338 1076.07 373.737 1074.3 374.508C1072.54 375.278 1070.95 376.405 1069.64 377.816C1069.4 378.071 1069.11 378.274 1068.79 378.411C1068.47 378.549 1068.12 378.618 1067.77 378.615H1067.49C1067.13 378.594 1066.77 378.594 1066.42 378.615C1063.74 378.62 1061.15 379.552 1059.08 381.254C1057.01 382.955 1055.6 385.319 1055.07 387.946C1054.99 388.347 1054.82 388.724 1054.58 389.05C1054.33 389.376 1054.01 389.642 1053.65 389.829C1051.41 390.997 1049.51 392.716 1048.12 394.822C1046.73 396.929 1045.91 399.355 1045.72 401.87L1045.62 403.183L1045.5 404.723H1059.25L1057.93 405.394L1060.47 406.664L1064.75 408.775L1060.47 410.887L1057.93 412.171L1060.47 413.44L1074.93 420.674L1075.58 420.987L1076.2 420.674L1090.96 413.426L1093.54 412.156L1090.96 410.872L1086.68 408.732L1090.96 406.649L1093.41 405.451L1091.98 404.695H1103.02L1103.42 403.953L1103.77 403.311C1104.82 401.37 1105.41 399.211 1105.49 397.003C1105.57 394.796 1105.14 392.6 1104.22 390.588C1103.31 388.577 1101.94 386.806 1100.22 385.414C1098.51 384.022 1096.49 383.048 1094.34 382.567C1093.93 382.481 1093.55 382.31 1093.22 382.063C1092.89 381.817 1092.62 381.502 1092.42 381.141C1091.28 378.798 1089.49 376.824 1087.28 375.445C1085.06 374.065 1082.51 373.335 1079.9 373.337Z" fill="white"/>
<path id="Vector_63" d="M1082.78 411.114L1084.79 412.127L1075.59 416.635L1066.6 412.141L1068.57 411.143L1065.83 409.773L1061.11 412.141L1075.58 419.375L1090.33 412.141L1085.55 409.759L1082.78 411.114Z" fill="#2D5967"/>
<path id="Vector_64" d="M1075.58 412.598L1090.33 405.379L1085.55 402.982L1082.78 404.338L1084.79 405.351L1075.59 409.859L1066.6 405.365L1068.57 404.381L1065.83 403.011L1061.11 405.365L1075.58 412.598Z" fill="#2D5967"/>
<path id="Vector_65" d="M1090.33 398.602L1075.7 391.298L1061.11 398.588L1075.58 405.821L1090.33 398.602ZM1075.7 394.037L1084.79 398.574L1075.59 403.082L1066.6 398.588L1075.7 394.037Z" fill="#2D5967"/>
<path id="Vector_66" d="M1082.78 404.338L1084.79 405.351L1075.59 409.859L1066.6 405.365L1068.57 404.381L1065.83 403.011L1061.11 405.365L1075.58 412.598L1090.33 405.379L1085.55 402.982L1082.78 404.338Z" fill="#2D5967"/>
<path id="Vector_67" d="M1082.78 411.114L1084.79 412.127L1075.59 416.635L1066.6 412.141L1068.57 411.143L1065.83 409.773L1061.11 412.141L1075.58 419.375L1090.33 412.141L1085.55 409.759L1082.78 411.114Z" fill="#2D5967"/>
<path id="Vector_68" d="M1098.1 385.634C1096.84 384.844 1095.46 384.275 1094.01 383.95C1093.4 383.816 1092.82 383.546 1092.33 383.161C1091.83 382.776 1091.43 382.285 1091.15 381.725C1090.12 379.627 1088.51 377.862 1086.52 376.631C1084.53 375.4 1082.24 374.753 1079.9 374.763C1078.17 374.766 1076.46 375.125 1074.87 375.817C1073.29 376.509 1071.86 377.52 1070.68 378.786C1070.26 379.234 1069.74 379.578 1069.16 379.791C1068.59 380.004 1067.97 380.08 1067.36 380.013C1065.64 379.859 1063.91 380.139 1062.33 380.826C1060.84 381.484 1059.53 382.493 1058.51 383.767C1057.49 385.042 1056.8 386.544 1056.49 388.145C1056.36 388.752 1056.1 389.324 1055.73 389.817C1055.35 390.311 1054.87 390.715 1054.32 390.998C1052.29 392.063 1050.58 393.627 1049.33 395.542C1048.08 397.457 1047.34 399.66 1047.18 401.941L1047.04 403.296H1059.05V400.814H1049.78C1050.1 399.197 1050.78 397.673 1051.77 396.354C1052.75 395.035 1054.03 393.956 1055.49 393.195C1056.37 392.74 1057.13 392.091 1057.72 391.298C1058.32 390.505 1058.72 389.588 1058.91 388.616C1059.15 387.404 1059.68 386.267 1060.45 385.303C1061.22 384.339 1062.22 383.577 1063.35 383.08C1064.54 382.554 1065.85 382.339 1067.14 382.452C1068.12 382.555 1069.12 382.43 1070.04 382.086C1070.97 381.742 1071.8 381.189 1072.48 380.469C1073.43 379.45 1074.58 378.636 1075.85 378.079C1077.13 377.522 1078.5 377.233 1079.9 377.231C1081.78 377.216 1083.63 377.733 1085.23 378.723C1086.83 379.712 1088.11 381.134 1088.94 382.823C1089.39 383.714 1090.03 384.494 1090.82 385.106C1091.61 385.718 1092.52 386.147 1093.49 386.361C1094.67 386.639 1095.78 387.122 1096.79 387.788C1098.91 389.133 1100.48 391.2 1101.21 393.608C1101.93 396.017 1101.76 398.606 1100.73 400.899H1092.17V403.296H1102.24L1102.58 402.654C1104.14 399.78 1104.55 396.419 1103.72 393.256C1102.88 390.093 1100.88 387.367 1098.1 385.634Z" fill="#2D5967"/>
</g>
</g>
<g id="Icon Text Label_8">
<text id="IconLabel_19" fill="black" xml:space="preserve" style="white-space: pre" font-family="Oracle Sans" font-size="16" letter-spacing="0em"><tspan x="1042.7" y="438.816">3rd Party</tspan></text>
<text id="IconLabel_20" fill="black" xml:space="preserve" style="white-space: pre" font-family="Oracle Sans" font-size="16" letter-spacing="0em"><tspan x="1051.95" y="454.816">clouds</tspan></text>
</g>
</g>
<g id="azure">
<g id="Technology - Self Repairing">
<g id="Group 188">
<path id="Vector_69" d="M1075.5 523.404C1069.3 523.381 1063.34 521.023 1058.81 516.8C1054.28 512.577 1051.5 506.801 1051.05 500.626L1048.77 502.907L1046.37 500.518L1051.24 495.645C1051.49 493.803 1051.94 491.995 1052.6 490.258L1052.81 489.684C1054.31 485.976 1056.7 482.693 1059.77 480.125C1062.85 477.557 1066.5 475.782 1070.42 474.957L1070.79 474.885C1071.41 474.778 1071.99 474.682 1072.66 474.611L1073.19 474.551C1074.05 474.467 1074.77 474.431 1075.47 474.431C1081.67 474.451 1087.63 476.808 1092.17 481.031C1096.7 485.254 1099.47 491.032 1099.93 497.209L1102.21 494.928L1104.6 497.317L1099.74 502.19C1099.49 504.039 1099.03 505.854 1098.38 507.601L1098.18 508.151C1096.68 511.861 1094.29 515.144 1091.21 517.712C1088.14 520.281 1084.48 522.055 1080.56 522.878L1080.18 522.95C1079.57 523.057 1078.98 523.153 1078.32 523.224H1077.79C1076.94 523.308 1076.2 523.344 1075.51 523.344L1075.5 523.404Z" fill="white"/>
<path id="Vector_70" d="M1075.47 475.028C1081.75 475.028 1087.79 477.5 1092.26 481.911C1096.74 486.321 1099.29 492.315 1099.38 498.595L1102.2 495.776L1103.77 497.341L1099.19 501.927C1098.93 503.978 1098.41 505.987 1097.62 507.9C1096.15 511.517 1093.81 514.716 1090.81 517.216C1087.8 519.715 1084.23 521.438 1080.4 522.233H1080.03C1079.44 522.352 1078.84 522.448 1078.22 522.52H1077.69C1076.96 522.579 1076.22 522.627 1075.48 522.627C1069.19 522.628 1063.16 520.155 1058.68 515.745C1054.21 511.334 1051.65 505.34 1051.56 499.061L1048.77 502.059L1047.19 500.494L1051.79 495.907C1052.05 493.856 1052.57 491.848 1053.36 489.935C1054.82 486.303 1057.17 483.088 1060.18 480.577C1063.19 478.067 1066.77 476.337 1070.61 475.542L1070.97 475.482C1071.57 475.363 1072.17 475.267 1072.79 475.196H1073.31C1073.98 475.028 1074.72 475.028 1075.47 475.028ZM1075.47 473.834C1074.76 473.834 1074.02 473.834 1073.15 473.953H1072.73H1072.6C1071.95 474.025 1071.3 474.121 1070.68 474.24L1070.61 474.324H1070.36C1066.33 475.163 1062.56 476.98 1059.4 479.615C1056.24 482.25 1053.77 485.622 1052.22 489.433L1051.77 490.556C1051.21 492.106 1050.81 493.706 1050.57 495.334L1046.27 499.634L1045.5 500.494L1046.35 501.306L1047.89 502.907L1048.74 503.755L1049.59 502.907L1050.55 501.939C1051.31 508.016 1054.26 513.607 1058.85 517.667C1063.45 521.727 1069.36 523.979 1075.49 524.001C1076.19 524.001 1076.92 524.001 1077.79 523.881H1078.2H1078.35C1078.98 523.81 1079.63 523.714 1080.25 523.595H1080.38H1080.63C1084.67 522.745 1088.44 520.915 1091.6 518.265C1094.76 515.615 1097.22 512.227 1098.76 508.401L1099.21 507.29H1099.15C1099.71 505.741 1100.11 504.141 1100.35 502.513L1104.65 498.213L1105.5 497.365L1104.63 496.528L1103.06 494.964L1102.21 494.14L1101.36 494.988L1100.4 495.955C1099.65 489.871 1096.71 484.268 1092.12 480.196C1087.54 476.123 1081.62 473.861 1075.49 473.834V473.834H1075.47Z" fill="white"/>
<path id="Vector_71" d="M1075.51 506.418C1077 506.418 1078.45 505.978 1079.69 505.154C1080.92 504.33 1081.88 503.158 1082.45 501.788C1083.02 500.417 1083.17 498.909 1082.88 497.454C1082.59 495.999 1081.87 494.662 1080.82 493.613C1079.77 492.564 1078.44 491.85 1076.98 491.56C1075.52 491.271 1074.01 491.419 1072.64 491.987C1071.27 492.555 1070.1 493.516 1069.27 494.75C1068.44 495.983 1068 497.434 1068 498.917C1068 499.902 1068.2 500.878 1068.58 501.788C1068.95 502.698 1069.51 503.525 1070.2 504.221C1071.61 505.628 1073.52 506.418 1075.51 506.418ZM1075.51 493.638C1076.56 493.638 1077.58 493.947 1078.45 494.528C1079.32 495.108 1080 495.932 1080.4 496.897C1080.8 497.862 1080.9 498.923 1080.7 499.947C1080.49 500.971 1079.99 501.912 1079.25 502.65C1078.51 503.389 1077.57 503.892 1076.54 504.095C1075.52 504.299 1074.46 504.194 1073.49 503.795C1072.53 503.395 1071.7 502.719 1071.12 501.85C1070.54 500.982 1070.23 499.961 1070.23 498.917C1070.23 497.517 1070.79 496.174 1071.78 495.184C1072.77 494.194 1074.11 493.638 1075.51 493.638ZM1095.59 507.111L1097.66 507.947C1095.58 513.053 1091.79 517.282 1086.94 519.917C1082.09 522.552 1076.48 523.431 1071.06 522.404C1065.64 521.378 1060.74 518.509 1057.19 514.285C1053.64 510.06 1051.67 504.741 1051.6 499.228L1048.77 502.059L1047.19 500.494L1052.68 495.011L1058.32 500.327L1056.81 501.951L1053.87 499.132C1053.92 504.134 1055.7 508.965 1058.92 512.804C1062.13 516.643 1066.57 519.254 1071.49 520.193C1076.4 521.133 1081.5 520.343 1085.9 517.959C1090.3 515.574 1093.74 511.742 1095.64 507.111H1095.59ZM1103.83 497.341L1098.34 502.823L1092.7 497.508L1094.21 495.883L1097.2 498.702C1097.19 493.674 1095.42 488.808 1092.2 484.939C1088.99 481.07 1084.53 478.438 1079.58 477.495C1074.64 476.552 1069.52 477.356 1065.1 479.769C1060.69 482.183 1057.25 486.055 1055.38 490.723L1053.32 489.887C1055.4 484.781 1059.19 480.552 1064.04 477.917C1068.89 475.282 1074.5 474.404 1079.92 475.43C1085.34 476.457 1090.24 479.326 1093.79 483.55C1097.34 487.774 1099.31 493.094 1099.38 498.607L1102.21 495.776L1103.83 497.341ZM1060.54 495.704V502.13L1064.13 502.536C1064.33 503.184 1064.59 503.812 1064.91 504.412L1062.61 507.278L1067.17 511.817L1070.01 509.548C1070.62 509.86 1071.24 510.12 1071.89 510.324L1072.29 513.908H1078.73L1079.12 510.324C1079.77 510.12 1080.4 509.86 1081 509.548L1083.85 511.817L1088.4 507.278L1086.16 504.412C1086.46 503.797 1086.7 503.157 1086.9 502.501L1090.48 502.094V495.704L1086.9 495.298C1086.7 494.653 1086.45 494.026 1086.16 493.423L1088.4 490.556L1083.85 486.017L1081 488.287C1080.4 487.974 1079.77 487.714 1079.12 487.51L1078.73 483.927H1072.29L1071.89 487.51C1071.24 487.714 1070.62 487.974 1070.01 488.287L1067.17 486.017L1062.61 490.556L1064.9 493.399C1064.58 494.018 1064.32 494.666 1064.12 495.334L1060.54 495.704ZM1065.64 490.747L1067.38 489.015L1069.86 490.998L1070.53 490.592C1071.37 490.093 1072.27 489.718 1073.22 489.481L1073.97 489.29L1074.33 486.137H1076.78L1077.14 489.29L1077.89 489.481C1078.82 489.711 1079.71 490.073 1080.54 490.556L1081.21 490.962L1083.68 488.979L1085.43 490.711L1083.43 493.196L1083.84 493.853C1084.35 494.701 1084.73 495.624 1084.96 496.588L1085.14 497.341L1088.3 497.687V500.112L1085.14 500.458L1084.96 501.306C1084.73 502.258 1084.35 503.169 1083.84 504.006L1083.43 504.663L1085.43 507.147L1083.68 508.879L1081.21 506.896L1080.54 507.278C1079.7 507.778 1078.79 508.152 1077.85 508.389L1077.09 508.58L1076.73 511.734H1074.28L1073.92 508.58L1073.17 508.389C1072.22 508.152 1071.32 507.778 1070.48 507.278L1069.81 506.872L1067.33 508.855L1065.59 507.087L1067.59 504.603L1067.18 503.946C1066.68 503.125 1066.3 502.236 1066.06 501.306L1065.83 500.494L1062.72 500.112V497.723L1065.83 497.341L1066.01 496.588C1066.25 495.638 1066.63 494.728 1067.13 493.889L1067.54 493.232L1065.64 490.747Z" fill="#2D5967"/>
</g>
</g>
<g id="Icon Text Label_9">
<text id="IconLabel_21" fill="black" xml:space="preserve" style="white-space: pre" font-family="Oracle Sans" font-size="16" letter-spacing="0em"><tspan x="1054.53" y="541.816">Azure</tspan></text>
<text id="IconLabel_22" fill="black" xml:space="preserve" style="white-space: pre" font-family="Oracle Sans" font-size="16" letter-spacing="0em"><tspan x="1047.35" y="557.816">AD SSO</tspan></text>
</g>
</g>
<g id="ADTP">
<g id="Autonomous-Transaction-Processing-ATP">
<g id="ATP-D">
<g id="Group 838">
<path id="Vector_72" d="M792.42 462.142L793.5 461.062L792.42 459.982L790.985 458.615L789.905 457.548L788.838 458.615L788.114 459.339C787.416 455.809 785.966 452.471 783.862 449.551L783.37 448.868L786.583 445.518L787.663 444.452L786.583 443.372L785.216 442.005L784.081 440.843L783.138 441.786C782.456 439.937 781.287 438.306 779.754 437.067C778.221 435.827 776.382 435.025 774.431 434.745C772.48 434.464 770.489 434.717 768.67 435.475C766.85 436.233 765.269 437.469 764.095 439.052H763.124C757.593 439.131 752.248 441.056 747.936 444.52L747.635 444.753C746.634 444.088 745.502 443.644 744.315 443.45C743.128 443.256 741.914 443.317 740.753 443.628C739.591 443.94 738.509 444.495 737.579 445.256C736.649 446.018 735.891 446.969 735.356 448.046C734.822 449.123 734.522 450.302 734.478 451.503C734.434 452.705 734.646 453.902 735.1 455.016C735.554 456.129 736.24 457.133 737.112 457.961C737.984 458.789 739.022 459.422 740.158 459.818L739.857 460.118L734.58 465.395L733.5 466.475L734.58 467.542L736.015 468.977L737.082 470.057L738.162 468.977L738.681 468.471C738.681 468.581 738.681 468.704 738.681 468.813L739.05 470.289C739.05 470.412 739.05 470.522 739.146 470.631V470.781V470.918C739.171 471.038 739.203 471.157 739.242 471.274L739.447 471.902V472.012C739.447 472.094 739.447 472.176 739.447 472.258L739.952 473.693C740.048 473.926 740.144 474.158 740.253 474.377L740.513 474.978L740.718 475.347L740.896 475.73L741.21 476.318C741.93 477.586 742.753 478.793 743.671 479.927L744.095 480.433L744.395 480.747L744.655 481.075L745.12 481.554C746.135 482.604 747.242 483.56 748.428 484.411L748.961 484.807L749.33 485.04L749.672 485.286L750.246 485.628C751.5 486.38 752.818 487.02 754.184 487.542L754.799 487.774L755.195 487.883L755.605 488.034L756.248 488.211C756.931 488.403 757.615 488.581 758.353 488.717C759.091 488.854 759.802 488.963 760.527 489.032H761.183H761.607H762.044H763.138C764.451 489.035 765.763 488.934 767.061 488.731L767.717 488.622L768.127 488.512L768.551 488.444L769.194 488.293C770.598 487.959 771.971 487.502 773.295 486.926L773.896 486.653L774.266 486.448L774.662 486.27L775.25 485.956C776.414 485.307 777.525 484.567 778.572 483.741L778.941 483.44C780.192 484.147 781.605 484.519 783.042 484.52C785.02 484.504 786.93 483.797 788.441 482.521C789.953 481.245 790.97 479.48 791.317 477.533C791.665 475.586 791.32 473.578 790.343 471.858C789.366 470.139 787.818 468.815 785.968 468.116L786.774 467.323L792.42 462.142Z" fill="white"/>
<path id="Vector_73" d="M772.885 455.621C770.202 455.621 767.628 454.558 765.727 452.664C763.825 450.771 762.752 448.202 762.741 445.518V443.851H766.309V445.518C766.317 446.985 766.812 448.408 767.718 449.561C768.624 450.715 769.888 451.535 771.311 451.89C772.733 452.246 774.234 452.118 775.576 451.526C776.918 450.934 778.025 449.912 778.722 448.622L779.2 447.719L781.839 450.358L781.511 450.877C780.588 452.33 779.314 453.526 777.806 454.355C776.298 455.185 774.606 455.62 772.885 455.621Z" fill="#2C5967"/>
<path id="Vector_74" d="M768.756 451.575H765.749C766.436 452.386 767.26 453.07 768.182 453.598H769.331V454.172C769.988 454.434 770.67 454.626 771.367 454.747V452.682C770.435 452.482 769.549 452.106 768.756 451.575Z" fill="#2C5967"/>
<path id="Vector_75" d="M781.921 449.36L780.431 447.884L779.064 446.434L778.025 448.253C777.401 449.374 776.424 450.259 775.246 450.769C774.068 451.28 772.755 451.387 771.509 451.076C770.264 450.765 769.156 450.051 768.357 449.047C767.557 448.042 767.112 446.802 767.089 445.519V443.099H761.976V445.519C761.979 447.686 762.626 449.803 763.835 451.602C764.345 452.344 764.942 453.024 765.612 453.625C766.69 454.602 767.955 455.351 769.331 455.826C769.993 456.048 770.675 456.208 771.367 456.305C773.458 456.603 775.59 456.286 777.503 455.393C779.416 454.499 781.027 453.068 782.14 451.274L782.769 450.249L781.921 449.36ZM772.885 454.828C772.377 454.829 771.869 454.788 771.367 454.705C770.67 454.585 769.988 454.392 769.331 454.131C768.935 453.967 768.551 453.775 768.182 453.557C767.26 453.029 766.436 452.344 765.749 451.534C764.308 449.859 763.509 447.727 763.493 445.519V444.616H765.53V445.519C765.533 446.718 765.828 447.899 766.391 448.959C766.953 450.019 767.765 450.926 768.756 451.602C769.549 452.133 770.435 452.509 771.367 452.709C771.867 452.808 772.375 452.858 772.885 452.86C774.213 452.857 775.516 452.497 776.657 451.816C777.797 451.135 778.733 450.159 779.365 448.991L780.841 450.467C779.996 451.815 778.823 452.925 777.431 453.695C776.04 454.465 774.475 454.869 772.885 454.869V454.828Z" fill="white"/>
<path id="Vector_76" d="M779.365 448.964C778.591 450.405 777.359 451.547 775.864 452.209C774.368 452.872 772.695 453.017 771.108 452.622C769.52 452.226 768.11 451.313 767.1 450.027C766.09 448.741 765.538 447.154 765.53 445.519V444.152H763.493V445.519C763.498 447.556 764.166 449.536 765.396 451.16C766.626 452.784 768.352 453.964 770.312 454.52C772.272 455.076 774.359 454.978 776.259 454.242C778.159 453.506 779.767 452.172 780.841 450.44L779.365 448.964Z" fill="#2F2925"/>
<path id="Vector_77" d="M767.84 455.375H759.214V457.398H767.84V455.375Z" fill="#2C5967"/>
<path id="Vector_78" d="M767.84 459.176H759.214V461.199H767.84V459.176Z" fill="#2C5967"/>
<path id="Vector_79" d="M767.84 462.976H759.214V464.999H767.84V462.976Z" fill="#2C5967"/>
<path id="Vector_80" d="M767.581 467.378H765.434L763.616 470.509L761.743 467.378H759.501L762.167 471.753L759.365 476.455H761.511L763.466 473.024L765.489 476.455H767.717L764.915 471.78L767.581 467.378Z" fill="#2C5967"/>
<path id="Vector_81" d="M763.056 485.696V487.72H763.466C764.702 487.72 765.936 487.624 767.157 487.432L766.829 485.423C765.582 485.626 764.319 485.718 763.056 485.696Z" fill="#2C5967"/>
<path id="Vector_82" d="M751.272 484.384C752.451 485.082 753.685 485.681 754.963 486.175L755.687 484.275C754.519 483.827 753.389 483.283 752.311 482.648L751.272 484.384Z" fill="#2C5967"/>
<path id="Vector_83" d="M757.492 484.862L756.945 486.817C757.601 486.995 758.312 487.159 758.941 487.295C759.57 487.432 760.308 487.528 760.964 487.596L761.183 485.573C760.568 485.573 759.939 485.423 759.323 485.3C758.708 485.176 758.107 485.04 757.492 484.862Z" fill="#2C5967"/>
<path id="Vector_84" d="M746.487 480.57C747.438 481.572 748.476 482.487 749.59 483.304L750.78 481.664C749.76 480.93 748.809 480.106 747.936 479.203L746.487 480.57Z" fill="#2C5967"/>
<path id="Vector_85" d="M768.633 485.054L769.125 487.022C770.454 486.67 771.752 486.213 773.008 485.655L772.174 483.796C771.032 484.317 769.848 484.738 768.633 485.054Z" fill="#2C5967"/>
<path id="Vector_86" d="M744.587 474.651L742.823 475.594C743.483 476.809 744.252 477.962 745.12 479.039L746.692 477.754C745.907 476.779 745.203 475.741 744.587 474.651Z" fill="#2C5967"/>
<path id="Vector_87" d="M742.933 470.877C742.864 470.672 742.796 470.467 742.741 470.262L742.618 469.852C742.183 468.264 741.931 466.631 741.866 464.985L744.778 467.911L746.214 466.476L740.937 461.185L735.646 466.476L737.082 467.911L739.816 465.177C739.884 466.791 740.118 468.395 740.513 469.962L740.636 470.426C740.636 470.577 740.718 470.727 740.773 470.877C740.829 471.095 740.897 471.31 740.978 471.52C741.008 471.636 741.045 471.75 741.087 471.862C741.315 472.527 741.575 473.183 741.866 473.83L743.712 472.996C743.439 472.286 743.165 471.588 742.933 470.877Z" fill="#2C5967"/>
<path id="Vector_88" d="M743.069 458.82C744.445 458.82 745.791 458.412 746.935 457.647C748.079 456.882 748.971 455.796 749.498 454.524C750.025 453.253 750.162 451.854 749.894 450.504C749.625 449.154 748.963 447.914 747.99 446.941C747.016 445.968 745.777 445.305 744.427 445.037C743.077 444.768 741.678 444.906 740.406 445.433C739.135 445.959 738.048 446.851 737.284 447.996C736.519 449.14 736.111 450.485 736.111 451.861C736.111 453.707 736.844 455.477 738.149 456.782C739.454 458.087 741.224 458.82 743.069 458.82ZM743.069 446.885C744.045 446.885 744.999 447.175 745.811 447.717C746.623 448.259 747.255 449.03 747.629 449.932C748.002 450.834 748.1 451.826 747.91 452.783C747.719 453.74 747.249 454.62 746.559 455.31C745.869 456 744.989 456.47 744.032 456.661C743.075 456.851 742.082 456.753 741.181 456.38C740.279 456.006 739.508 455.374 738.966 454.562C738.424 453.751 738.134 452.796 738.134 451.82C738.134 450.512 738.654 449.256 739.58 448.331C740.505 447.405 741.76 446.885 743.069 446.885Z" fill="#2C5967"/>
<path id="Vector_89" d="M750.192 447.213C753.674 444.462 757.926 442.861 762.358 442.634C762.551 441.92 762.817 441.229 763.151 440.57C757.963 440.643 752.945 442.431 748.879 445.655C749.378 446.12 749.819 446.643 750.192 447.213Z" fill="#2C5967"/>
<path id="Vector_90" d="M782.618 450.371C782.29 451.029 781.896 451.652 781.442 452.231C783.462 455.262 784.681 458.757 784.983 462.388L782.249 459.654L780.882 461.089L786.159 466.366L791.436 461.089L790 459.654L787.116 462.552C786.789 458.15 785.231 453.929 782.618 450.371Z" fill="#2C5967"/>
<path id="Vector_91" d="M783.411 469.223C782.035 469.223 780.69 469.631 779.545 470.396C778.401 471.16 777.509 472.247 776.982 473.519C776.456 474.79 776.318 476.189 776.586 477.539C776.855 478.889 777.518 480.129 778.491 481.102C779.464 482.075 780.704 482.738 782.054 483.006C783.403 483.275 784.802 483.137 786.074 482.61C787.345 482.083 788.432 481.192 789.197 480.047C789.961 478.903 790.369 477.558 790.369 476.181C790.369 474.336 789.636 472.566 788.331 471.261C787.026 469.956 785.257 469.223 783.411 469.223ZM783.411 481.117C782.435 481.117 781.481 480.827 780.669 480.285C779.858 479.743 779.225 478.972 778.852 478.07C778.478 477.168 778.38 476.176 778.571 475.219C778.761 474.261 779.231 473.382 779.921 472.692C780.612 472.002 781.491 471.532 782.448 471.341C783.406 471.151 784.398 471.249 785.3 471.622C786.201 471.996 786.972 472.628 787.514 473.44C788.057 474.251 788.346 475.205 788.346 476.181C788.332 477.481 787.805 478.722 786.881 479.636C785.958 480.549 784.711 481.062 783.411 481.062V481.117Z" fill="#2C5967"/>
<path id="Vector_92" d="M746.268 451.109L744.833 449.66L742.482 451.998L741.361 450.891L739.939 452.326L742.482 454.855L746.268 451.109Z" fill="#2C5967"/>
<path id="Vector_93" d="M784.833 473.571L783.534 474.883L782.222 473.571L780.786 475.006L782.099 476.318L780.786 477.631L782.222 479.066L783.534 477.754L784.833 479.066L786.268 477.631L784.97 476.318L786.268 475.006L784.833 473.571Z" fill="#2C5967"/>
<path id="Vector_94" d="M776.576 481.185C775.71 481.852 774.796 482.456 773.842 482.989L774.826 484.753C775.925 484.148 776.973 483.453 777.957 482.675C777.435 482.239 776.971 481.738 776.576 481.185Z" fill="#2C5967"/>
<path id="Vector_95" d="M765.038 440.734L766.268 441.951L766.378 442.046C767.123 440.66 768.294 439.55 769.717 438.879C771.14 438.207 772.741 438.01 774.285 438.316C775.829 438.622 777.233 439.415 778.293 440.579C779.352 441.742 780.011 443.215 780.171 444.78L778.408 442.99L777.041 444.357L781.306 448.622L785.571 444.357L784.204 442.99L782.235 444.835C782.091 442.865 781.329 440.99 780.056 439.478C778.783 437.967 777.066 436.896 775.148 436.419C773.231 435.941 771.212 436.082 769.379 436.82C767.546 437.558 765.994 438.856 764.942 440.529L765.106 440.693L765.038 440.734Z" fill="#2C5967"/>
<path id="Vector_96" d="M773.896 440.05H771.901L769.043 449.866V449.948H771.149L771.613 447.897H774.047L774.525 449.948H776.685V449.866L773.896 440.05ZM772.871 442.511L773.678 446.093H772.037L772.871 442.511Z" fill="#2C5967"/>
<path id="Vector_97" d="M760.281 446.585L761.716 447.952L763.726 445.942C763.833 447.9 764.562 449.773 765.807 451.288C767.052 452.803 768.747 453.881 770.647 454.366C772.547 454.851 774.552 454.717 776.371 453.984C778.189 453.251 779.727 451.957 780.759 450.29L779.529 449.073C778.761 450.515 777.546 451.669 776.065 452.36C774.585 453.051 772.92 453.242 771.321 452.904C769.723 452.567 768.277 451.718 767.203 450.487C766.129 449.256 765.484 447.709 765.366 446.079L767.348 448.048L768.715 446.68L764.519 442.279L760.24 446.544L760.281 446.585Z" fill="#2C5967"/>
<path id="Vector_98" d="M769.33 478.697H757.71V453.598H765.612C764.941 452.997 764.345 452.317 763.835 451.575H755.633V480.734H771.367V456.278C770.675 456.181 769.993 456.021 769.33 455.799V478.697Z" fill="#2C5967"/>
</g>
</g>
<g id="Icon Text Label_10">
<text id="IconLabel_23" fill="black" xml:space="preserve" style="white-space: pre" font-family="Oracle Sans" font-size="16" letter-spacing="0em"><tspan x="716.453" y="509.617">Autonomous</tspan></text>
<text id="IconLabel_24" fill="black" xml:space="preserve" style="white-space: pre" font-family="Oracle Sans" font-size="16" letter-spacing="0em"><tspan x="721.109" y="525.617">Transaction</tspan></text>
<text id="IconLabel_25" fill="black" xml:space="preserve" style="white-space: pre" font-family="Oracle Sans" font-size="16" letter-spacing="0em"><tspan x="724.203" y="541.617">Processing</tspan></text>
<text id="IconLabel_26" fill="black" xml:space="preserve" style="white-space: pre" font-family="Oracle Sans" font-size="16" letter-spacing="0em"><tspan x="729.742" y="557.617">Database</tspan></text>
</g>
</g>
</g>
<g id="connectors">
<path id="Vector 86" d="M327.507 463.707C327.898 463.317 327.898 462.683 327.507 462.293L321.143 455.929C320.753 455.538 320.119 455.538 319.729 455.929C319.338 456.319 319.338 456.953 319.729 457.343L325.386 463L319.729 468.657C319.338 469.047 319.338 469.681 319.729 470.071C320.119 470.462 320.753 470.462 321.143 470.071L327.507 463.707ZM151 464H326.8V462H151V464Z" fill="#312D2A"/>
<path id="Vector 88" d="M687.907 463.707C688.298 463.317 688.298 462.683 687.907 462.293L681.543 455.929C681.153 455.538 680.519 455.538 680.129 455.929C679.738 456.319 679.738 456.953 680.129 457.343L685.786 463L680.129 468.657C679.738 469.047 679.738 469.681 680.129 470.071C680.519 470.462 681.153 470.462 681.543 470.071L687.907 463.707ZM479 464H687.2V462H479V464Z" fill="#312D2A"/>
<path id="Vector 89" d="M999.707 327.707C1000.1 327.317 1000.1 326.683 999.707 326.293L993.343 319.929C992.953 319.538 992.319 319.538 991.929 319.929C991.538 320.319 991.538 320.953 991.929 321.343L997.586 327L991.929 332.657C991.538 333.047 991.538 333.681 991.929 334.071C992.319 334.462 992.953 334.462 993.343 334.071L999.707 327.707ZM840 328L999 328L999 326L840 326L840 328Z" fill="#312D2A"/>
<path id="Vector 87" d="M327.507 175.707C327.898 175.317 327.898 174.683 327.507 174.293L321.143 167.929C320.753 167.538 320.119 167.538 319.729 167.929C319.338 168.319 319.338 168.953 319.729 169.343L325.386 175L319.729 180.657C319.338 181.047 319.338 181.681 319.729 182.071C320.119 182.462 320.753 182.462 321.143 182.071L327.507 175.707ZM151 176H326.8V174H151V176Z" fill="#312D2A"/>
<path id="Vector 90" d="M405 8V7H404V8H405ZM1076 8H1077V7H1076V8ZM1075.29 72.7071C1075.68 73.0976 1076.32 73.0976 1076.71 72.7071L1083.07 66.3431C1083.46 65.9526 1083.46 65.3195 1083.07 64.9289C1082.68 64.5384 1082.05 64.5384 1081.66 64.9289L1076 70.5858L1070.34 64.9289C1069.95 64.5384 1069.32 64.5384 1068.93 64.9289C1068.54 65.3195 1068.54 65.9526 1068.93 66.3431L1075.29 72.7071ZM406 72V8H404V72H406ZM405 9H1076V7H405V9ZM1075 8V72H1077V8H1075Z" fill="black"/>
</g>
<g id="Labels">
<g id="Group 753">
<g id="Connector Line Label">
<rect width="55" height="14" transform="translate(216 168)" fill="white"/>
<text id="Line Label" fill="#312D2A" xml:space="preserve" style="white-space: pre" font-family="Oracle Sans" font-size="14" letter-spacing="0em"><tspan x="220.101" y="180.089">Phase 1</tspan></text>
</g>
<g id="Connector Line Label_2">
<rect width="57" height="14" transform="translate(215 184)" fill="white"/>
<text id="Line Label_2" fill="#312D2A" xml:space="preserve" style="white-space: pre" font-family="Oracle Sans" font-size="14" letter-spacing="0em"><tspan x="219.232" y="196.089">Migrate</tspan></text>
</g>
<g id="Connector Line Label_3">
<rect width="96" height="14" transform="translate(195 199.8)" fill="white"/>
<text id="Line Label_3" fill="#312D2A" xml:space="preserve" style="white-space: pre" font-family="Oracle Sans" font-size="14" letter-spacing="0em"><tspan x="199.421" y="211.889">Web/App Tier</tspan></text>
</g>
</g>
<g id="Group 752">
<g id="Connector Line Label_4">
<rect width="55" height="14" transform="translate(215 456)" fill="white"/>
<text id="Line Label_4" fill="#312D2A" xml:space="preserve" style="white-space: pre" font-family="Oracle Sans" font-size="14" letter-spacing="0em"><tspan x="219.101" y="468.089">Phase 1</tspan></text>
</g>
<g id="Connector Line Label_5">
<rect width="95" height="14" transform="translate(195 472)" fill="white"/>
<text id="Line Label_5" fill="#312D2A" xml:space="preserve" style="white-space: pre" font-family="Oracle Sans" font-size="14" letter-spacing="0em"><tspan x="199.112" y="484.089">Migrate DB to</tspan></text>
</g>
<g id="Connector Line Label_6">
<rect width="149" height="14" transform="translate(168 487.8)" fill="white"/>
<text id="Line Label_6" fill="#312D2A" xml:space="preserve" style="white-space: pre" font-family="Oracle Sans" font-size="14" letter-spacing="0em"><tspan x="172.24" y="499.889">Exadata Cloud Service</tspan></text>
</g>
<g id="Connector Line Label_7">
<rect width="89" height="14" transform="translate(198 503.8)" fill="white"/>
<text id="Line Label_7" fill="#312D2A" xml:space="preserve" style="white-space: pre" font-family="Oracle Sans" font-size="14" letter-spacing="0em"><tspan x="202.195" y="515.889">(Data Guard)</tspan></text>
</g>
</g>
<g id="Group 754">
<g id="Connector Line Label_8">
<rect width="57" height="14" transform="translate(553 456)" fill="white"/>
<text id="Line Label_8" fill="#312D2A" xml:space="preserve" style="white-space: pre" font-family="Oracle Sans" font-size="14" letter-spacing="0em"><tspan x="557.055" y="468.089">Phase 2</tspan></text>
</g>
<g id="Connector Line Label_9">
<rect width="152" height="14" transform="translate(506 472)" fill="white"/>
<text id="Line Label_9" fill="#312D2A" xml:space="preserve" style="white-space: pre" font-family="Oracle Sans" font-size="14" letter-spacing="0em"><tspan x="510.407" y="484.089">Migrate Exadata Cloud</tspan></text>
</g>
<g id="Connector Line Label_10">
<rect width="162" height="14" transform="translate(501 487.8)" fill="white"/>
<text id="Line Label_10" fill="#312D2A" xml:space="preserve" style="white-space: pre" font-family="Oracle Sans" font-size="14" letter-spacing="0em"><tspan x="505.431" y="499.889">Service to ATP Database</tspan></text>
</g>
<g id="Connector Line Label_11">
<rect width="88" height="14" transform="translate(538 503.8)" fill="white"/>
<text id="Line Label_11" fill="#312D2A" xml:space="preserve" style="white-space: pre" font-family="Oracle Sans" font-size="14" letter-spacing="0em"><tspan x="542.393" y="515.889">(Data Pump)</tspan></text>
</g>
</g>
<g id="Group 755">
<g id="Connector Line Label_12">
<rect width="55" height="14" transform="translate(555 0.30127)" fill="white"/>
<text id="Line Label_12" fill="#312D2A" xml:space="preserve" style="white-space: pre" font-family="Oracle Sans" font-size="14" letter-spacing="0em"><tspan x="559.101" y="12.3903">Phase 1</tspan></text>
</g>
<g id="Connector Line Label_13">
<rect width="118" height="14" transform="translate(523 16.3013)" fill="white"/>
<text id="Line Label_13" fill="#312D2A" xml:space="preserve" style="white-space: pre" font-family="Oracle Sans" font-size="14" letter-spacing="0em"><tspan x="527.312" y="28.3903">Migrate 3rd Party</tspan></text>
</g>
<g id="Connector Line Label_14">
<rect width="84" height="14" transform="translate(540 32.3013)" fill="white"/>
<text id="Line Label_14" fill="#312D2A" xml:space="preserve" style="white-space: pre" font-family="Oracle Sans" font-size="14" letter-spacing="0em"><tspan x="544.088" y="44.3903">Integrations</tspan></text>
</g>
</g>
</g>
</g>
<defs>
<clipPath id="clip0_6913_243525">
<rect width="1170" height="592" fill="white"/>
</clipPath>
</defs>
</svg>

After

Width:  |  Height:  |  Size: 88 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 434 KiB

Some files were not shown because too many files have changed in this diff Show More