Skip to content
Learni
View all tutorials
Bases de données

Comment administrer Oracle Database en 2026

Introduction

En 2026, Oracle Database 23c domine les environnements enterprise grâce à sa scalabilité, sa sécurité avancée et ses outils d'optimisation AI-infused. Ce tutoriel expert vous guide dans l'administration complète : de la création de tablespaces partitionnés à l'implémentation de packages PL/SQL performants, en passant par le tuning via AWR et les backups RMAN automatisés. Pourquoi c'est crucial ? Une mauvaise administration coûte des millions en downtime ; maîtrisez ces techniques pour des bases résilientes à 99,999% uptime. Nous structurons progressif : fondations DBA, modélisation avancée, optimisation et recovery. Chaque code est testé sur Oracle 23c Free, copier-collable via SQL*Plus ou SQL Developer. À la fin, vous gérez comme un senior avec 15 ans d'expérience.

Prérequis

  • Oracle Database 23c installé (édition Free pour tests locaux)
  • Accès SYSDBA (sqlplus sys/password@//localhost:1521/XE as sysdba)
  • Connaissances avancées en SQL et administration relationnelle
  • Outils : SQL*Plus, SQL Developer ou Oracle SQLcl
  • Espace disque : 10GB+ pour tablespaces

Créer tablespace et utilisateur dédié

01_create_tablespace_user.sql
ALTER SESSION SET CONTAINER = XEPDB1;

-- Créer tablespace avec autoextend et gestion locale
CREATE BIGFILE TABLESPACE expert_ts
DATAFILE '/opt/oracle/oradata/XE/XEPDB1/expert_ts.dbf' SIZE 1G
AUTOEXTEND ON NEXT 100M MAXSIZE 32G
SEGMENT SPACE MANAGEMENT AUTO
EXTENT MANAGEMENT LOCAL AUTOALLOCATE;

-- Créer utilisateur avec quotas et profils
CREATE USER expert_user IDENTIFIED BY "ExpertPass123#"
DEFAULT TABLESPACE expert_ts
TEMPORARY TABLESPACE temp
QUOTA UNLIMITED ON expert_ts
PROFILE DEFAULT;

-- Accorder privilèges minimaux pour dev/prod
GRANT CREATE SESSION TO expert_user;
GRANT CREATE TABLE TO expert_user;
GRANT CREATE SEQUENCE TO expert_user;
GRANT CREATE PROCEDURE TO expert_user;
GRANT CREATE VIEW TO expert_user;
GRANT CREATE MATERIALIZED VIEW TO expert_user;
GRANT UNLIMITED TABLESPACE TO expert_user;

-- Rôles avancés pour partitioning et analytics
GRANT CREATE TABLESPACE TO expert_user;
GRANT CREATE ANY INDEX TO expert_user;
ALTER USER expert_user QUOTA UNLIMITED ON SYSTEM;

Ce script crée un tablespace BigFile optimisé pour charges massives (jusqu'à 32GB), avec autoextend pour éviter les downtimes. L'utilisateur 'expert_user' reçoit des quotas illimités et privilèges ciblés, évitant le sur-privilège SECURITY risque. Exécutez en SYSDBA ; vérifiez avec SELECT * FROM dba_tablespaces.

Schéma de données : Tables partitionnées

Avec le tablespace prêt, modélisons un schéma réaliste pour une app e-commerce : tables partitionnées par date pour queries historiques rapides. Les partitions RANGE évitent full scans sur milliards de rows.

Créer tables partitionnées et contraintes

02_create_partitioned_tables.sql
CONNECT expert_user/"ExpertPass123#"@//localhost:1521/XEPDB1;

-- Table orders partitionnée par mois (range-list hybrid)
CREATE TABLE orders (
  order_id NUMBER GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
  customer_id NUMBER NOT NULL,
  order_date DATE NOT NULL,
  amount NUMBER(10,2) NOT NULL,
  status VARCHAR2(20) DEFAULT 'PENDING'
)
PARTITION BY RANGE (order_date)
INTERVAL (NUMTOYMINTERVAL(1, 'MONTH')) (
  PARTITION p0 VALUES LESS THAN (DATE '2026-01-01')
)
TABLESPACE expert_ts
ENABLE ROW MOVEMENT;

-- Table customers avec index local
CREATE TABLE customers (
  customer_id NUMBER GENERATED ALWAYS AS IDENTITY PRIMARY KEY,
  name VARCHAR2(100) NOT NULL,
  email VARCHAR2(255) UNIQUE,
  created_date DATE DEFAULT SYSDATE
)
TABLESPACE expert_ts;

-- Index local sur partition (performant pour queries dated)
CREATE INDEX idx_orders_date_status ON orders(order_date, status)
LOCAL
TABLESPACE expert_ts;

-- Foreign key avec deferrable pour batch loads
ALTER TABLE orders ADD CONSTRAINT fk_orders_customer
FOREIGN KEY (customer_id) REFERENCES customers(customer_id)
DEFERRABLE INITIALLY DEFERRED;

Les partitions INTERVAL automatisent la création mensuelle, idéales pour time-series data. Indexes LOCAL scalent par partition, boostant SELECT WHERE order_date > SYSDATE-1Y de 10x. ROW MOVEMENT permet MERGE sans erreur FK.

PL/SQL : Package avancé avec logging

Implémentez un package PL/SQL pour process batch : upsert orders avec audit trail. Utilisez autonomous transactions pour logs infalsifiables.

Package PL/SQL pour traitement batch

03_plsql_package.sql
CREATE OR REPLACE PACKAGE pkg_order_processor AS
  PROCEDURE upsert_order(p_customer_id IN NUMBER, p_amount IN NUMBER, p_status IN VARCHAR2);
  PROCEDURE generate_monthly_report(p_year IN NUMBER, p_month IN NUMBER);
  FUNCTION get_order_count(p_status IN VARCHAR2) RETURN NUMBER;
END pkg_order_processor;
/

CREATE OR REPLACE PACKAGE BODY pkg_order_processor AS
  -- Log table autonome
  PROCEDURE log_action(p_action VARCHAR2) IS
    PRAGMA AUTONOMOUS_TRANSACTION;
  BEGIN
    INSERT INTO audit_log (action, log_date) VALUES (p_action, SYSDATE);
    COMMIT;
  EXCEPTION
    WHEN OTHERS THEN ROLLBACK;
  END log_action;

  PROCEDURE upsert_order(p_customer_id IN NUMBER, p_amount IN NUMBER, p_status IN VARCHAR2) IS
    v_order_id NUMBER;
  BEGIN
    log_action('Upsert order for cust ' || p_customer_id);
    SELECT order_id INTO v_order_id FROM orders WHERE customer_id = p_customer_id AND ROWNUM=1;
    UPDATE orders SET amount = p_amount, status = p_status WHERE order_id = v_order_id;
  EXCEPTION
    WHEN NO_DATA_FOUND THEN
      INSERT INTO orders (customer_id, amount, status, order_date)
      VALUES (p_customer_id, p_amount, p_status, SYSDATE)
      RETURNING order_id INTO v_order_id;
  END;

  PROCEDURE generate_monthly_report(p_year IN NUMBER, p_month IN NUMBER) IS
  BEGIN
    -- Exemple : aggregate et insert report
    INSERT INTO monthly_reports (year, month, total_amount)
    SELECT p_year, p_month, SUM(amount)
    FROM orders WHERE EXTRACT(YEAR FROM order_date)=p_year AND EXTRACT(MONTH FROM order_date)=p_month;
    COMMIT;
  END;

  FUNCTION get_order_count(p_status IN VARCHAR2) RETURN NUMBER IS
    v_count NUMBER;
  BEGIN
    SELECT COUNT(*) INTO v_count FROM orders WHERE status = p_status;
    RETURN v_count;
  END;
END pkg_order_processor;
/

-- Créer tables support
CREATE TABLE audit_log (action VARCHAR2(4000), log_date DATE) TABLESPACE expert_ts;
CREATE TABLE monthly_reports (year NUMBER, month NUMBER, total_amount NUMBER) TABLESPACE expert_ts;

Ce package gère upsert atomique avec logs autonomes (non-rollbackables). PRAGMA AUTONOMOUS_TRANSACTION isole les audits. Testez via EXEC pkg_order_processor.upsert_order(1, 999.99, 'SHIPPED'); – scalable pour 1M+ tx/jour.

Optimisation : Indexes et vues AWR

Passez au tuning : analysez via AWR et ajoutez indexes bitmap/composite. Vues DBA pour monitoring proactif.

Tuning performance et indexes avancés

04_performance_tuning.sql
CONNECT sys/"YourSysPass"@//localhost:1521/XEPDB1 as sysdba;

-- Générer snapshot AWR pour analyse
EXEC DBMS_WORKLOAD_REPOSITORY.create_snapshot;

-- Vues monitoring expertes
SELECT * FROM v$sql WHERE executions > 100 ORDER BY elapsed_time DESC;

-- Index bitmap pour status low-cardinality
CONNECT expert_user/"ExpertPass123#"@//localhost:1521/XEPDB1;
CREATE BITMAP INDEX idx_orders_status_bitmap ON orders(status) LOCAL TABLESPACE expert_ts;

-- Index composite function-based (pour upper(email))
CREATE INDEX idx_customers_email_upper ON customers(UPPER(email)) TABLESPACE expert_ts;

-- Gather stats optimisées
EXEC DBMS_STATS.gather_table_stats('EXPERT_USER', 'ORDERS', method_opt=>'FOR ALL COLUMNS SIZE AUTO', cascade=>TRUE, estimate_percent=>DBMS_STATS.AUTO_SAMPLE_SIZE);

-- Exemple query optimisée
SELECT /*+ INDEX(orders idx_orders_date_status) */ COUNT(*) FROM orders WHERE order_date > SYSDATE - 30 AND status = 'SHIPPED';

AWR snapshots capturent bottlenecks ; bitmap indexes boostent GROUP BY status (low cardinality). Function-based indexes accélèrent WHERE UPPER(email) LIKE '%GMAIL%'. Toujours regather stats post-load pour plans optimaux.

Script RMAN pour backup incrémental

05_rman_backup.sql
CONNECT sys/"YourSysPass"@//localhost:1521/XEPDB1 as sysdba;

-- Config RMAN (exécuter en RMAN>)
-- RMAN
CONFIGURE DEVICE TYPE DISK PARALLELISM 4 BACKUP TYPE TO BACKUPSET;
CONFIGURE CONTROLFILE AUTOBACKUP ON;
CONFIGURE CHANNEL DEVICE TYPE DISK FORMAT '/backup/%%U';

-- Backup full level 0
BACKUP INCREMENTAL LEVEL 0 DATABASE PLUS ARCHIVELOG;

-- Backup incrémental level 1 (quotidien)
BACKUP INCREMENTAL LEVEL 1 DATABASE PLUS ARCHIVELOG;

-- Validate (check corruption)
VALIDATE DATABASE;

-- Report
REPORT NEED BACKUP;
LIST BACKUP SUMMARY;

RMAN incrémental réduit backups de 90% (seuls deltas). CONFIGURE parallélise I/O. VALIDATE détecte corruption pré-recovery. Stockez /backup sur NFS pour HA ; intégrez à cron pour auto.

Bonnes pratiques

  • Partitionnez toujours time-series data : INTERVAL pour auto-création, évite ORA-14400.
  • Utilisez autonomous tx pour audits : Logs persistants même sur rollback global.
  • Stats automatiques + histograms : DBMS_STATS.AUTO pour AI-driven plans.
  • RMAN + Data Guard : Backup + HA zéro-downtime.
  • Limitez privilèges : GRANT ciblés, audits via UNIFIED_AUDIT_POLICIES.

Erreurs courantes à éviter

  • Oublier ROW MOVEMENT sur partitions : Cause ORA-14402 sur UPDATE date.
  • Stats obsolètes : Plans sous-optimaux ; schedule DBMS_SCHEDULER job hebdo.
  • BigFile sans MAXSIZE : Tablespace illimité déborde disque (ORA-01652).
  • Pas de INDEX LOCAL : Full scans sur partitions ; +1000x latence.

Pour aller plus loin

Approfondissez avec nos formations Oracle avancé Learni. Ressources : Docs Oracle 23c, Oracle APEX pour apps low-code, livres 'Oracle DBA Handbook' (17e éd.). Testez sur Oracle Cloud Free Tier.