Académique Documents
Professionnel Documents
Culture Documents
systmes dinformation
UFR AES Universit Montpellier I (2006/2007)
Par Javier GIL QUIJANO (javiergquijano@gmail.com)
Retour la page principale
2. Toute donne dpende fonctionnellement delle-mme : Ceci est not par une * dans la
matrice de dpendance fonctionnelle
3. Les constantes ne dpendent pas fonctionnellement dautres donnes : Les constantes ne
sont pas le but daucune dpendance fonctionnelle
4. Toutes les donnes ( lexception des constantes et des identifiants) doivent tre le but
dune dpendance fonctionnelle : La matrice de dpendance fonctionnelle ne doit pas faire
apparatre des lignes sans 1 ( lexception des lignes contenant de constantes et des
identifiants).
5. Toutes les donnes ne doivent dpendre fonctionnellement que dUNE et SEULEMENT
UNE donne : Dans chaque ligne de la matrice ne doit avoir quun 1. Si une donne est le
but de plusieurs dpendances fonctionnelles, on choisit une des dpendances et on limine
les autres.
6. Si lon arrive pas a placer des dpendances fonctionnelles dans toutes les lignes, mme
aprs lajout de nouveaux identifiants, il existe deux possibilits : soit la donne appartient
une RELATION, soit cette donne nest pas pertinente et il faut donc lliminer de notre
modle.
Code de la boutique
Code de l'auteur
Code de l'diteur
Code du livre
2. Les donnes 13 16 (voir figure xx) ne sont pas le but daucune dpendance
fonctionnelle car elles ne dcrivent pas des entits (client ou exemplaire) mais les relations
emprunter et rendre. Ces donnes feront partie des donnes des Associations rendre et
emprunter dans le schma Entit/Association.
3. Quant la donne nom du club (ligne 2) : dans lnonc il tait prcis quil nexiste
quun club, pour cette raison toutes les donnes qui dcrivent le club, notamment son nom
sont en quelque sorte des constantes. Il sapplique donc la rgle 3. Cette constante
diffrence des constantes 18 20 ne sert pas dans le calcul daucune autre information,
elle na aucune utilit directe dans notre systme. Pour cette raison, on dcide de
lliminer du systme dinformation.
4. La date de rsiliation (donne 9) ne dpend pas dune autre. Elle nexiste que lors quun
client est limin du systme, de lors elle ne doit pas faire partie du systme.
A chacun des identifiants on peut associer une entit qui contient les donnes qui dpendent
fonctionnellement de cet identifiant. Ces entits sont prsentes dans la figure 1 :
Travaux Pratiques
Gestion des transactions dans Oracle
Procdure de connexion Oracle
Doc. technique Oracle
Isolation des transactions dans Oracle
Stockage interne dans Oracle
Partie I : Transactions et concurrence
Dans cette partie, on veut tudier le comportement d'Oracle en cas d'accs concurrents
la mme ressource. Pour cela on va simuler l'excution concurrente de programmes
l'aide du petit ensemble de lectures/critures.
Crer une table Clients et un compteur par les commandes suivantes:
CREATE TABLE C (
NB
NOM
varchar2(20),
PRENOM
varchar2(20),
TYPE
varchar2(10)
)
/
CREATE SEQUENCE COMPTEUR
INCREMENT BY 1
START WITH 1
NOCYCLE
/
Insrer dans la table des clients le contenu de la table B avec de nouveau NB obtenus par le
compteur. Ajouter un attribut cave a la table C. Initialiser cet attribut pour tous les clients en
fonction de leur type (petit=50, moyen=100, gros=500). Crer 3 fichiers, nomms
stock.sql, livraison.sql et conso.sql
stock.sql
livraison.sql
PROMPT 'Un achat de 120 bouteilles est effectu par Cesar'
UPDATE C SET cave = cave + 120 WHERE nom = 'Cesar';
PROMPT 'Nouveau stock de Cesar';
SELECT cave FROM C where nom = 'Cesar';
conso.sql
PROMPT 'Cesar retire 10 bouteilles de son stock';
UPDATE C SET cave = cave - 10 WHERE
nom = 'Cesar';
Ouvrir deux fentres SQLPLUS. Chaque session est considre par ORACLE comme un
utilisateur, et on a donc 2 utilisateurs, nomms 1 et 2, en situation de concurrence. Dans tout
ce qui suit, on note INSTRi l'excution de l'instruction INSTR par l'utilisateur i. Par exemple
LIVRAISON1 correspond l'excution du fichier livraison dans la premire fentre par
la commande @livraison. On note de mme ROLi et COMi l'excution des commandes
rollback; et commit; dans la fentre i.
ORACLE pratique une verrouillage deux phases assez particulier. L'objectif est d'essayer
de comprendre quel est ce type de verrouillage. Il faut savoir que par dfaut, Oracle travail
en degr d'isolation 1 (READ COMMITTED).
Excuter les squences d'instruction dcrites ci-dessous. Qu'observez-vous ?
expliquez.
L'utilisateur 1 (Cesar) fait un retrait de bouteilles, alors que son cave est alimete par
un nouvel achat par son sommelier (utilisateur 2). Un blocage est apparu. Pourquoi ?
COM1, COM2, stock1, stock2, conso1 , stock2, livraison2, stock1,COM1, COM2.
Tester les excutions prcdentes en spcifiant le mode suivant aprs chaque commit :
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE. Comparer et expliquez
comment Oracle verrouille les donnes.
Si vous avez compris comment fonctionne le verrouillage Oracle, proposez une execution
concurrente de deux transactions de votre choix qui soit non serialisable et accepte par
Oracle. Comment faire pour que Oracle ne laisse pas passer ce genre d'executions ?
Calculer le nombre de blocs de donnes occups par cette table et le nombre de n-uplets
par bloc. Les commandes suivantes vous donnent des indications sur la position physique de
chaque n-uplet de la table C:
select DBMS_ROWID.ROWID_TO_RESTRICTED (rowid,0) from c
/
select DBMS_ROWID.ROWID_RELATIVE_FNO(ROWID) || '.' ||
DBMS_ROWID.ROWID_BLOCK_NUMBER(RowID) from c
/
Optimisation :
Penser rgler les paramtres cran : set pagesize 60 et set linesize 200
Le but est de voir le plan d'excution choisi par le SGBD. La prise en compte d'index peut
amliorer le cot d'une excution. Un index est intressant partir du moment ou il est
slectif, c.a.d. qu'une restriction du type att = val ne renvoie que trs peu d'attribut (e.g.
1%). De plus, il n'est utile que quand la relation index est suffisamment volumineuse (>
quelques pages). Trouver un scnario bas sur une slection par index sur la plus grosse
table (qu'on grossira artificiellement si ncessaire). Ce scnario doit vous permettre de
montrer (1) l'intrt de l'index pour un attribut trs slectif, (2) l'handicap de l'index pour
un attribut peu slectif et (3) le surcot en mise jour (ou insertions) de ces index.
Jouer sur changement du mode d'optimisation d'oracle (voir doc en ligne) par la commande
alter session set optimizer_mode = xxxxxx
imbrication avec in, par imbrication avec exists. Regarder, expliquer et comparer les plans
d'excutions gnrs.
A1 : Connexion Oracle
o LOGNAME est votre compte oracle et vaut de bda60 bda70 selon votre station,
PASSWORD vaut bda pour tout le monde.
Exemple :
sqlplus bda65/bda@infres1/orcl11
A2 : Memento SQL*PLUS
save filename.sql
/* sauve le contenu du buffer dans un fichier de nom
filename.sql */
get filename.sql
/* charge le buffer avec le contenu du fichier de nom
filename.sql */
start filename
/* charge le buffer et lance l'excution du fichier
script sql */
run
/* lance l'excution du contenu du buffer */
spool filename.txt
/* copie la sortie cran sur le fichier filename.txt */
spool off
/* suspend l'opration prcdente */
help commande
/* pour obtenir de l'aide sur la commande donne en
argument */
Variables d'environnement
all_objects
/* relation donnant tous les objets accessibles */
user_objects
/* relation donnant les seuls objets du USER */
obj
/* synonyme de la prcdente ..*/
user_sys_privs
/* relation donnant les privilges systme du USER*/
user_tab_privs
/* relation donnant les privilges sur les objets
accessiles*/