doc

publicité
MSBM
2002-2003
TP 4 : Introduction à la manipulation d'une base de
données à partir du SGBD ORACLE
Pour l'instant, nous avons créé, mis à jour et interrogé des bases de données gérées par le SGBD ACCESS.
Ce TP a pour but de mettre en application ce que nous avons déjà vu au cours des TD précédents, c'est à dire la
manipulation d'une base de données grâce au langage SQL (Structured Query Langage).
Nous verrons ainsi comment :
 on crée une base au moyen du langage de définition des données
 on met à jour les données (insertion, modification, suppression) avec le langage de définition des
données
 on interroge les données avec le langage de manipulation des données
 on met en place des contrôles portant sur l'accés aux données grâce au langage de contrôle des données
Nous travaillerons sur le SGBD ORACLE et nous pourrons ainsi voir que SQL compris par le SGBD
ORACLE est plus proche de la norme AINSI que ne l'est celui utilisé dans le SGBD ACCESS.
Pour pouvoir effectuer toutes ces opérations, nous allons taper les instructions au clavier. La saisie se fera dans
sqlplus, logiciel qui présente une interface assez peu conviviale. Nous verrons ainsi l'intérêt de saisir les
instructions dans un fichier texte au moyen d'un éditeur (WordPad, de préférence lorsque l'on se trouve sous le
système d'exploitation Windows). Pour lancer sqlplus, il suffit de double cliquer sur l'icône présente sur le
bureau Windows. Il vous sera indiqué en TP le login ainsi que le mot de passe nécessaires pour accéder au
SGBD.
Tout au long de ce TP, nous nous appuierons sur un élément du SGBD qui a une très grande importance et au
travers duquel nous pourrons vérifier de façon aisée et rapide si les instructions que nous avons soumises ont
bien été exécutées par le SGBD. Cet élément présent au niveau de tout SGBD, quel qu'il soit, est le dictionnaire
des données.
I Dictionnaire des données
Le dictionnaire de données est un ensemble de tables dans lesquelles sont stockées les descriptions des objets
de la base. Les tables de ce dictionnaire peuvent être consultées au moyen du langage SQL.
Des vues de ces tables permettent à l'utilisateur de voir les objets qui lui appartiennent ou sur lesquels il a des
droits. L'administrateur a pour sa part accés à toutes les vues.
Quelques vues et tables du dictionnaire de données :
USER_TABLES: tables et vues créées par l'utilisateur
USER_CATALOG (ou CAT): tables et vues sur lesquelles l'utilisateur a des droits à
l'exception des tables et vues du dictionnaire de données
USER_TAB_COLUMNS (ou COLS): colonne de chaque table ou vue créée par l'utilisateur
courant
USER_CONSTRAINTS: définition des contraintes pour les tables des utilisateurs
USER_CONS_COLUMNS: colonnes qui interviennent dans les définitions des contraintes
Exemple de consultation du dictionnaire de données :
Si vous voulez lister les caractéristiques des tables que vous avez créées en tant qu'utilisateur de la base (ayant
les droits de création de tables, bien entendu), vous poserez la requête suivante au SGBD :
SELECT * FROM USER_TABLES;
Question 1 : quels sont les attributs de la vue USER_TABLES ?
MSBM
2002-2003
Question 2 : combien de tables sont présentes ?
Si vous souhaitez lister uniquement les noms des tables que vous avez créées, vous poserez la requête suivante
SELECT TABLE_NAME FROM USER_TABLES;
Question 3 : quels sont les noms des tables qui ont été créées ?
Question 4 : comment procèderiez-vous pour obtenir la liste des contraintes que vous avez imposées sur les
tables créées ?
Question 5 : à votre avis, comment obtiendrez-vous la liste des noms des contraintes que vous avez imposées
sur les tables créées ?
II Description des tables de la base de données
Pour obtenir la description en terme d'attributs de chacune des tables, vous pouvez utiliser la commande sqlplus
suivante :
DESCRIBE nom_table
ou bien
DESC nom_table
Question 6 : donner le schéma relationnel de la relation COMMANDES ?
III Création d'un nouveau schéma de base de données
Nous allons maintenant manipuler la base de données sur les sociétés pharmaceutiques sur laquelle nous avons
travaillé en TD (TD 5).
Pour créer les différentes tables de la base de données, nous nous servons d'instructions dont la syntaxe est la
suivante :
CREATE TABLE nom_table
(
att1 type_att1,
att2 type_att2,
..... ,
atti type_atti,
..... ,
attn val_attn
);
Il est également possible de préciser les contraintes que l'on veut imposer. Reportez-vous au texte du TD 5 pour
la syntaxe utilisée dans les divers cas de contraintes.
Le script de création a été saisi. Vous le trouverez dans le répertoire indiqué au cours de la séance de TP.
Editez ce script. Copiez-en le contenu et collez-le dans sqlplus.
Question 7 : quel type d'affichage observez- vous dans l'inferface sqlplus ?
Question 8 : combien de tables sont désormais présentes ?
Question 9 : lister le nom et la date de dernière modification de chacune des nouvelles tables apparues.
Question 10 : donner la description de la relation SOIGNE.
MSBM
Question 11 : donner les noms ainsi que le type des contraintes posées sur ces nouvelles tables.
2002-2003
IV Insertion de données dans la base de données
Question 12 : quelle requête SQL poseriez-vous pour connaître le contenu de la table EMPLOYE ? Que
constatez-vous ?
Pour insérer des données dans une table
INSERT INTO nom_table VALUES (val_att1, val_att2, ......, val_atti, ......., val_attn);
Un script d'insertion d'un certain nombre de données a été saisi. Il vous sera indiqué durant la séance où vous
pourrez le trouver sur le disque dur de l'ordinateur. Procédez comme précédemment par copier/coller dans
l'interface sqlplus.
Question 13 : quel type d'affichage observez- vous dans l'inferface sqlplus ?
Question 14 : quel est désormais le contenu de la table EMPLOYE ?
Question 15 : quelle requête poseriez-vous pour connaître le nombre d'employés qui sont répertoriées dans la
base de données ?
Question 16 : insérez l'employé Toto qui est né le 09/12/66, a été embauché 01/01/01 par la société Sanofi
Synthélabo pour un salaire de 850 euros et avec pour responsable direct le PDG de la société.
Question 17 : insérez le médicament Solutricine qui a pour principe actif la tyrothricine et est fabriqué par
Aventis. La solutricine est distribuée sous forme de boîte de 72 comprimés à sucer. La tyrothricine soigne les
maux de gorge peu intenses mais également les aphtes (petites plaies de la bouche).
V Mise à jour des données
Pour faire des mises à jour des données, il faut écrire des instructions du type :
UPDATE nom_table SET atti = new_val WHERE attj = une_valeur;
Question 18 : les employés qui ne sont pas des PDG sont augmentés chacun de 10%. Ecrivez l'instruction
permet de faire cette modification des données de la base.
VI Suppression de données
La suppression de données se fait au moyen d'instructions dont la syntaxe est :
DELETE FROM nom_table WHERE attj = une_valeur;
Question 19 : supprimez l'employé qui est né le 09/12/66 et a été embauché 01/01/01 par la société Sanofi
Synthélabo.
VI Mise à jour du schéma
Il est possible de modifier les schémas relationnels que l'on a créés. Ainsi il est possible d'ajouter de nouvelles
tables, d'ajouter des attributs ou d'en modifier la définition, d'ajouter des contraintes ou d'en modifier, d'ajouter
des index, etc.
MSBM
2002-2003
Pour ajouter de nouvelles tables, il suffit d'utiliser des instructions suivant la syntaxe vue en III.
Pour supprimer une table, la syntaxe est :
DROP TABLE nom_table;
La syntaxe générale pour opérer des modifications sur le schéma relationnel est la suivante :
ALTER TABLE nom_table ACTION description;
avec ACTION : ADD ou MODIFY ou RENAME OR DROP
Question 20 : ajoutez les contraintes indiquées dans le TD 5 c'est-à-dire :
 Les salaires des employés sont supérieur ou égal au SMIC (on admet que tout employé travaille à temps
complet et donc touche au moins le SMIC).
 Les secteurs auxquels appartiennent les ARCs sont pris parmi l'ensemble suivant : cancérologie,
