Project Oxygen & Ideo-LabIDEO LAB Dashboard 2026

đŸ§± Oracle APEX — RAD Web pur, Database-centric (Oracle Database)

Positionnement : “WinDev version Web / database-centric”. APEX excelle quand le cƓur du SI est Oracle DB : tu construis vite des apps internes (CRUD, reporting, back-office, portails) avec une architecture simple Browser → ORDS → Oracle DB, des pages gĂ©nĂ©rĂ©es via mĂ©tadonnĂ©es en base, et une sĂ©curitĂ©/perf solides si SQL & gouvernance sont propres.

1.1

APEX — dĂ©finition + promesse

Low-code Oracle pour construire vite des apps web “data-centric”. ModĂšle : mĂ©tadonnĂ©es en DB → pages gĂ©nĂ©rĂ©es dynamiquement.

RAD WebDB-centricLow-Code + Pro-Code

Architecture complĂšte

Browser → ORDS (web server) → Oracle DB (APEX engine + metadata). SĂ©paration mid-tier / DB tier.

ORDSPoolsScale

App Builder & Page Designer

ModĂšle APEX : pages → regions → items → processes → validations → dynamic actions. Le “coeur” de la productivitĂ©.

PagesRegionsDynamic Actions
1.2

Composants UI & reporting

Classic Report, Interactive Report, Interactive Grid (editable), Cards, Calendar, Charts, Faceted Search, Smart Filters.

IRIGFacets

Interactive Grid (editable)

Édition “type spreadsheet” : ajout/suppression/Ă©dition de lignes, DML automatique, validations, save cycles, JS API.

EditableAutomatic DMLClient model

Faceted Search & Smart Filters

Recherche/filtrage trĂšs puissant “SQL-driven” au plus prĂšs de la donnĂ©e, idĂ©al pour portails data.

SQL-drivenFilter UXInsights

Sécurité (deep-dive)

Auth, Authorization, Session Management, Session State Protection (SSP), Browser Security, DB session hardening.

SSPRBACHardening
2.1

Performance & tuning

APEX = SQL/perf DB. Index, pagination, read-models, bind variables, caching, ORDS pools, pages “light”.

SQL firstIndexPagination
2.2

ORDS (web tier + REST)

Installation, config, upgrade, pools, TLS, reverse proxy, REST endpoints, modes de déploiement.

InstallUpgradeREST

ModĂšle data & patterns DB

Tables/contraintes/index, vues read-models, packages PL/SQL “service layer”, anti-pattern “logic in UI”.

ConstraintsViewsPL/SQL services
2.3

Universal Theme & UX

Responsive, scalable, Theme Roller, templates, design system APEX. Standardiser l’UX Ă  grande Ă©chelle.

UTTheme RollerResponsive

ALM / CI-CD APEX

Exports/imports, Git, environnements, build manager, pipeline, rollback, discipline release.

ExportGitCI/CD
3.1

Workspaces & gouvernance

Workspaces multi-tenant, rĂŽles dev, sĂ©paration DEV/TEST/PROD, secrets, audit, standards d’équipe.

WorkspaceRolesStandards

Déploiement & HA

On-prem / cloud, ORDS stateless, LB, DB HA, PDB isolation, patching, backups testés.

LBORDS nodesDB HA

Quickstart (POC 7 jours)

Plan “P1 → Prod-like” : modĂšle data, 6 pages, sĂ©curitĂ©, SSP, ORDS, KPI perf, pipeline minimal.

POCSecurityPerf

Dépendance Oracle (lock-in)

APEX vit dans Oracle DB. Stratégie anti lock-in : domain layer, REST contracts, séparation UI / services.

OracleContractsExit plan
3.2

Use-cases & anti-usecases

OĂč APEX est imbattable (Oracle shops) + oĂč il faut benchmarker (UX ultra custom / multi-DB strict).

Back-officePortalsReporting
★

Cheat-sheet opérationnel

Les rĂšgles “anti-galĂšre” APEX : sĂ©curitĂ©, perf, architecture, ALM, dĂ©ploiement, standards.

ChecklistRunbookStandards
Oracle APEX — overview “densifiĂ©â€ (architecture + mental model + tradeoffs)
Mental model
APEX = metadatapages générées dynamiquement via métadonnées stockées en DB
DB-centricSQL/perf/sĂ©cu “au plus prĂšs” des donnĂ©es
ORDSweb tier : sert APEX + REST, stateless, scalable
Dev modeldéclaratif (90%) + code (PL/SQL/JS) quand nécessaire
Securityauth/roles + SSP + session mgmt + browser security
Runmonitoring, top SQL, pools ORDS, release discipline
Le “triangle” qui fait rĂ©ussir APEX
PilierCe que ça veut direIndicateur de maturité
Data modelcontraintes/index + vues “read-models” + services PL/SQLtop SQL stable, peu de full scans
Securityroles cohérents + SSP activé + sessions durciespas de tampering, audit actions sensibles
ALM/RunDEV/TEST/PROD + exports versionnés + rollbackreleases reproductibles, MTTR bas
Positionnement “WinDev web / DB-centric”
APEX est souvent “imbattable” quand :
- Oracle DB est dĂ©jĂ  au cƓur du SI
- tu fais des apps data-centric (CRUD, reporting, back-office, portails)
- tu veux sécuriser vite (auth/roles/SSP) et scaler proprement (ORDS)

