Project Oxygen & Ideo-LabIDEO LAB Dashboard 2026
1

Intro & Positionnement

Pourquoi Oracle est “mission critical” (et pourquoi il divise).

EnterpriseMission-CriticalROI
2

Architecture (Instance/DB)

SGA/PGA, process Oracle, datafiles, controlfiles, redo.

SGAPGARedo
3

ModÚle de données

Tablespaces, segments/extents/blocks, UNDO/TEMP, schémas.

TablespaceUNDOTEMP
4

SQL Oracle & PL/SQL

Procédures, packages, triggers, jobs & logique cÎté DB.

PL/SQLPackagesTriggers
5

Performance & Optimizer

CBO, stats, plans, indexation, partitioning, parallel.

CBOStatsExplain
6

Concurrence & Locks

Verrous, latch, contention, deadlocks & diagnostic.

LocksLatchesDeadlocks
7

Transactions, UNDO & Redo

ACID, commit/rollback, redo logs, undo retention.

ACIDUNDORedo Logs
8

Backup & Restore (RMAN)

Stratégies, PITR, tests de restauration, bonnes pratiques.

RMANPITRRecovery
9

Haute disponibilité

RAC, Data Guard, DR, RPO/RTO, architectures.

RACData GuardDR
10

Sécurité & Compliance

Users/roles, audit, TDE, durcissement, accÚs réseau.

TDEAuditRBAC
11

Écosystùme applicatif

Drivers, JDBC/ODP.NET, web/API, ERP & legacy.

JDBCODP.NETERP
12

Oracle vs Open-Source

Comparatifs factuels : cas oĂč Oracle est justifiĂ© (ou non).

PostgreSQLTCOUse-Cases
13

Licensing & Coûts

ModÚles, options, piÚges, coût réel & gouvernance.

LicensingOptionsRisques
14

Oracle dans le Cloud

OCI, Autonomous DB, Oracle on AWS/Azure, hybride.

OCIAutonomousHybrid
15

Quotidien & Futur

Run, patching, monitoring, migrations + vision 2025-2030.

RunPatchingRoadmap
1.1 Oracle Database : Le Standard "Enterprise"
Pourquoi Oracle est encore partout ?

Malgré la montée du NoSQL et de l'Open Source, Oracle détient encore ~25-30% du marché mondial (Fortune 500). Ce n'est pas juste de l'inertie ("Legacy"), c'est technique.

  • FiabilitĂ© Absolue : Oracle ne perd pas de donnĂ©es. Point. Son architecture de redo logs/undo est blindĂ©e depuis 40 ans.
  • ScalabilitĂ© Verticale : Oracle peut gĂ©rer des Petabytes sur une seule instance mieux que quiconque.
  • ÉcosystĂšme : IntĂ©gration native avec les ERP majeurs (SAP, PeopleSoft, E-Business Suite).
Chronologie Rapide
                            1977 : Larry Ellison fonde SDL (futur Oracle).
                            1979 : Oracle V2. 1Ăšre base SQL commerciale de l'histoire (avant IBM DB2).
                            1984 : V4. Portabilité (C) et Read Consistency (MVCC).
                            1992 : Oracle 7. Procédures stockées (PL/SQL), Triggers. Le tournant.
                            2001 : Oracle 9i (Real Application Clusters - RAC). Haute Dispo active-active.
                            2013 : Oracle 12c (Cloud/Multitenant). Architecture Pluggable.
                            2018 : Oracle 18c (Autonomous DB). Self-driving database.
Comparatif Technique (Sans idéologie)

Oracle est souvent comparé à une Ferrari (puissante, chÚre, maintenance pointue) vs PostgreSQL (4x4 robuste, gratuit, passe-partout).

FeatureOracle DatabasePostgreSQLSQL Server
ArchitectureProcess-based (Lourd). Shared Everything (RAC).Process-based. Shared Nothing (Cluster via réplication).Thread-based (Léger). Intégration Windows forte.
ConcurrenceUndo Segments. Les lecteurs ne bloquent jamais les écriveurs. Pas de VACUUM nécessaire (gestion différente des versions).MVCC (xmin/xmax). Nécessite VACUUM pour nettoyer les lignes mortes.Verrouillage pessimiste par défaut (historiquement), MVCC optionnel (Snapshot Isolation).
LangagePL/SQL. TrÚs puissant, compilé, orienté paquetages. Le standard industriel.PL/pgSQL. TrÚs proche d'Oracle, mais moins riche en packages natifs.T-SQL. Procédural, syntaxe trÚs différente (Sybase heritage).
ClusteringRAC (Real Application Clusters). NƓuds multiples Ă©crivant sur le mĂȘme disque (Storage Area Network). 0 downtime.RĂ©plication Streaming (Primaire/Secondaire). Pas de "Shared Disk" natif.AlwaysOn Availability Groups. Robuste mais diffĂ©rent.
CoĂ»t$$$$ (Licensing par cƓur CPU).Gratuit (Open Source).$$$ (Licensing Microsoft).
Le bastion du "Mission Critical"

On n'utilise pas Oracle pour un blog WordPress. On l'utilise quand l'arrĂȘt du service coĂ»te des millions par minute.

  • Banque & Finance : Core Banking Systems. Gestion transactionnelle ultra-intensive (Millions de TPS).
  • Telco : Facturation en temps rĂ©el (Call Detail Records).
  • Industrie & Logistique : Supply Chain mondiale, ERPs (SAP tourne souvent sur Oracle).
  • État / DĂ©fense : Gestion de l'identitĂ©, impĂŽts, donnĂ©es classifiĂ©es.
                            Pourquoi migrer D'Oracle est difficile ?

                            1. Dépendance PL/SQL : Des millions de lignes de code métier sont souvent DANS la base (Logique stockée).
                            2. Complexité RAC : Remplacer un cluster RAC actif-actif par du Postgres nécessite de repenser toute la HA (Haute Dispo).
                            3. Risque : "Nobody gets fired for buying Oracle". Migrer comporte un risque opérationnel énorme.
Démystification
MytheRéalité
"Oracle c'est lent."Faux. C'est la base la plus rapide du monde si elle est bien tunée. Mais c'est une F1 : si vous ne savez pas piloter (Wait Events, AWR, ASH), vous allez dans le mur.
"Oracle c'est has-been."Faux. Oracle 19c/23c innove massivement : Support JSON natif, Sharding, ML in-database, Blockchain tables. Ils rattrapent le retard sur le NoSQL.
"L'audit Oracle est une mafia."Partiellement vrai. Le modÚle de licence (LMS) est agressif. Activer une option (ex: Partitioning) sans payer peut coûter cher lors d'un audit. C'est un piÚge commercial, pas technique.
"C'est impossible à apprendre."C'est complexe (Architecture mémoire SGA/PGA), mais trÚs documenté. Comprendre Oracle, c'est comprendre comment fonctionne un OS et le hardware.
1.2 Architecture : Le Moteur Oracle
Instance = SGA + Background Processes

Une "Instance" Oracle est temporaire. C'est ce qui tourne en RAM. Une "Database" est persistante (fichiers). On "monte" une Database sur une Instance.

SGA (System Global Area) - Partagé
  • Buffer Cache : Stocke les blocs de donnĂ©es lus depuis le disque. C'est ici que les modifications (UPDATE) ont lieu avant d'ĂȘtre Ă©crites sur disque.
  • Shared Pool :
    • Library Cache : Stocke les plans d'exĂ©cution SQL (Soft Parse).
    • Data Dictionary Cache : MĂ©tadonnĂ©es (qui est propriĂ©taire de la table X ?).
  • Redo Log Buffer : Tampon circulaire critique. Stocke les "Change Vectors" (toutes les modifications) avant Ă©criture dans les Redo Logs.
PGA (Program Global Area) - Privé

Mémoire non partagée, dédiée à chaque processus serveur (chaque connexion).

  • Sort Area : UtilisĂ© pour les tris (ORDER BY, GROUP BY).
  • Hash Area : UtilisĂ© pour les Hash Joins.
  • Session Info : Variables de session, curseurs privĂ©s.

Note : Depuis 11g, on utilise MEMORY_TARGET (AMM) ou SGA_TARGET / PGA_AGGREGATE_TARGET (ASMM) pour gérer ça automatiquement.

Les 5 Processus Obligatoires

Si l'un d'eux meurt, l'instance crash (Instance Failure).

ProcessNomRĂŽle Critique
DBWnDatabase WriterÉcrit les blocs "sales" (modifiĂ©s) du Buffer Cache vers les Datafiles. Il Ă©crit de maniĂšre diffĂ©rĂ©e (Lazy write) pour la perf.
LGWRLog WriterÉcrit le Redo Log Buffer vers les fichiers Redo Log sur disque. Il Ă©crit Ă  chaque COMMIT. C'est lui qui garantit le "D" de ACID.
CKPTCheckpointMet Ă  jour les en-tĂȘtes des Datafiles et Controlfiles pour dire "jusqu'ici, tout est sauvĂ©". Signale Ă  DBWn d'Ă©crire.
SMONSystem MonitorGÚre la récupération au démarrage (Crash Recovery) : applique les Redo Logs, puis annule les transactions non committées (Rollback).
PMONProcess MonitorNettoie les connexions "sales" (processus utilisateurs plantés), libÚre les verrous et la ressource PGA.
Structure Physique
  • Control Files (.ctl) : Le cerveau. Contient le nom de la DB, le timestamp, l'emplacement des fichiers, le SCN actuel. Sans lui, impossible de dĂ©marrer (MOUNT).
  • Data Files (.dbf) : Les donnĂ©es rĂ©elles. Ils appartiennent Ă  un Tablespace logique.
  • Online Redo Logs (.log) : Le journal de bord. Écritures sĂ©quentielles circulaires. En cas de crash, on rejoue ces fichiers.
  • SPFILE (Server Parameter File) : Fichier binaire de configuration (mĂ©moire, paramĂštres).
Structure Logique
                            DATABASE
                            └── TABLESPACE (ex: USERS, SYSTEM, UNDO)
                            └── SEGMENT (ex: Table EMP, Index EMP_IDX)
                            └── EXTENT (Groupe contigu de blocs)
                            └── BLOCK (UnitĂ© I/O, ex: 8KB)

Tablespace SYSTEM : Dictionnaire de données (appartenant à SYS).
Tablespace UNDO : Stocke les images "avant modification" pour le Rollback et la lecture cohérente (MVCC).

Architecture Multitenant (12c, 19c, 21c)

Avant 12c, 1 Instance = 1 Database. Maintenant, 1 Instance (CDB) gĂšre plusieurs Databases "virtuelles" (PDB).

ComposantDescription
CDB (Container DB)La "coquille" racine (CDB$ROOT). Elle contient les processus Oracle et la mémoire (SGA). Elle ne stocke pas de données utilisateur.
PDB (Pluggable DB)Les bases de données "métier" (HR, FINANCE). Elles sont isolées. Pour le développeur, une PDB ressemble à une base classique.
Avantages1. Consolidation : Un seul SGA, un seul background process pour 50 bases.
2. Portabilité : On peut débrancher une PDB d'un serveur et la rebrancher sur un autre (Unplug/Plug) en quelques secondes.
                    -- Connexion au Root
                    SQL> CONN / AS SYSDBA
                    SQL> SHOW CON_NAME; -- CDB$ROOT

                    -- Aller dans une PDB
                    SQL> ALTER SESSION SET CONTAINER = pdb_finance;
                    SQL> SHOW CON_NAME; -- PDB_FINANCE
1.1 — Oracle Enterprise Manager (OEM / Cloud Control) — Supervision & Tuning en production
Pourquoi OEM est “le cockpit DBA” en production

OEM (Cloud Control) sert de tour de contrĂŽle : surveillance multi-cibles, alerting, diagnostics, reporting, configuration & compliance. En environnement Oracle “sĂ©rieux”, OEM devient le point d’entrĂ©e : observer → comprendre → agir → prouver (reports).

Ce que OEM remplace (ou standardise)
BesoinSans OEMAvec OEM
Vue multi-DBscripts + bricolageconsole centralisée
Alertingcron/grepseuils + actions + historique
Diagnosticapproche “à l’Ɠil”AWR/ASH/ADDM intĂ©grĂ©s (si packs)
CapacityExcel / estimationstendances + forecast
ConformitécontrÎles manuelspolicies / drift / audit
Vision prod : OEM = “pilotage”. Les dashboards externes (Grafana/SaaS) = “observabilitĂ© full-stack”. Tu peux/DOIS garder les deux : Oracle deep + corrĂ©lation systĂšme/app.
Diagramme mental : OEM comme pipeline “signal → enquĂȘte → action”
[Cibles]      [Collecte]         [Analyse]                 [Action]
                            DB/ASM/RAC --> Agent OEM --> Metric Store + Baselines --> Alerts/Incidents
                            |              |                 |                         |
                            |              |                 |                         +--> Notifications (mail/webhook)
                            |              |                 +-- Perf (AWR/ASH/ADDM)   +--> Runbooks / opérateurs
                            |              +--> Config/Compliance                       +--> Jobs (maintenance)
                            +--> OS/Host (selon scope)                                  +--> Reporting (audit/capacity)