rhumatologie, cardiologie, dermatologie.
 Un employé doit avoir plus de 18 ans et moins de 65 ans.
Question 21 : Ajoutez également la contrainte qui permet d'imposer que le codeSociete de la table ARC fait
référence à une société de la table SOCIETE.
Question 22 : certaines contraintes n'ont pas été nommées. Cela pose des problèmes de manipulation des
contraintes et de compréhension des messages d'erreur produits par le SGBD, en particulier.
Essayez de renommer une des contraintes à laquelle il n'a pas été attribué un nom autre que celui donné en
interne par le SGBD. Par exemple, renommer la contrainte de clé primaire sur la table société.
 Pour cela, il vous faut connaître le nom que le système a affecté à cette contrainte. Comment faites-vous
pour récupérer ce nom ?
 Essayez ensuite de supprimer la contrainte. Que constatez-vous ?
 Désactivez les contraintes qui posent problème. La syntaxe de désactivation des contraintes est :
ACTIVATION :
DESACTIVATION :

ALTER TABLE nom_table ENABLE CONSTRAINT nom_contrainte;
ALTER TABLE nom_table DISABLE CONSTRAINT nom_contrainte;
Modifiez la table SOCIETE de façon à recréer la clé primaire mais cette fois-ci en lui affectant un nom.
VII Interrogation de données
Quesrion 23 : Nous avons vu dans le TD 5 quelques requêtes que l'on pourrait poser à la base.
Essayez de poser les requêtes demandées :
1. Donner les noms et matricules des employés de la société de code Siret 5.
2. Donner les noms et matricules des employés de la société Bayer Pharma.
3. Donner les noms et matricules des employés des sociétés Bayer Pharma, Pierre Fabre, Biogalénique et
Sanofi Synthelabo.
4. Lister les ARCs (noms et matricules) spécialisés en cardiologie.
5. Lister les ARCs (noms et matricules) qui ont été embauchés entre 1990 et 1992.
6. Donner la liste des pathologies triées par ordre alphabétique.
7. Donner les sociétés dont le siège social se trouve à Paris.
8. Donner le nombre de médicaments décrits dans la base de données.
9. Donner pour chaque société le nombre de molécules actives mises au point.
10. Donner les sociétés qui ont mis au point au moins deux molécules actives.
11. Quelle est la société qui a le plus de principes actifs à son actif ?
MSBM
2002-2003
12. Quelles sont les molécules actives qui ont un rôle thérapeutique dans l'hypertension artérielle ?
13. Combien de molécules actives ont un rôle dans l'hypertension artérielle?
14. Quels sont les médicaments qui sont impliqués dans le traitement de l'hypertension artérielle ?
15. Quelles sont les molécules qui ont un rôle thérapeutique dans au moins deux pathologies ?
16. Quelles sont les molécules qui agissent à la fois sur la grippe et sur le syndrome de Kawasaki ?
17. Quelles sont les pathologies qui peuvent être soulagées par plusieurs principes actifs ?
18. Quelles sont les molecules qui n'agissent que sur la grippe ?
19. Quelles sont les molécules qui agissent sur la grippe mais qui n'agissent pas sur l'hypertension
artérielle ?
20. Quels sont les principes actifs qui agissent dans toutes les pathologies ?
Question 24 : Donnez la moyenne, le minimum et le maximum des salaires des PDG des sociétés.
VIII Droits d'accés
Oracle permet à plusieurs utilisateurs de travailler sur la même base de données en toute sécurité. Deux
commandes sont à ce titre particulièrement importantes: GRANT et REVOKE et permettent de
définir les droits de chaque utilisateur sur les objets de la base.
Tout utilisateur accède à la base à l'aide de son nom utilisateur et de son mot de passe. C'est le nom utilisateur
qui permet de déterminer les droits d'accès aux objets de la base de données.
Deux utilisateurs dess1 et dess2 ont été créés par le DBA et sont autorisés à se connecter à la base Oracle. Ils
ont aussi les privilèges de créer des objets de schéma de base de données utilisateur (tables, vues, contraintes
etc).
Depuis le début de la séance, vous avez travaillé sous le nom d'utilisateur dess1 et vous avez donc été
<<en concurrence>> avec vous-même.
Nous allons vérifier que le SGBD gère la concurrence d'accès à des objets de la base entre plusieurs utlisateurs
différents.
Tout utilisateur qui crée des objets est propriétaire de ces objets (table\_name, owner de USER_tables dans le
dictionnaire des données).
Le créateur d'un objet peut décider de donner (ou de supprimer) certains droits d'accès à cet objet à tout autre
utilisateur de sa connaissance.
o L'ordre GRANT
GRANT privilege ON table/vue TO utilisateur [WITH GRANT OPTION] ;
Cet ordre permet de ``donner'' le privilège concerné sur la table ou la vue à l'utilisateur.
Exemple : dess1 a créé la table SOCIETE et veut autoriser dess2 à lire cette table. Il passe alors l'ordre :
GRANT SELECT ON SOCIETE TO dess2;
Les privilèges qui peuvent être donnés sont les suivants:
SELECT: droit de lecture, INSERT: droit d'insertion de lignes, UPDATE: droit de modification de lignes,
DELETE: droit de suppression de lignes, ALTER: droit de modification de la définition de la table, INDEX:
droit de création d'index, ALL: tous les droits ci-dessus.
Un utilisateur ayant reçu un privilège avec la mention facultative WITH GRANT OPTION peut les transmettre
à son tour à un autre utilisateur.
Exemples d'application :



