Vous êtes sur la page 1sur 84

SGBD ORACLE

SOMMAIRE

I- INTRODUCTION

II- MANIPULATION DES DONNEES

III- INTERACTION ENTRE SQL ET SQL*PLUS

IV- EXPRESSIONS ET FONCTIONS SQL

V- JOINTURES EXTERNES

VI- MISES EN FORME AVEC SQL*PLUS

VII- PL/SQL

VIII- ADMINISTRATION ORACLE

Pr. M. E. RIFFI Page 1


SGBD ORACLE

I- INTRODUCTION

1- Historique

Oracle est un SGBDR/OO édité par la société du même nom (Oracle Corporation -
http://www.oracle.com), leader mondial des bases de données.
En 1977 La société Oracle Corporation a été créée par Lawrence Ellison, Bob Miner, et
Ed Oates. Elle s'appelle alors Relational Software Incorporated (RSI) et commercialise un
SGBDR (ou RDBMS pour Relational Database Management System) nommé Oracle.
En 1979, le premier prototype (RDBMS - RSI1) intégrant la séparation des espaces
d'adressage entre les programmes utilisateurs et le noyau Oracle est commercialisé. Cette
version est entièrement développée en langage assembleur . La seconde version (RDBMS
- RSI2) est un portage de l'application sur d'autres plates-formes.
En 1983 la troisième version apporte des améliorations au niveau des performances et une
meilleure prise en charge du SQL. Cette version est entièrement codée en langage C. A la
même époque RSI change de raison sociale et devient Oracle.
En 1984 la première version d'Oracle (Oracle 4) est commercialisée sur les machines
IBM.
En 1985 Oracle 5 permet une utilisation client/serveur grâce au middleware SQL*Net.
En 1986 Oracle a été porté sur la plateforme 8086.
En 1988 Oracle 6 est disponible sur un grand nombre de plates-formes et apporte de
nombreuses nouvelles fonctionnalités ainsi qu'une amélioration notable des performances.
En 1991, Oracle 6.1 propose une option Parallel Server (dans un premier temps sur la
DEC VAX, puis rapidement sur de nombreuses autres plates-formes).
En 1992, Oracle 7 sort sur les plates-formes UNIX (elle ne sortira sur les plates-formes
Windows qu'à partir de 1995). Cette version permet une meilleure gestion de la mémoire,
du CPU et des entrées-sorties. La base de données est accompagnée d'outils
d'administration (SQL*DBA) permettant une exploitation plus aisée de la base.
En 1997, la version Oracle 7.3 (baptisée Oracle Universal Server) apparaît, suivie de la
version 8 offrant des capacités objet à la BD.
Oracle est écrit en langage C et est disponible sur de nombreuses plates-formes matérielles
(plus d'une centaine) dont :
o AIX (IBM)
o Solaris (Sun)
o HP/UX (Hewlett Packard)
o Windows NT (Microsoft)
Oracle depuis la version 8.0.5 est disponible sous Linux.
Oracle9i est un SGBDR/OO. Il se présente sous la forme de package regroupant
généralement trois produits :
 Oracle9i Database : le serveur de BD,
 Oracle9i Application Server : le serveur d’applications,
 Oracle9i Developer Suite : l’AGL et outils de développement

Oracle9i est disponible sur plusieurs plates-formes : Unix/Linux, Windows, VMS, …


Les licences sont généralement disponible en trois éditions :
Personnal Edition : édition mono utilisateur. Elle est préconisée pour les développeurs,
Standard Edition : édition de base utilisée pour les applications client/serveur en intranet
classique.
Entreprise Edition : édition regroupant toutes les fonctionnalités évoluées et propose
d’autres en option selon les besoins, comme :

Pr. M. E. RIFFI Page 2


SGBD ORACLE

 RAC (Real Application Cluster),


 Oracle Partitionning,
 OLAP (On Line Analytical, traitement analytique en ligne),
 Oracle Tuning Pack,
 Advanced Security, …

2- Composants et outils Oracle :


2-1- Les composants d'Oracle
Outre la BD, la solution Oracle est un véritable environnement de travail constitué de
nombreux logiciels permettant notamment une administration graphique d'Oracle, de
s'interfacer avec des produits divers et d'assistants de création de BD et de configuration
de celles-ci.
On peut classer les outils d'Oracle selon diverses catégories :
– Les outils d'administration
– Les outils de développement
– Les outils de communication
– Les outils de génie logiciel
– Les outils d'aide à la décision
2-2- Les outils d'administration d'Oracle
Oracle est fourni avec de nombreux outils permettant de simplifier l'administration de la
base de données. Parmi ces outils, les plus connus sont :
– Oracle Manager (SQL*DBA)
– NetWork Manager
– Oracle Enterprise Manager
– Import/Export : un outil permettant d'échanger des données entre deux bases
Oracle

2-3- Outils de développement d'Oracle
Oracle propose également de nombreux outils de développement permettant d'automatiser
la création d'applications s'interfaçant avec la BD. Ces outils de développement sont :
– Oracle Designer
– Oracle Developer
– SQL*Plus : une interface interactive permettant d'envoyer des requêtes SQL et
PL/SQL à la base de données. SQL*Plus permet notamment de paramétrer
l'environnement de travail (formatage des résultats, longueur d'une ligne,
nombre de lignes par page, ...)
– Oracle Developper : il s'agit d'une suite de produits destinés à la conception et
à la création d'applications client-serveur. Il est composé de 4 applications :
– Oracle Forms (anciennement SQL*Forms) : un outil permettant d'interroger la
base de données de façon graphique sans connaissances préalables du langage
SQL. SQL*Forms permet ainsi de développer des applications graphiques
(fenêtres, formulaires, ...) permettant de sélectionner, modifier et supprimer des
données dans la base.
– Oracle Reports (SQL*ReportWriter) : un outil permettant de réaliser des états
– Oracle Graphics : un outil de génération automatique de graphiques
dynamiques pour présenter graphiquement des statistiques réalisées à partir des
données de la base
– Procedure Builder : un outil permettant de développer des procédures, des
fonctions et des packages

Pr. M. E. RIFFI Page 3


SGBD ORACLE

2-4- Outils de programmation


Oracle dispose d'un grand nombre d'interfaces (API) permettant à des
programmes écrits dans divers langages de s'interfacer avec la base de données en
envoyant des requêtes SQL.
Ces interfaces (appelées pré compilateurs) forment une famille dont le nom commence par
PRO* :
– Pro*C
– Pro*Cobol
– Pro*Fortran
– Pro*Pascal
– Pro*PLI
– ...

Pr. M. E. RIFFI Page 4


SGBD ORACLE

II- MANIPULATION DE DONNEES

1-Insertion de données :
Syntaxe :
INSERT INTO [schéma].tbl_name|vue[@dblink] [(col_name1[, col_name2...])]
VALUES (expr1[, expr2...]);

Ou:

INSERT INTO [schéma].tbl_name|vue[@dblink] [(col_name1[, col_name2...])]


SELECT …

Remarque :
La sous requêtes après le SELECT … ne doit pas contenir de clause order by ou connect
by.

Exemple :
Insérer dans la table continent(code,nom), le nom Afrique avec code égale à 5 :

SQL> INSERT INTO continent


2> VALUES (5, ‘Afrique’);

2- Mise à jour de données :


Syntaxe :
Update [schéma].tbl_name|vue[@dblink] [alias] SET col_name1 ={expr1 |(SELECT
…)} [, col_name2 ={expr2 |(SELECT …)}...]
[WHERE prédicat];

Remarque :
La sous requêtes après le SELECT … peut contenir la clause order by ou connect by.

Exemple :
Changer le nom du continent 4 en Australia :

SQL> UPDATE continent


2> Set nom =‘Australia’
3> Where code =4;

3- Suppression de données :
Syntaxe :
DELETE FROM [schéma].tbl_name|vue[@dblink] [alias]
[WHERE prédicat];

Exemple :
Supprimer le continent numéro 4 :

SQL> DELETE FROM continent


2> Where code =4;

Pr. M. E. RIFFI Page 5


SGBD ORACLE

4- Lecture de données :
SELECT [DISTINCT] {*| col1 [alias][, col2 ...]}
FROM table1[, table2 …]
[WHERE condition(s)]
[GROUP BY col1[, col2…] ]
[Having prédicat]
[ORDER BY {column, expr, alias} [ASC|DESC]];

Exemples :
1) Afficher le nom, salaire et une augmentation de salaire de 15%, des employés :

SQL> SELECT nom, salaire, 1.15*(salaire)


2> FROM employes;

2) même exemple mais en utilisant des alias de colonnes :

SQL> SELECT nom "Nom employé", salaire as " Salaire employé", 1.15*(salaire)
Prévision
2> FROM employes;

3) même exemple mais en affichant le résultat sur une seule colonne, nommée
‘Employé Salaire ==>Prévision’ :

SQL> SELECT nom || ‘ ‘ || salaire || ‘ ==>


2> ‘ || 1.15*(salaire) as
3> ‘Employé Salaire ==>Prévision’
4> FROM employes;

Remarques :
– NULL représente une valeur non disponible, non affectée, inconnue ou
inapplicable.
– La valeur NULL est différente du zéro ou de l’espace.
– Les expressions arithmétiques comportant une valeur NULL sont évaluées à
NULL.
– L’opérateur || Concatène des colonnes ou chaînes de caractères avec d’autres
colonnes.

Pr. M. E. RIFFI Page 6


SGBD ORACLE

III- INTERACTION ENTRE SQL ET SQL*PLUS

1-Comparatif entre Ordres SQL et Commandes SQL*Plus

SQL SQL*Plus

Un langage Un environnement
Standard ANSI Produit propriétaire Oracle
Abréviation des mots-clés impossible Abréviation des mots-clés
possible
Les ordres agissent sur le contenu et Les commandes ne permettent
la définition des tables de la base de d'agir ni sur le contenu, ni sur la
données définition des tables.

2-Présentation de SQL*Plus

L’environnement SQL*Plus permet :


– Extraction, modification, ajout et suppression de données au moyen d’ordre SQL.
– Le formatage, le calcul, le stockage et l’impression de requête sous forme d’états.
– Création de fichiers scripts.

3- Connexion à SQL*Plus

– Depuis l’environnement Windows :

Pr. M. E. RIFFI Page 7


SGBD ORACLE

– Depuis une ligne de commande :


sqlplus [username[/password
[@database]]]

4- Commandes d’Édition SQL*Plus

– A[PPEND] text
– C[HANGE] / old / new
– C[HANGE] / text /
– CL[EAR] BUFF[ER]
– DEL
– DEL n
– DEL m n
– I[NPUT]
– I[NPUT] text
– L[IST]
– L[IST] n
– L[IST] m n
– R[UN]
– n
– n text
– 0 text

5 Commandes de Fichiers SQL*Plus

– SAVE filename
– GET filename
– START filename
– @ filename
– EDIT filename : fichier afiedt.buf
– SPOOL filename
– EXIT

Pr. M. E. RIFFI Page 8


SGBD ORACLE

IV- EXPRESSIONS ET FONCTIONS SQL

Une expression est une combinaison de variables (contenu d’une colonne), de constantes et de fonctions
au moyen d’opérateurs.
Les fonctions sont des routines prenant une valeur dépendant de leurs arguments eux-mêmes peuvent
être des expressions.
Il existe trois types d’expressions correspondant chacune à un type de données ORACLE :
– Les expressions arithmétiques.
– Les expressions sur chaînes de caractères.
– Les expressions sur les dates.
A chaque type correspondent des opérateurs et des fonctions spécifiques.
– ORACLE autorise les mélanges de types dans les expréssions et effectue les conversions
nécessaires.
– Dans une expression mélangeant dates et chaînes de caractères, les chaînes de caractères sont
converties en date.
– Dans une expression mélangeant nombres et chaînes de caractères, les chaînes de caractères
sont converties en nombre.

1- Les fonctions non typés :


NVL(exp1, exp2)
= exp1 si exp1 non NULL
= exp2 sinon

Exemple :
nom des employés en remplaçant les valeurs NULL du salaire par 0 :

Select nom, NVL(salaire,0) Salaire


From Employes;

DECODE(crit,val1, res1[, val2, res2…], def)


= res1 si crit=val1
= res2 si crit=val2
..
=def si crit  val1 Val2 ..

Exemple :
remplacer la fonction d’un employé par un titre générique :

Select nom, titre , DECODE(titre, ‘Recteur’, ‘Président’, ‘Doyen’, ‘Directeur’, ‘Chef de département’,
‘Chef’, ‘Agent’, ‘Salarié’, ‘Professeur’, ‘Prof’, ‘Autres’) "Titre Générique"
From employes;

2- Les fonctions arithmétiques :

Power (n, m) : n à la puissance m (avec m tronqué à une valeur entière).

Round (n[, d]) : arrondi n à 10-d (par défaut d=0).

Trunc (n[, d]) : tronque n à 10-d (par défaut d=0).

Pr. M. E. RIFFI Page 9


SGBD ORACLE

Ceil (n) : entier immédiatement supérieur à n.

Floor (n) : entier immédiatement inférieur à n.

3- Les fonctions trigonométriques :

Cos (n) : Cosinus de n.

Sin (n) : Sinus de n.

Cosh (n) : Cosinus hyperbolique de n.

Sinh (n) : Sinus hyperbolique de n.

Tan (n) : Tangente de n.

Tanh (n) : Tangente hyperbolique de n.

4- Les fonctions logarimétriques :

Ln (n) : Logarithme népérien de n.

Exp (n) : Exponentielle de n.

Log (m, n) : Logarithme en base m de n.

5- Autres fonctions :

Vsize (expression) : taille de l’expression en octet.

Dump (expression) : format de l’expression dans un format interne.

UID : nombre donnant l’identifiant de l’utilisateur connecté.

USER : nom de l’utilisateur ORACLE.

Exemple :
affiché le et l’identifiant de l’utilisateur connecté :

Select USER, UID


From sys.dual;

Abs(n) : valeur absolue de n.

Sign (n) : signe de n.

Mod (n, m) : reste de la division entière de n par m.

Sqrt (n) : racine carré de n (= NULL si n négatif).

Pr. M. E. RIFFI Page 10


SGBD ORACLE

Greatest(n1, n2, …) : plus grande valeur de la liste (n1, n2, …) .

Least(n1, n2, …) : plus petite valeur de la liste (n1, n2, …) .

6- Les expressions sur les chaînes de caractères :

Lenght (chaine) : longueur de la chaine.

Substr (ch, pos [,long]) : extrait de la chaîne ch une sous chaîne de longueur long, commençant à la
position pos de la chaine ch. (par défaut long = longueur de la ch – pos +1).

Instr (ch,sous_ch[, pos [,n]]) : prend comme valeur la position de (la nième occurrence de) la sous chaîne
sous_ch dans la chaîne ch, à partir de la position pos de la chaine ch, (par défaut pos = 1 et n=1),
Une valeur 0 signifie que la sous chaîne n’a pas été trouvée.
Exemple :
liste des employés dont le nom commence par R, en indiquant la position du 2éme ‘a’ dans leur titre :

Select nom, titre, Instr(titre, ‘a’, 1, 2) ‘’Positio’’


From employes
Where nom Like ‘R%’ ;

Upper (chaine) : convertit les minuscules en majuscules.

Lower (chaine) : convertit les majuscules en minuscules.

Initcap (chaine) : met la première lettre de chaine en majuscule et le reste en minuscule.

Soundex (chaine) : calcule une valeur phonétique qui peut être comparée dans un prédicat à la valeur
phonétique d’une autre chaîne.
Exemple :
liste des employés ayant un nom dont la consonance anglo-saxone se rapproche de RIFFI :

Select nom
from employes
Where Soundex(nom) = Soundex(‘RIFFI’);

