Add demo presentation + 14 deliverables for PharmaCorp Mexico scenario
- gen_demo_deck.py: Generates 11-slide demo presentation using Oracle FY26 template. LLM-agnostic messaging (works on Claude, Codex, GPT, Gemini). Before/After comparison, 14 live prompts in table format. - examples/output-demo-pharma-mx/: Complete deliverable set for a pharma migration scenario (ExaCS X6 → OCI ExaCS X11M, dual-region DR, SOX). One file per skill option (1-14): pptx, drawio, pdf, xlsx, json, yaml. - Improved prompts: richer discovery context (SOX compliance, dual FastConnect, Hub-Spoke, OCI Vault), intentionally flawed arch for WA review (1/23 passed), DEP field findings, ECAL gap analysis. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
71
examples/output-demo-pharma-mx/bom-spec.yaml
Normal file
71
examples/output-demo-pharma-mx/bom-spec.yaml
Normal file
@@ -0,0 +1,71 @@
|
||||
# Prompt 13: BOM generator
|
||||
# ExaCS X11M Half Rack + ADB-S + networking + security
|
||||
|
||||
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"
|
||||
|
||||
line_items:
|
||||
# ExaCS Production — Queretaro
|
||||
- category: "Exadata Cloud Service"
|
||||
product: "ExaCS X11M Half Rack — DB Server"
|
||||
sku: "B92459"
|
||||
qty: 4
|
||||
unit: "OCPU per hour"
|
||||
hours_units: 744
|
||||
months: 12
|
||||
notes: "4 DB servers, 128 ECPUs each, BYOL"
|
||||
|
||||
- category: "Exadata Cloud Service"
|
||||
product: "ExaCS X11M Half Rack — Storage Server"
|
||||
sku: "B92460"
|
||||
qty: 6
|
||||
unit: "per hour"
|
||||
hours_units: 744
|
||||
months: 12
|
||||
notes: "6 storage servers"
|
||||
|
||||
# ADB-S
|
||||
- category: "Autonomous Database"
|
||||
product: "ADB-S Serverless ECPU"
|
||||
sku: "B97472"
|
||||
qty: 32
|
||||
unit: "ECPU per hour"
|
||||
hours_units: 744
|
||||
months: 12
|
||||
notes: "32 ECPU for DW migration (Phase 2)"
|
||||
|
||||
# Storage
|
||||
- category: "Block Storage"
|
||||
product: "Block Volume Performance Units"
|
||||
sku: "B91628"
|
||||
qty: 50000
|
||||
unit: "GB per month"
|
||||
hours_units: 1
|
||||
months: 12
|
||||
notes: "50TB block storage"
|
||||
|
||||
# Networking
|
||||
- category: "Networking"
|
||||
product: "FastConnect 10Gbps"
|
||||
sku: "B91960"
|
||||
qty: 2
|
||||
unit: "port per hour"
|
||||
hours_units: 744
|
||||
months: 12
|
||||
notes: "Dual 10Gbps circuits"
|
||||
|
||||
# Security
|
||||
- category: "Security"
|
||||
product: "OCI Vault — Key Management"
|
||||
sku: "B92098"
|
||||
qty: 10
|
||||
unit: "key version per month"
|
||||
hours_units: 1
|
||||
months: 12
|
||||
notes: "TDE keys for 3 databases + DR + backups"
|
||||
BIN
examples/output-demo-pharma-mx/demo-presentation.pptx
Normal file
BIN
examples/output-demo-pharma-mx/demo-presentation.pptx
Normal file
Binary file not shown.
54
examples/output-demo-pharma-mx/diagram-spec.yaml
Normal file
54
examples/output-demo-pharma-mx/diagram-spec.yaml
Normal file
@@ -0,0 +1,54 @@
|
||||
# Prompt 2: Architecture diagram
|
||||
# ExaCS dual-region with Data Guard, Hub-Spoke, dual FastConnect
|
||||
|
||||
title: "PharmaCorp Mexico — ExaCS Migration Architecture"
|
||||
|
||||
regions:
|
||||
- name: "Queretaro (Primary)"
|
||||
availability_domains:
|
||||
- name: "AD-1"
|
||||
subnets:
|
||||
- name: "DB Subnet (Private)"
|
||||
services:
|
||||
- name: "ExaCS X11M"
|
||||
type: "database"
|
||||
notes: "3 DBs: EBS R12, SAP, DW"
|
||||
- name: "App Subnet (Private)"
|
||||
services:
|
||||
- name: "EBS App Tier"
|
||||
type: "compute"
|
||||
- name: "Bastion"
|
||||
type: "security"
|
||||
- name: "Public Subnet"
|
||||
services:
|
||||
- name: "WAF"
|
||||
type: "security"
|
||||
notes: "Protects EBS web tier"
|
||||
hub_services:
|
||||
- name: "DRG"
|
||||
type: "networking"
|
||||
- name: "OCI Vault"
|
||||
type: "security"
|
||||
- name: "OCI Audit + Logging"
|
||||
type: "observability"
|
||||
|
||||
- name: "Sao Paulo (DR)"
|
||||
availability_domains:
|
||||
- name: "AD-1"
|
||||
subnets:
|
||||
- name: "DB Subnet (Private)"
|
||||
services:
|
||||
- name: "ExaCS Standby"
|
||||
type: "database"
|
||||
notes: "Data Guard: EBS + SAP"
|
||||
|
||||
connections:
|
||||
- from: "Mexico City DC"
|
||||
to: "DRG (Queretaro)"
|
||||
type: "FastConnect 10Gbps Dual"
|
||||
- from: "ExaCS X11M"
|
||||
to: "ExaCS Standby"
|
||||
type: "Data Guard (async redo)"
|
||||
- from: "DRG"
|
||||
to: "Sao Paulo VCN"
|
||||
type: "Remote peering"
|
||||
BIN
examples/output-demo-pharma-mx/opt01-architecture-proposal.pptx
Normal file
BIN
examples/output-demo-pharma-mx/opt01-architecture-proposal.pptx
Normal file
Binary file not shown.
269
examples/output-demo-pharma-mx/opt01-customer-proposal.pdf
Normal file
269
examples/output-demo-pharma-mx/opt01-customer-proposal.pdf
Normal file
@@ -0,0 +1,269 @@
|
||||
%PDF-1.4
|
||||
%“Œ‹ž ReportLab Generated PDF document (opensource)
|
||||
1 0 obj
|
||||
<<
|
||||
/F1 2 0 R /F2 3 0 R /F3 4 0 R /F4 8 0 R /F5 10 0 R /F6 14 0 R
|
||||
>>
|
||||
endobj
|
||||
2 0 obj
|
||||
<<
|
||||
/BaseFont /Helvetica /Encoding /WinAnsiEncoding /Name /F1 /Subtype /Type1 /Type /Font
|
||||
>>
|
||||
endobj
|
||||
3 0 obj
|
||||
<<
|
||||
/BaseFont /Helvetica-Oblique /Encoding /WinAnsiEncoding /Name /F2 /Subtype /Type1 /Type /Font
|
||||
>>
|
||||
endobj
|
||||
4 0 obj
|
||||
<<
|
||||
/BaseFont /Helvetica-Bold /Encoding /WinAnsiEncoding /Name /F3 /Subtype /Type1 /Type /Font
|
||||
>>
|
||||
endobj
|
||||
5 0 obj
|
||||
<<
|
||||
/Contents 21 0 R /MediaBox [ 0 0 612 792 ] /Parent 20 0 R /Resources <<
|
||||
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
|
||||
>> /Rotate 0 /Trans <<
|
||||
|
||||
>>
|
||||
/Type /Page
|
||||
>>
|
||||
endobj
|
||||
6 0 obj
|
||||
<<
|
||||
/Contents 22 0 R /MediaBox [ 0 0 612 792 ] /Parent 20 0 R /Resources <<
|
||||
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
|
||||
>> /Rotate 0 /Trans <<
|
||||
|
||||
>>
|
||||
/Type /Page
|
||||
>>
|
||||
endobj
|
||||
7 0 obj
|
||||
<<
|
||||
/Contents 23 0 R /MediaBox [ 0 0 612 792 ] /Parent 20 0 R /Resources <<
|
||||
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
|
||||
>> /Rotate 0 /Trans <<
|
||||
|
||||
>>
|
||||
/Type /Page
|
||||
>>
|
||||
endobj
|
||||
8 0 obj
|
||||
<<
|
||||
/BaseFont /ZapfDingbats /Name /F4 /Subtype /Type1 /Type /Font
|
||||
>>
|
||||
endobj
|
||||
9 0 obj
|
||||
<<
|
||||
/Contents 24 0 R /MediaBox [ 0 0 612 792 ] /Parent 20 0 R /Resources <<
|
||||
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
|
||||
>> /Rotate 0 /Trans <<
|
||||
|
||||
>>
|
||||
/Type /Page
|
||||
>>
|
||||
endobj
|
||||
10 0 obj
|
||||
<<
|
||||
/BaseFont /Helvetica-BoldOblique /Encoding /WinAnsiEncoding /Name /F5 /Subtype /Type1 /Type /Font
|
||||
>>
|
||||
endobj
|
||||
11 0 obj
|
||||
<<
|
||||
/Contents 25 0 R /MediaBox [ 0 0 612 792 ] /Parent 20 0 R /Resources <<
|
||||
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
|
||||
>> /Rotate 0 /Trans <<
|
||||
|
||||
>>
|
||||
/Type /Page
|
||||
>>
|
||||
endobj
|
||||
12 0 obj
|
||||
<<
|
||||
/Contents 26 0 R /MediaBox [ 0 0 612 792 ] /Parent 20 0 R /Resources <<
|
||||
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
|
||||
>> /Rotate 0 /Trans <<
|
||||
|
||||
>>
|
||||
/Type /Page
|
||||
>>
|
||||
endobj
|
||||
13 0 obj
|
||||
<<
|
||||
/Contents 27 0 R /MediaBox [ 0 0 612 792 ] /Parent 20 0 R /Resources <<
|
||||
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
|
||||
>> /Rotate 0 /Trans <<
|
||||
|
||||
>>
|
||||
/Type /Page
|
||||
>>
|
||||
endobj
|
||||
14 0 obj
|
||||
<<
|
||||
/BaseFont /Symbol /Name /F6 /Subtype /Type1 /Type /Font
|
||||
>>
|
||||
endobj
|
||||
15 0 obj
|
||||
<<
|
||||
/Contents 28 0 R /MediaBox [ 0 0 612 792 ] /Parent 20 0 R /Resources <<
|
||||
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
|
||||
>> /Rotate 0 /Trans <<
|
||||
|
||||
>>
|
||||
/Type /Page
|
||||
>>
|
||||
endobj
|
||||
16 0 obj
|
||||
<<
|
||||
/Contents 29 0 R /MediaBox [ 0 0 612 792 ] /Parent 20 0 R /Resources <<
|
||||
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
|
||||
>> /Rotate 0 /Trans <<
|
||||
|
||||
>>
|
||||
/Type /Page
|
||||
>>
|
||||
endobj
|
||||
17 0 obj
|
||||
<<
|
||||
/Contents 30 0 R /MediaBox [ 0 0 612 792 ] /Parent 20 0 R /Resources <<
|
||||
/Font 1 0 R /ProcSet [ /PDF /Text /ImageB /ImageC /ImageI ]
|
||||
>> /Rotate 0 /Trans <<
|
||||
|
||||
>>
|
||||
/Type /Page
|
||||
>>
|
||||
endobj
|
||||
18 0 obj
|
||||
<<
|
||||
/PageMode /UseNone /Pages 20 0 R /Type /Catalog
|
||||
>>
|
||||
endobj
|
||||
19 0 obj
|
||||
<<
|
||||
/Author (Carlos Mendoza) /CreationDate (D:20260412231513-03'00') /Creator (\(unspecified\)) /Keywords () /ModDate (D:20260412231513-03'00') /Producer (ReportLab PDF Library - \(opensource\))
|
||||
/Subject (OCI Architecture Proposal) /Title (PharmaCorp Mexico \204 Oracle Database Migration to OCI) /Trapped /False
|
||||
>>
|
||||
endobj
|
||||
20 0 obj
|
||||
<<
|
||||
/Count 10 /Kids [ 5 0 R 6 0 R 7 0 R 9 0 R 11 0 R 12 0 R 13 0 R 15 0 R 16 0 R 17 0 R ] /Type /Pages
|
||||
>>
|
||||
endobj
|
||||
21 0 obj
|
||||
<<
|
||||
/Filter [ /ASCII85Decode /FlateDecode ] /Length 570
|
||||
>>
|
||||
stream
|
||||
Gatn!9lJN8&;KZL(%6/,_8K]#EeJ:l.T*U0*&qmlM74Fg`5,#;(\-N'-VMuB'qu>HjKV4HH(UKZ7nS[mHdr.89>#_o_$.t%\7,g,HX)fW[tO9<E,ED#actapaeTfkD:1)r)$QEp+?8`5&n^]6dZ"R.1qa[p-J$d@1'&Osb-&O&:3I(Me-5Ck?Eidpc'6_P:gf0E[K_pG$0@l]I]O[PPVg]1EJMe5E.\V&`qO*!j*H'/F(\^iW@HN2?md%&U&9f=/.*ATcD%D6/2*=>ku"nE2^<'Ec(4/Jd!5orY,R7fk6%0Ep<HEmmtkVC_r+$D_Y<GK&_](*2n3jFV\,I_i6I&ZHc5`2`pfXj6M&j)W]TmS>d+.jNU&$5)@Pr2@L9;]=tW2!h!?W/D1*7?jmJV\5>aVpd,qeAbBT/G3LD.'U,>9<iX]%sWY3[Q.[E8:Y(Ni[LN>Q106VHIC2Ur;+\Y)FmB7)D4Pp,f?OA/&i;!0?(V#BM]D_L1l*Cp*jK+1RT<`r3PX7Tm-oq;lLg(g%5LRLHgAeDPM.8o^Xe0B6p:F_Q.EqFpJia!%ndARjp0@~>endstream
|
||||
endobj
|
||||
22 0 obj
|
||||
<<
|
||||
/Filter [ /ASCII85Decode /FlateDecode ] /Length 2000
|
||||
>>
|
||||
stream
|
||||
Gau0D>Beg[%"?O+^r(JYe(L`lh08RUHe5ST(OJdsnj6!V_aY7R8kSAu5EN0]-]RL?dn\XgV$Pu]n.>Xf^rAUWr/<F^_[1]O,sWkPAjBVEKuos+1>.$,Z\$PI+po(p>`[f1s,Y%ifcGjF]c9-N!mcW14>/O0.?+"el9_U)ZM^OSbB5oc\R;t$"MP*VC*HsaC9@`]&s?+*KJFBLhD(;#,H2#0kMJ]ZpL3V%-6KY,FW'1AJ\NOU,kIEpG[:]BY)-8C*JHBqLhm_"kY5_sZo=<&]&RHMNBcRu^H+b-a)\*d1pk->.5p?S2g@ZG'npFm%gjU\TJlJp"KjF5Xb:U[?u&GUVUIsP#SmJ^"8%]5_tIG&ZGD4Ye#@tg[85;^1cY<Vj15ka*6*,e0su7<o7^1/lE"_M&GWPb/@gndOC8V_F\%#/k7Q/-HNobn2[#%b&>FnQHjprVUn/N6d+uc4PAXl'c!OlgaFYpCnIchO:b5@%,ckHR<oVQpi8ehcf7XW<D[5<Tb97k_h!Tg=naEDQ4;3&0a`jTciN!K&,C*aU""O^)=aVUfH)H2Ua[j]HWL.Z55.<TgT.++'5qL3ZKO9NMScd.L87d0UK#fGK*b81=:="MJ<J$aK+I8#nR?n\ZMg=n(.!Tb(LIQJE#"8'=gb1`8Nr@p<@hSkgFfZmD^f-APgr-#[7)P!#(nFDY@l]]0_h0cKO_N(Ms7dK>e5i?_mGRj3_X&?AhE6ULC56akH*Ma@]0FfjY(_[+;q*_>pkn"8+r)Yi0q,)/kLq%@M<\uHX\j^\,qSVT@V)C_)\&QMQ&38`NN[6,jO_RtT<(f6##7<oUtZq3igP02R_s2G/#@6H.u`ao+>.roECBt&PPB#S-/+a!,sec0o^Q@hq7=SnNnTp9aUf@sl]3ulmlO[=r-!Q?<9j/`Q.jl.A0*BKL#uAqKS$OW88<hbKUF5uQ9q+aEdJ5^TN>Nb6TdaO=uN'aZ'&[T>YJ4A@N-45ZMR&]Qdf[7QI5b*$jrl?'G\Xid?_*`;(W]^0uf?VXk3]Q:Mf2FY;&`<M1^SP.7B7M)SGo'ZT8[5Ahm0SL4YoX<f!@)-cF=i?):81'/o4?19^+fX`(6-6S5>Ze9@kK93IW92<R2$'ke/m[>@!;eKCqs_,itK[Js;c=1i!7@K:Kr^rBudX!n3bR)&pJ$B+LtTm)QcKM,@D&nY$m3=7"MkIT%\?Xl0uVk^PZpT#p/oBJoIH_'Oo_/RlV&0m5e3Q2nrUKGh%$6c!8MpeQRD(&2agb4D$F)YmFT(l9/dT".ZHQ/E6p(,$=bkK6L8S@L`04<=uXHtM,@pjF*1Q6Ra@]Jk'%5h'ETC;%\eG!>;(=]+_:+7Oc9`b_,lt/`?PXskhaKPp4r&97;Q,LLB?b^VN=0<G?0QB)G4E5gW@e.`?_a97+i&2!#m[Zt@7PfucilW"llCIlcZFrFVNk'HM)"WUBC<%bN;:t3I8:ieo-@8,-35OP_.WbY'-1l`Zq;;q;hb"XsR=ZELZM;-dn;-9G;D3i(VG2e#RIJ]72Ghsn+Vh;@5OrnP\+#+aL:\so%R>h;1#>r#(i^O9AfpRBinHbtmk:7Sq@5]KfQ+V$E]_[FEZ#"N\]?a)]=V>b9^pjBcaq%uSS;$;VI4@q-U*eHg#si(!t4k;6a\8i7^\IY.sRE7^P`HFgd]6mSdG-SHJ;Ts25Mp3c/&W4SZ>gaD'RD>PAJ@<lb9Wb[)ZVr5W^u4@_ZS/%D+COMqLaOYjsj0Q2b0Li=.]&53uZF09un%[(VmW%8H](KNC\Q@'si\"kn_X]M4b"6BB1!\C$5N1RW,52bRKL@S$+-gVo(W/@gKORo@iKUDHij.#;H0#:%PJQTH]e+"S,jj6h*<(FsYEM]V5<5K/KZQ[N61hm]6QIAn)^1,F--c(*?[DL1RCMS7`lI/H:UDqFp;RbP!UX#8V6d<:MZ6kd_%N6Q.9Q4dO\5^utOG+TbD=q-SUXo!WiR+7!LDrGF8IJLM,m[=-&rrU/\L?&~>endstream
|
||||
endobj
|
||||
23 0 obj
|
||||
<<
|
||||
/Filter [ /ASCII85Decode /FlateDecode ] /Length 2270
|
||||
>>
|
||||
stream
|
||||
Gau0D8U&oI&AJ$CbY`()QJa*iY8>/^dO)5/WD*o65U7VKi>)F#U]1,8J;YhrQK)"kGn+O"1RRuMqd9U\raY[%,R8S)J=eJ30FnpL@"B!,iXMD2:-P:0PM#Q+*]W"%#T5hi2\0dY:HZ-K.3K%,&k7sM(rl8$KDA*>/gbF6-Yeo,JKK3e!1\SE8JHc/RTMNM[3bq*RUd.:Tc?PR)m441>,hqdMD$_6?bkZ>=StGLL,(<%-IG*HZn,65'nqc4)i-IPG8e),_:3&F#ec)^$[LccSNB"aC&G6>s48E4l8u]rJ/::eitPi.n/q2=A'QnPCn=X!B&L4+1_=nmJa"F((FCcfPiNN2esPBg6,<[eAGC,=HR?:2@J]f:8'U+YB3cG#<3hWU,c4TDY*CON=_0qgSUBnmB\K(Q$,PQ/""@/N\K(4ba!Uob[D$>4bJXd@.Dcus>uVUsHLABXFKVj`AoDKk3>5T!Mh@<#rCI*>-uKbT>6;5]/4,C"$_rc!1')`d28ei(SW-nZ=-ZV;aKjafXN[_=-IQ_bXe"_hI.Y&Xi[n1t6-]k^Ntert[k\O6m\JM9Y>(F+KBj72(o1Vhco'_XcE;ljC'L_:_96$*6>-g1E^gi;U[Bu?Yqd_2WNn!RMi9)nfr79!G[_.DLW07@SVtkIPpj!>=l=(,2@mFl[a#9r#f\?n'm^?-h[630Jtb)P%^#7?Aq8*Z&aGHR@2p=;l`7,Bk1KG=Sec`U"Ks9G?Pb63[8D(q9K4=h.NZTLQ=YmEhYpKU0HX1"^d9Hg0l?K6/n*X"ILEg"V'6Ut#>\suW!s<urEN.X\8e?t[>Ei*XQJ2<M)?%dS:BLqF%!E/O'ggn/X.qoQ1/dH1FD:"qsajf#]j=h26Sf>5J$r5G`aWKP68#Rj]GUG-NSoTGGY.h$#[@R#7p7;UrpEjdAsN#eoVN/n^#[.g(qE\aTb9k.sVIk$KV7j#o=G)C`io@N]p]#/)7>N]H-if9"!1umS?b*Xc&D[#*MGThVp^(50PWm1BgXnq9(eRM.M%de`glE':gprS(4`&3sSV.C0OOkJkojV6%$Lh`Q".9ZJWX05;4PXW[uLEr<nQg8H3/c/Rlg:MSKZs5#KH4Z1T:%L+g(Q)Y"ic)?'i,.$.?aCQu1KP:4<*T@\dJI)*PAY,qa6"!QCB"[\`@PmFa3USGuc:h[l+N9r6JV^P"/O\Rt2"t:_3a-21fo6>d.D'AN_Z5-.A2juhCqTBdL>Mk\22;.OFbj&/2Tfk@kabrP,W\6U7*ouHW,Z8-f%rrUR3$PgtB#tm:]$$9Yc\ir7SiT=Gd+HkZaBTs6&ef<qUH%i7C$"(I/G,D061@VGUS-<.HgPuGrP-=6J=G7Niq9d2*Ye*_eTrn`fg5(Ncjqsl3j9^FR`-=S3W=s%S!I@9:Ee>IFUkYY%^@F2??WTXlaB/Jr]mp='XK?t&_Ps_(!Os0Np!iIYaOi+s/>Al:E[NkB4ekBIE8k"OHoTG98-+/C-Kq]XiS)Z-4;E/`,F:b+K76H:&0hR=$+oX?l-Q)Q/W**RpMYg0Yf3,5l4t93#.ji1l1%0RIMRU@sbV6@*eiQ92XW'2nNsFHW&H*91=%MUeWc@WC&Y2,l"&&67BWcOE9sI,#27s@h1YlkZ:Ys"(HuH8aQ%QkOF/EqE.A"b\.WG@AC<Gm=p5G[J54)5*ZF[D=!gSgkc<+f+GIU;gdupqT9j9qR(UQ0ZTU1#>tk=$jPrG^83--/ZT5j[kf-1rHM\-EijSoO\,##():bj4#Wj3WA,_Z(3Lf.Y%3BW1]Ttr'jUi^GIPEd=^e=paLV"I`PigB#V!Dhgp;HN.%6@X(r:T7g@!Ta4*@NO>3]UkGTsB<m647cmotVnG8J5aSaBR2ok*WF.$3cM8lZZ!5n>F#j#dg(B,&\Q5PA"/??D9K)-(8ea$%k)TA\Q'&nh4"7Uho]?"Vk#Y,J+Uo'&O3nt4V$*fek3Y3]99OSC)!-$V@cW)%?`!u0s]0HJ3DH#k8O)C@3=+YAnhjiZD]Z,@WW&OIdp/Zn-VSK#6ID3U^R_TC@U-oFQ\qY3(iSk'17`SaPuN`%Up/UP3-$u[HLZ,b^P_6e$V`s8-"ipln]'9Anj\lUbAk(U7>=NmMQ[-ZTY"s,c8\C4O(`TuhM?GtX(#B/t-p#4I!m<FIH"H5)bC8]iSnb<QCrr.Ye<]3W+[q(NULiml'Ph+X''mHm[q>.LpkP"c-h(%s<AsM6LeUB.jlpYgF/E0=3k',g6-]RY:)@N"CcA)(#ZgdAnN:0R#jBp)$k@4~>endstream
|
||||
endobj
|
||||
24 0 obj
|
||||
<<
|
||||
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1936
|
||||
>>
|
||||
stream
|
||||
Gau0D?!#c?&:N_CbgW/j?!L$g^Wu7?8q>@-7nU((+*^X&-#p2l<48Luq]/7J#`q"tlTI8H[URM:RCOPJ6,:GM1#GP4n6lao:C%L=iu&Ej0GpG"nbD%_JJ1MU(K59daF&RUrC#W@oROgW5lj0%cjq6(hiGue#,?g9\O]q_SR?$Q@@g8)"qDk'%"*$@'(J=cF$5)U+;ofD;@^D!JubC`8[X3ZnM<o#)]4'[nQTjJEt7`20\Db:,`>ed'h+DYCh&>9]5cmUK%MAhJC-dI7RuM69fS_&@cK2Ps"to;H]CT6d)_&[:jamGm>-E.-]U)kmOqS/!Hi+\1#Xo(VO8%+&@rcYP2kb\.2PZ1W'U=[`'Yaf^-aGB#9gDbF$T6S"pc,n+4L#eqKG'Hpa",4l2gm76!Eib&dkd1,4C22G_4rnOs"'UdI\RNWJ*TkR?o/a4M9r9^U+f=XcX3Z*5ZN*8DLnP%98j<o`/\,T51,g`Kc,R[).'O._QKLi"_$rR]@l:&k6-COOonBi++[S#-!c>-nE7e;8N_TUf.:MM.mi7R>ge;[MQ5gi:t1qGVO%jeJn1:0LbjP?K-&QQ<BZLV<M>@pkk,r3mB.A.@J),-b&bHUI;"k+ptJN#rfOpRV@OWMI/<,L(GrDBAc?*Q=r5k2fG5;b-4lW2TLsI^)o6N`jAU8`COJS]3$b!.tqfjQ,411fK+f/+sgXj(7Qal_al_M+%1[8=#4^d3cgq,N^^gGD%4b0fISn%^!Njc6Fan=3TIC:T!%uI"5*)<;ARpR4&\C8i'bt.Cl_#j-tF[f]:&,u&MBKTYhbCRRo+oG9j_IRptVf`-8`7\/\1W3L'tUsBe+]]-@<Xh=(tOpQDqG5XpNoc)9.-O1\%rb55rZb7dt:g;nk,J]P^;I=#*:5ah!u9<4A(8&6R#"[jPDNDER`V@h!Cfg:\s9rQUjNolM[iWNA!0F8MumM8u/UhG_9dS24*\h-%-Cm)7Eq[KOs2PL[rf$97gl[nAe6ht9G<ZJ"_dbIs?l(J+e*8h(NGHV2rpNp)fZq>YKt'E3F["^Pm:hqW%IGb_ZEURq+>qddWnI)Z*[@U@^>$6R;jo,`7c7[l-dN"P&a)Aq.>DqASaQTE]e]j(Me3WeoOJ$=-t+$RFR.6d?1MA/5ADO5ph/T=3(WKl#A=u'V;09Y-j6dI;1SI/O9"T.<3P8IH/`=l\tjkFJ%PNSNMJp@8u%n9XXChp6J4#)F8YED=Xbl>VdBj(NeS%3eq`KI"39k=?G#1FL0B$9=faF(G(>)]aga2e\aaFHK2#Ipf,^qne8?bb$_,\jtLVZqL*khV=SKWCk(39sr(K>C5TKeb)M=%K\0mpDReF^2Uh-$V&-q@2X!DVhb:oV/Q_Qm5fa!ITco4Q=HP\]PLp#tnOI7<+YD=laFO=JH5Z/l>oEoMOrSW)JC!dmkXSALiFS.4hf/$0CthQZt\B_/BkI))"Vo\PR?E,S0%UKEFjn'/?Uh42jAJF[G1_;;FlfgZlrK2#*.)jKMn3>6/)k/hN\#f;EdDcqlL>Ok6GR9Ng)"d4"2kf[p+Z+iikM!;Br3NjYu#K"+GZQ_RJUFXCq2fIWH/@%0A#C=Z/!$kNB?bsQp5-)NuQ1H=?)FX2l3lQ?;.OKbf6)4jaSU(XI;'o8JT=X%cgYu03]D2khB.TmpfI4TA"9uhKtN2p'T*gUD&iYAUIAS$.g([3Ta4LcB'S..tJd64:Em^977,kAQ8Gl3@-(V!*-U.dG=nMpYkkW=#""ZPV./&d]G^ni[?HI<k96.@?o*fn.I2TlOHXWY9T',Flp,"5@i)Pbh%kqlpFP.o=&btcb1Sj@reV;B1p^?mAbUZ1VIc+2A-##A\%".3Zj^3'O83gDXVec-anR5*Oi:Q`q#gp#&MSf.d'WYh:kj#\JhhSH%i&4^1uK#pmCBQ]mQ<B\Y@*;g1A-GD_~>endstream
|
||||
endobj
|
||||
25 0 obj
|
||||
<<
|
||||
/Filter [ /ASCII85Decode /FlateDecode ] /Length 2236
|
||||
>>
|
||||
stream
|
||||
Gau`U=``=W%"?O+^dC2I[Y[=KeDYgsS2Atqe"j7Xh9P)8O_I=f%Tc/`m]TuZP'k3VI"\gfRFX2CiqabtKIIK1U\b!5"umX=aa4AZ_-dD1>9!j>i-]M5lbN(=@WrYkbi92P&+tpuc,B^9a+FL7%\D]I%$'B6<<W8QR[pXlFY("6AoZR6*=`j_e8lY7O:ub!aN!KFX]<dXoq<34YO=mqMdDiHi)2am62Cci5@Et]Z(!sF*QrNecLoUr'Fn\PKHcjH@Wb5^-`B=dd#O%8pj/X8Z(/fR>;<,DdE@jp`&b><1ChX<r5pEBQJejLKMef1cTU'SA75V"0R)s#(BgTqi=bX9dOBte>dRDF6A;q)(/k&QmPC+6BK)Kp[un#&M.r.`c]a,<99U25#<bq?-lnXp61-PNDJ(G%K`d$i/HM(!F"p.PNM"@qMu:rrm^sheF*Iq\au]aZnVRhqUA4Kd*!GgLe^#M"hBK<ZnU(MBj8,p<TDD[g3.Loe`]F*!?;YV(keLi[Yb0VT0!Fo85;Dc)h=tuM_7U`=3mW"%jLb`h5q'(I>cI*nA1tB(#ksn2A\OHh6f.fK]WZY5J$ne=I>dL3pHtNAU'T6/)/l712;lmuE#k5C<oC8WY<BM1;7gDY7V*D!]=jW?V0!:i3=H!ea<@'<M'51h@5>tn?=[VDPZc0k$MGAOQg(o7b8[jG.lJjjg&Gk4?";kL]f'kUUGd,27ZF,C$i=&Md(DfRNZaZ%OeL_FUbT$02/2(qrqirh"k1":f'1J`Z>>_K'krdsArfo\9BY)bk0@YQU%'"[2)Nn2I%h`[jD$P`8o8=n_Wp6)MrAlpg8^LG/Y=I3oN&BlB/Saq<?efM,1#J57lOM9"WVfOFsts-qARF]RMTp#.De(BB3"q6'^F'$MDGUu:&%O_2.TnW/bM4c]7IU+ame^WA7^pV.'WWaL0MY[kQXKN+@2iE\0sd(`+&JA$o=;=/;i@L9ZE1OMb.\UGAM.phs3rW:U5'J-.Whk472_"lXbMJ8Qr&/*PZ@>o5ZYpK2=EHUGRU#R0:[;,(`/D"Y/B/1A-U;=?`5`:b'PsG"=e#;)uSH=0!:)H'-*%X/no,1f;7ro:^PF<L'eRTue>49FIb.o,M%jLpuBf\Snit@uP9V\hWL<e@SR`O7@LbD>-0GXZ(?GH^lZNhJV`[SL5XmkE`'%2'boM)G^bnMs\L\1/3Z'kVq9<??a.kgqHqKd;dLt]Muo8pT%(A12P]H<Fm6iT@78Kc/$*FUoqJeHV0i/bs7Qkrhf<#^0mrn0ULRNi29='NGaMY8t!dfA?#,[-IETY<3T9H7&0=1qF;#=S+&9\bWfPgZ>,oSaC88%Yi!SEA;2DO`_)\3l7tOLWM"$B2!l<)oF%nlM\N<_)(FpuDDi`cfmegj).D8CDa[Y#m%Wa62PWrhN4%1aGL'$Fqj9"o*3[*a`,?bB`&\L19:OqBqh\1LmK/kDVSn/Ffb**C@l(FS<Z%=r\8'-.c_u71LLYb76GF<c<+ps6<aC\#Es\oo%X\p=k<3/EH>/P`TKk:dmO$QhQO?1&<BqK8rQ7;JmRE^.939sg'I,XmGQNg)a!N1=.d\hUG"p&il@"2dQo-hq5=U=>g*0OCleH8DK0T7"a*1WHn6YZarl//KK&s(Vmc^)W86t'M:_DNe$g?uO6O'H]<%016e!L^V2Ir--rQA]]gAOK_\@LsTY)U`cS]We>QPT$/R?`3d^.318dd^FFl/)Mbbon:YG"o-oIPW#!B"p"F$Cce+Pl9mQI=Bn*7sP>.Lb7+<&EPSs+KF5f9Z-8$>p^7*>Re:1>E&D10ED?$NlYfhN/1s:2Po2^.+OqU/fnO5gjf9s=f<5se:U?XDOcI,Ss^[UcC\)6/#lcIWG$NN`RU2fZ\F@<.?u`;eZ,=GRb@*nH_h4k!7M#h]p`*>3)p!Qa/IO/[V+?r);3TaAoGYIQ-n-7/4O5]TWNYa`?S@k37Z?UC*':ak<(D-h9Y24[#M>hn*_]d/]cD)594u88]K,@:SF@B_Gqq7W#D_:?c_1'*25-KM&Q=UL;c<3C@7OWP=_4NP[:)eZ0&EqY*"o!%$[&M[3;=P"D*muM5=s@+uDSMdIOo@;TgBKe=)k'MZRfT;$=H@^X\[TksW++RekF,/D@6j8jDa4e*h@8=+fHcP)gfN23Q+5@F@ho%olmIP=\bUPY3MQe`;%/U@u=K^I$?DX+U7W-p_ErH]a<8HYRrb.,:g6Fdpts%fQWdQ&``~>endstream
|
||||
endobj
|
||||
26 0 obj
|
||||
<<
|
||||
/Filter [ /ASCII85Decode /FlateDecode ] /Length 2147
|
||||
>>
|
||||
stream
|
||||
Gau0E>BA7Q'RoMS3"KRJ5iPDAI-Y"*QJJj2Q8Uf59OEIJ[YD^1ZI@6O^IQ#W\N*4n_gp!gFDfuucG^J'rh9/&i<8(L#Y4>3:^4g!T\SN\quCBIK:`C7k7]pb?nm^('Hd1$%'KUo@.87LK>YNH>aU'%q"`Y]D@T9^^?-25DTU,^[_i.V(8oZ'*O(V=FZ`LpH35a!ar0?2-IB;L&8EBnM42;8r"Xq-CD_MUi>^%E\VE53k;N#CP5$XJaZ,3s\?X![8Dk02+<WL[d2G6!dFMDpAWEm\'_^Uk^M=AgCs-E1QuDeS;;to6]>5+LXh\j+mS?h>#"D^9_^>Sag>NZ`I2d;9-Q4U@W*l;cgd;Gu5)?hH&cnJ9mRQ_^A?Ci#\P;:s1kS(LR0j\*8ULr5EUQNA$2jB4Y2u4;klX&FE&fn][-:g`pI\sn&hiIXXJ&^2W5FA,qj,$To6h:27N7uRrJURb,OTl!M`p4l!1hF<K'[`u#7]731qF/@hEup\KY'/[""s+k*<V>f]/DkEIFWYhMtQ;"?.PbOq^go@H$QIaHS/sSbOJ!\T)sA!Fc[\`<Zg`J+eTl0gtCK2#a[#E)B:e!:6HG)fgb&%cgWEXY2@6g3pW/7JQG<H*H&>,k?6WThC+QG=^Wm<#D3r?IYklMS:%mFYYfq1i4amCW>oP[M(?]W<;=fuI(6rS!AAOsi7U,On!$@!2%-`.7`]EOYLh0c;"?"S-aQ[.>>$6$BQ6ST4s=2u#gB/i.VT3^&kt/kRHJcS+\0kY*F'i;:6ZGWHLaqQ+>V;E4A2Brc'K\n/EO#i06l%l2CjOX,*$:;n''I,R]$YoJdW10R>aQSb&->t1N$eb[V]n7@5T7t4:]E<OW6Y$2tPIDBT5RL;*nTs!Jrc,mn5[SL;i2a%6Yq6%gh)"E<7OO91Iodqb:iqCp;C9%/-cCWmn=&m%\r[:e\j;BH1U0E6FUR\]JuWa\?\>f\<mh=pqRU":Qu48qfI$-;RM[Kh4%[iqoKm.RL]=3]<_PTtfW-2'\*f!c19E[e&_p'Bl"ZiGpE+dPo\VMCa-?m'`Y.\VVFmF=Z!afdc<!dA4K$[!Gr;Xq<nZ(P\;ga[B[FXb+ph)NhN>hVAQF[\rlOW\D(*p-1hBj2_2hESJm/*U$P^NJKc/?!9M."^Nq4CsUYN=t?UB,kZPsmED"dc0g!?lX.PKE4PA+RR,-kG<sE.0\W?]d<W)6/gG$M;Tj,60_SfKC2MnDa1pMU(q:83qBTuaop]jnWr[aJOTc)+X=8U(h2-;S<.(aG]Vb6(Q.8hlVd`S3&FlTkGnnSnds*11ca@9uNE%h-Y>o7>]ZkS1Sqk\Y?])>g0=L',FT&;>T2ru^gi83+a>0=7I0W+,g3HLXgk#HHWY,n-Cd+WJ+4TM=L[@4c@J`c9r;Dr9Ch\X2a'=>*c9BfS$EbF<g/@=mlpY07=<:je\X>/sg=n8hrNCU'I[EQb;&7:8(3fKjLMrnIbFJn1(u?RFGgnpEe?05To(aa4YY',U25_QYL9m'_fKMFJ3dM`e>c#&?)ekEA-1,3Pl!M823;pM1\6!HNN)3P4?D[+]g=m>(a"Y;,oFX0b\+<L"L<3s=V<Kn7l,m"0*f1)LO0l>R[;8NPopUTAf%<Pcc&^)JIRWnlZo\4Ed[sgA0=sh`'X.;krcK0#=FPte.4KbIIT_k^=T5^>2>Jr<c2rp>jW?<-01K)&R^$^q2:"HRm#0?Q*5283<PGjCQV)p@$"'OGp-!\YFUL#j;coT<4h\@Rh1`Mlrd-!A#Yn@i"2j.O;0p6Eb%s!'_Rgb7f;(J?NHP$G_3:he6)If$YR<gtPe_td4_b&BLl]r^jE<-[D7PeVoj6VS3i09kb/gW$\JgAcQ6Y>$LLd8i17nQ`;\Y:UVo%"5(1RWno7F(qi,pK_[H/H2f3e5Te0tpPPT4gENQPPMFGemsPYZ$J[322rUj!tkESoJcC45HaBJ&3J]9OT.asW\0dc*2Lg$nsT6'Oreo4X%Br_*"rAndQ)AGbla"anMbI0<V<Aap--h+J,#/SafqB^$JY<B9beFf>uCmA"MC,-Lrb#C]i_0X]O%5l\c<3Kn453bm5Sq+'g.eJPL5!P?qlDO("QjnbVs1s:NJ<Ju"=DTsVOap&QP27mJpl&nO8LP,U-\/'R>~>endstream
|
||||
endobj
|
||||
27 0 obj
|
||||
<<
|
||||
/Filter [ /ASCII85Decode /FlateDecode ] /Length 2272
|
||||
>>
|
||||
stream
|
||||
Gb!#^h,E&f&:`lHfV_Ku.?5^(:ZieI'PM@kUkEO\^l*/";"7V(#Kk<in[Gf6`sK"BK%dhf&7m)g<r:X:p1HZV`ue4Wog=9(Qd@rD5U]mo!&6>E/jI2"jhZu[c#ImDUS(K)Zj=Cf:D>EV%OaFZ6suG@=>kh?=`2Uo?uiJJk=TT_AhTB_VI<?J"O/41Yq==!'<rNJB6!uTQrGIb#)1DChm,(L_`1BKPlDGHr#.3&_rVi:XuV5=RU\:r%HHYA9R2j1(,UbZT'j-M>2\Y`ZZ.j?d?(EVXD0bM<)TlsBYJRSe2&q6RQt0'/JlB<*1W=[:ni5QU[oU"70$;bG%8=#"K(-2bHoPB5Ep+!LK^R1VO3s8W0nr:BMg%%RlXZ]r^3\Qb2MIlHGnAT=*hfj?/*0h@U.GjhlXZ,>Bd[8*?u,F9)&">%If6oUie@lCUR)RQ4%R?+a$a'dW]IFH36AJpEG)lEFdO`'Hu@(nSk)]EQHU0`<Nn]+3!Clo)fJN(pc&[SkPdnUFUPN/pHPl'd%"C@[u)JK,HrD9t/m$=jbq"^iBW,F-]S[1lasFV]qRPHW/&!(Yt*O1<6VA%NF3B"AcFiK54c[(-q=OoC(fJ]RgOZa7h^`%R^!BY"AIaaV=-hfO1bI@)DkfMFe1W^!Yd1/Y#O1hSL'e&+ZdQSK:`cH["O"RA)5$9I1`Brs",O<9/"?0@*%YGPY%USDAWm1.@PeW0.Hh_L*5Hj+'SGF$#qU.D+E5AlW-qVEk/0nr(?m\%+&HUPr^B:A?tt-<ksed/>0OrJ@`H>?$o"obA5WO)2qDZB.s5eQ68h$*>Jl)#A?]r)?>RlM0q^eQGrM;2['f7B>!S3:9+>[$nGg[2+0>FXs/tPhD>G?HVQp2`0)tX]STX7%6*b(+l>Sf)ll58_5ICiH;]keJ7XU76=[R"op65I\N/P#(KU'/Zu?6qZd<R)>JYCO)e8nL+#@eOl6nkVtbOjT1@:'S;)FFSpY4HD/?YO/8a9"GjVMu6r0NHe1Q^sfc=6\'3X0hWtmR?4ej9J1</'_?kmU5)R..kKqB3nZR%iP)0Y!ee1LP:F?=q\Y'&WQE&dR:jh#VZX.KtoNUEVY[o8lAnecuXG5'F5.WR7R\VR$Z\H[A(VeDpPVS2]er<+aWm2+hUr*:/)6-/>6pJV!#/eH+qa^K]`$,F;ed>V^\LEt19_beS*9e0rbl0!\-JXhlQk2Y[dj.;jF:f_&G.([Gd4&-lK"i7drPE[`6p^V>9jWG`aUNi<K*Lg5P9^H:0Yr5a/bd&4te;3u^)AD"d$k:%1%&Q.#`5>S..=(LCPUASVA]U(@"'nA*$TA:-^n&PuC.$\nG(%EEGb_lHO$8O%3di1@C4&+bd:^hk@>XS-__R7f"6XknhSElaU^Xtrc[[TG9gj6)Lp2dI\k:0eN5=[k/oH>L`$=4/d8)Zje>D0lQu,Cg(BX'(82D!j.l$)mJp$Yjd[OlhNb;djQ<o5_KUb@e:QcR4igSmD*87jJ-G7?YH*J7D`Zq@:k7;QY#6E#1ZnA]_o:2]uK/Po`YSbAr*lRA@'0Q0^<7.r<2[C0$a=pk0:YS3QmWa8!o^JdMY:mdrM%u@tY>4mM#*pON,<Bo>%b(,+nf`si*163dUo[g4#fq8#lCGl0'QV%=%aqdA>AQmoo5DF%LD/.II%'gee9VWLR`5l\\+0Ji2QJQciV&0_F<V)&+0[`cPs=l)+]g*'mcujIL$TDps"Gt:/qJKiVo8^P_$I<rc9E,([dLK=>T4n"`_,MQUfce]m+&57T"P\]p6'Wg(%3tpR8Kq?.ZM@j>0/PCf$XUlLd\'^TOkJ+D?JXhe\0/;*0i!^CgVH!*"GmH('4(SS"08`*W*?.G0r6`&uG5[&@*U1HZGh/9ul&F\j*a<g4?s%]3i:271c\HSkKMi]8tqQ`-/hs;=%)*kfm6och?L<8o?ZSa7ZWD(l([*=Qf;<_M:`9,,j1%]-;Yp*Dh?\_Qa$E\RMI6fXPf^Q8.(laOr&)]ANtG[0TCo/pN,qm`U1`4=,1o:>]&p^6d3G0P_]?W#[pD&9tS)S%ULDi`Yj7^%!pZi&Tr!I-)jKY=QYaIg/IjcOm7mV)Sc]R.WP(:s&+KH,@biQN_>MK+qBDWD<n@8nRen6s#n2.d[$#E_saT98G,p`V!J:DSmTg[o[F)$reqD'rB2:Nh&*M>@aBNZf%oLGT#2eE/E+22X#56AA@4e9:*V=_'b+@j8.#?(*o\lF^/\oSSTPic5)-0$8uKr2r[:X_/[YR"EF!+hS?tB)HGZl~>endstream
|
||||
endobj
|
||||
28 0 obj
|
||||
<<
|
||||
/Filter [ /ASCII85Decode /FlateDecode ] /Length 1224
|
||||
>>
|
||||
stream
|
||||
GauI59lo&I&;KZM'mip6MBY<9+%KPD1[-`9&o$&@I"=j[7SNpm#hkSoI2AR;%p@<0;iaEe&JVLnICQoXP!FsJ&q8".i-5:O1BN6H@L7]V$l4?.l!j9p'P2Q['GMa[0i%5rcR=2@321@Rd_H`24G<u!cblc;q.Se@pYLcUh)L<p_J-h/@YA8@LBp$TSq10m"0r4^3"/7cN5&[*gPD9&/UWk.W\bf*nII1"na<"&&0>EI'>'[[93"RNPc14A6q(AA0h,!XUe$Up%gu/HnL[MqSI@Vhq1!s/O[KLe5k?BGTYsGhrY#o:U*>)mq5C^$"rbt_M8;,Ebgmtt+[`"=oB=XlL(GO;Lh0+Jn.;KZ+d!b3pE">r%lsAXe$J]"q=oR4iP)oca2%J7'i85Yo"'HSFIfMkK$k&gB8p5KYiV-jZ?3dFYV[,s>kPLD\F%l"le70[)::'8bheuVW2dZ,qU1bs&FtZs!^?=p<j3:<2E0'9PFYXnG;9)J(S%l*)G\"6Kk[P?4rcm]oBcF<YS0(a":OD!:P%\,F:pbFNCDK-K*9I4(KT&N*g<q3V0('$XdlX%HB9P5hk0+#/sV`!MH5taX^PecXh01n(-95^<EG%rb1[tO/&aCF=CnN#+A'.YU##bE@r)%@DNB>YJ94Tq+$2sj-U-?9'Yd`VV)nqF<g:"F^LUVGNjcWQf?^O3V!jD=Rjq?[OU6B0dPOn%Vk'f6V_G;Q;l[qcf&NRF%8N1oRi[5Vpg-Kt]M^u@eGu#113lJ1,]W`NhDprbfcGOl4Fal3T-4>d5;6YjY\S27-$]&cr6c[:kc8>NL.^4O=0eg"T*)rt6ou\RL1B85?aQpm2cs%n^3h._C1W+F!F5?K$Mu.1C3Fba/2#O?YpV8u&:X+GY\\eYP2pJAkY%_TLnZpP]-hSr$XKpo=#dl,ZT0EChg0"5'@puuKZ.!/q5Z#e06R?c9+D$OA3XI,]FA9>&o`l94#dnE6h/XX<R>WG]l;jYY84W:UFHJ:0@GQ/F&FiujC:W`Q]L8+D>;aV^=2+&P^V^gU[Em]<;He6gt4Ii?"&?H"I!(RN[g*3EdY59n8O)eCqjSdPe7GJhig<QX/L=Ya8,Pg+Sn\j.#kKsdK=B>'C(-aAt$//=Ms^;WT3k%T-aA-QBD)B,r<^6m3bM.&Yj*G6*>B"P&3XNO>%#d&BTA!1uCnd4H+mL[M*+NS%aJMH>0XYD'*)_G.:rP0:F0Dr;~>endstream
|
||||
endobj
|
||||
29 0 obj
|
||||
<<
|
||||
/Filter [ /ASCII85Decode /FlateDecode ] /Length 446
|
||||
>>
|
||||
stream
|
||||
GatU.b>,r/&A70Vjp2r3gTb8c#SBKr+C=jE.o"b`*lW!76[V">P"KF=:<8<:]unREGg/MP@f;nM^f?-BS:PZj9/&X7Z9)<(d<e9GVQo)&>RAN"#UbYqRu$)LC*3\E9Me)Kh.II/U6/1U2FEXiN/1SV,<uBA.ZkjFM+Il[$32tVl3Vf6NO-[5FgXqJ\&!L_=m#*3Z<(QQJSp?RP,MoC9A=&]/rF7Bg1g[4L)Ne"!^iAI]GoZS_$uNR4)lA\r:K6'%<3&FQj[k-oO,hE$CF&JE(5eXr-Z%pAHbhS1''N5_<_a?KiEqK5KAsK+7#U=etFetdElA]O!/2@->@FBQE>#qL9J$IBR*9HV8%i8VF%>Wmb^e!0:-Dbl%9=?E@K+g$ot9U$KM-al!?en?.Eikgm^b0D=N5`BCi,g>.*/f\'<@SmETkMY&hRE:di&>=/?6~>endstream
|
||||
endobj
|
||||
30 0 obj
|
||||
<<
|
||||
/Filter [ /ASCII85Decode /FlateDecode ] /Length 765
|
||||
>>
|
||||
stream
|
||||
GatU/gQ'`:&:O"KbSp^chDk6l_M[G!&.=sLE8sN*8F0_G$iPFl::mmF!XYPm[d24!F3a<?6UDk9f5:_9e\]iG#G+9:"4(*[m0@mlY.h)A<@:q5!_]T,i3\2V.=?EI9&[f_6]j`9PV>F$eF>B2h<IO4#I]AP7l$BC7G?h<EmC_k!(KYpW5.g&J0-(+_?_&gICg;='\C?"n.C/Mc9-mU/$pr2h)U3+X=DP8f1,L,U@q1fB+WW>9q@At-K.ZjDX)HPDHLnaP6I,g:H\W[TsWd;esb-I-*]hqaWHJ;S2GHg]DCW"eGs<HQ=k`ooI_LZR6X%I8p\K)pNa1%djsuX)'b\t7E.?)8bknk!\qBhRuBB4X(c[e^(WZH>@G"\_OVJa7nWJAcf<=(6g$-L*8^^,Nc`4!1jg2.+mgY)H'/'3P@Upb6_,bq*Nc\qKZR\Y;X#2M#>0?m&g_c)B(gl*8@sQrC:%HC@O(']K2dNpb%M"Jqus=&<0X8&']F8'Aiglc%ZDG=Ro<!rTd>ZW!8;\M+sB"9C1A\e)7U(\I=TUVDaihb9gZ+XgMp1VKH=)b*7R.*=ALNrdYr+C7cFW2IH];/3pIH4nqR[-p24g26(Scmih>6#7%0AfWc'$n;W$kq$V-&EEl?lQK\.R,j'\`,@hZX+*-LmgUtSJ21p^I10RXYgU[YT!JQTEY7?js]C3pBZ'0.0(R6,!J@U>j"dm#2K=r`7E%KtlYJt*_JTs%E`L%,2Bm6V!.a,%X>4doGSr;r[E>`o~>endstream
|
||||
endobj
|
||||
xref
|
||||
0 31
|
||||
0000000000 65535 f
|
||||
0000000061 00000 n
|
||||
0000000144 00000 n
|
||||
0000000251 00000 n
|
||||
0000000366 00000 n
|
||||
0000000478 00000 n
|
||||
0000000673 00000 n
|
||||
0000000868 00000 n
|
||||
0000001063 00000 n
|
||||
0000001146 00000 n
|
||||
0000001341 00000 n
|
||||
0000001461 00000 n
|
||||
0000001657 00000 n
|
||||
0000001853 00000 n
|
||||
0000002049 00000 n
|
||||
0000002127 00000 n
|
||||
0000002323 00000 n
|
||||
0000002519 00000 n
|
||||
0000002715 00000 n
|
||||
0000002785 00000 n
|
||||
0000003119 00000 n
|
||||
0000003240 00000 n
|
||||
0000003901 00000 n
|
||||
0000005993 00000 n
|
||||
0000008355 00000 n
|
||||
0000010383 00000 n
|
||||
0000012711 00000 n
|
||||
0000014950 00000 n
|
||||
0000017314 00000 n
|
||||
0000018630 00000 n
|
||||
0000019167 00000 n
|
||||
trailer
|
||||
<<
|
||||
/ID
|
||||
[<058687b5e54d5950ae70b0c7d0f56515><058687b5e54d5950ae70b0c7d0f56515>]
|
||||
% ReportLab generated PDF document -- digest (opensource)
|
||||
|
||||
/Info 19 0 R
|
||||
/Root 18 0 R
|
||||
/Size 31
|
||||
>>
|
||||
startxref
|
||||
20023
|
||||
%%EOF
|
||||
16
examples/output-demo-pharma-mx/opt02-architecture.drawio
Normal file
16
examples/output-demo-pharma-mx/opt02-architecture.drawio
Normal file
@@ -0,0 +1,16 @@
|
||||
<mxfile host="app.diagrams.net" agent="OCI Deal Accelerator" version="24.0.0" type="device">
|
||||
<diagram name="OCI Architecture" id="oci-arch">
|
||||
<mxGraphModel dx="1900" dy="1200" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="1900" pageHeight="1200" background="#FFFFFF" math="0" shadow="0">
|
||||
<root>
|
||||
<mxCell id="0" />
|
||||
<mxCell id="1" parent="0" />
|
||||
<mxCell id="140627827274480" value="Oracle Cloud Infrastructure" style="whiteSpace=wrap;rounded=1;fillColor=none;strokeColor=#9E9892;dashed=1;html=1;strokeWidth=1;dashPattern=6 4;align=left;fontFamily=Oracle Sans;verticalAlign=top;fontColor=#312D2A;fontSize=13;fontStyle=1;spacingLeft=10;spacingTop=8;arcSize=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="30" y="80" width="1850" height="720" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="140627865277680" value="PharmaCorp Mexico — ExaCS Migration Architecture" style="text;whiteSpace=wrap;rounded=0;dashed=0;html=1;fontSize=18;fontColor=#312D2A;fontFamily=Oracle Sans;align=center;verticalAlign=middle;fontStyle=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="0" y="8" width="1880" height="35" as="geometry" />
|
||||
</mxCell>
|
||||
</root>
|
||||
</mxGraphModel>
|
||||
</diagram>
|
||||
</mxfile>
|
||||
111
examples/output-demo-pharma-mx/opt04-cost-estimate.json
Normal file
111
examples/output-demo-pharma-mx/opt04-cost-estimate.json
Normal file
@@ -0,0 +1,111 @@
|
||||
{
|
||||
"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%)"
|
||||
}
|
||||
]
|
||||
}
|
||||
}
|
||||
348
examples/output-demo-pharma-mx/opt05-wa-scorecard.yaml
Normal file
348
examples/output-demo-pharma-mx/opt05-wa-scorecard.yaml
Normal file
@@ -0,0 +1,348 @@
|
||||
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
|
||||
92
examples/output-demo-pharma-mx/opt06-feature-check.json
Normal file
92
examples/output-demo-pharma-mx/opt06-feature-check.json
Normal file
@@ -0,0 +1,92 @@
|
||||
[
|
||||
{
|
||||
"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."
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
25
examples/output-demo-pharma-mx/opt07-competitive.json
Normal file
25
examples/output-demo-pharma-mx/opt07-competitive.json
Normal file
@@ -0,0 +1,25 @@
|
||||
{
|
||||
"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"
|
||||
}
|
||||
]
|
||||
}
|
||||
BIN
examples/output-demo-pharma-mx/opt08-business-case.pptx
Normal file
BIN
examples/output-demo-pharma-mx/opt08-business-case.pptx
Normal file
Binary file not shown.
121
examples/output-demo-pharma-mx/opt09-field-findings-dep.json
Normal file
121
examples/output-demo-pharma-mx/opt09-field-findings-dep.json
Normal file
@@ -0,0 +1,121 @@
|
||||
[
|
||||
{
|
||||
"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"
|
||||
]
|
||||
}
|
||||
]
|
||||
300
examples/output-demo-pharma-mx/opt10-reference-arch-dr.json
Normal file
300
examples/output-demo-pharma-mx/opt10-reference-arch-dr.json
Normal file
@@ -0,0 +1,300 @@
|
||||
[
|
||||
{
|
||||
"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
|
||||
}
|
||||
]
|
||||
33
examples/output-demo-pharma-mx/opt11-finding-verify.json
Normal file
33
examples/output-demo-pharma-mx/opt11-finding-verify.json
Normal file
@@ -0,0 +1,33 @@
|
||||
[
|
||||
{
|
||||
"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": []
|
||||
}
|
||||
]
|
||||
4
examples/output-demo-pharma-mx/opt11-report-finding.txt
Normal file
4
examples/output-demo-pharma-mx/opt11-report-finding.txt
Normal file
@@ -0,0 +1,4 @@
|
||||
WARNING: Unknown tag 'iorm'. Not in taxonomy.
|
||||
WARNING: Unknown tag 'storage'. Not in taxonomy.
|
||||
|
||||
Added: FF-202604-001 [MEDIUM] ExaCS iormcal fails silently when storage server count < 3 — validate IORM plan after apply
|
||||
175
examples/output-demo-pharma-mx/opt12-ecal-readiness.json
Normal file
175
examples/output-demo-pharma-mx/opt12-ecal-readiness.json
Normal file
@@ -0,0 +1,175 @@
|
||||
{
|
||||
"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"
|
||||
}
|
||||
]
|
||||
}
|
||||
BIN
examples/output-demo-pharma-mx/opt13-bom.xlsx
Normal file
BIN
examples/output-demo-pharma-mx/opt13-bom.xlsx
Normal file
Binary file not shown.
BIN
examples/output-demo-pharma-mx/opt14-bom-appca.xlsx
Normal file
BIN
examples/output-demo-pharma-mx/opt14-bom-appca.xlsx
Normal file
Binary file not shown.
401
examples/output-demo-pharma-mx/proposal-spec.yaml
Normal file
401
examples/output-demo-pharma-mx/proposal-spec.yaml
Normal file
@@ -0,0 +1,401 @@
|
||||
# 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"
|
||||
Reference in New Issue
Block a user