APEX est moins adapté quand :
- tu veux une stratégie multi-DB / cloud-agnostic stricte
- tu construis un produit public avec UX ultra sur-mesure (possible, mais coĂ»t ↑)
          

Le “sweet spot” = applications internes et portails data dans un environnement Oracle. Les mauvaises surprises viennent surtout de : SQL mal optimisĂ©, SSP oubliĂ©, absence d’ALM.

Ce que tu dois absolument cadrer dÚs le début
  • Domain boundary : logique mĂ©tier dans packages PL/SQL (pas dispersĂ©e dans l’UI).
  • Read vs Write model : vues dĂ©diĂ©es pour reporting (Ă©vite N+1 & requĂȘtes “sales”).
  • Security : RBAC + SSP + session policies.
  • ORDS : sizing pools + TLS + reverse proxy + logs.
  • ALM : exports versionnĂ©s + pipeline minimal + rollback plan.
1.1 APEX en bref — dĂ©finition, promesse, forces, limites, dĂ©cisions
DĂ©finition “engineering”

Oracle APEX est une plateforme “metadata-driven” : une application est un ensemble de mĂ©tadonnĂ©es (pages/regions/items/processes) stockĂ©es en Oracle Database. À l’exĂ©cution, le runtime APEX gĂ©nĂšre les pages dynamiquement.

RAD Web pur
Oracle Database-centric
Low-code + pro-code (PL/SQL/JS)
ORDS (web tier + REST)
Glossaire “indispensable”
TermeDĂ©finitionPourquoi c’est important
Workspacepartition logique multi-tenantgouvernance, isolation, rĂŽles dev
Applicationmétadonnées + composantsexportable, versionnable
Pageécran (regions/items)performance & UX
Regioncomposant UI (report, form, chart)unités de rendu / tuning
Iteminput / champ / étatvalidation, SSP, session state
Processlogique serveur (PL/SQL) à des points préciswrite path, DML, transactions
Dynamic Actionlogique client declarative (JS)UX riche sans SPA “lourde”
Promesse (bien cadrée)
Promesse APEX :
- Construire vite une app web data-centric
- Garder la performance “au niveau DB”
- Sécuriser via mécanismes intégrés (auth/roles/SSP)
- Industrialiser (exports, environnements, pipeline)

Mais :
- La vitesse vient surtout si le modĂšle data + SQL sont propres
- Sans ALM, on fabrique vite une “apex-app spaghetti”
            
APEX = “database middle tier” (pratique)
  • Ton “backend” peut ĂȘtre : tables + vues + packages PL/SQL (service layer).
  • Ton “frontend” : pages APEX + regions + dynamic actions + Universal Theme.
  • Ton “API layer” : ORDS REST (si tu veux dĂ©coupler, exposer, intĂ©grer).
Forces (concrĂštes)
ForcePourquoiRésultat
Time-to-Appdéclaratif + générateurs CRUD/reportsPOC en heures/jours
DB-centricSQL au plus prùs, pas de “surcharge ORM” obligatoireperfs solides si index/SQL OK
Sécuritéauth/authorization/session/SSP/browser securityhardened web apps
ScalabilitéORDS stateless + DB HAscale horizontal web tier
Low-code + Pro-codetu sors du cadre quand nĂ©cessaireĂ©vite l’effet “outil bloquant”
Ce que tu construis “trùs vite”
- Back-office CRUD (tables / contraintes / forms)
- Portails data (reports + faceted search)
- Dashboards (charts, KPI)
- Workflows simples (statuts, validations, approvals “maison”)
- Admin consoles (référentiels, droits, audit)
            

Quand ton SI est Oracle, APEX te donne un web RAD “sans friction”.

Limites / risques
  • Lock-in Oracle : runtime APEX en DB Oracle + ORDS (stack Oracle).
  • Spaghetti UI : logique mĂ©tier dissĂ©minĂ©e dans process/pages/items → maintenance dure.
  • Perf “surprises” : queries lourdes (reports), absence pagination, index manquants, N+1 via vues mal conçues.
  • Ops : sans discipline export/versioning, tu perds la reproductibilitĂ©.
  • UX ultra custom : faisable, mais le coĂ»t augmente (JS/CSS, composants custom).