Lpad(ch, long [,car]) : complète (ou tronque) la chaîne ch à la longueur long par le caractère (ou chaine de
caractères) car (par défaut car = espace), à gauche de ch.
Exemple :
liste des employés en les préfixant avec des + :

Select Lpad(nom, 10, ‘+’) "NOM" , prenom


From employes;

Rpad(ch, long [,car]) : comme Lpad mais complète ch à droite.

Ltrim(ch, car) : supprime les caractères à l’extrémité gauche de la chaîne ch tant qu’ils appartiennent à
l’ensemble de carctères ‘car’.

Pr. M. E. RIFFI Page 11


SGBD ORACLE

Exemple :
Liste des employés en supprimant le mot Autres :

Select nom, Ltrim(titre, ‘Autres’) ‘’TITRE’’


From employes;
Rtrim : analogue à Ltrim mais les caractères sont supprimés à droite de la chaîne.

Translate(ch, car_source, car_cible) : remplace chaque caractère de la chaîne ch présent dans l’ensemble
de caractères car_source par le caractère correspondant de l’ensemble car_cible.
Exemple :
Remplacer les lettres A, B et C des noms respectivement par *, $ et @

Select nom, Translate(nom, ‘ABC’, ‘*$@’) ‘’NOM 2’’


From employes;

Replace(ch1, car[,ch2]) : remplace un ensemble de caractères car de la chaine ch1, par car2. Si car2 est
vide alors les caractères car sont supprimés de ch1.
Exemple :
Remplacer la chaîne ‘CH’ par ‘ch’ dans nom de l’employé :

Select nom, Replace(nom, ‘CH’, ‘ch’) ‘’NOM 2’’


From employes;

TO_CHAR(nombre, 'format') : Convertit un nombre en une chaîne de caractères en fonction d’un format.
Structure du format :

9 Représente un chiffre
0 Force l’affichage du zéro
$ Place au début un signe dollar flottant
L Utilise le symbole monétaire local flottant
. Imprime un point décimal
, Imprime un séparateur de milliers

Exemple :
Liste des salaires des représentants :

Select TO_CHAR(salaire, ‘9990.00’) ‘’SALAIRE’’


From employes;

TO_NUMBER (ch) : convertit la chaine de caractères ch en nombre.

ASCII(ch) : permet d’obtenir le code ASCII ou EBCDIC (selon la machine) du premier caractère de la
chaîne ch.
Exemple :
Affichage du code ASCII des lettres S et r :

Select ASCII(‘S’), ASCII(‘r’)


From sys.dual;

Chr(n) : permet d’obtenir le caractère dont le code ASCII ou EBCDIC (selon la machine) est égal à n.

Pr. M. E. RIFFI Page 12


SGBD ORACLE

Exemple :
Affichage des caractères qui correspondent aux codes ASCII 66 et 99 :

Select Chr(66), Chr(99)


From sys.dual;

7-Fonctions Date :

MONTHS_BETWEEN(d1,d2) : Nombre de mois situés entre deux dates

ADD_MONTHS(date, n) : Ajoute des mois calendaires à une date

NEXT_DAY(date,’char’) : Jour qui suit la date spécifiée

LAST_DAY(date) : Dernier jour du mois

ROUND(date [,’fmt’] ) : Arrondit une date

TRUNC (date [,’fmt’] ) : Tronque une date

Exemple :

MONTHS_BETWEEN ('01-SEP-95','11-JAN-94')
Résultat : 19.6774194

ADD_MONTHS ('11-JAN-94',6)
Résultat : '11-JUL-94'

NEXT_DAY ('01-SEP-95','FRIDAY')
Résultat : '08-SEP-95'

LAST_DAY('01-SEP-95')
Résultat : '30-SEP-95'

Exemple :
SELECT code, daterec,
MONTHS_BETWEEN(SYSDATE, daterec) NombreMois,
ADD_MONTHS(daterec,6) ‘’Dans 6 mois’’,
NEXT_DAY(daterec, ’FRIDAY’) ,
LAST_DAY(daterec)
FROM employes
WHERE MONTHS_BETWEEN(SYSDATE, daterec) < 200;

Remarque :
 TO_NUMBER : convertit une chaine de caractères en nombre
 TO_CHAR : convertit un nombre ou date en chaine de caractères
 TO_DATE : convertit une chaine de caractères en date.

Pr. M. E. RIFFI Page 13


SGBD ORACLE

Exemple :
SELECT empno, to_char(daterec, 'MM/YY') "mois d'embauche"
FROM employes

7-1- Modèles de Format Date :

YYYY : Année exprimée avec 4 chiffres


YEAR : Année exprimée en toutes lettres

MM : Mois exprimé avec 2 chiffres

MONTH : Mois exprimé en toutes lettres

DY : 3 premières lettres du nom du jour

DAY : Jour exprimé en toutes lettres

7-2- Modèles de Format pour les Dates

Les éléments horaires formatent la partie horaire de la date :


HH24:MI:SS AM
Exemple :
15:45:32 PM

Pour ajouter des chaînes de caractères, les placer entre guillemets.


DD "of" MONTH
Exemple :
12 of OCTOBER

Différents suffixes existent pour les nombres.


ddspth
Exemple :
fourteenth

7-3- Format de Date RR

Année en Cours Date Spécifiée Format RR Format YY


1995 27-OCT-95 1995 1995
1995 27-OCT-17 2017 1917
2001 27-OCT-17 2017 2017
2001 27-OCT-95 1995 2095

Si l’année spécifiée est située entre


0-49 50-99
Si les 2 chiffres de 0-49 La nouvelle date La nouvelle date
l’année en cours appartient au siècle appartient au siècle
sont courant. précédent.

50-99 La nouvelle date La nouvelle date


appartient au siècle appartient au siècle

Pr. M. E. RIFFI Page 14


SGBD ORACLE

suivant. courant.

7-4- Utilisation de la Fonction TO_CHAR avec les Dates

SQL> SELECT nom, TO_CHAR(daterec, 'fmDD Month YYYY') daterec


FROM employes;
V- JOINTURES EXTERNES

– Les jointures externes permettent de visualiser des lignes qui ne répondent pas
à la condition de jointure.
– L'opérateur de jointure externe est le signe (+).

SELECT table.column, table.column


FROM table1, table2
WHERE table1.column(+) = table2.column;

SELECT table.column, table.column


FROM table1, table2
WHERE table1.column = table2.column(+);

Exemple :
1) Utilisation des Jointures Externes :
SELECT e.Nom, d.Nodep, d.Nomdep
FROM employe e, departement d
WHERE e.Nodep(+) = d.Nodep
ORDER BY e.Nodep;

2) Liaison d'une Table à Elle-même :


SELECT w.nom||' travaille pour '||m.nom
FROM emp w, emp m
WHERE w.sup = m.Noemp;

Pr. M. E. RIFFI Page 15


SGBD ORACLE

VI- MISE EN FORME DES RESULTATS AVEC SQL*PLUS

1-Variables de Substitution

Les variables de substitution SQL*Plus permettent de :


 Stocker temporairement des valeurs
 Simple "et commercial" (&)
 Double "et commercial" (&&)
 Commandes DEFINE et ACCEPT
 Modifier dynamique des en-têtes et pieds de page

2- Utilisation de la variable de Substitution &


Pour demander une valeur à un utilisateur, utilisez une variable préfixée par un simple "et commercial" (&).

Exemple :
SELECT noemp, nom, salaire, nodep
FROM employe
WHERE noemp = &employee_num;

Resultat :
Enter value for employee_num: 123

NOEMP NOM SALAIRE NODEP


--------- ---------- --------- ---------
123 SALSABIL 9000 2

3-Utilisation de la Commande SET VERIFY


Affichage du texte de la commande avant et après que SQL*Plus remplace les variables de substitution par
les valeurs.

Exemple :
SQL> SET VERIFY ON
SQL> SELECT noemp, nom, salaire, nodep
2 FROM employe
3 WHERE noemp = &employee_num;

Résultat :
Enter value for employee_num: 123

old 3: WHERE noemp = &employee_num


new 3: WHERE noemp = 123
...

4- Valeurs Caractères et Dates dans les Variables de Substitution


Placez les valeurs de type caractère et date entre simples quotes.
Exemple :
SQL> SELECT nom, nodep, salaire*12
2 FROM employe
3 WHERE trav='&travaille';

Pr. M. E. RIFFI Page 16


SGBD ORACLE

Résultat :
Enter value for travaille: ANALYST

NOM NODEPT SALAIRE*12


---------- --------- ---------
SALSABIL 2 96000
FARID 2 96000

5- Spécification de Noms de Colonnes, d'Expressions et de Texte lors de l'Exécution

Les variables de substitution peuvent remplacer :


– Une condition WHERE
– Une clause ORDER BY
– Un nom de colonne
– Un nom de table
– Une expression
– Un ordre SELECT

5-1-Exemple :

SQL> SELECT noemp, nom, trav, &column_name


2 FROM employe
3 WHERE &condition
4 ORDER BY &order_column;
Résultat :
Enter value for column_name: salaire
Enter value for condition: salaire>=3000
Enter value for order_column: nom
NOEMP NOM TRAV SALAIRE
--------- ---------- --------- ---------
7902 FARID ANALYSTE 9000
7839 KAMAL PRESIDENT 11000
7788 SALSABIL ANALYSTE 12000

5-2- Utilisation de la Variable de Substitution &&


Spécifiez un double "et commercial" (&&) si vous voulez réutiliser la valeur de la variable sans
interroger l'utilisateur à chaque fois.

Exemple :
SQL> SELECT noemp, nom, trav, &&column_name
2 FROM employe
3 ORDER BY &column_name;

Résultat :
Enter value for column_name: nodep

EMPNO NOM TRAV NODEP


--------- -------------------- --------------------- ---------
7839 LAARBI PRESIDENT 1
7782 CHOMICHA ANALYSTE 1

Pr. M. E. RIFFI Page 17


SGBD ORACLE

6- Définition des Variables Utilisateur


Deux commandes SQL*Plus permettent de prédéfinir des variables :
– DEFINE : crée une variable utilisateur de type CHAR
– ACCEPT : lit la valeur saisie par l'utilisateur et la stocke dans une variable
Si, avec la commande DEFINE, vous voulez spécifier comme valeur une chaîne de caractères contenant un
ou plusieurs espaces, vous devez l'inclure entre simples quotes.

6-1- La Commande ACCEPT


 Affiche un message d'invite personnalisé et récupère la saisie de l'utilisateur
 Permet un contrôle du type de donnée (CHAR, NUMBER ou DATE)
 Peut masquer la valeur saisie par l'utilisateur à des fins de confidentialité

Syntaxe :
ACCEPT variable [datatype] [FORMAT format]
[PROMPT text] {HIDE}

Exemple :
ACCEPT dept PROMPT ‘Donner le nom du département: '
SELECT *
FROM departement
WHERE nom = UPPER('&dept') ;

Résultat :
Donner le nom du département: Informatique

NODEP NOM VILLE


----------- --------------------------- -------------
3 INFORMATIQUE CASABLANCA

6-2- Commandes DEFINE et UNDEFINE


– Une variable reste définie jusqu'à ce que vous exécutiez l'une des actions suivantes :
 Utiliser la commande UNDEFINE
 Quitter SQL*Plus
– La commande DEFINE permet de lister les variables définies.
– Pour définir des variables réutilisables à chaque session, modifiez le fichier login.sql afin de les
créer au démarrage de SQL*Plus.

Exemple :
Créer une variable pour stocker le nom de département.

SQL> DEFINE nomdepart = Informatique


SQL> DEFINE nomdepart

DEFINE NOMDEPART = "Informatique" (CHAR)

Utiliser la variable normalement.

SQL> SELECT *
2 FROM departement

Pr. M. E. RIFFI Page 18


SGBD ORACLE

3 WHERE nomdep= UPPER('&nomdepart');

7- Personnalisation de l'Environnement SQL*Plus


Utilisez les commandes SET pour contrôler la session courante.

SET system_variable value

Vérifiez les paramètres définis au moyen de la commande SHOW.

SQL> SET ECHO ON


SQL> SHOW ECHO
echo ON

Pr. M. E. RIFFI Page 19


SGBD ORACLE

VII- PL/SQL

1- Organisation en couches du système Oracle9i :