Dans une phrase
“OEM te dit : ce qui casse, depuis quand, sur quelles DB/instances, avec quel impact, et te donne un chemin d’investigation standard.”
Architecture OEM (Cloud Control) — cibles, agents, OMS, dĂ©pĂŽt
Schéma (simplifié, mais fidÚle au concept)
 +---------------------------+              +---------------------------+
                            |         Console UI         |              |    Notifications/ITSM      |
                            |  Dashboards / Reports      | ----       |  Email / Webhook / Ticket  |
                            +---------------------------+      |       +---------------------------+
                            ^                  Alerts
                            |                   |
                            |                   v
                            +---------------------------+   +---------------------------+
                            |      OMS (Management      |   |  Policies / Baselines     |
                            |       Service)            |---|  Rules / Incidents        |
                            +---------------------------+   +---------------------------+
                            |
                            | writes/reads
                            v
                            +---------------------------+
                            |  OEM Repository (DB)      |
                            |  Metrics / history / conf |
                            +---------------------------+
                            ^
                            | agent upload
                            +--------------+--------------+------------------------------+
                            |        Agents OEM sur les hĂŽtes / cibles                   |
                            |  - DB targets (instance/CDB/PDB), listeners, ASM, host     |
                            +--------------+--------------+------------------------------+
                            |                              |
                            v                              v
                            +------------------+             +------------------+
                            | Oracle DB target |             | Host/OS target   |
                            +------------------+             +------------------+
Point clé : la qualité OEM dépend de 3 choses : (1) métriques pertinentes, (2) seuils calibrés par baseline, (3) runbooks/actions (sinon alert fatigue).
Checklist déploiement (vue DBA)
ÉtapeButÀ valider
Définir périmÚtre ciblesDB/ASM/RAC/Hostinventaire + criticité
Installer agentscollectelatence réseau, firewall
Configurer repositoryhistoriquecapacité / maintenance
Importer templatesstandardisationmĂȘmes rĂšgles partout
Baselinesseuils intelligentspĂ©riode “saine”
Canaux d’alerterĂ©actionmail/webhook/ITSM
RunbooksMTTR basaction immédiate
Erreurs classiques (à éviter)
  • Trop d’alertes → personne ne lit. RĂ©sultat : incident non dĂ©tectĂ©.
  • Seuils statiques “au pif” → faux positifs / faux nĂ©gatifs.
  • Pas de runbook → OEM sonne
 mais personne ne sait quoi faire.
  • Repo OEM sous-dimensionnĂ© → console lente, historique inutilisable.
MĂ©triques & Dashboards (prod) — ce qui est rĂ©ellement utile
Dashboard “SRE/Prod” (signaux rapides)
SignalCe que tu veux voirLecture
CPUDB CPU vs Host CPUCPU bound vs OS saturation
DB TimeDB Time, AAScharge réelle cÎté DB
WaitsTop wait eventsoĂč se perd le temps
Sessionsactive/blocked/new logonspics / runaway / locks
ErrorsORA- rate / listener errorsbug / attaque / config
Storagetablespace / FRA / ASMrisque incident imminent
Pattern : 1 dashboard “SLO” (latence/erreurs), 1 dashboard “DB internals” (waits/SQL), 1 dashboard “capacity” (disque/FRA/archives).
Dashboard “DBA” (investigation)
BlocTu cherchesAction
Top SQLrĂ©gression / nouvelle requĂȘteSQL Monitor + plan
Concurrencylocks, enqueues, latchesASH + blockers
IO profilehot objects / latencesegments + storage
Parsinghard parse / library cachebinds / pool
Redocommit latency / log syncapp commits / I/O redo
Diagramme : “DB Time se dĂ©compose en
”
DB TIME = DB CPU + Wait Time
                            Wait Time ≈ IO waits + Concurrency waits + Commit/Redo waits + Others

                            Si DB CPU >> waits  → CPU bound (SQL/parse)
                            Si waits dominent   → chercher l’évĂ©nement principal (IO/locks/log sync
)
Alerting “pro” — Ă©viter l’alert fatigue (et dĂ©tecter avant la panne)
Stratégie de seuils (baseline-first)
  • DĂ©finir une pĂ©riode saine (baseline) : jours ouvrĂ©s / batch / pics.
  • Seuils = Ă©cart Ă  la baseline + seuils absolus (ex: FRA 90%).
  • DiffĂ©rencier warning vs critical + dĂ©lai (persistant X minutes).
  • Chaque alerte doit avoir : owner, runbook, action.
Table d’alertes recommandĂ©es (production)
FamilleSignalWarnCritRunbook (1Ăšre action)
StorageTablespace usage80%90%identifier segments + plan extend/purge
StorageFRA usage80%90%archivelogs, backups, rétention
PerfDB Time / AAS+X% baseline+Y% baselineTop waits + top SQL (AWR/ASH)
ConcurrencyBlocked sessions> 0 persistant> Ntrouver blocker + SQL_ID + app owner
StabilityORA- rateburstburst + persistantcorréler release/logs + rollback
IORead latencyp95 haussep99 haussestorage path + hot objects
Diagramme : pipeline d’alerte “OEM → action”
Metric breach
                            |
                            v
                            Incident (OEM)  ---> auto-ticket (option)
                            |
                            +--> Notification (mail/webhook) --> on-call
                            |
                            +--> Runbook (lien) : "quoi regarder / quoi faire"
                            |
                            v
                            Investigation : AWR/ASH/SQL Monitor + logs
                            |
                            v
                            Fix (SQL / config / storage / app) + validation baseline
Tip : pour chaque alerte critique, ajoute un champ “Definition of Done” : “comment on prouve que c’est rĂ©solu ?” (retour baseline, p95 normal, plus de blocage, etc.)
Anti-patterns (les pires)
- Alerte sur ratios "magiques" sans contexte - Alerte sans runbook - Seuils identiques sur toutes les DB (sans baseline) - Critique immédiat sans délai (bruit) - 200 alerts/day => plus personne ne regarde
Tuning via OEM — quand tu bascules dans AWR/ASH/ADDM / SQL Monitor
Workflow “incident perf” (OEM-guided)
1) SymptĂŽme : DB Time↑ / latence app↑ / sessions bloquĂ©es
                            2) OEM : ouvrir la cible DB → Performance home
                            3) Identifier :
                            - Top wait events (dominant)
                            - Top SQL (elapsed / CPU / IO)
                            - AAS & sessions actives
                            4) Basculer :
                            - ASH (qui attend quoi, SQL_ID, blocker)
                            - SQL Monitor (requĂȘte lourde)
                            - AWR report (période incident vs baseline)
                            5) Action :
                            - SQL tuning (plan/stats/index/rewrite)
                            - Concurrency (locks/app)
                            - Storage/IO (hot objects / path)
                            6) Validation : retour baseline + fermeture incident + postmortem
Table “symptîme → outil”
SymptĂŽmeOutilTu veux obtenir
pannes intermittentesASHsessions actives / waits
dégradation sur 2hAWRdiff baseline / top SQL
requĂȘte batch lenteSQL MonitoroĂč le plan consomme
diagnostic globalADDMfindings + priorité
Diagramme : “Top wait” → hypothùses
Top Wait Event                    HypothĂšses typiques
                            --------------------------------------------------------------
                            db file sequential read           index reads / IO latency
                            db file scattered read            full scans / stats/plan
                            log file sync                     commits fréquents / redo IO
                            enq: TX - row lock contention     locks applicatifs / transactions
                            library cache lock/pin            parsing / invalidations / shared pool
                            gc* (RAC)                         interconnect / hot blocks / skew
Important : OEM t’aide Ă  “naviguer” vite. Mais la qualitĂ© du fix dĂ©pend de la discipline : mesure → hypothĂšse → test → validation.
Check “SQL rĂ©gression” (ultra utile)
- La requĂȘte existait avant ? (release) - Plan a changĂ© ? (stats, binds, cardinalitĂ©) - Nouveau predicate/Join ? - Stats stale / histogram manquant ? - CardinalitĂ© estimĂ©e vs rĂ©elle (SQL Monitor) - Solution : stats, rewrite, index, baseline/plan control (prudence)
Jobs & Automation — OEM comme orchestrateur DBA
Ce que tu automatises classiquement
JobButFréquenceRisques
Health checksdĂ©tection early5–15 minbruit si mal calibrĂ©
Stats collectionplans stablesdaily/weeklycharge (fenĂȘtre)
Tablespace auditéviter saturationhourly/dailyaucun si read-only
Backup verificationrestores fiablesdailytemps/IO
Compliance scansdrift / sécuritéweeklyaucun
RĂšgle : tout job doit ĂȘtre “safe-by-default” + logs + rollback (si action).
Diagramme : OEM jobs → preuves (audit)
[Job OEM] --> [Exécution] --> [Résultat] --> [Evidence/Report]
                            |             |             |               |
                            |             |             +--> OK/FAIL     +--> PDF/HTML export / historique
                            |             +--> logs
                            +--> schedule + notifications
Conseil trĂšs prod
SĂ©pare "dĂ©tection" (read-only) et "remĂ©diation" (write). La remĂ©diation doit ĂȘtre explicite, tracĂ©e, et validĂ©e.
CapacitĂ© & Reporting — prouver, prĂ©voir, planifier
Capacity planning : ce que tu veux anticiper
ObjetMétriqueButDécision
Data growthGB/day, tablespacesprévenir saturationextend/move/partition
FRArétention archivelogséviter blocagepolicy / storage
CPUAAS trendprévoir scaleoptimiser vs ajouter CPU
IOlatence + throughputĂ©viter “IO wall”storage tier / tuning SQL
En entreprise : les reports OEM servent Ă  convaincre (budget / change management).
Rapports utiles (et lisibles)
  • Weekly health report : incidents, top alerts, top SQL, capacity delta.
  • Monthly capacity : croissance, FRA, storage, tendances CPU/IO.
  • Post-incident : timeline, mĂ©triques, root cause, action, prĂ©vention.
Diagramme : “reporting = preuve”
Mesure (avant) ---> Changement ---> Mesure (aprĂšs) ---> Conclusion (ROI/risque)
SĂ©curitĂ© & RBAC — OEM doit ĂȘtre “safe”
Principes
  • Comptes OEM : RBAC strict (DBA, viewer, auditor, ops).
  • Agents : accĂšs rĂ©seau minimal, segmentation.
  • Audit : actions OEM tracĂ©es (qui a fait quoi, quand).
  • Principe du moindre privilĂšge sur les cibles DB (collecte vs action).
ModĂšle RBAC (exemple)
RĂŽlePeut voirPeut faireInterdit
Viewerdashboardsaucune actionjobs, config
Opsalerts/incidentsrunbooks, acktuning actions
DBAperf + configjobs maintenanceactions non validées
Auditorreportsexporttoute modification
Diagramme : zones de confiance
[Admin Users] ---RBAC---> [OEM UI/OMS] ---agents---> [DB targets]
                            |                         |
                            |                         +--> Repository (metrics/history)
                            |
                            +--> Audit trail (who/when/what)
Bon rĂ©flexe : OEM = surface d’administration majeure → traite-le comme un composant “Tier-0”.
Packs / Licensing — la rĂ©alitĂ© en production

OEM “de base” couvre dĂ©jĂ  la supervision. Mais les diagnostics/tuning avancĂ©s s’appuient souvent sur des packs (ex: fonctionnalitĂ©s AWR/ASH/ADDM/SQL Monitoring selon contexte). Dans un environnement entreprise, la question “qu’est-ce qui est autorisĂ©/licenciĂ© ?” fait partie du mĂ©tier DBA.

FonctionValeurRemarque
Monitoring centralisévisibilité multi-DBsocle OEM
Diagnostics historiquesforensic + trendssouvent lié à AWR/ASH/ADDM
SQL deep analysisplans/progrĂšsSQL Monitoring / tuning
Compliancepolicies / driftselon modules/options
Pratique : en entretien DBA, on attend que tu saches distinguer : “outil dispo” ≠ “option licencĂ©e” ≠ “autorisĂ© en prod”.
Playbooks incidents — “quoi regarder” en 5 minutes
IncidentSymptĂŽmesDans OEMEnsuiteFix typique
CPU 100%latence globaleDB Time vs DB CPU, Top SQLSQL Monitor + planrewrite/stats/index/binds
Locksblocked sessionsBlocking sessions, ASHidentifier blockercorriger logique app / commits
IO boundread latency highTop waits IO, segmentsAWR compare baselinehot objects / storage / plan
FRA pleinarchivelogs bloquentFRA usage + alertlogs backuprétention / purge / capacity
ORA- bursterreurs soudaineserror metrics / incidentscorréler releaserollback / fix app / patch
Mini runbook (template) — à coller dans tes tickets
1) SymptĂŽme / impact / start time
                            2) OEM target : DB + instance + host
                            3) Graphs : DB Time, AAS, CPU, top waits
                            4) Top SQL : SQL_ID, module, user, plan changes
                            5) HypothĂšse : (CPU/IO/locks/redo)
                            6) Action : (SQL fix / config / storage / app)
                            7) Validation : retour baseline + métrique OK
                            8) Postmortem : cause + prévention + seuils ajustés
Diagramme “MTTR” (ce qui fait gagner du temps)
MTTR ↓ = Alert (bon signal) + Runbook + Outil (AWR/ASH/SQL Mon) + Owner clair
                            MTTR ↑ = Bruit + Seuils au hasard + Pas de baseline + Pas d'ownership
Conseil : OEM doit ĂȘtre configurĂ© pour produire des alertes actionnables, sinon il devient une “machine Ă  bruit”.
1.3 ModÚle de Données : La Mécanique de Précision
La Poupée Russe du Stockage

Oracle gÚre l'espace de maniÚre trÚs structurée. Un fichier physique (Datafile) appartient à un conteneur logique (Tablespace).

  • 1. Tablespace (Logique) : UnitĂ© d'administration (ex: TBS_DATA, TBS_INDEX). Peut contenir plusieurs Datafiles.
  • 2. Segment (Objet) : Tout objet qui consomme de l'espace (Table, Index, Partition, LOB). Un segment ne peut pas traverser un Tablespace, mais peut traverser des Datafiles.
  • 3. Extent (Allocation) : Un groupe contigu de blocs. Quand une table grossit, Oracle alloue un nouvel "Extent".
  • 4. Oracle Block (Atomique) : La plus petite unitĂ© d'I/O (gĂ©nĂ©ralement 8KB).
