Explorer les Livres électroniques
Catégories
Explorer les Livres audio
Catégories
Explorer les Magazines
Catégories
Explorer les Documents
Catégories
SOMMAIRE
I- INTRODUCTION
V- JOINTURES EXTERNES
VII- PL/SQL
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
1-Insertion de données :
Syntaxe :
INSERT INTO [schéma].tbl_name|vue[@dblink] [(col_name1[, col_name2...])]
VALUES (expr1[, expr2...]);
Ou:
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 :
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 :
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 :
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 "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’ :
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.
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
3- Connexion à 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
– SAVE filename
– GET filename
– START filename
– @ filename
– EDIT filename : fichier afiedt.buf
– SPOOL filename
– EXIT
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.
Exemple :
nom des employés en remplaçant les valeurs NULL du salaire par 0 :
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;
5- Autres fonctions :
Exemple :
affiché le et l’identifiant de l’utilisateur connecté :
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 :
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 + :
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’.
Exemple :
Liste des employés en supprimant le mot Autres :
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 @
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é :
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 :
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 :
Chr(n) : permet d’obtenir le caractère dont le code ASCII ou EBCDIC (selon la machine) est égal à n.
Exemple :
Affichage des caractères qui correspondent aux codes ASCII 66 et 99 :
7-Fonctions 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.
Exemple :
SELECT empno, to_char(daterec, 'MM/YY') "mois d'embauche"
FROM employes
suivant. courant.
– 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 (+).
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;
1-Variables de Substitution
Exemple :
SELECT noemp, nom, salaire, nodep
FROM employe
WHERE noemp = &employee_num;
Resultat :
Enter value for employee_num: 123
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
Résultat :
Enter value for travaille: ANALYST
5-1-Exemple :
Exemple :
SQL> SELECT noemp, nom, trav, &&column_name
2 FROM employe
3 ORDER BY &column_name;
Résultat :
Enter value for column_name: nodep
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
Exemple :
Créer une variable pour stocker le nom de département.
SQL> SELECT *
2 FROM departement
VII- PL/SQL
– 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)
En-tête
IS ou AS
Section Déclaration
BEGIN
Section Exécutable
EXCEPTION (optionnel)
Section Exception
END;
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.
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
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-3- Comment créer une procédure côté serveur avec Procedure Builder
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
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.
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-6- Comment afficher la valeur des paramètres OUT avec 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.
Pour une procédure contenant de multiples paramètres, vous pouvez utiliser plusieurs
méthodes pour spécifier la valeur des 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.
DECLARE
v_id NUMBER := 7900;
BEGIN
raise_salary(v_id); --appel de la procédure
COMMIT;
...
END;
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é.
Exceptions gérées
Avec SQL*Plus :
Syntaxe
DROP PROCEDURE procedure_name
Exemple
SQL> DROP PROCEDURE raise_salary;
Procédure supprimée.
Remarque :
Le bloc PL/SQL doit comporter au moins une instruction RETURN.
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);
END tax;
Exemple :
Affiche l'impôt sur la base d'une valeur spécifiée.
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.
Avec SQL*Plus :
Syntaxe
DROP FUNCTION function_name
Exemple
SQL> DROP FUNCTION get_sal;
Syntaxe
Exemple :
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.
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 /
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.
Aucun corps de package n'est nécessaire pour prendre en charge cette spécification de
package.
20 miles =32.186 km
Exemple 1 : appel d'une fonction depuis une procédure dans le même package.
Exemple 4 : appel d'une procédure de package dans une base de données distante.
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
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.
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.
Exemple
Tentative d'insertion d'une ligne dans la table EMP en dehors des heures de bureau.
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;
Exemple :
Créez un trigger permettant uniquement à certains employés d'avoir un salaire supérieur à
1000 unités.
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.
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
Exemple
SQL> DROP TRIGGER secure_emp;
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;
1- INTRODUCTION
1-1- Objectifs
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
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é
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)
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;
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
É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)
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
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
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 :
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;
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
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
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
où
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
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
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
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
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.
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.
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]
[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.
Exemple :
Create profile prof_user
Limit
Sessions_Per_User unlimited
Connect_Time 45
Private_SGA 15K
Failed_Login_Attempts 3
Exemple
Create user yassine identified externally
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)
Syntaxe :
Shutdown immediate
- -Copier les fichiers de données à l’aide des commandes du système d’exploitation
Startup
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.
# 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
Exemple :
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;
8- utilitaires
8-1- Utilitaires Export/Import
Remarque :
Pour avoir l’aide, tapez c:\> exp help=y
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
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
Remarque :
Pour avoir l’aide, tapez c:\> exp help=y
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
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, …)
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"
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"
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
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
C:\>type fichargum.txt
Control =fcontl.ctl
Data = donnees.txt
Bad= fbad.txt
Log=flog.txt
C:\> sqlldr80 Riffi/mdpass parfile=fichargum.txt