• PL/SQL : Procedural language (langage procédural de 3eme génération, dont le


propriétaire est oracle.
• Le dictionnaire de données appartient au user SYS.
• SQL*Plus est l’outil de requêtes installé par défaut dans toutes les versions Oracle.
Depuis la version 2 d’oracle9i, il est considéré comme l’outil d’administration
(sql*plus remplace svrmgrl, qui remplace lui-même sqldba)

2- Structures de programme PL/SQL

Pr. M. E. RIFFI Page 20


SGBD ORACLE

2-1- Structure de bloc pour blocs PL/SQL anonymes

– DECLARE (optionnel)
• Déclarer les objets PL/SQL à utiliser
• dans ce bloc
– BEGIN (obligatoire)
• Définir les instructions exécutables
– EXCEPTION (optionnel)
• Définir les actions à prendre en cas
• d’erreur
– END; (obligatoire)

2-2- Structure de bloc pour sous-programmes PL/SQL

En-tête
IS ou AS
Section Déclaration
BEGIN
Section Exécutable
EXCEPTION (optionnel)
Section Exception
END;

2- 3- Développement de procédures et de fonctions avec SQL*Plus

Pr. M. E. RIFFI Page 21


SGBD ORACLE

2-4- Développement de procédures et de fonctions avec Oracle Procedure Builder

2-5- Composants de Procedure Builder

Pr. M. E. RIFFI Page 22


SGBD ORACLE

2-5-1-Composants de Procedure Builder :Object Navigator

1. Indicateur d'emplacement : Indique votre emplacement actuel dans l'arborescence.


2. Indicateur de sous-objet : Vous permet d’ouvrir ou de réduire les noeuds pour afficher
ou masquer les informations sur les objets. Différentes icônes représentent différentes
classes d'objets.
3. Icône de type : Indique le type d'objet, suivi du nom de l'objet. Dans cet exemple,
l'icône indique que LOG_EXECUTION est un bloc PL/SQL. Si vous faites un double-clic
sur cette icône, Procedure Builder ouvre l'éditeur d'unités de programme, avec le code de
l'objet.
4. Nom de l'objet : Affiche le nom des objets.
5. Champ Find : Vous permet de rechercher des objets.

Object Navigator est un navigateur de Procedure Builder permettant de situer et de


travailler avec les unités de programme à la fois clientes et serveurs, les bibliothèques et
les triggers. IL permet aussi d’ouvrir ou de réduire les noeuds, de couper-coller, de
rechercher un objet et de déplacer des unités de programme PL/SQL entre les côtés client
et serveur.

Pr. M. E. RIFFI Page 23


SGBD ORACLE

2-5-2- Composants de Procedure Builder : l'éditeur d'unités de programme

2-5-3- Création d’une unité de programme côté client

1. Sélectionnez l'objet ou le sous-objet des unités de programme.


2. Cliquez sur le bouton Create. La boîte de dialogue New Program Unit (Nouvelle unité
de programme) apparaît.
3. Saisissez le nom de votre sous-programme, sélectionnez le type de sous-programme et
cliquez sur OK pour valider les entrées.
4. L'éditeur d'unités de programme est affiché.
Il contient le squelette de votre structure PL/SQL. Le curseur se positionne

Pr. M. E. RIFFI Page 24


SGBD ORACLE

automatiquement sur la ligne située sous le mot-clé BEGIN. Vous pouvez maintenant
écrire le code.
5. Une fois le code écrit, cliquez sur Compiler dans l'éditeur d'unités de programme.

Les messages d'erreur générés au cours de la compilation sont affichés dans le volet des
messages de compilation dans la fenêtre de l'unité de programme. Lorsque vous
sélectionnez un message d'erreur, le curseur se déplace sur l'emplacement de l'erreur dans
le programme.
Lorsque votre code PL/SQL ne contient pas d'erreurs, les messages de compilation
disparaissent, et le message «Successfully Compiled» apparaît dans la ligne d'état de
l'éditeur d'unités de programme.
Les unités de programme qui résident dans le noeud des unités de programme sont
perdues lorsque vous quittez Procedure Builder. Vous devez les exporter vers un fichier,
les enregistrer dans une bibliothèque PL/SQL, ou les stocker dans la BD.

2-5-4- Création d’une unité de programme côté serveur

1. Sélectionnez le noeud Database Objects dans Object Navigator, ouvrez le schéma et


cliquez sur Stored Program Unit (Unités de programme stockées).
2. Cliquez sur le bouton Create.
3. Dans la fenêtre New Program Unit (Nouvelle unité de programme), saisissez le nom
du sous-programme, sélectionnez le type de sous-programme et cliquez sur OK pour
valider les entrées.
4. L'éditeur d'unités de programme stockées est affiché.
Il contient le squelette de votre structure PL/SQL. Le curseur se positionne
automatiquement sur la ligne située sous le mot-clé BEGIN. Vous pouvez maintenant
écrire le code.
5. Une fois le code écrit, cliquez sur Enregistrer dans l'éditeur d'unités de programme
stockées.
Les messages d'erreur générés au cours de la compilation sont affichés dans un volet
de messages de compilation au base de la fenêtre. Cliquez sur un message d'erreur pour
vous déplacer vers l'emplacement de l'erreur.

Pr. M. E. RIFFI Page 25


SGBD ORACLE

Lorsque le code PL/SQL ne contient pas d'erreur, le message de compilation n'apparaît


pas. Le message «Successfully Compiled» apparaît dans la ligne d'état au bas de la fenêtre
de l'éditeur d'unités de programme stockées.

2-5-5- Transfert d'unités de programme entre client et serveur

2-5-6- Composants de Procedure Builder : l'interpréteur PL/SQL

1. Volet Source : Affiche le code PL/SQL de votre programme.


2. Volet Navigator : Affiche les mêmes informations que Object Navigator, mais dans
l'interpréteur PL/SQL.
3. Volet Interpréteur : Vous permet d'exécuter des sous-programmes, des commandes
Procedure Builder et des instructions SQL.
Pr. M. E. RIFFI Page 26
SGBD ORACLE

– Pour exécuter des sous-programmes, à l'invite de PL/SQL, saisissez le nom de


votre programme PL/SQL, donnez tous les paramètres et terminez par un
point-virgule.
PL/SQL> construct_name [parameter1|parameter2,…];
– Pour exécuter des instructions SQL, saisissez votre instruction SQL et terminez
par un point-virgule.
PL/SQL> SELECT *
+> FROM client;

2-5-7- Package Intégré dans Procedure Builder : TEXT_IO

Package TEXT_IO :
– Contient une procédure PUT_LINE, qui écrit des informations dans la fenêtre
de l'interpréteur PL/SQL
– Est utilisé pour les unités de programme côté client

TEXT_IO.PUT_LINE: Accepte un paramètre


Exemple :

PL/SQL> TEXT_IO.PUT_LINE(1);
1

Vous pouvez utiliser des procédures d'un package TEXT_IO pour obtenir des valeurs
et des messages à partir d'une procédure ou d'une fonction côté client, dans la fenêtre de
l'interpréteur PL/SQL.
TEXT_IO est un package intégré qui fait partie de Procedure Builder.
Utilisez le package DBMS_OUTPUT, fourni par Oracle, pour déboguer les procédures côté
serveur et le package intégré TEXT_IO de Procedure Builder pour déboguer les procédures
côté client.

Remarque :
Vous ne pouvez pas utiliser TEXT_IO pour déboguer les procédures côté serveur. Le
programme ne pourrait pas mener la compilation à bien.
DBMS_OUTPUT n'affiche pas de messages dans la fenêtre de l'interpréteur PL/SQL si vous
exécutez une procédure à partir de Procedure Builder.

3- Syntaxe pour la création des procédures

CREATE [OR REPLACE] PROCEDURE procedure_name (parameter1 [mode1]


datatype1, pparameter2 [mode2] datatype2,. . .)
IS|AS Bloc PL/SQL ;

L'instruction CREATE PROCEDURE vous permet de créer de nouvelles procédures. Cette


instruction permet de déclarer une liste de paramètres et doit définir les actions à réaliser par
le bloc PL/SQL standard.
Les blocs PL/SQL commencent par BEGIN ou par la déclaration de variables locales et
finissent par END ou END procedure_name. Vous ne pouvez pas référencer d'hôte ni de bind
variables dans le bloc PL/SQL d'une procédure stockée.
L'option REPLACE indique que, si la procédure existe, cette dernière sera écrasée et
remplacée par la nouvelle version créée avec cette instruction.

Pr. M. E. RIFFI Page 27


SGBD ORACLE

3-1- Définitions syntaxiques

3-2- Comment créer une procédure stockée avec SQL*Plus

1. Entrez le texte de l'instruction CREATE PROCEDURE dans un éditeur système ou un


traitement de texte puis enregistrez-le dans un fichier script (extension.sql).
2. Dans SQL*Plus, exécutez le fichier script pour compiler le code source en p-code.
3. Utilisez SHOW ERRORS pour visualiser les erreurs de compilation.
4. Une fois compilée correctement, appelez la procédure à partir d'un environnement
Oracle Server.

3-3- Comment créer une procédure côté serveur avec Procedure Builder

1. Sélectionnez le File—>Connect, puis entrez vos nom d'utilisateur, mot de passe et


chaîne de connexion à la base de données.
2. Ouvrez le noeud Database Objects dans Object Navigator.
3. Ouvrez le nom de votre schéma.
4. Cliquez sur le noeud Stored Program Units sous ce schéma.
5. Cliquez sur le bouton Create dans Object Navigator.
6. Entrez le nom de la procédure dans la boîte de dialogue New Program Unit (Nouvelle
unité de programme).
7. Cliquez sur OK pour accepter.
8. Entrez le code source et cliquez sur Enregistrer.

Remarque :
Les mots-clé CREATE, CREATE OR REPLACE et slash ne sont pas valides dans Procedure
Builder.

3-4- Comment créer une procédure côté client avec Procedure Builder

1. Sélectionnez le noeud Program Units dans Object Navigator.


2. Cliquez sur le bouton Create. La boîte de dialogue Nouvelle unité de programme
apparaît.

Pr. M. E. RIFFI Page 28


SGBD ORACLE

3. Donnez un nom à cette procédure. Notez que le type d'unité de programme par défaut
est Procedure. Cliquez sur OK pour accepter ces entrées. Le nom de l'unité de programme
apparaît dans Object Navigator.
– L'éditeur d'unités de programme apparaît, avec le nom de la procédure ainsi
que les instructions IS, BEGIN et END.
– Le curseur se positionne automatiquement sur la ligne située sous le mot-clé
BEGIN.

4. Entrez le code source.


5. Cliquez sur le bouton Compile. Les messages d'erreur générés au cours de la
compilation sont affichés dans un volet de messages de compilation (moitié inférieure de la
fenêtre).
6. Sélectionnez un message d'erreur pour vous déplacer vers l'emplacement de l'erreur
dans le volet du texte source.
Une fois correctement compilée, un message s'affiche dans le coin inférieur droit de la
fenêtre de l'éditeur d'unités de programmes.
7. Enregistrez le code source dans un fichier : Menu File—>Export.

3-5- Création de procédures avec des paramètres

Pr. M. E. RIFFI Page 29


SGBD ORACLE

3-5-1- Exemple Paramètres IN :

3-5-2- Exemple Paramètres OUT :


SQL> CREATE OR REPLACE PROCEDURE query_emp
1 (v_id IN emp.empno%TYPE,
2 v_name OUT emp.ename%TYPE,
3 v_salary OUT emp.sal%TYPE,
4 v_comm OUT emp.comm%TYPE)
5 IS
6 BEGIN
7 SELECT ename, sal, comm
8 INTO v_name, v_salary, v_comm
9 FROM emp
10 WHERE empno = v_id;
11 END query_emp;
12 /

3-5-3- Paramètres OUT et SQL*Plus

SQL> START emp_query.sql

SQL> VARIABLE g_name VARCHAR2(15)


SQL> VARIABLE g_sal NUMBER
SQL> VARIABLE g_comm NUMBER

SQL> EXECUTE query_emp(7654,:g_name,:g_sal,:g_comm)

SQL> PRINT g_name


G_NAME
---------------
MARTIN

Pr. M. E. RIFFI Page 30


SGBD ORACLE

3-5-4- Comment afficher la valeur des paramètres OUT avec SQL*Plus

1. Créez des variables hôtes dans SQL*Plus en utilisant la commande VARIABLE.


2. Appelez la procédure QUERY_EMP, en fournissant ces variables hôtes comme
les paramètres OUT. Notez l'utilisation des deux-points (:) pour référencer les variables
hôtes dans la commande EXECUTE.
3. Pour visualiser les valeurs transmises de la procédure vers l'environnement
appelant, utilisez la commande PRINT.

Remarque :
– L'exemple ci-dessus montre la valeur de la variable g_name repassée à l'environnement
appelant. Les autres variables peuvent être visualisées, individuellement, comme ci-
dessus, ou avec une seule commande PRINT.
SQL> PRINT g_name g_sal g_comm
– Ne spécifiez pas de taille à une variable hôte de type de données numérique lorsque vous
utilisez la commande VARIABLE. Une variable hôte de type de données CHAR ou
VARCHAR2 a par défaut une longueur de un, à moins qu'une valeur soit proposée entre
parenthèses.
– PRINT et VARIABLE sont des commandes SQL*Plus.

3-5-5- Paramètres OUT et Procedure Builder

PL/SQL> .CREATE CHAR g_name LENGTH 10


PL/SQL> .CREATE NUMBER g_sal PRECISION 4
PL/SQL> .CREATE NUMBER g_comm PRECISION 4
PL/SQL> QUERY_EMP (7654, :g_name, :g_sal,
+> :g_comm);
PL/SQL> TEXT_IO.PUT_LINE (:g_name || ' gagne ' ||
+> TO_CHAR(:g_sal) || ' et une commission de '
+> || TO_CHAR(:g_comm));
MARTIN gagne 1250 et une commission de 1400

3-5-6- Comment afficher la valeur des paramètres OUT avec Procedure Builder

1. Créez des variables hôtes en utilisant la syntaxe .CREATE.


2. Appelez la procédure QUERY_EMP, en fournissant ces variables hôtes comme les
paramètres OUT. Notez l'utilisation des deux-points (:) pour référencer les variables hôtes.
3. Pour visualiser les valeurs passées de la procédure vers l'environnement appelant,
utilisez la procédure PUT_LINE dans le package TEXT_IO.
Le package TEXT_IO n'est disponible que dans Procedure Builder.

Pour plus de précisions, recherchez dans l’aide en ligne de Procedure Builder sur le sujet
«PL/SQL Interpreter Commands».
Exemple :
Créez une procédure avec un paramètre IN OUT pour accepter une chaîne de caractères
contenant 10 chiffres et renvoyer un numéro de téléphone formaté de la façon suivante : (800)
633-0575.
Exécutez l'instruction pour créer la procédure FORMAT_PHONE.

Pr. M. E. RIFFI Page 31


SGBD ORACLE

SQL> CREATE OR REPLACE PROCEDURE format_phone


2 (v_phone_no IN OUT VARCHAR2)
3 IS
4 BEGIN
5 v_phone_no := '(' || SUBSTR(v_phone_no,1,3) ||
6 ')' || SUBSTR(v_phone_no,4,3) ||
7 '-' || SUBSTR(v_phone_no,7);
8 END format_phone;
9/
Appel de FORMAT_PHONE à partirde SQL*Plus

SQL> VARIABLE g_phone_no VARCHAR2(15)


SQL> BEGIN :g_phone_no := '8006330575'; END;
2 /
PL/SQL procedure successfully completed.
SQL> PRINT g_phone_no
G_PHONE_NO
---------------
8006330575

SQL> EXECUTE format_phone (:g_phone_no)


PL/SQL procedure successfully completed.
SQL> PRINT g_phone_no
G_PHONE_NO
---------------
(800)633-0575

3-5-7- Comment afficher des paramètres IN OUT avec SQL*Plus

1. Créez une variable hôte en utilisant la commande VARIABLE.


2. Remplissez la variable hôte avec une valeur, en utilisant un bloc PL/SQL anonyme.
3. Appelez la procédure FORMAT_PHONE, en fournissant la variable hôte comme le
paramètre IN OUT. Notez l'utilisation des deux-points (:) pour référencer la variable hôte
dans la commande EXECUTE.
4. Pour visualiser la valeur repassée vers l'environnement appelant, utilisez la commande
PRINT.

Appel de FORMAT_PHONE à partir de Procedure Builder

PL/SQL> .CREATE CHAR g_phone_no LENGTH 15


PL/SQL> BEGIN
+> :g_phone_no := '8006330575';
+> END;
PL/SQL> FORMAT_PHONE (:g_phone_no);
PL/SQL> TEXT_IO.PUT_LINE (:g_phone_no);
(800)633-0575

Pr. M. E. RIFFI Page 32


SGBD ORACLE

3-6- Méthodes de transfert des paramètres

Pour une procédure contenant de multiples paramètres, vous pouvez utiliser plusieurs
méthodes pour spécifier la valeur des paramètres :

3-6-1- Option DEFAULT pour les paramètres

SQL> CREATE OR REPLACE PROCEDURE add_dept


1 (v_name IN dept.dname%TYPE DEFAULT 'unknown',
2 v_loc IN dept.loc%TYPE DEFAULT 'unknown')
3 IS
4 BEGIN
5 INSERT INTO dept
6 VALUES (dept_deptno.NEXTVAL, v_name, v_loc);
7 END add_dept;
8 /

3-6-2- Exemples de transfert de paramètres

SQL> BEGIN
2 add_dept;
3 add_dept ( 'TRAINING', 'NEW YORK');
4 add_dept ( v_loc => 'DALLAS', v_name =>'EDUCATION');
5 add_dept ( v_loc => 'BOSTON') ;
6 END;
7 /
Procédure PL/SQL terminée avec succès.

SQL> SELECT * FROM dept;


DEPTNO DNAME LOC
------ -------------- -------------
... ... ...
41 unknown unknown
42 TRAINING NEW YORK
43 EDUCATION DALLAS
44 unknown BOSTON

Pr. M. E. RIFFI Page 33


SGBD ORACLE

3-7- Déclaration de sous-programmes

CREATE OR REPLACE PROCEDURE LEAVE_EMP2


(v_id IN emp.empno%TYPE)
IS
PROCEDURE log_exec
IS
BEGIN
INSERT INTO log_table (user_id, log_date)
VALUES (user,sysdate);
END log_exec;
BEGIN
DELETE FROM emp
WHERE empno = v_id;
log_exec;
END leave_emp2;

3-8- Appel d'une procédure à partir d'un bloc PL/SQL anonyme

DECLARE
v_id NUMBER := 7900;
BEGIN
raise_salary(v_id); --appel de la procédure
COMMIT;
...
END;

3-9- Appel d'une procédure à partir d'une procédure stockée

SQL> CREATE OR REPLACE PROCEDURE process_emps


2 IS
3 CURSOR emp_cursor IS
4 SELECT empno
5 FROM emp;
6 BEGIN
7 FOR emp_rec IN emp_cursor
8 LOOP
9 raise_salary(emp_rec.empno); -- appel procédure
10 END LOOP;
11 COMMIT;
12 END process_emps;
13 /

Cet exemple vous montre comment appeler une procédure à partir d'une procédure
stockée. La procédure stockée PROCESS_EMPS utilise un curseur pour traiter tous les
enregistrements de la table EMP et passe chaque numéro identifiant d'employé à la procédure
RAISE_SALARY, ce qui aboutit à une augmentation de salaire de 10 pour cent pour toute la
société.

Pr. M. E. RIFFI Page 34


SGBD ORACLE

Exceptions gérées

Exceptions non gérées

3-10- Suppression des procédures côté serveur

Avec SQL*Plus :
Syntaxe
DROP PROCEDURE procedure_name
Exemple
SQL> DROP PROCEDURE raise_salary;
Procédure supprimée.

Pr. M. E. RIFFI Page 35


SGBD ORACLE

Avec Procedure Builder :


1. Connectez-vous à la base de données.
2. Ouvrez le noeud Database Objects.
3. Ouvrez le schéma du propriétaire de la
procédure.
4. Ouvrez le noeud Stored Program Units.
5. Cliquez sur la procédure que vous souhaitez
supprimer.
6. Cliquez sur le bouton Supprimer dans Object
Navigator.
7. Cliquez sur Yes pour confirmer.

3-11- Suppression des procédures côté client

Avec Procedure Builder :


1. Ouvrez le noeud Program Units.
2. Cliquez sur la procédure que vous
souhaitez supprimer.
3. Cliquez sur le bouton Supprimer dans
Object Navigator.
4. Cliquez sur Yes pour confirmer.

4- Syntaxe pour la création des fonctions


4-1- Syntaxe :
CREATE [OR REPLACE] FUNCTION function_name
(parameter1 [mode1] datatype1,
parameter2 [mode2] datatype2,. . .)
RETURN datatype
IS|AS
PL/SQL Block;

Remarque :
Le bloc PL/SQL doit comporter au moins une instruction RETURN.

Exemple avec SQL*Plus:


SQL> CREATE OR REPLACE FUNCTION get_sal
2 (v_id IN emp.empno%TYPE)
3 RETURN NUMBER
4 IS
5 v_salary emp.sal%TYPE :=0;
6 BEGIN
7 SELECT sal
8 INTO v_salary
9 FROM emp
10 WHERE empno = v_id;
11 RETURN (v_salary);
12 END get_sal;
13 /
Exemple
Exécutez la fonction GET_SAL à partir de SQL*Plus :

Pr. M. E. RIFFI Page 36


SGBD ORACLE

1. Exécutez l'instruction pour créer la fonction stockée GET_SAL.


2. Créez une variable hôte qui sera renseignée avec la valeur renvoyée par le RETURN
de la fonction.
3. Utilisez la commande EXECUTE dans SQL*Plus et invoquez GET_SAL en créant
une expression PL/SQL. Donnez une valeur au paramètre (ID de l'employé dans cet exemple).
La valeur retournée par la fonction sera reçue par la variable hôte, g_salary. Notez l'utilisation
des deux-points (:) pour référencer la variable hôte.
4. Affichez le résultat de l'appel de la fonction avec la commande PRINT. L'employé
Miller, empno7934, touche un salaire mensuel de 1300.

4-2- Exécution de fonctions dans SQL*Plus : Exemple

SQL> START get_salary.sql

SQL> VARIABLE g_salary number

SQL> EXECUTE :g_salary := get_sal(7934)

SQL> PRINT g_salary


G_SALARY
-----------------
1300
4-3- Comment créer une fonction côté client avec Procedure Builder

1. Cliquez sur le noeud Program Units dans Object Navigator.


2. Cliquez sur Create.
3. Entrez le nom de la fonction dans la boîte de dialogue New Program Units (Nouvelle
unité de programme) : Tax.
Sélectionnez le bouton radio pour le type d'unité de programme : Function.
4. Cliquez sur OK pour accepter ces entrées.
5. Dans l'éditeur d'unités de programme, entrez le code affiché ci-dessus.
6. Cliquez sur Compile. Notez le message “Successfully Compiled” (Compilé avec
succès).
7. Cliquez sur Fermer.

Remarque :
Evitez d'utiliser les paramètres des modes OUT et IN OUT avec les fonctions. Les
fonctions sont conçues pour retourner une seule valeur.

Exemple :
Renvoi de l'impôt sur la base d'une valeur spécifiée

FUNCTION tax
(v_value IN NUMBER)
RETURN NUMBER
IS
BEGIN
RETURN (v_value * .08);

Pr. M. E. RIFFI Page 37


SGBD ORACLE

END tax;

4-4- Exécution de fonctions dans Procedure Builder : Exemple

Exemple :
Affiche l'impôt sur la base d'une valeur spécifiée.

PL/SQL> .CREATE NUMBER x PRECISION 4


PL/SQL> :x := tax(1000);
PL/SQL> TEXT_IO.PUT_LINE (TO_CHAR(:x));
80

4-5- Appel des fonctions à partir d'expressions SQL : Restrictions

Une fonction définie par l'utilisateur doit être une fonction stockée.
Une fonction définie par l'utilisateur doit être une fonction SINGLE-ROW, non pas une
fonction GROUP.
Une fonction définie par l'utilisateur ne prend que des paramètres IN, non pas OUT ou IN
OUT.
Les types de données doivent être des types de données SQL valides, CHAR, DATE ou
NUMBER.
Les types de données ne peuvent pas être des types PL/SQL tels que BOOLEAN, RECORD
ou TABLE.
Les commandes INSERT, UPDATE ou DELETE ne sont pas autorisées.
Les appels à des sous-programmes qui ne respectent pas la restriction
ci-dessus ne sont pas autorisés.

4-6- Suppression des fonctions côté serveur

Avec SQL*Plus :
Syntaxe
DROP FUNCTION function_name

Exemple
SQL> DROP FUNCTION get_sal;

Avec Procedure Builder :


1. Connectez-vous à la base de données.
2. Ouvrez le noeud Database Objects.
3. Ouvrez le schéma du propriétaire de la fonction.
4. Ouvrez le noeud Stored Program Units.
5. Cliquez sur la fonction que vous souhaitez
supprimer.
6. Cliquez sur Delete (Supprimer) dans Object
Navigator.
7. Cliquez sur Yes pour confirmer.
4-7- Suppression des fonctions côté client
Avec Procedure Builder :
1. Ouvrez le noeud Program Units.

Pr. M. E. RIFFI Page 38


SGBD ORACLE

2. Cliquez sur la fonction que vous


souhaitez supprimer.
3. Cliquez sur Delete (Supprimer) dans
Object Navigator.
4. Cliquez sur Yes pour confirmer.

4-8- Comparaison des procédures et des fonctions :

5- Création d'une spécification de package

Syntaxe

CREATE [OR REPLACE] PACKAGE package_name


IS|AS
public type and item declarations
subprogram specifications
END package_name;

Exemple :

SQL> CREATE OR REPLACE PACKAGE comm_package IS


2 l_comm NUMBER := 10;
3 PROCEDURE reset_comm
4 (v_comm IN NUMBER);
5 END comm_package;
6 /

5-1- Création d'un corps de package

CREATE [OR REPLACE] PACKAGE BODY package_name


IS|AS
private type and item declarations
subprogram bodies
END package_name;

Exemple :
Définissez une fonction en vue de valider la commission. La commission ne peut pas être
supérieure à la commission la plus élevée attribuée dans tout le personnel.

Pr. M. E. RIFFI Page 39


SGBD ORACLE

SQL> CREATE OR REPLACE PACKAGE BODY comm_package


2 IS
3 FUNCTION validate_comm
4 (v_comm IN NUMBER)
5 RETURN BOOLEAN
6 IS
7 v_max_comm NUMBER;
8 BEGIN
9 SELECT max(comm)
10 INTO v_max_comm
11 FROM emp;
12 IF v_comm > v_max_comm
13 THEN RETURN(FALSE);
14 ELSE RETURN(TRUE);
15 END IF;
16 END validate_comm;

Exemple :
Définir une procédure permettant de remettre à zéro et de valider la commission actuelle.

17 PROCEDURE reset_comm
18 (v_comm IN NUMBER)
19 IS
20 BEGIN
21 IF validate_comm(v_comm)
22 THEN l_comm := v_comm;
23 ELSE
24 RAISE_APPLICATION_ERROR
25 (-20210,'Invalid commission');
26 END IF;
27 END reset_comm;
28 END comm_package;
29 /

5-2- Exécution d'une procédure publique de package

SQL> EXECUTE package_name.procedure_name(parameters)

Exemple
SQL> EXECUTE comm_package.reset_comm(15)

Variables globales
Vous pouvez déclarer des variables publiques (globales) dont la durée de persistance
correspondra à la session utilisateur. Vous pouvez également créer une spécification de
package ne nécessitant pas de corps de package.

Exemple
Une spécification de package contenant plusieurs taux de conversion.

Pr. M. E. RIFFI Page 40


SGBD ORACLE

Aucun corps de package n'est nécessaire pour prendre en charge cette spécification de
package.

SQL> CREATE OR REPLACE PACKAGE global_vars IS


2 mile_2_kilo CONSTANT NUMBER := 1.6093;
3 kilo_2_mile CONSTANT NUMBER := 0.6214;
4 yard_2_meter CONSTANT NUMBER := 0.9144;
5 meter_2_yard CONSTANT NUMBER := 1.0936;
6 END global_vars;
7 /

SQL> EXECUTE DBMS_OUTPUT.PUT_LINE ('20 miles ='||20* global_vars.mile_2_kilo||'


km')

20 miles =32.186 km

5-3- Appel de constructions de package

Exemple 1 : appel d'une fonction depuis une procédure dans le même package.

CREATE OR REPLACE PACKAGE BODY comm_package IS


...
PROCEDURE reset_comm
(v_comm INNUMBER)
IS
BEGIN
IF validate_comm(v_comm)
THEN l_comm := v_comm;
ELSE
RAISE_APPLICATION_ERROR
(-20210, 'Invalid commission');
END IF;
END reset_comm;
END comm_package;

Exemple 2 : appel d'une procédure de package depuis SQL*Plus.

SQL> EXECUTE comm_package.reset_comm(15)

Exemple 3 : appel d'une procédure de package dans un autre schéma.

SQL> EXECUTE scott.comm_package.reset_comm(15)

Exemple 4 : appel d'une procédure de package dans une base de données distante.

SQL> EXECUTE comm_package.reset_comm@ny(15)

Lorsque vous appelez une fonction ou procédure de package depuis l'extérieur du package,
vous devez définir son nom avec celui du package.
Exemple 2

Pr. M. E. RIFFI Page 41


SGBD ORACLE

Appelez la procédure RESET_COMM depuis SQL*Plus, en définissant une commission


actuelle de $15 pour la session utilisateur.
Exemple 3
Appelez la procédure RESET_COMM située dans le schéma scott à partir de SQL*Plus, en
définissant une commission actuelle de $15 pour la session utilisateur.
Exemple 4
Appelez, à partir de SQL*Plus, la procédure RESET_COMM située dans une base de données
distante déterminée par le lien ny, en définissant une commission de $15 pour la session
utilisateur.

Exemple
Utilisez la procédure METER_TO_YARD pour convertir des mètres en yards, en vous basant
sur le taux de conversion fourni dans GLOBAL_VARS.

SQL> CREATE PROCEDURE meter_to_yard


2 (v_meter IN NUMBER,
3 v_yard OUT NUMBER)
4 IS
5 BEGIN
6 v_yard := v_meter * global_vars.meter_2_yard;
7 END meter_to_yard;
8 /

SQL> VARIABLE yard NUMBER


SQL> EXECUTE meter_to_yard (1, :yard)
PL/SQL procedure successfully completed.
SQL> PRINT yard
YARD
---------
1.0936

5-4- Suppression de packages

Pour supprimer la spécification et le corps du package :

DROP PACKAGE package_name

Pour supprimer le corps du package :

DROP PACKAGE BODY package_name

5-5- Avantages des packages

 Modularité : encapsulation de constructions.


 Conception d'applications plus aisée : codage et compilation séparées de la spécification et
du code.
 Masquage d'informations :
o Les constructions privées sont masquées et inaccessibles.
o L'intégralité du codage est masquée dans le corps.

Pr. M. E. RIFFI Page 42


SGBD ORACLE

 Fonctionnalités accrues : persistance des variables et des curseurs


 Performances accrues :
o L'ensemble du package est chargé en mémoire lorsqu'il est fait référence au
package pour la première fois
o Une seule copie en mémoire pour tous les utilisateurs
o Hiérarchie des dépendances simplifiée
 Surcharge : plusieurs sous-programmes avec le même nom

6- Syntaxe relative à la création des triggers d'instruction

CREATE [OR REPLACE] TRIGGER trigger_name


timing
event1 [OR event2 OR event3]
ON table_name
trigger_body

Exemple :
Créer un trigger d'instruction BEFORE afin d'empêcher l'aboutissement d'une opération de
déclenchement si une certaine condition est enfreinte.
Vous pouvez créer un trigger chargé de limiter à certaines heures ouvrables, du lundi au
vendredi, les insertions effectuées dans la table EMP.
Si, par exemple, un utilisateur tente d'insérer une ligne un dimanche, un message apparaît, le
trigger échoue et l'instruction de déclenchement est annulée.
RAISE_APPLICATION_ERROR est une procédure intégrée côté serveur qui imprime un
message à l'attention de l'utilisateur et provoque l'échec du bloc PL/SQL.
En cas d'échec d'un trigger de base de données, Oracle Server annule automatiquement
l'instruction de déclenchement.

SQL> CREATE OR REPLACE TRIGGER secure_emp


2 BEFORE INSERT ON emp
3 BEGIN
4 IF (TO_CHAR (sysdate,'DY') IN ('SAT','SUN')) OR
5 (TO_CHAR(sysdate,'HH24') NOT BETWEEN
6 '08' AND '18')
7 THEN RAISE_APPLICATION_ERROR (-20500,
8 'You may only insert into EMP during normal hours.');
9 END IF;
10 END;
11 /

Pr. M. E. RIFFI Page 43


SGBD ORACLE

6-1- Création de triggers d'instruction à l'aide de Procedure Builder

Exemple
Tentative d'insertion d'une ligne dans la table EMP en dehors des heures de bureau.

SQL> INSERT INTO emp (empno, ename, deptno)


2 VALUES (7777, 'BAUWENS', 40);
INSERT INTO emp (empno, ename, deptno)
*
ERROR at line 1:
ORA-20500: You may only insert into EMP during normal hours.
ORA-06512: at "A_USER.SECURE_EMP", line 4
ORA-04088: error during execution of trigger
'A_USER.SECURE_EMP'

6-2- Combinaison d'événements déclencheurs


Il est possible de rassembler plusieurs événements déclencheurs au sein d'un seul événement
grâce aux prédicats conditionnels spéciaux INSERTING, UPDATING et DELETING
disponibles dans le corps du trigger.
Exemple
Créez un trigger pour empêcher l'exécution de tout événement de manipulation de données
sur la table EMP en dehors de certaines heures ouvrables, du lundi au vendredi.
Faites également appel aux triggers d'instruction BEFORE pour initialiser des variables ou
indicateurs globaux et valider les règles de gestion complexes.

CREATE OR REPLACE TRIGGER secure_emp


BEFORE INSERT OR UPDATE OR DELETE ON emp
BEGIN
IF (TO_CHAR (sysdate,'DY') IN ('SAT','SUN')) OR
(TO_CHAR (sysdate, 'HH24') NOT BETWEEN '08' AND '18')
THEN

Pr. M. E. RIFFI Page 44


SGBD ORACLE

IF DELETING
THEN RAISE_APPLICATION_ERROR (-20502,
'You may only delete from EMP during normal hours.');
ELSIF INSERTING
THEN RAISE_APPLICATION_ERROR (-20500,
'You may only insert into EMP during normal hours.');
ELSIF UPDATING ('SAL')
THEN RAISE_APPLICATION_ERROR (-20503,
'You may only update SAL during normal hours.');
ELSE
RAISE_APPLICATION_ERROR (-20504,
'You may only update EMP during normal hours.');
END IF;
END IF;
END;

6-3- Création d'un trigger de ligne

CREATE [OR REPLACE] TRIGGER trigger_name


timing
event1 [OR event2 OR event3]
ON table_name
[REFERENCING OLD AS old | NEW AS new]
FOR EACH ROW
[WHEN condition]
trigger_body

Exemple :
Créez un trigger permettant uniquement à certains employés d'avoir un salaire supérieur à
1000 unités.

SQL> CREATE OR REPLACE TRIGGER CHECK_SALARY


2 BEFORE INSERT OR UPDATE OF sal ON emp
3 FOR EACH ROW
4 BEGIN
5 IF NOT (:NEW.JOB IN ('MANAGER' , 'PRESIDENT'))
6 AND :NEW.SAL > 1000
7 THEN
8 RAISE_APPLICATION_ERROR
9 (-20202, 'EMPLOYEE CANNOT EARN THIS AMOUNT');
10 END IF;
11 END;

Pr. M. E. RIFFI Page 45


SGBD ORACLE

6-4- Création de triggers de ligne à l'aide de Procedure Builder

6-5- Utilisation des qualificatifs OLD et NEW

SQL>CREATE OR REPLACE TRIGGER audit_emp_values


2 AFTER DELETE OR INSERT OR UPDATE ON emp
3 FOR EACH ROW
4 BEGIN
5 INSERT INTO audit_emp_table (user_name,
6 timestamp, id, old_last_name, new_last_name,
7 old_title, new_title, old_salary, new_salary)
8 VALUES (USER, SYSDATE, :OLD.empno, :OLD.ename,
9 :NEW.ename, :OLD.job, :NEW.job,
10 :OLD.sal, :NEW.sal );
11 END;
12 /

Exemple
La clause WHEN permet de limiter l'action du trigger aux lignes qui répondent à une certaine
condition.
Créez un trigger sur la table EMP pour calculer la commission d'un employé lors de l'ajout
d'une ligne dans une table EMP ou de la modification du salaire d'un employé.
Le qualificatif NEW ne doit pas être précédé de deux points dans la clause WHEN.

SQL>CREATE OR REPLACE TRIGGER derive_commission_pct


2 BEFORE INSERT OR UPDATE OF sal ON emp
3 FOR EACH ROW
4 WHEN (NEW.job = 'SALESMAN')
5 BEGIN
6 IF INSERTING
7 THEN :NEW.comm := 0;

Pr. M. E. RIFFI Page 46


SGBD ORACLE

8 ELSIF :OLD.comm IS NULL


9 THEN :NEW.comm := 0;
10 ELSE :NEW.comm := :OLD.comm * (:NEW.sal/:OLD.sal);
11 END IF;
12 END;
13 /

6-6- Triggers INSTEAD OF


Les triggers INSTEAD OF vous permettent de modifier les données lorsqu’une instruction
LMD a été émise relativement à une vue intrinsèquement non modifiable. On parle, dans ce
cas, de "triggers INSTEAD OF" car, contrairement aux autres triggers, Oracle Server les
déclenche au lieu d'exécuter l'instruction de déclenchement. Ce type de trigger sert à effectuer
une opération INSERT, UPDATE ou DELETE directement sur les tables sous-jacentes.
Supposons que vous écriviez des instructions INSERT, UPDATE ou DELETE sur une vue.
Dans ce cas, le trigger INSTEAD OF s'exécute de manière invisible en tâche de fond afin de
permettre l'exécution des actions appropriées.

Pourquoi utiliser des triggers INSTEAD OF?


Si une vue comprend plusieurs tables, une insertion effectuée dans la vue pourrait entraîner
une insertion dans une table et une mise à jour dans une autre. Vous pouvez donc écrire un
trigger INSTEAD OF qui se déclenchera lorsque vous créez une insertion sur la vue. Le cas
échéant, le corps du trigger s'exécute en lieu et place de l'insertion originale, ce qui se traduit
par une insertion dans une table et une mise à jour dans une autre.

Syntaxe :
CREATE [OR REPLACE] TRIGGER trigger_name
INSTEAD OF
event1 [OR event2 OR event3]
ON view_name
[REFERENCING OLD AS old | NEW AS new]
[FOR EACH ROW]
trigger_body

6-7- Tableau comparatif Triggers / Procédures stockées

Pr. M. E. RIFFI Page 47


SGBD ORACLE

6-8- Gestion des triggers


Désactivation ou réactivation d'un trigger de base de données :
ALTER TRIGGER trigger_name DISABLE | ENABLE

Désactivation ou réactivation de tous les triggers d'une table :


ALTER TABLE table_name DISABLE | ENABLE ALL TRIGGERS

Recompilation d'un trigger pour une table :


ALTER TRIGGER trigger_name COMPILE

6-9- Syntaxe DROP TRIGGER


Pour supprimer un trigger de la base de données, utilisez la syntaxe DROP TRIGGER :
DROP TRIGGER trigger_name

Exemple
SQL> DROP TRIGGER secure_emp;

6-10- Modèle d'exécution des triggers et vérification des contraintes

1. Exécuter tous les triggers BEFORE STATEMENT


2. Effectuer une boucle pour toutes les lignes affectées
 Exécuter tous les triggers BEFORE ROW
 Exécuter l'instruction LMD et effectuez une vérification de la contrainte d'intégrité
 Exécuter tous les triggers AFTER ROW
3. Exécuter tous les triggers AFTER STATEMENT

Exemple :
CREATE OR REPLACE TRIGGER audit_emp_trig
AFTER UPDATE or INSERT or DELETE on EMP
FOR EACH ROW
BEGIN
IF DELETING THEN var_pack.set_g_del(1);
ELSIF INSERTING THEN var_pack.set_g_ins(1);
ELSIF UPDATING ('SAL')
THEN var_pack.set_g_up_sal(1);
ELSE var_pack.set_g_upd(1);
END IF;
END audit_emp_trig;

CREATE OR REPLACE TRIGGER audit_emp_tab


AFTER UPDATE or INSERT or DELETE on EMP
BEGIN
audit_emp;
END audit_emp_tab;

Pr. M. E. RIFFI Page 48


SGBD ORACLE

VIII- ADMINISTRATION ORACLE

1- INTRODUCTION
1-1- Objectifs

 Assurer les principales tâches d’administration d’une bases de données Oracle


 Maîtriser l’organisation interne d’une base de données : gestion des espaces disque,
des paramètres de configuration, des utilisateurs, de la sécurité,…

1-2- Caractéristiques du SGBDR Oracle


ORACLE est un SGBDR caractérisé par :
 Utilisation de SQL :
 la définition de données
 la manipulation des données
 le contrôle de données
 Plusieurs outils pour faciliter l’administration :
 Backup Manager
 Schema Manager
 Storage Manager
 SQL Worksheet
 Instance Manager
 Security Manager
 SQL Plus
 SQL-Net8 Easy
 ConfigAdmin ODBC
 Etc.
 Stockage d’une grande quantité d’informations

Nombre maximum de sessions 32000

Nombre maximum de lignes par table Illimité

Nombre maximum contraintes par colonne Illimité

Nombre maximum Colonnes d'une table 1000 colonnes

Nombre maximum Longueur d'une ligne 2G caractères

Nombre maximum colonnes dans un SELECT 1000

Nombre maximum de tables dans un SELECT Illimité

 Multi plateformes (Windows, Unix, Novell, …)


 Liberté de paramétrage
 Gestion de la cohérence des données : emploi des transactions implicites, explicites
(commit et rollback) et sous transactions (savepoint)
 Gestion de la confidentialité des données : notions de privilèges, vues, …

Pr. M. E. RIFFI Page 49


SGBD ORACLE

 Gestion des contraintes d'intégrités des données:


 notions de types de données
 Notions de clés primaires
 Notions de clés étrangères
 Gestion de la sécurité des données : technique de reprise assurée par la journalisation
d'une image (copie) des données avant et après chaque opération de mise à jour (utile
dans le cas d'une panne)
 Gestion des accès concurrents : éviter l'inter-blocage (accès au même temps aux
données) en utilisant la technique de verrouillage d'une partie des données tant qu'elle
est utilisée par une autre personne
 Ouvert :
 Permet d’ouvrir la base de données aux autres systèmes (outils
d’import/export)
 Administration à distance : À partir d’un poste client, on peut administrer une
base de données répartie sur le réseau (Net8, par exemple)

1-3- Rôles d’un DBA


Les rôles d’un DBA sont classés en deux catégories :
 Conception de la base de données
 Organisation technique de la base de données
 Installer le SGBDR et les différents produits associés
 Création de la base de données suivant le modèle conceptuel
 Faire évoluer la base suivant le besoin :
 Ajout de nouveaux objets
 Le paramétrage de la mémoire utilisée
 Le dimensionnement des fichiers physique
 Assurer la confidentialité des données :
 Création des utilisateurs qui pourront se connecter à la base de données
 Définition des droits de chaque utilisateur en fonction de son rôle dans la base de
données
 Assurer la cohérence des données :
o Respecter l’intégrité des données (types, clés, contraintes, …)
o Mettre en place des procédures pour faire face aux différentes défaillances
(matérielles ou logicielles)

Pr. M. E. RIFFI Page 50


SGBD ORACLE

2- Architecture interne d'Oracle

2-1- Introduction
L'organisation interne d'Oracle 8 Server est organisée de 3 niveaux :

 Les données
 La mémoire
 Les processus

2-1-1- données
Les données correspondent à :
 La structure de la base de données (structure physique)
 La façon dont les données sont stockées (structure logique)
 La structure physique est composée de fichiers du système d'exploitation
o Data files contenant les données de la BD
o Redo log files contient les transactions validées
o Control files où sont stockés les emplacements des fichiers de la BD
o …
 La structure logique indique comment sont organisés les données
 Contient plusieurs éléments :
o Schéma objet : objets d'un utilisateur
o Tablespaces : regroupement logique de fichiers
o Segments : élément d'un tablespace
o …
2-1-2- mémoires
 Correspond à l'organisation des données en mémoire centrale
 La mémoire est composée de 2 zones :
o SGA (System/Shared Global Area) : buffers alloués par Oracle pour contenir
des données partagées
o PGA (Program/Process Global Area) : zones allouées aux processus
utilisateurs qui se connectent à la base
2-1-3- processus
 Correspond aux différents processus qu'Oracle met en œuvre
 On distingue :
 Processus utilisateur : permet d'établir une connexion au serveur
 Processus serveur : prend en charge les processus utilisateurs

Pr. M. E. RIFFI Page 51


SGBD ORACLE

 Processus d'arrière plan : chacun a une tâche (écriture des données sur disque,
gestion de la mémoire, …)
2-1-4- remarques
 La mémoire SGA et les processus d'arrière plan constitue une instance d'Oracle
 Les caractéristiques de l'instance sont contenues dans le fichier de paramètres associé

2-2- Organisation logique


La structure logique définit le mode d'utilisation de l'espace physique d'une base de données,
elle est constituée d'entités manipulables par des commandes SQL.
On peut regrouper ces entités en catégories :
o Dictionnaire de données
o Schéma objet
o Tablespaces
o Segments
o Extents
o Blocks
o …

2-2-1- Dictionnaire de Données


 Ensemble de tables, vues et synonymes contenant des informations sur la BD (tables,
vues, indexes, utilisateurs, droits, …).
 Accessible à l’aide de l’instruction SELECT
 Select * from user_tables;
 Select * from all_tables;
 Select * from dba_users;
 Select * from user_constraints where table_name=‘EMP’;
 Attention : personne ne peut changer le DD, même le DBA.
 Accessible
 explicitement par les utilisateurs (select …)
 Implicitement par les système :
Si on crée une table, par exemple, le système ajoute une nouvelle entrée dans la table des
tables (DD)
 Les vues du dictionnaire de données sont de deux types :

Pr. M. E. RIFFI Page 52


SGBD ORACLE

 Statiques, décrivent les objets statiques : tablespaces, fichiers physiques,


tables, contraintes, clusters, vues, indexes, synonymes, procédures, fonctions,
packages, triggers, utilisateurs, droits, rôles, profiles, …
 Dynamiques, concernant les ressources systèmes en cours d'utilisation, les
sessions connectées, les verrous, …
 Trois catégories de vues statiques
 User_xxx : les objets de l'utilisateur connecté
 All_xxx : tous les objets accessibles par l'utilisateur connecté
 DBA_xxx : tous les objets
 Vues dynamiques : commencent par V_$ ou V$ (synonymes)
 V$Session : informations sur les sessions actuellement connectées
 V$Version : numéro de la version du noyau Oracle
 V$Database : informations sur la base de données
 V$Lock : verrous actifs et en attentes
 V$SGA : taille et composition de la mémoire partagée
 V$SQL : ordre SQL en cache
2-2-2- Schéma d'objets
Ensemble d'objets de la base logique appartenant à un même utilisateur, On distingue :
 Table : espace de stockage des données
 Index : colonne(s) permettant d'accélérer la recherche
 Vue : table virtuelle (requête)
 Synonyme : nom alternatif à une table/vue
 Séquence : générateur de série de nombre
 Cluster : regroupement physique de tables ayant des colonnes en commun
 Database link : lien avec une BD distante
 Procédures/fonctions : ensemble d'instructions nommé
 Déclencheurs : procédure associée à une table
 Packages : collection d'objets stockés ensemble
 …
2-2-3- Tablespace
 Espace logique contenant les objets stockés dans une BD.
 Différents types
 Tablespace de données  Données
 Tablespace temporaire  Opérations de tris
 Tablespace d’annulation  Annulation
 …
SYSTEM : Tablespace crée par défaut, contient :
 Le dictionnaire de données
 Rollback segment
On peut également y stocker :
 Données
 Index
 Etc..
On obtient une base de données minimale peu structurée et peu sécurisée

Pr. M. E. RIFFI Page 53


SGBD ORACLE

On peut aussi répartir les données, les index, etc. sur plusieurs disques

2-2-4- Segment
 Eléments constitutifs d’un tablespace.
 Une table est constituée d’au moins deux segments :
 Data Segment : données d'une table
 RollBack Segment : données avant validation
 Deux autres segments peuvent apparaître dans une table
 Index Segment : informations des index
 Temporary Segment : résultat temporaire d'une requête PL/SQL
2-2-5- Extent et block
Block
 La plus petite unité que peut manipuler le système
 Tous les blocks ont la même taille (voir DB_BLOCK_SIZE dans le fichier de
paramètres)

2-3- Organisation physique


Une BD est constituée de plusieurs types :
 Un ou plusieurs Data Files
 Deux ou plusieurs Redo Log Files
 Un ou plusieurs Control Files
 Un ou plusieurs Init File
Et optionnellement :
 Des fichiers d’archivage de journaux
 Des fichiers de trace et journal d’alerte
 Un fichier de mot de passe

Pr. M. E. RIFFI Page 54


SGBD ORACLE

2-3-1- DataFile (fichier de données)


 Contient l’ensemble des données de la BD (tables, vues, index, …).
 À la création de la BD, au moins un fichier de données est créé
 D'autres fichier peuvent créer pour répondre aux besoins
 Les fichiers sont regroupés logiquement dans des tablespaces
 Chaque tablespace est constitué d’un ou de plusieurs datafile
Create tablespace tbs1
Datafile ‘c:\ora\data1.dbf’ size 5M
‘d:\ora\data2.dbf’ size 5M

 Pour connaître les fichiers de données
 Select * from V$DBFILE;
 Select * from dba_data_files;
Dans les datafiles, seulement les tables sont des données :
 Vues, synonymes et database links sont des pointeurs sur des données
 Index et clusters sont des accélérateurs
 Fonctions, procédures et packages des programmes PL/SQL
 Rollback segments zone mémoires stockant des images de données
2-3-2- Redo Log File (fichier de Journal)
 Servent à stocker les données générées par des commandes DML-SQL des utilisateurs
 Contiennent les changements effectués sur la BD (ensemble des transactions).
 Permettent de reconstruire la BD après une panne
 Pour connaître les fichiers journaux :
 Select * from V$Logfile;

Pr. M. E. RIFFI Page 55


SGBD ORACLE

 Select * from V$log;


 À la création de la base de données, ils sont au moins 2, afin d'assurer une sauvegarde
cyclique
 Oracle écrit dans les redo log files de manière cyclique : lorsqu’il rempli le 1er, il
passe au 2ième et ainsi de suite. Lorsque le dernier est rempli, il écrase le 1er.

 Le log switch se produit quand LGWR s'arrête d'écrire dans un groupe de journaux et
commence à écrire dans un autre.
 Pour forcer un log switch
ALTER SYSTEM SWITCH LOGFILE;

On peut forcer le log switch pour plusieurs raisons :


 On a surestimé un fichier de journal
 On a besoin d'effectuer des opérations de maintenance sur un journal
 Etc…
2-3-3- Control File (Fichier de Contrôle)
 Permettent à une instance d’utiliser les fichiers précédents.
 Contiennent les emplacements physiques des fichiers, leurs natures, …

Pr. M. E. RIFFI Page 56


SGBD ORACLE

 Pour connaître les fichiers de contrôle


Select * from V$Controlfile;
 L'emplacement et le nom du fichier de contrôle sont indiqués dans le fichier de
paramètre de l'instance

2-4-Relation entre éléments logiques et physiques

2-4-Instance d’une base de données


Combinaison de :
 Structures mémoires regroupées dans la SGA (System Global Area)
 Processus d’arrière plan (background proccess)

Pr. M. E. RIFFI Page 57


SGBD ORACLE

2-4-1- SGA
 Zone mémoire partagée entre tous les utilisateurs de la base de données
 Allouée à chaque démarrage de l'instance et est libérée lorsque celle-ci est arrêtée.
 Constituée de plusieurs mémoires (tampons ou Buffers) :
 tampon de blocs de données : database buffer
 tampon du journal de reprise : redolog buffer
 pool partagé : shared pool
 …
 Show SGA : affiche les caractéristiques de SGA
2-4-1-1- Database buffer :
 Stocke les données demandées par les commandes SQL des utilisateurs
 Permet aux utilisateurs de lire le moins souvent les mêmes données sur le disque et de
garder en mémoire les données souvent utilisées
 Oracle enregistre plus tard sur disque les données de cette zone
 Permet des gains de performances considérables lors de l'obtention et de la mise à jour
de données
 Sa taille est déterminée par le paramètre DB_BLOCK_SIZE
2-4-1-2- Redo log buffer
 Contient temporairement les données modifiées et validées avant qu'elles ne soient
enregistrées dans le fichiers redo log
 Ces modifications sont générées par les commandes insert, update et delete
Sa taille est définie par LOG_BUFFER
2-4-1-3- Shared pool
 Constituée de 2 zones de mémoires :
 Library cache : stocke les commandes SQL à exécuter
 Dictionary cache : stocke les informations du DD récemment demandées
 Sa taille est définie par le paramètre
SHARED_POOL_SIZE
 Pour la modifier :
Alter system set shared_pool_size=64M

2-4-2- Structure de processus


 Oracle utilise 3 types de processus :
 Le processus utilisateur, qui est démarré au moment où un utilisateur tente de
se connecter au serveur
 Le processus serveur, qui établit la connexion à l'instance Oracle
 Les processus d'arrière plan, lancés au démarrage d'une instance Oracle.
 Gèrent et appliquent les relations entre les structures physiques et les structures
logiques
 Processus obligatoires
 DBWR PMON CKPT
 LGWR SMON
 Processus facultatifs
 ARC : processus d'archivage
 RECO : processus de récupération
 …

Pr. M. E. RIFFI Page 58


SGBD ORACLE

2-4-2-1- Processus Database Writer(DBWR)

 Écrit les blocs de données modifiés da la database buffer vers le disque (data file)
 S'exécute quand le processus serveur ne trouve plus de buffer libre pour stocker les
données
 Peut s'exécuter aussi à une fréquence déterminée par le paramètre : checkpoint
2-4-2-2- Processus Log Writer (LGWR)

 Écrit les entrées du redolog buffer dans les fichier redolog


 Il écrit dans les cas suivants :
 Une transaction est validée
 Un tiers du buffer est rempli
 De manière périodique
2-4-2-3- Processus System Monitor (SMON)

Assure :
 Le recouvrement d'instance quand celle-ci démarre
 Annule les transactions non validées
 Ré implémente les modifications dans les redolog files
 Libération des segments temporaires quand ils ne sont plus utilisés

Pr. M. E. RIFFI Page 59


SGBD ORACLE

2-4-2-4- Processus Process Monitor (PMON)

 Suite à l'echec d'un processus, PMON exécute les opérations suivantes :


 Annule les transactions
 Libère les ressources
 Nettoie le cache utilisé par les processus serveur
2-4-2-5-Processus CheckPoint (CKPT)

 Ce processus est chargé de :


 Signaler DBWR aux points de reprise,
 Mettre à jour les fichiers de contrôle avec les informations sur le point de
reprise
2-4-2-6- Processus d'archivage (ARC)
 Processus d'arrière plan facultatif
 En mode ARCHIVELOG, il archive automatiquement les redolog files
 Il enregistre toutes les modifications apportées à la base de données

3- Gestion des instances


3-1- Fichier de paramètres
 Le fichier initSID.ora est lu lorsqu'une instance est démarrée
 C'est un fichier de type texte qui peut être édité/modifié directement
 Plusieurs types de paramètres :
 Paramètres d'emplacement
 Paramètres de limites
 etc
 Ces paramètres décrivent l'emplacement d'un ou de plusieurs fichiers

Pr. M. E. RIFFI Page 60


SGBD ORACLE

 Ces fichiers vont servir à l'instance à lire ou à écrire des données


 Dans certains cas, le chemin complet est indiqué (CONTROL _FILES, par
exemple)
 Dans d'autres cas, seulement le nom du répertoire qui indiqué
(LOG_ARCHIVE_DEST, par exemple)
3-1-1- Paramètres de limites
Peuvent être répartis en deux sous-catégories :
 Limites de ressources
 Limites de mémoire
3-1-2- Limites de ressources
 Permettent de définir la quantité de ressources disponible pour l'instance lorsque celle-
ci démarre
 On trouve, par exemple :
 OPEN_CURSORS
 OPEN_LINKS
3-1-3- Limites de mémoire
 Permettent de spécifier la taille des différentes structures mémoire.
 On trouve, par exemple :
 DB_CACHE_SIZE
 SHARED_POOL_SIZE
 SORT_AREA_SIZE
 Deux types :
 Ceux qui indiquent la taille (suivis par K, M ou G)
 D'autres indiquent le nombre
Control_files Noms des fichiers de contrôle
Db_cache_size Taille du cache
Db_name Identificateur de la base de données (obligatoire lors de la création
de la base de données)
Shared_pool_size Taille en octets de la zone mémoire partagée
User_dump_dest Emplacement de création de fichier de trace
Log_buffer Taille de redo log buffer
Max_dump_file_size Taille maximale des fichiers de trace
processes Nombre maximum de processus pouvant se connecter à l'instance

3-2- Ouvrir et fermer une base de données

3-2-1- Démarrer une base en mode NOMOUNT


 Démarrer l’instance en mode NOMOUNT

Pr. M. E. RIFFI Page 61


SGBD ORACLE

 S’effectue à la création de la base ou à la recréation du fichier de contrôle


 Le démarrage comprend les tâches suivantes :
 Lecture du fichier d’initialisation
 Affectation de la mémoire SGA
 Démarrage des processus d’arrière-plan
 Ce mode d’ouverture est utilisé dans les cas suivants :
 Création de la base de données
 Assurer certaines opérations de maintenance (sur le fichier de contrôle, par
exemple)
3-2-2- Démarrer une base en mode MOUNT
 Ce mode est utile pour effectuer des opérations de maintenance :
 Renommer les fichiers de données
 Activer/désactiver les options d’archivage de journaux
 Effectuer une récupération complète de la base de données
 Le montage d’une base comprend les tâches suivantes :
 Association d’une base de données à une instance
 Localisation du fichier de contrôle indiqué dans le fichier de paramètres
 lecture du fichier de contrôle pour extraire le nom et l’emplacement des
fichiers de données et de journaux
 Évaluer la cohérence de la base pour voir si une récupération est nécessaire
3-2-3- Démarrer une base en mode open
 Permet d’ouvrir une base de données
 L’ouverture de la base comprend les tâches suivantes :
 Ouverture des fichiers de données en ligne
 Ouverture des fichiers de journaux en ligne
 Les utilisateurs de la base peuvent y accéder
 Les fichiers de données sont accessibles

Syntaxe d’ouverture d’une base :


Il faut se connecter en tant qu’administrateur SYSDBA
Startup
[FORCE]
[RESTRICT]
[PFILE=filename]
[
OPEN [RECOVER]
|MOUNT
|NOMOUNT
]

 FORCE : si la base est déjà ouverte, cette option va la fermer (avec ABORT), puis
l’ouvrir
 RESTRICT : seuls les utilisateurs ayant le privilège RESTRICTED SESSION peuvent
accéder à la base. Utile pour exporter une base, évitant les modifications des données
 OPEN : ouvre la base, permet aux utilisateurs d’y accéder
 RECOVER : un recouvrement de la base sera lancé avant l’ouverture de la base
 NOMOUNT : crée la mémoire SGA et lance les processus d’arrière-plan, mais ne
permet pas d’accéder à la base
 MOUNT : monte la base pour certaines tâches d’administration, mais ne permet pas
aux utilisateurs d’y accéder

Pr. M. E. RIFFI Page 62


SGBD ORACLE

 Pour ouvrir une base de données :


 Non montée :
 Alter database mount
 Alter database open
 Montée :
 Alter database open
3-2-4- Fermer la base de données
 Quand c’est possible, il est intéressant de fermer la base :
 Pour réaliser des sauvegardes complètes de la base
 Pour modifier le fichier d’initialisation
 Dans ce dernier cas, l’instance prend en compte ces modifications dans le prochain
démarrage
3-2-4-1- Fermeture d’une base
 Au moment de la fermeture de la base :
 Les données contenues dans la SGA sont enregistrées sur disque
 Oracle démonte la base en fermant le fichier de contrôle
 Oracle arrête l'instance en restituant la mémoire au système d'exploitation, et libère les
processus d'arrière-plan
3-2-4-2- Syntaxe de fermeture d’une base
Shutdown
[
ABORT |
IMMEDIATE |
NORMAL |
TRANSACTIONAL
]
 ABORT : l'instance est arrêtée brutalement sans enregistrement des données de la
SGA sur disque. Lors de la prochaine ouverture, un recouvrement des données est
nécessaire
 IMMEDIATE : Oracle n'accepte pas de nouvelle connexions, annule les transactions
en cours des utilisateurs connectés, puis déconnectent ceux-ci (la base est fermée dans
un état cohérent)
 NORMAL : Oracle n'accepte pas de nouvelles connexions, par contre il attend que
tous les utilisateurs se déconnecte pour fermer la base de données (mode par défaut)
 TRANSACTIONAL : Oracle n'accepte pas de nouvelles connexions. Il attend que les
utilisateurs aient fini leurs transactions, puis les deconnectent.
3-3- Lister les paramètres
 On dispose de différentes façons pour lister les paramètres du fichier d'initialisation
 Éditer le fichier (à l'aide d'un éditeur)
 Utiliser le dictionnaire de données
 Utiliser la commande show
 Utiliser Oracle Entreprise Manager
Exemples
 C:…>edit initorcl.ora (sous dos)
 C:…> Type initorcl.ora (sous dos)
 Select * from v$parameter (sous SQL*PLUS, WorkSheet, Server Manager)
 Show parameter(sous SQL*PLUS, WorkSheet, Server Manager)
Avec OEM :
 Plus simple
 Mais, on a pas accès à tous les paramètres

Pr. M. E. RIFFI Page 63


SGBD ORACLE

3-4-Modifier des paramètres


 Plusieurs façons :
1. Directement dans le fichier
2. À l'aide de Oracle Entreprise Manager
3. Avec la commande alter system
 Les deux premières façons, nécessite le redémarrage de l'instance
3-5- Création d’une base de données
La création d’une base de données Oracle peut se faire :
 En utilisant l’assistant
 Manuellement avec un script SQL

Création manuelle
La création d’une base de données Oracle manuellement suit les étapes suivantes :
 Choix d’un nom unique pour l’instance et la base
 Création d’un fichier de paramètres d’initialisation
 Démarrage de l’instance
 Exécution de la commande CREATE DATABASE
 Exécution des scripts de postcréation
 Création des tablespaces supplémentaires
 On peut créer un fichier ou modifier un déjà existant :

 L’étape suivante est de démarrer l’instance sans monter la base de données


 Le démarrage doit se faire avec le fichier d’initialisation créé à l’étape précédente

Pr. M. E. RIFFI Page 64


SGBD ORACLE

 Startup nomount pfile=‘c:\...\...\initRiffi.ora’

Exemple :
create database Riffi
datafile
'c:\database\data2.dbf' size 50M
autoextend on next 10M maxsize 150M
logfile
group 1 ('c:\database\redo1.log') size 1M,
group 2 ('c:\database\reo2.log') size 1M
maxinstances 1
maxlogfiles 8
maxlogmembers 4
maxdatafiles 32;

Exécutez des scripts


Catalog.sql (SYS)
Catproc.sql (SYS)
Pupbld.sql (SYS)
Catdbsyn/sql (SYSTEM/MANAGER)
Créez des tablespaces supplémentaires

Catalog.sql
 Doit être exécuté en tant que SYS
 Crée les vues et les synonymes à partir des tables de base de SYS.
 Se trouve dans le répertoire $ORACLE_HOME/rdbms/admin/catalog.sql
Catproc.sql
 Doit être exécuté en tant que SYS
 créer les packages et les procédures nécessaires à l’utilisation de PL/SQL.
 Se trouve dans le répertoire @$ORACLE_HOME/rdbms/admin/catproc.sql
Pupbld.sql
 Doit être exécuté en tant que SYSTEM/MANAER
 Crée la table SQLPLUS_PRODUCT_PROFILE permettant d’accéder au serveur par
SQL*PLUS
 Ce fichier se trouve dans le répertoire @$ORACLE_HOME/rdbms/admin/pupbld.sql
Catdbsyn.sql
 Doit être exécuté en tant que SYSTEM/MANAGER
 Crée des synonymes permettant à System d’accéder à des vues du DBA.
 Ce fichier se trouve dans le répertoire @$ORACLE_HOME/dbs/pupbld.sql

Créez des tablespaces supplémentaires


Créez autant de tablespaces que nécessaire pour répondre aux besoins de votre base de
données.

4- Privilèges et Rôles
 Concepts mis en œuvre pour protéger une BD en accordant/retirant des droits à des
utilisateurs.
 Privilège : droit
 Rôle : ensemble de privilèges

Pr. M. E. RIFFI Page 65


SGBD ORACLE

4-1- Privilèges
Deux types de privilèges :
 Privilège Système : création, modification et suppression d’objets (tables, vues, …)
Grant create table to scott
 Privilège Objet : manipulation des objets d’une BD.
Grant select on Emp to scott
4-1-1- Privilège Système :
4-1-1- 1- Octroi d’un Privilège Système
Grant sys_priv to user|rôle|all with admin option

Sys_priv : liste de privilèges systèmes
User : nom d’un utilisateur
Rôle : rôle déjà crée
All : tous les utilisateurs
With admin option : droit d’assigner, retirer, modifier ou supprimer les privilèges reçus

Exemple : supposons que nous avons deux utilisateurs abdou et yassine


Grant create session to abdou
droit de se connecter à la base
Grant create table, create view to abdou with admin option
droit de créer des tables et des vues. Abdou peut donner ce droit (à yassine, par exemple)

4-1-1-2- Retrait d’un Privilège Système


Revoke sys_priv From user|rôle|all
Exemple
Revoke create session from yassine
Yassine n’a plus le droit de se connecter, même s’il possède un compte

4-1-2- Privilège objet


4-1-2-1- Octroi d’un Privilège Objet
Grant Obj_Priv on Objets to user|rôle|all with grant option

Obj_priv : liste de privilèges systèmes
User : nom d’un utilisateur
Rôle : rôle déjà crée
All : tous les utilisateurs
With grant option : droit d’assigner, retirer, modifier ou supprimer les privilèges reçus

Grant select, insert on scott.emp to yassine


Yassine peut consulter et alimenter la table Emp de scott
Grant select, update (job, Mgr) on scott.emp to abdou
Abdou peut consulter la table emp de scott, mais ne peut modifier que la fonction et le
numéro du supérieur

 Un utilisateur ne peut pas donner des droits sur les objets qui ne lui appartiennent pas,
même s’il est DBA.
 Un utilisateur possède automatiquement tous les droits sur ses propres objets
4-1-2-2- Retrait d’un Privilège Objet
Revoke obj_priv on objet From user|rôle|all

Pr. M. E. RIFFI Page 66


SGBD ORACLE

Exemple
Revoke all privileges on scott.emp From yassine
Retire tous les privilèges de yassine

4-2- Rôle
4-2-1- Utilisation d’un Rôle
 Un rôle est un ensemble de privilèges
 Permet de faciliter l’administration
 Etapes d’utilisation d’un rôle :
 Création d’un rôle vide
 Assignation des privilèges à un rôle
 Assignation du rôle crée à un utilisateur

Create role compt;


Création d’un rôle vide (ne contient aucun privilège)
Grant select, insert, update(job) on scott.emp to compt
Assignation des privilèges au rôle compt
Grant compt to yassine, abdou
Octroi du rôle compt to yassine et abdou
Revoke compt from yassine, abdou
Retrait du rôle compt des utilisateurs yassine et abdou
Drop role compt
Supression du rôle compt
4-2-2- Quelques rôles prédéfinis

4-2-3- Obtenir des informations sur les rôles


Quelques vues du dictionnaire de données:
 DBA_ROLES : tous les rôles de la base de données
 DBA_ROLE_PRIVS : rôles accordés à des utilisateurs et à des rôles
 ROLE_ROLE_PRIVS : rôles accordés à des rôles
 DBA_SYS_PRIVS : privilèges système accordés à des utilisateurs et à des rôles
 ROLE_SYS_PRIVS : privilèges système accordés à des rôles
 ROLE_TAB_PRIVS : privilèges objet accordés à des rôles

5- Profiles
 Ensemble d’actions permettant de limiter l’accès aux ressources système
 Une fois qu’un profile est crée, on ne peut pas dépasser les limites imposées.
 Deux types de limitations :
 Limitation des mots de passe

Pr. M. E. RIFFI Page 67


SGBD ORACLE

 Limitation des ressources système


5-1- Limitation des mots de passe
Plusieurs options permettant d’augmenter la sécurité des mots de passe :
 Failed_Login_Attempts
 Password_Lock_Time
 Password_Life_Time
 Password_Reuse_Time
 Password_Verify_Time
 …
5-2- Gestion des mots de passe

5-3- Verrouillage d'un compte


Paramètre Description
FAILED_LOGIN_ATTEMPTS Nombre d'échecs de connexion avant verrouillage du
compte
PASSWORD_LOCK_TIME Durée, en jours, de verrouillage du compte après le
nombre d'échecs de connexion défini

Le serveur Oracle verrouille automatiquement un compte lorsque la valeur de


FAILED_LOGIN_ATTEMPTS est atteinte. Le compte est déverrouillé automatiquement
après un certain délai défini par le paramètre PASSWORD_LOCK_TIME ou doit être
déverrouillé par l'administrateur de base de données à l'aide de la commande ALTER USER.
Le compte de base de données peut être verrouillé explicitement à l'aide de la commande
ALTER USER. Dans ce cas, le compte n'est pas déverrouillé automatiquement.

5-4- Durée de vie et expiration des mots de passe


Paramètre Description
PASSWORD_LIFE_TIME Durée de vie, en jours, du mot de passe avant expiration
PASSWORD_GRACE_TIME Période de grâce, en jours, pendant laquelle l'utilisateur
peut changer de mot de passe après la première connexion
établie une fois le mot de passe expiré
Le paramètre PASSWORD_LIFE_TIME définit la durée de vie maximale à l'issue de laquelle
un mot de passe doit être changé.
L'administrateur peut définir une période de grâce (PASSWORD_GRACE_TIME) qui
commence après la première tentative de connexion à la base de données, une fois le mot de
passe expiré. Jusqu'à la fin de la période de grâce, l'utilisateur reçoit un message
d'avertissement à chaque connexion. Il doit changer de mot de passe pendant cette période.

Pr. M. E. RIFFI Page 68


SGBD ORACLE

S'il ne le change pas, son compte est verrouillé.


Lorsque le mot de passe est explicitement défini comme ayant expiré, le statut EXPIRED est
affecté au compte de l'utilisateur.

5-5- Historique des mots de passe


Paramètre Description
PASSWORD_REUSE_TIME Période, en jours, pendant laquelle un mot de passe ne peut
pas être réutilisé
PASSWORD_REUSE_MAX Nombre maximum de réutilisations d'un mot de passe
La vérification de l'historique des mots de passe permet d'empêcher un utilisateur de réutiliser
un mot de passe pendant une période donnée. Vous pouvez mettre en oeuvre la vérification à
l'aide de l'un des paramètres suivants :
PASSWORD_REUSE_TIME permet d'indiquer que l'utilisateur ne peut pas réutiliser un mot
de passe pendant un certain nombre de jours.
PASSWORD_REUSE_MAX permet de forcer l'utilisateur à définir un mot de passe différent
des mots de passe précédents.
Si vous affectez une valeur autre que DEFAULT ou UNLIMITED à l'un des paramètres, vous
devez affecter la valeur UNLIMITED à l'autre paramètre.

5-6- Vérifier les mots de passe


Paramètre Description
PASSWORD_VERIFY_FUNCTION Fonction PL/SQL qui vérifie la complexité d'un mot
de passe avant que celui-ci ne soit affecté
Avant d'affecter un nouveau mot de passe à un utilisateur, vous pouvez appeler une fonction
PL/SQL pour vérifier la validité du mot de passe.
Le serveur Oracle fournit un sous-programme de vérification par défaut, mais l'administrateur
de base de données peut également créer une fonction PL/SQL.

Exemple
CREATE PROFILE grace_5 LIMIT
FAILED_LOGIN_ATTEMPTS 3
PASSWORD_LOCK_TIME UNLIMITED
PASSWORD_LIFE_TIME 30
PASSWORD_REUSE_TIME 30
PASSWORD_GRACE_TIME 5;
5-7- Limitations des ressources système
Restreindre l’accès à des ressources du système : processeur, mémoire, …
 Session_Per_User
 CPU_Per_Session
 Connect_Time
 Private_SGA
 …
5-8- Gestion des ressources
 Les limites relatives à la gestion des ressources peuvent s'appliquer au niveau session,
au niveau appel ou aux deux.
 Les limites peuvent être définies par des profils via la commande CREATE PROFILE.

5-8-1- Définir des limites relatives aux ressources au niveau session


Ressource Description
CPU_PER_SESSION Temps CPU total calculé en centièmes de secondes

Pr. M. E. RIFFI Page 69


SGBD ORACLE

SESSIONS_PER_USER Nombre de sessions simultanées autorisées pour chaque


nom utilisateur
CONNECT_TIME Temps de connexion calculé en minutes
IDLE_TIME Périodes d'inactivité calculées en minutes
LOGICAL_READS_PER Nombre de blocs de données (lectures physiques et
_SESSION logiques)
PRIVATE_SGA Espace privé de la mémoire SGA mesuré en octets (dans le
cas d'un serveur partagé uniquement)

Vous pouvez appliquer les limites d'un profil au niveau session et/ou au niveau appel. Les
limites au niveau session s'appliquent à chaque connexion.
Lorsqu'une limite de niveau session est dépassée :
Un message d'erreur est renvoyé, par exemple :
ORA-02391: exceeded simultaneous SESSION_PER_USER limit
Le serveur Oracle déconnecte l'utilisateur.
Remarques :
La durée d'inactivité (IDLE_TIME) n'est calculée que pour le processus serveur. Elle ne tient
pas compte de l'activité de l'application. La limite IDLE_TIME n'est pas affectée par les
interrogations longues et les autres opérations.
LOGICAL_READS_PER_SESSION limite le nombre total d'opérations de lecture en
mémoire et sur disque. Vous pouvez limiter ces opérations pour empêcher les instructions qui
effectuent de nombreuses opérations d'E/S de saturer la mémoire et de monopoliser le disque.
PRIVATE_SGA ne s'applique que dans le cas d'une architecture serveur partagé. Sa valeur
peut être définie en kilo-octets ou en mégaoctets.

5-8-2- Définir des limites relatives aux ressources au niveau appel


Ressource Description
CPU_PER_CALL Temps CPU par appel en centièmes de secondes
LOGICAL_READS_PER _CALL Nombre de blocs de données pouvant être lus par
appel
Les limites au niveau appel s'appliquent pour chaque appel effectué pendant l'exécution d'une
instruction SQL.
Lorsqu'une limite au niveau appel est dépassée :
le traitement de l'instruction est interrompu, l'instruction est annulée, toutes les instructions
précédentes restent inchangées, la session utilisateur reste connectée.

Exemple :
CREATE PROFILE developer_prof LIMIT
SESSIONS_PER_USER 2
CPU_PER_SESSION 10000
IDLE_TIME 60
CONNECT_TIME 480;
5-9- Créer un profile :
Créez un profil à l'aide de la commande CREATE PROFILE :
CREATE PROFILE profile LIMIT
[SESSIONS_PER_USER max_value]
[CPU_PER_SESSION max_value]
[CPU_PER_CALL max_value]
[CONNECT_TIME max_value]
[IDLE_TIME max_value]

Pr. M. E. RIFFI Page 70


SGBD ORACLE

[LOGICAL_READS_PER_SESSION max_value]
[LOGICAL_READS_PER_CALL max_value]
[COMPOSITE_LIMIT max_value]
[PRIVATE_SGA max_bytes]
où :
profile correspond au nom du profil.
max_value correspond à un entier, UNLIMITED ou DEFAULT.
max_bytes correspond à un entier qui peut être suivi de Ko ou Mo, UNLIMITED ou
DEFAULT.

Étapes à suivre pour créer un profile:


 Établir les limitations des mots de passe
 Établir les limitations des ressources système
 Créer le profile (Create Profile… Limit…)
 Attribuer le profile aux utilisateurs qui devront être limités

Exemple :
Create profile prof_user
Limit
Sessions_Per_User unlimited
Connect_Time 45
Private_SGA 15K
Failed_Login_Attempts 3

5-10- Assignation d’un profile


 L’attribution d’un profile à un utilisateur se fait
 Au moment de la création de l’utilisateur (voir gestion des utilisateur)
 Avec l’instruction Alter
Alter user yassine profile prof_user
 Par défaut, un utilisateur se voit assigner le profile DEFAULT
5-11- Suppression d’un profile
 Suppression d’un profile non assignéà aucun utilisateur
Drop profile prof_user
 Suppression d’un profile assigné à un utilisateur
Drop profile prof_user cascade

6- Gestion des utilisateurs


6-1- Objectif
 Créer et configurer un utilisateur d’une BD.
 Se connecter et effectuer des actions sur la BD.
Quand un utilisateur est crée, il ne possède aucun droit, même pas la possibilité de se
connecter

6-2- Etapes de création d’un utilisateur


 choisir un nom d’utilisateur
 choisir une méthode d’authentification
 choisir les tablespaces que l’utilisateur peut utiliser
 Définir les quotas sur chaque tablespace
 Créer l’utilisateur
 Assigner les rôles et privilèges à l’utilisateur

Pr. M. E. RIFFI Page 71


SGBD ORACLE

6-3- Méthode d’authentification


Deux types très utilisés
 Par la Base de Données.
 Par le système d’exploitation
6-3-1- Authentification par la BASE DE DONNÉES
Mode le plus courant, par défaut, avec utilisation de : Identified by
Exemple
Create user yassine identified by Yassine
Connect yassine/Yassine
6-3-2- Authentification par Système d’Exploitation
 Oracle se base sur l’authentification du SE (Système d’Exploitation)
 On n’a pas besoin qu’une seule fois (avantage)
 Si on oublie de fermer sa session SE (se déconnecter), un autre peut accéder la BD
(inconvénient).

Exemple
Create user yassine identified externally

6-4- Création de l’utilisateur


Exemple :
Create user yassine identified by Yassine
Default tablespace def_tbs
Quota 10M on def_tbs
Temporary tablespace tmp_tbs
Quota 5M on tmp_tbs
Profile prof_users
Password expire
Account lock|unlock

6-5- Manipulation des utilisateurs


Modification
 Alter user yassine identified by 123
 Alter user yassine quota 15M on tmp_tbs
 Alter user yassine default tablespace d_tbs temporary tablespace t_tbs
 Alter user yassine account unlock
 ..
Suppression
 Drop user yassine
Supprime un schéma vide
 Drop user yassine cascade
Supprime un utilisateur avec tous ses objets
 Un utilisateur connecté ne pourra pas être supprimé !

7- Sauvegarde et restauration
7-1- Notion de panne
 Plusieurs problèmes peuvent survenir : pannes
 Deux types de pannes
 Pannes système (system failure)
 Pannes disque (media failure)

Pr. M. E. RIFFI Page 72


SGBD ORACLE

7-1-1- Panne système


Plusieurs causes :
 Coupure de courant
 Erreur de l’utilisateur
 …
 Arrêt de l’instance dans un état incohérent
Transaction inachevées
Transaction validées non enregistrées
Pas de perte de données
7-1-2- Panne disque
Causes physiques : Problème disque, par exemple
 perte des données :
 des fichiers de données
 des fichiers d’un tablespace.
 de toutes les données
 d’un fichier de contrôle
Perte de données

7-2- Reprise après la panne


Suivant le type de panne :
 Reprise d’instance : reprise complète et automatique par Oracle au démarrage
de l’instance
 Reprise de média : restauration des données à partir d’une sauvegarde (backup)
manuellement
7-2-1- Démarrage d’une base de données
Startup paramètres
Quelques paramètres :
 NOMOUNT Créé la SGA et démarre les processus en arrière plan mais ne permet pas
l'accès à la base (reste un OPEN à faire).
 MOUNT Monte la base pour certaines activités DBA mais ne permet aucun accès à la
base.
 OPEN Permet aux utilisateurs d'accéder à la base.
 PFILE Spécifie le fichier d'initialisation à prendre en compte.
 RECOVER Démarre la restauration media quand la base démarre.
7-2-2- Arrêt de la base de données
 shutdown ou shutdown normal
 shutdown immediate :
 shutdown transactionnal

7-3- Sauvegarde (backup)


Types de sauvegarde
 Logique
 Physique
 À froid ou hors ligne
 À chaud ou en ligne

7-3-1- Sauvegarde physique


 Cette sauvegarde consiste en la copie des fichiers (et donc les données proprement
dites) qui constituent la base de données.
 Oracle supporte deux types de sauvegardes physique :

Pr. M. E. RIFFI Page 73


SGBD ORACLE

 Sauvegarde hors ligne : à froid (offline backup, cold backup)


 Sauvegarde en ligne : à chaud (online backup, hot backup)

7-3-1-1- À froid (hors ligne)


Pour ce type de sauvegarde :
 Arrêter normalement a base de données
 Shutdown normal
 Shutdown immediate
 Shutdown transactionnel
 Copier les fichiers vers une unité de stockage (disque ou bande).
 Démarrer la base de données

Syntaxe :
Shutdown immediate
- -Copier les fichiers de données à l’aide des commandes du système d’exploitation
Startup

Exemple : sauvegarde à froid


select name from v$datafile;
shutdown immediate;
host copy C:\ORA\DATABASE\SYS1ORC1.ORA c:\froid;
host copy C:\ORA\DATABASE\USR1ORC1.ORA c:\froid;
host copy C:\ORA\DATABASE\RBS1ORC1.ORA c:\froid;
host copy C:\ORA\DATABASE\TMP1ORC1.ORA c:\froid;
host copy C:\ORA\DATABASE\SYSDATA1.DBF c:\froid;
startup open

Remarque
Les fichiers suivants sont sauvegardés :
 Tous les fichiers de données
 Tous les fichiers de contrôle
 Tous les fichiers journaux en ligne
 Le fichier de paramètres d'initialisation
Avantage
 Permet d'obtenir une image complète de la base telle qu'elle existait au moment de son
arrêt.
 L'ensemble complet de ces fichiers pourrait être extrait à partir de la sauvegarde, et la
base de données serait en mesure de fonctionner.

Ce type de sauvegarde physique peut être effectué pour une base de données qui fonctionne
en mode ARCHIVELOG.
Il permet de sauvegarder les données physiques de la base de données alors qu'elle demeure
ouverte.

Pr. M. E. RIFFI Page 74


SGBD ORACLE

7-3-1-2- À chaud (en ligne)


Avantage
 Offre la possibilité de récupération complète jusqu'à un point donné dans le temps
 Permet à la base de données de rester ouverte durant la sauvegarde du système de
fichiers
 Maintenir la base de données ouverte évite que la zone SGA de l'instance soit
réinitialiser.

Rendre une base de données en mode ARCHIVELOG:

1. Vérifier si la base de données n'est pas en mode ARCHIVELOG


2. Modifier le fichier de paramètres d'initialisation (initSID.ora)
3. Arrêter la base de données
4. Monter la base de données
5. Activer le mode ARCHIVELOG
6. Redémarrer la base de données

Exemple de Fichier d'initialisation

# Uncommenting the line below will cause automatic archiving if archiving has
# been enabled using ALTER DATABASE ARCHIVELOG
# Permission d'utiliser le mode ARCHIVELOG
log_archive_start = TRUE
# Destination des archives de REDO
log_archive_dest_1 = "location=c:\oracle\oradata\BD0\archive"
log_archive_dest_2 = "location=c:\temp"
# Format de fichier des archives
log_archive_format = %%ORACLE_SID%%T%TS%S.ARC

a) Rendre une base de données en mode ARCHIVELOG

archive log list;


shutdown immediate;
startup mount;
Alter database archivelog
alter database open;
archive log list;

Pr. M. E. RIFFI Page 75


SGBD ORACLE

Exemple :

b) Réalisation d'une sauvegarde à chaud


