Académique Documents
Professionnel Documents
Culture Documents
2021/2022)
Requêtes SQL avancées
PAR MR : I.CHANA
- L’utilitaire SQLLOADER
- Transaction et gestion de concurrences.
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
Supposant que nous avons dans MS ACCES la table ARTISTE, Cette table contient plus de 4000 lignes
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.
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
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 ?
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