dess1 (dess2) donne les droits de lecture de ``sa'' table concernant les sociétés à l'utilisateur dess2
(dess1)
dess1 (dess2) donne les droits de modification de ``sa'' table EMPLOYE à l'utilisateur dess2 (dess1)
Vérifier que les privilèges ont été bien accordés
MSBM
2002-2003
 Testez vos nouveaux droits (les objets que vous interrogerez et dont vous n'êtes pas propriétaire sont
désignés par leur nom complet nompropriétaire.nomobjet).
o L'ordre REVOKE
Un utilisateur ayant accordé un privilège peut le reprendre à tout moment à l'aide de l'ordre REVOKE.
REVOKE privilege ON table/vue FROM utilisateur ;
Exemples d'application :


Enlever les privilèges précédemment accordés
Vérifier que les privilèges ont bien été supprimés
IX Gestion des accès concurrents
Une transaction (ensemble d'ordres SQL) est atomique c'est-à-dire qu'elle ne peut se terminer que par un succés
(elle est alors validée) ou un échec (tous ses effets sont alors détruits).
En conséquence, en contexte multi-utilisateurs, les modifications effectuées par une transaction réalisée par un
utilisateur ne sont connues des autres utilisateurs que lorsque la transaction a été confirmée par un
COMMIT.
Oracle gère automatiquement les accès concurrents. Si une transaction est en train de modifier les lignes d'une
table, les autres transactions peuvent modifier les données telles qu'elles étaient avant ces dernières
modifications (pas de temps d'attente pour la lecture).
Pour rester ``simple'' nous dirons que toute transaction pose des verrous sur les objets qu'elle manipule et que
deux grands types de verrous existent :


en lecture (verrou passant plusieurs lectures simultanées peuvent avoir lieu)
en écriture (verrou bloquant la première écriture bloque les autres jusqu'à ce que le verrou soit relaché)
Commandes qui provoquent un blocage implicite sur les tables et les lignes impliquées : DELETE,
INSERT, UPDATE, ALTER TABLE, ...
Exemples d'application :

Faites des sélections sur les mêmes lignes des mêmes tables avec deux noms utilisateurs différents
Par exemple, dess1 et dess2 réalisent la même requête : ``Donner les noms des employés de la société Bayer
Pharma ''.
 Réessayez le même exercice mais avec des commandes provoquant des blocages
Par exemple, dess1 modifie la table SOCIETE : ``Modifiez le nom de la société Bayer Pharma en Bayer''. Puis
dess1 et dess2 réalisent la même requête : ```Donnez le nom de la société dirigée par Werner Wenning ''. Que
constatez-vous ?
Tester avec COMMIT et ROLLBACK.

Etreinte mortelle (DEADLOCK) :
 dess1 fait un UPDATE sur le tuple i de la table SOCIETE
 dess2 fait un UPDATE sur le tuple j de la table MEDICAMENT
 dess2 fait un UPDATE sur le tuple j de la table SOCIETE
 dess1 fait un UPDATE sur le tuple i de la table MEDICAMENT
Que constatez-vous. Quelle est la solution ? Quelles sont les opérations qui ont été effectivement effectuées sur
les tables concernées ?
MSBM
2002-2003
Téléchargement