Anti-pattern #1 (le plus fréquent)
Anti-pattern :
- 200 pages
- logique métier copiée-collée en process PL/SQL
- validations incohérentes
- pas de service layer
- pas d’exports versionnĂ©s

SymptĂŽme :
- chaque changement casse 3 endroits
- personne n’ose toucher la prod
            
RemĂšde
- Domain services : packages PL/SQL (API stable)
- UI : pages simples (thin UI)
- Read models : vues/reporting dédiées
- ALM : exports + Git + pipeline + rollback
            
DĂ©cision (checklist “go / no-go”)
QuestionSi “Oui”Sinon
Oracle DB est-il le socle SI ?APEX est trĂšs pertinentbenchmark (autre low-code / custom)
Apps data-centric (CRUD + reporting) ?sweet spot APEXUX produit → coĂ»t ↑
Équipe SQL/PLSQL dispo ?perf & robustessecourbe d’apprentissage
Gouvernance/ALM acceptĂ©e ?prod stablerisque “apex spaghetti”
Architecture — Browser → ORDS → Oracle DB (APEX) + patterns HA / isolation
Architecture “minimum viable”
[Browser]
   |
   v
[ORDS]  (web server / REST gateway, stateless)
   |
   v
[Oracle Database]
  - APEX engine
  - APEX metadata (apps/pages/components)
  - Data model (tables/views)
  - Service layer (packages PL/SQL)
            

La séparation mid-tier/DB tier est la clé : ORDS scale horizontal, DB scale HA/perf.

Pourquoi c’est puissant
  • Latence : le “coeur data” est local (DB-centric).
  • SĂ©cu : l’app est un “citoyen DB” (auth/roles/SSP).
  • Ops : ORDS peut ĂȘtre dĂ©ployĂ© stateless, patchĂ© facilement.
  • Perf : tu tunes SQL/index/cache plutĂŽt qu’un gros middleware.
Découpage recommandé (clean)
DB Layer :
- tables, constraints, indexes
- views (read-model)
- packages PL/SQL (domain services)
APEX Layer :
- pages (thin UI)
- validations (UI-level)
- processes (calls packages)
ORDS Layer :
- pools sizing
- TLS / reverse proxy
- REST contracts (optional)
            
ORDS — responsabilitĂ©s
ZoneRĂŽleConcrĂštement
Web serversert APEXHTTP(S), sessions, proxification
Gatewaypont vers DBpools JDBC, timeouts, retries
RESTexposition APImodules/endpoints, auth, versioning
Opspatchingupgrade, config, logs
Runbook ORDS (indispensable)
Security:
- TLS partout (reverse proxy)
- headers (HSTS, etc.) selon politique

Sizing:
- max pool connections
- idle timeout
- statement timeout (selon env)
- file upload limits

Observability:
- access logs + error logs
- corrId (si reverse proxy)
- alerting: 5xx rate, pool saturation
            
Scale / HA pattern
[Load Balancer]
   |------> [ORDS node #1]
   |------> [ORDS node #2]
   |------> [ORDS node #N]
                |
                v
          [Oracle DB HA]
          - RAC / Data Guard / backups testés
        
PointButErreur fréquente
ORDS statelessscale horizontalstate local non partagé
DB HArésiliencebackup non testé
PoolingstabilitĂ©pool trop grand → DB saturĂ©e
Top SQLperfpages/reports “full scan”
Isolation (multi-apps) — pattern PDB
CDB
  - PDB_APP_HR   (APEX workspace HR, ORDS pool HR)
  - PDB_APP_FIN  (workspace FIN, ORDS pool FIN)
  - PDB_APP_OPS  (workspace OPS, ORDS pool OPS)
=> isolation workloads + tuning indépendant
        

Tu gagnes en isolation “perf & sĂ©curitĂ©â€ : un portail lourd ne casse pas tout.

App Builder & Page Designer — le modùle APEX (pages → regions → items → processes)
Le modùle “APEX” (ce qu’il faut savoir par coeur)
Application
  - Shared Components
      - Authentication scheme
      - Authorization schemes
      - Navigation menu/breadcrumb
      - Themes, templates
      - LOVs (List of Values)
      - Application items/processes
  - Pages (1..N)
      - Regions (report/form/chart/...)
          - Items (fields)
          - Buttons
          - Dynamic Actions (client)
      - Validations
      - Processes (server: PL/SQL)
      - Branches / Computations
            
ConsĂ©quence : “thin UI, strong DB”
  • Mettre la logique mĂ©tier durable dans packages PL/SQL (services), pas dans 50 process diffĂ©rents.
  • Utiliser des vues dĂ©diĂ©es aux reports plutĂŽt que surcharger les pages d’un SQL Ă©norme.
  • Standardiser validations/erreurs via une API (messages + codes), appelĂ©e depuis processes.

APEX te donne la vitesse ; ton architecture te donne la maintenabilité.

Anatomie d’une “page pro” (minimum viable production)
BlocRĂŽleRĂšgle
Headeridentité + navmenu cohérent, breadcrumbs
Region: Searchfiltre/trifacets/smart filters si data portal
Region: Reportliste/insightspagination + colonnes utiles
Region: Detailsformvalidation + UX claire
Processeswrite pathappeler package service, pas du code “brut”
SecuritycontrĂŽlesauthorization scheme + SSP
Lifecycle d’une requĂȘte (vue “debuggable”)
1) Browser GET / page request
2) ORDS -> DB -> APEX runtime
3) APEX resolve metadata -> render regions
4) User POST submit (items + changes)
5) Validations
6) Processes (PL/SQL)
7) Commit/rollback
8) Branch -> next page
        