Placer le tablespace dans le mode de sauvegarde
Copier tous ses fichiers
Libérer le tablespace (mode normal)

Exemple :
Connect / as sysdba
Alter tablespace Riffi_data begin backup;
-- commandes du système d'exploitation pour copier les fichiers de données;
alter tablespace Riffi_data end backup;

c) Exemple de script (automatiser la sauvegarde à chaud)

ACCEPT repertoire;ACCEPT fichier;SPOOL &fichier


PROMPT archive log list ;;
SELECT ' alter tablespace ' || tablespace_name || ' begin backup ; '
FROM dba_tablespaces
WHERE status NOT IN ('READ ONLY', 'INVALID', 'OFFLINE');
SELECT ' host copy ' || file_name || ' &repertoire '
FROM dba_data_files
WHERE tablespace_name NOT IN (
SELECT tablespace_name
FROM dba_tablespaces
WHERE status IN ('READ ONLY', 'INVALID', 'OFFLINE'));
SELECT ' alter tablespace ' || tablespace_name || ' end backup ; '
FROM dba_tablespaces
WHERE status NOT IN ('READ ONLY', 'INVALID', 'OFFLINE');
PROMPT archive log list ;;
@&fichier

Pr. M. E. RIFFI Page 76


SGBD ORACLE

