0137 Formation Administration Oracle
0137 Formation Administration Oracle
0137 Formation Administration Oracle
Les principales tâches d’un administrateur d’une base de données sont les suivantes:
Développeurs d’application:
* Conception et réalisation d’une application
* Conception de la structure de la base de données
* Evaluation des besoins en ressources de mémorisation
* Optimisation des performances de l’application
* Etablissement des mesures de sécurité
Utilisateurs d’application
* Saisie, modification et suppression de données
* Génération des états de sortie
Pour réaliser les tâches qui lui sont dévolues, l’administrateur de la base dispose
* de deux comptes spéciaux: SYS et SYSTEM créés en même temps que la base de
données.
SYS est propriétaire des tables et des vues du dictionnaire de données. Ces tables et ces vues,
essentielles pour le fonctionnement du serveur, ne peuvent être modifiées que par Oracle7 lui-
même.
SYSTEM crée les tables et les vues qui fournissent les informations nécessaires à
l'administration du sytème; il crée les tables et les vues utilisées par les outils Oracle.
SYS et SYSTEM possèdent le rôle OSDBA; ils disposent de tous les privilèges Système qui
leur permettent d'exécuter toutes les opérations nécessaires au fonctionnement d'une instance.
----------------------------------------------------------------------------------------------------------------------------------------
Université de Nice-Sophia Antipolis 2 ©JC Grattarola
Administration d'une base de données Oracle7 Administration
* d’outils spécifiques:
Connexion à la base
CONNECT {[username [/password] ]|[INTERNAL]} ['@'instance-spec]
Déconnexion de la base
DISCONNECT
----------------------------------------------------------------------------------------------------------------------------------------
Université de Nice-Sophia Antipolis 3 ©JC Grattarola
Administration d'une base de données Oracle7 Administration
* charger dans la bases des données, ayant des formats divers, provenant de
fichiers externes.
* manipuler des champs de données avant leur insertion dans la base
(contrôles de validité)
* distribuer des enregistrements d’un fichier dans plusieurs tables
* transformer plusieurs enregistrements physiques en un enregistrement
logique
----------------------------------------------------------------------------------------------------------------------------------------
Université de Nice-Sophia Antipolis 4 ©JC Grattarola
Administration d'une base de données Oracle7 Administration
* l’archivage de données
* le transfert de données entre bases Oracle
* le stockage de données dans des fichiers externes à la base
* le stockage des définitions d’objets (tables, clusters, index) avec ou sans les
données
* la sauvegarde des seules tables modifiées depuis le dernier export (export
incrémental ou cumulatif)
* la restauration de données accidentellement supprimées
d/ ENTERPRISE MANAGER
L’administrateur d’une base de données doit réaliser des opérations particulières comme
l’ouverture ou la fermeture de l’instance ; il doit pour cela bénéficier de privilèges spéciaux.
L’identification et l’authentification d’un administrateur répondent ainsi à des règles de
sécurité très strictes ; elles peuvent se faire de deux manières différentes :
-Authentification Système
-Utilisation d’un fichier Password
Authentification Système
----------------------------------------------------------------------------------------------------------------------------------------
Université de Nice-Sophia Antipolis 5 ©JC Grattarola
Administration d'une base de données Oracle7 Administration
Fichier Password
Le fichier password est utilisé pour authentifier les utilisateurs possédant les privilèges
SYSOPER ou SYSDBA qui permettent d’exécuter, sous svrmgrl, les commandes suivantes :
L’atribution des privilèges SYSOPER ou SYSDBA (ou des rôles OSOPER ou OSDBA) à un
utilisateur ajoute cet utilisateur au fichier password. Elle se fait par un utilisateur ayant ces
privilèges (SYS ou SYSTEM connectés sous svrmgrl avec le privilège SYSDBA).
Svrmgrl
SVRMGRL> connect systeme/password as SYSDBA
La liste des utilisateurs possédant les privilèges SYSDBA ou SYSOPER peut être visualisée à
l’aide de la commande
----------------------------------------------------------------------------------------------------------------------------------------
Université de Nice-Sophia Antipolis 6 ©JC Grattarola
Administration d'une base de données Oracle7 Architecture
-System Global Area (SGA): ensemble des buffers nécessaires à la gestion des
transactions
-Process: ensemble des processus Système et des processus Utilisateurs
-Files: ensembles des fichiers contenant les informations
PMON SMON
User
Process
User
Process Fichiers Database Fichiers Redo Log Fichiers
User Redo Log
Process Archivés
Fichiers de contrôle
----------------------------------------------------------------------------------------------------------------------------------------
Université de Nice-Sophia Antipolis 7 ©JC Grattarola
Administration d'une base de données Oracle7 Architecture
Oracle crée et utilise des structures mémoire rassemblées dans la System Global Area (SGA),
partagées par les différents utilisateurs.
La SGA et les processus background constituent une instance; l’espace mémoire nécessaire à
la SGA est alloué au démarrage d’une instance et est restitué à la fermeture de cette instance.
Les données de la SGA sont partagées par l’ensemble des utilisateurs connectés à un moment
donné; elles sont divisées en plusieurs types de buffers:
* Data base Buffer Cache: Il contient les blocs de données, les blocs d’index,des
blocs contenant les ROLLBACK SEGMENTS et des blocs pour la gestion du système, les
plus récemment utilisés; il peut contenir des données modifiées qui n’ont pas encore été
enregistrées sur disque.
* Redo Log Buffer: Il contient les redo entries (toutes les données avant leur mise à
jour,toutes les modifications effectuées sur ces données,la trace de toutes les transactions
validées ou non encore validées),ensemble des modifications réalisées sur la base; ces redo
entries sont mémorisées sur un redo log file, qui pourra être utilisé en cas de panne.
* Zone de partage des ordres SQL: cette zone est utilisée pour mémoriser,analyser et
traiter les ordres SQL soumis par les utilisateurs
II-LES PROCESSUS
* User Process
* Oracle Process
Un User Process est créé et maintenu pour exécuter le code d’un programme applicatif
(ex:application Oracle Forms) ou d'un outil Oracle (ex: Server Manager); le User process
communique avec les Process Server à travers le programme interface.
----------------------------------------------------------------------------------------------------------------------------------------
Université de Nice-Sophia Antipolis 8 ©JC Grattarola
Administration d'une base de données Oracle7 Architecture
DataBase Writer (DBWR):écrit les blocs modifiés de la base dans les fichiers Datafile, d'une
manière désynchronisée par rapport aux transactions, en utilisant une LRU list
Log Writer (LGWR): écrit le contenu du buffer Redo Log de la SGA dans le fichier Redo
Log en ligne lors d'un COMMIT
Checkpoint (CKPT): signale au DBWR la nécessité d'un CHECKPOINT et trace cet
évènement dans les fichiers de contrôle et dans les en-têtes des fichiers Datafile. Il est
facultatif; s'il est absent il est suppléé par LGWR.
System Monitor (SMON): il rétablit la cohérence du système après un incident et libère les
ressources utilisées par le système
Process Monitor (PMON): il récupère les anomalies des process USER; il supprime les
process en erreur, annule les transactions non validées, libère les verrous, libère les ressources
utilisées dans la SGA. Il contrôle également les dispatchers et les process serveurs.
Archiver (ARCH): il recopie les fichiers redo log pleins sur un fichier archive pour pallier
une perte éventuelle d’un fichier DATABASE (optionnel,existe en mode ARCHIVELOG
uniquement)
Recoverer(RECO): il est utilisé pour résoudre les transactions interrompues par une panne
dans un système de bases de données distribuées
Dispatcher(Dnnn): processus présent dans une configuration multi-threaded. Il y a au moins
un de ces processus pour chaque protocole de communication. Il dirige les requêtes d'un
utilisateur vers un serveur partagé et lui renvoie ses requêtes.
Lock(LCKn): de 1 à 10 processus de verrouillage peuvent être utilisés lorsque Oracle Parallel
Server est installé.
Le programme Interface
C’est un mécanisme par lequel un programme utilisateur communique avec le server process;
il est utilisé comme une méthode de communication standard entre un client et Oracle. Il agit
comme un mécanisme de communication en formattant les données, transférant les données,
interceptant et retournant les erreurs. Il réalise les conversions de données, en particulier entre
différents types d’ordinateurs ou avec des données de programmes externes.
III-LES FICHIERS
Fichiers Datafile
Ils contiennent toutes les données de la base; toutes les structures logiques et physiques y sont
stockées (tables, index, rollback segments). Ils possèdent les caractéristiques suivantes:
----------------------------------------------------------------------------------------------------------------------------------------
Université de Nice-Sophia Antipolis 9 ©JC Grattarola
Administration d'une base de données Oracle7 Architecture
* un fichier Datafile est constitué d’un ensemble de blocs dont la taille dépend du
sytème d’exploitation.
Les nouvelles données et les données modifiées ne sont pas nécessairement écrites
immédiatement sur un fichier Datafile; afin d'optimiser les performances du sytème, elles sont
mémorisées dans la SGA et sont écrites périodiquement sur les fichiers Datafile par le
process DBWR.
Ils sont utilisés au démarrage d’une instance et pour la restauration si nécessaire. Ils sont
modifiés à chaque modification structurelle de la base.
Fichiers Archivage
Ils contiennent des copies des fichiers Redo Log (mode ARCHIVELOG uniquement)
Fichier initSID.ora
Il contient les paramètres de fonctionnement d’une instance et un paramètre identifiant le ou
les fichiers CONTROL; il est utilisé à la création ou au démarrage d’une instance (SID: nom
de la base)
.
Les différents paramètres définissent
L’ensemble de ces paramètres est mémorisé dans la vue v$parameter; il est présenté en
Annexe C. Tous les fichiers sont stockés dans le répertoire ORACLE_HOME/dbs,
ORACLE_HOME contenant le répertoire d’installation de Oracle.
----------------------------------------------------------------------------------------------------------------------------------------
Université de Nice-Sophia Antipolis 10 ©JC Grattarola
Administration d'une base de données Oracle7 Architecture
Le dictionnaire de données est formé par un ensemble de tables système contenant toutes les
informations sur les structures logiques et physiques de la base:
*noms des utilisateurs
*privilèges et rôles de chaque utilisateur
*noms et caractéristiques des objets de la base (tables, vues, snapshots, index,
clusters, synonyms, séquences, procédures,fonctions, packages, triggers, etc..)
*contraintes d’intégrité
*ressources allouées
*activité de la base
*etc....
Seul Oracle peut mettre à jour les tables du dictionnaire de données. Il contient des vues
accessibles aux utilisateurs à l’aide de l’ordre SELECT. Il est conservé dans le tablespace
SYSTEM; il est la propriété de l'utilisateur SYS.
Les classes de vues:
USER_...: informations sur tous les objets dont l’utilisateur est propriétaire
ALL_.....: informations sur tous les objets accessibles par l’utilisateur connecté
DBA_....: informations sur tous les objets de la base(utilisable uniquement par les utilisateurs
ayant le privilège SELECT ANY TABLE)
V$.........: informations sur dynamic performance tables décrivant l’état actuel du système
(locks,rollback segments,control files,etc....).
Les vues les plus couramment utilisées possèdent un synonyme simple.
L’annexe A présente l'ensemble de ces vues; le contenu de chacune d'elles est fourni dans
Oracle7 Server Reference.
----------------------------------------------------------------------------------------------------------------------------------------
Université de Nice-Sophia Antipolis 11 ©JC Grattarola
Administration d'une base de données Oracle7 Architecture
VI-QUESTIONS
I/ A l'aide des commandes sytème, rechercher le nom de chaque instance Oracle démarrée sur
le système
IV/ Afficher le nom et la description des vues du dictionnaire de données;repérer les vues
contenant les informations relatives à l'architecture de la base de données.
----------------------------------------------------------------------------------------------------------------------------------------
Université de Nice-Sophia Antipolis 12 ©JC Grattarola
Administration d'une base de données Oracle7 Création
b/ Création des fichiers paramètres: Chaque instance est démarrée à l’aide d’un
fichier paramètre initSID.ora ou SID est le nom de la base; un modèle de fichier paramètre
est fourni avec la distribution du noyau (init.ora).Le fichier paramètre de la base devra
indiquer au minimum les valeurs des paramètres suivants: db_name, db_domain,
control_files, db_block_size, db_block_buffers, processes, rollback_segments; par défaut,
Oracle recherche ce fichier dans ORACLE-HOME/dbs.
Le montage de la base associe une base avec une instance; l'instance ouvre les fichiers
Control file; cette option permet à l'administrateur de réaliser différentes opérations telles que
restauration ou sauvegarde, les autres utilisateurs n'ayant pas accès à la base.
L'ouverture de la base rend la base disponible pour les opérations des utilisateurs; Oracle
ouvre les fichiers Datafile et les fichiers redo log on line
Ces trois étapes sont réalisées à l'aide de la commande STARTUP de l'outil svrmgrl
Démarrage de l'instance:
STARTUP NOMOUNT pfile = …/initSID.ora
Montage de la base
STARTUP MOUNT pfile = …/initSID.ora
Ouverture de la base
STARTUP OPEN pfile = …/initSID.ora
----------------------------------------------------------------------------------------------------------------------------------------
Université de Nice-Sophia Antipolis 13 ©JC Grattarola
Administration d'une base de données Oracle7 Création
Le paramètre pfile indique le répertoire de stockage du fichier initSID.ora; par défaut, Oracle
recherche ce fichier dans le répertoire ORACLE_HOME/dbs.
Le passage d’une étape à la suivante se fait à l’aide des commandes de l’outil svrmgrl (server
manager en mode caractères) et avec le mot clé INTERNAL
Sous UNIX, un utilisateur peut utiliser svrmgrl s’il appartient à un groupe d’administration de
la base (DBA par défaut); les groupes sont définis dans le fichier /etc/group.
[CONTROLFILE REUSE ]
[MAXLOGFILES integer ]
[MAXLOGMEMBERS integer ]
[MAXLOGHISTORY integer ]
[MAXDATAFILES integer ]
[MAXINSTANCES integer ]
[CHARACTER SET 'US7ASCII' ]
[ARCHIVELOG ]
NOARCHIVELOG
[EXCLUSIVE ]
filespec
‘filename’ SIZE integer K/M [REUSE]
----------------------------------------------------------------------------------------------------------------------------------------
Université de Nice-Sophia Antipolis 14 ©JC Grattarola
Administration d'une base de données Oracle7 Création
Elle se fait à l’aide des scripts SQL fournis dans le répertoire ORACLE_HOME/rdbms/admin
f/ Activation de sqlplus
- sous SYSTEM exécuter la procédure pupbld.sql qui se trouve dans
ORACLE_HOME/sqlplus/admin
----------------------------------------------------------------------------------------------------------------------------------------
Université de Nice-Sophia Antipolis 15 ©JC Grattarola
Administration d'une base de données Oracle7 Création
III-LES TABLESPACES
Les données d’une base Oracle sont mémorisées dans une ou plusieurs unités logiques
appelées tablespaces et physiquement dans des fichiers associés à ces tablespaces.
Chaque base contient au moins un tablespace appelé SYSTEM, qui est automatiquement créé
par l’ordre CREATE DATABASE; ce tablespace SYSTEM contient toujours les tables du
dictionnaire de données, les procédures, les fonctions, les packages, les triggers et le rollback
segment SYSTEM.
BASE DE DONNEES
TABLESPACE SYSTEM
TABLESPACE APPLICATION 1
INDEX
DONNEES
INDEX
TABLESPACE APPLICATION 2
DONNEES
----------------------------------------------------------------------------------------------------------------------------------------
Université de Nice-Sophia Antipolis 16 ©JC Grattarola
Administration d'une base de données Oracle7 Création
Un tablespace peut être online ou offline. L’administrateur peut rendre un tablespace offline
pour:
* rendre une partie de la base non accessible, alors qu’un accès normal continue sur les
autres tablespaces
* faire la sauvegarde des informations contenues dans ce tablespace
* rendre une application et ses tables innaccessibles pendant la maintenance de
l’application
Un tablespace est constitué d’un ou plusieurs fichiers physiques qui contiennent les différents
types de segments(données, index, rollback); la taille d’un tablespace peut être augmentée en
lui affectant un nouveau fichier à l’aide de la commande ALTER TABLESPACE.
----------------------------------------------------------------------------------------------------------------------------------------
Université de Nice-Sophia Antipolis 17 ©JC Grattarola
Administration d'une base de données Oracle7 Création
TABLESPACE tablespace_name
STORAGE clause
A sa création, un rollback segment est offline; il doit être mis online à l'aide de la commande
ALTER ROLLBACK SEGMENT rolback segment_name online
pour être utilisé pendant la session.
Pour être en permanence online un rollback segment doit figurer dans le fichier init.ora de
l’instance.
Un rollback segment est supprimé par la commande DROP ROLLBACK SEGMENT
rollback segment_name; il devra avoir été mis offline auparavant.
Les caractéristiques des rollback segments sont mémorisées dans la vue
sys.dba_rollback_segs du dictionnaire de données.
Une transaction peut être orientée dans un rollback segment avec la commande
V-QUESTIONS
I/ Etudiez les scripts fournis en Annexe D et déterminer la structure de la base créée par
CretdbGEN.sql.
Inspirez vous de ces scripts pour créer votre propre base.
-Exécutez la commande umask 002 pour permettre à Oracle d'écrire dans vos répertoires
----------------------------------------------------------------------------------------------------------------------------------------
Université de Nice-Sophia Antipolis 18 ©JC Grattarola
Administration d'une base de données Oracle7 Création
D/Activez sqlplus
E/Démarrez l’instance créée; vérifiez que les processus Oracle sont activés
III/ Retrouvez à l’aide des vues du dictionnaire de données les caractéristiques physiques
(tablespaces, rollback segments,...) de cette base
IV /Sur la base que vous venez de créer précédemment, créez un tablespace ayant les
caractéristiques suivantes:
Nom du tablespace: <login>
Nom du fichier associé: <login>.dbf
Localisation du fichier associé: /oracle/<login>
Taille du fichier associé: 200K
VIII/ Créez le rollback segment RBS_<login> dans le tablespace <login>. Essayez à nouveau
d'insérer une ligne dans la table T. Que se passe-t-il? Comment peut-on remédier au
problème?
IX/ Ecrivez une requête SQL qui affiche toutes les caractéristiques des rollback segments de
la base
X/ Créez un deuxième rollback segment RBS_<login>2; Insérerz deux lignes dans la table
T_<login> et faite en sorte que l' insertion se déroule à l’aide du rollback segment
RBS_<login> pour la première puis de RBS_<login>2 pour la deuxième; vérifiez cette
propriété à l’aide des tables virtuelles du dictionnaire de données v$rollname et v$rollstat. (
valeur du champ Xacts de la vue v$rollstat)
----------------------------------------------------------------------------------------------------------------------------------------
Université de Nice-Sophia Antipolis 19 ©JC Grattarola
Administration d'une base de données Oracle7 Organisation physique
I- ORGANISATION GENERALE
Une base de données Oracle est physiquement constituée par un ensemble de fichiers où sont
stockées les données; elle est divisée en unités logiques appelées tablespaces (cf chapitre 3).
Le niveau le plus fin de granularité est le bloc (appelé aussi bloc logique, bloc Oracle ou
page); il correspond à un nombre spécifique de bytes, défini à la création de la base. La taille
d’un bloc est un multiple de la taille d’un bloc du système d’exploitation; sa valeur est donnée
par le paramètre db_block_size.
Un ensemble de blocs contigüs forme un extent, contenant un type particulier d’informations
(table, index,…).
-segment de données: Chaque table non liée à un cluster ou chaque cluster est stocké
dans un segment de données créé par les commandes CREATE TABLE ou CREATE
CLUSTER.
-segment d’index: l’index est stocké dans un segment index créé par la commande
CREATE INDEX; tous les extents alloués à un segment index lui sont conservés aussi
longtemps que l’index existe; lorsque la table associée ou l’index sont supprimés, l’espace est
utilisé pour d’autres usages dans le tablespace.
----------------------------------------------------------------------------------------------------------------------------------------
Université de Nice-Sophia Antipolis 20 ©JC Grattarola
Administration d'une base de données Oracle7 Organisation physique
exemple:
CREATE TABLE dept(deptno number(2), dname varchar2(14), loc varchar2(13))
STORAGE (initial 100K next 50K minextents 1 maxextents 50 pctincrease 5)
Les tables, indépendantes ou faisant partie d'un cluster, sont mémorisées dans les segments de
données des fichiers Datafile. La figure suivante présente l'organisation physique de ces
fichiers et la structure des informations à l'intérieur d'un bloc physique.
----------------------------------------------------------------------------------------------------------------------------------------
Université de Nice-Sophia Antipolis 21 ©JC Grattarola
Administration d'une base de données Oracle7 Organisation physique
FICHIER DATAFILE
SEGMENT
SEGMENTS DE SEGMENTS ROLLBACK
TEMPORAIRE
DONNEES D'INDEX SEGMENTS
----------------------------------------------------------------------------------------------------------------------------------------
Université de Nice-Sophia Antipolis 22 ©JC Grattarola
Administration d'une base de données Oracle7 Organisation physique
En-tête de bloc
La taille de l'en-tête de bloc est donné par la formule:
où KCBH, UB4, KTBBH, KTBIT, KDBH sont fournies dans la vue V$TYPE_SIZE (cf
Annexe E) et INITRANS est le nombre initial d'entrées allouées à la table
Données
L'espace disponible en dehors de l'en-tête (DISPO +DONNEES) est
----------------------------------------------------------------------------------------------------------------------------------------
Université de Nice-Sophia Antipolis 23 ©JC Grattarola
Administration d'une base de données Oracle7 Organisation physique
Un index est une structure de données supplémentaire qui permet à l’optimiseur d’accélérer
les recherches dans une table; il est organisé en B-arbre, c’est à dire de manière à mettre le
même temps (même nombre d’accès disque) pour atteindre n’importe quel enregistrement de
la table.
Un index est créé implicitement à la création d’une table avec les contraintes PRIMARY
KEY et UNIQUE ou explicitement par la commande CREATE INDEX ; il peut être construit
sur une ou plusieurs colonnes.
Un index peut être « composé », c’est à dire construit sur plusieurs colonnes, pour augmenter
la « sélectivité » par exemple.
----------------------------------------------------------------------------------------------------------------------------------------
Université de Nice-Sophia Antipolis 24 ©JC Grattarola
Administration d'une base de données Oracle7 Organisation physique
Il ne faut pas oublier qu’un index, s’il peut augmenter la performance des ordres SELECT,
diminue les performances des ordres INSERT, UPDATE, DELETE et occupe une place non
négligeable dans la base.
B MI
J T
----------------------------------------------------------------------------------------------------------------------------------------
Université de Nice-Sophia Antipolis 25 ©JC Grattarola
Administration d'une base de données Oracle7 Organisation physique
En-tête de bloc
EN_TETE_INDEX = 113 + 24*INITRANS
Pour un index INITRANS = 2 par défaut
H_INDEX: 2
ROWID_LENGTH: 6
F longueur totale (colonne + zone longueur)des colonnes de l'index de longueur inférieure ou
égale à 127; pour ces colonnes, la taille de la zone longueur est 1
V: longueur totale(colonne + zone longueur)des colonnes de l'index de longueur supérieure à
127; pour ces colonnes, la taille de la zone longueur est 2
IV-LES CLUSTERS
Un cluster est une structure physique utilisée pour stocker des tables sur lesquelles doivent
être effectuées de nombreuses requêtes avec opération de jointure. Un cluster ne doit pas être
installé sur une table fréquemment utilisée isolément.
Dans un cluster, les enregistrements de plusieurs tables ayant même valeur du champ servant
à la jointure (clé du cluster) sont mémorisés dans un même bloc physique ; la valeur du
paramètre SIZE de la commande CREATE CLUSTER donne le nombre maximum de clusters
qui peuvent être mémorisés dans un bloc.
KEY_ Ck Sk T1 T2 T2
HEADER
----------------------------------------------------------------------------------------------------------------------------------------
Université de Nice-Sophia Antipolis 26 ©JC Grattarola
Administration d'une base de données Oracle7 Organisation physique
Cluster indexé
Un index est créé sur la clé du cluster
INDEX
10 20 30 40
Cluster hash
Une fonction de hachage est appliquée à la clé du cluster et renvoie une valeur qui est utilisée
pour localiser l’enregistrement; Oracle fournit une fonction de hachage interne qui produit un
minimum de collisions dans la plupart des cas. Il est possible d’utiliser une fonction de
hachage particulière en la spécifiant dans la clause CREATE CLUSTER.
On choisira un cluster indexé si la taille de segment et le nombre de clés est difficile à prévoir,
un hash cluster si ces informations sont faciles à prévoir.
On choisira un cluster indexé pour les jointures, un hash cluster pour les requêtes dont la
sélection porte sur la clé de hash.
----------------------------------------------------------------------------------------------------------------------------------------
Université de Nice-Sophia Antipolis 27 ©JC Grattarola
Administration d'une base de données Oracle7 Organisation physique
En-tête
EN_TETE_CLUSTER = KCBH + UB4 + KTBBH + KTBIT*(INITTRANS-1) + KDBH
Sn = ROWHEADER + Fn + Vn
avec
ROWHEADER = 4
Fn: longueur totale (colonne + zone longueur) des colonnes de la table Tn de longueur
inférieure ou égale à 250; pour ces colonnes, la taille de la zone longueur est 1
Vn: longueur totale (colonne + zone longueur) des colonnes de la table Tn de longueur
supérieure à 250; pour ces colonnes, la taille de la zone longueur est 3
avec
Rn: nombre moyen d'enregistrements de la table n associés à une clé du cluster
Sn: taille moyenne d'un enregistrement de la table n associé à une clé du cluster
KEY_HEADER=19
Ck: longueur de colonne pour la clé du cluster
Sk: taille moyenne de la valeur de la clé du cluster
Rt: Nombre total d'enregistrements associés à une clé du cluster (R1 + R2 +...+Rn)
----------------------------------------------------------------------------------------------------------------------------------------
Université de Nice-Sophia Antipolis 28 ©JC Grattarola
Administration d'une base de données Oracle7 Organisation physique
A la création de la base, le rollback segment SYSTEM est créé dans la tablespace SYSTEM.
Si la base doît avoir d’autres tablespaces, elle doît posséder au moins deux autres rollback
segments dans le tablespace SYSTEM. Le rollback segment SYSTEM est créé avec les
paramètres par défaut asssociés à la tablespace; il ne peut pas être détruit.
Une instance utilise toujours le rollback segment SYSTEM en complément d’autres rollback
segments, si nécessaire. Cependant, s’il existe plusieurs rollback segments, Oracle essaie
d’utiliser le rollback segment SYSTEM uniquement pour des transactions spéciales.
La taille totale des rollback segments doît être calculée à partir de la taille des transactions les
plus fréquentes. En général, des transactions courtes sont plus performantes avec plusieurs
petits rollback segments alors que les transactions plus longues ,batch par exemple, seront
plus efficaces avec de plus grands rollback segments.
Si toutes les transactions sont courtes, les rollback segments seront assez petits pour être
mémorisés en mémoire centrale; s’ils sont assez petits, ils pourront être mémorisés dans la
SGA selon l’algorithme LRU et le nombre d'opérations d’entréee/sortie sera nettement
diminué.
Le principal inconvénient des petits rollback segments est d’accroître la probabilité d’errreur
« snapshot too old » (bases de données distribuées).
Quand il y a des transactions courtes et des transactions longues, les performances peuvent
être optimisées en affectant certains rollback segments à certaines transactions à l’aide de la
commande SET TRANSACTION USE ROLLBACK SEGMENT rollback_segment.
Dans le cas général, la taille de chaque rollback segment doît être environ 10% la taille de la
plus grosse table étant donné que la plupart de ses instructions SQL affectent 10% ou moins
d’une table; la taille optimale du rollback segment peut être précisée par le paramètre
OPTIMAL de la STORAGE clause lors de la création du rollback segment.
L’espace alloué à un rollback segment doît être réparti entre des extents de même taille; la
performance optimale au niveau des entrées/sorties est observée si chaque rollback segment
est composé de 10 à 20 extents.
Le nombre total de rollback segments est lié au nombre de transactions simultanées
envisagées:
Les informations sur les rollback segments se trouvent dans les vues
DBA_ROLLBACK_SEGS, V$ROLLNAME, V$ROLLSTAT.
----------------------------------------------------------------------------------------------------------------------------------------
Université de Nice-Sophia Antipolis 29 ©JC Grattarola
Administration d'une base de données Oracle7 Organisation physique
VI-QUESTIONS
I/ La base de données "Gestion des Commandes" est constituée des tables suivantes:
CUSTOMER
custid not null number(6) ITEM
name not null varchar2(45) ordid not null number(4)
address varchar2(40) itemid not null number(4)
city varchar2(30) prodid number(6)
state varchar2(2) actualprice number(8,2)
zip varchar2(9) qty number(8)
area number(3) itemtot number(8,2)
phone varchar2(9)
repid not null number(4)
creditlimit number(9,2) PRODUCT
comments long prodid not null number(6)
descrip varchar2(30)
ORD
ordid not null number(4) PRICE
orderdate date prodid not null number(6)
commplan varchar2(1) stdprice number(8,2)
custid number(6) minprice number(8,2)
shipdate date startdate date
total number(8,2) enddate date
Des clés primaires sont définies pour les tables CUSTOMER,ORD et PRODUCT.
Des index sont créés sur les champs CUSTOMER.name et PRODUCT.descrip.
Des clusters (indexés) sont créés entre les tables ORD et ITEM d'une part, PRODUCT et
PRICE d'autre part.
Evaluer l'espace nécessaire pour mémoriser ces informations; le volume du tablespace
SYSTEM est évalué à 10M.
III/ Faire un état de la base avec l'occupation de l'espace par tablespace et par propriétaire
d'objet, fournissant les informations suivantes: type,nom, bytes, blocks et extents.
----------------------------------------------------------------------------------------------------------------------------------------
Université de Nice-Sophia Antipolis 30 ©JC Grattarola
Administration d'une base de données Oracle7 Gestion des utilisateurs
I-LES UTILISATEURS
L’administration de la sécurité sur la base de données est réalisée grâce à la création des
utilisateurs et à la gestion de leurs droits d’accès. Chaque base de données possède sa propre
liste d’utilisateurs. Le contrôle des droits d’accès à la base de données se fait par rapport à un
ensemble de caractéristiques prédéfinies:
[PROFILE profile_name ]
----------------------------------------------------------------------------------------------------------------------------------------
Université de Nice-Sophia Antipolis 31 ©JC Grattarola
Administration d'une base de données Oracle7 Gestion des utilisateurs
La commande ALTER USER permet à l’utilisateur de modifier uniquement son mot de passe
(identified by password).
[PROFILE profile_name ]
[DEFAULT ROLE role_name/ ALL EXCEPT role_name/NONE ]
Toutes les caractéristiques des utilisateurs sont répertoriées dans le dictionnaire de données
* USER_USERS: informations sur l’utilisateur courant
* ALL_USERS: informations sur tous les utilisateurs de la base
* DBA_USERS: toutes les informations sur tous les utilisateurs de la base
* USER_TS_QUOTAS: informations sur les quotas de l’utilisateur courant
* DBA_TS_QUOTAS: informations sur les quotas de tous les utilisateurs
* le privilège SYSTEM qui donne le droit d’exécuter des actions sur un certain type
d’objet
*le privilège OBJET qui donne le droit d’accès à une table, une vue, une séquence,
une procédure, une fonction ou un package.
----------------------------------------------------------------------------------------------------------------------------------------
Université de Nice-Sophia Antipolis 32 ©JC Grattarola
Administration d'une base de données Oracle7 Gestion des utilisateurs
Privilèges SYSTEM
Les privilèges SYSTEM définissent les types d’opérations disponibles pour l’utilisateur.
Ces privilèges sont attribués par la commande GRANT.
L’option WITH ADMIN OPTION donne le droit de redistribuer les privilèges reçus (cette
option est interdite si le privilège est attribué à un rôle). Ces privilèges sont supprimés par la
commande REVOKE.
Privilèges OBJET
Ils donnent le droit d’accès à une table, une vue,une séquence, une procédure, une fonction ou
un package. Ils sont différents selon les types d’objet.
Ils sont attribués par la commande GRANT et supprimés par la commande REVOKE.
----------------------------------------------------------------------------------------------------------------------------------------
Université de Nice-Sophia Antipolis 33 ©JC Grattarola
Administration d'une base de données Oracle7 Gestion des utilisateurs
Un rôle est un ensemble de privilèges donnés à des utilisateurs ou à d’autres rôles permettant
de gérer plus facilement les droits d’accès aux données; ils permettent de définir des groupes
d‘utilisateurs ayant les mêmes privilèges.
Il existe des rôles prédéfinis à la création de la base:
Ces trois derniers roles sont créés pour la compatibilité avec les versions précédentes
d’Oracle.
Un role est créé par la commande CREATE ROLE et supprimé par DROP ROLE.
Les privilèges SYSTEM attribués à un role sont définis par la commande GRANT; un role est
donné à un utilisateur par la commande GRANT; un utilisateur peut appartenir à plusieurs
rôles, le nombre de rôles étant limité par le paramètre d’initialisation (fichier init.ora)
MAX_ENABLED_ROLES.
Dans ce cas, l'utilisateur doit posséder un role par défaut défini par la commande ALTER
USER;il peut changer de rôle, s’il en a reçu le droit, avec la commande
SET ROLE role_name IDENTIFIED BY password
Un profile est défini par un ensemble de paramètres qui permettent de limiter les
consommations de ressources d’un utilisateur: temps CPU, opérations d’entrées-sorties, temps
d’innocupation, temps d’occupation, espace mémoire, sessions courantes.
Les profiles permettent de restreindre les grosses consommations de ressources des
utilisateurs, d’être sûr que les utilisateurs sont déconnectés lorsqu’ils ont quitté leur poste de
travail, de regrouper les utilisateurs ayant les mêmes fonctions et les mêmes charges de
travail.
Il existe un profile DEFAULT, assigné par défaut à tous les utilisateurs, initialement sans
limites.
Un profile est défini par la commande CREATE PROFILE et peut être affecté à un utilisateur
par les commandes CREATE USER ou ALTER USER.
----------------------------------------------------------------------------------------------------------------------------------------
Université de Nice-Sophia Antipolis 34 ©JC Grattarola
Administration d'une base de données Oracle7 Gestion des utilisateurs
CONNECT_TIME
IDLE_TIME
LOGICAL_READS_PER_SESSION
LOGICAL_READS_PER_CALL
COMPOSITE_LIMIT
PRIVATE_SGA integer K/M / UNLIMITED /DEFAULT
Le dictionnaire de données contient toutes les informations sur chaque utilisateur et chaque
profil; ces informations sont conservées dans les vues suivantes:
V- LE SCHEMAS
A chaque utilisateur est associé un schéma: ensemble des objets accessibles à cet utilisateur:
tables, index, vues, séquences, synonymes, clusters, database links, procédures et packages.
A chaque schéma correspond un espace logique de stockage dans un tablespace de la base de
données; il n’y a pas de relation entre un schéma et un tablespace: un tablespace peut contenir
plusieurs schémas et un schéma peut être situé sur plusieurs tablespaces.
Un schéma est défini par la requête CREATE SCHEMA qui garantit la création de plusieurs
tables vues et droits en une seule opération.
VI-QUESTIONS
I/ Créer les tablespaces APPLI,TEMP et RBS avec les mêmes caractéristiques que le
tablespace <login>
Vérifier que tous les utilisateurs ont été créés dans les bons tablespaces
----------------------------------------------------------------------------------------------------------------------------------------
Université de Nice-Sophia Antipolis 35 ©JC Grattarola
Administration d'une base de données Oracle7 Gestion des utilisateurs
VIII/ Dans quels tablespaces ont été créées ces deux tables?
IX/ Donner à UTIL1 la possibilité de visualiser en une seule requête le nom des employés
(emp.ename) et leur lieu de travail (dept.loc) (sans pouvoir visualiser les autres champs des
tables emp et dept).
----------------------------------------------------------------------------------------------------------------------------------------
Université de Nice-Sophia Antipolis 36 ©JC Grattarola
Administration d'une base de données Oracle7 Gestion des utilisateurs
XI/ Donner à UTIL2 la possibilité de mettre à jour uniquement la colonne LOC de la table
dept.
XIII/ Vérifier dans le dictionnaire de données la liste des privilèges de UTIL1 et UTIL2.
XIV/ Quelles conclusions pouvez-vous tirer sur les "rôles" des différents utilisateurs
XVI/ Connectez vous sur un compte adéquat et créez les rôles R1 et R2.
XVII/ Sans lui donner explicitement les privilèges, faites en sorte que <login> puisse créer
des tables, des vues et/ou des synonymes.
XVIII/ Vérifier que <login> peut effectivement créer des tables et des synonymes
XIX/ Sans vous déconnecter du compte <login>, faites en sorte qu’il ne puisse plus créer de
synonymes mais toujours créer des tables
XX/ Sans vous déconnecter du compte <login>, faites en sorte qu’il ne puisse plus créer de
tables mais toujours créer des synonymes
XXIII/ Rechercher dans le dictionnaire de données, la liste des rôles existants ainsi que les
privilèges attribués à chaque rôle
XXIV/ Faire en sorte que UTIL1 et UTIL2 ne puissent ouvrir que 2 sessions simultanément et
ne puissent pas rester connectés plus de 2 minutes.
----------------------------------------------------------------------------------------------------------------------------------------
Université de Nice-Sophia Antipolis 37 ©JC Grattarola
Administration d'une base de données Oracle7 Mécanismes transactionels
MECANISMES TRANSACTIONNELS
Une base de données est dans un état cohérent si toutes les valeurs contenues dans la base
vérifient toutes les contraintes d’intégrité définies sur la base.
Une transaction est un ensemble d’ordres de mise à jour, INSERT, UPDATE ou DELETE,
qui font passer la base d’un état initial cohérent à un état final cohérent; elle se termine par un
ordre (explicite ou implicite) de validation (COMMIT) ou d’annulation (ROLLBACK).
Transactions concurrentes: Il y a concurrence d’accès à une donnée quand celle-ci doît être
modifiée simultanément par au moins deux transactions.
a/ Lecture cohérente
La lecture cohérente assure qu’une transaction non encore validée n’affecte en rien la
visualisation des données pour l’ensemble des utilisateurs:
- l’utilisateur initiateur de la transaction visualisera la donnée après sa modification
- les autres utilisateurs visualiseront la donnée avant sa modification
----------------------------------------------------------------------------------------------------------------------------------------
Université de Nice-Sophia Antipolis 38 ©JC Grattarola
Administration d'une base de données Oracle7 Mécanismes transactionels
SELECT solde
FROM comptes
WHERE num_compte = 7;
ROLLBACK;
exemple 2:
T1 T2
Début transaction
Début transaction
UPDATE comptes
SET solde = solde - 200
WHERE num_compte = 7;
SELECT sum(solde)
FROM comptes
WHERE num_compte in (7,16);
UPDATE compte
SET solde =solde + 200
WHERE num_compte = 16;
COMMIT;
Dans une même transaction, deux requêtes identiques ne donnent pas le même résultat,
celui_ci ayant été modifié entre temps par une autre transaction
T1 T2
Début transaction
Début transaction
SELECT Points
FROM resultat
WHERE num_cours = 5
and num_etudiant = 7;
UPDATE resultat
SET Points =Points+2
WHERE num_cours = 5
and num_etudiant = 7;
SELECT Points
FROM resultat
WHERE num_cours = 5
and num_etudiant = 7;
COMMIT;
La lecture de points n’est pas reproductible.
----------------------------------------------------------------------------------------------------------------------------------------
Université de Nice-Sophia Antipolis 39 ©JC Grattarola
Administration d'une base de données Oracle7 Mécanismes transactionels
T1 T2
Début transaction
Début transaction
SELECT nb_places_dispo
INTO dispo
FROM vol
WHERE num_vol = 10
AND date_vol = ‘1-MAR-96’;
SELECT nb_places_dispo
INTO dispo
FROM vol
WHERE num_vol = 10
AND date_vol = ‘1-MAR-96’;
Par la commande
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE/READ COMITTED,
Oracle permet deux niveaux d'isolation des transactions les unes par rapport aux autres.
READ COMITTED: mode de fonctionnement par défaut d'Oracle; il évite les lectures
incohérentes ou les pertes de mise à jour mais pas les lectures non répétitives.
SERIALIZABLE: cette option empêche une transaction de modifier une donnée mise à jour
par une autre transaction non validée; on évite ainsi les anomalies de lecture non répétitive.
Ce mode est pénalisant car il limite le fonctionnement en parallèle des transactions.
----------------------------------------------------------------------------------------------------------------------------------------
Université de Nice-Sophia Antipolis 40 ©JC Grattarola
Administration d'une base de données Oracle7 Mécanismes transactionels
Pour gérer les concurrences d’accès aux données, Oracle utilise des mécanismes de
verrouillage et la notion de transaction.
Il n’existe pas de concurrence d’accès aux données en LECTURE: un utilisateur qui lit une
donnée n’interferera pas avec une transaction; une transaction n’interferera pas avec une
opération de lecture de la même donnée.
Il existe une concurrence d’accès en MISE A JOUR: la première transaction qui accède à la
donnée est prioritaire et positionne un verrou sur les ressources accédées(table ou ligne).
Deux types de verrous:
Les verrous exclusifs: la première transaction qui verrouillera la ressource de façon exclusive
sera la seule à pouvoir la modifier.
Les verrous partagés: ils assurent le partage des ressources en fonction du type d’opération
effectué sur ces ressources.
Les verrous sont tous maintenus sur les ressources jusqu’à la fin de la transaction; ils sont
libérés quand la transaction est validée ou annulée.
Dans ce cas, seules les opérations de lecture sont autorisées, les autres utilisateurs peuvent
modifier les ressources, les données validées par d’autres transactions ne seront pas visibles.
L’ordre SET TRANSACTION READ ONLY est obligatoirement la première instruction de la
transaction; les seules autres instructions autorisées dans la transaction sont SELECT (sans la
clause FOR UPDATE), COMMIT, ROLLBACK ou une non-DML instruction (SET ROLE,
ALTER SYSTEM, LOCK TABLE).
Le verrou exclusif: est posé sur l’objet si aucun autre type de verrou (DDL et DML) n’est pas
déja acquis.
Le verrou partagé: est posé sur l’objet si l’un des ordres suivants est utilisé:
AUDIT, NOAUDIT, GRANT, REVOKE, COMMENT,
CREATE(REPLACE)(TABLE/VIEW/SYNONYM/FUNCTION,PROCEDURE/PACKAGE)
.
----------------------------------------------------------------------------------------------------------------------------------------
Université de Nice-Sophia Antipolis 41 ©JC Grattarola
Administration d'une base de données Oracle7 Mécanismes transactionels
Le verrou de parsing: posé sur chaque objet référencé dans un ordre SQL et utilisé pour
déterminer si l’analyse stockée dans la zone de partage des ordres SQL ne serait pas obsolète
du fait d’un changement de structure de l’objet accédé.
Un verrou de type ROW SHARE (RS)interdit l'accès, aux autres utilisateurs, des
enregistrements sélectionnés pour une mise à jour ultérieure. Il
-verrouille les enregistrements concernés et attend la mise à jour
-autorise la visualisation de tous les enregistrements de la base, y compris ceux de la
table concernée par la transaction en cours
-autorise l’insertion, la mise à jour et la suppression de tous les enregistrements non
verrouillés, y compris dans la table concernée par la transaction en cours.
-est compatible avec les verrous RS,RX,S et SRX
-permet de se prémunir contre la pose d’un verrou X
-se pose de manière explicite par
SELECT....FROM table.....FOR UPDATE OF colonne
LOCK TABLE table IN ROW SHARE MODE [NOWAIT]
L’option NOWAIT rend le contrôle à la transaction si la table fait déja l’objet d’une
instruction LOCK de la part d’une autre transaction; si cette clause est omise, la transaction
est mise en attente jusqu’à la libération des verrous installés sur la table.
Un verrou de type ROW SHARE permet des accès concurrents à la table; il interdit à d’autres
transactions de placer un verrou EXCLUSIVE sur la table.
Un verrou de type ROW EXCLUSIVE (RX) est mis en place automatiquement par Oracle
avant l'exécution d'un ordre INSERT,UPDATE,DELETE; il permet à l'utilisaeur de modifier
certains enregistrements tout en laissant d'autres utilisateurs modifier d'autres enregistrements
de la même table. Il
-verrouille les enregistrements concernés et effectue la mise à jour dans la table
-autorise la visualisation de tous les enregistrements de la base, y compris ceux de la
table concernée par la transaction en cours
-autorise l’insertion, la modification et la suppression de tous les enregistrements non
verrouillés, y compris dans la table concernée par la transaction en cours
-est compatible avec les verrous RS et RX
----------------------------------------------------------------------------------------------------------------------------------------
Université de Nice-Sophia Antipolis 42 ©JC Grattarola
Administration d'une base de données Oracle7 Mécanismes transactionels
SHARE (S)
Un verrou de type SHARE (S) est employé lorsque la transaction utilise la table en
interrogation uniquement et exige que cette table ne soit pas modifiée par d’autres
transactions. Il
-empêche toutes les insertions, modifications et suppressions d’enregistrements dans
la table concernée si un autre verrou de type SHARE est déja positionné sur la table
-autorise la visualisation dans le but de verrouiller certains enregistrements dans la
table concernée par la transaction en cours
-est compatible avec un autre verrou RS ou S
-permet de se prémunir contre la pose de verrous RX, SRX et X
-se pose de manière explicite par
LOCK TABLE table IN SHARE MODE [NOWAIT]
exemple:
UPDATE emp
SET sal = sal *1.1
WHERE deptno in (SELECT deptno FROM dept WHERE loc = ‘DALLAS’)
UPDATE budget
SET total = total * 1.1
WHERE deptno in (SELECT deptno FROM dept WHERE loc = ‘DALLAS’)
COMMIT
Plusieurs transactions peuvent installer un verrou de type SHARE sur la même table en même
temps.
Un verrou de type SHARE ROW EXCLUSIVE (SRX) est employé pour visualiser une
table entière; il permet aux autres transactions de visualiser les lignes mais leur interdit de
verrouiller la table en mode SHARE ou de faire des mises à jour. Il
-empêche toutes insertions, modifications et suppressions d’enregistrements dans la
table concernée par la transaction en cours
----------------------------------------------------------------------------------------------------------------------------------------
Université de Nice-Sophia Antipolis 43 ©JC Grattarola
Administration d'une base de données Oracle7 Mécanismes transactionels
EXCLUSIVE (X)
Un verrou de type EXCLUSIVE est employé lorsque la transaction exige un accès immédiat à
la table pour réaliser une opération de mise à jour; il autorise les interrogations mais interdit
toute autre action.
Ce mode est très contraignant pour les autres utilisateurs; le déblocage de la table doit être très
rapide; un verrouillage en mode EXCLUSIVE doit être suivi rapidement d'un COMMIT ou
d'un ROLLBACK.
III-QUESTIONS
I/Montrer que les trois cas d’incohérence, lecture impropre, lecture non reproductible et perte
de mise à jour ne peuvent pas se produire avec les verrous posés automatiquement par Oracle.
Pour cela vous simulerez deux transactions essayant de mettre simultanément à jour les
mêmes données en ouvrant deux transactions sqlplus
-l’une par l’utilisateur ADMIN, propriétaire de la table dept
-l’autre par l’utilisateur DEVEL, propriétaire de la table emp
Les deux utilisateurs auront les privilèges d’interrogation et de mise à jour sur les deux tables.
II/Donner aux deux utilisateurs DEVEL et ADMIN le privilège LOCK ANY TABLE.
En utilisant uniquement la table admin.dept, montrer les diverses possibilités offertes par les
différents types de verrous.
ADMIN verrouillant la table dept successivement dans les modes ROW SHARE, ROW
EXCLUSIVE, SHARE, SHARE ROW EXCLUSIVE et EXCLUSIVE , examinez, dans
chaque cas, les diverses possibilités pour DEVEL de poser des verrous sur cette table ou
d’effectuer des mises à jour sur un enregistrement que ADMIN aura verrouillé ou non
auparavant ex :les transactions essaieront d’effectuer la mise à jour suivante:
update admin.dept set loc = ‘NEW YORK’ where deptno=20.
----------------------------------------------------------------------------------------------------------------------------------------
Université de Nice-Sophia Antipolis 44 ©JC Grattarola
Administration d'une base de données Oracle7 Optimisation des traitements
L’obtention de bonnes performances d’une application dépend d’une bonne définition des
structures(logiques et physiques) de mémorisation de l’information et de l’efficacité du
traitement des ordres SQL.
L’allocation appropriée de ressources mémoire peut avoir un large impact sur les
performances; ces ressources sont les zones de traitement SQL et PL/SQL, le dictionnaire de
données et le buffer; une bonne définition de ces ressources entrainera une amélioration des
performances par la réduction de l’analyse des ordres SQL ou PL/SQL et de la pagination.
La répartition des données sur les disques permettra de diminuer le nombre d’entrées/sorties.
Il est conseillé de mémoriser sur des disques différents:
- les fichiers data files et les fichiers Redo Log
- les tables de données
- les tables et les index
Une amélioration des performances sera également obtenue par une définition appropriée de
la taille des rollback segments, de l’architecture des serveurs partagés et des buffers Redo Log
et des zones mémoire réservées aux opérations de tri.
Le traitement de tout ordre SQL Oracle nécessite plusieurs phases successives: PARSE,
BIND,DESCRIBE, DEFINE,EXECUTE et FETCH.
----------------------------------------------------------------------------------------------------------------------------------------
Université de Nice-Sophia Antipolis 45 ©JC Grattarola
Administration d'une base de données Oracle7 Optimisation des traitements
DESCRIBE récupère dans le dictionnaire de données les descriptions précises des colonnes
manipulées dans l’ordre SQL (dans le cas de SQL dynamique uniquement).
DEFINE est la phase d’identification des zones mémoire, de leur taille et de leurs types pour
chacune des colonnes devant être rapatriées lorsqu’il s’agit d’un ordre SELECT.
EXECUTE permet au client de demander la constitution d’une liste de tuples dans le cas du
SELECT ou simplement l’exécution de l’ordre SQL dans les autres cas, en communiquant au
serveur les valeurs des variables définies dans la phase BIND précédente.
FETCH permet au client de recevoir tout ou partie des données de la liste constituée dans
l’étape précédente, pour les ordres SELECT.
Open Cursor
Parse
Bind
Oui
Select
?
Describe
Define
Execute
Non
Select
?
Fetch
Fetch
autres
Oui
Close Cursor
----------------------------------------------------------------------------------------------------------------------------------------
Université de Nice-Sophia Antipolis 46 ©JC Grattarola
Administration d'une base de données Oracle7 Optimisation des traitements
Les 6 phases de traitement d’un ordre SQL sont effectuées à l’initiative du client qui pilote le
serveur; pour cela, le client fait réserver, sur le serveur, une zone mémoire appelée ‘curseur’
(OPEN CURSOR en PL/SQL). Les phases de PARSE,DESCRIBE,EXECUTE et FETCH
nécessitent un échange entre le client et le serveur tout comme la demande de réservation de
curseur sur le serveur; il faut donc en théorie 5 échanges entre le client et le serveur pour
ramener un tuple. Pour diminuer ce nombre, Oracle utilise la technologie ARRAY qui
rapporte en seul FETCH plusieurs tuples.
Généralement, les ordres SQL effectués dans une application sont toujours les mêmes, seules
changent les valeurs des variables. Il n’est donc pas nécessaire de refaire toutes les phases de
traitement de l’ordre SQL à chaque nouvelle exécution, pas plus que de libérer le curseur sur
le serveur pour en réallouer un nouveau par la suite. Il suffit simplement de refaire les phases
de BIND,d’EXECUTE et éventuellement de FETCH et donc de ne générer qu’un seul
échange au lieu de deux, afin de ne pas consommer inutilement de la CPU sur le serveur pour
des opérations déja réalisées.
Pour exécuter un ordre SQL (phase EXECUTE), Oracle effectue plusieurs étapes qui
consistent à retrouver des enregistrements dans la base ou à préparer l’ordre suivant; la
combinaison d’étapes choisie par l’optimiseur est appelée execution plan
Le tableau suivant présente les différentes opérations possibles:
----------------------------------------------------------------------------------------------------------------------------------------
Université de Nice-Sophia Antipolis 47 ©JC Grattarola
Administration d'une base de données Oracle7 Optimisation des traitements
Pour choisir un plan d’exécution,l’optimiseur utilise une des deux approches suivantes:
rule-based ou cost-based.
- rule-based: l’optimiseur examine les possibilités d’accès dans l’ordre de priorité suivant:
- génération d’un ensemble de plans d’exécution basés sur les chemins d’accès
possibles
- estimation des coûts de chaque plan basée sur la distribution des données et les
caractéristiques de stockage des tables, clusters et index
- choix du plan de moindre coût
----------------------------------------------------------------------------------------------------------------------------------------
Université de Nice-Sophia Antipolis 48 ©JC Grattarola
Administration d'une base de données Oracle7 Optimisation des traitements
- la recherche du plan d’exécution pour une requête est excellente ou bien meilleure
que celui choisi par l’optimisation basée sur les règles pour de nombreuses
requêtes(spécialement pour de grandes requêtes avec des jointures multiples)
- le réglage manuel de la syntaxe des requêtes n’est pas nécessaire dans beaucoup de
cas (augmentation de la productivité)
- il permet au développeur de l’application de choisir entre l’optimisation de coûts ou
de règles
°les requêtes actuelles peuvent tourner sans être changées
°l’utilisateur doit faire un choix entre les deux méthodes et prendre la plus
efficace
L’optimisation basée sur les coûts sera choisie pour toutes les nouvelles applications et pour
certaines requêtes spécifiques.
L’optimisation basée sur les règles sera choisie:
-pour les requêtes sur les tables où la taille et la distribution des données changent
souvent
-pour les requêtes avec des jointures qui peuvent être réglées manuellement
-quand la création de statistiques n’est pas possible
La commande EXPLAIN PLAN décrit le plan choisi par l’optimiseur pour exécuter l’ordre
SQL.
EXPLAIN PLAN
set statement_id =‘Nom_req’
FOR select ename,job,sal,dname
from emp,dept
where emp.deptno = dept.deptno
and not exists (select * from salgrade
where emp.sal between losal and hisal)
----------------------------------------------------------------------------------------------------------------------------------------
Université de Nice-Sophia Antipolis 49 ©JC Grattarola
Administration d'une base de données Oracle7 Optimisation des traitements
Le résultat de la commande EXPLAIN PLAN est mémorisé dans une table plan_table qui
contient les colonnes suivantes:
Select operation,options,object_name,id,parent_id,position
From plan_table
Where statement_id = ‘Nom_req’ Order by id
Operation Options Object_name ID Parent_ID Position
Select statement 0 5
Filter 1 0 0
Nested loops 2 1 1
Table access Full Emp 3 2 1
Table access Full Dept 4 2 2
Table access Full Salgrade 5 1 3
FILTER
1
----------------------------------------------------------------------------------------------------------------------------------------
Université de Nice-Sophia Antipolis 50 ©JC Grattarola
Administration d'une base de données Oracle7 Optimisation des traitements
Les opérations symbolisées par un cercle gris indiquent un accès à la base de données, celles
symbolisées par un cercle clair indiquent un traitement en mémoire.
V- La commande ANALYZE
Pour une table, ANALYZE fournit le nombre de lignes,le nombre de blocs contenant des
données,le nombre de blocks alloués à la table jamais utilisés, l’espace libre moyen par bloc
(en bytes), le nombre de lignes chaînées, la longueur moyenne d’une ligne (avec en-tête), le
nombre de valeurs distinctes pour chaque colonne,la valeur minimum et la valeur maximum
pour chaque colonne.
Pour un cluster, ANALYZE fournit le nombre moyen de blocs de données par valeur de clé
de cluster (avec les données).
Pour un index, ANALYZE fournit la profondeur de l’arborescence,le nombre de blocs
feuilles, le nombre de valeurs distinctes de la clé, le nombre moyen de blocs feuilles par
valeur de clé,le nombre moyen de blocs de données pointé par valeur de clé, taux des données
triées dans le segment de données, par rapport à la clé d’index.
Ces statistiques apparaissent dans les vues relatives à ces objets: *_TABLES,
*_TAB_COLUMNS, *_CLUSTERS, *_INDEXES. Par défaut, l’analyse se fait sur 1064
lignes; si cette valeur représente plus de la moitié des lignes ou des clés, l’analyse se fait sur la
totalité.
La SQL trace facility fournit des informations sur les ordres SQL. Elle génère les statistiques
suivantes:
-nombre d’opérations de type PARSE,EXECUTE et FETCH (count)
-temps CPU (CPU) et temps total (elapsed) en secondes
-nombre de lectures logiques (query pour SELECT
current pour INSERT,UPDATE ou DELETE)
-nombre de lectures physiques (disk)
-nombre d’enregistrements traités (rows)
Le fichier trace est mémorisé dans le répertoire défini par le paramètre user_dump_dest; les
statistiques de temps (cpu,elapsed) seront calculées si le paramètre timed_statistics est
positionné à true.
ALTER SESSION
SET sql_trace = TRUE
Les informations fournies sont mémorisées dans un fichier du répertoire désigné par le
paramètre USER_DUMP_DEST du fichier init.ora
----------------------------------------------------------------------------------------------------------------------------------------
Université de Nice-Sophia Antipolis 51 ©JC Grattarola
Administration d'une base de données Oracle7 Optimisation des traitements
filename1: nom du fichier fourni par trace_facility; l sous unix filename1 a pour valeur
ora_spid.trc, spid étant le numéro du processus exécutant la session sqlplus. Sa valeur est
obtenue par la commande SQL
Select spid from v$process where username = lower(USER)
Exemple:
select nomemp
from personnel
where nomemp like '_K%'
call count cpu elapsed disk query current rows
----- ------- ----- ------- ----- ------ ------- -----
Parse 1 0.06 0.06 0 0 0 0
Execute 1 0.00 0.0 0 0 0 0
Fetch 12 0.40 0.48 463 475 4 166
------ ------- ----- ------- ----- ------ ------- -----
total 14 0.46 0.54 463 475 4 166
----------------------------------------------------------------------------------------------------------------------------------------
Université de Nice-Sophia Antipolis 52 ©JC Grattarola
Administration d'une base de données Oracle7 Optimisation des traitements
select nomemp
from personnel
where numemp =8765
VII-QUESTIONS
----------------------------------------------------------------------------------------------------------------------------------------
Université de Nice-Sophia Antipolis 53 ©JC Grattarola
Administration d'une base de données Oracle7 Optimisation des traitements
IV/ L’option trace_facility étant activée, exécuter ces requêtes .Appliquer la commande
TKPROF (le nom du fichier trace vous sera fourni) et commenter les résultats obtenus dans le
fichier<login>.trc.
----------------------------------------------------------------------------------------------------------------------------------------
Université de Nice-Sophia Antipolis 54 ©JC Grattarola
Administration d'une base données Oracle7 Outils d'administration
OUTILS D'ADMINISTRATION
I- EXPort/IMPort
SAUVEGARDE
Base
Source EXPORT
Fichier OS
RESTAURATION
IMPORT
Base
Cible
-mode TABLE: seules les tables appartenant à l'utilisateur peuvent être exportées
-mode USER: tous les objets appartenant à l'utilisateur peuvent être exportés
-mode FULL: tous les objets de la base peuvent être exportés
(rôle EXP_FULL_DATABASE)
En mode FULL, il existe 3 types d'EXPort:
-COMPLETE: toutes les données sont exportées
-CUMULATIVE: seules les tables modifiées depuis le dernier EXPort
CUMULATIVE ou COMPLETE sont exportées
-INCREMENTAL: seuls les objets modifiés depuis le dernier EXPort sont
exportés
----------------------------------------------------------------------------------------------------------------------------------------
Université de Nice-Sophia Antipolis 55 ©JC Grattarola
Administration d'une base données Oracle7 Outils d'administration
PARAMETRES
IMPort permet de charger des données à partir d'un fichier créé par EXPort. On utilise
IMPort pour
----------------------------------------------------------------------------------------------------------------------------------------
Université de Nice-Sophia Antipolis 56 ©JC Grattarola
Administration d'une base données Oracle7 Outils d'administration
PARAMETRES
II-SQL*LOADER
SQL*LOADER est un outil d'administration utilisé pour charger les données d'un ou
plusieurs fichiers séquentiels dans une ou plusieurs tables. La figure suivante présente son
mode de fonctionnement.
----------------------------------------------------------------------------------------------------------------------------------------
Université de Nice-Sophia Antipolis 57 ©JC Grattarola
Administration d'une base données Oracle7 Outils d'administration
FICHIER SOURCE
CONTROL
Contrôle de la structure
des enregistrements SQL*LOADER
rejetés
acceptés
évaluation de la
clause WHEN BAD
SQL*LOADER
éliminés
sélectionnés
rejetés
DISCARD
NOYAU
LOG
insérés
DATABASE
----------------------------------------------------------------------------------------------------------------------------------------
Université de Nice-Sophia Antipolis 58 ©JC Grattarola
Administration d'une base données Oracle7 Outils d'administration
SQL*LOADER permet de
-charger des données à partir d’un ou plusieurs fichiers de différents types
-charger des enregistrements de longueur fixe ou variable
-manipuler des données à l’aide de fonctions SQL avant de les insérer dans la base
-traiter des données de différents types, y compris DATE, BINARY, PACKED
DECIMAL, ZONED DECIMAL
-charger plusieurs tables simultanément, en sélectionnant les enregistrements
-regrouper plusieurs enregistrements physiques en un enregistrement logique
-traiter un enregistrement physique comme plusieurs enregistrements logiques
-générer des clés séquentielles et uniques
-fournir des messages d’erreur
-utiliser un dispositif d’accès direct pour charger rapidement les données dans les
fichiers database
en entrée
-DATA: des données à charger dans la base
-CONTROL: description du programme de chargement et éventuellement des
enregistrements du fichier DATA
en sortie
-BAD: liste des enregistrements ne correspondant pas à la description contenue dans
le fichier CONTROL et rejetés par le noyau Oracle
- DISCARD: liste des enregistrements rejetés à la suite d'un test utilisateur dans le
fichier CONTROL
-LOG: statistiques sur le déroulement de l’opération
[BADFILE 'badfile_name]
[DISCARDFILE 'discardfile_name']
----------------------------------------------------------------------------------------------------------------------------------------
Université de Nice-Sophia Antipolis 59 ©JC Grattarola
Administration d'une base données Oracle7 Outils d'administration
[structure de la table]
Le fichier log
exemple:
SQL*Loader: Release 7.3.2.1.0 - Production on Fri Jan 24 10:46:44 1997
Table "JCG"."DEPART":
7 Rows successfully loaded.
----------------------------------------------------------------------------------------------------------------------------------------
Université de Nice-Sophia Antipolis 60 ©JC Grattarola
Administration d'une base données Oracle7 Outils d'administration
Lancement de SQL*LOADER
L'appel à SQL*LOADER se fait par la commande sqlldr qui peut avoir les paramètres
suivants:
-userid= login/password
-control= nom du fichier control (.ctl)
-log= nom du fichier log (.log)
-bad= nom du fichier bad (.bad)
-data= nom du fichier data (.dat)
-discard= nom du fichier discard (.dsc)
Chemin "traditionnel"
Oracle utilise le chargement en tableau (ARRAY) et le verbe INSERT; il contrôle les
contraintes d'intégrité et exécute les triggers Base de données; il conserve les traces d'insertion
dans un fichier LOG et met à jour les index existants.
Chemin "direct"
Ce chemin est choisi en positionnant le paramètre DIRECT à TRUE; il y a inhibition du
contrôle des contraintes d'intégrité référentielle et des triggers Base de données; seules restent
actives les contraintes NOT NULL, UNIQUE et PRIMARY KEY.
----------------------------------------------------------------------------------------------------------------------------------------
Université de Nice-Sophia Antipolis 61 ©JC Grattarola
Administration d'une base données Oracle7 Outils d'administration
-Common Services:
----------------------------------------------------------------------------------------------------------------------------------------
Université de Nice-Sophia Antipolis 62 ©JC Grattarola
Administration d'une base données Oracle7 Outils d'administration
IV-QUESTIONS
I/ A l’aide des utilitaires EXPort et IMPort, transférer les données de votre table dept de la
base <login> dans la table dept de la base IUP; écrire une procédure qui puisse être lancée
automatiquement.
----------------------------------------------------------------------------------------------------------------------------------------
Université de Nice-Sophia Antipolis 63 ©JC Grattarola
Administration d'une base de données Oracle7 Sauvegarde et Restauration
Une des plus importantes tâches de l'administrateur de la base de données est la planification
et la mise en place des procédures de sauvegarde et de restauration de la base. Cette
planification est guidée par plusieurs critères:
-est-il acceptable de perdre des données et, si oui, dans quelles limites?
-la base doit-elle être accessible en permanence?
-quel est le délai acceptable de restauration au niveau de l'utilisation de la base?
-quelle est la fréquence d'évolution des données?
-les modifications physiques de la base sont-elles nombreuses?
Erreur accidentelle: suppression de tables ou d'autres objets; de telles erreurs peuvent être
évitées grâce aux dispositifs de confidentialité d'Oracle et à des contrôles stricts au niveau des
programmes utilisateurs.
Panne sur une commande SQL: en présence d'un problème d'allocation d'extensions ou
autres, Oracle renvoie un code d'erreur et annule les commandes de cette transaction pour
rétablir la cohérence de la base de données
Panne d'un processus: si un processus s'arrête brutalement sans avoir validé ou annulé les
transactions en cours, le processus PMON détecte cet état, se connecte automatiquement sur
le compte disparu pour valider ou annuler la transaction et libérer les ressources (verrous)
détenues par ce processus.
Panne réseau: une panne réseau peut interrompre l'exécution normale d'une application
cliente et provoquer une panne de processus; cette panne sera résolue par le processus PMON
de la même manière que précédemment. En cas de transaction répartie, une fois que le
problème réseau est résolu, le processus RECO de chaque noeud participant à la transaction
résout le même problème de son coté.
Panne d'instance: une panne matériel ou logiciel peut empêcher une base Oracle de continuer
à fonctionner. La base s'arrête dans un état incohérent: certaines modifications validées n'ont
pas encore été transmises aux fichiers de données mais existent sur les journaux de reprise;
inversement certaines modifications non validées ont déja été transmises aux fichiers de
données (mais leur image avant existe dans le segments Rollback). Au démarrage, Oracle
détecte automatiquement que l'arrêt précédent ne provient pas d'une fermeture (shutdown)
propre et le processus SMON effectue le "Roll-forward" de l'ensemble des modifications
présentes dans les journaux de reprise, suivi de l'annulation des transactions non validées.
Panne disque: une cause matériel peut empêcher de lire et d'écrire sur les fichiers concernés
par les transactions en cours. Le cas le plus fréquent est l'erreur I/O sur l'un des fichiers de la
base (données, reprise, contrôle) ; une restauration appropriée dépend du type de fichier
perdu.
----------------------------------------------------------------------------------------------------------------------------------------
Université de Nice-Sophia Antipolis 64 ©JC Grattarola
Administration d'une base de données Oracle7 Sauvegarde et Restauration
Les opérations d'Oracle après une panne affectant le journal de reprise ou le fichier de
contrôle dépendent de la présence de fichiers miroir. En présence d'un miroir du fichier
reprise en ligne endommagé, Oracle continue à fonctionner sans interruption; dans le cas
contraire, les opérations d'Oracle s'arrêtent et peuvent provoquer des pertes de données.
Oracle s'arrête si le fichier Control est endommagé, qu'il y ait fichier miroir ou non.
-Oracle détecte une erreur de lecture sur un fichier de données, un code d'erreur est
renvoyé à l'utilisateur et Oracle continue à fonctionner
-Oracle détecte une erreur d'écriture : si le fichier de reprise en ligne plein est archivé,
une erreur est retournée par le fichier de trace et le tablespace endommagé est mis
automatiquement offline; si le fichier de reprise en ligne plein n'est pas archivé, le processus
DBWR s'arrête et l'instance se bloque.
Le premier fichier est nécessaire pour la lecture, les autres sont seulement écrits chaque fois
qu'il est nécessaire de mettre à jour le fichier de contrôle.
Une instance devient inopérante quand le premier fichier de contrôle n'est plus disponible. Il
faut donc fermer la base et la redémarrer pour que le système pointe sur le fichier suivant. Il
est recommandé d'avoir un minimum de deux fichiers de contrôle, localisés si possible sur des
disques distincts.
Si une panne disque affecte les fichiers de données de la base, et si un recouvrement
incomplet recouvrant une certaine période est désiré, c'est la sauvegarde du fichier de contrôle
correspondant à l'intention souhaitée qui est utilisée et pas nécessairement le fichier de
contrôle courant.
----------------------------------------------------------------------------------------------------------------------------------------
Université de Nice-Sophia Antipolis 65 ©JC Grattarola
Administration d'une base de données Oracle7 Sauvegarde et Restauration
Chaque journal de reprise possède un numéro de séquence journal qui s'incrémente chaque
fois que l'interrupteur journal se produit. Le fichier de contrôle mémorise le plus récent
numéro de séquence journal.
CHECKPOINT
Un autre évènement nommé checkpoint se produit quand le processus DBWR enregistre sur
les fichiers de données tous les buffers modifiés de la SGA, qu'ils soient validés ou non. Cet
évènement garantit que tous les blocs de segments de données qui changent fréquemment,
soient écrits dans les fichiers de données à intervalles réguliers.
Un checkpoint complet garantit que toutes les données modifiées depuis le dernier checkpoint
sont réellement écrites sur le disque. Il peut se produire pour tous les fichiers de données et
plus particulièrement dans les situations suivantes:
-à chaque interrupteur journal
-à chaque valeur des paramètres: LOG_CHECKPOINT_INTERVAL et
LOG_CHECKPOINT_TIMOUT du fichier initSID.ora
-à chaque sauvegarde d'un tablespace activé
-chaque fois qu'un tablespace est désactivé
-à chaque fermeture de la base en mode NORMAL ou IMMEDIATE
-à chaque commande ALTER SYSTEM CHECKPOINT GLOBAL
Oracle offre la possibilité de créer des fichiers miroir sur les journaux de reprise; écrits par
LGWR d'une façon concurrente, ils garantissent une sécurité supplémentaire et une
disponibilité de haut niveau en présence d'un problème sur un journal de reprise. L' ensemble
de ces journaux est appelé un groupe et chaque journal du groupe est appelé un membre du
groupe. Un seul groupe est actif à la fois, et tous les journaux membres de ce groupe sont mis
à jour concurrement par le processus LGWR.
----------------------------------------------------------------------------------------------------------------------------------------
Université de Nice-Sophia Antipolis 66 ©JC Grattarola
Administration d'une base de données Oracle7 Sauvegarde et Restauration
ou par la commande
Les vues V$ARCHIVE etV$LOG donnent des informations sur la liste des journaux archivés;
la commande ARCHIVE LOG LIST (svrmgr) donne les informations suivantes: mode de
journalisation de la base de données, archivage automatique, destination des fichiers à
archiver, ancien numéro de séquence du journal de reprise en ligne, prochain numéro de
séquence du journal à archiver, numéro de séquence courant.
- Sauvegarde complète
La sauvegarde de tous les fichiers de la base (données, journaux, contrôle) doit être
réalisée après une fermeture propre (dans un état cohérent) de la base (shutdown normal). Si
la base opère en mode NOARCHIVELOG et si une panne disque affecte quelques fichiers,
seule la sauvegarde la plus récente peut être utilisée pour restaurer la base. Toutes les données
modifiées ou saisies depuis cette dernière sauvegarde doivent être ressaisies.
Si la base est en mode ARCHIVELOG, la sauvegarde la plus récente est utilisée comme
partie de recouvrement de la base; celui-ci peut être complété par par l'application des
journaux en ligne ou archivés pour restaurer les données modifiées entre la sauvegarde et la
panne.
- Sauvegarde partielle
Une sauvegarde partielle consiste à sauvegarder les fichiers d'un tablespace, un des
fichiers de données ou les fichiers de contrôle; cette sauvegarde peut être réalisée avec une
base ouverte ou fermée. La sauvegarde partielle est utile uniquement pour une base qui
fonctionne en mode ARCHIVELOG, car les journaux de reprise archivés permettent un
recouvrement de la base à partir des fichiers restaurés.
----------------------------------------------------------------------------------------------------------------------------------------
Université de Nice-Sophia Antipolis 67 ©JC Grattarola
Administration d'une base de données Oracle7 Sauvegarde et Restauration
Stratégies de sauvegarde
Si la réponse est non, la base doit opérer obligatoirement en mode ARCHIVELOG pour
sauvegarder les journaux de reprise pleins.
Si la réponse est oui, la base pourra opérer en mode NOARCHIVELOG et la fréquence des
sauvegardes dépendra de la tolérance de perte (1 jour ou 1 semaine par exemple).
----------------------------------------------------------------------------------------------------------------------------------------
Université de Nice-Sophia Antipolis 68 ©JC Grattarola
Administration d'une base de données Oracle7 Sauvegarde et Restauration
-exécution de la sauvegarde
*commande de l'operating system
*commande EXPORT
Les buffers Database sont écrits sur disque uniquement lorsque c’est nécessaire, en utilisant
l’algorithme LRU (Last Recently Used); les fichiers de données pevent ainsi contenir des
blocs de données modifiées par des transactions non validées et ne pas contenir des blocs de
données modifiées par des transactions validées (ces données modifiées sont contenues dans
le journal de reprise)
Pour résoudre ces problèmes, Oracle réalise la restauration de la base en deux étapes:
-la première étape d’un recouvrement consiste à appliquer aux fichiers de données
« l’image avant » du journal de reprise (roll-forward); cette opération consiste à enregistrer
toutes les modifications contenues dans des journaux en ligne et archivés sur les fichiers de
données et sur les rollback segments. Après cette opération, les fichiers de données
contiennent toutes les modifications, validées ou non.
-la seconde étape consiste à appliquer sur les fichiers de données « l’image arrière » à
partir des rollback segments; cette étape annule l’action des transactions non validées.
Le recouvrement d’une instance restaure la base dans l’état cohérent qu’elle possédait juste
avant la panne. Le noyau Oracle exécute automatiquement les étapes suivantes:
----------------------------------------------------------------------------------------------------------------------------------------
Université de Nice-Sophia Antipolis 69 ©JC Grattarola
Administration d'une base de données Oracle7 Sauvegarde et Restauration
Le mode de recouvrement après panne disque dépend du mode d’archivage dans lequel
opérait la base avant la production de la panne.
En mode NOARCHIVELOG, les journaux de reprise pleins sont réutilisés sans être archivés.
Le recouvrement consiste alors en une restauration de la sauvegarde complète la plus récente;
les modifications réalisées après cette dernière sauvegarde sont alors perdues.
En mode ARCHIVELOG, le recouvrement peut permettre de restaurer la base jusqu’à la
dernière transaction validée, juste avant la production de la panne.
Plusieurs cas de figure peuvent alors se présenter selon les types de fichiers perdus et selon la
disponibilité souhaitée de la base au moment du recouvrement.
Recouvrement complet
Il faut alors
-réparer ou changer le disque
-restaurer la sauvegarde la plus récente des fichiers endommagés
-se connecter comme INTERNAL
-démarrer une nouvelle instance sans ouvrir la base (STARTUP NOMOUNT)
-renommer et localiser les fichiers de données s’ils ne sont pas restaurés à l’endroit
d’origine
-activer tous les fichiers de données avec la commande
ALTER DATABASE DATAFILE nom_fich ONLINE
-soit démarrer le recouvrement de toute la base par la commande RECOVER
DATABASE soit démarrer le recouvrement d’un fichier endommagé par RECOVER
DATAFILE
-ouvrir la base avec la commande ALTER DATABASE nom_base OPEN
----------------------------------------------------------------------------------------------------------------------------------------
Université de Nice-Sophia Antipolis 70 ©JC Grattarola
Administration d'une base de données Oracle7 Sauvegarde et Restauration
Il faut alors
-désactiver les tablespaces endommagés
-réparer ou changer le disque
-restaurer les fichiers endommagés
-renommer et localiser les fichiers de données s’ils ne sont pas restaurés à l’endroit
d’origine
-lancer le recouvrement des tablespaces endommagés par les commandes RECOVER
TABLESPACE ou RECOVER DATAFILE
-le noyau Oracle applique les journaux de reprise archivés et en ligne pour produire
l’image avant « Roll Forward »
-les tablespaces endommagés sont restaurés et peuvent être mis en ligne par la
commande ALTER TABLESPACE nom_tablespace ONLINE
Recouvrement incomplet
Il faut alors
-fermer la base avec l’option ABORT
-démarrer une nouvelle instance avec l’option MOUNT
-mettre tous les fichiers de données en ligne
ALTER TABLSPACE DATAFILE nom_fich ONLINE
- ancer une des procédures de recouvrement suivantes:
RECOVER DATABASE UNTIL CANCEL
RECOVER DATABASE UNTIL TIME date
RECOVER DATABASE UNTIL CHANGE entier
En cas d’utilisation d’une sauvegarde d’un fichier de contrôle, l’option USING BACKUP
CONTROLFILE doît être spécifiée.
----------------------------------------------------------------------------------------------------------------------------------------
Université de Nice-Sophia Antipolis 71 ©JC Grattarola
Administration d'une base de données Oracle7 Sauvegarde et Restauration
----------------------------------------------------------------------------------------------------------------------------------------
Université de Nice-Sophia Antipolis 72 ©JC Grattarola
Administration d'une base données Oracle7 Le Dictionnaire de données
----------------------------------------------------------------------------------------------------------------------------------------
Université de Nice-Sophia Antipolis 73 ©JC Grattarola
Administration d'une base données Oracle7 Le Dictionnaire de données
----------------------------------------------------------------------------------------------------------------------------------------
Université de Nice-Sophia Antipolis 74 ©JC Grattarola
Administration d'une base données Oracle7 Le Dictionnaire de données
----------------------------------------------------------------------------------------------------------------------------------------
Université de Nice-Sophia Antipolis 75 ©JC Grattarola
Administration d'une base données Oracle7 Le Dictionnaire de données
ALL_COL_PRIVS_RECD : Grants on columns for which the user, PUBLIC or enabled role
is the grantee
ALL_CONSTRAINTS : Constraint definitions on accessible tables
ALL_CONS_COLUMNS : Information about accessible columns in constraint definitions
ALL_DB_LINKS : Database links accessible to the user
ALL_DEF_AUDIT_OPTS : Auditing options for newly created objects
ALL_DEPENDENCIES : Dependencies to and from objects accessible to the user
ALL_ERRORS : Current errors on stored objects that user is allowed to create
ALL_HISTOGRAMS : Histograms on columns of all tables visible to user
ALL_INDEXES : Descriptions of indexes on tables accessible to the user
ALL_IND_COLUMNS : COLUMNs comprising INDEXes on accessible TABLES
ALL_JOBS : Synonym for USER_JOBS
ALL_OBJECTS : Objects accessible to the user
ALL_REFRESH : All the refresh groups that the user can touch
ALL_REFRESH_CHILDREN : All the objects in refresh groups, where the user can touch
the group
ALL_SEQUENCES : Description of SEQUENCEs accessible to the user
ALL_SNAPSHOTS : Snapshots the user can look at
ALL_SOURCE : Current source on stored objects that user is allowed to create
ALL_SYNONYMS : All synonyms accessible to the user
ALL_TABLES : Description of tables accessible to the user
ALL_TAB_COLUMNS : Columns of user's tables, views and clusters
ALL_TAB_COMMENTS : Comments on tables and views accessible to the user
ALL_TAB_PRIVS : Grants on objects for which the user is the grantor, grantee, owner, or an
enabled role or PUBLIC is the grantee
ALL_TAB_PRIVS_MADE : User's grants and grants on user's objects
ALL_TAB_PRIVS_RECD : Grants on objects for which the user, PUBLIC or enabled role is
the grantee
ALL_TRIGGERS : Triggers accessible to the current user
ALL_TRIGGER_COLS : Column usage in user's triggers or in triggers on user's tables
ALL_UPDATABLE_COLUMNS : Description of all updatable columns
ALL_USERS : Information about all users of the database
ALL_VIEWS : Text of views accessible to the user
Informations diverses
AUDIT_ACTIONS : Description table for audit trail action type codes.Maps action type
numbers to action type names
CAT : Synonym for USER_CATALOG
CLU : Synonym for USER_CLUSTERS
COLS : Synonym for USER_TAB_COLUMNS
COLUMN_PRIVILEGES : Grants on columns for which the user is the grantor, grantee,
owner, or an enabled role or PUBLIC is the grantee
DICT : Synonym for DICTIONARY
DICTIONARY : Description of data dictionary tables and views
DICT_COLUMNS : Description of columns in data dictionary tables and views
DUAL :
GLOBAL_NAME : global database name
IND : Synonym for USER_INDEXES
----------------------------------------------------------------------------------------------------------------------------------------
Université de Nice-Sophia Antipolis 76 ©JC Grattarola
Administration d'une base données Oracle7 Le Dictionnaire de données
V$ACCESS : Objects that are currently locked and the sessions that are accessing them
V$ACTIVE_INSTANCES : Instances that have the database currently mounted
V$ARCHIVE : Information on archive logs for each thread in the database system
V$BACKUP : Backup status of all online datafiles
V$BGPROCESS : Background processes
V$CIRCUIT : Information about virtual circuits
V$COMPATIBILITY : Features in use by the database instance that may prevent
downgrading to a previous release
V$COMPATSEG : Permanent features in use by the database that will prevent moving back
to a earlier release
V$CONTROLFILE : Names of controlfiles
V$DATABASE : Database information from the control file
V$DATAFILE : Datafile information from the control file
V$DBFILE : Datafiles making up the database
V$DBLINK : All open database links
V$DB_OBJECT_CACHE : Database objects cached in the library cache
V$DB_PIPES : Pipes currently in the database
V$DISPATCHER : Information on the dispatcher processes
V$ENABLEDPRIVS : Privileges enabled
V$EVENT_NAME : Information about wait events
V$EXECUTION :
V$FILESTAT : Information about file read/write statistics
V$FIXED_TABLE : Dynamic performances tables, views and derived tables
V$FIXED_VIEW_DEFINITION : Definition of all fixed views (views beginning with v$)
V$INDEXED_FIXED_COLUMN : Columns in dynamic performances tables that are
indexed
V$INSTANCE : State of the current instance
V$LATCH : Statistics for latches
V$LATCHHOLDER : Information about the current latch holders
----------------------------------------------------------------------------------------------------------------------------------------
Université de Nice-Sophia Antipolis 77 ©JC Grattarola
Administration d'une base données Oracle7 Le Dictionnaire de données
----------------------------------------------------------------------------------------------------------------------------------------
Université de Nice-Sophia Antipolis 78 ©JC Grattarola
Administration d'une base données Oracle7 Le Dictionnaire de données
----------------------------------------------------------------------------------------------------------------------------------------
Université de Nice-Sophia Antipolis 79 ©JC Grattarola
Administration d'une base de données Oracle7 Les Privilèges Système
----------------------------------------------------------------------------------------------------------------------------------------
Université de Nice-Sophia Antipolis 80 ©JC Grattarola
Administration d'une base de données Oracle7 Les Paramètres d'environnement
----------------------------------------------------------------------------------------------------------------------------------------
Université de Nice-Sophia Antipolis 81 ©JC Grattarola
Administration d'une base de données Oracle7 Les Paramètres d'environnement
----------------------------------------------------------------------------------------------------------------------------------------
Université de Nice-Sophia Antipolis 82 ©JC Grattarola
Administration d'une base de données Oracle7 Les Paramètres d'environnement
----------------------------------------------------------------------------------------------------------------------------------------
Université de Nice-Sophia Antipolis 83 ©JC Grattarola
Administration d'une base de données Oracle7 Les Paramètres d'environnement
----------------------------------------------------------------------------------------------------------------------------------------
Université de Nice-Sophia Antipolis 84 ©JC Grattarola
Administration d'une base de données Oracle7 Scripts Création Base
# FICHIER initGEN.ora
#
# $Header: init.ora 7.14 94/04/07 11:39:16 nsingh Osd<unix> $ init.ora Copyr (c) 1991
Oracle
#
###########################################################################
###
# Example INIT.ORA file
#
# This file is provided by Oracle Corporation to help you customize
# your RDBMS installation for your site. Important system parameters
# are discussed, and example settings given.
#
# Some parameter settings are generic to any size installation.
# For parameters that require different values in different size
# installations, three scenarios have been provided: SMALL, MEDIUM
# and LARGE. Any parameter that needs to be tuned according to
# installation size will have three settings, each one commented
# according to installation size.
#
# Use the following table to approximate the SGA size needed for the
# three scenarious provided in this file:
#
# -------Installation/Database Size------
# SMALL MEDIUM LARGE
# Block 2K 4500K 6800K 17000K
# Size 4K 5500K 8800K 21000K
#
# To set up a database that multiple instances will be using, place
# all instance-specific parameters in one file, and then have all
# of these files point to a master file using the IFILE command.
# This way, when you change a public
# parameter, it will automatically change on all instances. This is
# necessary, since all instances must run with the same value for many
# parameters. For example, if you choose to use private rollback segments,
# these must be specified in different files, but since all gc_*
# parameters must be the same on all instances, they should be in one file.
#
# INSTRUCTIONS: Edit this file and the other INIT files it calls for
# your site, either by using the values provided here or by providing
# your own. Then place an IFILE= line into each instance-specific
# INIT file that points at this file.
----------------------------------------------------------------------------------------------------------------------------------------
Université de Nice-Sophia Antipolis 85 ©JC Grattarola
Administration d'une base de données Oracle7 Scripts Création Base
###########################################################################
####
db_file_multiblock_read_count = 8 # SMALL
# db_file_multiblock_read_count = 16 # MEDIUM
# db_file_multiblock_read_count = 32 # LARGE
log_checkpoint_interval = 10000
processes = 50 # SMALL
# processes = 100 # MEDIUM
# processes = 200 # LARGE
sequence_cache_entries = 10 # SMALL
# sequence_cache_entries = 30 # MEDIUM
# sequence_cache_entries = 100 # LARGE
sequence_cache_hash_buckets = 10 # SMALL
# sequence_cache_hash_buckets = 23 # MEDIUM
# sequence_cache_hash_buckets = 89 # LARGE
----------------------------------------------------------------------------------------------------------------------------------------
Université de Nice-Sophia Antipolis 86 ©JC Grattarola
Administration d'une base de données Oracle7 Scripts Création Base
# FICHIER cnfgGEN.ora
#
# $Header: cnfg.orc 7001200.1 93/01/28 11:00:21 pku Osd<unix> $ Copyr (c) 1992 Oracle
#
# cnfg.ora - instance configuration parameters
# Parametres de configurations d'une instance
#
control_files = (/home/oracle/data/GENERIC/cntrl1GEN.ctl,
/home/oracle/data/GENERIC/cntrl2GEN.ctl,
/home/oracle/data/GENERIC/cntrl3GEN.ctl)
# Below for possible future use...
#init_sql_files = (?/dbs/sql.bsq,
# ?/rdbms/admin/catalog.sql,
# ?/rdbms/admin/expvew.sql)
background_dump_dest = /home/oracle/data/GENERIC/bg
user_dump_dest = /home/oracle/data/GENERIC/user
core_dump_dest = /home/oracle/data/GENERIC/core
#log_archive_dest = /home/oracle/data/GENERIC/arch/arch.log
#db_block_size = <blocksize>
db_name = GEN
REM * Start the <GEN> instance (ORACLE_GEN here must be set to <GEN>).
----------------------------------------------------------------------------------------------------------------------------------------
Université de Nice-Sophia Antipolis 87 ©JC Grattarola
Administration d'une base de données Oracle7 Scripts Création Base
REM *
connect internal
startup nomount pfile=/home/oracle/data/GENERIC/scripts/initGEN.ora
shutdown immediate
disconnect
connect internal
# SQLDBA bug: if GEN is numeric, leads to syntax error.
startup open GEN pfile=/home/oracle/data/GENERIC/scripts/initGEN.ora
create rollback segment rs_GEN_r0 tablespace system
storage (initial 16k next 16k minextents 2 maxextents 10);
alter rollback segment rs_GEN_r0 online ;
----------------------------------------------------------------------------------------------------------------------------------------
Université de Nice-Sophia Antipolis 88 ©JC Grattarola
Administration d'une base de données Oracle7 Scripts Création Base
default storage (
initial 128k
next 128k
pctincrease 0
minextents 2
);
REM * Restart the instance to activate the the additional rollback segments.
REM *
shutdown immediate
disconnect
connect internal
# SQLDBA bug: if GEN is numeric, leads to syntax error.
----------------------------------------------------------------------------------------------------------------------------------------
Université de Nice-Sophia Antipolis 89 ©JC Grattarola
Administration d'une base de données Oracle7 Scripts Création Base
REM * For each DBA user, run DBA synonyms SQL script. Don't forget that EACH
REM * DBA USER created in the future needs dba_syn.sql run from its account.
REM *
connect system/manager
@/net4/oracle/rdbms/admin/catdbsyn.sql
connect sys/change_on_install
@/net4/oracle/rdbms/admin/catproc.sql
@/net4/oracle/rdbms/admin/cataudit.sql
spool off
----------------------------------------------------------------------------------------------------------------------------------------
Université de Nice-Sophia Antipolis 90 ©JC Grattarola
Administration d'une base de données Oracle7 Vue v$type_size
35 rows selected.
----------------------------------------------------------------------------------------------------------------------------------------
Université de Nice-Sophia Antipolis 91 ©JC Grattarola