Oracle:: Architecture Et Concepts de Base

Télécharger au format pdf ou txt
Télécharger au format pdf ou txt
Vous êtes sur la page 1sur 131

FSDM-FES

Oracle : Architecture et concepts


de base
Pr. Omar El Beqqali

[email protected]
elbeqqali.olympe.in

O. El Beqqali 1
FSDM-FES
Oracle Enterprise Edition
I0G, 11G…

Partitionnement Real Application


Clusters

Oracle Enterprise Advanced


Manager Packs Security

O. El Beqqali 2
FSDM-FES
Caractéristiques ORACLE (++)
 Performance
 Fiabilité
 Disponibilité sur toutes les plate-formes
 Capacités d’extension (cluster,…)
 Connexion et Sécurité
 Portabilité
 Fonctionnalités étendues
Caractéristiques (--)
 Prix
 Complexité de mise en œuvre
 Gourmandise système
O. El Beqqali 3
FSDM-FES
Tâches de l'administrateur de base de données

 Planification et création de bases


 Gestion de la disponibilité des bases
 Gestion des structures physiques et
logiques
 Gestion de la sécurité
 arrêter et démarrer la base
 Sauvegarde et récupération
 Réglage des bases
 Contrôler et optimiser les performances
O. El Beqqali 4
Sommaire

 L'architecture d'Oracle  Les fichiers journaux


 Les transactions  Les espaces de disque logiques
 Les processus d'arrière-plan  La gestion automatique des fichiers
 Les outils d'administration  La gestion du stockage
(SQL*Plus et iSQL*Plus)  Les segments UND+
 L'architecture Oracle Net  Les types de données
 Oracle Enterprise Manager  La création des tables
 L'installation d'Oracle  La gestion des tables
 La gestion d'une instance  Les index
 La création d'une base de  Les vues et autres objets
données  Les profils
 Dictionnaire de données  Les utilisateurs
 Le fichier de contrôle  Les privilèges

O.EL BEQQALI 5
PLAN

La base de données

L’instance
Architecture
La SGA et la PGA
d’Oracle

O.EL BEQQALI 6
Les méthodes de connexion

 SQL*Plus Ligne de commande


 sqlplus

 SQL*Plus Windows
 sqlplusw

O.EL BEQQALI 7
Les méthodes de connexion

iSQL*Plus
Version Web, accessible à
partir d’un navigateur. iSQLPlus
http://localhost:port/isqlplus

O.EL BEQQALI 8
Utilisateurs SYS et SYSTEM
Comptes créés automatiquement avec rôle DBA

SYSTEM
SYS
• Mot de passe :
• Mot de passe : manager
change_on_install
• Propriétaire de tables
• Propriétaire du internes
dictionnaire de supplémentaires
données de la utilisées par les outils
base Oracle

O.EL BEQQALI 9
Présentation des principaux composants

Processus
Instance
utilisateur Zone de mémoire Mémoire SGA
partagée
Cache de
Cache Tampon de
tampons de
"library" la base journalisation
Processus Cache du de données
serveur dictionnaire Zone de Zone de mémoire
de données mémoire Java LARGE POOL
PGA
PMON SMON DBWR LGWR CKPT Autres

Fichiers de Fichiers de Fichiers de


Fichier de données contrôle journali- Fichiers de
paramètres sation Journalisation
archivés
Fichier
de mots
de passe
Base de données

O.EL BEQQALI 10
Instance Oracle
 Une instance Oracle :
 permet d'accéder à une base de données
Oracle,
 n'ouvre qu'une seule base de données,
 est constituée de structures de processus
d'arrière-plan et de structures mémoire.
Instance
Zone de mémoire Mémoire SGA
partagée
Structures
Cache
Cache Tampon de mémoire
de tampons
"library" journalisation
de la base
Cache du de données
dictionnaire Zone de mémoire
Zone de
de données mémoire Java LARGE POOL
Structures
PMON SMON DBWR LGWR CKPT Autres de processus
d'arrière-plan

O.EL BEQQALI 11
Base de données et instance
Mémoire partagée accèdée par tous les threads
SGA (System Global Area)

Thread Thread Thread Thread Autres


PMON SMON LGWR DBWR Thread
Thread Thread Thread Une instance
Utilisateur 1 Utilisateur 2 Utilisateur N
Mémoire Mémoire Mémoire
Privée du Privée du Privée du
Thread 1 Thread 2 Thread N
Oracle.exe

Fichiers Une base de


Fichiers bases Fichiers Fichiers
D’adminis données
de données Redo-log de contrôle -tration
Fichiers d’une base
O.EL BEQQALI 12
Présentation générale (2)

 La base de données

Fichier (s) de données Fichier (s) de contrôle Fichier (s) de journalisation


Fichier (s) de journalisation
archivés
Base de données DB_name

 est constituée:
• Un ou plusieurs fichiers de données qui contiennent les données
proprement dites.
• D’au minimum un fichier de contrôle qui contient des informations
de contrôle sur la BD.
• D’au minimum deux groupes de fichiers de journalisation qui
enregistrent toutes les modifications apportées à la base.
 Les différentes catégories de base de données
• BD transactionnelles (ou OLTP pour OnLine Transaction
Processing)
• BD décisionnelles
• Mixtes.
O.EL BEQQALI 13
La base de données
 Une base de données Oracle est l’ensemble de 3 types de
fichiers.
 Les fichiers de données
 Les fichiers de contrôles
 Les fichiers des journaux

Fichiers de données

Fichier de
mot de passe
Fichiers de contrôles

Fichiers
Fichier journaux
paramètre archivées
Fichiers des journaux

 Une base de données Oracle est désignée par le nom de la BD, avec le
paramètre « db_name» non modifiable.
 sql> show parameter DB_NAME;
O.EL BEQQALI 14
La base de données
 Fichier de contrôle

 Le nom de la base de données.


 La date/heure de création de la BD.
 Le nom des fichiers constitutifs de la base.
 Les noms des espaces de disques logiques.
 La taille de bloc de données par défaut.
 L’emplacement des autres fichiers de la BD (contrôle,
journalisation).
 Le numéro de séquence du fichier journal en cours
d’utilisation;
 Des informations sur les points de reprise (checkpoint).
 L’emplacement des archives.

O.EL BEQQALI 15
La base de données
 Fichier de contrôle
 L’information du fichier de contrôle
• V$CONTROLFILE: affiche l’ensemble des fichiers de ctrl de la BD
• V$PARAMETER: permet d’afficher la valeur du paramètre « control_files »
• V$CONTROLFILE_RECORD_SECTION: affiche l’ensemble des informations
concernant les enregistrement dans les fichiers de contrôle de la BD.
 Le multiplexage
• CONTROL_FILES =‘CONTROL01.CTL’,’CONTROL02.CTL’
• En raison de l’importance du fichier de contrôle, Oracle permet de multiplexer ce
fichier pour en avoir plusieurs copies, afin d’éviter toute corruption ou perte du
fichier.

Sql> show parameter control_files


Name type value
-------------------------------------------
Control_files string ‘C:\oracle\oradata\dba\CONTROLFIE\CONROL01.CTL’

Sql> ALTER SYSTEM SET CONTROL_FILES= ‘C:\......\CONTROL01.CTL’,


‘D:\....\CONTROL02.CTL’SCOPE=SPFILE;
Système modifié.

O.EL BEQQALI 16
La base de données
 Fichier de journalisation (redo Log)
 Ils enregistrent toutes les modifications apportées à la BD;
 Ils sont organisés en groupes écrits de manière circulaire, les informations
sauvegardées sont donc périodiquement écrasées.
 Ils sont utilisés pour la récupération de l’instance ou ses fichiers après un arrêt anormal.
 Ils sont organisés en groupes (au min 2) composés d’un ou plusieurs membres (min un)
et ils sont créés lors de la création de la BD. À l’intérieur d’un groupe, les membres
sont écrits simultanément en miroir par l’instance Oracle (processus LGWR) et
contiennent la même information.

Groupe 1

Membre 1.a Membre 1.b Membre 1.c

Groupes de fichier (s) Groupe 2


de journalisation
Membre 2.a Membre 2.b Membre 2.c
 chaînés circulairement ; ce qui signifie l’un se remplit, puis l’autre, puis le
premier, etc
 Les fichiers de journalisation sont très importants pour la sécurité de la BD.
Gérés à 100% par Oracle V$LOG et V$LOGFILE
O.EL BEQQALI 17
La base de données
 Fichier de données (TABLESPACES)
Les fichiers de données contiennent les données proprement dites de
Définition
la BD (tables et index notamment). Ils sont logiquement regroupés en
tablespaces.

System0.dbf data01.dbf data02.dbf

 Un tablespace est une unité logique de stockage composée


d’un ou plusieurs fichiers physiques.
.
 Une base de données comporte au minimum deux fichiers de données
appartenant à deux tablespaces réservés pour Oracle (SYSTEM et
SYSAUX) qui ne doivent contenir aucune donnée applicative.

O.EL BEQQALI 18
TABLESPACE (segment, extent)

Segement A (extent 1) Segement A (extent 2)


Bloc Oracle
Blanc = libre
Autre couleur = alloué

Segement B (extent 1)

Segement C (extent 1)

Segement B (extent 2)

data01.dbf data02.dbf

O.EL BEQQALI 19
Structure logique (TABLESPACE)

 La structure logique définit le mode d'utilisation de l'espace


physique d'une base de données.
 Cette structure possède une hiérarchie composée de tablespaces,
de segments, d'extents et de blocs.

Tablespace

Fichier de données
Segment Segment

Extent Blocs

