Vous êtes sur la page 1sur 4

TP3 : ADMINISTRATION DE BASE DE DONNEES LP : DSIC (S6 :

2021/2022)
Requêtes SQL avancées
PAR MR : I.CHANA
- L’utilitaire SQLLOADER
- Transaction et gestion de concurrences.

NB : Rendre un Compte Rendu à la fin de la séance


Partie I – L’outils SQLLOADER

L’Utilitaire SQL Loader permet de charger des données provenant d’autres sources de données dans Oracle. Par exemple,
si vous avez une table dans FoxPro, ACCESS ou SYBASE ou de toute autre base de données de tiers, vous pouvez
utiliser SQL Loader pour charger les données dans les tables Oracle. SQL Loader va seulement lire les données à partir
de fichiers plats. Donc, si vous voulez charger les données à partir de FoxPro ou de toute autre base de données ou si vous
avez un fichier de données à insérer, vous devez d'abord convertir ces données en format fichier plat dont les champs sont
délimités par un caractère ou fichier plat de format dont les champs on une longueur fixe et connue, puis utilisez SQL
Loader pour charger les données dans Oracle.

Voici la procédure pour charger les données de base de données tierce dans Oracle en utilisant SQL Loader.

A- Convertir les données dans un fichier plat utilisant la commande de base de données tiers .
B- Créer la structure de la table dans la base de données Oracle en utilisant les types de données appropriés
C- Écrire un fichier de contrôle, décrivant comment interpréter le fichier plat et les options pour charger les données.
D- Exécuter utilitaire SQL Loader spécifiant le fichier de commande dans l'argument de ligne de commande

Pour mieux comprendre ces étapes, prenons le cas suivant.

Supposant que nous avons dans MS ACCES la table ARTISTE, Cette table contient plus de 4000 lignes

Et ayant la structure suivante

ID INTEGER
NOM TEXT(50)

Question : Comment faire pour migrer ces données de MS-ACCES à une table ayant le même nom ARTISTE dans
oracle.

Solution : Utilisation de SQLLOADER en Appliquer la procédure ci-dessus, et ce comme suit:

