DDB07
DDB07
DDB07
à Carthage
Rim Moussa
Partie I: Les Bases de Données Réparties
Table des Matières
1.1. Motivations
Pressions pour la distribution
− Augmentation du volume de l’information (14 fois de 1990 à 2000),
− Augmentation du volume des transactions (10 fois dans les 5
prochaines années).
Il y a besoin de systèmes qui résistent à la montée en charge et qui
fournissent un bon temps de réponse aux requêtes et transactions sur des gros
volumes de données.
Progrès technologique
Loi de Moore : les capacités de stockage (disque, RAM) et de calcul (CPU)
augmentent tous les 18 mois.
Loi de Gilder : la bande passante des réseaux triplerait à prix égal tous les ans
et le débit des liaisons quadruplerait tous les trois ans.
Par contre le débit des disques (E/S) n’a doublé que 2 fois sur les 10 dernières
années Goulot d’étranglement sur les E/Ss.
Pour améliorer le débit des E/Ss :
− Partitionnement des données pour un accès parallèle aux données,
− Utiliser plusieurs nœuds (avec un bon coût/ performance), et les faire
communiquer par un réseau.
Les BDRs se sont développées, grâce au progrès technologique.
5
− Faciliter l’accroissement: l’accroissement se fait par l’ajout de machines sur
le réseau.
6
1.5. Problèmes à surmonter
1. Coût : la distribution entraîne des coûts supplémentaires en terme de
communication, et en gestion des communications (–hardware et software
à installer pour gérer les communications et la distribution).
2. Problème de concurrence.
3. Sécurité : la sécurité est un problème plus complexe dans le cas des bases
de données réparties que dans le cas des bases de données centralisées.
7
Utilisateurs
Schéma
Externe VE VE
Schéma Conceptuel
BDR
Schéma de fragmentation
Schéma d’allocation
3. Fragmentation
La fragmentation doit être sans perte d'information. Elle peut être coûteuse
s’il existe des applications qui possèdent des besoins opposés.
8
Relation Compte
Relation Client
9
NoClient NomClient NoClient Prénom Age
10
l'ensemble des 2n conjonctions de condition où chaque condition élémentaire
est prise dans sa forme positive ou dans sa forme négative :
CC = { ∧ Ci *
i = 1,n
ou Ci* est soit ci soit ¬ci}.
11
1. Proposer un schéma de fragmentation horizontale pour la relation
Rémunération.
2. A partir des requêtes R1 et R2, proposer un schéma de fragmentation
horizontale pour la relation Projet.
R1 : SELECT nomP, budget FROM Projet WHERE ville = valeur ;
R2 : SELECT * FROM projet WHERE budget < 200 000 ;
3. Fragmenter Employé selon les fragments de Rémunération.
4. Quels sont les choix de fragmentation de Affectation.
Exercice 3
Considérons la table
Projet (numP, nomP, budget, ville).
12
2. Construire la matrice d’affinité Aff, définie comme suit :
Aff(Ai, Aj) = ΣUt(Rk, Ai)=1 et Ut(Rk, Aj)=1 Σsites l Ref l (Rk)* Acc l (Rk)
Ref l (Rk) est le nombre d’accès aux attributs Ai et Aj pour une exécution de
Rk sur le site l.
Acc l (Rk) représente la fréquence d’accès à la requête Rk sur le site l.
Sachant que : ∀Rk, site l, Ref l (Rk) = 1
Acc 1 (R1) = 15 Acc 2 (R1) = 20 Acc 3 (R1) = 10
Acc 1 (R2) = 5 Acc 2 (R2) = 0 Acc 3 (R2) = 0
Acc 1 (R3) = 25 Acc 2 (R3) = 25 Acc 3 (R3) = 25
Acc 1 (R4) = 3 Acc 2 (R4) = 0 Acc 3 (R4) = 0
3. A partir de la matrice d’affinité obtenue, proposer une fragmentation
verticale pour la relation Projet.
4. Schéma d’allocation
L'affectation des fragments sur les sites est décidée en fonction de l'origine
(sites d’émission) des requêtes. Le but est de placer les fragments sur les sites
où ils sont le plus utilisés, et ce pour minimiser les transferts de données entre
les sites.
L’allocation peut se faire avec réplication ou sans réplication. Sachant que la
réplication favorise les performances des requêtes et la disponibilité des
données, mais est coûteuse en considérant les mises à jour des fragments
répliqua.
Exercice 4
Nous associons aux requêtes de l’exercice 1 : R1, R2 et R3 les origines
suivantes :
- R1 peut être émise de Genève ou de Lausanne,
- R2 est presque exclusivement émise de Lausanne,
- R3 est le plus souvent émise de Genève, mais peut aussi provenir de
Lausanne,
- Les mises à jour des comptes de Lausanne sont faites à partir de Lausanne,
- Les mises à jour des comptes de Genève sont faites à Genève.
Sachant que, les mises à jours sont secondaires par rapport aux requêtes dans
le sens où elles peuvent être effectuées en différé. L'allocation des fragments
est donc basée en priorité sur les sites des requêtes et en second sur les sites
de mises à jour.
Proposer un schéma d’allocation des fragments aux sites de Genève et de
Lausanne.
13
5. Réplication
Un cliché (ang. snapshot) représente un état de la base de données à un instant
donné. La pertinence d'un cliché diminue au fur et à mesure que le temps
passe. L’utilisation des clichés permet l’amélioration des performances
d’accès et la réduction du trafic sur le réseau.
On peut se passer de l'information exacte si les données ne sont pas
fréquemment mises à jour (nom de famille, l'adresse…) .
Les deux critères qui sont à prendre en compte pour définir l'intérêt d'un
cliché sont d'une part l'ancienneté du cliché, et d'autre part le temps d'attente
qui serait nécessaire avant d'obtenir l'information originale (à jour). Ces deux
informations, l'ancienneté et le temps d'attente, peuvent être pondérées par
un taux de satisfaction.
Exemple : Dans un milieu bancaire les retraits d'argent par un client ne
devraient être autorisés que si le compte est suffisamment approvisionné.
Comme les ordres de virement et chèques émis au cours des heures écoulées
ne sont pas encore connus et donc non débités, la situation réelle du compte
peut être bien différente de l'état correspondant dans la base de données. Par
conséquent, la décision d'autoriser un retrait d'argent peut être prise en
fonction d'un cliché légèrement ancien plutôt que d'accéder à l'information
originale qui ne sera que légèrement plus fiable. Cependant, une information
exacte permettrait de contrecarrer des retraits d'argent successifs dans deux
distributeurs à quelques minutes d'intervalle.
Exemples de Taux de satisfaction du cliché par rapport à l'original en fonction
de l'âge du cliché :
5 minutes : 0.95 3 jours : 0.3 1 Heure : 0.9
1 semaine : 0.1 1 jour : 0.7 1 mois : 0.01
Exemples de Taux de satisfaction du temps d'attente pour obtenir l'original :
jusqu'à 30 sec : 1 2 min : 0.5 45 sec : 0.9
3 min : 0.1 1 min : 0.7 5 min : 0.01
Si l'on dispose d'un cliché vieux d'un jour, le temps d'attente maximum pour
la réception de l'original est d’une minute. Passé ce délai, l'information
contenue dans le cliché sera utilisée.
14
compte d'une part la fragmentation et la répartition des données sur
différents sites et d'autre part le coût de communication entre sites pour
transférer les données.
La complexité d’une requête dans une base de données répartie est définie en
fonction des facteurs suivants :
15
− Coût CPU : c’est le coût des traitements de données
− Communication sur le réseau
Dans une base de données centralisée, seuls les facteurs E/Ss et CPU
déterminent la complexité d’une requête.
Notons que nous faisons la distinction entre le coût total et le temps de réponse
global d’une requête:
− Coût total : c’est la somme de tous les temps nécessaires à la réalisation
d’une requête sur les différents sites.
− Temps de réponse global : c’est le temps d’exécution réel d’une requête.
Comme certaines opérations peuvent être effectuées en parallèle sur
plusieurs sites, le temps de réponse global est généralement inférieur au
coût total.
6.2.3. Semi-jointure
Les BDR ont abouti à la définition d'un nouvel opérateur, la semi-jointure,
qu'il est parfois intéressant d'utiliser. Il s'agit en fait d'une double jointure : le
principe est d'effectuer deux petites jointures plutôt qu'une grosse; càd deux
transmissions de données plutôt qu'une seule beaucoup plus volumineuse.
Soient R1 et R2 deux relations se trouvant respectivement sur les sites S1 et
S2. Le but est d’évaluer R1 ZY R2 sur le site S1.
L’algorithme de semi-jointure se déroule comme suit,
16
S2> temp2 ← R2 ZY temp1
S2> envoi de temp2 vers S1
S1> R1 ZY temp2 (équivalent à R1 ZY R2)
Exercice 6
Soit la BDR composée des relations suivantes :
P (NP, NOMP, MADE_IN, COULEUR, POIDS)
U (NU, VILLEU, NOMU)
F (NF, NOMF, VILLEF, ADRESSE, PAYS, COEF)
PUF (NP, NU, NF, DATE, QUANTITE)
Ville(nom, région, pays, description)
Les relations U et PUF sont sur le site A.
Les relations F et P sont sur le site B.
Le réseau reliant les deux sites A et B a les caractéristiques techniques
suivantes :
- temps d'accès d'un site à un autre : 0,5 seconde
- débit de transmission : 9 600 bauds (soit ≈ 1 000 octets/ sec)
Un message est donc transféré en ( 0,5 + Nb-d'octets-du-message /1000)
secondes.
|F| = 100 enregs, de 120 octets, |U| = 1000 enregs de 60 octets,
|P| = 10000 enregs de 90 octets, |PUF| = 1 000 000 enregs de 10 octets,
|Ville| = 200 enregs de 240 octets,
P contient 500 produits italiens.
U contient 100 usines de Lausanne.
Nbre de livraisons de produits à des usines situées à Lausanne : 100000.
Nbre de livraisons de produits italiens : 5000.
Les numéros NU, NP et NF sont codés sur 2 octets.
Le nom de la ville sur 30 octets.
Requête1 : "Donner les numéros et les noms des fournisseurs qui ont livré un
produit italien à une usine située à Lausanne", qui provient du site ,
correspond la requête algébrique suivante :
R = π[NOMF, NF] (σ [VILLEU = "Lausanne"]U ZY PUF ZY σ [MADE_IN = "Italy"]P ZY F)
17
3. Sélectionner les usines de Lausanne sur A, faire la jointure avec PUF, et
la projection sur (NP, NF). Transmettre la nouvelle relation au site B
pour exécution de la requête.
4. Sélectionner les numéros (NP) des produits italiens sur B. Transmettre
ces numéros au site A en lui demandant qu'il renvoie les numéros des
fournisseurs qui ont livré un de ces produits à une usine de Lausanne.
Le site A transmet un ensemble de numéros de fournisseurs à B.
Requête2 : "on recherche sur le site A les couples (fournisseur, usine) tel que le
fournisseur habite dans la ville où se trouve l'usine".
− Les 100 fournisseurs habitent dans 60 villes différentes.
− Les 1000 usines sont réparties sur 840 villes différentes.
− 5 fournisseurs habitent dans une ville où se trouve au moins une usine
− 100 usines sont situées dans une ville où habitent un ou plusieurs
fournisseurs
Pour chacune des stratégies suivantes, calculer le nombre d’octets transférés
entre sites
1. Si le site A envoie U à B.
2. A envoie à B les noms de villes d'usine, puis B renvoie les fournisseurs
retenus.
3. B transmet à A les noms de ville différents, A lui renvoie le résultat de
la (semi-)jointure entre ces villes des fournisseurs et les villes des
usines. Enfin B fait la seconde semi-jointure et envoie à A les
fournisseurs retenus.
18
WHERE (NOT (Title = ‘programmer’) AND ((Title = ‘programmer’) OR (Title
= ‘Elect. Eng.’)) AND NOT(Title = ‘Elect. Eng.’)) OR (Name = ‘J.Doe’);
Localisation des données réparties
A ce niveau, on tient compte de la distribution des données. Des sélections sur
les fragments qui ont des restrictions contraires aux restrictions qui ont
permis de générer ces fragments, engendrent des relations vides.
En effet, dans le cas de jointures avec des fragments horizontaux on rencontre
les deux suivants :
1er cas:
A = A1∪ A2 ⇔ A ZY B = ( A1∪ A2) ZY B = (A1ZY B) ∪ (A2 ZY B)
Ceci est intéressant surtout dans le cas ou B est répliquée sur le site qui
contient A1 et sur le site qui contient A2.
2éme cas:
A et B sont partitionnées tel que, Ai ZY Bj = ∅ Si i ≠ j
Exemple : cas des relations Employé et Département partitionnées par ville
département
Parallélisme intra-requêtes
Utilisation de plusieurs threads, pour accèlérer l’exécution des requêtes. Par
exemple, un site désire faire l’union de 3 tampons à recevoir de 3 sites
différents, nécessite au moins un thread qui réceptionne les tampons et un
thread qui traite les tampons reçus.
Arbre
Parmi les heuristiques prises en compte, est celle proposée par J. D. Ullman.
Elle consiste en l’application des opérateurs unaires le plutôt possible afin de
réduire la taille des relations intermédiaires.
Une autre heuristique concerne la forme de l’arbre de la requête. On distingue
deux types d’arbres : les arbres linéaires et les arbres broussailleux (ang. bushy
trees). Ces derniers augmentent le parallélisme et améliorent les temps de
réponses des requêtes.
R4
R3
R1 R2 R1 R2 R3 R4
19
Statistiques
Pour une relation R définie par les n attributs {A1, A2 ..., An} et fragmentée en
R1, R2 ..., Rr les données statistiques sont typiquement :
1. la longueur de chaque attribut Ai, (long (Ai))
7.1. Définitions
− Une transaction est un ensemble d’opérations menées sur une BD,
− Ces opérations peuvent être en lecture et/ou écriture,
− Une opération est atomique, c’est donc une unité indivisible de
traitement,
− Une transaction est soit validée par un commit, soit annulée par un
rollback, soit interrompue par un abort,
− Une transaction a une marque de début (Begin Of Transaction -BOT),
et une marque de fin (End Of Transaction -EOT).
La cohérence et la fiabilité d’une transaction sont garanties par 4 propriétés :
l’Atomicité, la Cohérence, l’Isolation, la Durabilité qui font l’ACIDité d’une
transaction.
Atomicité : cette propriété signifie qu’une transaction est traitée comme
une seule opération. Toutes les actions sont toutes menées à bien ou
aucune d’entre elles.
Cohérence : une transaction est un programme qui amène la BD d’un
état cohérent à un autre état cohérent, tel que toutes les contraintes
d’intégrité restent vérifiées.
Isolation : c’est la propriété qui impose à chaque transaction de voir la
BD cohérente. Une transaction en exécution ne peut révéler ses
résultats à d’autres transactions concurrentes avant d’effectuer le
commit.
20
Durabilité :c’est la propriété qui garantit lorsqu’une transaction a
effectué son commit, le résultat sera permanent, et ne pourra être effacé
de la BD quelques soient les pannes du système rencontrées.
21
L’inconvénient majeur est la difficulté de synchroniser des sites de différentes
horloges.
Verrouillage
La technique la plus répandue pour sérialiser les transactions est basée sur
l’utilisation de verrous. On impose que l’accès aux données se fasse de
manière mutuellement exclusive.
7.3.2. Interblocages
Toute méthode basée sur le verrouillage peut donner des interblocages
lorsque deux transactions s'entre-attendent. Pour illustrer ce cas, on peut
prendre un exemple. Une transaction Ti détient un verrou en lecture ou en
écriture sur la donnée x. Une transaction Tj détient un verrou en lecture ou en
écriture sur la donnée y. La transaction Ti attend un verrou en écriture sur la
donnée y et la transaction Tj attend un verrou en écriture sur la donnée x. Il y
a dans ce cas un interblocage.
Un outil de grande utilité dans l'analyse des interblocages est le graphe des
attentes. Les noeuds du graphe des attentes sont des transactions simultanées
et les arcs orientés qui les relient représentent l'attente d'une transaction pour
une autre. Grâce à cette représentation, il est facile de caractériser les
interblocages : ce sont les cycles sur le graphe. Dans un environnement
réparti, les interblocages impliquent différents sites. Le graphe des attentes
local est donc insuffisant et il faut également en maintenir un au niveau
global.
T1 T2 T1 T2 T1 T2
T5 T5
T3 T4 T3 T3 T4
Une transaction globale est validée ssi toutes les transactions locales qui la
composent valident. En effet, si au moins une transaction locale ne valide pas,
toutes les transactions sont annulées.
22
Le protocole exige un site coordinateur et des sites participants. Il se compose de
deux phases :
− Phase de préparation : le coordinateur demande à chaque participant de
se préparer pour valider la transaction locale.
− Phase de validation : le coordinateur ordonne à tous les participants de
valider ou d’annuler leur transaction. La décision est prise par le
coordinateur tenant compte de la réponse de chaque participant.
prét prét
r
prét rejete
r valide
valide r rejeter
23
(-) Accès conflictuels aux mémoires centrales peuvent dégrader les
performances.
(-) Le nombre de processeurs est limité à 20-30, un nombre supérieur crée des
goulots d’étranglements.
(-) Architecture non scalable.
Exemples de SGBD // : XPRS (U. de berkeley), DBS3 (Bull).
M M … M D D … D
…
CPU CPU CPU CPU
D D D … D
M M M M
Exemples : IMS/VS (IBM), VAX DBMS (DEC) …
24
(-) La haute disponibilité pose un problème. En effet, l’échec d’un processeur
rend l’accès aux données impossible. D’où la nécessité de techniques de haute
disponibilité (réplication ou parité). Ceci fait émerger un autre problème de
maintien de la consistance des miroirs ou des disques de redondance.
(-) Problème d’équilibre de charge dû au placement pré-déterminé des
données.
(-) Coût de transfert sur le réseau de grand volume de données, étant le
résultat d’une requête .
Exemples : GAMMA (U. de Wisconsic), BUBBA (MCC),
M D M D M D
25
Partie II : Mécanismes de Répartition dans
Oracle
26
9. Oracle en réseau
* Oracle Net services fournit des solutions de connectivité dans des
environnements distribués. Il est composé de:
1. Oracle Net
2. Modules d’écoute/listeners
le fichier de configuration LISTENER.ORA contient :
– son nom, par défaut LISTENER
– son adresse (HOST et PORT) : (ADDRESS = (PROTOCOL = TCP)
(HOST = localhost) (PORT = 1521)
– lesSIDs (Service ID) des BD guettées
3. Oracle Connection Manager
4. Outils de configuration et de gestion : Oracle Net Configuration
Assistant, Oracle Net Manager.
* Transparent Network Substrate (TNS) est une sous-couche d’Oracle Net qui
reçoit les requêtes et émet des ouvertures ou fermetures de session, envoie les
requêtes et reçoit des réponses.
* Lorsque les hôtes qui supportent les bases de données Oracle sont connectés
via un réseau, les bases peuvent communiquer via Net8 d’Oracle
(précédemment appelé SQL*Net). Les pilotes de Net8 s’appuient sur le
protocole de communication local pour fournir la connectivité entre deux
serveurs.
Afin que Net8 reçoive et traite les communications, l’hôte doit exécuter un
processus appelé listener : module d’écoute sur un port de communication
spécifique.
* Passerelle transparente (ang. Oracle Transparent Gateway) C’est la possibilité
d’accéder à des objets non Oracle. La passerelle est exécutée sur l’hôte source
qui contient la base à exploiter.
* Identification des Objets
Dans une BD centralisée, la combinaison du nom du propriétaire d’un objet
et du nom de l’objet permet de l’identifier de façon unique. Dans les BDR
deux couches d’identification sont ajoutées. Le quadruplet [hôte, instance,
schéma, objet] forme un nom d’objet complet ou FQON.
27
Fully Qualified Object Name: FQON
Lorsqu’un lien est référencé par une instruction SQL, Oracle ouvre une
session dans la base distante et y exécute l’instruction. La session demeure
ouverte au cas où elle serait de nouveau nécessaire.
Un lien est soit privé ou public. Seul l’utilisateur qui a crée un lien privé peut
l’utiliser, alors qu’un lien public est utilisé par tous les utilisateurs de la base
de données. Le lien partagé est propre à la configuration de serveur
multithreaded.
28
utilisé par Net8 intitulé tnsnames.ora. Ce fichier spécifie l’hôte, le port, et
l’instance associés à chaque nom de service.
Utilisation du lien :
SELECT * FROM Employee@RH_Lien
WHERE office = ‘ANNAPOLIS’;
11.1. Vues
Les vues peuvent fournir une transparence par rapport aux tables locales et
distantes. Par exemple, supposons que la table Employé est sur une BD locale
et la table Département est sur une BD distante. Pour rendre ces tables
transparentes aux utilisateurs. Nous pouvons créer une vue dans la BD locale
qui fait la jointure des données locales et distantes, comme ci-dessous : Les
utilisateurs accédant à cette vue n’ont pas besoin de savoir où les données
sont stockées.
Exercice 1:
Ecrire en SQL la commande de création de la vue Entreprise.
11.2. Synonymes
Les synonymes sont des noms simples qui permettent d’identifier de façon
unique dans un système distribué les objets qu’ils nomment. Les synonymes
29
peuvent être crées pour différents objets : Tables, Types, Views, Snapshots,
Procedures, Functions, Packages. Ils figurent dans le dictionnaire de données.
Exercice 2:
Ecrire en SQL la requête suivante « On recherche les employés affectés au
département génie logiciel » dans les deux cas suivants :
- La requête est émise du site A où se trouve la table Employé.
- La requête est émise du site B où se trouve la table Département.
11.3. Procédures
Les unités de programmes PL/SQL, peuvent servir à (a) référer à des données
distantes, (b) appeler des procédures distantes, (c) utiliser des synonymes
pour référer à des procédures distantes.
(b) Appeler des procédures distantes (RPC : ang. Remote Procedure Call)
On peut utiliser une procédure locale pour appeler une procédure distante. La
procédure distante pourra exécuter les instructions LMD requises.
Exercice 3:
Ecrire le scénario suivant :
30
Un utilisateur scott identifié par tiger se connecte à la BD distante hq.acme.com.
Il crée la procédure FinEmployé, ayant pour paramètre le numéro de
l’employé, qui supprime l’employé de la table Employé.
L’utilisateur scott identifié par tiger se connecte à la BD locale fin.acme.com. Il
crée la procédure LicencierEmployé, ayant pour paramètre le numéro de
l’employé, qui appelle la procédure FinEmployé.
31
La principale tâche exécutée par l’optimiseur consiste à ré-écrire une requête
distribuée pour utiliser les collocated inline views. Par contre, si la requête
distribuée contient des fonctions agrégats, des sous-requêtes, du complex-
SQL, l’optimisation basée sur le coût ne peut être utilisée.
12.3. Statistiques
Oracle permet également de collecter des statistiques sur les différentes tables
du système.
(a) Activation:
Il faut exécuter l’une des instructions suivantes:
ALTER SESSION OPTIMIZER_MODE = CHOOSE ;
ALTER SESSION OPTIMIZER_MODE = COST ;
12.4. Hints
Les hints conviennent aux requêtes distribuées contenant des fonctions
agrégats, des sous-requêtes, ou du complex-SQL.
Voir http://www.oradev.com/hints.jsp pour une liste de hints
DRIVING_SITE Hint
L’instruction DRIVING_SITE permet de préciser manuellement le site
d’exécution de la requête.
Exemple :
SELECT /*+DRIVING_SITE(Département )*/ *
FROM Employé, Dé[email protected]
WHERE Employé.NumDept = Département.NumDept ;
32
Ainsi, une table PLAN_TABLE est créée dans le schéma courant pour sauver
temporairement le plan d’exécution.
La clause EXPLAIN PLAN FOR génère le plan d’exécution.
Exemple : Requête « Noms des départements auxquels sont attachés plus que 3
employés »
EXPLAIN PLAN FOR
SELECT D.NomDept
FROM Département D
WHERE D.NumDept IN (SELECT NumDept
FROM [email protected]
GROUP BY NumDept
HAVING COUNT(NumDept) > 3);
Exemple:
33
WHERE Etat = ‘NM’ ;
COMMIT ;
La base est identifiée par le service nommé LOC. Durant la connexion, une
session devrait être initiée par le compte RH avec le mot de passe
PUFFINSTUFF.
L’inconvénient est que les données ne peuvent pas être mises à jour. La
commande REPLACE est utilisée pour remplacer le contenu des tables.
13.2. Snapshots
Cette option utilise des snapshots pour répliquer les données depuis une
source maître vers plusieurs cibles. Les snapshots peuvent être en lecture seule
(ang. read-only) ou mis à jour (ang. updateable). Avant de créer un snapshot, il
faut d’abord créer un lien vers la base de données source.
Une utilisation classique des snapshots en mise à jour est le cas du contrôle
technique automobile. Tous les centres de contrôle stockent des données
concernant les véhicules qu’ils ont contrôlés durant la journée. Chaque nuit,
34
les données sont déversées dans la base nationale qui centralise les données
de l’ensemble du parc automobile du pays. Notons que, les snapshots en mise
à jour peuvent engendrer des conflits. Un déclencheur (ang. trigger) sauve les
mises à jour opérées sur le snapshot et les transmet au site maître au moment
du rafraîchissement du snapshot.
Les snapshots utilisent le package DBMS_JOB pour organiser les
rafraîchissements, et nécessitent que le paramètre du fichier init.ora
JOB_QUEUE_PROCESSES soit supérieur à 0.
Les vues ALL_SNAPSHOTS, ALL_SNAPSHOT_REFRESH_TIMES,
ALL_SNAPSHOT_LOG détaillent les caractéristiques des snapshots crées.
Exemple:
Une vue matérialisée ne peut pas contenir les op. UNION, MINUS,
INTERSECT.
35
Les vues DBMS_MVIEW, ALL_MVIEW_ANALYSIS détaillent les
caractéristiques des vues matérialisées créées.
14.1. Partitions
36
Si on connaît le nom de la partition, il est possible d’invoquer le nom de la
partition dans la clause FROM, comme suit,
SELECT *
FROM Employes PARTITION (E2)
WHERE NumDept BETWEEN 11 AND 20;
37
14.1.3. Partitonnement composé (ang. Composite partitioning)
Un tuple qui comporte une valeur autre que les spécifiées est rejeté.
L’index d’une table partitionnée peut être partitionné avec les mêmes plages
de valeurs que celles de la table.
38
CREATE INDEX Employés_NumDept
ON Employes(NumDept)
LOCAL
(PARTITION IE1 TABLESPACE IE1_NDX_TS,
PARTITION IE2 TABLESPACE IE2_ NDX_TS,
PARTITION IE3 TABLESPACE IE3_ NDX_TS,
PARTITION IE4 TABLESPACE P IE4_ NDX_TS) ;
Le mot clé LOCAL, crée un index séparé pour chaque partition de la table.
Un index global contient des valeurs provenant de plusieurs partitions.
39
CREATE TABLE Employe (
NumEmp NUMBER(5) PRIMARY KEY, ….,
NumDept NUMBER(3) REFRENCES Departement)
CLUSTER EmpDept(NumDept);
Les ordres DDL suivants peuvent être parallélisées, si l’objet source ou cible
est fragmenté:
Create table . . . as select . . .
Create index
Rebuild d’un index ou d’une de ses partitions
Déplacement d’une partition
Eclatement d’une partition
40
SQL*LOADER peut agir en parallèle sur des tables fragmentées.
En ce qui concerne les tables partitionnées, un degré supplémentaire de
parallélisme peut être recherché dans le cas de l’utilisation des sous partitions.
Le traitement parallèle est activé par l’utilisation du hint PARALLEL dans
l’ordre SQL:
SELECT /*+parallel(matable,3) */ * FROM matable WHERE . . .
Activation de PDML
Le degré de parallélisme des ordres DML est dicté d’une manière prioritaire
par les hints. En ce qui concerne les ordres DDL, ils seront exécutés avec le
degré de parallélisme par défaut. L’option force concerne les objets qui n’ont
aucune clause de parallélisme dans leur clause de stockage ou ceux qui sont
attaqués par des requêtes sans HINTS. Dans tous les cas, le degré de
parallélisme doit se trouver dans l’intervalle [PARALLEL_MIN_SERVERS,
PARALLEL_MAX_SERVERS].
Même avec PDML actif dans la session, aucune garantie de la réalisation de
l’ordre en parallèle ne peut être assurée.
De nouveaux hints ont été crées pour être utilisés avec les INSERT : APPEND et
NOAPPEND.
41
SQL> create table anp.opqb as
2 select * from anp.opq;
Table created.
SQL> select * from v$pq_sesstat where statistic like '%Parallel%';
STATISTIC LAST_QUERY SESSION_TOTAL
------------------------------ ---------- -------------
Queries Parallelized 1 10
DML Parallelized 0 0
SQL> insert /*+parallel (anp.opqb,5) */ into anp.opqb
2 select /*+parallel (anp.opq, 4) */ * from anp.opq;
2560 rows created.
SQL> select * from v$pq_sesstat where statistic like '%Parallel%';
STATISTIC LAST_QUERY SESSION_TOTAL
------------------------------ ---------- -------------
Queries Parallelized 1 11
DML Parallelized 0 0
SQL> commit;
Commit complete.
SQL> UPDATE /*+PARALLEL (anp.opqb,2) */
2 anp.opqb SET c1 = c1*10;
5120 rows updated.
SQL> select * from v$pq_sesstat where statistic like '%Parallel%';
STATISTIC LAST_QUERY SESSION_TOTAL
------------------------------ ---------- -------------
Queries Parallelized 0 11
DML Parallelized 0 0
SQL> UPDATE /*+PARALLEL (anp.opqb,2) */
2 anp.opqb SET c1 = c1*10;
5120 rows updated.
SQL> DELETE /*+PARALLEL (anp.opqb,4) */
2 FROM anp.opqb
3 WHERE to_number(substr(c2,1,1)) < 5;
4096 rows deleted.
SQL> select * from v$pq_sesstat where statistic like '%Parallel%';
STATISTIC LAST_QUERY SESSION_TOTAL
------------------------------ ---------- -------------
Queries Parallelized 0 11
DML Parallelized 0 0
SQL> spool off;
42
Bibliographie
43