O.EL BEQQALI 20
Tablespaces SYSTEM et
Non-SYSTEM
Tablespace SYSTEM
contient : Tablespace Non-SYSTEM
• Des informations contient :
relatives au dictionnaire de • Les Rollback segments
données
• Les segments
• Un rollback segment temporaires
SYSTEM
• Les données
applicatives
 Tablespace Temporaire :
• Les index
Utilisé pour les opérations
de tri ne peut pas contenir
d’objets permanents

O.EL BEQQALI 21
La base de données

 Organisation du stockage
 Les fichiers de données sont 1,1
BD
découpés en blocs d’une taille
donnée (4 ko, 8 Ko, …) 1,1

 L’espace occupé par un objet 1,n


1,n
1,n
dans un tablespace est désigné Schéma Tablespace 1,1 Fichier
par le terme générique de 1,1
1,1 0,n
segment. Il y a 4 types de Table,
ségments: Index,
1,n Cluster
• Les segments de table 1,1
• Les segments d’index 1,n
Bloc Oracle Bloc OS
• Les segments d’annulation 1,n 1,1
• Les segments temporaires.
Structure logique Structure physique
 Un segment appartient à un
tablespace et est constitué Tablespace
d’extensions (extents).
Segment Segment
 Une extension est un ensemble
Extent
de blocs contigus dans un fichier
de données.
Blocs Blocs
O.EL BEQQALI 22
Structure Logique d’
d’une Base de
Données

Base de
données

Tablespace Fichier de
données

Segment
Logique Physique
Extent

Bloc
Bloc S/E
Oracle
O.EL BEQQALI 23
L’instance
 La SGA (Vue d’ensemble)
La SGA (System Global Area) est une zone de mémoire partagée par les différents
Définition processus de l’instance. Elle est allouée au démarrage de l’instance et libérée lors l’arrêt
de l’instance. Elle est dimensionnée par un ensemble de paramètres définis dans le

fichier de paramètres.

 La SGA comporte les structures suivantes:


– Database Buffer Cache: cache de données;
– Redo Log Buffer: mémoire tampon pour l’enregistrement des modifications apportées à la BD;
– Shared Pool: zone de partage des requêtes et du DD Oracle;
– Java Pool: mémoire utilisée par la machine virtuelle Java intégrée;
– Large Pool: zone mémoire optionnelle utilisée par différents processus dans des configurations
particulières;
– Streams Pool: zone de mémoire utilisée par la fonctionnalité Streams (fonctionnalité qui permet
de faire circuler des informations entre processus);

• La SGA contient aussi une structure SGA fixe qui contient des
informations sur l’état de la BD et le l’instance, et sur les verrous. Elle
n’est dimensionnée pae le DBA; sa taille est faible qlq Ko.
• Taille définie à l'aide du paramètre SGA_MAX_SIZE

O.EL BEQQALI 24
L’instance
 Shared Pool (Zone de mémoire partagée)
 Elle permet de stocker :
• les dernières instructions SQL exécutées,
• les dernières définitions de données utilisées.
 Elle est constituée de deux structures mémoire clés liées aux
performances :
• Cache "library"
• Cache du dictionnaire de données
 Sa taille est définie par le paramètre SHARED_POOL_SIZE.
Zone de mémoire
partagée

Cache
"library"
ALTER SYSTEM SET
Cache du
SHARED_POOL_SIZE = 64M; dictionnaire
de données

O.EL BEQQALI 25
L’instance
 Cache « Library »
 Le cache "library" conserve des informations sur
les dernières instructions SQL et PL/SQL
utilisées.
 Il permet le partage des instructions
fréquemment utilisées.
 Il est géré par un algorithme LRU.
 Il est composé de deux structures :
• la zone SQL partagée,
• la zone PL/SQL partagée.
 Sa taille dépend du dimensionnement de la zone
de mémoire partagée.

O.EL BEQQALI 26
L’instance

 Cache «dictionary»: Cache du dictionnaire de données


 Le cache du dictionnaire de données contient les dernières
définitions utilisées dans la base.
 Il contient des informations sur les fichiers, les tables, les index,
les colonnes, les utilisateurs, les privilèges et d'autres objets de
la base de données.
 Au cours de l'analyse, le processus serveur recherche les
informations dans le cache du dictionnaire pour résoudre les
noms d'objet et valider l'accès.
 La mise en mémoire cache des informations du dictionnaire de
données réduit le temps de réponse aux interrogations et aux
instructions LMD.
 La taille du cache dépend du dimensionnement de la zone de
mémoire partagée.

O.EL BEQQALI 27
L’instance
 Redo Log Buffer (Tampon de journalisation)
 Il enregistre toutes les modifications apportées aux blocs de
données de la base.
 Sa principale fonction est la récupération de données.
 Les modifications enregistrées constituent des entrées de
journalisation.
 Les entrées de journalisation contiennent des informations
permettant de reconstruire des modifications.
 La taille du tampon est
définie par le paramètre
LOG_BUFFER.
Redo Log Buffer

O.EL BEQQALI 28
L’instance
 Zone de mémoire LARGE POOL
 Zone facultative de la mémoire SGA
 Elle réduit la charge de la zone de mémoire partagée.
• la mémoire allouée par session (UGA) au serveur partagé
• les processus serveur d'E/S
• les opérations de sauvegarde et de restauration ou RMAN
• les mémoires tampon des messages d'exécution en parallèle
– PARALLEL_AUTOMATIC_TUNING = TRUE
 Elle n'utilise pas de liste LRU.
 Sa taille est définie par le paramètre
LARGE_POOL_SIZE.

O.EL BEQQALI 29
L’instance

 Zone de mémoire Java


 La zone de mémoire Java répond aux
besoins d'analyse des commandes Java.
 Elle est nécessaire si Java est installé et
utilisé.
 Sa taille est définie par le paramètre
JAVA_POOL_SIZE.
 Zone Streams Pool
 Est dimensionnée par le paramètre
STREAMS_POOL_SIZE (0 par défaut)
O.EL BEQQALI 30
L’instance
 Mémoire PGA
 Mémoire réservée à chaque processus
utilisateur qui se connecte à une base de
données Oracle. PGA

 Elle est allouée lorsqu'un processus est Processus


serveur
créé.
 Elle est libérée à la fin du processus. Processus
 Elle n'est utilisée que par un processus. utilisateur
 Les tables v$sesstat, v$statname,
permettent
de déterminer la taille de la PGA pour une
session O.EL BEQQALI 31
L’instance

 Mémoire PGA
 La taille maximum de la PGA est influencée en plus par les
paramètres d'initialisations suivants :
• sort_area_size
• hash_area_size
• bitmap_merge_area_size and create_bitmap_area_size
 D’autres paramètres influencent aussi la taille de la PGA d’une
session
• OPEN_LINKS : nombre de databases link ouverts
• DB_FILES : nombre de fichiers de données pouvant être ouverts
 En mode serveur dédié il est difficile de gérer l’allocation des
paramètres *_area_size. Depuis la 9i le DBA peut fixer sa PGA
maximale grâce au paramètre :
• PGA_AGGREGATE_TARGET

O.EL BEQQALI 32
L’instance
 La Zone de tri
 Une zone de tri est associée à un Serveur (dédié ou non) pour
traiter des ordres nécessitant des tris (Group by, Order by, Join,
...)
 la taille de la zone de tri est déterminée par le paramètre
SORT_AREA_SIZE (en bytes)
• Par défaut cette taille est de 65000 bytes
• Si cette zone est pleine un Segment temporaire est généré
 SORT_AREA_RETAINED_SIZE (exprimée en byte, 0 min,
Sort_area_size par défaut et max): espace à ne pas libérer en cas
d'écriture dans le segment temporaire tuning de la zone de tri ;
table v$sysstat
Sql> SELECT name, value FROM v$sysstat
WHERE name in ('sorts (memory)',
'sorts (disk)');
O.EL BEQQALI 33
L’instance

 Processus utilisateur
 Programme qui demande une interaction avec le serveur Oracle.
 Ce processus doit d'abord établir une connexion.
 Il n'entre pas directement en interaction avec le serveur Oracle.

Processus
serveur
Processus
utilisateur
Connexion
établie

Utilisateur de la base de données

O.EL BEQQALI 34
L’instance
 Processus serveur
 Programme qui entre directement en interaction avec le serveur
Oracle.
 Il répond aux appels générés et renvoie les résultats.
 Il peut s'agir d'un serveur dédié ou d'un serveur partagé.

Processus
Connexion serveur
établie Session crée
Processus Serveur Oracle
utilisateur

Utilisateur de la base de données

O.EL BEQQALI 35
Processus d'arrière-plan

 Gèrent et appliquent les relations entre


les structures physiques et les structures
mémoire.
 Processus d'arrière-plan obligatoires
• DBWn *PMON
• CKPT
• LGWR *SMON
 Processus d'arrière-plan facultatifs
• ARCn LMDn RECO
• CJQ0 LMON Snnn
• Dnnn Pnnn
• LCKn QMNn
O.EL BEQQALI 36
Processus d'arrière-plan

 Processus database writer (DBWn) DBWn écrit dans les


cas suivants :
Instance  point de reprise
Mémoire SGA  aucune mémoire
Cache tampon disponible
de tampons
de la base
de données  tablespace hors
ligne
DBWn  tablespace en
lecture seule
 DROP ou
Fichiers Fichiers Fichiers TRUNCATE sur une
de de de
données contrôle journa- table
lisation
 BEGIN BACKUP
Base de données
O.EL BEQQALI
sur un tablespace37
Processus d'arrière-plan

 Processus LGWR (Log Writer)


