Académique Documents
Professionnel Documents
Culture Documents
Objectifs de l'atelier :
A la fin de cet atelier, l’étudiant doit être capable de :
Enoncé :
NOM VARCHAR2(50)
REGION VARCHAR2(5)
DATE_COM DATE
CODE_CLI VARCHAR2(3)
DATE_LIV DATE
Dans la table commandes les lignes seront insérées sans valeur pour DATE_LIV, car cette
colonne sera mise à jour lorsque la commande sera satisfaite. Connectez-vous en tant que
system/manager et créez les tables. Utilisez le tablespace USERS, vous pouvez utilisez es
paramètres de stockage par défaut.
code_cli varchar2(3),
Page 1|9
Atelier Administration Bases de Données
nom_cli varchar2(50),
region varchar2(10))
tablespace USERS;
id_com number(3),
date_com date,
code_cli varchar2(3),
2. Exécutez le script ins_cord.sql (fourni par votre enseignant) pour insérer des lignes
dans les tables (créez le dossier c:\dba et y placez tous les fichiers de script qui
vous ont été fournis):
SQL> start c:\dba\ins_cord.sql
Ou bien
SQL> @c:\dba\ins_cord.sql
3. Recherchez les fichiers et les blocs contenant les lignes de la table commandes
SQL> select file_id, block_id, blocks
from dba_extents
where owner='SYSTEM'
and segment_name='COMMANDES'
and segment_type='TABLE';
from dba_extents
where segment_name='COMMANDES'
and owner='SYSTEM';
5. Manuellement, allouez un extent avec une taille par défaut à la table Commandes
et vérifiez que l’opération a abouti.
SQL> alter table commandes allocate extent;
from dba_extents
where segment_name='COMMANDES'
Page 2|9
Atelier Administration Bases de Données
and owner='SYSTEM';
cascade constraints;
on clients (NOM_CLI)
tablespace INDX01;
on clients(region)
tablespace INDX01;
10. Déplacez l’index CLT_REGION_IDX dans un autre tablespace. (L’index peut être
reconstruit en spécifiant un autre tablespace) :
SQL> alter index clt_region_idx REBUILD tablespace DATA02;
11. Notez les fichiers et les blocks utilisés par les extents par l’index CLT_REGION_IDX
(utilisez la vue dba_extents) :
SQL> select file_id, block_id, blocks
from dba_extents
where segment_name='CLT_REGION_IDX'
and owner='SYSTEM';
Page 3|9
Atelier Administration Bases de Données
from dba_extents
where segment_name='CLT_REGION_IDX'
and owner='SYSTEM';
Le nouvel index ne réutilise pas le même espace. Ceci car le serveur Oracle construit un
index temporaire, supprime l’ancien et renomme l’index temporaire.
13. Toujours sous l’utilisateur SYSTEM, exécuter le script c:\DBA\numbers.sql pour créer la
table Numbers et l’alimenter.
SQL>start c:\DBA\numbers.sql
14. Interrogez la table Numbers pour déterminer le nombre de valeurs distinctes dans les deux
colonnes de la table.
SQL> select count(distinct NO) NO,
count(distinct OE) OE
from numbers;
15. Créez les indexes B*Tree Numb_OE_IDX et NUMB_NO_IDX, respectivement sur les
colonnes OE et NO de la table Numbers. Placez ces indexes dans le tablespace
INDX01.Vérifiez la taille totale des indexes et écrivez ci-dessous le nombre de blocs :
SQL> create index numb_oe_idx
on numbers(oe)
tablespace INDX01;
from dba_segments
and segment_type='INDEX';
Page 4|9
Atelier Administration Bases de Données
NUMB_OE_IDX OE …………………
NUMB_NO_IDX NO …………………
16. Après avoir enregistré les blocs ci-dessus, vous devez supprimer les indexes
numb_oe_idx et numb_no_idx. Créez les index bitmap numb_oe_idx et numb_no_idx,
respectivement sur les colonnes OE et NO de la table Numbers. Placez les dans le
tablespace INDX01.Exécutez, de nouveau, l’interrogation sur DBA_EXTENTS pour
vérifier le nombre total de blocs alloués aux extents. Vérifiez la taille totale des indexes
et écrivez ci-dessous le nombre de blocs :
NUMB_OE_IDX OE …………………
NUMB_NO_IDX NO …………………
from dba_segments
and segment_type='INDEX';
Que pouvez-vous conclure de la relation entre la cardinalité et la taille des deux indexes ?
Réponse :
Les résultats révèlent que les indexes bitmap et B*tree sont compacts, respectivement pour
une colonne de faible cardinalité et pour une colonne de forte cardinalité.
Page 5|9
Atelier Administration Bases de Données
from dba_constraints
from dba_indexes
where index_name in
(select constraint_name
from dba_constraints
and owner='SYSTEM'
19. Insérez deux lignes dans la table produit avec les valeurs suivantes :
Code_prod Description prix
La contrainte ne peut pas être activée car il y a des lignes qui la violent
21. Assurez-vous que les lignes ajoutées désormais à la table ne violeront plus la contrainte
prod_uk (Utilisez l'option ENABLE NOVALIDATE), l'option
NOVALIDATE n'exigent pas que les lignes existantes respectent la contrainte, mais
les nouelles lignes qui seront ajoutées devront respecter la contrainte)
SQL> alter table produits enable NOVALIDATE constraint prod_uk;
from dba_constraints
23. Testez la contrainte PROD_UK en ajoutant une ligne avec les valeurs suivante :
CODE_PROD : 100960
DESCRIPTION : Bicyclette Jaune
PRIX : 200
SQL> insert into produits values (100960,'Bicyclette Jaune',200);
24. Suivez les étapes nécessaires à l’identification des violations de la contrainte prod_uk de
la table PRODUITS ; modifiez le cas échéant, les codes de produits et assurez-vous que les
données existantes, ainsi que les nouvelles ne violent pas la contrainte. (Supposez que la
table contient plusieurs milliers de lignes et il serait trop long de faire ça manuellement) On
va suivre alors les étapes suivantes :
Page 7|9
Atelier Administration Bases de Données
c. Utilisez les ROWID dans la table EXCEPTIONS pour énumérer les lignes de la table
produits qui violent la contrainte :
SQL> select rowid, code_prod, description
from produits
from exceptions
where table_name='PRODUITS');
set code_prod='100961'
from exceptions
where table_name='PRODUITS');
e. Activez la contrainte :
SQL> truncate table exceptions;
25. Insérez dans la table commandes une commande avec un code client inexistant :
SQL> insert into commandes values (123,'10/10/2006','C01',NULL);
ERREUR à la ligne 1 :
ORA-02291: violation de contrainte d'intégrité (SYSTEM.COM_CC_FK) - clé parent
Introuvable
Session modifiée.
Page 8|9
Atelier Administration Bases de Données
27. Insérez dans la table commandes une commande avec un code client inexistant, puis
insérer ce client, enfin validez :
SQL> insert into commandes values (123,'10/10/2006','C01',NULL);
SQL> COMMIT;
ERREUR à la ligne 1 :
ORA-02266: les clés primaires/uniques de la table sont référencées par des clés étrangères
Page 9|9