đ„ Oracle Database â Architecture, SQL/PLSQL & Administration
Guide IDEO-Lab : Oracle en entreprise (architecture, performance, HA, sécurité, opérations).
Intro & Positionnement
Pourquoi Oracle est âmission criticalâ (et pourquoi il divise).
EnterpriseMission-CriticalROIArchitecture (Instance/DB)
SGA/PGA, process Oracle, datafiles, controlfiles, redo.
SGAPGARedoModÚle de données
Tablespaces, segments/extents/blocks, UNDO/TEMP, schémas.
TablespaceUNDOTEMPSQL Oracle & PL/SQL
Procédures, packages, triggers, jobs & logique cÎté DB.
PL/SQLPackagesTriggersPerformance & Optimizer
CBO, stats, plans, indexation, partitioning, parallel.
CBOStatsExplainConcurrence & Locks
Verrous, latch, contention, deadlocks & diagnostic.
LocksLatchesDeadlocksTransactions, UNDO & Redo
ACID, commit/rollback, redo logs, undo retention.
ACIDUNDORedo LogsBackup & Restore (RMAN)
Stratégies, PITR, tests de restauration, bonnes pratiques.
RMANPITRRecoveryHaute disponibilité
RAC, Data Guard, DR, RPO/RTO, architectures.
RACData GuardDRSécurité & Compliance
Users/roles, audit, TDE, durcissement, accÚs réseau.
TDEAuditRBACĂcosystĂšme applicatif
Drivers, JDBC/ODP.NET, web/API, ERP & legacy.
JDBCODP.NETERPOracle vs Open-Source
Comparatifs factuels : cas oĂč Oracle est justifiĂ© (ou non).
PostgreSQLTCOUse-CasesLicensing & Coûts
ModÚles, options, piÚges, coût réel & gouvernance.
LicensingOptionsRisquesOracle dans le Cloud
OCI, Autonomous DB, Oracle on AWS/Azure, hybride.
OCIAutonomousHybridQuotidien & Futur
Run, patching, monitoring, migrations + vision 2025-2030.
RunPatchingRoadmapPourquoi 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).
| Feature | Oracle Database | PostgreSQL | SQL Server |
|---|---|---|---|
| Architecture | Process-based (Lourd). Shared Everything (RAC). | Process-based. Shared Nothing (Cluster via réplication). | Thread-based (Léger). Intégration Windows forte. |
| Concurrence | Undo 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). |
| Langage | PL/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). |
| Clustering | RAC (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
| Mythe | Ré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. |
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).
| Process | Nom | RĂŽle Critique |
|---|---|---|
| DBWn | Database 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. |
| LGWR | Log 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. |
| CKPT | Checkpoint | Met Ă jour les en-tĂȘtes des Datafiles et Controlfiles pour dire "jusqu'ici, tout est sauvĂ©". Signale Ă DBWn d'Ă©crire. |
| SMON | System Monitor | GÚre la récupération au démarrage (Crash Recovery) : applique les Redo Logs, puis annule les transactions non committées (Rollback). |
| PMON | Process Monitor | Nettoie 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).
| Composant | Description |
|---|---|
| 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. |
| Avantages | 1. 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_FINANCEPourquoi 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)
| Besoin | Sans OEM | Avec OEM |
|---|---|---|
| Vue multi-DB | scripts + bricolage | console centralisée |
| Alerting | cron/grep | seuils + actions + historique |
| Diagnostic | approche âĂ lâĆilâ | AWR/ASH/ADDM intĂ©grĂ©s (si packs) |
| Capacity | Excel / estimations | tendances + forecast |
| Conformité | contrÎles manuels | policies / drift / audit |
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
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 |
+------------------+ +------------------+Checklist déploiement (vue DBA)
| Ătape | But | Ă valider |
|---|---|---|
| Définir périmÚtre cibles | DB/ASM/RAC/Host | inventaire + criticité |
| Installer agents | collecte | latence réseau, firewall |
| Configurer repository | historique | capacité / maintenance |
| Importer templates | standardisation | mĂȘmes rĂšgles partout |
| Baselines | seuils intelligents | pĂ©riode âsaineâ |
| Canaux dâalerte | rĂ©action | mail/webhook/ITSM |
| Runbooks | MTTR bas | action 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)
| Signal | Ce que tu veux voir | Lecture |
|---|---|---|
| CPU | DB CPU vs Host CPU | CPU bound vs OS saturation |
| DB Time | DB Time, AAS | charge réelle cÎté DB |
| Waits | Top wait events | oĂč se perd le temps |
| Sessions | active/blocked/new logons | pics / runaway / locks |
| Errors | ORA- rate / listener errors | bug / attaque / config |
| Storage | tablespace / FRA / ASM | risque incident imminent |
Dashboard âDBAâ (investigation)
| Bloc | Tu cherches | Action |
|---|---|---|
| Top SQL | rĂ©gression / nouvelle requĂȘte | SQL Monitor + plan |
| Concurrency | locks, enqueues, latches | ASH + blockers |
| IO profile | hot objects / latence | segments + storage |
| Parsing | hard parse / library cache | binds / pool |
| Redo | commit latency / log sync | app 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)
| Famille | Signal | Warn | Crit | Runbook (1Ăšre action) |
|---|---|---|---|---|
| Storage | Tablespace usage | 80% | 90% | identifier segments + plan extend/purge |
| Storage | FRA usage | 80% | 90% | archivelogs, backups, rétention |
| Perf | DB Time / AAS | +X% baseline | +Y% baseline | Top waits + top SQL (AWR/ASH) |
| Concurrency | Blocked sessions | > 0 persistant | > N | trouver blocker + SQL_ID + app owner |
| Stability | ORA- rate | burst | burst + persistant | corréler release/logs + rollback |
| IO | Read latency | p95 hausse | p99 hausse | storage 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 baselineAnti-patterns (les pires)
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 + postmortemTable âsymptĂŽme â outilâ
| SymptĂŽme | Outil | Tu veux obtenir |
|---|---|---|
| pannes intermittentes | ASH | sessions actives / waits |
| dégradation sur 2h | AWR | diff baseline / top SQL |
| requĂȘte batch lente | SQL Monitor | oĂč le plan consomme |
| diagnostic global | ADDM | findings + 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 / skewCheck âSQL rĂ©gressionâ (ultra utile)
Jobs & Automation â OEM comme orchestrateur DBA
Ce que tu automatises classiquement
| Job | But | Fréquence | Risques |
|---|---|---|---|
| Health checks | dĂ©tection early | 5â15 min | bruit si mal calibrĂ© |
| Stats collection | plans stables | daily/weekly | charge (fenĂȘtre) |
| Tablespace audit | éviter saturation | hourly/daily | aucun si read-only |
| Backup verification | restores fiables | daily | temps/IO |
| Compliance scans | drift / sécurité | weekly | aucun |
Diagramme : OEM jobs â preuves (audit)
[Job OEM] --> [Exécution] --> [Résultat] --> [Evidence/Report]
| | | |
| | +--> OK/FAIL +--> PDF/HTML export / historique
| +--> logs
+--> schedule + notificationsConseil trĂšs prod
CapacitĂ© & Reporting â prouver, prĂ©voir, planifier
Capacity planning : ce que tu veux anticiper
| Objet | Métrique | But | Décision |
|---|---|---|---|
| Data growth | GB/day, tablespaces | prévenir saturation | extend/move/partition |
| FRA | rétention archivelogs | éviter blocage | policy / storage |
| CPU | AAS trend | prévoir scale | optimiser vs ajouter CPU |
| IO | latence + throughput | Ă©viter âIO wallâ | storage tier / tuning SQL |
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ĂŽle | Peut voir | Peut faire | Interdit |
|---|---|---|---|
| Viewer | dashboards | aucune action | jobs, config |
| Ops | alerts/incidents | runbooks, ack | tuning actions |
| DBA | perf + config | jobs maintenance | actions non validées |
| Auditor | reports | export | toute modification |
Diagramme : zones de confiance
[Admin Users] ---RBAC---> [OEM UI/OMS] ---agents---> [DB targets]
| |
| +--> Repository (metrics/history)
|
+--> Audit trail (who/when/what)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.
| Fonction | Valeur | Remarque |
|---|---|---|
| Monitoring centralisé | visibilité multi-DB | socle OEM |
| Diagnostics historiques | forensic + trends | souvent lié à AWR/ASH/ADDM |
| SQL deep analysis | plans/progrĂšs | SQL Monitoring / tuning |
| Compliance | policies / drift | selon modules/options |
Playbooks incidents â âquoi regarderâ en 5 minutes
| Incident | SymptĂŽmes | Dans OEM | Ensuite | Fix typique |
|---|---|---|---|---|
| CPU 100% | latence globale | DB Time vs DB CPU, Top SQL | SQL Monitor + plan | rewrite/stats/index/binds |
| Locks | blocked sessions | Blocking sessions, ASH | identifier blocker | corriger logique app / commits |
| IO bound | read latency high | Top waits IO, segments | AWR compare baseline | hot objects / storage / plan |
| FRA plein | archivelogs bloquent | FRA usage + alert | logs backup | rétention / purge / capacity |
| ORA- burst | erreurs soudaines | error metrics / incidents | corréler release | rollback / 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Ă©sDiagramme â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'ownershipLa 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Ăštre | Description |
|---|---|
| PCTFREE | % d'espace réservé aux futures mises à jour (UPDATE) qui agrandissent une ligne. (Défaut 10%). Si trop bas = Row Migration (lenteur). |
| ITL | Slots pour gérer les transactions concurrentes sur le bloc. Si le bloc est trÚs "chaud", les ITL peuvent saturer. |
| Row Chaining | Quand 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 :
- Rollback : Annuler une transaction (
ROLLBACK). - 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.
- 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 :
- Un GRANT (
GRANT SELECT ON TOTO.MATABLE TO TITI). - Un SYNONYM (pour éviter de taper le préfixe) :
CREATE SYNONYM MATABLE FOR TOTO.MATABLE.
- Un GRANT (
-- Changer de contexte de schema courant
ALTER SESSION SET CURRENT_SCHEMA = TOTO;
SELECT * FROM MATABLE; -- Cherche TOTO.MATABLELe 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 OTHERSdoit toujours ĂȘtre suivi d'unRAISE(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.
| Avantage | Description |
|---|---|
| Encapsulation | Sépare la Spécification (Interface publique) du Body (Code privé). On peut modifier le code sans casser les dépendances. |
| Performance | Tout le package est chargé en RAM (Shared Pool) au premier appel. |
| Persistance | Les variables de package persistent pendant toute la session (Session State). |
| Surcharge | On 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;
/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ération | Description | Quand c'est bon/mauvais |
|---|---|---|
| TABLE ACCESS FULL | Lit tous les blocs jusqu'Ă la HWM. | â
Bon pour lire > 20% de la table. â Catastrophique pour lire 1 ligne. |
| INDEX UNIQUE SCAN | Parcours l'arbre B-Tree pour trouver 1 ROWID. | â
Le top pour WHERE ID = .... |
| INDEX RANGE SCAN | Parcours l'index pour une plage de valeurs. | â Bon pour les dates ou clĂ©s Ă©trangĂšres. |
| NESTED LOOPS | Boucle imbriquĂ©e (Pour chaque ligne de A, je cherche dans B). | â IdĂ©al pour les petites quantitĂ©s de donnĂ©es (OLTP). |
| HASH JOIN | CrĂ©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 Event | Signification Probable | Solution Piste |
|---|---|---|
| db file scattered read | Full Table Scan (Lecture multi-blocs). | Manque d'index ? Stats périmées ? |
| db file sequential read | Lecture d'index (Mono-bloc). | Index inefficace ? Fragmentation ? (Normal en OLTP). |
| log file sync | Attente d'écriture du Redo Log sur disque (COMMIT). | Disques Redo lents ? Trop de commits (commit dans une boucle) ? |
| enq: TX - row lock contention | Verrouillage applicatif. | Deux sessions modifient la mĂȘme ligne. Revoir l'appli. |
Outils : AWR (Rapport historique) et ASH (Temps réel).
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).
| Type | Nom | Description |
|---|---|---|
| TX | Transaction Lock | Verrou 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). |
| TM | Table Lock | EmpĂȘ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+).
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 ?
- Il génÚre un SCN (System Change Number) : l'horloge logique de la DB.
- Il demande à LGWR de flusher le Redo Log Buffer vers le fichier Online Redo Log sur disque (I/O Séquentiel = Ultra Rapide).
- Il marque la transaction comme "Committed" dans l'en-tĂȘte de transaction (Undo Header).
- 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.
| Composant | RĂŽle |
|---|---|
| Online Redo Logs | Fichiers circulaires (min 2 groupes). LGWR écrit dedans en continu. Quand le Groupe 1 est plein, il passe au Groupe 2 (Log Switch). |
| Archived Logs | Copie 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 ?
- Rollback : Si je change d'avis, je remets le 1000.
- 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é).
- 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 :
- 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). - Database OPEN : La base est ouverte aux utilisateurs (dispo immédiate).
- 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).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.
| Niveau | Description |
|---|---|
| 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;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 Standby | Fonctionnement | Usage |
|---|---|---|
| Physical Standby | Copie 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 Standby | Traduit 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 Standby | Convertit 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 ?
| Mode | Transport | RPO (Perte max) | Impact Perf Primaire |
|---|---|---|---|
| Max Performance (Défaut) | ASYNC | Quelques secondes (ce qui est dans le buffer réseau). | Aucun. Le Master n'attend pas l'accusé de réception. |
| Max Availability | SYNC | Zéro. | Moyen. Le Master attend l'ACK de la Standby. Si la Standby est injoignable, il bascule temporairement en Async. |
| Max Protection | SYNC | ZĂ©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.
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).
| Action | Commande |
|---|---|
| Créer une police | CREATE AUDIT POLICY pol_acces_salaire ACTIONS SELECT ON hr.employees; |
| Activer | AUDIT POLICY pol_acces_salaire; |
| Consulter | SELECT * 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 :
SYSDBAactions.
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).
Comment parler Ă Oracle ?
Contrairement Ă Postgres, la couche client Oracle est "lourde" et intelligente.
| Type | Description | Usage |
|---|---|---|
| JDBC Thin | Driver 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_FINANCEPourquoi 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=2048SmartDB (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 ?
| Outil | Méthode | Impact |
|---|---|---|
| Oracle GoldenGate | Lit 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 Audit | Trigger 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".
L'illusion du "Gratuit"
Remplacer Oracle par Postgres annule le coût de licence, mais déplace les coûts ailleurs.
| Poste de Coût | Oracle | PostgreSQL (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/DR | Natif (RAC/DG). Cher mais intégré. | Complexe. Il faut assembler des briques (Patroni, HAProxy, pgBackRest). Coût humain élevé. |
| Talents | DBA 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énario | Recommandation | Pourquoi ? |
|---|---|---|
| Nouvelle App (Cloud Native) | GO POSTGRES | Aucune dette technique. Standard du cloud (AWS RDS, Azure Flex). |
| ERP Vendor (SAP...) | STAY ORACLE | Certifications éditeurs. Support critique. Performance validée. |
| App "Maison" riche en PL/SQL | STAY ORACLE | Le coût de réécriture du PL/SQL en Java/Python dépasse souvent 10 ans de licences Oracle. |
| Datawarehouse < 10TB | GO POSTGRES | Ou 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.
Comment Oracle compte ?
Il existe deux métriques principales. Vous devez choisir l'une ou l'autre.
| Métrique | Cible | Calcul (Enterprise Edition) |
|---|---|---|
| Processor | Applications Web, Utilisateurs illimités/inconnus. | Nb Coeurs Physiques * Core FactorEx: 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ée | Conséquence |
|---|---|---|
CREATE TABLE ... PARTITION BY RANGE | Partitioning | +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).
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éristique | Détail |
|---|---|
| Self-Driving | Patching automatique (Zéro downtime). Backup automatique. Tuning automatique (Auto-Indexing). |
| Self-Securing | Chiffrement Always-On. Pas d'accĂšs OS (mĂȘme pour Oracle). |
| Serverless | Vous 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
| Besoin | Solution Recommandée | Pourquoi ? |
|---|---|---|
| Performance ExtrĂȘme / Mission Critical | Exadata (OCI ou @Azure) | Rien ne bat l'Exadata pour les IOPS et le RAC. |
| Petit projet / Dev / Test | Autonomous 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 AWS | RDS for Oracle | Bien intégré à AWS, mais limité (pas de RAC, pas d'accÚs SYS/ROOT, versions en retard). |
La "Morning Checklist" du DBA
MĂȘme avec l'automatisation, certaines vĂ©rifications restent vitales pour dormir tranquille.
| Fréquence | Action | Pourquoi ? |
|---|---|---|
| Quotidien | Vérifier les Backups RMAN (Log de la nuit). | "Un backup non vérifié est un backup raté." |
| Quotidien | Scanner l'alert.log (erreurs ORA-00600 / ORA-07445). | Signes avant-coureurs de corruption ou bug interne. |
| Hebdo | Capacity Planning (Tablespace growth). | Ăviter le "Disk Full" Ă 3h du matin le dimanche. |
| Mensuel | Test 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é.
| Version | Type | Statut (2025) |
|---|---|---|
| 11g / 12c | Legacy | Fin de vie (EOL). Risque sécurité majeur. Migration urgente requise. |
| 19c | LTS (Long Term Support) | Le standard actuel. Supporté jusqu'en 2027+. C'est la destination de toutes les migrations. |
| 21c | Innovation | Support court. à éviter pour la Prod critique (Laboratoire uniquement). |
| 23ai | LTS (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 (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 rapidesLa "Morning Checklist" (Avant que ça casse)
Un DBA proactif ne se contente pas d'attendre l'alerte. Il cherche les signaux faibles.
| Check | Commande / Action | Pourquoi ? |
|---|---|---|
| 1. Alert Log | tail -f $ORACLE_BASE/diag/.../trace/alert_*.log | Le journal de bord. Chercher les erreurs "ORA-", les "Checkpoint not complete" ou les redémarrages inattendus. |
| 2. Backups | RMAN> 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 Disque | Vé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 Objects | SELECT 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 UPDATEnon 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 -verboseBest 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 Dette | Impact | Action de nettoyage |
|---|---|---|
| Index Inutilisés | Ralentit les INSERT/UPDATE inutilement. Consomme du stockage. | Activer le monitoring d'index (ALTER INDEX ... MONITORING USAGE) pendant 3 mois, puis dropper. |
| Objets Invalides | Erreurs 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Îmes | Faille de sécurité. | Auditer les logins (DBA_AUDIT_SESSION) et verrouiller les comptes inactifs depuis > 180 jours. |
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 Technique | Solution 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ées | Drop Partition : Au lieu de faire DELETE (lent), on "droppe" la partition du mois M-13 instantanément. |
| Performance I/O | Exadata : 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."
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).
| Profil | Tendance | Ce qu'on attend de lui |
|---|---|---|
| DBA de Production (Run) | đ En baisse | GĂ©rer 500 bases industrialisĂ©es. Scripting (Ansible/Python) obligatoire. |
| Expert Performance (Tuning) | đ En hausse | Le "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 | đ Explosion | Conçoit les architectures Hybrides (Oracle on-prem + AWS). Sait parler "RĂ©seau", "SĂ©curitĂ©" et "CoĂ»ts". |
| Dev PL/SQL Senior | âĄïž Stable | Maintenance 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 Mission | TJM Moyen | Contexte |
|---|---|---|
| DBA Prod (Régie) | 500 - 650 ⏠| Renfort d'équipe, MCO, Astreintes. Mission longue (1-3 ans). |
| Chef de Projet Migration | 700 - 900 ⏠| Piloter une migration vers le Cloud (ExaCS) ou une montée de version 19c. |
| Expert Tuning / Audit | 900 - 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é."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.
| Feature | Impact |
|---|---|
| AI Vector Search | Permet 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 AI | Traduire 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 ML | Entraß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.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 DUALRetry 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-Pattern | SymptĂŽme | Solution |
|---|---|---|
| Le problĂšme N+1 | Des 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 Loop | log 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 Variables | Hard Parse CPU 100%. SELECT * FROM t WHERE id = 123 (littéral). | Utiliser WHERE id = :1 (Bind). Obligatoire sur Oracle. |
| Fetch excessif | Ré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.
Comparatif Technique & Fonctionnel
Analyse objective des forces en présence pour 2025.
| Domaine | Oracle Database (EE) | PostgreSQL (16+) |
|---|---|---|
| Architecture | Process-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 Dispo | RAC (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). |
| Performance | Roi 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. |
| Indexation | B-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Ă»t | Licence 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'Usage | Choix Recommandé | Justification |
|---|---|---|
| Core Business (ERP, Banque, Billing) | ORACLE | Besoin 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 / Microservices | POSTGRESQL | Cloud-native, conteneurisation facile (Docker), pas de coût de licence, parfait pour CI/CD. |
| Datawarehouse / Analytics | SNOWFLAKE / BIGQUERY | Ni l'un ni l'autre. Pour l'analytique pure, le Cloud (Serverless SQL) est souvent plus rentable qu'Oracle Exadata ou Postgres. |
| Stockage JSON / GeoSpatial | POSTGRESQL | PostGIS 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).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.
| Pilier | Description |
|---|---|
| Self-Driving | Patching OS et DB sans arrĂȘt de service. Tuning SQL automatique (crĂ©ation d'index). Backup auto. |
| Self-Securing | Chiffrement Always-On. Pas d'accĂšs root (mĂȘme pour Oracle). Patching de sĂ©curitĂ© immĂ©diat. |
| Self-Repairing | Dé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Ăšle | Principe | Pour qui ? |
|---|---|---|
| License Included | Le 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.
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 Event | Classe | Signification Technique | Action DBA |
|---|---|---|---|
| db file scattered read | User I/O | Full Table Scan (lecture multiblocs). | Vérifier plan d'exec. Manque d'index ? Stats périmées ? |
| db file sequential read | User I/O | Index Scan (lecture monobloc). | Normal en OLTP. Si excessif : index fragmenté ou "Index Range Scan" trop large. |
| log file sync | Commit | Attente d'écriture du LGWR sur disque. | Disques Redo lents ? Trop de commits (boucle) ? CPU saturé ? |
| direct path read/write | User I/O | Lectures directes (bypass Buffer Cache). | Parallel Query, Sorts sur disque (TEMP), Hash Joins massifs. |
| SQL*Net message from client | Network | La 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
| Outil | Description | Commande |
|---|---|---|
| oratop | Le "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