Pour diagnostiquer une lenteur : isole “render vs process” + top SQL.

Patterns “qui tiennent la route”
Pattern 1 — CRUD + audit
Tables:
- T_ENTITY (PK, cols, created_at, created_by, updated_at, updated_by)
- T_AUDIT (entity, entity_id, action, actor, payload, ts)

APEX:
- List page (IR/IG)
- Form page (create/edit)
- Processes call pkg_entity.save(...)
- Authorization by role + row-level policy
            
Pattern 2 — Portal data (facets)
Views:
- V_PORTAL_SEARCH (denormalized read model)

APEX:
- Faceted Search region
- Report region bound to V_PORTAL_SEARCH
- “Details” modal dialog page
- Export async si volumétrie

Perf:
- indexes sur colonnes filtrées
- pagination keyset si nécessaire
            
Composants APEX — reporting, forms, dashboards, search UX (guide de choix)
Matrice de choix (pragmatique)
BesoinComposantPourquoiAttention
Table simpleClassic Reportsimple/rapidemoins de self-service
Self-service userInteractive Report (IR)filtres, tri, saved reportsrequĂȘtes lourdes si mal cadrĂ©
Édition type ExcelInteractive Grid (IG)editable, DML, model clientvalider DML + locks
Data portalFaceted Searchfiltrage massif SQL-drivenindex & read model
UX “cards”Cardscatalogue / portailpagination + images
DashboardsChartsKPIcache + agrégats
Reports (tuning-ready)
Bonnes pratiques :
- SQL “read model” (vues dĂ©diĂ©es)
- colonnes utiles, éviter select *
- pagination / fetch
- filtres indexés
- éviter les fonctions non sargables sur colonnes filtrées
- agrégats pré-calculés si besoin (MV)
        

Dans APEX, le report = ton SQL. Optimise SQL comme une API critique.

Forms & DML
Pattern “Form Page”
- region form (table / view)
- validations (client/server)
- process:
    pkg_entity.validate(...)
    pkg_entity.save(...)
- messages standardisés
- authorization scheme (role + row-level)
            
Anti-pattern (dangereux)
- DML direct dans 10 process
- validations différentes par page
- logique métier dans dynamic actions
=> incohérences, maintenance impossible
            
Interactive Grid (editable) — architecture, DML, validations, patterns, piùges
Ce que c’est (vraiment)

IG = grille interactive avec un modĂšle client : l’utilisateur modifie des lignes/cellules, l’état est maintenu cĂŽtĂ© navigateur, puis envoyĂ© au serveur lors du Save/Submit.

IG features (attendues) :
- fixed headers / frozen columns
- scroll pagination
- filters / sorts / aggregates
- computations
- editable cells (spreadsheet feel)
- toolbar actions (save, add row...)
            
Quand l’utiliser
  • Édition de rĂ©fĂ©rentiels / tables mĂ©tier (petites Ă  moyennes volumĂ©tries).
  • Back-office “ops” : MAJ rapides, import/correctifs.
  • Cas oĂč l’UX spreadsheet est un vrai besoin (sinon : form classique).

IG editable = puissance + complexitĂ© : pense “verrouillage, validation, concurrency”.

Write path (robuste)
Option A — Automatic DML (APEX)
- simple, rapide
- OK si rÚgles métier simples

Option B — Custom DML (recommandĂ© si domain)
- process IG -> appelle pkg_domain.apply_changes(...)
- gĂšre :
   - validations domain
   - erreurs standardisées
   - audit
   - concurrency (row version)
        
Pattern concurrency
T_ENTITY
- id PK
- row_version number

Update:
WHERE id = :id AND row_version = :row_version;
IF SQL%ROWCOUNT=0 THEN conflict;
row_version := row_version + 1;
            
Pattern audit
pkg_audit.log(
  p_entity => 'T_ENTITY',
  p_action => 'UPDATE',
  p_actor  => :APP_USER,
  p_payload=> json_object(...)
);
            