Instance  LGWR écrit dans les
Mémoire SGA cas suivants :
Tampon de
journali-  validation
sation
 un tiers du cache
est occupé
DBWn LGWR  la journalisation
atteint 1 Mo
 avant que le
Fichiers Fichiers Fichiers
de
processus DBWn
de de
données contrôle journa- ne procède à une
lisation
opération d'écriture
Base de données

O.EL BEQQALI 38
Processus d'arrière-plan

 Processus CKPT (Checkpoint)  Ce processus est


chargé :
Instance
Mémoire SGA
 de signaler
DBWn aux
points de
reprise,
DBWn LGWR CKPT  de mettre à jour
les fichiers de
contrôle avec les
Fichiers Fichiers Fichiers
de de de informations sur
données contrôle journa-
lisation le point de
Base de données reprise.
O.EL BEQQALI 39
Processus d'arrière-plan
 Processus ARCn (processus d'archivage)
 Processus d'arrière-plan facultatif
 En mode ARCHIVELOG, il archive automatiquement les fichiers
de journalisation en ligne
 Il enregistre toutes les modifications apportées à la base de données
Instance
Mémoire SGA

DBWn LGWR CKPT ARCn

Fichiers
de
journali-
Fichiers Fichiers Fichiers sation
de de de archivés
données contrôle journa-
lisation

Base de O.EL
données
BEQQALI 40
Processus d'arrière-plan

 Processus SMON (System Monitor)


 Responsabilités :
Instance
Mémoire SGA  Récupération de
l'instance :
• réimplémente des
modifications dans
les fichiers de
journalisation,
SMON
• ouvre la base de
données pour
permettre l'accès
Fichiers Fichiers Fichiers
de de de aux utilisateurs,
données contrôle journa-
lisation • annule les
transactions non
Base de données
validées.
 Fusion de l'espace libre
O.EL BEQQALI 41
Processus d'arrière-plan

 Processus PMON (Process Monitor)


Instance  Suite à l'échec de
Mémoire SGA
processus, PMON
exécute des
opérations
de nettoyage :
PMON
 annule la
transaction
 libère des verrous
Mémoire PGA  libère d'autres
ressources

O.EL BEQQALI 42
Administration de B.D : création

 Création d'une base


 Variables d’environnement à positionner
• ORACLE_SID=nom_de_instance
• ORACLE_HOME=home_oracle
• ORACLE_BASE=home_des_bases_Oracle

 Outils de lancement des commandes


• Sqlplus
• Le Database Configuration Assistant. Outil
graphique permettant de créer et modifier les bases
• implicite lors de l’installation du serveur Oracle

O.EL BEQQALI 43
Administration de B.D : création (suite)
 Création d'une base
 Etapes à suivre pour créer une base manuellement
1. Définir l’arborescence de la base
ora9data->dbtest->admin, tssys, tsusers, tstemp, tsrbs, …
2. Définir les scripts de création de la base(crDBTEST.sql)
3. Définir le fichier d’initialisation (initDBTEST.ora)
Si Win : Créer le service Win pour la base.
C:\>oradim –new –sid dbtest –intpwd manager –startmode auto –pfile
c:\ora9data\dbtest\admin\initDBTEST.ora
4. Lancer Sqlplus
c:\> sqlplus
username:sys as sysdba password:manager
5. Exécuter les commandes contenues dans crDBTEST.sql
- démarrer une instance (nomount)
- exécuter CREATE DATABASE …
- exécuter catalog.sql (pour les vues du dictionnaires)
- ajouter des tablespaces supplémentaires pour une meilleure orgainisation tstemp, tsrbs, tsutil
- ajouter des rbs supplémentaires si mode de gestion d’annulations manuelles
- exécuter catproc.sql (pour l’option procédurale)
- exécuter les scripts supplémentaires suivants : catdbsyn.sql
- fixer le tablespace temporaire des users SYS et SYSTEM vers le tablespace temporaire

Voir Annexes pour plus de détails sur initSid.ora, spfile et crsid.sql


O.EL BEQQALI 44
Exemple de Fichier des Paramètres
# Initialization Parameter File: initU15.ora
db_name = U15
control_files = (/DISK1/control01.con,
 /DISK2/control02.con)
db_block_size = 8192
db_block_buffers = 2000
shared_pool_size = 30000000
log_buffer = 64K
processes = 50
db_files = 100
log_files = 10
max_dump_file_size = 10240
background_dump_dest = (/home/disk3/user15/BDUMP)
user_dump_dest = (/home/disk3/user15/UDUMP)

O.EL BEQQALI 45
Administration de B.D : création (suite)

 Création d'une base


Code SQL

CREATE DATABASE [nombase


[nombase]]
[CONTROLFILE REUSE]
[LOGFILE {[GROUP entier
entier]] logFileSpec, …}]
…}]
[MAXLOGFILES entier
entier]]
[MAXLOGMEMBERS entierentier]]
[MAXLOGHISTORY entier
entier]]
[MAXDATAFILES entier
entier]]
[MAXINSTANCES entier
entier]]
[{NOARCHIVELOG
[{ NOARCHIVELOG | ARCHIVELOG}]
[CHARACTER SET nomCaracterSet
nomCaracterSet]]
[NATIONAL CHARACTER SET nomCaracterSet
nomCaracterSet]]
[DATAFILE {dataFileSpec
{dataFileSpec [ClauseAutoExtend], …}]
…}]
[default_temp_tablespace]
[undo_tablespace_clause]
[SET STANDBY DATABASE {PROTECTED UNPROTECTED}]
[set_time_zone_clause]

O.EL BEQQALI 46
Le fichier de paramètres

 Un fichier de paramètres inclut l’ensemble des paramètres de configuration du


serveur BD.
 L’instance lit ce fichier et fonctionne selon les valeurs des paramètres qui y sont
spécifiés.
 Il existe deux types de fichiers de paramètres:

PFILE (parameter file) SPFILE (server parameter file)


Fichier texte Fichier binaire
Modifiable via un éditeur texte Modifiable via SQL
Disponible sur la machine de démarrage Centralisé (sur le serveur uniquement)

Nommé init%.ora Nommé spfile%.ora


Modification à froid Modification à chaud
47
O.EL BEQQALI
Administration de base : états

 États d’une base


 Une Base de données comporte les états suivants:

BASE FERMEE
Base de données fermée

NOMOUNT

Instance montée. Utilisation : création d'une base, créer un


fichier de contrôle

MOUNT
Instance démarrée et fichiers de contrôle ouverts
. Utilisation : tâches de maintenance tels que renommer les fichers
(données, rédos, ...),
activer/désactiver le mode avec archive, recouvrer les données, ...

OPEN

. Instance démarrée fichiers de contrôle et de données ouverts


. Utilisation : mode de fonctionnement normal

O.EL BEQQALI 48
Démarrage et Arrêt par Etapes

OPEN
Tous les fichiers
définis pour cette
instance dans le
MOUNT fichier de contrôle
sont ouverts.
Fichier de
contrôle ouvert
pour cette
NOMOUNT instance.

Instance
démarrée.

SHUTDOWN

STARTUP PFILE=/DISK1/initMABASE.ora
O.EL BEQQALI 49
Démarrage et Arrêt par Etapes (2)

O.EL BEQQALI 50
Administration de B.D

 Démarrage d'une base


 Procédure Générale
• Positionner les variables d'environnement ORACLE_SID et
ORACLE_HOME
• démarrage de la base possible par paliers (startup nomount, startup
mount, et startup open)
• posséder les privilèges appropriés (SYSDBA, SYSOPER, OSDBA ou
OSOPER, ...)
• indiquer si nécessaire le fichier des paramètres
• démarrer la base sous sqlplus (Unix et NT) ou via les services(NT) ou
Oradim (NT), à travers Entreprise
• Manager: database administration assistant (NT ou Unix)
 Syntaxe de la commande
• STARTUP [FORCE]
[RESTRICT] [PFILE=fich_param]
[OPEN | MOUNT | NOMOUNT]
• ALTER DATABASE [nom_base] MOUNT | OPEN
O.EL BEQQALI 51
Gestion des utilisateurs

O.EL BEQQALI 52
Tâches d'administration de base

 Démarrage d'une base (Exemple)


 Lancer SQLPLUS
$sqlplus
username : sys as sysdba password : manager

• #démarrer et ouvrir les fichiers de la base


SQL >startup ;
idem
SQL>startup OPEN
pfile= /user/oracle/v9/dbs/initCOURS.ora
• #démarrer la base par paliers
$ SQLPLUS
username : sys as sysdba password : manager
# Instance démarrée, fichiers de contrôles ouverts
SQL >startup mount ;
#En plus les fichiers de données sont ouverts
SQL > alter database open ;

O.EL BEQQALI 53
Administration de BD : SHUTDOWN
 Arrêt d'une base
 Procédure Générale
• Posséder les privilèges OS (osdba, osoper)
• positionner les variables d'environnement (ORACLE_SID et ORACLE_HOME)
• Lancer l'outil SQLPLUS
 Syntaxe de la commande
• SHUTDOWN [NORMAL | IMMEDIATE | ABORT |
TRANSACTIONAL]
– NORMAL
attend la déconnexion de l'ensemble des utilisateurs
– IMMEDIATE
Invalide les transactions en cours et déconnecte les users
– ABORT
Arrêt violent de l'instance (recouvrement utile : SMON)
– TRANSACTIONAL
Contrairement à IMMEDIATE, laisse finir les transactions
en cours
O.EL BEQQALI 54
Mode d’arrêt d’une instance de BD

Mode d'arrêt A I T N

Permet de nouvelles connexions Non Non Non Non

