Project Oxygen & Ideo-LabIDEO LAB Dashboard 2026

đŸ’Ÿ DB2 for z/OS – Le Guide Ultime

Deep Dive : Architecture (MSTR, DBM1, IRLM), Storage (VSAM, UTS), Concurrence (Locks) & Sysplex (Data Sharing).

1 Avancé

1. Architecture z/OS

Les "Address Spaces" : MSTR, DBM1, DIST, IRLM. Pools (EDM, Bufferpools).

z/OS DBM1 IRLM
2 Avancé

2. Storage & Fichiers

VSAM LDS (les "fichiers"). Catalog/Directory, Tablespaces (UTS).

VSAM Tablespace UTS
3 Avancé

3. Logging & Recovery

RBA/LRSN (le "temps" DB2). Checkpoints, Archive Logs, Restart.

RBA/LRSN Recovery
4 Avancé

4. 🔒 Concurrence & Locks

Critique (OLTP). L-LOCK / P-LOCK, Modes (IS, IX, S, X), Deadlock.

Locks Deadlock
5 Avancé

5. Bufferpools & Tuning

BP0, BP8K... Le cache (RAM). PGSTEAL, Deferred Write.

Bufferpool Tuning
6 Avancé

6. Access Paths & Optimizer

Dynamic vs Static SQL. Packages & Plans. RUNSTATS.

Optimizer Static SQL
7 Avancé

7. Sysplex (Data Sharing)

Le "Cluster" (multi-nƓud). Coupling Facility (CF), GBP, Failover.

Sysplex Data Sharing
8 Avancé

8. Monitoring (Troubleshooting)

SMF (100/101), IFCID (3, 199, 400), Wait Event Analysis.

SMF IFCID
9 Moyen

9. Exploitation (Utilitaires)

REORG, RUNSTATS, CHECK, COPY, QUIESCE, LOAD/UNLOAD.

REORG RUNSTATS
10 Moyen

10. Cas d'Usage Réels

SystĂšme core bancaire (compte courant), facturation, transactions cartes.

Core Banking OLTP
11 Moyen

11. Diagrammes

Flux mémoire, logs, I/O, Sysplex.

Diagrams Architecture
12 Avancé

12. Cheat-Sheets

Commandes CLIST/TSO (-DIS), templates JCL (DSNTEP2), SQL (patterns).

cheat JCL
1. Architecture DB2 for z/OS (Address Spaces)

DB2 (comme tout sous z/OS) ne tourne pas comme un seul "processus". Il s'exécute en tant que plusieurs **Address Spaces (AS)** (espaces d'adressage mémoire) qui collaborent.

Diagramme (Simplifié)
(Client: CICS, Batch/JCL, TSO)
         |
         | (Connexion)
         ▌
+-----------------+
|   DIST (as)     | (Distributed Data Facility)
| (Réseau / TCP/IP) |
+-----------------+
         |
         ▌
+-----------------+
|   MSTR (as)     | (Master / System Services)
| (Coordinateur)  |
+-----------------+
         |
         +----------------------------------+
         |                                  |
         ▌                                  ▌