Validation (3 niveaux)
NiveauOĂčButExemples
UIItems/DAfeedback immédiatrequired, format, ranges
ServerValidations APEXcohérence requestconstraints, cross-field
DomainPackage PL/SQLrÚgles métierstatuts, invariants, droits

Le domaine (PL/SQL) doit ĂȘtre la source de vĂ©ritĂ© — l’UI ne doit jamais ĂȘtre “la loi”.

PiĂšges (les vrais)
  • Locks : Ă©dition concurrente sur mĂȘmes lignes → pense row_version / conflict.
  • VolumĂ©trie : IG n’est pas fait pour afficher 500k lignes en “scroll infini” sans stratĂ©gie.
  • DML implicite : si tu relies IG Ă  une vue complexe, attention Ă  updatability.
  • Validation : erreurs doivent remonter proprement (messages user + corrId).
  • Security : authorization scheme sur page/region + row-level policy en DB si sensible.
Faceted Search & Smart Filters — “data portal” SQL-driven (performance & UX)
Pourquoi c’est puissant
Faceted Search = UX “e-commerce / BI light”
- l’utilisateur filtre par facettes
- le calcul est SQL-driven (au plus prĂšs DB)
- idéal pour :
  catalogues, portails data, référentiels, monitoring
            
Pattern “Portal” recommandĂ©
1) Construire V_SEARCH (read model)
2) Index sur colonnes filtrées (status, type, date, owner...)
3) Facets region + Report region
4) Detail page en modal
5) Export async si volumétrie
            
Checklist performance (facets)
  • Facettes = colonnes filtrĂ©es → index (sinon full scans).
  • Limiter les champs “fonctionnels” dans WHERE (Ă©viter non-sargable).
  • PrĂ©parer un read-model (vue dĂ©normalisĂ©e) pour Ă©viter joins multiples.
  • Pagination (toujours) sur le report.
  • Si compute counts coĂ»teux : rĂ©duire la cardinalitĂ©, ou prĂ©-aggrĂ©ger (selon cas).

Facets = superbe UX
 mais c’est ton design SQL/index qui dĂ©cide si ça tient en prod.

SĂ©curitĂ© APEX — deep dive (Auth, Authorization, Session, SSP, Browser Security)
Les “Security Attributes” (application-wide)
Authenticationcomment l’utilisateur s’identifie (SSO, login...)
Authorizationqui a le droit (page/region/button/process)
Session Managementtimeouts, rejoin policy, cookies
Session State Protectionprotéger items/session state contre le tampering
Browser Securitypolicies/headers/protection XSS
Database Sessionhardening session DB, schémas, privileges

RÚgle : la sécurité APEX = réglages app-wide + contrÎles granulaires par composants.

Authentication — stratĂ©gies
StratégieQuandNotes
SSO (enterprise)SI internemeilleure UX + contrĂŽle central
APEX AccountsPOC / petit portailsimple mais gouvernance Ă  cadrer
Customintégration legacyvalidation sécu obligatoire
Golden rule :
- Auth = “qui es-tu”
- AuthZ = “as-tu le droit”
Ne pas confondre. Ne pas mettre la logique de droit dans Auth.
        
Authorization — RBAC + row-level
Authorization schemes (APEX)
Attacher des schemes Ă  :
- pages
- regions
- buttons
- processes
- menu entries

Ex: ROLE_ADMIN, ROLE_MANAGER, ROLE_USER
            
Row-level security (DB)
Données sensibles = contrÎle en DB :
- vues filtrées par :APP_USER
- ou policy (selon approche)
APEX AuthZ ne doit pas ĂȘtre le seul rempart.
            

“Defense in depth” : UI checks + DB row-level si nĂ©cessaire.

Session management — durcissement
RéglageButPratique
Idle timeoutrĂ©duire sessions ouvertesadaptĂ© au risque (15–60 min)
Rejoin policyéviter session hijackdésactiver si sensible
Cookiessécurité transportTLS + flags selon policy
Audittraçabilitélog actions admin + exports
Session State Protection (SSP) — le “must” APEX
Objectif :
- empĂȘcher la manipulation d'items via URL / client tampering
- protéger le session state

Mise en place (standard) :
1) activer SSP (application-level)
2) configurer page & item protection (wizard ou manuel)
3) tester : tampering -> rejet / erreurs attendues
        
Quelle protection oĂč ?
Type d’itemRisquĂ© ?Action
PK / IDsTrÚsprotéger + signer, valider serveur
RĂŽle / privilĂšgeCritiquene jamais accepter du client
Filtres UIMoyensanitizer + whitelists
ParamĂštres exportÉlevĂ©rate-limit + authz + audit
Test SSP “simple”
- prends une URL page?PXX_ID=123
- modifie en 999999
- résultat attendu :
   - refus
   - ou page non autorisée
   - ou item ignoré selon config
            

Le test SSP doit faire partie des smoke tests avant PROD.