Attend la fin des sessions en cours Non Non Non Oui


Attend la fin des transactions en
cours Non Non Oui Oui

Non Oui Oui Oui


Applique un point de reprise et
ferme les fichiers

Mode d'arrêt : A = ABORT I = IMMEDIATE


T = TRANSACTIONAL N = NORMAL
Administration de BD : SHUTDOWN
(suite)
 Arrêt d'une base (Exemple)
 Lancer SQL
username : sys as sysdba
# arrêt normal avec attente de déconnexion
SQL>shutdown
ou
# Arrêt immédiat : Annulation des transactions en cours et
déconnexion .
# Les utilisateurs ont le message suivant :
# ORA-03113 : end-of-file on communication channel
• SQL>shutdown immediate ;
ou
# Arrêt brutal (pas d’attente de déconnexion, pas
d'invalidation de transactions en cours)
• SQL >shutdown abort;

O.EL BEQQALI 56
Administration de BD
 Suspension et réactivation de la base
 Afin de permet une sauvegarde base en ligne sans
activité de mise à jour dans les fichiers de données
il est possible maintenant de suspendre l’activité
de mise à jour
 Commande à exécuter pour suspendre la base
• SQL>ALTER SYSTEM SUSPEND

 Commande à exécuter pour revenir en mode


normal
• SQL>ALTER SYSTEM RESUME

 NOTE : les règles de sauvegarde base ouverte


doivent être respectées (voir le chapitre
Sauvergarde et Restauration)
O.EL BEQQALI 57
Administration de BD : DD

 Le dictionnaire de données d'Oracle (voir ateliers )


 un dictionnaire par base de données

 Ensemble de tables, vues et synonymes permettant la gestion


des objets d'une base (propriété de l'utilisateur SYS)

 Il est accessible via des ordres SQL

 Il est modifié indirectement via des ordres dits DDL

 Il ne doit être modifié directement

 Contient des informations persistantes (objets créés tels que


les tables, les index, les clusters, ...) et des informations
dynamiques (tels les sessions ouvertes, les E/S effectuées, ...)

O.EL BEQQALI 58
Administration de BD : DD
 Le dictionnaire de données d'Oracle (Contenu du DD)
 des tables de base du dictionnaire stockées en cluster et finissant
par $. Exemple tab$, ind$, obj$, seg$, ...
 les vues de performances
exemples : v_$process, v_$session, v_$syststat, v_$sesstat, ...
 des vues sur le dictionnaire de base commençant par :
• user_* : information sur tous les objets dont
l'utilisateur connecté est propriétaire
• all_* : informations sur les tous les objets accessibles par
l'utilisateur connecté
• dba_* : information sur tous les objets de la base. Il faut
avoir le privilège SELECT ANY TABLE pour y accéder
 des synonymes sur les vues pour simplifier. Exemple:
• v$process, v$session, v$systat, v$sesstat, ...

O.EL BEQQALI 59
Gestion de la sécurité et des ressources

La politique de licences d'Oracle

Les Utilisateurs prédéfinis


Utilisateur
Les différents mode d'authentification

Gestion des utilisateurs

Sécurité
et
Ressources Intérêt de l'audit

Types d'audit et modes d'activation

Audit Audit Système

Audit objet

La table aud$

O.EL BEQQALI 60
Intégrité des données

Déclencheur de Contrainte
base de données d'intégrité
Données

Code
d'application

Table

O.EL BEQQALI 61
Gestion de la sécurité et des ressources

 Généralités
 Rôle de l'Administrateur de sécurité et des
ressources
• Définir une politique de sécurité
• Faire les choix du type de sécurité : au niveau
système, au niveau Oracle, au niveau Global
(LDAP)
• Gérer les utilisateurs
• Gérer les ressources (profiles)
• Assurer l’affectation et le retrait des droits
• Affiner la politique de sécurité par l'utilisation des
rôles
• Effectuer les auditsO.EL BEQQALI 62
Gestion de la sécurité et des ressources
 Objectifs
 créer des rôles
PROFILES
 accorder des privilèges à des
rôles
 accorder des rôles à des
utilisateurs ou à des rôles
 établir des rôles par défaut
Droits
d’accès aux
tablespaces
(quotas,
TS temporaire, AUDIT
TS par défaut)
Utilisateur

PRIVILEGES
(Systèmes LES VUES
et Objets)
et RÔLES
O.EL BEQQALI 63
Gestion de la sécurité et des ressources

 Les Privilèges
 Intrtoduction
• Un privilège donne le droit d'exécuter
certaines commandes SQL ou le droit
d'accéder à certaines ressources
• Oracle possède deux types de privilèges :
les privilèges systèmes et les privilèges
objets.
• Un privilège peut être affecté (retiré) à un
Utilisateur, un Rôle ou tous les utilisateurs
(PUBLIC)
O.EL BEQQALI 64
Gestion de la sécurité et des ressources

 Les Privilèges
 Les privilèges Systèmes
• Oracle possède près de 127 privilèges Systèmes (la V6 en avait 3 : Connect,
resource, dba)
• Les privilèges donnent le droit de réaliser des opérations systèmes
• Ces privilèges sont classés par catégories d'objets
– ANALYZE AUDIT
– CLUSTER CONTEXT
– DATABASE DATABASE LINK
– DIMENSION INDEX
– INDEXTYPE LIBRARY
– MATERIALIZED VIEW MISCELLANEOUS
– OPERATOR OUTLINE
– PRIVILEGE PROCEDURE
– PROFILE Public Database Link
– PUBLIC SYNONYM ROLE
– ROLLBACK SEGMENT SESSION
– SEQUENCE SNAPSHOT
– SYNONYM SYSTEM
– TABLE TABLESPACE
– TRANSACTION TRIGGER
– TYPE USER
– VIEW
NOTE : Voir le site d’oracle pour obtenir la liste complète des privilèges
O.EL BEQQALI 65
Gestion de la sécurité et des ressources

 Les privilèges
 Exemple de privilèges systèmes de la catégorie TABLE:
– CREATE TABLE CREATE ANY TABLE
– ALTER ANY TABLE BACKUP ANY TABLE
– DROP ANY TABLE LOCK ANY TABLE
– LOCK ANY TABLE SELECT ANY TABLE
– INSERT ANY TABLE UPDATE ANY TABLE
– DELETE ANY TABLE COMMENT ANY TABLE
– UNDER ANY TABLE

 Affectation d’un privilège Système


GRANT { system_priv | role } TO { user | role | PUBLIC }
[ WITH ADMIN OPTION ]
System_priv : nom d’un privilège système
role : Nom d'un rôle
user, role ou PUBLIC : droit affecté à un utilisateur, un rôle ou public
With Admin Option : le rôle pourra être redistribué par celui qui le reçoit

O.EL BEQQALI 66
Gestion de la sécurité et des ressources

 Les privilèges systèmes (suite)


 Affectation des privilèges systèmes (suite)
• – L'affectation d'un privilège avec l'option "WITH ADMIN OPTION"
suit les règles suivantes :
– Celui qui reçoit le droit peut le redistribuer
– Son retrait à un utilisateur qui lui-même l'a affecté à un autre ne peut se
faire en cascade
– ne peut être affecté à un ROLE
 Exemple
• GRANT ALTER TABLESPACE TO scott ;

• GRANT CREATE USER,


CREATE SESSION TO scott WITH ADMIN OPTION ;

• GRANT ALTER ANY TABLE TO PUBLIC ;


O.EL BEQQALI 67
Gestion de la sécurité et des ressources

 Les Privilèges Systèmes (suite)


 Révocation d'un privilège Système
• Syntaxe
REVOKE { system_priv | role }
FROM { user | role | PUBLIC }
• Exemple :
REVOKE ALTER ANY TABLE FROM PUBLIC ;
REVOKE CREATE SESSION FROM SCOTT ;

 Les vues du dictionnaire


SELECT * FROM DBA_SYS_PRIVS ORDER BY grantee, privilege ;
GRANTEE PRIVILEGE ADM
CONNECT ALTER SESSION NO
CONNECT CREATE CLUSTER NO
 NOTE : Supposant qu’un utilisateur U1 attribut un privilège P1 "WITH ADMIN OPTION" à
un utilisateur U2 et que U2 l'attribut à son tour à U3. La révocation de P1 à U2 n'entraîne
pas la révocation de P1 à U3.

O.EL BEQQALI 68
Gestion de la sécurité et des ressources
 Les privilèges Objets
 Ces privilèges contrôlent l'accès aux objets des tables, vues, séquences,
procédures, fonctions et packages, vue matérialisée (VM) ....
 Classification selon les types d'objets
Privilèges objets Libellé Objets concernés
ALTER droit de modifier table, séquence
DELETE droit de supprimer table , vue, VM
EXECUTE droit d’exécuter procédure, fonction,
package,type user,
opérateur, indextype,
library
INDEX droit de créer un index table
(ne peut être affecté à un rôle)
INSERT droit d’insérer table, vue,VM
ON COMMIT REFRESH droit de créer une vue matériali- table
sé ON COMMIT REFRESH
sur une table
QUERY REWRITE droit de créer une vue matérialisé table
QUERY REWRITsur une table
REFERENCES droit de référencer une table table
lors d'un alter ou create table
(ne peut être affecté à un rôle)
READ droit de lire dans une directory directory
SELECT droit de consulter table, vue,
snapshot, sequence
UPDATE droit de mise à jour table ou vue
UNDER droit de créer des sous vue vue, type user
WRITE droit d’écrire dans
O.ELune directory
BEQQALI directory 69
Gestion de la sécurité et des ressources
 Les privilèges Objets
 Affectation de privilèges objets