+-----------------+                  +-----------------+
|   DBM1 (as)     | (Database Manager) |   IRLM (as)     | (Lock Manager)
| (Le "Cerveau" SQL)|                  | (Gestionnaire de |
| (EDM Pool)      |                  |  Verrous)       |
| (Bufferpools)   |                  +-----------------+
+-----------------+
Address SpaceRĂŽle (Ce qu'il fait)
MSTR (Master)Le "CƓur". DĂ©marre/ArrĂȘte DB2. GĂšre les logs, l'archivage, les commandes opĂ©rateur.
DBM1 (Database Mgr)Le "Cerveau". GÚre la mémoire (Bufferpools, EDM Pool), exécute le SQL, gÚre les accÚs aux données (I/O).
DIST (Distributed)Le "Porte". GÚre les connexions réseau (TCP/IP) (ex: un client Java ou une API externe).
IRLM (Lock Manager)Le "Gendarme". (Intersystem Resource Lock Manager). GĂšre **tous** les verrous (Locks) (voir 4.4).
WLM (Workload Mgr)(Composant z/OS) Le "Prioritiseur". GĂšre la prioritĂ© CPU des requĂȘtes (CICS = haute, Batch Nuit = basse).
2. Storage & Fichiers (VSAM, Tablespaces)

DB2 ne stocke pas ses données dans un "gros fichier .db". Il utilise une structure complexe de fichiers (datasets) gérés par z/OS.

1. Fichiers Physiques (VSAM LDS)

Au plus bas niveau, les données sont stockées dans des VSAM Linear Data Sets (LDS). C'est le "fichier plat" (dataset) sur le disque (DASD). L'OS (z/OS) voit un LDS, mais DB2 (DBM1) voit un Tablespace.

2. Hiérarchie (Catalog & Directory)

DB2 utilise un "meta-stockage" pour se gĂ©rer lui-mĂȘme :

  • Catalog (DSNDB06) : La "meta-base". Contient les dĂ©finitions (SYSTABLES, SYSCOLUMNS...). C'est ici que le CREATE TABLE est stockĂ©.
  • Directory (DSNDB01) : Le "cache interne" (DBD, Plans...). (Invisible pour l'utilisateur).
3. Le Tablespace (UTS) (Le "Conteneur" de Table)

On ne stocke pas une TABLE. On stocke un TABLESPACE, qui contient une (ou plusieurs) TABLE(s).

UTS (Universal Table Space) est le standard moderne (recommandé). Il ne contient qu'une seule table.

  • PBG (Partition-By-Growth) : (Le plus simple). Un UTS qui grossit "par morceaux" (partitions) automatiquement (ex: ajoute un nouveau fichier VSAM de 4Go quand il est plein).
  • PBR (Partition-By-Range) : (Le plus performant/complexe). L'Admin partitionne la table (ex: par ANNEE, CODE_CLIENT). Permet le "Partition Pruning" (l'Optimizer ne lit que la partition 2024) et l'exploitation (REORG d'une seule partition).
3. Logging & Recovery

Le "Logging" (Journalisation) est la fonction la plus critique de DB2 (garantit ACID).

Diagramme (Flux de Log)
(UPDATE/INSERT/DELETE)
      |
      ▌
+-----------------+
| Log Buffer (RAM)| (Rapide)
+-----------------+
      | (Full / Checkpoint / Commit)
      ▌
+-----------------+
| Active Log (Disque)| (Circulaire)
+-----------------+
      | ("Offload" quand plein)
      ▌
