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é
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
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
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
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
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.