GRANT { object_priv | ALL [ PRIVILEGES ] } [( column [,column ] ...) ]
[, { object_priv | ALL [ PRIVILEGES ] } [ ( column [,column] ...) ] ]
ON [ schema.] object
TO { user | role | PUBLIC } [ WITH GRANT OPTION ]
• Notes :
– ALL : n’est pas un privilège mais signifie "tous les privilèges sur un objet"
– object_priv: Nom du privilège
– column : Nom d'une colonne si object_priv= insert, update ou references
– schema.objet : Nom de l'objet concerné
– With Grant Option: L'utilisateur qui reçoit le privilège peut le réaffecter.
• Exemple
sql>GRANT INSERT (ename, job) ON emp TO scott with grant option ;
sql> GRANT UPDATE (SAL), DELETE ON emp TO scott ;
sql> GRANT REFERENCES, UPDATE ON bonus TO BRAHIM ;
O.EL BEQQALI 70
Gestion de la sécurité et des ressources
 Les privilèges Objets
 Révocation de privilèges objets
• Syntaxe
REVOKE { object_priv | ALL [ PRIVILEGES ] }
ON [ schema. ] object
FROM { user | role | PUBLIC } [CASCADE CONSTRAINTS ]
• Notes
– CASCADE CONSTRAINTS : s’emploie avec le privilège REFERENCES,
– supprime les contraintes d'intégrité mises.
– Retrait d’un privilège et
– WITH GRANT OPTION:
– Si un utilisateur U1 a affecté un privilège P1 à U2 et U2 l'a affecté à
– U3, le retrait à U2 entraîne le retrait à U3 : le retrait se fait en cascade.
• Exemples
sql>REVOKE DELETE ON Bonus FROM scott ;
sql>REVOKE UPDATE ON emp FROM public;
sql>REVOKE REFERENCES ON scott.emp FROM BRAHIM ;
sql>REVOKE ALL ON bonus FROM PUBLIC ;
O.EL BEQQALI 71
Gestion de la sécurité et des ressources
 Les privilèges Objets
 Visualisation des privilèges objets
DBA_TAB_PRIVS DBA_COL_PRIVS
ALL_TAB_PRIVS ALL_COL_PRIVS
USER_TAB_PRIVS USER_COL_PRIVS
All_TAB_PRIVS_MADE DBA_COL_PRIVS
USER_TAB_PRIVS_MADE ALL_COL_PRIVS_MADE
USER_TAB_PRIVS_MADE USER_COL_PRIVS_MADE
ALL_TAB_PRIVS_RECD ALL_COL_PRIVS_RECD
USER_TAB_PRIVS_RECD ALL_COL_PRIVS_RECD
TABLE_PRIVILEGES COLUMN_PRIVILEGES
 Principales Colonnes de vues ci-dessus
GRANTEE : utilisateur ayant reçu le privilège
OWNER : propriétaire de la table
TABLE_NAME : nom de la table
COLUMN_NAME : Nom de la colonne concerné
GRANTOR : Utilisateur ayant affecté le privilège
PRIVILEGE : privilège affecté
GRANT : privilège reçu.

O.EL BEQQALI 72
Gestion de la sécurité et des ressources

 Les privilèges Objets


 Visualisation des privilèges objets
• Visualisation de tous les droits sur les objets de la base
SELECT * FROM dba_tab_privs
WHERE table_name = ’BONUS’ OR
table_name = ’EMP’;
GRANTEE OWNER TABLE_NAME GRANTOR PRIVILEGE
BRAHIM SCOTT BONUS SCOTT ALTER
BRAHIM SCOTT BONUS SCOTT DELETE
BRAHIM SCOTT BONUS SCOTT INDEX
BRAHIM SCOTT BONUS SCOTT INSERT
BRAHIM SCOTT BONUS SCOTT SELECT
BRAHIM SCOTT BONUS SCOTT UPDATE
BRAHIM SCOTT BONUS SCOTT REFERENCES
 Tous les droits sur toutes les colonnes des tables dans la base
SELECT * FROM dba_col_privs ;

O.EL BEQQALI 73
Gestion de la sécurité et des ressources

 Les rôles (Généralités)


 Définition
• Un rôle est un concept Oracle qui permet de regrouper plusieurs privilèges et / ou
rôles afin de les affecter ou retirer en bloc à un utilisateur et / ou un rôle.

 un rôle facilite la gestion des privilèges

 l'affectation d'un rôle à un utilisateur peut se faire sous Oracle ou à travers


l'OS

 pour des raisons de sécurité, un mot de passe peut être assigné à un rôle

 oracle fournit un certain nombre de rôles par défaut (connect, resource,


dba, exp_full_database, imp_full_data_base, select_catalog_role,
delete_catalog_role / execute_catalog_role, …)

 pour créer un rôle, il faut avoir le privilège "CREATE ROLE"

O.EL BEQQALI 74
Gestion de la sécurité et des ressources

 Les rôles (Généralités)


 Assignation de privilèges aux utilisateurs : SANS ROLES ou VIA UN ROLE

Utilisateurs
A B C

Rôles HR_MGR HR_CLERK

Privilèges
SELECT ON INSERT ON
JOBS JOBS

CREATE CREATE
TABLE SESSION
O.EL BEQQALI 75
Gestion de la sécurité et des ressources
 Les rôles (Création)
 A sa création, un rôle ne contient aucun privilège