+-----------------+
| Archive Log (Bande/Disque)
| (Historique/Backup)
+-----------------+
  • RBA/LRSN (L'Horloge) : DB2 n'utilise pas de "timestamp". Il utilise un RBA (Relative Byte Address) (ou LRSN en Sysplex). C'est le "compteur kilomĂ©trique" (offset) du log. (Ex: "Le Checkpoint est Ă  RBA=5000", "Ce COMMIT est Ă  RBA=5120").
  • Checkpoint (Point de contrĂŽle) : Moment oĂč DB2 "force" l'Ă©criture des pages modifiĂ©es (sales) (des Bufferpools) sur disque (VSAM). Permet un redĂ©marrage (Restart) rapide.
  • Group Commit : (Performance OLTP) DB2 attend (quelques ms) pour "grouper" plusieurs COMMIT (ex: 50 COMMITS) en une seule I/O physique sur l'Active Log.
  • Restart (Recovery) :
    • Restart Light : (AprĂšs un crash) DB2 lit l'Active Log depuis le dernier Checkpoint -> ROLLBACK (UNDO) les COMMITS non validĂ©s, ROLLFORWARD (REDO) les COMMITS validĂ©s mais non Ă©crits.
    • Cold Start / Recovery : (AprĂšs une perte disque) Restaure le COPY (Backup), puis applique les Archive Logs.
4. 🔒 Concurrence & Locks (Critique OLTP)

Le **Locking** (Verrouillage) est le cƓur de la performance **OLTP (Transactionnel)**. C'est gĂ©rĂ© par l'IRLM (1.1).

DB2 utilise un verrouillage "multi-granularité" (Tablespace, Table, Page, Ligne).

Types de Verrous (Locks)
ModeNomDescription
IS (Intent Share)Intention Partagée"Je veux lire (S) une (ou plusieurs) LIGNE(s) dans cette PAGE."
IX (Intent Exclusive)Intention Exclusive"Je veux modifier (X) une (ou plusieurs) LIGNE(s) dans cette PAGE."
S (Share)Partagé"Je lis (SELECT) la PAGE (ou Ligne). D'autres peuvent lire (S), personne ne peut écrire (X)."
SIX (Share + Intent Excl)Combo"Je lis (S) TOUTE la table, ET je veux modifier (IX) certaines lignes." (Ex: UPDATE TBL SET A=A+1).
X (Exclusive)Exclusif"Je modifie (UPDATE/DELETE) la PAGE (ou Ligne). Personne ne peut lire (S) ni écrire (X)."
Deadlock (Étreinte fatale)

Un "Deadlock" se produit quand :
1. Transaction A prend un Lock (X) sur la Ligne 1.
2. Transaction B prend un Lock (X) sur la Ligne 2.
3. Transaction A demande un Lock (X) sur la Ligne 2 (Bloquée par B).
4. Transaction B demande un Lock (X) sur la Ligne 1 (Bloquée par A).

L'IRLM détecte ce cycle (via son "Deadlock Detector") et choisit une "victime" (généralement celle qui a fait le moins de COMMITS) et lui envoie un SQLCODE -911 (Rollback). C'est au programme (COBOL/CICS) de gérer ce -911 (ex: retenter l'opération).

5. Bufferpools & Memory Tuning (DBM1)

Le Bufferpool (Pool de Tampons) est le "Cache" (RAM) principal de DB2 (dans l'Address Space DBM1). C'est là que DB2 stocke les pages de données (lues depuis le disque VSAM) pour éviter les I/O (l'opération la plus lente).

On définit plusieurs pools, (BP0, BP1... BP3K, BP8K...) de tailles différentes (4K, 8K, 16K) pour les différents Tablespaces (Index vs Données).

Diagramme (I/O & Bufferpool)
(SQL: SELECT * FROM ... WHERE ID=1)
      |
      ▌
+-------------------------+
| DBM1 (Cerveau)          |
| (1. "Ai-je la page X ?")|
+-------------------------+
      |
      ▌
+-------------------------+
| Bufferpool (RAM)        |
| (2. OUI: Hit !)         | (2. NON: Miss...)
+-------------------------+
      | (Hit: Rapide)         | (Miss: Lent)
      ▌                     ▌
(Retour)              (I/O -> VSAM (Disque))
Concepts de Tuning
  • Page Fix : (PGFIX=YES) "Verrouille" le Bufferpool en mĂ©moire rĂ©elle (pas de "paging" z/OS). (Critique pour la performance OLTP).
  • PGSTEAL (Steal Algorithm) : L'algorithme (LRU - Least Recently Used) qui dĂ©cide quelle "vieille" page (non utilisĂ©e) doit ĂȘtre "volĂ©e" (steal) (retirĂ©e du cache) pour faire de la place.
  • Deferred Write (Écriture DiffĂ©rĂ©e) : DB2 n'Ă©crit **pas** un UPDATE sur disque au COMMIT (c'est le Log qui garantit l'ACID). Il Ă©crit "plus tard" (diffĂ©rĂ©), quand le Bufferpool est plein ou au Checkpoint.
6. Access Paths & Optimizer (Static vs Dynamic)

L'"Optimizer" (Optimiseur) DB2 est le composant qui choisit le "Access Path" (Chemin d'accĂšs) (ex: "Utiliser l'Index A" ou "Faire un full TableScan ?").

RUNSTATS : L'utilitaire (JCL, voir 9.1) **critique** qui collecte les statistiques (CARDINALITY, HIGH2KEY...) sur les tables/index. Sans RUNSTATS, l'Optimizer est "aveugle" et choisit des chemins d'accÚs désastreux.

TypeDescriptionAvantageInconvénient
Static SQL (Statique)Le SQL est "embarqué" (EXEC SQL) dans le programme (COBOL) et **compilé** (PREPARE, BIND) à l'avance.Performance (OLTP). Le chemin d'accÚs (Access Path) est déjà calculé et stocké (Package/Plan).Rigide. (Si les données changent (RUNSTATS), il faut REBIND le Package).
Dynamic SQL (Dynamique)Le SQL est un string envoyĂ© "Ă  la volĂ©e" (ex: via un client Java/JDBC).FlexibilitĂ©. (Analytique, Outils BI).Plus lent (Overhead). DB2 doit "parser" et "optimiser" la requĂȘte Ă  *chaque* exĂ©cution.
7. Sysplex & Data Sharing (Haute Disponibilité)

ProblĂšme : J'ai 1 Mainframe (LPAR) qui exĂ©cute DB2. S'il tombe (panne matĂ©rielle), la banque s'arrĂȘte.

Solution : Sysplex (Data Sharing). C'est l'architecture "Cluster" (Actif-Actif) de DB2.

Plusieurs instances DB2 (sur des LPARs/machines diffĂ©rentes) accĂšdent aux **mĂȘmes** fichiers VSAM (disques partagĂ©s), mais chaque instance a ses propres Bufferpools (cache RAM).

Diagramme (Sysplex Data Sharing)
(Clients -> DDF -> Routeur)
       |                            |
       ▌                            ▌
+-----------------+            +-----------------+
| LPAR 1 (OS 1)   |            | LPAR 2 (OS 2)   |
| +-------------+ | (Communique)| +-------------+ |
| | DB2 (MSTR1) | |<-- (CF) -->| | DB2 (MSTR2) | |
| | (BP 1)      | |            | | (BP 2)      | |
| +-------------+ |            +-------------+ |
+-----------------+            +-----------------+
       | (I/O)                      | (I/O)
       +------------+---------------+
                    |
                    ▌
            +----------------+
            | Disques (VSAM) | (Partagés)
            +----------------+
Coupling Facility (CF) (Le "Coordinateur")

Le CF (matériel ou logiciel) est le "cerveau" partagé qui gÚre le "Data Sharing" :

  • Lock Structure : GĂšre les verrous (Locks) (P-LOCKS) *entre* les LPARs.
  • Group Buffer Pools (GBP) : GĂšre la "cohĂ©rence du cache" (s'assure que le BP 1 et le BP 2 ont la mĂȘme version d'une page).
8. Monitoring & Troubleshooting (SMF/IFCID)

Comment "dépanner" DB2 ? On utilise des outils (ex: DataDog, Omegamon) qui lisent les "traces" (IFCIDs) générées par DB2 (envoyées via SMF).

OutilDescription
SMF (System Management Facilities)Le "logger" (collecteur) de z/OS. DB2 écrit ses "Accounting" (compta) et "Statistics" (stats) dans les SMF 100 (Stats) et 101 (Accounting).
IFCID (Instrumentation Facility ID)Les "événements de trace" (l'équivalent des "Spans" APM). Un "IFCID" est un type d'événement (ex: IFCID 003 = "Début/Fin de SQL").
IFCIDs Critiques (pour l'analyse de "Wait Events")

Pour savoir "Pourquoi ma requĂȘte est lente ?", on analyse les "Wait Events" (temps d'attente) de la requĂȘte :

  • IFCID 199 (Bufferpool) : Temps d'attente I/O (Synchrone) (ex: sync_read_io_time). (ProblĂšme de Bufferpool (5.1)).
  • IFCID 400/401 (Locks) : Temps d'attente sur un Verrou (Lock). (ProblĂšme de Concurrence (4.4)).
  • IFCID 003 (SQL) : Temps CPU total vs Temps d'attente total.
9. Exploitation & Maintenabilité (Utilitaires JCL)

La maintenance de DB2 se fait via des "Utilitaires" (Utilities), qui sont des programmes (ex: DSNUTILB) lancés via JCL (voir 4.1).

Utilitaire (EXEC PGM=...)RĂŽle (Quoi/Pourquoi)Niveau (SHRLEVEL)
REORGRéorganise un Tablespace (dés-fragmente, récupÚre l'espace vide aprÚs DELETES).SHRLEVEL CHANGE (Permet R/W)
RUNSTATS(Critique) Met à jour le Catalogue (SYSTABLES) avec les statistiques (Cardinalité...).SHRLEVEL CHANGE (Permet R/W)
COPYPrend un Backup (Image Copy) du Tablespace (pour Recovery (3.1)).SHRLEVEL CHANGE (Permet R/W)
CHECK DATAVérifie l'intégrité référentielle (Clés étrangÚres).SHRLEVEL REFERENCE (Permet R)
QUIESCEMet en "pause" (read-only) un Tablespace (pour garantir un point de consistance).(Bloque les écritures)
LOAD / UNLOADImport (Load) / Export (Unload) de données en masse (ex: depuis/vers un fichier séquentiel).SHRLEVEL NONE (Bloque tout)
10. Cas d'Usage Réels

DB2 for z/OS (et le Mainframe) excelle dans les environnements **OLTP (Online Transaction Processing)** Ă  trĂšs haute volumĂ©trie et trĂšs haute fiabilitĂ© (oĂč 0% de perte de donnĂ©es est la norme).

SecteurCas d'usagePourquoi DB2/zOS ?
Banque (Core Banking)SystÚme de compte courant (UPDATE SOLDE ... WHERE ID=...).Volume (Milliards de transactions), Fiabilité (ACID), Sécurité.
Finance (Cartes)Autorisation de transaction par carte (SELECT ... WHERE CARD_ID=...).Latence (doit répondre en < 50ms), Uptime (99.999%).
AssuranceGestion des polices, facturation (batch de nuit).Capacité de traitement Batch (JCL) (ex: "Calculer 10M de primes").
11. Diagrammes

Diagrammes conceptuels (voir les modales précédentes pour le contexte) :

Architecture (Address Spaces)

(Voir Modale 1.1) Montre MSTR, DBM1, DIST, IRLM.

Bufferpool (I/O)

(Voir Modale 5.1) Montre le flux SQL -> Bufferpool -> (Miss) -> VSAM.

Logging & Recovery

(Voir Modale 3.1) Montre Log Buffer (RAM) -> Active Log -> Archive Log.

Sysplex (Data Sharing)

(Voir Modale 7.1) Montre LPAR1/DB2 <-> CF <-> LPAR2/DB2 (partageant le disque VSAM).

12. Cheat-Sheets (Exploitation)
Commandes TSO/CLIST (Admin)

(Exécutées depuis l'écran TSO/ISPF pour interagir avec DB2).

* (Préfixe du sous-systÚme DB2, ex: DSN1)
-DSN1 DISPLAY DATABASE(DB_NAME) SPACE(TS_NAME) LOCKS
-DSN1 DISPLAY THREAD(*) TYPE(ACTIVE)
-DSN1 DISPLAY BUFFERPOOL(BP0) DETAIL
-DSN1 DISPLAY GROUP   (Sysplex)
-DSN1 STOP DATABASE(DB_NAME) SPACENAM(TS_NAME)
-DSN1 START DATABASE(DB_NAME) SPACENAM(TS_NAME)
JCL (Utilitaires Batch)

(Template JCL pour REORG).

//REORGJOB JOB ...
//STEP1    EXEC PGM=DSNUTILB,PARM='DSN1,MONREORG'
//SYSIN    DD *
  REORG TABLESPACE DB_NAME.TS_NAME
    SHRLEVEL CHANGE
    LOG NO
//SYSPRINT DD SYSOUT=*
JCL (SQL Batch - DSNTEP2)

(DSNTEP2 est le programme "client SQL" de JCL).

//SQLJOB   JOB ...
//STEP1    EXEC PGM=IKJEFT01
//SYSTSPRT DD SYSOUT=*
//SYSTSIN  DD *
  DSN SYSTEM(DSN1)
  RUN PROGRAM(DSNTEP2)
  END
//SYSIN    DD *
  SELECT * FROM MA_TABLE
  WHERE ID < 100;
  
  DELETE FROM LOGS
  WHERE TIMESTAMP < (CURRENT DATE - 30 DAYS);
/*