Browser security — “hardening web”
Mesures typiques (selon policy entreprise) :
- headers (HSTS, X-Frame-Options, etc.)
- CSP (Content Security Policy) si possible
- protection XSS via réglages APEX + sanitation
- upload hardening (types, taille, scanning)
- rate limiting (reverse proxy)
        

Ne pas nĂ©gliger l’infra : TLS, reverse proxy, rate-limit, logs.

Checklist sĂ©curitĂ© “prod”
  1. Auth : SSO si possible, sinon comptes & politique mots de passe.
  2. AuthZ : schemes sur pages/regions/actions + audit admin.
  3. SSP : activé + items sensibles protégés + tests tampering.
  4. Session : timeouts + rejoin policy + TLS only.
  5. DB : least privilege schémas + packages domain, pas de droits inutiles.
  6. ORDS : TLS, pools, patching, logs, alerting.
  7. Ops : exports versionnés (traçabilité).
Performance & tuning — APEX = SQL first (index/pagination/read-models) + ORDS pools
Top 15 perf rules (APEX “production”)
  1. Index sur colonnes filtrées/triées (reports/facets).
  2. Pagination partout (pas de “full table” UI).
  3. Read-models : vues dédiées pour reporting.
  4. Bind variables (parse stable).
  5. Limiter les régions lourdes (une page = un objectif).
  6. Éviter N+1 : joins corrects, vues, agrĂ©gats.
  7. Fonctions non sargables : éviter sur colonnes WHERE.
  8. PrĂ©-agrĂ©ger quand nĂ©cessaire (MV / tables d’agrĂ©gats).
  9. Exports asynchrones si volumétrie.
  10. Cache (avec invalidation) sur KPI coûteux.
  11. ContrĂŽler le tri : trier sur index.
  12. Limiter colonnes : pas de select *.
  13. Diagnostics : top SQL + temps de rendu régions.
  14. ORDS pools : Ă©viter pool trop grand qui “tue” la DB.
  15. DB health : IO/CPU/locks — APEX ne compense pas une DB mal tunĂ©e.
SQL patterns utiles
Keyset pagination (scalable)
SELECT  *
FROM    v_search
WHERE   (created_at, id) < (:last_created_at, :last_id)
ORDER BY created_at DESC, id DESC
FETCH FIRST :page_size ROWS ONLY;
            
Read-model view (report-friendly)
CREATE OR REPLACE VIEW v_search AS
SELECT
  e.id,
  e.status,
  e.type,
  e.created_at,
  u.display_name owner_name,
  (SELECT COUNT(*) FROM t_child c WHERE c.e_id = e.id) child_cnt
FROM t_entity e
JOIN t_user u ON u.id = e.owner_id;
            
Pages “light” : rùgle d’or
- 1 page = 1 objectif
- 1 région lourde max
- reports lourds -> pages dédiées
- details -> modal dialog
- lazy loading / partial refresh quand possible
        

La meilleure optimisation APEX : des pages simples + SQL propre.

ORDS sizing (conceptuel)
Pool trop petit -> files d'attente, latence
Pool trop grand -> DB saturée (CPU/locks), instabilité

Approche :
- partir petit
- mesurer (latence/p95, 5xx, pool wait)
- ajuster selon workload
- séparer pools par app si besoin
        
KPI run (minimum)
App:
- p95 page render (pages clés)
- p95 report query time
- error rate (validation, 5xx)

DB:
- top SQL by elapsed time
- waits (IO/CPU/locks)
- parse/execute ratio

ORDS:
- pool utilization
- request rate
- 5xx spikes / timeouts
        
ORDS — installation/config/upgrade + modes de dĂ©ploiement + REST API
Install/Configure/Upgrade : discipline
Runbook ORDS :
1) installer (Java OK)
2) configurer connexion DB (wallet si cloud)
3) configurer pools & timeouts
4) activer APEX
5) activer REST si besoin
6) tester endpoints + pages
7) documenter config (infra-as-code si possible)
8) upgrade plan (fenĂȘtre + rollback)
        
Modes de déploiement (génériques)
ModeQuandNotes
Standalonesimple / POCrapide mais moins “enterprise”
Servlet containerenterpriseTomcat/WebLogic selon standards
Reverse proxyprodTLS, headers, rate limit, logs
REST contracts (anti lock-in / intégrations)
Approche recommandée :
- endpoints versionnés (/v1/...)
- DTO stables (JSON)
- erreurs standardisées (code + message + corrId)
- auth (SSO / tokens) selon policy
- rate limit + audit
        

REST via ORDS = excellent pour découpler UI APEX et services.

Hardening ORDS
  • TLS obligatoire, certificats gĂ©rĂ©s proprement.
  • Rate limiting au reverse proxy (protection brute force).
  • Logs centralisĂ©s + corrId.
  • Limiter endpoints exposĂ©s (pas d’API “ouverte” involontaire).
  • Patching rĂ©gulier (ORDS & JVM).
