Missions principales du DBA
8 axes opérationnels avec checklists, anti-patterns, KPIs, snippets (PostgreSQL/Oracle/MySQL) et patrons HA/DR.
SLO: Uptime ≥ 99.95% • RPO ≤ 5m • RTO ≤ 30m Inclut: Liquibase, Ansible, RMAN, DMS RGPD, chiffrement, audit
1) Installation & configuration des SGBD
Checklist bootstrap
- OS durci (kernel params, swappiness, noatime, hugepages si Oracle).
- Stockage : séparer data, WAL/redo, temp, backups; IOPS garanties.
- Encodage/collation uniformes (UTF-8 recommandé), timezone & locale fixées.
- Comptes/services dédiés, permissions strictes, umask cohérent.
- Pooler connexions si utile (pgBouncer/ProxySQL), ports fermés par défaut.
Anti-patterns
- Tout sur un seul disque / pas de RAID / pas d’IOPS réservés.
- Paramètres par défaut en prod, pas d’audit d’installation.
- Horloge système non synchronisée (NTP), timezone incohérente.
Tuning initial (exemples)
- PostgreSQL :
shared_buffers≈25% RAM,work_mempar session,effective_cache_size≈50–75%,wal_level=replica,max_wal_sizeadapté. - MySQL :
innodb_buffer_pool_size≈60–75%,innodb_log_file_sizelarge,redo logsur disque rapide,sync_binlog=1si exigences fortes. - Oracle :
SGA/PGAsizing,redo groups≥3,archive logactivé,filesystemio_options=setall.
Snippets
# PostgreSQL init
initdb -D /pgdata -E UTF8 --locale=en_US.UTF-8
echo "shared_buffers=8GB" >> /pgdata/postgresql.conf
echo "wal_level=replica" >> /pgdata/postgresql.conf
# MySQL (session, pour test)
SET GLOBAL innodb_buffer_pool_size=6442450944;
# Oracle (SQL*Plus)
ALTER SYSTEM SET sga_target=8G SCOPE=SPFILE;
ALTER SYSTEM SET pga_aggregate_target=2G SCOPE=SPFILE;2) Maintenance & monitoring
Observabilité
- Exporters Prometheus : postgres_exporter, mysqld_exporter, OEM metrics.
- KPIs : p95 latence, TPS/QPS, bloat, verrous, IOPS/latence disque, lag réplication.
- Alerting : seuils dynamiques, silence pendant fenêtres maintenance, on-call SRE.
Maintenance
- PostgreSQL : autovacuum tuning,
VACUUM (ANALYZE),REINDEXciblé. - MySQL :
OPTIMIZE TABLE(selon moteur), purge binlogs, analyze. - Oracle :
DBMS_STATS.GATHER_DATABASE_STATS, segment advisor. - Patching : mineur mensuel, sécurité ASAP ; rollback planifié.
Snippets utiles
-- Top N requêtes PostgreSQL
SELECT query, calls, total_exec_time
FROM pg_stat_statements ORDER BY total_exec_time DESC LIMIT 10;
-- Oracle stats
EXEC DBMS_STATS.GATHER_DATABASE_STATS;
-- MySQL métriques InnoDB
SHOW ENGINE INNODB STATUS\GAnti-patterns : autovacuum désactivé, patchs sautés, aucune alerte sur backups, logs jamais revus.
3) Performance tuning (plans, index, paramètres)
Méthode d’investigation
- Profiler → plan → index → paramètres → caches → schéma.
- Réduire les scans complets (sélectivité, covering index, composite).
- Limiter N+1 (ORM), préférer pagination keyset vs OFFSET profond.
Anti-patterns
- Wildcard en début (
%abc), fonctions sur colonnes indexées. - Index en doublon, absence de statistics à jour.
Exemples
-- PostgreSQL
EXPLAIN (ANALYZE, BUFFERS)
SELECT * FROM orders WHERE customer_id=$1 AND created_at>now()-interval '30d';
CREATE INDEX ON orders(customer_id, created_at);
-- MySQL
EXPLAIN FORMAT=JSON
SELECT * FROM t WHERE status='OK' AND dt>NOW()-INTERVAL 7 DAY;Paramètres & structures
- PostgreSQL : shared_buffers, work_mem, effective_cache_size, maintenance_work_mem.
- MySQL : innodb_buffer_pool_size, log_file_size, tmp_table_size.
- Oracle : optimizer_features_enable, parallel_degree_policy.
- Index : B-Tree, Hash, GIN/GiST (text/geo), Bitmap (Oracle).
- Partitionnement : range/list/hash ; pruning ciblé.
4) Sécurité & conformité (RBAC, chiffrement, audit, RGPD)
Contrôles essentiels
- RBAC “least privilege”, comptes nominatifs, MFA obligatoire.
- TLS partout ; chiffrement at-rest (TDE/tablespace) ; rotation des clés (KMS).
- Audit des accès (pgAudit / Unified Auditing / MySQL Audit Plugin).
- Secrets gérés (AWS Secrets Manager/HashiCorp Vault), rotation & accès JIT.
RGPD & PII
- Cartographie des PII, minimisation, rétention/régime légal documentés.
- Masquage/anonymisation en pré-prod ; jeux synthétiques.
- Traçabilité : journaux inviolables (WORM/object-lock) & accès horodatés.
Snippets
-- PostgreSQL : rôle lecture
CREATE ROLE app_ro LOGIN PASSWORD '***';
GRANT CONNECT ON DATABASE appdb TO app_ro;
GRANT USAGE ON SCHEMA public TO app_ro;
GRANT SELECT ON ALL TABLES IN SCHEMA public TO app_ro;
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO app_ro;
-- pgAudit (postgresql.conf)
shared_preload_libraries = 'pgaudit'
pgaudit.log = 'read, write'Anti-patterns : comptes partagés, ports DB publics, backups non chiffrés, absence de rotation de secrets.
5) Sauvegardes & restauration (DRP)
Stratégies
- PITR (journal continu) + full/diff/incr.
- Rétention ≥ 35j ; sauvegardes isolées/immutables (object-lock).
- Test de restauration hebdomadaire (scripté) + rapport automatisé.
KPIs & SLO
| Indicateur | Définition | Cible |
|---|---|---|
| RPO | Perte max | ≤ 5 min |
| RTO | Temps de reprise | ≤ 15–30 min |
| Taux succès | Backups valides | ≥ 99% |
Snippets
# PostgreSQL
pg_dump -Fc -j4 appdb > /bkp/appdb_$(date +%F).dump
pg_basebackup -D /replica -R -X stream -C -S slot01
# MySQL/MariaDB
mysqldump --single-transaction --routines appdb | gzip > /bkp/app.sql.gz
# Oracle RMAN
BACKUP DATABASE PLUS ARCHIVELOG;
RESTORE DATABASE; RECOVER DATABASE;Contrôles
- Restores de contrôle (table, base complète, point dans le temps).
- Chiffrement des sauvegardes (KMS), rotation clés, accès restreint.
- Documentation DRP + exercices “game-day”.
Anti-patterns : un seul jeu de backups, absence de test de restore, pas d’immutabilité.
6) Haute disponibilité & scalabilité
Patterns HA
- PostgreSQL : Patroni/pg_auto_failover + HAProxy/pgBouncer ; synchro/async selon SLO.
- MySQL : Group Replication / InnoDB Cluster + Orchestrator (élections, topologie).
- Oracle : Data Guard ; RAC si besoin de scalabilité horizontale.
Scalabilité
- Lecture : réplicas RO, caches, CQRS.
- Écriture : sharding par clé (consistent hashing), partitionnement.
- Cloud : Multi-AZ, cross-region async, Aurora Global DB.
Contrôles & tests
- Failover régulier ; TTL DNS, reprise de connexion (poolers).
- Surveiller lag & divergence ; prévenir split-brain.
- Bench post-bascule (latence, erreurs, coûts).
Anti-patterns : un seul nœud, réplication synchrone trans-région, absence de tests de bascule, pas de proxy/pooler.
7) Support aux développeurs (contrats de schéma, SQL, CI/CD)
Contrats & qualité
- Schéma versionné (Liquibase/Flyway), migrations idempotentes & rollback.
- Conventions : noms (snake_case), types, contraintes (PK/FK/unique/check).
- Datasets de test réalistes (anonymisés), tests de cohérence.
Revues & patterns
- Revues SQL/EXPLAIN ; patrons d’index (covering, composite, partial).
- ORM : éviter N+1, transactions bien bornées, pagination keyset.
- Pooler connexions & limites ; timeout raisonnables.
Snippets
-- Postgres : rôles appli
CREATE ROLE app_rw;
GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA public TO app_rw;
-- Liquibase (extrait XML)
<changeSet id="2025-09-12-01" author="dba">
<addColumn tableName="orders">
<column name="status" type="varchar(16)" defaultValue="NEW"/>
</addColumn>
</changeSet>Anti-patterns : migrations manuelles en prod, ORM sans contraintes, absence de données de test.
8) Migrations & intégration Cloud
Stratégies
- Dump/restore (downtime) vs CDC (near-zero downtime) vs réplication logique.
- Compatibilité : types, fonctions, collations, fuseaux horaires.
- Plan de cutover : répétitions, backout plan, validation fonctionnelle.
Outils & Cloud
- AWS : DMS/Aurora ; GCP : Database Migration Service/AlloyDB ; Azure : DMS.
- Oracle : GoldenGate ; MySQL : replication/gh-ost/pt-osc ; Postgres : logical decoding/pglogical.
- IaC : Terraform (DB + sécurité + monitoring), Ansible pour post-config.
Snippets & validation
# Terraform RDS (extrait)
resource "aws_db_instance" "app" {
engine="postgres" multi_az=true allocated_storage=200
instance_class="db.m6g.large" backup_retention_period=35
}
# Comparatif de résultats
-- Post-migration: checksums & diff échantillonnés, latence p95, throughput- Tests de bascule (réplica → primary), rollback documenté.
- Revue coûts : stockage, IOPS, trafic inter-AZ/région.
Anti-patterns : big-bang sans répétition, absence de CDC, DNS/TTL non préparés, pas de tests de performance.
