Tables/Vues systèmes Oracle - LIPN
Transcription
Tables/Vues systèmes Oracle - LIPN
Université Paris 13 Institut Galilée TP Base de données TP4 Année 2008-2009 INFO1 Exercice 1 : Tables/Vues systèmes Oracle gère les informations concernant ses différents utilisateurs, ainsi que ses propres informations, sous forme d’une base de données. Les caractéristiques de certaines de ces tables sont données en Annexe. – Regarder la description de ces tables et consulter leurs contenus. – Répondez aux questions suivantes en utilisant ces tables. 1. Donnez le nom des tables que vous avez créées. 2. Donnez le nom et le type des colonnes que vous avez créées ainsi que le nom de la table auxquelles elles appartiennent. 3. Donnez le nom des tables auxquelles vous avez accès et leur propriétaire. 4. Donnez le nom et le propriétaire de toutes les tables auxquelles vous avez accès mais que vous n’avez pas créées. 5. En dehors des tables systèmes, quelles sont les tables sur lesquelles vous avez des privilèges. 6. Parcourez la table DICTIONARY (qui a pour synonyme DICT), et pour les tables dont vous ne voyez pas l’utilité, lire le commentaire associé avec help (si cette commande est accessible). Exercice 2 : Tables/Vues utilisateur L’objectif est de développer une base de données répondant aux besoins en stockage et en exportation d’informations vers les clients de location embarqués dans des distributeurs automatiques. Les DVD mis à la location sont achetés via une centrale d’achat. Les informations disponibles sur ces DVD sont : le code barre numérique de l’oeuvre, le titre, le réalisateur, le genre et éventuellement une URI (Uniform Resource Identifier) indiquant le fichier XHTML correspondant à l’image du boîtier commercial du DVD. Les genres possibles sont Action, Comedie, Drame, Fantastique, Suspens, Terreur et X. Une URI aura une longueur maximale de 100 caractères. Ces DVD sont en location dans des distributeurs localisés sur tout le territoire. Pour ces distributeurs, il est nécessaire de stocker leur adresse, les DVD en location. Les loueurs de DVD se sont nécessairement inscrits préalablement à toute location. Les informations requises pour cette inscription sont le nom, l’adresse, le téléphone. De plus, chaque loueur possède une clef alphanumérique correspondant au cryptage d’un mot de passe. Afin d’exporter des informations vers les clients, il est nécessaire de pouvoir visualiser les stocks de DVD au niveau national, d’un département, d’une ville ou encore d’un distributeur. Cette visualisation doit donner les DVD classés par (titre, réalisateur, genre) ainsi que le nombre en stock. Pour un DVD donné, il faut pouvoir visualiser sa disponibilité au niveau départemental, d’une ville et d’un distributeur. Il faut pouvoir visualiser les DVD d’un distributeur ordonnés par (titre,réalisateur) ou par (réalisateur,titre) pour tous les DVD, de façon globale ou pour un genre donné. Les genres disponibles doivent évidemment être visualisables. Il faut aussi pouvoir à tout instant indiquer aux clients quels sont les DVD indisponibles. Enfin, il faut être capable de donner à un utilisateur les coordonnées des distributeurs du même département qui ont encore les DVD indisponibles. Exportation des données : Etant donné la base de données décrite dans les fichiers creation.sql insert.sql disponibles sur la page qui vous sera précisée en TP, créez et spécifiez les vues requises. Pour chacune des vues ci-dessous, vous devez spécifier en plus (ce n’est pas fait ici) : le schéma, i.e. l’ensemble des attributs/domaines. Seules ces spécifications permettrons une bonne utilisation des vues. /∗ Reponses aux r e q u e t e s d e s c l i e n t s ∗/ /∗ 1 . I l e s t n e c e s s a i r e de p o u v o i r v i s u a l i s e r l e s s t o c k s de DVD au n i v e a u n a t i o n a l , ∗/ TITRE REAL GENRE −−−−−−−−−−−−−−−−−−−−−− −−−−−−−−−−−−−−− −−−−−−−− Kill Bill Tarantino Action Le l i t a deux p l a c e s Jean D e l l a n o y Comedie Mu lho lla nd D r i v e Lynch Drame /∗ 2 . DEPT −−−− 91 91 91 d ’ un d e p a r t e m e n t ( par exemple 91) ∗/ TITRE REAL GENRE −−−−−−−−−−−−−−−−−−−− −−−−−−−−−−−−−− −−−−−−−− Kill Bill Tarantino Action Le l i t a deux p l a c e s Jean D e l l a n o y Comedie Mu lh oll and D r i v e Lynch Drame /∗ 3 . DEPT −−−− 91 91 QUANTITE −−−−−−−− 16 1 4 d ’ une v i l l e ( par exemple Orsay ) ∗/ VILLE −−−−− Orsay Orsay /∗ 4 . IDDIS −−−−− 2 2 QUANTITE −−−−−−−− 12 1 2 TITRE −−−−−−−−−−−−−−− Kill Bill Mul hol lan d D r i v e REAL −−−−−−−−− Tarantino Lynch GENRE −−−−−−− Action Drame QUANTITE −−−−−−−− 8 1 ou e n c o r e d ’ un d i s t r i b u t e u r ( par exemple l e d i s t r i b u t e u r 2) ∗/ TITRE −−−−−−−−−−−−−−−− Kill Bill M ulh oll and D r i v e REAL −−−−−−−−−− Tarantino Lynch GENRE −−−−−−− Action Drame QUANTITE −−−−−−−− 2 2 /∗ 5 . Pour un DVD donne , i l f a u t p o u v o i r v i s u a l i s e r sa d i s p o n i b i l i t e au n i v e a u d e p a r t e m e n t a l ( par exemple 22) ∗/ DEPT −−−− 22 22 CB −−−−−−−−−−−−− 5414474401006 3259119658825 /∗ 6 . TITRE −−−−−−−−−−−− Kill Bill Mul hol lan d D r i v e REAL −−−−−−−−− Tarantino Lynch GENRE −−−−−−−− Action Drame QUANTITE −−−−−−−− 4 2 d ’ une v i l l e ( par exemple Lannion ) ∗/ DEPT VILLE CB TITRE REAL GENRE QUANTITE −−−− −−−−−−− −−−−−−−−−−−−− −−−−−−−−− −−−−−−−−− −−−−−−− −−−−−−−− 22 Lannion 5414474401006 K i l l B i l l T a r a n t i n o Action 2 /∗ 7 . IDDIS −−−−− 0 0 e t d ’ un d i s t r i b u t e u r ( par exemple l e d i s t r i b u t e u r 0) . ∗/ CB −−−−−−−−−−−−− 5414474401006 3259119658825 TITRE −−−−−−−−−−−−−−−− Kill Bill Mul hol lan d D r i v e REAL −−−−−−−− Tarantino Lynch GENRE −−−−−− Action Drame QUANTITE −−−−−−−− 5 1 /∗ 8 . I l f a u t p o u v o i r v i s u a l i s e r l e s DVD d ’ un d i s t r i b u t e u r ordonnes par ( t i t r e , r e a l i s a t e u r ) ( par exemple l e d i s t r i b u t e u r 0) ∗/ ID −− 0 1 2 3 4 10 TITRE −−−−−−−−−−−−−−−− Kill Bill Kill Bill Kill Bill Kill Bill Kill Bill M ulh ol lan d D r i v e /∗ 9 . ID −− 10 0 1 2 3 4 REAL −−−−−−−−−− Tarantino Tarantino Tarantino Tarantino Tarantino Lynch GENRE −−−−−− Action Action Action Action Action Drame IDDIS −−−−−− 0 0 0 0 0 0 ou par ( r e a l i s a t e u r , t i t r e ) ∗/ TITRE −−−−−−−−−−−−−−−− Mulho lla nd D r i v e Kill Bill Kill Bill Kill Bill Kill Bill Kill Bill REAL −−−−−−−−− Lynch Tarantino Tarantino Tarantino Tarantino Tarantino GENRE −−−−−−− Drame Action Action Action Action Action IDDIS −−−−− 0 0 0 0 0 0 /∗ 1 0 . Les g e n r e s d i s p o n i b l e s dans un d i s t r i b u t e u r d o i v e n t evidemment e t r e v i s u a l i s a b l e s . Par exemple 2 c i −d e s s o u s . ∗/ GENRE −−−−−−−− Action Drame IDDIS −−−−− 2 2 /∗ 1 1 . I l f a u t a u s s i p o u v o i r a t o u t i n s t a n t i n d i q u e r aux c l i e n t s q u e l s s o n t l e s DVD i n d i s p o n i b l e s dans un d i s t r i b u t e u r . ( Par exemple 2 ) ∗/ IDDIS −−−−− 2 2 IDDVD −−−−− 9 11 /∗ 1 2 . Enfin , i l f a u t e t r e c a p a b l e de donner a un u t i l i s a t e u r l e s c o o r d o n n e e s d e s d i s t r i b u t e u r s du meme d e p a r t e m e n t q u i o n t e n c o r e l e s DVD i n d i s p o n i b l e s . ∗/ ID −− 0 0 0 ADR −−−−−−−−−−−−−−−−−− Boulevard Dubreuil P l a c e du marche Rue de P a r i s DEPT −−−− 91 91 91 VILLE −−−−−−−− Orsay Les U l i s Orsay Exercice 3 : Connectez vous à Oracle depuis deux fenêtres de terminal distinctes (on les appelera F1 et F2). 1) Exécuter dans F1 et dans F2, votre fichier nettoyage.sql (TP précédent) pour détruire toutes vos tables, et vérifier sur F1 et sur F2 que vos tables sont bien détruites. 2) Exécuter seulement dans F1, vos fichiers creation.sql et insertion.sql pour recréer le schéma et l’instance de la base du TP précédent. Vérifier que le schéma et l’instance créés correspondent aux schéma et instance souhaités. Vérifier que la base est aussi lisible à partir de la fenêtre F2. Qu’en déduisez-vous ? 3) Dans la fenêtre F1 insérer en ligne de commande dans une de vos tables un nouveau n-uplet t sans faire commit, et regarder si ce n-uplet se trouve bien dans la table. Vérifier dans la fenêtre F2 si le n-uplet t se trouve dans la table. Qu’en déduisez-vous ? Faut-il faire commit dans la fenêtre F1 ? Exercice 4 : Un schéma SQL est un ensemble de tables. Le nom du schéma est le nom de login du créateur de la table. Le créateur a tous les privilèges sur ses tables, et il peut céder un ou plusieurs de ces privilèges à un autre utilisateur. La personne qui a un privilège sur une de vos tables doit préfixer votre table par votre nom lors de son utilisation, ou bien créer un synonyme de votre table auparavant (voir ANNEXE). 1) Former un groupe de 2 à 4 utilisateurs (avec vos voisins) et donner différentes sortes de privilèges (1 par 1) sur vos tables à un autre membre de votre groupe. Tester ensemble des commandes SQL sur les tables qui ne sont pas les votres. 2) Annuler tous les privilèges que vous avez cédés aux membres de votre groupe. Céder à un de ces membres seulement le privilège insert pour une table. Refaire l’exercice 1, en supposant que maintenant vous êtes F1 et l’autre membre est F2. Qu’en déduisez-vous ? Remarque : Cet exercice n’a de sens que si vous avez bien respecté les exigences du TP précédent et que les schémas de vos tables sont tout à fait identiques. 3) Annuler tous les droits que vous avez cédés aux membres de votre groupe. Céder à tous les membres de votre groupes seulement le privilège select pour toutes les tables de votre base. Maintenant vous avez une base de données commune dont les données sont réparties sur différents site, où un membre est vu comme un site. Reformuler les requêtes 1, 2 et 3 du TP précédent sur cette "base répartie". Remarque : Cet exercice n’a de sens que si vous avez bien respecté les exigences du TP précédent et que les schémas de vos bases sont tout à fait identique. Annexes Vues Une vue est une table virtuelle, i.e., une relation définie en termes d’autres tables et vues. Une vue (par défaut) n’est pas stockée dans la base de données (par opposition à une table de base). Un utilisateur peut consulter ou modifier une vue (selon ses droits) comme si c’était une table réelle Une vue est définie par : CREATE VIEW <nomvue> AS SELECT ... [WITH CHECK OPTION] ; Le select peut contenir toute les clauses d’un SELECT sauf ORDER by. Par exemple, soient deux schémas Fréquente(Bar,Personne) et Vend(Bar,Biere. On désire créer une vue PeutBoire(client, bière) qui “contient” toutes les paires (client, bière) telles que le client fréquente au moins un bar qui sert la bière en question : CREATE VIEW PeutBoire AS SELECT Client, Bière FROM Fréquente, Vend WHERE Fréquente.bar = Vend.bar ; On supprime une vue par DROP VIEW <nomvue> On peut requêter une vue comme si c’était une table de base. Cela permet de donner l’accès à un nombre limité d’attributs pour une table de base. SELECT biere FROM PeutBoire WHERE client = ’Sally’ ; Quand on utilise une vue dans une requête, le SGBD interprète la requête comme si la vue était une table de base. Chaque vue agit comme une macro : elle est remplacée dans la requête par son équivalent algébrique. Les vues participent à la protection des données, car on peut donner accès à une vue sans donner accès à la table sous-jacente (accès à certaines lignes ou à certaines colonnes de cette table). Les modifications peuvent également être restreintes avec la clause with CHECK OPTION. Droits SQL> GRANT <privilège> ON <objet> TO <utilisateur_x> donne un privilège à un utilisateur_x sur l’objet mentionné parmi les privilège sont : insert, select, update,delete, alter SQL> GRANT ALL ON <obj> TO <x> donne tous les privilèges à x SQL> GRANT <priv> ON <obj> TO PUBLIC donne droit à tout le monde SQL> CREATE SYNONYM <tab1> FOR <u>.<tab> crée un synonyme de nom tab1 pour la table tab créée par l’tilisateur u. SQL> REVOKE <privilège> ON <objet> FROM <utilisateur_x> révocation des droits de manière identique au GRANT Transactions – Début d’une transaction : au début d’un session, juste après la fin d’une transaction, – Fin d’une transaction : – par validation COMMIT : les modifications deviennent effectives (visibles des autres utilisateur) – par annulation ROLLBACK : les modification sont annulées – Par défaut, une transaction peut être validée ou non implicitement (vérifier le mode autocommit : SHOW AUTOCOMMIT, le modifier par SET AUTOCOMMIT [ON|OFF]) – Isolation des transactions : par défaut, les modifications effectuées par une transaction ne sont connues des autres transaction qu’une fois la validation effectuée – Des erreurs (comme une division par 0 ou une violation de contrainte) peuvent aussi lancer un rollback implicite. Quelques tables de système – Table contenant la description des tables (colonnes) auxquelles vous avez accès : ALL_TABLES (owner, table_name,...) ALL_TAB_COLUMNS (owner, table_name, column_name, data_type, nullable,...) – Table contenant la description des tables, des vues, des contraintes et des colonnes que vous avez créées : USER_TABLES (table_name,...) USER_TAB_COLUMNS (table_name, column_name, data_type, nullable,...) USER_CONSTRAINTS(....) USER_CONSTRAINTS_COLUMNS(....) USER_VIEWS_COLUMNS(....) – Table contenant tous les utilisateurs de la base de données : ALL_USERS (user_name, user_id, created) – Table contenant toutes les tables (colonnes) sur lesquelles vous avez des privilèges : TABLE_PRIVILEGES (grantee, owner, table_name, grantor, select_priv, insert_priv, delete_priv, update_priv, alter_priv, created,...) COLUMN_PRIVILEGES (grantee, owner, table_name, column_name, grantor, update_priv, created,...) – Table contenant toutes les tables (colonnes) systèmes : DICTIONARY (table_name, comments) DICT_COLUMNS (table_name, column_name, comments)