Modùle data & patterns DB — constraints/index, read-models, packages “service layer”
Structure DB “production”
Tables:
- PK / FK / NOT NULL
- checks (status, ranges)
- uniques (business keys)
Index:
- colonnes WHERE / ORDER BY (reports/facets)
- FKs (souvent)
Audit:
- created_at/by, updated_at/by
        

APEX va vite si la DB est “bien conçue”. Sinon, APEX ne compensera pas.

Service layer PL/SQL (clean)
pkg_domain_entity
- function can_access(p_user, p_id) return boolean;
- procedure validate(p_dto in out nocopy ...);
- procedure create(p_dto..., p_id out ...);
- procedure update(p_dto...);
- procedure delete(p_id...);

APEX pages:
- processes appellent pkg_domain_entity.*
- UI reste thin
        
Read-models (vues dédiées)
V_SEARCH :
- denormalized, report friendly
- contient champs filtre/tri
- évite joins multi-pages

Avantages :
- SQL plus simple cÎté APEX
- tuning plus facile
- stabilité & perf
        
Contrat d’erreurs (standardiser)
Error contract (suggestion) :
- code : VALIDATION | AUTH | CONFLICT | TECH
- user_message : message affichable
- tech_message : logs
- corr_id : id corrélation

APEX :
- afficher user_message
- logger tech_message + corr_id
        
Universal Theme & UX — design system APEX (responsive, scalable, Theme Roller)
Universal Theme (UT) : ce que tu y gagnes
  • Responsive : mobile/desktop sans rĂ©inventer un framework.
  • Templates propres : pages/regions/navigation cohĂ©rents.
  • Theme styles + Theme Roller : personnalisation “contrĂŽlĂ©e”.
  • Scalable : standardiser l’UX pour 50 apps internes.

Le secret : standardiser (templates + patterns) plutît que custom “page par page”.

Design patterns APEX (pratiques)
Pattern UI:
- List -> Details (Modal)
- Search panel (Facets) -> Results (Report)
- Dashboard (KPI cards) -> Drilldown report
- Admin pages (only admins)

RĂšgles:
- composants réutilisables
- navigation stable
- pages simples
- naming conventions (Pxx_*)
          
ALM / CI-CD — exports, versioning, environnements, pipeline, rollback
DEV / TEST / PROD (non négociable)
- schémas séparés
- workspaces séparés
- ORDS config séparée
- secrets séparés
- données anonymisées en TEST
        

Sans sĂ©paration d’environnements, APEX devient â€œĂ©dition directe en prod”.