• Syntaxe
CREATE ROLE role1
[ { NOT IDENTIFIED
| IDENTIFIED { BY password | EXTERNALLY | GLOBALLY |
USING package} ]
• Mots clés et paramètres
– role : nom du rôle à créer
– NOT IDENTIFIED : permet de créer un rôle sans mot de passe
– Password : mot de passe assigné au rôle
– EXTERNALLY : mot de passe est contrôlé au niveau de l'OS (Identifié de manière externe )
– GLOBALLY : Rôle autorisé au niveau de l’annuaire
– USING package : rôle applicatif
• Exemple
sq> ClREATE ROLE rl_etudiant ;
sql> CREATE ROLE rl_admin_secu IDENTIFIED BY secu_pass ;
sql> CREATE ROLE hr_manager IDENTIFIED EXTERNALLY;
O.EL BEQQALI 76
Gestion de la sécurité et des ressources

 Les rôles (Modification)


 On peut modifier le niveau de sécurité d'un rôle
 privilège requis pour modifier un rôle ALTER ANY ROLE.
• Syntaxe
ALTER ROLE role { NOT IDENTIFIED
| IDENTIFIED { BY password | EXTERNALLY |
Globally | USING package} }
• Mots clés et paramètres
– role : nom du rôle à créer
– NOT IDENTIFIED : permet d'inhiber le mot de passe d'un rôle
– Password : nouveau mot de passe assigné au rôle
– EXTERNALLY : mot de passe contrôlé au niveau de l'OS
– GLOBALLY : Rôle autorisé au niveau de l’annuaire
– USING package : rôle applicatif
• Exemple
sql> ALTER ROLE ROLE rl_etudiant IDENTIFIED EXTERNALLY ;
sql> ALTER ROLE rl_admin_backup IDENTIFIED BY backup_pass;
sql> ALTER ROLE rl_admin_secu NOT IDENTIFIED;
O.EL BEQQALI 77
Gestion de la sécurité et des ressources

 Les rôles (Suppression)


 Un rôle supprimé est retiré IMMEDIATEMENT du domaine
de sécurité de l'utilisateur (connecté ou non) ou du rôle l'ayant
reçu

 Le privilège DROP ANY ROLE et le fait d'avoir acquis un rôle


avec WITH ADMIN OPTION permettent de le supprimer
• Syntaxe
DROP ROLE Nom_du_role ;

• Exemple
DROP ROLE rl_admin_secu ;
O.EL BEQQALI 78
Gestion de la sécurité et des ressources
 Les Rôles
 Affectation de privilèges ou de rôles à un rôle
 Exemple
• Création de deux rôles
# rôle rassembCREATE ROLE rl_connect ;
lant les privilèges pour se connecter
# rôle rassemblant les privilèges pour administrer la sécurité
CREATE ROLE rl_admin_secu ;
Affectation des privilèges aux rôles
GRANT create session, alter session, Restricted session TO rl_connect ;
GRANT create role, create user, create profile TO rl_admin_secu;
Affectation d'un Rôle à un autre Rôle
GRANT rl_connect TO rl_admin_secu ;
 Affectation de privilèges à un rôle
 Privilèges ne pouvant être affectés à un ROLE
• Privilège Système
– UNLIMITED TABLESPACE
Ce privilège inhibe tous les quotas et autorise l'utilisateur à créer des objets dans n'importe
quel tablespace.
• Privilèges Objets
INDEX # droit de créer un index sur les tables d'autres utilisateurs
REFERENCES # droit de référencer une table dans le schéma d'autres utilisateurs
O.EL BEQQALI 79
Gestion de la sécurité et des ressources
 Les Rôles (Affectation d'un rôle à• Oracle
un Utilisateur)
 Elle peut se faire au niveau : • du Système d'Exploitation (OS)
• De l’
l’annuaire de l’
l’entreprise

 Affectation d'un Rôle au niveau Oracle


GRANT role to user [WITH ADMIN OPTION]
L’utilisateur ayant reçu le rôle avec WITH ADMIN
OPTION peut le réaffecter, supprimer ou modifier.
 Affectation d'un rôle au niveau de l'OS
• Positionner le paramètre OS_ROLE dans init.ora afin que l'affectation et la
révocation des rôles se fassent au niveau de l'OS
OS_ROLE = TRUE
• Déclarer (sous UNIX) dans le fichier de groupe chaque rôle comme étant un groupe
– Syntaxe ora_<SID>_<role>[_[D][A] : [user1, [user2], [ ...]]
• Avec SID : nom de l'instance
rôle : nom du rôle
D : rôle par défaut
A : WITH ADMIN OPTION
• Exemple :
» ora_COURS_rl_connect_D:scott, mopolo, tintin
» ora_COURS_rl_admin_secu_DA:mopolo,osmani

O.EL BEQQALI 80
Rôles prédéfinis
NOM DU ROLE PRIVILEGES AFFECTES AU ROLE

CONNECT CREATE SESSION,

CREATE CLUSTER, CREATE PROCEDURE,


RESOURCE CREATE SEQUENCE, CREATE TABLE, CREATE TRIGGER

DBA tous les privilèges WITH ADMIN OPTION

SELECT ANY TABLE, BACKUP ANY TABLE,


exp_full_database INSERT, DELETE AND UPDATE ON tables
SYS.INCVID, SYS.INCFIL, SYS.INCEXP

imp_full_database BECOME USER, WRITEDOWN (trusted Oracle)

Execute_catalog_role Privilège d’exécuter les procédures du dictionnaire

Select_catalog_role Privilège de consulter tout le dictionnaire Oracle

Delete_catalog_role Privilège de supprimer la table d’audit aud$

Recovery_catalog_owner Fournit les privilèges pour le propriétaire du catalogue de recouvrement

Aq_administrator_role Fournit les privilèges pour l’administration des Queue

Snmpagent Founit les privilèges utiles à l’agent SNMP d’entreprise manager

l’affectation des rôles RESOURCE et DBA à un utilisateur entraîne un


GRANT unlimited tablespace O.EL BEQQALI 81
Gestion de la sécurité et des ressources : RÔLES

 Les rôles ( obtenir des informations)


 interrogez les vues suivantes du dictionnaire de données :
• DBA_ROLES : Tous les rôles qui existent dans 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
• SESSION_ROLES : Rôles activés par l'utilisateur

Exemple 1 : listing de tous les rôles de la base Exemple 2 : liste des rôles affectés à un role ou un user.
sql> SELECT * FROM dba_roles ; sql>SELECT * FROM dba_role_privs WHERE grantee = 'RL_ADMIN_SECU' ;
ROLE PASSWORD GRANTEE GRANTED-ROLE ADM-
GRANTED- ADM-DEF Default
CONNECT NO RL_ADMIN_SECU RL_CONNECT NO
RESOURCE NO YES
DBA NO Exemple 3 : liste des rôles actifs pour la session
EXP_FULL_DATABASE NO sql> SELECT * FROM session_roles;
IMP_FULL_DATABASE NO
MONITORER NO ROLE
RL_ADMIN_SECU NO DBA…..
RL_CONNECT NO

O.EL BEQQALI 82
Gestion de la sécurité et des ressources : RÔLES

 Les profiles
 Un profile est un concept Oracle qui permet à l'administrateur
d'une base de contrôler la consommation des ressources
systèmes et des mots de passes
 Il existe un profile par défaut appelé DEFAULT. Il est par défaut
affecté à un utilisateur lors de sa création
 Les limites du profile DEFAULT sont positionnées à UNLIMITED
 Le profile DEFAULT ne peut être supprimé. Les limites de ce
profile peuvent par contre être modifiées
 activation et contrôle des limites :
• dans le fichier initSID.ora positionner :
RESOURCE_LIMIT = TRUE
• ou dynamiquement faire sous sqlplus par exemple :
SQL> ALTER SYSTEM SET resource_limit = true;
O.EL BEQQALI 83
Gestion de la sécurité et des ressources : RÔLES
 Les Profiles (Création)
 Privilège requis CREATE PROFILE
 Syntaxe partie limite des ressources
CREATE PROFILE profile LIMIT
[ SESSIONS_PER_USER { integer | UNLIMITED | DEFAULT} ]
[ CPU_PER_SESSION { integer | UNLIMITED | DEFAULT } ]
[ CPU_PER_CALL { integer | UNLIMITED | DEFAULT } ]
[ CONNECT_TIME { integer | UNLIMITED | DEFAULT } ]
[ IDLE_TIME { integer | UNLIMITED | DEFAULT } ]
[LOGICAL_READS_PER_SESSION {integer | UNLIMITED|DEFAULT}]
[LOGICAL_READS_PER_CALL {integer | UNLIMITED|DEFAULT}]
[ COMPOSITE_LIMIT { integer | UNLIMITED | DEFAULT } ]
[PRIVATE_SGA {integer [K | M] | UNLIMITED | DEFAULT}]
 Mots clés et paramètres
• Session_per_user : Nombre maximum de sessions par utilisateur
• Logical_read_per_session : Nbre de blocs de données à lire pour une session
• cpu_per_session : temps CPU max par session en % de sécondes
• cpu_per_call : temps CPU pour un appel (en cas de parse, execute ou fetch) en % de secondes
• connect_time : temps écoulé maximum (en minutes)
• idle_time : temps maximum d'inactivité.
• private_sga : taille privée de la SGA allouée à un utilisateur
• unlimited : limite de la ressource illimitée
• default : prend la limite par défaut de la ressource
O.EL BEQQALI 84
Gestion de la sécurité et des ressources : RÔLES

 Les Profiles (Création)


 Privilège requis CREATE PROFILE
 Syntaxe partie password
CREATE PROFILE profile LIMIT
[FAILED_LOGIN_ATTEMPTS {expr | UNLIMITED | DEFAULT}]
[PASSWORD_LIFE_TIME {expr | UNLIMITED | DEFAULT}]
[PASSWORD_REUSE_TIME {expr | UNLIMITED | DEFAULT}]
[PASSWORD_REUSE_MAX {expr | UNLIMITED | DEFAULT}]
[PASSWORD_LOCK_TIME {expr | UNLIMITED | DEFAULT}]
[PASSWORD_GRACE_TIME {expr | UNLIMITED | DEFAULT}]
[PASSWORD_VERIFY_FUNCTION {function, NULL, DEFAULT}]
 Mots clés et paramètres
• Failed_login_attempts : nombre d’échecs avant le blocage du compte
• password_life_time : durée en jours avant l’expiration du mot de passe
• password_reuse_time : durée en jours avant la réutilisation d’un password
• password_reuse_max : nombre de modif du password avant réutilisation
• password_lock_time : durée en jours du verrouillage d’un compte
• password_grace_time : délai de tolérance du password avant son expiration
• password_verify_function : fonction de contrôle des mots de passes

O.EL BEQQALI 85
Gestion de la sécurité et des ressources : RÔLES
 Les Profiles (Création)
 Exemple 1
CREATE PROFILE pf_secretaire LIMIT
sessions_per_user 2
cpu_per_session unlimited
cpu_per_call 1000
logical_reads_per_session unlimited
logical_reads_per_call 100
idle_time 30
connect_time 480 ;
 Exemple 2
CREATE profile pf_agent LIMIT
sessions_per_user 2
cpu_per_session unlimited
cpu_per_call 1000
composite_limit 20000
private_sga 32K ;
 Exemple 3
CREATE PROFILE pf_admin
PASSWORD_LIFE_TIME 200
LIMIT PASSWORD_REUSE_MAX DEFAULT
PASSWORD_REUSE_TIME UNLIMITED
CPU_PER_SESSION UNLIMITED

O.EL BEQQALI 86
Gestion de la sécurité et des ressources : RÔLES

 Assignation d’un profile à un utilisateur


 A la création d'un nouvel utilisateur
CREATE USER rackham IDENTIFIED BY lerouge
PROFILE pf_secretaire ;
 A la modification d'un utilisateur
ALTER USER rackham
PROFILE pf_agent ;
 Modification d’un profile
 Privilège requis : ALTER PROFILE
 Suppression d’un profile
 En cas de suppression d'un profile existant affecté à un utilisateur, ce dernier
se verra automatiquement attribué le profile DEFAULT
 Le profile DEFAULT ne peut être supprimé
 Privilège requis : DROP PROFILE
 Syntaxe
DROP PROFILE nom_profile [CASCADE]
 Exemple
sql>DROP PROFILE pf_secretaire CASCADE ;
O.EL BEQQALI 87
Gestion de la sécurité et des ressources : RÔLES
 Les Profiles (Visualisation des informations des profiles)
 Vues contenant les informations sur les profiles :
– dba_profiles, resource_cost, user_resource_limit
 Exemple 1 : Liste de tous les profiles
sql> SELECT profile, resource_name, limit FROM dba_profiles
ORDER BY profile, resource_name;

PROFILE RESOURCE_NAME LIMIT


DEFAULT COMPOSITE_LIMIT UNLIMITED
...
DEFAULT CPU_PER_SESSION 600
PF_AGENT COMPOSITE_LIMIT 20000
PF_AGENT CONNECT_TIME DEFAULT
PF_AGENT CPU_PER_CALL 1000
PF_AGENT PRIVATE_SGA 32768
PF_AGENT SESSIONS_PER_USER 2
...
PF_SECRETAIRE COMPOSITE_LIMIT DEFAULT
PF_SECRETAIRE CONNECT_TIME 480
PF_SECRETAIRE CPU_PER_CALL 1000
PF_SECRETAIRE CPU_PER_SESSION UNLIMITED
PF_SECRETAIRE IDLE_TIME 30
PF_SECRETAIRE LOGICAL_READS_PER_CALL 100
PF_SECRETAIRE SESSIONS_PER_USER 2

O.EL BEQQALI 88
Gestion de la sécurité et des ressources
 Les utilisateurs
 La notion d'utilisateur est fondamentale pour accéder aux données
d'une base Oracle
 Le site d'un client Oracle doit être tenu à jour au niveau des licences
:
• les paramètres de init.ora pour le contrôle de la licence (valeurs par
défaut 0) : license_max_session, license_sessions_warning,
license_max_users
 Si la limite en nombre de sessions est illimitée conserver les valeurs
par défaut
• Seuls les utilisateurs avec le privilège RESTRICTED SESSION peuvent
se connecter en cas de dépassement de la limite
• en cas de mise en oeuvre de l'architecture parallèle, chaque instance à
ses limites mais la somme doit équivaloir à la somme des limites du site
• visualisation des limites des licences v$license

O.EL BEQQALI 89
Gestion de la sécurité et des ressources
 Les utilisateurs
 Contrôle de la limitation du nombre d'utilisateurs
• Au moment du lancement d'une instance
LICENSE_MAX_USERS = 80
• Au moment ou l'instance tourne
sqlplus >ALTER SYSTEM
SET LICENSE_MAX_USERS=100;

 Authentification des utilisateurs


• A partir d'Oracle
CREATE USER scott IDENTIFIED BY tiger ;
• A partir de l'OS
CREATE USER ali IDENTIFIED EXTERNALLY ;
• Les utilisateurs authentifiés par l'OS sont précédés d'une chaîne définie par le
paramètre de initsid.ora OS_AUTHENT_PREFIX qui vaut par défaut OPS$
• Globalement à partir de l’annuaire LDAP
CREATE USER scott IDENTIFIED GLOBALLY AS
’CN=scott,OU=division1,O=oracle,C=US‘

O.EL BEQQALI 90
Etablir des rôles par défaut

• Un utilisateur peut se voir accorder un grand nombre de


rôles.
• Un utilisateur peut se voir accorder un rôle par défaut.
• Vous pouvez limiter le nombre de rôles par défaut d'un
utilisateur.
ALTER USER scott
DEFAULT ROLE hr_clerk, oe_clerk;

ALTER USER scott DEFAULT ROLE ALL;

ALTER USER scott DEFAULT ROLE ALL EXCEPT


hr_clerk;

ALTER USER scott DEFAULT ROLE NONE;

O.EL BEQQALI 91
Rôles d'application

 Seuls les packages PL/SQL autorisés peuvent activer des rôles


d'application
 La clause de package USING permet de créer un rôle d'application

CREATE ROLE admin_role


IDENTIFIED USING hr.employee;

O.EL BEQQALI 92
Activer et désactiver les rôles

 Désactivez un rôle accordé à un


utilisateur pour le révoquer
temporairement
 Activez un rôle pour l'accorder
temporairement
 La commande SET ROLE permet d'activer
et de désactiver les rôles
 Les rôles par défaut d'un utilisateur sont
activés à la connexion
 Un mot de passe peut être requis pour
activer un rôle
O.EL BEQQALI 93
Activer et désactiver les rôles

SET ROLE hr_clerk;


SET ROLE oe_clerk
IDENTIFIED BY order;

SET ROLE ALL EXCEPT oe_clerk;

O.EL BEQQALI 94
Révoquer des rôles accordés à des utilisateurs
• La révocation d'un rôle accordé à un
utilisateur requiert l'option ADMIN
OPTION ou le privilège GRANT ANY ROLE.
• Pour révoquer un rôle, utilisez la syntaxe
suivante :

REVOKE oe_clerk FROM


scott;
REVOKE hr_manager FROM
PUBLIC;
O.EL BEQQALI 95
Instructions relatives à la création de
rôles

Utilisateurs

Rôles
utilisateur HR_CLERK HR_MANAGER PAY_CLERK

Rôles
d'application BENEFITS PAYROLL

Privilèges
d'application
Privilèges Benefits Privilèges Payroll

O.EL BEQQALI 96
Règles d'utilisation des mots de passe et
des rôles par défaut

Protection par mot de passe


(pas la valeur par défaut) Rôle par défaut

PAY_CLERK PAY_CLERK_RO

Privilèges INSERT, UPDATE, Privilèges SELECT


DELETE et SELECT

O.EL BEQQALI 97
Utilisateurs et Sécurité

Verrous sur Tablespace


les comptes par défaut

Mécanisme Tablespace
d ’authen- temporaire
tification
Domaine de
sécurité
Privilèges de Quotas de
rôle tablespace

Privilèges Limites de
directs ressources

O.EL BEQQALI 98
Schéma de Base de Données
-Tables
- Triggers
- Contraintes
-Index
-Vues
-Séquences
-Procédures stockées
-Synonymes
-Types de données définis par l ’utilisateur
-Database Links…
O.EL BEQQALI 99
Liste de Contrôle pour la Création
d’utilisateurs
1. Choisissez un nom d’utilisateur et un
mécanisme d’authentification
2. Identifiez les tablespaces dans lesquels
l’utilisateur doit stocker des objets
3. Décidez des quotas pour chaque
tablespace
4. Affectez un tablespace par défaut et un
tablespace temporaire
5. Créez le compte utilisateur
6. Accordez des privilèges et des rôles à
l’utilisateur
O.EL BEQQALI 100
Création d’un Nouvel utilisateur :

CREATE USER USER1


IDENTIFIED BY user1
DEFAULT TABLESPACE data01
TEMPORARY TABLESPACE temp
QUOTA 15m ON TS1
PASSWORD EXPIRE;
Sql> Grant connect, resource to USER1
O.EL BEQQALI 101
SEQUENCES
 Une séquence est un objet virtuel qui ne contient
aucune donnée utilisé pour générer automatiquement
des valeurs (NUMBER).
CREATE SEQUENCE nomSéquence
INCREMENT BY entier ]
[START WITH entier ]
[ { MAXVALUE entier | NOMAXVALUE } ]
[ { MINVALUE entier | NOMINVALUE } ]

USER_SEQUENCES […..]
 *Pseudo-colonnes :
 CURRVAL retourne la valeur courante
 NEXTVAL incrémente la séquence et retourne la
valeur obtenue
O.EL BEQQALI 102
SEQUENCES (suite)
Exemple : create sequence seq1 start with 1 increment
by 1 MAXVALUE 30;
* seq1.CURRVAL qui retourne la valeur courante de la
séquence (lecture seule) ;
* seq1.NEXTVAL qui incrémente la séquence et retourne la
nouvelle valeur de celle-ci (écriture et lecture).
 Modification d’une séquence : (le privilège ALTER ANY
SEQUENCE est requis)
ALTER SEQUENCE Nom_seq INCREMENT BY 5
MAXVALUE 850;

*Affichage d’une séquence :


 SELECT seq2.CURRVAL FROM DUAL;
O.EL BEQQALI 103
Séquences (manipulations)
 Suppression d’une séquence
DROP SEQUENCE seq2;
 UTILISATION
 Il s’agit de créer une séquence pour la gestion des
numéros des étudiants
 create table etudiant (id_etu number primary key , nom
varchar2(20),prenom varchar2(20), age number );
 ---Création d'une séquence pour id_etu---
 insertion :
 insert into etudiant values (seq_etu.nextval,’Ali’,
‘Med’, 27);
 SELECT seq_etu.CURRVAL "valeur courante" from
dual ;
 O.EL BEQQALI 104
Les traitements stockés dans la base

 Les traitements sont définis avec le langage


PL/SQL et sont stockés dans les tables du
dictionnaire de données.
 types de traitements:
 La procédure dont l'unique rôle est d'effectuer un
traitement.
 La fonction qui effectue un traitement pour renvoyer
en retour une valeur.
 Le package qui regroupe un ensemble de procédures
et / ou de fonctions.
 Le trigger (déclencheur) qui est déclenché
automatiquement lors d'une mise à jour sur une
table.
O.EL BEQQALI 105
Les procédures
Syntaxe de création / modification
CREATE [OR REPLACE] PROCEDURE
[nom_user.]nom_procédure (arguments IN type[,
argument IN type, ...]) {IS|AS}

[Variable_locale type_variable_locale;]
BEGIN
{ contenu du bloc PL }
END [nom_procédure];
/

APPEL DIRECT SOUS SQLPLUS


sql> EXECUTE Nomproc(param,…)

DANS UN PROGRAMME PL /SQL OU UNE AUTRE PROCEDURE


Nom_proc (param,…);
O.EL BEQQALI 106
Les procédures (exemple)
Création d'une procédure qui compte le nombre
d’employés pour un numéro de département donné.
CREATE OR REPLACE PROCEDURE
p_Empl ( v_deptno IN number(4)) IS
v_no NUMBER;
BEGIN
SELECT COUNT(empno)
INTO v_no
FROM emp
WHERE demptno =v_deptno;
DBMS_OUTPUT.PUT_LINE('Nombre d’’employés
‘||v_no);
END;
/
Exécution : Sql> execute p_Emp(30);
Procédures dans la base : SELECT object_name FROM user_objects
WHERE object_type = 'PROCEDURE’;
O.EL BEQQALI 107
Les procédures (exemple2 )

SQL>CREATE OR REPLACE PROCEDURE


raise_salary
(v_id IN emp.empno%TYPE) IS
BEGIN
UPDATE emp
SET sal = sal * 1.1
WHERE empno = v_id;
END raise_salary;
/
Procedure created.

SQL> EXECUTE raise_salary (7389)


PL / SQL procedure successfully completed

O.EL BEQQALI 108


PROCEDURES / PARAMETRES

SQL> CREATE PROCEDURE add_dept


(v_name IN dept.dname%TYPE DEFAULT
‘ inconnu ’,
v_loc IN dept.loc%TYPE DEFAULT
‘ inconnu ’)
IS
BEGIN
INSERT INTO dept (dept_deptno.NEXTVAL,
v_name,v_loc);
END add_dept;
/
SQL> BEGIN
add_dept (‘ TRAINING ’, ’FES ’);
END
/
O.EL BEQQALI 109
Les procédures (utilisation)
Exécution
Il faut avoir le privilège objet: EXECUTE
Exécution sous SQL*PLUS
EXECUTE [nom_propriétaire.]nom_procedure
{(Liste arguments)};

Exécution dans le corps d'un programme PL/SQL


BEGIN
[nom_propriétaire.]nom_procedure {(liste
arguments)}
END

Suppression
DROP PROCEDURE nom_procédure;
O.EL BEQQALI 110
Les fonctions

 Syntaxe de création / modification


CREATE [OR REPLACE] FUNCTION
[nom_user.]nom_function (arguments IN type
[,argument IN type_arg,... ]) RETURN
type_val
{IS | AS }

[Variable_locale type_variable_locale;]

BEGIN
{ contenu du bloc PL }
RETURN variable_a_retourner;
END [nom_function]
END; O.EL BEQQALI 111
Les fonctions (exemple)

Création d'une fonction qui compte le nombre


d'employés qui travaillent dans un service donné.

CREATE OR REPLACE FUNCTION f_service (V_ e_emp IN


e_emp. service_no% TYPE) RETURN NUMBER
IS
v_no NUMBER(3);
BEGIN
SELECT COUNT(no) INTO v_no FROM emp
WHERE service_no = V_e_emp;
RETURN(v_no);
END ;
/ O.EL BEQQALI 112
Les fonctions (exemple/utilisation)
CREATE OR REPLACE FUNCTION get_sal
(v_id IN emp.empno%TYPE)
RETURN NUMBER IS
v_salary emp.sal%TYPE := 0;
BEGIN
SELECT sal INTO v_salary FROM emp
WHERE empno = v_id;
RETURN (v_salary);
END get_sal;
/

SQL> select ename from emp where sal >


get_sal(7369)
O.EL BEQQALI 113
COMPARAISON
FONCTIONS / PROCEDURES

PROCEDURE FONCTION

EXECUTE UN BLOC INVOQUE COMME


PL / SQL EXPRESSION

PAS DE DONNEES DOIT CONTENIR AU


DE TYPE RETURN MOINS UNE DONNEE
DE TYPE RETURN

PEUT RETOURNER UNE DOIT RETOURNER


OU PLUSIEURS VALEURS UNE VALEUR

O.EL BEQQALI 114


Les fonctions
Recherche d' une fonction dans la base
SELECT object_name
FROM user_objects
WHERE object_type = 'FUNCTION'

Recherche du code source d' une fonction dans la


base
SELECT text
FROM user_source WHERE name
'NOM_FONCTION’ ORDER BY line;

Suppression
DROP FUNCTION nom_fonction;

O.EL BEQQALI 115


Exemple Factoriel….Fonctions / Procédures
create or replace procedure Fact(n IN int, fact OUT int)
is
begin
fact := 1;
for i in 1..n
Loop
fact := fact * i;
end loop;
end;
/ ======Exécution ======
declare
res int;
begin
Fact(5,res);
dbms_output.put_line('Résultat : ‘ || res);
end;
/ O.EL BEQQALI 116
Exemple Factoriel….Fonctions / Procédures

create or replace function f_Fact(n in int) return


integer is
begin
if (n = 1) then return(1);
else return(n * f_Fact(n-1));
end if;
end;
/
======Exécution ======

declare
res int;
begin
res := f_Fact(5);
dbms_output.put_line('Résultat : ' || res);
end;
/
O.EL BEQQALI 117
Exemple
Soit la table table Patient (id_P, Température Number);

Create or replace Function Conversion(Deg_F in Number)


Return number is
deg_c number;
Begin
Deg_c := (5.0 / 9.0) * (Deg_f -32);
Return Deg_c;
End Conversion
/

EXEMPLE d’utilisation de cette fonction dans Select


suivante:
SQL> Select id_p, Température ,
Conversion(Température) From Patient;
O.EL BEQQALI 118
La clause ACCEPT
ACCEPT permet d'afficher un message d'invite personnalisé
Exemple:
ACCEPT dept PROMPT ‘ Fournir le nom
du départment: ‘;
SELECT *
FROM dept
WHERE dname = UPPER('&dept')
/
Exécution :
Fournir le nom du départment: Sales
DEPTNO DNAME LOC
30 SALES CHICAGO
O.EL BEQQALI 119
Les packages
* Un package est l'encapsulation d'objets dans
une même unité logique de traitement
 Procédures
 Fonctions
 Exceptions
 variables, curseurs, constantes

* Construit en 2 parties:
SPECIFICATION & BODY
O.EL BEQQALI 120
Les packages (suite)
Un package est un objet de la base de données
qui encapsule d’autres objets (procédures,
fonctions ..)

• Un package a essentiellement deux parties:


– la partie déclaration
– la partie corps du programme: dans
cette partie, sont définies les procédures et les
fonctions et les curseurs
O.EL BEQQALI 121
Package E/S
Le package DBMS_OUTPUT : Permet de stocker
l'information dans un tampon avec les modules PUT
et PUT_LINE.
Les procédures de DBMS_OUTPUT:
• PUT_LINE : affiche une chaîne de caractères
• GET_LINE : extrait une ligne du tampon de sortie.

Autres….
DBMS_REFRESH.REFRESH (….)

Sql> execute DBMS_OUTPUT.PUT_LINE(‘message’);


[set serveroutput on]

O.EL BEQQALI 122


PACKAGES / SYNTAXE

 CREATE [OR REPLACE] PACKAGE


package_name IS|AS
element_package;

END package_name;

 CREATE [OR REPLACE ] PACKAGE BODY


package_name IS|AS
declaration de type ou de variables globales;
specifications package;
END package_name;

O.EL BEQQALI 123


Les triggers (1)

Définition
Un trigger stocké est un traitement procédural lié à une
table et une seule, et donc répertorié dans le
dictionnaire de données.
• Il se déclenche automatiquement lors d'un
événement intervenu sur la table dont il
dépend: insertion, suppression ou mise à jour
• Il este valide tant que la table existe.
• Il peut être actif ou inactif
O.EL BEQQALI 124
Les triggers (2)
 2 types de trigger:
 Déclenchement sur chaque ligne mise a jour
 Déclenchement une seule fois pour la mise à
jour
2 séquencements:
 Avant la mise à jour
 Après la mise à jour
 12 triggers possibles sur une table
O.EL BEQQALI 125
Les triggers stockés (3)

 Création / Modification du trigger


CREATE [OR REPLACE ]TRIGGER [nom_user.]nom_trigger
{ BEFORE |AFTER}{ INSERT|UPDATE [0F
col...] |DELETE }
[OR { INSERT | UPDATE | DELETE }]
[OR { INSERT | UPDATE | DELETE }]]
ON nom_table
[FOR EACH ROW [ WHEN (prédicat)]]

DECLARE
--Déclaration de variables locales au trigger;
BEGIN
{ contenu du bloc PL}
END;
/

O.EL BEQQALI 126


Les triggers stockés (4)
Désactivation d'un trigger
ALTER TRIGGER [nom_user.]nom_trigger
DISABLE;
Réactivation d'un trigger
ALTER TRIGGER [nom_user.]nom_trigger
ENABLE;
Désactivation de tous les triggers sur une table
ALTER TABLE Nom_table DISABLE ALL
TRIGGERS;
Réactivation de tous les triggers sur une table
ALTER TABLE nom_table ENABLE ALL
TRIGGERS;
Suppression du trigger
DROP TRIGGER [nom_user.]nom_trigger;
O.EL BEQQALI 127
Les triggers (Old – New)

Utilisation des variables «OLD. » et « NEW.»


Elles sont utilisables uniquement dans les triggers FOR
EACH ROW.
Dans le bloc PL/SQL, on peut faire référence aux
colonnes en les préfixant avec :NEW. nom_colonne ou
:OLD.nom_colonne avec les restrictions suivantes:

:NEW uniquement dans les triggers INSERT ou UPDATE


(On ne peut pas modifier la valeur de
:NEW.nom_colonne dans les triggers AFTER).

:OLD uniquement dans les triggers UPDATE ou


DELETE (On ne peut pas modifier la valeur de
:OLD.nom_colonne).

O.EL BEQQALI 128


Les triggers (exemple)
Sauvegarder dans une autre table historique une
ligne avant chaque suppression dans la table emp

CREATE OR REPLACE TRIGGER del_emp


BEFORE DELETE ON emp
FOR EACH ROW
BEGIN
INSERT INTO tab_traces VALUES ( :OLD.empno, :OLD.ename,
SYSDATE);
END;
/

Recherche d'un trigger dans la base


SELECT trigger_body
FROM user_triggers
WHERE trigger_name ='NOM TRIGGER'

O.EL BEQQALI 129


Exercice :

Soit la table Emp(NumEmp, NomEmp, SalaireEmp)


Le salaire d’un employé ne peut baisser.
Cette contrainte ne peut être prise en compte qu’en
utilisant les triggers ou bien les procédure stockées.

CREATE TRIGGER Mod_Sal


AFTER UPDATE OF Emp ON Salaire
FOR EACH ROW
BEGIN
If new.Salaire < old.Salaire Rollback;
END; [erreurs à corriger …atelier]
A suivre part II
O.EL BEQQALI 130
FEFERENCES

 Documents Oracle (white papers)


http://www.oracle.com

O.EL BEQQALI 131

Vous aimerez peut-être aussi