7-3-2- Sauvegarde logique


 Créé un fichier d’export qui contient une liste d’instructions SQL permettant de
recréer la base de données.
 Peut être effectué même si la base de données est ouverte et fonctionne
 Oracle fournit deux utilitaires:
 Export
 Import

8- utilitaires
8-1- Utilitaires Export/Import

8-1-1- Différents modes d’export/import


Quatre niveaux (modes) :
 Intégral : la totalité de la base est exportée
 Tablespace : tous les objets des tablespace indiqués
 Utilisateur : objets de l’utilisateur, y compris ses privilèges, les index, …
 Table : les tables indiquées, avec ou sans données
8-1-2- Privilèges pré-requis
Actions Privilège ou rôle nécessaire
Exporter son propre schéma CREATE SESSION
Exporter d'autres schémas SYSDBA, EXP_FULL_DATABASE et DBA
Exporter la base entière ou tablespaces EXP_FULL_DATABASE
Importer un objet du fichier DUMP IMP_FULL_DATABASE

8-1-3- Différents façons d’Export/Import


 Session interactive :
 C:\> exp
 ...
 Ligne de commande : C:\> exp userid=system/manager ....

Pr. M. E. RIFFI Page 77


SGBD ORACLE

 Fichier de commandes C:\>exp parfile=c:\backup\parf.prm


 Mode graphique ; Oracle Entreprise Manager

