I. Présentation : Soit la base de données CIRQUE(*)

Transcription

I. Présentation : Soit la base de données CIRQUE(*)
Université du Havre, Licence Pro DA2I, ABD, TP1, 15/11/2007, Enseignants : Nakechbandi M,
Thème : Architecture centralisée et Accès concurrentiel, Transactions, Comptes utilisateurs, Privilèges
I. Présentation :
Soit la base de données CIRQUE(*) dont le schéma conceptuel :
PERSONNEL _CIRQUE (NOM, ROLE) ;
NUMERO_CIRQUE (TITRE, NATURE, RESPONSABLE) ;
ACCESSOIRE (NOM, COULEUR, VOLUME, RATELIER, CAMION) ;
UTILISATION (TITRE, UTILISATEUR, ACCESSOIRE) ;
dont un échantillonnage est donné ci-dessous
PERSONNEL
NOM(40)
ROLE(20)
Clovis
Reine
Louche
…
Jongleur
Ecuyer
Clown
…
NUMERO
TITRE(30)
NATURE(20)
Les Zoupalas
Le coche infernal
…
Jonglerie
Equitation
…
ACCESSOIRE
NOM(30)
Ballon
Barre
Fouet
…
UTILISATION
TITRE(30)
Les Zoupalas
Les Zoupalas
Les Zoupalas
…
RESPONSABLE(20)
Clovis
Reine
…
COULEUR(10)
VOLUME
RATELIER CAMION
Rouge
Blanc
Marron
0.3
0.6
0.2
15
19
11
5
5
3
UTILISATEUR(20) ACCESSOIRE(30)
Dolores
Hebert
Dolores
Ballon
Ballon
Barre
Dans la suite, vous aller travailler par Binome sur deux machine( ORD1, ORD2). On suppose que le logiciel
ORACLE est installer sur chacun des deux machines. ORD1 fonctionne comme serveur de BD oracle,
l’autre ORD2 fonctionne comme client oracle. Sur ORD1 on dispose deux comptes utilisateurs oracle :
CLI1, CLI2.
CLI1 accède à Oracle directement à partir de ORD1, CLI2, accède à oracle à partir d’un client oracle sur
ORD2.
Sur ORD1 le serveur de BD oracle chacun des deux utilisateurs CLI1, CLI2 va créer son propre BD cirque
(le premier par accès direct et l’autre par accès distant).
II. Travail à faire (par machine : étudiant ou binôme)
A. Création des comptes oracle et configuration du client oracle
A.1 Création des utilisateurs. Ce travail est à faire uniquement sur la machine ORD1.
Indication : On peut exécuter le scripte SQL :
(*)
Inspiré de l’ouvragede E. Pichat, R. Bodin, "Ingénierie des données", Masson, 1990
1
create user CLI1 identified by CLI1$DA2I;
GRANT CONNECT, RESOURCE TO CLI1;
Create user CLI2 identified by CLI2$DA2I;
grant connect,resource to CLI2;
A.2 Configuration du client pour un serveur ORACLE
Coté serveur : Machine ORD1 (Le fichier listener.ora)
Exemple
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))
)
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = hera.iut.univ-lehavre.fr)
(PORT = 1521))
)
)
)
SID_LIST_LISTENER =
(SID_LIST =
Nom de la machine serveur
(SID_DESC =
(SID_NAME = PLSExtProc)
(ORACLE_HOME = /oracle/ora92)
Nom de la base serveur
(PROGRAM = extproc)
)
(SID_DESC =
(GLOBAL_DBNAME = ora1)
(ORACLE_HOME = /oracle/ora92)
(SID_NAME = ora1)
)
)
Coté client : Machine ORD2 (Le fichier tnsname.ora )
Exemple
PP =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.86)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = ora1)
Ip du serveur à distace
)
)
Nom d’accès à distance
Nom de la base distante
Noter dans votre compte-rendu les difficultés rencontrées pour configuration client/serveur.
B. Ce travail est à faire par CLI1et CLI2.
B1. Créer la structure des quatre tables de la base en intégrant les contraintes d’intégrité nécessaires .
Indication : Utiliser le scripte ci-dessous qui est disponible sur le URL http://tamlehavre.free.fr/lp_da2i
create table personnel (nom varchar(40),role varchar(20),
constraint personnel_pri primary key(nom));
create table numero (titre varchar(30),nature varchar(20),responsable varchar(40),
constraint numero_pri primary key(titre),
constraint numero_etr foreign key(responsable) references personnel(nom));
2
create table accessoire (nom varchar(30),couleur varchar(10), volume number(4,1),
ratelier number(2),camion number(1),
constraint accessoire_pri primary key(nom));
create table utilisation (titre varchar(30),utilisateur varchar(40),
accessoire varchar(30),
constraint utilisation_pri primary key(titre, utilisateur, accessoire),
constraint utilisation_et1 foreign key(titre) references numero(titre),
constraint utilisation_et2 foreign key(utilisateur) references personnel(nom),
constraint utilisation_et3 foreign key(accessoire) references accessoire(nom));
B2. Peupler les tables (voire annexe2) :
- CLI1 en utilisant le scripte insert_données_cli1.sql
(à télécharger : http://tamlehavre.free.fr/lp_da2i)
- CLI2 en utilisant le scripte insert_données_cli1.sq2
C. Transactions (voir annexe 1)
1. Se connecter au même compte (le vôtre !) depuis une deuxième fenêtre SQL*Plus (ne pas quitter la
première session).
2. Dans l’une des deux fenêtres, créer la table TRANSACTION (TID, LIB) où la clé primaire TID est
un nombre à deux chiffres et LIB une chaîne de 20 caractères maximum. Vérifier en consultant la
vue système TABS depuis les deux fenêtres que la table est bien créée.
3. Dans chacune des deux fenêtres, insérer un tuple(enregistrement) différent dans la table
TRANSACTION. Consulter la table depuis chaque fenêtre. Que constate-t-on ?
4. Annuler l’une des insertions précédentes à l’aide de la commande rollback. Consulter la table
depuis chaque fenêtre. Que se passe-t-il ? Faire de même dans l’autre fenêtre. Consulter la table
depuis chaque fenêtre. Que se passe-t-il ?
5. Recommencer les insertions d’un tuple différent depuis chaque fenêtre, puis valider l’une des
insertions à l’aide de la commande commit. Consulter la table depuis chaque fenêtre. Valider dans
l’autre fenêtre. Consulter la table depuis chaque fenêtre. Conclusion ?
6. Dans chacune des deux fenêtres, insérer un tuple identique, cette fois, dans la table TRANSACTION.
Que se passe-t-il ?
7. Annuler l’insertion dans la première fenêtre. Que se produit-il dans la deuxième ?
8. Essayer de réinsérer le même tuple depuis la première fenêtre. Que se passe-t-il ?
9. Valider l’insertion dans la deuxième fenêtre. Que se produit-il dans la première ?
10. Insérer un nouveau tuple depuis une des deux fenêtres et quitter SQL*Plus. Consulter la table depuis
l’autre fenêtre. Conclusion ?
11. Insérer un nouveau tuple et quitter SQL*Plus. Ouvrir une nouvelle session. La dernière transaction
a-t-elle été validée ?
12. Insérer deux nouveaux tuples, puis émettre un rollback. Que sont devenus les deux tuples insérés ?
13. Conclusion ? Comment est validée une transaction ?
D. Accès aux données d’un autre utilisateur.
D1. CLI1 souhaite ajouter à ses tables toutes les données (les lignes) de CLI2.
En respectant les remarques ci-dessous, l’ajout peut se faire à l’aide de requête du type :
insert into personnel select * from CLI2.personnel;
...
3
Remarques :
- L’Accès de CLI1 aux tables de CLI2 ne peut se faire que par une autorisation de CLI2 :
grant select on personnel to CLI1 ;
...
- Les données de CLI2 ne sont pas visible par CLI1 que aprèsune validation par la commande
commit ;
D2. Idem que la question précédente pour utilisateur CLI2
insert into personnel select * from CLI1.personnel;
...
Pour cette partie de copiage vous aller certainement violer une contrainte d’intégrité (doublon dans la table
personnel). Noter dans votre compte rendu comment vous allez surmonter ce problème.
E. Vues (dans cet exercice il n’y a pas d’interférence d’accès entre cli1 et cli2).
E.1 Modification de données à partir d’une vue.
1. Créer la vue ACOUL (NOM, COULEUR) à partir de la table ACCESSOIRE. Vérifier son contenu.
2. À travers la vue ACOUL, modifier la couleur du « Fouet » en « Noir ». Consulter le contenu de la
vue ACOUL et de la table ACCESSOIRE.
3. Créer la vue RESP (TITRE, RESPONSABLE, ROLE) à partir des tables NUMERO et PERSONNEL.
Vérifier son contenu. Quel est l’intérêt de définir cette vue ?
4. Insérer un tuple dans la vue RESP. Que se passe-t-il ?
E.2/ Vues et catalogue du système.
1. À partir de la vue système USER_TAB_COLUMNS, afficher les attributs de la table PERSONNEL.
2. À partir de la vue système USER_TAB_COLUMNS, afficher le nom des tables et des vues qui ont
pour attribut TITRE.
3. À partir de la vue système ALL_TABLES, afficher le nom des tables dont vous êtes propriétaire
(OWNER).
4. Créer la vue MES_TABLES à partir du résultat de la requête précédente. Vérifier son contenu.
F. Privilèges
F1. Travailler par groupe de deux ordinateurs : vous et votre (vos voisins), se coordonner pour avancer dans
les questions.
1. Donner à vos voisins le droit de consulter votre table TRANSACTION. Consulter la-leur.
2. Insérer un tuple dans la table TRANSACTION de vos voisins. Que se passe-t-il ?
3. Donner à vos voisins le droit d’insertion dans votre table TRANSACTION. Insérer un tuple dans la leur.
F2. Travailler par groupe de trois ordinateurs : vous et vos deux voisins (se coordonner pour avancer dans
les questions).
4. Donner à vos premiers voisins le droit de consulter votre table TRANSACTION, ainsi que le droit de
transmettre ce privilège.
5. Transmettre à vos premiers voisins le privilège transmis par les seconds. Consulter la table
TRANSACTION de tous vos voisins.
6. Supprimer à vos premiers voisins le droit de consulter votre table TRANSACTION. Vos seconds voisins
peuvent-ils toujours consulter votre table ?
4
7. Supprimer à tous les autres utilisateurs le droit de consulter votre table TRANSACTION. Vos seconds
voisins peuvent-ils toujours consulter votre table ?
NB : Pour réaliser la partie à trois, utiliser la technique de la « permutation circulaire ».
G. Vu globale
1. Donner à tout le monde le droit de consulter la table transaction.
2. Créer une vue transaction_globale permettant de visualiser toutes les saisies réalisées par l’ensemble
de votre groupe (au moins 3). Vérifier
Indication : Utiliser l’opérateur union voir annexe1
Dossier à rendre :
Pour chaque question toutes les requêtes utilisées et vos remarques et commentaires à chaque fois où il y a
une nouvelle notion abordé.
Le compte rendu est à envoyer au [email protected] avec comme objet
tp1_da2i_nom1_nom2
Pour faciliter la rédaction du compte rendu, le sujet est disponible sous le URL :
http://tamlehavre.free.fr/lp_da2i
Date limite : jeudi dans deux semaines
5
Annexe1 : Complément du cours SQLPLUS-Oracle
Notion de transaction en base de données
Une transaction est un ensemble de modifications de la base qui forme un tout indivisible. Il faut effectuer ces
modifications entièrement ou pas du tout, sous peine de laisser la base dans un état incohérent. Les Systèmes de
Gestion de Bases de Données permettent aux utilisateurs de gérer leurs transactions. Ils peuvent à tout moment :
Valider la transaction en cours par la commande COMMIT. Les modifications deviennent définitives et visibles à
tous les utilisateurs.
Annuler la transaction en cours par la commande ROLLBACK. Toutes les modifications depuis le début de la
transaction sont alors défaites.
En cours de transaction, seul l'utilisateur ayant effectué les modifications les voit. Ce mécanisme est utilisé par les
systèmes de gestion de bases de données pour assurer l'intégrité de la base en cas de fin anormale d'une tâche
utilisateur : il y a automatiquement ROLLBACK des transactions non terminées.
Rappel de quelques instructions SQL utile pour ce TP :
operateur UNION :
SELECT ...
UNION
(SELECT ...
operateur MINUS :
SELECT ...
MINUS
(SELECT ...)
Quelques Vues décrivant les objets de l'utilisateur :
Memento SQL*PLUS
save filename.sql
get filename.sql
start filename
run
spool filename.txt
spool off
help commande
:
:
:
:
:
:
:
sauve le contenu du buffer dans un fichier de nom filename.sql
charge le buffer avec le contenu du fichier de nom filename.sql
charge le buffer et lance l'exécution du fichier script sql
lance l'exécution du contenu du buffer
copie la sortie écran sur le fichier filename.txt
suspend l'opération précédente
pour obtenir de l'aide sur la commande donnée en argument
Variables d'environnement (Mise en page SQLPLUS)
set long 1024
: pour voir la totalité des définitions de vues
set pagesize 20
: formate la sortie écran par blocs de 20 lignes
set pause on
: ne visualise la sortie qu'après un 2e RC - bloc par bloc set timing [on|off] : active ou désactive le chronomètre
Quelques Vues décrivant les objets de l'utilisateur : (Schéma d'information ou "méta-base")
desc[ribe] tablename : donne le schéma de la relation tablename
all_catalog
: relation donnant toutes les tables accessibles
user_catalog
: relation donnant les seules tables du USER
cat
: synonyme de la précédente ..
all_objects
: relation donnant tous les objets accessibles
user_objects
: relation donnant les seuls objets du USER
obj
: synonyme de la précédente ..
user_sys_privs
: relation donnant les privilèges système du USER
user_tab_privs
: relation donnant les privilèges sur les objets accessiles
USER_TABLES : Description des tables créées par l'utilisateur.
USER_TAB_COLUMNS : Description des colonnes de chaque table ou vue créée par l'utilisateur courant.
Chaque ligne de la vue col décrit une colonne.
USER_TAB_COMMENTS :Commentaires sur les tables et les vues créés par l'utilisateur.
USER_TAB_GRANTS_MADE : Droits sur ses objets, tables ou vues, donnés par l'utilisateur.
USER_USERS :Informations sur l'utilisateur courant.
USER_VIEWS :Texte des vues créées par l'utilisateur.
Synonymes : Les noms des vues étant assez longs, les synonymes suivants ont étés définis :
COLS : Synonyme pour USER_TAB_COLUMNS
MYPRIV : Synonyme pour USER_USERS
TABS : Synonyme pour USER_TABLES
Exemple : la requete select * from tabs; Affiche une liste des tables de l’utilisateur.
6
Annexe 2 : Les données
-- Les données du cli1
-- insertion table personnel
insert into personnel values
insert into personnel values
insert into personnel values
insert into personnel values
insert into personnel values
insert into personnel values
insert into personnel values
insert into personnel values
insert into personnel values
-- insertion table
insert into numero
insert into numero
insert into numero
insert into numero
insert into numero
insert into numero
insert into numero
numero
values
values
values
values
values
values
values
('Clovis','Jongleur');
('Reine','Ecuyer');
('Louche','Clown');
('Benard','Equilibriste');
('Bignon','Musicien');
('Bordeau','Dompteur');
('Jerry','Clown');
('Demare','Jongleur');
('Fremez', 'Musicien');
('Les Zoupalas','Jonglerie','Clovis');
('Le coche infernal','Equitation','Reine');
('Les fauves','Clownerie','Louche');
('Les Smilers','Equilibre','Benard');
('La passoire magique', 'Lion', 'Bordeau');
('Les Zozos', 'Clownerie', 'Jerry');
('Les Tartarins', 'Jonglerie', 'Demare');
-- insertion dans la table accessoire
insert into accessoire values ('Ballon','Rouge','0.3','15','5');
insert into accessoire values ('Barre','Blanc','0.6','19','5');
insert into accessoire values ('Fouet','Marron','0.2','11','3');
insert into accessoire values ('Bicyclette a elephant','Vert','0.4','27','8');
insert into accessoire values ('Trompette','Rouge','0.2','2','1');
insert into accessoire values ('Cercle magique', 'Magique', '0.2', '1', '1');
insert into accessoire values ('Boule', 'Cristal', '0.2', '88', '1');
insert into accessoire values ('Cage α Lions', 'Noir', '10.0', '0', '2');
insert into accessoire values ('Chaise longue de lions', 'Bleu', '0.9', '11', '5');
insert into accessoire values ('Peigne de Chimpanze', 'Jaune', '0.2', '23', '3');
insert into accessoire values ('Etrier', '', '', '', '');
-- insertion dans la table utilisation
insert into utilisation values ('Les Zoupalas','Dolores','Ballon');
insert into utilisation values ('Les Zoupalas','Dolores','Barre');
insert into utilisation values ('Les fauves','Jerry','Trompette');
insert into utilisation values ('Les Smilers','Benard','Cercle magique');
insert into utilisation values ('Les Smilers','Benard','Boule');
insert into utilisation values ('La passoire magique', 'Bordeau', 'Cage α Lions');
insert into utilisation values ('La passoire magique', 'Bordeau', 'Chaise longue de
lions');
insert into utilisation values ('Les Zozos', 'Jerry', 'Bicyclette a elephant');
insert into utilisation values ('Les Zozos', 'Jerry', 'Peigne de Chimpanze');
-- fin d insertion de donnees cli1
7
-- Les données du cli2
-- insertion table personnel
insert into personnel values
insert into personnel values
insert into personnel values
insert into personnel values
insert into personnel values
-- insertion table
insert into numero
insert into numero
insert into numero
insert into numero
insert into numero
numero
values
values
values
values
values
('Hebert', 'Jongleur');
('Sorel', 'Ecuyer');
('Loisel', 'Equilibriste');
('Jeanne', 'Jongleur');
('Sangtrespur', 'Dompteur');
('Les Zoupalas','Jonglerie','Hebert');
('Le coche infernal','Equitation','Sorel');
('Les fauves','Clownerie','Jeanne');
('Les Smilers','Equilibre','Benard');
('La passoire magique', 'Lion', 'Sangtrespur');
-- insertion dans la table accessoire
insert into accessoire values ('Ballon','Rouge','0.3','15','5');
insert into accessoire values ('Barre','Blanc','0.6','19','5');
insert into accessoire values ('Fouet','Marron','0.2','11','3');
insert into accessoire values ('Bicyclette a elephant','Vert','0.4','27','8');
insert into accessoire values ('Trompette','Rouge','0.2','2','1');
insert into accessoire values ('Cercle magique', 'Magique', '0.2', '1', '1');
insert into accessoire values ('Boule', 'Cristal', '0.2', '88', '1');
insert into accessoire values ('Cage Ó Lions', 'Noir', '10.0', '0', '2');
insert into accessoire values ('Chaise longue de lions', 'Bleu', '0.9', '11', '5');
insert into accessoire values ('Peigne de Chimpanze', 'Jaune', '0.2', '23', '3');
insert into accessoire values ('Etrier', '', '', '', '');
-- insertion dans la table utilisation
iinsert into utilisation values ('Les Zoupalas','Hebert','Ballon');
insert into utilisation values ('Le coche infernal','Jeanne','Bicyclette a elephant');
insert into utilisation values ('Le coche infernal','Sorel','Fouet');
insert into utilisation values ('Les Smilers','Loisel','Bicyclette a elephant');
insert into utilisation values ('Les Tartarins', 'Jeanne', 'Bicyclette a elephant');
insert into utilisation values ('Le coche infernal', 'Sangtrespur', 'Etrier');
--
fin d insertion de donnees cli2
8

Documents pareils