High Water Mark (HWM)

Concept critique pour la performance.

La HWM marque le "point le plus haut" jamais atteint par les donnĂ©es dans un segment. Un FULL TABLE SCAN lit toujours tous les blocs jusqu'Ă  la HWM, mĂȘme si vous avez supprimĂ© (DELETE) toutes les lignes.

Solution : TRUNCATE (réinitialise la HWM) ou ALTER TABLE ... SHRINK SPACE.

Anatomie d'un Bloc (8KB par défaut)

Contrairement Ă  un filesystem, Oracle formate ses propres blocs.

                    +--------------------------------------------------+
                    | Header (Type de bloc, adresse, SCN du bloc...)   |
                    |--------------------------------------------------|
                    | ITL (Interested Transaction List) - Verrous      |
                    |--------------------------------------------------|
                    | Table Directory / Row Directory                  |
                    |--------------------------------------------------|
                    |                                                  |
                    |           DATA (Les lignes croissent ↓)          |
                    |                                                  |
                    |                   ESPACE LIBRE                   |
                    |                                                  |
                    |           (Le Footer croüt ↑)                    |
                    +--------------------------------------------------+
ParamĂštreDescription
PCTFREE% d'espace réservé aux futures mises à jour (UPDATE) qui agrandissent une ligne. (Défaut 10%). Si trop bas = Row Migration (lenteur).
ITLSlots pour gérer les transactions concurrentes sur le bloc. Si le bloc est trÚs "chaud", les ITL peuvent saturer.
Row ChainingQuand une ligne est plus grande que 8KB, elle est coupée en morceaux sur plusieurs blocs (mauvais pour les I/O).
Tablespace UNDO (Le Time Machine)

Stocke les "anciennes valeurs" avant modification. C'est vital pour :

  1. Rollback : Annuler une transaction (ROLLBACK).
  2. Read Consistency : Garantir que si je lance un SELECT Ă  10h00 qui dure 15min, je ne vois PAS les updates faits Ă  10h05 par quelqu'un d'autre.
  3. Flashback Query : SELECT * FROM table AS OF TIMESTAMP (hier).

Erreur ORA-01555 (Snapshot too old) : Vous essayez de lire une vieille donnée qui a été écrasée dans l'UNDO (car trop petite rétention).

Tablespace TEMP (Le Brouillon)

Utilisé pour les opérations qui ne tiennent pas en mémoire RAM (PGA).

  • Gros tris (ORDER BY, GROUP BY).
  • CrĂ©ation d'index.
  • Hash Joins massifs.
  • Global Temporary Tables (GTT).

Si le TEMP est plein, la requĂȘte plante (ORA-01652: unable to extend temp segment).

La confusion classique

Dans Postgres/SQL Server, un User se connecte et accĂšde Ă  plusieurs Schemas.

Dans Oracle : 1 USER = 1 SCHEMA.

  • Quand vous crĂ©ez un utilisateur CREATE USER toto, vous crĂ©ez implicitement un conteneur d'objets (Schema) nommĂ© TOTO.
  • Toto est "propriĂ©taire" de ses objets (TOTO.MATABLE).
  • Pour accĂ©der Ă  la table de TOTO en tant que TITI, il faut :
    1. Un GRANT (GRANT SELECT ON TOTO.MATABLE TO TITI).
    2. Un SYNONYM (pour éviter de taper le préfixe) : CREATE SYNONYM MATABLE FOR TOTO.MATABLE.
                    -- Changer de contexte de schema courant
                    ALTER SESSION SET CURRENT_SCHEMA = TOTO;
                    SELECT * FROM MATABLE; -- Cherche TOTO.MATABLE
1.4 PL/SQL : La Puissance du Code Embarqué
Le Bloc PL/SQL

PL/SQL est un langage procédural (comme Ada) qui enveloppe le SQL. Il permet de traiter la logique métier au plus prÚs des données (Data Locality).

                            DECLARE
                            -- Déclaration des variables
                            v_salaire  employees.salary%TYPE; -- Hérite du type de la colonne
                            v_emp_rec  employees%ROWTYPE;     -- Hérite de toute la ligne
                            e_trop_cher EXCEPTION;            -- Exception personnalisée
                            BEGIN
                            -- Logique Métier
                            SELECT * INTO v_emp_rec
                            FROM employees WHERE employee_id = 100;

                            IF v_emp_rec.salary > 20000 THEN
                            RAISE e_trop_cher;
                            END IF;

                            v_salaire := v_emp_rec.salary * 1.10;

                            UPDATE employees SET salary = v_salaire WHERE employee_id = 100;
                            COMMIT;
                            EXCEPTION
                            WHEN NO_DATA_FOUND THEN
                            DBMS_OUTPUT.PUT_LINE('Employé introuvable');
                            WHEN e_trop_cher THEN
                            DBMS_OUTPUT.PUT_LINE('Erreur: Salaire trop élevé');
                            WHEN OTHERS THEN
                            ROLLBACK;
                            RAISE; -- Relance l'erreur pour l'appli appelante
                            END;
                            /
Concepts Clés
  • %TYPE / %ROWTYPE : Vital pour la maintenance. Si la colonne change de taille en base, le code s'adapte automatiquement Ă  la recompilation.
  • EXCEPTION : Gestion robuste des erreurs. WHEN OTHERS doit toujours ĂȘtre suivi d'un RAISE (ne jamais avaler les erreurs silencieusement).
  • Curseurs Explicites : Pour traiter plusieurs lignes ligne par ligne (Lent, voir Tab 3).
Pourquoi utiliser des Packages ?

En entreprise, on n'écrit jamais de procédures "standalone". On utilise des Packages.