Exemple : Export en session interactive


Après avoir tapé la commande «exp» vous êtes invités à répondre à des questions posées.
C:\> exp
.... >
... >
... >
Exemple : Export en ligne de commande
Export de tous les objets de la base de données.
C:\> exp userid=system/manager file=c:\backup\export_full.dump full=y rows=n

Exemple : Export avec fichier de commandes


Soit le fichier «c:\backup\parfile.prm»
userid=system/manager
file=c:\exp_scott.dmp
log=c:\exp_scott_log.txt
owner=scott
rows=n
La ligne ci-dessous d’un tel fichier :
exp parfile=c:\backup\parfile.prm

Remarque :
Pour avoir l’aide, tapez c:\> exp help=y

8-2- Utilitaire d'export


 Crée un fichier d’export qui contient une copie logique de tout ou une partie de la base
de données
 Ce fichier contient des instructions SQL permettant de recréer les objets de la base de
données.
 La sauvegarde peut être effectué même si la base de données est ouverte et fonctionne
Le fichier d'export
 Ne peut pas accédé directement
 Mais peut être :
 Lu par l'utilitaire Import
 Afficher par le paramètre show de Import (voir l'utilitaire import)

Il y a Trois différents niveaux (modes) d’export:


 Intégral : la totalité de la base est exportée
 Utilisateur : objets de l’utilisateur, y compris ses privilèges, les index, …
 Table : les tables indiquées, avec ou sans données

a) FULL_DATABASE
 Ce mode permet d'exporter tous les objets de la base de données
 On distingue deux types d'exportations :
 Complète : tous les objets sont exportés
 Incrémentale : toutes les modifications des objets de la base de données depuis
