D50102FR10 sg1
D50102FR10 sg1
D53093
Edition 1.0
Février 2008
D50102FR10
Manuel du stagiaire - Volume 1
Oracle Database 11g :
Administration Workshop I
James Spiller Cette documentation contient des informations qui sont la propriété d'Oracle
Maria Billings Corporation et sont protégées par les lois relatives aux droits d'auteur et à la propriété
intellectuelle. Vous ne pouvez copier et imprimer ce document qu'à des fins
d'utilisation personnelle lors de la participation à une formation dispensée par Oracle.
Révisions et Le document ne peut être modifié ou altéré en aucune manière. A l'exception des cas
où l'utilisation faite du document s'inscrit dans le respect des lois relatives aux droits
contributions techniques d'auteur, vous ne pouvez pas utiliser, partager, télécharger, copier, imprimer, afficher,
exécuter, reproduire, publier, breveter, diffuser, transmettre ou distribuer ce
Christian Bauwens document, en partie ou en totalité, sans l'autorisation expresse d'Oracle.
Sangram Dash
Les informations fournies dans ce document sont susceptibles de modification sans
Andy Fortunak préavis. Par ailleurs, Oracle Corporation ne garantit pas qu'elles soient exemptes
d'erreurs et vous invite, le cas échéant, à lui en faire part par écrit à l'adresse
Magnus Isaksson If this documentation is delivered to the United States Government or anyone using
the documentation on behalf of the United States Government, the following notice is
Akira Kinutani applicable:
Srinivas Putrevu Oracle est une marque déposée d'Oracle Corporation et/ou de ses filiales. Tout autre
nom de produit ou de société peut être une marque de son propriétaire.
Andreas Reinhardt
Ira Singer
Jenny Tsai
Rédacteurs
Richard Wallis
Amitha Narayan
Concepteur graphique
Rajiv Chandrabhanu
Editeurs
Nita Brozowski
Michael Sebastian Almeida
Table des matières
THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED
Préface
I Introduction
Objectifs du cours I-2
Planification recommandée I-3
Produits et services Oracle I-4
i
Segments, extents et blocs 1-42
THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED
ii
Page d'accueil de la base de données 4-7
THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED
iii
Sessions utilisateur 5-7
THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED
iv
Afficher le contenu d'un tablespace 6-23
THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED
v
Créer et modifier des tables 8-12
THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED
vi
Evénements déclencheurs 9-19
THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED
vii
Activer l'audit 11-15
THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED
viii
Créer et tester une alerte 12-31
THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED
ix
Utiliser MTTR Advisor 14-17
THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED
x
Perte d'un fichier de journalisation 16-9
THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED
xi
Paramètres d'initialisation des performances 17-33
THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED
xii
THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED
Introduction
Objectifs du cours
Dans ce cours, vous allez installer le logiciel Oracle Database 11g Enterprise Edition, créer
une base de données et apprendre à l'administrer.
Vous allez également configurer la base de données afin de prendre en charge une
application, et effectuer des opérations telles que la création d'utilisateurs, la définition de
structures de stockage et la configuration de la sécurité. Ce cours utilise une application
fictive. Vous effectuerez cependant toutes les tâches fondamentales nécessaires à une
application réelle.
L'administration d'une base de données ne se limite pas à sa seule configuration. Vous devez
également apprendre à protéger votre base de données en élaborant une stratégie de
sauvegarde et de récupération, et à la surveiller pour vous assurer de son bon fonctionnement.
5. Réseau
• Oracle Database
• Oracle Application Server
• Oracle Applications
• Oracle Collaboration Suite
• Oracle Developer Suite
Automatic Storage Management (ASM) propage les données de base de données sur tous les
disques, crée et gère un grid de stockage, et fournit un débit d'E/S optimal pour un coût de gestion
minimal. Lors de l'ajout ou de la suppression de disques, ASM redistribue automatiquement les
données. (Il est inutile d'utiliser un gestionnaire de volumes logiques pour gérer le système de
fichiers.) La disponibilité des données augmente avec la fonction de mise en miroir facultative, et
vous pouvez ajouter ou supprimer des disques en ligne. Pour plus d'informations, reportez-vous au
chapitre intitulé "Gérer les structures de stockage de la base de données".
L'application Real Application Clusters (RAC) d'Oracle exécute et répartit toutes les charges
globales d'application sur un cluster de serveurs. Elle offre également les fonctionnalités
suivantes :
• Clusterware intégré : Il inclut notamment les fonctions de connectivité des clusters, d'envoi
REGIONS
REGION_ID (PK)
REGION_NAME
JOBS
COUNTRIES JOB_ID (PK)
COUNTRY_ID (PK) JOB_TITLE
COUNTRY_NAME MIN_SALARY
JOB_HISTORY
REGION_ID (FK) MAX_SALARY EMPLOYEE_ID (PK)
START_DATE (PK)
END_DATE
JOB_ID (FK)
LOCATIONS EMPLOYEES DEPARTMENT_ID (FK)
Objectifs
Ce chapitre décrit en détail l'architecture de la base de données Oracle. Il présente les
structures physiques et logiques ainsi que les divers composants de la base de données.
Se connecter à un serveur
Un utilisateur de base de données peut se connecter à un serveur Oracle de trois manières :
• L'utilisateur se connecte au système d'exploitation qui exécute l'instance Oracle et
démarre une application ou un outil qui accède à la base de données stockée sur ce
système. La voie de communication est établie à l'aide des mécanismes de
communication interprocessus disponibles dans le système d'exploitation hôte.
• L'utilisateur démarre l'application ou l'outil sur un ordinateur local et se connecte via un
réseau à l'ordinateur qui exécute la base de données Oracle. Dans cette configuration
(appelée client/serveur), un logiciel réseau est utilisé pour la communication entre
l'utilisateur et le serveur de base de données.
L'architecture client/serveur comprend une partie frontale (client) et une partie dorsale
(serveur) connectées via un réseau. La communication entre l'utilisateur et le serveur
Oracle est assurée par un logiciel réseau.
- Le client est une application de base de données qui lance une demande pour
effectuer une opération sur le serveur de base de données. Il demande, traite et
présente les données gérées par le serveur. La station de travail client peut être
optimisée pour sa fonction. Par exemple, le client n'a pas forcément besoin d'une
grande capacité de disque, ou encore il peut tirer profit de fonctionnalités
graphiques. Le client est souvent exécuté sur un ordinateur différent du serveur de
base de données. Plusieurs clients peuvent accéder simultanément à un même
serveur.
- Le serveur exécute le logiciel Oracle Database et gère les fonctions permettant les
accès simultanés aux données partagées. Le serveur reçoit et traite les demandes
en provenance des applications client. L'ordinateur qui fait office de serveur peut
être optimisé pour ses fonctions. Par exemple, il peut être doté d'une grande
capacité de disque et de processeurs rapides.
• L'utilisateur accède à un serveur d'applications à l'aide d'un outil (navigateur Web, par
exemple) exécuté sur l'ordinateur local (client). Le serveur d'applications entre alors en
interaction avec un serveur de base de données back-end pour le compte du client.
Une architecture à plusieurs niveaux (multi-tiers) classique comprend les composants
suivants :
Instance
Fichiers de
Processus Fichiers de journalisation
utilisateur Fichiers de journalisation
Fichiers archivés
de données contrôle en ligne
Base de données
Connexion
Session
Instance
Processus Processus
utilisateur serveur SGA Zone de mémoire
partagée
Instance
Structures mémoire SGA Zone de mémoire
partagée
Structures de stockage
Fichiers de
Fichiers Fichiers de journalisation
de données contrôle en ligne
de données
SGA
Cache du dictionnaire
Zone SQL
de données
partagée
Instance
Cache "library"
Tampon de
journali-
Cache de tampons de la base de données
sation Cache du
dictionnaire
de données
Tampon de journalisation
Le tampon de journalisation (redo log buffer) est une mémoire tampon (buffer) réutilisable
située dans la mémoire SGA qui contient des informations sur les modifications effectuées
dans la base de données. Ces informations sont stockées sous la forme d'entrées de
journalisation. Les entrées de journalisation contiennent les informations nécessaires à
l'annulation (redo) des modifications apportées à la base de données par des opérations LMD
(langage de manipulation de données), LDD (langage de définition de données) ou internes.
Elles sont utilisées pour procéder à la récupération de la base de données.
Les entrées de journalisation sont copiées par les processus Oracle Database depuis l'espace
mémoire de l'utilisateur vers le tampon de journalisation en mémoire SGA. Elles occupent un
espace séquentiel continu dans le tampon. Le processus en arrière-plan LGWR écrit le tampon
de journalisation dans le fichier (ou le groupe de fichiers) de journalisation (redo log) actif
stocké sur disque.
Une zone SQL partagée contient l'arborescence de l'analyse (parse) et le plan d'exécution pour
une instruction SQL donnée. Oracle Database économise de l'espace mémoire en utilisant une
seule zone SQL partagée pour les instructions SQL lancées plusieurs fois, ce qui est souvent
le cas lorsque plusieurs utilisateurs exécutent la même application.
Quand une nouvelle instruction SQL est analysée, Oracle Database lui alloue de la mémoire à
partir de la zone de mémoire partagée afin de la stocker dans la zone SQL partagée. La taille
de cette mémoire dépend de la complexité de l'instruction.
Les unités de programme PL/SQL (procédures, fonctions, packages, blocs anonymes et
déclencheurs de base de données) sont traitées quasiment de la même manière que les
instructions SQL individuelles. Oracle Database alloue une zone partagée pour contenir la
Zone de mémoire
partagée
Tampon Mémoire
d'E/S disponible
de mémoire Streams
• La zone de mémoire Java du serveur est utilisée pour
l'ensemble du code Java et des données propres à la
session dans la JVM (Java Virtual Machine).
• La zone de mémoire Streams est utilisée exclusivement
par Oracle Streams.
– Stockage des messages de la file d'attente tampon
– Fourniture de mémoire pour les processus Oracle
Zone de Zone de
mémoire mémoire
Java Streams
de données
- Mémoire
Æ Processus
• Processus utilisateur - Stockage
n processus
serveur
SGA
Zone de mémoire
partagée
Cache de
Tampon de
tampons Cache "library"
journali- SGA
Processus
Oracle en
arrière-plan
Pour que le processus DBWn puisse écrire un tampon modifié ("dirty"), il faut que tous les
enregistrements de journalisation associés aux modifications du tampon soient écrits sur le
disque (protocole d'écriture anticipée). Si le processus DBWn détecte des enregistrements de
journalisation qui n'ont pas encore été écrits sur le disque, il le signale au processus LGWR et
attend que ce dernier ait terminé l'opération d'écriture pour vider les tampons de données.
LGWR écrit dans le groupe de journaux en cours. Si l'un des fichiers du groupe est défectueux
ou indisponible, LGWR continue d'écrire dans d'autres fichiers du groupe et consigne une
erreur dans le fichier trace LGWR ainsi que dans le fichier d'alertes système. Si tous les
fichiers du groupe sont endommagés, ou si le groupe n'est pas disponible parce qu'il n'a pas
été archivé, le fonctionnement de LGWR est interrompu.
Quand un utilisateur lance une instruction COMMIT, LGWR place un enregistrement de
Processus
CKPT
Fichiers de
données
Processus SMON
Segment
temporaire
PMON Utilisateur
Processus utilisateur
en échec
Processus PMON
Cache de tampons de
la base de données
RECO
Autres processus
Plusieurs autres processus en arrière-plan peuvent s'exécuter en même temps.
Le processus MMON (Manageability Monitor) exécute diverses tâches de gestion en
arrière-plan :
• Génération d'alertes quand une mesure de performances dépasse le seuil défini
• Capture de clichés (snapshots) via le lancement dynamique de processus supplémentaires
(esclaves MMON)
• Capture de statistiques pour les objets SQL modifiés récemment
Le processus MMNL (Lightweight Manageability Monitor) effectue des tâches fréquentes
visant à simplifier la gestion, notamment des calculs de mesures et des captures de données
historiques sur les sessions.
Le processus MMAN (Memory Manager) est utilisé pour les tâches de base de données
internes. Il gère automatiquement la mémoire pour permettre d'allouer dynamiquement
l'espace mémoire nécessaire, et ainsi éviter les cas de saturation de mémoire ou de mauvaises
performances du cache de tampons (buffer cache).
Mémoires tampon :
SGA
• Pinned
Processus
serveur
Cache • Clean
de tampons
de la base • Free/unused
de données
• Dirty
Processus
Fichiers de Database
données Writer
de données
et physiques
Structure logique Structure physique
Base
de données
Fichier
Schéma Tablespace
de données
Extent
Bloc du
Bloc de
système
données Oracle
d'exploitation
Tablespace USERS
de données Oracle
L'approche générale adoptée pour la conception,
l'implémentation et la maintenance d'une base de données
Oracle comprend différentes tâches :
1. Evaluer le matériel du serveur de base de données
2. Installer le logiciel Oracle
3. Elaborer une stratégie de base de données et de sécurité
4. Créer, migrer et ouvrir la base de données
Les outils suivants vous permettent de gérer l'instance et la base de données Oracle :
• Oracle Enterprise Manager (EM) associe une console graphique, des agents, des
services communs et des outils, fournissant ainsi une plate-forme de gestion système
complète et intégrée pour la gestion des produits Oracle. Une fois le logiciel Oracle
installé, la base de données créée ou mise à niveau et le réseau configuré, vous pouvez
utiliser Enterprise Manager comme interface unique pour gérer votre base de données.
En plus de son interface utilisateur Web qui permet d'exécuter les commandes SQL,
Enterprise Manager fournit une interface avec les autres composants Oracle utilisés pour
administrer la base de données (Recovery Manager et Scheduler, par exemple).
Les principaux outils Enterprise Manager utilisés pour administrer une base de données
Oracle sont les suivants :
• Espace temporaire
approprié
• 64 bits ou 32 bits
• Système
d'exploitation correct
• Niveau de patch du système d'exploitation
• Points de montage :
– /u01
– /disk01
• Répertoires :
– /u01/app/oracle
– /u01/app/applmgr
Remarque : Ne stockez dans le répertoire /pm/q/d/ que les fichiers de contrôle, les
fichiers de journalisation (redo log) et les fichiers de données associés à la base de données d.
Cette variable configure la session de manière à utiliser la langue AMERICAN pour les
messages Oracle, la séquence de tri alphabétique, ainsi que le nom des jours et des mois.
Le territoire étant DENMARK, le format de date et d'heure, ainsi que les conventions
numériques et monétaires, sont définis en conséquence. Le jeu de caractères
WE8MSWIN1252 indique à Oracle Net de convertir les informations textuelles dans ce
jeu de caractères. Il s'agit d'une variable d'environnement sous UNIX et d'une clé de
registre sous Windows. Vous pouvez interroger les paramètres NLS de la session en
cours via l'instruction suivante :
select * from nls_session_parameters;
Pour plus d'informations sur les langues, territoires et jeux de caractères valides, ainsi que
• Data warehouse :
– Recherche et marketing
– Impôts et taxes
– Listes de professionnels agréés (médecins, infirmières,
etc.)
• Transaction processing :
10
11
12
Lorsque vous supprimez une base de données, vous supprimez également ses fichiers de
données, ses fichiers de journalisation (fichiers redo log), ses fichiers de contrôle et ses
fichiers de paramètres d'initialisation. En effet, l'instruction DROP DATABASE supprime tous
les fichiers de contrôle, ainsi que tous les autres fichiers de base de données répertoriés dans
les fichiers de contrôle. Pour que l'instruction DROP DATABASE s'exécute correctement,
toutes les conditions suivantes doivent être satisfaites :
• La base de données doit être montée et fermée.
• La base de données doit être montée en mode exclusif (et non en mode partagé).
• La base de données doit être montée en mode RESTRICTED.
Voici un exemple d'instruction :
Agent de ou
gestion
Database Processus
Control d'écoute
Interface de gestion
Structure de gestion
Les trois principaux composants de la structure de gestion de base de données Oracle sont les
suivants :
• Instance de base de données à gérer
• Processus d'écoute (listener) permettant les connexions à la base de données
• Interface de gestion, qu'il s'agisse d'un agent de gestion qui s'exécute sur le serveur de
base de données (et le connecte à Oracle Enterprise Manager Grid Control) ou de
l'interface Oracle Enterprise Manager Database Control autonome. Cette interface est
également appelée Database Console.
Vous devez démarrer explicitement chacun de ces composants pour pouvoir utiliser ses
services. Vous devez également fermer chacun d'eux correctement lorsque vous arrêtez le
serveur qui héberge la base de données Oracle.
Le premier composant à démarrer est l'interface de gestion. Une fois activée, l'interface de
gestion peut être utilisée pour démarrer les autres composants.
Pages de propriétés
Composants
> SQL*Plus
Param. d'init.
Démarrage BdD
Arrêt BdD
Fichier d'alertes
SQL*Plus fournit à votre base de données Vues de perf.
une interface supplémentaire qui vous permet
d'effectuer les tâches suivantes :
• Effectuer des opérations de gestion de base de données
• Exécuter des commandes SQL pour interroger la base de
données ou pour insérer, mettre à jour et supprimer des
SQL*Plus est :
• un outil en mode ligne de commande
• utilisé en mode interactif ou en mode batch
$ sqlplus hr/hr
Connected to:
LAST_NAME
-------------------------
Abel
Ande
Atkinson
…
Utiliser SQL*Plus
Vous pouvez utiliser l'interface en mode ligne de commande de SQL*Plus pour écrire des
commandes SQL*Plus, SQL et PL/SQL afin d'effectuer les tâches suivantes :
• Entrer, modifier, exécuter, stocker, extraire et enregistrer des commandes SQL et des
blocs PL/SQL.
• Mettre en forme, calculer, stocker et afficher les résultats des interrogations.
• Répertorier les définitions des colonnes d'une table.
• Envoyer des messages à un utilisateur final et accepter les réponses de cet utilisateur.
• Administrer la base de données.
Pour démarrer SQL*Plus :
1. Ouvrez une fenêtre sur un terminal.
2. Dans l'invite de commande, entrez la commande SQL*Plus suivante :
$ sqlplus <userid>/<pwd> or nolog
3. Si vous utilisez l'option NOLOG, vous devez entrer la commande CONNECT suivie du
nom utilisateur avec lequel vous voulez vous connecter.
4. Lorsque vous y êtes invité, entrez le mot de passe de l'utilisateur. SQL*Plus démarre et
établit une connexion à la base de données par défaut.
Remarque : Lorsque vous entrez vos informations d'identification et de connexion sur la
ligne de commande, le mot de passe est visible par tout utilisateur autorisé à exécuter la
commande ps au niveau du système d'exploitation (systèmes UNIX et Linux). Il est donc
préférable d'utiliser l'option NOLOG pour se connecter.
$ ./batch_sqlplus.sh
Sortie
$ sqlplus hr/hr @script.sql
Composants
d'initialisation SQL*Plus
> Param. d'init.
Démarrage BdD
Arrêt BdD
Fichier d'alertes
Vues de perf.
Paramètre Signification
CONTROL_FILES Un ou plusieurs noms de
fichier de contrôle
DB_FILES Nombre maximal de fichiers
de base de données
PROCESSES Nombre maximal de processus
utilisateur du système
Paramètre Signification
SGA_TARGET Taille totale de tous les
composants SGA
MEMORY_TARGET Mémoire utilisable à l'échelle
du système Oracle
SGA
Cache du dictionnaire
Zone SQL
de données
partagée
Paramètre Signification
PGA_AGGREGATE_TARGET Quantité de mémoire PGA
allouée à tous les processus
serveur
SHARED_POOL_SIZE Taille de la zone de mémoire
partagée (en octets)
Mode de gestion du volume
9 rows selected.
Description de la vue :
SQL> desc V$parameter
Name Null? Type
--------------------------------------- ------- -------------
NUM NUMBER
NAME VARCHAR2(80)
TYPE NUMBER
VALUE VARCHAR2(4000)
DISPLAY_VALUE VARCHAR2(4000)
ISDEFAULT VARCHAR2(9)
ISSES_MODIFIABLE VARCHAR2(5)
d'initialisation
• Paramètres statiques :
– Ils ne peuvent être modifiés que dans le fichier
de paramètres
– Un redémarrage de l'instance est nécessaire
pour que les modifications prennent effet
• Paramètres dynamiques :
– Ils peuvent être modifiés tant que la base
de données est en ligne
Utilisez la clause SET de l'instruction ALTER SYSTEM pour définir ou modifier les valeurs
des paramètres d'initialisation. La clause SCOPE facultative précise la portée d'une
modification, de la manière suivante :
• SCOPE=SPFILE : La modification est appliquée uniquement dans le fichier de
paramètres serveur. Aucune modification n'est apportée à l'instance en cours. Pour les
paramètres dynamiques et statiques, la modification prendra effet lors du prochain
démarrage et sera persistante. Il s'agit de la seule définition de SCOPE autorisée pour les
paramètres statiques.
• SCOPE=MEMORY : La modification est appliquée uniquement dans la mémoire.
Elle concerne l'instance en cours et prend effet immédiatement. Pour les paramètres
Session altered.
SYSDATE
-----------
System altered.
Composants
la base de données SQL*Plus
Param. d'init.
> Démarrage BdD
Arrêt BdD
Fichier d'alertes
Vues de perf.
Oracle
Oracle : NOMOUNT
OPEN
STARTUP
MOUNT
Instance
démarrée
SHUTDOWN
MOUNT
OPEN
STARTUP
MOUNT
Fichier de
contrôle ouvert
OPEN
OPEN
STARTUP Tous les fichiers sont
ouverts, conformément à la
MOUNT description du fichier de
contrôle pour cette instance
Fichier de contrôle
ouvert pour cette
Instance
démarrée
SHUTDOWN
SQL> startup 1
Composants
de données Oracle SQL*Plus
Param. d'init.
Démarrage BdD
> Arrêt BdD
Fichier d'alertes
Vues de perf.
Mode d'arrêt A I T N
Modes d'arrêt
Les modes d'arrêt ci-dessous sont indiqués dans leur ordre d'adaptation à l'activité en cours
(du moins adapté au plus adapté) :
• Le mode ABORT effectue des tâches minimales avant l'arrêt. Il requiert une opération de
récupération avant le démarrage ; ne l'utilisez donc qu'en cas de nécessité. Ce mode est
généralement utilisé lorsqu'aucun autre mode d'arrêt ne fonctionne, lorsque le démarrage
de l'instance se révèle problématique, ou lorsque vous avez besoin d'arrêter l'instance
immédiatement en raison d'un événement imminent (tel que l'annonce d'une coupure de
courant dans les secondes qui suivent).
• IMMEDIATE est l'option utilisée le plus fréquemment. Les transactions non validées sont
annulées (rollback).
• Le mode d'arrêt TRANSACTIONAL laisse aux transactions le temps de se terminer.
• Le mode NORMAL attend la déconnexion des sessions.
Du point de vue du temps nécessaire pour effectuer l'arrêt, ABORT est le mode le plus rapide
et NORMAL, le plus lent. Les modes d'arrêt NORMAL et TRANSACTIONAL peuvent être
longs, en fonction du nombre de sessions et de transactions en cours.
Options d'arrêt
SHUTDOWN NORMAL
NORMAL est le mode d'arrêt par défaut. Un arrêt "normal" de la base de données a lieu dans
les conditions suivantes :
• Aucune nouvelle connexion ne peut être établie.
• Le serveur Oracle attend que tous les utilisateurs se déconnectent avant de procéder à
l'arrêt.
• Les tampons de la base de données et les tampons de journalisation (redo log buffers)
sont écrits sur le disque.
• Les processus en arrière-plan sont arrêtés et la mémoire SGA est libérée.
• Le serveur Oracle ferme et démonte la base de données avant d'arrêter l'instance.
• Le démarrage suivant ne nécessite pas de récupération d'instance.
SHUTDOWN TRANSACTIONAL
Un arrêt en mode TRANSACTIONAL évite aux clients de perdre des données, notamment les
résultats des activités en cours. Un arrêt TRANSACTIONAL de la base de données
s'accompagne des conditions suivantes :
• Aucun client ne peut démarrer de nouvelle transaction sur cette instance particulière.
• Un client est déconnecté lorsqu'il termine la transaction en cours.
• Lorsque toutes les transactions sont terminées, l'arrêt a lieu immédiatement.
• Le démarrage suivant ne nécessite pas de récupération d'instance.
SQL> shutdown
Vous pouvez ainsi inclure des opérations de démarrage et d'arrêt dans un script ou dans un
processus en mode batch qui effectue des tâches sur la base de données (pour lesquelles la
base de données doit se trouver dans un état particulier).
Remarque : Les options d'ouverture (OPEN) vous permettent de préciser le mode d'accès à
utiliser pour démarrer la base de données considérée. Les modes possibles sont les suivants :
• READ ONLY
• READ WRITE
Vous pouvez également utiliser l'option PFILE pour la commande STARTUP. Elle permet
d'indiquer le fichier de paramètres d'initialisation PFILE à utiliser au démarrage de l'instance.
Composants
SQL*Plus
Param. d'init.
Démarrage BdD
Arrêt BdD
> Fichier d'alertes
Page d'accueil de la base de données > Vues de perf.
Enterprise Manager surveille le fichier d'alertes et vous informe des erreurs critiques.
Vous pouvez également afficher ce fichier afin de voir les erreurs non critiques et les
messages d'information. Le fichier d'alertes pouvant atteindre une taille impossible à gérer,
vous pouvez le sauvegarder périodiquement et supprimer le fichier en cours. Lorsque la base
de données tente d'écrire à nouveau dans le fichier d'alertes, elle en crée un nouveau.
Remarque : Il existe une version XML du fichier d'alertes dans le répertoire
$ORACLE_BASE/diag/rdbms/<db_name>/<SID>/alert.
Pour afficher le fichier d'alertes dans un éditeur de texte :
• Connectez-vous à la base de données à l'aide de SQL*Plus (ou un autre outil
d'interrogation tel que SQM Developer).
Quand une erreur critique se produit, un numéro d'incident lui est affecté ; les données de
diagnostic concernant cette erreur (fichiers trace notamment) sont immédiatement capturées
et marquées de ce numéro. Ces données sont ensuite stockées dans le référentiel de diagnostic
automatique (ADR – Automatic Diagnostic Repository). Il s'agit d'un fichier extérieur à la
base de données d'où vous pouvez ensuite extraire les informations qui vous intéressent par
numéro d'incident afin de les analyser.
Le référentiel ADR est un référentiel central de trace et de journalisation à l'échelle du
système. Il contient les données de diagnostic de la base (traces, fichier d'alertes, rapports sur
l'état du système, etc.).
Le répertoire racine de ce référentiel est appelé base ADR. Son emplacement est défini par le
Composants
des performances SQL*Plus
Param. d'init.
Démarrage BdD
Arrêt BdD
Elles permettent d'accéder à Fichier d'alertes
> Vues de perf.
des informations relatives
aux changements d'état des Données de session
Evénements Wait
structures mémoire de
Allocations mémoire
l'instance Code SQL exécuté
Utilisation des
données d'annulation
Instance Oracle
Exemples d'utilisation
Index
Présentation Vues
Séquences
Tables temp.
> Dict. de données
Tables
Index
Vues
Utilisateurs
Schémas
ALL_ Tous Tous les Vues DBA_ Inclut les objets propres à
éléments que l'utilisateur
D'une manière générale, chaque ensemble de vues est un sous-ensemble de l'ensemble de vues
nécessitant des privilèges supérieurs, au niveau des lignes et des colonnes. Toutefois, les vues
d'un ensemble donné n'ont pas toutes leur pendant dans les autres ensembles de vues.
Cela dépend de la nature des informations contenues dans la vue. Par exemple, il existe une
vue DBA_LOCK mais pas de vue ALL_LOCK. En effet, seul un administrateur de base de
données (DBA) est intéressé par les données relatives aux verrous externes (locks).
Assurez-vous de choisir l'ensemble de vues adapté à vos besoins. Même si vous êtes autorisé à
accéder aux vues DBA, vous pouvez parfois interroger la version USER d'une vue lorsque
vous souhaitez visualiser les objets dont vous êtes le propriétaire sans inclure d'autres objets
dans l'ensemble de résultats.
a
SELECT table_name, tablespace_name FROM
user_tables;
d DESCRIBE dba_indexes;
Ressources
• Oracle Database Net Services Administrator's Guide 11g Release 1
• Oracle Database Net Services Reference 11g Release 1
Application SGBDR
Fichiers de configuration
Oracle Net
<oracle_home>/network/admin/listener.ora
sqlnet.ora
Résolution de noms
Processus
serveur
Session PGA
Processus
utilisateur
Processus d'écoute
Sessions utilisateur
Si le paquet CONNECT demande un nom de service valide, le processus d'écoute (listener) crée
un nouveau processus afin de traiter la connexion. Ce nouveau processus est appelé processus
serveur. Le processus d'écoute s'y connecte et lui transmet des informations d'initialisation,
notamment l'adresse du processus utilisateur. A ce stade, le processus d'écoute ne gère plus la
connexion et tout le travail est transmis au processus serveur.
Le processus serveur vérifie les informations d'identification et de connexion (credentials) de
l'utilisateur (généralement un mot de passe). Si elles sont valides, une session utilisateur est
créée.
Processus serveur dédié : La session étant établie, le processus serveur joue à présent le rôle
d'agent de l'utilisateur sur le serveur. Le processus serveur est responsable des opérations
suivantes :
• Analyse (parse) et exécution des instructions SQL exécutées par l'intermédiaire de
l'application.
• Examen du cache de tampons (buffer cache) de la base de données à la recherche de blocs
de données requis pour exécuter les instructions SQL.
• Lecture des blocs de données nécessaires à partir des fichiers de données sur disque dans la
partie cache de tampons de la base de données de la mémoire SGA (System Global Area),
si les blocs ne sont pas déjà présents dans la mémoire SGA.
• Gestion de toutes les activités de tri. La zone de tri est une zone de mémoire qui est utilisée
pour les tris. Elle se trouve dans une portion de la mémoire associée à la mémoire PGA
(Program Global Area).
• Renvoi des résultats au processus utilisateur de sorte que l'application puisse traiter les
informations.
• Lecture des options d'audit et envoi d'un état des processus utilisateur à la destination
d'audit.
Oracle Database 11g : Administration Workshop I 5 - 7
Outils de configuration et de gestion de
THESE eKIT MATERIALS ARE FOR YOUR USE IN THIS CLASSROOM ONLY. COPYING eKIT MATERIALS FROM THIS COMPUTER IS STRICTLY PROHIBITED
• Oracle Net Configuration Assistant : Assistant lancé par Oracle Universal Installer lors
de l'installation du logiciel Oracle. Il permet de configurer l'adresse du protocole d'écoute
et les informations relatives aux services pour une base de données Oracle. Pendant une
installation standard de la base de données, Oracle Net Configuration Assistant configure
automatiquement un processus d'écoute nommé LISTENER qui comprend une adresse
d'écoute TCP/IP pour la base de données. Si vous effectuez une installation
personnalisée, Oracle Net Configuration Assistant vous invite à configurer le nom et
l'adresse de votre choix pour le processus d'écoute. Utilisez Oracle Net Configuration
Assistant pour la configuration initiale du réseau après avoir installé la base de données.
Vous pouvez ensuite utiliser Oracle Enterprise Manager et Oracle Net Manager pour
configurer et administrer vos réseaux.
d'écoute
Rappelez-vous que si le processus d'écoute porte un nom autre que LISTENER, vous devez
soit inclure le nom du processus d'écoute dans la commande, soit utiliser la commande SET
CURRENT_LISTENER. Supposons que le processus d'écoute soit nommé flovr_lis.
Voici deux exemples qui arrêtent le processus flovr_lis à l'aide de la syntaxe d'invite :
LSNRCTL> stop flovr_lis
Connecting to
(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=rhel)(PORT=5521)))
The command completed successfully
La syntaxe qui suit génère le même résultat :
LSNRCTL> set cur flovr_lis
1 1
5
6
7
Easy Connect
Avec Easy Connect, vous fournissez toutes les informations requises pour la connexion
Oracle Net dans la chaîne de connexion. Les chaînes de connexion Easy Connect présentent
la forme suivante :
<username>/<password>@<hostname>:<listener port>/<service name>
Le numéro de port du processus d'écoute (listener port) et le nom du service (service name)
sont facultatifs. Si le port du processus d'écoute n'est pas précisé, Oracle Net utilise le port par
défaut (1521). Si le nom du service est omis, Oracle Net suppose qu'il est identique au nom
d'hôte (hostname) fourni dans la chaîne de connexion.
En supposant que le processus d'écoute utilise le protocole TCP pour écouter sur le port 1521
et que les paramètres d'instance SERVICE_NAMES=db et DB_DOMAIN=us.oracle.com
sont définis, la chaîne de connexion illustrée dans la diapositive ci-dessus peut être abrégée de
la façon suivante :
SQL> connect hr/[email protected]
Remarque : Le paramètre d'initialisation SERVICE_NAMES accepte plusieurs valeurs
séparées par des virgules. Il suffit qu'une seule de ces valeurs soit égale à db pour que ce
scénario fonctionne.
Fichiers de configuration
Oracle Net
Fichiers de configuration
Oracle Net
Oracle Net
Créer ou
modifier
Le routage source est utilisé avec Oracle Connection Manager, qui sert de serveur proxy pour
le trafic Oracle Net et sécurise ce dernier via un pare-feu. Oracle Net traite les adresses
comme une liste de relais, en se connectant à la première adresse, puis en demandant le
passage de la première à la deuxième jusqu'à ce que la destination soit atteinte. Ce
comportement diffère de la gestion des incidents ou de l'équilibrage de la charge, en ce sens
que toutes les adresses sont utilisées chaque fois qu'une connexion est établie.
Vous disposez des cinq options suivantes pour la gestion des incidents de connexion et
l'équilibrage de la charge :
Sessions utilisateur
Processus serveur
Processus serveur
Processus d'écoute
Répartiteur
Processus serveur
Processus serveur
Processus serveur
Processus
d'écoute
Client
Répartiteur Processus
serveur dédié
HQ = tnsnames.ora
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)
(HOST = edtdr8p1.us.oracle.com)
(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl.us.oracle.com)
)
CONNECT hr/hr@hq
de base de données
Base
de données
Fichier du système
Tablespace
d'exploitation
Extent
Structures de stockage
Une base de données est divisée en unités de stockage logiques appelées tablespaces.
Chaque tablespace comporte plusieurs blocs de données Oracle logiques. Le paramètre
DB_BLOCK_SIZE définit la taille d'un bloc logique. La taille d'un bloc logique peut être
comprise entre 2 Ko et 32 Ko. La valeur par défaut est de 8 Ko. Un bloc de données Oracle
est la plus petite unité d'E/S logique.
Un nombre donné de blocs logiques contigus constitue un extent. Un ensemble d'extents
alloué à une certaine structure logique forme à son tour un segment.
La taille de bloc utilisée le plus souvent doit être choisie comme taille de bloc standard.
La plupart du temps, c'est la seule taille de bloc que vous devez préciser. DB_BLOCK_SIZE
est généralement égal à 4 Ko ou 8 Ko. Si vous n'affectez pas de valeur à ce paramètre, la taille
des blocs de données par défaut est déterminée par le système d'exploitation et convient
généralement. Il est impossible de modifier la taille des blocs une fois la base de données
créée. Vous devez pour cela recréer la base.
Si la taille des blocs est différente dans la base de données et dans le système d'exploitation,
vérifiez que la valeur définie pour la base de données est un multiple de celle du système
d'exploitation.
Colonnes Blocs
Table A Table B
Lignes
Segment Segment
En-tête de bloc
Croissance
Espace libre
Créer un tablespace
1. Cliquez sur l'onglet Administration, puis sur Tablespaces sous l'en-tête Storage.
2. Cliquez sur Create.
Remarque : Si vous souhaitez créer un tablespace semblable à un tablespace existant,
sélectionnez le tablespace existant de votre choix, puis cliquez sur Create Like dans le
menu Actions. Cliquez sur Go.
La page Create Tablespace apparaît.
3. Entrez le nom du tablespace.
4. Sous l'en-tête Extent Management, sélectionnez Locally Managed.
Les extents (ensembles de blocs contigus) d'un tablespace administré localement sont
gérés de manière efficace par le serveur de base de données Oracle. Dans le cas d'un
tablespace géré au moyen du dictionnaire, vous êtes plus sollicité pour la gestion des
extents, et vous devez disposer d'un accès au dictionnaire de données pour le suivi.
Les tablespaces gérés au moyen du dictionnaire sont en phase d'abandon et leur
utilisation n'est plus recommandée par Oracle.
5. Sous l'en-tête Type, sélectionnez Permanent.
Les tablespaces permanents contiennent les objets de base de données permanents créés
par le système ou par les utilisateurs.
localement
• Manual : Sélectionnez ce mode lorsque vous souhaitez utiliser des listes de blocs libres
(free lists) pour la gestion de l'espace libre dans les segments. Les listes de blocs libres
sont des listes de blocs de données qui contiennent de l'espace disponible pour l'insertion
de lignes. On parle de gestion manuelle de l'espace dans les segments, en raison de la
nécessité de définir et de régler les paramètres de stockage PCTUSED, FREELISTS et
FREELIST GROUPS pour les objets de schéma créés dans le tablespace. Ce mode de
gestion reste pris en charge à des fins de compatibilité descendante, mais il est
recommandé d'utiliser la gestion automatique de l'espace dans les segments (ASSM).
Avantages des tablespaces gérés localement
Les tablespaces gérés localement présentent les avantages suivants par rapport aux
tablespaces gérés au moyen du dictionnaire :
préconfigurée
• SYSTEM • UNDOTBS1
• SYSAUX • USERS
• TEMP • EXAMPLE
• TEMP : Le tablespace temporaire est utilisé lorsque vous exécutez une instruction SQL
qui requiert la création de segments temporaires (par exemple une opération de tri
volumineuse ou la création d'un index). Un tablespace par défaut est affecté à chaque
utilisateur pour le stockage des objets de données créés. De même, chaque utilisateur se
voit attribuer un tablespace temporaire. Il est recommandé de définir un tablespace
temporaire par défaut pour la base de données. Sauf indication contraire, ce tablespace
est affecté à chaque utilisateur nouvellement créé. Dans la base de données
préconfigurée, le tablespace TEMP est désigné comme tablespace temporaire par défaut.
Si aucun tablespace temporaire n'est désigné lors de la création d'un compte utilisateur,
Oracle Database lui affecte le tablespace TEMP.
• UNDOTBS1 : Il s'agit du tablespace d'annulation utilisé par le serveur de base de données
Modifier un tablespace
Une fois créé, un tablespace peut être modifié de différentes façons, en fonction de l'évolution
du système.
Modification du nom : Entrez un nouveau nom pour le tablespace et cliquez sur Apply.
Modification du statut : Un tablespace peut présenter trois statuts (ou états) différents. Les
statuts disponibles dépendent du type de tablespace :
• Read Write : Le tablespace est en ligne (online) et peut faire l'objet d'opérations de
lecture et d'écriture.
• Read Only : Cette option place le tablespace en mode lecture seule. Les transactions
existantes peuvent être terminées au moyen d'une validation (commit) ou d'une
annulation (roll back), mais aucune autre opération LMD (langage de manipulation de
données) n'est autorisée sur les objets du tablespace. Le tablespace est en ligne tout en
étant en mode lecture seule. Vous ne pouvez pas affecter ce mode aux tablespaces
SYSTEM et SYSAUX.
• Offline : Vous pouvez mettre hors ligne (offline) un tablespace qui est en ligne (online),
de sorte que cette partie de la base de données soit temporairement indisponible pour une
utilisation générale. Le reste de la base est ouvert et permet aux utilisateurs d'accéder aux
données. Lorsque vous placez un tablespace hors ligne, vous disposez des options
suivantes :
- Normal : Un tablespace peut être mis hors ligne en mode normal s'il n'existe aucune
condition d'erreur pour aucun de ses fichiers de données. Oracle Database veille à ce
que toutes les données soient écrites sur le disque en définissant un point de reprise
(checkpoint) pour tous les fichiers de données du tablespace à mesure qu'ils sont mis
hors ligne.
- Temporary : Un tablespace peut être mis hors ligne temporairement, même s'il
Options de stockage : Cliquez sur Storage pour modifier les options de journalisation du
tablespace.
Seuils : Cliquez sur Thresholds pour modifier les pourcentages d'utilisation du tablespace
correspondant au niveau d'avertissement et au niveau critique. Vous avez le choix entre trois
options :
• Use Database Default Thresholds : Sélectionnez cette option pour utiliser les valeurs
par défaut prédéfinies, que vous pouvez modifier.
• Specify Thresholds : Cette option vous permet de définir des seuils spécifiques pour le
tablespace.
• Disable Thresholds : Cette option désactive les alertes relatives à d'utilisation de
tablespaces
12061_1_sel_ts_3
Tablespace Tablespace
SYSTEM INVENTORY
avantages
Base Groupe de
de données disques ASM
Fichier
Tablespace Fichier ASM
de données
ASM : Concepts
ASM ne supprime aucune des fonctionnalités de base de données existantes. Les bases de
données existantes continent de fonctionner comme avant. Vous pouvez créer les nouveaux
fichiers en tant que fichiers ASM et conserver l'ancienne méthode d'administration pour les
fichiers existants, ou migrer ces derniers vers ASM.
Le schéma de la diapositive ci-dessus illustre les relations qui existent entre les différents
composants de stockage d'une base de données Oracle utilisant ASM. Les liens entre la partie
gauche et la partie centrale du schéma illustrent les relations qui existaient dans les versions
antérieures. La partie de droite représente les nouveaux concepts introduits par ASM.
Les fichiers de base de données peuvent être stockés en tant que fichiers ASM. Au sommet de
la nouvelle hiérarchie se trouvent les groupes de disques ASM. Un fichier ASM donné
appartient à un seul groupe de disques. En revanche, un groupe de disques peut comporter des
fichiers qui appartiennent à plusieurs bases de données, et une même base de données peut
utiliser l'espace de stockage de plusieurs groupes de disques. Comme vous pouvez le
constater, un groupe de disques est composé de plusieurs disques ASM, qui appartiennent
chacun à un seul groupe de disques. Les fichiers ASM sont toujours répartis entre tous les
disques ASM du groupe. Les disques ASM sont partitionnés en unités d'allocation. Une unité
d'allocation constitue le plus petit espace disque contigu alloué par ASM. Lorsque vous créez
un groupe de disques, vous pouvez définir des unités d'allocation ASM de 1 à 64 Mo, par
puissances de 2 (1, 2, 4, 8, 16, 32 ou 64). Les valeurs élevées peuvent apporter un gain de
performances pour les applications de data warehouse qui utilisent des opérations de lecture
séquentielle de grande taille.
Remarque : Le schéma ci-dessus ne traite que d'un seul type de fichier ASM, à savoir le
fichier de données. ASM peut toutefois être utilisé pour stocker d'autres types de fichier de
base de données.
Objectifs
Les termes suivants, qui ont trait à l'administration des utilisateurs de base de données,
vous aideront à comprendre les objectifs du chapitre :
Un compte utilisateur de base de données constitue un moyen d'organiser l'appartenance des
objets de base de données et l'accès à ces objets.
Un mot de passe est un mode d'authentification par la base de données Oracle.
On nomme privilège le droit d'exécuter un type particulier d'instruction SQL ou d'accéder à
l'objet d'un autre utilisateur.
Un rôle est un groupe nommé de privilèges liés qui sont accordés à des utilisateurs ou à
d'autres rôles.
Les profils imposent un ensemble nommé de limites concernant l'utilisation de la base de
données et les ressources des instances.
Un quota est une allocation d'espace dans un tablespace donné. Il constitue l'un des moyens
permettant de contrôler l'utilisation des ressources par les utilisateurs.
Créer un utilisateur
Dans la page Users d'Enterprise Manager, vous pouvez gérer la liste des utilisateurs de base
de données autorisés à accéder à la base actuelle. Cette page vous permet de créer, supprimer
et modifier les paramètres d'un utilisateur.
Pour créer un utilisateur de base de données :
1. Dans Enterprise Manager Database Control, cliquez sur l'onglet Server puis cliquez sur
Users dans la section Security.
2. Cliquez sur le bouton Create.
Fournissez les informations requises. Les éléments obligatoires (tels que le champ Name),
sont signalés par un astérisque (*).
Les pages suivantes fournissent davantage d'informations sur l'authentification. Les profils
seront traités plus loin dans ce chapitre.
Affectez un tablespace par défaut et un tablespace temporaire à chaque utilisateur. Si les
utilisateurs n'indiquent pas de tablespace quand ils créent un objet, cet objet est créé dans le
tablespace par défaut affecté au propriétaire de l'objet. Vous pouvez ainsi contrôler
l'emplacement des nouveaux objets.
Si vous ne choisissez pas de tablespace par défaut, le tablespace permanent par défaut défini
par le système est utilisé. Il en va de même pour le tablespace temporaire. Si vous ne le
définissez pas, le tablespace temporaire défini par le système est utilisé.
• Password
• External
• Global
External : Cette option utilise une méthode d'authentification extérieure à la base de données
(système d'exploitation, Kerberos ou Radius). L'option Oracle Advanced Security (ASO) est
requise pour les méthodes Kerberos et Radius. Les utilisateurs peuvent se connecter à la base
de données Oracle sans fournir de nom utilisateur ou de mot de passe. L'option ASO
(authentification forte) permet l'identification des utilisateurs via la biométrie, les certificats
x509 et les systèmes tiers. Avec le mode d'authentification External, la base de données utilise
le système d'exploitation sous-jacent, le service d'authentification réseau ou un service
d'authentification externe pour limiter l'accès aux comptes de base de données. Aucun mot de
passe de base de données n'est utilisé pour ce type de connexion. Si le système d'exploitation
ou le service réseau le permet, vous pouvez le configurer pour l'authentification des
utilisateurs. Dans ce cas, définissez le paramètre d'initialisation OS_AUTHENT_PREFIX et
Authentification de l'administrateur
Sécurité au niveau du système d'exploitation : Sous UNIX et Linux, les administrateurs de
base de données (DBA) appartiennent par défaut au groupe install du système
d'exploitation, qui bénéficie des privilèges requis pour la création et la suppression des
fichiers de base de données.
Sécurité au niveau de l'administrateur : Les connexions des utilisateurs dotés de privilèges
SYSBA, SYSOPER et SYSASM ne sont autorisées qu'après une vérification basée sur le fichier
de mots de passe ou sur les privilèges et permissions définis au niveau du système
d'exploitation. Lorsque vous utilisez l'authentification par le système d'exploitation, la base de
données n'utilise pas le nom utilisateur et le mot de passe fournis. Ce type d'authentification
est appliqué dans les cas suivants : si aucun fichier de mots de passe n'est présent, si le nom
utilisateur et le mot de passe fournis ne figurent pas dans le fichier de mots de passe, ou si
aucun nom utilisateur ni mot de passe n'est fourni. Par défaut, le fichier de mots de passe créé
dans Oracle Database 11g respecte la casse.
Quoi qu'il en soit, si l'authentification par le biais du fichier de mots de passe réussit, la
connexion est établie via le nom utilisateur. Si c'est l'authentification par le biais du système
d'exploitation qui aboutit, une connexion CONNECT / est établie et cette dernière n'enregistre
pas l'utilisateur concerné.
Privilèges
On nomme privilège le droit d'exécuter un type particulier d'instruction SQL ou d'accéder à
l'objet d'un autre utilisateur. La base de données Oracle vous permet de contrôler les
opérations que les utilisateurs peuvent effectuer ou non au sein de la base.
Les privilèges sont répartis en deux catégories :
• Privilèges système : Chaque privilège système autorise un utilisateur à effectuer une
certaine opération de base de données ou une certaine classe d'opérations. Par exemple,
le privilège permettant de créer des tablespaces est un privilège système. Les privilèges
système peuvent être accordés par l'administrateur ou par quelqu'un à qui la permission
d'administrer ces privilèges a été accordée explicitement. Il existe plus de cents privilèges
système différents. Un grand nombre d'entre eux contiennent la clause ANY.
• Privilèges objet : Les privilèges objet permettent à un utilisateur d'effectuer une action
particulière sur un objet spécifique, tel qu'une table, une vue, une séquence, une
procédure, une fonction ou un package. Sans permission spécifique, les utilisateurs ne
peuvent accéder qu'à leurs propres objets. Les privilèges objet peuvent être octroyés par
le propriétaire d'un objet, par l'administrateur, ou par un utilisateur auquel la permission
d'accorder des privilèges sur l'objet a été attribuée explicitement.
Privilèges système
Pour accorder des privilèges système, cliquez sur l'onglet System Privileges de la page Edit
User. Sélectionnez les privilèges appropriés dans la liste des privilèges disponibles, puis
déplacez-les vers la liste Selected System Privileges en cliquant sur le bouton Move.
Les privilèges contenant la clause ANY s'étendent au-delà des limites du schéma. Par exemple,
le privilège CREATE TABLE vous permet de créer une table, mais uniquement dans votre
propre schéma. Avec le privilège SELECT ANY TABLE, vous pouvez effectuer une opération
SELECT dans des tables appartenant à d'autres utilisateurs. L'utilisateur SYS et les utilisateurs
dotés du rôle DBA disposent de tous les privilèges ANY. Ils peuvent donc effectuer n'importe
quelle opération sur tous les objets de données. La portée des privilèges système ANY peut
être contrôlée à l'aide de l'option Oracle Database Vault.
Cochez la case Admin Option pour autoriser l'utilisateur à administrer le privilège et à
l'accorder à d'autres utilisateurs.
Tenez bien compte des exigences de sécurité avant d'octroyer des permissions système.
Certains privilèges système sont généralement accordés uniquement aux administrateurs :
• RESTRICTED SESSION : Ce privilège vous autorise à vous connecter même si la base
de données a été ouverte en mode d'accès restreint.
Privilèges objet
Pour accorder des privilèges objet, cliquez sur l'onglet Object Privileges de la page Edit User.
Sélectionnez le type d'objet sur lequel vous voulez octroyer des privilèges, puis cliquez sur le
bouton Add. Indiquez les objets sous la forme <nom_utilisateur.nom_objet> ou
sélectionnez-les dans la liste.
Sélectionnez ensuite les privilèges appropriés dans la liste Available Privileges, puis cliquez
sur le bouton Move. Une fois les privilèges sélectionnés, cliquez sur OK.
Dans la page Edit User, cochez la case Grant si l'utilisateur est autorisé à octroyer le même
accès à d'autres utilisateurs.
GRANT
Privilège
Objet
REVOKE CREATE
TABLE FROM jeff;
Utilisateurs
Jenny David Rachel
Insérer Sélectionner
des employés des employés
Rôles prédéfinis
Il existe plusieurs rôles qui sont définis automatiquement pour les bases de données Oracle
lorsque vous exécutez les scripts de création de la base. Le rôle CONNECT est accordé
automatiquement à tout utilisateur créé avec Enterprise Manager. Pour des raisons de sécurité,
le rôle CONNECT n'a inclus que le privilège CREATE SESSION depuis la version 10.2.0
d'Oracle Database.
Remarque : Lorsque vous octroyez le rôle RESOURCE, vous devez accorder également le
privilège UNLIMITED TABLESPACE.
Rôles fonctionnels
D'autres rôles permettant l'administration de fonctions spéciales sont créés lors de
l'installation des fonctions correspondantes. Par exemple, le rôle XDBADMIN dispose des
privilèges requis pour administrer XML Database si cette fonctionnalité est installée. Le rôle
AQ_ADMINISTRATOR_ROLE fournit les privilèges permettant d'administrer Advanced
Queuing. Le rôle HS_ADMIN_ROLE inclut les privilèges requis pour administrer les services
hétérogènes (Heterogeneous Services).
Vous ne devez pas modifier les privilèges accordés à ces rôles fonctionnels sans l'assistance
du Support technique Oracle, car vous risqueriez de désactiver par inadvertance des
fonctionnalités nécessaires.
Créer un rôle
Un rôle est un groupe nommé de privilèges liés qui sont accordés à des utilisateurs ou à
d'autres rôles. Un administrateur de base de données (DBA) gère les privilèges via des rôles.
Pour créer un rôle :
1. Dans Enterprise Manager Database Control, cliquez sur l'onglet Server puis cliquez sur
Roles dans la section Security.
2. Cliquez sur le bouton Create.
Rôles sécurisés
Les rôles sont généralement activés par défaut, ce qui signifie que si un rôle est accordé à un
utilisateur, cet utilisateur peut exercer les privilèges accordés à ce rôle. Des rôles par défaut
sont affectés aux utilisateurs au moment de leur connexion.
Vous pouvez effectuer les opérations suivantes :
• Empêcher un rôle d'être activé par défaut. Lorsque le rôle est affecté à un utilisateur,
désélectionnez la case DEFAULT. L'utilisateur doit à présent activer explicitement le
rôle pour pouvoir exercer les privilèges correspondants.
• Configurer un rôle afin qu'il nécessite une authentification. L'authentification par défaut
d'un rôle est None, mais il est possible de configurer le rôle afin qu'il ne puisse être activé
qu'après authentification.
• Créer des rôles applicatifs sécurisés qui ne peuvent être activés que via l'exécution d'une
procédure PL/SQL. La procédure PL/SQL peut vérifier des éléments tels que l'adresse
réseau de l'utilisateur, le programme exécuté par l'utilisateur, l'heure ou tout autre
élément nécessaire pour sécuriser correctement un groupe de permissions.
• Administrer plus facilement les rôles à l'aide de l'option Oracle Database Vault.
Cette option simplifie l'administration des rôles sécurisés et permet de limiter les rôles
classiques.
Profils et utilisateurs
Les profils imposent un ensemble nommé de limites concernant l'utilisation de la base de
données et les ressources des instances. Les profils gèrent également le statut des comptes et
imposent des restrictions sur les mots de passe des utilisateurs (longueur, délai d'expiration,
etc.). Chaque utilisateur se voit affecter un profil et ne peut appartenir qu'à un seul profil à la
fois. Si des utilisateurs sont connectés lorsque vous modifiez leur profil, le changement ne
prend effet que lors de leur prochaine connexion.
Le profil DEFAULT sert de base pour tous les autres profils. Comme l'illustre la diapositive
ci-dessus, les limitations associées à un profil peuvent être définies implicitement
(CPU/Session), être illimitées (CPU/Call) ou faire référence à un paramètre du profil
DEFAULT (Connect Time, par exemple).
Les profils ne peuvent imposer des limitations de ressources aux utilisateurs que si la valeur
TRUE est affectée au paramètre d'initialisation RESOURCE_LIMIT. Avec la valeur par
défaut FALSE de RESOURCE_LIMIT, les limitations de ressources liées aux profils sont
ignorées. Les mots de passe des profils sont toujours appliqués.
Les profils permettent à l'administrateur de contrôler les ressources système suivantes :
• CPU : Les ressources CPU peuvent être limitées par session ou par appel. Avec une
limite CPU/Session de 1 000, une session qui utilise ce profil et qui consomme plus de
10 secondes de temps CPU (les limites de temps CPU étant exprimées en centièmes de
seconde) reçoit une erreur et est déconnectée :
ORA-02392: exceeded session limit on CPU usage, you are
being logged off
Une limitation par appel a le même effet, mais au lieu de limiter la session globale de
l'utilisateur, elle empêche chaque commande de consommer trop de temps CPU. Si le temps
CPU par appel (CPU/Call) est limité et que l'utilisateur dépasse cette limite, l'exécution de la
commande est abandonnée. L'utilisateur reçoit alors un message d'erreur de type :
ORA-02393: exceeded call limit on CPU usage
• Network/Memory : Chaque session de base de données consomme des ressources
mémoire du système et (si la session est ouverte par un utilisateur qui ne se trouve pas en
local sur le serveur) des ressources réseau. Vous pouvez définir les éléments suivants :
- Connect Time : Indique le nombre de minutes pendant lesquelles un utilisateur peut
rester connecté avant d'être automatiquement déconnecté.
- Idle Time : Définit le nombre de minutes pendant lesquelles la session d'un
Vérification de la
Historique des complexité des
mots de passe mots de passe
Historique des mots de passe : Vérifie le nouveau mot de passe afin de garantir qu'il n'est
pas réutilisé pendant une durée déterminée ou avant un certain nombre de changements de
mot de passe. Ces vérifications peuvent être implémentées via l'un des paramètres suivants :
• PASSWORD_REUSE_TIME : Indique qu'un utilisateur ne peut pas réutiliser un mot de
passe pendant un nombre déterminé de jours.
• PASSWORD_REUSE_MAX : Indique le nombre de changements de mot de passe requis
avant réutilisation du mot de passe actuel.
Rappelons que les valeurs des paramètres de profil sont soit définies, soit héritées du profil
DEFAULT.
Si les deux paramètres d'historique des mots de passe ont pour valeur UNLIMITED, Oracle
de passe : VERIFY_FUNCTION_11G
La fonction VERIFY_FUNCTION_11G garantit les caractéristiques
suivantes du mot de passe :
• Il comprend au moins huit caractères
• Il est différent du nom utilisateur ou de ce nom assorti
d'un nombre ou inversé
• Il est différent du nom de base de données
ou de ce nom assorti d'un nombre
Index
Vues
Séquences
Tables temp.
Dict. de données
Schéma HR
Utilisateur HR
Lors de l'installation complète d'une base de données Oracle, différents exemples de schémas
liés entre eux sont installés automatiquement. Les exemples présentés dans la documentation
et dans les supports de formation Oracle utilisent ainsi une plate-forme commune.
Ces exemples peuvent avoir différents niveaux de complexité. Les schémas fournis sont les
suivants :
• HR : Le schéma Human Resources est un schéma simple utilisé pour présenter les notions
de base de ce cours. Une extension de ce schéma permet les démonstrations relatives à
Oracle Internet Directory (OID).
• OE : Le schéma Order Entry traite de sujets présentant une complexité moyenne.
Une multitude de types de données y sont disponibles. Le sous-schéma OC (Online
Catalog) est un ensemble d'objets de base de données relationnelle objet créé dans le
Les identificateurs qui ne sont pas inclus entre guillemets peuvent uniquement contenir des
caractères alphanumériques issus du jeu de caractères de la base de données, ainsi que le
caractère de soulignement (_), le symbole dollar ($) et le symbole dièse (#). Les liens de base
de données peuvent, en outre, contenir des points (.) et le symbole "arobas" (@). Il est
vivement déconseillé d'utiliser les symboles $ et # dans les identificateurs qui ne sont pas
inclus entre guillemets.
Les identificateurs inclus entre guillemets peuvent contenir n'importe quel caractère ou signe
de ponctuation, ainsi que des espaces. Toutefois, ni les identificateurs qui sont inclus entre
guillemets, ni ceux qui ne le sont pas ne peuvent contenir de guillemets.
Remarque : Pour les jeux de caractères mono-octets, les colonnes définies avec une
sémantique de type caractère sont fondamentalement identiques à celles définies avec une
sémantique de type octet. La sémantique de type caractère est utile pour définir des chaînes
multioctets de longueur variable car elle permet de simplifier la définition des besoins réels en
matière de longueur pour le stockage des données. Dans une base de données Unicode
(UTF8), par exemple, vous devez définir une colonne VARCHAR2 capable de contenir jusqu'à
cinq caractères chinois plus cinq caractères anglais. Dans la sémantique de type octet, il faut
pour cela (5 * 3 octets) + (1 * 5 octets), soit 20 octets. Dans la sémantique de type caractère,
la colonne a besoin de 10 caractères.
• NCLOB : objet de type caractère de grande taille contenant des caractères Unicode (NLS
Indiquez le nom
de la table et le schéma.
Index
des données Vues
Séquences
Tables temp.
Dict. de données
REGIONS
REGION_ID (PK)
REGION_NAME
Violations de contrainte
Une violation de contrainte se produit lors de l'exécution d'une instruction LMD (langage de
manipulation de données) qui ne respecte pas la contrainte. Les violations de contrainte
peuvent revêtir diverses formes, par exemple :
• Unicité : Un utilisateur tente d'inclure des valeurs en double dans une colonne à laquelle
est appliquée une contrainte UNIQUE (par exemple, lorsqu'une colonne constitue la clé
primaire ou lorsqu'elle est associée à un index unique).
• Intégrité référentielle : La règle imposant que toutes les lignes enfant aient une ligne
parent est enfreinte.
• CHECK : Un utilisateur tente de stocker dans une colonne une valeur qui n'est pas
conforme aux règles appliquées à cette colonne. Par exemple, une contrainte CHECK
imposant un nombre positif est appliquée à une colonne AGE.
Pas
Nouvelles données
Données existantes
DISABLE NOVALIDATE : Les données ne sont pas vérifiées, qu'elles soient nouvelles ou
existantes. Elles peuvent ne pas être conformes à la contrainte. Cet état est souvent utilisé
lorsque les données proviennent d'une source déjà validée et que la table est en lecture seule
(aucune nouvelle donnée n'est entrée dans la table). L'état NOVALIDATE est utilisé dans les
data warehouses où les données ont déjà été nettoyées. L'omission de l'étape de validation
permet de gagner du temps.
DISABLE VALIDATE : Lorsqu'une contrainte se trouve dans cet état, il n'est pas possible de
modifier les colonnes auxquelles elle s'applique. En effet, il serait illogique de valider les
données existantes, puis d'autoriser la saisie de données non vérifiées dans la table. Cet état
est souvent utilisé lorsque les données existantes doivent être validées, mais pas modifiées, et
2 Exécution de la commande
COMMIT
3 Vérification des contraintes
différées
4 Fin de la commande COMMIT
Vous pouvez appliquer l'un des paramètres suivants à une contrainte pouvant être différée :
• Initially immediate indique que, par défaut, la contrainte doit être traitée comme
une contrainte immédiate, sauf indication contraire explicite.
• Initially deferred stipule que, par défaut, la contrainte ne doit être appliquée qu'à
la fin de la transaction.
Remarque : S'il existe déjà un index approprié sur la colonne, il est utilisé pour la contrainte.
Il n'est pas nécessaire de créer d'index supplémentaire pour les clés primaires et les clés
uniques.
Exemples
Quand une contrainte n'est pas respectée, vous recevez un message d'erreur de type :
INSERT INTO emp
(Select employee_id , last_name, first_name,department_id,
manager_id, hire_date, salary FROM HR.employees where
department_id =30);
2 INSERT INTO emp
*
ERROR at line 1:
ORA-02291: integrity constraint (SYS.MGR_FK) violated -
parent key not found
Remarque : Chaque contrainte a un nom. Si ce nom n'est pas précisé lors de la création de la
> Index
Vues
Séquences
Tables temp.
Dict. de données
… WHERE key = 22
Pointeur
Clé de ligne
22
Index Table
Index
Les index sont des structures facultatives associées aux tables. Ils peuvent être créés afin
d'optimiser les performances de mise à jour et d'extraction des données. Un index Oracle
fournit un chemin d'accès direct vers une ligne de données.
Les index peuvent être créés sur une ou plusieurs colonnes d'une table. Dès lors qu'un index
créé, il est automatiquement tenu à jour et utilisé par le serveur Oracle. Les mises à jour des
données d'une table, telles que l'ajout, la mise à jour ou la suppression de lignes, sont
automatiquement propagées vers tous les index concernés, de manière totalement transparente
pour l'utilisateur.
Les index peuvent contribuer à optimiser les performances lors de l'application de contraintes
de clé primaire et de clé unique. En l'absence d'index, un balayage complet de table (full table
scan) est effectué à chaque opération LMD (langage de manipulation de données) appliquée à
la table.
Types d'index
Les valeurs de clé d'un index B-tree sont stockées dans une arborescence équilibrée (Balanced
tree - B-tree), ce qui permet d'effectuer des recherches binaires rapides.
Un index bitmap inclut un bitmap pour chaque valeur de clé indexée. Chaque bitmap
comprend un bit distinct pour chaque ligne de la table indexée. Cela permet d'effectuer des
recherches rapides lorsqu'il existe un nombre restreint de valeurs distinctes (on dit que la
colonne indexée présente une faible cardinalité). Par conséquent, n'utilisez les index bitmap
que pour les colonnes de faible cardinalité.
Par exemple, un indicateur de sexe n'accepte que les valeurs "M" et "F". La recherche ne
porte donc que sur deux bitmaps. En revanche, supposons qu'un index bitmap soit utilisé pour
une colonne phone_number. Il faudrait gérer et explorer un tel nombre de bitmaps que
l'opération deviendrait totalement inefficace.
Entrée d'index
Racine
Index B-Tree
Structure d'un index B-Tree
Au sommet de l'index se trouve la racine, qui contient les entrées pointant vers le niveau
suivant de l'index. Le niveau suivant comprend les blocs branche, qui pointent vers les blocs
du niveau suivant de l'index. Au plus bas niveau se trouvent les noeuds feuille, qui
contiennent les entrées d'index pointant vers les lignes de la table. Les blocs feuille font l'objet
d'une liaison double, afin de faciliter le balayage de l'index dans l'ordre croissant ou
décroissant des valeurs de clé.
Format des entrées feuille
Une entrée d'index est composée des éléments suivants :
• Un en-tête, dans lequel sont stockés le nombre de colonnes et les informations de
verrouillage.
• Des paires longueur-valeur qui définissent la taille d'une colonne de clé suivie de la
valeur de la colonne. (Le nombre de paires de ce type ne doit pas excéder le nombre de
colonnes de l'index.)
• Le ROWID (adresse de ligne) d'une ligne qui contient les valeurs de clé.
Table Fichier 3
Bloc 10
Bloc 11
Index
Bloc 12
Index bitmap
Il est plus judicieux d'utiliser des index bitmap que des index B-tree dans les cas suivants :
• Une table contient des millions de lignes et les colonnes de clé présentent une faible
cardinalité (c'est-à-dire que chaque colonne de clé contient un nombre très restreint de
valeurs distinctes). Par exemple, les index bitmap peuvent être préférables aux index
B-tree pour les colonnes concernant le sexe des personnes et leur situation familiale dans
une table qui contient des enregistrements de passeports.
• Les interrogations utilisent souvent une combinaison de plusieurs conditions WHERE
incluant l'opérateur OR.
• Les colonnes de clé ne sont utilisées qu'en lecture ou font rarement l'objet de mises à
jour.
Structure d'un index bitmap
Un index bitmap est organisé comme un index B-tree, à ceci près que les noeuds feuille
stockent un bitmap pour chaque valeur de clé et non une liste de row ID (adresses de ligne).
Chaque bit du bitmap correspond à un row ID possible. Si un bit est défini, cela signifie que la
ligne correspondant à ce row ID contient la valeur de clé.
Comme l'illustre le diagramme de la diapositive, un noeud feuille d'un index bitmap contient
les éléments suivants :
• Un en-tête, qui contient le nombre de colonnes et les informations de verrouillage.
• Des valeurs de clé constituées de paires longueur-valeur pour chaque colonne de clé.
(Dans l'exemple de la diapositive, la clé est constituée d'une seule colonne et la première
entrée comporte la valeur de clé Blue.)
Un index basé sur une fonction procède à l'indexation de la valeur renvoyée par une fonction.
Il peut s'agir d'une fonction SQL intégrée, d'une fonction PL/SQL fournie ou d'une fonction
définie par l'utilisateur. Ainsi, le serveur n'a pas besoin d'appeler la fonction pour chaque
valeur de clé lorsqu'il effectue une recherche sur l'expression indexée. L'exemple suivant
permet de baser l'index sur le volume renvoyé par la fonction pour chaque arbre selon le type
(species), la hauteur (height) et la circonférence (circumference), qui correspondent à des
colonnes de la table TREES :
CREATE INDEX tree_vol_ix ON
TREES(volume(species,height,circumference));
Toute interrogation dont la clause WHERE contient l'expression
Index
> Vues
…
Table LOCATION
Table COUNTRY
Vue
Vues
Les vues sont des représentations d'interrogations de données dans une ou plusieurs tables ou
autres vues. Les vues sont des interrogations stockées car elles peuvent masquer des
conditions et des jointures très complexes, ainsi que d'autres expressions et structures SQL
complexes. Une vue ne contient pas de données à proprement parler. Les données qu'elle
présente sont issues des tables sur lesquelles elle est basée. Ces tables sont appelées tables de
base de la vue.
Index
Vues
> Séquences
Une séquence est un mécanisme de génération Tables temp.
Dict. de données
automatique de nombres entiers selon
un modèle spécifique.
• Une séquence comporte un nom, 1
qui est utilisé pour la demande 2
3
de la valeur suivante. 4
5
• Une séquence n'est associée à
Séquences
Pour obtenir la valeur suivante d'une séquence, vous devez référencer celle-ci par son nom.
En effet, il n'existe aucune association entre une séquence et une table ou une colonne.
Un numéro fourni par une séquence n'est jamais émis de nouveau, sauf si la séquence est
définie comme étant cyclique. Une application demande parfois une valeur qu'elle n'utilise
jamais ou qu'elle ne stocke jamais dans la base de données. Il peut ainsi y avoir des décalages
entre les numéros figurant dans la table de stockage.
La mise en mémoire cache des numéros de séquence optimise les performances du système
car un ensemble de numéros est préalloué et conservé en mémoire afin de garantir un accès
rapide. En cas d'échec de l'instance, les numéros de séquence mis en mémoire cache ne sont
pas utilisés, ce qui génère des décalages.
Remarque : Si une application interdit les décalages, elle doit implémenter un générateur de
numéros personnalisé. Cette méthode risque toutefois de réduire considérablement les
performances du système. Si vous utilisez une table pour stocker une valeur, et que vous
incrémentez cette valeur et mettez à jour la table pour chaque demande, vous générez un
goulet d'étranglement au niveau du système tout entier. En effet, chaque session doit attendre
que le mécanisme soit disponible, et ce dernier ne peut traiter qu'une demande à la fois afin de
garantir qu'aucune valeur n'est en double ou manquante. Des décalages peuvent également se
produire lorsque les valeurs en mémoire cache sont retirées de la zone de mémoire partagée.
La procédure DBMS_SHARED_POOL.KEEP autorise la valeur d'indicateur "Q" signalant
que le nom de l'objet en mémoire correspond à une séquence. Cela permet d'empêcher la
séquence d'être retirée de la mémoire partagée à cause de son ancienneté.
• Interval : Indique l'intervalle entre les numéros de séquence. Cette valeur peut être un
entier positif ou négatif quelconque, mais différent de zéro, comprenant au plus 28
chiffres. La valeur par défaut est 1.
• Initial : Indique le premier numéro de séquence à générer. Une séquence croissante
générera des numéros supérieurs à cette valeur, tandis qu'une séquence décroissante
générera des numéros inférieurs.
• Cycle Values : Lorsqu'une séquence croissante atteint sa valeur maximale, elle poursuit
en générant à nouveau sa valeur minimale. Lorsqu'une séquence décroissante atteint sa
valeur minimale, elle poursuit en générant à nouveau sa valeur maximale. Lorsque vous
ne choisissez pas l'option Cycle Values, une erreur est renvoyée si vous tentez d'obtenir
un numéro alors que toutes les valeurs possibles pour la séquence sont épuisées.
1 row created.
Index
Vues
Séquences
> Tables temp.
Dict. de données
Une table temporaire :
• fournit un espace de stockage des données qui est
nettoyé automatiquement à la fin de la session
ou de la transaction
• fournit un espace de stockage privé des données
pour chaque session
Tables temporaires
Vous pouvez utiliser des tables temporaires lorsque vous avez besoin de stocker des données
de manière privée pour la réalisation d'une tâche, et que vous souhaitez supprimer ces
données une fois la tâche terminée, à la fin d'une transaction ou d'une session. Les tables
temporaires vous évitent d'avoir à masquer vos données pour les autres sessions et à
supprimer les données générées lorsque vous avez terminé. Les seules données d'une table
temporaire visibles par une session sont celles que la session a insérées.
Une table temporaire peut être propre à une transaction ou à une session. Dans le cas des
tables temporaires propres à une transaction, les données sont présentes pendant toute la durée
de la transaction. Dans le cas des tables temporaires propres à une session, les données sont
présentes pendant la durée de la session. Dans les deux cas, les données insérées par une
session sont réservées à la session. Une session ne peut afficher et modifier que les données
qui lui sont propres. Par conséquent, aucun verrou LMD n'est appliqué aux données d'une
table temporaire.
Les clauses suivantes contrôlent la durée de vie des lignes :
• ON COMMIT DELETE ROWS : Indique que la durée de vie des lignes insérées correspond
à la durée de la transaction uniquement.
• ON COMMIT PRESERVE ROWS : Indique que la durée de vie des lignes insérées
correspond à la durée de la session.
1 row created.
1 row updated.
1 row deleted.
6 rows created.
Commande INSERT
L'instruction INSERT de base crée une ligne à la fois. Via une sous-interrogation SELECT,
vous pouvez faire en sorte que la commande INSERT copie des lignes d'une table vers une
autre. Cette méthode est également appelée instruction INSERT SELECT. Le premier
exemple présenté sur la diapositive insère une seule ligne dans la table EMP.
Dans cet exemple, la table EMP présente exactement la même structure que la table
EMPLOYEES. Si tel n'est pas le cas, vous pouvez nommer les colonnes de chaque table.
Les valeurs sélectionnées dans l'instruction SELECT sont associées aux colonnes de la table
dans laquelle elles sont insérées. La correspondance des valeurs des colonnes suit l'ordre dans
lequel les colonnes sont nommées dans les instructions INSERT et SELECT. Il suffit que les
types de données correspondent.
INSERT INTO emp (first_name, last_name)
(SELECT first_name, last_name From employees);
Dans l'exemple ci-dessus, seules les deux colonnes de la table EMP sont alimentées.
La méthode INSERT SELECT permet de charger en masse des données d'une ou de plusieurs
tables vers une autre table. Elle est illustrée dans le deuxième exemple. En l'occurrence, elle
sélectionne toutes les lignes du département 30 dans la table EMPLOYEES et les insère dans
la table EMP.
6 rows updated.
Commande UPDATE
La commande UPDATE est utilisée pour modifier les lignes existantes d'une table. Le nombre
de lignes modifiées par la commande UPDATE dépend de la condition WHERE. Si la clause
WHERE est omise, toutes les lignes sont modifiées. Si aucune ligne ne satisfait à la condition
WHERE, aucune ligne n'est modifiée.
Le premier exemple présenté sur la diapositive met à jour la table EMP en modifiant le salaire
de l'employé 117.
Le deuxième exemple affecte à tous les départements le numéro du département
correspondant à l'employé 117.
1
SQL> DELETE FROM emp WHERE emp_no =9000;
6 rows deleted.
Commande DELETE
La commande DELETE est utilisée pour supprimer des lignes existantes d'une table.
Le nombre de lignes supprimées par la commande DELETE dépend de la condition WHERE.
Si la clause WHERE est omise, toutes les lignes sont supprimées. Si aucune ligne ne satisfait à
la condition WHERE, aucune ligne n'est supprimée.
Cela ne constitue pas une erreur, comme le montre le premier exemple présenté sur la
diapositive. Le message renvoyé indique seulement qu'aucune ligne n'a été supprimée de la
table.
Le deuxième exemple ne précise pas de clause WHERE, de sorte que toutes les lignes sont
supprimées.
Commande MERGE
La commande MERGE effectue à la fois les opérations UPDATE, INSERT et DELETE.
Elle permet de fusionner les données d'une source avec celles d'une autre source, et
éventuellement d'insérer de nouvelles lignes ou de mettre à jour certaines colonnes d'une ligne
existante.
Considérez l'exemple suivant de données contenues dans la table EMPS :
SQL> COMMIT;
Commit complete.
PL/SQL
Le langage PL/SQL est un langage de programmation Oracle de quatrième génération, qui
fournit des extensions procédurales du langage SQL. Il offre un environnement de
programmation commun pour les bases de données et les applications Oracle, quel que soit le
système d'exploitation ou la plate-forme matérielle.
Grâce au langage PL/SQL, vous pouvez manipuler les données à l'aide d'instructions SQL et
contrôler le flux des programmes par le biais de structures procédurales telles que IF-THEN,
CASE et LOOP. Vous pouvez déclarer des constantes et des variables, définir des procédures
et des fonctions, utiliser des ensembles et des types d'objet, ou encore intercepter les erreurs
lors de l'exécution. Un programme PL/SQL peut également appeler des programmes écrits
dans d'autres langages comme C, C++ et Java.
Le langage PL/SQL permet par ailleurs de protéger les données. Pour pouvoir effectuer un
appel, l'appelant n'a pas besoin de connaître les structures de données lues ou manipulées.
Il n'est pas non plus obligé de disposer de droits d'accès pour ces objets. Il lui suffit d'être
autorisé à exécuter le programme PL/SQL. Il existe également un autre mode de permission
pour appeler un programme PL/SQL, dans lequel l'appelant doit être autorisé à réaliser toutes
les instructions exécutées par le programme appelé.
Etant donné qu'il s'exécute dans la base de données, le code PL/SQL est très efficace pour les
opérations impliquant des volumes importants de données et il limite le trafic réseau des
applications.
Pour plus d'informations sur les structures procédurales et les utilisations du langage PL/SQL,
reportez-vous au manuel PL/SQL Packages and Types Reference.
Objets PL/SQL
• Package : Ensemble de procédures et de fonctions liées entre elles sur un plan logique.
Cette partie d'un package est également appelée specification (ou spec) et décrit
l'interface d'accès à vos applications. Il s'agit de déclarer les types, variables, constantes,
exceptions, curseurs et sous-programmes utilisables.
• Corps du package : Définition complète des curseurs et des sous-programmes en vue
d'implémenter la spécification. Le corps du package contient les détails de
l'implémentation et les déclarations privées qui sont masquées pour l'appelant.
• Corps du type : Ensemble de méthodes (procédures et fonctions) associées à des types
de données définis par l'utilisateur. Pour plus d'informations sur les types de données
définis par l'utilisateur, reportez-vous au manuel Oracle Database Object-Relational
Developer's Guide.
• Procédure : Bloc PL/SQL qui effectue une opération spécifique.
• Fonction : Bloc PL/SQL qui renvoie une valeur unique à l'aide de la commande PL/SQL
RETURN. Il s'agit d'une procédure qui comporte une valeur renvoyée.
• Déclencheur (trigger) : Bloc PL/SQL exécuté lorsqu'un événement particulier se produit
dans la base de données. Ces événements peuvent être basés sur une table, par exemple
lorsqu'une ligne est insérée dans la table. Il peut également s'agir d'événements de base
de données (lorsqu'un utilisateur se connecte à la base de données, par exemple).
Fonctions
Les fonctions PL/SQL sont généralement utilisées pour calculer une valeur. Il existe de
nombreuses fonctions intégrées, telles que SYSDATE, SUM, AVG et TO_DATE.
Les développeurs créent également leurs propres fonctions lors de l'écriture d'applications.
Le code d'une fonction PL/SQL doit contenir une instruction RETURN. Pour créer des
fonctions PL/SQL, vous devez entrer un nom, un schéma et un code source (comme l'indique
la diapositive ci-dessus).
La fonction compute_tax présentée dans la diapositive est créée à l'aide de la commande
SQL suivante :
CREATE OR REPLACE FUNCTION compute_tax (salary NUMBER)
RETURN NUMBER
AS
BEGIN
IF salary<5000 THEN
RETURN salary*.15;
ELSE
RETURN salary*.33;
END IF;
END;
/
Procédures
Les procédures PL/SQL effectuent une action spécifique. A l'instar des fonctions, les
procédures peuvent accepter des valeurs en entrée et exécuter des instructions conditionnelles
telles que IF-THEN, CASE et LOOP.
Remarque : Les procédures n'ont pas nécessairement besoin de paramètres d'entrée et ne
renvoient pas forcément un résultat.
Packages
Les packages sont des regroupements de fonctions et de procédures. Le regroupement de
fonctions et de procédures dans un même package présente des avantages en termes de
performances et de maintenance. Chaque package comprend généralement deux objets de
base de données compilés séparément :
• Spécification du package : Cet objet (parfois appelé en-tête du package) est de type
PACKAGE et contient uniquement la définition des procédures, des fonctions et des
variables du package.
• Corps du package : Cet objet est de type PACKAGE BODY et contient le code
proprement dit des sous-programmes définis dans la spécification du package.
Remarque : La spécification du package est obligatoire ; le corps du package est facultatif.
Dans un package, les procédures et fonctions sont appelées à l'aide d'une notation à points :
nom_package.nom_procédure ou nom_fonction
Pour le package présenté sur la diapositive, les sous-programmes peuvent être appelés de la
manière suivante :
SQL> SELECT money.compute_tax(salary) FROM hr.employees
WHERE employee_id=107;
SQL> EXECUTE money.give_raise_to_all;
Packages intégrés
Les packages PL/SQL intégrés fournis avec Oracle Database permettent l'accès à des
fonctionnalités de base de données étendues, telles que Advanced Queuing, les fonctions de
cryptage et les entrées/sorties (E/S) de fichiers. Ils comprennent également de nombreux
utilitaires d'administration et de maintenance.
Les packages utilisés par un administrateur dépendent du type d'application que la base de
données exécute. Voici quelques-uns des packages PL/SQL d'administration et de maintenance
les plus courants :
• DBMS_STATS : Collecte, affichage et modification des statistiques destinées à
l'optimiseur.
• DBMS_OUTPUT : Génération d'une sortie à partir d'un programme PL/SQL.
• DBMS_SESSION : Accès aux instructions ALTER SESSION et SET ROLE.
• DBMS_SHARED_POOL : Gestion de la zone de mémoire partagée (pour la vider, par
exemple).
• DBMS_UTILITY : Obtention d'informations relatives à l'heure, au temps CPU et à la
version, calcul d'une valeur de hachage (hash value), réalisation de nombreuses autres
fonctionnalités.
• DBMS_SCHEDULER : Planification de fonctions et de procédures pouvant être appelées à
partir de PL/SQL.
• DBMS_REDEFINITION : Redéfinition d'objets en ligne.
• UTL_FILE : Lecture et écriture dans les fichiers du système d'exploitation à partir d'un
programme PL/SQL.
Remarque : Pour plus d'informations sur les packages intégrés, reportez-vous au manuel
PL/SQL Packages and Types Reference.
Déclencheurs
Les déclencheurs (triggers) sont des objets de code PL/SQL stockés dans la base de données,
qui s'exécutent automatiquement lorsqu'un événement se produit. La base de données Oracle
permet d'utiliser de nombreuses actions comme événement déclencheur, par exemple
l'insertion dans une table, la connexion d'un utilisateur à la base, ou bien encore la tentative de
suppression d'une table ou de modification des paramètres d'audit.
Les déclencheurs peuvent appeler d'autres procédures ou fonctions. Il est préférable que le
code d'un déclencheur soit très court. Placez dans un package distinct tout élément qui
nécessite davantage de code.
Les administrateurs de base de données utilisent des déclencheurs pour faciliter l'audit basé
sur les données (ce qui sera étudié dans le chapitre "Implémenter la sécurité de la base de
données Oracle"), pour appliquer des contraintes complexes et pour automatiser de
nombreuses tâches. Par exemple, le déclencheur SECURE_EMPLOYEES illustré dans la
diapositive ci-dessus enregistre toutes les instructions LMD exécutées sur une table.
Evénements déclencheurs
Il existe trois catégories d'événements déclencheurs :
• Les déclencheurs de type événement LMD s'exécutent lorsque les instructions modifient
des données.
• Les déclencheurs de type événement LDD s'exécutent lorsque les instructions créent un
objet ou modifient un objet de quelque manière que ce soit.
• Les déclencheurs de type événement de base de données s'exécutent lorsque les
événements indiqués se produisent dans la base de données.
Pour la plupart des déclencheurs, vous pouvez indiquer si l'exécution doit avoir lieu avant ou
après l'événement. Un déclencheur LMD peut être conçu de manière à s'exécuter une seule
fois pour l'instruction, ou pour chaque ligne modifiée.
Verrous externes
Avant que la base de données n'autorise une session à modifier des données, la session doit
d'abord verrouiller ces données. Un verrou externe (lock) accorde à la session le contrôle
exclusif des données, de sorte qu'aucune autre transaction ne puisse modifier les données
verrouillées jusqu'à la libération du verrou.
Les transactions peuvent verrouiller certaines lignes de données, plusieurs lignes ou même
des tables entières. Oracle Database prend en charge le verrouillage manuel et le verrouillage
automatique. Les verrous obtenus automatiquement choisissent toujours le niveau de
verrouillage le plus bas possible, afin de limiter les conflits potentiels avec d'autres
transactions.
Mécanisme de verrouillage
Le mécanisme de verrouillage est conçu pour fournir le degré maximal de simultanéité
d'accès aux données dans la base. Les transactions qui modifient des données acquièrent des
verrous externes (locks) au niveau ligne plutôt qu'au niveau bloc ou table. Les modifications
apportées aux objets (telles que les déplacements de tables) obtiennent des verrous externes
au niveau objet, plutôt qu'au niveau de la base de données complète ou du schéma.
Les interrogations de données ne nécessitent pas de verrous externes et une interrogation
réussit même si quelqu'un a verrouillé les données (en effet, c'est toujours la valeur originale
avant verrouillage qui est affichée, regénérée à partir des informations d'annulation).
Lorsque plusieurs transactions doivent verrouiller la même ressource, la première transaction
qui demande le verrou externe l'obtient. Les autres transactions attendent jusqu'à la fin de la
première transaction. Le mécanisme de mise en file d'attente est automatique et ne nécessite
aucune intervention de l'administrateur.
Tous les verrous automatiques sont libérés au moment de la validation (commit) des
transactions. Les transactions sont terminées lorsqu'une opération de validation (COMMIT) ou
d'annulation (ROLLBACK) est exécutée. En cas d'échec d'une transaction, le processus en
arrière-plan qui annule automatiquement les modifications apportées par la transaction libère
également tous les verrous détenus par cette transaction.
Les verrous externes (locks) de type Share autorisent plusieurs processus de lecture, mais
aucun processus d'écriture. Ils sont également utilisés de manière transparente lors de la
suppression ou de la mise à jour de lignes dans une table parent qui possède une table
enfant avec des contraintes de clé étrangère sur la table parent.
• SHARE ROW EXCLUSIVE : Permet l'interrogation d'une table entière et autorise d'autres
utilisateurs à interroger des lignes de la table, mais empêche les autres utilisateurs de
verrouiller la table en mode SHARE ou de mettre à jour des lignes.
• EXCLUSIVE : Autorise les interrogations sur la table verrouillée, mais empêche toute
autre activité sur cette table. Un verrou externe EXCLUSIVE est nécessaire pour
supprimer une table.
Transaction 1 Transaction 2
SQL> UPDATE employees SQL> UPDATE employees
2 SET salary=salary*1.1 2 SET salary=salary*1.1
3 WHERE employee_id= 107; 3 WHERE employee_id= 106;
1 row updated. 1 row updated.
Verrous LMD
Chaque transaction LMD acquiert deux verrous :
• Un verrou sur ligne de type EXCLUSIVE pour les lignes mises à jour
• Un verrou sur table de type ROW EXCLUSIVE pour la table mise à jour. Cela permet
d'empêcher une autre session de verrouiller la table entière (par exemple, pour la
supprimer ou la vider) pendant que la modification est apportée.
Le verrou ROW EXCLUSIVE sur la table empêche une instruction LDD de modifier les
métadonnées du dictionnaire au milieu d'une transaction non validée. Cela préserve l'intégrité
du dictionnaire et la cohérence en lecture pendant toute la durée d'une transaction.
Conflits de verrouillage
Les conflits de verrouillage sont fréquents, mais ils sont généralement résolus avec le temps
ou via le mécanisme de mise en file d'attente. Dans de rares cas, un conflit de verrouillage
peut nécessiter l'intervention de l'administrateur. Dans l'exemple de la diapositive ci-dessus, la
transaction 2 obtient un verrou externe (lock) sur une ligne unique à 9:00:00 et l'utilisateur
oublie de valider (commit) la transaction, laissant ainsi le verrou en place. A 9:00:05, la
transaction 1 tente de mettre à jour la table entière, opération qui nécessite un verrou sur
toutes les lignes. La transaction 1 est bloquée par la transaction 2 jusqu'à la validation de cette
dernière, à 16:30:01.
L'utilisateur qui tente d'effectuer la transaction 1 est amené à demander l'aide de
l'administrateur, qui doit détecter et résoudre le conflit.
Transaction 1 Transaction 2
"Verrous mortels"
Un "verrou mortel" (deadlock) est un type particulier de conflit de verrouillage. Un "verrou
mortel" apparaît lorsque plusieurs sessions attendent des données verrouillées par l'une d'elles.
Etant donné que chacune attend l'autre, aucune d'entre elles ne peut terminer la transaction
afin de résoudre le conflit.
Oracle Database détecte automatiquement les "verrous mortels" et met fin à l'instruction en
générant une erreur. En réponse à cette erreur, il convient de réaliser une opération de
validation (commit) ou d'annulation (rollback), ce qui a pour effet de libérer tous les verrous
de la session et de permettre à l'autre session de poursuivre sa transaction.
Dans l'exemple présenté par la diapositive ci-dessus, la transaction 1 doit être validée ou
annulée pour résoudre l'erreur "deadlock detected". Si elle est validée, la deuxième mise à
jour devra être soumise à nouveau pour terminer la transaction. Si elle est annulée, les deux
instructions devront être soumises à nouveau pour effectuer la transaction.
Données d'annulation
La base de données Oracle enregistre les anciennes valeurs (données d'annulation) lorsqu'un
processus modifie des données. Ces données sont stockées telles qu'elles étaient avant leur
modification. La capture des données d'annulation permet d'annuler (rollback) les données qui
ne sont pas validées (commit). Les données d'annulation permettent la prise en charge des
interrogations cohérentes en lecture et des interrogations flashback. Elles peuvent également
être utilisées pour effectuer des flashbacks de transactions et de tables.
Les interrogations cohérentes en lecture fournissent des résultats qui sont conformes aux
données telles qu'elles apparaissaient au début de l'interrogation. Pour qu'une interrogation
cohérente en lecture réussisse, les informations d'origine doivent être présentes sous forme
d'informations d'annulation. Si les données d'origine ne sont plus disponibles, vous recevez un
message d'erreur "Snapshot too old". Tant que ces informations sont conservées, la base de
données Oracle peut recréer les données pour répondre aux interrogations cohérentes en
lecture.
Les interrogations flashback demandent, dans un but précis, une version des données telles
qu'elles apparaissaient à un instant passé. Tant que les informations d'annulation
correspondant à cet instant sont conservées, les interrogations flashback peuvent être
exécutées. L'opération Flashback Transaction utilise les données d'annulation pour créer des
transactions de compensation en vue d'annuler une transaction et ses transactions
dépendantes. Flashback Table permet de récupérer une table dans l'état qu'elle présentait à un
moment précis du passé.
Les données d'annulation sont également utilisées pour la récupération suite à l'échec de
transactions. Une transaction échoue lorsqu'une session utilisateur se termine de façon
anormale (suite à des erreurs réseau ou à la défaillance de l'ordinateur client, par exemple),
avant que l'utilisateur ait décidé de valider (commit) ou d'annuler (rollback) la transaction.
Les transactions peuvent également échouer suite à une défaillance de l'instance ou à
l'exécution d'une commande SHUTDOWN ABORT.
En cas d'échec d'une transaction, le comportement le plus sûr est adopté. La base de données
Oracle supprime toutes les modifications effectuées par un utilisateur et restaure ainsi les
données d'origine.
Les informations d'annulation sont conservées pour chaque transaction, au moins jusqu'à la
Segment
d'annulation
Données
du Données "anciennes"
cache du tablespace
de tampons d'annulation
Opérations LMD
UPDATE Tampon de Informations nouvelles
de journalisation
Annulation Données de journalisation
DBA
Période garantie :
15 minutes
de taille fixe
Raisons :
• Prendre en charge les opérations
Flashback
• Limiter l'extension du tablespace
d'annulation
Workflow :
de données Oracle
Objectifs
Le présent chapitre constitue un point de départ pour l'étude des fonctionnalités Oracle
relatives à la sécurité. Pour plus d'informations, reportez-vous aux manuels suivants :
• Oracle Database Concepts 11g Release 1 (11.1)
• Oracle Database Administrator's Guide 11g Release 1 (11.1)
• Oracle Database Security Guide 11g Release 1 (11.1)
Les cours suivants fournissent une formation complémentaire :
• Oracle Database 11g : Administration Workshop II (D50079FR10)
• Oracle Database 11g : Security
Audit : Un grand nombre des lois qui précèdent contiennent des dispositions exigeant un
audit régulier des plans de sécurité (contrôles internes). Les obligations de la loi SOX sont
floues et font l'objet d'interprétations diverses par les responsables des organisations.
Les caractéristiques de leur implémentation peuvent varier considérablement, en fonction du
niveau de détail demandé par les responsables. La loi SOX est imprécise, mais elle prévoit
des peines sévères ; il est donc important de protéger votre société. Il faut évaluer le coût des
mesures de sécurité par rapport aux risques. Personne ne pourra garantir que vous présentez
une sécurité totale. Le consensus constitue une très bonne solution. Si vous respectez les
règles de sécurité minimales et que vous avez effectué les vérifications préalables, vous êtes
normalement protégé contre les peines les plus sévères prévues par la loi. Pour connaître les
Les packages les plus puissants pouvant être utilisés à des fins malveillantes sont les suivants :
• UTL_SMTP : Permet d'envoyer des messages électroniques arbitraires en utilisant la base
de données en tant que serveur de messagerie SMTP (Simple Mail Transfer Protocol).
Utilisez la liste de contrôle d'accès (ACL) pour contrôler les ordinateurs accessibles par
les différents utilisateurs.
• UTL_TCP : Permet l'établissement par le serveur de base de données de connexions
réseau sortantes vers n'importe quel service réseau destinataire ou en attente. Par
conséquent, des données arbitraires peuvent être échangées entre le serveur de base de
données et n'importe quel service réseau en attente. Utilisez la liste ACL pour contrôler
l'accès.
• UTL_HTTP : Permet au serveur de base de données de demander et d'extraire des
SYSDBA
1 Activer
l'audit de Fichier de
DBA base de données Utilisateur
paramètres
Exécute une
2 Définir les options d'audit commande
Base de données
Processus
serveur
Activer l'audit
Vous devez activer l'audit de la base de données pour que la configuration d'audit produise
des enregistrements.
DBA_AUDIT_TRAIL DBA_FGA_AUDIT_TRAIL
DBA_COMMON_AUDIT_TRAIL
L'élément clé de l'audit basé sur les données est le déclencheur d'audit. Il s'agit simplement
d'un déclencheur (trigger) PL/SQL conçu pour capturer des informations d'audit.
Exemple de déclencheur d'audit :
CREATE OR REPLACE TRIGGER system.hrsalary_audit
AFTER UPDATE OF salary
ON hr.employees
REFERENCING NEW AS NEW OLD AS OLD
FOR EACH ROW
BEGIN
IF :old.salary != :new.salary THEN
INSERT INTO system.audit_employees
Audit détaillé
L'audit de base de données enregistre le fait qu'une opération a eu lieu, mais ne capture pas
d'informations sur l'instruction ayant provoqué cette opération. L'audit détaillé (FGA - fine-
grained auditing) étend cette fonctionnalité en permettant de capturer les instructions SQL qui
interrogent ou manipulent les données.
Il permet également un ciblage plus précis que l'audit standard ou l'audit basé sur les données.
Les options d'audit détaillé peuvent être ciblées par colonnes individuelles d'une table ou
d'une vue et peuvent même être conditionnelles, de sorte que les informations d'audit ne
soient capturées que si certaines conditions définies par l'administrateur sont réunies.
Une stratégie d'audit détaillé peut être associée à plusieurs colonnes d'intérêt. Par défaut, si
l'une de ces colonnes est présente dans l'instruction SQL, elle est auditée. Deux packages,
DBMS_FGA.ALL_COLUMNS et DBMS_FGA.ANY_COLUMNS, permettent de baser l'audit
sur l'utilisation de toutes les colonnes d'intérêt dans l'instruction ou sur l'utilisation de l'une
quelconque d'entre elles.
Utilisez le package PL/SQL DBMS_FGA pour créer une stratégie d'audit sur la table ou sur la
vue cible. Si certaines des lignes renvoyées par un bloc d'interrogation correspondent à la
colonne auditée et satisfont à la condition d'audit indiquée, un événement d'audit entraîne la
création d'un enregistrement d'audit et son stockage dans la trace d'audit. L'événement d'audit
peut éventuellement exécuter une procédure. L'audit détaillé cible automatiquement le niveau
instruction. Une instruction SELECT qui renvoie des milliers de lignes génère donc un seul
enregistrement d'audit.
dbms_fga.add_policy (
object_schema => 'HR',
object_name => 'EMPLOYEES',
• Définit : policy_name => 'audit_emps_salary',
– les critères d'audit audit_condition=> 'department_id=10',
audit_column => 'SALARY',
– l'action d'audit handler_schema => 'secure',
• Est créée via handler_module => 'log_emps_salary',
enable => TRUE,
DBMS_FGA.ADD_POLICY statement_types => 'SELECT,UPDATE');
Colonne d'audit
La colonne d'audit définit les données auditées. Un événement d'audit se produit si cette
colonne est incluse dans l'instruction SELECT ou si la condition d'audit autorise la sélection.
L'exemple de la diapositive audite deux colonnes, à l'aide de l'argument suivant :
audit_column => 'SALARY,COMMISION_PCT'
Cet argument est facultatif. S'il n'est pas indiqué, seul l'argument AUDIT_CONDITION
détermine si un événement d'audit doit se produire.
Objet
L'objet est la table ou la vue auditée. Il est transmis sous la forme de deux arguments :
• Le schéma contenant l'objet
à prendre en compte
• Les enregistrements sont audités si le prédicat d'audit
détaillé est satisfait et que les colonnes d'intérêt sont
référencées.
• Les instructions DELETE sont auditées quelles que
soient les colonnes indiquées.
• Les instructions MERGE sont auditées avec les
instructions INSERT ou UPDATE sous-jacentes
UPDATE hr.employees
SET salary = 1000
WHERE employee_id = 200;
Audit de DBA
Les utilisateurs SYSDBA et SYSOPER possèdent les privilèges permettant de démarrer et
d'arrêter la base de données. Etant donné qu'ils peuvent apporter des modifications pendant
que la base de données est fermée, la trace d'audit de ces privilèges doit être stockée à
l'extérieur de la base de données. La base Oracle capture automatiquement les événements de
connexion générés par les utilisateurs SYSDBA et SYSOPER. Il s'agit d'une méthode
intéressante de suivi des actions SYSDBA et SYSOPER autorisées et non autorisées, mais elle
n'est utile que si la trace d'audit du système d'exploitation est examinée.
La base de données Oracle capture toujours les événements de connexion générés par les
utilisateurs dotés de privilèges. Les autres actions sont capturées si l'audit de DBA est activé
explicitement. Activez l'audit des utilisateurs SYSDBA et SYSOPER en définissant le
paramètre d'initialisation :
audit_sys_operations=TRUE (La valeur par défaut est FALSE.)
Si les opérations SYS sont auditées, le paramètre d'initialisation audit_file_dest
détermine le lieu de stockage des enregistrements d'audit. Sur une plate-forme Windows, la
trace d'audit est enregistrée par défaut dans le journal des événements. Sur les plates-formes
UNIX et Linux, les enregistrements d'audit sont stockés dans
$ORACLE_HOME/rdbms/audit.
Efficace
Terminologie
Le référentiel AWR (Automatic Workload Repository) fournit aux composants internes du
serveur Oracle des services de collecte, de traitement, de maintenance et d'utilisation de
statistiques de performances pour la détection des problèmes et le réglage automatique
(self-tuning). L'historique des sessions actives (ASH- Active Session History), stocké dans le
référentiel AWR, répertorie les activités des sessions récentes.
Les statistiques sont des ensembles de données qui fournissent davantage de détails sur la
base de données et ses objets. Les statistiques destinées à l'optimiseur sont utilisées par ce
dernier pour choisir le meilleur plan d'exécution pour chaque instruction SQL. Les statistiques
de la base de données fournissent des informations pour le contrôle des performances.
Les clichés (snapshots) AWR contiennent des statistiques et des mesures relatives à la base de
données, des statistiques sur les applications (volumes de transactions, temps de réponse), des
statistiques sur le système d'exploitation et d'autres indicateurs. Une ligne de base (baseline)
est un ensemble de clichés AWR collectés pendant une certaine période. La ligne de base est
utilisée pour comparer les performances : comparaison des performances actuelles par rapport
à la ligne de base ou comparaison entre lignes de base.
Par défaut, les données de la ligne de base de la fenêtre d'analyse glissante du système
(System Moving Window Baseline) sont collectées dans Oracle Database 11g. Cette ligne est
un jeu de clichés (snapshots) évolutif qui inclut par défaut les clichés des huit derniers jours.
Elle devient valide quand les données collectées sont suffisantes et que les calculs de
statistiques ont été effectués. Par défaut, les calculs de statistiques ont lieu tous les samedis à
minuit.
Optimizer Statistics
destinées à l'optimiseur
Vous pouvez également soumettre une tâche manuelle si la tâche automatique a échoué ou a
été désactivée.
Vous pouvez collecter les statistiques destinées à l'optimiseur via le package DBMS_STATS
directement :
SQL> EXEC dbms_stats.gather_table_stats('HR','EMPLOYEES');
SQL> SELECT num_rows FROM dba_tables
2 WHERE owner='HR' AND table_name = 'EMPLOYEES';
NUM_ROWS
----------
214
STATISTICS_LEVEL
Niveaux de statistiques
Le paramètre d'initialisation STATISTICS_LEVEL contrôle la capture de diverses
statistiques et des fonctions de conseil (advisors), notamment les tâches de maintenance
automatique. Les tâches de maintenance automatique comprennent la collecte des statistiques
destinées à l'optimiseur. Le paramètre STATISTICS_LEVEL admet les valeurs suivantes :
• BASIC : Le calcul des statistiques et des mesures de performances AWR est désactivé.
La collecte automatique des statistiques destinées à l'optimiseur est désactivée, de même
que toutes les fonctions de conseil et les alertes générées par le serveur.
• TYPICAL : Les principales statistiques nécessaires à la gestion automatique de la base
de données sont collectées. Il s'agit des statistiques nécessaires pour surveiller le
comportement de la base de données Oracle. Cette collecte automatique de statistiques
réduit la probabilité d'obtenir des instructions SQL mal optimisées en raison de
statistiques obsolètes ou non valides.
• ALL : Toutes les statistiques possibles sont capturées. Ce niveau de capture inclut les
statistiques temporelles du système d'exploitation et les statistiques d'exécution des plans.
Ces statistiques sont la plupart du temps inutiles, sauf pour certains tests de diagnostic
bien précis. Il est préférable de ne pas les collecter pour préserver les performances.
Oracle recommande de conserver la valeur par défaut TYPICAL du paramètre
STATISTICS_LEVEL. En effet, le niveau BASIC désactive la collecte automatique des
statistiques destinées à l'optimiseur.
PORTEE
PREFERENCES
INSTRUCTION
TABLE CASCADE
Tâche de collecte DEGREE
SCHEMA
des statistiques ESTIMATE_PERCENT
exec dbms_stats.set_table_prefs('SH','SALES','STALE_PERCENT','13');
Lorsque les différentes procédures de collecte s'exécutent, elles extraient les préférences qui
ont été définies au niveau de chaque objet. Pour consulter les préférences définies au niveau
des objets, utilisez la vue DBA_TAB_STAT_PREFS. Les préférences qui ne sont pas définies
au niveau des objets seront de niveau global. Vous pouvez consulter les préférences de niveau
global en appelant la procédure DBMS_STATS.GET_PREFS pour chaque préférence.
Ces préférences peuvent être définies, extraites, supprimées, exportées et importées à chaque
niveau : table, schéma, base de données, global. Les valeurs des préférences sont en principe
définies du niveau Global au niveau Tables, de sorte qu'elles s'appliquent au groupe le plus
restreint en dernier lieu.
Préférences Oracle Database 11g :
Clients externes
EM SQL*Plus …
SGA
Collecte V$ DBA_*
efficace de
Composant Composant
ADDM à réglage … à réglage
Clients internes automatique automatique
Période d'intérêt
dans le passé
Lignes de base
Une ligne de base (baseline) est un cliché (snapshot) AWR que vous avez balisé en fonction
de périodes importantes. Un jeu de clichés est défini sur une paire de clichés. Ces derniers
sont identifiés par leur numéro de séquence (snap_id). Chaque jeu de clichés correspond à
une seule paire de clichés.
Un jeu de clichés peut être identifié par un nom fourni par l'utilisateur ou par un identificateur
généré par le système. Pour créer un jeu de clichés, vous exécutez la procédure
DBMS_WORKLOAD_REPOSITORY.CREATE_BASELINE et vous indiquez un nom et une
paire d'identificateurs de cliché. Un identificateur est affecté au nouveau jeu de clichés.
Les identificateurs de jeu de clichés sont uniques pour toute la durée de vie d'une base de
données.
Les jeux de clichés sont utilisés pour conserver les données de clichés. Les clichés
appartenant à des jeux sont conservés jusqu'à la suppression de ces derniers.
Vous pouvez configurer des jeux de clichés, généralement à partir de périodes représentatives
dans le passé, afin de les utiliser pour une comparaison avec le comportement actuel du
système. Vous pouvez également configurer des alertes basées sur des seuils à l'aide de jeux
de clichés à partir d'Enterprise Manager Database Control.
Vous pouvez obtenir les numéros de séquence (snap_id) directement à partir de
DBA_HIST_SNAPSHOT ou d'Enterprise Manager Database Control.
Remarque : Pour plus d'informations sur le package DBMS_WORKLOAD_REPOSITORY,
reportez-vous au manuel Oracle Database PL/SQL Packages and Types Reference.
• Période de conservation
– Durée par défaut :
Huit jours
– Tenez compte des besoins
en termes de stockage.
• Intervalle de collecte
– Toutes les 60 minutes par défaut
Diagnostic Monitor)
EM ADDM
Résultats ADDM
AWR
Résultats ADDM
La page Automatic Database Diagnostic Monitor (ADDM) affiche les résultats détaillés de la
dernière exécution d'ADDM. Database Time représente le temps d'activité total des sessions
dans la base de données au cours de la période d'analyse. Un pourcentage d'impact spécifique
est indiqué pour chacun des résultats. L'impact représente le temps consommé par le problème
par rapport au temps d'activité de la base de données au cours de la période d'analyse.
La diapositive ci-dessus appelle les remarques suivantes :
1. Le graphique indique que le nombre moyen d'utilisateurs actifs a énormément augmenté
à ce stade. En outre, le problème principal était un problème de type Wait.
2. L'icône indique que la sortie ADDM affichée au bas de la page correspond à ce point
dans le temps. Vous pouvez remonter dans le passé (pour consulter des analyses
antérieures) en cliquant sur les autres icônes.
3. Les résultats fournissent un bref récapitulatif des zones réglables trouvées par le moniteur
ADDM. Si vous cliquez sur un problème particulier, vous accédez à la page Performance
Finding Details.
Cliquez sur le bouton View Report pour obtenir des détails sur l'analyse de performances sous
la forme d'un état au format texte.
Recommandations ADDM
Dans la page Performance Finding Details, des recommandations indiquent comment
résoudre les problèmes détectés. Ces recommandations sont regroupées en différentes
catégories : Schema, SQL Tuning, Database Configuration et beaucoup d'autres. La colonne
Benefit (%) indique le gain maximal qui pourrait être obtenu sur le temps d'exécution de
la base de données suite à l'implémentation de la recommandation.
Le moniteur ADDM étudie diverses modifications du système et ses recommandations
peuvent porter sur les points suivants :
• Modifications matérielles : Ajout de CPU ou modification de la configuration du
sous-système d'E/S.
• Configuration de la base de données : Modification de la valeur de certains paramètres
d'initialisation.
• Modifications au niveau schéma : Partitionnement par hachage d'une table ou d'un
index, ou utilisation de la gestion automatique de l'espace dans les segments.
• Modifications au niveau application : Utilisation de l'option de mise en cache pour les
séquences ou utilisation de variables attachées (bind variables).
• Utilisation d'autres fonctions de conseil (advisors) : Exécution de SQL Tuning
Advisor pour les instructions SQL à forte consommation de ressources ou exécution de
Segment Advisor pour les objets qui utilisent beaucoup d'espace.
Segment Advisor
Espace
Undo Advisor
Infrastructure de conseil
Les fonctions de conseil (advisors) fournissent des informations sur l'utilisation des ressources
et sur les performances des composants qu'elles analysent. Par exemple, Memory Advisor
propose une valeur recommandée pour le paramètre d'initialisation MEMORY_TARGET qui
contrôle la quantité de mémoire totale utilisée par l'instance Oracle Database.
En se basant sur les données capturées dans le référentiel AWR, le moniteur ADDM permet à
la base de données Oracle d'établir un diagnostic sur ses propres performances et de
déterminer la façon dont les problèmes identifiés peuvent être résolus. Le moniteur ADDM
s'exécute automatiquement après chaque capture de statistiques AWR. Il peut éventuellement
appeler d'autres fonctions de conseil.
Les avantages principaux fournis par l'infrastructure de conseil sont les suivants :
• Toutes les fonctions de conseil utilisent une interface uniforme.
• Toutes les fonctions de conseil ont une zone de stockage commune pour leurs données
source et pour leurs résultats : le référentiel de charge globale (Workload Repository).
La diapositive ci-dessus ne répertorie pas toutes les fonctions de conseil (par exemple, elle ne
mentionne pas Data Recovery Advisor et SQL Repair Advisor).
Procédure Description
CREATE_TASK Crée une tâche dans le référentiel
DELETE_TASK Supprime une tâche du référentiel
EXECUTE_TASK Lance l'exécution d'une tâche
INTERRUPT_TASK Suspend une tâche en cours d'exécution
GET_TASK_REPORT Crée et renvoie un état au format texte
pour la tâche indiquée
Package DBMS_ADVISOR
Le package DBMS_ADVISOR contient l'ensemble des constantes et des déclarations de
procédure qui s'appliquent aux modules de conseil. Vous pouvez l'utiliser pour exécuter des
tâches à partir de la ligne de commande.
Pour exécuter des procédures de conseil, vous devez disposer du privilège ADVISOR. Ce
privilège offre un accès complet aux procédures et aux vues des fonctions de conseil
(advisors).
Remarque : Pour plus d'informations sur toutes les procédures du package DBMS_ADVISOR,
reportez-vous au manuel Oracle Database PL/SQL Packages and Types Reference.
automatisées
Enterprise Manager
AWR
1. Indiquez un seuil.
2. Créez un scénario
de test.
3. Recherchez une
alerte. 1
2
MMON
Maintenance proactive
Tuning Advisor
Access Advisor
Mémoire
Statistiques
Objets non valides
Problèmes
d'allocation
de mémoire
Sessions
Tuning Advisor
de mémoire Access Advisor
> Mémoire
Statistiques
Objets non valides
• Gestion automatique de la mémoire (AMM)
– Permet de préciser la quantité totale de mémoire allouée à
l'instance (mémoires SGA et PGA comprises)
• Gestion automatique de la mémoire partagée (ASMM)
– Permet d'indiquer la mémoire SGA totale via un seul paramètre
d'initialisation
– Permet au serveur Oracle de gérer la quantité de mémoire
(AMM)
Pour définir ces paramètres lorsque la fonction ASMM est activée, vous devez utiliser la
commande ALTER SYSTEM.
de la mémoire partagée
Toutes les fonctions de conseil (advisors) sur la mémoire sont accessibles à partir de
SQL*Plus via les vues V$* associées. Il existe quatre vues pour les composants SGA
réglables automatiquement.
Pour dimensionner les principaux composants de la mémoire SGA, Oracle Database fournit
les nouvelles fonctions de conseil suivantes :
• V$DB_CACHE_ADVICE : Liste des lignes qui prédisent le nombre d'opérations de
lecture physique et leur durée pour la taille de cache associée à chaque ligne
• V$SHARED_POOL_ADVICE : Informations relatives au temps d'analyse (parse) estimé
dans la zone de mémoire partagée, en fonction de la taille de celle-ci
• V$JAVA_POOL_ADVICE : Informations relatives au temps estimé de chargement des
SIZE_FOR_ESTIMATE ESTD_PHYSICAL_READ_FACTOR
----------------- -------------------------
16 4.0296
32 2.4861
48 1.7561
64 1.0993
80 1.0017
96 1
112 1
128 1
144 1
160 1
176 1
192 1
208 1
224 1
240 1
256 1
272 1
288 1
304 1
320 1
Mémoire
des performances > Statistiques
Objets non valides
Tuning Advisor
et inutilisables Access Advisor
Mémoire
Statistiques
> Objets non valides
Incidence sur les performances :
• Les objets de code PL/SQL sont recompilés.
• Les index sont regénérés.
Si la procédure a été valide par le passé mais qu'elle a cessé de l'être récemment, vous avez
deux moyens de résoudre le problème :
• Ne rien faire. La plupart des objets PL/SQL sont, si nécessaire, recompilés
automatiquement lors d'un appel. Les utilisateurs perçoivent simplement un léger
ralentissement dû à la recompilation des objets. (Dans la plupart des cas, ce
ralentissement n'est même pas perceptible.)
• Recompiler manuellement l'objet non valide.
Les objets PL/SQL non valides peuvent être recompilés manuellement via Enterprise
Manager ou par l'intermédiaire de commandes SQL :
ALTER PROCEDURE HR.add_job_history COMPILE;