Skip to content
Learni
Voir tous les tutoriels
Bases de données

Comment administrer Oracle Database en 2026

Read in English

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.