le dernier export complet ou incrémental

Pr. M. E. RIFFI Page 78


SGBD ORACLE

b) USER
 Permet d'exporter seulement les objets du schéma d'un utilisateur
 Tables, séquences, triggers, contraintes, privilèges, …

c) TABLE
 Permet d'exporter les tables d'un utilisateur
 On peut exporter les tables avec ou sans données
 On peut exporter aussi les objets qui se rapportent aux tables :
Index, contraintes, privilèges sur ces tables, triggers

d) Privilèges
Actions Privilège ou rôle nécessaire
Exporter son propre schéma CREATE SESSION
Exporter d'autres schémas SYSDBA, EXP_FULL_DATABASE et
DBA
Exporter la base entière EXP_FULL_DATABASE
Importer un objet du fichier DUMP IMP_FULL_DATABASE

e) Différents façons d’Export


 Session interactive :
 C:\> exp
 ...
 Ligne de commande :
 C:\> exp userid=system/manager ....
 Fichier de commandes
 C:\>exp parfile=c:\backup\parf.prm
 Mode graphique ;
 Oracle Entreprise Manager

Exemple : Export en session interactive


Après avoir tapé la commande «exp» vous êtes invités à répondre à des questions
posées.
C:\> exp
.... >
... >
... >
Exemple : Export en ligne de commande
Export de tous les objets de la base de données.
C:\> exp userid=system/manager file=c:\backup\export_full.dump full=y rows=n

