S26 – Client/Serveur Cours n°2 TSIG2 ALSI CLIENT / SERVEUR DE DONNEES DISTRIBUEES (BASE DE DONNEES REPARTIES) 1. INTRODUCTION Les Modèles Organisationnels des Traitements Analytiques (MOTA) permettent de mettre en évidence les acteurs, les sites et les postes de travail ainsi que les données manipulées. Acteur, site, poste de travail Un type d'acteur est une personne exerçant une fonction type définie dans l'entreprise : la secrétaire, le représentant, etc. Un type de site est un regroupement géographique ou fonctionnel d'acteurs : une agence, le siège, le service comptable, etc. Un type de poste de travail est le rapprochement entre un type de site et un type d'acteur : une secrétaire dans une agence … Par abus de langage, on parlera tout simplement d'acteur, de site et de poste de travail. Opération organisationnelle Il s'agit d'un traitement exécuté entièrement par un seul poste de travail. Ce traitement doit être d'une seule nature : conversationnel, batch, manuel. On décompose des opérations conceptuelles en opérations organisationnelles chacune effectuée par un poste de travail, en une seule fois, et d’une seule manière. Démarche (simplifiée) Pour chaque poste de travail ou site, il va falloir prendre en compte toutes les opérations organisationnelles concernant le poste ou site afin de lister toutes les données manipulées (au sens large) par le poste ou au niveau du site ainsi que le type de manipulation effectuée (consultation, ajout, modification, suppression). Toute cette démarche n'est pas du tout au programme. On partira donc toujours de la connaissance des besoins d'accès aux données par chaque poste de travail ou chaque site. Exemple : la gestion d'une bibliothèque. L'application de gestion d'une bibliothèque est utilisée sur différents postes de travail (l'accueil, les bibliothécaires, le comptable…) et se compose de plusieurs tables (adhérents, livres, emprunts, règlements…). Pour définir l'implantation de ces différentes tables, il est nécessaire de savoir que : . Le personnel de l'accueil enregistre les nouveaux adhérents et peut visualiser les livres. . Les bibliothécaires enregistrent les nouveaux livres et les emprunts et ont besoin de consulter les adhérents. . Le comptable enregistre les règlements et modifie la date de fin de l'adhésion dans la table des adhérents. 1 S26 – Client/Serveur Cours n°2 TSIG2 ALSI Pour répondre au mieux aux besoins d'accès aux données et plus généralement aux besoins des applications, nous allons nous poser un certain nombre de questions quant à l'architecture logicielle à mettre en place : - Quels sont les outils à notre disposition ? - Avec ces outils, quelles sont les solutions existantes pour implanter les données et les traitements de l'application ? - Où placer les tables ? Sur chaque machine ? Sur un serveur ? Sur les deux ? - Quels sont les critères sur lesquels nous allons nous baser pour choisir le lieu d'implantation des tables? 2. DU PARTAGE DES INFORMATIONS A LA REPARTITION DES DONNEES 2.1. 1ère solution : Les fichiers partagés Dans un contexte multi-utilisateurs, plusieurs personnes peuvent utiliser simultanément un même fichier. Le fichier se trouve sur un disque partagé d'un serveur et il est accessible par différents postes de travail simultanément. Inconvénients : - la consistance des données n'est pas toujours assurée. Lors de la modification d'un enregistrement, les données sont chargées en mémoire vive. Les modifications opérées par l'utilisateur sur cet enregistrement sont donc effectuées dans cette mémoire et ne sont effectivement enregistrées sur disque que lorsque l'utilisateur valide ses modifications. Si deux utilisateurs modifient le même enregistrement au même moment, seul le dernier à enregistrer ses modifications a ses modifications prises en compte. Il y a donc perte des données. - le réseau est fortement sollicité. S'il y a trop de données et surtout, trop d'accès simultanés aux données (en lecture et en écriture), les temps de réponse ne sont pas satisfaisants. - le " deadlock " ou verrou mortel n'est pas forcément géré. Lorsqu'une application doit modifier un enregistrement, elle le verrouille. Seulement, il se peut que pour effectuer les modifications sur l'enregistrement, elle doive également accéder à un second enregistrement lui-même déjà verrouillé par une autre application en attente du 1er enregistrement verrouillé. Ainsi, Un "deadlock" se produit quand une première application verrouille un enregistrement pour modification et attend la libération d'un autre enregistrement verrouillé par une deuxième application qui, elle-même, attend la libération de l'enregistrement verrouillé par la première application. 2 S26 – Client/Serveur Cours n°2 TSIG2 ALSI Application X Verrouille Enregistrement A DEADLOCK Enregistrement B Verrouille Application Y 2.2. 2ème solution : Les SGBDR Les SGBDR assurent l'intégralité des fonctions relatives à la confidentialité, l'intégrité, la sécurité des données et le partage des données. Avec les 1ers SGBD, toutes les données étaient centralisées sur un serveur. Le besoin de rapprocher les données de l'utilisateur afin d'éviter la saturation du réseau et le nombre très important de requêtes à traiter par une seule machine a fait émerger le besoin de répartir les données sur plusieurs machines Les nouveaux SGBD (SGBD capables de gérer des données réparties) et le fait que le poste de travail soit aujourd'hui un micro-ordinateur doté d'une puissance de stockage et de traitement ont permis la mise en place d'architectures de type client-serveur de type 5 dans lesquelles les données sont réparties sur le serveur et les postes de travail. On parle alors de base de données réparties. Dans quel cas mettre en place une base de données réparties? . quand la quantité de données à traiter est importante ce qui nuit aux performances du SGBD et sature le réseau, ou / et . quand le nombre d'utilisateurs est important ce qui rend le partage de la base centrale inefficace. 3. LES BASES DE DONNEES REPARTIES 3.1. Définition Une base de données réparties est un ensemble de bases de données situées sur différents postes et apparaissant aux applications comme une seule et même base de données. Le fait que les bases soient implantées sur des machines différentes est transparent pour l'utilisateur. Dans une base de données répartie, on distingue, d'une part, la base de données logique et, d'autre part, les bases de données physiques. La base de données vue de l'utilisateur comme une seule et même base de données est appelée base logique. Chaque base de données regroupée au sein d'une base logique est appelée base physique. 3 S26 – Client/Serveur Cours n°2 TSIG2 ALSI BASE LOGIQUE Base physique A Base physique B Base physique C Un modèle logique des données réparti précise l'implantation des données permanentes sur chacun des postes de travail d'un système. Le MLD réparti est composé de 2 à n MLD locaux. Chaque MLD local est propre à un type de poste de travail. 3.2. Techniques de distribution des données Les techniques de distribution (également appelées techniques de répartition) des données du MLD réparti sont de deux types : 1 - La distribution dite intégrale : avec segmentation des données au niveau table : Exemple : au niveau d'une table, la segmentation (ou fragmentation) peut être horizontale (distribution des tuples) ou verticale (distribution d'attributs). La segmentation horizontale est assez répandue, elle va par exemple permettre à une entreprise installée dans plusieurs régions d'implanter dans chaque région (donc au plus près des utilisateurs) les données (clients …) relatives à la région. Par exemple, les clients de Paris se trouvent dans une table sur le site de Paris tandis que ceux de Dijon se trouvent dans une table sur le site de Dijon. La segmentation verticale est très peu répandue. sans segmentation au niveau table : on parle également de distribution intégrale si on choisit de mettre les différentes tables de la base logique dans des bases physiques différentes sans pour autant faire de la segmentation au niveau table. 2 - La distribution par réplication qui consiste à dupliquer les données à partir d'un site d'origine par envoi de copies vers des sites de réplication. Ces deux types de distribution peuvent être combinés, c'est le cas par exemple quand on fragmente horizontalement une table dans plusieurs régions et qu'on souhaite avoir une consolidation des différentes parties de la table au niveau du siège. Quand il y a répartition de données, une requête émise par un client peut entraîner l'exécution de requêtes sur plusieurs sites afin d'assurer la cohérence des données. 4 S26 – Client/Serveur Cours n°2 TSIG2 ALSI Il peut s'agir de requêtes de consultation sur le site distant (cas 1): c'est le cas pour vérifier une contrainte d'intégrité référentielle. Il peut également s'agir de requêtes de mise à jour (au sens large) sur le(ou les) site(s) distant(s) (cas 2) : c'est le cas quand il y a duplication des données, il faut assurer la propagation des mises à jour. Deux types de MAJ peuvent être utilisées : - soit la MAJ synchrone (méthode PUSH) : la mise à jour des copies est assurée en temps réel Avantage : données toujours à jour et intègres. Inconvénient : nécessaire disponibilité du réseau. - soit la MAJ asynchrone (méthode PULL) où les modifications sont propagées à intervalles réguliers dans les copies ou bien à la demande d'un site répliquat (site sur lequel figure une copie). Avantage : les sites peuvent être indisponibles (sans que cela empêche les MAJ). Inconvénient : il faut travailler avec des données moins "fraîches". Remarques : . La réplication peut être manuelle. Dans ce cas, c'est l'administrateur qui la demande explicitement. . Il est possible d'autoriser la réplication symétrique (le site ou le poste devient alternativement copie ou référence). 4. MISE EN ŒUVRE DE LA REPARTITION DES DONNEES SOUS ORACLE 8 L'accès à des données distantes s'effectue au moyen de liens base de données (DATABASE LINK). 4.1. Cas de distribution sans réplication Il faut écrire des triggers pour vérifier les contraintes d'intégrité référentielle car il est impossible de poser une contrainte déclarative de clé étrangère (FOREIGN KEY) faisant référence à une clé primaire distante. Les triggers sont vulnérables aux pannes de réseau. En cas d'erreur dans l'exécution du trigger, l'ordre ne pourra être effectué. 4.2. Cas de distribution avec réplication Sous Oracle, on parle de cliché uniquement dans le cas de la réplication asynchrone sinon on parle de copie. 4.2.1. Réplication synchrone Elle est réalisée au moyen de triggers. CREATE TRIGGER maj_employes BEFORE DELETE OR INSERT OR UPDATE ON employes FOR EACH ROW 5 S26 – Client/Serveur Cours n°2 TSIG2 ALSI DECLARE ... BEGIN IF INSERTING OR UPDATING THEN ... END IF; IF DELETING THEN ... END IF ; END ; La table maître doit avoir des triggers associés. Avec le trigger majemployes, les ordres du langage de manipulation de données (Insert, Update, Delete) sont instantanément envoyées à la copie. En cas d'erreur dans l'exécution du trigger, les ordres de mise à jour (au sens large) des tables sont invalidés sur tous les sites. 4.2.2. Réplication asynchrone Elle est réalisée au moyen de clichés (SNAPSHOTS). Un cliché contient une copie partielle ou complète de la table maître. Caractéristiques Les clichés sont moins vulnérables que les triggers. Les intervalles de rafraîchissement sont définis par le créateur de cliché. Le mécanisme de rafraîchissement peut être activé automatiquement ou manuellement. Les clichés simples peuvent être mis à jour avec uniquement les lignes mises à jour depuis le dernier rafraîchissement (ils nécessitent dans ce cas un journal). La création des clichés doit être faite sur tous les sites où la réplication est exigée. Chaque cliché doit avoir un nom différent des autres objets du schéma. Des index peuvent être créés sur la table créée par le cliché. Il ne doit pas y avoir de contraintes ou de triggers sur un cliché. a. La création de cliché Un cliché est dérivé d'une requête Select. Un cliché peut contenir des données de plusieurs tables ou des sous-ensembles. Utilisation possible du Group by, Or, And, etc... Utiliser les mêmes options de stockage que pour la table maître en cas de copie complète. CREATE SNAPSHOT [nomutilisateur.]nomcliche [PCTFREE entier] [PCTUSED entier] [INITRANS entier] [MAXTRANS entier] [STORAGE clause de stockage] [TABLESPACE nomtablespace] [REFRESH FAST | COMPLETE | FORCE START WITH date NEXT date] AS requête_sql; 6 TSIG2 ALSI S26 – Client/Serveur Cours n°2 Le rafraîchissement est défini par un intervalle qui correspond à la différence entre la date de départ (start) et la date du prochain (next) rafraîchissement. Dans la plupart des cas, on utilise START WITH sysdate et NEXT sysdate + n (n est un nombre de jours). Exemple : si n = 3, le rafraîchissement s'effectue tous les 3 jours. n = x/24 x heures n = x/1440 x minutes n = x /(1440 * 60) x secondes Les privilèges nécessaires sont la création de tables (attribuer le rôle système RESOURCE qui inclut le droit de créer des tables) et le privilège Create Any Snapshot. Il faudra donc passer la requête grant resource, create any snapshot to nomutilisateur; Il faut également que l'utilisateur ait le droit de faire un Select sur la table maître. Lors de la création d'un cliché, Oracle crée : Une vue qui porte le nom du cliché Une table SNAP$_nomcliché où sont stockées les lignes définies par le cliché Une vue basée sur la table maître. b. Le cliché simple Un cliché simple contient des données issues d'une seule table. Un index de nom PK_nomtable est créé sur la table SNAP$_nomcliché. Exemple CREATE SNAPSHOT emp_dept_10 REFRESH FAST START WITH sysdate NEXT sysdate + 7 AS Select * from scott.emp@lien_oracle Where deptno=10; c. Le cliché complexe Un cliché complexe est un cliché issu de plusieurs tables ou dont la requête utilise des jointures, des sous-requêtes ou des Group By. Exemple CREATE SNAPSHOT employes REFRESH COMPLETE START WITH sysdate NEXT sysdate + 1/144 AS Select * from scott.emp@lient_oracle e, dept d Where e.deptno=d.deptno; 7 TSIG2 ALSI S26 – Client/Serveur Cours n°2 d. Les méthodes de rafraîchissement Si on ne précise pas REFRESH …, il faudra effectuer des rafraîchissements manuels de la façon suivante : EXECUTE DBMS_SNAPSHOT.REFRESH('[nomutilisateur.]nomcliché','mode') nomschéma.nomcliché est le nom du cliché à rafraîchir le mode détermine la méthode de rafraîchissement F : FAST C : COMPLETE ?: option de rafraîchissement spécifiée lors de la création du cliché Sinon, le rafraîchissement est automatique. Il y a 3 modes de rafraîchissement automatique : FAST : rapide Utilisé pour des clichés simples, il y a uniquement réplication des mises à jour (au sens large) effectuées depuis le dernier rafraîchissement. Utilise le journal du cliché situé sur le site maître. COMPLETE : complet Utilisé pour des clichés complexes et peut être utilisé pour des clichés simples en l'absence de journal sur le site maître. FORCE Essaie un rafraîchissement rapide si le cliché est simple et si le journal existe sur le site maître. Sinon exécute un rafraîchissement complet. Cette option est la valeur par défaut, qu'il faut privilégier. Si Oracle rencontre une erreur lors du rafraîchissement d'un cliché, de nouvelles tentatives ont lieu. Après 16 tentatives, Oracle indique que le cliché ne peut pas être rafraîchi. e. La modification de cliché Il est possible de modifier le mode de rafraîchissement ainsi que les paramètres de stockage d'un cliché avec la commande Alter snapshot. ALTER SNAPSHOT [nomschema.]nomcliche [PCTFREE entier] [PCTUSED entier] [INITRANS entier] [MAXTRANS entier] [STORAGE clause de stockage] [REFRESH FAST | COMPLETE | FORCE START WITH date NEXT date]; 8 S26 – Client/Serveur Cours n°2 TSIG2 ALSI f. Le journal de cliché (snapshot log) Un journal de cliché (snapshot log) contient tous les changements d'une table maître survenus depuis le dernier rafraîchissement d'un cliché simple. Il est utilisé pour les rafraîchissements rapides des clichés simples. Il est à créer sur le site de référence. CREATE SNAPSHOT LOG ON [nomschema.]nomtable [PCTFREE entier] [PCTUSED entier] [INITRANS entier] [MAXTRANS entier] [STORAGE clause de stockage] [TABLESPACE nomtablespace]; Exemple CREATE SNAPSHOT LOG ON emp; g. Le groupe de clichés (snapshot group) Il est possible de mettre à jour un ensemble de clichés en créant un groupe de rafraîchissement de clichés. L'utilisation d'un groupe permet en plaçant la (ou les) table(s) maître(s) et les clichés dans le même groupe de produire les réplications nécessaires. 5. REGLES ET RECOMMANDATIONS POUR CHOISIR LE LIEU D'IMPLANTATION DES TABLES. Les données peuvent être implantées sur les différents sites selon le critère de volume ou bien selon des critères liés à leur utilisation. 5.1. Critères à prendre en compte 5.1.1. Volume - données volumineuses : sur le serveur, - données peu volumineuses : sur le serveur ou sur poste. 5.1.2. Critères liés à l'utilisation des données Les principaux sont : - le type d'utilisation : données privées : données consultées et mises à jour par le site qui les accueille et inaccessibles aux autres, données partagées : données consultées et mises à jour par plusieurs sites, données protégées : données mises à jour par le site qui les accueille et consultables par les autres, données consultables : données uniquement consultables par le site qui les accueille (c'est par exemple le cas des historiques). 9 S26 – Client/Serveur Cours n°2 TSIG2 ALSI Remarque : ce qui vient d'être énoncé au niveau du type de site est également valable au niveau du type de poste avec en plus la possibilité d'avoir des données résidant sur la machine mais inaccessibles à certains types de postes (cas des données confidentielles). - le mode et la fréquence d'utilisation : données en consultation : fréquente, peu fréquente, données en mise à jour (au sens large) : fréquente, peu fréquente. Parfois, il est important d'aller jusqu'au niveau plus fin du type de mise à jour (modification, ajout, suppression). - le niveau de confidentialité (les données très confidentielles seront plutôt stockées sur le poste de travail habilité à les manipuler). 5.2. Recommandations dans un cas simple d'architecture client-serveur - implantation sur le poste de travail des données : privées, protégées, copies de données partagées en consultation, à faible taux de mise à jour. Ces dernières sont destinées par exemple à permettre de faire des contrôles locaux, donc à réduire certains temps de réponse ou à permettre d'offrir des consultations ou des sélections locales dans des listes déroulantes. - implantation sur le serveur des données partagées en mise à jour à fort taux de mise à jour. 6. EXEMPLE DE SYNTHESE L'illustration porte sur une banque qui dispose d'agences. On fera l'étude au niveau type de site. MLD global très simplifié de la gestion des comptes bancaires : agence (numagence, nomagence, adragence, telagence) client (numclient, nomclient, adrclient, telclient, #numagence) compte (numcompte, soldecompte, typecompte, #numclient) tarif (typeopération, prix) /* Exemple : virement */ operation (numcompte, mois, an, numopération, montant, …, #typeopération) Les clients, les comptes et les agences sont mis à jour en agence. Une agence se charge uniquement de ses clients et de ses comptes et du tuple d'agence la concernant. Le siège consulte les clients, les comptes et les agences. Les tarifs sont gérés par le siège et peu mis à jour. Ils sont consultés fréquemment en agence. Les opérations bancaires sont volumineuses, elles sont souvent créées au niveau du siège, rarement en agence. MLD local agence agence (numagence, nomagence, adragence, telagence) client (numclient, nomclient, adrclient, telclient, #numagence) compte (numcompte, soldecompte, typecompte, #numclient) tarif (typeopération, prix) /* Exemple : virement */ /* on peut la nommer agence_n */ /* on peut la nommer client_n */ /* on peut la nommer compte_n */ 10 S26 – Client/Serveur Cours n°2 TSIG2 ALSI MLD local siège agence (numagence, nomagence, adragence, telagence) /* consolidation */ client (numclient, nomclient, adrclient, telclient, #numagence) /* consolidation */ compte (numcompte, soldecompte, typecompte, #numclient) /* consolidation */ tarif (typeopération, prix) /* Exemple : virement */ operation (numcompte, mois, an, numopération, montant, …, #typeopération) Relation agence client compte tarif operation bancaire Machine type Agence Référence pour le tuple la concernant (fragmentation sur numéro d'agence). Référence pour les clients gérés par l'agence (fragmentation sur numéro d'agence). Dossier (référence + copie) pour les comptes gérés par l'agence (fragmentation sur numéro d'agence). L'agence devient copie lors du relevé (le siège met alors le solde à jour). La maj est effectuée de façon asynchrone le soir. Copie avec maj synchrone Machine type Siège Copie avec MAJ périodique (tous les soirs par exemple). Non présent mais accessible en maj Référence Copie avec MAJ périodique (tous les soirs par exemple). Dossier. Le siège est site copie avec MAJ périodique (tous les soirs par exemple) sauf lors du relevé (le le siège devient référence pour la maj du solde). Référence 5. REGLES DE FONCTIONNEMENT A RESPECTER POUR UNE BASE DE DONNEES REPARTIES Chris Date a énoncé 12 règles pour un système réparti : 1 - Autonomie locale : chaque base physique appartenant à une base logique est administrée localement. 2 - Indépendance vis-à-vis d'un site central : dans une base de données réparties, il n'y a pas de site central. Chaque site possède son propre schéma relationnel, ses propres requêtes… 3 - Fonctionnement en continu : enlever ou ajouter des sites dans la base logique ou modifier le schéma relationnel ou le SGBD sur un site ne doivent pas avoir d'impact sur le fonctionnement de la base de données réparties. 4 - Indépendance de la localisation : la localisation physique des données doit être transparente pour les utilisateurs. L'utilisateur peut travailler dans une même requête sur des tables appartenant à des bases physiques différentes . 5 - Indépendance du partitionnement : les données d'une table doivent pouvoir être réparties sur plusieurs sites pour favoriser la localité de référence (stocker les données sur le site où elles sont le plus utilisées). Ce partitionnement doit être transparent pour les utilisateurs. 11 TSIG2 ALSI S26 – Client/Serveur Cours n°2 6 - Indépendance de la duplication : les données d'une table doivent pouvoir être dupliquées pour favoriser l'accessibilité et la fiabilité du système en cas de panne. Cette duplication doit être transparente pour les utilisateurs. 7 -Traitement réparti des requêtes : les utilisateurs peuvent accéder à des données qui résident sur différents postes. Les requêtes sont exécutées sur le poste où résident les données. Le poste maître de la requête est celui à partir duquel la requête est émise. 8 - Gestion des transactions réparties : un mécanisme automatique doit assurer l'intégrité des données (Mécanisme de "Terminaison à deux phases" aussi appelé" Commit à deux phases"). Les accès concurrents aux données sont garantis par les mécanismes de verrouillage. 9 - Indépendance matérielle : les logiciels de la base de données réparties doivent pouvoir s'exécuter sur plusieurs plates-formes matérielles. 10 - Indépendance du système d'exploitation : les logiciels de la base de données réparties doivent pouvoir s'exécuter sur plusieurs systèmes d'exploitation. Les bases physiques peuvent être implantées sur des systèmes d'exploitation différents. 11 - Indépendance du réseau : les sites de la base de données réparties doivent pouvoir être reliées par différents types de réseaux. Les différentes bases physiques peuvent fonctionner sur des machines reliées par des protocoles de réseaux différents. 12 - Indépendance du SGBD : les SGBD relationnels ou non doivent pouvoir participer à la gestion de la base de données réparties. 12