Artifacts (ce que tu versions)
Repo Git :
/db
  - migrations.sql (ou outils)
  - packages/*.sql
  - views/*.sql
  - seed/*.sql
/apex
  - app_export.sql
  - static_files/ (images, css, js)
  - env_config/ (substitutions)
/ops
  - ords-config.md
  - runbooks.md
        
Pipeline minimal (prod-like)
1) Build DB
   - apply migrations
   - compile packages
   - smoke SQL checks

2) Import APEX app
   - import app_export.sql
   - set substitutions

3) Smoke tests
   - login + 3 pages clés
   - SSP tampering test
   - 1 write path test

4) Deploy/Reload ORDS config (si besoin)
5) Monitor KPI post-release (p95, 5xx)
        
Rollback (trĂšs concret)
Rollback plan :
- APEX app export N-1
- DB rollback (si possible) ou restore snapshot
- ORDS config rollback
- validation smoke tests
        
Workspaces & gouvernance — multi-tenant, rĂŽles dev, standards d’équipe
Gouvernance (minimum “enterprise”)
  • Workspaces par domaine/BU (ou par environnement) selon l’organisation.
  • RĂŽles dev : admin, builder, read-only.
  • Standards : naming, templates, security defaults, logging.
  • Audit : exports, actions admin, changements majeurs.
  • Revue SQL : reports/facets = surface perf & sĂ©cu.
Standards “IDEO-Lab” (proposĂ©s)
Conventions :
- Pages : Pxx_* (ex: P10_LIST, P20_FORM, P30_ADMIN)
- Items : Pxx_FIELDNAME
- Packages : pkg__
- Views : v__search / v__report
Security defaults :
- SSP ON
- Authorization schemes mandatory
- Admin pages isolated
            
DĂ©ploiement & HA — on-prem / cloud, ORDS stateless, patching, backups
Topo de déploiement (standard)
Internet/Intranet
  -> WAF / Reverse Proxy (TLS, rate limit)
      -> LB
         -> ORDS nodes (stateless)
             -> Oracle DB (APEX + data + packages)
        

La stabilitĂ© vient d’un ORDS stateless + une DB HA + un patching disciplinĂ©.

HA : ce qu’on oublie souvent
  • Tests de failover (DB) planifiĂ©s.
  • CompatibilitĂ© ORDS/APEX/DB lors d’upgrade.
  • Sessions : policies + timeouts (Ă©viter effets de bords lors de failover).
  • Capacity planning : pool ORDS vs sessions DB.
Patching cadence
Ordre (générique) :
1) environnements non-prod
2) ORDS upgrade (si requis) + tests
3) APEX upgrade (si requis) + tests
4) DB patches (selon politique)
5) prod avec rollback
        
Backups : “testĂ©s” sinon inutiles
- snapshots DB (selon infra)
- exports APEX versionnés
- exports ORDS config
- restore drills (trimestriels)
        
Quickstart POC 7 jours — passer de 0 Ă  “prod-like” (sĂ©curitĂ© + perf + pipeline)
Plan 7 jours (dense, réaliste)
JourObjectifLivrableCritĂšre
J1ModĂšle datatables+contraintes+indexrequĂȘtes de base rapides
J2Read-modelvues reporting + indexesreport p95 OK
J3APEX app6 pages (list/report/form/admin)CRUD complet
J4Sécuritéauth + authZ + SSPtampering rejeté
J5ORDS & infraTLS + reverse proxy + poolsstabilité sous charge légÚre
J6ALMexports + Git + import scriptrebuild reproductible
J7Perf/KPItop SQL + p95 pages + runbookgo/no-go prod
Smoke tests (minimum)
- login
- ouvrir page list + report
- créer un record, modifier, supprimer
- test SSP : changer ID dans URL -> rejet
- vérifier p95 < cible (ex: < 800ms sur pages clés)
- check ORDS : pas de pool saturation
      
DĂ©pendance Oracle (lock-in) — comment l’assumer et la rendre “maĂźtrisable”
Ce qui est “vraiment” liĂ©
  • APEX runtime + metadata dans Oracle DB.
  • ORDS (web tier) est le gateway standard.
  • SQL/PLSQL comme langage de cƓur (avantage & dĂ©pendance).

On ne supprime pas le lock-in : on le rend “portable” par couches & contrats.

Plan anti lock-in (pragmatique)
1) Domain services en packages PL/SQL (API stable)
2) Read models via vues (contrats)
3) Exposer REST versionné via ORDS (option)
4) UI APEX = couche de présentation (remplaçable)
5) Tests et doc des contrats (DTO + erreurs)
          
Use-cases & anti-usecases — oĂč APEX brille (et oĂč benchmarker)
APEX “no-brainer”
  • Back-office CRUD (rĂ©fĂ©rentiels, ops, paramĂ©trage).
  • Portails data (facets + reports + details).
  • Dashboards / KPI (charts + drilldown).
  • Modernisation d’outils legacy “forms/reports”.
  • Apps internes multi-Ă©quipes avec standards UT + gouvernance.
À benchmarker
  • Produit public avec UX ultra spĂ©cifique (possible, mais budget ↑).
  • StratĂ©gie multi-DB stricte / cloud-agnostic.
  • Besoin microservices polyglottes trĂšs imposĂ© (APEX peut coexister via ORDS REST).

Rùgle : si “data-centric Oracle”, APEX gagne souvent. Sinon, POC comparatif.

Cheat-sheet Oracle APEX — rĂšgles “anti-galĂšre” (sĂ©curitĂ©, perf, ALM, run)
20 rùgles “prod”
  1. Architecture : Browser → ORDS → DB (sĂ©parer mid-tier/DB tier).
  2. DB : contraintes + index (reports/facets).
  3. Read-models : vues dédiées pour reporting.
  4. Domain logic : packages PL/SQL (API stable).
  5. UI thin : pages simples, une page = un objectif.
  6. Pagination partout (no full scans UI).
  7. Bind variables + SQL propre.
  8. Exports lourds : async si volumétrie.
  9. Sécurité : auth + authZ partout (pages/regions/actions).
  10. SSP ON + items sensibles protégés + tests tampering.
  11. Session hardening : timeouts, rejoin policy.
  12. Browser security + TLS + reverse proxy.
  13. ORDS pools : sizing prudent + monitoring.
  14. Logs : corrId + centralisation.
  15. Envs : DEV/TEST/PROD séparés.
  16. ALM : exports versionnés + Git + pipeline.
  17. Rollback : N-1 app export + plan DB.
  18. Gouvernance : workspaces/roles + standards naming.
  19. Perf run : p95 pages + top SQL + 5xx rate.
  20. Backups : test restore sinon inutile.
Résumé (à coller dans IDEO-Lab)
Oracle APEX = RAD web pur, database-centric
- apps générées dynamiquement via metadata en DB
- ORDS = web tier stateless + REST
- forces : time-to-app, sécurité, perf (si SQL/index OK)
- limite : dépendance Oracle -> maßtriser via contracts & services