Introduction aux fonctionnalités de la base de données DM
La base de données DM offre une compatibilité étendue avec les normes SQL et les pratiques courantes, facilitant l'adoption par les développeurs expérimentés. Cette section présente des exemples de base pour illustrer sa syntaxe.
Création de tables et opérations simples
-- Création d'une table avec une structure standard
CREATE TABLE personnel (
id_emp INT PRIMARY KEY,
nom_complet VARCHAR(100),
id_departement INT,
remuneration DECIMAL(12,2)
);
-- Insertion de données
INSERT INTO personnel VALUES (101, 'Alice Martin', 10, 18500.75);
INSERT INTO personnel VALUES (102, 'Bob Leroy', 20, 21000.50);
-- Requête avec filtre
SELECT * FROM personnel WHERE remuneration > 19000;
Configuration de haute disponibilité avec Data Watch
DM intègre des mécanismes avancés pour la haute disponibilité, tels que Data Watch, qui permet une bascule automatique entre serveurs principaux et de secours.
Paramétrage du journal d'archives et des journaux de secours
-- Activation du mode archives et ajout de journaux de secours
ALTER DATABASE MOUNT;
ALTER DATABASE ARCHIVELOG;
ALTER DATABASE ADD STANDBY LOGFILE SIZE 512M;
Programmation avancée avec PL/SQL dans DM
DM supporte un langage procédural compatible avec PL/SQL, permettant de créer des procédures stockées complexes pour logique métier intégrée.
Exemple de procédure pour calculer des primes
CREATE OR REPLACE PROCEDURE calculer_prime(
p_id_emp INT,
p_taux_prime DECIMAL(5,2)
)
AS
v_remuneration DECIMAL(12,2);
v_montant_prime DECIMAL(12,2);
BEGIN
SELECT remuneration INTO v_remuneration
FROM personnel
WHERE id_emp = p_id_emp;
v_montant_prime := v_remuneration * p_taux_prime;
UPDATE personnel
SET remuneration = remuneration + v_montant_prime
WHERE id_emp = p_id_emp;
INSERT INTO journal_primes(id_emp, montant, date_calcul)
VALUES(p_id_emp, v_montant_prime, SYSDATE);
COMMIT;
EXCEPTION
WHEN NO_DATA_FOUND THEN
RAISE_APPLICATION_ERROR(-20010, 'Employé non trouvé');
WHEN OTHERS THEN
ROLLBACK;
RAISE;
END;
/
-- Invocation de la procédure
BEGIN
calculer_prime(101, 0.20);
END;
/
Gestion des tables partitionnées
Les tables partitionnées améliorent la performance et la maintenance des données volumineuses. DM permet de créer des partitions basées sur des plages de dates.
Création et manipulation de partitions
-- Table de ventes partitionnée par date
CREATE TABLE ventes (
id_vente INT,
date_vente DATE,
id_produit INT,
montant DECIMAL(14,2)
)
PARTITION BY RANGE(date_vente)
(
PARTITION p_2023_q1 VALUES LESS THAN(DATE'2023-04-01'),
PARTITION p_2023_q2 VALUES LESS THAN(DATE'2023-07-01'),
PARTITION p_max VALUES LESS THAN(MAXVALUE)
);
-- Ajout d'une nouvelle partition
ALTER TABLE ventes ADD PARTITION p_2023_q3 VALUES LESS THAN(DATE'2023-10-01');
-- Fusion de partitions pour optimisation
ALTER TABLE ventes MERGE PARTITIONS p_2023_q1, p_2023_q2 INTO PARTITION p_2023_h1;
Sécurité et contrôle d'accès avec l'étiquetage
DM implémente un modèle de sécurité basé sur les étiquettes, offrant un contrôle granulaire via une architecture à trois rôles distincts.
Configuration des politiques de sécurité
-- Création d'une politique d'étiquetage
CREATE LABEL POLICY politique_entreprise;
-- Définition des niveaux et catégories de sécurité
CREATE SECURITY LABEL politique_entreprise.niveau_confidentiel;
CREATE SECURITY LABEL politique_entreprise.categorie_financiere;
-- Attribution des étiquettes aux utilisateurs
GRANT SECURITY LABEL politique_entreprise.niveau_confidentiel TO USER comptable;
GRANT SECURITY LABEL politique_entreprise.categorie_financiere TO USER comptable;
-- Table protégée par étiquettes
CREATE TABLE donnees_financieres (
id_trans INT,
details VARCHAR(200)
) SECURITY LABEL (politique_entreprise.niveau_confidentiel, politique_entreprise.categorie_financiere);
Optimisation des performances et analyse des requêtes
DM fournit des outils pour analyser les plans d'exécution et optimiser les requêtes complexes, notamment via l'utilisation de vues matérialisées.
Utilisation de vues matérialisées pour accélérer les agrégations
-- Vue matérialisée pour résumer les ventes par employé et date
CREATE MATERIALIZED VIEW vue_resume_ventes
BUILD IMMEDIATE
REFRESH COMPLETE ON DEMAND
AS
SELECT p.id_emp, p.nom_complet, d.nom_departement,
v.date_vente, SUM(v.montant) as total_journalier
FROM personnel p
JOIN departements d ON p.id_departement = d.id_dept
JOIN ventes v ON p.id_emp = v.id_vendeur
GROUP BY p.id_emp, p.nom_complet, d.nom_departement, v.date_vente;
-- Requête optimisée utilisant la vue
SELECT nom_complet, nom_departement, SUM(total_journalier) as total_annuel
FROM vue_resume_ventes
WHERE date_vente BETWEEN DATE'2023-01-01' AND DATE'2023-12-31'
GROUP BY nom_complet, nom_departement
HAVING SUM(total_journalier) > 500000;
Écosystème d'outils et opérations de maintenance
DM s'appuie sur un ensemble d'utilitaires pour la surveillance, la sauvegarde et la récupération, essentiels à l'administration quotidienne.
Scripts de surveillance de l'espace et des sessions
-- Requête pour identifier les sessions actives consommatrices
SELECT
ID_SESSION,
TEXTE_SQL,
ETAT,
ID_TRANSACTION,
TEMPS_UTILISE/1000 as TEMPS_EN_SECONDES
FROM V$SESSIONS
WHERE ETAT = 'ACTIF'
ORDER BY TEMPS_UTILISE DESC;
-- Analyse de l'utilisation des tablespaces
SELECT
NOM_TABLESPACE,
SUM(OCTETS)/1048576 as TOTAL_MO,
SUM(OCTETS - OCTETS_UTILISES)/1048576 as UTILISE_MO,
ROUND((SUM(OCTETS - OCTETS_UTILISES)/SUM(OCTETS))*100, 2) as POURCENT_UTILISE
FROM DBA_FICHIERS_DONNEES
GROUP BY NOM_TABLESPACE;
Procédures de sauvegarde et restauration
-- Configuration du journal d'archives pour les sauvegardes en ligne
ALTER DATABASE MOUNT;
ALTER DATABASE ARCHIVELOG;
ALTER DATABASE ADD ARCHIVELOG 'DEST=/archives_dm, TYPE=LOCAL, TAILLE_FICHIER=1024, LIMITE_ESPACE=10240';
-- Exemple de commande de sauvegarde complète via DMRMAN
-- SAUVEGARDE BASE COMPLETE SAUVEGARDE='/sauvegardes/complète';
-- Sauvegarde ciblée d'un tablespace
SAUVEGARDE TABLESPACE DONNEES SAUVEGARDE='/sauvegardes/ts_donnees';
-- Restauration en environnement de test
-- RESTAURER BASE '/donnees_dm/DAMENG/dm.ini' DEPUIS SAUVEGARDE='/sauvegardes/complète';
-- RECUPERER BASE '/donnees_dm/DAMENG/dm.ini' AVEC REPERTOIRE_ARCHIVES '/archives_dm';
Migration et compatibilité avec d'autres systèmes
DM facilite la migration depuis des bases comme Oracle, avec des mécanismes tels que les colonnes IDENTITY pour simplifier les séquences et déclencheurs.
Exemple d'implémentation de colonnes auto-incrémentées
-- Alternative aux séquences et déclencheurs
CREATE TABLE nouveau_personnel (
id_emp INT IDENTITY(200, 1),
nom_complet VARCHAR(100),
id_departement INT,
remuneration DECIMAL(12,2)
);