Exemple : Export avec fichier de commandes


Soit le fichier «c:\backup\parfile.prm»
userid=system/manager
file=c:\exp_scott.dmp
log=c:\exp_scott_log.txt
owner=scott
rows=n

Pr. M. E. RIFFI Page 79


SGBD ORACLE

La ligne ci-dessous d’un tel fichier :


C:\> exp parfile=c:\backup\parfile.prm

Remarque :
Pour avoir l’aide, tapez c:\> exp help=y

f) Quelques options d'export


Userid Utilisateur qui exporte les données
File Nom du fichier d'export
Log Nom du fichier de journal
Full Si Y, export de toute la base de données
Owner liste des utilisateurs dont les objets seront exportés
Tables Liste des tables qui seront exportées
Constraints Si Y, les contraintes des tables sont exportées
Grants Si Y, les droits sur les objets sont exportés
Indexes Si Y, les index sont exportés
Rows Si Y, les données des tables sont exportés
Inctype Type d'export, incremental ou complete
Parfile Fichier contenant les paramètre d'export

8-3-Utilitaire d'import
 Ne permet de lire que les fichiers crées par l'utilitaire Export
 Permet d'exécuter les commandes SQL générées lors de l'exportation
 Permet de charger tout ou partie des objets de la base de données
 À l'exécution
 Définit les objets importées (tables, …)
 Insère les données
 Crée les index, triggers, …
 Trois modes d'importation :
 Table
 User
 Full_Database
Quelques options d'import
Userid Utilisateur qui va importer les données
File Nom du fichier d'export déjà
Log Nom du fichier de journal
Full Si Y, import de toute la base de données
Fromuser User dont les objets seront importés

Pr. M. E. RIFFI Page 80


SGBD ORACLE

Touser User qui va posséder les objets importés


Constraints Si Y, les contraintes des tables sont importées
Grants Si Y, les droits sur les objets sont importés
Indexes Si Y, les index sont importés
Rows Si Y, les données des tables sont importés
tables Liste des tables à importer
Parfile Fichier contenant les paramètre d'export

Remarques
 Inctype :
 avec la valeur SYSTEM, il faut importer seulement la définition des objets
 avec la valeur RESTORE, importe les objets de la base de données et les
données
 Show : avec la valeur Y, affiche le script des commandes SQL, sans l'exécuter

9- SQL*LOADER
9-1- Introduction
 Utilitaire souple
 Sert à insérer les données dans une table à partir d'un fichier ASCII
 Permet de sélectionner :
 Les colonnes de la table concernées
 Les enregistrement à charger
 Type de chargement (ajout, écrasement, …)

SQL*Loader manipule plusieurs fichiers :


 Données : contenant les données à charger
 Contrôle : décrivant comment les données sont organisées
 Log : contenant un compte rendu de l'exécution
 Bad : contenant les données qui n'ont pas pu être chargées
 Discard : contenant les données qui ne correspondent pas aux critères énoncés dans le
fichier de contrôle

Pr. M. E. RIFFI Page 81


SGBD ORACLE

9-2- Fichier de contrôle


Fournit les informations suivantes à oracle :
 Le jeu de caractères utilisé dans le fichier de données
 Les types de données des champs de ces fichiers
 Comment chaque champ est délimité
 Quelles sont les tables et colonnes à charger

Exemples :
Soit le script de création de la table "clients":
Create table auteurs(
Code integer primary key,
Nom varchar(20) not null,
Derniere_cde date
);

a) Load data
Infile *
Append into table clients
Fields terminated by "," optionally enclosed by '"'
(code, nom, derniere_cde)
Begindata
1,"Ait Ali Alami","20/2/90"
2,"Ben Ali Hachimi","1/2/2007"

 Load DATA : début d'un fichier de contrôle


 Infile : indique où se trouve les données à charger, * s'elles se trouvent dans le même
fichier
 Append : les données vont être ajoutées aux lignes suivantes. On peut aussi utiliser
 Insert : la table doit être vide
 Replace : les lignes existantes seront supprimées
 terminated by : délimiteur utilisé pour séparer les données
 Optionally enclosed : utilisé si les données sont entouré de guillemets
 Begindata : début des données à charger

b) Controle.ctl
Load data
Infile donnees.txt
Append into table clients
Fields terminated by "," optionally enclosed by '"'
(code, nom, derniere_cde)

Avec :
Donnees.txt
100,"Alami","20/2/90"
200,"Hachimi","1/2/2007"
300,"Mouhani","20/2/90"
400,"Harchi","1/2/2007"
500,"Zidani","20/2/90"
600,"Bennani","1/2/2007"

Pr. M. E. RIFFI Page 82


SGBD ORACLE

c) Load data
Infile donnees.txt
Replace into table clients
(code position(1:04) integer,
Nom position(6:25) char,
derniere_cde position(27:41) date
)

Options :
Load data
Infile * ou nom_fich
Badfile nom_fich
Discardfile nom_fich
Discards entier
Insert/append/replace/truncate into table nom_table
when conditions fields délimiteur
(nom_colonne position(debut:fin) type_données
Begindata

Option Description
Load data Début du fichier de contrôle
Infile Fichier de données, * les données seront listés après BEGINDATA
Badfile Fichiers où seront stockées les données erronées
Discardfile Fichier dans lequel seront stockées les données qui ne
correspondent pas aux conditions énoncées par la clause when
Discards Nombre maximum d'enregistrements rejetés avant l'échec du
chargement des données
Insert La table est vide et de nouvelles lignes seront insérées
Append De nouvelles lignes seront insérées à la suite des lignes existantes
Replace Suppression des lignes existantes et insertion de nouvelles lignes
Into table Nom de la table dans laquelle les lignes vont être insérées
When Condition sur une colonne ou une expression pour insérer une
donnée
Fields Délimiteur des champs, dans le cas de données de longueur
variable
Begindata Indique que les données sont listées dans le fichier de contrôle
Commande et arguments de chargement
 Après création du fichier de contrôle, il faut appeler l'utilitaire :
 SQLLDR
ou
 SQLLDR80

Pr. M. E. RIFFI Page 83


SGBD ORACLE

 Cet utilitaire possède plusieurs arguments

Argument Description
Userid Login et mot de passe de l'utilisateur qui a crée la session lors de
l'exécution de la commande
Control Nom du fichier de contrôle
Log Nom du fichier qui rend compte de l'exécution de la commande
Bad Nom du fichier des enregistrements erronés
Data Nom du fichier de données
Discard Nom du fichier des enregistrements qui ne correspondent pas aux
conditions de chargement
Discardmax Nombre d'enregistrements écartés lus avant que la commande
échoue
Parfile Fichier pouvant contenir les arguments de la commande

Exemple :
C:\>sqlldr80 Riffi/mdpass control=fcontl.ctl data=donnees.txt

Exemple de commande et arguments de chargement :

C:\>type fichargum.txt
Control =fcontl.ctl
Data = donnees.txt
Bad= fbad.txt
Log=flog.txt
C:\> sqlldr80 Riffi/mdpass parfile=fichargum.txt

Pr. M. E. RIFFI Page 84

Vous aimerez peut-être aussi