A- Générer un fichier .csv à partir d’une requête SQL ou importer les données de la tables dans un fichier .csv dans le
champs son délimitées par un caractères ( ‘,’ ou ‘;’ ou bien ‘ |’ ) ; ( ce point est déjà fait par le prof voir le fichier
résultat (data_artist.csv)
B- Se connecter au schéma scott (ou autre) dans ORACLE et créer la table ARTISTE par la commande suivante :
CREATE TABLE ARTIST
(
ID INT (38) NOT NULL,
NOM VARCHAR (30) NOT NULL
);
1/4
C- Préparer le fichier de contrôle donnes_art.ctl qui contient les lignes suivantes

1- LOAD DATA
2- INFILE 'data_artist.csv'
3- BADFILE 'mal_format.bad'
4- TRUNCATE
5- INTO TABLE ARTISTE
6- FIELDS TERMINATED BY ';' TRAILING NULLCOLS
7- (ID, NOM)

Notes: (Ne pas écrire les numéros de ligne, ils sont destinés à des fins d'explication)
1- La déclaration de LOAD DATA est nécessaire au début du fichier de contrôle.
2- L'option INFILE spécifie où le fichier d'entrée est situé
3- Spécification BADFILE est facultative. Si vous le spécifiez, les mauvais données (données mal formatées)
trouvés pendant le chargement seront stockés dans ce fichier.
4- Vous pouvez utiliser n’ importe quelle option de chargement suivante
- TRUNCATE: fait un TRUNCATE à la table puis charge les nouvelles lignes.
- INSERT: Charge seulement si la table cible est vide
- APPEND: les lignes de charge si la table cible est vide ou non.
- REPLACE: supprimer toutes les lignes existantes dans la table avant de la charger.
5- INTO TABLE, est obligatoire en Spécifiant la table cible
6- Cette ligne indique la façon dont les champs sont séparés dans le fichier d'entrée. Dans notre cas, les champs
sont séparés par des " ;" donc nous avons spécifié " ;" comme délimiteur entre des champs. Vous pouvez
remplacer ce caractère par n’importe quel caractère pour délimiter les champs. Les délimiteurs les plus
utilisés sont virgule outre que le point-virgule" ;" on trouve la virgule "," , les deux points ":", le pipe "|",
etc.
- NULLCOLS signifie que si la dernière colonne est nulle alors traiter cette valeur comme nulle, sinon, SQL
LOADER traitera cette ligne comme mauvaise et la dirigera vers le fichier ‘dad’
7- Dans cette ligne spécifiez les colonnes de la table cible.
D- Lancer le SQLLOADER à l’aide de la commande suivante :
- sqlldr userid=scott/tiger control=control_artist.txt rows=10 errors=500
NB : Le fichier control_artist.txt vous sera communiqué par le professeur.
Questions : 1- changer la valeur de rows. Qu’est ce que vous constater ?
2- changer la valeur de errors. Qu’est ce que vous constater ?
Partie II) Transaction et gestion de concurrences.
Une transaction est une suite d’instruction SQL qui se termine par un commit (validation) ou un
Rollback (annulation). Lorsqu’il y a plusieurs transactions concernant les mêmes objets ou
enregistrements on parle des accès concurrentiels qui nécessitent une gestion de verrouillage pour

2/4
éviter l’incohérence et éviter aussi le ralentissement des performances et l’inter-blocage. Le SGBD
Oracle offre de plusieurs options de gestion de transaction et de la concurrence.
1- Les Transactions READ ONLY et READ WRITE
1.1 La transaction READ ONLY
Ci-dessous la caractéristique de cette transaction :
- La transaction devient en lecture seule (pas d’INSERT, UPDATE, DELETE)
- Garantit la cohérence en lecture pour toute la transaction.
- Cette transaction voit seulement les modifications de la base effectuées avant son début
- Utile pour des transactions qui font beaucoup de lectures successives sur des objets modifiés
simultanément par d’autres utilisateurs.
- Pour activer cette option on lance la commande suivante : SET TRANSACTION READ ONLY
1.2 La transaction READ WRITE
Cette transaction est l’option par défaut d’oracle. Ci-dessous ces caractéristiques La transaction devient en
lecture et écriture possibilité d’INSERT, UPDATE, DELETE.
- La lecture dans cette transaction non reproductible car cette transaction voit les autres
modifications effectuées par les autres utilisateurs.
- Utile pour les bases de données ou il y a très peu de transactions.
- Pour activer cette option on lance la commande suivante : SET TRANSACTION READ WRITE

2- Pratiquer les deux Options de transactions :


Avant de commencer, je vous invite à ouvrir deux sessions S1 et S2 en se connectant au schéma HR:
2.1 Tache 1 : COMMIT et ROLLBACK.
Dans S1 et S2 :
a- Écrire la requête qui “Donne le nom et la date d’embauche et le salaire des Employés ayant
l’id entre 102 et 110” sur la table EMPLOYEES.
b- Est-ce que vous obtenez la même chose dans les deux sessions ?

Dans S1
c- “Modifiez le salaire de l’employee_id= 104 (son nouveau salaire est 6666)
Dans S1 et S2 :
d- Écrire la requête qui “Donne le nom et la date d’embauche et le salaire des Employés ayant l’id
entre 102 et 110” sur la table EMPLOYEES.
e- Est-ce que vous obtenez la même chose dans les deux sessions ?
Dans S1
f- Faites un commit(ou un rollback) pour valider( ou annuler) la mise à jour

3/4
Dans S1 et S2 :
g- Écrire la requête qui “Donne le nom et la date d’embauche et le salaire des Employés ayant l’id
entre 102 et 110” sur la table EMPLOYEES.
h- Est-ce que vous obtenez la même chose dans les deux sessions ?

2.2 Tache 2 : READ ONLY


Dans S1
vous exécutez la transaction en mode lecture seule ( READ ONLY) en consultant la ligne de
l’employee_id=105 comme suit :
SQL>SET TRANSACTION READ ONLY
SQL> select * from employees where employee_id=105
a- Quel est le salaire de cet employé ?
b- Laisser la transaction ouverte ( et bien sur la session aussi ouverte)!
Dans S2,
c- réaliser une transaction qui faite une MAJ de salaire de l’employee_id=105 à 33333
update employees set salary =33333 where employee_id=105 ;
commit ;
d- Quel est le nouveau salaire de employee_id=105 ?
Dans S1
e- Est ce que l’utilisateur dans S1 va voir ce changement ? (consulter la table EMPLOYEES à partir de
S1)
f- Terminer la transaction dans S1 (commit ;), puis visualiser de nouveau le salaire de
employee_id=105, commenter ?
2.3 Tache 3 : READ WRITE
Refaire les mêmes étapes (requêtes) que dans la tache 1 en précisant le mode READ WRITE dans S1.
Quelle est la différence ?
2.4 Tache 4 : Atteinte mortelle ou interblocage (DEADLOCK)
On dit qu’il y a un inter blocage si les transactions qui sont en cours sont interdépendantes
Exemple : supposant qu’on a 3 transactions T1, T2 et T3 et que T1 attend la fin de T2 et T2 attend la fin
de T3 et T3 attend la fin de T1, cette situation mène à un inter blocage

T2
T3
T1

a- Ouvrir au moins 3 sessions (S1, S2, S3) sur le schéma HR et lancer 3 transactions en situation d’inter-
blocage(DEADLOCK)
b- Qu’a fait oracle pour pallier à cet inter-blocage ?

4/4

Vous aimerez peut-être aussi