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)