AvantageDescription
EncapsulationSépare la Spécification (Interface publique) du Body (Code privé). On peut modifier le code sans casser les dépendances.
PerformanceTout le package est chargé en RAM (Shared Pool) au premier appel.
PersistanceLes variables de package persistent pendant toute la session (Session State).
SurchargeOn peut avoir plusieurs fonctions avec le mĂȘme nom mais des paramĂštres diffĂ©rents (Overloading).
                    -- 1. SPECIFICATION (L'interface)
                    CREATE OR REPLACE PACKAGE pkg_hr IS
                    -- Variable publique (constante)
                    c_bonus CONSTANT NUMBER := 0.15;

                    -- Fonction publique
                    PROCEDURE augmenter_salaire(p_dept_id NUMBER);
                    END pkg_hr;
                    /

                    -- 2. BODY (L'implémentation)
                    CREATE OR REPLACE PACKAGE BODY pkg_hr IS
                    -- Fonction privée (invisible de l'extérieur)
                    FUNCTION est_eligible(p_emp_id NUMBER) RETURN BOOLEAN IS ... END;

                    PROCEDURE augmenter_salaire(p_dept_id NUMBER) IS
                    BEGIN
                    -- Code complexe...
                    END;
                    END pkg_hr;
                    /
Context Switching : L'ennemi N°1

Chaque fois que le moteur PL/SQL exécute une commande SQL, il y a un "Context Switch" (coûteux). Dans une boucle de 1 million de lignes, c'est la mort de la performance.

Solution : Traiter par lots (Bulk).

Mauvaise Pratique (Row-by-Row)
                            -- Lent : 1 million de switchs
                            FOR rec IN (SELECT id FROM employees) LOOP
                            UPDATE employees SET s = s*1.1 
                            WHERE id = rec.id;
                            END LOOP;
Bonne Pratique (Bulk)
                            -- Rapide : 1 switch
                            DECLARE
                            TYPE t_id_list IS TABLE OF NUMBER;
                            v_ids t_id_list;
                            BEGIN
                            -- 1. Lire tout d'un coup
                            SELECT id BULK COLLECT INTO v_ids 
                            FROM employees;

                            -- 2. Écrire tout d'un coup
                            FORALL i IN 1..v_ids.COUNT
                            UPDATE employees SET s = s*1.1 
                            WHERE id = v_ids(i);
                            END;

Note : Toujours utiliser LIMIT avec BULK COLLECT pour ne pas exploser la RAM (PGA).

Triggers

Code déclenché automatiquement sur INSERT/UPDATE/DELETE.

                            CREATE OR REPLACE TRIGGER trg_audit_emp
                            AFTER UPDATE OF salary ON employees
                            FOR EACH ROW
                            BEGIN
                            IF :NEW.salary > :OLD.salary * 1.5 THEN
                            INSERT INTO audit_log VALUES (
                            USER, SYSDATE, :OLD.salary, :NEW.salary
                            );
                            END IF;
                            END;
                            /

Attention : Les triggers ralentissent les DML, sont invisibles pour le développeur, et peuvent causer des "Mutating Table Errors" si mal codés.

DBMS_SCHEDULER (Le Cron Oracle)

Pour les traitements asynchrones ou récurrents.

                            BEGIN
                            DBMS_SCHEDULER.CREATE_JOB (
                            job_name        => 'JOB_PURGE_LOGS',
                            job_type        => 'PLSQL_BLOCK',
                            job_action      => 'BEGIN pkg_maint.purge; END;',
                            start_date      => SYSTIMESTAMP,
                            repeat_interval => 'FREQ=DAILY; BYHOUR=2',
                            enabled         => TRUE
                            );
                            END;
                            /
1.5 Performance : Tuning & Optimizer
Cost-Based Optimizer (CBO)

L'Optimiseur décide du "chemin" pour récupérer les données. Il se base sur des mathématiques (Coût), pas sur des rÚgles (RBO est mort depuis 10g).

La Formule Magique
COÛT = I/O + CPU + NET

Pour calculer ce coût, le CBO a besoin de Statistiques à jour (via DBMS_STATS).

  • Num Rows : Combien de lignes dans la table ?
  • Blocks : Combien de blocs physiques ?
  • Histogrammes : La distribution des donnĂ©es (est-ce que 'STATUS=CLOSED' reprĂ©sente 1% ou 90% des lignes ?).
ProblĂšmes Courants
  • Stale Stats : Stats pĂ©rimĂ©es → Le CBO croit que la table est petite alors qu'elle est Ă©norme → Mauvais plan (Full Scan au lieu d'Index).
  • Bind Peeking : Le CBO regarde la valeur de la variable bindĂ©e au 1er appel (Hard Parse) et fige le plan. Si la valeur change drastiquement aprĂšs, le plan reste figĂ© (et peut ĂȘtre mauvais).
Lire un Plan d'Exécution

Utilisez EXPLAIN PLAN FOR ... ou DBMS_XPLAN.DISPLAY.

OpérationDescriptionQuand c'est bon/mauvais
TABLE ACCESS FULLLit tous les blocs jusqu'à la HWM.✅ Bon pour lire > 20% de la table.
❌ Catastrophique pour lire 1 ligne.
INDEX UNIQUE SCANParcours l'arbre B-Tree pour trouver 1 ROWID.✅ Le top pour WHERE ID = ....
INDEX RANGE SCANParcours l'index pour une plage de valeurs.✅ Bon pour les dates ou clĂ©s Ă©trangĂšres.
NESTED LOOPSBoucle imbriquĂ©e (Pour chaque ligne de A, je cherche dans B).✅ IdĂ©al pour les petites quantitĂ©s de donnĂ©es (OLTP).
HASH JOINCrĂ©e une table de hachage en mĂ©moire.✅ IdĂ©al pour croiser deux grosses tables (Reporting/Batch).
Types d'Index
  • B-Tree (DĂ©faut) : Excellent pour cardinalitĂ© Ă©levĂ©e (IDs, Dates, Noms).
  • Bitmap : Excellent pour cardinalitĂ© faible (Sexe, Statut) et requĂȘtes complexes (AND/OR). ⚠ Verrouille massivement lors des updates (Dangers en OLTP).
Partitioning (Option payante $$)

Découper une table géante en morceaux plus petits (physiquement indépendants).

  • Range : Par date (Janvier, FĂ©vrier...).
  • List : Par rĂ©gion (Nord, Sud...).
  • Hash : Distribution alĂ©atoire (pour la performance I/O).
  • Interval : Range automatique (crĂ©e la partition mensuelle tout seul).

Partition Pruning : Le CBO est assez malin pour ne lire QUE la partition concernée (ex: WHERE date > '2024-01-01' ne lit pas 2023).

Parallel Query (PQ)

Utiliser plusieurs processus CPU pour une seule requĂȘte.

SELECT /*+ PARALLEL(t, 4) */ * FROM grosse_table t;
  • Avantage : Divise le temps de rĂ©ponse par N (idĂ©alement).
  • Risque : Peut tuer le serveur en consommant tout le CPU et les I/O. À rĂ©server aux batchs de nuit ou Datawarehouse.
La méthode "Time-Based Tuning"

Ne devinez pas. Regardez pourquoi la base attend.

                    DB Time = CPU Time + Wait Time
Wait EventSignification ProbableSolution Piste
db file scattered readFull Table Scan (Lecture multi-blocs).Manque d'index ? Stats périmées ?
db file sequential readLecture d'index (Mono-bloc).Index inefficace ? Fragmentation ? (Normal en OLTP).
log file syncAttente d'écriture du Redo Log sur disque (COMMIT).Disques Redo lents ? Trop de commits (commit dans une boucle) ?
enq: TX - row lock contentionVerrouillage applicatif.Deux sessions modifient la mĂȘme ligne. Revoir l'appli.

Outils : AWR (Rapport historique) et ASH (Temps réel).

1.6 Concurrence : Locks, Latches & Deadlocks
La Guerre des Ressources

Oracle doit gérer des milliers d'utilisateurs simultanés. Il utilise deux mécanismes distincts :

1. LOCK (Verrou) - Logique
  • Cible : ProtĂšge les donnĂ©es (Lignes, Tables).
  • DurĂ©e : Toute la transaction (jusqu'au COMMIT/ROLLBACK).
  • Mode : File d'attente (Queue). Si A tient le verrou, B attend patiemment son tour.
  • SymptĂŽme : L'application "gĂšle" (hangs).
2. LATCH - Physique
  • Cible : ProtĂšge les structures mĂ©moire (SGA, Hash Chains).
  • DurĂ©e : Microsecondes. Juste le temps de lire/Ă©crire en RAM.
  • Mode : "Spinning". Si A tient le latch, B boucle sur le CPU ("Est-ce libre ? Est-ce libre ?") pour l'obtenir le plus vite possible.
  • SymptĂŽme : Explosion du CPU (System Time).
Les Verrous DML (Enq: TX & TM)

Oracle utilise le principe "Readers don't block Writers, Writers don't block Readers" (grĂące Ă  l'UNDO).

TypeNomDescription
TXTransaction LockVerrou de ligne (Row Lock). Acquis dÚs qu'on fait un UPDATE/DELETE. Il n'existe pas physiquement en RAM (il est stocké dans le bloc de données, via l'ITL).
TMTable LockEmpĂȘche qu'on fasse un DROP TABLE pendant que quelqu'un fait un UPDATE dedans.
Deadlock (ORA-00060)

Situation sans issue : Session A attend B, et Session B attend A.

                    -- Oracle détecte le deadlock automatiquement aprÚs 3 secondes.
                    -- Il choisit une "victime" (souvent celle qui a fait le moins de travail)
                    -- et annule son instruction (Statement Rollback) avec ORA-00060.
Contention Mémoire (Latches & Mutex)

Si votre CPU est Ă  100% mais que les I/O disques sont faibles, c'est souvent un problĂšme de Latch.

  • cache buffers chains : "Hot Block". Tout le monde veut lire le mĂȘme bloc en mĂ©moire (ex: petite table de rĂ©fĂ©rence sans index, ou index racine).
  • shared pool latch : "Hard Parse" excessif. L'application n'utilise pas de Bind Variables (littĂ©raux) et sature la zone SQL.

Mutex (Mutual Exclusion) : Version plus légÚre et rapide des latches (introduit en 10g/11g) pour protéger les curseurs SQL (Library Cache).

Qui bloque qui ? (La requĂȘte pompier)

Utilisez cette requĂȘte pour identifier la racine du blocage (Root Blocker).

                    SELECT
                    s1.username || '@' || s1.machine || ' (SID=' || s1.sid || ')' AS BLOCKER,
                    s2.username || '@' || s2.machine || ' (SID=' || s2.sid || ')' AS WAITER,
                    w.event,
                    w.seconds_in_wait
                    FROM v$session s1, v$session s2, v$session_wait w
                    WHERE s2.sid = w.sid
                    AND s2.blocking_session = s1.sid
                    AND s2.blocking_session_status = 'VALID';
Résolution
                    -- 1. Identifier le SQL du bloqueur
                    SELECT sql_text FROM v$sql WHERE sql_id = (SELECT sql_id FROM v$session WHERE sid = [SID_BLOCKER]);

                    -- 2. Tuer la session (si nécessaire)
                    ALTER SYSTEM KILL SESSION '[SID],[SERIAL#]' IMMEDIATE;

Vues Clés : V$LOCK, V$SESSION, V$SESSION_BLOCKERS (12c+).

1.7 Le CƓur ACID : Transactions, UNDO & REDO
Le "Fast Commit" Oracle

Contrairement à l'intuition, un COMMIT n'écrit PAS les données modifiées dans les fichiers de données (Datafiles). Ce serait trop lent (I/O aléatoires).

Que fait un COMMIT ?
  1. Il génÚre un SCN (System Change Number) : l'horloge logique de la DB.
  2. Il demande à LGWR de flusher le Redo Log Buffer vers le fichier Online Redo Log sur disque (I/O Séquentiel = Ultra Rapide).
  3. Il marque la transaction comme "Committed" dans l'en-tĂȘte de transaction (Undo Header).
  4. Il rend la main Ă  l'utilisateur ("Commit complete").

Les données réelles ("Sales") restent en RAM (Buffer Cache) et seront écrites plus tard par DBWn (Lazy Write).

Mappage ACID
  • Atomicity : Garantie par l'UNDO (Rollback possible).
  • Consistency : Garantie par l'UNDO (Lectures cohĂ©rentes).
  • Isolation : Garantie par les LOCKS.
  • Durability : Garantie par le REDO (Log Writer).
REDO : L'Assurance Vie

Le Redo Log enregistre tous les changements ("Change Vectors") appliqués aux blocs. C'est le journal de bord.

ComposantRĂŽle
Online Redo LogsFichiers circulaires (min 2 groupes). LGWR écrit dedans en continu. Quand le Groupe 1 est plein, il passe au Groupe 2 (Log Switch).
Archived LogsCopie historique des Online Logs. Quand un Log Switch survient, le processus ARCn copie le log plein vers une zone d'archive. Indispensable pour le PITR (Point-in-Time Recovery).
Modes d'opération (Crucial pour DBA)
                    -- Vérifier le mode
                    SELECT log_mode FROM v$database;

                    -- NOARCHIVELOG (Défaut Dev)
                    -- Si on écrase un Redo Log avant de l'archiver, l'historique est perdu.
                    -- Recovery possible uniquement jusqu'au dernier backup complet.

                    -- ARCHIVELOG (Obligatoire Prod)
                    -- Permet le "Backup Ă  chaud" (Hot Backup) et le recovery Ă  la seconde prĂšs.
                    -- Attention : Si la destination d'archive est pleine, la base se fige (Hang).
UNDO : La Machine Ă  Remonter le Temps

Avant de modifier une donnée (ex: changer SALARY de 1000 à 2000), Oracle copie l'ancienne valeur (1000) dans un Segment UNDO.

À quoi ça sert ?
  1. Rollback : Si je change d'avis, je remets le 1000.
  2. Read Consistency : Si un collÚgue lance un SELECT long avant mon commit, Oracle utilise l'UNDO pour lui montrer le 1000 (il ne voit pas mon 2000 non validé).
  3. Flashback Query : SELECT * FROM table AS OF TIMESTAMP (il y a 1h).
L'Erreur ORA-01555 (Snapshot too old)

C'est le cauchemar des dĂ©veloppeurs sur les longues requĂȘtes.

Scénario :
1. Vous lancez un gros rapport à 09h00 (durée 2h).
2. À 09h30, quelqu'un update massivement la table et commit.
3. Oracle stocke l'ancienne image dans l'Undo.
4. À 10h00, l'Undo est plein, Oracle Ă©crase les vieilles images (Logique circulaire).
5. À 10h30, votre rapport arrive sur les lignes modifiĂ©es. Il cherche l'image de 09h00... elle n'existe plus !
=> CRASH : ORA-01555.

Solution : Augmenter UNDO_RETENTION ou la taille du Tablespace UNDO.

Instance Recovery (Automatique)

Scénario : Coupure de courant brutale. La mémoire (RAM) est perdue. Les Datafiles sont incohérents (certains blocs committés n'étaient pas écrits, certains blocs non-committés étaient écrits).

Au redémarrage (STARTUP), processus SMON entre en scÚne :

  1. Rolling Forward (REDO) : SMON lit les Redo Logs et ré-applique TOUS les changements (committés ou non) aux fichiers de données.
    -> À cet instant, la DB est dans l'Ă©tat exact de l'instant du crash (y compris les transactions sales).
  2. Database OPEN : La base est ouverte aux utilisateurs (dispo immédiate).
  3. Rolling Back (UNDO) : En arriĂšre-plan, SMON regarde le Tablespace UNDO pour voir quelles transactions n'avaient pas fait COMMIT. Il les annule.
                    -- Le concept clé :
                    REDO permet de "refaire" le futur perdu (ce qui était en RAM).
                    UNDO permet d' "annuler" le présent faux (les transactions incomplÚtes).
1.8 RMAN : Sauvegarde & Restauration Intelligente
Pourquoi RMAN et pas cp ?

RMAN (Recovery Manager) est le seul outil capable de faire des sauvegardes à chaud (Hot Backup) cohérentes bloc par bloc.

Fonctionnalités Clés
  • Block Aware : RMAN ne sauvegarde que les blocs utilisĂ©s (pas les blocs vides). Il vĂ©rifie le checksum de chaque bloc pour dĂ©tecter la corruption physique.
  • Repository : Les mĂ©tadonnĂ©es des backups sont stockĂ©es dans le Controlfile de la DB cible (ou dans un Recovery Catalog centralisĂ© externe).
  • Retention Policy : GĂšre automatiquement l'obsolescence ("Garde-moi 7 jours de backup").
Configuration de Base
                            RMAN> CONFIGURE CONTROLFILE AUTOBACKUP ON;
                            -- Sauve le controlfile automatiquement aprĂšs chaque backup (CRUCIAL).

                            RMAN> CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 7 DAYS;
                            -- Marque comme "Obsolete" tout ce qui n'est plus nécessaire pour revenir à J-7.
L'Incrémental Oracle (Level 0 vs Level 1)

Oracle gÚre les incrémentaux au niveau bloc physique, pas au niveau fichier.

NiveauDescription
Level 0 (Base)Équivalent Ă  un FULL, mais sert de base de rĂ©fĂ©rence pour les incrĂ©mentaux.
Level 1 (Differential)Sauvegarde tous les blocs modifiés depuis le dernier Level 1 ou Level 0. (Par défaut).
Level 1 (Cumulative)Sauvegarde tous les blocs modifiés depuis le dernier Level 0. (Plus gros, mais restore plus rapide).
Turbo-charge : Block Change Tracking (BCT)

Sans BCT, RMAN doit lire toute la DB pour trouver les blocs modifiés. Avec BCT, un petit fichier binaire note les modifs en temps réel.

                    SQL> ALTER DATABASE ENABLE BLOCK CHANGE TRACKING USING FILE '/u01/oradata/bct.f';
                    -- Résultat : Backup incrémental de 2 minutes au lieu de 4 heures.
La différence vitale : RESTORE vs RECOVER

Comprendre cette nuance sauve des carriĂšres.

  • RESTORE : Copie les fichiers physiques (Datafiles) depuis le Backup vers le disque.
    "Je remets les briques en place." (État du passĂ©).
  • RECOVER : Applique les Redo Logs / Archived Logs pour avancer la base dans le temps.
    "Je rejoue le film jusqu'Ă  maintenant." (État cohĂ©rent).
Scénario : PITR (Point-In-Time Recovery)

"Oups, j'ai droppé une table importante à 14h00. Remets la base à 13h55."

                    RMAN> SHUTDOWN IMMEDIATE;
                    RMAN> STARTUP MOUNT;
                    RMAN> RUN {
                    SET UNTIL TIME "TO_DATE('2025-06-15 13:55:00', 'YYYY-MM-DD HH24:MI:SS')";
                    RESTORE DATABASE;
                    RECOVER DATABASE;
                    }
                    RMAN> ALTER DATABASE OPEN RESETLOGS;
                    -- RESETLOGS : On crée une nouvelle ligne temporelle (Incarnation).
Commandes de Survie
                    -- Lancer un backup complet + les logs
                    RMAN> BACKUP AS COMPRESSED BACKUPSET DATABASE PLUS ARCHIVELOG;

                    -- Vérifier ce qu'on a
                    RMAN> LIST BACKUP;
                    RMAN> LIST BACKUP SUMMARY;

                    -- Vérifier l'intégrité physique (sans restaurer)
                    RMAN> BACKUP VALIDATE DATABASE;

                    -- Maintenance
                    RMAN> CROSSCHECK BACKUP;  -- Vérifie si les fichiers existent sur disque
                    RMAN> DELETE OBSOLETE;    -- Supprime les vieux backups selon la policy
                    RMAN> DELETE EXPIRED;     -- Supprime les entrées orphelines du catalogue

                    -- Monitoring (En SQL)
                    SELECT sid, serial#, context, sofar, totalwork,
                    ROUND(sofar/totalwork*100,2) "%_COMPLETE"
                    FROM v$session_longops
                    WHERE opname LIKE 'RMAN%'
                    AND totalwork != 0;
1.9 Haute Disponibilité : RAC & Data Guard
Real Application Clusters (Shared Everything)

Plusieurs instances (NƓuds) sur plusieurs serveurs accĂšdent Ă  LA MÊME base de donnĂ©es (Fichiers sur stockage partagĂ© SAN/ASM).

Composants Clés
  • Grid Infrastructure (GI) : La couche logicielle (Clusterware) qui gĂšre le cluster avant mĂȘme que la DB ne dĂ©marre.
  • ASM (Automatic Storage Management) : Filesystem et Volume Manager d'Oracle. Distribue les donnĂ©es (Striping) et gĂšre la redondance (Mirroring).
  • Interconnect (RĂ©seau PrivĂ©) : CĂąble rĂ©seau dĂ©diĂ© ultra-rapide entre les nƓuds. Vital.
Cache Fusion (La Magie)

Si le NƓud A veut lire un bloc qui est dans la RAM (Buffer Cache) du NƓud B :

Oracle transfÚre le bloc via le réseau (Interconnect) de la RAM de B vers la RAM de A. C'est plus rapide qu'une lecture disque.

Avantage : Si un nƓud tombe, les autres continuent. ZĂ©ro arrĂȘt de service.

Data Guard : Disaster Recovery (DR)

Maintient une copie transactionnelle exacte (Standby) de la base Primaire, souvent sur un site géographique distant.

Type StandbyFonctionnementUsage
Physical StandbyCopie bloc pour bloc ("Disk based"). Utilise le Redo Apply (rejoue les logs).DR pur. Robuste. Peut ĂȘtre ouverte en lecture seule (Active Data Guard $$).
Logical StandbyTraduit les logs en instructions SQL (SQL Apply).Rare. Permet d'avoir des index différents ou de modifier les données sur la standby (Reporting).
Snapshot StandbyConvertit temporairement la Standby en lecture/Ă©criture pour des tests (ex: recette).Peut ĂȘtre "FlashbackĂ©e" pour redevenir une Physical Standby.
Opérations
  • Switchover : Bascule planifiĂ©e (Maintenance). ZĂ©ro perte de donnĂ©es. Inversion des rĂŽles.
  • Failover : Bascule d'urgence (Crash du primaire). Potentielle perte de donnĂ©es (selon le mode).
Le triangle : Performance vs Sécurité

Comment le Redo est-il transporté vers la Standby ?

ModeTransportRPO (Perte max)Impact Perf Primaire
Max Performance (Défaut)ASYNCQuelques secondes (ce qui est dans le buffer réseau).Aucun. Le Master n'attend pas l'accusé de réception.
Max AvailabilitySYNCZéro.Moyen. Le Master attend l'ACK de la Standby. Si la Standby est injoignable, il bascule temporairement en Async.
Max ProtectionSYNCZĂ©ro (Garanti).ÉlevĂ©. Si la Standby est injoignable, le Master S'ARRÊTE (Shutdown) pour ne pas diverger.
Maximum Availability Architecture (MAA)

Le plan de référence Oracle pour les systÚmes critiques (Banques, Telcos).

                    SITE A (Prod)                     SITE B (Secours)
                    +---------------------+           +---------------------+
                    |      RAC 2 NƓuds    |           |    RAC 2 NƓuds      |
                    | (Node 1) + (Node 2) |  ------>  | (Stby 1) + (Stby 2) |
                    +----------+----------+ Data Guard+----------+----------+
                    |            (Async/Sync)         |
                    Stockage SAN                      Stockage SAN
  • Niveau Local (Site A) : RAC protĂšge contre la panne d'un serveur.
  • Niveau Global (Site A -> B) : Data Guard protĂšge contre la perte du datacenter (incendie, inondation).
  • Application Continuity : Les clients (JDBC/OCI) sont configurĂ©s pour basculer de façon transparente (TAF - Transparent Application Failover).

SCAN (Single Client Access Name) : Le client ne se connecte pas à une IP, mais à un nom DNS (cluster-scan) qui résout vers 3 IPs virtuelles tournantes. Simplifie la config client.

1.10 Sécurité : Le Fort Knox des Données
Principe du Moindre PrivilĂšge

Ne jamais donner DBA ou GRANT ANY... Ă  un compte applicatif.

1. Profils (Politique Mots de passe)
                            CREATE PROFILE app_profile LIMIT
                            FAILED_LOGIN_ATTEMPTS 5
                            PASSWORD_LIFE_TIME 90
                            PASSWORD_LOCK_TIME 1/24  -- 1 heure
                            SESSIONS_PER_USER 50;    -- Anti-DDoS basique

                            ALTER USER mon_app PROFILE app_profile;
2. RĂŽles (RBAC)
                            CREATE ROLE r_app_readonly;
                            GRANT CREATE SESSION TO r_app_readonly;
                            GRANT SELECT ON hr.employees TO r_app_readonly;

                            -- Assigner le rĂŽle (pas les grants directs)
                            GRANT r_app_readonly TO utilisateur_stagiaire;
TDE (Transparent Data Encryption)

Chiffre les données sur le disque (Datafiles, Backups RMAN, Redo Logs). Si quelqu'un vole le disque dur, les données sont illisibles sans le "Wallet" (Keystore).

Mise en place (Tablespace Encryption)
                    -- 1. Créer le Keystore (Wallet)
                    ADMINISTER KEY MANAGEMENT CREATE KEYSTORE '/u01/app/oracle/admin/DB/wallet' IDENTIFIED BY "MotDePasseFort";

                    -- 2. Ouvrir le Keystore
                    ADMINISTER KEY MANAGEMENT SET KEYSTORE OPEN IDENTIFIED BY "MotDePasseFort";

                    -- 3. Créer la Master Key
                    ADMINISTER KEY MANAGEMENT SET KEY IDENTIFIED BY "MotDePasseFort" WITH BACKUP;

                    -- 4. Créer un Tablespace chiffré
                    CREATE TABLESPACE tbs_secure 
                    DATAFILE '/u01/.../secure01.dbf' SIZE 1G 
                    ENCRYPTION USING 'AES256' DEFAULT STORAGE(ENCRYPT);

Note : TDE est transparent pour l'application. Pas de changement de code SQL nécessaire.

Unified Auditing (12c+)

Remplace l'ancien AUDIT_TRAIL=DB. Tout est centralisĂ© dans une vue performante et sĂ©curisĂ©e (en lecture seule mĂȘme pour SYS).

ActionCommande
Créer une policeCREATE AUDIT POLICY pol_acces_salaire ACTIONS SELECT ON hr.employees;
ActiverAUDIT POLICY pol_acces_salaire;
ConsulterSELECT * FROM UNIFIED_AUDIT_TRAIL WHERE object_name = 'EMPLOYEES';
Que doit-on auditer ? (Minimum vital)
  • Logins Ă©chouĂ©s : DĂ©tection de Bruteforce.
  • DDL Critiques : DROP TABLE, ALTER SYSTEM, GRANT.
  • Usage de privilĂšges puissants : SYSDBA actions.
Durcissement (Hardening)

Réduire la surface d'attaque.

Réseau (sqlnet.ora)

Restreindre qui peut contacter le Listener.

                            # $ORACLE_HOME/network/admin/sqlnet.ora

                            # Whitelist IP
                            TCP.VALIDNODE_CHECKING = YES
                            TCP.INVITED_NODES = (127.0.0.1, 192.168.1.50) # App Server uniquement

                            # Chiffrement réseau natif (In-Transit)
                            SQLNET.ENCRYPTION_SERVER = REQUIRED
                            SQLNET.ENCRYPTION_TYPES_SERVER = (AES256)
Comptes par défaut
  • Changer les mots de passe de SYS et SYSTEM immĂ©diatement.
  • Verrouiller les comptes d'exemples : ALTER USER SCOTT ACCOUNT LOCK;
  • Limiter l'accĂšs OS au groupe dba (Linux).
1.11 Écosystùme : Connecter l'App au Moteur
Comment parler Ă  Oracle ?

Contrairement Ă  Postgres, la couche client Oracle est "lourde" et intelligente.

TypeDescriptionUsage
JDBC ThinDriver 100% Java. N'a pas besoin de client Oracle installé.Standard pour les applis Java/Spring Boot. Portable.
OCI (Thick)Utilise les librairies C natives (Instant Client). NĂ©cessaire pour certaines fonctionnalitĂ©s avancĂ©es (TAF, FAN) ou langages non-Java (Python cx_Oracle, Node oracledb).Perf extrĂȘme, Python, C++, .NET (ODP.NET).
Le fichier tnsnames.ora

L'annuaire local des bases. Permet d'utiliser un alias au lieu de l'URL compliquée.

                    # tnsnames.ora
                    PROD_FINANCE =
                    (DESCRIPTION =
                    (ADDRESS = (PROTOCOL = TCP)(HOST = scan-cluster-prod)(PORT = 1521))
                    (CONNECT_DATA =
                    (SERVER = DEDICATED)
                    (SERVICE_NAME = finance.svc.corp)
                    )
                    )

                    -- URL JDBC : jdbc:oracle:thin:@PROD_FINANCE
Pourquoi le Pooling est OBLIGATOIRE sur Oracle

Sur Oracle (architecture Process-based), ouvrir une connexion prend ~100ms Ă  500ms (Fork process, alloc PGA). C'est lent.

Anti-Pattern : Ouvrir/Fermer une connexion Ă  chaque requĂȘte HTTP. Votre appli sera lente et tuera le CPU du serveur DB.

Solutions
  • HikariCP : Le standard Java actuel. Ultra-rapide.
  • UCP (Oracle Universal Connection Pool) : OptimisĂ© pour RAC (gĂšre le "Fast Connection Failover" et le "Runtime Load Balancing"). RecommandĂ© pour les gros clusters.
Statement Caching

Le driver garde les curseurs ouverts cĂŽtĂ© client. Évite le "Soft Parse" cĂŽtĂ© serveur.

                            # Config HikariCP
                            dataSource.prepStmtCacheSize=250
                            dataSource.prepStmtCacheSqlLimit=2048
SmartDB (The Old/Solid Way)

Philosophie : "La donnée est plus importante que l'appli".

  • Logique mĂ©tier dans des Packages PL/SQL.
  • L'appli (Java/.NET) n'appelle que des procĂ©dures stockĂ©es.
  • SĂ©curitĂ© maximale (l'appli n'a pas accĂšs aux tables, juste aux APIs PL/SQL).
  • InconvĂ©nient : Difficile Ă  tester/versionner pour les devs modernes.
Microservices (The New Way)

Philosophie : "Database per Service".

  • On utilise les PDBs (Pluggable Databases) pour isoler chaque microservice.
  • Utilisation de JSON natif dans Oracle (SODA API) pour le stockage de documents.
  • Communication asynchrone via AQ (Advanced Queuing) ou Kafka.
Libérer la donnée (CDC - Change Data Capture)

Comment envoyer les données d'Oracle vers un Data Lake (Snowflake, Hadoop) ou Elasticsearch en temps réel ?

OutilMéthodeImpact
Oracle GoldenGateLit les Redo Logs directement.Nul (Zéro impact sur les tables). TrÚs cher $$.
Debezium (Kafka Connect)Utilise LogMiner (API SQL pour lire les logs).Faible Ă  Moyen (Consomme du CPU sur la DB). Open Source.
Trigger + Table AuditTrigger sur INSERT/UPDATE.ÉlevĂ© (Ralentit les transactions). À Ă©viter pour les gros volumes.

Le CDC est essentiel pour les architectures "Event Driven" oĂč Oracle reste le "System of Record".

1.12 Le Match : Oracle vs PostgreSQL
L'illusion du "Gratuit"

Remplacer Oracle par Postgres annule le coût de licence, mais déplace les coûts ailleurs.

Poste de CoûtOraclePostgreSQL (Open Source)
Licences (CapEx)$$$$$ (47k$/cƓur Enterprise)0 $ (Community)
Support (OpEx)Inclus (22% coût licence/an). AccÚs aux patchs.0 $ (Communauté) ou Payant (EDB, Percona) si besoin de SLA.
Infra HA/DRNatif (RAC/DG). Cher mais intégré.Complexe. Il faut assembler des briques (Patroni, HAProxy, pgBackRest). Coût humain élevé.
TalentsDBA Oracle (Cher, mais expert).DevOps/DBA Postgres (Plus rare en expertise "Deep Internal").
Ce qu'Oracle fait (encore) mieux
1. Active-Active (RAC)

Postgres n'a pas d'Ă©quivalent natif Ă  RAC (Ă©crire sur 2 nƓuds en mĂȘme temps). En Postgres, on Ă©crit sur un MaĂźtre, on lit sur des RĂ©plicas.

2. Optimizer (CBO)

Sur des requĂȘtes complexes (DW, 50 jointures), le CBO Oracle reste le roi. Il gĂšre mieux les plans adaptatifs et les transformations de requĂȘtes.

3. Parallel Query

Oracle parallélise tout (DML, DDL, Query). Postgres s'améliore mais reste limité sur le Parallel DML.

4. Flashback

Revenir en arriÚre dans le temps sans restaurer de backup. Postgres n'a pas ça nativement.

Ce que Postgres fait mieux : Extensibilité (PostGIS), JSON (JSONB est top), légÚreté, conteneurisation (Docker first).

Quand migrer ? Quand rester ?
ScénarioRecommandationPourquoi ?
Nouvelle App (Cloud Native)GO POSTGRESAucune dette technique. Standard du cloud (AWS RDS, Azure Flex).
ERP Vendor (SAP...)STAY ORACLECertifications éditeurs. Support critique. Performance validée.
App "Maison" riche en PL/SQLSTAY ORACLELe coût de réécriture du PL/SQL en Java/Python dépasse souvent 10 ans de licences Oracle.
Datawarehouse < 10TBGO POSTGRESOu Snowflake/BigQuery. Oracle est trop cher pour du stockage pur.
La réalité de la migration (ora2pg)

Migrer "Schema & Data" est facile. Migrer la "Logique" est un enfer.

                    # L'outil de référence : ora2pg
                    # 1. Analyse (Estimation de l'effort)
                    ora2pg -t SHOW_REPORT -c ora2pg.conf

                    # Résultat typique :
                    # - Tables/Data : 100% auto
                    # - Views : 95% auto
                    # - PL/SQL (Packages) : 40% auto (AĂŻe !)

                    # Le piĂšge :
                    Oracle : IF v_var IS NULL (vrai si chaĂźne vide '')
                    Postgres : NULL est différent de chaßne vide ''.
                    -> Bugs fonctionnels subtils garantis.

StratĂ©gie Strangler : Ne pas migrer le monolithe. Extraire des modules fonctionnels, les réécrire en microservices sur Postgres, et laisser le cƓur mourir lentement sur Oracle.

1.13 Licensing : Le Champ de Mines
Comment Oracle compte ?

Il existe deux métriques principales. Vous devez choisir l'une ou l'autre.

MétriqueCibleCalcul (Enterprise Edition)
ProcessorApplications Web, Utilisateurs illimités/inconnus.Nb Coeurs Physiques * Core Factor
Ex: 1 Serveur avec 2 CPU Intel (16 coeurs chacun) = 32 coeurs.
Facteur Intel = 0.5.
Licences requises = 16 Proc.
NUP (Named User Plus)Applications internes, Utilisateurs comptables (Humains + Machines).On compte chaque individu unique. Minimum requis : 25 NUP par Processeur.

Attention : Le "Core Factor" dépend du processeur (Intel x86 = 0.5, IBM Power = 1.0). Vérifiez toujours l'Oracle Processor Core Factor Table.

Standard Edition 2 (SE2) vs Enterprise Edition (EE)

La SE2 est beaucoup moins chÚre, mais techniquement bridée.

Standard Edition 2 (SE2)
  • Limite Hardware : Max 2 Sockets physiques par serveur.
  • Limite Thread : Oracle n'utilisera pas plus de 16 threads CPU (mĂȘme si vous en avez 64).
  • FonctionnalitĂ©s : RAC inclus (Max 2 nƓuds), mais AUCUNE option payante possible (Pas de Partitioning, pas de Tuning Pack, pas de Data Guard).
Enterprise Edition (EE)
  • Limites : Aucune (ScalabilitĂ© infinie).
  • Options : Tout est disponible... mais tout est en option payante (Ă  la carte).
  • Parallelism : Inclus.
  • Data Guard : Inclus.
Le piÚge du "Installé par défaut"

Dans Oracle EE, toutes les fonctionnalités sont installées. Mais vous n'avez pas le droit de les utiliser sans payer.

Déclencher une licence coûteuse par erreur est trÚs facile.

Action "Bénigne"Option déclenchéeConséquence
CREATE TABLE ... PARTITION BY RANGEPartitioning+11 500$ / Proc
Consulter le rapport AWR (Performance) ou utiliser ADDM.Diagnostics Pack+7 500$ / Proc
Utiliser SQL Tuning Advisor.Tuning Pack+5 000$ / Proc (Requiert Diagnostics Pack)
Compresser une table (HCC/Advanced).Advanced Compression+11 500$ / Proc
                    -- La commande qui sauve (désactive les packs AWR/Tuning)
                    ALTER SYSTEM SET control_management_pack_access='NONE' SCOPE=BOTH;
Le cauchemar VMware (Soft Partitioning)

Oracle ne reconnaßt pas VMware comme une méthode de ségmentation physique (Hard Partitioning).

La RĂšgle (Galaxy Licensing)

Si vous avez un cluster VMware de 10 serveurs ESXi, et que vous lancez UNE SEULE VM Oracle avec 1 vCPU...

Oracle considĂšre que la VM pourrait bouger (vMotion) sur n'importe quel serveur du cluster.

=> Vous devez payer des licences pour TOUS les coeurs physiques de TOUS les serveurs du cluster VMware.

Solutions
  • Cluster DĂ©diĂ© : CrĂ©er un petit cluster VMware de 2 serveurs physiquement isolĂ©s uniquement pour Oracle.
  • Hard Partitioning : Utiliser IBM LPAR (AIX) ou Solaris Zones (capped), qui sont reconnus par Oracle pour limiter le licensing aux coeurs allouĂ©s.
  • Oracle VM (OVM) / KVM : La solution de virtualisation maison d'Oracle (Hard Partitioning reconnu).
1.14 Oracle Cloud : OCI, Autonomous & Multi-Cloud
OCI (Oracle Cloud Infrastructure)

Contrairement à AWS/Azure qui utilisent du matériel standard (Commodity Hardware), OCI est construit autour de l'Exadata.

Exadata Cloud Service (ExaCS)

C'est la Ferrari des bases de données, louée à l'heure.

  • Smart Scan : Le stockage (Storage Cells) exĂ©cute le SQL. Seuls les rĂ©sultats filtrĂ©s remontent au serveur. RĂ©duit les I/O de 90%.
  • RAC Natif : Haute dispo transparente.
  • HCC : Hybrid Columnar Compression (10x Ă  50x de compression).
VM DB Systems (DBCS)

L'offre standard (IaaS/PaaS). Une VM Linux avec Oracle pré-installé.

  • Vous avez l'accĂšs root.
  • Vous gĂ©rez le tuning OS.
  • Oracle gĂšre le backup et le patching (via l'interface Cloud).
Autonomous Database (ADB)

Le concept : "La base se gÚre toute seule". Plus de DBA opérationnel.

CaractéristiqueDétail
Self-DrivingPatching automatique (Zéro downtime). Backup automatique. Tuning automatique (Auto-Indexing).
Self-SecuringChiffrement Always-On. Pas d'accĂšs OS (mĂȘme pour Oracle).
ServerlessVous payez au CPU/Stockage. Scalabilité auto (Auto-Scaling) : si la charge monte, le CPU monte instantanément.

Limites : Pas d'accĂšs au fichier alert.log, pas d'accĂšs OS, restrictions sur certains packages PL/SQL qui font des appels systĂšme.

La fin de la guerre : Oracle @ Azure / AWS

Pendant 10 ans, le problÚme était la latence réseau entre l'App (sur Azure) et la DB (sur OCI). C'est fini.

Oracle Database@Azure

Oracle installe physiquement des racks Exadata DANS les datacenters de Microsoft Azure.

  • Latence : < 2ms (Comme si c'Ă©tait local).
  • Achat : Via la Marketplace Azure (consomme votre engagement MACC).
  • Gestion : Interface Azure, moteur Oracle gĂ©rĂ© par Oracle.
Interconnect (L'ancienne méthode)

Un cĂąble direct entre un DC OCI et un DC Azure (ex: Paris OCI <-> Paris Azure).

Latence ~2ms, mais complexité réseau (VNET/VCN peering). Remplacé petit à petit par les offres natives "@Azure" et "@AWS".

Matrice de Décision Cloud
BesoinSolution RecommandéePourquoi ?
Performance ExtrĂȘme / Mission CriticalExadata (OCI ou @Azure)Rien ne bat l'Exadata pour les IOPS et le RAC.
Petit projet / Dev / TestAutonomous JSON / APEX"Always Free Tier" disponible. Rapide Ă  monter.
ContrĂŽle Total (OS + DB)IaaS (EC2 / Azure VM / OCI Compute)Vous installez Oracle vous-mĂȘme. Attention au licensing (vCPU scaling).
Standardisation AWSRDS for OracleBien intégré à AWS, mais limité (pas de RAC, pas d'accÚs SYS/ROOT, versions en retard).
1.15 Le Métier : Du DBA au Data Engineer
La "Morning Checklist" du DBA

MĂȘme avec l'automatisation, certaines vĂ©rifications restent vitales pour dormir tranquille.

FréquenceActionPourquoi ?
QuotidienVérifier les Backups RMAN (Log de la nuit)."Un backup non vérifié est un backup raté."
QuotidienScanner l'alert.log (erreurs ORA-00600 / ORA-07445).Signes avant-coureurs de corruption ou bug interne.
HebdoCapacity Planning (Tablespace growth).Éviter le "Disk Full" à 3h du matin le dimanche.
MensuelTest de Restauration (sur une base de test).Valider que les backups sont réellement utilisables.

L'Astreinte : Oracle hĂ©berge souvent le cƓur du rĂ©acteur. Le DBA est souvent rĂ©veillĂ© la nuit (Incident Prod). C'est la partie difficile du mĂ©tier.

L'Ancienne École : OEM

Oracle Enterprise Manager (Cloud Control).

  • Avantages : Tout-en-un. GĂšre le Hardware (Exadata), l'OS et la DB. Permet de lancer des jobs, patcher, tuner (SQL Advisor).
  • InconvĂ©nients : Lourd (Java), complexe Ă  installer, licence coĂ»teuse (Packs).
La Nouvelle École : ObservabilitĂ©

Intégration dans la stack DevOps moderne.

  • Prometheus + Grafana : Via oracledb_exporter. Tableaux de bord lĂ©gers et rapides.
  • Datadog / Dynatrace : Agents natifs. CorrĂ©lation avec les logs applicatifs (Full Stack Tracing).
  • Splunk / ELK : Pour l'analyse des logs d'audit et alert.log.
Gérer la Dette Technique

Oracle sort des versions à un rythme soutenu. Il faut suivre pour rester supporté.

VersionTypeStatut (2025)
11g / 12cLegacyFin de vie (EOL). Risque sécurité majeur. Migration urgente requise.
19cLTS (Long Term Support)Le standard actuel. Supporté jusqu'en 2027+. C'est la destination de toutes les migrations.
21cInnovationSupport court. À Ă©viter pour la Prod critique (Laboratoire uniquement).
23aiLTS (Next Gen)La nouvelle référence (IA Vector Search, JSON Relational Duality). Le futur standard.
Le Patching (RU)

Oracle publie des Release Updates (RU) trimestriels (Jan, Avr, Juil, Oct). Application recommandée via l'outil OPatch.

Vision 2030 : Database Reliability Engineer (DBRE)

Le DBA "Click-bouton" qui installe des bases Ă  la main va disparaĂźtre. Place au DBRE.

  • Infrastructure as Code (IaC) : On ne fait plus dbca. On Ă©crit du Terraform/Ansible pour provisionner des instances OCI ou AWS RDS.
  • Automatisation : Le DBRE code des scripts Python pour automatiser le clonage, le patching et le scaling.
  • Fin du Tuning Manuel ? Avec Autonomous Database et le ML, la base s'auto-indexe. La valeur ajoutĂ©e du DBA se dĂ©place vers l'Architecture de DonnĂ©es (ModĂ©lisation, Flux, SĂ©curitĂ©).
  • Polyglotte : Le DBRE 2030 maĂźtrise Oracle, mais aussi PostgreSQL, Snowflake et Kafka. Il choisit le bon outil pour le bon usage.
                    "Oracle ne va pas mourir. Il va devenir le moteur invisible et surpuissant des applications critiques, piloté par du code."
SQL Cheat-sheet (Oracle) — squelette
SQL (squelette)
-- SELECT/JOIN/GROUP BY
                    -- Fonctions courantes
                    -- Pagination (selon version)
                    -- DDL de base (tables/index)
Administration (squelette)
-- Users/roles
                    -- Tablespaces
                    -- Sessions
                    -- Backup hooks (RMAN)
Performance (squelette)
-- Explain plan (à compléter)
                    -- Statistiques
                    -- Indexing patterns
                    -- Diagnostic rapides
1.15 Le Terrain : Vis ma vie de DBA Oracle
La "Morning Checklist" (Avant que ça casse)

Un DBA proactif ne se contente pas d'attendre l'alerte. Il cherche les signaux faibles.

CheckCommande / ActionPourquoi ?
1. Alert Logtail -f $ORACLE_BASE/diag/.../trace/alert_*.logLe journal de bord. Chercher les erreurs "ORA-", les "Checkpoint not complete" ou les redémarrages inattendus.
2. BackupsRMAN> LIST BACKUP SUMMARY;Vérifier que le backup de la nuit est AVAILABLE. Attention : un backup réussi mais vide (0 bytes) est un piÚge classique.
3. Espace DisqueVérifier FRA (Fast Recovery Area) et les Tablespaces (> 90%).Si la FRA est pleine (Archivelogs), la base se fige (Hang). C'est l'incident #1.
4. Invalid ObjectsSELECT count(*) FROM dba_objects WHERE status = 'INVALID';Un dĂ©ploiement applicatif a peut-ĂȘtre cassĂ© des packages PL/SQL ou des vues.
Les 3 Cauchemars de l'Astreinte
1. Archiver Stuck (Disk Full)
  • SymptĂŽme : L'application est figĂ©e. Personne ne peut Ă©crire. Le log dit : ORA-00257: Archiver error.
  • Cause : La zone de stockage des logs archivĂ©s est pleine.
  • Fix Rapide : Sauvegarder et supprimer les vieux logs via RMAN (DELETE ARCHIVELOG ALL COMPLETED BEFORE...) ou agrandir la FRA.
2. Blocking Locks (Verrous)
  • SymptĂŽme : "L'appli tourne dans le vide". Le CPU est bas.
  • Cause : Une session (ex: un dev avec un SELECT FOR UPDATE non committĂ©) bloque tout le monde.
  • Fix : Identifier le "Root Blocker" et tuer la session (ALTER SYSTEM KILL SESSION).
3. ORA-00600 / ORA-07445 (Internal Error)

Ce sont des bugs internes du moteur Oracle (C core dump). Ne paniquez pas.

Action : Ouvrir une SR (Service Request) chez Oracle Support immédiatement. Utiliser l'outil TFA (Trace File Analyzer) pour empaqueter les logs à envoyer.

Patching : Ce n'est pas "yum update"

Patcher Oracle est une opération chirurgicale. On applique des Release Updates (RU) trimestriels.

L'outil : OPatch
                            # 1. Vérifier l'inventaire
                            $ORACLE_HOME/OPatch/opatch lsinventory

                            # 2. Appliquer le patch (ArrĂȘt requis pour Single Instance)
                            opatch apply

                            # 3. Post-Install (Mettre Ă  jour le dictionnaire SQL)
                            cd $ORACLE_HOME/OPatch
                            ./datapatch -verbose
Best Practice : Out-of-Place Patching

Au lieu de patcher le binaire existant (risqué), on installe un nouveau ORACLE_HOME avec la nouvelle version.

Jour J : On arrĂȘte la base sur le Home V1, on change les variables d'env, on dĂ©marre sur le Home V2. Si ça plante, retour arriĂšre en 5 minutes.

Migrations Majeures (Upgrade)

Passer de 11g/12c vers 19c/23c.

  • AutoUpgrade : L'outil moderne (jar file) qui automatise tout (checks, fixups, upgrade).
  • PiĂšge : La performance SQL peut rĂ©gresser aprĂšs l'upgrade (changement d'Optimizer). Toujours capturer les SQL Baselines avant.
L'Ennemi Silencieux

Une base Oracle qui "marche" peut ĂȘtre pourrie de l'intĂ©rieur. Le nettoyage est un devoir continu.

Type de DetteImpactAction de nettoyage
Index InutilisésRalentit les INSERT/UPDATE inutilement. Consomme du stockage.Activer le monitoring d'index (ALTER INDEX ... MONITORING USAGE) pendant 3 mois, puis dropper.
Objets InvalidesErreurs applicatives aléatoires à la recompilation.Script utlrp.sql pour tenter de tout recompiler proprement.
ParamÚtres "Magiques"Des _underscore_parameters ajoutés en 2015 pour un bug fixé depuis.Revoir le SPFILE à chaque montée de version. Revenir aux défauts autant que possible.
Utilisateurs FantÎmesFaille de sécurité.Auditer les logins (DBA_AUDIT_SESSION) et verrouiller les comptes inactifs depuis > 180 jours.
1.16 Real World : OĂč Oracle est-il Roi ?
Le "Core Banking" (CBS)

Dans une banque, la base de données EST le produit. Une erreur de commit = perte d'argent réelle.

Le Besoin Critique
  • CohĂ©rence absolue : ACID strict. Si je vire 100€, ils doivent quitter mon compte ET arriver sur l'autre. Pas de "Eventual Consistency".
  • ZĂ©ro Downtime : Les paiements carte bleue fonctionnent Ă  3h du matin le dimanche.
La Réponse Oracle
  • RAC (Real Application Clusters) : Permet de patcher les serveurs un par un sans couper le service bancaire (Rolling Patch).
  • Data Guard Max Protection : RĂ©plication SYNC. Si le datacenter principal brĂ»le, zĂ©ro transaction perdue.
  • GoldenGate : RĂ©plique les transactions en temps rĂ©el vers un Data Lake pour la dĂ©tection de fraude (IA).
Le SystĂšme de Facturation (Billing)

Imaginez enregistrer chaque SMS, chaque appel, chaque octet de data pour 20 millions d'abonnés en temps réel.

Défi TechniqueSolution Oracle
Volume Massif (Ingestion)Partitioning : Les tables de "Call Detail Records" (CDR) sont partitionnées par heure. On insÚre des millions de lignes/seconde sans contention d'index.
Purge des DonnéesDrop Partition : Au lieu de faire DELETE (lent), on "droppe" la partition du mois M-13 instantanément.
Performance I/OExadata : Le "Smart Scan" filtre les données au niveau du stockage. Indispensable pour calculer la facture mensuelle en une nuit.
La Supply Chain Mondiale (SAP/EBS)

Une usine automobile ou un géant de la logistique ne peut pas expédier de colis si la base est lente.

L'Environnement

Souvent des ERP monolithiques (SAP, Oracle E-Business Suite, JD Edwards). Des milliers de tables, des modÚles de données ultra-complexes.

Pourquoi Oracle ?
  • L'Optimizer (CBO) : Seul Oracle arrive Ă  trouver un plan d'exĂ©cution efficace pour une jointure de 50 tables gĂ©nĂ©rĂ©e par un ERP.
  • Online Redefinition : Permet de modifier la structure d'une table (ajout de colonne, partitionnement) pendant que l'usine continue de produire (DBMS_REDEFINITION).
Données Citoyens & Sécurité

ImpÎts, Sécurité Sociale, Identité Numérique. Des bases de données qui gÚrent la vie de tout un pays.

  • Consolidation Massive : Au lieu de 500 petits serveurs, l'État consolide tout sur quelques racks Exadata (Multitenant). Économie d'Ă©chelle et administration centralisĂ©e.
  • SĂ©curitĂ© (Database Vault) : EmpĂȘche mĂȘme le super-administrateur (SYS) de voir les donnĂ©es sensibles (ex: le montant des impĂŽts d'un VIP). SĂ©paration des devoirs.
  • VPD (Virtual Private Database) : Le mĂȘme serveur hĂ©berge les donnĂ©es de toutes les rĂ©gions, mais un agent de Bordeaux ne voit que les dossiers de Bordeaux (Row Level Security natif).
                    "Dans ces secteurs, le coĂ»t de la licence Oracle est une fraction du coĂ»t d'une heure d'arrĂȘt ou d'une fuite de donnĂ©es."
1.17 CarriÚre : Le Marché de l'Expertise
L'Évolution des MĂ©tiers

Le métier de "DBA d'Exploitation" (qui installe des binaires et surveille l'espace disque) est en voie d'extinction (automatisé par le Cloud).

ProfilTendanceCe qu'on attend de lui
DBA de Production (Run)📉 En baisseGĂ©rer 500 bases industrialisĂ©es. Scripting (Ansible/Python) obligatoire.
Expert Performance (Tuning)📈 En hausseLe "Pompier d'Ă©lite". AppelĂ© quand le site e-commerce est lent. MaĂźtrise totale du CBO et des Wait Events. TrĂšs valorisĂ©.
Data Architect / Cloud Architect🚀 ExplosionConçoit les architectures Hybrides (Oracle on-prem + AWS). Sait parler "RĂ©seau", "SĂ©curitĂ©" et "CoĂ»ts".
Dev PL/SQL SeniorâžĄïž StableMaintenance des gros systĂšmes Legacy (Banque/Assurance). Difficile Ă  recruter car les jeunes font du Java/Python.
La Prime de Complexité

Oracle est perçu comme "difficile" et "critique". Cela se paie.

Pourquoi ça paie ?
  • RaretĂ© : Moins de juniors se forment sur Oracle. Les seniors deviennent des ressources rares.
  • Risque : Toucher Ă  la base de donnĂ©es de la facturation d'un opĂ©rateur Telco demande des nerfs d'acier. On paie la responsabilitĂ©.
  • Enjeux : Les clients Oracle sont des grands comptes (CAC40) avec des budgets consĂ©quents.
Fourchettes (Est. Paris 2024)
  • Junior (0-2 ans) : 40k - 48k € (Souvent reconversion ou alternance).
  • ConfirmĂ© (3-7 ans) : 55k - 70k €.
  • Senior / Expert : 75k - 100k+ €.
  • Architecte : 90k - 120k €.
La Niche du Freelancing Oracle

C'est un marché de niche, mais profond. Les missions sont souvent longues (régie) ou trÚs courtes (expertise ponctuelle).

Type de MissionTJM MoyenContexte
DBA Prod (RĂ©gie)500 - 650 €Renfort d'Ă©quipe, MCO, Astreintes. Mission longue (1-3 ans).
Chef de Projet Migration700 - 900 €Piloter une migration vers le Cloud (ExaCS) ou une montĂ©e de version 19c.
Expert Tuning / Audit900 - 1200+ €Intervention commando (3-10 jours). RĂ©soudre une crise majeure. Il faut ĂȘtre un "Sorcier" (Oracle ACE).

Attention : Le ticket d'entrée est haut. En freelance, on n'a pas le droit à l'erreur sur des systÚmes critiques.

Faut-il miser sur Oracle en 2025 ?
Le PiĂšge (Legacy Trap)

Ne restez pas le "DBA Vieux Jeu" qui refuse le Cloud et ne connaßt que la ligne de commande SQL*Plus. Vous finirez par éteindre la lumiÚre dans 10 ans.

La Stratégie Gagnante (Hybride)

Soyez un "Database Reliability Engineer" (DBRE) qui :

  • ConnaĂźt Oracle en profondeur (Internals).
  • Sait automatiser avec Terraform/Ansible.
  • ConnaĂźt au moins une autre base "Moderne" (PostgreSQL ou MongoDB).
                    Conseil carriĂšre :
                    "Utilisez Oracle comme votre socle d'expertise 'Lourd' (crédibilité technique), et ajoutez le Cloud/DevOps par-dessus pour la modernité."
1.18 Horizon 2030 : L'IA et la Convergence
La Stratégie "Swiss Army Knife"

La philosophie des Cloud Providers (AWS/Azure) est "Best of Breed" : une BDD différente pour chaque usage (Aurora pour le SQL, DynamoDB pour le Key-Value, Neptune pour le Graph).

La réponse d'Oracle : La Converged Database.

Un Moteur Unique

Oracle gĂšre TOUS les types de donnĂ©es dans le mĂȘme moteur, avec des performances natives, sans ETL, et avec une cohĂ©rence ACID globale.

  • Relationnel (SQL standard).
  • JSON (Document Store via SODA).
  • Graph (Property Graph).
  • Spatial (GIS).
  • Vector (IA/Embeddings).
Avantage : Simplicité

Plus besoin de synchroniser une base SQL avec une base Graph et une base Vectorielle via des pipelines Kafka complexes. Tout est dans la mĂȘme base, requĂȘtable via un seul SQL.

                            -- SQL Unifié (Exemple futuriste)
                            SELECT c.nom, 
                            JSON_VALUE(c.doc, '$.pref') as preference,
                            VECTOR_DISTANCE(c.vec, :query_vec) as score
                            FROM clients c
                            WHERE SDO_CONTAINS(c.geom, :zone) = 'TRUE';
Oracle 23ai : Le Moteur du RAG

L'IA Générative (LLM) a besoin de contexte d'entreprise. Oracle 23ai introduit le type de donnée natif VECTOR.

FeatureImpact
AI Vector SearchPermet de faire du RAG (Retrieval-Augmented Generation) directement dans la base. On stocke les "embeddings" (sens sémantique) des documents clients à cÎté des données relationnelles.
Select AITraduire le langage naturel en SQL.
"Montre-moi les ventes de la semaine derniÚre" -> Oracle génÚre le SQL et l'exécute.
In-Database MLEntraßner et exécuter des modÚles ML (XGBoost, Neural Net) sans sortir la donnée de la base (zéro latence réseau).
La fin du "Tuning Humain" ?

L'objectif d'Oracle est de rendre la base de données invisible (Serverless).

Auto-Indexing

L'IA observe les requĂȘtes. Elle crĂ©e des index "candidats", les teste en background, et si la performance s'amĂ©liore, elle les publie. Si non, elle les supprime.

Conséquence : Le métier de DBA "Tuning SQL" va évoluer vers de la supervision d'IA.

Auto-Scaling (K8s)

La base dĂ©tecte la charge CPU et alloue des cƓurs supplĂ©mentaires instantanĂ©ment (sans redĂ©marrage), puis rĂ©duit la voilure pour Ă©conomiser les coĂ»ts.

Oracle sera-t-il encore lĂ  ?

Oui, mais sa place aura changé.

  • Applications Web / Startups : PostgreSQL dominera totalement ce segment (le nouveau "Linux des bases de donnĂ©es").
  • Enterprise Core (CAC40) : Oracle restera indĂ©trĂŽnable pour les donnĂ©es transactionnelles critiques Ă  haut volume (Legacy + New Critical Apps).
  • Le Cloud Hybride : Oracle deviendra le "back-end de luxe" hĂ©bergĂ© chez Azure/AWS/Google (via les partenariats Multi-Cloud).
                    Conclusion :
                    En 2030, on ne choisira plus Oracle "par défaut". On le choisira comme on choisit une Formule 1 : parce qu'on a un besoin de performance et de fonctionnalités que la voiture de série (Postgres) ne peut pas offrir.
1.19 Applications : Le Contrat Dev ↔ DBA
Blindage de la couche JDBC / Pool

Une application robuste ne crashe pas quand la base redémarre ou ralentit. Elle gÚre l'échec.

Timeouts (La rĂšgle de survie)
  • Connect Timeout : Temps max pour Ă©tablir la connexion (ex: 2s). Évite de bloquer les threads si le rĂ©seau est coupĂ©.
  • Socket/Read Timeout : Temps max pour attendre une rĂ©ponse SQL (ex: 30s). Évite que l'appli ne gĂšle si une requĂȘte part en "cartridge" infini.
Pool de Connexions (HikariCP)
                            # Config idéale
                            maximumPoolSize = 10  # Pas 100 ! Oracle préfÚre peu de connexions actives.
                            minimumIdle = 10      # Pool fixe = stabilité.
                            maxLifetime = 1800000 # 30 min. Force le renouvellement pour éviter les fuites mémoire cÎté DB.
                            connectionTestQuery = SELECT 1 FROM DUAL

Retry Logic : L'appli doit réessayer (Exponential Backoff) en cas d'erreur transitoire (ORA-03113), pas crasher.

Les Tueurs de Performance

90% des problĂšmes de prod viennent du code applicatif, pas de la config Oracle.

Anti-PatternSymptĂŽmeSolution
Le problĂšme N+1Des milliers de petites requĂȘtes rapides (1ms) qui saturent le rĂ©seau. (Hibernate classique).Faire une jointure (JOIN) ou utiliser FETCH JOIN. RĂ©cupĂ©rer tout en 1 requĂȘte.
Commit in Looplog file sync élevé. La base passe son temps à écrire dans le Redo Log.Batcher les commits (ex: Commit tous les 1000 inserts).
Pas de Bind VariablesHard Parse CPU 100%. SELECT * FROM t WHERE id = 123 (littéral).Utiliser WHERE id = :1 (Bind). Obligatoire sur Oracle.
Fetch excessifRéseau saturé. SELECT * sur une table de 100 colonnes pour n'en utiliser que 2.Sélectionner explicitement les colonnes nécessaires.
OĂč mettre la logique ?
Microservices vs Monolith

Oracle est taillĂ© pour le Monolithe Modulaire. DĂ©couper une base Oracle en 50 petites bases microservices perd tout l'intĂ©rĂȘt (ACID, Joins, Performance).

Compromis : Utiliser les Schemas ou PDBs pour isoler les domaines, mais rester sur une infrastructure consolidée.

Traitement par Lots (Batchs)

Ne faites jamais de gros traitements de données en Java/Python (Extract -> Process -> Insert).

Faites-le en PL/SQL (Inside-DB) :

  • Pas de latence rĂ©seau (Data Gravity).
  • Utilisation de INSERT INTO ... SELECT (Direct Path Load).
  • ParallĂ©lisme natif Oracle.
End-to-End Tracing

"La base est lente !" crie le dev. "L'appli est lente !" répond le DBA.

Pour rĂ©concilier tout le monde, il faut tracer la requĂȘte de bout en bout.

Instrumentation (DBMS_APPLICATION_INFO)

Le code Java doit dire Ă  Oracle qui il est.

                    // Dans le code Java (Interceptor JDBC)
                    connection.setClientInfo("OCSID.MODULE", "ServiceFacturation");
                    connection.setClientInfo("OCSID.ACTION", "CalculTVA");
                    connection.setClientInfo("OCSID.CLIENTID", "User_12345");

                    -- Résultat cÎté DBA (v$session) :
                    -- On voit exactement quel module consomme du CPU.
Modern Tracing (OpenTelemetry)

Injecter l'ID de trace (TraceID) dans la session Oracle pour corréler les logs applicatifs (ELK/Datadog) avec les traces DB.

1.20 Oracle vs PostgreSQL : Le Verdict Technique
Comparatif Technique & Fonctionnel

Analyse objective des forces en présence pour 2025.

DomaineOracle Database (EE)PostgreSQL (16+)
ArchitectureProcess-based + Threads (multithreaded sur Linux récent). architecture Shared-Everything (RAC).Process-based (un processus par connexion). Shared-Nothing (Cluster via réplication).
MVCC (Concurrence)Géré via UNDO Segments. Les vieilles versions sont stockées à part. Pas de "bloat" dans la table principale.Géré via duplication de lignes (xmin/xmax). Nécessite VACUUM pour nettoyer les versions mortes. Risque de "Table Bloat".
Haute DispoRAC (Actif-Actif) : Écriture sur N nƓuds. Zero downtime natif.
Data Guard : Réplication physique native.
Actif-Passif : Écriture sur 1 nƓud MaĂźtre. RĂ©plicas en lecture.
HA via outils tiers (Patroni, Etcd, HAProxy).
PerformanceRoi du Parallel Query et des jointures complexes (Star schema). Partitioning trÚs mature.Excellent en OLTP mono-thread. Parallel Query présent mais moins agressif. Partitioning déclaratif efficace (depuis v10).
Dév (Langage)PL/SQL : Puissant, structuré (Packages), compilé. TrÚs riche en features "Enterprise".PL/pgSQL : TrÚs bon, mais pas de notion de "Packages". Extensible via Python/Perl/Java in-db.
IndexationB-Tree, Bitmap (DW), Reverse Key, Function-based. Index Global sur partition.B-Tree, GIN/GiST (imbattables pour JSON/Geo/Texte), BRIN (Big Data). Index partiels.
CoĂ»tLicence au CƓur (Cher) + Maintenance (22%).Gratuit (Community). CoĂ»t dĂ©placĂ© vers le "People" (Besoin d'experts pour la HA).
La différence fondamentale : Gestion du MVCC

C'est souvent ce point qui surprend les DBAs Oracle qui passent Ă  Postgres.

Oracle (UNDO)
  • Quand on update une ligne, l'ancienne valeur part dans le Tablespace UNDO.
  • La table de donnĂ©es reste compacte.
  • Avantage : Performance constante en UPDATE intensif.
  • Risque : ORA-01555 Snapshot Too Old (si l'Undo est trop petit).
PostgreSQL (VACUUM)
  • Quand on update une ligne, on crĂ©e une nouvelle version dans la mĂȘme page (bloc). L'ancienne devient "morte".
  • ProblĂšme : La table grossit ("Bloat").
  • Solution : Le processus AutoVacuum doit passer derriĂšre pour marquer l'espace comme libre.
  • Risque : Si l'AutoVacuum ne suit pas la cadence, la performance s'effondre.
La position IDEO-Lab : "Le bon outil pour le bon usage"

Il ne s'agit pas de "tuer Oracle", mais de l'utiliser lĂ  oĂč il est rentable.

Cas d'UsageChoix RecommandéJustification
Core Business (ERP, Banque, Billing)ORACLEBesoin de RAC (HA absolu), de PL/SQL lourd, et de support éditeur (SAP/Oracle EBS). Le coût est justifié par le risque.
Nouvelles Apps / MicroservicesPOSTGRESQLCloud-native, conteneurisation facile (Docker), pas de coût de licence, parfait pour CI/CD.
Datawarehouse / AnalyticsSNOWFLAKE / BIGQUERYNi l'un ni l'autre. Pour l'analytique pure, le Cloud (Serverless SQL) est souvent plus rentable qu'Oracle Exadata ou Postgres.
Stockage JSON / GeoSpatialPOSTGRESQLPostGIS est la rĂ©fĂ©rence mondiale. Le type JSONB de Postgres est extrĂȘmement performant et flexible.
Transition des Compétences

Passer d'Oracle Ă  Postgres n'est pas "facile", c'est un changement de culture.

Culture Oracle (Le "Sachant")
  • Outils graphiques (OEM, Toad).
  • Tuning via "Wait Events" (MĂ©thodique).
  • On s'appuie sur le Support Oracle en cas de crash.
  • L'infra est "Statique" et "Robuste".
Culture Postgres (Le "Do-er")
  • Ligne de commande (psql, bash) et scripts.
  • On doit construire sa propre HA (Patroni, Ansible).
  • En cas de crash, on lit les logs et le code source (ou StackOverflow).
  • L'infra est "Jetable" (Pets vs Cattle).
                    Conseil aux équipes :
                    Ne migrez pas vos bases sans former vos DBAs. Un DBA Oracle qui gĂšre du Postgres comme de l'Oracle va droit dans le mur (mauvaise gestion du Vacuum, Connection Pooling absent).
1.11 Cloud Strategy : OCI, Autonomous & Interconnexion
OCI (Oracle Cloud Infrastructure)

Contrairement aux autres clouds qui utilisent du matériel générique, OCI est optimisé pour la base de données Oracle.

Exadata Cloud Service (ExaCS)

Le monstre de performance. Vous louez un quart, un demi ou un rack complet d'Exadata.

  • Smart Scan : Le stockage filtre les donnĂ©es avant de les envoyer au serveur (Offloading).
  • RAC Natif : Haute disponibilitĂ© incluse par dĂ©faut.
  • IOPS massifs : Latence < 19 microsecondes (PMEM/RoCE).
Base Database Service (DBCS)

L'offre VM standard. Moins chĂšre, pour les besoins classiques.

  • Choix entre Standard Edition et Enterprise Edition.
  • Stockage Block Volume (extensible).
  • Backup automatique vers Object Storage.
Autonomous Database (ADB)

La base qui se gÚre toute seule. Idéal pour les devs et les data warehouses.

PilierDescription
Self-DrivingPatching OS et DB sans arrĂȘt de service. Tuning SQL automatique (crĂ©ation d'index). Backup auto.
Self-SecuringChiffrement Always-On. Pas d'accĂšs root (mĂȘme pour Oracle). Patching de sĂ©curitĂ© immĂ©diat.
Self-RepairingDétection et correction automatique des erreurs hardware.

Attention : C'est une boßte noire. Vous perdez le contrÎle fin (pas de paramétrage init.ora complexe, pas d'accÚs OS).

La fin du silo : Oracle @ Azure / AWS

Le problÚme historique : Avoir l'appli sur AWS et la DB sur OCI créait trop de latence (et des frais de sortie de données).

Oracle Database@Azure / @AWS

La solution ultime : Oracle installe physiquement des racks Exadata DANS les datacenters de Microsoft et Amazon.

  • Latence : < 2ms (RĂ©seau local).
  • ExpĂ©rience : Vous provisionnez la base depuis la console Azure/AWS.
  • Facturation : IntĂ©grĂ©e Ă  votre facture Azure/AWS (consomme vos crĂ©dits MACC/EDP).
Interconnect (L'alternative)

Un lien direct dédié entre OCI et Azure (dispo dans certaines régions). Latence ~2ms. Moins intégré mais fonctionnel.

Comment payer moins cher ?

Le modĂšle de licence change dans le Cloud. Deux options principales :

ModĂšlePrincipePour qui ?
License IncludedLe prix de l'heure inclut la licence Oracle.Pour les nouveaux projets ou les clients sans stock de licences. Flexible (OpEx).
BYOL (Bring Your Own License)Vous appliquez vos licences "on-prem" existantes sur le Cloud. Le prix horaire baisse drastiquement.Pour les clients historiques. Permet de valoriser l'investissement existant.

Note OCPU vs vCPU : Sur OCI, 1 OCPU = 1 CƓur Physique = 2 vCPU. Attention aux comparaisons de prix avec AWS/Azure oĂč 1 vCPU = 1 Thread.

1.21 Monitoring Oracle : Le Guide Complet
Qui fait quoi, maintenant ?

Oubliez les GUIs lentes. En crise, le SQL est roi.

1. Sessions Actives (La requĂȘte magique)
                    SELECT
                    s.sid, s.serial#, s.username, s.osuser,
                    s.status, s.sql_id,
                    w.event, w.seconds_in_wait, w.state,
                    s.program, s.machine
                    FROM v$session s
                    LEFT JOIN v$session_wait w ON s.sid = w.sid
                    WHERE s.type != 'BACKGROUND'
                    AND s.status = 'ACTIVE'
                    ORDER BY w.seconds_in_wait DESC;
2. Voir le SQL en cours
                            SELECT sql_text, sql_fulltext 
                            FROM v$sql 
                            WHERE sql_id = '&sql_id';
3. Progression (Long Ops)
                            SELECT opname, target, 
                            sofar, totalwork, 
                            units, time_remaining 
                            FROM v$session_longops 
                            WHERE time_remaining > 0;
Time-Based Tuning Methodology

Oracle est toujours dans l'un de ces 2 états : On CPU (bosse) ou Waiting (attend).

"Dis-moi ce que tu attends, je te dirai ton problĂšme."

Wait EventClasseSignification TechniqueAction DBA
db file scattered readUser I/OFull Table Scan (lecture multiblocs).Vérifier plan d'exec. Manque d'index ? Stats périmées ?
db file sequential readUser I/OIndex Scan (lecture monobloc).Normal en OLTP. Si excessif : index fragmenté ou "Index Range Scan" trop large.
log file syncCommitAttente d'écriture du LGWR sur disque.Disques Redo lents ? Trop de commits (boucle) ? CPU saturé ?
direct path read/writeUser I/OLectures directes (bypass Buffer Cache).Parallel Query, Sorts sur disque (TEMP), Hash Joins massifs.
SQL*Net message from clientNetworkLa DB attend que l'appli lui envoie du travail.Généralement "Idle", sauf si latence réseau entre App et DB.
ASH : La boĂźte noire de l'avion

Active Session History (ASH) échantillonne v$session toutes les secondes en mémoire (buffer circulaire).

Analyse Post-Mortem (Il y a 10 min)
                    SELECT sample_time, sql_id, event, count(*)
                    FROM v$active_session_history
                    WHERE sample_time BETWEEN SYSDATE - 1/24 AND SYSDATE
                    GROUP BY sample_time, sql_id, event
                    ORDER BY count(*) DESC;
AWR : Le Rapport Hebdo

Des snapshots horaires stockés sur disque (rétention 8 jours par défaut).

  • Usage : Comparer "Aujourd'hui 10h" avec "Hier 10h" (Baseline).
  • Script : @$ORACLE_HOME/rdbms/admin/awrrpt.sql
  • Section ClĂ© : "Top 5 Timed Events" et "SQL ordered by Elapsed Time".
Blocking Sessions (Arbre de blocage)
                            SELECT 
                            lpad(' ', (level-1)*2) || s.sid || ' ' || s.username AS user_tree,
                            s.event,
                            s.blocking_session
                            FROM v$session s
                            CONNECT BY PRIOR s.sid = s.blocking_session
                            START WITH s.blocking_session IS NULL 
                            AND s.sid IN (SELECT blocking_session FROM v$session);
Espace Critique (TEMP / UNDO)

Qui mange tout le TEMP ?

                            SELECT s.sid, s.username, u.tablespace, 
                            u.contents, u.blocks * 8192 / 1024 / 1024 as MB
                            FROM v$session s, v$sort_usage u
                            WHERE s.saddr = u.session_addr
                            ORDER BY u.blocks DESC;
L'Arsenal du DBA
OutilDescriptionCommande
oratopLe "top" pour Oracle (livré avec la DB). Ultra léger, temps réel. Affiche le TOP SQL, les Waits et les Bloqueurs.$ORACLE_HOME/suptools/oratop/oratop -i 5
TFA (Trace File Analyzer)Collecte automatique des logs pour le support.tfactl diagcollect -srdc ORA-00600
OS Watcher (OSWbb)Enregistre vmstat/iostat/top en arriĂšre-plan. Indispensable pour prouver que "c'est pas la base, c'est le disque".startOSWbb.sh
Check OS (Linux)
                    # Mémoire (Attention au Swap !)
                    free -g

                    # I/O Disque (Latence > 10ms = Danger)
                    iostat -xnz 1 10

                    # CPU (User vs System vs IOWait)
                    top -c